Skip to content

Commit

Permalink
Merge branch 'bugfix/spp_vfs_mode_send_data_fail' into 'master'
Browse files Browse the repository at this point in the history
bt: Fixed SPP VFS mode not being able to send data

See merge request espressif/esp-idf!20758
  • Loading branch information
wmy-espressif committed Oct 26, 2022
2 parents 439d42d + bda54af commit db9caf4
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 12 deletions.
12 changes: 1 addition & 11 deletions components/bt/host/bluedroid/api/esp_spp_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -184,24 +184,14 @@ esp_err_t esp_spp_stop_srv_scn(uint8_t scn)

esp_err_t esp_spp_write(uint32_t handle, int len, uint8_t *p_data)
{
btc_msg_t msg;
btc_spp_args_t arg;
ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);

if (len <= 0 || p_data == NULL) {
LOG_ERROR("Invalid data or len!\n");
return ESP_ERR_INVALID_ARG;
}

msg.sig = BTC_SIG_API_CALL;
msg.pid = BTC_PID_SPP;
msg.act = BTC_SPP_ACT_WRITE;

arg.write.handle = handle;
arg.write.len = len;
arg.write.p_data = p_data;

return (btc_transfer_context(&msg, &arg, sizeof(btc_spp_args_t), btc_spp_arg_deep_copy) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
return spp_send_data_to_btc(handle, len, p_data, ESP_SPP_MODE_CB);
}

esp_err_t esp_spp_vfs_register(void)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ void btc_spp_call_handler(btc_msg_t *msg);
void btc_spp_cb_handler(btc_msg_t *msg);
void btc_spp_arg_deep_copy(btc_msg_t *msg, void *p_dest, void *p_src);

esp_err_t spp_send_data_to_btc(uint32_t handle, int len, uint8_t *p_data, esp_spp_mode_t spp_mode);
esp_err_t btc_spp_vfs_register(void);
#endif ///defined BTC_SPP_INCLUDED && BTC_SPP_INCLUDED == TRUE
#endif ///__BTC_SPP_H__
24 changes: 23 additions & 1 deletion components/bt/host/bluedroid/btc/profile/std/spp/btc_spp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1326,6 +1326,28 @@ int bta_co_rfc_data_outgoing(void *user_data, uint8_t *buf, uint16_t size)
return 1;
}

esp_err_t spp_send_data_to_btc(uint32_t handle, int len, uint8_t *p_data, esp_spp_mode_t spp_mode)
{
btc_msg_t msg;
btc_spp_args_t arg;

if (spp_local_param.spp_mode != spp_mode) {
BTC_TRACE_WARNING("The current mode used is %d\n", spp_local_param.spp_mode);
return ESP_ERR_NOT_SUPPORTED;
}

msg.sig = BTC_SIG_API_CALL;
msg.pid = BTC_PID_SPP;
msg.act = BTC_SPP_ACT_WRITE;

arg.write.handle = handle;
arg.write.len = len;
arg.write.p_data = p_data;

return (btc_transfer_context(&msg, &arg, sizeof(btc_spp_args_t), btc_spp_arg_deep_copy)
== BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
}


static ssize_t spp_vfs_write(int fd, const void * data, size_t size)
{
Expand Down Expand Up @@ -1405,7 +1427,7 @@ static ssize_t spp_vfs_write(int fd, const void * data, size_t size)
}
}
if (tx_len == 0) {
esp_spp_write(slot->rfc_handle, 0, NULL);
spp_send_data_to_btc(slot->rfc_handle, 0, NULL, ESP_SPP_MODE_VFS);
}
sent += write_size;
size -= write_size;
Expand Down

0 comments on commit db9caf4

Please sign in to comment.