File syn_ble_att.c¶
File List > ble > syn_ble_att.c
Go to the documentation of this file
#include "syn_ble_att.h"
#include <string.h>
SYN_Status syn_ble_att_encode_error_rsp(uint8_t req_opcode, uint16_t handle, uint8_t err_code,
uint8_t *buf, uint16_t *len)
{
if (buf == NULL || len == NULL) {
return SYN_INVALID_PARAM;
}
buf[0] = SYN_BLE_ATT_OP_ERROR_RSP;
buf[1] = req_opcode;
buf[2] = (uint8_t)(handle & 0xFFU);
buf[3] = (uint8_t)((handle >> 8U) & 0xFFU);
buf[4] = err_code;
*len = 5U;
return SYN_OK;
}
SYN_Status syn_ble_att_encode_mtu_rsp(uint16_t server_mtu, uint8_t *buf, uint16_t *len)
{
if (buf == NULL || len == NULL) {
return SYN_INVALID_PARAM;
}
buf[0] = SYN_BLE_ATT_OP_EXCHANGE_MTU_RSP;
buf[1] = (uint8_t)(server_mtu & 0xFFU);
buf[2] = (uint8_t)((server_mtu >> 8U) & 0xFFU);
*len = 3U;
return SYN_OK;
}
SYN_Status syn_ble_att_encode_read_rsp(const uint8_t *val, uint16_t val_len, uint8_t *buf,
uint16_t *len)
{
if (buf == NULL || len == NULL || (val == NULL && val_len > 0U) || val_len > 250U) {
return SYN_INVALID_PARAM;
}
buf[0] = SYN_BLE_ATT_OP_READ_RSP;
if (val_len > 0U) {
memcpy(&buf[1], val, val_len);
}
*len = (uint16_t)(1U + val_len);
return SYN_OK;
}
SYN_Status syn_ble_att_encode_write_rsp(uint8_t *buf, uint16_t *len)
{
if (buf == NULL || len == NULL) {
return SYN_INVALID_PARAM;
}
buf[0] = SYN_BLE_ATT_OP_WRITE_RSP;
*len = 1U;
return SYN_OK;
}
SYN_Status syn_ble_att_encode_notification(uint16_t handle, const uint8_t *val, uint16_t val_len,
uint8_t *buf, uint16_t *len)
{
if (buf == NULL || len == NULL || (val == NULL && val_len > 0U) || val_len > 250U) {
return SYN_INVALID_PARAM;
}
buf[0] = SYN_BLE_ATT_OP_HANDLE_VAL_NOTIF;
buf[1] = (uint8_t)(handle & 0xFFU);
buf[2] = (uint8_t)((handle >> 8U) & 0xFFU);
if (val_len > 0U) {
memcpy(&buf[3], val, val_len);
}
*len = (uint16_t)(3U + val_len);
return SYN_OK;
}