Linux gcc, läsaALLA tangenter i textmode?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Nerre
Inlägg: 26655
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Linux gcc, läsaALLA tangenter i textmode?

Inlägg av Nerre »

janno
Inlägg: 403
Blev medlem: 11 oktober 2009, 07:34:45
Ort: Västerås

Re: Linux gcc, läsaALLA tangenter i textmode?

Inlägg av janno »

Edit: Nerre var någon sekund snabbare.

Jag hittade den här:
http://www.tldp.org/HOWTO/pdf/Keyboard- ... -HOWTO.pdf

Detta kanske kan hjälp till lite. Hoppas det fungerar utan att X är laddat. Det är sidan 26 i länkade pdfn.

15.1 `I can use only one finger to type with'
"Can the Shift, Ctrl and Alt keys be made to behave as toggles?"
Yes, after saying
% loadkeys keymaps 0−15 keycode 29 = Control_Lock keycode 42 = Shift_Lock keycode 56 = Alt_Lock %
the left Control, Shift and Alt keys will act as toggles. The numbers involved are revealed by showkey (and usually are 29, 97, 42, 54, 56, 100 for left and right control, shift and alt, respectively), and the functions are Control_Lock, Shift_Lock, Alt_Lock, ALtGr_Lock.
"What about `sticky' modifier keys?"
Since version 1.3.33, the kernel knows about `sticky' modifier keys. These act on the next key pressed. So, where one earlier needed the 3−symbol sequence Shift_Lock a Shift_Lock to type `A', one can now use the 2−symbol sequence SShift_Lock a. You can say
% loadkeys keymaps 0−15 keycode 54 = SShift keycode 97 = SCtrl keycode 100 = SAlt %
to make the right Shift, Ctrl, Alt sticky versions of the left ones. This will allow you to type Ctrl−Alt−Del in three keystrokes with one hand.

Nästa avsnitt är "Sticky keys under X"
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6889
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Linux gcc, läsaALLA tangenter i textmode?

Inlägg av Marta »

Har kommit en bit på väg, men hela tiden nya hinder.
Det finns en ioctl som ka ställa om till att skicka scancodes istället för ansi. Dessvärre är vissa av dessa koder samma som tecken som får det att hända saker. Ctrl-c t.ex. Denna gick att stoppa, men då slukas den. Antar att SIGINT inte bara skall ändras till SIG_IGN, utan även sätta in teckne, eller där kanske finns någon flag att ställa om eller alternativ till getch som inte är duktig och hjälpsam. Kanske läsa med read istället.

Hur som helst, stannar programmet med omställt kbd så är datorn dykt. Den återställer inte själv när processen terminerar.
Provade att köra den från en annan process som gör fork() och exec(). Fungerar fint vid normal terminering. Vid en av de oväntade termineringarna står det bara Stopped och återställningen uteblir. Det första programmet går inte ur wait för att det stökiga skall terminera. Dags för Power button...

Finns det något sätt att inkludera kod som _ovillkorligen_ exekveras i samband med att en process terminerar eller blir "Stopped"?

SSH från en RPi bredvid kanske kan terminera en "Stopped", men utan ID för terminalen med strul går det inte att ställa om den, om ens då. Antar där är säkerhetskrafs som förhindrar det.
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Linux gcc, läsaALLA tangenter i textmode?

Inlägg av Icecap »

Marta: en fråga bara - vad om man monterar en brytare för Shift, Ctrl, Alt och Alt Gr? En sådan med en pinne på, enkel att betjäna.

Då blir det en fråga om att flippa en brytare för att uppnå önskad effekt. Inte blir det vackert men definitivt till att göra - om det inte är ett t-bord i en laptop såklart.

Som brytare tänker jag t.ex. som generisk typ.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6889
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Linux gcc, läsaALLA tangenter i textmode?

Inlägg av Marta »

Problemet med enhandsmanövrering skulle gå att lösa med brytaare antagligen på bord med riktig slutande funktion och det är antagligen det som finns i oderna skräpbord. Gamla keytronic eller ibm har kapacitiva brytare och ger antagigen svårigheter.

Problemet med att få programmet att fungera i textläge kvarstår dessvärre ändå.. Har provat nu att läsa med read(STDIN_FILENO, &c, 1); utan resultat. Trycker jag på 'å' så obevekligt Stopped...

Vad i hel**te är lösningen på detta? Skall gå att mappa om koderna enligt någon text jag hittade. Undrar om det kan lösa detta? Hade helst velat ha något enklare.

Finns det något alternativ till \n för att flusha printf? Hade velat kunna använda sista raden.

Tillägg:
Macro: int SIGSTOP
The SIGSTOP signal stops the process. It cannot be handled, ignored, or blocked.

Finito?
Maalobs
Inlägg: 1299
Blev medlem: 3 februari 2005, 14:35:15
Ort: Stockholm

Re: Linux gcc, läsaALLA tangenter i textmode?

Inlägg av Maalobs »

Jag är förvånad att de här handikappfunktionerna inte finns i Linux, det finns ju specialdistributioner för blinda.

Men alltså, är ditt mål att du vill få ihop något som hjälper dig i din nuvarande enhänta situation?
Som du säkert vet så kan du ha flera USB-tangentbord inkopplade samtidigt, och alla fungerar att använda samtidigt.
Så, en möjlig hårdvarulösning vore att köra en Arduino som HID-keyboard och ha tre "tangenter" angivna på vardera GPIO-port, med lämpliga tvålägesbrytare anslutna.
Då kan du ha shift, control och alt på de brytarna på en bit veroboard.
Antingen vippomkopplare som föreslogs, eller tryckomkopplare med två lägen, det är väl latching push button de kallas.

Och återigen, vill du ha ett Matias halfkeyboard så är erbjudandet fortfarande öppet.
Om inte annat så kan du ju slakta det och modda de tre vitala tangenterna.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6889
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Linux gcc, läsaALLA tangenter i textmode?

Inlägg av Marta »

Tack för all hjäp att komma på rätt spår.
Den här testsnutten fungerar!
Fy vad stökigt de gjort tangentbordshanteringen. Speciellt om processen terminerar på oväntat sätt och lämnar burken i ett läge där endast powerknappen fungerar. Eller reset, men då blir det ofin avstängning.

Kod: Markera allt

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termio.h>
#include <termios.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/kd.h>

int main(){
  unsigned long long int c;
  
 struct termios newattr, oldattr;

 tcgetattr( STDIN_FILENO, &oldattr );
 newattr = oldattr;
 newattr.c_iflag &= ~( ISTRIP | INLCR | ICRNL | IGNCR | IXON | IXOFF );
 newattr.c_lflag &= ~( ICANON | ECHO | ISIG );
 tcsetattr( STDIN_FILENO, TCSANOW, &newattr );

 //printf ("ioctl %d\n", ioctl(STDIN_FILENO, KDSKBMODE, K_RAW));
 printf ("ioctl %d\n", ioctl(STDIN_FILENO, KDSKBMODE, K_MEDIUMRAW));

  do{
    //c=getch();
    c=0;
    read(STDIN_FILENO, &c, 8);
    if (~c&0x80)
      printf("ch  %02x\n", c);
  }while (c!=0x39);  

 printf ("ioctl %d\n", ioctl(STDIN_FILENO, KDSKBMODE, K_XLATE));
 tcsetattr( STDIN_FILENO, TCSANOW, &oldattr );
};
Angående tangentbord har jag varit inne på att använda pedal för vissa knappar ihop med en USB PIC för att göra det lättare att cadda kort, vad jag nu skall med dem till utan lödmöjlighet.
Jag får se hur det blir framöver. antingen blir stenhanden drägligt bra, eller så...
Skriv svar