Skip to content

Commit e5113a1

Browse files
committed
prototype for feedback method
1 parent 5766c9a commit e5113a1

File tree

2 files changed

+35
-14
lines changed

2 files changed

+35
-14
lines changed

src/class/audio/audio_device.c

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -261,13 +261,6 @@ osal_mutex_def_t rx_supp_ff_mutex_rd_3[CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO];
261261
#endif
262262
#endif
263263

264-
enum {
265-
FEEDBACK_COMPUTE_DISABLED,
266-
FEEDBACK_COMPUTE_FLOAT,
267-
FEEDBACK_COMPUTE_FIXED,
268-
FEEDBACK_COMPUTE_POWER_OF_2,
269-
};
270-
271264
typedef struct
272265
{
273266
uint8_t rhport;
@@ -1722,10 +1715,10 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
17221715

17231716
if ( sample_freq == 0 || mclk_freq == 0 )
17241717
{
1725-
audio->fb_compute_method = FEEDBACK_COMPUTE_DISABLED;
1718+
audio->fb_compute_method = AUDIO_FEEDBACK_METHOD_DISABLED;
17261719
}else
17271720
{
1728-
audio->fb_compute_method = fixed_point ? FEEDBACK_COMPUTE_FIXED : FEEDBACK_COMPUTE_FLOAT;
1721+
audio->fb_compute_method = fixed_point ? AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED : AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT;
17291722
set_fb_params(audio, sample_freq, mclk_freq);
17301723
}
17311724
}
@@ -2066,9 +2059,9 @@ static bool set_fb_params(audiod_function_t* audio, uint32_t sample_freq, uint32
20662059
// Check if parameters really allow for a power of two division
20672060
if ((mclk_freq % sample_freq) == 0 && tu_is_power_of_two(mclk_freq / sample_freq))
20682061
{
2069-
audio->fb_compute_method = FEEDBACK_COMPUTE_POWER_OF_2;
2062+
audio->fb_compute_method = AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2;
20702063
audio->fb_power_of_two_val = 16 - audio->fb_n_frames_shift - tu_log2(mclk_freq / sample_freq);
2071-
}else if ( audio->fb_compute_method == FEEDBACK_COMPUTE_FLOAT)
2064+
}else if ( audio->fb_compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT)
20722065
{
20732066
audio->fb_float_val = (float)sample_freq / mclk_freq * (1UL << (16 - audio->fb_n_frames_shift));
20742067
}else
@@ -2092,15 +2085,15 @@ uint32_t tud_audio_feedback_update(uint8_t func_id, uint32_t cycles)
20922085

20932086
switch (audio->fb_compute_method)
20942087
{
2095-
case FEEDBACK_COMPUTE_POWER_OF_2:
2088+
case AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2:
20962089
feedback = (cycles << audio->fb_power_of_two_val);
20972090
break;
20982091

2099-
case FEEDBACK_COMPUTE_FLOAT:
2092+
case AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT:
21002093
feedback = (uint32_t) ((float) cylces * audio->fb_float_val);
21012094
break;
21022095

2103-
case FEEDBACK_COMPUTE_FIXED:
2096+
case AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED:
21042097
{
21052098
uint64_t fb64 = (((uint64_t) cycles) * audio->fb_sample_freq) << (16 - audio->fb_n_frames_shift);
21062099
feedback = (uint32_t) (fb64 / audio->fb_mclk_freq);

src/class/audio/audio_device.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,34 @@ static inline uint8_t tud_audio_get_fb_n_frames();
498498
// return feedback value in 16.16 for reference (0 for error)
499499
uint32_t tud_audio_feedback_update(uint8_t func_id, uint32_t cycles);
500500

501+
enum {
502+
AUDIO_FEEDBACK_METHOD_DISABLED,
503+
AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED,
504+
AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT,
505+
AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2,
506+
AUDIO_FEEDBACK_METHOD_FIFO_COUNT_FIXED,
507+
AUDIO_FEEDBACK_METHOD_FIFO_COUNT_FLOAT
508+
};
509+
510+
typedef struct {
511+
uint8_t method;
512+
union {
513+
struct {
514+
uint32_t sample_freq;
515+
uint32_t mclk_freq;
516+
}frequency;
517+
518+
struct {
519+
uint32_t nominal;
520+
uint32_t threshold;
521+
// variation etc ..
522+
}fifo_count;
523+
};
524+
}audio_feedback_params_t;
525+
526+
527+
// TU_ATTR_WEAK void tud_audio_feedback_params_cb(uint8_t func_id, uint8_t alt_itf, audio_feedback_params_t* feedback_param);
528+
501529
// mclk_freq : Main clock frequency in Hz i.e. master clock to which sample clock is locked
502530
// sample_freq : sample frequency in Hz
503531
// fixed_point : 0 float (default), 1 fixed point (for mcu without FPU)

0 commit comments

Comments
 (0)