Kendyho Watchdog: Porovnání verzí

Z HKfree wiki
Skočit na navigaci Skočit na vyhledávání
(doplneni jaka jsou oznaceni portu v linuxu)
Řádek 41: Řádek 41:
  
 
PS: Ty LED diody navíc jsou hlavně na ozdobu a jsou připojeny na některé výstupy 4017ky (přes odpory pochopitelně). Slouží i k indikaci běhu watchdogu.
 
PS: Ty LED diody navíc jsou hlavně na ozdobu a jsou připojeny na některé výstupy 4017ky (přes odpory pochopitelně). Slouží i k indikaci běhu watchdogu.
 +
 +
 +
----
 +
----
 +
 +
'''Připojení na LPT port'''
 +
Ještě sem pak dopíšu zbytek
 +
 +
<nowiki>
 +
cat wdlpt.c
 +
 +
#include <stdio.h>
 +
#include <stdlib.h>
 +
#include <asm/io.h>
 +
#include <signal.h>
 +
 +
#define BASEPORT 0x378
 +
 +
static int end;
 +
 +
static void endme(int dummy)
 +
{
 +
    end=1;
 +
}
 +
 +
int main(int argc, char **argv) {
 +
 +
    if (ioperm(BASEPORT, 3, 1)) {
 +
        // ask for permissions to access the parallel port
 +
        // YOU MUST BE ROOT TO ASK FOR THIS SORT OF PERMISSION, so
 +
        //    don't forget to 'su' yourself ;-)
 +
        // usage of ioperm: BASEPORT ... base address we want to use
 +
        //              3 ... the next 3 bytes
 +
        //              1 ... we want the permission
 +
        perror("ioperm open");
 +
        exit(1);
 +
    }
 +
 +
    signal(SIGINT, endme);
 +
 +
    outb(0, BASEPORT + 2); // set to output mode
 +
 +
    int num = 1;
 +
    while (num-- > 0) {  // adjust usleep if you want
 +
        sleep(1);
 +
        outb(0, BASEPORT + 2);
 +
        sleep(1);
 +
        outb(2, BASEPORT + 2);
 +
    }
 +
 +
    freeperm(); // tell the system we do not use the port anymore
 +
 +
    exit(0);
 +
}
 +
 +
int freeperm() {
 +
    if (ioperm(BASEPORT, 3, 0)) {
 +
        // tell the system we do not use the port anymore
 +
        // usage of ioperm: BASEPORT ... base address we want to use
 +
 +
        //                                      3 ... the next 3 bytes
 +
        //                                      0 ... free the permission
 +
        perror("ioperm close");
 +
    }
 +
}</nowiki>
 +
 +
Prelozit gcc wdlpt.c -o wdlpt
 +
'''''Spustit''''' nohup bash -c "while true; do /addr/wdlpt; sleep 10s; done" &

Verze z 23. 2. 2005, 09:41

Resetator.jpg

Schema je taky tady. Naklady na vyrobu jednoho jsou minimalni (do 100 Kc i s kabelem). Zarizeni na schematu se pripojuje na seriovy port, druhy "drat" na reset piny desky a treti je napajeni 5V. Obsluhuje ho maly demonek. Funguje tak, ze kdyz vytuhne router, tak do 5 minut se stroj pomoci tohoto udelatka vyresetuje. Uspesne odzkouseno (a je ted funkcni) toto zapojeni na AP Spar a na nasem hlavnim pocitaci ORIONu.

Natavení v linuxu:
Spustit

nohup bash -c "while true; do echo watchdog > /dev/ttyS0; sleep 60s; done" &
  • nohup - zpusobi, ze program zustane bezet i po zavreni konzole
  • bash - interpreter skriptu
  • watchdog - retezec, ktery je odesilan na seriovy port (muze byt misto watchdog treba i text "ferda_mravenec")
  • /dev/ttyS0 - je port na ktery je retezec posilan (Linux značí porty takto: COM1=ttyS0, COM2=ttyS1,...)
  • 60s - je doba mezi jednotlivymy vysilanimi.

Tuto radku staci zapsat do startovaciho skriptu routeru.

-- Kendy

PS: Kdo by mel nejasnosti tak at se tu na newsech zepta. Dovysvetlim.

Pinouts

74HC14
7414.jpg
74HC4017
4017.gif
(description)
BC547 (-,A,B,C)
Bc547.png

Jak to může vypadat

Foto

Já (pavkriz) jsem postavil watchdoga do Stěžer na kousku univerzálního plošnáku co jsem doma našel (běžně stojí asi 100Kč formát asi jako papír A6, na watchdog stačí daleko menší, ale koupit lze jen tento formát pokud vím).

Napájení mám udělané s použitím starého konektoru od harddisku, resp. od CDROMky na který jsem naletoval kablíky vedoucí k watchdogu a zapojil ho na napájecí konektor ze zdroje.

Pozor taky na to, že na "polaritě" kablíku co potáhnete k resetu záleží (běžně když je tam tlačítko tak nikoliv) - tudíž vyzkoušejte.

Takže celý můj watchdog je venku na konektoru který je zapojený do COMu a do case vedou celkem 4 vodiče - 2x napájení a 2x reset.

IO mám zapojené do patic (obyč) - pro případ ze bych nějaký při manipulaci prorazil statickou elekřinou, aby bylo snadné jej vyměnit.

Navíc jsem zrobil brobátko bastl-verzi démonka pro obsluhu watchdoga v C-čku: watchdog-r1.tgz (místo původního skriptu nohup....)

PS: Ty LED diody navíc jsou hlavně na ozdobu a jsou připojeny na některé výstupy 4017ky (přes odpory pochopitelně). Slouží i k indikaci běhu watchdogu.




Připojení na LPT port Ještě sem pak dopíšu zbytek

cat wdlpt.c #include <stdio.h> #include <stdlib.h> #include <asm/io.h> #include <signal.h> #define BASEPORT 0x378 static int end; static void endme(int dummy) { end=1; } int main(int argc, char **argv) { if (ioperm(BASEPORT, 3, 1)) { // ask for permissions to access the parallel port // YOU MUST BE ROOT TO ASK FOR THIS SORT OF PERMISSION, so // don't forget to 'su' yourself ;-) // usage of ioperm: BASEPORT ... base address we want to use // 3 ... the next 3 bytes // 1 ... we want the permission perror("ioperm open"); exit(1); } signal(SIGINT, endme); outb(0, BASEPORT + 2); // set to output mode int num = 1; while (num-- > 0) { // adjust usleep if you want sleep(1); outb(0, BASEPORT + 2); sleep(1); outb(2, BASEPORT + 2); } freeperm(); // tell the system we do not use the port anymore exit(0); } int freeperm() { if (ioperm(BASEPORT, 3, 0)) { // tell the system we do not use the port anymore // usage of ioperm: BASEPORT ... base address we want to use // 3 ... the next 3 bytes // 0 ... free the permission perror("ioperm close"); } }

Prelozit gcc wdlpt.c -o wdlpt Spustit nohup bash -c "while true; do /addr/wdlpt; sleep 10s; done" &