71 lines
2.2 KiB
Python
Executable File
71 lines
2.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# Install python3 HID package https://pypi.org/project/hid/
|
|
# Install python3 matplotlib package https://pypi.org/project/matplotlib/
|
|
|
|
from ctypes import *
|
|
try:
|
|
import hid
|
|
import matplotlib.pyplot as plt
|
|
import matplotlib.animation as animation
|
|
except:
|
|
print("Missing import, please try 'pip install hid matplotlib' or consult your OS's python package manager.")
|
|
|
|
# Example must be compiled with CFG_AUDIO_DEBUG=1
|
|
VID = 0xcafe
|
|
PID = 0x4014
|
|
|
|
CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX = 2
|
|
|
|
class audio_debug_info_t (Structure):
|
|
_fields_ = [("sample_rate", c_uint32),
|
|
("alt_settings", c_uint8),
|
|
("mute", (CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1) * c_int8),
|
|
("volume", (CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX + 1) * c_int16),
|
|
("fifo_size", c_uint16),
|
|
("fifo_count", c_uint16),
|
|
("fifo_count_avg", c_uint16)
|
|
]
|
|
|
|
dev = hid.Device(VID, PID)
|
|
|
|
if dev:
|
|
# Create figure for plotting
|
|
fig = plt.figure()
|
|
ax = fig.add_subplot(1, 1, 1)
|
|
fifo_avg = []
|
|
fifo_cnt = []
|
|
# This function is called periodically from FuncAnimation
|
|
def animate(i):
|
|
info = None
|
|
for i in range(30):
|
|
try:
|
|
str_in = dev.read(64, 50)
|
|
info = audio_debug_info_t.from_buffer_copy(str_in)
|
|
|
|
global fifo_avg
|
|
global fifo_cnt
|
|
fifo_avg.append(info.fifo_count_avg)
|
|
fifo_cnt.append(info.fifo_count)
|
|
except:
|
|
exit(1)
|
|
# Limit to 1000 items
|
|
fifo_avg = fifo_avg[-1000:]
|
|
fifo_cnt = fifo_cnt[-1000:]
|
|
|
|
if info is not None:
|
|
# Draw x and y lists
|
|
ax.clear()
|
|
ax.plot(fifo_cnt, label='FIFO count')
|
|
ax.plot(fifo_avg, label='FIFO average')
|
|
ax.legend()
|
|
ax.set_ylim(bottom=0, top=info.fifo_size)
|
|
|
|
# Format plot
|
|
plt.title('FIFO information')
|
|
plt.grid()
|
|
|
|
print(f'Sample rate:{info.sample_rate} | Alt settings:{info.alt_settings} | Volume:{info.volume[:]}')
|
|
|
|
ani = animation.FuncAnimation(fig, animate, interval=10)
|
|
plt.show()
|