Potřebuji posílat na DTR a TXD (jsou na nich ledky) jedničky a nuly podle toho jak chci :)
Nevěděl by někdo co s tím? Googlim už asi 2 hodiny a nic ... v pondělí to musím být done a já už z toho jsem ....
Fórum › C / C++
Sériový port
A co třeba DTR a RTS - EscapeCommFunction() http://msdn.microsoft.com/en-us/library/aa363254(VS.85).aspx
Každopádně díky za předchozí pomoc
Teď mám nový problém
Mám kód, který zinicializuje komunikaci
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <tchar.h>
#include <assert.h>
/*
*
*/
int setUp() {
HANDLE hSerial;
hSerial = CreateFile("COM5",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if (hSerial == INVALID_HANDLE_VALUE) {
if (GetLastError() == ERROR_FILE_NOT_FOUND) {
//serial port does not exist. Inform user.
}
//some other error occurred. Inform user.
}
DCB dcbSerialParams = {0};
dcbSerialParams.DCBlength = sizeof (dcbSerialParams);
if (!GetCommState(hSerial, &dcbSerialParams)) {
//error getting state
}
// dcbSerialParams.BaudRate = CBR_19200;
dcbSerialParams.BaudRate = 1;
dcbSerialParams.ByteSize = 1;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = NOPARITY;
if (!SetCommState(hSerial, &dcbSerialParams)) {
//error setting serial port state
}
Ten funguje (na portu se opravdu něco děje).
A teď potřebuju poslat na DSR 1
Předpokládal jsem, že to udělá
dcbSerialParams.fDtrControl = DTR_CONTROL_DISABLE;
SetCommState(hSerial, &dcbSerialParams);
Ale nic to nedělá....
Kdybys věděl proč popř. co udělat aby to dělalo co chci, tak bys mi fakt moc pomohl.
Ze mě neznámého důvodu nejde poslat na RTS 1.
Tváří se to jako, že to funguje, ale nic to nedělá.
EscapeCommFunction(hSerial, SETRTS)
Jinak SetCommBreak funguje, ale tohle ne.
Není to někde potřeba donastavit.
Nevěděl by někdo kdo to zná co je s tím?
Moc by mi to pomohlo.
To Yety : no tezko uvidis nejakou zmenu, kdyz tam nic nemenis.. a jeste k tomu to muze probehnout velice rychle.. takze ani kdyby si menil tak toho moc neuvidis
Těch možností je spousta, můžeš začít třeba tím, že zkontroluješ návratovou hodnotu EscapeCommFunction, pak se podíváš, jestli máš povolené ovládání RTS (DCB), pak se můžeš podívat, jestli se ti RTS "nehýbe" s TXD, pak se můžeš podívat, jestli nemáš ošizený port, kde máš jenom TXD, RXD a zem :) atd.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Seriovy port v C — založil jatagan
Seriovy port v C — založil jatagan
Sériový/paralelní port — založil ZaZa
C++ a odesílání na sériový port — založil esmen
Java - seriovy port — založil martin
Moderátoři diskuze