WinCE之路:3.串口的基本操作,算是一个最简单的调试软件吧
来源:互联网 发布:路由器上mac是什么意思 编辑:程序博客网 时间:2024/06/06 04:14
这个是基于Wince的串口基本操作,上面控件显示的接收的数据,下面用控件来进行发送数据,代码在显示数据时应该还不完善,显示格式有点问题。
LONG DoInit(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam){g_hSendEvent = CreateEvent (NULL, FALSE, FALSE, NULL);Edit_SetText(GetDlgItem(hDlg,ID_SENDTEXT),TEXT("AT\r\n"));TCHAR szDev[32] = TEXT("COM2:");InitCommunication (szDev);hwnd = hDlg;return TRUE;}LONG OnClose(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam){EndDialog(hDlg,0);return TRUE;}HANDLE InitCommunication ( LPTSTR pszDevName) {DCB dcb;TCHAR szDbg[128];COMMTIMEOUTS cto;HANDLE hLocal;DWORD dwTStat;hLocal = hComPort;hComPort = INVALID_HANDLE_VALUE;if (hLocal != INVALID_HANDLE_VALUE)CloseHandle (hLocal); hLocal = CreateFile (pszDevName, GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0, NULL);if (hLocal != INVALID_HANDLE_VALUE) {// 配置串口dcb.DCBlength = sizeof (dcb);GetCommState (hLocal, &dcb);dcb.BaudRate = nSpeed;dcb.fParity = FALSE;dcb.fNull = FALSE;dcb.StopBits = ONESTOPBIT;dcb.Parity = NOPARITY;dcb.ByteSize = 8;SetCommState (hLocal, &dcb);// 设定超时cto.ReadIntervalTimeout = 0;cto.ReadTotalTimeoutMultiplier = 0;cto.ReadTotalTimeoutConstant = 0;cto.WriteTotalTimeoutMultiplier = 0;cto.WriteTotalTimeoutConstant = 0;SetCommTimeouts (hLocal, &cto);// 启动读取线程hComPort = hLocal;if (!GetExitCodeThread (hReadThread, &dwTStat) ||(dwTStat != STILL_ACTIVE)) {hReadThread = CreateThread (NULL, 0, ReadThread, NULL,0, &dwTStat);if (hReadThread)CloseHandle (hReadThread);hThread = CreateThread (NULL, 0, SendThread, NULL, 0, NULL);if (hThread)CloseHandle (hThread);}} else {wsprintf (szDbg, TEXT ("Couldn\'t open port %s. rc=%d\r\n"),pszDevName, GetLastError());MessageBox(NULL,szDbg,TEXT("message"),MB_OK | MB_ICONERROR);}return hComPort;}LONG OnInitComm(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam){int i =0;TCHAR szDev[32];HWND hlist = GetDlgItem(hDlg,IDC_LIST1);ListBox_GetCurSel(hDlg,i);if (i >= 0){ListBox_GetText(hlist,i,szDev);InitCommunication (szDev);}return TRUE;}LONG OnSendComm(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam){ SetEvent (g_hSendEvent);return TRUE;}DWORD WINAPI SendThread (PVOID pArg) {HWND hwndSText;int rc;DWORD cBytes;WCHAR szText[TEXTSIZE];char szAnsi[TEXTSIZE];size_t siz;//hWnd = (HWND)pArg;hwndSText = GetDlgItem (hwnd, ID_SENDTEXT);while (1) {rc = WaitForSingleObject (g_hSendEvent, INFINITE);if (rc == WAIT_OBJECT_0) {if (!fContinue)break;// 获得发送内容并转换成asci码GetWindowText (hwndSText, szText, dim(szText));StringCchCat (szText, dim(szText), TEXT ("\r\n"));wcstombs_s (&siz, szAnsi, sizeof (szAnsi), szText, _TRUNCATE);// 写入到串口rc = WriteFile(hComPort,szAnsi,strlen(szAnsi),&cBytes,0);//rc = WriteFile (hComPort, szText, //lstrlen (szText)*sizeof (TCHAR),&cBytes, 0);if (!rc) {// 如果写入失败,提示错误信息wsprintf (szText, TEXT ("Send failed rc=%d\r\n"), GetLastError());DWORD dwErr = 0;COMSTAT Stat;if (ClearCommError (hComPort, &dwErr, &Stat)) {MessageBox(NULL,szText,TEXT("message"),0);}}} elsebreak;}return 0;}DWORD WINAPI ReadThread (PVOID pArg) {DWORD cBytes, i;WCHAR szText[TEXTSIZE];char szAnsi[TEXTSIZE];size_t siz;HWND hlist = GetDlgItem(hwnd,IDC_LIST1);while (fContinue) {for (i = 0; i < sizeof (szAnsi)-1; i++) {while (!ReadFile (hComPort, &szAnsi[i], 1, &cBytes, 0))if (hComPort == INVALID_HANDLE_VALUE)return 0;if (szAnsi[i] == '\0') {szAnsi[i+1]='\n';break;}}mbstowcs_s (&siz, szText, dim (szText), szAnsi, _TRUNCATE);ListBox_InsertString(hlist,0,szText);}return 0;}
0 0
- WinCE之路:3.串口的基本操作,算是一个最简单的调试软件吧
- Wince的调试串口修改
- 利用 PROTEUS 软件调试串口通信最简单实用的方法
- 虚拟串口软件和串口调试助手的简单使用
- WinCE中串口通讯的调试方法----串口分离软件的使用
- WinCE中串口通讯的调试方法(虚拟串口软件 Serial Splitter Mobile)
- [软件调试----读书笔记]WinDBG中Command窗口最基本的操作
- WinCE中串口通讯的调试方法
- WinCE下串口蓝牙模块的调试
- WinCE下串口蓝牙模块的调试
- 最基本的查看串口
- 今天用GTK写的一个界面,挺简单的。算是我的入门之作吧。
- wince的调试串口作为普通串口使用
- 修改SMDK6410的调试串口为普通串口(wince系统)
- 修改SMDK6410的调试串口为普通串口(wince系统)
- 修改SMDK6410的调试串口为普通串口(wince系统)
- 修改SMDK6410的调试串口为普通串口(wince系统)
- wince的调试串口作为普通串口使用
- 线程同步题目
- Python测试基础教程
- Objective-C在ARC下结合GCD的单例模式和宏模版
- ZOJ-1061
- 黑马程序员——java集合中的ArrayList和LinkedList
- WinCE之路:3.串口的基本操作,算是一个最简单的调试软件吧
- ‘goto into protected scope’ error
- UITableView的多个UITextField时,有的被键盘挡住怎么解决
- iOS自定义的UISwitch按钮
- USACO 1.1 Your Ride Is Here (ride)
- 黄聪:搜索引擎的工作原理系列视频教程1.0
- NVelocity标签设置缓存的解决方案
- [CSS] 当多个CSS文件对同一个元素属性进行设置,会发生什么?
- C++Primer(第五版)学习笔记