/*! \fn double ln_get_julian_local_date(struct ln_zonedate* zonedate) * \param zonedate Local date * \return Julian day (UT) * * Calculate Julian day (UT) from zone date */ double ln_get_julian_local_date(struct ln_zonedate* zonedate) { struct ln_date date; ln_zonedate_to_date (zonedate, &date); return ln_get_julian_day (&date); }
bool SynscanDriver::sendTime() { LOG_DEBUG("Reading mount time..."); if (isSimulation()) { char timeString[MAXINDINAME] = {0}; time_t now = time (nullptr); strftime(timeString, MAXINDINAME, "%T", gmtime(&now)); IUSaveText(&TimeT[0], "3"); IUSaveText(&TimeT[1], timeString); TimeTP.s = IPS_OK; IDSetText(&TimeTP, nullptr); return true; } char res[SYN_RES] = {0}; if (sendCommand("h", res)) { ln_zonedate localTime; ln_date utcTime; int offset, daylightflag; localTime.hours = res[0]; localTime.minutes = res[1]; localTime.seconds = res[2]; localTime.months = res[3]; localTime.days = res[4]; localTime.years = res[5]; offset = static_cast<int>(res[6]); // Negative GMT offset is read. It needs special treatment if (offset > 200) offset -= 256; localTime.gmtoff = offset; // this is the daylight savings flag in the hand controller, needed if we did not set the time daylightflag = res[7]; localTime.years += 2000; localTime.gmtoff *= 3600; // now convert to utc ln_zonedate_to_date(&localTime, &utcTime); // now we have time from the hand controller, we need to set some variables int sec; char utc[100]; char ofs[10]; sec = static_cast<int>(utcTime.seconds); sprintf(utc, "%04d-%02d-%dT%d:%02d:%02d", utcTime.years, utcTime.months, utcTime.days, utcTime.hours, utcTime.minutes, sec); if (daylightflag == 1) offset = offset + 1; sprintf(ofs, "%d", offset); IUSaveText(&TimeT[0], utc); IUSaveText(&TimeT[1], ofs); TimeTP.s = IPS_OK; IDSetText(&TimeTP, nullptr); LOGF_INFO("Mount UTC Time %s Offset %d", utc, offset); return true; } return false; }
bool get_ieqpro_utc_date_time(int fd, double *utc_hours, int *yy, int *mm, int *dd, int *hh, int *minute, int *ss) { char cmd[] = ":GLT#"; int errcode = 0; char errmsg[MAXRBUF]; char response[32]; int nbytes_read=0; int nbytes_written=0; DEBUGFDEVICE(ieqpro_device, INDI::Logger::DBG_DEBUG, "CMD (%s)", cmd); if (ieqpro_simulation) { strncpy(response, "+180150331173000#" , 32); nbytes_read = strlen(response); } else { if ( (errcode = tty_write(fd, cmd, strlen(cmd), &nbytes_written)) != TTY_OK) { tty_error_msg(errcode, errmsg, MAXRBUF); DEBUGFDEVICE(ieqpro_device, INDI::Logger::DBG_ERROR, "%s", errmsg); return false; } if ( (errcode = tty_read_section(fd, response, '#', IEQPRO_TIMEOUT, &nbytes_read))) { tty_error_msg(errcode, errmsg, MAXRBUF); DEBUGFDEVICE(ieqpro_device, INDI::Logger::DBG_ERROR, "%s", errmsg); return false; } } if (nbytes_read > 0) { tcflush(fd, TCIFLUSH); response[nbytes_read] = '\0'; DEBUGFDEVICE(ieqpro_device, INDI::Logger::DBG_DEBUG, "RES (%s)", response); char utc_str[4], yy_str[2], mm_str[2], dd_str[2], hh_str[2], minute_str[2], ss_str[2]; strncpy(utc_str, response, 4); strncpy(yy_str, response+4, 2); strncpy(mm_str, response+6, 2); strncpy(dd_str, response+8, 2); strncpy(hh_str, response+10, 2); strncpy(minute_str, response+12, 2); strncpy(ss_str, response+14, 2); *utc_hours = atoi(utc_str) / 60.0; *yy = atoi(yy_str) + 2000; *mm = atoi(mm_str); *dd = atoi(dd_str); *hh = atoi(hh_str); *minute = atoi(minute_str); *ss = atoi(ss_str); ln_zonedate localTime; ln_date utcTime; localTime.years = *yy; localTime.months = *mm; localTime.days = *dd; localTime.hours = *hh; localTime.minutes = *minute; localTime.seconds = *ss; localTime.gmtoff = *utc_hours * 3600; ln_zonedate_to_date(&localTime, &utcTime); *yy = utcTime.years; *mm = utcTime.months; *dd = utcTime.days; *hh = utcTime.hours; *minute = utcTime.minutes; *ss = utcTime.seconds; return true; } DEBUGFDEVICE(ieqpro_device, INDI::Logger::DBG_ERROR, "Only received #%d bytes, expected 1.", nbytes_read); return false; }