Annotation of researchv10no/cmd/qsnap/ibup.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * This software is provided solely for use with
        !             3:  * the National Instruments GPIB11-series interfaces.
        !             4:  *
        !             5:  * Copyright 1980, 1983 National Instruments
        !             6:  *
        !             7:  * Jeffrey Kodosky
        !             8:  * REV D:  10/09/83
        !             9:  */
        !            10: 
        !            11: 
        !            12: #define DCL    024
        !            13: #define GET    010
        !            14: #define GTL    001
        !            15: #define LLO    021
        !            16: #define PPC    005
        !            17: #define PPD    0160
        !            18: #define PPE0   0140
        !            19: #define PPU    025
        !            20: #define SDC    004
        !            21: #define SPD    031
        !            22: #define SPE    030
        !            23: #define TCT    011
        !            24: #define UNL    077
        !            25: #define UNT    0137
        !            26: 
        !            27: #define OK     1
        !            28: #define ENOTSAC (-4)
        !            29: #define ENOFUN (-20)
        !            30: #define ENODEV (-21)
        !            31: #define ENOLAD (-22)
        !            32: #define ENOTAD (-23)
        !            33: 
        !            34: #define CO     0
        !            35: #define WT     1
        !            36: #define RD     2
        !            37: #define TR     3
        !            38: #define CL     4
        !            39: #define RM     5
        !            40: #define LO     6
        !            41: #define PP     7
        !            42: #define PC     8
        !            43: #define SS     9
        !            44: #define MN     10
        !            45: #define RC     11
        !            46: #define SP     12
        !            47: #define TS     13
        !            48: #define FI     14
        !            49: 
        !            50: 
        !            51: #define Try(f) if((x=(f))<0) return x
        !            52: 
        !            53: static int open= 0;
        !            54: 
        !            55: struct device {
        !            56:        char    tad, lad, sad;  /* GPIB addresses */
        !            57:        char    rmd, eod, wmd;  /* read write modes */
        !            58:        };
        !            59: 
        !            60: struct device devtbl[]= {
        !            61:        { 0125, 065,    0,      0,      0,      0 },    /* GPIB interface */
        !            62:        { 0103, 043,    0143,   0,      0,      0 },    /* QCR camera */
        !            63:        { 0102, 042,    0142,   0,      0,      0 },    /* QCR camera data */
        !            64:        { 0 },                                          /* empty slot */
        !            65:        { 0 },                                          /* empty slot */
        !            66:        { 0 }                                           /* empty slot */
        !            67:        };
        !            68: 
        !            69: #define NDEV   ((sizeof devtbl)/(sizeof devtbl[0]) -1)
        !            70: 
        !            71: static char cbf[7+2*NDEV];
        !            72: 
        !            73: 
        !            74: ibup(f,dev,a2,a3,a4,a5,a6,a7){
        !            75:        register int x, d;
        !            76:        register char *s;
        !            77:        char *ltns();
        !            78: 
        !            79:        if(!open) Try(init());
        !            80:        d= dev;
        !            81:        s= &cbf[0];
        !            82:        switch(f){
        !            83:                default: return ENOFUN;
        !            84:                case 0: if(d<=0 || d>NDEV) return ENODEV;       /* write */
        !            85:                        *s++= UNL; *s++= UNT;
        !            86:                        *s++= devtbl[0].tad;
        !            87:                        if(*s= devtbl[0].sad) s++;
        !            88:                        if((s= ltns(s,d))==0) return ENOLAD;
        !            89:                        Try(cmd(s));
        !            90:                        Try(d=gpib(WT,a2,a3,devtbl[d].wmd));
        !            91:                        Try(gtsun());
        !            92:                        return d;
        !            93:                case 1: if(d<=0 || d>NDEV) return ENODEV;       /* read */
        !            94:                        *s++= UNL; *s++= UNT;
        !            95:                        if((*s++= devtbl[d].tad)==0) return ENOTAD;
        !            96:                        if(*s= devtbl[d].sad) s++;
        !            97:                        *s++= devtbl[0].lad;
        !            98:                        if(*s= devtbl[0].sad) s++;
        !            99:                        Try(cmd(s));
        !           100:                        Try(d=gpib(RD,a2,a3,devtbl[d].rmd,devtbl[d].eod));
        !           101:                        Try(gtsun());
        !           102:                        return d;
        !           103:                case 2: if(d<0) return gpib(CL);                /* clear */
        !           104:                        else if(d>NDEV) return ENODEV;
        !           105:                        if(d){  *s++= UNL; *s++= UNT;
        !           106:                                if((s= ltns(s,d))==0) return ENOLAD;
        !           107:                                *s++= SDC; }
        !           108:                        else *s++= DCL;
        !           109:                        return cmd(s);
        !           110:                case 3: if(d<0 || d>NDEV) return ENODEV;        /* trigger */
        !           111:                        *s++= UNL; *s++= UNT;
        !           112:                        if((s= ltns(s,d))==0) return ENOLAD;
        !           113:                        *s++= GET;
        !           114:                        return cmd(s);
        !           115:                case 4: Try(gpib(RM));                          /* remote */
        !           116:                        if(d<0){ *s++= LLO; d= 0; }
        !           117:                        else if(d>NDEV) return ENODEV;
        !           118:                        if((s= ltns(s,d))==0) return ENOLAD;
        !           119:                        return cmd(s);
        !           120:                case 5: if(d<0) return gpib(LO);                /* local */
        !           121:                        if(d>NDEV) return ENODEV;
        !           122:                        *s++= UNL; *s++= UNT;
        !           123:                        if((s= ltns(s,d))==0) return ENOLAD;
        !           124:                        *s++= GTL;
        !           125:                        return cmd(s);
        !           126:                case 6: if(d<0) return gpib(TS);                /* poll */
        !           127:                        if(d>NDEV) return ENODEV;
        !           128:                        if(d==0) return gpib(PP);
        !           129:                        *s++= UNL; *s++= UNT;
        !           130:                        *s++= SPE;
        !           131:                        if((*s++= devtbl[d].tad)==0) return ENOTAD;
        !           132:                        if(*s= devtbl[d].sad) s++;
        !           133:                        *s++= devtbl[0].lad;
        !           134:                        if(*s= devtbl[0].sad) s++;
        !           135:                        Try(cmd(s));
        !           136:                        Try(gpib(RD, cbf, 1,0,0));
        !           137:                        d= cbf[0]&0377;
        !           138:                        cbf[0]= SPD;
        !           139:                        Try(cmd(&cbf[1]));
        !           140:                        return d;
        !           141:                case 7: if(d<0 || d>NDEV) return ENODEV;        /* configure */
        !           142:                        if(d){  *s++= UNL; *s++= UNT;
        !           143:                                if((s= ltns(s,d))==0) return ENOLAD;
        !           144:                                *s++= PPC;
        !           145:                                if(a2>=0) *s++= PPE0 | (a3-1)&7 | (a2? 010:0);
        !           146:                                else      *s++= PPD;
        !           147:                                }
        !           148:                        else *s++= PPU;
        !           149:                        return cmd(s);
        !           150:                case 8: if(d<=0 || d>NDEV) return ENODEV;       /* passctrl */
        !           151:                        *s++= UNL; *s++= UNT;
        !           152:                        if((*s++= devtbl[d].tad)==0) return ENOTAD;
        !           153:                        if(*s= devtbl[d].sad) s++;
        !           154:                        *s++= TCT;
        !           155:                        Try(cmd(s));
        !           156:                        return gpib(PC);
        !           157:                case 9: if(d<0 || d>NDEV) return ENODEV;        /* define */
        !           158:                        if(a2 && (a2<0100 || a2>=0137)) return ENOTAD;
        !           159:                        if(a3 && (a3<040 || a3>=077)) return ENOLAD;
        !           160:                        if(a4 && (a4<0140 || a4>=0177)) return ENOTAD;
        !           161:                        devtbl[d].tad= a2;
        !           162:                        devtbl[d].lad= a3;
        !           163:                        devtbl[d].sad= a4;
        !           164:                        devtbl[d].rmd= a5;
        !           165:                        devtbl[d].eod= a6;
        !           166:                        devtbl[d].wmd= a7;
        !           167:                        return OK;
        !           168:                case 10:                                        /* finish */
        !           169:                        open= 0;
        !           170:                        return gpib(FI);
        !           171:        }       }
        !           172: 
        !           173: static char *ltns(s,d) char *s;{
        !           174:        register int n;
        !           175:        if(d){  if((*s++= devtbl[d].lad)==0)
        !           176:                        return 0;
        !           177:                if(*s= devtbl[d].sad) s++;
        !           178:                }
        !           179:        else for(d++, n=NDEV; n-->0; d++)
        !           180:                if(*s= devtbl[d].lad){
        !           181:                        s++;
        !           182:                        if(*s= devtbl[d].sad) s++;
        !           183:                        }
        !           184:        return s; }
        !           185: 
        !           186: static cmd(s) char *s;{
        !           187:        return gpib(CO, &cbf[0], s- &cbf[0]); }
        !           188: 
        !           189: static init(){
        !           190:        register int x;
        !           191:        if((x=gpib(CL))>=0)
        !           192:                x= gpib(RM);
        !           193:        if(x==ENOTSAC) x= OK;
        !           194:        open++;
        !           195:        return x; }
        !           196: 
        !           197: static gtsun(){
        !           198:        register int x;
        !           199:        register char *s;
        !           200: 
        !           201:        s= &cbf[0];
        !           202:        *s++= UNL; *s++= UNT;
        !           203:        Try(cmd(s));
        !           204:        return gpib(TR); }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.