Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of X_NUCLEO_IDB0XA1 by
source/bluenrg-hci/hci/controller/bluenrg_hal_aci.c@132:51056160fa4a, 2015-10-07 (annotated)
- 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?
| User | Revision | Line number | New 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 |
