|
|
|
@ -206,13 +206,16 @@ void xap_send_base(uint8_t *data, uint8_t length) { |
|
|
|
|
|
|
|
|
|
void xap_send(xap_token_t token, uint8_t response_flags, const void *data, size_t length) { |
|
|
|
|
uint8_t rdata[XAP_BUFFER_SIZE] = {0}; |
|
|
|
|
*(xap_token_t *)&rdata[0] = token; |
|
|
|
|
if (length > (XAP_BUFFER_SIZE - 4)) response_flags &= ~(XAP_RESPONSE_FLAG_SUCCESS); |
|
|
|
|
rdata[2] = response_flags; |
|
|
|
|
xap_response_header_t *header = (xap_response_header_t *)&rdata[0]; |
|
|
|
|
header->token = token; |
|
|
|
|
|
|
|
|
|
if (length > (XAP_BUFFER_SIZE - sizeof(xap_response_header_t))) response_flags &= ~(XAP_RESPONSE_FLAG_SUCCESS); |
|
|
|
|
header->flags = response_flags; |
|
|
|
|
|
|
|
|
|
if (response_flags & (XAP_RESPONSE_FLAG_SUCCESS)) { |
|
|
|
|
rdata[3] = (uint8_t)length; |
|
|
|
|
header->length = (uint8_t)length; |
|
|
|
|
if (data != NULL) { |
|
|
|
|
memcpy(&rdata[4], data, length); |
|
|
|
|
memcpy(&rdata[sizeof(xap_response_header_t)], data, length); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
xap_send_base(rdata, sizeof(rdata)); |
|
|
|
@ -220,10 +223,9 @@ void xap_send(xap_token_t token, uint8_t response_flags, const void *data, size_ |
|
|
|
|
|
|
|
|
|
void xap_receive_base(const void *data) { |
|
|
|
|
const uint8_t *u8data = (const uint8_t *)data; |
|
|
|
|
xap_token_t token = *(xap_token_t *)&u8data[0]; |
|
|
|
|
uint8_t length = u8data[2]; |
|
|
|
|
if (length <= (XAP_BUFFER_SIZE - 3)) { |
|
|
|
|
xap_receive(token, &u8data[3], length); |
|
|
|
|
xap_request_header_t *header = (xap_request_header_t *)&u8data[0]; |
|
|
|
|
if (header->length <= (XAP_BUFFER_SIZE - sizeof(xap_request_header_t))) { |
|
|
|
|
xap_receive(header->token, &u8data[sizeof(xap_request_header_t)], header->length); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|