Как быстрее всего запрограммировать пару команд отправки и приема по ком порту для POCKET PC! Подскажите пожалуйста. Какую среду разработки выбрать? с чего начать?! Есть команды AT и есть КПК IPAQ.
Здравствуйте, <Аноним>, Вы писали:
А>Как быстрее всего запрограммировать пару команд отправки и приема по ком порту для POCKET PC! Подскажите пожалуйста. Какую среду разработки выбрать? с чего начать?! Есть команды AT и есть КПК IPAQ.
Среду следует выбирать ту, которую лучше всего знаешь. Я использую EVC 4.0. В MSDN есть пример для работы с портом.
Вот как єто делаю я.
HANDLE m_hPort;
OpenPort()
{
DWORD dwError;
COMMTIMEOUTS CommTimeouts;
LPTSTR lpszPortName=TEXT("COM1:");
DCB PortDCB;
m_hPort = CreateFile (lpszPortName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if ( m_hPort == INVALID_HANDLE_VALUE )
{dwError = GetLastError (); return false;}
PortDCB.DCBlength = sizeof (DCB);
GetCommState (m_hPort, &PortDCB);
// Change the DCB structure settings.
PortDCB.BaudRate = 9600; // Current baud
PortDCB.fBinary = TRUE; // Binary mode; no EOF check
PortDCB.fParity = TRUE; // Enable parity checking.
PortDCB.fOutxCtsFlow = FALSE; // No CTS output flow control
PortDCB.fOutxDsrFlow = FALSE; // No DSR output flow control
PortDCB.fDtrControl = DTR_CONTROL_ENABLE;
// DTR flow control type
PortDCB.fDsrSensitivity = FALSE; // DSR sensitivity
PortDCB.fTXContinueOnXoff = TRUE; // XOFF continues Tx
PortDCB.fOutX = FALSE; // No XON/XOFF out flow control
PortDCB.fInX = FALSE; // No XON/XOFF in flow control
PortDCB.fErrorChar = FALSE; // Disable error replacement.
PortDCB.fNull = FALSE; // Disable null stripping.
PortDCB.fRtsControl = RTS_CONTROL_DISABLE;
// RTS flow control
PortDCB.fAbortOnError = FALSE; // Do not abort reads/writes on
// error.
PortDCB.ByteSize = 8; // Number of bits/bytes, 4-8
PortDCB.Parity = NOPARITY; // 0-4=no,odd,even,mark,space
PortDCB.StopBits = ONESTOPBIT; // 0,1,2 = 1, 1.5, 2
if (!SetCommState (m_hPort, &PortDCB))
{dwError = GetLastError ();return FALSE;}
GetCommTimeouts (m_hPort, &CommTimeouts);
CommTimeouts.ReadIntervalTimeout = MAXDWORD;
CommTimeouts.ReadTotalTimeoutMultiplier = 250;//250
CommTimeouts.ReadTotalTimeoutConstant = 0;//250
CommTimeouts.WriteTotalTimeoutMultiplier = 850;
CommTimeouts.WriteTotalTimeoutConstant = 950;
if (!SetCommTimeouts (m_hPort, &CommTimeouts))
{dwError = GetLastError (); return false;}
EscapeCommFunction (m_hPort, CLRIR);
return TRUE;
}
WritePort(LPCVOID lpBuffer, DWORD nWrite)
{
DWORD dwError, dwNumBytesWritten = 0;
if (!WriteFile (m_hPort, lpBuffer, nWrite, &dwNumBytesWritten, NULL))
dwError = GetLastError ();
return dwNumBytesWritten;
}
ReadPort(LPVOID lpBuffer, DWORD nRead)
{
DWORD dwError, dwNumBytesRead = 0;
if (!ReadFile (m_hPort, lpBuffer, nRead, &dwNumBytesRead, NULL))
dwError = GetLastError ();
return dwNumBytesRead;
}
... << RSDN@Home 1.2.0 alpha rev. 0>>
А вот чтобы окошко выпало и было написано что подключен COM PORT №1???? что нужно нафигачить?!
Что касательно .NET CF, то
using System.IO.Ports;
есть класс
SerialPort
Если надо очень просто, то можно так
string comPort = "COM1:";
string BaudRate = "4800";
SerialPort st = new SerialPort(comPort, Baudrate);
try
{
st.Open();
If( st.IsOpen() )
{
StreamReader sr = new StreamReader(st.BaseStream, System.Text.Encoding.UTF8); // или StreamWriter
// а потом используя перегруженные функции Read() и Write() делайте чего Вам там надо.
sr.Close();
st.Close();
}
else
{
MessageBox.Show("твое сообщение");
}
}
catch (Exception e)
{
//......
}
Одно замечание: строка "имя компорта" для Покетов должна заканчиваться на : (двоеточие!!!) Например:
COM1:
Здравствуйте, <Аноним>, Вы писали:
А>А вот чтобы окошко выпало и было написано что подключен COM PORT №1???? что нужно нафигачить?!
Если на MFC, то можна так:
AfxMessageBox(_T("подключен COM PORT №1"));

... << RSDN@Home 1.2.0 alpha rev. 0>>