abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 01:11 | Komunita

Před třemi týdny Mozilla.cz představila projekt Photon. Cílem tohoto projektu je návrh a implementace nového vzhledu Firefoxu. Včera zveřejnila první náhled vzhledu Photon. Práce na projektu Photon jsou rozděleny do pěti týmů, které celkem čítají 19 lidí. Zaměřují se na zlepšení prvního spuštění Firefoxu a zaujetí nových uživatelů, celkovou úpravu vzhledu, zlepšení animací, zrychlení odezvy uživatelského rozhraní a také upravení nabídek. Vývoj lze sledovat v Bugzille.

Ladislav Hagara | Komentářů: 0
včera 20:00 | Komunita

OneDrive pro firmy je již ve webových prohlížečích na Linuxu stejně rychlý jako na Windows. Microsoft opravil chybu z listopadu loňského roku. OneDrive pro firmy běžel na Linuxu mnohem pomaleji než na Windows. V popisu chyby bylo uvedeno, že stačilo v prohlížeči na Linuxu nastavit v user-agentu Windows a vše se zrychlilo. Odpovědí Microsoftu bylo (Internet Archive: Wayback Machine), že Linux není podporován. Po bouřlivých diskusích na redditu i Hacker News byla chyba nalezena a opravena.

Ladislav Hagara | Komentářů: 3
včera 19:00 | Zajímavý projekt

Byla vyhlášena soutěž Hackaday Prize 2017. Soutěž je určena vývojářům open source hardwaru. Pro výherce je připraveno celkově 250 tisíc dolarů. Každý ze 120 finalistů získá tisíc dolarů. Nejlepší pak navíc 50, 30, 20, 15, 10 a 5 tisíc dolarů. Jedná se již o čtvrtý ročník soutěže. V roce 2014 zvítězil projekt globální sítě open source pozemních satelitních stanic SatNOGS. V roce 2015 zvítězil open source systém pro řízení elektrických invalidních vozíků pohybem očí Eyedriveomatic. V roce 2016 zvítězil modulární robot Dtto.

Ladislav Hagara | Komentářů: 0
včera 15:00 | Bezpečnostní upozornění

Byla vydána Samba ve verzích 4.6.1, 4.5.7 a 4.4.12. Řešen je bezpečnostní problém CVE-2017-2619. Pomocí symbolických odkazů a souběhu (symlink race) lze "teoreticky" získat přístup k souborům, které nejsou sdíleny. Linuxové distribuce jsou postupně aktualizovány (Debian).

Ladislav Hagara | Komentářů: 0
včera 07:43 | Nová verze

Na Steamu se objevil port hry Arma: Cold War Assault (Operation Flashpoint) pro Mac a Linux. … více »

creon | Komentářů: 25
včera 05:55 | Nová verze

Po 18 měsících od vydání verze 8.0 byla vydána verze 9.0 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab. Představení nových vlastností v příspěvku na blogu a na YouTube.

Ladislav Hagara | Komentářů: 0
včera 03:33 | Komunita

Platnost posledního patentu souvisejícího s Dolby Digital (AC-3) vypršela. Po MP3 se tak do Fedory oficiálně dostane také kodek AC-3.

Ladislav Hagara | Komentářů: 5
včera 00:44 | Komunita

Feral Interactive, společnost zabývající se vydáváním počítačových her pro operační systémy macOS a Linux, nabízí své hry na Steamu vývojářům open source 3D grafické knihovny Mesa zdarma. Podmínkou je minimálně 25 commitů za posledních 5 let. Stejnou nabídku dostali vývojáři knihovny Mesa v roce 2015 od Valve. O rok dříve dostali od Valve tuto nabídku vývojáři Debianu a Ubuntu.

Ladislav Hagara | Komentářů: 0
22.3. 23:55 | Nová verze

Opera 44, verze 44.0.2510.857, byla prohlášena za stabilní. Nejnovější verze tohoto webového prohlížeče je postavena na Chromiu 57. Z novinek vývojáři Opery zdůrazňují podporou Touch Baru na nejnovějších MacBoocích Pro (gif). Přehled novinek pro vývojáře na blogu Dev.Opera.

Ladislav Hagara | Komentářů: 1
22.3. 20:56 | Pozvánky

V úterý 28. dubna se koná další Prague Containers Meetup. Přijďte si zopakovat, jak psát kvalitnější Dockerfile a jaké novinky a ulehčení přináší ansible-container, který vám umožní spravovat celý životní cyklus vašeho kontejneru. Místo konání: Concur, Bucharova 11, Praha-Stodůlky.

little-drunk-jesus | Komentářů: 0
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (14%)
 (2%)
 (72%)
 (3%)
 (10%)
Celkem 921 hlasů
 Komentářů: 72, poslední 1.3. 11:16
    Rozcestník

    Dotaz: komunikace s displayem pres seriovy port

    7.6.2006 09:51 TimeMaster
    komunikace s displayem pres seriovy port
    Přečteno: 189×
    Dobry den, potreboval bych poradit. Mam display Matrix orbital LK202-25, komunikuje s pocitacem pres seriovy port, display ma i klavesnici, kazda klavesa posle pres seriak nejake pismeno. Pomoci programu nize, muzu cist klavesy, ktere stisknu, ale nedokazu display prinutit aby pri stisknuti urcite klavesy neco vypsal. Kdyz uz neco tak je to nesmyslny text,do doby nez spusti minicoma a ukoncim ho bez restartu modemu:( pak pri stisknuti klavesy posilajici znak I se na displayi obevi napis "sipka nahoru" ale pred nim nevim proc jeste "a", navic toto funguje jen parkrat, po par stisknutich se opet nic nevypisuje.. :( nevite nekdo kudy kam? diky #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <termios.h>
    #include <stdio.h>

    #define BAUDRATE B19200
    #define MODEMDEVICE "/dev/ttyUSB0"
    #define FALSE 0
    #define TRUE 1

    volatile int STOP=FALSE;

    main()
    {
    int fd,c, res;
    struct termios oldtio,newtio;
    char buf[255];

    fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY );
    if (fd <0) {perror(MODEMDEVICE); exit(-1); }

    tcgetattr(fd,&oldtio); /* save current port settings */
    bzero(&newtio, sizeof(newtio));
    newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
    newtio.c_iflag = (INPCK | IGNPAR);
    newtio.c_oflag = 0;

    /* set input mode (non-canonical, no echo,...) */
    newtio.c_lflag = 0;
    newtio.c_cc[VTIME] = 0; /* inter-character timer unused */
    newtio.c_cc[VMIN] = 1; /* blocking read until 5 chars received */
    tcflush(fd, TCIFLUSH);
    tcsetattr(fd,TCSANOW,&newtio);

    while (STOP==FALSE) { /* loop for input */
    res = read(fd,buf,255); /* returns after 5 chars have been input */
    buf[res]=0; /* so we can printf... */
    write (fd, "a", 1);
    if (buf[0] == 'I') write (fd, "sipka nahoru" , 12);
    else
    printf("%s\n", buf);
    if (buf[0]=='I') STOP=TRUE;
    }
    tcsetattr(fd,TCSANOW,&oldtio);
    }

    Odpovědi

    Josef Kufner avatar 7.6.2006 10:02 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: komunikace s displayem pres seriovy port
    echo "ahoj" > /dev/ttyUSB0
    neco na displej vypise?
    Hello world ! Segmentation fault (core dumped)
    7.6.2006 11:35 TimeMaster
    Rozbalit Rozbalit vše Re: komunikace s displayem pres seriovy port
    btw: tohle funguje.. vypise se nesmysl, dokud se nenastabi spravny baudrate toho portu.. potom to dokonce vypise i to ahoj :)
    Josef Kufner avatar 7.6.2006 18:27 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: komunikace s displayem pres seriovy port
    Tak si nastav spravne port, treba pomoci setserial a pak ho ze sveho programu proste otevri a pis/cti.
    fd = open("/dev/...", O_RDWR);
    write(fd, ...);
    read(fd, ...);
    close(fd);
    Hello world ! Segmentation fault (core dumped)
    Josef Kufner avatar 7.6.2006 18:32 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: komunikace s displayem pres seriovy port
    ... tim jsem chtel rict, aby jsi se vybodnul na ty kouzla okolo a v helpu uvedl jak to ma byt nastavene. Ale spis v helpu k tomu zarizeni...
    Hello world ! Segmentation fault (core dumped)
    7.6.2006 10:11 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: komunikace s displayem pres seriovy port
    Zkus toho u sériové komunikace zakázat víc. Kromě přenosové rychlosti, parity a stopbitů to obvykle nastavuju takto, ale už jsem zapomněl význam těch optionů:
    options.c_cflag = parita,rychlost,stopbity ...
    
    options.c_cflag |= CS8 | CLOCAL | CREAD | HUPCL;
    	  
    options.c_iflag = IGNPAR | IGNBRK | INPCK | IMAXBEL | IXOFF;
    options.c_lflag = ECHOKE;
    options.c_oflag = ONOCR;
    
    7.6.2006 11:02 TimeMaster
    Rozbalit Rozbalit vše Re: komunikace s displayem pres seriovy port
    tak problem s 'a' je vyreseny, ja nevim jestli po ranu nevidim nebo jsem nejakej nablblej... radek v programu write (fd,"a",1) mluvi sam za sebe... no jinak prave jsem se v tom nejak hrabal a uz to celkem chodi.. ale mel bych par jinych otazek:
    1. v programu potrebuji vytvorit pole char a toto pole odeslat na seriovy port, potrebuji ale posilat prvni dva znaky jako hexa kod a potom obycejny text, hexa kod udava napriklad smazani displaye. Nevedel by nekdo jak vyvorit pole char abych do nej zadal ty hexa kody a potom za to pripojil text #define TEXT "ahoj" ? abych nemusel jak kokot psat to co uvidite dale v programu :)
    2.nejak nemuzu prijit na to jak pouzivat len() u fce write musim zadat i pocet odesilanych znaku write(fd,"a",1) - jeden znak - a do streamu fd, v pripade ze mam pole znaku napr. char c[] = {'a','h','o','j'}; a nechci zadavat pocet znaku (protoze pole budu potrebovat generovat ruzne dlouhe), zkousel jsem write (fd, c , len(c)) ale nevim proc nefunguje to :(

    pokus.c:(.text+0x254): undefined reference to `len' collect2: ld returned 1 exit status

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <termios.h>
    #include <stdio.h>

    #define BAUDRATE B19200
    #define MODEMDEVICE "/dev/ttyUSB0"
    #define FALSE 0
    #define TRUE 1

    //text
    char UP[] = {0xFE,0x58,'s','i','p','k','a',' ','n','a','h','o','r','u'};
    char DOWN[] = {0xFE,0x58,'s','i','p','k','a',' ','d','o','l','u'};
    char LEFT[] = {0xFE,0x58,'s','i','p','k','a',' ','d','o','l','e','v','a'};
    char RIGHT[] = {0xFE,0x58,'s','i','p','k','a',' ','d','o','p','r','a','v','a'};
    char F1[] = {0xFE,0x58,'k','l','a','v','e','s','a',' ','F','1'};
    char F2[] = {0xFE,0x58,'k','l','a','v','e','s','a',' ','F','2'};
    char ENTER[] = {0xFE,0x58,'k','l','a','v','e','s','a',' ','e','n','t','e','r',' ',0x7E,' ','k','o','n','e','c'};

    void
    daemonize (void)
    {
    pid_t pid;

    close (2);
    close (1);
    close (0);
    pid = fork ();
    if (pid < 0)
    {
    perror ("Fork");
    exit (-1);
    }
    if (pid)
    exit (0);
    return;
    }
    volatile int STOP=FALSE;

    main()
    {
    int fd,c, res;
    struct termios oldtio,newtio;
    char buf[255];

    fd = open (MODEMDEVICE, O_RDWR | O_NOCTTY);
    if (fd <0) {perror(MODEMDEVICE); exit(-1); }
    tcgetattr(fd, &oldtio);
    bzero (&newtio, sizeof (newtio));
    cfmakeraw(&newtio);
    cfsetispeed(&newtio, BAUDRATE);
    cfsetospeed(&newtio, BAUDRATE);
    newtio.c_cc[VMIN] = 1;
    tcflush(fd, TCIFLUSH);
    tcsetattr(fd, TCSANOW, &newtio);

    daemonize();

    while (STOP==FALSE) { /* loop for input */
    res = read(fd,buf,255); /* returns after 5 chars have been input */
    buf[res]=0; /* so we can printf... */
    if (buf[0] == 'I') {write (fd, UP , 16);}
    if (buf[0] == 'J') {write (fd, DOWN , 14);}
    if (buf[0] == 'O') {write (fd, LEFT , 16);}
    if (buf[0] == 'E') {write (fd, RIGHT , 17);}
    if (buf[0] == 'N') {write (fd, F1 , 14);}
    if (buf[0] == 'M') {write (fd, F2 , 14);}
    if (buf[0] == 'H') {write (fd, ENTER , 25);STOP=TRUE;}
    }
    tcsetattr(fd,TCSANOW,&oldtio);
    }
    7.6.2006 18:16 trekker.dk | skóre: 71
    Rozbalit Rozbalit vše Re: komunikace s displayem pres seriovy port
    2.nejak nemuzu prijit na to jak pouzivat len() u fce write musim zadat i pocet odesilanych znaku write(fd,"a",1) - jeden znak - a do streamu fd, v pripade ze mam pole znaku napr. char c[] = {'a','h','o','j'}; a nechci zadavat pocet znaku (protoze pole budu potrebovat generovat ruzne dlouhe), zkousel jsem write (fd, c , len(c)) ale nevim proc nefunguje to :(
    Pokud pole znaků bude vždycky nějaký text, můžeš to pole udělat null-terminated a pro zjištění délky použít strlen().
    Quando omni flunkus moritati
    7.6.2006 20:33 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: komunikace s displayem pres seriovy port
    Zkus to napsat nějak v duchu tohohle:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <stdint.h>
    
    int main(int argc, char **argv) {  
      char up[] =   "\xFE\x58sipka nahoru";
      char down[] = "\xFE\x58sipka dolu";
      char *tosend = NULL;
      int a = 'J';
      
      switch(a){      
        case 'I':
          tosend = strdup(up);
          break;
        case 'J':
          tosend = strdup(down);
          break;
        default:
          printf("Strange character\n");
          exit(-1);
      }
      
      printf("string length is %d\n", strlen(tosend));
      printf("%s", tosend);
      free(tosend);
      return 0;
    }
    
    Když to pustím pajpou do xxd, tak je vidět, jaký je obsah řetězce:
    $ ./a.out | xxd
    0000000: 7374 7269 6e67 206c 656e 6774 6820 6973  string length is
    0000010: 2031 320a fe58 7369 706b 6120 646f 6c75   12..Xsipka dolu
                       ^^^^
    
    8.6.2006 15:11 TimeMaster
    Rozbalit Rozbalit vše Re: komunikace s displayem pres seriovy port
    tak jsem zkoumal Tvuj priklad,ak by to mohlo vypadat a moc se mi hodi, u pouziti switch jsem si nebyl moc jisty, ale pouzit jsem ho chtel, tak jsem rad,ze to nemusim zjistovat.. :) poud spravne chapu, tak misto prirazovani acku hodnotu J do nej budu ukladat to pismenko ktere poleze poleze ze seriaku..
    8.6.2006 15:44 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: komunikace s displayem pres seriovy port
    Jojo, přesně tak jak říkáš - to 'J' (tedy hodnotu 74) jsem tam dal naschvál (natvrdo), abych to mohl nějak otestovat. Ve tvém případě tam půjde to, co přijde z portu.
    Možná bych měl doplnit (ale asi to víš), že když v C napíšeš řetězec (do uvozovek), tak překladač na konec přidá ještě ukončovací nulu, takže není třeba se o to starat.
    8.6.2006 10:36 TimeMaster
    Rozbalit Rozbalit vše Re: komunikace s displayem pres seriovy port
    diky vsem za rady, ja se zase budu chvili snazit a pak dam vedet jak to dopadlo :)

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.