Forum: D Programlama Dili RSS
onyx seri port kütüphanesini derlerken hata
erdem (Moderatör) #1
Üye Tem 2009 tarihinden beri · 981 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: onyx seri port kütüphanesini derlerken hata
https://github.com/nykytenko/onyx-serial

adresindeki kütüphaneyi kullanarak

import onyx.serial;
 
 
//module test.main;
 
void main()
{
        /* Create ports */
    auto port1 = OxSerialPort("/dev/ttyS1", 9600, "none", 10);
    auto port2 = OxSerialPort("/dev/ttyS2", 9600, "none", 10);
 
 
    port1.open;
    port2.open;
 
    ubyte[] data = [0x22, 0x33, 0xCC];
 
    port1.write(data);
 
    ubyte[] buf = port2.read(3);
 
    assert (buf == data);
 
    port1.close();
}

bu kodu derlemeye çalışıyorum. Ama bir sürü bağlayıcı hatası alıyorum.

$ dub
Performing "debug" build using dmd for x86.
onyx-config 2.0.4: target for configuration "library" is up to date.
onyx-serial 0.3.4: target for configuration "test" is up to date.
To force a rebuild of up-to-date targets, run again with --force.
Running ./bin/onyx-serial
onyx.serial.SerialPortSetupException@std/stdio.d(3969): Can't setup serial port (Input/output error)
source/onyx/serial.d:503 core.sys.posix.termios.termios onyx.serial.PosixImpl.getTermios() [0x80d01ef]
source/onyx/serial.d:473 void onyx.serial.PosixImpl.setFlags() [0x80d010f]
source/onyx/serial.d:406 void onyx.serial.PosixImpl.setup() [0x80cfed1]
source/onyx/serial.d:196 bool onyx.serial.OxSerialPort.open() [0x80cf8a7]
test/main.d:14 _Dmain [0x80d793f]
??:? _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZ9__lambda1MFZv [0x80e6f72]
??:? void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate()) [0x80e6ed5]
??:? void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll() [0x80e6f2e]
??:? void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate()) [0x80e6ed5]
??:? _d_run_main [0x80e6e5e]
??:? main [0x80d7a53]
??:? __libc_start_main [0x7cc4d2]
Program exited with code 1


Acaba neden olabilir?
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bence bağlayıcı ile ilgili değil. Program oluşuyor ve Running ./bin/onyx-serial satırında görüldüğü gibi işletiliyor bile... (Bu arada, dub oluşturduğu programı neden işletiyor acaba?)

Asıl sorun, tcgetattr() işlevi istendiği gibi çalışmıyor:

  https://github.com/nykytenko/onyx-serial/blob/master/sourc…

Bilmiyorum neden. Erişim hakkı filan mı?

Ali
erdem (Moderatör) #3
Üye Tem 2009 tarihinden beri · 981 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Evet haklısınız gerçekten de çalışıyormuş.

Şimdi şöyle bir örnek yapmaya çalışıyorum. Seri porta bir tane Arduino bağlı. Karşı tarafta da başka bir devre RF sinyalleri ile hava sıcaklığı ve nem bilgilerini kablosuz olarak iletiyor. Bilgisayara bağlı devre de bu verileri okuyor ve seri porta gönderiyor.

Screen programı ile bu verileri ekrana şu şekilde yazabiliyorum.

$ screen /dev/ttyACM0 9600

22.1942.20
22.1942.08
22.1642.13
22.1642.01
22.1642.01
22.1941.84
22.1941.72
22.0941.81

Programı da şu şekilde değiştirdim.

import onyx.serial;
import std.stdio;
 
void main()
{
 
    auto port1 = OxSerialPort("/dev/ttyACM0", 9600, "none", 10000);
 
    port1.open;
 
    ubyte[] veriler = port1.read(90,true);
 
    foreach(veri; veriler)
        write(cast(char)veri);
    writeln();
 
    port1.close();
 
}

Programın çıktısı da şu şekilde:

23
22.1941.60
22.1641.34
22.1641.34

Ama aralarında şöyle bir fark var. Screen programını çalıştırdığınızda bekliyor veri geldikçe ekrana yazıyor.

Yukardaki örnek program ise 90 byte okuyor. Bekliyor. En sona verileri yazıyor.

Acaba yukarıdaki programı da seri porta veri geldikçe yazacak şekilde nasıl değiştirebilirdik.

22.1942.20 şeklinde bir veri geldi ekrana yazsın. Sonra beklesin gibi.
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Birisi benzerini sormuş:

  http://stackoverflow.com/questions/7035526/read-serial-dat…

Oradan öğrendiğime göre Posix'te poll.h ve Linux'ta ek olarak epoll.h varmış. Bunların D ilintileri de var:

  /usr/include/dmd/druntime.2.0.67/import/core/sys/posix/poll.d
  /usr/include/dmd/druntime.2.0.67/import/core/sys/linux/epoll.d

Bundan ötesini bilmiyorum. Kolay gelsin. ;)

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-22, 06:51:43 (UTC -08:00)