void onCommandIntegralWindup() { if (isChannelCorrect(gParameters[0])) { int channel = convertToInt(gParameters[0]); double windup = atof(gParameters[1]); if (isReadCommand(gParameters[1])) { sendDouble(iWindupThresholds[channel]); sendAck(); } else if (isDoubleWithinRange(windup, I_WINDUP_THRESH_MIN, I_WINDUP_THRESH_MAX)) { iWindupThresholds[channel] = windup; sendAck(); } else { sendDoubleRangeError(I_WINDUP_THRESH_MIN, I_WINDUP_THRESH_MAX, DEGREES_UNIT); } } else { sendChannelError(); } }
void onCommandSetPoint() { if (isChannelCorrect(gParameters[0])) { int channel = convertToInt(gParameters[0]); double setPoint = atof(gParameters[1]); if (isReadCommand(gParameters[1])) { sendDouble(setPoints[channel]); sendAck(); } else if (isDoubleWithinRange(setPoint, minSetPoint[channel], maxSetPoint[channel])) { setPoints[channel] = setPoint; sendAck(); } else { sendDoubleRangeError(minSetPoint[channel], maxSetPoint[channel], DEGREES_UNIT); } } else { sendChannelError(); } }
static void *testMethod(void *args) { struct worker_thread_args *worker_args = (struct worker_thread_args *)args; pthread_mutex_t *sendLock = worker_args->sendLock; WorkPool *workPool = worker_args->workPool; Renderer *r = worker_args->renderer; int height = worker_args->height; int coordSocketFd = worker_args->coordSocketFd; int y = 0; while (true) { int x; if (!workPool->getNextJob(x)) { break; return NULL; } for (y = 0; y < height; y++) { vector<double> colour = r->render(x, y, superSampling, sampleDimension); int status = 0; pthread_mutex_lock(sendLock); status = sendDouble(coordSocketFd, (double)x); if (status < 0) { goto cleanup; } status = sendDouble(coordSocketFd, (double)y); if (status < 0) { goto cleanup; } for (unsigned int k = 0; k < colour.size(); k++) { int status = sendDouble(coordSocketFd, colour[k]); if (status < 0) { goto cleanup; } } pthread_mutex_unlock(sendLock); } } cleanup: pthread_mutex_unlock(sendLock); return NULL; }
void onCommandVersion() { if (isReadCommand(gParameters[0])) { sendDouble(FIRMWARE_VERSION); sendAck(); } else { sendReadOnlyError(); } }
void onCommandAdc() { int adcChannel = convertToInt(gParameters[0]); if (isIntWithinRange(adcChannel, ADC_CHANNEL_MIN, ADC_CHANNEL_MAX)) { double voltage = getSampledAdcVoltage(adcChannel); sendDouble(voltage); sendAck(); } else { sendIntRangeError(ADC_CHANNEL_MIN, ADC_CHANNEL_MAX, NO_UNIT); } }
void onCommandAngle() { if (isChannelCorrect(gParameters[0])) { int channel = convertToInt(gParameters[0]); if (isReadCommand(gParameters[1])) { sendDouble(currentAngles[channel]); sendAck(); } else { sendReadOnlyError(); } } else { sendChannelError(); } }
void onCommandDacVoltage() { if (isChannelCorrect(gParameters[0])) { uint8_t channel = convertToInt(gParameters[0]); double voltage = atof(gParameters[1]); if (isReadCommand(gParameters[1])) { sendDouble(currentVoltages[channel]); sendAck(); } else { if (!isSafetyOn) { if (isDoubleWithinRange(voltage, MOTOR_MIN_VOLTAGE, MOTOR_MAX_VOLTAGE)) { setDacVoltage(channel, voltage); sendAck(); } else { sendDoubleRangeError(MOTOR_MIN_VOLTAGE, MOTOR_MAX_VOLTAGE, VOLTAGE_UNIT); } } else { Serial.println(F("Cannot change voltage while safety is on.")); sendNack(); } } } else { sendChannelError(); } }
void onCommandDerivativeGain() { if (isChannelCorrect(gParameters[0])) { int channel = convertToInt(gParameters[0]); if (isProfileCorrect(gParameters[1])) { int profile = convertToInt(gParameters[1]); double dGain = atof(gParameters[2]); if (isReadCommand(gParameters[2])) { sendDouble(dGains[channel][profile]); sendAck(); } else if (isDoubleWithinRange(dGain, D_GAIN_MIN, D_GAIN_MAX)) { dGains[channel][profile] = dGain; sendAck(); } else { sendDoubleRangeError(D_GAIN_MIN, D_GAIN_MAX, NO_UNIT); } } else { sendProfileError(); } } else { sendChannelError(); } }
void sendFloat(float i) { sendDouble(i); }
int StatsdClient::gaugeDouble(const string& key, double value, float sample_rate) { return sendDouble(key, value, "g", sample_rate); }