Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 211. sraz, který proběhne v pátek 19. září od 18:00 ve Studentském klubu U Kachničky na Fakultě informačních technologií Vysokého učení technického na adrese Božetěchova 2/1. Na srazu proběhne přednáška Jiřího Eischmanna o nové verzi prostředí GNOME 49. Nemáte-li možnost se zúčastnit osobně, přednáškový blok bude opět streamován živě na server VHSky.cz a následně i zpřístupněn záznam.
Microsoft se vyhnul pokutě od Evropské komise za zneužívání svého dominantního postavení na trhu v souvislosti s aplikací Teams. S komisí se dohodl na závazcích, které slíbil splnit. Unijní exekutivě se nelíbilo, že firma svazuje svůj nástroj pro chatování a videohovory Teams se sadou kancelářských programů Office. Microsoft nyní slíbil jasné oddělení aplikace od kancelářských nástrojů, jako jsou Word, Excel a Outlook. Na Microsoft si
… více »Samba (Wikipedie), svobodná implementace SMB a Active Directory, byla vydána ve verzi 4.23.0. Počínaje verzí Samba 4.23 jsou unixová rozšíření SMB3 ve výchozím nastavení povolena. Přidána byla podpora SMB3 přes QUIC. Nová utilita smb_prometheus_endpoint exportuje metriky ve formátu Prometheus.
Správcovský tým repozitáře F-Droid pro Android sdílí doporučení, jak řešit žádosti o odstranění nelegálního obsahu. Základem je mít nastavené formální procesy, vyhrazenou e-mailovou adresu a být transparentní. Zdůrazňují také důležitost volby jurisdikce (F-Droid je v Nizozemsku).
Byly publikovány informace o další zranitelnosti v procesorech. Nejnovější zranitelnost byla pojmenována VMScape (CVE-2025-40300, GitHub) a v upstream Linuxech je již opravena. Jedná se o variantu Spectre. KVM host může číst data z uživatelského prostoru hypervizoru, např. QEMU.
V červenci loňského roku organizace Apache Software Foundation (ASF) oznámila, že se částečně přestane dopouštět kulturní apropriace a změní své logo. Dnes bylo nové logo představeno. "Indiánské pírko" bylo nahrazeno dubovým listem a text Apache Software Foundation zkratkou ASF. Slovo Apache se bude "zatím" dál používat. Oficiální název organizace zůstává Apache Software Foundation, stejně jako názvy projektů, například Apache HTTP Server.
Byla vydána (𝕏) srpnová aktualizace aneb nová verze 1.104 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.104 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Spotify spustilo přehrávání v bezztrátové kvalitě. V předplatném Spotify Premium.
Spoluzakladatel a předseda správní rady americké softwarové společnosti Oracle Larry Ellison vystřídal spoluzakladatele automobilky Tesla a dalších firem Elona Muska na postu nejbohatšího člověka světa. Hodnota Ellisonova majetku díky dnešnímu prudkému posílení ceny akcií Oraclu odpoledne vykazovala nárůst o více než 100 miliard dolarů a dosáhla 393 miliard USD (zhruba 8,2 bilionu Kč). Hodnota Muskova majetku činila zhruba 385 miliard dolarů.
Bylo vydáno Eclipse IDE 2025-09 aneb Eclipse 4.37. Představení novinek tohoto integrovaného vývojového prostředí také na YouTube.
Ahoj,
potreboval bych poradit s jednoduchym programem, ktery bude komunikovat se zarizenim na seriovem portu. Program posle do serioveho portu textovy retezec, treba "LINUX" a zarizeni mu vrati 2 cisla. Pres putty a gtkterm mi to funguje. Potreboval bych ten program v C nebo Pythonu. Staci mala ukazka. Uz jsem zkousel vsechno mozne, ale vysledek zadny.
Ukazka komunikace:
PC: LINUX RS-232: 23 RS-232: 13
pro začátek třeba http://www.abclinuxu.cz/poradna/linux/show/101950, a nejen tenhle...
na googlu roste také poměrně dost návodů a vzorových řešení...
Ahoj, zkusil jsem tento kod jenom s drobnou upravou:
root@desktop:~/abc$ cat Makefile CFLAGS=-g -Wall ser: captain/capser.c ser.c gcc -g -c -Wall captain/capser.c -o capser.o gcc -g -c -Wall ser.c -o ser.o gcc ser.o capser.o -o ser ############################################################################## root@desktop:~/abc$ cat ser.c /* ser.c (C) 2004-5 Captain http://www.captain.at Sends 3 characters (ABC) via the serial port (/dev/ttyS0) and reads them back if they are returned from the PIC. Used for testing the PIC-MMC test-board http://www.captain.at/electronic-index.php */ #include <stdio.h> /* Standard input/output definitions */ #include <string.h> /* String function definitions */ #include <unistd.h> /* UNIX standard function definitions */ #include <fcntl.h> /* File control definitions */ #include <errno.h> /* Error number definitions */ #include <termios.h> /* POSIX terminal control definitions */ #include "captain/capser.h" int fd; int initport(int fd) { struct termios options; // Get the current options for the port... tcgetattr(fd, &options); // Set the baud rates to 19200... cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); // Enable the receiver and set local mode... options.c_cflag |= (CLOCAL | CREAD); options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; // Set the new options for the port... tcsetattr(fd, TCSANOW, &options); return 1; } int main(int argc, char **argv) { fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { perror("open_port: Unable to open /dev/ttyS0 - "); return 1; } else { fcntl(fd, F_SETFL, 0); } printf("baud=%d\n", getbaud(fd)); initport(fd); printf("baud=%d\n", getbaud(fd)); char sCmd[254] = "VERZE"; if (!writeport(fd, sCmd)) { printf("write failed\n"); close(fd); return 1; } printf("written:%s\n", sCmd); usleep(500000); char sResult[254]; fcntl(fd, F_SETFL, FNDELAY); // don't block serial read if (!readport(fd,sResult)) { printf("read failed\n"); close(fd); return 1; } printf("readport=%s\n", sResult); close(fd); return 0; } ############################################################################## root@desktop:~/abc$ cat captain/capser.h int writeport(int fd, char *chars); int readport(int fd, char *result); int getbaud(int fd); ############################################################################## root@desktop:~/abc$ cat captain/capser.c /* capser.c (C) 2004-5 Captain http://www.captain.at Helper functions for "ser" Used for testing the PIC-MMC test-board http://www.captain.at/electronic-index.php */ #include <stdio.h> /* Standard input/output definitions */ #include <string.h> /* String function definitions */ #include <unistd.h> /* UNIX standard function definitions */ #include <fcntl.h> /* File control definitions */ #include <errno.h> /* Error number definitions */ #include <termios.h> /* POSIX terminal control definitions */ int writeport(int fd, char *chars) { int len = strlen(chars); chars[len] = 0x0d; // stick a <CR> after the command chars[len+1] = 0x00; // terminate the string properly int n = write(fd, chars, strlen(chars)); if (n < 0) { fputs("write failed!\n", stderr); return 0; } return 1; } int readport(int fd, char *result) { int iIn = read(fd, result, 254); result[iIn-1] = 0x00; if (iIn < 0) { if (errno == EAGAIN) { printf("SERIAL EAGAIN ERROR\n"); return 0; } else { printf("SERIAL read error %d %s\n", errno, strerror(errno)); return 0; } } return 1; } int getbaud(int fd) { struct termios termAttr; int inputSpeed = -1; speed_t baudRate; tcgetattr(fd, &termAttr); /* Get the input speed. */ baudRate = cfgetispeed(&termAttr); switch (baudRate) { case B0: inputSpeed = 0; break; case B50: inputSpeed = 50; break; case B110: inputSpeed = 110; break; case B134: inputSpeed = 134; break; case B150: inputSpeed = 150; break; case B200: inputSpeed = 200; break; case B300: inputSpeed = 300; break; case B600: inputSpeed = 600; break; case B1200: inputSpeed = 1200; break; case B1800: inputSpeed = 1800; break; case B2400: inputSpeed = 2400; break; case B4800: inputSpeed = 4800; break; case B9600: inputSpeed = 9600; break; case B19200: inputSpeed = 19200; break; case B38400: inputSpeed = 38400; break; } return inputSpeed; } root@desktop:~/abc$
Po zapnuti PC program vubec nefunguje:
root@desktop:~/abc$ make && ./ser gcc -g -c -Wall captain/capser.c -o capser.o gcc -g -c -Wall ser.c -o ser.o gcc ser.o capser.o -o ser baud=9600 baud=9600 written:VERZE readport=VERZE root@desktop:~/abc$
Musim spustit minicom, odeslat do portu libovolny text a pak dat z menu ukoncit bez resetu. Pak uz program funguje:
root@desktop:~/abc$ make && ./ser gcc -g -c -Wall captain/capser.c -o capser.o gcc -g -c -Wall ser.c -o ser.o gcc ser.o capser.o -o ser baud=9600 baud=9600 written:VERZE readport=VERZE 0.1 OK root@desktop:~/abc$
cim to muze byt? Dale by mne zajimalo, proc prijaty text obsahuje:
VERZE 0.1 OK
kdyz mel byt pouze
0.1 OK
cim to muze byt?
char sCmd[254] = "VERZE";
Tady si nejsem jist, jak přesně tohle překladač vyhodnotí.
char sCmd[254]
samo o sobě vytváří ukazatel na char (char *
), který se inicializuje někam, kde překladač vyhradí 254B paměti. Přiřazení sCmd = "VERZE"
potom mění ten ukazatel tak, že ukazuje jinam do paměti na řetězec "VERZE", kde je vyhrazeno jenom 6B.
Pokud se tedy překladač při char sCmd[254] = "VERZE";
udělá obojí naráz, pak v sCmd
není 254B místa, ale jenom 6B.
Kód
chars[len] = 0x0d; // stick a <CR> after the command chars[len+1] = 0x00; // terminate the string properlyv takovém případě zapisuje někam úplně mimo. Řekl bych, že tento kód si koleduje o segmentation fault
Musim spustit minicom, odeslat do portu libovolny text a pak dat z menu ukoncit bez resetu. Pak uz program funguje
stty -a -F /dev/ttyS0
- spusť před a po spuštění toho minicomu a uvidíš, které nastavení se změnilo - tohle nastavení si potom musí zajistit tvůj program.
stty
-a -F /dev/ttyS0
- spusť před a po spuštění toho minicomu a uvidíš, které nastavení se změnilo - tohle nastavení si potom musí zajistit tvůj program.
Spustil jsem minicom, ukoncil ho bez resetu a nastaveni bylo nasledujici:
martin@martin-desktop:~/topeni/SERVER$ stty -a -F /dev/ttyS0 speed 9600 baud; rows 0; columns 0; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 5; -parenb -parodd cs8 -hupcl -cstopb cread clocal crtscts ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8 -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke martin@martin-desktop:~/topeni/SERVER$
Upravil jsem podle neho funkci initport v souboru capser.c a ted uz to jen odesle data, ale neprijme to nic:
int initport(int fd) { struct termios options; // Get the current options for the port... tcgetattr(fd, &options); // Set the baud rates to 19200... cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); // Enable the receiver and set local mode... options.c_cflag &= ~(PARENB | PARODD | HUPCL | CSTOPB | BRKINT | IGNPAR | PARMRK | INPCK | ISTRIP| INLCR | IGNCR | ICRNL | IXON | IXOFF | IUCLC | IXANY | IMAXBEL | IUTF8 | OPOST | OLCUC | OCRNL | ONLCR | ONOCR | ONLRET | OFILL | OFDEL | ISIG | ICANON | IEXTEN | ECHO | ECHOE | ECHOK | ECHONL | NOFLSH | XCASE | TOSTOP | ECHOPRT | ECHOCTL | ECHOKE); options.c_cflag |= (CS8 | CREAD | CLOCAL | CRTSCTS | IGNBRK | NL0 | CR0 | TAB0 | BS0 | VT0 | FF0); // Set the new options for the port... tcsetattr(fd, TCSANOW, &options); return 1; }
Co stim muze byt?
tohle zacina vypadat na klasiku - po kolika dratech chcete komunikovat (jake nastaveni sdelite systemu) a kolik dratu tam skutecne mate?
moznosti jsou 3, 5 a 7 dratu
podle toho +CRTSCTS mi pripada, ze ocekavate od HW petidrat...
Po 3 dratech.
>>> import serial
>>> ser = serial.Serial(0) # open first serial port
>>> print ser.portstr # check which port was really used
>>> ser.write("hello") # write a string
>>> ser.close() # close port
#include <stdio.h> void main(void) { FILE *f; char buf[1024]; f = fopen("/dev/ttyS0", "rb"); fputs("hello world", f); fflush(f); fgets(buf, 1024, f); fclose(f); fputs(buf, stdout); }… samozřejmě to bude chtít doplnit nějaké ty drobnosti, ale pointa je snad jasná.
Tak jsem zkusil pouzit Vas kod, jenom jsem ho trochu upravil:
root@desktop:~/232# cat 232.c #include <stdio.h>
void main(void)
{
FILE *f;
char buf[1024];
f = fopen("/dev/ttyS0", "wt");
fputs("hello world", f);
fflush(f);
fgets(buf, 1024, f);
fclose(f);
fputs(buf, stdout);
printf("\n");
} root@desktop:~/232# Seriovy port jsem takto propojil. Bohuzel to porad nefunguje:
root@desktop:~/232# gcc 232.c -o 232
root@desktop:~/232# ./232
D
root@desktop:~/232#
Nevite, co s tim?
Jinak bylo by dobré kdyby jsi se snažil pochopit princip Sériová komunikace pod Linuxem - I, případně se Ti může hodit ukázka v Pythonu.
No, programek sice vypada pekne, ale...
osobne bych radeji pouzil open, nekolik ioctl a pak teprve se pokousel o komunikaci
V tech ioctl je dobre nastavit rozumne parametry komunikace. Myslim, ze tam byvalo i neco ve smyslu "povol prijem"Ahoj, jestli by ti nevadilo C++, tak se povidej na na stranky Qt, je tam na to komponenta (v pomocných třídách - ne přímo od Qt lidí). Ještě něco existovalo jako QExtSerialPort nebo tak.
Tady je jeden můj postarší výtvor. Nic čím bych se chtěl extra chlubit. Mrkněte se třeba do souboru loop.cc. Má to příponu cc, ale v podstatě je to holé Cčko. Začněte třeba u funkce open_line() a dohledejte si všechny používané funkce, jsou definované výše v tomtéž zdrojáku. Tomuhle kusu kódu v podstatě předhodíte řetězec ve formátu "9600,8N1,NOFLOW" a on podle toho nakonfiguruje dotyčný sériový port.
Od té doby jsem zjistil jednu věc: u některých verzí libc je dobré ještě před "cfmakeraw" poštvat na prázdný "struct termios" napřed memset() nebo bzero() = celý kus paměti, který ten struct zabírá, preventivně vynulovat.
Tiskni
Sdílej: