Setcommstate fonksiyonundaki saçmalık

Başlatan z, 27 Mayıs 2015, 20:45:28

z

PC ile belli bir baud rate ile konuşmakta olan kartım, PC ile anlaşıp baudrate değerini değiştirmeye karar veriyor.

Gel gelelim windowsun bir fonksiyonu olan setcomstate ile baud rate değeri değiştirilirken normalde "1" de tuttuğum DTR pini "0"a çekiliyor.
Halbuki uygulamda Baud rate değişirken DTR pin konumunun değişmemesi gerekiyor.

Bu sorunu aşmanın bir yolu varmı?

Elmikiyle gerdeğe girince böyle oluyor işte.

http://edavies.me.uk/win32-serial-bug/
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

bocek

Şurada bir şeyler anlatılmış:

http://forums.codeguru.com/showthread.php?291244-Controlling-DTR-line-of-serial-port

Anlamam etmem ama DTR pini, DCB struct'ı içindeki fDtrControl değişkeni ile kontrol ediliyor galiba.
h_Port = CreateFile(m_PortName,GENERIC_READ |  GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);

GetCommState(h_Port,&m_dcb);

m_dcb->fDtrControl=DTR_CONTROL_ENABLE;

SetupComm(h_Port,4096,4096);
   
if (!SetCommState(h_Port,m_dcb))
{
    MessageBox("Open serial port failed"); 
    return 0;
}
1 ya da 0. işte 'bit'ün mesele..

z

O örnekte flow control için DTR pininin kullanılacağı belirtilmiş.

Bende flow control yok. DTR yi PC deki yazılımla istediğim zaman değiştiriyorum ve kartı resetlemeye yarıyor.

PC baud rate değerini değiştirince DTR pinini lowa çektiği için kartımı  resetlemiş oluyor.

Bu durum senaryoma ters düşüyor. PC baud değerini değiştirsin ve iletişime devam etsin istiyorum.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

bocek

Şurada bir çözüm getirilmiş gibi ama sizin işi çözer mi bilmiyorum.
https://codereview.qt-project.org/#/c/76735/

DTR sinyalini EscapeCommFunction() ile kontrol edin, DCB ile de diğer değişiklikleri yapın gibi bir şeyler söylüyor.
fDtrControl = DTR_CONTROL_DISABLE;
yapıp DTR sinyali gönderme işini de EscapeCommFunction() ile yapsanız nasıl olur (belki de zaten öyle yapıyorsunuz)?
1 ya da 0. işte 'bit'ün mesele..

z

Soft olarak Baudrate ayarlamaktan vazgeçtim. Belliki windows updatelerle falan ileride başım derde girebilir.

Reset rutininde jumper konumlarını okuyup baudrate ayarlamasını yapmaya karar verdim. 3 pinim bu iş için alıkonuldu ama en azından başım ağrımayacak.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com