gjhn

Dependents:   BLE_GENERALE

Fork of X_NUCLEO_IDB0XA1 by ST

Committer:
andreasortino
Date:
Tue Sep 19 08:24:05 2017 +0000
Revision:
308:de76b6d90215
Parent:
296:c52d3a301449
iugjhv

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wolfgang Betz 132:51056160fa4a 1 /******************** (C) COPYRIGHT 2013 STMicroelectronics ********************
Wolfgang Betz 132:51056160fa4a 2 * File Name : bluenrg_hci.c
Wolfgang Betz 132:51056160fa4a 3 * Author : AMS - HEA&RF BU
Wolfgang Betz 132:51056160fa4a 4 * Version : V1.0.0
Wolfgang Betz 132:51056160fa4a 5 * Date : 4-Oct-2013
Wolfgang Betz 132:51056160fa4a 6 * Description : File with HCI commands for BlueNRG FW6.0 and above.
Wolfgang Betz 132:51056160fa4a 7 ********************************************************************************
Wolfgang Betz 132:51056160fa4a 8 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
Wolfgang Betz 132:51056160fa4a 9 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
Wolfgang Betz 132:51056160fa4a 10 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
Wolfgang Betz 132:51056160fa4a 11 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
Wolfgang Betz 132:51056160fa4a 12 * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
Wolfgang Betz 132:51056160fa4a 13 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
Wolfgang Betz 132:51056160fa4a 14 *******************************************************************************/
Wolfgang Betz 132:51056160fa4a 15
Vincent Coubard 296:c52d3a301449 16 #include "ble_hal_types.h"
Vincent Coubard 296:c52d3a301449 17 #include "ble_osal.h"
Wolfgang Betz 132:51056160fa4a 18 #include "ble_status.h"
Vincent Coubard 296:c52d3a301449 19 #include "ble_hal.h"
Vincent Coubard 296:c52d3a301449 20 #include "ble_osal.h"
Vincent Coubard 296:c52d3a301449 21 #include "ble_hci_const.h"
Wolfgang Betz 132:51056160fa4a 22 #include "bluenrg_aci_const.h"
Wolfgang Betz 132:51056160fa4a 23 #include "bluenrg_hal_aci.h"
Wolfgang Betz 132:51056160fa4a 24 #include "bluenrg_gap.h"
Wolfgang Betz 132:51056160fa4a 25
Wolfgang Betz 132:51056160fa4a 26 #define MIN(a,b) ((a) < (b) )? (a) : (b)
Wolfgang Betz 132:51056160fa4a 27 #define MAX(a,b) ((a) > (b) )? (a) : (b)
Wolfgang Betz 132:51056160fa4a 28
Wolfgang Betz 132:51056160fa4a 29 tBleStatus aci_l2cap_connection_parameter_update_request(uint16_t conn_handle, uint16_t interval_min,
Wolfgang Betz 132:51056160fa4a 30 uint16_t interval_max, uint16_t slave_latency,
Wolfgang Betz 132:51056160fa4a 31 uint16_t timeout_multiplier)
Wolfgang Betz 132:51056160fa4a 32 {
Wolfgang Betz 132:51056160fa4a 33 struct hci_request rq;
Wolfgang Betz 132:51056160fa4a 34 uint8_t status;
Wolfgang Betz 132:51056160fa4a 35 l2cap_conn_param_update_req_cp cp;
Wolfgang Betz 132:51056160fa4a 36
Wolfgang Betz 132:51056160fa4a 37 cp.conn_handle = htobs(conn_handle);
Wolfgang Betz 132:51056160fa4a 38 cp.interval_min = htobs(interval_min);
Wolfgang Betz 132:51056160fa4a 39 cp.interval_max = htobs(interval_max);
Wolfgang Betz 132:51056160fa4a 40 cp.slave_latency = htobs(slave_latency);
Wolfgang Betz 132:51056160fa4a 41 cp.timeout_multiplier = htobs(timeout_multiplier);
Wolfgang Betz 132:51056160fa4a 42
Wolfgang Betz 132:51056160fa4a 43 Osal_MemSet(&rq, 0, sizeof(rq));
Wolfgang Betz 132:51056160fa4a 44 rq.ogf = OGF_VENDOR_CMD;
Wolfgang Betz 132:51056160fa4a 45 rq.ocf = OCF_L2CAP_CONN_PARAM_UPDATE_REQ;
Wolfgang Betz 132:51056160fa4a 46 rq.cparam = &cp;
Wolfgang Betz 132:51056160fa4a 47 rq.clen = L2CAP_CONN_PARAM_UPDATE_REQ_CP_SIZE;
Wolfgang Betz 132:51056160fa4a 48 rq.event = EVT_CMD_STATUS;
Wolfgang Betz 132:51056160fa4a 49 rq.rparam = &status;
Wolfgang Betz 132:51056160fa4a 50 rq.rlen = 1;
Wolfgang Betz 132:51056160fa4a 51
Wolfgang Betz 132:51056160fa4a 52 if (hci_send_req(&rq, FALSE) < 0)
Wolfgang Betz 132:51056160fa4a 53 return BLE_STATUS_TIMEOUT;
Wolfgang Betz 132:51056160fa4a 54
Wolfgang Betz 132:51056160fa4a 55 return status;
Wolfgang Betz 132:51056160fa4a 56 }
Wolfgang Betz 132:51056160fa4a 57
Wolfgang Betz 132:51056160fa4a 58 tBleStatus aci_l2cap_connection_parameter_update_response_IDB05A1(uint16_t conn_handle, uint16_t interval_min,
Wolfgang Betz 132:51056160fa4a 59 uint16_t interval_max, uint16_t slave_latency,
Wolfgang Betz 132:51056160fa4a 60 uint16_t timeout_multiplier, uint16_t min_ce_length, uint16_t max_ce_length,
Wolfgang Betz 132:51056160fa4a 61 uint8_t id, uint8_t accept)
Wolfgang Betz 132:51056160fa4a 62 {
Wolfgang Betz 132:51056160fa4a 63 struct hci_request rq;
Wolfgang Betz 132:51056160fa4a 64 uint8_t status;
Wolfgang Betz 132:51056160fa4a 65 l2cap_conn_param_update_resp_cp_IDB05A1 cp;
Wolfgang Betz 132:51056160fa4a 66
Wolfgang Betz 132:51056160fa4a 67 cp.conn_handle = htobs(conn_handle);
Wolfgang Betz 132:51056160fa4a 68 cp.interval_min = htobs(interval_min);
Wolfgang Betz 132:51056160fa4a 69 cp.interval_max = htobs(interval_max);
Wolfgang Betz 132:51056160fa4a 70 cp.slave_latency = htobs(slave_latency);
Wolfgang Betz 132:51056160fa4a 71 cp.timeout_multiplier = htobs(timeout_multiplier);
Wolfgang Betz 132:51056160fa4a 72 cp.min_ce_length = htobs(min_ce_length);
Wolfgang Betz 132:51056160fa4a 73 cp.max_ce_length = htobs(max_ce_length);
Wolfgang Betz 132:51056160fa4a 74 cp.id = id;
Wolfgang Betz 132:51056160fa4a 75 cp.accept = accept;
Wolfgang Betz 132:51056160fa4a 76
Wolfgang Betz 132:51056160fa4a 77 Osal_MemSet(&rq, 0, sizeof(rq));
Wolfgang Betz 132:51056160fa4a 78 rq.ogf = OGF_VENDOR_CMD;
Wolfgang Betz 132:51056160fa4a 79 rq.ocf = OCF_L2CAP_CONN_PARAM_UPDATE_RESP;
Wolfgang Betz 132:51056160fa4a 80 rq.cparam = &cp;
Wolfgang Betz 132:51056160fa4a 81 rq.clen = sizeof(cp);
Wolfgang Betz 132:51056160fa4a 82 rq.rparam = &status;
Wolfgang Betz 132:51056160fa4a 83 rq.rlen = 1;
Wolfgang Betz 132:51056160fa4a 84
Wolfgang Betz 132:51056160fa4a 85 if (hci_send_req(&rq, FALSE) < 0)
Wolfgang Betz 132:51056160fa4a 86 return BLE_STATUS_TIMEOUT;
Wolfgang Betz 132:51056160fa4a 87
Wolfgang Betz 132:51056160fa4a 88 return status;
Wolfgang Betz 132:51056160fa4a 89 }
Wolfgang Betz 132:51056160fa4a 90 tBleStatus aci_l2cap_connection_parameter_update_response_IDB04A1(uint16_t conn_handle, uint16_t interval_min,
Wolfgang Betz 132:51056160fa4a 91 uint16_t interval_max, uint16_t slave_latency,
Wolfgang Betz 132:51056160fa4a 92 uint16_t timeout_multiplier, uint8_t id, uint8_t accept)
Wolfgang Betz 132:51056160fa4a 93 {
Wolfgang Betz 132:51056160fa4a 94 struct hci_request rq;
Wolfgang Betz 132:51056160fa4a 95 uint8_t status;
Wolfgang Betz 132:51056160fa4a 96 l2cap_conn_param_update_resp_cp_IDB04A1 cp;
Wolfgang Betz 132:51056160fa4a 97
Wolfgang Betz 132:51056160fa4a 98 cp.conn_handle = htobs(conn_handle);
Wolfgang Betz 132:51056160fa4a 99 cp.interval_min = htobs(interval_min);
Wolfgang Betz 132:51056160fa4a 100 cp.interval_max = htobs(interval_max);
Wolfgang Betz 132:51056160fa4a 101 cp.slave_latency = htobs(slave_latency);
Wolfgang Betz 132:51056160fa4a 102 cp.timeout_multiplier = htobs(timeout_multiplier);
Wolfgang Betz 132:51056160fa4a 103 cp.id = id;
Wolfgang Betz 132:51056160fa4a 104 cp.accept = accept;
Wolfgang Betz 132:51056160fa4a 105
Wolfgang Betz 132:51056160fa4a 106 Osal_MemSet(&rq, 0, sizeof(rq));
Wolfgang Betz 132:51056160fa4a 107 rq.ogf = OGF_VENDOR_CMD;
Wolfgang Betz 132:51056160fa4a 108 rq.ocf = OCF_L2CAP_CONN_PARAM_UPDATE_RESP;
Wolfgang Betz 132:51056160fa4a 109 rq.cparam = &cp;
Wolfgang Betz 132:51056160fa4a 110 rq.clen = sizeof(cp);
Wolfgang Betz 132:51056160fa4a 111 rq.rparam = &status;
Wolfgang Betz 132:51056160fa4a 112 rq.rlen = 1;
Wolfgang Betz 132:51056160fa4a 113
Wolfgang Betz 132:51056160fa4a 114 if (hci_send_req(&rq, FALSE) < 0)
Wolfgang Betz 132:51056160fa4a 115 return BLE_STATUS_TIMEOUT;
Wolfgang Betz 132:51056160fa4a 116
Wolfgang Betz 132:51056160fa4a 117 return status;
Vincent Coubard 296:c52d3a301449 118 }