Skip to content

Commit

Permalink
nimble/audio: Add BASE parser
Browse files Browse the repository at this point in the history
This adds BASE parser implementation along with unit tests.
  • Loading branch information
MariuszSkamra committed Feb 22, 2024
1 parent 620064e commit de40d41
Show file tree
Hide file tree
Showing 8 changed files with 944 additions and 0 deletions.
128 changes: 128 additions & 0 deletions nimble/host/audio/include/host/audio/ble_audio.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
/*
* 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_
#define H_BLE_AUDIO_

#include <stdint.h>

#include "host/ble_audio_common.h"

/**
* BASE iterator
*
* This should be used as an opaque structure and not modified manually.
*/
struct ble_audio_base_iter {
/** Data pointer */
const uint8_t *data;

/** Base length */
uint8_t buf_len;

/** Original BASE pointer */
const uint8_t *buf;

/** Remaining number of elements */
uint8_t num_elements;
};

/** @brief Broadcast Audio Source Endpoint Group structure */
struct ble_audio_base_group {
/** Presentation Delay */
uint32_t presentation_delay;

/** Number of subgroups */
uint8_t num_subgroups;
};

/**
* Parse the BASE received from Basic Audio Announcement data.
*
* @param[in] data Pointer to the BASE data buffer to parse.
* @param[in] data_len Length of the BASE data buffer.
* @param[out] group Group object.
* @param[out] subgroup_iter Subgroup iterator object.
*
* @return 0 on success; nonzero on failure.
*/
int ble_audio_base_parse(const uint8_t *data, uint8_t data_len,
struct ble_audio_base_group *group,
struct ble_audio_base_iter *subgroup_iter);

/** @brief Broadcast Audio Source Endpoint Subgroup structure */
struct ble_audio_base_subgroup {
/** Codec information for the subgroup */
struct ble_audio_codec_id codec_id;

/** Length of the Codec Specific Configuration for the subgroup */
uint8_t codec_specific_config_len;

/** Codec Specific Configuration for the subgroup */
const uint8_t *codec_specific_config;

/** Length of the Metadata for the subgroup */
uint8_t metadata_len;

/** Series of LTV structures containing Metadata */
const uint8_t *metadata;

/** Number of BISes in the subgroup */
uint8_t num_bis;
};

/**
* @brief Basic Audio Announcement Subgroup information
*
* @param[in] subgroup_iter Subgroup iterator object.
* @param[out] subgroup Subgroup object.
* @param[out] bis_iter BIS iterator object.
*
* @return 0 on success;
* A non-zero value on failure.
*/
int ble_audio_base_subgroup_iter(struct ble_audio_base_iter *subgroup_iter,
struct ble_audio_base_subgroup *subgroup,
struct ble_audio_base_iter *bis_iter);

/** @brief Broadcast Audio Source Endpoint BIS structure */
struct ble_audio_base_bis {
/** BIS_index value for the BIS */
uint8_t index;

/** Length of the Codec Specific Configuration for the BIS */
uint8_t codec_specific_config_len;

/** Codec Specific Configuration for the BIS */
const uint8_t *codec_specific_config;
};

/**
* @brief Basic Audio Announcement Subgroup information
*
* @param[in] bis_iter BIS iterator object.
* @param[out] bis BIS object.
*
* @return 0 on success;
* A non-zero value on failure.
*/
int ble_audio_base_bis_iter(struct ble_audio_base_iter *bis_iter,
struct ble_audio_base_bis *bis);

#endif /* H_BLE_AUDIO_ */
32 changes: 32 additions & 0 deletions nimble/host/audio/pkg.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#
# 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.
#

pkg.name: nimble/host/audio
pkg.description: Bluetooth LE Audio
pkg.author: "Apache Mynewt <dev@mynewt.apache.org>"
pkg.homepage: "http://mynewt.apache.org/"
pkg.experimental: 1
pkg.keywords:
- ble
- bluetooth
- audio

pkg.deps:
- nimble
- nimble/host
Loading

0 comments on commit de40d41

Please sign in to comment.