Takeshi Wada / X_NUCLEO_IDB0XA1

Fork of X_NUCLEO_IDB0XA1 by ST

Committer:
Wolfgang Betz
Date:
Wed Oct 07 08:39:04 2015 +0200
Revision:
132:51056160fa4a
Child:
229:9981f62cdb1a
Andrea's version as of mail from 10/06/2015 05:56 PM

From: Andrea PALMIERI <andrea.palmieri@st.com>
To: Wolfgang BETZ <wolfgang.betz@st.com>, Rohit Grover <rohit.grover@arm.com>,
Antonio VILEI <antonio.vilei@st.com>, Mihail Stoyanov
<Mihail.Stoyanov@arm.com>
CC: Nicola CAPOVILLA <nicola.capovilla@st.com>, Silvio Lucio OLIVA
<silvio.oliva@st.com>, "jonathan.austin@arm.com" <jonathan.austin@arm.com>
Content-Class: urn:content-classes:message
Date: Tue, 6 Oct 2015 17:56:34 +0200
Subject: RE: Arduino Compatibility of X-NUCLEO-IDB04A1

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
Wolfgang Betz 132:51056160fa4a 16 #include "hal_types.h"
Wolfgang Betz 132:51056160fa4a 17 #include "osal.h"
Wolfgang Betz 132:51056160fa4a 18 #include "ble_status.h"
Wolfgang Betz 132:51056160fa4a 19 #include "hal.h"
Wolfgang Betz 132:51056160fa4a 20 #include "osal.h"
Wolfgang Betz 132:51056160fa4a 21 #include "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
Wolfgang Betz 132:51056160fa4a 70 tBleStatus aci_hal_set_tx_power_level(uint8_t en_high_power, uint8_t pa_level)
Wolfgang Betz 132:51056160fa4a 71 {
Wolfgang Betz 132:51056160fa4a 72 struct hci_request rq;
Wolfgang Betz 132:51056160fa4a 73 hal_set_tx_power_level_cp cp;
Wolfgang Betz 132:51056160fa4a 74 uint8_t status;
Wolfgang Betz 132:51056160fa4a 75
Wolfgang Betz 132:51056160fa4a 76 cp.en_high_power = en_high_power;
Wolfgang Betz 132:51056160fa4a 77 cp.pa_level = pa_level;
Wolfgang Betz 132:51056160fa4a 78
Wolfgang Betz 132:51056160fa4a 79 Osal_MemSet(&rq, 0, sizeof(rq));
Wolfgang Betz 132:51056160fa4a 80 rq.ogf = OGF_VENDOR_CMD;
Wolfgang Betz 132:51056160fa4a 81 rq.ocf = OCF_HAL_SET_TX_POWER_LEVEL;
Wolfgang Betz 132:51056160fa4a 82 rq.cparam = &cp;
Wolfgang Betz 132:51056160fa4a 83 rq.clen = HAL_SET_TX_POWER_LEVEL_CP_SIZE;
Wolfgang Betz 132:51056160fa4a 84 rq.rparam = &status;
Wolfgang Betz 132:51056160fa4a 85 rq.rlen = 1;
Wolfgang Betz 132:51056160fa4a 86
Wolfgang Betz 132:51056160fa4a 87 if (hci_send_req(&rq, FALSE) < 0)
Wolfgang Betz 132:51056160fa4a 88 return BLE_STATUS_TIMEOUT;
Wolfgang Betz 132:51056160fa4a 89
Wolfgang Betz 132:51056160fa4a 90 if (status) {
Wolfgang Betz 132:51056160fa4a 91 return status;
Wolfgang Betz 132:51056160fa4a 92 }
Wolfgang Betz 132:51056160fa4a 93
Wolfgang Betz 132:51056160fa4a 94 return 0;
Wolfgang Betz 132:51056160fa4a 95 }
Wolfgang Betz 132:51056160fa4a 96
Wolfgang Betz 132:51056160fa4a 97 tBleStatus aci_hal_device_standby(void)
Wolfgang Betz 132:51056160fa4a 98 {
Wolfgang Betz 132:51056160fa4a 99 struct hci_request rq;
Wolfgang Betz 132:51056160fa4a 100 uint8_t status;
Wolfgang Betz 132:51056160fa4a 101
Wolfgang Betz 132:51056160fa4a 102 Osal_MemSet(&rq, 0, sizeof(rq));
Wolfgang Betz 132:51056160fa4a 103 rq.ogf = OGF_VENDOR_CMD;
Wolfgang Betz 132:51056160fa4a 104 rq.ocf = OCF_HAL_DEVICE_STANDBY;
Wolfgang Betz 132:51056160fa4a 105 rq.rparam = &status;
Wolfgang Betz 132:51056160fa4a 106 rq.rlen = 1;
Wolfgang Betz 132:51056160fa4a 107
Wolfgang Betz 132:51056160fa4a 108 if (hci_send_req(&rq, FALSE) < 0)
Wolfgang Betz 132:51056160fa4a 109 return BLE_STATUS_TIMEOUT;
Wolfgang Betz 132:51056160fa4a 110
Wolfgang Betz 132:51056160fa4a 111 return status;
Wolfgang Betz 132:51056160fa4a 112 }
Wolfgang Betz 132:51056160fa4a 113
Wolfgang Betz 132:51056160fa4a 114 tBleStatus aci_hal_tone_start(uint8_t rf_channel)
Wolfgang Betz 132:51056160fa4a 115 {
Wolfgang Betz 132:51056160fa4a 116 struct hci_request rq;
Wolfgang Betz 132:51056160fa4a 117 hal_tone_start_cp cp;
Wolfgang Betz 132:51056160fa4a 118 uint8_t status;
Wolfgang Betz 132:51056160fa4a 119
Wolfgang Betz 132:51056160fa4a 120 cp.rf_channel = rf_channel;
Wolfgang Betz 132:51056160fa4a 121
Wolfgang Betz 132:51056160fa4a 122 Osal_MemSet(&rq, 0, sizeof(rq));
Wolfgang Betz 132:51056160fa4a 123 rq.ogf = OGF_VENDOR_CMD;
Wolfgang Betz 132:51056160fa4a 124 rq.ocf = OCF_HAL_TONE_START;
Wolfgang Betz 132:51056160fa4a 125 rq.cparam = &cp;
Wolfgang Betz 132:51056160fa4a 126 rq.clen = HAL_TONE_START_CP_SIZE;
Wolfgang Betz 132:51056160fa4a 127 rq.rparam = &status;
Wolfgang Betz 132:51056160fa4a 128 rq.rlen = 1;
Wolfgang Betz 132:51056160fa4a 129
Wolfgang Betz 132:51056160fa4a 130 if (hci_send_req(&rq, FALSE) < 0)
Wolfgang Betz 132:51056160fa4a 131 return BLE_STATUS_TIMEOUT;
Wolfgang Betz 132:51056160fa4a 132
Wolfgang Betz 132:51056160fa4a 133 return status;
Wolfgang Betz 132:51056160fa4a 134 }
Wolfgang Betz 132:51056160fa4a 135
Wolfgang Betz 132:51056160fa4a 136 tBleStatus aci_hal_tone_stop(void)
Wolfgang Betz 132:51056160fa4a 137 {
Wolfgang Betz 132:51056160fa4a 138 struct hci_request rq;
Wolfgang Betz 132:51056160fa4a 139 uint8_t status;
Wolfgang Betz 132:51056160fa4a 140
Wolfgang Betz 132:51056160fa4a 141 Osal_MemSet(&rq, 0, sizeof(rq));
Wolfgang Betz 132:51056160fa4a 142 rq.ogf = OGF_VENDOR_CMD;
Wolfgang Betz 132:51056160fa4a 143 rq.ocf = OCF_HAL_TONE_STOP;
Wolfgang Betz 132:51056160fa4a 144 rq.rparam = &status;
Wolfgang Betz 132:51056160fa4a 145 rq.rlen = 1;
Wolfgang Betz 132:51056160fa4a 146
Wolfgang Betz 132:51056160fa4a 147 if (hci_send_req(&rq, FALSE) < 0)
Wolfgang Betz 132:51056160fa4a 148 return BLE_STATUS_TIMEOUT;
Wolfgang Betz 132:51056160fa4a 149
Wolfgang Betz 132:51056160fa4a 150 return status;
Wolfgang Betz 132:51056160fa4a 151 }
Wolfgang Betz 132:51056160fa4a 152
Wolfgang Betz 132:51056160fa4a 153
Wolfgang Betz 132:51056160fa4a 154