Index: firmware/App/Drivers/ConductivityTeensy.c =================================================================== diff -u -r3fde11b3e67db8690667c7d96696b25e5108a395 -r7aafdc16c133bcd4cb0ce5fe08079c1969cc67d2 --- firmware/App/Drivers/ConductivityTeensy.c (.../ConductivityTeensy.c) (revision 3fde11b3e67db8690667c7d96696b25e5108a395) +++ firmware/App/Drivers/ConductivityTeensy.c (.../ConductivityTeensy.c) (revision 7aafdc16c133bcd4cb0ce5fe08079c1969cc67d2) @@ -49,7 +49,7 @@ #define RX_SIZE_SELECT_SENSOR 1 #define RX_SIZE_GET_SINGLE_MEASUREMENT ( sizeof( CONDUCTIVITY_SENSOR_DATA_T ) ) -#define COND_STATUS_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Timeout before which we should receive INIT_STATUS_IN_PROGRESS from teensy +#define COND_STATUS_TIMEOUT_MS ( 10 * MS_PER_SECOND ) ///< Timeout before which we should receive INIT_STATUS_IN_PROGRESS from teensy #define COND_DATA_TIMEOUT_MS ( 5 * MS_PER_SECOND ) ///< Timeout before which we should receive INIT_STATUS_INITIALIZED or INIT_STATUS_FAILED from teensy // ********** private data ********** @@ -60,6 +60,7 @@ static U32 condReceiptCounter = 0; ///< Conductivity response receipt counter. static U32 condTransmitCounter = 0; ///< Conductivity command transmit counter. +static BOOL condAutomatedDataPolling = FALSE; static BOOL condWriteCommandInProgress = FALSE; ///< Flag indicating an Conductivity write command is in progress. static BOOL condReadCommandInProgress = FALSE; ///< Flag indicating an Conductivity read command is in progress. static BOOL condBulkWriteAndReadInProgress = FALSE; ///< Flag indicating an Conductivity bulk write and read command are in progress. @@ -208,6 +209,7 @@ condReceiptCounter = 0; condTransmitCounter = 0; condResponseTime = 0; + condAutomatedDataPolling = FALSE; // initialize Conductivity comm buffers // memset( &condWriteCmdBuffer, 0, COND_WRITE_CMD_BUFFER_LEN ); @@ -418,6 +420,23 @@ dequeue(); state = COND_COMM_STATE_TX; } + else + { + // If queue is empty, q automated polling data cmd + // otherwise, we are already polling data, move to recv next data packet + if ( condAutomatedDataPolling == TRUE ) + { + state = COND_COMM_STATE_RX; + setupConductivityDMAForWriteResp( teensyCmdMap[ currentCmd ].rxSize ); + startConductivityDMAReceiptOfWriteResp(); + } + else + { + condAutomatedDataPolling = TRUE; + enqueue( TEENSY_CMD_GET_MEASUREMENT ); + state = COND_COMM_STATE_TX; + } + } return state; } @@ -894,14 +913,11 @@ static CONDUCTIVITY_PARSE_STATUS parseConductivityMeasurements(const U08 *buffer, U32 len) { CONDUCTIVITY_PARSE_STATUS parseStatus = CONDUCTIVITY_PARSE_NONE; - U32 expectedDataLength = sizeof(CONDUCTIVITY_SENSOR_DATA_T); - U32 sensorCount = 0; - U16 sensorIdx = 0; // Validate buffer if ( NULL == buffer ) { - parseStatus = CONDUCTIVITY_PARSE_ERROR_NULL_BUFFER; + parseStatus = CONDUCTIVITY_PARSE_ERROR_INVALID_SENSOR_NUM; } // Validate buffer length else if ( ( len % expectedDataLength ) != 0 ) @@ -983,6 +999,7 @@ if ( written > 0 ) { + memset( &condWriteCmdBuffer, 0, COND_WRITE_CMD_BUFFER_LEN ); memcpy( &condWriteCmdBuffer, &condTxBuffer, written ); success = TRUE; } @@ -1011,8 +1028,10 @@ // Clear the read buffer before writing memset( &condRxBuffer, 0, COND_RX_BUFFER_LEN ); memcpy( &condRxBuffer, &condWriteResponseBuffer, teensyCmdMap[ cmdIndex ].rxSize ); + memset( &condWriteResponseBuffer, 0, COND_WRITE_RSP_BUFFER_LEN ); success = TRUE; } + // Should not be any data received at this time consumeUnexpectedConductivityData(); @@ -1060,7 +1079,7 @@ // Store the init status conductivityInitStatus = initStatusInitialized; - switch(conductivityInitStatus) + switch( conductivityInitStatus ) { case CONDUCTIVITY_INIT_STATUS_UNITIALIZED: break; @@ -1075,7 +1094,7 @@ case CONDUCTIVITY_INIT_STATUS_FAILED: default: - state = COND_COMM_STATE_FAILED; + state = COND_COMM_STATE_IDLE; break; } } @@ -1144,7 +1163,7 @@ case CONDUCTIVITY_INIT_STATUS_FAILED: default: - state = COND_COMM_STATE_FAILED; + state = COND_COMM_STATE_IDLE; break; } } @@ -1460,6 +1479,7 @@ static CONDUCTIVITY_COMM_STATE_T rxGetMeasurements( void ) { CONDUCTIVITY_COMM_STATE_T state = COND_COMM_STATE_RX; + CONDUCTIVITY_PARSE_STATUS parseStatus; // Check if a response is received in the RX buffer BOOL recvComplete = rxTeensyReadRsp( TEENSY_CMD_GET_MEASUREMENT ); @@ -1472,7 +1492,7 @@ CONDUCTIVITY_PARSE_STATUS parseStatus = parseConductivityMeasurements( condRxBuffer, COND_RX_BUFFER_LEN ); // Check if parsing was done successfully - if(CONDUCTIVITY_PARSE_SUCCESS == parseStatus) + if( CONDUCTIVITY_PARSE_SUCCESS == parseStatus ) { // Go to the idle state to execute next cmd in the queue state = COND_COMM_STATE_IDLE; Index: firmware/App/Drivers/ConductivityTeensy.h =================================================================== diff -u -r3fde11b3e67db8690667c7d96696b25e5108a395 -r7aafdc16c133bcd4cb0ce5fe08079c1969cc67d2 --- firmware/App/Drivers/ConductivityTeensy.h (.../ConductivityTeensy.h) (revision 3fde11b3e67db8690667c7d96696b25e5108a395) +++ firmware/App/Drivers/ConductivityTeensy.h (.../ConductivityTeensy.h) (revision 7aafdc16c133bcd4cb0ce5fe08079c1969cc67d2) @@ -26,12 +26,12 @@ typedef enum TeensySensorIndex { - TEENSY_SENSOR_0 = 0, ///< Maps to D17_COND - TEENSY_SENSOR_1, ///< Maps to D27_COND - TEENSY_SENSOR_2, ///< Maps to D43_COND - TEENSY_SENSOR_3, ///< Maps to D74_COND - TEENSY_SENSOR_4, ///< Maps to P9_COND - TEENSY_SENSOR_5, ///< Maps to P18_COND + TEENSY_SENSOR_0 = 0, ///< Maps to P9_COND + TEENSY_SENSOR_1, ///< Maps to P18_COND + TEENSY_SENSOR_2, ///< Maps to D17_COND + TEENSY_SENSOR_3, ///< Maps to D27_COND + TEENSY_SENSOR_4, ///< Maps to D29_COND + TEENSY_SENSOR_5, ///< Maps to D43_COND MAX_TEENSY_SENSOR ///< Total number of mapped sensors } TEENSY_SENSOR_INDEX_T; Index: firmware/App/Monitors/Conductivity.c =================================================================== diff -u -r9ccc651bf491c37bc202ad8d80f0e4063523320d -r7aafdc16c133bcd4cb0ce5fe08079c1969cc67d2 --- firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision 9ccc651bf491c37bc202ad8d80f0e4063523320d) +++ firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision 7aafdc16c133bcd4cb0ce5fe08079c1969cc67d2) @@ -68,6 +68,16 @@ static U32 fpConductivityPublishTimerCounter; ///< FP Conductivity data publication counter. static OVERRIDE_U32_T fpConductivityDataPublishInterval; ///< FP Conductivity sensors publish time interval override. +static const CONDUCTIVITY_SENSORS_T teensyCondMap[] = +{ + P9_COND, + P18_COND, + D17_COND, + D27_COND, + D29_COND, + D43_COND, +}; + // ********** private function prototypes ********** static void publishConductivitySensorsData( void );