[tuxdroid-svn] r1208 - firmware/fuxusb/trunk/src
Status: Beta
Brought to you by:
ks156
From: Paul_R <c2m...@c2...> - 2008-05-30 14:05:26
|
Author: Paul_R Date: 2008-05-30 16:05:33 +0200 (Fri, 30 May 2008) New Revision: 1208 Modified: firmware/fuxusb/trunk/src/fifo_mic.c firmware/fuxusb/trunk/src/fifo_mic.h firmware/fuxusb/trunk/src/fifo_spk.c firmware/fuxusb/trunk/src/fifo_spk.h firmware/fuxusb/trunk/src/global.h firmware/fuxusb/trunk/src/spi_task.c firmware/fuxusb/trunk/src/usb_ep.c Log: * Changed the microphone and speaker fifo. Now, they're circular. * Updated doc with the new FIFOs modules Modified: firmware/fuxusb/trunk/src/fifo_mic.c =================================================================== --- firmware/fuxusb/trunk/src/fifo_mic.c 2008-05-30 14:04:36 UTC (rev 1207) +++ firmware/fuxusb/trunk/src/fifo_mic.c 2008-05-30 14:05:33 UTC (rev 1208) @@ -34,7 +34,7 @@ /** Buffer size */ #define FIFOTBL_MIC_MAX 64 /** Overload value */ -#define FIFO_MIC_OVERLOAD FIFOTBL_MIC_MAX - 1 +#define FIFO_MIC_OVERLOAD FIFOTBL_MIC_MAX /** Ready threshold. This value allow to fill the fifo */ #define FIFO_MIC_READY_VALUE 32 /*! @} */ @@ -69,6 +69,13 @@ Fifoready_MIC = 0; } +/** + * \brief Check if the fifo is ready. + */ +bit FIFO_MIC_ready(void) +{ + return ((FifoIn_MIC_Idx - FifoOut_MIC_Idx) > FIFO_MIC_READY_VALUE); +} /** * \brief Push N bytes in the microphone FIFO. @@ -85,22 +92,11 @@ i = n; do { - if (++ FifoOut_MIC_cmpt >= FIFO_MIC_READY_VALUE) - { - Fifoready_MIC = 1; + if ((FifoIn_MIC_Idx - FifoOut_MIC_Idx) == FIFOTBL_MIC_MAX) + return; - if (FifoOut_MIC_cmpt == FIFO_MIC_OVERLOAD) - { - FifoOut_MIC_cmpt --; - return; - } - } - FifoTbl_MIC[FifoIn_MIC_Idx ++] = received_rf_data[n - i]; - - if (FifoIn_MIC_Idx == FIFOTBL_MIC_MAX) - { - FifoIn_MIC_Idx = 0; - } + FifoTbl_MIC[FifoIn_MIC_Idx++ & (FIFOTBL_MIC_MAX-1)] = \ + received_rf_data[n-i]; } while (-- i); } @@ -111,19 +107,9 @@ */ uint8_t FIFO_MIC_get (void) { - if (!FifoOut_MIC_cmpt) - { - Fifoready_MIC = 0; - return (FifoOut_MIC_Idx) ? FifoTbl_MIC[FifoOut_MIC_Idx-1] \ - : FifoTbl_MIC[FIFOTBL_MIC_MAX-1]; - } + /* Fifo empty */ + if (FifoOut_MIC_Idx == FifoIn_MIC_Idx) + return 0x80; - FifoOut_MIC_cmpt--; - - if (++ FifoOut_MIC_Idx == FIFOTBL_MIC_MAX) - { - FifoOut_MIC_Idx = 0; - } - - return FifoTbl_MIC[FifoOut_MIC_Idx]; + return FifoTbl_MIC[FifoOut_MIC_Idx++ & (FIFOTBL_MIC_MAX - 1)]; } Modified: firmware/fuxusb/trunk/src/fifo_mic.h =================================================================== --- firmware/fuxusb/trunk/src/fifo_mic.h 2008-05-30 14:04:36 UTC (rev 1207) +++ firmware/fuxusb/trunk/src/fifo_mic.h 2008-05-30 14:05:33 UTC (rev 1208) @@ -31,6 +31,7 @@ extern bit Fifoready_MIC; extern void FIFO_MIC_init (void); +extern bit FIFO_MIC_ready(void); extern void FIFO_MIC_put_n (uint8_t const n); extern uint8_t FIFO_MIC_get (void); Modified: firmware/fuxusb/trunk/src/fifo_spk.c =================================================================== --- firmware/fuxusb/trunk/src/fifo_spk.c 2008-05-30 14:04:36 UTC (rev 1207) +++ firmware/fuxusb/trunk/src/fifo_spk.c 2008-05-30 14:05:33 UTC (rev 1208) @@ -72,6 +72,13 @@ } /** + * \brief Check if the fifo is ready to be empty. + */ +bit FIFO_SPK_ready(void) +{ + return ((FifoIn_SPK_Idx - FifoOut_SPK_Idx) > FIFO_SPK_READY_VALUE_MAX); +} +/** * \brief Push N bytes in the Speaker FIFO. * \param n The number of byte to push. * This function is made to save time when N bytes must be pushed on the fifo. @@ -84,23 +91,13 @@ uint8_t data i = n; do - { - if (++ FifoOut_SPK_cmpt >= FIFO_SPK_READY_VALUE_MAX) - { - Fifoready_SPK = 1; // FIFO ready to be empty + { + if ((FifoIn_SPK_Idx - FifoOut_SPK_Idx) == FIFOTBL_SPK_MAX) + return; + + FifoTbl_SPK[FifoIn_SPK_Idx++ & (FIFOTBL_SPK_MAX - 1)] = \ + Usb_read_byte(); - if (FifoOut_SPK_cmpt == FIFO_SPK_OVERLOAD) - { - FifoOut_SPK_cmpt --; - return; - } - } - FifoTbl_SPK[FifoIn_SPK_Idx ++] = Usb_read_byte(); - - if (FifoIn_SPK_Idx == FIFOTBL_SPK_MAX) - { - FifoIn_SPK_Idx = 0; - } } while (-- i); } @@ -111,22 +108,9 @@ */ uint8_t FIFO_SPK_get(void) { - if (FifoOut_SPK_cmpt < FIFO_SPK_READY_VALUE_MIN) - { - Fifoready_SPK = 0; // FIFO empty - if (FifoOut_SPK_cmpt == 0) // FIFO Underload - { - return FifoOut_SPK_Idx ? FifoTbl_SPK[FifoOut_SPK_Idx-1] \ - : FifoTbl_SPK[FIFOTBL_SPK_MAX-1]; - } - } + /* Fifo empty */ + if (FifoOut_SPK_Idx == FifoIn_SPK_Idx) + return 0x80; - FifoOut_SPK_cmpt--; - - if (++ FifoOut_SPK_Idx == FIFOTBL_SPK_MAX) - { - FifoOut_SPK_Idx = 0; - } - - return FifoTbl_SPK[FifoOut_SPK_Idx]; + return FifoTbl_SPK[FifoOut_SPK_Idx++ & (FIFOTBL_SPK_MAX - 1)]; } Modified: firmware/fuxusb/trunk/src/fifo_spk.h =================================================================== --- firmware/fuxusb/trunk/src/fifo_spk.h 2008-05-30 14:04:36 UTC (rev 1207) +++ firmware/fuxusb/trunk/src/fifo_spk.h 2008-05-30 14:05:33 UTC (rev 1208) @@ -32,6 +32,7 @@ extern bit Fifoready_SPK; extern void FIFO_SPK_init (void); +extern bit FIFO_SPK_ready(void); extern void FIFO_SPK_put_n (uint8_t const n); extern uint8_t FIFO_SPK_get (void); Modified: firmware/fuxusb/trunk/src/global.h =================================================================== --- firmware/fuxusb/trunk/src/global.h 2008-05-30 14:04:36 UTC (rev 1207) +++ firmware/fuxusb/trunk/src/global.h 2008-05-30 14:05:33 UTC (rev 1208) @@ -149,8 +149,7 @@ * to the RF. * * This FIFO are specific for this application and the context. - * It's optimized for speed. It's not circular, and the access to the - * buffer are direct. + * It's optimized for speed. * \ingroup fuxusb */ @@ -160,8 +159,7 @@ * \brief FIFO_MIC used for the microphone data, received from the RF and sent * to the computer. * This FIFO is specific for this application and the context. - * It's optimized for speed. It's not circular, and the access to the - * buffer are direct. + * It's optimized for speed. * \ingroup fuxusb */ Modified: firmware/fuxusb/trunk/src/spi_task.c =================================================================== --- firmware/fuxusb/trunk/src/spi_task.c 2008-05-30 14:04:36 UTC (rev 1207) +++ firmware/fuxusb/trunk/src/spi_task.c 2008-05-30 14:05:33 UTC (rev 1208) @@ -200,7 +200,8 @@ //-------------------------------------------------------------------------- if (spi_slave == HEADERS) { - if (Fifoready_SPK) // FIFO ready to be empty + if (FIFO_SPK_ready()) + //if (Fifoready_SPK) // FIFO ready to be empty { if (new_command_received) // { Modified: firmware/fuxusb/trunk/src/usb_ep.c =================================================================== --- firmware/fuxusb/trunk/src/usb_ep.c 2008-05-30 14:04:36 UTC (rev 1207) +++ firmware/fuxusb/trunk/src/usb_ep.c 2008-05-30 14:05:33 UTC (rev 1208) @@ -131,7 +131,7 @@ */ void fill_mic_ep(void) { - if(usb_configuration_nb && Fifoready_MIC && !fifo_mic_loaded) + if(usb_configuration_nb && FIFO_MIC_ready() && !fifo_mic_loaded) { uint8_t i; |