Toon posts:

[ncurses] Signal/interupt als een toets wordt ingedrukt

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben een soort kassasysteem aan het maken onder Linux (ncurses) in C, en nou vroeg ik me af of ik een bepaalde functie kan laten uitvoeren als er een toets wordt ingedrukt (zodat bijvoorbeeld de kassalade met het toetsenbord open gedaan kan worden). Weet iemand of dat kan en hoe dat moet?

  • Kix@$$
  • Registratie: December 2001
  • Laatst online: 15:33
Mja dat ligt er natuurlijk net aan hoe alles werkt.

De meeste kassa's hebben gewoon een toetsenbord dat wat verbouwd is en dan stuur je in signaaltje naar een seriele poort en dan gaat de lade open.

Om dit verder echt zeker te weten moet je gewoon de specs van de lade bekijken.

Verwijderd

Topicstarter
De lade heeft 21 vakjes en is ongeveer 50 cm bij 40 cm.

Maar dat doet helemaal niet terzake. Ik wil alleen een functie aanroepen als er een toets wordt ingedrukt.

Verwijderd

Natuurlijk kan dat. Een goed gebouwde applicatie heeft een event loop, die uitvind wat de gebruiker doet. Constateer je dat de gebruiker de 'open lade' toets indrukt dan open je de lade :-) ik zie het probleem zo niet.
In het ncurses geval: doe es "man getch"

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 13 november 2003 @ 11:57:
De lade heeft 21 vakjes en is ongeveer 50 cm bij 40 cm.

Maar dat doet helemaal niet terzake. Ik wil alleen een functie aanroepen als er een toets wordt ingedrukt.
Je kan toch wel in een loopje o.i.d. checken of er een toets is ingedrukt? Of denk ik nu heel erg simpel?

Edit: Wumpus, doe eens niet zo snel :P

[ Voor 6% gewijzigd door Creepy op 13-11-2003 12:01 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Dat programma moet ook nog andere dingen doen dan kijken of de lade-toets is ingedrukt. Het moet ook gewoon nummertjes lezen, database queries doen, etc. Dus een loopje kan niet, want dan blijft hij daarin steken. En om nou iedere keer dat ik wat van het toetsenbord wil hebben te checken of er een bepaalde toets is ingedrukt lijkt me mogelijk, maar wat omslachtig.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 13 november 2003 @ 15:01:
En om nou iedere keer dat ik wat van het toetsenbord wil hebben te checken of er een bepaalde toets is ingedrukt lijkt me mogelijk, maar wat omslachtig.
Maar dat is nou wel precies wat de meeste programma's doen.

Een kassa systeem staat toch gewoon te wachten op input van de gebruiker. Hoe moeilijk kan het zijn om daar ook een extra keyboard handler toe te voegen?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Creepy schreef op 13 november 2003 @ 15:06:
Maar dat is nou wel precies wat de meeste programma's doen.

Een kassa systeem staat toch gewoon te wachten op input van de gebruiker. Hoe moeilijk kan het zijn om daar ook een extra keyboard handler toe te voegen?
Dus dan zou ik mijn eigen getnstr en getch functies moeten maken die controleren of een speciale toets is ingedrukt. Dat zou inderdaad kunnen.

Maar gelukkig heb ik al een makkelijkere manier gevonden voor mijn probleem:
Ik heb een eigen keymap (/usr/share/keymaps/) gemaakt, met daarin:
code:
1
keycode 55 = KeyboardSignal

Dit mapt de het sterretje naar het keyboardsignal. In /etc/inittab verder nog:
code:
1
kb::kbrequest:/bin/laden


Dus het programma /bin/laden wordt opgestart als er op het sterretje wordt gedrukt.

  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 20-08 15:44

LauPro

Prof Mierenneuke®

Hoho, nu ga je wel heel vlot. Volgens mij wil je wel een paar voorwaarden voordat die lade open mag? Zo kan ik me voorstellen dat de kassa's niet meer open moeten kunnen bij brand (tegen diefstal oid).

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


Verwijderd

Topicstarter
LauPro schreef op 13 november 2003 @ 15:20:
Hoho, nu ga je wel heel vlot. Volgens mij wil je wel een paar voorwaarden voordat die lade open mag? Zo kan ik me voorstellen dat de kassa's niet meer open moeten kunnen bij brand (tegen diefstal oid).
Dat kan electronisch buiten de computer uitgevoerd worden, zodat de schakelaar niet om gaat zodra er een alarm is afgegaan ofzo.

De kassa mag ook niet open als er geen gebruiker ingelogd is, dus er zal enige vorm van communcatie moeten plaatsvinden tussen het kassaprogramma en het open-lade-programma, maar dat moet niet zo'n probleem vormen.
Pagina: 1