Skip to content
Snippets Groups Projects
override.c 1.18 KiB
Newer Older
#include <sys/types.h>
#include <inttypes.h>
#include <string.h>

#include "output.h"
#include "commands.h"
#include "bitwise.h"

#define NUM_OUTPUTS 4
#define DATA_SIZE (1+NUM_OUTPUTS*4)

/* Creates data and metadata for a overrideoutput packet
 * Returns data size.
 */
ssize_t EncodeSetOutputOverride(
        struct metadata * m,        /* data_len and msg_type will be populated*/
        uint8_t * data,             /* Output buffer */
        size_t data_size,           /* Max buffer size */
        const char * msg)          /* Message to encode */
{
	m->msg_type = OUTPUT_OVERRIDE_ID;
	m->data_len = DATA_SIZE;

	if (data_size < DATA_SIZE) {
		return -1;
	}

	float values[NUM_OUTPUTS];
	values[0] = -1;
	char* tok = strtok(msg, " ");
	char* ena = strtok(NULL, " ");
	data[0] = atoi(ena);
	int i;
	for (i = 0; i < NUM_OUTPUTS; i++) {
		char* value = strtok(NULL, " ");
		if (value == NULL) {
			return -1;
		}
		float a;
		sscanf(value, "%f", &a);
		values[i] = a;
	}
	
	for (i = 0; i < NUM_OUTPUTS; i++) {
		data[1+i*4+0] = FloatByte1(values[i]);
		data[1+i*4+1] = FloatByte2(values[i]);
		data[1+i*4+2] = FloatByte3(values[i]);
		data[1+i*4+3] = FloatByte4(values[i]);
	}
	return DATA_SIZE;
}