From a56e4ac7dcbf2776690c96656dbcb48b2cf2d818 Mon Sep 17 00:00:00 2001 From: inmarket Date: Thu, 27 Feb 2014 08:04:54 +1000 Subject: 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. --- drivers/gaudin/Win32/gaudin_lld.c | 178 ------------------------ drivers/gaudin/Win32/gaudin_lld.mk | 5 - drivers/gaudin/Win32/gaudin_lld_config.h | 64 --------- drivers/gaudin/Win32/readme.txt | 9 -- drivers/gaudin/gadc/gaudin_lld.c | 62 --------- drivers/gaudin/gadc/gaudin_lld.mk | 5 - drivers/gaudin/gadc/gaudin_lld_board_template.h | 50 ------- drivers/gaudin/gadc/gaudin_lld_config.h | 59 -------- 8 files changed, 432 deletions(-) delete mode 100644 drivers/gaudin/Win32/gaudin_lld.c delete mode 100644 drivers/gaudin/Win32/gaudin_lld.mk delete mode 100644 drivers/gaudin/Win32/gaudin_lld_config.h delete mode 100644 drivers/gaudin/Win32/readme.txt delete mode 100644 drivers/gaudin/gadc/gaudin_lld.c delete mode 100644 drivers/gaudin/gadc/gaudin_lld.mk delete mode 100644 drivers/gaudin/gadc/gaudin_lld_board_template.h delete mode 100644 drivers/gaudin/gadc/gaudin_lld_config.h (limited to 'drivers/gaudin') 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 -#include -#include - -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 */ -/** @} */ -- cgit v1.2.3