2024-10-06 22:47:44 +00:00
|
|
|
#include <cmdbuf.h>
|
2024-10-07 04:55:44 +00:00
|
|
|
#include <hex.h>
|
2024-10-06 22:47:44 +00:00
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
bool cmd_match_str(CommandBuf *cmd, const char *str) {
|
|
|
|
size_t len = strlen(str);
|
|
|
|
if (cmd->len < len) return false;
|
|
|
|
if (!strncmp(cmd->buf, str, len)) {
|
|
|
|
cmd->buf += len;
|
|
|
|
cmd->len -= len;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool cmd_match_hex_number(CommandBuf *cmd, uint32_t *value) {
|
|
|
|
size_t read = 0;
|
|
|
|
size_t max_len = cmd->len;
|
|
|
|
if (max_len > 8) max_len = 8;
|
|
|
|
|
|
|
|
*value = 0;
|
|
|
|
for (; read < max_len; ++read) {
|
|
|
|
char digit;
|
|
|
|
if (!parse_hex_digit(cmd->buf[read], &digit)) break;
|
|
|
|
*value = (*value << 4) | digit;
|
|
|
|
}
|
|
|
|
if (!read) return false;
|
|
|
|
|
|
|
|
cmd->buf += read;
|
|
|
|
cmd->len -= read;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool cmd_match_hex_bytes(CommandBuf *cmd, const uint32_t count, char *value) {
|
|
|
|
if (cmd->len < (count * 2)) return false;
|
|
|
|
for (size_t i = 0; i < count; ++i) {
|
|
|
|
char hi, lo;
|
|
|
|
if (!parse_hex_digit(cmd->buf[i * 2], &hi)) return false;
|
|
|
|
if (!parse_hex_digit(cmd->buf[(i * 2) + 1], &lo)) return false;
|
|
|
|
value[i] = (hi << 4) | lo;
|
|
|
|
}
|
|
|
|
cmd->buf += (count * 2);
|
|
|
|
cmd->len -= (count * 2);
|
|
|
|
return true;
|
|
|
|
}
|