From 2598b23696ee3dda0499dd124109be53ab23cf9f Mon Sep 17 00:00:00 2001 From: Chris Date: Sat, 12 Mar 2016 09:14:07 -0800 Subject: [PATCH 1/5] import --- kitsune/audiotask.c | 10 ++++++++-- kitsune/commands.c | 10 +++++++--- kitsune/main/ccs/.project | 10 ++++++++++ kitsune/pcm_handler.c | 26 ++++++++++++++------------ 4 files changed, 39 insertions(+), 17 deletions(-) diff --git a/kitsune/audiotask.c b/kitsune/audiotask.c index 427fd271..52d196e7 100644 --- a/kitsune/audiotask.c +++ b/kitsune/audiotask.c @@ -26,6 +26,8 @@ #include "kit_assert.h" #include "utils.h" +#include "adpcm.h" + #if 0 #define PRINT_TIMING #endif @@ -165,7 +167,8 @@ static uint8_t DoPlayback(const AudioPlaybackDesc_t * info) { #define FLASH_PAGE_SIZE 512 //1.5K on the stack - uint16_t * speaker_data = pvPortMalloc(SPEAKER_DATA_CHUNK_SIZE+1); + short * speaker_data = pvPortMalloc(SPEAKER_DATA_CHUNK_SIZE+1); + char * speaker_data_enc = pvPortMalloc(SPEAKER_DATA_CHUNK_SIZE/2+1); FIL fp = {0}; UINT size; @@ -221,11 +224,14 @@ static uint8_t DoPlayback(const AudioPlaybackDesc_t * info) { memset(speaker_data,0,SPEAKER_DATA_CHUNK_SIZE); + adpcm_state pcm_state = {0}; + bool started = false; //loop until either a) done playing file for specified duration or b) our message queue gets a message that tells us to stop for (; ;) { /* Read always in block of 512 Bytes or less else it will stuck in hello_fs_read() */ res = hello_fs_read(&fp, speaker_data, FLASH_PAGE_SIZE, &size); + adpcm_coder( speaker_data, speaker_data_enc, size, &pcm_state ); if ( res == FR_OK && size > 0 ) { @@ -289,7 +295,7 @@ static uint8_t DoPlayback(const AudioPlaybackDesc_t * info) { } } - FillBuffer(pRxBuffer, (unsigned char*) (speaker_data), size); + FillBuffer(pRxBuffer, (unsigned char*) (speaker_data_enc), size/2); } else { if ( desired_ticks_elapsed > 0) { diff --git a/kitsune/commands.c b/kitsune/commands.c index 784f9beb..3fe4c762 100644 --- a/kitsune/commands.c +++ b/kitsune/commands.c @@ -599,11 +599,12 @@ static bool cancel_alarm() { } int set_test_alarm(int argc, char *argv[]) { + while(1) { SyncResponse_Alarm alarm; unsigned int now = get_time(); - alarm.end_time = now + 245; + alarm.end_time = now + 45; alarm.start_time = now + 5; - alarm.ring_duration_in_second = 240; + alarm.ring_duration_in_second = 40; alarm.ring_offset_from_now_in_second = 5; strncpy(alarm.ringtone_path, "/ringtone/tone.raw", strlen("/ringtone/tone.raw")); @@ -619,6 +620,9 @@ int set_test_alarm(int argc, char *argv[]) { usnprintf(ack, 32, "%d", now); set_alarm(&alarm, ack, strlen(ack)); + vTaskDelay(10000); + } + return 0; } static void thread_alarm_on_finished(void * context) { @@ -723,7 +727,7 @@ void thread_alarm(void * unused) { strncpy(desc.file, file_name, 64); desc.durationInSeconds = alarm.ring_duration_in_second; - desc.volume = 57; + desc.volume = 10; desc.onFinished = thread_alarm_on_finished; desc.rate = 48000; desc.context = &alarm_led_id; diff --git a/kitsune/main/ccs/.project b/kitsune/main/ccs/.project index e89c216a..b1748a19 100644 --- a/kitsune/main/ccs/.project +++ b/kitsune/main/ccs/.project @@ -30,6 +30,16 @@ 1 PARENT-2-PROJECT_LOC/CC3200.ccxml + + adpcm.c + 1 + PARENT-2-PROJECT_LOC/adpcm.c + + + adpcm.h + 1 + PARENT-2-PROJECT_LOC/adpcm.h + aes.c 1 diff --git a/kitsune/pcm_handler.c b/kitsune/pcm_handler.c index 3664ce0e..e3ee376d 100644 --- a/kitsune/pcm_handler.c +++ b/kitsune/pcm_handler.c @@ -80,11 +80,8 @@ #include "ti_codec.h" #endif -/* FatFS include */ -//#include "ff.h" -//#include "diskio.h" -#include "fatfs_cmd.h" -#include "uartstdio.h" +#include "adpcm.h" + //***************************************************************************** // LOCAL DEFINES //***************************************************************************** @@ -94,8 +91,9 @@ //***************************************************************************** // GLOBAL VARIABLES //***************************************************************************** -unsigned short ping[(CB_TRANSFER_SZ)]; -unsigned short pong[(CB_TRANSFER_SZ)]; + short ping[(CB_TRANSFER_SZ)]; + short pong[(CB_TRANSFER_SZ)]; + char pcm[(CB_TRANSFER_SZ)]; volatile unsigned int guiDMATransferCountTx = 0; volatile unsigned int guiDMATransferCountRx = 0; extern tCircularBuffer *pTxBuffer; @@ -103,6 +101,8 @@ extern tCircularBuffer *pRxBuffer; extern TaskHandle_t audio_task_hndl; +static adpcm_state pcm_state = {0}; + //***************************************************************************** // //! Callback function implementing ping pong mode DMA transfer @@ -200,14 +200,14 @@ void DMAPingPongCompleteAppCB_opt() == 0) { guiDMATransferCountRx += CB_TRANSFER_SZ; - memcpy( (void*)ping, (void*)GetReadPtr(pAudOutBuf), CB_TRANSFER_SZ); + memcpy( (void*)pcm, (void*)GetReadPtr(pAudOutBuf), CB_TRANSFER_SZ); UpdateReadPtr(pAudOutBuf, CB_TRANSFER_SZ); + adpcm_decoder(pcm, ping, CB_TRANSFER_SZ, &pcm_state); for (i = CB_TRANSFER_SZ/2-1; i!=-1 ; --i) { //the odd ones do not matter - /*ping[(i<<1)+1] = */ping[i<<1] = ping[i]; + /*pong[(i<<1)+1] = */ping[i<<1] = ping[i]; } - pucDMASrc = (unsigned char*)ping; pControlTable[ulPrimaryIndexRx].ulControl |= CTRL_WRD; @@ -221,14 +221,14 @@ void DMAPingPongCompleteAppCB_opt() == 0) { guiDMATransferCountRx += CB_TRANSFER_SZ; - memcpy( (void*)pong, (void*)GetReadPtr(pAudOutBuf), CB_TRANSFER_SZ); + memcpy( (void*)pcm, (void*)GetReadPtr(pAudOutBuf), CB_TRANSFER_SZ); UpdateReadPtr(pAudOutBuf, CB_TRANSFER_SZ); + adpcm_decoder(pcm, pong, CB_TRANSFER_SZ, &pcm_state); for (i = CB_TRANSFER_SZ/2-1; i!=-1 ; --i) { //the odd ones do not matter /*pong[(i<<1)+1] = */pong[i<<1] = pong[i]; } - pucDMASrc = (unsigned char*)pong; pControlTable[ulAltIndexRx].ulControl |= CTRL_WRD; @@ -275,6 +275,7 @@ void SetupPingPongDMATransferTx() memset(ping, 0, sizeof(ping)); memset(pong, 0, sizeof(pong)); + memset(&pcm_state, 0, sizeof(pcm_state)); // changed to SD card DMA UDMA_CH14_SDHOST_RX SetupTransfer(UDMA_CH4_I2S_RX, @@ -304,6 +305,7 @@ void SetupPingPongDMATransferRx() memset(ping, 0, sizeof(ping)); memset(pong, 0, sizeof(pong)); + memset(&pcm_state, 0, sizeof(pcm_state)); SetupTransfer(UDMA_CH5_I2S_TX, UDMA_MODE_PINGPONG, From 5eb7d8f26dd35821533d3d6dd4f0f5ddbed1ca4b Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 14 Mar 2016 16:38:55 -0700 Subject: [PATCH 2/5] still not working --- kitsune/audiotask.c | 9 +++++---- kitsune/main/ccs/.cproject | 19 ++++++++++--------- kitsune/pcm_handler.c | 14 +++++++------- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/kitsune/audiotask.c b/kitsune/audiotask.c index 28b81b4a..85f90b18 100644 --- a/kitsune/audiotask.c +++ b/kitsune/audiotask.c @@ -181,8 +181,8 @@ static uint8_t DoPlayback(const AudioPlaybackDesc_t * info) { #define FLASH_PAGE_SIZE 512 //1.5K on the stack - short * speaker_data = pvPortMalloc(SPEAKER_DATA_CHUNK_SIZE+1); - char * speaker_data_enc = pvPortMalloc(SPEAKER_DATA_CHUNK_SIZE/2+1); + short * speaker_data = pvPortMalloc(FLASH_PAGE_SIZE+1); + char * speaker_data_enc = pvPortMalloc(FLASH_PAGE_SIZE/4+1); FIL fp = {0}; UINT size; @@ -245,7 +245,7 @@ static uint8_t DoPlayback(const AudioPlaybackDesc_t * info) { for (; ;) { /* Read always in block of 512 Bytes or less else it will stuck in hello_fs_read() */ res = hello_fs_read(&fp, speaker_data, FLASH_PAGE_SIZE, &size); - adpcm_coder( speaker_data, speaker_data_enc, size, &pcm_state ); + adpcm_coder( speaker_data, speaker_data_enc, size/2, &pcm_state ); if ( res == FR_OK && size > 0 ) { @@ -302,7 +302,7 @@ static uint8_t DoPlayback(const AudioPlaybackDesc_t * info) { } } - FillBuffer(pRxBuffer, (unsigned char*) (speaker_data_enc), size/2); + FillBuffer(pRxBuffer, (unsigned char*) (speaker_data_enc), size/4); } else { if ( desired_ticks_elapsed > 0) { @@ -325,6 +325,7 @@ static uint8_t DoPlayback(const AudioPlaybackDesc_t * info) { LOGI("leftover %d\n", GetBufferSize(pRxBuffer)); vPortFree(speaker_data); + vPortFree(speaker_data_enc); ///CLEANUP hello_fs_close(&fp); diff --git a/kitsune/main/ccs/.cproject b/kitsune/main/ccs/.cproject index 2e1aa9ff..86a97a14 100644 --- a/kitsune/main/ccs/.cproject +++ b/kitsune/main/ccs/.cproject @@ -129,13 +129,22 @@ - + + + + + + + + - - - - - - - - -