- GPIB/ECB modules completed, ecb motor driver in progress

This commit is contained in:
cvs
2003-01-17 16:09:34 +00:00
parent bbc0b64c43
commit f45c3ebf55
27 changed files with 2030 additions and 84 deletions

106
nigpib.c Normal file
View File

@ -0,0 +1,106 @@
/*
This is an implementation of a GPIB driver based on the drivers
provided by National Instruments. The driver has been tested
with the ENET-100 GPIB-TCP/IP bridge but should also work with
NI GPIB boards plugged into the composter.
copright: see file COPYRIGHT
Mark Koennecke, January 2002
*/
#include <stdlib.h>
#include <assert.h>
#include <errno.h>
#include <tcl.h>
#include "fortify.h"
#include "sics.h"
#include <ugpib.h>
#include "gpibcontroller.i"
typedef struct __GPIB *pGPIB;
/*--------------------------------------------------------------------------*/
static int NIattach(int boardNo, int address, int secondaryAddress,
int tmo, int eot, int eos){
int devID;
devID = ibdev(boardNo, address, secondaryAddress, tmo, eot, eos);
if(devID < 0){
return -iberr;
} else {
return devID;
}
}
/*---------------------------------------------------------------------*/
static int NIdetach(int devID){
int status;
status = ibonl(devID, 0);
if(status & ERR){
return -iberr;
} else {
return 1;
}
}
/*-------------------------------------------------------------------*/
static int NIwrite(int devID, void *buffer, int bytesToWrite){
int status;
status = ibwrt(devID,buffer,bytesToWrite);
if(status & ERR){
return - iberr;
} else {
return 1;
}
}
/*-------------------------------------------------------------------*/
static int NIread(int devID, void *buffer, int bytesToRead){
int status;
status = ibrd(devID,buffer,bytesToRead);
if(status & ERR){
return - iberr;
} else {
return 1;
}
}
/*--------------------------------------------------------------------*/
static void NIclear(int devID){
ibclr(devID);
}
/*-----------------------------------------------------------------*/
static void NIerror(int code, char *buffer, int maxBuffer){
int flag = - code;
switch(flag){
case EDVR:
case ENEB:
case ECIC:
strncpy(buffer,"NI-GPIB not correctly installed or bad address",
maxBuffer);
return;
case EABO:
strncpy(buffer,"Timeout on data transfer",maxBuffer);
return;
case EBUS:
strncpy(buffer,"No device connected to GPIB or address errror",
maxBuffer);
return;
case ENOL:
strncpy(buffer,"No listeners on bus. Perhaps address error?",
maxBuffer);
return;
default:
strncpy(buffer,"Unrecognised error code, fix nigpib.c",
maxBuffer);
break;
}
}
/*------------------------------------------------------------------*/
void NIassign(pGPIB self){
self->attach = NIattach;
self->detach = NIdetach;
self->send = NIwrite;
self->read = NIread;
self->getErrorDescription = NIerror;
}