mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'feature/btdm_gattc_add_API_prepare_write_char_desrc' into 'master'
Component/bt:add API to prepare write descriptor for gattc See merge request !734
This commit is contained in:
commit
65acd99cce
@ -365,7 +365,6 @@ esp_err_t esp_ble_gattc_prepare_write(esp_gatt_if_t gattc_if,
|
|||||||
uint8_t *value,
|
uint8_t *value,
|
||||||
esp_gatt_auth_req_t auth_req)
|
esp_gatt_auth_req_t auth_req)
|
||||||
{
|
{
|
||||||
//TODO: Review this function
|
|
||||||
btc_msg_t msg;
|
btc_msg_t msg;
|
||||||
btc_ble_gattc_args_t arg;
|
btc_ble_gattc_args_t arg;
|
||||||
|
|
||||||
@ -387,6 +386,38 @@ esp_err_t esp_ble_gattc_prepare_write(esp_gatt_if_t gattc_if,
|
|||||||
return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gattc_args_t), btc_gattc_arg_deep_copy) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
|
return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gattc_args_t), btc_gattc_arg_deep_copy) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
esp_err_t esp_ble_gattc_prepare_write_char_descr(esp_gatt_if_t gattc_if,
|
||||||
|
uint16_t conn_id,
|
||||||
|
esp_gatt_srvc_id_t *srvc_id,
|
||||||
|
esp_gatt_id_t *char_id,
|
||||||
|
esp_gatt_id_t *descr_id,
|
||||||
|
uint16_t offset,
|
||||||
|
uint16_t value_len,
|
||||||
|
uint8_t *value,
|
||||||
|
esp_gatt_auth_req_t auth_req)
|
||||||
|
{
|
||||||
|
btc_msg_t msg;
|
||||||
|
btc_ble_gattc_args_t arg;
|
||||||
|
|
||||||
|
if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
|
||||||
|
return ESP_ERR_INVALID_STATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
msg.sig = BTC_SIG_API_CALL;
|
||||||
|
msg.pid = BTC_PID_GATTC;
|
||||||
|
msg.act = BTC_GATTC_ACT_PREPARE_WRITE_CHAR_DESCR;
|
||||||
|
arg.prep_write_descr.conn_id = BTC_GATT_CREATE_CONN_ID(gattc_if, conn_id);
|
||||||
|
memcpy(&arg.prep_write_descr.service_id, srvc_id, sizeof(esp_gatt_srvc_id_t));
|
||||||
|
memcpy(&arg.prep_write_descr.char_id, char_id, sizeof(esp_gatt_id_t));
|
||||||
|
memcpy(&arg.prep_write_descr.descr_id, descr_id, sizeof(esp_gatt_id_t));
|
||||||
|
arg.prep_write_descr.offset = offset;
|
||||||
|
arg.prep_write_descr.value_len = value_len > ESP_GATT_MAX_ATTR_LEN ? ESP_GATT_MAX_ATTR_LEN : value_len; // length check ?
|
||||||
|
arg.prep_write_descr.value = value;
|
||||||
|
arg.prep_write_descr.auth_req = auth_req;
|
||||||
|
|
||||||
|
return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gattc_args_t), btc_gattc_arg_deep_copy) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
|
||||||
|
}
|
||||||
|
|
||||||
esp_err_t esp_ble_gattc_execute_write (esp_gatt_if_t gattc_if, uint16_t conn_id, bool is_execute)
|
esp_err_t esp_ble_gattc_execute_write (esp_gatt_if_t gattc_if, uint16_t conn_id, bool is_execute)
|
||||||
{
|
{
|
||||||
btc_msg_t msg;
|
btc_msg_t msg;
|
||||||
|
@ -548,6 +548,35 @@ esp_err_t esp_ble_gattc_prepare_write(esp_gatt_if_t gattc_if,
|
|||||||
esp_gatt_auth_req_t auth_req);
|
esp_gatt_auth_req_t auth_req);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function is called to prepare write a characteristic descriptor value.
|
||||||
|
*
|
||||||
|
* @param[in] gattc_if: Gatt client access interface.
|
||||||
|
* @param[in] conn_id : connection ID.
|
||||||
|
* @param[in] srvc_id : service ID.
|
||||||
|
* @param[in] char_id : GATT characteristic ID of the service.
|
||||||
|
* @param[in] descr_id : characteristic descriptor ID to write.
|
||||||
|
* @param[in] offset : offset of the write value.
|
||||||
|
* @param[in] value_len: length of the value to be written.
|
||||||
|
* @param[in] value : the value to be written.
|
||||||
|
* @param[in] auth_req : authentication request.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* - ESP_OK: success
|
||||||
|
* - other: failed
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
esp_err_t esp_ble_gattc_prepare_write_char_descr(esp_gatt_if_t gattc_if,
|
||||||
|
uint16_t conn_id,
|
||||||
|
esp_gatt_srvc_id_t *srvc_id,
|
||||||
|
esp_gatt_id_t *char_id,
|
||||||
|
esp_gatt_id_t *descr_id,
|
||||||
|
uint16_t offset,
|
||||||
|
uint16_t value_len,
|
||||||
|
uint8_t *value,
|
||||||
|
esp_gatt_auth_req_t auth_req);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function is called to execute write a prepare write sequence.
|
* @brief This function is called to execute write a prepare write sequence.
|
||||||
*
|
*
|
||||||
|
@ -792,6 +792,58 @@ void BTA_GATTC_PrepareWrite (UINT16 conn_id, tBTA_GATTC_CHAR_ID *p_char_id,
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
**
|
||||||
|
** Function BTA_GATTC_PrepareWriteCharDescr
|
||||||
|
**
|
||||||
|
** Description This function is called to prepare write a characteristic descriptor value.
|
||||||
|
**
|
||||||
|
** Parameters conn_id - connection ID.
|
||||||
|
** p_char_descr_id - GATT characteritic descriptor ID of the service.
|
||||||
|
** offset - offset of the write value.
|
||||||
|
** len: length of the data to be written.
|
||||||
|
** p_value - the value to be written.
|
||||||
|
**
|
||||||
|
** Returns None
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
void BTA_GATTC_PrepareWriteCharDescr (UINT16 conn_id, tBTA_GATTC_CHAR_DESCR_ID *p_char_descr_id,
|
||||||
|
UINT16 offset,tBTA_GATT_UNFMT *p_data,
|
||||||
|
tBTA_GATT_AUTH_REQ auth_req)
|
||||||
|
{
|
||||||
|
tBTA_GATTC_API_WRITE *p_buf;
|
||||||
|
UINT16 len = sizeof(tBTA_GATTC_API_WRITE) + sizeof(tBTA_GATT_ID);
|
||||||
|
|
||||||
|
if (p_data != NULL) {
|
||||||
|
len += p_data->len;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((p_buf = (tBTA_GATTC_API_WRITE *) GKI_getbuf(len)) != NULL) {
|
||||||
|
memset(p_buf, 0, len);
|
||||||
|
|
||||||
|
p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT;
|
||||||
|
p_buf->hdr.layer_specific = conn_id;
|
||||||
|
p_buf->auth_req = auth_req;
|
||||||
|
|
||||||
|
memcpy(&p_buf->srvc_id, &p_char_descr_id->char_id.srvc_id, sizeof(tBTA_GATT_SRVC_ID));
|
||||||
|
memcpy(&p_buf->char_id, &p_char_descr_id->char_id.char_id, sizeof(tBTA_GATT_ID));
|
||||||
|
p_buf->p_descr_type = (tBTA_GATT_ID *)(p_buf + 1);
|
||||||
|
memcpy(p_buf->p_descr_type, &p_char_descr_id->descr_id, sizeof(tBTA_GATT_ID));
|
||||||
|
p_buf->write_type = BTA_GATTC_WRITE_PREPARE;
|
||||||
|
p_buf->offset = offset;
|
||||||
|
|
||||||
|
if (p_data && p_data->len != 0) {
|
||||||
|
p_buf->p_value = (UINT8 *)(p_buf->p_descr_type + 1);
|
||||||
|
p_buf->len = p_data->len;
|
||||||
|
/* pack the descr data */
|
||||||
|
memcpy(p_buf->p_value, p_data->p_value, p_data->len);
|
||||||
|
}
|
||||||
|
|
||||||
|
bta_sys_sendmsg(p_buf);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
**
|
||||||
|
@ -1001,6 +1001,26 @@ extern void BTA_GATTC_PrepareWrite (UINT16 conn_id,
|
|||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
**
|
||||||
|
** Function BTA_GATTC_PrepareWriteCharDescr
|
||||||
|
**
|
||||||
|
** Description This function is called to prepare write a characteristic descriptor value.
|
||||||
|
**
|
||||||
|
** Parameters conn_id - connection ID.
|
||||||
|
** p_char_descr_id - GATT characteritic descriptor ID of the service.
|
||||||
|
** offset - offset of the write value.
|
||||||
|
** len: length of the data to be written.
|
||||||
|
** p_value - the value to be written.
|
||||||
|
**
|
||||||
|
** Returns None
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
extern void BTA_GATTC_PrepareWriteCharDescr (UINT16 conn_id,
|
||||||
|
tBTA_GATTC_CHAR_DESCR_ID *p_char_descr_id,
|
||||||
|
UINT16 offset,
|
||||||
|
tBTA_GATT_UNFMT *p_data,
|
||||||
|
tBTA_GATT_AUTH_REQ auth_req);
|
||||||
|
/*******************************************************************************
|
||||||
|
**
|
||||||
** Function BTA_GATTC_ExecuteWrite
|
** Function BTA_GATTC_ExecuteWrite
|
||||||
**
|
**
|
||||||
** Description This function is called to execute write a prepare write sequence.
|
** Description This function is called to execute write a prepare write sequence.
|
||||||
|
@ -64,6 +64,15 @@ void btc_gattc_arg_deep_copy(btc_msg_t *msg, void *p_dest, void *p_src)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case BTC_GATTC_ACT_PREPARE_WRITE_CHAR_DESCR: {
|
||||||
|
dst->prep_write_descr.value = (uint8_t *)GKI_getbuf(src->prep_write_descr.value_len);
|
||||||
|
if (dst->prep_write_descr.value) {
|
||||||
|
memcpy(dst->prep_write_descr.value, src->prep_write_descr.value, src->prep_write_descr.value_len);
|
||||||
|
} else {
|
||||||
|
LOG_ERROR("%s %d no mem\n", __func__, msg->act);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
LOG_DEBUG("%s Unhandled deep copy %d\n", __func__, msg->act);
|
LOG_DEBUG("%s Unhandled deep copy %d\n", __func__, msg->act);
|
||||||
break;
|
break;
|
||||||
@ -93,6 +102,12 @@ void btc_gattc_arg_deep_free(btc_msg_t *msg)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case BTC_GATTC_ACT_PREPARE_WRITE_CHAR_DESCR: {
|
||||||
|
if (arg->prep_write_descr.value) {
|
||||||
|
GKI_freebuf(arg->prep_write_descr.value);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
LOG_DEBUG("%s Unhandled deep free %d\n", __func__, msg->act);
|
LOG_DEBUG("%s Unhandled deep free %d\n", __func__, msg->act);
|
||||||
break;
|
break;
|
||||||
@ -407,6 +422,22 @@ static void btc_gattc_prepare_write(btc_ble_gattc_args_t *arg)
|
|||||||
arg->prep_write.value,
|
arg->prep_write.value,
|
||||||
arg->prep_write.auth_req);
|
arg->prep_write.auth_req);
|
||||||
}
|
}
|
||||||
|
static void btc_gattc_prepare_write_char_descr(btc_ble_gattc_args_t *arg)
|
||||||
|
{
|
||||||
|
tBTA_GATTC_CHAR_DESCR_ID in_char_descr_id;
|
||||||
|
tBTA_GATT_UNFMT descr_val;
|
||||||
|
btc_to_bta_srvc_id(&in_char_descr_id.char_id.srvc_id, &arg->prep_write_descr.service_id);
|
||||||
|
btc_to_bta_gatt_id(&in_char_descr_id.char_id.char_id, &arg->prep_write_descr.char_id);
|
||||||
|
btc_to_bta_gatt_id(&in_char_descr_id.descr_id, &arg->prep_write_descr.descr_id);
|
||||||
|
|
||||||
|
descr_val.len = arg->prep_write_descr.value_len;
|
||||||
|
descr_val.p_value = arg->prep_write_descr.value;
|
||||||
|
BTA_GATTC_PrepareWriteCharDescr(arg->prep_write_descr.conn_id,
|
||||||
|
&in_char_descr_id,
|
||||||
|
arg->prep_write_descr.offset,
|
||||||
|
&descr_val,
|
||||||
|
arg->prep_write_descr.auth_req);
|
||||||
|
}
|
||||||
|
|
||||||
static void btc_gattc_execute_wrtie(btc_ble_gattc_args_t *arg)
|
static void btc_gattc_execute_wrtie(btc_ble_gattc_args_t *arg)
|
||||||
{
|
{
|
||||||
@ -508,6 +539,9 @@ void btc_gattc_call_handler(btc_msg_t *msg)
|
|||||||
case BTC_GATTC_ACT_PREPARE_WRITE:
|
case BTC_GATTC_ACT_PREPARE_WRITE:
|
||||||
btc_gattc_prepare_write(arg);
|
btc_gattc_prepare_write(arg);
|
||||||
break;
|
break;
|
||||||
|
case BTC_GATTC_ACT_PREPARE_WRITE_CHAR_DESCR:
|
||||||
|
btc_gattc_prepare_write_char_descr(arg);
|
||||||
|
break;
|
||||||
case BTC_GATTC_ACT_EXECUTE_WRITE:
|
case BTC_GATTC_ACT_EXECUTE_WRITE:
|
||||||
btc_gattc_execute_wrtie(arg);
|
btc_gattc_execute_wrtie(arg);
|
||||||
break;
|
break;
|
||||||
|
@ -38,6 +38,7 @@ typedef enum {
|
|||||||
BTC_GATTC_ACT_WRITE_CHAR,
|
BTC_GATTC_ACT_WRITE_CHAR,
|
||||||
BTC_GATTC_ACT_WRITE_CHAR_DESCR,
|
BTC_GATTC_ACT_WRITE_CHAR_DESCR,
|
||||||
BTC_GATTC_ACT_PREPARE_WRITE,
|
BTC_GATTC_ACT_PREPARE_WRITE,
|
||||||
|
BTC_GATTC_ACT_PREPARE_WRITE_CHAR_DESCR,
|
||||||
BTC_GATTC_ACT_EXECUTE_WRITE,
|
BTC_GATTC_ACT_EXECUTE_WRITE,
|
||||||
BTC_GATTC_ACT_REG_FOR_NOTIFY,
|
BTC_GATTC_ACT_REG_FOR_NOTIFY,
|
||||||
BTC_GATTC_ACT_UNREG_FOR_NOTIFY
|
BTC_GATTC_ACT_UNREG_FOR_NOTIFY
|
||||||
@ -155,6 +156,17 @@ typedef union {
|
|||||||
uint8_t *value;
|
uint8_t *value;
|
||||||
esp_gatt_auth_req_t auth_req;
|
esp_gatt_auth_req_t auth_req;
|
||||||
} prep_write;
|
} prep_write;
|
||||||
|
//BTC_GATTC_ACT_PREPARE_WRITE_CHAR_DESCR,
|
||||||
|
struct prep_write_descr_arg {
|
||||||
|
uint16_t conn_id;
|
||||||
|
esp_gatt_srvc_id_t service_id;
|
||||||
|
esp_gatt_id_t char_id;
|
||||||
|
esp_gatt_id_t descr_id;
|
||||||
|
uint16_t offset;
|
||||||
|
uint16_t value_len;
|
||||||
|
uint8_t *value;
|
||||||
|
esp_gatt_auth_req_t auth_req;
|
||||||
|
} prep_write_descr;
|
||||||
//BTC_GATTC_ACT_EXECUTE_WRITE,
|
//BTC_GATTC_ACT_EXECUTE_WRITE,
|
||||||
struct exec_write_arg {
|
struct exec_write_arg {
|
||||||
uint16_t conn_id;
|
uint16_t conn_id;
|
||||||
|
@ -118,6 +118,7 @@ Functions
|
|||||||
.. doxygenfunction:: esp_ble_gattc_write_char
|
.. doxygenfunction:: esp_ble_gattc_write_char
|
||||||
.. doxygenfunction:: esp_ble_gattc_write_char_descr
|
.. doxygenfunction:: esp_ble_gattc_write_char_descr
|
||||||
.. doxygenfunction:: esp_ble_gattc_prepare_write
|
.. doxygenfunction:: esp_ble_gattc_prepare_write
|
||||||
|
.. doxygenfunction:: esp_ble_gattc_prepare_write_char_descr
|
||||||
.. doxygenfunction:: esp_ble_gattc_execute_write
|
.. doxygenfunction:: esp_ble_gattc_execute_write
|
||||||
.. doxygenfunction:: esp_ble_gattc_register_for_notify
|
.. doxygenfunction:: esp_ble_gattc_register_for_notify
|
||||||
.. doxygenfunction:: esp_ble_gattc_unregister_for_notify
|
.. doxygenfunction:: esp_ble_gattc_unregister_for_notify
|
||||||
|
Loading…
x
Reference in New Issue
Block a user