zoom/firmware/packet.c

48 lines
1020 B
C

#include "packet.h"
#include "uart.h"
/* 5 byte packets. 5 bytes * 10 bits/byte * 8 khz = 400 kbits/sec */
void packet_send_adc_dac(int16_t adc, uint16_t dac, int overflow)
{
char b[4];
/* Packet format for DAC/ADC values:
10100000 ffffAaaa aaaaaaaa Dddddddd dddddddd
ffff = flags, default 0000
...1 = possible overflow
Aaaaaaaaaaaa = 12-bit ADC value (2s compliment signed)
Dddddddddddddddd = 16-bit DAC command (unsigned)
*/
uart1_put(PACKET_ADC_DAC);
b[0] = (adc & 0x0F00) >> 8;
if (overflow)
b[0] |= 0x10;
b[1] = adc & 0xFF;
b[2] = (dac & 0xFF00) >> 8;
b[3] = dac & 0xFF;
uart1_put(b[0]);
uart1_put(b[1]);
uart1_put(b[2]);
uart1_put(b[3]);
}
void packet_send_calibration(float scale)
{
/* Packet format for calibration data:
A1 xx xx xx xx
where xx xx xx xx = 32-bit floating point value, little
endian IEEE 754 */
uint8_t *b = (uint8_t *)&scale;
uart1_put(PACKET_CALIBRATION);
uart1_put(b[0]);
uart1_put(b[1]);
uart1_put(b[2]);
uart1_put(b[3]);
}