IonizationChamber/Software/Firmware/Src/MeasurementFrame.c

41 wiersze
1.0 KiB
C

#include "MeasurementFrame.h"
#include "BitHandler.h"
#define MAX_FRAME_LENGTH 5
#define FRAME_SEND_MEASSUREMENT_ID 1
#define GET_CRC(configuration, data) (configuration ^ GET_MSB(data) ^ GET_LSB(data))
enum Frameffsets { FRAME_PREAMBLE=0,
FRAME_CONFIGURATION=1,
FRAME_DATA_MSB=2,
FRAME_DATA_LSB=3,
FRAME_CRC=4 };
static uint8_t buffer[MAX_FRAME_LENGTH];
void MeasurementFrame_Create(uint8_t configuration, uint16_t data)
{
buffer[FRAME_PREAMBLE] = (FRAME_SEND_MEASSUREMENT_ID << 4) | MAX_FRAME_LENGTH;
buffer[FRAME_CONFIGURATION] = configuration;
buffer[FRAME_DATA_MSB] = GET_MSB(data);
buffer[FRAME_DATA_LSB] = GET_LSB(data);
buffer[FRAME_CRC] = GET_CRC(configuration, data);
}
bool MeasurementFrame_Send(void (*sendFunction)(uint8_t))
{
uint8_t i = 0;
for(i = 0; i < MAX_FRAME_LENGTH; i++)
{
sendFunction(buffer[i]);
}
// TODO this should return status of sending data
return TRUE;
}