53 lines
1.3 KiB
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;
|
|
} |