Lines Matching refs:audio_class
44 static void usbh_audio_class_free(struct usbh_audio *audio_class) in usbh_audio_class_free() argument
46 uint8_t devno = audio_class->minor; in usbh_audio_class_free()
51 memset(audio_class, 0, sizeof(struct usbh_audio)); in usbh_audio_class_free()
54 int usbh_audio_open(struct usbh_audio *audio_class, const char *name, uint32_t samp_freq, uint8_t b… in usbh_audio_open() argument
64 if (!audio_class || !audio_class->hport) { in usbh_audio_open()
67 setup = audio_class->hport->setup; in usbh_audio_open()
69 if (audio_class->is_opened) { in usbh_audio_open()
73 for (uint8_t i = 0; i < audio_class->stream_intf_num; i++) { in usbh_audio_open()
74 if (strcmp(name, audio_class->as_msg_table[i].stream_name) == 0) { in usbh_audio_open()
75 intf = audio_class->as_msg_table[i].stream_intf; in usbh_audio_open()
76 for (uint8_t j = 1; j < audio_class->as_msg_table[i].num_of_altsetting; j++) { in usbh_audio_open()
77 if (audio_class->as_msg_table[i].as_format[j].bBitResolution == bitresolution) { in usbh_audio_open()
78 … for (uint8_t k = 0; k < audio_class->as_msg_table[i].as_format[j].bSamFreqType; k++) { in usbh_audio_open()
81 … memcpy(&freq, &audio_class->as_msg_table[i].as_format[j].tSamFreq[3 * k], 3); in usbh_audio_open()
101 ret = usbh_control_transfer(audio_class->hport, setup, NULL); in usbh_audio_open()
106 ep_desc = &audio_class->hport->config.intf[intf].altsetting[altsetting].ep[0].ep_desc; in usbh_audio_open()
108 …if (audio_class->as_msg_table[intf - audio_class->ctrl_intf - 1].ep_attr & AUDIO_EP_CONTROL_SAMPLI… in usbh_audio_open()
116 ret = usbh_control_transfer(audio_class->hport, setup, g_audio_buf); in usbh_audio_open()
125 audio_class->isoin_mps = mps * (mult + 1); in usbh_audio_open()
126 USBH_EP_INIT(audio_class->isoin, ep_desc); in usbh_audio_open()
128 audio_class->isoout_mps = mps * (mult + 1); in usbh_audio_open()
129 USBH_EP_INIT(audio_class->isoout, ep_desc); in usbh_audio_open()
133 audio_class->is_opened = true; in usbh_audio_open()
137 int usbh_audio_close(struct usbh_audio *audio_class, const char *name) in usbh_audio_close() argument
145 if (!audio_class || !audio_class->hport) { in usbh_audio_close()
148 setup = audio_class->hport->setup; in usbh_audio_close()
150 for (uint8_t i = 0; i < audio_class->stream_intf_num; i++) { in usbh_audio_close()
151 if (strcmp(name, audio_class->as_msg_table[i].stream_name) == 0) { in usbh_audio_close()
152 intf = audio_class->as_msg_table[i].stream_intf; in usbh_audio_close()
166 ret = usbh_control_transfer(audio_class->hport, setup, NULL); in usbh_audio_close()
171 audio_class->is_opened = false; in usbh_audio_close()
173 ep_desc = &audio_class->hport->config.intf[intf].altsetting[altsetting].ep[0].ep_desc; in usbh_audio_close()
175 if (audio_class->isoin) { in usbh_audio_close()
176 audio_class->isoin = NULL; in usbh_audio_close()
179 if (audio_class->isoout) { in usbh_audio_close()
180 audio_class->isoout = NULL; in usbh_audio_close()
187 int usbh_audio_set_volume(struct usbh_audio *audio_class, const char *name, uint8_t ch, int volume_… in usbh_audio_set_volume() argument
197 if (!audio_class || !audio_class->hport) { in usbh_audio_set_volume()
205 setup = audio_class->hport->setup; in usbh_audio_set_volume()
207 for (uint8_t i = 0; i < audio_class->stream_intf_num; i++) { in usbh_audio_set_volume()
208 if (strcmp(name, audio_class->as_msg_table[i].stream_name) == 0) { in usbh_audio_set_volume()
209 feature_id = audio_class->as_msg_table[i].feature_terminal_id; in usbh_audio_set_volume()
210 intf = audio_class->as_msg_table[i].stream_intf; in usbh_audio_set_volume()
221 setup->wIndex = (feature_id << 8) | audio_class->ctrl_intf; in usbh_audio_set_volume()
224 ret = usbh_control_transfer(audio_class->hport, setup, g_audio_buf); in usbh_audio_set_volume()
229 … memcpy(&audio_class->as_msg_table[intf - audio_class->ctrl_intf - 1].volume_cur, g_audio_buf, 2); in usbh_audio_set_volume()
234 setup->wIndex = (feature_id << 8) | audio_class->ctrl_intf; in usbh_audio_set_volume()
237 ret = usbh_control_transfer(audio_class->hport, setup, g_audio_buf); in usbh_audio_set_volume()
242 … memcpy(&audio_class->as_msg_table[intf - audio_class->ctrl_intf - 1].volume_min, g_audio_buf, 2); in usbh_audio_set_volume()
247 setup->wIndex = (feature_id << 8) | audio_class->ctrl_intf; in usbh_audio_set_volume()
250 ret = usbh_control_transfer(audio_class->hport, setup, g_audio_buf); in usbh_audio_set_volume()
254 … memcpy(&audio_class->as_msg_table[intf - audio_class->ctrl_intf - 1].volume_max, g_audio_buf, 2); in usbh_audio_set_volume()
259 setup->wIndex = (feature_id << 8) | audio_class->ctrl_intf; in usbh_audio_set_volume()
262 ret = usbh_control_transfer(audio_class->hport, setup, g_audio_buf); in usbh_audio_set_volume()
266 … memcpy(&audio_class->as_msg_table[intf - audio_class->ctrl_intf - 1].volume_res, g_audio_buf, 2); in usbh_audio_set_volume()
271 setup->wIndex = (feature_id << 8) | audio_class->ctrl_intf; in usbh_audio_set_volume()
274 if (audio_class->as_msg_table[intf - audio_class->ctrl_intf - 1].volume_min < 0x8000) { in usbh_audio_set_volume()
275 … volume_min_db = audio_class->as_msg_table[intf - audio_class->ctrl_intf - 1].volume_min / 256; in usbh_audio_set_volume()
277 …volume_min_db = (audio_class->as_msg_table[intf - audio_class->ctrl_intf - 1].volume_min - 0x10000… in usbh_audio_set_volume()
280 if (audio_class->as_msg_table[intf - audio_class->ctrl_intf - 1].volume_max < 0x8000) { in usbh_audio_set_volume()
281 … volume_max_db = audio_class->as_msg_table[intf - audio_class->ctrl_intf - 1].volume_max / 256; in usbh_audio_set_volume()
283 …volume_max_db = (audio_class->as_msg_table[intf - audio_class->ctrl_intf - 1].volume_max - 0x10000… in usbh_audio_set_volume()
290 if (volume_hex > audio_class->as_msg_table[intf - audio_class->ctrl_intf - 1].volume_max) { in usbh_audio_set_volume()
295 if (volume_hex < audio_class->as_msg_table[intf - audio_class->ctrl_intf - 1].volume_min) { in usbh_audio_set_volume()
301 ret = usbh_control_transfer(audio_class->hport, setup, g_audio_buf); in usbh_audio_set_volume()
305 audio_class->as_msg_table[intf - audio_class->ctrl_intf - 1].volume_cur = volume_hex; in usbh_audio_set_volume()
309 int usbh_audio_set_mute(struct usbh_audio *audio_class, const char *name, uint8_t ch, bool mute) in usbh_audio_set_mute() argument
316 if (!audio_class || !audio_class->hport) { in usbh_audio_set_mute()
319 setup = audio_class->hport->setup; in usbh_audio_set_mute()
321 for (uint8_t i = 0; i < audio_class->stream_intf_num; i++) { in usbh_audio_set_mute()
322 if (strcmp(name, audio_class->as_msg_table[i].stream_name) == 0) { in usbh_audio_set_mute()
323 feature_id = audio_class->as_msg_table[i].feature_terminal_id; in usbh_audio_set_mute()
324 intf = audio_class->as_msg_table[i].stream_intf; in usbh_audio_set_mute()
335 setup->wIndex = (feature_id << 8) | audio_class->ctrl_intf; in usbh_audio_set_mute()
339 ret = usbh_control_transfer(audio_class->hport, setup, g_audio_buf); in usbh_audio_set_mute()
343 audio_class->as_msg_table[intf - audio_class->ctrl_intf - 1].mute = mute; in usbh_audio_set_mute()
347 void usbh_audio_list_module(struct usbh_audio *audio_class) in usbh_audio_list_module() argument
350 USB_LOG_RAW("bcdADC :%04x\r\n", audio_class->bcdADC); in usbh_audio_list_module()
351 USB_LOG_RAW("Num of audio stream :%u\r\n", audio_class->stream_intf_num); in usbh_audio_list_module()
353 for (uint8_t i = 0; i < audio_class->stream_intf_num; i++) { in usbh_audio_list_module()
354 USB_LOG_RAW("\tstream name :%s\r\n", audio_class->as_msg_table[i].stream_name); in usbh_audio_list_module()
355 USB_LOG_RAW("\tstream intf :%u\r\n", audio_class->as_msg_table[i].stream_intf); in usbh_audio_list_module()
356 USB_LOG_RAW("\tNum of altsetting :%u\r\n", audio_class->as_msg_table[i].num_of_altsetting); in usbh_audio_list_module()
358 for (uint8_t j = 0; j < audio_class->as_msg_table[i].num_of_altsetting; j++) { in usbh_audio_list_module()
364 … USB_LOG_RAW("\t\t\tbNrChannels :%u\r\n", audio_class->as_msg_table[i].as_format[j].bNrChannels); in usbh_audio_list_module()
365 …USB_LOG_RAW("\t\t\tbBitResolution :%u\r\n", audio_class->as_msg_table[i].as_format[j].bBitResoluti… in usbh_audio_list_module()
366 … USB_LOG_RAW("\t\t\tbSamFreqType :%u\r\n", audio_class->as_msg_table[i].as_format[j].bSamFreqType); in usbh_audio_list_module()
368 for (uint8_t k = 0; k < audio_class->as_msg_table[i].as_format[j].bSamFreqType; k++) { in usbh_audio_list_module()
371 memcpy(&freq, &audio_class->as_msg_table[i].as_format[j].tSamFreq[3 * k], 3); in usbh_audio_list_module()
392 struct usbh_audio *audio_class = usbh_audio_class_alloc(); in usbh_audio_ctrl_connect() local
393 if (audio_class == NULL) { in usbh_audio_ctrl_connect()
398 audio_class->hport = hport; in usbh_audio_ctrl_connect()
399 audio_class->ctrl_intf = intf; in usbh_audio_ctrl_connect()
400 hport->config.intf[intf].priv = audio_class; in usbh_audio_ctrl_connect()
415 if (cur_iface == audio_class->ctrl_intf) { in usbh_audio_ctrl_connect()
419 audio_class->bcdADC = desc->bcdADC; in usbh_audio_ctrl_connect()
420 audio_class->bInCollection = desc->bInCollection; in usbh_audio_ctrl_connect()
444 …} else if ((cur_iface > audio_class->ctrl_intf) && (cur_iface < (audio_class->ctrl_intf + cur_ifac… in usbh_audio_ctrl_connect()
450 … audio_class->as_msg_table[cur_iface - audio_class->ctrl_intf - 1].stream_intf = cur_iface; in usbh_audio_ctrl_connect()
451 …memcpy(&audio_class->as_msg_table[cur_iface - audio_class->ctrl_intf - 1].as_general, desc, sizeof… in usbh_audio_ctrl_connect()
455 …audio_class->as_msg_table[cur_iface - audio_class->ctrl_intf - 1].num_of_altsetting = (cur_alt_set… in usbh_audio_ctrl_connect()
456 …memcpy(&audio_class->as_msg_table[cur_iface - audio_class->ctrl_intf - 1].as_format[cur_alt_settin… in usbh_audio_ctrl_connect()
464 …if ((cur_iface > audio_class->ctrl_intf) && (cur_iface < (audio_class->ctrl_intf + cur_iface_count… in usbh_audio_ctrl_connect()
467 … audio_class->as_msg_table[cur_iface - audio_class->ctrl_intf - 1].ep_attr = desc->bmAttributes; in usbh_audio_ctrl_connect()
488 audio_class->stream_intf_num = input_offset; in usbh_audio_ctrl_connect()
490 for (uint8_t i = 0; i < audio_class->stream_intf_num; i++) { in usbh_audio_ctrl_connect()
492 for (uint8_t streamidx = 0; streamidx < audio_class->stream_intf_num; streamidx++) { in usbh_audio_ctrl_connect()
493 …if (audio_class->as_msg_table[i].as_general.bTerminalLink == ac_msg_table[streamidx].ac_input.bTer… in usbh_audio_ctrl_connect()
495 … audio_class->as_msg_table[i].input_terminal_id = ac_msg_table[streamidx].ac_input.bTerminalID; in usbh_audio_ctrl_connect()
498 … for (uint8_t featureidx = 0; featureidx < audio_class->stream_intf_num; featureidx++) { in usbh_audio_ctrl_connect()
500 …audio_class->as_msg_table[i].feature_terminal_id = ac_msg_table[featureidx].ac_feature_unit.bUnitI… in usbh_audio_ctrl_connect()
503 … for (uint8_t outputid = 0; outputid < audio_class->stream_intf_num; outputid++) { in usbh_audio_ctrl_connect()
505 … audio_class->as_msg_table[i].output_terminal_id = ac_msg_table[outputid].ac_output.bTerminalID; in usbh_audio_ctrl_connect()
509 audio_class->as_msg_table[i].stream_name = "speaker"; in usbh_audio_ctrl_connect()
512 audio_class->as_msg_table[i].stream_name = "headphoens"; in usbh_audio_ctrl_connect()
515 audio_class->as_msg_table[i].stream_name = "headdisplay"; in usbh_audio_ctrl_connect()
518 audio_class->as_msg_table[i].stream_name = "unknown"; in usbh_audio_ctrl_connect()
527 …} else if (audio_class->as_msg_table[i].as_general.bTerminalLink == ac_msg_table[streamidx].ac_out… in usbh_audio_ctrl_connect()
529 … audio_class->as_msg_table[i].output_terminal_id = ac_msg_table[streamidx].ac_output.bTerminalID; in usbh_audio_ctrl_connect()
532 … for (uint8_t featureidx = 0; featureidx < audio_class->stream_intf_num; featureidx++) { in usbh_audio_ctrl_connect()
534 …audio_class->as_msg_table[i].feature_terminal_id = ac_msg_table[featureidx].ac_feature_unit.bUnitI… in usbh_audio_ctrl_connect()
537 … for (uint8_t inputid = 0; inputid < audio_class->stream_intf_num; inputid++) { in usbh_audio_ctrl_connect()
539 … audio_class->as_msg_table[i].input_terminal_id = ac_msg_table[inputid].ac_input.bTerminalID; in usbh_audio_ctrl_connect()
543 audio_class->as_msg_table[i].stream_name = "mic"; in usbh_audio_ctrl_connect()
546 audio_class->as_msg_table[i].stream_name = "unknown"; in usbh_audio_ctrl_connect()
559 for (uint8_t i = 0; i < audio_class->stream_intf_num; i++) { in usbh_audio_ctrl_connect()
560 if (audio_class->as_msg_table[i].stream_name == NULL) { in usbh_audio_ctrl_connect()
566 for (uint8_t i = 0; i < audio_class->stream_intf_num; i++) { in usbh_audio_ctrl_connect()
567 ret = usbh_audio_close(audio_class, audio_class->as_msg_table[i].stream_name); in usbh_audio_ctrl_connect()
569 … USB_LOG_ERR("Fail to close audio stream :%s\r\n", audio_class->as_msg_table[i].stream_name); in usbh_audio_ctrl_connect()
574 usbh_audio_list_module(audio_class); in usbh_audio_ctrl_connect()
576 …snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, DEV_FORMAT, audio_class->mi… in usbh_audio_ctrl_connect()
579 usbh_audio_run(audio_class); in usbh_audio_ctrl_connect()
587 struct usbh_audio *audio_class = (struct usbh_audio *)hport->config.intf[intf].priv; in usbh_audio_ctrl_disconnect() local
589 if (audio_class) { in usbh_audio_ctrl_disconnect()
590 if (audio_class->isoin) { in usbh_audio_ctrl_disconnect()
593 if (audio_class->isoout) { in usbh_audio_ctrl_disconnect()
599 usbh_audio_stop(audio_class); in usbh_audio_ctrl_disconnect()
602 usbh_audio_class_free(audio_class); in usbh_audio_ctrl_disconnect()
622 __WEAK void usbh_audio_run(struct usbh_audio *audio_class) in usbh_audio_run() argument
624 (void)audio_class; in usbh_audio_run()
627 __WEAK void usbh_audio_stop(struct usbh_audio *audio_class) in usbh_audio_stop() argument
629 (void)audio_class; in usbh_audio_stop()