[Gambas-user] Parallel Port - Illegal Seek -

Bjorn Macintosh bjorn.macintosh at ...626...
Fri Apr 2 10:09:58 CEST 2010


Hi All,

I am writing a parallel port interface, however I am struggling with how to
write to the parallel port.  Below I have included the code that I have
used.  Following that I have included the BASIC code that I am bastardizing.

My Gambas version is Gambas2.13
I am running Linux Mint 8
I do have a parallel port on my PC. It is '0378' - '037a' and '0778' -
'077a'
The error code I am getting is "System error. illegal seek"

Thanks in advance for any help anyone can give.
---------------------------------------------------------------------GAMBAS2
CODE FOLLOWS------------------------------------------------------
' Gambas module file
PUBLIC SUB Main()

DIM N AS Integer
DIM pin AS Integer
DIM pinout AS Integer[] = [0, 0, 0, 0, 0, 0, 0, 0]
DIM pump AS Integer
DIM Ptime AS Integer
DIM Clock AS Integer
DIM UClock AS Integer
DIM DClock AS Integer
DIM commit AS Integer
DIM poweron AS Integer
DIM switch AS Integer
DIM gate AS File
DIM base0, base1, base2 AS Integer

base0 = 0
base1 = 1
base2 = 2
poweron = 64
commit = 144
switch = 17
UClock = 130
DClock = 128
  gate = OPEN "/dev/parport0" FOR READ WRITE
  SEEK #gate, base0
  WRITE #gate, poweron
  FOR Ptime = 1 TO 2000 STEP 1
  NEXT

  SEEK #gate, base2
  WRITE #gate, switch

  GOTO START
CommitChanges:
  FOR N = 0 TO 7 STEP 1
    pump = CInt(1000000 & pinout[Fix(N)])
    Clock = CInt(1000001 & pinout[Fix(N)])
    SEEK #gate, base0
    WRITE #gate, pump
    FOR Ptime = 1 TO 2000 STEP 1
    NEXT
    SEEK #gate, base0
    WRITE #gate, Clock
    FOR Ptime = 1 TO 2000 STEP 1
    NEXT
    SEEK #gate, base0
    WRITE #gate, pump
  NEXT
    FOR Ptime = 1 TO 2000 STEP 1
    NEXT

  FOR N = 1 TO 16 STEP 1
    SEEK #gate, base0
    WRITE #gate, UClock
    FOR Ptime = 1 TO 2000 STEP 1
    NEXT
    SEEK #gate, base0
    WRITE #gate, DClock
  NEXT
    FOR Ptime = 1 TO 2000 STEP 1
    NEXT
  SEEK #gate, base0
  WRITE #gate, commit
    FOR Ptime = 1 TO 2000 STEP 1
    NEXT
  SEEK #gate, base0
  WRITE #gate, poweron
  GOTO PrintPinout

PrintPinout:
  FOR N = 0 TO 7 STEP 1
    PRINT pinout[Fix(N)]
  NEXT
  GOTO START

PinSelectFail:
  PRINT "You have selected a pin that does not exist, careful as this may
cause a divide by 0 and end the universe,  Select between pin 0 and pin 7"
  GOTO START

START:
  PRINT "What input do you want to toggle? (pins 0 -> 7 are outputs, Pin 8
is the activation sequence)"
  INPUT pin
  IF pin < 0 OR pin > 8 THEN
    GOTO PinSelectFail
  ELSE IF pin = 8 THEN
    GOTO CommitChanges
  ELSE IF pinout[Fix(pin)] = 0 THEN
    pinout[Fix(pin)] = 1
  ELSE IF pinout[Fix(pin)] = 1 THEN
    pinout[Fix(pin)] = 0
  ENDIF
GOTO PrintPinout
END
---------------------------------------------------------------------Gambas2
END------------------------------------------------------------------------




---------------------------------------------------------------------BASIC
CODE FOLLOWS------------------------------------------------------

BASE0=&H378

'SWITCH POWER AND OUTPUTS ON
OUT BASE0, &H80
OUT BASE0 + 2, 11

'DEFINE ALL DIGITAL OUTPUTS [OUT(N)] AS BEING OFF (0)
FOR N = 0 TO 7
    DOUT(N) = 0
NEXT N
DOUT=0

START:
    INPUT "WHICH DIGITAL OUTPUT DO YOU WANT TO TOGGLE (0 TO 7)...."; N
    IF N < 0 OR N > 7 THEN GOTO START
    N = FIX(N)
    DOUT9N0=ABS(NOT (-DOUT(N))) ' THIS LINE TOGGLES THE OUTPUT


'CREATE COMPLETE BYTE FOR IC3 CALLED DOUT
    FOR N = 0 TO 7
        IF DOUT(N) = 0 THEN
            DOUT = DOUT AND NOT (2^N)
        ELSE
            DOUT = DOUT OR 2^N
        ENDIF
    NEXT N

'SEND 8 CLOCK PULSES AND DIGITAL OUT DATA (ALL ZERO'S)
    FOR BIT = 1 TO 8
        B = 8 - BIT
        BYTE = ((DOUT AND 2^B) / 2^B) OR &H80
        OUT BASE0, BYTE
        OUT BASE0, BYTE OR 2
       OUT BASE0 BYTE
    NEXT BIT

'SEND ANOTHER 16 CLOCK PULSES TO SHIFT THE DATA INTO IC3
FOR BIT = 9 TO 24
    OUT BASE0, &H82
    OUT BASE0, &H80
NEXT BIT

'LOAD IC3
OUT BASE0, &H90
OUT BASE0, &h80]

---------------------------------------------------------------------BASIC
END------------------------------------------------------------------------


Bjorn Macintosh



More information about the User mailing list