summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/nds/sound/sound.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/arm/nds/sound/sound.c')
-rw-r--r--c/src/lib/libbsp/arm/nds/sound/sound.c223
1 files changed, 0 insertions, 223 deletions
diff --git a/c/src/lib/libbsp/arm/nds/sound/sound.c b/c/src/lib/libbsp/arm/nds/sound/sound.c
deleted file mode 100644
index 57fce47bb3..0000000000
--- a/c/src/lib/libbsp/arm/nds/sound/sound.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * RTEMS for Nintendo DS sound driver.
- *
- * Copyright (c) 2008 by Matthieu Bucchianeri <mbucchia@gmail.com>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- *
- * http://www.rtems.org/license/LICENSE
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <sys/types.h>
-
-#include <bsp.h>
-#include <rtems/irq.h>
-#include <rtems/libio.h>
-#include <nds.h>
-
-#include "sound.h"
-#include "../include/my_ipc.h"
-
-/*
- * default values.
- */
-
-static int volume = 64;
-static int pan = 64;
-static int freq = 11025;
-static int format = 0; // 0 is 8 bits and 1 is 16 bits
-static int offset = 0;
-
-/*
- * sound device driver initialize entry point.
- */
-
-rtems_device_driver
-sound_initialize (rtems_device_major_number major,
- rtems_device_minor_number minor, void *arg)
-{
- rtems_status_code status;
-
- printk ("[+] sound started\n");
-
- /* register the devices */
- status = rtems_io_register_name ("/dev/pcm", major, 0);
- if (status != RTEMS_SUCCESSFUL) {
- printk ("[!] error registering sound\n");
- rtems_fatal_error_occurred (status);
- }
-
- /* reset IPCs structs */
- IPC->soundData = NULL;
- memset ((void *)my_IPC, 0, sizeof (*my_IPC));
- DC_FlushAll ();
-
- return RTEMS_SUCCESSFUL;
-}
-
-/*
- * sound device driver open operation.
- */
-
-rtems_device_driver
-sound_open (rtems_device_major_number major,
- rtems_device_minor_number minor, void *arg)
-{
- return RTEMS_SUCCESSFUL;
-}
-
-/*
- * sound device driver close operation.
- */
-
-rtems_device_driver
-sound_close (rtems_device_major_number major,
- rtems_device_minor_number minor, void *arg)
-{
- return RTEMS_SUCCESSFUL;
-}
-
-/*
- * sound device driver read operation. read data from recorded microphone
- * samples.
- */
-
-rtems_device_driver
-sound_read (rtems_device_major_number major,
- rtems_device_minor_number minor, void *arg)
-{
- rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *) arg;
-
- /* check end of file */
- if (offset >= my_IPC->recorded_length) {
- rw_args->bytes_moved = 0;
-
- return RTEMS_SUCCESSFUL;
- }
-
- /* read buffer */
- memcpy ((void *)rw_args->buffer, (void *)my_IPC->record_buffer + offset, rw_args->count);
- offset += rw_args->count;
- rw_args->bytes_moved = rw_args->count;
- return RTEMS_SUCCESSFUL;
-}
-
-/*
- * sound device driver write operation. read a pcm sound.
- */
-
-rtems_device_driver
-sound_write (rtems_device_major_number major,
- rtems_device_minor_number minor, void *arg)
-{
- rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *) arg;
- static TransferSound snd;
-
- /* XXX not exclusive */
- while (IPC->soundData != NULL);
-
- snd.count = 1;
- snd.data[0].data = rw_args->buffer;
- snd.data[0].len = rw_args->count;
- snd.data[0].rate = freq;
- snd.data[0].vol = volume;
- snd.data[0].pan = pan;
- snd.data[0].format = format;
-
- IPC->soundData = &snd;
- DC_FlushAll ();
-
- rw_args->bytes_moved = rw_args->count;
- return RTEMS_SUCCESSFUL;
-}
-
-/*
- * ioctl entry point.
- */
-
-rtems_device_driver
-sound_control (rtems_device_major_number major,
- rtems_device_minor_number minor, void *arg)
-{
- rtems_libio_ioctl_args_t *args = arg;
- uint32_t *val = (uint32_t *) args->buffer;
-
- switch (args->command) {
- /* sound volume management */
- case SOUND_SVOL:
- volume = *val;
- break;
- case SOUND_GVOL:
- *val = volume;
- break;
- /* sound format settings */
- case SOUND_SFMT:
- switch (*val & SOUND_FREQ_MASK) {
- case SOUND_FREQ_11025:
- freq = 11025;
- break;
- case SOUND_FREQ_22050:
- freq = 22050;
- break;
- case SOUND_FREQ_44100:
- freq = 44100;
- break;
- case SOUND_FREQ_RECORD:
- freq = 16384;
- break;
- }
- format = (*val & SOUND_FORMAT_16) ? 1 : 0;
- printk ("[+] pcm %d bits @ %d hz\n", format ? 16 : 8, freq);
- break;
- case SOUND_GFMT:
- if (freq == 11025) {
- *val = SOUND_FREQ_11025;
- } else if (freq == 22050) {
- *val = SOUND_FREQ_22050;
- } else if (freq == 44100) {
- *val = SOUND_FREQ_44100;
- } else if (freq == 16384) {
- *val = SOUND_FREQ_RECORD;
- }
- *val |= format ? SOUND_FORMAT_16 : SOUND_FORMAT_8;
- break;
- /* sound pan settings */
- case SOUND_SPAN:
- pan = *val;
- break;
- case SOUND_GPAN:
- *val = pan;
- break;
- /* set recording buffer length */
- case SOUND_SRECLEN:
- my_IPC->record_buffer = malloc (*val);
- my_IPC->record_length_max = *val;
- printk ("[+] mic buffer %u B @ %p\n", my_IPC->record_length_max,
- my_IPC->record_buffer);
- break;
- /* start recording */
- case SOUND_STARTREC:
- my_IPC->recorded_length = 0;
- my_IPC->record = 1;
- break;
- /* stop recording */
- case SOUND_STOPREC:
- if (!my_IPC->record) {
- printk ("[!] STOPREC while not recording\n");
- }
- my_IPC->record = 0;
- while (my_IPC->recorded_length == 0);
- offset = 0;
- if (val != NULL) {
- *val = my_IPC->recorded_length;
- }
- break;
- default:
- break;
- }
- return RTEMS_SUCCESSFUL;
-}