static void *headset_update_iv_thread(void *priv) { struct headset *hds = (struct headset *)priv; struct itemview *iv = hds->iv; int chkcnt = 5; LOGD(TAG "%s: Start\n", __FUNCTION__); while (1) { //usleep(200000); usleep(20000); chkcnt--; if (hds->exit_thd) break; if (chkcnt > 0) continue; headset_update_info(hds, hds->info); iv->set_text(iv, &hds->text); iv->redraw(iv); chkcnt = 5; } LOGD(TAG "%s: Exit\n", __FUNCTION__); pthread_exit(NULL); return NULL; }
int headset_entry(struct ftm_param *param, void *priv) { char *ptr; int chosen; bool exit = false; struct headset *hds = (struct headset *)priv; struct textview *tv; struct itemview *iv; int privChosen = -1; LOGD(TAG "%s\n", __FUNCTION__); init_text(&hds->title, param->name, COLOR_YELLOW); init_text(&hds->text, &hds->info[0], COLOR_YELLOW); init_text(&hds->left_btn, "Fail", COLOR_YELLOW); init_text(&hds->center_btn, "Pass", COLOR_YELLOW); init_text(&hds->right_btn, "Back", COLOR_YELLOW); headset_update_info(hds, hds->info); hds->exit_thd = false; if (!hds->iv) { iv = ui_new_itemview(); if (!iv) { LOGD(TAG "No memory"); return -1; } hds->iv = iv; } iv = hds->iv; iv->set_title(iv, &hds->title); iv->set_items(iv, headset_items, 0); iv->set_text(iv, &hds->text); Common_Audio_init(); pthread_create(&hds->headset_update_thd, NULL, headset_update_iv_thread, priv); do { chosen = iv->run(iv, &exit); switch (chosen) { case ITEM_RINGTONE: if (!hds->avail || privChosen == ITEM_RINGTONE) { break; } if (privChosen == ITEM_HEADSET_MIC && hds->Headset_mic) { HeadsetMic_EarphoneLR_Loopback(0, 1); } usleep(20000); EarphoneTest(1); privChosen = ITEM_RINGTONE; break; case ITEM_HEADSET_MIC: if (!hds->avail || privChosen == ITEM_HEADSET_MIC || !hds->Headset_mic) { break; } if (privChosen == ITEM_RINGTONE) { EarphoneTest(0); } usleep(20000); HeadsetMic_EarphoneLR_Loopback(1, 1); privChosen = ITEM_HEADSET_MIC; break; case ITEM_PASS: case ITEM_FAIL: if (chosen == ITEM_PASS) { hds->mod->test_result = FTM_TEST_PASS; } else if (chosen == ITEM_FAIL) { hds->mod->test_result = FTM_TEST_FAIL; } exit = true; break; } if (exit) { hds->exit_thd = true; break; } } while (1); if (privChosen == ITEM_RINGTONE) { EarphoneTest(0); } if (privChosen == ITEM_HEADSET_MIC) { HeadsetMic_EarphoneLR_Loopback(0, 1); } pthread_join(hds->headset_update_thd, NULL); Common_Audio_deinit(); return 0; }
//#else int mAudio_headset_manual_entry(struct ftm_param *param, void *priv) { char *ptr; int chosen; bool exit = false; char *inputType = NULL; struct headset *hds = (struct headset *)priv; struct textview *tv; struct itemview *iv; int privChosen = -1; LOGD(TAG "%s\n", __FUNCTION__); init_text(&hds->title, param->name, COLOR_YELLOW); init_text(&hds->text, &hds->info[0], COLOR_YELLOW); init_text(&hds->left_btn, "Fail", COLOR_YELLOW); init_text(&hds->center_btn, "Pass", COLOR_YELLOW); init_text(&hds->right_btn, "Back", COLOR_YELLOW); headset_update_info(hds, hds->info); hds->exit_thd = false; if (!hds->iv) { iv = ui_new_itemview(); if (!iv) { LOGD(TAG "No memory"); return -1; } hds->iv = iv; } iv = hds->iv; iv->set_title(iv, &hds->title); if (get_is_ata() == 0) { iv->set_items(iv, headset_items, 0); } else { iv->set_items(iv, headset_items_ex, 0); } iv->set_text(iv, &hds->text); Common_Audio_init(); pthread_create(&hds->headset_update_thd, NULL, headset_update_iv_thread, priv); inputType = ftm_get_prop("Audio.Manual.InputType"); if (inputType != NULL && (atoi(inputType) == 0 || atoi(inputType) == 1 || atoi(inputType) == 2 || atoi(inputType) == 3)) { // @ input != NULL, PC command control mode ALOGD("Audio.Manual.InputType = %s", inputType); iv->redraw(iv); PhoneMic_EarphoneLR_Loopback(MIC1_OFF); usleep(20000); if (atoi(inputType) == 1) { ALOGD("Set Mic1 on"); PhoneMic_EarphoneLR_Loopback(MIC1_ON); } else if (atoi(inputType) == 2) { ALOGD("Set Mic2 on"); PhoneMic_EarphoneLR_Loopback(MIC2_ON); } else if (atoi(inputType) == 3) { ALOGD("Set headset Mic on"); HeadsetMic_EarphoneLR_Loopback(1, 1); } hds->exit_thd = true; pthread_join(hds->headset_update_thd, NULL); hds->mod->test_result = FTM_TEST_PASS; if (atoi(inputType) == 0) { ALOGD("Audio Deinit"); Common_Audio_deinit(); } } else { // Original manual operating mode do { chosen = iv->run(iv, &exit); switch (chosen) { case ITEM_RINGTONE: if (!hds->avail || privChosen == ITEM_RINGTONE) { break; } if (privChosen == ITEM_HEADSET_MIC && hds->Headset_mic) { HeadsetMic_EarphoneLR_Loopback(0, 1); } usleep(20000); EarphoneTest(1); privChosen = ITEM_RINGTONE; break; case ITEM_MIC1: if (!hds->avail || privChosen == ITEM_MIC1) { break; } if (privChosen == ITEM_RINGTONE) { EarphoneTest(0); } else if (privChosen == ITEM_MIC2) { PhoneMic_EarphoneLR_Loopback(MIC2_OFF); } else if (privChosen == ITEM_HEADSET_MIC) { HeadsetMic_EarphoneLR_Loopback(0, 1); } usleep(20000); PhoneMic_EarphoneLR_Loopback(MIC1_ON); privChosen = ITEM_MIC1; break; case ITEM_MIC2: if (!hds->avail || privChosen == ITEM_MIC2) { break; } if (privChosen == ITEM_RINGTONE) { EarphoneTest(0); } else if (privChosen == ITEM_MIC1) { PhoneMic_EarphoneLR_Loopback(MIC1_OFF); } else if (privChosen == ITEM_HEADSET_MIC) { HeadsetMic_EarphoneLR_Loopback(0, 1); } usleep(20000); PhoneMic_EarphoneLR_Loopback(MIC2_ON); privChosen = ITEM_MIC2; break; case ITEM_HEADSET_MIC: if (!hds->avail || privChosen == ITEM_HEADSET_MIC || !hds->Headset_mic) { break; } if (privChosen == ITEM_RINGTONE) { EarphoneTest(0); } else if (privChosen == ITEM_MIC1) { PhoneMic_EarphoneLR_Loopback(MIC1_OFF); } else if (privChosen == ITEM_MIC2) { PhoneMic_EarphoneLR_Loopback(MIC2_OFF); } usleep(20000); HeadsetMic_EarphoneLR_Loopback(1, 1); privChosen = ITEM_HEADSET_MIC; break; case ITEM_PASS: case ITEM_FAIL: if (chosen == ITEM_PASS) { hds->mod->test_result = FTM_TEST_PASS; } else if (chosen == ITEM_FAIL) { hds->mod->test_result = FTM_TEST_FAIL; } exit = true; break; } if (exit) { hds->exit_thd = true; break; } } while (1); if (privChosen == ITEM_RINGTONE) { EarphoneTest(0); } if (privChosen == ITEM_MIC1) { PhoneMic_EarphoneLR_Loopback(MIC1_OFF); } if (privChosen == ITEM_MIC2) { PhoneMic_EarphoneLR_Loopback(MIC2_OFF); } if (privChosen == ITEM_HEADSET_MIC) { HeadsetMic_EarphoneLR_Loopback(0, 1); } pthread_join(hds->headset_update_thd, NULL); Common_Audio_deinit(); } return 0; }