Skip to content

Commit 84963fb

Browse files
gWaceykoffes
authored andcommitted
applications: nrf5340_audio: Decode/Encode to use net_bufs + meta data
Improvements to the selection of gateway locations and removal of unnecessary memset() Signed-off-by: Graham Wacey <[email protected]>
1 parent 502e8f1 commit 84963fb

File tree

8 files changed

+63
-58
lines changed

8 files changed

+63
-58
lines changed

applications/nrf5340_audio/broadcast_source/overlay-broadcast_source.conf

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,3 @@ CONFIG_BT_EXT_ADV_MAX_ADV_SET=2
2626
CONFIG_LC3_ENC_CHAN_MAX=2
2727
CONFIG_AUDIO_ENCODE_CHANNELS_MAX=2
2828
CONFIG_ENTROPY_GENERATOR=y
29-
30-
31-
CONFIG_DEVICE_LOCATION_SET_COMPILE_TIME=y
32-
CONFIG_DEVICE_LOCATION_AT_COMPILE_TIME=3

applications/nrf5340_audio/src/audio/audio_system.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -101,22 +101,21 @@ static void audio_gateway_configure(void)
101101
sw_codec_cfg.decoder.channel_mode = SW_CODEC_MONO;
102102
}
103103

104-
device_location_get(&sw_codec_cfg.encoder.audio_loc);
105-
106104
if (IS_ENABLED(CONFIG_MONO_TO_ALL_RECEIVERS)) {
107-
sw_codec_cfg.encoder.audio_loc = BT_AUDIO_LOCATION_MONO_AUDIO;
108-
}
109-
110-
if (sw_codec_cfg.encoder.audio_loc == BT_AUDIO_LOCATION_MONO_AUDIO ||
111-
(POPCOUNT(sw_codec_cfg.encoder.audio_loc) == 1)) {
112105
sw_codec_cfg.encoder.num_ch = 1;
106+
sw_codec_cfg.encoder.audio_loc = BT_AUDIO_LOCATION_MONO_AUDIO;
113107
sw_codec_cfg.encoder.channel_mode = SW_CODEC_MONO;
114-
115-
return;
108+
} else {
109+
/* For multi-channel on the gateway, only left and
110+
* right front are currently supported
111+
*/
112+
sw_codec_cfg.encoder.num_ch = 2;
113+
sw_codec_cfg.encoder.audio_loc =
114+
BT_AUDIO_LOCATION_FRONT_LEFT | BT_AUDIO_LOCATION_FRONT_RIGHT;
115+
sw_codec_cfg.encoder.channel_mode = SW_CODEC_MULTICHANNEL;
116116
}
117117

118-
sw_codec_cfg.encoder.num_ch = POPCOUNT(sw_codec_cfg.encoder.audio_loc);
119-
sw_codec_cfg.encoder.channel_mode = SW_CODEC_MULTICHANNEL;
118+
LOG_INF("Gateway configured for %d encoder channels", sw_codec_cfg.encoder.num_ch);
120119
}
121120

122121
static void audio_headset_configure(void)
@@ -142,7 +141,9 @@ static void audio_headset_configure(void)
142141

143142
switch ((uint32_t)sw_codec_cfg.decoder.audio_loc) {
144143
case BT_AUDIO_LOCATION_MONO_AUDIO:
144+
/* Fall through*/
145145
case BT_AUDIO_LOCATION_FRONT_LEFT:
146+
/* Fall through*/
146147
case BT_AUDIO_LOCATION_FRONT_RIGHT:
147148
sw_codec_cfg.decoder.channel_mode = SW_CODEC_MONO;
148149
break;

applications/nrf5340_audio/src/audio/sw_codec_select.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,6 @@ int sw_codec_encode(struct net_buf *audio_frame_in, struct net_buf *audio_frame_
154154
return -EINVAL;
155155
}
156156

157-
/* Clear all output locations to ensure any unused locations are zero */
158-
memset(audio_frame_out->data, 0, audio_frame_out->size);
159-
160157
/* Encode only the common channel(s) between the input and output locations. */
161158
while (loc_out && loc_in) {
162159
if (loc_out & loc_in & 0x01) {

applications/nrf5340_audio/src/utils/fw_info_app.c.in

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,25 @@ int fw_info_app_print(void)
3131

3232
#if (CONFIG_DEBUG)
3333
int ret;
34-
enum bt_audio_location location;
35-
36-
device_location_get(&location);
3734

3835
LOG_INF("------- DEBUG BUILD -------");
3936

4037
#if (CONFIG_AUDIO_DEV == HEADSET)
38+
enum bt_audio_location location;
39+
40+
device_location_get(&location);
41+
4142
if (location == BT_AUDIO_LOCATION_MONO_AUDIO){
4243
LOG_ERR("HEADSET location %s is not supported", bt_audio_location_bit_to_str(location));
4344
return -EINVAL;
4445
}
4546

47+
for (int i = 0; i < (CHAR_BIT * sizeof(enum bt_audio_location)); i++) {
48+
if (location & BIT(i)) {
49+
LOG_INF(COLOR_CYAN "HEADSET location: %s" COLOR_RESET, bt_audio_location_bit_to_str(BIT(i)));
50+
}
51+
}
52+
4653
if (location == BT_AUDIO_LOCATION_FRONT_LEFT) {
4754
ret = log_set_tag(HS_LOC_L_TAG);
4855
} else if (location == BT_AUDIO_LOCATION_FRONT_RIGHT) {
@@ -62,19 +69,9 @@ int fw_info_app_print(void)
6269
if (ret) {
6370
return ret;
6471
}
65-
#else
66-
/* Make sure that we have the correct device */
67-
BUILD_ASSERT(0, "Unrecognized audio device");
72+
LOG_INF(COLOR_CYAN "GATEWAY device" COLOR_RESET);
6873
#endif /* (CONFIG_AUDIO_DEV == HEADSET) */
69-
70-
for (int i = 0; i < (CHAR_BIT * sizeof(enum bt_audio_location)); i++) {
71-
if (location & BIT(i)) {
72-
LOG_INF(COLOR_CYAN "%s location: %s" COLOR_RESET, CONFIG_AUDIO_DEV == HEADSET ? "HEADSET" : "GATEWAY", bt_audio_location_bit_to_str(BIT(i)));
73-
}
74-
}
75-
7674
#endif /* (CONFIG_DEBUG) */
7775

78-
7976
return 0;
8077
}

applications/nrf5340_audio/tools/buildprog/buildprog.py

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,12 @@ def __print_dev_conf(device_list):
7878
]
7979

8080
for device in device_list:
81-
loc_names = str([loc.name for loc in device.location])
82-
loc_names = loc_names.replace("[", "").replace("]", "").replace("'", "")
81+
if device.nrf5340_audio_dk_dev.value == AudioDevice.headset:
82+
loc_names = str([loc.name for loc in device.location])
83+
loc_names = loc_names.replace("[", "").replace("]", "").replace("'", "")
84+
else:
85+
loc_names = "NA"
86+
8387
row = []
8488
row.append(device.nrf5340_audio_dk_snr)
8589
color = Fore.GREEN if device.snr_connected else Fore.YELLOW
@@ -349,17 +353,28 @@ def __main():
349353
dev_arr = json.load(f)
350354
device_list = []
351355
for dev in dev_arr:
352-
if "channel" in dev:
353-
print("Using deprecated location format. Convert to using Location enum")
354-
if dev["channel"] == "left":
355-
location = [Location.FRONT_LEFT]
356-
elif dev["channel"] == "right":
357-
location = [Location.FRONT_RIGHT]
356+
if AudioDevice[dev["nrf5340_audio_dk_dev"]] == AudioDevice.headset:
357+
if "channel" in dev:
358+
print("Using deprecated location format. Convert to using Location enum")
359+
if dev["channel"] == "left":
360+
location = [Location.FRONT_LEFT]
361+
elif dev["channel"] == "right":
362+
location = [Location.FRONT_RIGHT]
363+
else:
364+
print("Invalid location, setting to MONO_AUDIO")
365+
location = [Location.MONO_AUDIO]
366+
elif dev["location"]:
367+
try:
368+
location = [Location[name] for name in dev["location"]]
369+
except KeyError as e:
370+
raise KeyError(f"Invalid location name {e} for headset in JSON file")
358371
else:
359-
print("Invalid location, setting to MONO_AUDIO")
372+
print("No location specified for headset, setting to MONO_AUDIO")
360373
location = [Location.MONO_AUDIO]
361374
else:
362-
location = [Location[name] for name in dev["location"]]
375+
if dev["location"] != ['NA'] or dev["location"] == []:
376+
print("Location field is only valid for headset devices, setting to NA")
377+
location = []
363378

364379
device = DeviceConf(
365380
location=location,

applications/nrf5340_audio/tools/buildprog/nrf5340_audio_dk_devices.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ class Location(Enum):
7878
"Kept for compatibility with old code, use the Location enum instead"
7979
left = FRONT_LEFT
8080
right = FRONT_RIGHT
81-
NA = MONO_AUDIO
8281

8382
def __new__(cls, value, label):
8483
obj = object.__new__(cls)
@@ -131,11 +130,12 @@ def __post_init__(
131130

132131
def __str__(self):
133132
result = f"{self.nrf5340_audio_dk_snr} {self.nrf5340_audio_dk_dev.name}"
134-
# Print all location labels if multiple
135-
if isinstance(self.location, list):
136-
result += " " + "+".join([loc.label for loc in self.location])
137-
else:
138-
result += f" {self.location.name}"
133+
if self.nrf5340_audio_dk_dev == AudioDevice.headset:
134+
# Print all location labels if multiple
135+
if isinstance(self.location, list):
136+
result += " " + "+".join([loc.label for loc in self.location])
137+
else:
138+
result += f" {self.location.name}"
139139
return result
140140

141141

applications/nrf5340_audio/tools/buildprog/program.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from threading import Thread
1010
from os import system, path
1111
from typing import List
12-
from nrf5340_audio_dk_devices import DeviceConf, SelectFlags, Location
12+
from nrf5340_audio_dk_devices import DeviceConf, SelectFlags, AudioDevice, Location
1313

1414
MEM_ADDR_UICR_SNR = 0x00FF80F0
1515
MEM_ADDR_UICR_CH = 0x00FF80F4
@@ -28,13 +28,15 @@ def locations_to_bitfield(locations: List[Location]) -> int:
2828

2929
def __populate_uicr(dev):
3030
"""Program UICR in device with information from JSON file"""
31-
print("Writing UICR " + str(dev.nrf5340_audio_dk_snr) + " with location value: " + str(locations_to_bitfield(dev.location)))
32-
cmd = f"nrfutil device write --serial-number {dev.nrf5340_audio_dk_snr} --address {MEM_ADDR_UICR_CH} --value {locations_to_bitfield(dev.location)}"
33-
# Write location information to UICR
34-
ret_val = system(cmd)
35-
if ret_val:
36-
return False
31+
if dev.nrf5340_audio_dk_dev == AudioDevice.headset:
32+
print("Writing UICR with location value: " + str(locations_to_bitfield(dev.location)))
33+
cmd = f"nrfutil device write --serial-number {dev.nrf5340_audio_dk_snr} --address {MEM_ADDR_UICR_CH} --value {locations_to_bitfield(dev.location)}"
34+
# Write location information to UICR
35+
print_location_labels(dev.location)
36+
ret_val = system(cmd)
3737

38+
if ret_val:
39+
return False
3840
cmd = f"nrfutil device write --serial-number {dev.nrf5340_audio_dk_snr} --address {MEM_ADDR_UICR_SNR} --value {dev.nrf5340_audio_dk_snr}"
3941

4042
# Write segger nr to UICR

applications/nrf5340_audio/unicast_client/overlay-unicast_client.conf

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,3 @@ CONFIG_LC3_DEC_CHAN_MAX=1
3636
CONFIG_AUDIO_ENCODE_CHANNELS_MAX=2
3737
CONFIG_MBEDTLS_ENABLE_HEAP=y
3838
CONFIG_MBEDTLS_HEAP_SIZE=2048
39-
40-
CONFIG_DEVICE_LOCATION_SET_COMPILE_TIME=y
41-
CONFIG_DEVICE_LOCATION_AT_COMPILE_TIME=3

0 commit comments

Comments
 (0)