From 183b24086a4f95cae23ae18e20d522445b593fbc Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Sun, 11 Sep 2016 12:41:02 +0200 Subject: [PATCH] Trace installed --- radio/src/debug.cpp | 2 +- radio/src/debug.h | 15 ++++-- radio/src/gui/480x272/view_statistics.cpp | 4 +- .../src/targets/common/arm/stm32/usbd_cdc.cpp | 3 +- radio/src/targets/horus/sdio_sd.c | 53 ++++++++++--------- 5 files changed, 46 insertions(+), 31 deletions(-) diff --git a/radio/src/debug.cpp b/radio/src/debug.cpp index 336f31968..171df5c65 100644 --- a/radio/src/debug.cpp +++ b/radio/src/debug.cpp @@ -48,7 +48,7 @@ void debugPrintf(const char * format, ...) static struct TraceElement traceBuffer[TRACE_BUFFER_LEN]; static uint8_t traceBufferPos; extern Fifo serial2TxFifo; -gtime_t filltm(gtime_t *t, struct gtm *tp); +gtime_t filltm(const gtime_t *t, struct gtm *tp); void trace_event(enum TraceEvent event, uint32_t data) { diff --git a/radio/src/debug.h b/radio/src/debug.h index 9c1e5a777..31662e69a 100644 --- a/radio/src/debug.h +++ b/radio/src/debug.h @@ -101,8 +101,11 @@ enum TraceEvent { sd_disk_ioctl_MMC_GET_SDSTAT_1, sd_disk_ioctl_MMC_GET_SDSTAT_2, sd_spi_reset, + sd_wait_read, + sd_wait_write, + sd_irq, - ff_f_write_validate = 30, + ff_f_write_validate = 40, ff_f_write_flag, ff_f_write_clst, ff_f_write_sync_window, @@ -112,20 +115,26 @@ enum TraceEvent { ff_f_write_disk_read, ff_f_write_move_window, - audio_getNextFilledBuffer_skip = 50, + audio_getNextFilledBuffer_skip = 60, }; struct TraceElement { gtime_t time; uint8_t time_ms; - event_t event; + enum TraceEvent event; uint32_t data; }; +#if defined(__cplusplus) +extern "C" { +#endif void trace_event(enum TraceEvent event, uint32_t data); void trace_event_i(enum TraceEvent event, uint32_t data); const struct TraceElement * getTraceElement(uint16_t idx); void dumpTraceBuffer(); +#if defined(__cplusplus) +} +#endif #define TRACE_EVENT(condition, event, data) if (condition) { trace_event(event, data); } #define TRACEI_EVENT(condition, event, data) if (condition) { trace_event_i(event, data); } diff --git a/radio/src/gui/480x272/view_statistics.cpp b/radio/src/gui/480x272/view_statistics.cpp index 224fdb884..9cf36b441 100644 --- a/radio/src/gui/480x272/view_statistics.cpp +++ b/radio/src/gui/480x272/view_statistics.cpp @@ -217,8 +217,8 @@ bool menuStatsTraces(event_t event) lcdDrawNumber(STATS_TRACES_EVENT_POS, y, te->event, LEADING0|LEFT, 3); // data lcdDrawSizedText(STATS_TRACES_DATA_POS, y, "0x", 2); - lcdDrawHexNumber(STATS_TRACES_DATA_POS + 20, y, (uint16_t)(te->data >> 16)); - lcdDrawHexNumber(STATS_TRACES_DATA_POS+ 60, y, (uint16_t)(te->data & 0xFFFF)); + lcdDrawHexNumber(lcdNextPos, y, (uint16_t)(te->data >> 16)); + lcdDrawHexNumber(lcdNextPos, y, (uint16_t)(te->data & 0xFFFF)); } } diff --git a/radio/src/targets/common/arm/stm32/usbd_cdc.cpp b/radio/src/targets/common/arm/stm32/usbd_cdc.cpp index daaa70cfb..cd14ffc84 100644 --- a/radio/src/targets/common/arm/stm32/usbd_cdc.cpp +++ b/radio/src/targets/common/arm/stm32/usbd_cdc.cpp @@ -161,6 +161,7 @@ void usbSerialPutc(uint8_t c) if (txDataLen >= APP_RX_DATA_SIZE) { txDataLen -= APP_RX_DATA_SIZE; } + // TODO timeout exit } while (txDataLen >= (APP_RX_DATA_SIZE - CDC_DATA_MAX_PACKET_SIZE)); APP_Rx_Buffer[APP_Rx_ptr_in] = c; @@ -172,7 +173,7 @@ void usbSerialPutc(uint8_t c) } else { APP_Rx_ptr_in++; - } + } } /** diff --git a/radio/src/targets/horus/sdio_sd.c b/radio/src/targets/horus/sdio_sd.c index 604975c4d..961062f0d 100644 --- a/radio/src/targets/horus/sdio_sd.c +++ b/radio/src/targets/horus/sdio_sd.c @@ -207,9 +207,9 @@ typedef enum static uint32_t CardType = SDIO_STD_CAPACITY_SD_CARD_V1_1; static uint32_t CSD_Tab[4], CID_Tab[4], RCA = 0; // static uint8_t SDSTATUS_Tab[16]; -__IO uint32_t StopCondition = 0; +__IO uint8_t StopCondition = 0; __IO SD_Error TransferError = SD_OK; -__IO uint32_t TransferEnd = 0, DMAEndOfTransfer = 0; +__IO uint8_t TransferEnd = 0, DMAEndOfTransfer = 0; SD_CardInfo SDCardInfo; SDIO_InitTypeDef SDIO_InitStructure; @@ -225,7 +225,7 @@ static SD_Error CmdResp6Error(uint8_t cmd, uint16_t *prca); static SD_Error SDEnWideBus(FunctionalState NewState); // static SD_Error IsCardProgramming(uint8_t *pstatus); static SD_Error FindSCR(uint16_t rca, uint32_t *pscr); -uint8_t convert_from_bytes_to_power_of_two(uint16_t NumberOfBytes); +// uint8_t convert_from_bytes_to_power_of_two(uint16_t NumberOfBytes); SD_Error SD_PowerON(void); SDCardState SD_GetState(void); @@ -1265,7 +1265,7 @@ OPTIMIZE("O0") SD_Error SD_ReadBlock(uint8_t *readbuff, uint32_t ReadAddr, uint1 SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; SDIO_DataInitStructure.SDIO_DataLength = BlockSize; - SDIO_DataInitStructure.SDIO_DataBlockSize = (uint32_t) 9 << 4; + SDIO_DataInitStructure.SDIO_DataBlockSize = SDIO_DataBlockSize_512b; SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO; SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block; SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; @@ -1338,9 +1338,9 @@ OPTIMIZE("O0") SD_Error SD_ReadMultiBlocks(uint8_t *readbuff, uint32_t ReadAddr, return(errorstatus); } - SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; + SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; // TODO consider setting shorter timeout SDIO_DataInitStructure.SDIO_DataLength = NumberOfBlocks * BlockSize; - SDIO_DataInitStructure.SDIO_DataBlockSize = (uint32_t) 9 << 4; + SDIO_DataInitStructure.SDIO_DataBlockSize = SDIO_DataBlockSize_512b; SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO; SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block; SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; @@ -1379,12 +1379,13 @@ OPTIMIZE("O0") SD_Error SD_WaitReadOperation(void) timeout = SD_DATATIMEOUT; - while ((DMAEndOfTransfer == 0x00) && (TransferEnd == 0) && (TransferError == SD_OK) && (timeout > 0)) + while (!DMAEndOfTransfer && !TransferEnd && (TransferError == SD_OK) && (timeout > 0)) { timeout--; } + TRACE_SD_CARD_EVENT((timeout == 0), sd_wait_read, (TransferError << 8) + (DMAEndOfTransfer << 1) + TransferEnd); - DMAEndOfTransfer = 0x00; + DMAEndOfTransfer = 0; timeout = SD_DATATIMEOUT; @@ -1392,6 +1393,7 @@ OPTIMIZE("O0") SD_Error SD_WaitReadOperation(void) { timeout--; } + TRACE_SD_CARD_EVENT((timeout == 0), sd_wait_read, -1); if (StopCondition == 1) { @@ -1482,7 +1484,7 @@ OPTIMIZE("O0") SD_Error SD_WriteBlock(uint8_t *writebuff, uint32_t WriteAddr, ui SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; SDIO_DataInitStructure.SDIO_DataLength = BlockSize; - SDIO_DataInitStructure.SDIO_DataBlockSize = (uint32_t) 9 << 4; + SDIO_DataInitStructure.SDIO_DataBlockSize = SDIO_DataBlockSize_512b; SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToCard; SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block; SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; @@ -1590,7 +1592,7 @@ OPTIMIZE("O0") SD_Error SD_WriteMultiBlocks(uint8_t *writebuff, uint32_t WriteAd SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; SDIO_DataInitStructure.SDIO_DataLength = NumberOfBlocks * BlockSize; - SDIO_DataInitStructure.SDIO_DataBlockSize = (uint32_t) 9 << 4; + SDIO_DataInitStructure.SDIO_DataBlockSize = SDIO_DataBlockSize_512b; SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToCard; SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block; SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; @@ -1615,12 +1617,13 @@ OPTIMIZE("O0") SD_Error SD_WaitWriteOperation(void) timeout = SD_DATATIMEOUT; - while ((DMAEndOfTransfer == 0x00) && (TransferEnd == 0) && (TransferError == SD_OK) && (timeout > 0)) + while (!DMAEndOfTransfer && !TransferEnd && (TransferError == SD_OK) && (timeout > 0)) { timeout--; } + TRACE_SD_CARD_EVENT((timeout == 0), sd_wait_write, (TransferError << 8) + (DMAEndOfTransfer << 1) + TransferEnd); - DMAEndOfTransfer = 0x00; + DMAEndOfTransfer = 0; timeout = SD_DATATIMEOUT; @@ -1628,6 +1631,7 @@ OPTIMIZE("O0") SD_Error SD_WaitWriteOperation(void) { timeout--; } + TRACE_SD_CARD_EVENT((timeout == 0), sd_wait_write, -1); if (StopCondition == 1) { @@ -1998,7 +2002,7 @@ OPTIMIZE("O0") void SD_ProcessDMAIRQ(void) { if(DMA2->LISR & SD_SDIO_DMA_FLAG_TCIF) { - DMAEndOfTransfer = 0x01; + DMAEndOfTransfer = 1; DMA_ClearFlag(SD_SDIO_DMA_STREAM, SD_SDIO_DMA_FLAG_TCIF|SD_SDIO_DMA_FLAG_FEIF); } } @@ -2737,22 +2741,23 @@ OPTIMIZE("O0") static SD_Error FindSCR(uint16_t rca, uint32_t *pscr) * @param NumberOfBytes: number of bytes. * @retval None */ -OPTIMIZE("O0") uint8_t convert_from_bytes_to_power_of_two(uint16_t NumberOfBytes) -{ - uint8_t count = 0; +// OPTIMIZE("O0") uint8_t convert_from_bytes_to_power_of_two(uint16_t NumberOfBytes) +// { +// uint8_t count = 0; - while (NumberOfBytes != 1) - { - NumberOfBytes >>= 1; - count++; - } - return(count); -} +// while (NumberOfBytes != 1) +// { +// NumberOfBytes >>= 1; +// count++; +// } +// return(count); +// } void SDIO_IRQHandler(void) { DEBUG_INTERRUPT(INT_SDIO); - SD_ProcessIRQ(); + SD_Error err = SD_ProcessIRQ(); + TRACE_SD_CARD_EVENT((err != SD_OK), sd_irq, err); } void SD_SDIO_DMA_IRQHANDLER(void)