134 fprintf(stderr,
"Connecting to port: %s\n", port);
136 if (TelConnectFlag != 0)
141 TelPortFD = open(port, O_RDWR);
145 tcgetattr(TelPortFD, &tty);
146 cfsetospeed(&tty, (speed_t)B9600);
147 cfsetispeed(&tty, (speed_t)B9600);
148 tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8;
149 tty.c_iflag = IGNBRK;
152 tty.c_cflag |= CLOCAL | CREAD;
155 tty.c_iflag &= ~(IXON | IXOFF | IXANY);
156 tty.c_cflag &= ~(PARENB | PARODD);
157 tcsetattr(TelPortFD, TCSANOW, &tty);
161 tcflush(TelPortFD, TCIOFLUSH);
165 writen(TelPortFD,
"Kx", 2);
166 numRead = readn(TelPortFD, returnStr, 3, 2);
167 returnStr[numRead] =
'\0';
170 fprintf(stderr,
"ConnectTel read %d characters: %s\n", numRead, returnStr);
210 char slewCmd[] = { 0x50, 0x02, 0x11, 0x24, 0x09, 0x00, 0x00, 0x00 };
213 if (direction ==
NORTH)
217 slewCmd[4] = slewRate;
219 else if (direction ==
EAST)
223 slewCmd[4] = slewRate;
225 else if (direction ==
SOUTH)
229 slewCmd[4] = slewRate;
231 else if (direction ==
WEST)
235 slewCmd[4] = slewRate;
238 writen(TelPortFD, slewCmd, 8);
244 if (readn(TelPortFD, inputStr, 1, 1))
246 if (inputStr[0] ==
'#')
251 fprintf(stderr,
"No acknowledgment from telescope in StartSlew.\n");
261 char slewCmd[] = { 0x50, 0x02, 0x11, 0x24, 0x00, 0x00, 0x00, 0x00 };
264 if (direction ==
NORTH)
269 else if (direction ==
EAST)
274 else if (direction ==
SOUTH)
279 else if (direction ==
WEST)
285 writen(TelPortFD, slewCmd, 8);
291 if (readn(TelPortFD, inputStr, 1, 1))
293 if (inputStr[0] ==
'#')
298 fprintf(stderr,
"No acknowledgment from telescope in StartSlew.\n");
359 int countRA, countDec;
362 writen(TelPortFD,
"E", 1);
363 numRead = readn(TelPortFD, returnStr, 10, 1);
364 returnStr[4] = returnStr[9] =
'\0';
372 sscanf(returnStr,
"%x", &countRA);
373 sscanf(returnStr + 5,
"%x:", &countDec);
374 returnRA = (double)countRA;
375 returnRA = returnRA / (3. * 15. * 60. * 65536. / 64800.);
376 returnDec = (double)countDec;
377 returnDec = returnDec / (3. * 60. * 65536. / 64800.);
383 if ((returnDec > 90.) && (returnDec <= 180.))
385 returnDec = 180. - returnDec;
390 if ((returnDec > 180.) && (returnDec <= 270.))
392 returnDec = returnDec - 270.;
397 if ((returnDec > 270.) && (returnDec <= 360.))
399 returnDec = returnDec - 360.;
410 returnRA = returnRA - offsetRA;
411 returnDec = returnDec - offsetDec;
432 n1 = newRA * 0x1000000 / 24;
433 n2 = newDec * 0x1000000 / 360;
436 sprintf((
char *)str,
"s%08X,%08X", n1, n2);
437 writen(TelPortFD, str, 18);
442 if (readn(TelPortFD, str, 1, 2))
448 fprintf(stderr,
"No acknowledgment from telescope after SyncToCoords.\n");
457 int lat_d, lat_m, lat_s;
458 int long_d, long_m, long_s;
473 cmd[3] = lat_d > 0 ? 0 : 1;
474 cmd[4] = abs(long_d);
477 cmd[7] = long_d > 0 ? 0 : 1;
480 writen(TelPortFD, str, 9);
485 if (readn(TelPortFD, str, 1, 2))
491 fprintf(stderr,
"No acknowledgment from telescope after updateLocation.\n");
501 struct ln_zonedate local_date;
504 ln_date_to_zonedate(utc, &local_date, utc_offset * 3600);
506 cmd[0] = local_date.hours;
507 cmd[1] = local_date.minutes;
508 cmd[2] = local_date.seconds;
509 cmd[3] = local_date.months;
510 cmd[4] = local_date.days;
511 cmd[5] = local_date.years - 2000;
514 cmd[6] = 256 - ((
unsigned int)fabs(utc_offset));
516 cmd[6] = ((
unsigned int)fabs(utc_offset));
522 writen(TelPortFD, str, 9);
527 if (readn(TelPortFD, str, 1, 2))
533 fprintf(stderr,
"No acknowledgment from telescope after updateTime.\n");
544 int countRA, countDec;
545 char r0, r1, r2, r3, d0, d1, d2, d3;
547 char outputStr[32], inputStr[2048];
551 hrs = newRA + offsetRA;
552 degs = newDec + offsetDec;
556 hrs = hrs * (3. * 15. * 60. * 65536. / 64800.);
561 if ((newDec >= 0.0) && (newDec <= 90.0))
563 degs = degs * (3. * 60. * 65536. / 64800.);
565 else if ((newDec < 0.0) && (newDec >= -90.0))
567 degs = (360. + degs) * (3. * 60. * 65536. / 64800.);
571 fprintf(stderr,
"Invalid newDec in SlewToCoords.\n");
577 countDec = (int)degs;
593 countRA = countRA / 16;
603 countRA = countRA / 16;
625 printf(
"RA count overflow in SlewToCoords.\n");
628 if (countDec < 65536)
639 countDec = countDec / 16;
649 countDec = countDec / 16;
671 fprintf(stderr,
"Dec count overflow in SlewToCoords.\n");
677 sprintf(outputStr,
"R%c%c%c%c,%c%c%c%c", r3, r2, r1, r0, d3, d2, d1, d0);
678 writen(TelPortFD, outputStr, 10);
684 if (readn(TelPortFD, inputStr, 1, 2))
686 if (inputStr[0] ==
'#')
690 fprintf(stderr,
"No acknowledgment from telescope after SlewToCoords.\n");
703int CheckCoords(
double desRA,
double desDec,
double tolRA,
double tolDEC)
705 double errorRA, errorDec, nowRA, nowDec;
708 writen(TelPortFD,
"L", 1);
714 if (readn(TelPortFD, inputStr, 2, 2))
716 if ((inputStr[0] ==
'0') && (inputStr[1] ==
'#'))
724 errorRA = nowRA - desRA;
726 errorDec = nowDec - desDec;
730 if (fabs(errorRA) > tolRA || fabs(errorDec) > tolDEC)