Raw send support.
This commit is contained in:
34
raw.c
34
raw.c
@@ -47,6 +47,24 @@ static bool raw_parse_mode_s_long(struct buf *buf, struct packet *packet) {
|
||||
return true;
|
||||
}
|
||||
|
||||
static void raw_serialize_mode_s_short(struct packet *packet, struct buf *buf) {
|
||||
struct raw_mode_s_short_overlay *overlay = (struct raw_mode_s_short_overlay *) buf_at(buf, 0);
|
||||
overlay->asterisk = '*';
|
||||
overlay->semicolon = ';';
|
||||
overlay->lf = '\n';
|
||||
hex_from_bin(overlay->payload, packet->payload, sizeof(overlay->payload) / 2);
|
||||
buf->length = sizeof(*overlay);
|
||||
}
|
||||
|
||||
static void raw_serialize_mode_s_long(struct packet *packet, struct buf *buf) {
|
||||
struct raw_mode_s_long_overlay *overlay = (struct raw_mode_s_long_overlay *) buf_at(buf, 0);
|
||||
overlay->asterisk = '*';
|
||||
overlay->semicolon = ';';
|
||||
overlay->lf = '\n';
|
||||
hex_from_bin(overlay->payload, packet->payload, sizeof(overlay->payload) / 2);
|
||||
buf->length = sizeof(*overlay);
|
||||
}
|
||||
|
||||
void raw_init() {
|
||||
assert(sizeof(struct raw_mode_s_short_overlay) < BUF_LEN_MAX);
|
||||
assert(sizeof(struct raw_mode_s_long_overlay) < BUF_LEN_MAX);
|
||||
@@ -57,3 +75,19 @@ bool raw_parse(struct buf *buf, struct packet *packet, void *state_in) {
|
||||
raw_parse_mode_s_short(buf, packet) ||
|
||||
raw_parse_mode_s_long(buf, packet));
|
||||
}
|
||||
|
||||
void raw_serialize(struct packet *packet, struct buf *buf) {
|
||||
if (!packet) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (packet->type) {
|
||||
case MODE_S_SHORT:
|
||||
raw_serialize_mode_s_short(packet, buf);
|
||||
break;
|
||||
|
||||
case MODE_S_LONG:
|
||||
raw_serialize_mode_s_long(packet, buf);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user