LPT port kontrol C++

Kezdőlap Fórumok Programozás LPT port kontrol C++

10 bejegyzés megtekintése - 1-10 / 61
  • Szerző
    Bejegyzés
  • #1890391
    script
    Felhasználó

      SziasztokSzeretnek egy C++ programot irni (ha van keszen

      #2205274
      pointux
      Felhasználó

        Két lehetőséged van 1) használod a GNU C parport elérés függvényeit (konkrétan C++ nem valószínű, hogy van) 2) direkt címeket használsz.A (1) némileg egyszerűbb, emberibb, a (2) viszont sokkal rugalmasabb, mindenen működik és elég egy assembler is hozzá, de csak a nyers számok...Nekem ez az első találat, de jónak tűnik.Akár egy linux parport filet nyitsz meg, akár direkt címen éred el a portot, utána már csak ki kel küldeni az adatokat, aminél tudni kell, hogy mit.

        #2205275
        pointux
        Felhasználó

          Találtam még egy érdekes és magyar leírást a nyomtatóportról.Amúgy induljunk ki a direkt címzésből:

          Code:
          #include

          Code:
          #define BASEPORT 0x378 // elvileg ez kell neked

          Code:
          ioperm(BASEPORT, 1, 1) // bekapcsolás nem nullával, hiba -1ioperm(BASEPORT, 1, 0) // kikapcsolás nullával

          Code:
          outb(byte, BASEPORT)byte = inb(BASEPORT)

          Hát nagyjából ennyi az elérés, már csak azt kell tudni mit küldesz ki és mit olvasol be.természetesen man ioperm

          #2205276
          pointux
          Felhasználó

            Ja, és természetesen jog kell hozzá. Ez utóbbinál, ha minden igaz /dev/parport file-ok sem kellenek, viszont kell az engedély, hogy direkt címezgesd a portokat. Azaz pl. a saját címezgetődnek root.Ellenben az open(“/dev/parport...”,...)-hoz nem feltétlenül, ugyanis jogokat adhatsz a file olvasására vagy írására is.

            #2205277
            script
            Felhasználó

              Ezt olloztam ossze, innen-onnan, egyenlore csak root kent mukodik.Elsore Kikapcsolja aztan 2sec. utan Be kapcsolja az 1-es labat legalabbis a terminal szerint, meg nem probaltam LED -el.

              Code:
              #include #include #include #include #include #define BASEPORT 0x378using namespace std;int main(){if (ioperm(BASEPORT, 1, 1)){perror("ioperm");cout << "Error!" << endl;exit(1);}cout << "Light offn";outb(0, BASEPORT);sleep(2);cout << "Light onn";outb(1, BASEPORT);sleep(2);if (ioperm(BASEPORT, 1, 0)){perror("ioperm");cout << "Error" << endl;exit(1);}exit(0);}

              #2205278
              script
              Felhasználó

                Holnap kiprobalom a progit elesben, - Kitolom a "sleep" -et tetszolegesre.- Rakotok egy ~470 Ohm koruli ellenallassal egy LED -et az 1-es lab es a Ground koze.- Ha mukodnek a fentiek akkor minden egyes labhoz irok egy hozzaillo scriptet amit kulon meglehet hivni pl: ./lpt1on.sh ,./lpt1off.sh

                #2205279
                script
                Felhasználó

                  Meg valami olyanon agyalok ami kilistazna az eppen aktualis port statuszokat. (hasonlo mint az nmap)Pl;lpt1 ONlpt2 OFF .....Termeszetesen itt a szamok a kivezetesek szamat jelolik.

                  #2205280
                  pointux
                  Felhasználó

                    Nem rootként az ioperm (jog adása) nem fog menni. (De mehet egy root daemonként.)Az open device file, write/read függvények fognak menni (ha a device file írása/olvasása engedélyezett annak a felhasználónak). Gondolom egyébként ott már nem direkt megy, hanem van hozzá valami C struktúrás megoldás (mint az input eventnél, meg ilyeneknél)... passz. Amikor utoljára párhuzamos portot használtam, akkor direkt módon csináltam és leginkább assemblerben.Amúgy azért kellett egy ilyen primitív kódot C++-ben megírni, hogy aztán scripteket írj hozzá? Amúgy semmi közöm hozzá, csak valahogy nem tűnik praktikusnak.Nyilván a C programot parancssorból kiválóan lehet lábakra, de portokra programozni. Nem is beszélve esetleges konfigurációs file-okról, vagy minimum guiról. (Bár az utóbbit, sőt egy bonyolultabb konfigurációt sem biztos, hogy megér, de egy C paraméterlista kezelése sem bonyolultabb, mint egy bash-é. Ha kell, de nem tudod esetleg, akkor inkább kérdezz... a mottónk szerint is szabad. :D)

                    #2205281
                    script
                    Felhasználó

                      Nem rootként az ioperm (jog adása) nem fog menni. (De mehet egy root daemonként.)Az open device file, write/read függvények fognak menni (ha a device file írása/olvasása engedélyezett annak a felhasználónak). Gondolom egyébként ott már nem direkt megy, hanem van hozzá valami C struktúrás megoldás (mint az input eventnél, meg ilyeneknél)... passz. Amikor utoljára párhuzamos portot használtam, akkor direkt módon csináltam és leginkább assemblerben.Amúgy azért kellett egy ilyen primitív kódot C++-ben megírni, hogy aztán scripteket írj hozzá? Amúgy semmi közöm hozzá, csak valahogy nem tűnik praktikusnak.Nyilván a C programot parancssorból kiválóan lehet lábakra, de portokra programozni. Nem is beszélve esetleges konfigurációs file-okról, vagy minimum guiról. (Bár az utóbbit, sőt egy bonyolultabb konfigurációt sem biztos, hogy megér, de egy C paraméterlista kezelése sem bonyolultabb, mint egy bash-é. Ha kell, de nem tudod esetleg, akkor inkább kérdezz... a mottónk szerint is szabad. :D)

                      Mindenbizonnyal igazadvan abban amit fent allitasz, azis valoszinu, hogy nem praktikus a megoldasom, de par hete elhataroztam, hogy C++ -al fogok foglalkozni.Kicsit belefaradtam a szamitastechnikai tudatlansagomba (kicsi bash, kicsit C, kicsit C++) "Jack of all trades master of none" Ezert aztan az osszes eddigi problemamat C++ ban probalom megoldani.Meglehet, hogy 1-2 ev mulva enis mosolyogni fogok azon, hogy mikent oldottam meg dolgokat elozoekben....Koszonom szepen

                      #2205282
                      script
                      Felhasználó

                        Szoval ennek a 2 file nak a formajara atirtam mind a 8 kimenetet.Ugynezki, hogy mukodik a dolog root kent.(Meg azis lehet keszitek neki valami grafikus feluletet aztan csak klikkelgetni kell, (de ez majd egy kesobbi project lesz)).

                        Code:
                        root@machine:/home/script/LPT# chmod 777 -R -v /home/script/LPT/mode of `/home/script/LPT/' changed to 0777 (rwxrwxrwx)mode of `/home/script/LPT/lpt6off.sh' changed to 0777 (rwxrwxrwx)mode of `/home/script/LPT/lpt7off.cpp' changed to 0777 (rwxrwxrwx) s.t.b.

                        Code:
                        script@machine:~/LPT$ ./lpt1on.shioperm: Operation not permittedError!

                        Code:
                        script@machine:~/LPT$ ls -la /dev/parport0crw-rw---- 1 root lp 99, 0 Aug

                      10 bejegyzés megtekintése - 1-10 / 61
                      • Be kell jelentkezni a hozzászóláshoz.