[Gambas-user] Parallel Port - Illegal Seek -
nando
nando_f at ...951...
Tue Apr 6 23:36:05 CEST 2010
Using SEEK is not correct.
If you think of the parallel port as a file, you cannot seek.
It doesn't make sense.
You can only read and write.
What are you trying to accomplish ?
-Fernando
---------- Original Message -----------
From: Bjorn Macintosh <bjorn.macintosh at ...626...>
To: gambas-user at lists.sourceforge.net
Sent: Fri, 2 Apr 2010 21:09:58 +1300
Subject: [Gambas-user] Parallel Port - Illegal Seek -
> 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
> ------------------------------------------------------------------------------
> Download Intel® Parallel Studio Eval
> Try the new software tools for yourself. Speed compiling, find bugs
> proactively, and fine-tune applications for parallel performance.
> See why Intel Parallel Studio got high marks during beta.
> http://p.sf.net/sfu/intel-sw-dev
> _______________________________________________
> Gambas-user mailing list
> Gambas-user at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gambas-user
------- End of Original Message -------
More information about the User
mailing list