Annotation of src/whctm1.c, revision 1.1

1.1     ! root        1: /***************************************************************************
        !             2:  *   CTM.C  - CyberMAXX support routines                                   *
        !             3:  *            uses: SERIAL1.LIB functions                                  *
        !             4:  *   Written by: Les Bird                                                  *
        !             5:  ***************************************************************************/
        !             6: 
        !             7: #include "icorp.h"
        !             8: #include <time.h>
        !             9: #include "3d.h"
        !            10: 
        !            11: struct serialData sd;
        !            12: 
        !            13: //int  cyberenabled,
        !            14: int  iglassenabled;
        !            15: 
        !            16: void
        !            17: ctm_deinit(void)
        !            18: {
        !            19:      if (cyberenabled) {
        !            20:           deInitSerial(&sd);
        !            21:           cyberenabled=0;
        !            22:      }
        !            23: }
        !            24: 
        !            25: int
        !            26: ctm_init(int port)
        !            27: {
        !            28:      long cybcode=0,delayclock;
        !            29: 
        !            30:      if (initSerial(&sd,port,USE_16550,1024,1024) == SER_OK) {
        !            31:           cyberenabled=1;
        !            32:           setBPS(&sd,9600);
        !            33:           writeSer(&sd,'X');
        !            34:           delayclock=totalclock+CLKIPS;
        !            35:           while (totalclock < delayclock && cybcode < 3) {
        !            36:                if (rxBuffEmpty(&sd)) {
        !            37:                     continue;
        !            38:                }
        !            39:                switch (cybcode) {
        !            40:                case 0:
        !            41:                     if (readSer(&sd) == 'C') {
        !            42:                          cybcode++;
        !            43:                     }
        !            44:                     break;
        !            45:                case 1:
        !            46:                     if (readSer(&sd) == 'T') {
        !            47:                          cybcode++;
        !            48:                     }
        !            49:                     break;
        !            50:                case 2:
        !            51:                     if (readSer(&sd) == 'M') {
        !            52:                          cybcode++;
        !            53:                     }
        !            54:                     break;
        !            55:                }
        !            56:           }
        !            57:           if (cybcode != 3) {
        !            58:                ctm_deinit();
        !            59:                return(0);
        !            60:           }
        !            61:           writeSer(&sd,'C');       // CyberMAXX absolute coordinate mode
        !            62:           writeSer(&sd,'F');       // CyberMAXX binary transfer mode
        !            63:           writeSer(&sd,'M');       // CyberMAXX checksum byte
        !            64:           writeSer(&sd,'G');       // CyberMAXX continuous sample mode
        !            65:           cyberenabled=port+1;
        !            66:           return(1);
        !            67:      }
        !            68:      return(0);
        !            69: }
        !            70: 
        !            71: short
        !            72: getserch(struct serialData *s)
        !            73: {
        !            74:      return((short)readSer(s));
        !            75: }
        !            76: 
        !            77: void
        !            78: vio_deinit(void)
        !            79: {
        !            80:      if (iglassenabled) {
        !            81:           deInitSerial(&sd);
        !            82:           iglassenabled=0;
        !            83:      }
        !            84: }
        !            85: 
        !            86: void
        !            87: vio_reset(void)
        !            88: {
        !            89:      writeSer(&sd,'!');
        !            90:      writeSer(&sd,'R');
        !            91:      writeSer(&sd,0x0D);
        !            92: }
        !            93: 
        !            94: void
        !            95: vio_setup(void)
        !            96: {
        !            97:      writeSer(&sd,'!');
        !            98:      writeSer(&sd,'M');
        !            99:      writeSer(&sd,'2');  // cooked data mode
        !           100:      writeSer(&sd,',');
        !           101:      writeSer(&sd,'P');  // polled
        !           102:      writeSer(&sd,',');
        !           103:      writeSer(&sd,'B');  // binary
        !           104:      writeSer(&sd,0x0D);
        !           105: }
        !           106: 
        !           107: int
        !           108: vio_init(int port)
        !           109: {
        !           110:      long delayclock,tries=0;
        !           111: 
        !           112:      if (initSerial(&sd,port,USE_16550,1024,1024) == SER_OK) {
        !           113:           iglassenabled=0;
        !           114:           setBPS(&sd,9600);
        !           115:           vio_reset();
        !           116:           delayclock=totalclock+(CLKIPS>>1);
        !           117:           while (totalclock < delayclock && iglassenabled == 0 && tries < 10) {
        !           118:                if (rxBuffEmpty(&sd)) {
        !           119:                     continue;
        !           120:                }
        !           121:                if (readSer(&sd) == 'O') {
        !           122:                     iglassenabled=port+1;
        !           123:                }
        !           124:                else {
        !           125:                     vio_reset();
        !           126:                     delayclock=totalclock+(CLKIPS>>1);
        !           127:                     tries++;
        !           128:                }
        !           129:           }
        !           130:           if (iglassenabled == 0) {
        !           131:                vio_deinit();
        !           132:                return(0);
        !           133:           }
        !           134:           vio_setup();
        !           135:           return(1);
        !           136:      }
        !           137:      return(0);
        !           138: }
        !           139: 
        !           140: void
        !           141: vio_read(short *yaw,short *pitch,short *roll)
        !           142: {
        !           143:      short c,chk,chk2,yaw2,pitch2,roll2;
        !           144:      long delayclock;
        !           145:      struct serialData *s;
        !           146: 
        !           147:      s=&sd;
        !           148:      flushRead(&sd);
        !           149:      writeSer(&sd,'S');
        !           150:      delayclock=totalclock+(CLKIPS>>3);
        !           151:      while (totalclock < delayclock) {
        !           152:           if (iglassenabled && s->rx.q->count >= 8) {
        !           153:                break;
        !           154:           }
        !           155:           else if (cyberenabled && s->rx.q->count >= 7) {
        !           156:                break;
        !           157:           }
        !           158:      }
        !           159:      chk=0;
        !           160:      pitch2=yaw2=roll2=0;
        !           161:      if ((c=getserch(s)) == 0xFF || cyberenabled) {
        !           162:           if (iglassenabled) {
        !           163:                chk+=c;
        !           164:                yaw2=((c=getserch(s))<<8);    // yaw high byte
        !           165:           }
        !           166:           else {
        !           167:                yaw2=c<<8;
        !           168:           }
        !           169:           chk+=c;
        !           170:           yaw2+=(c=getserch(s));        // yaw low byte
        !           171:           chk+=c;
        !           172:           pitch2=((c=getserch(s))<<8);  // pitch high byte
        !           173:           chk+=c;
        !           174:           pitch2+=(c=getserch(s));      // pitch low byte
        !           175:           chk+=c;
        !           176:           roll2=((c=getserch(s))<<8);   // roll high byte
        !           177:           chk+=c;
        !           178:           roll2+=(c=getserch(s));       // roll low byte
        !           179:           chk+=c;
        !           180:           chk2=getserch(s);             // checksum
        !           181:           if ((chk&0xFF) == chk2 || cyberenabled) {
        !           182:                *yaw=yaw2;
        !           183:                *pitch=pitch2;
        !           184:                *roll=roll2;
        !           185:           }
        !           186:      }
        !           187: }
        !           188: 
        !           189: extern
        !           190: short pitch,
        !           191:      roll,
        !           192:      yaw;
        !           193: 
        !           194: void
        !           195: whvrmon(void)
        !           196: {
        !           197: #if 0
        !           198:      char tmpbuf[80];
        !           199: 
        !           200:      sprintf(tmpbuf,"Y: %05d P: %05d R: %05d C: %05d",yaw,pitch,roll,
        !           201:           sd.rx.q->count);
        !           202:      printext256(0L,8L,31,-1,tmpbuf,1);
        !           203: #endif
        !           204: }
        !           205: 

unix.superglobalmegacorp.com

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