00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifdef SAVE_RCSID
00011 static char *rcsid =
00012 "@(#) $Id: archlib.c,v 1.6 2006/04/10 10:26:33 trikalio Exp $";
00013 #endif
00014
00015 #include <fcntl.h>
00016 #include <stdlib.h>
00017 #include <string.h>
00018 #include <sys/ioctl.h>
00019 #include <unistd.h>
00020
00021 #include "opencbm.h"
00022 #include "cbm_module.h"
00023
00024 static char *cbm_dev_name = "/dev/cbm";
00025
00026 const char *cbmarch_get_driver_name(int port)
00027 {
00028 return cbm_dev_name;
00029 }
00030
00031 int cbmarch_driver_open(CBM_FILE *f, int port)
00032 {
00033 *f = open(cbm_dev_name, O_RDWR);
00034 return (*f < 0) ? -1 : 0;
00035 }
00036
00037 void cbmarch_driver_close(CBM_FILE f)
00038 {
00039 if(f >= 0) {
00040 close(f);
00041 }
00042 }
00043
00068 void
00069 cbmarch_lock(CBM_FILE f)
00070 {
00071 }
00072
00090 void
00091 cbmarch_unlock(CBM_FILE f)
00092 {
00093 }
00094
00095 int cbmarch_raw_write(CBM_FILE f, const void *buf, size_t size)
00096 {
00097 return write(f, buf, size);
00098 }
00099
00100 int cbmarch_raw_read(CBM_FILE f, void *buf, size_t size)
00101 {
00102 return read(f, buf, size);
00103 }
00104
00105 int cbmarch_listen(CBM_FILE f, __u_char dev, __u_char secadr)
00106 {
00107 return ioctl(f, CBMCTRL_LISTEN, (dev<<8) | secadr);
00108 }
00109
00110 int cbmarch_talk(CBM_FILE f, __u_char dev, __u_char secadr)
00111 {
00112 return ioctl(f, CBMCTRL_TALK, (dev<<8) | secadr);
00113 }
00114
00115 int cbmarch_open(CBM_FILE f, __u_char dev, __u_char secadr)
00116 {
00117 int rv;
00118
00119 rv = ioctl(f, CBMCTRL_OPEN, (dev<<8) | secadr);
00120 return rv;
00121 }
00122
00123 int cbmarch_close(CBM_FILE f, __u_char dev, __u_char secadr)
00124 {
00125 return ioctl(f, CBMCTRL_CLOSE, (dev<<8) | secadr);
00126 }
00127
00128 int cbmarch_unlisten(CBM_FILE f)
00129 {
00130 return ioctl(f, CBMCTRL_UNLISTEN);
00131 }
00132
00133 int cbmarch_untalk(CBM_FILE f)
00134 {
00135 return ioctl(f, CBMCTRL_UNTALK);
00136 }
00137
00138 int cbmarch_get_eoi(CBM_FILE f)
00139 {
00140 return ioctl(f, CBMCTRL_GET_EOI);
00141 }
00142
00143 int cbmarch_clear_eoi(CBM_FILE f)
00144 {
00145 return ioctl(f, CBMCTRL_CLEAR_EOI);
00146 }
00147
00148 int cbmarch_reset(CBM_FILE f)
00149 {
00150 return ioctl(f, CBMCTRL_RESET);
00151 }
00152
00153 __u_char cbmarch_pp_read(CBM_FILE f)
00154 {
00155 return ioctl(f, CBMCTRL_PP_READ);
00156 }
00157
00158 void cbmarch_pp_write(CBM_FILE f, __u_char c)
00159 {
00160 ioctl(f, CBMCTRL_PP_WRITE, c);
00161 }
00162
00163 int cbmarch_iec_poll(CBM_FILE f)
00164 {
00165 return ioctl(f, CBMCTRL_IEC_POLL);
00166 }
00167
00168 int cbmarch_iec_get(CBM_FILE f, int line)
00169 {
00170 return (ioctl(f, CBMCTRL_IEC_POLL) & line) != 0;
00171 }
00172
00173 void cbmarch_iec_set(CBM_FILE f, int line)
00174 {
00175 ioctl(f, CBMCTRL_IEC_SET, line);
00176 }
00177
00178 void cbmarch_iec_release(CBM_FILE f, int line)
00179 {
00180 ioctl(f, CBMCTRL_IEC_RELEASE, line);
00181 }
00182
00183 int cbmarch_iec_wait(CBM_FILE f, int line, int state)
00184 {
00185 return ioctl(f, CBMCTRL_IEC_WAIT, (line<<8) | state);
00186 }
00187
00188 void cbmarch_iec_setrelease(CBM_FILE f, int set, int release)
00189 {
00190 ioctl(f, CBMCTRL_IEC_SETRELEASE, (set<<8) | release);
00191 }