📄 new.cpp
字号:
//hAudioThread=(HANDLE)_beginthreadex(NULL,0,&HardWareVideoThread,NULL, 0, &HardWareAudioThreadID);
_beginthread(HardWareVideoThread,NULL,0);
bolAudioStart=TRUE;
time(&lngTimeBegin);
}
if (iMax==0 && bolFreqResponseFileOpen==FALSE && bolTxChecked==TRUE && bolRxChecked==FALSE)
{
MaxWaveLog.open("MaxWaveLog.dat");
bolFreqResponseFileOpen=TRUE;
//hAudioThread=(HANDLE)_beginthreadex(NULL,0,&BlueToothVideoThread,NULL, 0, &HardWareAudioThreadID);
_beginthread(BlueToothVideoThread,NULL,0);
bolAudioStart=TRUE;
time(&lngTimeBegin);
}
if (bolAudioStart==TRUE)
{
bolFreqResponseRecording=TRUE;
MaxWaveLog<<"Frequency: "<<(int)(iMax*FREQSCALE)<<" "
<<"Wave: "<<CurrentFreqWaveArray[iMax].Wave<<'\n';
}
time(&lngCurrentTime);
if (lngCurrentTime-lngTimeBegin>TESTTIME && bolFreqResponseRecording==TRUE)
{
MaxWaveLog.close();
bolFreqResponseFileOpen=FALSE;
bolFreqResponseRecording=FALSE;
WaitForSingleObject(hAudioThread,INFINITE);
CloseHandle(hAudioThread);
bolAudioStart=FALSE;
if (bolTxChecked==TRUE)
{
bolRxChecked=TRUE;
//lngRxWaveSum=0;
//iRxSum=0;
}
else
{
bolTxChecked=TRUE;
waveInit(hGlobalWnd,0,WAVE_FORMAT_PCM,1,44100,8); //声卡输入
//lngTxWaveSum=0;
//iTxSum=0;
}
SendDlgItemMessage(hGlobalWnd, IDL_FREQLIST, LB_ADDSTRING, 0, LPARAM("Frequency Wave") );
SendDlgItemMessage(hGlobalWnd,IDL_FREQLIST,LB_ADDSTRING,0,LPARAM("============"));
MaxWaveLogInput.open("MaxWaveLog.dat");
while (MaxWaveLogInput>>ListItem1>>ListItem2>>ListItem3 >>ListItem4 )
{
if(bolTxChecked==TRUE && bolRxChecked==FALSE)
{
if (atol(ListItem2)!=0)
{
iTxSum++;
lngTxWaveSum=lngTxWaveSum+atol(ListItem4);
}
}
if(bolTxChecked ==TRUE && bolRxChecked==TRUE)
{
if (atol(ListItem2)!=0)
{
iRxSum++;
lngRxWaveSum=lngRxWaveSum+atol(ListItem4);
}
}
sprintf(ListItem,"%s%s%s",ListItem2," ",ListItem4);
SendDlgItemMessage(hGlobalWnd, IDL_FREQLIST, LB_ADDSTRING, 0, LPARAM(ListItem) );
}
MaxWaveLogInput.close();
if (iTxSum>0)
if ((bolTxChecked==TRUE) &&( bolRxChecked==FALSE) && ((int)(lngTxWaveSum/iTxSum)>iTxMin) && ((int)(lngTxWaveSum/iTxSum)<iTxMax))
DisplayTxPass(hdc);
else
InvalidDisplayTxPass(hdc);
if (iTxSum>0)
if (bolRxChecked==TRUE && ((lngRxWaveSum/iRxSum)>iRxMin) && ((lngRxWaveSum/iRxSum)<iRxMax))
DisplayRxPass(hdc);
else
InvalidDisplayRxPass(hdc);
if(lngCurrentTime-lngTestBegin>TESTTIME*3)
DisplayTestFail(hdc);
}
//========================================
memcpy(prevFreqR,currFreqR,BUFSIZE*sizeof(double));
memcpy(prevFreqI,currFreqI,BUFSIZE*sizeof(double));
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
MSG msg;
HACCEL hAccelTable;
// Initialize global strings
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_NEW, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// Perform application initialization:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_NEW);
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
//
// FUNCTION: MyRegisterClass()
//
// PURPOSE: Registers the window class.
//
// COMMENTS:
//
// This function and its usage is only necessary if you want this code
// to be compatible with Win32 systems prior to the 'RegisterClassEx'
// function that was added to Windows 95. It is important to call this function
// so that the application will get 'well formed' small icons associated
// with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_NEW);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = CreateSolidBrush(BACKGROUND);
// wcex.hbrBackground = (HBRUSH)(16);
wcex.lpszMenuName = "";// (LPCSTR)IDC_NEW; // remove menu
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_NEW);
return RegisterClassEx(&wcex);
}
//
// FUNCTION: InitInstance(HANDLE, int)
//
// PURPOSE: Saves instance handle and creates main window
//
// COMMENTS:
//
// In this function, we save the instance handle in a global variable and
// create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // Store instance handle in our global variable
hWnd = CreateWindow(szWindowClass,
szTitle,
WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_CAPTION|WS_BORDER|WS_SYSMENU,
60,20,780,660,
NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
//
// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//
// PURPOSE: Processes messages for the main window.
//
// WM_COMMAND - process the application menu
// WM_PAINT - Paint the main window
// WM_DESTROY - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int i, wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
TCHAR szHello[MAX_LOADSTRING];
LoadString(hInst, IDC_CAPTION, szHello, MAX_LOADSTRING);
hGlobalWnd=hWnd;
hdc=GetDC(hWnd);
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
case IDB_START:
bolTestState=TRUE;
bolTxChecked=FALSE;
bolRxChecked=FALSE;
bolFreqResponseFileOpen=FALSE;
bolFreqResponseRecording=FALSE;
bolFreqResponseRecorded=FALSE;
CloseHandle(hAudioThread);
EnableWindow(hwndControl[IDB_START],FALSE);
waveInit(hWnd,2,WAVE_FORMAT_PCM,1,44100,8); //蓝牙输入
//waveInit(hWnd,0,WAVE_FORMAT_PCM,1,44100,8); //for debug 声卡输入
GetWindowPara();
time(&lngTestBegin);
InvalidDisplayTxPass(hdc);
InvalidDisplayRxPass(hdc);
InvalidTestFail(hdc);
SendDlgItemMessage(hGlobalWnd, IDL_FREQLIST, LB_RESETCONTENT, 0, NULL );
break;
case IDB_STOP:
bolTestState=FALSE;
MaxWaveLog.close();
bolTxChecked=TRUE;
bolRxChecked=TRUE;
CloseHandle(hAudioThread);
break;
case IDB_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_SETFOCUS :
SetFocus (hwndControl[idFocus]) ;
return 0 ;
case WM_CREATE:
hpenB = CreatePen(PS_SOLID, 0, BACKGROUND); //use the backgroud color to cover the latest line
hpenW = CreatePen(PS_SOLID, 0, RGB(153,102,51));//use hpenW to Draw axis
hpenG = CreatePen(PS_SOLID, 0, RGB(255,0,0)); //use the hpenG to Draw the Wave,Frequency chart
hpenG2= CreatePen(PS_SOLID, 0, RGB(0,0,255)); //use the hpenG2 to Draw Frequency-response
ParaInit(FREQCHECK,FREQCHECKTIME,WAVEVOLUME,TESTTIME);
SetSystemWaveVolume();
/*
hMod=LoadLibrary("fft");
if(!hMod)
{
MessageBox(hWnd,"LoadLibrary() failed.","Warning",MB_OK|MB_ICONWARNING);
}
else
{
pfnFft=(PFNFFT)GetProcAddress(hMod,"fft_double");
if(!pfnFft)
MessageBox(hWnd,"GetProcAddress() failed.","Warning",MB_OK|MB_ICONWARNING);
}
*/
pfnFft=(PFNFFT)fft_double;
//-----------
CreateWindow("STATIC","Frequency Checked:",WS_CHILD | WS_VISIBLE ,
530,30,140,25,hWnd,(HMENU)IDS_FREQ,hInst,NULL,);
CreateWindow("STATIC","Frequency Duration:",WS_CHILD | WS_VISIBLE ,
530,60,140,25,hWnd,(HMENU)IDS_FREQDURA,hInst,NULL,);
CreateWindow("STATIC","Wave Volume:",WS_CHILD | WS_VISIBLE,
530,90,140,25,hWnd,(HMENU)IDS_FREQDURA,hInst,NULL,);
CreateWindow("STATIC","Test Time :",WS_CHILD | WS_VISIBLE,
530,120,140,25,hWnd,(HMENU)IDS_TESTTIME,hInst,NULL,);
//-----------
hwndControl[IDE_FREQ]=CreateWindow("EDIT","",WS_CHILD| WS_BORDER | WS_VISIBLE |BS_PUSHBUTTON|WS_TABSTOP,
670,30,60,25,hWnd,(HMENU)IDE_FREQ,hInst,NULL,);
GlobalProc[IDE_FREQ]=(WNDPROC)SetWindowLong(hwndControl[IDE_FREQ],GWL_WNDPROC, (LONG) ControlProc) ;
hwndControl[IDE_FREQDURA]=CreateWindow("EDIT","",WS_CHILD | WS_BORDER | WS_VISIBLE |BS_PUSHBUTTON |WS_TABSTOP,
670,60,60,25,hWnd,(HMENU)IDE_FREQDURA,hInst,NULL,);
GlobalProc[IDE_FREQDURA]=(WNDPROC)SetWindowLong(hwndControl[IDE_FREQDURA],GWL_WNDPROC, (LONG) ControlProc) ;
hwndControl[IDE_WAVEVOLUME]=CreateWindow("EDIT","",WS_CHILD | WS_BORDER | WS_VISIBLE |BS_PUSHBUTTON |WS_TABSTOP,
670,90,60,25,hWnd,(HMENU)IDE_WAVEVOLUME,hInst,NULL,);
GlobalProc[IDE_WAVEVOLUME]=(WNDPROC)SetWindowLong(hwndControl[IDE_WAVEVOLUME],GWL_WNDPROC, (LONG) ControlProc) ;
hwndControl[IDE_TESTTIME]=CreateWindow("EDIT","",WS_CHILD | WS_BORDER | WS_VISIBLE |BS_PUSHBUTTON |WS_TABSTOP,
670,120,60,25,hWnd,(HMENU)IDE_TESTTIME,hInst,NULL,);
GlobalProc[IDE_TESTTIME]=(WNDPROC)SetWindowLong(hwndControl[IDE_TESTTIME],GWL_WNDPROC, (LONG) ControlProc) ;
//-----------
hwndControl[IDL_FREQLIST]=CreateWindow("LISTBOX","",WS_BORDER | WS_CHILD | WS_VISIBLE |
LBS_NOINTEGRALHEIGHT |WS_TABSTOP| LBS_HASSTRINGS | LBS_WANTKEYBOARDINPUT |
LBS_DISABLENOSCROLL | WS_HSCROLL | WS_VSCROLL ,
530,245,200,220,hWnd,(HMENU)IDL_FREQLIST,hInst,NULL,);
GlobalProc[IDL_FREQLIST]=(WNDPROC)SetWindowLong(hwndControl[IDL_FREQLIST],GWL_WNDPROC, (LONG) ControlProc) ;
hwndControl[IDL_DEVLIST]=CreateWindow("LISTBOX","",WS_BORDER | WS_CHILD | WS_VISIBLE |
LBS_NOINTEGRALHEIGHT |WS_TABSTOP| LBS_HASSTRINGS | LBS_WANTKEYBOARDINPUT |
LBS_DISABLENOSCROLL | WS_HSCROLL | WS_VSCROLL ,
530,155,200,80,hWnd,(HMENU)IDL_DEVLIST,hInst,NULL,);
//-----------
hwndControl[IDB_START]=CreateWindow("button","&Start Test",WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON |WS_TABSTOP|WS_TABSTOP |BS_DEFPUSHBUTTON,
530,480,80,35,hWnd,(HMENU)IDB_START,hInst,NULL,);
GlobalProc[IDB_START]=(WNDPROC)SetWindowLong(hwndControl[IDB_START],GWL_WNDPROC, (LONG) ControlProc) ;
hwndControl[IDB_STOP]=CreateWindow("button","Stop Test",WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON|WS_TABSTOP |BS_DEFPUSHBUTTON,
615,480,80,35,hWnd,(HMENU)IDB_STOP,hInst,NULL,);
GlobalProc[IDB_STOP]=(WNDPROC)SetWindowLong(hwndControl[IDB_STOP],GWL_WNDPROC, (LONG) ControlProc) ;
hwndControl[IDB_EXIT]=CreateWindow("button","&Exit",WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON|WS_TABSTOP |BS_DEFPUSHBUTTON,
700,480,70,35,hWnd,(HMENU)IDB_EXIT,hInst,NULL,);
GlobalProc[IDB_EXIT]=(WNDPROC)SetWindowLong(hwndControl[IDB_EXIT],GWL_WNDPROC, (LONG) ControlProc) ;
RrectIni();
rectDisplayFreq.left=10;
rectDisplayFreq.top=390;
rectDisplayFreq.right=rectDisplayFreq.left+1000;
rectDisplayFreq.bottom=rectDisplayFreq.top+20;
bolTestState=FALSE;
FillDevices();
SetWindowPara();
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
//horizon for Wave
hdc=GetDC(hWnd);
SelectObject(hdc, hpenW);
MoveToEx(hdc,10,WAVEHORIZON,NULL);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -