串口类 http://www.codeproject.com/KB/system/serial.aspx
枚举计算机串口的代码
1: int Common::GetSystemPorts(wxArrayString& pNameList, wxArrayString& pPortList)
2: {
3: CRegKey RegKey;
4: int nCount = 0;
5:
6: if(RegKey.Open(HKEY_LOCAL_MACHINE, _T("Hardware\\DeviceMap\\SerialComm")) == ERROR_SUCCESS)
7: {
8: while(true)
9: {
10: wchar_t ValueName[_MAX_PATH];
11: unsigned char ValueData[_MAX_PATH];
12: DWORD nValueSize = _MAX_PATH;
13: DWORD nDataSize = _MAX_PATH;
14: DWORD nType;
15:
16: if(::RegEnumValue(HKEY(RegKey), nCount, ValueName, &nValueSize, NULL, &nType, ValueData, &nDataSize) == ERROR_NO_MORE_ITEMS)
17: {
18: break;
19: }
20:
21: pNameList.Add( wxString(ValueName) );
22:
23: char buf[_MAX_PATH];
24: int i = 0;
25: for (;ValueData[2*i] != 0;i++)
26: {
27: buf[i] = ValueData[2*i];
28: }
29: buf[i]=0;
30:
31: pPortList.Add(wxString::FromAscii(buf));
32:
33: nCount++;
34: }
35: }
36:
37: return nCount;
38: }
打开串口
1: void 串口例子MainFrame::m_choice1OnChoice( wxCommandEvent& event )
2: {
3: // TODO: Implement m_choice1OnChoice
4: if(m_choice1->GetSelection() > -1)
5: {
6: Timer1.Stop();
7:
8: if (m_Serial.IsOpen())
9: {
10: m_Serial.Close();
11: }
12: if (CSerial::CheckPort(m_choice1->GetStringSelection().c_str()) ==CSerial::EPortAvailable)
13: {
14: m_Serial.Open(m_choice1->GetStringSelection().c_str());
15: m_Serial.Setup(CSerial::EBaud9600, CSerial::EData8,CSerial::EParNone, CSerial::EStop1);
16:
17: Timer1.Start();
18: }
19: else
20: {
21: m_choice1->SetSelection(-1);
22: }
23: }
24: }
串口读
1: void 串口例子MainFrame::OnTimer1Trigger(wxTimerEvent& event)
2: {
3: char buf[4096];
4: DWORD len = 0;
5:
6: m_Serial.Read(buf,sizeof(buf),&len);
7: while (len > 0)
8: {
9: buf[len] = '\0';
10: m_richText1->AppendText(wxString::FromAscii(buf));
11:
12: m_Serial.Read(buf,sizeof(buf),&len);
13: }
14: }
串口写
1: //发送
2: void 串口例子MainFrame::m_button4OnButtonClick( wxCommandEvent& event )
3: {
4: // TODO: Implement m_button4OnButtonClick
5: char buf[4096];
6: int len = ty::Common:: StringToCharPtr(buf,m_richText2->GetValue());
7: m_Serial.Write(buf,len);
8: }