![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
baseline build
Dependencies: FastPWM mbed-os mbed
Diff: CMSerial.cpp
- Revision:
- 0:8a420ac6394e
diff -r 000000000000 -r 8a420ac6394e CMSerial.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CMSerial.cpp Mon Jun 19 15:55:51 2017 +0000 @@ -0,0 +1,247 @@ + +#include "CMSerial.h" +#include "DeviceProperties.h" + +const char VERSION_STRING[] = "0.6"; + + +CMSerial::CMSerial(void) : led(LED2), serial(p13, p14) +{ + lineLength = 0; + serial.baud(115200); + threadSerial.start(this, &CMSerial::ThreadEntry); +} + +void CMSerial::ThreadEntry(void) +{ + while(true) + { + char c = serial.getc(); + led = !led; + if( c == '\n' ) + continue; + if (c == '\r') + { + line[lineLength] = 0; + ProcessCommand(); + lineLength = 0; + continue; + } + if (lineLength < sizeof(line) - 1) + line[lineLength++] = c; + } +} + +void CMSerial::ProcessCommand(void) +{ + + if (CommandIs("status")) + { + serial.printf("<status"); + serial.printf(" version=\"%s\"", VERSION_STRING); + serial.printf(" AcquisitionNumber=\"%d\"", Device.GetAcquisitionNumber()); + serial.printf(" AcquisitionSamples=\"%d\"", Device.GetAcquisitionSampleCount()); + // Control Parameters + serial.printf(" OutputMode=\"%d\"", (int)Device.deviceConfig.outputMode); + serial.printf(" ConstantVoltage=\"%f\"", Device.deviceConfig.constantVoltage); + serial.printf(" ConstantPower=\"%f\"", Device.deviceConfig.constantPower); + serial.printf(" KP=\"%lf\"", Device.deviceConfig.kp); + serial.printf(" KI=\"%lf\"", Device.deviceConfig.ki); + serial.printf(" KD=\"%lf\"", Device.deviceConfig.kd); + serial.printf(" VoltageCal=\"%lf\"", Device.deviceConfig.voltageCal); + serial.printf(" CurrentCal=\"%lf\"", Device.deviceConfig.currentCal); + serial.printf(" vLim=\"%lf\"", Device.deviceConfig.vLim); + serial.printf(" iLim=\"%lf\"", Device.deviceConfig.iLim); + // Activation Parameters + serial.printf(" PwmFrequency=\"%lf\"", Device.GetActualPWMFrequency()); + serial.printf(" OpenLoopDuration=\"%d\"", Device.deviceConfig.msOpenLoopDuration); + serial.printf(" TotalDuration=\"%lf\"", Device.deviceConfig.TotalDurationSeconds); + serial.printf(" RampDuration=\"%lf\"", Device.deviceConfig.msRampDuration); + serial.printf(" RampStartPower=\"%lf\"", Device.deviceConfig.rampStartPower); + serial.printf(" RampEndPower=\"%lf\"", Device.deviceConfig.rampEndPower); + serial.printf(" StartVoltage=\"%lf\"", Device.deviceConfig.startVoltage); + serial.printf(" SamplePeriod=\"%d\"", Device.deviceConfig.msSamplePeriod); + serial.printf("/>\r\n"); + return; + } + + if( CommandIs("GetSample")) + { + int acquisition = (int)GetNumericArgument(1, 0); + int sample = (int)GetNumericArgument(2, 0); + AcquisitionData sampleData = Device.GetAcquisitionSample(acquisition, sample); + serial.printf("<sample"); + serial.printf(" Time=\"%f\"", sampleData.timestampMilliseconds); + serial.printf(" TargetVoltage=\"%f\"", Device.deviceConfig.constantVoltage); + serial.printf(" Isns=\"%f\"", sampleData.iSense); + serial.printf(" Vsns=\"%f\"", sampleData.vSense); + serial.printf(" Irms=\"%f\"", sampleData.iRMS); + serial.printf(" Vrms=\"%f\"", sampleData.vRMS); + serial.printf("/>\r\n"); + return; + } + + if (CommandIs("version")) + { + serial.printf("%s\r\n", VERSION_STRING); + return; + } + + if( CommandIs("OutputMode")) + { + Device.deviceConfig.outputMode = (OutputMode) (int)GetNumericArgument(1, (int)Device.deviceConfig.outputMode); + serial.printf("%d\r\n", Device.deviceConfig.outputMode); + return; + } + + if( CommandIs("ConstantVoltage")) + { + Device.deviceConfig.constantVoltage = GetNumericArgument(1, Device.deviceConfig.constantVoltage); + serial.printf("%lf\r\n", Device.deviceConfig.constantVoltage); + return; + } + + if( CommandIs("ConstantPower")) + { + Device.deviceConfig.constantPower = GetNumericArgument(1, Device.deviceConfig.constantPower); + serial.printf("%lf\r\n", Device.deviceConfig.constantPower); + return; + } + + if( CommandIs("KP")) + { + Device.deviceConfig.kp = GetNumericArgument(1, Device.deviceConfig.kp); + serial.printf("%lf\r\n", Device.deviceConfig.kp); + return; + } + + if( CommandIs("KI")) + { + Device.deviceConfig.ki = GetNumericArgument(1, Device.deviceConfig.ki); + serial.printf("%lf\r\n", Device.deviceConfig.ki); + return; + } + + if( CommandIs("KD")) + { + Device.deviceConfig.kd = GetNumericArgument(1, Device.deviceConfig.kd); + serial.printf("%lf\r\n", Device.deviceConfig.kd); + return; + } + + if( CommandIs("VoltageCal")) + { + Device.deviceConfig.voltageCal = GetNumericArgument(1, Device.deviceConfig.voltageCal); + serial.printf("%lf\r\n", Device.deviceConfig.voltageCal); + return; + } + + if( CommandIs("CurrentCal")) + { + Device.deviceConfig.currentCal = GetNumericArgument(1, Device.deviceConfig.currentCal); + serial.printf("%lf\r\n", Device.deviceConfig.currentCal); + return; + } + + if( CommandIs("vLim")) + { + Device.deviceConfig.vLim = GetNumericArgument(1, Device.deviceConfig.vLim); + serial.printf("%lf\r\n", Device.deviceConfig.vLim); + return; + } + + if( CommandIs("iLim")) + { + Device.deviceConfig.iLim = GetNumericArgument(1, Device.deviceConfig.iLim); + serial.printf("%lf\r\n", Device.deviceConfig.iLim); + return; + } + + // Activation Parameters + if( CommandIs("PwmFrequency")) + { + Device.deviceConfig.pwmFrequency = GetNumericArgument(1, Device.deviceConfig.pwmFrequency); + serial.printf("%lf\r\n", Device.deviceConfig.pwmFrequency); + return; + } + + if( CommandIs("OpenLoopDuration")) + { + Device.deviceConfig.msOpenLoopDuration = GetNumericArgument(1, Device.deviceConfig.msOpenLoopDuration); + serial.printf("%lf\r\n", Device.deviceConfig.msOpenLoopDuration); + return; + } + + if( CommandIs("TotalDuration")) + { + Device.deviceConfig.TotalDurationSeconds = GetNumericArgument(1, Device.deviceConfig.TotalDurationSeconds); + serial.printf("%lf\r\n", Device.deviceConfig.TotalDurationSeconds); + return; + } + + if( CommandIs("RampDuration")) + { + Device.deviceConfig.msRampDuration = GetNumericArgument(1, Device.deviceConfig.msRampDuration); + serial.printf("%lf\r\n", Device.deviceConfig.msRampDuration); + return; + } + + if( CommandIs("RampStartPower")) + { + Device.deviceConfig.rampStartPower = GetNumericArgument(1, Device.deviceConfig.rampStartPower); + serial.printf("%lf\r\n", Device.deviceConfig.rampStartPower); + return; + } + + if( CommandIs("RampEndPower")) + { + Device.deviceConfig.rampEndPower = GetNumericArgument(1, Device.deviceConfig.rampEndPower); + serial.printf("%lf\r\n", Device.deviceConfig.rampEndPower); + return; + } + + if( CommandIs("StartVoltage")) + { + Device.deviceConfig.startVoltage = GetNumericArgument(1, Device.deviceConfig.startVoltage); + serial.printf("%lf\r\n", Device.deviceConfig.startVoltage); + return; + } + + if( CommandIs("SamplePeriod")) + { + Device.deviceConfig.msSamplePeriod = GetNumericArgument(1, Device.deviceConfig.msSamplePeriod); + serial.printf("%lf\r\n", Device.deviceConfig.msSamplePeriod); + return; + } + + serial.printf("Unrecognized command: %s\r\n", line); +} + +bool CMSerial::CommandIs(const char *command) +{ + int length = strlen(command); + if (strncmp(command, line, length) != 0) + return false; + if (line[length]!=0 && line[length]!=' ') + return false; + return true; +} + +double CMSerial::GetNumericArgument(int index, double defaultValue) +{ + // for the moment we just require that arguments be separated by a single space + const char *start = line; + for (int i=0; i<index; ++i) + { + start = strchr(start, ' '); + if (start == NULL) + return defaultValue; + ++start; + } + + double result; + if (1 != sscanf(start, "%lf", &result)) + return defaultValue; + return result; +} +