Ubuntu bude pro testování nových verzí vydávat měsíční snapshoty. Dnes vyšel 1. snapshot Ubuntu 25.10 (Questing Quokka).
Společnost Netgate oznámila vydání nové verze 2.8.0 open source firewallové, routovací a VPN platformy pfSense (Wikipedie) postavené na FreeBSD. Přehled novinek v poznámkách k vydání.
Byla vydána nová verze 6.16 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Tor Browser byl povýšen na verzi 14.5.3. Linux na verzi 6.1.140. Další změny v příslušném seznamu.
Člověk odsouzený za obchod s drogami daroval letos ministerstvu spravedlnosti 468 kusů kryptoměny bitcoin, které pak resort v aukcích prodal za skoro miliardu korun. Darováním se zabývá policejní Národní centrála proti organizovanému zločinu (NCOZ). Deníku N to potvrdil přímo ministr spravedlnosti Pavel Blažek (ODS). Podle resortu bylo nicméně vše v souladu s právem.
Svobodný a otevřený multiplatformní editor EPUB souborů Sigil (Wikipedie, GitHub) byl vydán ve verzi 2.5.0. Stejně tak doprovodný vizuální EPUB XHTML editor PageEdit (GitHub).
Na základě národního atribučního procesu vláda České republiky označila Čínskou lidovou republiku za zodpovědnou za škodlivou kybernetickou kampaň proti jedné z neutajovaných komunikačních sítí Ministerstva zahraničních věcí ČR. Tato škodlivá aktivita, která trvala od roku 2022 a zasáhla instituci zařazenou na seznam české kritické infrastruktury, byla provedena kyberšpionážní skupinou APT31, veřejně spojovanou se zpravodajskou službou Ministerstvo státní bezpečnosti (MSS).
Google Chrome 137 byl prohlášen za stabilní. Nejnovější stabilní verze 137.0.7151.55 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 11 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Byl vydán AlmaLinux OS 10 s kódovým názvem Purple Lion. Podrobnosti v poznámkách k vydání. Na rozdíl od Red Hat Enterprise Linuxu 10 nadále podporuje x86-64-v2.
Byl vydán Mozilla Firefox 139.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 139 je již k dispozici také na Flathubu a Snapcraftu.
Byly publikovány výsledky průzkumu mezi uživateli Blenderu uskutečněného v říjnu 2024. Zúčastnilo se více než 7000 uživatelů. Téměř 93 % z nich například používá uživatelské rozhraní v angličtině.
Já sem si z dovolením také vzal. Jen ten odkaz ukazuje na tuto diskuzi, ne na to PDFko.
Z.H.
#include < stdio.h>
#include < fcntl.h>
#include < termios.h>
#include < sys/ioctl.h>
#include < time.h>
#define SERIAK "/dev/ttyS1"
#define KALIBRACE 1.0
#define DOBA 1000.0
//#define DEBUG
#define JEDNOTKA
int ctsvalue (void);
int frekvence (double brana);
int
ctsvalue (void)
{
int fd, status;
fd = open (SERIAK, O_RDWR | O_NOCTTY);
ioctl (fd, TIOCMGET, &status);
#ifdef DEBUG
if (fd == -1)
{
printf (" nelze inicializovat port");
goto end;
}
else
printf (" status: %d ", ioctl (fd, TIOCMGET, &status));
#endif
if ((status & TIOCM_CTS) != 0)
return 1;
else
return 0;
end:
close (fd);
}
int
frekvence (double brana)
{
unsigned long int citac = 0, stary = 0, vstup = 0;
double elapsed, frekv = 0.0, cas = 0.0;
do
{
clock_t clock ();
vstup = ctsvalue ();
if (vstup)
citac++;
cas = clock ();
}
while (cas < (1000.0 * brana));
#ifdef DEBUG
printf ("cas: %lf citac: %d ", cas, citac);
#endif
frekv = (double) citac / brana;
#ifdef DEBUG
printf ("%d", frekv);
#endif
return (frekv);
}
int
main (void)
{
float napeti = 0.0;
napeti = ((float) frekvence (DOBA)) / 10.0 * KALIBRACE;
printf ("%d", (int) napeti);
#ifdef JEDNOTKA
printf (" mV\n");
#endif
return 0;
}
Jedna se mi zejmena o fci /ctsvalue()/ jestli ji mam spravne. Kdyby mel nekdo generator 1-10kHz, muze to zkusit povesit na seriak "CTS", vystup by mel byt pri 10kHz "1". Radsi bych to resil pres ICQ 319273996, fakt uz mam dost :o).
#include < stdio.h>
#include < fcntl.h>
#include < termios.h>
#include < sys/ioctl.h>
#include < time.h>
int
main ()
{
//for(;;) {
int status=0,fd=0;
fd = open ("/dev/ttyS1", O_RDWR | O_NOCTTY);
ioctl (fd, TIOCMGET, &status);
printf ("Status: ");
if (status & TIOCM_LE)
printf ("DSR ");
if (status & TIOCM_DTR)
printf ("DTR ");
if (status & TIOCM_RTS)
printf ("RTS ");
if (status & TIOCM_CTS)
printf ("CTS ");
if (status & TIOCM_CAR)
printf ("DCD ");
printf ("\n");
//}
return 0;
}
Kdyz nepouziji cyklus for, vse se vypise uplne spravne (v zavislosti na propojeni - hodnoty seriaku) a program se ukonci. Jenze pokud necham program cyklit a stridave spojuji a rozpojuji kontakty CTS a DTR, hodnoty se nemeni a program vraci stale to same, jako pri spusteni, proste nereaguje na spojeni a rozpojeni, coz je asi kamen urazu toho predchoziho programku = asi nebude fungovat :(. Jenze me uz nenapada nic, co bych poupravil, aby to fungovalo.
/* 2005. written for reading voltage from optical link iface */
/* Ronja by U/"f convertor AD654. Program doesn't coming under any */
/* lincense or warranty. If you have any questions, let write them */
/* to me sith@wifistar.net. Mny thks to J. Pribramsky for his help */
#include < stdio.h>
#include < fcntl.h>
#include < termios.h>
#include < sys/ioctl.h>
#include < time.h>
#define SERIAK "/dev/ttyS1"
#define KALIBRACE 1.0
#define DOBA 10.0
//#define DEBUG
//#define JEDNOTKA
int ctsvalue (int fd);
long frekvence ();
int
ctsvalue (int fd)
{
int status;
ioctl (fd, TIOCMGET, &status);
#ifdef DEBUG
if (fd == -1)
{
printf (" nelze inicializovat port");
goto end;
}
#endif
if ((status & TIOCM_CTS) != 0)
return 1;
else
return 0;
end:
}
long
frekvence ()
{
double cas = 0.0;
long tiku = 0;
clock_t start, end;
int fd = open (SERIAK, O_RDWR | O_NOCTTY);
start = clock (); // stav hodin pred spustenim citace
do
{
if (ctsvalue (fd)) // pokud CTS Hi
{
tiku++;
while (ctsvalue (fd)) ; // cekam na CTS Low.
}
end = clock ();
cas = ((double) (end - start)); // celkovy cas mereni
}
while (cas < CLOCKS_PER_SEC); //... pocet tiku/sec
close (fd); //zavri seriak
return tiku; // frekvence v Hz
}
int
main (void)
{
double napeti = 0.0;
napeti = (frekvence ()) / DOBA * KALIBRACE;
printf ("%lf", napeti);
#ifdef JEDNOTKA
printf ("mV\n");
#endif
return 0;
}
if ((status & TIOCM_CTS) != 0) return 1; else return 0;nahradil jediným řádkem
DOBA byla jeste v puvodnim zdroji, nejak to tam zustalo a melo to fungovat jako nastaveni rozliseni (ruzne dlouhe intervaly mereni, pro vetsi presnost) - asi to predelam, napr. zmeny na CTS detekovat xkrat, z toho vysledek.
KALIBRACE slouzila opravdu jako kalibrace mereni - prevodnik bude pracovat ve venkovnich podminkach a rozdil teplot pak pusobi na keramiky (asi i na samotny prevodnik), jestli se nepletu. Ta se ale nahradi foliovym kondenzatorem.
Chyba v ctsvalue() je mi znama byl to zbytek. AD654 kmita az na 500kHz, coz na seriaku nezmerim - piny 6,7 se da pomoci C ovlivnovat kmitocet: 10n / 10kHz / 1V.
Dekuji za TIOCMIWAIT, nikde jsem na to nenarazil, opravdu se to velmi libi .
/* 2005. written for reading voltage from optical link iface */
/* Ronja by U/"f convertor AD654. Program doesn't coming under any */
/* lincense or warranty. If you have any questions, let write them */
/* to me sith@wifistar.net. Mny thks to J. Pribramsky for his help */
#include < stdio.h>
#include < fcntl.h>
#include < termios.h>
#include < sys/ioctl.h>
#include < time.h>
#define SERIAK "/dev/ttyS1"
//#define DEBUG
//#define JEDNOTKA
int ctsvalue (int fd);
long frekvence (int fd);
int
ctsvalue (int fd)
{
int status;
ioctl (fd, TIOCMGET, &status);
return (status & TIOCM_CTS);
}
long
frekvence (int fd)
{
int tiku = 0, cas = 0;
clock_t start, end;
ioctl (fd, TIOCMIWAIT, TIOCM_CTS); //az Hi
start = clock (); // stav hodin pred spustenim citace
do
{
if (ctsvalue (fd)) // pokud CTS Hi
{
tiku++;
while (ctsvalue (fd)) ; // cekam na CTS Low.
}
end = clock ();
cas = (end - start); // celkovy cas mereni
}
while (cas < CLOCKS_PER_SEC); //... pocet tiku/sec
#ifdef DEBUG
printf ("Pocet tiku:%d ", tiku);
#endif
return tiku; // frekvence v Hz
}
int
main (void)
{
int napeti = 0;
int fd = open (SERIAK, O_RDWR | O_NOCTTY);
if (fd < 0)
{
printf ("Port \"%s\" nelze zinicializovat.", SERIAK);
return 0;
}
napeti = (frekvence (fd)) / 10;
printf ("%d", napeti);
#ifdef JEDNOTKA
printf ("mV\n");
#endif
close (fd); //zavri seriak
return 0;
}
// radsi to zatim nigdo nezkousejte naostro, pac chybi:
// -dopsat delay v mereni()
// -dodelam jak budu mit chut, sith @ wifistar . net
#include < stdio.h>
#include < fcntl.h>
#include < termios.h>
#include < sys/ioctl.h>
#include < time.h>
#define SERIAK "/dev/ttyS1"
void power (unsigned short level);
int openserial ();
void closeserial ();
void RTS (unsigned short level);
void DTR (unsigned short level);
int CTS ();
float mereni ();
int fd;
void
power (unsigned short level) //napajeni pro prevodnik
{
int status;
ioctl (fd, TIOCMGET, &status);
if (level == 0)
ioctl (fd, TIOCSBRK, &status);
else
(fd, TIOCCBRK, &status);
ioctl (fd, TIOCMSET, &status);
}
int
openserial () //otevrit seriak
{
if ((fd = open (SERIAK, O_RDWR)) == -1)
{
return 0;
}
return 1;
}
void
closeserial () //zavrit seriak
{
close (fd);
}
void
RTS (unsigned short level) //nastav stav RTS
{
int status;
ioctl (fd, TIOCMGET, &status);
if (level)
{
status |= TIOCM_RTS;
}
else
{
status &= ~TIOCM_RTS;
}
ioctl (fd, TIOCMSET, &status);
}
void
DTR (unsigned short level) //nastav stav DTR
{
int status;
ioctl (fd, TIOCMGET, &status);
if (level)
{
status |= TIOCM_DTR;
}
else
{
status &= ~TIOCM_DTR;
}
ioctl (fd, TIOCMSET, &status);
}
int
CTS () //stav CTS
{
int status;
ioctl (fd, TIOCMGET, &status);
//ioctl (fd, TIOCMIWAIT, TIOCM_CTS);
return (status & TIOCM_CTS);
}
void
wait (int wait) //cekej x ms
{
int cas;
clock_t start, end;
wait *= 0.001;
start = clock ();
do
{
end = clock ();
cas = end - start;
}
while (cas < (CLOCKS_PER_SEC * wait));
}
float
mereni () //hlavni fce, mereni napeti
{
RTS (1); //CS
int status, bity = 128, cas = 0, hodnota = 0, i; //bity tzn jake rozliseni ma prevodnik 2^x
float mereni = 0.0;
wait (20); //x msec
RTS (0); //CS
for (i = 0; i < 8; i++) //konecne hot stuff ;)
{
if (CTS ())
hodnota += bity;
DTR (0); //clock
DTR (1); //clock
bity /= 2;
wait (20);
}
return (mereni = (float) hodnota / 50.0);
}
int
main ()
{
float napeti = 0.0;
short unsigned i;
if (!openserial ())
{
printf ("Nelze inicializovat port \"s\".", SERIAK);
return 0;
}
power (0); //txd break on
wait (10);
DTR (0); //clock
RTS (0); //CS
wait (10);
for (i = 0; i < 40; i++)
{
napeti += mereni ();
}
wait (10);
napeti = (napeti * 1000) / i;
printf ("\r%d mV", (int) napeti);
power (1); //txd break off
closeserial ();
return 0;
}
K čemu je ve funkci main() dobré to druhé volání wait(10) ? Zbytečně to zdržuje, no ne?
Puvodne to mela byt jakasi doba zotaveni ad prevodniku, ale funguje to i tak, bez toho.
Co se týče tvých funkcí RTS() a DTR() - není nutné v nich zjišťovat stav bitů. Pro tento účel je vhodnější použít volání TIOCMBIS/TIOCMBIC, které nastaví/nuluje příslušné bity. Například
ioctl(fd, TIOCMBIS, &TIOCM_DTR); /* nastaví DTR */
ioctl(fd, TIOCMBIC, &TIOCM_DTR); /* nuluje DTR */
Supr, zase dalsi zrychleni prace..
Mohl bys vysvětlit funkci power()? Odkud vlastně bereš napájení? Někde tam vypadlo "ioctl". K čemu je tam to TIOCSBRK?
Zkousel jsem to z TxD pinu, ale nestacilo to, napeti bylo male a ad prevodnik nefungoval korektne - jediny volny vystupni pin. A zapojovat shift registr se mi nechtelo . TIOCSBRK nahodi txd na log 0, TIOCCBRK na log 1 - BREAK.
0k, pro priste uz to bude podle obvyklych pravidel :o). S RS232 delam tyden, takze to skalopevne vryto do pameti zatim nemam. Prevodnik ma oznaceni TLC549 a je 8bit, v GM asi 60Kc. Je to moc draha sranda a oproti attiny, co jsem vcera konecne koupil, fakt nepomer.
Ahoj, oživuji téma jelikož řeším stejný problém, tento céčkový prográmek jsem si zkompiloval, ale i když spojím v rs232 kontakt např. mezi CTS a DTR tak se nestane nic. Hodnoty jsou stále stejné, tedy jsou to tyto: LE 1, DTR 2, RTS 4, CTS 32, CAR 64
Používám Ubuntu 12.10 Linux 3.5.0-29-generic, ale rs232 port je v pořádku, jelikož jej jinak používám s home-brew ir receivrem pro dálkové ovládání.
ls -lart /dev/ttyS0
crw-rw-rw- 1 root dialout 4, 64 May 9 00:53 /dev/ttyS0
Můžete mě nakopnout kupředu? :D Plácám se v tom.
Nejpraktictejsi mi prislo Serial Programming Guide for POSIX Operating Systems, viz kapitola 4, odstavec "Getting the Control Signals". Pak jsem jeste narazil na linuxove Serial Programming HOWTO, ale to mi tak dobre neprislo.
Na každé straně bych chtěl mít na jednom výstupním pinu neustále 0 jako referenciTa už tam je na pinu 5, viz http://rs232.hw.cz Jinak chápu to dobře, že chceš mít vstup i výstup na stejném pinu? Z těch obrázků bych totiž řekl, že obyčejný sériák nemá žádný obousměrný pin.
"Jinak chápu to dobře, že chceš mít vstup i výstup na stejném pinu? Z těch obrázků bych totiž řekl, že obyčejný sériák nemá žádný obousměrný pin."Nechci, a ani já nevěřím v existenci obousměrných pinů. Ty výstupní piny jsou tři, vstupních je 5 (počítám i stavové), pinů mám víc než dost.
Na každé straně bych chtěl mít na jednom výstupním pinu neustále 0 jako referenci Ta už tam je na pinu 5, viz http://rs232.hw.czTo chcete říct, že na 5. pinu je 12V a když ho spojím s RxD, bude to bráno jako příchod signálu?
To chcete říct, že na 5. pinu je 12V a když ho spojím s RxD, bude to bráno jako příchod signálu?Já jsem pochopil 0 jako 0V, moje chyba. Takže připojení pinu 5 na RxD samozřejmě jako příchod signálu bráno nebude. Nicméně nechápu, na co tu referenci? AFAIK se signál vyhodnocuje proti nule/zemi. Pokud budeš navrhovat své vlastní zařízení, tak to teda můžeš udělat, jak chceš, ale na straně počítače ti ta reference IMHO nebude k ničemu.
Nicméně nechápu, na co tu referenci? AFAIK se signál vyhodnocuje proti nule/zemi. Pokud budeš navrhovat své vlastní zařízení, tak to teda můžeš udělat, jak chceš, ale na straně počítače ti ta reference IMHO nebude k ničemu.Já budu používat laserové diody a dioda potřebuje napájení 2,5V (zhruba) z povolenou odchylkou 0.25V v obou směrech. Seriový port používá 12V (u notebooku 6V). Ve svém obvodu prostě nebudu mít zdroj 12V. Jde to vyřešit nějakým MAXem (takto jsem to už viděl na jakýchsi anglických stránkách), nebo na jednom výstupním pinu mít neustále 12V a v případě příchodu signálu na fotodiodu tento pin propojit (pomocí tranzistoru) s RxD. A dále: myslíte si, že by bylo výhodné použít TUN? Na počítači bych nechal běžet proces, který vyčítá seriový port a data chrlí do /dev/tun (a naopak). A jak se liší jaderný modul od obyčejného programu (komunikujícího se seriovým portem a tun zařízením)? Pokud by rozdíly nebyly příliš velké, nevidím jedniný důvod, proč si nevytvořit modul.
int f1,f2,l,fm;A jak je možné čekat na možnost čtení ze seriového portu? Stačí si třeba jako f1 otevřít /dev/ttyS0? A co pokud si chci hlídat nejen RxD, ale i další stavové piny?
f1 = open(buf, O_RDWR);
f2 = open(buf2, O_RDWR);
fm = max(f1, f2) + 1; //max vrátí vyšší číslo z předaných
while(1){
FD_ZERO(&fds); // Nestačilo by tento blok volat jen jednou, mimo while?
FD_SET(f1, &fds);
FD_SET(f2, &fds);
select(fm, &fds, NULL, NULL, NULL); // Jaký význam zde má to fm?
// a čtení ...
}
Co máš proti přeposílání na /dev/tun?Přijde mi to jako pitomost - posuď sám: 1) kernel obslouží událost přijatého byte ze sériového portu a ten byte vybere. Následně oživí tvůj program ze spánku signálem SIGIO 2) program si vybere přijatý byte (nebo víc bytů, pokud kernel bude bufferovat a počká, až toho přijde víc), nějak je zpracuje a pošle na /dev/tun 3) kernel si data přebere a něco s nimi udělá - např. probudí jiný (nebo i stejný) program ze spánku s tím, že přišla data ze sítě; bude přijatá data routovat, apod. Když použiješ PPP: 1) kernel přijme byte, pak další atd. než z toho seskládá nějaká platná data. Potom udělá to samé, co v bodě 3) v předchozím případě. Směrováním na /dev/tun přehazuješ data zbytečně tam a zpátky. Navíc ten tvůj program poběží v userspace, takže mu kernel nemusí vždy přidělit systémový čas a objeví se ti tam latence. Přiznávám, že to nevím jistě, ale mám ten dojem, že při použití PPP bys k tomu zařízení z programu přistupoval jako k síťovému interface ppp0, nikoliv jako k /dev/ttySn. K tomu kódu: k popisu otevřeného souboru se používá tzv. file descriptor, což je 32bitové celé číslo. To
fm
je číslo, které odpovídá nejvyššímu file descriptoru předávanému funkci select(), +1
A PPP používá jenom piny RxD a TxD?Předpokládám, že pro PPP se dá použít RTS/CTS řízení toku. To znamená, že když spojíš piny 7,8 na portu podle toho obrázku, na který jsem dával odkaz výš, tak jediné, co budeš muset propojit mezi počítači jsou piny RxD a TxD. Vyhledej si někde (třeba tady, jak funguje IrDA, z toho pravděpodobně pochopíš víc, než z mýho zmatenýho vysvětlování
...ale pak bych nemusel psát žádný program, PPP udělá všechno za mě.Jo. Pokud to chceš k něčemu použít, tak si ušetříš práci. Pokud si chceš zkusit, jestli se ti to podaří naprogramovat, tak ti samozřejmě nic nebrání. To vlastně odpovídá i na to přeposílání - pokud to chceš vyřešit po svém, tak je na tobě, jak to uděláš.
Tiskni
Sdílej: