123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- #include "ble_l2cap_conn.h"
- #include "conn_mw_ble_l2cap.h"
- #include "ble_serialization.h"
- #if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4
- uint32_t conn_mw_ble_l2cap_cid_register(uint8_t const * const p_rx_buf,
- uint32_t rx_buf_len,
- uint8_t * const p_tx_buf,
- uint32_t * const p_tx_buf_len)
- {
- SER_ASSERT_NOT_NULL(p_rx_buf);
- SER_ASSERT_NOT_NULL(p_tx_buf);
- SER_ASSERT_NOT_NULL(p_tx_buf_len);
- uint16_t cid;
- uint32_t err_code = NRF_SUCCESS;
- uint32_t sd_err_code;
- err_code = ble_l2cap_cid_register_req_dec(p_rx_buf, rx_buf_len, &cid);
- SER_ASSERT(err_code == NRF_SUCCESS, err_code);
- sd_err_code = sd_ble_l2cap_cid_register(cid);
- err_code = ble_l2cap_cid_register_rsp_enc(sd_err_code, p_tx_buf, p_tx_buf_len);
- SER_ASSERT(err_code == NRF_SUCCESS, err_code);
- return err_code;
- }
- uint32_t conn_mw_ble_l2cap_cid_unregister(uint8_t const * const p_rx_buf,
- uint32_t rx_buf_len,
- uint8_t * const p_tx_buf,
- uint32_t * const p_tx_buf_len)
- {
- SER_ASSERT_NOT_NULL(p_rx_buf);
- SER_ASSERT_NOT_NULL(p_tx_buf);
- SER_ASSERT_NOT_NULL(p_tx_buf_len);
- uint16_t cid;
- uint32_t err_code = NRF_SUCCESS;
- uint32_t sd_err_code;
- err_code = ble_l2cap_cid_unregister_req_dec(p_rx_buf, rx_buf_len, &cid);
- SER_ASSERT(err_code == NRF_SUCCESS, err_code);
- sd_err_code = sd_ble_l2cap_cid_unregister(cid);
- err_code = ble_l2cap_cid_unregister_rsp_enc(sd_err_code, p_tx_buf, p_tx_buf_len);
- SER_ASSERT(err_code == NRF_SUCCESS, err_code);
- return err_code;
- }
- uint32_t conn_mw_ble_l2cap_tx(uint8_t const * const p_rx_buf,
- uint32_t rx_buf_len,
- uint8_t * const p_tx_buf,
- uint32_t * const p_tx_buf_len)
- {
- SER_ASSERT_NOT_NULL(p_rx_buf);
- SER_ASSERT_NOT_NULL(p_tx_buf);
- SER_ASSERT_NOT_NULL(p_tx_buf_len);
- uint16_t conn_handle;
- ble_l2cap_header_t l2cap_header;
- ble_l2cap_header_t * p_l2cap_header = &l2cap_header;
- uint32_t err_code = NRF_SUCCESS;
- uint32_t sd_err_code;
- uint8_t const * p_data = NULL;
- err_code = ble_l2cap_tx_req_dec(p_rx_buf, rx_buf_len, &conn_handle, &p_l2cap_header, &p_data);
- SER_ASSERT(err_code == NRF_SUCCESS, err_code);
- sd_err_code = sd_ble_l2cap_tx(conn_handle, p_l2cap_header, p_data);
- err_code = ble_l2cap_tx_rsp_enc(sd_err_code, p_tx_buf, p_tx_buf_len);
- SER_ASSERT(err_code == NRF_SUCCESS, err_code);
- return err_code;
- }
- #endif
- #if NRF_SD_BLE_API_VERSION >= 5
- uint32_t conn_mw_l2cap_ch_setup(uint8_t const * const p_rx_buf,
- uint32_t rx_buf_len,
- uint8_t * const p_tx_buf,
- uint32_t * const p_tx_buf_len)
- {
- SER_ASSERT_NOT_NULL(p_rx_buf);
- SER_ASSERT_NOT_NULL(p_tx_buf);
- SER_ASSERT_NOT_NULL(p_tx_buf_len);
- uint16_t conn_handle;
- uint16_t local_cid;
- uint16_t * p_local_cid = &local_cid;
- ble_l2cap_ch_setup_params_t params;
- ble_l2cap_ch_setup_params_t * p_params = ¶ms;
- uint32_t sd_err_code;
- uint32_t err_code = NRF_SUCCESS;
- err_code = ble_l2cap_ch_setup_req_dec(p_rx_buf, rx_buf_len, &conn_handle, &p_local_cid, &p_params);
- SER_ASSERT(err_code == NRF_SUCCESS, err_code);
- sd_err_code = sd_ble_l2cap_ch_setup(conn_handle, p_local_cid, p_params);
- err_code = ble_l2cap_ch_setup_rsp_enc(sd_err_code, p_tx_buf, p_tx_buf_len, p_local_cid);
- SER_ASSERT(err_code == NRF_SUCCESS, err_code);
- return err_code;
- }
- uint32_t conn_mw_l2cap_ch_release(uint8_t const * const p_rx_buf,
- uint32_t rx_buf_len,
- uint8_t * const p_tx_buf,
- uint32_t * const p_tx_buf_len)
- {
- SER_ASSERT_NOT_NULL(p_rx_buf);
- SER_ASSERT_NOT_NULL(p_tx_buf);
- SER_ASSERT_NOT_NULL(p_tx_buf_len);
- uint16_t conn_handle;
- uint16_t local_cid;
- uint32_t sd_err_code;
- uint32_t err_code = NRF_SUCCESS;
- err_code = ble_l2cap_ch_release_req_dec(p_rx_buf, rx_buf_len, &conn_handle, &local_cid);
- SER_ASSERT(err_code == NRF_SUCCESS, err_code);
- sd_err_code = sd_ble_l2cap_ch_release(conn_handle, local_cid);
- err_code = ble_l2cap_ch_release_rsp_enc(sd_err_code, p_tx_buf, p_tx_buf_len);
- SER_ASSERT(err_code == NRF_SUCCESS, err_code);
- return err_code;
- }
- uint32_t conn_mw_l2cap_ch_rx(uint8_t const * const p_rx_buf,
- uint32_t rx_buf_len,
- uint8_t * const p_tx_buf,
- uint32_t * const p_tx_buf_len)
- {
- SER_ASSERT_NOT_NULL(p_rx_buf);
- SER_ASSERT_NOT_NULL(p_tx_buf);
- SER_ASSERT_NOT_NULL(p_tx_buf_len);
- uint16_t conn_handle;
- uint16_t local_cid;
- ble_data_t ble_data;
- ble_data_t * p_ble_data = &ble_data;
- uint32_t sd_err_code;
- uint32_t err_code = NRF_SUCCESS;
- err_code = ble_l2cap_ch_rx_req_dec(p_rx_buf, rx_buf_len, &conn_handle, &local_cid, &p_ble_data);
- SER_ASSERT(err_code == NRF_SUCCESS, err_code);
- sd_err_code = sd_ble_l2cap_ch_rx(conn_handle, local_cid, p_ble_data);
- err_code = ble_l2cap_ch_rx_rsp_enc(sd_err_code, p_tx_buf, p_tx_buf_len);
- SER_ASSERT(err_code == NRF_SUCCESS, err_code);
- return err_code;
- }
- uint32_t conn_mw_l2cap_ch_tx(uint8_t const * const p_rx_buf,
- uint32_t rx_buf_len,
- uint8_t * const p_tx_buf,
- uint32_t * const p_tx_buf_len)
- {
- SER_ASSERT_NOT_NULL(p_rx_buf);
- SER_ASSERT_NOT_NULL(p_tx_buf);
- SER_ASSERT_NOT_NULL(p_tx_buf_len);
- uint16_t conn_handle;
- uint16_t local_cid;
- ble_data_t ble_data;
- ble_data_t * p_ble_data = &ble_data;
- uint32_t sd_err_code;
- uint32_t err_code = NRF_SUCCESS;
- err_code = ble_l2cap_ch_tx_req_dec(p_rx_buf, rx_buf_len, &conn_handle, &local_cid, &p_ble_data);
- SER_ASSERT(err_code == NRF_SUCCESS, err_code);
- sd_err_code = sd_ble_l2cap_ch_tx(conn_handle, local_cid, p_ble_data);
- err_code = ble_l2cap_ch_tx_rsp_enc(sd_err_code, p_tx_buf, p_tx_buf_len);
- SER_ASSERT(err_code == NRF_SUCCESS, err_code);
- return err_code;
- }
- uint32_t conn_mw_l2cap_ch_flow_control(uint8_t const * const p_rx_buf,
- uint32_t rx_buf_len,
- uint8_t * const p_tx_buf,
- uint32_t * const p_tx_buf_len)
- {
- SER_ASSERT_NOT_NULL(p_rx_buf);
- SER_ASSERT_NOT_NULL(p_tx_buf);
- SER_ASSERT_NOT_NULL(p_tx_buf_len);
- uint16_t conn_handle;
- uint16_t local_cid;
- uint16_t credits;
- uint16_t out_credits;
- uint16_t * p_out_credits = &out_credits;
- uint32_t sd_err_code;
- uint32_t err_code = NRF_SUCCESS;
- err_code = ble_l2cap_ch_flow_control_req_dec(p_rx_buf, rx_buf_len,
- &conn_handle, &local_cid, &credits, &p_out_credits);
- SER_ASSERT(err_code == NRF_SUCCESS, err_code);
- sd_err_code = sd_ble_l2cap_ch_flow_control(conn_handle, local_cid, credits, p_out_credits);
- err_code = ble_l2cap_ch_flow_control_rsp_enc(sd_err_code, p_tx_buf, p_tx_buf_len, p_out_credits);
- SER_ASSERT(err_code == NRF_SUCCESS, err_code);
- return err_code;
- }
- #endif
|