p_cb->p_cback(BTA_JV_L2CAP_WRITE_EVT, &bta_jv, user_id);
}
-/*******************************************************************************
- *
- * Function bta_jv_l2cap_write_fixed
- *
- * Description Write data to an L2CAP connection using Fixed channels
- *
- * Returns void
- *
- ******************************************************************************/
-void bta_jv_l2cap_write_fixed(tBTA_JV_MSG* p_data) {
+/* Write data to an L2CAP connection using Fixed channels */
+void bta_jv_l2cap_write_fixed(uint16_t channel, const RawAddress& addr,
+ uint32_t req_id, uint8_t* p_data, uint16_t len,
+ uint32_t user_id, tBTA_JV_L2CAP_CBACK* p_cback) {
tBTA_JV_L2CAP_WRITE_FIXED evt_data;
- tBTA_JV_API_L2CAP_WRITE_FIXED* ls = &(p_data->l2cap_write_fixed);
- BT_HDR* msg =
- (BT_HDR*)osi_malloc(sizeof(BT_HDR) + ls->len + L2CAP_MIN_OFFSET);
-
evt_data.status = BTA_JV_FAILURE;
- evt_data.channel = ls->channel;
- evt_data.addr = ls->addr;
- evt_data.req_id = ls->req_id;
- evt_data.p_data = ls->p_data;
+ evt_data.channel = channel;
+ evt_data.addr = addr;
+ evt_data.req_id = req_id;
+ evt_data.p_data = p_data;
evt_data.len = 0;
- memcpy(((uint8_t*)(msg + 1)) + L2CAP_MIN_OFFSET, ls->p_data, ls->len);
- msg->len = ls->len;
+ BT_HDR* msg = (BT_HDR*)osi_malloc(sizeof(BT_HDR) + len + L2CAP_MIN_OFFSET);
+ memcpy(((uint8_t*)(msg + 1)) + L2CAP_MIN_OFFSET, p_data, len);
+ msg->len = len;
msg->offset = L2CAP_MIN_OFFSET;
- L2CA_SendFixedChnlData(ls->channel, ls->addr, msg);
+ L2CA_SendFixedChnlData(channel, addr, msg);
tBTA_JV bta_jv;
bta_jv.l2c_write_fixed = evt_data;
- ls->p_cback(BTA_JV_L2CAP_WRITE_FIXED_EVT, &bta_jv, ls->user_id);
+ p_cback(BTA_JV_L2CAP_WRITE_FIXED_EVT, &bta_jv, user_id);
}
/*******************************************************************************
tBTA_JV_L2CAP_CBACK* p_cback,
uint8_t* p_data, uint16_t len,
uint32_t user_id) {
- tBTA_JV_API_L2CAP_WRITE_FIXED* p_msg =
- (tBTA_JV_API_L2CAP_WRITE_FIXED*)osi_malloc(
- sizeof(tBTA_JV_API_L2CAP_WRITE_FIXED));
-
APPL_TRACE_API("%s", __func__);
- p_msg->hdr.event = BTA_JV_API_L2CAP_WRITE_FIXED_EVT;
- p_msg->channel = channel;
- p_msg->addr = addr;
- p_msg->req_id = req_id;
- p_msg->p_data = p_data;
- p_msg->p_cback = p_cback;
- p_msg->len = len;
- p_msg->user_id = user_id;
-
- bta_sys_sendmsg(p_msg);
-
+ do_in_bta_thread(FROM_HERE, Bind(&bta_jv_l2cap_write_fixed, channel, addr,
+ req_id, p_data, len, user_id, p_cback));
return BTA_JV_SUCCESS;
}
BTA_JV_API_RFCOMM_WRITE_EVT,
BTA_JV_API_SET_PM_PROFILE_EVT,
BTA_JV_API_PM_STATE_CHANGE_EVT,
- BTA_JV_API_L2CAP_WRITE_FIXED_EVT,
BTA_JV_MAX_INT_EVT
};
uint32_t l2cap_socket_id;
} tBTA_JV_API_L2CAP_READ;
-/* data type for BTA_JV_API_L2CAP_WRITE_FIXED_EVT */
-typedef struct {
- BT_HDR hdr;
- uint16_t channel;
- RawAddress addr;
- uint32_t req_id;
- tBTA_JV_L2CAP_CBACK* p_cback;
- uint8_t* p_data;
- uint16_t len;
- uint32_t user_id;
-} tBTA_JV_API_L2CAP_WRITE_FIXED;
-
/* data type for BTA_JV_API_RFCOMM_CONNECT_EVT */
typedef struct {
BT_HDR hdr;
tBTA_JV_API_PM_STATE_CHANGE change_pm_state;
tBTA_JV_API_RFCOMM_CLOSE rfcomm_close;
tBTA_JV_API_RFCOMM_SERVER rfcomm_server;
- tBTA_JV_API_L2CAP_WRITE_FIXED l2cap_write_fixed;
} tBTA_JV_MSG;
/* JV control block */
tBTA_JV_L2CAP_CBACK* p_cback,
uint32_t l2cap_socket_id);
extern void bta_jv_l2cap_stop_server_le(uint16_t local_chan);
-extern void bta_jv_l2cap_write_fixed(tBTA_JV_MSG* p_data);
+extern void bta_jv_l2cap_write_fixed(uint16_t channel, const RawAddress& addr,
+ uint32_t req_id, uint8_t* p_data,
+ uint16_t len, uint32_t user_id,
+ tBTA_JV_L2CAP_CBACK* p_cback);
extern void bta_jv_l2cap_close_fixed(uint32_t handle);
#endif /* BTA_JV_INT_H */
bta_jv_rfcomm_write, /* BTA_JV_API_RFCOMM_WRITE_EVT */
bta_jv_set_pm_profile, /* BTA_JV_API_SET_PM_PROFILE_EVT */
bta_jv_change_pm_state, /* BTA_JV_API_PM_STATE_CHANGE_EVT */
- bta_jv_l2cap_write_fixed, /* BTA_JV_API_L2CAP_WRITE_FIXED_EVT */
};
/*******************************************************************************