2011-10-18 11 views
5

Üçüncü taraf kitaplıklarına baktığım için seri bağlantı noktasını kullanarak seri bağlantı noktasını doğru şekilde oluşturduğumu göremiyorum.Boost.asio kullanılarak işaret ve alan paritesi kullanılabilir mi?

Boost.asio'yu denemem önerildi, ancak örneklere baktığımızda, mark ve alan paritesini desteklemediği anlaşılıyor, bu doğru mu?

Mümkünse, boost.asio'da işaretleme ve alan eşitliği hakkında örnek kod gösterilebilir. 8 veri tabanı, 115220 baud hızı ve 1 durak biti kullanıyorum.

Yükseltme yapmak yerine kullanabileceğim linux üzerinde işaret ve boşluk eşitliğini destekleyen herhangi bir üçüncü taraf kitaplığı olan var mı?

cevap

5

Bu sorun hakkında çok iyi bir makale var here. En donanım içinde gerçekleştirilir, ancak özellikle

işaret ve boşluk parite

, POSIX standardında tanımlanan değildir. Unix/Linux termios kütüphanesinin manpage'i, bu iki parite modu hakkında tek bir kelime kaybetmez. (PARMRK MARK parite ile ilgisi yoktur unutmayın.)

Bu bence neden, bu seçenekler Boost.Asio uygulanmadı olduğunu.

birkaç çözüm önerilen vardır: Örneğin:

modu 8M1 (8 veri biti, Mark parite, 1 durdurma biti) 8N2 ile taklit edilebilir. Bir eşlik biti ve bir durdurma biti göndermek yerine, iki durma biti iletilir. Durma bitleri her zaman 1 (işaret biti), olduğundan, iki mod eşdeğerdir.

Bunlar sizin gereksinimlerinizle eşleşmiyorsa, seri bağlantı noktanızın yerel temsilini artırmaya devam edebilirsiniz. Dokümanlar :

switch (value_) 
    { 
    case none: 
    storage.c_iflag |= IGNPAR; 
    storage.c_cflag &= ~(PARENB | PARODD); 
    break; 
    case even: 
    storage.c_iflag &= ~(IGNPAR | PARMRK); 
    storage.c_iflag |= INPCK; 
    storage.c_cflag |= PARENB; 
    storage.c_cflag &= ~PARODD; 
    break; 
    case odd: 
    storage.c_iflag &= ~(IGNPAR | PARMRK); 
    storage.c_iflag |= INPCK; 
    storage.c_cflag |= (PARENB | PARODD); 
    break; 
    default: 
    break; 
    } 

Bence:

basic_serial_port::native_handle 

Get the native serial port representation. 

native_handle_type native_handle(); 
This function may be used to obtain the underlying representation of the serial port. This is intended to allow access to native serial port functionality that is not otherwise provided. 

kullanım bir fikir edinmek için linux üzerinde parite ile ilgisi kod

boost_1_45_0/boost/asio/serial_port_base.hpp 

de ve özellikle bir göz bayrağı ayarlamak için native_handle'u kullanmak istediğinizde:

(Neyse here göre) 210

Ayrıca vermek örnekler ben çalışmak için ve CMSPAR sistemimde tanımlanmamış ve çalışmıyor alamadım termios yapısı vardır wrong sequence of libserial received data

+0

görüyoruz. cevabınız için teşekkürler, şimdi java'da yapmam gerektiğini biliyorum :( – Skeith

+0

@Skeith - Bağlantıya bir göz atın - ekstra bir durdurma biti kullanarak Mark ve Space'e hem öykünebilirsiniz (Mark daha kolay) - Bu doğrudan Desteklenmeyen CMSPAR'lerle oynamaya gerek kalmadan Boost.Asio tarafından desteklenmektedir.BTW - Çekirdeğiniz desteklemiyorsa, geçiş dilleri yardımcı olacağından emin değilim. – Tom

+0

java'da out cihazıyla iletişim kurabilen fakat selefimiz tarafından inşa edilmiş bir programımız var. Mümkünse seri kodun C++ 'dan yeniden yazılması için büyük bir iş olacağından mümkünse seri kodu kesmeyi denemek istemedim, çünkü eksik olan tek şey linux için seri kod ama ben başka seçeneğim yok şimdi. – Skeith