aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gaudin
diff options
context:
space:
mode:
authorinmarket <andrewh@inmarket.com.au>2014-02-27 08:04:54 +1000
committerinmarket <andrewh@inmarket.com.au>2014-02-27 08:04:54 +1000
commita56e4ac7dcbf2776690c96656dbcb48b2cf2d818 (patch)
tree1570dc6c25a290197f23262f353b6123e8020356 /drivers/gaudin
parentf9495a75e1e1fa2f1b86b71de776aee3a4a815e9 (diff)
downloaduGFX-a56e4ac7dcbf2776690c96656dbcb48b2cf2d818.tar.gz
uGFX-a56e4ac7dcbf2776690c96656dbcb48b2cf2d818.tar.bz2
uGFX-a56e4ac7dcbf2776690c96656dbcb48b2cf2d818.zip
First GAUDOUT work. Still incomplete but compiling.
Also moved drivers/gaudin to drivers/audio as most audio codecs support input and output in a single device.
Diffstat (limited to 'drivers/gaudin')
-rw-r--r--drivers/gaudin/Win32/gaudin_lld.c178
-rw-r--r--drivers/gaudin/Win32/gaudin_lld.mk5
-rw-r--r--drivers/gaudin/Win32/gaudin_lld_config.h64
-rw-r--r--drivers/gaudin/Win32/readme.txt9
-rw-r--r--drivers/gaudin/gadc/gaudin_lld.c62
-rw-r--r--drivers/gaudin/gadc/gaudin_lld.mk5
-rw-r--r--drivers/gaudin/gadc/gaudin_lld_board_template.h50
-rw-r--r--drivers/gaudin/gadc/gaudin_lld_config.h59
8 files changed, 0 insertions, 432 deletions
diff --git a/drivers/gaudin/Win32/gaudin_lld.c b/drivers/gaudin/Win32/gaudin_lld.c
deleted file mode 100644
index e798f4ef..00000000
--- a/drivers/gaudin/Win32/gaudin_lld.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * This file is subject to the terms of the GFX License. If a copy of
- * the license was not distributed with this file, you can obtain one at:
- *
- * http://ugfx.org/license.html
- */
-
-/**
- * @file drivers/gaudin/Win32/gaudin_lld.c
- * @brief GAUDIN - Driver file for Win32.
- */
-
-#include "gfx.h"
-
-#if GFX_USE_GAUDIN
-
-/* Include the driver defines */
-#include "src/gaudin/driver.h"
-
-#undef Red
-#undef Green
-#undef Blue
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <stdio.h>
-#include <mmsystem.h>
-
-static HWAVEIN ah;
-static volatile int nUsedBuffers;
-static WAVEHDR *pWaveHdrs;
-static HANDLE waveInThread;
-static DWORD threadID;
-
-/*
-static void PrintWaveErrorMsg(DWORD err, TCHAR * str)
-{
- #define BUFFERSIZE 128
- char buffer[BUFFERSIZE];
-
- fprintf(stderr, "GAUDIN: ERROR 0x%08X: %s\r\n", err, str);
- if (mciGetErrorString(err, &buffer[0], sizeof(buffer)))
- fprintf(stderr, "%s\r\n", &buffer[0]);
- else
- fprintf(stderr, "0x%08X returned!\r\n", err);
-}
-*/
-
-/**************************** waveInProc() *******************************
- * We don't use CALLBACK_FUNCTION because it is restricted to calling only
- * a few particular Windows functions, namely some of the time functions,
- * and a few of the Low Level MIDI API. If you violate this rule, your app can
- * hang inside of the callback). One of the Windows API that a callback can't
- * call is waveInAddBuffer() which is what we need to use whenever we receive a
- * MM_WIM_DATA. My callback would need to defer that job to another thread
- * anyway, so instead just use CALLBACK_THREAD here instead.
- *************************************************************************/
-
-DWORD WINAPI waveInProc(LPVOID arg) {
- MSG msg;
- bool_t isRecording;
- (void) arg;
-
- isRecording = FALSE;
- while (GetMessage(&msg, 0, 0, 0)) {
- switch (msg.message) {
- case MM_WIM_DATA:
- GAUDIN_ISR_CompleteI((audin_sample_t *)((WAVEHDR *)msg.lParam)->lpData, ((WAVEHDR *)msg.lParam)->dwBytesRecorded/sizeof(audin_sample_t));
-
- /* Are we still recording? */
- if (isRecording) {
- /* Yes. Now we need to requeue this buffer so the driver can use it for another block of audio
- * data. NOTE: We shouldn't need to waveInPrepareHeader() a WAVEHDR that has already been prepared once.
- * Note: We are assuming here that both the application can still access the buffer while
- * it is on the queue.
- */
- waveInAddBuffer(ah, (WAVEHDR *)msg.lParam, sizeof(WAVEHDR));
-
- } else {
- /* We aren't recording, so another WAVEHDR has been returned to us after recording has stopped.
- * When we get all of them back, DoneAll will be equal to how many WAVEHDRs we queued
- */
- nUsedBuffers--;
- waveInUnprepareHeader(ah, (WAVEHDR *)msg.lParam, sizeof(WAVEHDR));
- }
-
- break;
-
- case MM_WIM_OPEN:
- isRecording = TRUE;
- break;
-
- case MM_WIM_CLOSE:
- isRecording = FALSE;
- break;
- }
- }
- return 0;
-}
-
-/*===========================================================================*/
-/* External declarations. */
-/*===========================================================================*/
-
-void gaudin_lld_init(const gaudin_params *paud) {
-// uint16_t channel;
-// uint32_t frequency;
-// audin_sample_t *buffer;
-// size_t bufcount;
-// size_t samplesPerEvent;
- WAVEFORMATEX wfx;
- size_t spaceleft;
- audin_sample_t *p;
- WAVEHDR *phdr;
- size_t nBuffers;
- size_t sz;
-
- if (!waveInThread) {
- if (!(waveInThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)waveInProc, 0, 0, &threadID))) {
- fprintf(stderr, "GAUDIN: Can't create WAVE recording thread\n");
- return;
- }
- CloseHandle(waveInThread);
- }
-
- nUsedBuffers = 0;
-
- wfx.wFormatTag = WAVE_FORMAT_PCM;
- wfx.nChannels = paud->channel == GAUDIN_STEREO ? 2 : 1;
- wfx.nSamplesPerSec = paud->frequency;
- wfx.nBlockAlign = wfx.nChannels * sizeof(audin_sample_t);
- wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;
- wfx.wBitsPerSample = sizeof(audin_sample_t) * 8;
- wfx.cbSize = 0;
-
- if (waveInOpen(&ah, WAVE_MAPPER, &wfx, (DWORD_PTR)threadID, (DWORD_PTR)paud, CALLBACK_THREAD)) {
- fprintf(stderr, "GAUDIN: Can't open WAVE recording device\n");
- return;
- }
-
- /* We need to allocate a wave header for each buffer */
- nBuffers = (paud->bufcount + paud->samplesPerEvent - 1) / paud->samplesPerEvent;
- if (!(pWaveHdrs = gfxAlloc(nBuffers * sizeof(WAVEHDR)))) {
- fprintf(stderr, "GAUDIN: Buffer header allocation failed\n");
- return;
- }
-
- /* Prepare each buffer and send to the wavein device */
- spaceleft = paud->bufcount;
- for(p = paud->buffer, phdr = pWaveHdrs, spaceleft = paud->bufcount; spaceleft; p += sz, phdr++, spaceleft -= sz) {
- sz = spaceleft > paud->samplesPerEvent ? paud->samplesPerEvent : spaceleft;
- phdr->dwBufferLength = sz * sizeof(audin_sample_t);
- phdr->lpData = (LPSTR)p;
- phdr->dwFlags = 0;
- if (!waveInPrepareHeader(ah, phdr, sizeof(WAVEHDR))
- && !waveInAddBuffer(ah, phdr, sizeof(WAVEHDR)))
- nUsedBuffers++;
- else
- fprintf(stderr, "GAUDIN: Buffer prepare failed\n");
- }
- if (!nUsedBuffers)
- fprintf(stderr, "GAUDIN: Failed to prepare any buffers\n");
-}
-
-void gadc_lld_start(void) {
- if (nUsedBuffers)
- waveInStart(ah);
-}
-
-void gadc_lld_stop(void) {
- waveInReset(ah);
- while(nUsedBuffers) Sleep(1);
- if (pWaveHdrs) {
- gfxFree(pWaveHdrs);
- pWaveHdrs = 0;
- }
-}
-
-#endif /* GFX_USE_GAUDIN */
diff --git a/drivers/gaudin/Win32/gaudin_lld.mk b/drivers/gaudin/Win32/gaudin_lld.mk
deleted file mode 100644
index 3a822971..00000000
--- a/drivers/gaudin/Win32/gaudin_lld.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-# List the required driver.
-GFXSRC += $(GFXLIB)/drivers/gaudin/Win32/gaudin_lld.c
-
-# Required include directories
-GFXINC += $(GFXLIB)/drivers/gaudin/Win32
diff --git a/drivers/gaudin/Win32/gaudin_lld_config.h b/drivers/gaudin/Win32/gaudin_lld_config.h
deleted file mode 100644
index 804d2fc4..00000000
--- a/drivers/gaudin/Win32/gaudin_lld_config.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * This file is subject to the terms of the GFX License. If a copy of
- * the license was not distributed with this file, you can obtain one at:
- *
- * http://ugfx.org/license.html
- */
-
-/**
- * @file drivers/multiple/Win32/gaudin_lld_config.h
- * @brief GAUDIN Driver config file.
- *
- * @addtogroup GAUDIN
- * @{
- */
-
-#ifndef GAUDIN_LLD_CONFIG_H
-#define GAUDIN_LLD_CONFIG_H
-
-#if GFX_USE_GAUDIN
-
-/*===========================================================================*/
-/* Driver hardware support. */
-/*===========================================================================*/
-
-/**
- * @brief The audio input sample type
- */
-//typedef uint8_t audin_sample_t;
-typedef int16_t audin_sample_t;
-
-/**
- * @brief The maximum sample frequency supported by this audio device
- */
-#define GAUDIN_MAX_SAMPLE_FREQUENCY 44100
-
-/**
- * @brief The number of bits in a sample
- */
-//#define GAUDIN_BITS_PER_SAMPLE 8
-#define GAUDIN_BITS_PER_SAMPLE 16
-
-/**
- * @brief The format of an audio sample
- */
-//#define GAUDIN_SAMPLE_FORMAT ARRAY_DATA_8BITUNSIGNED
-#define GAUDIN_SAMPLE_FORMAT ARRAY_DATA_16BITSIGNED
-
-/**
- * @brief The number of audio channels supported by this driver
- */
-#define GAUDIN_NUM_CHANNELS 2
-
-/**
- * @brief The list of audio channels and their uses
- * @{
- */
-#define GAUDIN_MONO 0
-#define GAUDIN_STEREO 1
-/** @} */
-
-#endif /* GFX_USE_GAUDIN */
-
-#endif /* GAUDIN_LLD_CONFIG_H */
-/** @} */
diff --git a/drivers/gaudin/Win32/readme.txt b/drivers/gaudin/Win32/readme.txt
deleted file mode 100644
index b921c5e5..00000000
--- a/drivers/gaudin/Win32/readme.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-This driver uses the Win32 audio system to provide a GAUDIN channel.
-
-It supports 2 channels, Channel 0 being a mono channel and Channel 1 being a stereo channel.
-
-For stereo, the samples are interleaved. Remember to allocate enough space for two samples per
-sample period.
-
-This is a simple driver that makes no changes to the mixer so set up the audio mixer using
-the windows control panel audio mixer (obviously in record mode) before starting recording.
diff --git a/drivers/gaudin/gadc/gaudin_lld.c b/drivers/gaudin/gadc/gaudin_lld.c
deleted file mode 100644
index 972f3dcf..00000000
--- a/drivers/gaudin/gadc/gaudin_lld.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * This file is subject to the terms of the GFX License. If a copy of
- * the license was not distributed with this file, you can obtain one at:
- *
- * http://ugfx.org/license.html
- */
-
-/**
- * @file drivers/gaudin/gadc/gaudin_lld.c
- * @brief GAUDIN - Driver file for using the cpu ADC (via GADC).
- *
- * @addtogroup GAUDIN
- *
- * @{
- */
-
-/**
- * We are now implementing the driver - pull in our channel table
- * from the board definitions.
- */
-#define GAUDIN_LLD_IMPLEMENTATION
-
-
-#include "gfx.h"
-
-#if GFX_USE_GAUDIN
-
-/* Double check the GADC system is turned on */
-#if !GFX_USE_GADC
- #error "GAUDIN - The GADC driver for GAUDIN requires GFX_USE_GADC to be TRUE"
-#endif
-
-/* Include the driver defines */
-#include "src/gaudin/driver.h"
-
-/*===========================================================================*/
-/* External declarations. */
-/*===========================================================================*/
-
-void gaudin_lld_init(const gaudin_params *paud) {
- /* Setup the high speed GADC */
- gadcHighSpeedInit(gaudin_lld_physdevs[paud->channel], paud->frequency, paud->buffer, paud->bufcount, paud->samplesPerEvent);
-
- /* Register ourselves for ISR callbacks */
- gadcHighSpeedSetISRCallback(GAUDIN_ISR_CompleteI);
-
- /**
- * The gadc driver handles any errors for us by restarting the transaction so there is
- * no need for us to setup anything for GAUDIN_ISR_ErrorI()
- */
-}
-
-void gadc_lld_start(void) {
- gadcHighSpeedStart();
-}
-
-void gadc_lld_stop(void) {
- gadcHighSpeedStop();
-}
-
-#endif /* GFX_USE_GAUDIN */
-/** @} */
diff --git a/drivers/gaudin/gadc/gaudin_lld.mk b/drivers/gaudin/gadc/gaudin_lld.mk
deleted file mode 100644
index c969e80b..00000000
--- a/drivers/gaudin/gadc/gaudin_lld.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-# List the required driver.
-GFXSRC += $(GFXLIB)/drivers/gaudin/gadc/gaudin_lld.c
-
-# Required include directories
-GFXINC += $(GFXLIB)/drivers/gaudin/gadc
diff --git a/drivers/gaudin/gadc/gaudin_lld_board_template.h b/drivers/gaudin/gadc/gaudin_lld_board_template.h
deleted file mode 100644
index 89cc0c12..00000000
--- a/drivers/gaudin/gadc/gaudin_lld_board_template.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * This file is subject to the terms of the GFX License. If a copy of
- * the license was not distributed with this file, you can obtain one at:
- *
- * http://ugfx.org/license.html
- */
-
-/**
- * @file drivers/gaudin/gadc/gaudin_lld_board_template.h
- * @brief GAUDIN Driver board config board file
- *
- * @addtogroup GAUDIN
- * @{
- */
-
-#ifndef _GAUDIN_LLD_BOARD_H
-#define _GAUDIN_LLD_BOARD_H
-
-/*===========================================================================*/
-/* Audio inputs on this board */
-/*===========================================================================*/
-
-/**
- * @brief The number of audio channels supported by this driver
- * @note This is an example
- */
-#define GAUDIN_NUM_CHANNELS 1
-
-/**
- * @brief The list of audio channels and their uses
- * @note This is an example
- * @{
- */
-#define GAUDIN_MICROPHONE 0
-/** @} */
-
-/**
- * @brief The audio channel to GADC physical device assignment
- * @note This is an example
- * @{
- */
-#ifdef GAUDIN_LLD_IMPLEMENTATION
- static uint32_t gaudin_lld_physdevs[GAUDIN_NUM_CHANNELS] = {
- GADC_PHYSDEV_MICROPHONE,
- };
-#endif
-/** @} */
-
-#endif /* _GAUDIN_LLD_BOARD_H */
-/** @} */
diff --git a/drivers/gaudin/gadc/gaudin_lld_config.h b/drivers/gaudin/gadc/gaudin_lld_config.h
deleted file mode 100644
index a9fd02ae..00000000
--- a/drivers/gaudin/gadc/gaudin_lld_config.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * This file is subject to the terms of the GFX License. If a copy of
- * the license was not distributed with this file, you can obtain one at:
- *
- * http://ugfx.org/license.html
- */
-
-/**
- * @file drivers/gaudin/gadc/gaudin_lld_config.h
- * @brief GAUDIN Driver config file.
- *
- * @addtogroup GAUDIN
- * @{
- */
-
-#ifndef GAUDIN_LLD_CONFIG_H
-#define GAUDIN_LLD_CONFIG_H
-
-#if GFX_USE_GAUDIN
-
-/*===========================================================================*/
-/* Driver hardware support. */
-/*===========================================================================*/
-
-/**
- * @brief The audio input sample type
- * @details For this driver it matches the cpu sample type
- */
-typedef adcsample_t audin_sample_t;
-
-/**
- * @brief The maximum sample frequency supported by this audio device
- * @details For this driver it matches the GADC maximum high speed sample rate
- */
-#define GAUDIN_MAX_SAMPLE_FREQUENCY GADC_MAX_HIGH_SPEED_SAMPLERATE
-
-/**
- * @brief The number of bits in a sample
- * @details For this driver it matches the cpu sample bits
- */
-#define GAUDIN_BITS_PER_SAMPLE GADC_BITS_PER_SAMPLE
-
-/**
- * @brief The format of an audio sample
- * @details For this driver it matches the cpu sample format
- */
-#define GAUDIN_SAMPLE_FORMAT GADC_SAMPLE_FORMAT
-
-/**
- * For the GAUDIN driver that uses GADC - all the remaining config definitions are specific
- * to the board.
- */
-/* Include the user supplied board definitions */
-#include "gaudin_lld_board.h"
-
-#endif /* GFX_USE_GAUDIN */
-
-#endif /* GAUDIN_LLD_CONFIG_H */
-/** @} */