För mååånga år sen när jag körde wingdoze knappade jag ihop några program för att t.ex. blinka discolampor via paralellporten. Och även läsa från den för att tex. koppla in knappar...
Nu undrar jag om någon vet hur man enklast gör detta i Linux... I tex. C++...
EDIT: Efter lite sökande har jag förstått att det har med detta att göra:
Det finns minst 2 olika metoder. Den enklaste är med ioperm() och outb(). Den andra metoden, som inte kräver att programmet körs med root-rättigheter, går ut på att man öppnar "/dev/parport0" med open() och skriver värden till porten med t ex write().
Men nu ser jag att det inte är C/C++ du egentligen du vill ha det i. Ska kolla upp det där ioport-kommandot.
edit: Prova förresten:
printf '\xFF' > /dev/parport0
Där FF är ett tal i hexadecimalform. Vet inte om det fungerar, men sådana här saker brukar vara lätta att trolla fram under Linux.
Senast redigerad av cykze 23 januari 2005, 22:16:54, redigerad totalt 1 gång.
chille skrev:Är du helt novice, eller är jag dålig på att gissa? Står väl rätt tydligt hur de funkar?
Testa:
ioport outb 0x378 0xff
Kanske måste skriva talen i decimal form iofs.
Annars bode det finnas något i /dev som man kan använda sig av.
Mjae... vad är <index> för? Och de där kommandona är egna kommandon, man kör bara outb tex. inte ioport outb...
Och hur för man reda på den där knepiga port-adressen?
Verkar enklare att skriva till parport0... Kanske "echo <data> > /dev/parport0"? Frågan är då vad man skall skicka till den för att öppna/stänga/läsa pinnar...
Index står inom hakparanteser och är alltså optionella (behövs inte i alla sammanhang).
Dom knepiga adresserna är samma knepiga adresser som du tidigare använde i windows.
Hur svårt är det att prova både varianterna? Både men out utan ioport innan? Får du ett felmedelande är det fel. Får du inget felmeddelande är det förmodligen rätt.
En gång i tiden saknade jag också information om detta så jag tog reda på hur man gjorde och fixade lite kod... skulle lägga upp kod för både input och output, men kom tydligen inte längre än output. Har lagt det på SourceForge: http://parrelay.sourceforge.net/
Är ioport något skämtkommando eller? Oavsett vilka parametrar man skickar in så händer det ingenting, mer än att den där listan kommer upp. Den har ingen man- eller info-sida och det står inte vem som har gjort programmet eller vilken version det är. "apropos ioport" ger inte heller någonting. Bland det konstigaste programmen jag har sett iaf.
Hur som helst är det ju lätt att skriva ihop ett litet program i C som du kan kommunicera med genom Bash.
Ioport är samlingsnamnet för alla de där kommandona, och matseng; de ska köras utan ioport framför jo...
"Parrelay" verkar ju smidigt, men jag vill ju kunna läsa från porten också...
Det enklaste och bästa vore nog att använda ioport-kommandona... Om man bara visste vad man skulle skicka till dem för att läsa/skriva till en viss pinne på porten...
Jag testade parrelay med en lysdiod mellan stift2 och jord... Funka inge vidare... Dioden lös "by default", innan jag kört parrelay... Och den slocknade heller inte när ja körde parrelay...
Testade också med "outb 956 1" och liknande, med samma resultat
maxxflow skrev:Jag testade parrelay med en lysdiod mellan stift2 och jord... Funka inge vidare... Dioden lös "by default", innan jag kört parrelay... Och den slocknade heller inte när ja körde parrelay...
Testade också med "outb 956 1" och liknande, med samma resultat
Säker på att du använde rätt portnummer? "<port> is 956(lp0), 888(lp1) or 632(lp2)"
Jag kör själv portrelay på en ljudkontrollmanick med reläer, funkar fint.
Vad händer om du kör outb 956 0?
Tjoho! Det funkar! Portadressen var 888 vilket jag tycker är lite konstigt, eftersom jag bara har 1 port och den borde sitta som lp0...
Men hursomhelst; om jag kör outb 888 1 så tänds pinne 2, outb 888 0 så släcks pinne 2.
Om jag kör outb 888 2 så tänds pinne 3, outb 888 0 släcker nu pinne 3, men _inte_ pinne 2 om den redan var tänd. outb 888 0 verkar därför släcka den pinne som senast tändes? Verkar lite knepigt, men det funkar. Om man vill släcka en pinne som inte e "aktiv" e de ju bara att köra tänd-kommandot för den pinnen, så den fattar att det är den man vill åt...
Ta inte illa upp PHermansson, men ditt program är nästan lite onödigt då det fungerar exakt på samma sätt...