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; }
/******************************************************************************* * 恢复出厂值 *******************************************************************************/ 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; }