Smart Remote 3 nRF52 v1.2
m_coms_ble_atvv_srv.h
1 /*$$$LICENCE_NORDIC_STANDARD<2016>$$$*/
2 
20 #ifndef BLE_ATVV_H__
21 #define BLE_ATVV_H__
22 
23 #include <stdint.h>
24 #include <stdbool.h>
25 
26 #include "sdk_config.h"
27 #include "ble.h"
28 #include "ble_srv_common.h"
29 #include "nrf_sdh_ble.h"
30 #include "resources.h"
31 
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35 
36 #define ATVV_BLE_OBSERVER_PRIO BLE_OBSERVER_PRIORITY_LOW
37 
43 #define BLE_ATVV_DEF(_name) \
44 static ble_atvv_t _name; \
45 NRF_SDH_BLE_OBSERVER(_name ## _obs, \
46  ATVV_BLE_OBSERVER_PRIO, \
47  ble_atvv_on_ble_evt, &_name)
48 
49 #if PM_BLE_OBSERVER_PRIO >= ATVV_BLE_OBSERVER_PRIO
50 #error Peer Manager should have higher observer priority than ATVV
51 // PM is needed to reapply sys_attr when connecting to bonded peer
52 #endif
53 
54 #define BLE_UUID_ATV_BASE {{0x64, 0xB6, 0x17, 0xF6, \
55  0x01, 0xAF, 0x7D, 0xBC, \
56  0x05, 0x4F, 0x21, 0x5A, \
57  0x00, 0x00, 0x5E, 0xAB}}
58 #define BLE_UUID_ATV_SERVICE 0x0001
59 #define BLE_UUID_ATV_TX_CHARACTERISTIC 0x0002
60 #define BLE_UUID_ATV_RX_CHARACTERISTIC 0x0003
61 #define BLE_UUID_ATV_CTL_CHARACTERISTIC 0x0004
63 #define BLE_ATVV_CHAR_TX_LEN 20
64 #define BLE_ATVV_CHAR_CTL_LEN 20
65 
66 #define OPCODE_LENGTH 1
67 #define HANDLE_LENGTH 2
68 
70 #if defined(NRF_SDH_BLE_GATT_MAX_MTU_SIZE) && (NRF_SDH_BLE_GATT_MAX_MTU_SIZE != 0)
71  #define BLE_ATVV_MAX_DATA_LEN (NRF_SDH_BLE_GATT_MAX_MTU_SIZE - OPCODE_LENGTH - HANDLE_LENGTH)
72 #else
73  #define BLE_ATVV_MAX_DATA_LEN (BLE_GATT_MTU_SIZE_DEFAULT - OPCODE_LENGTH - HANDLE_LENGTH)
74  #warning NRF_SDH_BLE_GATT_MAX_MTU_SIZE is not defined.
75 #endif
76 
79 #define ATVV_VERSION_MAJOR 0x00
80 #define ATVV_VERSION_MINOR 0x05
81 
85 #define ATVV_CMD_GET_CAPS (0x0A)
86 #define ATVV_CMD_MIC_OPEN (0x0C)
87 #define ATVV_CMD_MIC_CLOSE (0x0D)
88 
92 #define ATVV_CTL_AUDIO_STOP (0x00)
93 #define ATVV_CTL_AUDIO_START (0x04)
94 #define ATVV_CTL_START_SEARCH (0x08)
95 #define ATVV_CTL_AUDIO_SYNC (0x0A)
96 #define ATVV_CTL_GET_CAPS_RESP (0x0B)
97 #define ATVV_CTL_MIC_OPEN_ERROR (0x0C)
98 
102 #define ATVV_ERROR_INVALID_CODEC (0x0F01)
103 #define ATVV_ERROR_MIC_OPEN_TIMEOUT (0x0F02)
104 #define ATVV_ERROR_INVALID_STATE (0x0F03)
105 
109 #define ATVV_CAPS_SUPP_CODEC_ADPCM_8KHZ (0x0001)
110 #define ATVV_CAPS_SUPP_CODEC_ADPCM_8_KHZ_16KHZ (0x0003)
111 #define ATVV_CAPS_SUPP_CODEC_ADPCM_OPUS_8KHZ (0x0005)
112 #define ATVV_CAPS_SUPP_CODEC_ADPCM_OPUS_8KHZ_16KHZ (0x0007)
113 
117 #define ATVV_CAPS_USED_CODEC_ADPCM_8KHZ (0x0001)
118 #define ATVV_CAPS_USED_CODEC_ADPCM_16KHZ (0x0002)
119 #define ATVV_CAPS_USED_CODEC_OPUS (0x0004)
120 
124 #define ATVV_CAPS_FRAME_SIZE_DEFAULT_134 (0x0086)
125 
129 #define ATVV_CAPS_CHAR_SIZE_DEFAULT_20 (0x0014)
130 #define ATVV_CAPS_CHAR_SIZE_MAX (ATVV_CAPS_CHAR_SIZE_DEFAULT_20)
131 
135 #define ATVV_TIMEOUT_1_MIC_OPEN (1000)
136 #define ATVV_TIMEOUT_2_STREAMING_DURATION (7000)
137 
141 typedef enum
142 {
149 
151 typedef enum
152 {
153  BLE_ATVV_CTL_AUDIO_STOP = ATVV_CTL_AUDIO_STOP,
154  BLE_ATVV_CTL_AUDIO_START = ATVV_CTL_AUDIO_START,
155  BLE_ATVV_CTL_START_SEARCH = ATVV_CTL_START_SEARCH,
156  BLE_ATVV_CTL_AUDIO_SYNC = ATVV_CTL_AUDIO_SYNC,
157  BLE_ATVV_CTL_GET_CAPS_RESP = ATVV_CTL_GET_CAPS_RESP,
158  BLE_ATVV_CTL_MIC_OPEN_ERROR = ATVV_CTL_MIC_OPEN_ERROR,
160 
162 typedef enum
163 {
164  BLE_ATVV_SUPPORTED_CODECS_ADPCM_8KHZ = ATVV_CAPS_SUPP_CODEC_ADPCM_8KHZ,
165  BLE_ATVV_SUPPORTED_CODECS_ADPCM_8KHZ_16KHZ = ATVV_CAPS_SUPP_CODEC_ADPCM_8_KHZ_16KHZ,
166  BLE_ATVV_SUPPORTED_CODECS_ADPCM_OPUS_8KHZ = ATVV_CAPS_SUPP_CODEC_ADPCM_OPUS_8KHZ,
167  BLE_ATVV_SUPPORTED_CODECS_ADPCM_OPUS_8KHZ_16KHZ = ATVV_CAPS_SUPP_CODEC_ADPCM_OPUS_8KHZ_16KHZ,
169 
171 typedef enum
172 {
173  BLE_ATVV_USED_CODEC_ADPCM_8KHZ = ATVV_CAPS_USED_CODEC_ADPCM_8KHZ,
174  BLE_ATVV_USED_CODEC_ADPCM_16KHZ = ATVV_CAPS_USED_CODEC_ADPCM_16KHZ,
175  BLE_ATVV_USED_CODEC_OPUS = ATVV_CAPS_USED_CODEC_OPUS,
177 
179 typedef enum
180 {
181  BLE_ATVV_FRAME_SIZE_DEFAULT_134 = ATVV_CAPS_FRAME_SIZE_DEFAULT_134,
183 
185 typedef enum
186 {
187  BLE_ATVV_CHAR_SIZE_DEFAULT_20 = ATVV_CAPS_CHAR_SIZE_DEFAULT_20,
189 
191 typedef enum
192 {
193  BLE_ATVV_ERROR_INVALID_CODEC = ATVV_ERROR_INVALID_CODEC,
194  BLE_ATVV_ERROR_MIC_OPEN_TIMEOUT = ATVV_ERROR_MIC_OPEN_TIMEOUT,
195  BLE_ATVV_ERROR_INVALID_STATE = ATVV_ERROR_INVALID_STATE,
197 
198 /* Forward declaration of the ble_atvv_t type. */
199 typedef struct ble_atvv_s ble_atvv_t;
200 
205 typedef struct
206 {
209 
214 typedef struct
215 {
216  uint16_t peer_version;
219 
224 typedef struct
225 {
227  ble_atvv_t const * p_atvv;
228  uint16_t conn_handle;
229  union
230  {
233  } params;
235 
237 typedef void (*ble_atvv_evt_handler_t) (ble_atvv_evt_t const * p_evt);
238 
244 {
245  uint8_t uuid_type;
246  uint16_t service_handle;
247  ble_gatts_char_handles_t tx_handles;
248  ble_gatts_char_handles_t rx_handles;
249  ble_gatts_char_handles_t ctl_handles;
251 };
252 
253 
263 ret_code_t ble_atvv_init(ble_atvv_t * p_atvv, ble_atvv_evt_handler_t p_evt_handler);
264 
265 
271 void ble_atvv_on_ble_evt(ble_evt_t const * p_ble_evt, void * p_context);
272 
289 ret_code_t ble_atvv_ctl_send(ble_atvv_t const * p_atvv, uint16_t conn_handle, ble_atvv_ctl_type_t type, void * p_param);
290 
305 ret_code_t ble_atvv_frame_data_transmit(ble_atvv_t const * p_atvv, uint8_t const * p_frame_data, uint16_t len, uint16_t conn_handle);
306 
307 #ifdef __cplusplus
308 }
309 #endif
310 
311 #endif // BLE_ATVV_H__
312 

Documentation feedback | Developer Zone | Subscribe | Updated