Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}