Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Applications: nrf5340_audio: Resolved Coverity issues #12041

Merged
merged 1 commit into from
Aug 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 40 additions & 42 deletions applications/nrf5340_audio/src/audio/audio_datapath.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

#include "nrf5340_audio_common.h"
#include "macros_common.h"
#include "board.h"
#include "led.h"
#include "audio_i2s.h"
#include "sw_codec_select.h"
Expand All @@ -42,23 +41,23 @@ LOG_MODULE_REGISTER(audio_datapath, CONFIG_AUDIO_DATAPATH_LOG_LEVEL);

/* Total sample FIFO period in microseconds */
#define FIFO_SMPL_PERIOD_US (CONFIG_AUDIO_MAX_PRES_DLY_US * 2)
#define FIFO_NUM_BLKS NUM_BLKS(FIFO_SMPL_PERIOD_US)
#define MAX_FIFO_SIZE (FIFO_NUM_BLKS * BLK_SIZE_SAMPLES(CONFIG_AUDIO_SAMPLE_RATE_HZ) * 2)
#define FIFO_NUM_BLKS NUM_BLKS(FIFO_SMPL_PERIOD_US)
#define MAX_FIFO_SIZE (FIFO_NUM_BLKS * BLK_SIZE_SAMPLES(CONFIG_AUDIO_SAMPLE_RATE_HZ) * 2)

/* Number of audio blocks given a duration */
#define NUM_BLKS(d) ((d) / BLK_PERIOD_US)
#define NUM_BLKS(d) ((d) / BLK_PERIOD_US)
/* Single audio block size in number of samples (stereo) */
#define BLK_SIZE_SAMPLES(r) (((r)*BLK_PERIOD_US) / 1000000)
/* Increment sample FIFO index by one block */
#define NEXT_IDX(i) (((i) < (FIFO_NUM_BLKS - 1)) ? ((i) + 1) : 0)
#define NEXT_IDX(i) (((i) < (FIFO_NUM_BLKS - 1)) ? ((i) + 1) : 0)
/* Decrement sample FIFO index by one block */
#define PREV_IDX(i) (((i) > 0) ? ((i)-1) : (FIFO_NUM_BLKS - 1))
#define PREV_IDX(i) (((i) > 0) ? ((i)-1) : (FIFO_NUM_BLKS - 1))

#define NUM_BLKS_IN_FRAME NUM_BLKS(CONFIG_AUDIO_FRAME_DURATION_US)
#define BLK_MONO_NUM_SAMPS BLK_SIZE_SAMPLES(CONFIG_AUDIO_SAMPLE_RATE_HZ)
#define BLK_STEREO_NUM_SAMPS (BLK_MONO_NUM_SAMPS * 2)
#define NUM_BLKS_IN_FRAME NUM_BLKS(CONFIG_AUDIO_FRAME_DURATION_US)
#define BLK_MONO_NUM_SAMPS BLK_SIZE_SAMPLES(CONFIG_AUDIO_SAMPLE_RATE_HZ)
#define BLK_STEREO_NUM_SAMPS (BLK_MONO_NUM_SAMPS * 2)
/* Number of octets in a single audio block */
#define BLK_MONO_SIZE_OCTETS (BLK_MONO_NUM_SAMPS * CONFIG_AUDIO_BIT_DEPTH_OCTETS)
#define BLK_MONO_SIZE_OCTETS (BLK_MONO_NUM_SAMPS * CONFIG_AUDIO_BIT_DEPTH_OCTETS)
#define BLK_STEREO_SIZE_OCTETS (BLK_MONO_SIZE_OCTETS * 2)
/* How many function calls before moving on with drift compensation */
#define DRIFT_COMP_WAITING_CNT (DRIFT_MEAS_PERIOD_US / BLK_PERIOD_US)
Expand All @@ -67,27 +66,27 @@ LOG_MODULE_REGISTER(audio_datapath, CONFIG_AUDIO_DATAPATH_LOG_LEVEL);

/* Audio clock - nRF5340 Analog Phase-Locked Loop (APLL) */
#define APLL_FREQ_CENTER 39854
#define APLL_FREQ_MIN 36834
#define APLL_FREQ_MAX 42874
#define APLL_FREQ_MIN 36834
#define APLL_FREQ_MAX 42874
/* Use nanoseconds to reduce rounding errors */
#define APLL_FREQ_ADJ(t) (-((t)*1000) / 331)

#define DRIFT_MEAS_PERIOD_US 100000
#define DRIFT_ERR_THRESH_LOCK 16
#define DRIFT_MEAS_PERIOD_US 100000
#define DRIFT_ERR_THRESH_LOCK 16
#define DRIFT_ERR_THRESH_UNLOCK 32

/* 3000 us to allow BLE transmission and (host -> HCI -> controller) */
#define JUST_IN_TIME_US (CONFIG_AUDIO_FRAME_DURATION_US - 3000)
#define JUST_IN_TIME_US (CONFIG_AUDIO_FRAME_DURATION_US - 3000)
#define JUST_IN_TIME_THRESHOLD_US 1500

/* How often to print underrun warning */
#define UNDERRUN_LOG_INTERVAL_BLKS 5000

enum drift_comp_state {
DRIFT_STATE_INIT, /* Waiting for data to be received */
DRIFT_STATE_CALIB, /* Calibrate and zero out local delay */
DRIFT_STATE_INIT, /* Waiting for data to be received */
DRIFT_STATE_CALIB, /* Calibrate and zero out local delay */
DRIFT_STATE_OFFSET, /* Adjust I2S offset relative to SDU Reference */
DRIFT_STATE_LOCKED /* Drift compensation locked - Minor corrections */
DRIFT_STATE_LOCKED /* Drift compensation locked - Minor corrections */
};

static const char *const drift_comp_state_names[] = {
Expand All @@ -98,9 +97,9 @@ static const char *const drift_comp_state_names[] = {
};

enum pres_comp_state {
PRES_STATE_INIT, /* Initialize presentation compensation */
PRES_STATE_MEAS, /* Measure presentation delay */
PRES_STATE_WAIT, /* Wait for some time */
PRES_STATE_INIT, /* Initialize presentation compensation */
PRES_STATE_MEAS, /* Measure presentation delay */
PRES_STATE_WAIT, /* Wait for some time */
PRES_STATE_LOCKED /* Presentation compensation locked */
};

Expand Down Expand Up @@ -137,15 +136,15 @@ static struct {
uint32_t current_pres_dly_us;

struct {
enum drift_comp_state state : 8;
enum drift_comp_state state: 8;
uint16_t ctr; /* Count func calls. Used for waiting */
uint32_t meas_start_time_us;
uint32_t center_freq;
bool enabled;
} drift_comp;

struct {
enum pres_comp_state state : 8;
enum pres_comp_state state: 8;
uint16_t ctr; /* Count func calls. Used for collecting data points and waiting */
int32_t sum_err_dly_us;
uint32_t pres_delay_us;
Expand Down Expand Up @@ -1071,24 +1070,23 @@ static int cmd_audio_pres_comp_disable(const struct shell *shell, size_t argc, c
return 0;
}

SHELL_STATIC_SUBCMD_SET_CREATE(
test_cmd,
SHELL_COND_CMD(CONFIG_SHELL, nrf_tone_start, NULL, "Start local tone from nRF5340",
cmd_i2s_tone_play),
SHELL_COND_CMD(CONFIG_SHELL, nrf_tone_stop, NULL, "Stop local tone from nRF5340",
cmd_i2s_tone_stop),
SHELL_COND_CMD(CONFIG_SHELL, pll_drift_comp_enable, NULL,
"Enable audio PLL auto drift compensation (default)",
cmd_hfclkaudio_drift_comp_enable),
SHELL_COND_CMD(CONFIG_SHELL, pll_drift_comp_disable, NULL,
"Disable audio PLL auto drift compensation",
cmd_hfclkaudio_drift_comp_disable),
SHELL_COND_CMD(CONFIG_SHELL, pll_pres_comp_enable, NULL,
"Enable audio presentation compensation (default)",
cmd_audio_pres_comp_enable),
SHELL_COND_CMD(CONFIG_SHELL, pll_pres_comp_disable, NULL,
"Disable audio presentation compensation",
cmd_audio_pres_comp_disable),
SHELL_SUBCMD_SET_END);
SHELL_STATIC_SUBCMD_SET_CREATE(test_cmd,
SHELL_COND_CMD(CONFIG_SHELL, nrf_tone_start, NULL,
"Start local tone from nRF5340", cmd_i2s_tone_play),
SHELL_COND_CMD(CONFIG_SHELL, nrf_tone_stop, NULL,
"Stop local tone from nRF5340", cmd_i2s_tone_stop),
SHELL_COND_CMD(CONFIG_SHELL, pll_drift_comp_enable, NULL,
"Enable audio PLL auto drift compensation (default)",
cmd_hfclkaudio_drift_comp_enable),
SHELL_COND_CMD(CONFIG_SHELL, pll_drift_comp_disable, NULL,
"Disable audio PLL auto drift compensation",
cmd_hfclkaudio_drift_comp_disable),
SHELL_COND_CMD(CONFIG_SHELL, pll_pres_comp_enable, NULL,
"Enable audio presentation compensation (default)",
cmd_audio_pres_comp_enable),
SHELL_COND_CMD(CONFIG_SHELL, pll_pres_comp_disable, NULL,
"Disable audio presentation compensation",
cmd_audio_pres_comp_disable),
SHELL_SUBCMD_SET_END);

SHELL_CMD_REGISTER(test, &test_cmd, "Test mode commands", NULL);
10 changes: 4 additions & 6 deletions applications/nrf5340_audio/src/audio/audio_system.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
#include "audio_datapath.h"
#include "audio_i2s.h"
#include "data_fifo.h"
#include "led.h"
#include "hw_codec.h"
#include "tone.h"
#include "contin_array.h"
Expand Down Expand Up @@ -303,11 +302,10 @@ void audio_system_start(void)
sw_codec_cfg.initialized = true;

if (sw_codec_cfg.encoder.enabled && encoder_thread_id == NULL) {
encoder_thread_id =
k_thread_create(&encoder_thread_data, encoder_thread_stack,
CONFIG_ENCODER_STACK_SIZE, (k_thread_entry_t)encoder_thread,
NULL, NULL, NULL,
K_PRIO_PREEMPT(CONFIG_ENCODER_THREAD_PRIO), 0, K_NO_WAIT);
encoder_thread_id = k_thread_create(
&encoder_thread_data, encoder_thread_stack, CONFIG_ENCODER_STACK_SIZE,
(k_thread_entry_t)encoder_thread, NULL, NULL, NULL,
K_PRIO_PREEMPT(CONFIG_ENCODER_THREAD_PRIO), 0, K_NO_WAIT);
ret = k_thread_name_set(encoder_thread_id, "ENCODER");
ERR_CHK(ret);
}
Expand Down
1 change: 0 additions & 1 deletion applications/nrf5340_audio/src/audio/streamctrl.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
#include "audio_system.h"
#include "button_handler.h"
#include "data_fifo.h"
#include "board.h"
#include "le_audio.h"
#include "bt_mgmt.h"
#include "bt_rend.h"
Expand Down
41 changes: 19 additions & 22 deletions applications/nrf5340_audio/src/audio/sw_codec_select.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ static struct sw_codec_config m_config;
int sw_codec_encode(void *pcm_data, size_t pcm_size, uint8_t **encoded_data, size_t *encoded_size)
{
/* Temp storage for split stereo PCM signal */
char pcm_data_mono[AUDIO_CH_NUM][PCM_NUM_BYTES_MONO] = { 0 };
char pcm_data_mono[AUDIO_CH_NUM][PCM_NUM_BYTES_MONO] = {0};
/* Make sure we have enough space for two frames (stereo) */
static uint8_t m_encoded_data[ENC_MAX_FRAME_SIZE * AUDIO_CH_NUM];

Expand Down Expand Up @@ -109,7 +109,7 @@ int sw_codec_decode(uint8_t const *const encoded_data, size_t encoded_size, bool
}

int ret;
char pcm_data_mono[PCM_NUM_BYTES_MONO] = { 0 };
char pcm_data_mono[PCM_NUM_BYTES_MONO] = {0};
static char pcm_data_stereo[PCM_NUM_BYTES_STEREO];

size_t pcm_size_stereo = 0;
Expand All @@ -119,18 +119,17 @@ int sw_codec_decode(uint8_t const *const encoded_data, size_t encoded_size, bool
case SW_CODEC_LC3: {
#if (CONFIG_SW_CODEC_LC3)
/* Typically used for right channel if stereo signal */
char pcm_data_mono_right[PCM_NUM_BYTES_MONO] = { 0 };
char pcm_data_mono_right[PCM_NUM_BYTES_MONO] = {0};

switch (m_config.decoder.num_ch) {
case SW_CODEC_MONO: {
if (bad_frame && IS_ENABLED(CONFIG_SW_CODEC_OVERRIDE_PLC)) {
memset(pcm_data_mono, 0, PCM_NUM_BYTES_MONO);
pcm_size_session = PCM_NUM_BYTES_MONO;
} else {
ret = sw_codec_lc3_dec_run(encoded_data, encoded_size,
LC3_PCM_NUM_BYTES_MONO, 0, pcm_data_mono,
(uint16_t *)&pcm_size_session,
bad_frame);
ret = sw_codec_lc3_dec_run(
encoded_data, encoded_size, LC3_PCM_NUM_BYTES_MONO, 0,
pcm_data_mono, (uint16_t *)&pcm_size_session, bad_frame);
if (ret) {
return ret;
}
Expand All @@ -155,20 +154,18 @@ int sw_codec_decode(uint8_t const *const encoded_data, size_t encoded_size, bool
pcm_size_session = PCM_NUM_BYTES_MONO;
} else {
/* Decode left channel */
ret = sw_codec_lc3_dec_run(encoded_data, encoded_size / 2,
LC3_PCM_NUM_BYTES_MONO, AUDIO_CH_L,
pcm_data_mono,
(uint16_t *)&pcm_size_session,
bad_frame);
ret = sw_codec_lc3_dec_run(
encoded_data, encoded_size / 2, LC3_PCM_NUM_BYTES_MONO,
AUDIO_CH_L, pcm_data_mono, (uint16_t *)&pcm_size_session,
bad_frame);
if (ret) {
return ret;
}
/* Decode right channel */
ret = sw_codec_lc3_dec_run((encoded_data + (encoded_size / 2)),
encoded_size / 2, LC3_PCM_NUM_BYTES_MONO,
AUDIO_CH_R, pcm_data_mono_right,
(uint16_t *)&pcm_size_session,
bad_frame);
ret = sw_codec_lc3_dec_run(
(encoded_data + (encoded_size / 2)), encoded_size / 2,
LC3_PCM_NUM_BYTES_MONO, AUDIO_CH_R, pcm_data_mono_right,
(uint16_t *)&pcm_size_session, bad_frame);
if (ret) {
return ret;
}
Expand Down Expand Up @@ -288,19 +285,19 @@ int sw_codec_init(struct sw_codec_config sw_codec_cfg)
CONFIG_AUDIO_SAMPLE_RATE_HZ, CONFIG_AUDIO_BIT_DEPTH_BITS,
CONFIG_AUDIO_FRAME_DURATION_US, sw_codec_cfg.decoder.num_ch);

ret = sw_codec_lc3_dec_init(CONFIG_AUDIO_SAMPLE_RATE_HZ,
CONFIG_AUDIO_BIT_DEPTH_BITS,
CONFIG_AUDIO_FRAME_DURATION_US,
sw_codec_cfg.decoder.num_ch);
ret = sw_codec_lc3_dec_init(
CONFIG_AUDIO_SAMPLE_RATE_HZ, CONFIG_AUDIO_BIT_DEPTH_BITS,
CONFIG_AUDIO_FRAME_DURATION_US, sw_codec_cfg.decoder.num_ch);

if (ret) {
return ret;
}
}
break;
#endif /* (CONFIG_SW_CODEC_LC3) */
#else
LOG_ERR("LC3 is not compiled in, please open menuconfig and select LC3");
return -ENODEV;
#endif /* (CONFIG_SW_CODEC_LC3) */
}
default:
LOG_ERR("Unsupported codec: %d", sw_codec_cfg.sw_codec);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,11 @@ static void bond_find(const struct bt_bond_info *info, void *user_data)
struct bt_conn_info conn_info;

ret = bt_conn_get_info(conn, &conn_info);
if (ret) {
koffes marked this conversation as resolved.
Show resolved Hide resolved
LOG_WRN("Could not get conn info");
bt_conn_unref(conn);
return;
}

if (conn_info.state == BT_CONN_STATE_CONNECTED) {
LOG_WRN("Already connected");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ static void conn_state_connected_check(struct bt_conn *conn, void *data)
static void connected_cb(struct bt_conn *conn, uint8_t err)
{
int ret;
char addr[BT_ADDR_LE_STR_LEN];
char addr[BT_ADDR_LE_STR_LEN] = {0};
uint8_t num_conn = 0;
uint16_t conn_handle;
enum ble_hci_vs_tx_power conn_tx_pwr;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,8 @@
#include <zephyr/kernel.h>
#include <zephyr/bluetooth/bluetooth.h>
#include <zephyr/bluetooth/conn.h>
#include <zephyr/settings/settings.h>

#include "string.h"
#include "button_assignments.h"
#include "button_handler.h"
#include "macros_common.h"
#include "channel_assignment.h"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -244,9 +244,9 @@ int bt_rend_vol_down(void)
i, ret);
}
}

return 0;
}

return 0;
koffes marked this conversation as resolved.
Show resolved Hide resolved
erikrobstad marked this conversation as resolved.
Show resolved Hide resolved
} else if (IS_ENABLED(CONFIG_BT_VCP_VOL_REND)) {
return bt_vcp_vol_rend_unmute_vol_down();
}
Expand Down
Loading
Loading