kopia lustrzana https://github.com/RobertGawron/IonizationChamber
41 wiersze
1.0 KiB
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;
|
|
}
|
|
|