esp_nano_hosted/src/nh_helper_event.c

53 lines
1.3 KiB
C

#include "nh_helper_event.h"
/**
* Espressif wraps Tag-Length-Value(TLV) data in the packet for events
* | 1 | 1 | N |
* | Tag | Length | Value |
*/
nh_ret_t nh_event_get_type(nh_event_type_t *type, uint8_t *event) {
*type = event[0];
return NH_RET_SUCCESS;
}
/**
* Parse Init event TLV data
* @param init
* @param data Event data
* @param max_len
* @return
*/
nh_ret_t nh_event_parse_init(nh_event_init_t *init, uint8_t *event) {
uint8_t ptr = 0;
uint8_t data_len = event[1];
uint8_t *data = &event[2];
while (ptr < data_len) {
uint8_t tag = data[ptr];
uint8_t len = data[ptr + 1];
uint8_t *val = &data[ptr + 2];
switch (tag) {
case NH_EVENT_INIT_TAG_CAP:
/* Device capabilities, length should be 1 */
init->capabilities = val[0];
break;
case NH_EVENT_INIT_TAG_FREQ:
init->spi_freq = val[0];
break;
case NH_EVENT_INIT_TAG_CHIP_ID:
init->chip_id = val[0];
break;
case NH_EVENT_INIT_TAG_RAW_TP:
/* Not implemented */
default:
break;
}
ptr += 2 + len; /* Increment, total length is 2 + payload length */
}
return NH_RET_SUCCESS;
}