HPC.ru lite - Все форумы
Форум: Программирование для КПК
Тема: Отличия в работе с ком портом в PC и PPC

[Ответить]
Евгений_С [09.07.2003 18:13] Отличия в работе с ком портом в PC и PPC:
Добрый день.
Собственно сабж.
Дело в том, что у меня есть некое устройство, с которого надо считать данные на PPC. Я написал класс для работы с этим устройством(на EVC), но проблема в том, что если я через этот класс работаю на ПК (программа скомпилированна на VC++ 6.0), то все работает нормально, а вот после компиляции на EVC ничего не работает...

Таймауты и структуру DCB вроде устанавливаю коректно, но увы

Может у PPC есть какие нибуть особенности (за исключением отсутствия асихронного чтения/записи) ?

Вот куски кода установки параметров порта

bool CComPort::Connect()
{
if (Connected()) return true;
m_hPort = CreateFile(m_PortName,GENERIC_READ|GENERIC_WRITE,0,0,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if (Connected())
{
COMMTIMEOUTS tm;
tm.ReadIntervalTimeout=1;
tm.ReadTotalTimeoutConstant=1;
tm.ReadTotalTimeoutMultiplier=1;
tm.WriteTotalTimeoutConstant=10;
tm.WriteTotalTimeoutMultiplier=0;
if (SetCommTimeouts(m_hPort,&tm))
return true;
else
Disconnect();
}
return false;
}

bool CComPort::SetDCB(DCB & dcb)
{
return (Connected() && SetCommState(m_hPort,&dcb));
}

// Multical - наследник CComPort

bool Multical::SetReadParams()
{
if (!Connected()) return false;
DCB dcb;
ZeroMemory(&dcb,sizeof(DCB));
dcb.ByteSize = 7;
dcb.DCBlength=sizeof(DCB);
dcb.fBinary=true;
dcb.fParity=true;
dcb.Parity=EVENPARITY;
dcb.fRtsControl=RTS_CONTROL_ENABLE;
dcb.StopBits=TWOSTOPBITS;
dcb.fDtrControl=DTR_CONTROL_ENABLE;
dcb.BaudRate = 1200;
return SetDCB(dcb);
}

Примечание: таймауты такие маленькие потому что я в цикле читаю

int CComPort::ReadData(void * buf, int len)
{
char * ch = (char *)buf;
if (!Connected()||(len<0))
return -1;
DWORD t = GetTickCount(), Readed = 0;
DWORD NotReaded=(DWORD)len;
while ((GetTickCount() - t) < (DWORD)m_InputTimeout)
{
ReadFile(m_hPort,ch,NotReaded,&Readed,0);
if (Readed!=0)
{
ch=ch+Readed;
NotReaded=NotReaded-Readed;
if (NotReaded==0) return len;
t=GetTickCount();
}
}
return (len-NotReaded);
}

ЗЫ PPC - это MITAC MIO 338
Theta [09.07.2003 20:30] :
Попробуй по каждому поводу выводить окошко с ключевой информацией. Может быть найдёшь, что какие-то вещи не удалось проинициализировать. Попробуй создать лог (в файл) с трассировкой. Что конкретно не работает?
Евгений_С [09.07.2003 21:54] :
Нет, все функции работают, запрос устройству отправляется просто оно(устройство) не отвечает и все...
Theta [10.07.2003 12:50] :
Тогда можно подключить КПК к обычному компу и запустить на нём терминалку. Возможно просто провод не подходящий.
Евгений_С [10.07.2003 21:46] :
С проводом все в порядке, через него с другого устройства все нормально считывается...
В принципе, сначало грешили на питание. Там на конце провода оптоголовка висит, которая некий ток с PPC потребляет, но через эту же оптоголовку с другого устройства все читается

Да, "другое устройство" - это устройство друго типа, хотя и очень похожего на проблемное устройство..
Евгений_С [30.07.2003 21:21] :
проблема решена.
Если кому интресно(чем черт не шутит ), дело было в аппаратной проблемме.. Как известно сом порт имеет напряжние для лог. нуля +3-+12В для лог единице -3 - -12В. Но это в теории, но приктике у нас всегда считали что напряжние на порте -12 - +12В и все всегда работало , но это на десктопе.. А вот КПК как оказалость выдают только 6В.. У нас этого напряжения нехватало чтобы отпереть какой то там диод, ну и в результате нефига не работало...
Так что разработчики устройств - будте внимательны!!!!
[Ответить]