46#ifndef PROTOCORE_HMMD_H
47#define PROTOCORE_HMMD_H
57#define PC_HMMD_GATES 16
60#define PC_HMMD_REPORT_LEN 35
63#define PC_HMMD_FRAME_MAX 45
70 uint16_t gate_energy[PC_HMMD_GATES];
79bool pc_hmmd_parse_report(
const uint8_t *frame,
size_t len, HmmdReport *out);
84 uint8_t buf[PC_HMMD_FRAME_MAX];
92void pc_hmmd_stream_reset(HmmdStream *s);
98bool pc_hmmd_stream_push(HmmdStream *s, uint8_t
byte, HmmdReport *out);
101bool pc_hmmd_present(
const HmmdReport *r);
104uint16_t pc_hmmd_distance_cm(
const HmmdReport *r);
116size_t pc_hmmd_cmd_build(uint8_t *buf,
size_t cap, uint16_t word,
const uint8_t *value,
size_t vlen);
119size_t pc_hmmd_cmd_open(uint8_t *buf,
size_t cap);
121size_t pc_hmmd_cmd_close(uint8_t *buf,
size_t cap);
123size_t pc_hmmd_cmd_read_firmware(uint8_t *buf,
size_t cap);
125size_t pc_hmmd_cmd_read_serial(uint8_t *buf,
size_t cap);
127size_t pc_hmmd_cmd_read_config(uint8_t *buf,
size_t cap);
136size_t pc_hmmd_cmd_read_register(uint8_t *buf,
size_t cap,
const uint8_t *value,
size_t vlen);
144 const uint8_t *payload;
156bool pc_hmmd_parse_ack(
const uint8_t *frame,
size_t len, HmmdAck *out);
164bool pc_hmmd_ack_matches(
const HmmdAck *ack, uint16_t word);
169bool pc_hmmd_begin(
int rx_pin,
int tx_pin);
175const HmmdReport *pc_hmmd_last();
User-facing configuration for ProtoCore.