MariuszSkamra commented on code in PR #1691:
URL: https://github.com/apache/mynewt-nimble/pull/1691#discussion_r1575871054
##########
nimble/host/audio/include/audio/ble_audio.h:
##########
@@ -562,6 +583,66 @@ struct ble_audio_event_codec_unregistered {
const struct ble_audio_codec_record *record;
};
+/** @brief BASS Source Removed */
+struct ble_audio_event_bass_remote_scan {
+ /** Connection Handle of Broadcast Assistant that is performing Scan
procedure for us */
+ uint16_t conn_handle;
+};
+
+/** @brief BASS Source Added */
+struct ble_audio_event_bass_source_added {
+ /** Source ID */
+ uint8_t source_id;
+
+ /** Event status. 0 on success, BLE_HS Error code otherwise */
+ uint8_t status;
+};
+
+/** @brief BASS Source Modify */
+struct ble_audio_event_bass_source_modify {
+ /** Source ID */
+ uint8_t source_id;
+
+ /** Event status. 0 on success, BLE_HS Error code otherwise */
+ uint8_t status;
+
+ /** PA Sync operation to be performed by Broadcast Sink */
+ enum {
+ /** Do not synchronise to PA */
+ BLE_AUDIO_EVENT_BASS_NO_SYNC,
+
+ /** Synchronise to PA without using PAST */
+ BLE_AUDIO_EVENT_BASS_SYNC,
+
+ /** Terminate PA Sync */
+ BLE_AUDIO_EVENT_BASS_SYNC_TERMINATE,
+
+ /** Synchronise to PA using PAST */
+ BLE_AUDIO_EVENT_BASS_SYNC_PAST,
+ } pa_sync_operation;
+};
+
+/** @brief BASS Set Broadcast Code */
+struct ble_audio_event_bass_set_broadcast_code {
+ /** Source ID */
+ uint8_t source_id;
+
+ /** Event status. 0 on success, BLE_HS Error code otherwise */
+ uint8_t status;
+
+ /** Source ID */
+ uint8_t broadcast_code[BLE_AUDIO_BROADCAST_CODE_SIZE];
+};
Review Comment:
What's the purpose of having `status` needed in this event?
##########
nimble/host/audio/include/audio/ble_audio.h:
##########
@@ -527,6 +530,24 @@ struct ble_audio_broadcast_name {
/** BLE Audio event: Codec Unregistered */
#define BLE_AUDIO_EVENT_CODEC_UNREGISTERED 2
+/** BLE Audio event: BASS - Remote Scan Stopped */
+#define BLE_AUDIO_EVENT_BASS_REMOTE_SCAN_STOPPED 3
+
+/** BLE Audio event: BASS - Remote Scan Started */
+#define BLE_AUDIO_EVENT_BASS_REMOTE_SCAN_STARTED 4
+
+/** BLE Audio event: BASS - Add Source */
+#define BLE_AUDIO_EVENT_BASS_ADD_SOURCE 5
+
+/** BLE Audio event: BASS - Modify Source */
+#define BLE_AUDIO_EVENT_BASS_MODIFY_SOURCE 6
+
+/** BLE Audio event: BASS - Set Broadcast Code */
+#define BLE_AUDIO_EVENT_BASS_SET_BROADCAST_CODE 7
+
+/** BLE Audio event: BASS - Remove Source */
+#define BLE_AUDIO_EVENT_BASS_REMOVE_SOURCE 8
Review Comment:
```suggestion
/** BLE Audio event: BASS - Add Source */
#define BLE_AUDIO_EVENT_BASS_SOURCE_ADDED 5
/** BLE Audio event: BASS - Modify Source */
#define BLE_AUDIO_EVENT_BASS_SOURCE_MODIFIED 6
/** BLE Audio event: BASS - Set Broadcast Code */
#define BLE_AUDIO_EVENT_BASS_SET_BROADCAST_CODE 7
/** BLE Audio event: BASS - Remove Source */
#define BLE_AUDIO_EVENT_BASS_SOURCE_REMOVED 8
```
TBH, if all the events carry status only, we could end up with having just 1
event:
```
#define BLE_AUDIO_EVENT_BASS_OPERATION_STATUS X
/** @brief BASS operation status */
struct ble_audio_event_bass_op_status {
/** Source ID */
uint8_t source_id;
/** Operation */
uint8_t op;
/** Event status. 0 on success, BLE_HS Error code otherwise */
uint8_t status;
};
```
##########
nimble/host/audio/services/bass/include/services/bass/ble_audio_svc_bass.h:
##########
@@ -0,0 +1,450 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_AUDIO_SVC_BASS_
+#define H_BLE_AUDIO_SVC_BASS_
+
+#include <stdint.h>
+#include "audio/ble_audio.h"
+#include "syscfg/syscfg.h"
+
+/**
+ * @file ble_audio_svc_bass.h
+ *
+ * @brief Bluetooth LE Audio BAS Service
+ *
+ * This header file provides the public API for interacting with the BASS
package.
+ *
+ * @defgroup ble_audio_svc_bass Bluetooth LE Audio BASS package
+ * @ingroup bt_host
+ * @{
+ *
+ * This package implements BASS service. Receiver states can be modified with
setter functions
+ * or GATT writes to Control Point characteristic. Operations on Control Point
like Add Source or
+ * Modify Source can be accepted or rejected by application by registering
accept function callback.
+ * Accessing Control Point characteristic, or Successful modification or
Receiver State will lead to
+ * emission of one of BLE_SVC_AUDIO_BASS events.
+ *
+ */
+
+/** BLE AUDIO BASS Maximum Subgroup Number */
+#define BLE_SVC_AUDIO_BASS_SUB_NUM_MAX \
+ MYNEWT_VAL(BLE_SVC_AUDIO_BASS_SUB_NUM_MAX)
+
+/** BLE AUDIO BASS characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_UUID16 0x184F
+
+/** BLE AUDIO BASS Control Point characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_CHR_UUID16_BASS_CP 0x2BC7
+
+/** BLE AUDIO BASS Broadcast Receiver State characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_CHR_UUID16_BROADCAST_RECEIVE_STATE 0x2BC8
+
+/** Value of not assigned Source ID of Receiver State */
+#define BLE_SVC_AUDIO_BASS_RECEIVE_STATE_SRC_ID_NONE 0xFF
+
+/** BLE AUDIO BASS Add Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_ADD_SOURCE 0x01
+
+/** BLE AUDIO BASS Modify Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_MODIFY_SOURCE 0x02
+
+/** BLE AUDIO BASS Remove Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_REMOVE_SOURCE 0x03
+
+/** BLE AUDIO BASS Error: OP Code not supported */
+#define BLE_SVC_AUDIO_BASS_ERR_OPCODE_NOT_SUPPORTED 0x80
+
+/** BLE AUDIO BASS Error: Invalid Source ID */
+#define BLE_SVC_AUDIO_BASS_ERR_INVALID_SOURCE_ID 0x81
+
+/** BLE AUDIO BASS Encryption States */
+enum ble_svc_audio_bass_big_enc {
+ /** BLE AUDIO BASS BIG Encryption: Not Encrypted */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_NOT_ENCRYPTED,
+
+ /** BLE AUDIO BASS BIG Encryption: Broadcast Code Required */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_BROADCAST_CODE_REQ,
+
+ /** BLE AUDIO BASS BIG Encryption: Decrypting */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_DECRYPTING,
+
+ /** BLE AUDIO BASS BIG Encryption: Bad Code */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE
+};
+
+/** BLE AUDIO BASS PA Sync parameters, valid fo Modify Source operation */
+enum ble_svc_audio_bass_pa_sync {
+ /** BLE AUDIO BASS PA Sync: Do not synchronize to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_DO_NOT_SYNC,
+
+ /** BLE AUDIO BASS PA Sync: Synchronize to PA – PAST available */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_SYNC_PAST_AVAILABLE,
+
+ /** BLE AUDIO BASS PA Sync: Synchronize to PA – PAST not available */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_SYNC_PAST_NOT_AVAILABLE,
+
+ /**
+ * BLE AUDIO BASS PA Sync: reserved for future use.
+ * This shall be always last value in this enum
+ */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_RFU
+};
+
+/** BLE AUDIO BASS Broadcast Receiver: PA Sync States */
+enum ble_svc_audio_bass_pa_sync_state {
+ /** BLE AUDIO BASS PA Sync State: Not synchronized to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_NOT_SYNCED,
+
+ /** BLE AUDIO BASS PA Sync State: SyncInfo Request */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNC_INFO_REQ,
+
+ /** BLE AUDIO BASS PA Sync State: Synchronized to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNCED,
+
+ /** BLE AUDIO BASS PA Sync State: Failed to synchronize to PAA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNCED_FAILED,
+
+ /** BLE AUDIO BASS PA Sync State: No PAST */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_NO_PAST
+};
+
+/** BLE AUDIO BASS Broadcast Receiver State: Subgroup entry */
+struct ble_svc_audio_bass_subgroup {
+ /** BLE AUDIO BASS Subgroup entry: Bis Synchronization State */
+ uint32_t bis_sync_state;
+
+ /** BLE AUDIO BASS Subgroup entry: Metadata length */
+ uint8_t metadata_length;
+
+ /** BLE AUDIO BASS Subgroup entry: Metadata */
+ uint8_t *metadata;
Review Comment:
const?
##########
nimble/host/audio/services/bass/include/services/bass/ble_audio_svc_bass.h:
##########
@@ -0,0 +1,450 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_AUDIO_SVC_BASS_
+#define H_BLE_AUDIO_SVC_BASS_
+
+#include <stdint.h>
+#include "audio/ble_audio.h"
+#include "syscfg/syscfg.h"
+
+/**
+ * @file ble_audio_svc_bass.h
+ *
+ * @brief Bluetooth LE Audio BAS Service
+ *
+ * This header file provides the public API for interacting with the BASS
package.
+ *
+ * @defgroup ble_audio_svc_bass Bluetooth LE Audio BASS package
+ * @ingroup bt_host
+ * @{
+ *
+ * This package implements BASS service. Receiver states can be modified with
setter functions
+ * or GATT writes to Control Point characteristic. Operations on Control Point
like Add Source or
+ * Modify Source can be accepted or rejected by application by registering
accept function callback.
+ * Accessing Control Point characteristic, or Successful modification or
Receiver State will lead to
+ * emission of one of BLE_SVC_AUDIO_BASS events.
+ *
+ */
+
+/** BLE AUDIO BASS Maximum Subgroup Number */
+#define BLE_SVC_AUDIO_BASS_SUB_NUM_MAX \
+ MYNEWT_VAL(BLE_SVC_AUDIO_BASS_SUB_NUM_MAX)
+
+/** BLE AUDIO BASS characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_UUID16 0x184F
+
+/** BLE AUDIO BASS Control Point characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_CHR_UUID16_BASS_CP 0x2BC7
+
+/** BLE AUDIO BASS Broadcast Receiver State characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_CHR_UUID16_BROADCAST_RECEIVE_STATE 0x2BC8
+
+/** Value of not assigned Source ID of Receiver State */
+#define BLE_SVC_AUDIO_BASS_RECEIVE_STATE_SRC_ID_NONE 0xFF
+
+/** BLE AUDIO BASS Add Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_ADD_SOURCE 0x01
+
+/** BLE AUDIO BASS Modify Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_MODIFY_SOURCE 0x02
+
+/** BLE AUDIO BASS Remove Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_REMOVE_SOURCE 0x03
+
+/** BLE AUDIO BASS Error: OP Code not supported */
+#define BLE_SVC_AUDIO_BASS_ERR_OPCODE_NOT_SUPPORTED 0x80
+
+/** BLE AUDIO BASS Error: Invalid Source ID */
+#define BLE_SVC_AUDIO_BASS_ERR_INVALID_SOURCE_ID 0x81
+
+/** BLE AUDIO BASS Encryption States */
+enum ble_svc_audio_bass_big_enc {
+ /** BLE AUDIO BASS BIG Encryption: Not Encrypted */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_NOT_ENCRYPTED,
+
+ /** BLE AUDIO BASS BIG Encryption: Broadcast Code Required */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_BROADCAST_CODE_REQ,
+
+ /** BLE AUDIO BASS BIG Encryption: Decrypting */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_DECRYPTING,
+
+ /** BLE AUDIO BASS BIG Encryption: Bad Code */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE
+};
+
+/** BLE AUDIO BASS PA Sync parameters, valid fo Modify Source operation */
+enum ble_svc_audio_bass_pa_sync {
+ /** BLE AUDIO BASS PA Sync: Do not synchronize to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_DO_NOT_SYNC,
+
+ /** BLE AUDIO BASS PA Sync: Synchronize to PA – PAST available */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_SYNC_PAST_AVAILABLE,
+
+ /** BLE AUDIO BASS PA Sync: Synchronize to PA – PAST not available */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_SYNC_PAST_NOT_AVAILABLE,
+
+ /**
+ * BLE AUDIO BASS PA Sync: reserved for future use.
+ * This shall be always last value in this enum
+ */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_RFU
+};
+
+/** BLE AUDIO BASS Broadcast Receiver: PA Sync States */
+enum ble_svc_audio_bass_pa_sync_state {
+ /** BLE AUDIO BASS PA Sync State: Not synchronized to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_NOT_SYNCED,
+
+ /** BLE AUDIO BASS PA Sync State: SyncInfo Request */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNC_INFO_REQ,
+
+ /** BLE AUDIO BASS PA Sync State: Synchronized to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNCED,
+
+ /** BLE AUDIO BASS PA Sync State: Failed to synchronize to PAA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNCED_FAILED,
+
+ /** BLE AUDIO BASS PA Sync State: No PAST */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_NO_PAST
+};
+
+/** BLE AUDIO BASS Broadcast Receiver State: Subgroup entry */
+struct ble_svc_audio_bass_subgroup {
+ /** BLE AUDIO BASS Subgroup entry: Bis Synchronization State */
+ uint32_t bis_sync_state;
+
+ /** BLE AUDIO BASS Subgroup entry: Metadata length */
+ uint8_t metadata_length;
+
+ /** BLE AUDIO BASS Subgroup entry: Metadata */
+ uint8_t *metadata;
+};
+
+/** BLE AUDIO BASS Broadcast Receiver State */
+struct ble_svc_audio_bass_receiver_state {
+ /** BLE AUDIO BASS Broadcast Receiver State: Source ID */
+ uint8_t source_id;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Source BLE Address */
+ ble_addr_t source_addr;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Source Advertising SID */
+ uint8_t source_adv_sid;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Broadcast ID */
+ uint32_t broadcast_id;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: PA Sync state */
+ enum ble_svc_audio_bass_pa_sync_state pa_sync_state;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: BIG Encryption */
+ enum ble_svc_audio_bass_big_enc big_encryption;
+
+ /**
+ * BLE AUDIO BASS Broadcast Receiver State: Bad Code.
+ * On GATT Read access, this value is ignored if big_encryption
+ * is not set to BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE
+ */
+ uint8_t bad_code[BLE_AUDIO_BROADCAST_CODE_SIZE];
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Number of subgroups */
+ uint8_t num_subgroups;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: subgroup entries */
+ struct ble_svc_audio_bass_subgroup
+ subgroups[BLE_SVC_AUDIO_BASS_SUB_NUM_MAX];
+};
+
+/** BLE AUDIO BASS Broadcast Receiver State add parameters */
+struct ble_svc_audio_bass_receiver_state_add_params {
+ /** BLE AUDIO BASS Broadcast Receiver State: Source BLE Address */
+ ble_addr_t source_addr;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Source Advertising SID */
+ uint8_t source_adv_sid;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Broadcast ID */
+ uint32_t broadcast_id;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: PA Sync state */
+ enum ble_svc_audio_bass_pa_sync_state pa_sync_state;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: BIG Encryption */
+ enum ble_svc_audio_bass_big_enc big_encryption;
+
+ /**
+ * BLE AUDIO BASS Broadcast Receiver State: Bad Code.
+ * On GATT Read access, this value is ignored if big_encryption
+ * is not set to BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE
+ */
+ uint8_t bad_code[BLE_AUDIO_BROADCAST_CODE_SIZE];
Review Comment:
const
##########
nimble/host/audio/include/audio/ble_audio.h:
##########
@@ -562,6 +583,66 @@ struct ble_audio_event_codec_unregistered {
const struct ble_audio_codec_record *record;
};
+/** @brief BASS Source Removed */
+struct ble_audio_event_bass_remote_scan {
+ /** Connection Handle of Broadcast Assistant that is performing Scan
procedure for us */
+ uint16_t conn_handle;
+};
+
+/** @brief BASS Source Added */
+struct ble_audio_event_bass_source_added {
+ /** Source ID */
+ uint8_t source_id;
+
+ /** Event status. 0 on success, BLE_HS Error code otherwise */
+ uint8_t status;
+};
+
+/** @brief BASS Source Modify */
+struct ble_audio_event_bass_source_modify {
Review Comment:
```suggestion
struct ble_audio_event_bass_source_modified {
```
to follow the naming:
`ble_audio_event_bass_source_added`
`ble_audio_event_bass_source_removed`
##########
nimble/host/audio/include/audio/ble_audio.h:
##########
@@ -562,6 +583,66 @@ struct ble_audio_event_codec_unregistered {
const struct ble_audio_codec_record *record;
};
+/** @brief BASS Source Removed */
+struct ble_audio_event_bass_remote_scan {
+ /** Connection Handle of Broadcast Assistant that is performing Scan
procedure for us */
+ uint16_t conn_handle;
+};
+
+/** @brief BASS Source Added */
+struct ble_audio_event_bass_source_added {
+ /** Source ID */
+ uint8_t source_id;
+
+ /** Event status. 0 on success, BLE_HS Error code otherwise */
+ uint8_t status;
+};
+
+/** @brief BASS Source Modify */
+struct ble_audio_event_bass_source_modify {
+ /** Source ID */
+ uint8_t source_id;
+
+ /** Event status. 0 on success, BLE_HS Error code otherwise */
+ uint8_t status;
+
+ /** PA Sync operation to be performed by Broadcast Sink */
+ enum {
+ /** Do not synchronise to PA */
+ BLE_AUDIO_EVENT_BASS_NO_SYNC,
+
+ /** Synchronise to PA without using PAST */
+ BLE_AUDIO_EVENT_BASS_SYNC,
+
+ /** Terminate PA Sync */
+ BLE_AUDIO_EVENT_BASS_SYNC_TERMINATE,
+
+ /** Synchronise to PA using PAST */
+ BLE_AUDIO_EVENT_BASS_SYNC_PAST,
+ } pa_sync_operation;
Review Comment:
I'm not convinced it's needed, as the same data come in BASS Action event
##########
nimble/host/audio/services/bass/include/services/bass/ble_audio_svc_bass.h:
##########
@@ -0,0 +1,450 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_AUDIO_SVC_BASS_
+#define H_BLE_AUDIO_SVC_BASS_
+
+#include <stdint.h>
+#include "audio/ble_audio.h"
+#include "syscfg/syscfg.h"
+
+/**
+ * @file ble_audio_svc_bass.h
+ *
+ * @brief Bluetooth LE Audio BAS Service
+ *
+ * This header file provides the public API for interacting with the BASS
package.
+ *
+ * @defgroup ble_audio_svc_bass Bluetooth LE Audio BASS package
+ * @ingroup bt_host
+ * @{
+ *
+ * This package implements BASS service. Receiver states can be modified with
setter functions
+ * or GATT writes to Control Point characteristic. Operations on Control Point
like Add Source or
+ * Modify Source can be accepted or rejected by application by registering
accept function callback.
+ * Accessing Control Point characteristic, or Successful modification or
Receiver State will lead to
+ * emission of one of BLE_SVC_AUDIO_BASS events.
+ *
+ */
+
+/** BLE AUDIO BASS Maximum Subgroup Number */
+#define BLE_SVC_AUDIO_BASS_SUB_NUM_MAX \
+ MYNEWT_VAL(BLE_SVC_AUDIO_BASS_SUB_NUM_MAX)
+
+/** BLE AUDIO BASS characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_UUID16 0x184F
+
+/** BLE AUDIO BASS Control Point characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_CHR_UUID16_BASS_CP 0x2BC7
+
+/** BLE AUDIO BASS Broadcast Receiver State characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_CHR_UUID16_BROADCAST_RECEIVE_STATE 0x2BC8
+
+/** Value of not assigned Source ID of Receiver State */
+#define BLE_SVC_AUDIO_BASS_RECEIVE_STATE_SRC_ID_NONE 0xFF
+
+/** BLE AUDIO BASS Add Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_ADD_SOURCE 0x01
+
+/** BLE AUDIO BASS Modify Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_MODIFY_SOURCE 0x02
+
+/** BLE AUDIO BASS Remove Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_REMOVE_SOURCE 0x03
+
+/** BLE AUDIO BASS Error: OP Code not supported */
+#define BLE_SVC_AUDIO_BASS_ERR_OPCODE_NOT_SUPPORTED 0x80
+
+/** BLE AUDIO BASS Error: Invalid Source ID */
+#define BLE_SVC_AUDIO_BASS_ERR_INVALID_SOURCE_ID 0x81
+
+/** BLE AUDIO BASS Encryption States */
+enum ble_svc_audio_bass_big_enc {
+ /** BLE AUDIO BASS BIG Encryption: Not Encrypted */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_NOT_ENCRYPTED,
+
+ /** BLE AUDIO BASS BIG Encryption: Broadcast Code Required */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_BROADCAST_CODE_REQ,
+
+ /** BLE AUDIO BASS BIG Encryption: Decrypting */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_DECRYPTING,
+
+ /** BLE AUDIO BASS BIG Encryption: Bad Code */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE
+};
+
+/** BLE AUDIO BASS PA Sync parameters, valid fo Modify Source operation */
+enum ble_svc_audio_bass_pa_sync {
+ /** BLE AUDIO BASS PA Sync: Do not synchronize to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_DO_NOT_SYNC,
+
+ /** BLE AUDIO BASS PA Sync: Synchronize to PA – PAST available */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_SYNC_PAST_AVAILABLE,
+
+ /** BLE AUDIO BASS PA Sync: Synchronize to PA – PAST not available */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_SYNC_PAST_NOT_AVAILABLE,
+
+ /**
+ * BLE AUDIO BASS PA Sync: reserved for future use.
+ * This shall be always last value in this enum
+ */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_RFU
+};
+
+/** BLE AUDIO BASS Broadcast Receiver: PA Sync States */
+enum ble_svc_audio_bass_pa_sync_state {
+ /** BLE AUDIO BASS PA Sync State: Not synchronized to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_NOT_SYNCED,
+
+ /** BLE AUDIO BASS PA Sync State: SyncInfo Request */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNC_INFO_REQ,
+
+ /** BLE AUDIO BASS PA Sync State: Synchronized to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNCED,
+
+ /** BLE AUDIO BASS PA Sync State: Failed to synchronize to PAA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNCED_FAILED,
+
+ /** BLE AUDIO BASS PA Sync State: No PAST */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_NO_PAST
+};
+
+/** BLE AUDIO BASS Broadcast Receiver State: Subgroup entry */
+struct ble_svc_audio_bass_subgroup {
+ /** BLE AUDIO BASS Subgroup entry: Bis Synchronization State */
+ uint32_t bis_sync_state;
+
+ /** BLE AUDIO BASS Subgroup entry: Metadata length */
+ uint8_t metadata_length;
+
+ /** BLE AUDIO BASS Subgroup entry: Metadata */
+ uint8_t *metadata;
+};
+
+/** BLE AUDIO BASS Broadcast Receiver State */
+struct ble_svc_audio_bass_receiver_state {
+ /** BLE AUDIO BASS Broadcast Receiver State: Source ID */
+ uint8_t source_id;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Source BLE Address */
+ ble_addr_t source_addr;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Source Advertising SID */
+ uint8_t source_adv_sid;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Broadcast ID */
+ uint32_t broadcast_id;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: PA Sync state */
+ enum ble_svc_audio_bass_pa_sync_state pa_sync_state;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: BIG Encryption */
+ enum ble_svc_audio_bass_big_enc big_encryption;
+
+ /**
+ * BLE AUDIO BASS Broadcast Receiver State: Bad Code.
+ * On GATT Read access, this value is ignored if big_encryption
+ * is not set to BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE
+ */
+ uint8_t bad_code[BLE_AUDIO_BROADCAST_CODE_SIZE];
Review Comment:
const?
##########
nimble/host/audio/services/bass/include/services/bass/ble_audio_svc_bass.h:
##########
@@ -0,0 +1,450 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_AUDIO_SVC_BASS_
+#define H_BLE_AUDIO_SVC_BASS_
+
+#include <stdint.h>
+#include "audio/ble_audio.h"
+#include "syscfg/syscfg.h"
+
+/**
+ * @file ble_audio_svc_bass.h
+ *
+ * @brief Bluetooth LE Audio BAS Service
+ *
+ * This header file provides the public API for interacting with the BASS
package.
+ *
+ * @defgroup ble_audio_svc_bass Bluetooth LE Audio BASS package
+ * @ingroup bt_host
+ * @{
+ *
+ * This package implements BASS service. Receiver states can be modified with
setter functions
+ * or GATT writes to Control Point characteristic. Operations on Control Point
like Add Source or
+ * Modify Source can be accepted or rejected by application by registering
accept function callback.
+ * Accessing Control Point characteristic, or Successful modification or
Receiver State will lead to
+ * emission of one of BLE_SVC_AUDIO_BASS events.
+ *
+ */
+
+/** BLE AUDIO BASS Maximum Subgroup Number */
+#define BLE_SVC_AUDIO_BASS_SUB_NUM_MAX \
+ MYNEWT_VAL(BLE_SVC_AUDIO_BASS_SUB_NUM_MAX)
+
+/** BLE AUDIO BASS characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_UUID16 0x184F
+
+/** BLE AUDIO BASS Control Point characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_CHR_UUID16_BASS_CP 0x2BC7
+
+/** BLE AUDIO BASS Broadcast Receiver State characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_CHR_UUID16_BROADCAST_RECEIVE_STATE 0x2BC8
+
+/** Value of not assigned Source ID of Receiver State */
+#define BLE_SVC_AUDIO_BASS_RECEIVE_STATE_SRC_ID_NONE 0xFF
+
+/** BLE AUDIO BASS Add Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_ADD_SOURCE 0x01
+
+/** BLE AUDIO BASS Modify Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_MODIFY_SOURCE 0x02
+
+/** BLE AUDIO BASS Remove Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_REMOVE_SOURCE 0x03
Review Comment:
enum maybe?
##########
nimble/host/audio/services/bass/include/services/bass/ble_audio_svc_bass.h:
##########
@@ -0,0 +1,450 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_AUDIO_SVC_BASS_
+#define H_BLE_AUDIO_SVC_BASS_
+
+#include <stdint.h>
+#include "audio/ble_audio.h"
+#include "syscfg/syscfg.h"
+
+/**
+ * @file ble_audio_svc_bass.h
+ *
+ * @brief Bluetooth LE Audio BAS Service
+ *
+ * This header file provides the public API for interacting with the BASS
package.
+ *
+ * @defgroup ble_audio_svc_bass Bluetooth LE Audio BASS package
+ * @ingroup bt_host
+ * @{
+ *
+ * This package implements BASS service. Receiver states can be modified with
setter functions
+ * or GATT writes to Control Point characteristic. Operations on Control Point
like Add Source or
+ * Modify Source can be accepted or rejected by application by registering
accept function callback.
+ * Accessing Control Point characteristic, or Successful modification or
Receiver State will lead to
+ * emission of one of BLE_SVC_AUDIO_BASS events.
+ *
+ */
+
+/** BLE AUDIO BASS Maximum Subgroup Number */
+#define BLE_SVC_AUDIO_BASS_SUB_NUM_MAX \
+ MYNEWT_VAL(BLE_SVC_AUDIO_BASS_SUB_NUM_MAX)
+
+/** BLE AUDIO BASS characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_UUID16 0x184F
+
+/** BLE AUDIO BASS Control Point characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_CHR_UUID16_BASS_CP 0x2BC7
+
+/** BLE AUDIO BASS Broadcast Receiver State characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_CHR_UUID16_BROADCAST_RECEIVE_STATE 0x2BC8
+
+/** Value of not assigned Source ID of Receiver State */
+#define BLE_SVC_AUDIO_BASS_RECEIVE_STATE_SRC_ID_NONE 0xFF
+
+/** BLE AUDIO BASS Add Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_ADD_SOURCE 0x01
+
+/** BLE AUDIO BASS Modify Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_MODIFY_SOURCE 0x02
+
+/** BLE AUDIO BASS Remove Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_REMOVE_SOURCE 0x03
+
+/** BLE AUDIO BASS Error: OP Code not supported */
+#define BLE_SVC_AUDIO_BASS_ERR_OPCODE_NOT_SUPPORTED 0x80
+
+/** BLE AUDIO BASS Error: Invalid Source ID */
+#define BLE_SVC_AUDIO_BASS_ERR_INVALID_SOURCE_ID 0x81
+
+/** BLE AUDIO BASS Encryption States */
+enum ble_svc_audio_bass_big_enc {
+ /** BLE AUDIO BASS BIG Encryption: Not Encrypted */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_NOT_ENCRYPTED,
+
+ /** BLE AUDIO BASS BIG Encryption: Broadcast Code Required */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_BROADCAST_CODE_REQ,
+
+ /** BLE AUDIO BASS BIG Encryption: Decrypting */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_DECRYPTING,
+
+ /** BLE AUDIO BASS BIG Encryption: Bad Code */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE
+};
+
+/** BLE AUDIO BASS PA Sync parameters, valid fo Modify Source operation */
+enum ble_svc_audio_bass_pa_sync {
+ /** BLE AUDIO BASS PA Sync: Do not synchronize to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_DO_NOT_SYNC,
+
+ /** BLE AUDIO BASS PA Sync: Synchronize to PA – PAST available */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_SYNC_PAST_AVAILABLE,
+
+ /** BLE AUDIO BASS PA Sync: Synchronize to PA – PAST not available */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_SYNC_PAST_NOT_AVAILABLE,
+
+ /**
+ * BLE AUDIO BASS PA Sync: reserved for future use.
+ * This shall be always last value in this enum
+ */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_RFU
+};
+
+/** BLE AUDIO BASS Broadcast Receiver: PA Sync States */
+enum ble_svc_audio_bass_pa_sync_state {
+ /** BLE AUDIO BASS PA Sync State: Not synchronized to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_NOT_SYNCED,
+
+ /** BLE AUDIO BASS PA Sync State: SyncInfo Request */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNC_INFO_REQ,
+
+ /** BLE AUDIO BASS PA Sync State: Synchronized to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNCED,
+
+ /** BLE AUDIO BASS PA Sync State: Failed to synchronize to PAA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNCED_FAILED,
+
+ /** BLE AUDIO BASS PA Sync State: No PAST */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_NO_PAST
+};
+
+/** BLE AUDIO BASS Broadcast Receiver State: Subgroup entry */
+struct ble_svc_audio_bass_subgroup {
+ /** BLE AUDIO BASS Subgroup entry: Bis Synchronization State */
+ uint32_t bis_sync_state;
+
+ /** BLE AUDIO BASS Subgroup entry: Metadata length */
+ uint8_t metadata_length;
+
+ /** BLE AUDIO BASS Subgroup entry: Metadata */
+ uint8_t *metadata;
+};
+
+/** BLE AUDIO BASS Broadcast Receiver State */
+struct ble_svc_audio_bass_receiver_state {
+ /** BLE AUDIO BASS Broadcast Receiver State: Source ID */
+ uint8_t source_id;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Source BLE Address */
+ ble_addr_t source_addr;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Source Advertising SID */
+ uint8_t source_adv_sid;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Broadcast ID */
+ uint32_t broadcast_id;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: PA Sync state */
+ enum ble_svc_audio_bass_pa_sync_state pa_sync_state;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: BIG Encryption */
+ enum ble_svc_audio_bass_big_enc big_encryption;
+
+ /**
+ * BLE AUDIO BASS Broadcast Receiver State: Bad Code.
+ * On GATT Read access, this value is ignored if big_encryption
+ * is not set to BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE
+ */
+ uint8_t bad_code[BLE_AUDIO_BROADCAST_CODE_SIZE];
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Number of subgroups */
+ uint8_t num_subgroups;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: subgroup entries */
+ struct ble_svc_audio_bass_subgroup
+ subgroups[BLE_SVC_AUDIO_BASS_SUB_NUM_MAX];
+};
+
+/** BLE AUDIO BASS Broadcast Receiver State add parameters */
+struct ble_svc_audio_bass_receiver_state_add_params {
+ /** BLE AUDIO BASS Broadcast Receiver State: Source BLE Address */
+ ble_addr_t source_addr;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Source Advertising SID */
+ uint8_t source_adv_sid;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Broadcast ID */
+ uint32_t broadcast_id;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: PA Sync state */
+ enum ble_svc_audio_bass_pa_sync_state pa_sync_state;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: BIG Encryption */
+ enum ble_svc_audio_bass_big_enc big_encryption;
+
+ /**
+ * BLE AUDIO BASS Broadcast Receiver State: Bad Code.
+ * On GATT Read access, this value is ignored if big_encryption
+ * is not set to BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE
+ */
+ uint8_t bad_code[BLE_AUDIO_BROADCAST_CODE_SIZE];
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Number of subgroups */
+ uint8_t num_subgroups;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: subgroup entries */
+ struct ble_svc_audio_bass_subgroup
+ subgroups[BLE_SVC_AUDIO_BASS_SUB_NUM_MAX];
+};
+
+/** Parameters used for updating Metadata in Receiver State. */
+struct ble_svc_audio_bass_metadata_params {
+ /** Subgroup index */
+ uint8_t subgroup_idx;
+
+ /** Metadata length */
+ uint8_t metadata_length;
+
+ /** Metadata */
+ const uint8_t *metadata;
+};
+
+/** Parameters used for updating Receiver State. */
+struct ble_svc_audio_bass_update_params {
+ /** PA Sync state */
+ enum ble_svc_audio_bass_pa_sync_state pa_sync_state;
+
+ /** BIG encryption state */
+ enum ble_svc_audio_bass_big_enc big_encryption;
+
+ /** Incorrect Bad Broadcast Code. Valid for
BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE */
+ const uint8_t *bad_code;
+
+ /** Subgroup index of BIS Sync State to be updated */
+ uint8_t subgroup_idx;
+
+ /** BIS Sync State */
+ uint32_t bis_sync_state;
+};
+
+/**
+ * Structure describing operation attempted by write on
+ * BASS Control Point characteristic
+ */
+struct ble_svc_audio_bass_operation {
+ /**
+ * Indicates the type of BASS operation that occurred. This is one of the
+ * ble_svc_audio_bass_operation codes.
+ */
+ uint8_t op;
+
+ /** Connection handle for which the operation was performed */
+ uint16_t conn_handle;
+
+ /**
+ * A discriminated union containing additional details concerning the BASS
Control Point
+ * event. The 'type' field indicates which member of the union is valid.
+ */
+ union {
+ /**
+ * Represents Add Source operation. Valid for the following event
+ * types:
+ * o BLE_SVC_AUDIO_BASS_OPERATION_ADD_SOURCE
+ * Application can accept or reject Add Source operation. If no
application callback is set
+ * and free Receive State characteristic exists operation is
automatically accepted.
+ * If application callback exists and returns 0 operation is accepted.
+ * Otherwise, operation is rejected.
+ * If operation is accepted by application, it may select receiver
state to be filled.
+ * If application doesnt select characteristic, BASS Server falls back
+ * to searching free one. If none is found, operation is rejected.
+ * After Add Source operation is accepted, BLE_AUDIO_EVENT is emitted.
+ */
+ struct {
+ /** Source ID */
+ uint8_t source_id;
+
+ /** Advertiser Address */
+ ble_addr_t adv_addr;
+
+ /** Advertising SID */
+ uint8_t adv_sid;
+
+ /** Broadcast ID */
+ uint32_t broadcast_id : 24;
+
+ /** PA Sync */
+ enum ble_svc_audio_bass_pa_sync pa_sync;
+
+ /** PA Interval */
+ uint16_t pa_interval;
+
+ /** Number of subgroups */
+ uint8_t num_subgroups;
+
+ /** Subgroup entries */
+ struct ble_svc_audio_bass_subgroup
+ subgroups[BLE_SVC_AUDIO_BASS_SUB_NUM_MAX];
+
+ /**
+ * Valid pointer to provide source ID to be swapped or NULL.
+ *
+ * If there are insufficient resources to handle the operation,
the application is
+ * requested to provide source ID to be removed once accepted.
+ */
+ uint8_t *out_source_id_to_swap;
+ } add_source;
+
+ /**
+ * Represents Modify Source operation. Valid for the following event
+ * types:
+ * o BLE_SVC_AUDIO_BASS_OPERATION_MODIFY_SOURCE
+ * Application can accept or reject Add Source operation. If no
application callback is set
+ * or application callback returns 0 operation is automatically
accepted.
+ * If application callback returns non-zero value operation is
rejected.
+ */
+ struct {
+ /** Source ID */
+ uint8_t source_id;
+
+ /** PA Sync */
+ enum ble_svc_audio_bass_pa_sync pa_sync;
+
+ /** PA Interval */
+ uint16_t pa_interval;
+
+ /** Number of subgroups */
+ uint16_t num_subgroups;
+
+ /** BIS Synchronisation of subgroups */
+ uint32_t bis_sync[BLE_SVC_AUDIO_BASS_SUB_NUM_MAX];
Review Comment:
const
##########
nimble/host/audio/services/bass/include/services/bass/ble_audio_svc_bass.h:
##########
@@ -0,0 +1,450 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_AUDIO_SVC_BASS_
+#define H_BLE_AUDIO_SVC_BASS_
+
+#include <stdint.h>
+#include "audio/ble_audio.h"
+#include "syscfg/syscfg.h"
+
+/**
+ * @file ble_audio_svc_bass.h
+ *
+ * @brief Bluetooth LE Audio BAS Service
+ *
+ * This header file provides the public API for interacting with the BASS
package.
+ *
+ * @defgroup ble_audio_svc_bass Bluetooth LE Audio BASS package
+ * @ingroup bt_host
+ * @{
+ *
+ * This package implements BASS service. Receiver states can be modified with
setter functions
+ * or GATT writes to Control Point characteristic. Operations on Control Point
like Add Source or
+ * Modify Source can be accepted or rejected by application by registering
accept function callback.
+ * Accessing Control Point characteristic, or Successful modification or
Receiver State will lead to
+ * emission of one of BLE_SVC_AUDIO_BASS events.
+ *
+ */
+
+/** BLE AUDIO BASS Maximum Subgroup Number */
+#define BLE_SVC_AUDIO_BASS_SUB_NUM_MAX \
+ MYNEWT_VAL(BLE_SVC_AUDIO_BASS_SUB_NUM_MAX)
+
+/** BLE AUDIO BASS characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_UUID16 0x184F
+
+/** BLE AUDIO BASS Control Point characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_CHR_UUID16_BASS_CP 0x2BC7
+
+/** BLE AUDIO BASS Broadcast Receiver State characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_CHR_UUID16_BROADCAST_RECEIVE_STATE 0x2BC8
+
+/** Value of not assigned Source ID of Receiver State */
+#define BLE_SVC_AUDIO_BASS_RECEIVE_STATE_SRC_ID_NONE 0xFF
+
+/** BLE AUDIO BASS Add Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_ADD_SOURCE 0x01
+
+/** BLE AUDIO BASS Modify Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_MODIFY_SOURCE 0x02
+
+/** BLE AUDIO BASS Remove Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_REMOVE_SOURCE 0x03
+
+/** BLE AUDIO BASS Error: OP Code not supported */
+#define BLE_SVC_AUDIO_BASS_ERR_OPCODE_NOT_SUPPORTED 0x80
+
+/** BLE AUDIO BASS Error: Invalid Source ID */
+#define BLE_SVC_AUDIO_BASS_ERR_INVALID_SOURCE_ID 0x81
+
+/** BLE AUDIO BASS Encryption States */
+enum ble_svc_audio_bass_big_enc {
+ /** BLE AUDIO BASS BIG Encryption: Not Encrypted */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_NOT_ENCRYPTED,
+
+ /** BLE AUDIO BASS BIG Encryption: Broadcast Code Required */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_BROADCAST_CODE_REQ,
+
+ /** BLE AUDIO BASS BIG Encryption: Decrypting */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_DECRYPTING,
+
+ /** BLE AUDIO BASS BIG Encryption: Bad Code */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE
+};
+
+/** BLE AUDIO BASS PA Sync parameters, valid fo Modify Source operation */
+enum ble_svc_audio_bass_pa_sync {
+ /** BLE AUDIO BASS PA Sync: Do not synchronize to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_DO_NOT_SYNC,
+
+ /** BLE AUDIO BASS PA Sync: Synchronize to PA – PAST available */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_SYNC_PAST_AVAILABLE,
+
+ /** BLE AUDIO BASS PA Sync: Synchronize to PA – PAST not available */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_SYNC_PAST_NOT_AVAILABLE,
+
+ /**
+ * BLE AUDIO BASS PA Sync: reserved for future use.
+ * This shall be always last value in this enum
+ */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_RFU
+};
+
+/** BLE AUDIO BASS Broadcast Receiver: PA Sync States */
+enum ble_svc_audio_bass_pa_sync_state {
+ /** BLE AUDIO BASS PA Sync State: Not synchronized to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_NOT_SYNCED,
+
+ /** BLE AUDIO BASS PA Sync State: SyncInfo Request */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNC_INFO_REQ,
+
+ /** BLE AUDIO BASS PA Sync State: Synchronized to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNCED,
+
+ /** BLE AUDIO BASS PA Sync State: Failed to synchronize to PAA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNCED_FAILED,
+
+ /** BLE AUDIO BASS PA Sync State: No PAST */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_NO_PAST
+};
+
+/** BLE AUDIO BASS Broadcast Receiver State: Subgroup entry */
+struct ble_svc_audio_bass_subgroup {
+ /** BLE AUDIO BASS Subgroup entry: Bis Synchronization State */
+ uint32_t bis_sync_state;
+
+ /** BLE AUDIO BASS Subgroup entry: Metadata length */
+ uint8_t metadata_length;
+
+ /** BLE AUDIO BASS Subgroup entry: Metadata */
+ uint8_t *metadata;
+};
+
+/** BLE AUDIO BASS Broadcast Receiver State */
+struct ble_svc_audio_bass_receiver_state {
+ /** BLE AUDIO BASS Broadcast Receiver State: Source ID */
+ uint8_t source_id;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Source BLE Address */
+ ble_addr_t source_addr;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Source Advertising SID */
+ uint8_t source_adv_sid;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Broadcast ID */
+ uint32_t broadcast_id;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: PA Sync state */
+ enum ble_svc_audio_bass_pa_sync_state pa_sync_state;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: BIG Encryption */
+ enum ble_svc_audio_bass_big_enc big_encryption;
+
+ /**
+ * BLE AUDIO BASS Broadcast Receiver State: Bad Code.
+ * On GATT Read access, this value is ignored if big_encryption
+ * is not set to BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE
+ */
+ uint8_t bad_code[BLE_AUDIO_BROADCAST_CODE_SIZE];
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Number of subgroups */
+ uint8_t num_subgroups;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: subgroup entries */
+ struct ble_svc_audio_bass_subgroup
+ subgroups[BLE_SVC_AUDIO_BASS_SUB_NUM_MAX];
+};
+
+/** BLE AUDIO BASS Broadcast Receiver State add parameters */
+struct ble_svc_audio_bass_receiver_state_add_params {
+ /** BLE AUDIO BASS Broadcast Receiver State: Source BLE Address */
+ ble_addr_t source_addr;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Source Advertising SID */
+ uint8_t source_adv_sid;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Broadcast ID */
+ uint32_t broadcast_id;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: PA Sync state */
+ enum ble_svc_audio_bass_pa_sync_state pa_sync_state;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: BIG Encryption */
+ enum ble_svc_audio_bass_big_enc big_encryption;
+
+ /**
+ * BLE AUDIO BASS Broadcast Receiver State: Bad Code.
+ * On GATT Read access, this value is ignored if big_encryption
+ * is not set to BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE
+ */
+ uint8_t bad_code[BLE_AUDIO_BROADCAST_CODE_SIZE];
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Number of subgroups */
+ uint8_t num_subgroups;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: subgroup entries */
+ struct ble_svc_audio_bass_subgroup
+ subgroups[BLE_SVC_AUDIO_BASS_SUB_NUM_MAX];
Review Comment:
const
##########
nimble/host/audio/services/bass/include/services/bass/ble_audio_svc_bass.h:
##########
@@ -0,0 +1,450 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_AUDIO_SVC_BASS_
+#define H_BLE_AUDIO_SVC_BASS_
+
+#include <stdint.h>
+#include "audio/ble_audio.h"
+#include "syscfg/syscfg.h"
+
+/**
+ * @file ble_audio_svc_bass.h
+ *
+ * @brief Bluetooth LE Audio BAS Service
+ *
+ * This header file provides the public API for interacting with the BASS
package.
+ *
+ * @defgroup ble_audio_svc_bass Bluetooth LE Audio BASS package
+ * @ingroup bt_host
+ * @{
+ *
+ * This package implements BASS service. Receiver states can be modified with
setter functions
+ * or GATT writes to Control Point characteristic. Operations on Control Point
like Add Source or
+ * Modify Source can be accepted or rejected by application by registering
accept function callback.
+ * Accessing Control Point characteristic, or Successful modification or
Receiver State will lead to
+ * emission of one of BLE_SVC_AUDIO_BASS events.
+ *
+ */
+
+/** BLE AUDIO BASS Maximum Subgroup Number */
+#define BLE_SVC_AUDIO_BASS_SUB_NUM_MAX \
+ MYNEWT_VAL(BLE_SVC_AUDIO_BASS_SUB_NUM_MAX)
+
+/** BLE AUDIO BASS characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_UUID16 0x184F
+
+/** BLE AUDIO BASS Control Point characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_CHR_UUID16_BASS_CP 0x2BC7
+
+/** BLE AUDIO BASS Broadcast Receiver State characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_CHR_UUID16_BROADCAST_RECEIVE_STATE 0x2BC8
+
+/** Value of not assigned Source ID of Receiver State */
+#define BLE_SVC_AUDIO_BASS_RECEIVE_STATE_SRC_ID_NONE 0xFF
+
+/** BLE AUDIO BASS Add Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_ADD_SOURCE 0x01
+
+/** BLE AUDIO BASS Modify Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_MODIFY_SOURCE 0x02
+
+/** BLE AUDIO BASS Remove Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_REMOVE_SOURCE 0x03
+
+/** BLE AUDIO BASS Error: OP Code not supported */
+#define BLE_SVC_AUDIO_BASS_ERR_OPCODE_NOT_SUPPORTED 0x80
+
+/** BLE AUDIO BASS Error: Invalid Source ID */
+#define BLE_SVC_AUDIO_BASS_ERR_INVALID_SOURCE_ID 0x81
+
+/** BLE AUDIO BASS Encryption States */
+enum ble_svc_audio_bass_big_enc {
+ /** BLE AUDIO BASS BIG Encryption: Not Encrypted */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_NOT_ENCRYPTED,
+
+ /** BLE AUDIO BASS BIG Encryption: Broadcast Code Required */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_BROADCAST_CODE_REQ,
+
+ /** BLE AUDIO BASS BIG Encryption: Decrypting */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_DECRYPTING,
+
+ /** BLE AUDIO BASS BIG Encryption: Bad Code */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE
+};
+
+/** BLE AUDIO BASS PA Sync parameters, valid fo Modify Source operation */
+enum ble_svc_audio_bass_pa_sync {
+ /** BLE AUDIO BASS PA Sync: Do not synchronize to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_DO_NOT_SYNC,
+
+ /** BLE AUDIO BASS PA Sync: Synchronize to PA – PAST available */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_SYNC_PAST_AVAILABLE,
+
+ /** BLE AUDIO BASS PA Sync: Synchronize to PA – PAST not available */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_SYNC_PAST_NOT_AVAILABLE,
+
+ /**
+ * BLE AUDIO BASS PA Sync: reserved for future use.
+ * This shall be always last value in this enum
+ */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_RFU
+};
+
+/** BLE AUDIO BASS Broadcast Receiver: PA Sync States */
+enum ble_svc_audio_bass_pa_sync_state {
+ /** BLE AUDIO BASS PA Sync State: Not synchronized to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_NOT_SYNCED,
+
+ /** BLE AUDIO BASS PA Sync State: SyncInfo Request */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNC_INFO_REQ,
+
+ /** BLE AUDIO BASS PA Sync State: Synchronized to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNCED,
+
+ /** BLE AUDIO BASS PA Sync State: Failed to synchronize to PAA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNCED_FAILED,
+
+ /** BLE AUDIO BASS PA Sync State: No PAST */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_NO_PAST
+};
+
+/** BLE AUDIO BASS Broadcast Receiver State: Subgroup entry */
+struct ble_svc_audio_bass_subgroup {
+ /** BLE AUDIO BASS Subgroup entry: Bis Synchronization State */
+ uint32_t bis_sync_state;
+
+ /** BLE AUDIO BASS Subgroup entry: Metadata length */
+ uint8_t metadata_length;
+
+ /** BLE AUDIO BASS Subgroup entry: Metadata */
+ uint8_t *metadata;
+};
+
+/** BLE AUDIO BASS Broadcast Receiver State */
+struct ble_svc_audio_bass_receiver_state {
+ /** BLE AUDIO BASS Broadcast Receiver State: Source ID */
+ uint8_t source_id;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Source BLE Address */
+ ble_addr_t source_addr;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Source Advertising SID */
+ uint8_t source_adv_sid;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Broadcast ID */
+ uint32_t broadcast_id;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: PA Sync state */
+ enum ble_svc_audio_bass_pa_sync_state pa_sync_state;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: BIG Encryption */
+ enum ble_svc_audio_bass_big_enc big_encryption;
+
+ /**
+ * BLE AUDIO BASS Broadcast Receiver State: Bad Code.
+ * On GATT Read access, this value is ignored if big_encryption
+ * is not set to BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE
+ */
+ uint8_t bad_code[BLE_AUDIO_BROADCAST_CODE_SIZE];
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Number of subgroups */
+ uint8_t num_subgroups;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: subgroup entries */
+ struct ble_svc_audio_bass_subgroup
+ subgroups[BLE_SVC_AUDIO_BASS_SUB_NUM_MAX];
Review Comment:
const
##########
nimble/host/audio/services/bass/include/services/bass/ble_audio_svc_bass.h:
##########
@@ -0,0 +1,450 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_AUDIO_SVC_BASS_
+#define H_BLE_AUDIO_SVC_BASS_
+
+#include <stdint.h>
+#include "audio/ble_audio.h"
+#include "syscfg/syscfg.h"
+
+/**
+ * @file ble_audio_svc_bass.h
+ *
+ * @brief Bluetooth LE Audio BAS Service
+ *
+ * This header file provides the public API for interacting with the BASS
package.
+ *
+ * @defgroup ble_audio_svc_bass Bluetooth LE Audio BASS package
+ * @ingroup bt_host
+ * @{
+ *
+ * This package implements BASS service. Receiver states can be modified with
setter functions
+ * or GATT writes to Control Point characteristic. Operations on Control Point
like Add Source or
+ * Modify Source can be accepted or rejected by application by registering
accept function callback.
+ * Accessing Control Point characteristic, or Successful modification or
Receiver State will lead to
+ * emission of one of BLE_SVC_AUDIO_BASS events.
+ *
+ */
+
+/** BLE AUDIO BASS Maximum Subgroup Number */
+#define BLE_SVC_AUDIO_BASS_SUB_NUM_MAX \
+ MYNEWT_VAL(BLE_SVC_AUDIO_BASS_SUB_NUM_MAX)
+
+/** BLE AUDIO BASS characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_UUID16 0x184F
+
+/** BLE AUDIO BASS Control Point characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_CHR_UUID16_BASS_CP 0x2BC7
+
+/** BLE AUDIO BASS Broadcast Receiver State characteristic UUID */
+#define BLE_SVC_AUDIO_BASS_CHR_UUID16_BROADCAST_RECEIVE_STATE 0x2BC8
+
+/** Value of not assigned Source ID of Receiver State */
+#define BLE_SVC_AUDIO_BASS_RECEIVE_STATE_SRC_ID_NONE 0xFF
+
+/** BLE AUDIO BASS Add Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_ADD_SOURCE 0x01
+
+/** BLE AUDIO BASS Modify Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_MODIFY_SOURCE 0x02
+
+/** BLE AUDIO BASS Remove Source operation OP code */
+#define BLE_SVC_AUDIO_BASS_OPERATION_REMOVE_SOURCE 0x03
+
+/** BLE AUDIO BASS Error: OP Code not supported */
+#define BLE_SVC_AUDIO_BASS_ERR_OPCODE_NOT_SUPPORTED 0x80
+
+/** BLE AUDIO BASS Error: Invalid Source ID */
+#define BLE_SVC_AUDIO_BASS_ERR_INVALID_SOURCE_ID 0x81
+
+/** BLE AUDIO BASS Encryption States */
+enum ble_svc_audio_bass_big_enc {
+ /** BLE AUDIO BASS BIG Encryption: Not Encrypted */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_NOT_ENCRYPTED,
+
+ /** BLE AUDIO BASS BIG Encryption: Broadcast Code Required */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_BROADCAST_CODE_REQ,
+
+ /** BLE AUDIO BASS BIG Encryption: Decrypting */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_DECRYPTING,
+
+ /** BLE AUDIO BASS BIG Encryption: Bad Code */
+ BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE
+};
+
+/** BLE AUDIO BASS PA Sync parameters, valid fo Modify Source operation */
+enum ble_svc_audio_bass_pa_sync {
+ /** BLE AUDIO BASS PA Sync: Do not synchronize to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_DO_NOT_SYNC,
+
+ /** BLE AUDIO BASS PA Sync: Synchronize to PA – PAST available */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_SYNC_PAST_AVAILABLE,
+
+ /** BLE AUDIO BASS PA Sync: Synchronize to PA – PAST not available */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_SYNC_PAST_NOT_AVAILABLE,
+
+ /**
+ * BLE AUDIO BASS PA Sync: reserved for future use.
+ * This shall be always last value in this enum
+ */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_RFU
+};
+
+/** BLE AUDIO BASS Broadcast Receiver: PA Sync States */
+enum ble_svc_audio_bass_pa_sync_state {
+ /** BLE AUDIO BASS PA Sync State: Not synchronized to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_NOT_SYNCED,
+
+ /** BLE AUDIO BASS PA Sync State: SyncInfo Request */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNC_INFO_REQ,
+
+ /** BLE AUDIO BASS PA Sync State: Synchronized to PA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNCED,
+
+ /** BLE AUDIO BASS PA Sync State: Failed to synchronize to PAA */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_SYNCED_FAILED,
+
+ /** BLE AUDIO BASS PA Sync State: No PAST */
+ BLE_SVC_AUDIO_BASS_PA_SYNC_STATE_NO_PAST
+};
+
+/** BLE AUDIO BASS Broadcast Receiver State: Subgroup entry */
+struct ble_svc_audio_bass_subgroup {
+ /** BLE AUDIO BASS Subgroup entry: Bis Synchronization State */
+ uint32_t bis_sync_state;
+
+ /** BLE AUDIO BASS Subgroup entry: Metadata length */
+ uint8_t metadata_length;
+
+ /** BLE AUDIO BASS Subgroup entry: Metadata */
+ uint8_t *metadata;
+};
+
+/** BLE AUDIO BASS Broadcast Receiver State */
+struct ble_svc_audio_bass_receiver_state {
+ /** BLE AUDIO BASS Broadcast Receiver State: Source ID */
+ uint8_t source_id;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Source BLE Address */
+ ble_addr_t source_addr;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Source Advertising SID */
+ uint8_t source_adv_sid;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Broadcast ID */
+ uint32_t broadcast_id;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: PA Sync state */
+ enum ble_svc_audio_bass_pa_sync_state pa_sync_state;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: BIG Encryption */
+ enum ble_svc_audio_bass_big_enc big_encryption;
+
+ /**
+ * BLE AUDIO BASS Broadcast Receiver State: Bad Code.
+ * On GATT Read access, this value is ignored if big_encryption
+ * is not set to BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE
+ */
+ uint8_t bad_code[BLE_AUDIO_BROADCAST_CODE_SIZE];
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Number of subgroups */
+ uint8_t num_subgroups;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: subgroup entries */
+ struct ble_svc_audio_bass_subgroup
+ subgroups[BLE_SVC_AUDIO_BASS_SUB_NUM_MAX];
+};
+
+/** BLE AUDIO BASS Broadcast Receiver State add parameters */
+struct ble_svc_audio_bass_receiver_state_add_params {
+ /** BLE AUDIO BASS Broadcast Receiver State: Source BLE Address */
+ ble_addr_t source_addr;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Source Advertising SID */
+ uint8_t source_adv_sid;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Broadcast ID */
+ uint32_t broadcast_id;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: PA Sync state */
+ enum ble_svc_audio_bass_pa_sync_state pa_sync_state;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: BIG Encryption */
+ enum ble_svc_audio_bass_big_enc big_encryption;
+
+ /**
+ * BLE AUDIO BASS Broadcast Receiver State: Bad Code.
+ * On GATT Read access, this value is ignored if big_encryption
+ * is not set to BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE
+ */
+ uint8_t bad_code[BLE_AUDIO_BROADCAST_CODE_SIZE];
+
+ /** BLE AUDIO BASS Broadcast Receiver State: Number of subgroups */
+ uint8_t num_subgroups;
+
+ /** BLE AUDIO BASS Broadcast Receiver State: subgroup entries */
+ struct ble_svc_audio_bass_subgroup
+ subgroups[BLE_SVC_AUDIO_BASS_SUB_NUM_MAX];
+};
+
+/** Parameters used for updating Metadata in Receiver State. */
+struct ble_svc_audio_bass_metadata_params {
+ /** Subgroup index */
+ uint8_t subgroup_idx;
+
+ /** Metadata length */
+ uint8_t metadata_length;
+
+ /** Metadata */
+ const uint8_t *metadata;
+};
+
+/** Parameters used for updating Receiver State. */
+struct ble_svc_audio_bass_update_params {
+ /** PA Sync state */
+ enum ble_svc_audio_bass_pa_sync_state pa_sync_state;
+
+ /** BIG encryption state */
+ enum ble_svc_audio_bass_big_enc big_encryption;
+
+ /** Incorrect Bad Broadcast Code. Valid for
BLE_SVC_AUDIO_BASS_BIG_ENC_BAD_CODE */
+ const uint8_t *bad_code;
+
+ /** Subgroup index of BIS Sync State to be updated */
+ uint8_t subgroup_idx;
+
+ /** BIS Sync State */
+ uint32_t bis_sync_state;
+};
+
+/**
+ * Structure describing operation attempted by write on
+ * BASS Control Point characteristic
+ */
+struct ble_svc_audio_bass_operation {
+ /**
+ * Indicates the type of BASS operation that occurred. This is one of the
+ * ble_svc_audio_bass_operation codes.
+ */
+ uint8_t op;
+
+ /** Connection handle for which the operation was performed */
+ uint16_t conn_handle;
+
+ /**
+ * A discriminated union containing additional details concerning the BASS
Control Point
+ * event. The 'type' field indicates which member of the union is valid.
+ */
+ union {
+ /**
+ * Represents Add Source operation. Valid for the following event
+ * types:
+ * o BLE_SVC_AUDIO_BASS_OPERATION_ADD_SOURCE
+ * Application can accept or reject Add Source operation. If no
application callback is set
+ * and free Receive State characteristic exists operation is
automatically accepted.
+ * If application callback exists and returns 0 operation is accepted.
+ * Otherwise, operation is rejected.
+ * If operation is accepted by application, it may select receiver
state to be filled.
+ * If application doesnt select characteristic, BASS Server falls back
+ * to searching free one. If none is found, operation is rejected.
+ * After Add Source operation is accepted, BLE_AUDIO_EVENT is emitted.
+ */
+ struct {
+ /** Source ID */
+ uint8_t source_id;
+
+ /** Advertiser Address */
+ ble_addr_t adv_addr;
+
+ /** Advertising SID */
+ uint8_t adv_sid;
+
+ /** Broadcast ID */
+ uint32_t broadcast_id : 24;
+
+ /** PA Sync */
+ enum ble_svc_audio_bass_pa_sync pa_sync;
+
+ /** PA Interval */
+ uint16_t pa_interval;
+
+ /** Number of subgroups */
+ uint8_t num_subgroups;
+
+ /** Subgroup entries */
+ struct ble_svc_audio_bass_subgroup
+ subgroups[BLE_SVC_AUDIO_BASS_SUB_NUM_MAX];
Review Comment:
const
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]