Roller Catcher / Roller_C
Committer:
MaxenceGalopin
Date:
Mon Jan 06 14:10:27 2020 +0000
Revision:
308:85af48ae0335
Parent:
294:fd19310b086d
test

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 294:fd19310b086d 16 #include "ble_hal_types.h"
Vincent Coubard 294:fd19310b086d 17 #include "ble_osal.h"
Wolfgang Betz 132:51056160fa4a 18 #include "ble_status.h"
Vincent Coubard 294:fd19310b086d 19 #include "ble_hal.h"
Vincent Coubard 294:fd19310b086d 20 #include "ble_osal.h"
Vincent Coubard 294:fd19310b086d 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_gatt_server.h"
Wolfgang Betz 132:51056160fa4a 25 #include "bluenrg_gap.h"
Wolfgang Betz 132:51056160fa4a 26
Wolfgang Betz 132:51056160fa4a 27 #define MIN(a,b) ((a) < (b) )? (a) : (b)
Wolfgang Betz 132:51056160fa4a 28 #define MAX(a,b) ((a) > (b) )? (a) : (b)
Wolfgang Betz 132:51056160fa4a 29
Wolfgang Betz 132:51056160fa4a 30
Wolfgang Betz 132:51056160fa4a 31 tBleStatus aci_hal_write_config_data(uint8_t offset,
Wolfgang Betz 132:51056160fa4a 32 uint8_t len,
Wolfgang Betz 132:51056160fa4a 33 const uint8_t *val)
Wolfgang Betz 132:51056160fa4a 34 {
Wolfgang Betz 132:51056160fa4a 35 struct hci_request rq;
Wolfgang Betz 132:51056160fa4a 36 uint8_t status;
Wolfgang Betz 132:51056160fa4a 37 uint8_t buffer[HCI_MAX_PAYLOAD_SIZE];
Wolfgang Betz 132:51056160fa4a 38 uint8_t indx = 0;
Wolfgang Betz 132:51056160fa4a 39
Wolfgang Betz 132:51056160fa4a 40 if ((len+2) > HCI_MAX_PAYLOAD_SIZE)
Wolfgang Betz 132:51056160fa4a 41 return BLE_STATUS_INVALID_PARAMS;
Wolfgang Betz 132:51056160fa4a 42
Wolfgang Betz 132:51056160fa4a 43 buffer[indx] = offset;
Wolfgang Betz 132:51056160fa4a 44 indx++;
Wolfgang Betz 132:51056160fa4a 45
Wolfgang Betz 132:51056160fa4a 46 buffer[indx] = len;
Wolfgang Betz 132:51056160fa4a 47 indx++;
Wolfgang Betz 132:51056160fa4a 48
Wolfgang Betz 132:51056160fa4a 49 Osal_MemCpy(buffer + indx, val, len);
Wolfgang Betz 132:51056160fa4a 50 indx += len;
Wolfgang Betz 132:51056160fa4a 51
Wolfgang Betz 132:51056160fa4a 52 Osal_MemSet(&rq, 0, sizeof(rq));
Wolfgang Betz 132:51056160fa4a 53 rq.ogf = OGF_VENDOR_CMD;
Wolfgang Betz 132:51056160fa4a 54 rq.ocf = OCF_HAL_WRITE_CONFIG_DATA;
Wolfgang Betz 132:51056160fa4a 55 rq.cparam = (void *)buffer;
Wolfgang Betz 132:51056160fa4a 56 rq.clen = indx;
Wolfgang Betz 132:51056160fa4a 57 rq.rparam = &status;
Wolfgang Betz 132:51056160fa4a 58 rq.rlen = 1;
Wolfgang Betz 132:51056160fa4a 59
Wolfgang Betz 132:51056160fa4a 60 if (hci_send_req(&rq, FALSE) < 0)
Wolfgang Betz 132:51056160fa4a 61 return BLE_STATUS_TIMEOUT;
Wolfgang Betz 132:51056160fa4a 62
Wolfgang Betz 132:51056160fa4a 63 if (status) {
Wolfgang Betz 132:51056160fa4a 64 return status;
Wolfgang Betz 132:51056160fa4a 65 }
Wolfgang Betz 132:51056160fa4a 66
Wolfgang Betz 132:51056160fa4a 67 return 0;
Wolfgang Betz 132:51056160fa4a 68 }
Wolfgang Betz 132:51056160fa4a 69
Andrea Palmieri 229:9981f62cdb1a 70 tBleStatus aci_hal_read_config_data(uint8_t offset, uint16_t data_len, uint8_t *data_len_out_p, uint8_t *data)
Andrea Palmieri 229:9981f62cdb1a 71 {
Andrea Palmieri 229:9981f62cdb1a 72 struct hci_request rq;
Andrea Palmieri 229:9981f62cdb1a 73 hal_read_config_data_cp cp;
Andrea Palmieri 229:9981f62cdb1a 74 hal_read_config_data_rp rp;
Andrea Palmieri 229:9981f62cdb1a 75
Andrea Palmieri 229:9981f62cdb1a 76 cp.offset = offset;
Andrea Palmieri 229:9981f62cdb1a 77
Andrea Palmieri 229:9981f62cdb1a 78 Osal_MemSet(&rq, 0, sizeof(rq));
Andrea Palmieri 229:9981f62cdb1a 79 rq.ogf = OGF_VENDOR_CMD;
Andrea Palmieri 229:9981f62cdb1a 80 rq.ocf = OCF_HAL_READ_CONFIG_DATA;
Andrea Palmieri 229:9981f62cdb1a 81 rq.cparam = &cp;
Andrea Palmieri 229:9981f62cdb1a 82 rq.clen = sizeof(cp);
Andrea Palmieri 229:9981f62cdb1a 83 rq.rparam = &rp;
Andrea Palmieri 229:9981f62cdb1a 84 rq.rlen = sizeof(rp);
Andrea Palmieri 229:9981f62cdb1a 85
Andrea Palmieri 229:9981f62cdb1a 86 if (hci_send_req(&rq, FALSE) < 0)
Andrea Palmieri 229:9981f62cdb1a 87 return BLE_STATUS_TIMEOUT;
Andrea Palmieri 229:9981f62cdb1a 88
Andrea Palmieri 229:9981f62cdb1a 89 if(rp.status)
Andrea Palmieri 229:9981f62cdb1a 90 return rp.status;
Andrea Palmieri 229:9981f62cdb1a 91
Andrea Palmieri 229:9981f62cdb1a 92 *data_len_out_p = rq.rlen-1;
Andrea Palmieri 229:9981f62cdb1a 93
Andrea Palmieri 229:9981f62cdb1a 94 Osal_MemCpy(data, rp.data, MIN(data_len, *data_len_out_p));
Andrea Palmieri 229:9981f62cdb1a 95
Andrea Palmieri 229:9981f62cdb1a 96 return 0;
Andrea Palmieri 229:9981f62cdb1a 97 }
Andrea Palmieri 229:9981f62cdb1a 98
Wolfgang Betz 132:51056160fa4a 99 tBleStatus aci_hal_set_tx_power_level(uint8_t en_high_power, uint8_t pa_level)
Wolfgang Betz 132:51056160fa4a 100 {
Wolfgang Betz 132:51056160fa4a 101 struct hci_request rq;
Wolfgang Betz 132:51056160fa4a 102 hal_set_tx_power_level_cp cp;
Wolfgang Betz 132:51056160fa4a 103 uint8_t status;
Wolfgang Betz 132:51056160fa4a 104
Wolfgang Betz 132:51056160fa4a 105 cp.en_high_power = en_high_power;
Wolfgang Betz 132:51056160fa4a 106 cp.pa_level = pa_level;
Wolfgang Betz 132:51056160fa4a 107
Wolfgang Betz 132:51056160fa4a 108 Osal_MemSet(&rq, 0, sizeof(rq));
Wolfgang Betz 132:51056160fa4a 109 rq.ogf = OGF_VENDOR_CMD;
Wolfgang Betz 132:51056160fa4a 110 rq.ocf = OCF_HAL_SET_TX_POWER_LEVEL;
Wolfgang Betz 132:51056160fa4a 111 rq.cparam = &cp;
Wolfgang Betz 132:51056160fa4a 112 rq.clen = HAL_SET_TX_POWER_LEVEL_CP_SIZE;
Wolfgang Betz 132:51056160fa4a 113 rq.rparam = &status;
Wolfgang Betz 132:51056160fa4a 114 rq.rlen = 1;
Wolfgang Betz 132:51056160fa4a 115
Wolfgang Betz 132:51056160fa4a 116 if (hci_send_req(&rq, FALSE) < 0)
Wolfgang Betz 132:51056160fa4a 117 return BLE_STATUS_TIMEOUT;
Wolfgang Betz 132:51056160fa4a 118
Wolfgang Betz 132:51056160fa4a 119 if (status) {
Wolfgang Betz 132:51056160fa4a 120 return status;
Wolfgang Betz 132:51056160fa4a 121 }
Wolfgang Betz 132:51056160fa4a 122
Wolfgang Betz 132:51056160fa4a 123 return 0;
Wolfgang Betz 132:51056160fa4a 124 }
Wolfgang Betz 132:51056160fa4a 125
Wolfgang Betz 132:51056160fa4a 126 tBleStatus aci_hal_device_standby(void)
Wolfgang Betz 132:51056160fa4a 127 {
Wolfgang Betz 132:51056160fa4a 128 struct hci_request rq;
Wolfgang Betz 132:51056160fa4a 129 uint8_t status;
Wolfgang Betz 132:51056160fa4a 130
Wolfgang Betz 132:51056160fa4a 131 Osal_MemSet(&rq, 0, sizeof(rq));
Wolfgang Betz 132:51056160fa4a 132 rq.ogf = OGF_VENDOR_CMD;
Wolfgang Betz 132:51056160fa4a 133 rq.ocf = OCF_HAL_DEVICE_STANDBY;
Wolfgang Betz 132:51056160fa4a 134 rq.rparam = &status;
Wolfgang Betz 132:51056160fa4a 135 rq.rlen = 1;
Wolfgang Betz 132:51056160fa4a 136
Wolfgang Betz 132:51056160fa4a 137 if (hci_send_req(&rq, FALSE) < 0)
Wolfgang Betz 132:51056160fa4a 138 return BLE_STATUS_TIMEOUT;
Wolfgang Betz 132:51056160fa4a 139
Wolfgang Betz 132:51056160fa4a 140 return status;
Wolfgang Betz 132:51056160fa4a 141 }
Wolfgang Betz 132:51056160fa4a 142
Wolfgang Betz 132:51056160fa4a 143 tBleStatus aci_hal_tone_start(uint8_t rf_channel)
Wolfgang Betz 132:51056160fa4a 144 {
Wolfgang Betz 132:51056160fa4a 145 struct hci_request rq;
Wolfgang Betz 132:51056160fa4a 146 hal_tone_start_cp cp;
Wolfgang Betz 132:51056160fa4a 147 uint8_t status;
Wolfgang Betz 132:51056160fa4a 148
Wolfgang Betz 132:51056160fa4a 149 cp.rf_channel = rf_channel;
Wolfgang Betz 132:51056160fa4a 150
Wolfgang Betz 132:51056160fa4a 151 Osal_MemSet(&rq, 0, sizeof(rq));
Wolfgang Betz 132:51056160fa4a 152 rq.ogf = OGF_VENDOR_CMD;
Wolfgang Betz 132:51056160fa4a 153 rq.ocf = OCF_HAL_TONE_START;
Wolfgang Betz 132:51056160fa4a 154 rq.cparam = &cp;
Wolfgang Betz 132:51056160fa4a 155 rq.clen = HAL_TONE_START_CP_SIZE;
Wolfgang Betz 132:51056160fa4a 156 rq.rparam = &status;
Wolfgang Betz 132:51056160fa4a 157 rq.rlen = 1;
Wolfgang Betz 132:51056160fa4a 158
Wolfgang Betz 132:51056160fa4a 159 if (hci_send_req(&rq, FALSE) < 0)
Wolfgang Betz 132:51056160fa4a 160 return BLE_STATUS_TIMEOUT;
Wolfgang Betz 132:51056160fa4a 161
Wolfgang Betz 132:51056160fa4a 162 return status;
Wolfgang Betz 132:51056160fa4a 163 }
Wolfgang Betz 132:51056160fa4a 164
Wolfgang Betz 132:51056160fa4a 165 tBleStatus aci_hal_tone_stop(void)
Wolfgang Betz 132:51056160fa4a 166 {
Wolfgang Betz 132:51056160fa4a 167 struct hci_request rq;
Wolfgang Betz 132:51056160fa4a 168 uint8_t status;
Wolfgang Betz 132:51056160fa4a 169
Wolfgang Betz 132:51056160fa4a 170 Osal_MemSet(&rq, 0, sizeof(rq));
Wolfgang Betz 132:51056160fa4a 171 rq.ogf = OGF_VENDOR_CMD;
Wolfgang Betz 132:51056160fa4a 172 rq.ocf = OCF_HAL_TONE_STOP;
Wolfgang Betz 132:51056160fa4a 173 rq.rparam = &status;
Wolfgang Betz 132:51056160fa4a 174 rq.rlen = 1;
Wolfgang Betz 132:51056160fa4a 175
Wolfgang Betz 132:51056160fa4a 176 if (hci_send_req(&rq, FALSE) < 0)
Wolfgang Betz 132:51056160fa4a 177 return BLE_STATUS_TIMEOUT;
Wolfgang Betz 132:51056160fa4a 178
Wolfgang Betz 132:51056160fa4a 179 return status;
Wolfgang Betz 132:51056160fa4a 180 }
Wolfgang Betz 132:51056160fa4a 181
Wolfgang Betz 132:51056160fa4a 182