Index: firmware/App/Drivers/ConductivityTeensy.c =================================================================== diff -u -rf135c526491ca9a69fe1b1b5334e52109b861ebd -r3fde11b3e67db8690667c7d96696b25e5108a395 --- firmware/App/Drivers/ConductivityTeensy.c (.../ConductivityTeensy.c) (revision f135c526491ca9a69fe1b1b5334e52109b861ebd) +++ firmware/App/Drivers/ConductivityTeensy.c (.../ConductivityTeensy.c) (revision 3fde11b3e67db8690667c7d96696b25e5108a395) @@ -92,8 +92,6 @@ static CONDUCTIVITY_INIT_STATUS_T conductivityInitStatus; static CONDUCTIVITY_UPDATE_EEPROM_STATUS_T condUpdateEEPROMstatus; static CONDUCTIVITY_UPDATE_MST_STATUS_T condUpdateSettingStatus[MAX_CONDUCTIVITY_MST_PARAM_IDX]; -static CONDUCTIVITY_EEPROM_DATA_T conductivityEEPROMdata; -static CONDUCTIVITY_MEASUREMENT_SETTINGS_T conductivityMeasurementSettings; static CONDUCTIVITY_SENSOR_DATA_T rawConductivityValues[ MAX_TEENSY_SENSOR ]; static CONDUCTIVITY_CALCULATED_MEASUREMENTS_T calculatedMeasurement[ MAX_TEENSY_SENSOR ]; static CONDUCTIVITY_COEFFICIENTS_T conductivityCoeff[MAX_TEENSY_SENSOR]; @@ -132,6 +130,8 @@ // ********** private function prototypes ********** static void initConductivityDMAchannels( void ); +static void initEEPROMdata( void ); +static void initMeasurementSettings( void ); static CONDUCTIVITY_COMM_STATE_T handleConductivityIdle( void ); static CONDUCTIVITY_COMM_STATE_T handleConductivityTX( void ); static CONDUCTIVITY_COMM_STATE_T handleConductivityRX( void ); @@ -165,13 +165,13 @@ static CONDUCTIVITY_COMM_STATE_T txGetInitStatus( void ); static CONDUCTIVITY_COMM_STATE_T rxGetInitStatus( void ); -static CONDUCTIVITY_COMM_STATE_T txUpdateEEPROMdata( CONDUCTIVITY_EEPROM_DATA_T eepromData); +static CONDUCTIVITY_COMM_STATE_T txUpdateEEPROMdata( void ); static CONDUCTIVITY_COMM_STATE_T rxUpdateEEPROMdata( void ); static CONDUCTIVITY_COMM_STATE_T txGetEEPROMdata( void ); static CONDUCTIVITY_COMM_STATE_T rxGetEEPROMdata( void ); -static CONDUCTIVITY_COMM_STATE_T txUpdateMeasurementSettings( CONDUCTIVITY_MEASUREMENT_SETTINGS_T measurementSettings ); +static CONDUCTIVITY_COMM_STATE_T txUpdateMeasurementSettings( void ); static CONDUCTIVITY_COMM_STATE_T rxUpdateMeasurementSettings( void ); static CONDUCTIVITY_COMM_STATE_T txGetMeasurementSettings( void ); @@ -221,13 +221,16 @@ // add init conductivity commands enqueue( TEENSY_CMD_INIT_SENSOR ); enqueue( TEENSY_CMD_GET_INIT_STATUS ); - currentSettingParam = CONDUCTIVITY_MST_PARAM_IDX_SINFREQ; - enqueue( TEENSY_CMD_UPDATE_MEASUREMENT_SETTINGS ); + initEEPROMdata( ); + enqueue( TEENSY_CMD_GET_EEPROM_DATA ); + initMeasurementSettings( ); + enqueue( TEENSY_CMD_GET_MEASUREMENT_SETTINGS ); + enqueue( TEENSY_CMD_GET_MEASUREMENT ); + } static void initConductivityDMAchannels( void ) { - memset( &condWriteCmdBuffer, 0, COND_WRITE_CMD_BUFFER_LEN ); memset( &condWriteResponseBuffer, 0, COND_WRITE_RSP_BUFFER_LEN ); // Enable interrupt notifications for FPGA serial port @@ -318,6 +321,53 @@ consumeUnexpectedConductivityData(); } +static void initEEPROMdata( void ) +{ + // TODO Update real values in eePromDataTX + eePromDataTX.doubleValue[ 0 ] = 0.0; + eePromDataTX.doubleValue[ 1 ] = 0.0; + eePromDataTX.doubleValue[ 2 ] = 0.0; + eePromDataTX.doubleValue[ 3 ] = 0.0; + eePromDataTX.doubleValue[ 4 ] = 0.0; + eePromDataTX.doubleValue[ 5 ] = 0.0; + eePromDataTX.doubleValue[ 6 ] = 0.0; + eePromDataTX.doubleValue[ 7 ] = 0.0; + + eePromDataTX.floatValue[ 0 ] = 0.0; + eePromDataTX.floatValue[ 1 ] = 0.0; + eePromDataTX.floatValue[ 2 ] = 0.0; + eePromDataTX.floatValue[ 3 ] = 0.0; + eePromDataTX.floatValue[ 4 ] = 0.0; + eePromDataTX.floatValue[ 5 ] = 0.0; + eePromDataTX.floatValue[ 6 ] = 0.0; + eePromDataTX.floatValue[ 7 ] = 0.0; + eePromDataTX.floatValue[ 8 ] = 0.0; + eePromDataTX.floatValue[ 8 ] = 0.0; + eePromDataTX.floatValue[ 10 ] = 0.0; + eePromDataTX.floatValue[ 11 ] = 0.0; + eePromDataTX.floatValue[ 12 ] = 0.0; + eePromDataTX.floatValue[ 13 ] = 0.0; + eePromDataTX.floatValue[ 14 ] = 0.0; + eePromDataTX.floatValue[ 15 ] = 0.0; + + enqueue( TEENSY_CMD_UPDATE_EEPROM_DATA ); + +} + +static void initMeasurementSettings( void ) +{ + // TODO Update real values in measurementSettingsTX + measurementSettingsTX.SinFreq = 11000.0; + measurementSettingsTX.DacVoltPP = 400.0; + measurementSettingsTX.BiasVolt = 200.0; + measurementSettingsTX.HstiaRtiaSel = 7; + measurementSettingsTX.AdcPgaGain = 2; + measurementSettingsTX.DftNum = 256; + measurementSettingsTX.ADCAvgNum = 16; + + enqueue( TEENSY_CMD_UPDATE_MEASUREMENT_SETTINGS ); +} + /*********************************************************************//** * @brief * The execConductivityTeensy function manages incoming data exchanges with @@ -394,13 +444,13 @@ state = txGetInitStatus(); break; case TEENSY_CMD_UPDATE_EEPROM_DATA: - state = txUpdateEEPROMdata( eePromDataTX ); + state = txUpdateEEPROMdata( ); break; case TEENSY_CMD_GET_EEPROM_DATA: state = txGetEEPROMdata(); break; case TEENSY_CMD_UPDATE_MEASUREMENT_SETTINGS: - state = txUpdateMeasurementSettings( measurementSettingsTX ); + state = txUpdateMeasurementSettings( ); break; case TEENSY_CMD_GET_MEASUREMENT_SETTINGS: state = txGetMeasurementSettings(); @@ -789,7 +839,7 @@ else { // Parse and store the data - memcpy(&conductivityMeasurementSettings, buffer, expectedDataLength); + memcpy(&measurementSettingsRX, buffer, expectedDataLength); parseStatus = CONDUCTIVITY_PARSE_SUCCESS; } @@ -824,7 +874,7 @@ else { // Parse and Store the data - memcpy(&conductivityEEPROMdata, buffer, expectedDataLength); + memcpy(&eePromDataRX, buffer, expectedDataLength); parseStatus = CONDUCTIVITY_PARSE_SUCCESS; } @@ -1112,7 +1162,7 @@ return state; } -static CONDUCTIVITY_COMM_STATE_T txUpdateEEPROMdata( CONDUCTIVITY_EEPROM_DATA_T eepromData ) +static CONDUCTIVITY_COMM_STATE_T txUpdateEEPROMdata( void ) { CONDUCTIVITY_COMM_STATE_T state = COND_COMM_STATE_TX; @@ -1127,15 +1177,15 @@ offset += snprintf( (char*)(paramStr + offset), sizeof(paramStr) - offset, "%.6f,", - eepromData.doubleValue[i] ); + eePromDataTX.doubleValue[i] ); } for ( i = 0; i < FLOAT_COUNT; ++i ) { offset += snprintf( (char*)(paramStr + offset), sizeof(paramStr) - offset, "%.6f,", - eepromData.floatValue[i] ); + eePromDataTX.floatValue[i] ); } // Remove trailing comma if needed @@ -1229,7 +1279,7 @@ condResponseTime = 0; // Read the data from the receive buffer - memcpy(&conductivityEEPROMdata, &condRxBuffer, teensyCmdMap[ TEENSY_CMD_GET_EEPROM_DATA ].rxSize); + memcpy(&eePromDataRX, &condRxBuffer, teensyCmdMap[ TEENSY_CMD_GET_EEPROM_DATA ].rxSize); // parseStatus = parseEEPROMdata( condRxBuffer, COND_RX_BUFFER_LEN ); // Check if parsing was done successfully @@ -1257,47 +1307,21 @@ return state; } -static CONDUCTIVITY_COMM_STATE_T txUpdateMeasurementSettings( CONDUCTIVITY_MEASUREMENT_SETTINGS_T measurementSettings) +static CONDUCTIVITY_COMM_STATE_T txUpdateMeasurementSettings( void ) { CONDUCTIVITY_COMM_STATE_T state = COND_COMM_STATE_TX; - U08 paramStr[64]; + U08 paramStr[128]; - switch (currentSettingParam) - { - case CONDUCTIVITY_MST_PARAM_IDX_SINFREQ: - snprintf(paramStr, sizeof(paramStr), "%s,%.3f", condSettingsParam[currentSettingParam], measurementSettings.SinFreq); - break; + snprintf( ( char * )paramStr, sizeof( paramStr ), + "%.4f,%.4f,%.4f,%lu,%lu,%lu,%lu", + measurementSettingsTX.SinFreq, + measurementSettingsTX.DacVoltPP, + measurementSettingsTX.BiasVolt, + measurementSettingsTX.HstiaRtiaSel, + measurementSettingsTX.AdcPgaGain, + measurementSettingsTX.DftNum, + measurementSettingsTX.ADCAvgNum ); - case CONDUCTIVITY_MST_PARAM_IDX_DACPP: - snprintf(paramStr, sizeof(paramStr), "%s,%.3f", condSettingsParam[currentSettingParam], measurementSettings.DacVoltPP); - break; - - case CONDUCTIVITY_MST_PARAM_IDX_BIAS: - snprintf(paramStr, sizeof(paramStr), "%s,%.3f", condSettingsParam[currentSettingParam], measurementSettings.BiasVolt); - break; - - case CONDUCTIVITY_MST_PARAM_IDX_RTIA: - snprintf(paramStr, sizeof(paramStr), "%s,%u", condSettingsParam[currentSettingParam], measurementSettings.HstiaRtiaSel); - break; - - case CONDUCTIVITY_MST_PARAM_IDX_PGA: - snprintf(paramStr, sizeof(paramStr), "%s,%u", condSettingsParam[currentSettingParam], measurementSettings.AdcPgaGain); - break; - - case CONDUCTIVITY_MST_PARAM_IDX_DFTNUM: - snprintf(paramStr, sizeof(paramStr), "%s,%u", condSettingsParam[currentSettingParam], measurementSettings.DftNum); - break; - - case CONDUCTIVITY_MST_PARAM_IDX_AVGNUM: - snprintf(paramStr, sizeof(paramStr), "%s,%u", condSettingsParam[currentSettingParam], measurementSettings.ADCAvgNum); - break; - - default: - // Go to failed state - state = COND_COMM_STATE_FAILED; - break; - } - // If update measurement settings cmd was sent successfully if ( TRUE == txTeensyWriteCmd( TEENSY_CMD_UPDATE_MEASUREMENT_SETTINGS, paramStr ) ) { @@ -1319,69 +1343,21 @@ static CONDUCTIVITY_COMM_STATE_T rxUpdateMeasurementSettings( void ) { CONDUCTIVITY_COMM_STATE_T state = COND_COMM_STATE_RX; - CONDUCTIVITY_UPDATE_MST_STATUS_T updateSettingStatus = COND_MST_STATUS_ERR_UNRECOGNIZED_PARAM; // Check if a response is received in the RX buffer BOOL recvComplete = rxTeensyReadRsp( TEENSY_CMD_UPDATE_MEASUREMENT_SETTINGS ); if ( TRUE == recvComplete ) { - // Get the time stamp for next parameter - condResponseTime = getMSTimerCount(); + // Reset the timer for next use. + condResponseTime = 0; // Read the data from the receive buffer - memcpy(&updateSettingStatus, &condRxBuffer, teensyCmdMap[ TEENSY_CMD_UPDATE_MEASUREMENT_SETTINGS ].rxSize); + memcpy(&condUpdateSettingStatus, &condRxBuffer, teensyCmdMap[ TEENSY_CMD_UPDATE_MEASUREMENT_SETTINGS ].rxSize); // updateSettingStatus = ( CONDUCTIVITY_UPDATE_MST_STATUS_T )condTxBuffer[0]; - // Store the status of update measurement settings for the current param - condUpdateSettingStatus[currentSettingParam] = updateSettingStatus; - // Move to TX state to update the next param. state = COND_COMM_STATE_TX; - switch (currentSettingParam) - { - case CONDUCTIVITY_MST_PARAM_IDX_SINFREQ: - currentSettingParam = CONDUCTIVITY_MST_PARAM_IDX_DACPP; - break; - - case CONDUCTIVITY_MST_PARAM_IDX_DACPP: - currentSettingParam = CONDUCTIVITY_MST_PARAM_IDX_BIAS; - break; - - case CONDUCTIVITY_MST_PARAM_IDX_BIAS: - currentSettingParam = CONDUCTIVITY_MST_PARAM_IDX_RTIA; - break; - - case CONDUCTIVITY_MST_PARAM_IDX_RTIA: - currentSettingParam = CONDUCTIVITY_MST_PARAM_IDX_PGA; - break; - - case CONDUCTIVITY_MST_PARAM_IDX_PGA: - currentSettingParam = CONDUCTIVITY_MST_PARAM_IDX_DFTNUM; - break; - - case CONDUCTIVITY_MST_PARAM_IDX_DFTNUM: - currentSettingParam = CONDUCTIVITY_MST_PARAM_IDX_AVGNUM; - break; - - case CONDUCTIVITY_MST_PARAM_IDX_AVGNUM: - { - // Reset the timer for next use. - condResponseTime = 0; - - // Update the current setting param to the first param in the list - currentSettingParam = CONDUCTIVITY_MST_PARAM_IDX_SINFREQ; - - // Go to the idle state. All the measurement settings param have been updated. - state = COND_COMM_STATE_IDLE; - break; - } - - default: - // Go to failed state - state = COND_COMM_STATE_FAILED; - break; - } } else if ( TRUE == didTimeout( condResponseTime, COND_STATUS_TIMEOUT_MS ) ) { @@ -1432,7 +1408,7 @@ condResponseTime = 0; // Read the data from the receive buffer - memcpy(&conductivityMeasurementSettings, &condRxBuffer, teensyCmdMap[ TEENSY_CMD_GET_MEASUREMENT_SETTINGS ].rxSize); + memcpy(&measurementSettingsRX, &condRxBuffer, teensyCmdMap[ TEENSY_CMD_GET_MEASUREMENT_SETTINGS ].rxSize); // parseStatus = parseMeasurementSettings( condRxBuffer, COND_RX_BUFFER_LEN ); // Check if parsing was done successfully