static void * Audio_Record_thread(void *mPtr) { struct mVibrator *hds = (struct mVibrator *)mPtr; ALOGD(TAG "%s: Start", __FUNCTION__); usleep(100000); bool dumpFlag = 0; // read_preferred_recorddump() = 0 // dumpFlag=true;//for test int magLower = 0,magUpper = 0; //read_preferred_magnitude(hds->i4OutputType,&magUpper,&magLower); //int freqOfRingtone = read_preferred_ringtone_freq(); magLower = 1000; magUpper = 1000000000; int freqOfRingtone = 200; int lowFreq = freqOfRingtone * (1-0.1); int highFreq = freqOfRingtone * (1+0.1); short pbuffer[8192]={0}; short pbufferL[4096]={0}; short pbufferR[4096]={0}; unsigned int freqDataL[3]={0},magDataL[3]={0}; unsigned int freqDataR[3]={0},magDataR[3]={0}; int checkCnt = 0; uint32_t samplerate; return_data.vibrator.freq = 0; return_data.vibrator.ampl = 0; recordInit(hds->recordDevice, &samplerate); while (1) { memset(pbuffer,0,sizeof(pbuffer)); memset(pbufferL,0,sizeof(pbufferL)); memset(pbufferR,0,sizeof(pbufferR)); int readSize = readRecordData(pbuffer,8192*2); int i; for(i = 0 ; i < 4096 ; i++) { pbufferL[i] = pbuffer[2 * i]; pbufferR[i] = pbuffer[2 * i + 1]; } if(dumpFlag) { char filenameL[]="/data/record_dataL.pcm"; char filenameR[]="/data/record_dataR.pcm"; FILE * fpL= fopen(filenameL, "wb+"); FILE * fpR= fopen(filenameR, "wb+"); if(fpL!=NULL) { fwrite(pbufferL,readSize/2,1,fpL); fclose(fpL); } if(fpR!=NULL) { fwrite(pbufferR,readSize/2,1,fpR); fclose(fpR); } } memset(freqDataL,0,sizeof(freqDataL)); memset(freqDataR,0,sizeof(freqDataR)); memset(magDataL,0,sizeof(magDataL)); memset(magDataR,0,sizeof(magDataR)); ApplyFFT256(samplerate,pbufferL,0,freqDataL,magDataL); ApplyFFT256(samplerate,pbufferR,0,freqDataR,magDataR); /*int j; for(j = 0;j < 3 ;j ++) { ALOGD("freqDataL[%d]:%d,magDataL[%d]:%d",j,freqDataL[j],j,magDataL[j]); ALOGD("freqDataR[%d]:%d,magDataR[%d]:%d",j,freqDataR[j],j,magDataR[j]); }*/ if (((freqDataL[0] <= highFreq && freqDataL[0] >= lowFreq) && (magDataL[0] <= magUpper && magDataL[0] >= magLower))&&((freqDataR[0] <= highFreq && freqDataR[0] >= lowFreq) && (magDataR[0] <= magUpper && magDataR[0] >= magLower))) { checkCnt ++; if(checkCnt >= 5) { snprintf(hds->info + strlen(hds->info), sizeof(hds->info) - strlen(hds->info), "Check freq pass.\n"); ALOGD(" @ info : %s",hds->info); break; } } else checkCnt = 0; if (hds->exit_thd){ break; } } return_data.vibrator.freq = freqDataL[0]; return_data.vibrator.ampl = magDataL[0]; ALOGD(TAG "VIBRATOR FFT: FreqL = %d, FreqR = %d, AmpL = %d, AmpR = %d", freqDataL[0], freqDataR[0], magDataL[0], magDataR[0]); ALOGD(TAG "%s: Stop", __FUNCTION__); pthread_exit(NULL); // thread exit return NULL; }
static void *Audio_Record_thread(void *mPtr) { struct headset *hds = (struct headset *)mPtr; ALOGD(TAG "%s: Start", __FUNCTION__); usleep(100000); bool dumpFlag = read_preferred_recorddump(); // bool dumpFlag = true;//for test int magLower = 0, magUpper = 0; read_preferred_magnitude(&magUpper, &magLower); int lowFreq = 1000 * (1 - 0.1); //1k int highFreq = 1000 * (1 + 0.1); short pbuffer[8192] = {0}; short pbufferL[4096] = {0}; short pbufferR[4096] = {0}; unsigned int freqDataL[3] = {0}, magDataL[3] = {0}; unsigned int freqDataR[3] = {0}, magDataR[3] = {0}; int checkCnt = 0; uint32_t samplerate = 0; // headsetLR: Phone level test; headset: Non-Phone level test. return_data.headsetL.freqL = return_data.headsetR.freqL = return_data.headset.freqL = freqDataL[0]; return_data.headsetL.freqR = return_data.headsetR.freqR = return_data.headset.freqR = freqDataR[0]; return_data.headsetL.amplL = return_data.headsetR.amplL = return_data.headset.amplL = magDataL[0]; return_data.headsetL.amplR = return_data.headsetR.amplR = return_data.headset.amplR = magDataR[0]; recordInit(hds->recordDevice, &samplerate); while (1) { memset(pbuffer, 0, sizeof(pbuffer)); memset(pbufferL, 0, sizeof(pbufferL)); memset(pbufferR, 0, sizeof(pbufferR)); int readSize = readRecordData(pbuffer, 8192 * 2); for (int i = 0 ; i < 4096 ; i++) { pbufferL[i] = pbuffer[2 * i]; pbufferR[i] = pbuffer[2 * i + 1]; } if (dumpFlag) { char filenameL[] = "/data/record_headset_dataL.pcm"; char filenameR[] = "/data/record_headset_dataR.pcm"; FILE *fpL = fopen(filenameL, "wb+"); FILE *fpR = fopen(filenameR, "wb+"); if (fpL != NULL) { fwrite(pbufferL, readSize / 2, 1, fpL); fclose(fpL); } if (fpR != NULL) { fwrite(pbufferR, readSize / 2, 1, fpR); fclose(fpR); } } memset(freqDataL, 0, sizeof(freqDataL)); memset(freqDataR, 0, sizeof(freqDataR)); memset(magDataL, 0, sizeof(magDataL)); memset(magDataR, 0, sizeof(magDataR)); ApplyFFT256(samplerate, pbufferL, 0, freqDataL, magDataL); ApplyFFT256(samplerate, pbufferR, 0, freqDataR, magDataR); for (int i = 0; i < 3 ; i ++) { SXLOGV("%d.freqDataL[%d]:%d,magDataL[%d]:%d", i, i, freqDataL[i], i, magDataL[i]); SXLOGV("%d.freqDataR[%d]:%d,magDataR[%d]:%d", i, i, freqDataR[i], i, magDataR[i]); } if (hds->isPhoneTest) { if (headset_phonetest_state == 0) // CH1 { //CH1 Log return_data.headsetL.freqL = freqDataL[0]; return_data.headsetL.amplL = magDataL[0]; return_data.headsetL.freqR = freqDataR[0]; return_data.headsetL.amplR = magDataR[0]; if ((freqDataL[0] <= highFreq && freqDataL[0] >= lowFreq) && (magDataL[0] <= magUpper && magDataL[0] >= magLower)) { checkCnt ++; if (checkCnt >= 5) { ALOGD("[Headset-L] freqDataL:%d,magDataL:%d,freqDataR:%d,magDataR:%d", freqDataL[0], magDataL[0], freqDataR[0], magDataR[0]); checkCnt = 0; } } else { checkCnt = 0; } } else if (headset_phonetest_state == 1) // CH2 { if ((freqDataR[0] <= highFreq && freqDataR[0] >= lowFreq) && (magDataR[0] <= magUpper && magDataR[0] >= magLower)) { checkCnt ++; if (checkCnt >= 5) { ALOGD("[Headset-R] freqDataL:%d,magDataL:%d,freqDataR:%d,magDataR:%d", freqDataL[0], magDataL[0], freqDataR[0], magDataR[0]); snprintf(hds->info, sizeof(hds->info), "Check freq pass.\n"); ALOGD(" @ info : %s", hds->info); break; } } else { checkCnt = 0; } } else { break; } } else // Non Phone level test { if (((freqDataL[0] <= highFreq && freqDataL[0] >= lowFreq) && (magDataL[0] <= magUpper && magDataL[0] >= magLower)) && ((freqDataR[0] <= highFreq && freqDataR[0] >= lowFreq) && (magDataR[0] <= magUpper && magDataR[0] >= magLower))) { checkCnt ++; if (checkCnt >= 5) { snprintf(hds->info, sizeof(hds->info), "Check freq pass.\n"); ALOGD(" @ info : %s", hds->info); break; } } else { checkCnt = 0; } if (hds->exit_thd) { break; } } } // Log and ATA Return if (hds->isPhoneTest) { //CH2 Log return_data.headsetR.freqL = freqDataL[0]; return_data.headsetR.freqR = freqDataR[0]; return_data.headsetR.amplL = magDataL[0]; return_data.headsetR.amplR = magDataR[0]; ALOGD(TAG "ATA Return Data[Headset-L]: [Mic1]Freq = %d, Amp = %d, [Mic2]Freq = %d, Amp = %d", return_data.headsetL.freqL, return_data.headsetL.amplL, return_data.headsetL.freqR, return_data.headsetL.amplR); ALOGD(TAG "ATA Return Data[Headset-R]: [Mic1]Freq = %d, Amp = %d, [Mic2]Freq = %d, Amp = %d", return_data.headsetR.freqL, return_data.headsetR.amplL, return_data.headsetR.freqR, return_data.headsetR.amplR); } else { return_data.headset.freqL = freqDataL[0]; return_data.headset.freqR = freqDataR[0]; return_data.headset.amplL = magDataL[0]; return_data.headset.amplR = magDataR[0]; ALOGD(TAG "ATA Return Data: FreqL = %d, FreqR = %d, AmpL = %d, AmpR = %d", return_data.headset.freqL, return_data.headset.freqR, return_data.headset.amplL, return_data.headset.amplR); } ALOGD(TAG "%s: Stop", __FUNCTION__); pthread_exit(NULL); // thread exit return NULL; }
static bool matv_auto_check_iv(void *priv) { struct mMATV *mc = (struct mMATV *)priv; struct itemview *iv = mc->iv; struct statfs stat; matv_ch_entry ch_ent; int ch_candidate = 0; int status; bool return_value = false; bool audio_check = true; bool preview_check = true; int checkpass_cnt = 0; int chkcnt = 0; int i = 0; uint32_t samplerate; int mAutoLockFreqTest = matv_read_preferred_para("mAutoLockFreqTest");; int mAutoLockFreq = matv_read_preferred_para("mAutoLockFreq"); int mAutoLockCountry = matv_read_preferred_para("mAutoLockCountry"); LOGD(TAG "%s: Start.\n", __FUNCTION__); if((mAutoLockFreqTest > 0) && (mAutoLockFreq !=0)) { if (matv_ata_lockstatus(mAutoLockFreq, mAutoLockCountry) != 0) { LOGD(TAG "%s: lock freq %d, country %d ok!!!!", __FUNCTION__, mAutoLockFreq, mAutoLockCountry); ///return_value = true; } else { LOGD(TAG "%s: lock freq %d, country %d fail!!!!", __FUNCTION__, mAutoLockFreq, mAutoLockCountry); return return_value; } } matv_ata_avpatternout(); #ifdef ANALOG_AUDIO matv_set_chipdep(190, 3); //Turn on analog audio #endif iv->redraw(iv); ///system("rm /data/record_atv_dataL.pcm"); ///system("rm /data/record_atv_dataR.pcm"); //--> mATV audio path matv_audio_path(true); Audio_enable = true; LOGD(TAG "%s: Start video\n", __FUNCTION__); #ifdef ANALOG_AUDIO recordInit(MATV_ANALOG, &samplerate); #else recordInit(MATV_I2S, &samplerate); #endif usleep(300 * 1000); ///recordOpen(); short pbuffer[8192]={0}; for(int recint = 0; recint <100; recint++) readRecordData(pbuffer,8192*2); while (chkcnt < 3) { preview_check = true; audio_check = true; matv_preview_start(); usleep(300 * 1000); LOGD(TAG "matv_capture_start %d\n", chkcnt); short pbufferL[4096]={0}; short pbufferR[4096]={0}; unsigned int freqDataL[3]={0},magDataL[3]={0}; unsigned int freqDataR[3]={0},magDataR[3]={0}; memset(pbuffer, 0, 8192*2); int readSize = readRecordData(pbuffer,8192*2); LOGD(TAG "matv_capture_start_audio %d\n", chkcnt); for(int i = 0 ; i < 4096 ; i++) { pbufferL[i] = pbuffer[2 * i]; pbufferR[i] = pbuffer[2 * i + 1]; } #if 0 LOGD(TAG "matv_capture_start3 %d\n", chkcnt); char filenameL[]="/data/record_atv_dataL.pcm"; char filenameR[]="/data/record_atv_dataR.pcm"; FILE * fpL= fopen(filenameL, "wb+"); FILE * fpR= fopen(filenameR, "wb+"); if(fpL!=NULL) { fwrite(pbufferL,readSize/2,1,fpL); fclose(fpL); } if(fpR!=NULL) { fwrite(pbufferR,readSize/2,1,fpR); fclose(fpR); } #endif memset(freqDataL,0,sizeof(freqDataL)); memset(freqDataR,0,sizeof(freqDataR)); memset(magDataL,0,sizeof(magDataL)); memset(magDataR,0,sizeof(magDataR)); #ifdef ANALOG_AUDIO ApplyFFT256(samplerate,pbufferL,0,freqDataL,magDataL); ApplyFFT256(samplerate,pbufferR,0,freqDataR,magDataR); #else ApplyFFT256(samplerate,pbufferL,0,freqDataL,magDataL); ApplyFFT256(samplerate,pbufferR,0,freqDataR,magDataR); #endif LOGD(TAG "matv_capture_audio fre L %d H %d\n", freqDataL[0], freqDataR[0] ); if (((freqDataL[0] > 1100) || (freqDataL[0] < 900)) || ((freqDataR[0] > 1100) || (freqDataR[0] < 900))) { audio_check = false; break; } preview_check = matv_capture_check(); matv_preview_stop(); chkcnt++; int mDisaleImageTest = matv_read_preferred_para("mDisaleImageTest"); if(mDisaleImageTest > 0) { preview_check = true; LOGD(TAG "matv mDisaleImageTest, skip it "); } if ((preview_check == true) && (audio_check == true)) { checkpass_cnt++; } LOGD(TAG "matv_checking chkcnt %d, prev_ret %d aud_ret %d ", chkcnt, preview_check, audio_check); if (checkpass_cnt >= 2) { return_value = true; break; } } Audio_enable = false; ///recordClose(); LOGD(TAG "%s: stop video", __FUNCTION__); matv_ata_avpatternclose(); matv_audio_path(false); matv_update_iv_thread_exit: LOGD(TAG "%s: matv_test_result, checkpass_cnt %d return value %d", __FUNCTION__, checkpass_cnt, return_value); return return_value; }