Linux wedge (driver) for Microvision Flic strekkodeskanner
Jeg har et par gamle Flic strekkodeskannere som har ligget på hylla og samlet støv i et par år. Sist gang jeg bruke dem brukte jeg fortsatt Windows XP som mitt primære operativsystem. Her forleden dag installerte jeg Tellico og bestemte meg for å katalogisere min enorme samling av bøker. En strekkodeskanner vil gjøre jobben mye lettere. Så nå trenger jeg en Linux driver til disse fine skannerene mine. Det tok meg omtrent 6 timer å konkludere med at den eneste programvarewedgen tilgjengelig for Flic skanneren i Linux er lukket kilde, ikke gratis og støtter bare kablet tilkobling, ikke Bluetooth. Som en litt nostalgisk type som drømmer om de gode gamle dager da "men var menn og skrev sine egne drivere" tenkte jeg; "hey, det er tross alt bare seriellkommunikasjon, hvor vanskelig kan det være?". Jeg satte meg derfor ned og skrev min egen programvarewedge i Perl. Det tok meg hele en natt. Og nå deler jeg den med deg:
OPPDATERING: Jeg har nettopp sluppet versjon 1.1 av FlicServ. Denne versjonen fjerner en “race condition” som resulterte i at linjeskift potensielt ble plassert på feil sted, enten før eller midt inne i strekkoden. Last ned nedenfor.
Installasjonsinstrukser
Disse instruksjonene er skrevet for Debianbaserte operativsystemer (slik som Ubuntu), men prosedyren bør være ganske lik i et hvilket som helst Linuxsystem.
Før du bruker dette programmet bør du stille strekkodeskanneren tilbake til fabrikksinstillingene ved å skanne strekkoden i brukermanualen. Noen ikkestandardinnstillinger som er tilgjengelig på strekkodeleseren er ikke (enda?) støttet av dette programmet.
- Last ned siste kilde fra https://github.com/deadcyclo/flicserv
- Åpne en terminal
- Pakk ut innholdet av filen du lastet ned til en mappe du selv velger
tar zxvf FlicServ.tar.gz
- Sørg for at begge Perl-programmene er kjørbare
sudo chmod 755 FlicServ pop
- Installer nødvendige Perl-moduler og applikasjoner
sudo apt-get install libdevice-serialport-perl libthreads-perl libthreads-shared-perl xautomation
- Lag en global hurtigtast til pop applikasjonen. Dersom du ikke vet hvordan du gjør dette kan du følge eksempelet i min global hurtigtast guide og bytt ut
/usr/bin/emacs
med/path/to/pop
Kablet bruk
Dette har blitt testet med seriellkabelen som fulgte med Flic skanneren samt samme kabel koblet til via en R232-USB adapter, men en hvilken som helst kabel fra Microvision burde fungere.
- Først må du finne ut hvilken port skanneren er koblet til, f. eks.
/dev/ttyUSB0
. Jeg kommer til å bruke/dev/ttyUSB0
i alle eksemplene framover. Bare bytt ut/dev/ttyUSB0
med porten din skanner er koblet til. - Åpne en terminal
- Start applikasjonen
./FlicServ /dev/ttyUSB0
- Begynn å skann strekkoder. Hver gang du skanner en kode bør du se teksten
pushed xxxxxxxxx
I terminalen hvor xxxxxxxxx er strekkoden du skannet. - Du kan også koble fra strekkodeskanneren fra kabelen, gå avsted og skanne en hel mengde koder, komme tilbake og koble skanneren til kabelen på ny. Alle kodene du har skannet skal automatisk bli "pushet" og skanneren gir et lite blipblipblip fra seg for å fortelle deg at minnet er blitt tømt.
- Nå åpner du et tekstdokument i din favoritteditor og trykker hurtigtasten du tidligere la til. Den første strekkoden du skannet vil nå bli skrevet inn i dokumentet.
- I terminalen burde du nå se teksten
poped xxxxxxxxx
- Dette kan du gjenta så mange ganger du trenger.
- "Pushing" og "poping" kan gjøres i hvilken som helst rekkefølge til hvilken som helst tid.
--noserver
Dersom du legger til --noserver
opsjonen når du starter applikasjonen vil applikasjonen automatisk "pope" strekkoder straks du skanner dem.
--linefeed
Dersom du legger til --linefeed
opsjonen når du starter applikasjonen vil programvaren simulere at du trykker enter etter at en strekkode har blitt "popet". --linefeed
opsjonen fungerer både i --noserver
og vanlig modus.
Bluetooth bruk
Før du bruker wedgen sammen med Bluetooth må du gjøre noen flere konfigurasjonsendringer.
- Åpne en terminal.
- Klikk på skannknappen på strekkodeleseren slik at den er i oppdagelsesmodus.
- Skriv inn kommandoen
hcitool scan
- Resultatet skal være en liste omtrent som denne:
Scanning ...
00:A0:96:0B:21:78 Cordless
00:01:E3:72:FE:5C Homephone
- Nå kopierer du MAC-adressen (listen med tall skilt med kolon) ved siden av navnet på din strekkodeleser.
- Tast inn kommandoen
hcitool cc 00:A0:96:0B:21:78
(husk å bytte ut mac-adressen med den du fant tidligere) - Bluetooth ikonet på menyen skal nå begynne å blinke og en melding skal vises som ber deg om å taste inn pinkode. (Min datamaskin viser ikke alltid denne meldingen. Dersom dette skjer trenger du bare å dobbeltklikke på det blinkende Bluetooth ikonet og du vil bli bedt om pinkode).
- Tast inn pinkoden
0000
(Dette er standard pinkode for Microvision strekkodelesere). - Gå inn i Bluetoothpreferanser (Høyreklikk på Bluetoothikonet) og merk strekkodeleseren som "Trusted".
- Åpne
/etc/bluetooth/rfcomm.conf
som root i din favoritteditor - Legg til følgende i filen (bruk MAC-adressen du kopierte tidligere):
rfcomm0 {
bind no;
device 00:A0:96:0B:21:78;
channel 1;
comment "Flic barcode reader serial port"; }
- Dersom du allerede har en instans som heter rfcomm0 bytter du bare ut 0 med et høyere tall.
- Kjør kommandoen sudo
/etc/init.d/bluetooth restart
- Du kan nå bruke programvaren på nøyaktig samme måte som beskrevet under kablet bruk. Bare bytt ut
/dev/ttyUSB0
med/dev/rfcomm0
. Sørg for at du alltid klikker på skannknappen for å gjøre skanneren oppdagbar før du starter programvaren.
Automatisk bluetooth gjenoppkobling
Jeg fikk akkurat følgende script som gir automatisk gjenoppkobling av BlueTooth-forbindelse (Jeg har ikke testet scriptet) fra Ravikiran Vishnuvajhala:
#!/bin/bash
DISPLAY=:1
export DISPLAY
while [ 1 ] do
bt_connect_pid=`ps -ef | grep 'rfcomm connect' | grep -v color | grep -v 'grep'`
#echo """"Device connected or not: $bt_connect_pid""""
if [ """"$bt_connect_pid"""" == """""""" ] then
flic_running=`ps -ef | grep Flic | grep comm | grep -v color | grep -v 'grep' | nawk '{print $2}'`
#echo """"Flic is running or not: $flic_running""""
if [ """"$flic_running"""" != """""""" ] then
kill $flic_running
fi
#echo """"Starting the Flic Wedge....""""
/FlicServ/FlicServ /dev/rfcomm0 --noserver --linefeed &
#echo """"Started the Flic Wedge....""""
fi
sleep 1
done
Nedlasting
https://github.com/deadcyclo/flicserv
Kos deg!
Jeg blir svært glad for å motta tilbakemeldinger, tips eller spørsmål.
Photo by Ricardo Gomez Angel / Unsplash