Exemplo n.º 1
0
netTaskErr getEpochTime(void)
{
	uint8_t count;
	netTaskErr result = errOK;
	netStatus sntpStatus,
		dnsStatus;
	osEvent statusNtpWait,
		statusDnsWait;
	
	// getting IP of NTP server
	for (count = 0; count < DNS_WAIT_TRIES; count++)
	{
		osSignalClear(netTaskId, FLAG_DNS_RESOLVED);
		dnsStatus = get_host_by_name (ntpHostName, dnsCBack);
		if (dnsStatus == netOK)
		{
			statusDnsWait = osSignalWait(FLAG_DNS_RESOLVED, DNS_TIMEOUT_MS);
			if ((statusDnsWait.status == osEventSignal) &&
				((ntpHostIP[0] != 0) ||
				(ntpHostIP[1] != 0) ||
				(ntpHostIP[2] != 0) ||
				(ntpHostIP[3] != 0))
			)
			{
				result = errOK;
				break;
			}
			else
			{
				osSignalClear(netTaskId, FLAG_DNS_RESOLVED);
				result = errDnsTOut;
			}
		}
		else
		{
			result = errDnsResolve;
		}
		osDelay(DNS_WAIT_DELAY_MS);
	}
	
	if (result != errOK)
		return result;
	
	// requesting Unix time from NTP server
	for (count = 0; count < SNTP_WAIT_TRIES; count++)
	{
		osSignalClear(netTaskId, FLAG_UDP_PACKET_RECV);
		sntpStatus = sntp_get_time (&ntpHostIP[0], sntpCBack);
		if (sntpStatus == netOK)
		{
			statusNtpWait = osSignalWait(FLAG_UDP_PACKET_RECV, UDP_TIMEOUT_MS);
			if ((statusNtpWait.status == osEventSignal) && (ntpEpochTime != 0))
			{
				result = errOK;
				break;
			}
			else
			{
				osSignalClear(netTaskId, FLAG_UDP_PACKET_RECV);
				result = errNtpCBackTOut;
			}
		}
		else
		{
			result = errNtpNotReady; // SNTP not ready or bad parameters.
		}
		osDelay(SNTP_WAIT_DELAY_MS);
	}
	
	return result;
}
Exemplo n.º 2
0
void main(void)
{
  uint8_t eth_init = ETH_INIT_DEFAULT;
  uint32_t server;
  struct timespec time;

  strncpy(_tz.tzname, TIMEZONE_CODE,
          sizeof(_tz.tzname) - 1);
  _tz.timezone = TIMEZONE_SECS;

  if (doesclrscrafterexit())
  {
    atexit(confirm_exit);
  }

#ifdef __APPLE2__
  {
    int file;

    printf("\nSetting slot ");
    file = open("ethernet.slot", O_RDONLY);
    if (file != -1)
    {
      read(file, &eth_init, 1);
      close(file);
      eth_init &= ~'0';
    }
    printf("- %d\n", eth_init);
  }
#endif

  printf("\nInitializing ");
  if (ip65_init(eth_init))
  {
    error_exit();
  }

  printf("- Ok\n\nObtaining IP address ");
  if (dhcp_init())
  {
    error_exit();
  }

  printf("- Ok\n\nResolving %s ", NTP_SERVER);
  server = dns_resolve(NTP_SERVER);
  if (!server)
  {
    error_exit();
  }

  printf("- Ok\n\nGetting %s ", _tz.tzname);
  time.tv_sec = sntp_get_time(server);
  if (!time.tv_sec)
  {
    error_exit();
  }

  // Convert time from seconds since 1900 to
  // seconds since 1970 according to RFC 868
  time.tv_sec -= 2208988800UL;

  printf("- %s", ctime(&time.tv_sec));

  time.tv_nsec = 0;
  clock_settime(CLOCK_REALTIME, &time);
}