File: gpib.scm

package info (click to toggle)
linux-gpib-user 4.3.7-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,760 kB
  • sloc: ansic: 10,381; perl: 1,120; xml: 375; makefile: 335; yacc: 335; tcl: 308; python: 173; php: 157; lex: 144; sh: 134; lisp: 94
file content (145 lines) | stat: -rw-r--r-- 3,656 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
;;
;; gpib.scm - guile binding for LinuxGpib
;;
;; Copyright (C) 2003 Stefan Jahn <stefan@lkcc.org>
;;
;; LinuxGpib is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2 of the License, or
;; (at your option) any later version.
;;
;; LinuxGpib is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with LinuxGpib; if not, write to the Free Software
;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
;;

(define (println . args) (for-each display args) (newline))

(define gpib:handle '())

(define (gpib:init)
  (catch 'misc-error
         (lambda ()
           (if (not (feature? 'gpib))
               (begin
                 (set! gpib:handle (dynamic-link "libgpib-guile.so"))
                 (dynamic-call "gpib_init" gpib:handle))))
	 (lambda args #f)))

(define (gpib:halt)
  (if (dynamic-object? gpib:handle)
      (begin (dynamic-unlink gpib:handle)
             (set! gpib:handle '()))))

(define (gpib:open index pad sad timeout eoi eos)
  (ibdev index pad sad timeout eoi eos))

(define (gpib:command fd list)
  (let* ((clist '()))
    (for-each (lambda (c)
		(set! clist (cons (integer->char c) clist)))
	      list)
    (ibcmd fd (list->string (reverse clist)))))

(define (gpib:write fd string)
  (ibwrt fd string))

(define (gpib:read fd bytes)
  (ibrd fd bytes))

(define (gpib:find name)
  (ibfind name))

(define (gpib:remote-enable fd enable)
  (ibsre fd enable))

(define (gpib:interface-clear fd)
  (ibsic fd))

(define (gpib:device-clear fd)
  (ibclr fd))

(define (gpib:reset fd)
  (ibonl fd 1))

(define (gpib:close fd)
  (ibonl fd 0))

(define (gpib:wait fd status)
  (ibwait fd status))

(define (gpib:serial-poll fd)
  (ibrsp fd))

(define (gpib:trigger fd)
  (ibtrg fd))

(define (gpib:request-service fd service)
  (ibrsv fd service))

(define (gpib:error-code)
  (iberr))

(define (gpib:counter)
  (ibcnt))

(define (gpib:error)
  (let* ((error (iberr)))
    (cond
     ((equal? error EDVR) "<OS Error>")
     ((equal? error ECIC) "<Not CIC>")
     ((equal? error ENOL) "<No Listener>")
     ((equal? error EADR) "<Adress Error>")
     ((equal? error ECIC) "<Invalid Argument>")
     ((equal? error ESAC) "<No Sys Ctrlr>")
     ((equal? error EABO) "<Operation Aborted>")
     ((equal? error ENEB) "<No Gpib Board>")
     ((equal? error EOIP) "<Async I/O in prg>")
     ((equal? error ECAP) "<No Capability>")
     ((equal? error EFSO) "<File sys. error>")
     ((equal? error EBUS) "<Command error>")
     ((equal? error ESTB) "<Status byte lost>")
     ((equal? error ESRQ) "<SRQ stuck on>")
     ((equal? error ETAB) "<Device Table Overflow>"))))

(export 

 ;; public Gpib procedures
 gpib:init
 gpib:halt
 gpib:open
 gpib:command
 gpib:write
 gpib:read
 gpib:find
 gpib:remote-enable
 gpib:interface-clear
 gpib:device-clear
 gpib:close
 gpib:reset
 gpib:wait
 gpib:serial-poll
 gpib:trigger
 gpib:request-service
 gpib:error-code
 gpib:counter
 gpib:error

 ;; status byte
 DCAS DTAS LACS TACS ATN CIC REM LOK CMPL EVENT SPOLL RQS SRQI END TIMO ERR

 ;; public Gpib commands
 GTL SDC PPC GET TCT LLO DCL PPU SPE SPD UNL UNT PPD

 ;; timeout constants
 TNONE T10us T30us T100us T300us T1ms T3ms T10ms T30ms T100ms T300ms T1s
 T3s   T10s  T30s  T100s  T300s  T1000s

 ;; end-of-string constants
 REOS XEOS BIN
)