Index: firmware/App/Drivers/ConductivityTeensy.c =================================================================== diff -u -r18f5ac036baf7dca352e881bdd64d6fd742d8c58 -r1ab489b7b273361422832d620165a66951b1f93b --- firmware/App/Drivers/ConductivityTeensy.c (.../ConductivityTeensy.c) (revision 18f5ac036baf7dca352e881bdd64d6fd742d8c58) +++ firmware/App/Drivers/ConductivityTeensy.c (.../ConductivityTeensy.c) (revision 1ab489b7b273361422832d620165a66951b1f93b) @@ -61,7 +61,7 @@ static CONDUCTIVITY_CALCULATED_MEASUREMENTS_T calculatedMeasurement[ MAX_TEENSY_SENSOR ]; static CONDUCTIVITY_COEFFICIENTS_T conductivityCoeff[MAX_TEENSY_SENSOR]; -static const char* teensyCmd[] = { "a", ///< COND_COMM_STATE_SEND_CMD_INIT_SENSOR +static const U08* teensyCmd[] = { "a", ///< COND_COMM_STATE_SEND_CMD_INIT_SENSOR "l", ///< COND_COMM_STATE_SEND_CMD_GET_INIT_STATUS "save", ///< COND_COMM_STATE_SEND_CMD_UPDATE_EEPROM_DATA, "e", ///< COND_COMM_STATE_SEND_CMD_GET_EEPROM_DATA, @@ -94,6 +94,9 @@ static CONDUCTIVITY_PARSE_STATUS parseEEPROMdata( const U32 *buffer, U32 len ); static CONDUCTIVITY_PARSE_STATUS parseConductivityMeasurements( const U32 *buffer, U32 len ); +static BOOL sendTeensyWriteCmd( TEENSY_CMD_INDEX_T cmdIndex, const U08* param ); +static BOOL sendTeensyReadCmd( TEENSY_CMD_INDEX_T cmdIndex ); + static CONDUCTIVITY_COMM_STATE_T sendCmd_initSensor( void ); static CONDUCTIVITY_COMM_STATE_T rcvRspns_initSensor( void ); static CONDUCTIVITY_COMM_STATE_T sendCmd_getInitStatus( void ); @@ -102,7 +105,7 @@ static CONDUCTIVITY_COMM_STATE_T rcvRspns_updateEEPROMdata( void ); static CONDUCTIVITY_COMM_STATE_T sendCmd_getEEPROMdata( void ); static CONDUCTIVITY_COMM_STATE_T rcvRspns_getEEPROMdata( void ); -static CONDUCTIVITY_COMM_STATE_T sendCmd_updateMeasurementSettings( CONDUCTIVITY_MEASUREMENT_SETTINGS_T measurememtSettings ); +static CONDUCTIVITY_COMM_STATE_T sendCmd_updateMeasurementSettings( CONDUCTIVITY_MEASUREMENT_SETTINGS_T measurementSettings ); static CONDUCTIVITY_COMM_STATE_T rcvRspns_updateMeasurementSettings( void ); static CONDUCTIVITY_COMM_STATE_T sendCmd_getMeasurementSettings( void ); static CONDUCTIVITY_COMM_STATE_T rcvRspns_getMeasurementSettings( void ); @@ -185,8 +188,8 @@ case COND_COMM_STATE_SEND_CMD_UPDATE_MEASUREMENT_SETTINGS: { - CONDUCTIVITY_MEASUREMENT_SETTINGS_T measurememtSettings = {0}; - conductivityCommState = sendCmd_updateMeasurementSettings( measurememtSettings ); + CONDUCTIVITY_MEASUREMENT_SETTINGS_T measurementSettings = {0}; + conductivityCommState = sendCmd_updateMeasurementSettings( measurementSettings ); break; } @@ -357,8 +360,6 @@ condTransmitCounter++; } - - /*********************************************************************//** * @brief * The getImpedanceValue function gets the current calculated conductivity / @@ -474,14 +475,6 @@ setSCIDMAReceiveInterrupt(); } - - - - - - - - /*********************************************************************//** * @brief * The parseMeasurementSettings Reads measurement settings from buffer and @@ -609,16 +602,106 @@ return parseStatus; } +/** + * @brief Writes a command (with optional parameters) to the write buffer. + * + * @param cmdIndex Index of the command in teensyCmd[]. + * @param param Optional parameter string to append after the command. + * @return TRUE if the command was successfully written to the write buffer, FALSE otherwise. + */ +static BOOL sendTeensyWriteCmd( TEENSY_CMD_INDEX_T cmdIndex, const U08* param ) +{ + BOOL success = FALSE; + + // Validate command index and ensure command string exists + if ( ( cmdIndex >= MAX_NUM_OF_TEENSY_CMDS ) || + ( NULL == teensyCmd[ cmdIndex ] ) ) + { + success = FALSE; + } + else + { + const U08* baseCmd = teensyCmd[ cmdIndex ]; + + // Clear the write buffer before writing + memset( condWriteCmdBuffer, 0, COND_WRITE_CMD_BUFFER_LEN ); + + // Format command with optional parameter + if ( ( NULL != param ) && ( strlen( param ) > 0 ) ) + { + U16 written = snprintf( (U08*)condWriteCmdBuffer, + COND_WRITE_CMD_BUFFER_LEN, + "%s %s", + baseCmd, + param ); + + // Check if snprintf succeeded and did not overflow + success = ( written > 0 ) && ( written < COND_WRITE_CMD_BUFFER_LEN ); + } + else + { + // No parameter: write only the command + U16 written = snprintf( (U08*)condWriteCmdBuffer, + COND_WRITE_CMD_BUFFER_LEN, + "%s", + baseCmd ); + + success = ( written > 0 ) && ( written < COND_WRITE_CMD_BUFFER_LEN ); + } + } + + return success; +} + +/** + * @brief Writes a command (without parameters) to the read buffer. + * + * @param cmdIndex Index of the command in teensyCmd[]. + * @return TRUE if the command was successfully written to the read buffer, FALSE otherwise. + */ +static BOOL sendTeensyReadCmd( TEENSY_CMD_INDEX_T cmdIndex ) +{ + BOOL success = FALSE; + + // Validate command index and ensure command string exists + if ( ( cmdIndex >= MAX_NUM_OF_TEENSY_CMDS ) || + ( NULL == teensyCmd[ cmdIndex ] ) ) + { + success = FALSE; + } + else + { + const U08* baseCmd = teensyCmd[ cmdIndex ]; + + // Clear the read buffer before writing + memset( condReadCmdBuffer, 0, COND_READ_CMD_BUFFER_LEN ); + + // Write only the command string (no parameters allowed) + U16 written = snprintf( (U08*)condReadCmdBuffer, + COND_READ_CMD_BUFFER_LEN, + "%s", + baseCmd ); + + // Check if snprintf succeeded and did not overflow + success = ( written > 0 ) && ( written < COND_READ_CMD_BUFFER_LEN ); + } + + return success; +} + static CONDUCTIVITY_COMM_STATE_T sendCmd_initSensor( void ) { CONDUCTIVITY_COMM_STATE_T state = COND_COMM_STATE_SEND_CMD_INIT_SENSOR; - // teensyCmd[TEENSY_CMD_INIT_SENSOR] - // condWriteCmdBuffer + if ( FALSE == sendTeensyWriteCmd( TEENSY_CMD_INIT_SENSOR, NULL ) ) + { + // Handle error: log or set error flag + } return state; } + static CONDUCTIVITY_COMM_STATE_T rcvRspns_initSensor( void ) { CONDUCTIVITY_COMM_STATE_T state = COND_COMM_STATE_RCV_RSPNS_INIT_SENSOR; @@ -632,9 +715,12 @@ { CONDUCTIVITY_COMM_STATE_T state = COND_COMM_STATE_SEND_CMD_GET_INIT_STATUS; - // teensyCmd[TEENSY_CMD_GET_INIT_STATUS] - // condReadCmdBuffer + if ( FALSE == sendTeensyReadCmd( TEENSY_CMD_GET_INIT_STATUS ) ) + { + // Handle error + } + return state; } @@ -651,9 +737,32 @@ { CONDUCTIVITY_COMM_STATE_T state = COND_COMM_STATE_SEND_CMD_UPDATE_EEPROM_DATA; - // teensyCmd[TEENSY_CMD_UPDATE_EEPROM_DATA] - // condWriteCmdBuffer + // Format EEPROM data into a string + U08 paramStr[256]; + U16 offset = 0; + U16 i = 0; + for ( i = 0; i < DOUBLE_COUNT; ++i ) + { + offset += snprintf( paramStr + offset, sizeof(paramStr) - offset, "%.6f,", eepromData.doubleValue[i] ); + } + + for ( i = 0; i < FLOAT_COUNT; ++i ) + { + offset += snprintf( paramStr + offset, sizeof(paramStr) - offset, "%.6f,", eepromData.floatValue[i] ); + } + + // Remove trailing comma if needed + if ( offset > 0 && paramStr[offset - 1] == ',' ) + { + paramStr[offset - 1] = '\0'; + } + + if ( FALSE == sendTeensyWriteCmd( TEENSY_CMD_UPDATE_EEPROM_DATA, paramStr ) ) + { + // Handle error + } + return state; } @@ -670,8 +779,10 @@ { CONDUCTIVITY_COMM_STATE_T state = COND_COMM_STATE_SEND_CMD_GET_EEPROM_DATA; - // teensyCmd[TEENSY_CMD_GET_EEPROM_DATA] - // condReadCmdBuffer + if ( FALSE == sendTeensyReadCmd( TEENSY_CMD_GET_EEPROM_DATA ) ) + { + // Handle error + } return state; } @@ -685,13 +796,26 @@ return state; } -static CONDUCTIVITY_COMM_STATE_T sendCmd_updateMeasurementSettings( CONDUCTIVITY_MEASUREMENT_SETTINGS_T measurememtSettings ) +static CONDUCTIVITY_COMM_STATE_T sendCmd_updateMeasurementSettings( CONDUCTIVITY_MEASUREMENT_SETTINGS_T measurementSettings ) { CONDUCTIVITY_COMM_STATE_T state = COND_COMM_STATE_SEND_CMD_UPDATE_MEASUREMENT_SETTINGS; - // teensyCmd[TEENSY_CMD_UPDATE_MEASUREMENT_SETTINGS] - // condWriteCmdBuffer + // Format measurement settings into a string + U08 paramStr[128]; + snprintf( paramStr, sizeof(paramStr), "%.3f,%.3f,%.3f,%u,%u,%u,%u", + measurementSettings.SinFreq, + measurementSettings.DacVoltPP, + measurementSettings.BiasVolt, + measurementSettings.HstiaRtiaSel, + measurementSettings.AdcPgaGain, + measurementSettings.DftNum, + measurementSettings.ADCAvgNum ); + if ( FALSE == sendTeensyWriteCmd( TEENSY_CMD_UPDATE_MEASUREMENT_SETTINGS, paramStr ) ) + { + // Handle error + } + return state; } @@ -708,8 +832,10 @@ { CONDUCTIVITY_COMM_STATE_T state = COND_COMM_STATE_SEND_CMD_GET_MEASUREMENT_SETTINGS; - // teensyCmd[TEENSY_CMD_GET_MEASUREMENT_SETTINGS] - // condReadCmdBuffer + if ( FALSE == sendTeensyReadCmd( TEENSY_CMD_GET_MEASUREMENT_SETTINGS ) ) + { + // Handle error + } return state; } @@ -727,8 +853,10 @@ { CONDUCTIVITY_COMM_STATE_T state = COND_COMM_STATE_SEND_CMD_GET_MEASUREMENT; - // teensyCmd[TEENSY_CMD_GET_MEASUREMENT] - // condReadCmdBuffer + if ( FALSE == sendTeensyReadCmd( TEENSY_CMD_GET_MEASUREMENT ) ) + { + // Handle error + } return state; } @@ -745,8 +873,10 @@ static void sendCmd_stopMeasurement( void ) { - // teensyCmd[TEENSY_CMD_STOP_MEASUREMENT] - // condReadCmdBuffer + if ( FALSE == sendTeensyReadCmd( TEENSY_CMD_STOP_MEASUREMENT ) ) + { + // Handle error + } } static void rcvRspns_stopMeasurement( void ) @@ -758,8 +888,10 @@ static void sendCmd_getAllMeasurements( void ) { - // teensyCmd[TEENSY_CMD_GET_ALL_MEASUREMENTS] - // condReadCmdBuffer + if ( FALSE == sendTeensyReadCmd( TEENSY_CMD_GET_ALL_MEASUREMENTS ) ) + { + // Handle error + } } @@ -772,10 +904,16 @@ static void sendCmd_selectSensor( TEENSY_SENSOR_INDEX_T sensorNum ) { - // teensyCmd[TEENSY_CMD_SELECT_SENSOR] - // condWriteCmdBuffer + U08 paramStr[8]; + snprintf( paramStr, sizeof(paramStr), "%d", sensorNum ); + if ( FALSE == sendTeensyWriteCmd( TEENSY_CMD_SELECT_SENSOR, paramStr ) ) + { + // Handle error + } + } + static void rcvRspns_selectSensor( TEENSY_SENSOR_INDEX_T sensorNum ) { // condWriteResponseBuffer @@ -785,14 +923,16 @@ static void sendCmd_getSingleMeasurement( TEENSY_SENSOR_INDEX_T sensorNum ) { - // teensyCmd[TEENSY_CMD_GET_SINGLE_MEASUREMENT] - // condReadCmdBuffer + // Assumes sensor has already been selected + if ( FALSE == sendTeensyReadCmd( TEENSY_CMD_GET_SINGLE_MEASUREMENT ) ) + { + // Handle error + } } static void rcvRspns_getSingleMeasurement( TEENSY_SENSOR_INDEX_T sensorNum ) { - // teensyCmd[] // condReadResponseBuffer } Index: firmware/App/Drivers/ConductivityTeensy.h =================================================================== diff -u -r18f5ac036baf7dca352e881bdd64d6fd742d8c58 -r1ab489b7b273361422832d620165a66951b1f93b --- firmware/App/Drivers/ConductivityTeensy.h (.../ConductivityTeensy.h) (revision 18f5ac036baf7dca352e881bdd64d6fd742d8c58) +++ firmware/App/Drivers/ConductivityTeensy.h (.../ConductivityTeensy.h) (revision 1ab489b7b273361422832d620165a66951b1f93b) @@ -48,7 +48,7 @@ TEENSY_CMD_GET_ALL_MEASUREMENTS, ///< Maps to command "g" TEENSY_CMD_SELECT_SENSOR, ///< Maps to command "j" TEENSY_CMD_GET_SINGLE_MEASUREMENT, ///< Maps to command "h" - MAX_TEENSY_CMD_ ///< Total number of commands + MAX_NUM_OF_TEENSY_CMDS ///< Total number of commands } TEENSY_CMD_INDEX_T; /// Initialization status of all the sensors connected to Teensy