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();
	}
}
Example #3
0
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();
	}
}
Example #9
0
void sendFloat(float i) {
    sendDouble(i);
}
Example #10
0
int StatsdClient::gaugeDouble(const string& key, double value, float sample_rate)
{
    return sendDouble(key, value, "g", sample_rate);
}