Beispiel #1
0
int main()
{
    ALCdevice* device;
    ALint sample;
    void* buffer;
    void* audio_buffer;
    void* buffer_point;
    WAVPROP* wavp;
    WAVEHDR* wavheader;
    pthread_t tid;
    int i, j, final_size, err, counter;
    int ctl = 0;
    int threshold = 10000; /* Threshold of wave strength to be considered speaking */
    int buffersize = sizeof(WAVEHDR) + BUF_SIZE;

    struct curl_slist *headers = NULL;
    upload_init(headers);

    device = record_init(AL_FORMAT_MONO16, SPEED, FRAME_SIZE * 2);
    alcCaptureStart(device);

    while (1)
    {
        buffer = malloc(buffersize);
        audio_buffer = buffer + sizeof(WAVEHDR);
        buffer_point = audio_buffer;


        /* Wait until speek */
        counter = 0; 
        while(1)
        {
            alcCaptureSamples(device, (ALCvoid*)buffer_point, (ALCsizei)2000); 
            usleep((useconds_t)250000);
            //printf("%d\n", maxwav(buffer_point));
            if (maxwav(buffer_point) > threshold)
            {
                printf("%s\n", "Start recording");
                buffer_point += FRAME_SIZE;
                break;
            }
        }



        /* Record */
        for (i = 0; i < 239; i++)
        {    
            alcCaptureSamples(device, (ALCvoid*)buffer_point, (ALCsizei)2000); 
            usleep((useconds_t)250000);
            //printf("%d\n", maxwav(buffer_point));
            if (maxwav(buffer_point) < threshold)
            {
                counter += 1;
            }
            else
            {
                counter = 0;
            }
            if (counter > 3) /* 1 secs */
            {
                printf("%s\n", "Stop recording");
                i -= 2;
                break;
            }
            buffer_point += FRAME_SIZE;
            ctl = kbhit();
            if (ctl > 0)
            {
                printf("%s\n", "Key pressed");
                for (j=0; j < ctl; j++)
                {
                    getchar();
                }
                break;
            }
        }

        if (i == 239)
        {
            printf("%s\n", "Time up!");
            final_size = BUF_SIZE;
        }
        else
        {
            final_size = (i + 1) * FRAME_SIZE;
        }

        /* Finalize header */
        wavheader = (WAVEHDR*)buffer;
        wav_finalize_header(wavheader, final_size);

        /* upload it */
        wavp = (WAVPROP*)malloc(sizeof(WAVPROP));
        wavp->ptr = buffer;
        wavp->len = (size_t)(final_size + sizeof(WAVEHDR));
        err = pthread_create(&tid, NULL, upload, (void*)wavp);
        if (err != 0) {
		fprintf(stderr, "can't create thread: %s\n", strerror(err));
		exit(1);
	}

    }

    alcCaptureStop(device);
    record_clean(device);
    upload_clean(headers);

    return 0;
}
Beispiel #2
0
/*******************************************************************************
 * 恢复出厂值
 *******************************************************************************/
int f_mngRestoreFactory(unsigned *pMsg)
{
	func_t func;
	
    switch(((msg_t *)pMsg)->msgType) 
	{
	case CMSG_INIT:	
		OLED_cleanPages(0, 1);						//第1行
		DISP_menu_MNGSYS_line2nd_RestoreConfirm();	//恢复出厂?
		DISP_line3rd_menu_confirm(6);		/** (否(*)   是(#) ) **/
		g_u8pswordNO = 0;
		break;
	
	case CPMT_OVER:
		promptInit();
		break;
		
	case CFIGER_INIT:
    	g_tick = 0;
    	SetTimer_irq(&g_timer[0], TIMER_300MS, CFIGER_INIT);
		FP_INIT();
		break;
	
	case CMSG_FGINIT:				//完成指纹传感器初始化. 可以进行删除了
		g_tick = 0;
		SetTimer_irq(&g_timer[0], TIMER_3SEC, CMSG_FGINIT);
		
    	g_u8pswordNO = 0;
		//MFP_DelAll();		//删除全部指纹
		FP_DelAll();	//删除全部指纹
		break;
	
	case CMSG_FGOPFAIL:
		/** 如果清除全部指纹失败,意味着什么? 该怎么办? **/
		break;
						
	case CMSG_FGDERG:				//完成指纹模板删除
		promptInit();
    	g_tick = 0;
    	SetTimer_irq(&g_timer[0], TIMER_100MS, CMSG_INIT);
    	MFPOWER_OFF();				//指纹传感器断电
    	
		func.func = f_mngRestoreFactoryDone;
    	fstack_push(&g_fstack, &func);
		break;
		
	case CMSG_DKEY:							/** 检测到按键按下 **/		
		switch(((msg_t *)pMsg)->msgValue)
		{
		case CKEY_asterisk:
    		ledPrompt(10, TIMER_100MS);
    		promptInit();
    		beep();
    		
    		g_tick = 0;
    		SetTimer_irq(&g_timer[0], TIMER_1SEC, CMSG_INIT);
    		fstack_pop(&g_fstack);
			break;
			
    	case CKEY_pound:
    		ledPrompt(12, TIMER_100MS);
    		promptInit();
    		beep();
    		g_u8pswordNO++;
    		if(g_u8pswordNO == 1) {		//第n次按下#号
				DISP_menu_MNGSYS_line2nd_RestoreDoing();	//恢复出厂
				//DISP_menu_MNGSYS_line3rd_RestoreDoing(6);
				OLED_cleanPages(5, 5);
				DISP_menu_MNGSYS_line3rd_Waiting(6);	//请稍等
    			MFPOWER_ON();				//指纹传感器供电
    			
				psword_delAll();			//全部密码
				bluetoothEntry_delAll();	//全部蓝牙设备
				fingerTab_clean();	//指纹索引表
				
				record_clean();		//开锁记录
				
    			g_tick = 0;
    			SetTimer_irq(&g_timer[0], TIMER_300MS, CFIGER_INIT);
    		}
			break;
		default:					/** 可能的错误 **/
			break;
		}
	default:					/** 可能的错误 **/
		break;
	}
	return	0;
}