You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mynewt.apache.org by Jan Clement <ja...@cm-electronics.de> on 2018/07/18 16:54:01 UTC

os_time issues

Hello All,

i tried to get sntp client from lwip stack up and running today and 
stumbled over some little problems and questions i would like to share 
with you:

To start the sntp service I wrote:

  sntp_setoperatingmode(SNTP_OPMODE_POLL);
  ip_addr_t ntp_server;
  IP4_ADDR(&ntp_server.u_addr.ip4, 94, 16, 116, 137);//0.de.pool.ntp.org
  sntp_setserver(0, &ntp_server);
  sntp_init();

But the callback function, called by the stack upon receive of the 
packet is defined as follows in lwip/apps/sntp_ops.h:

#if !defined SNTP_SET_SYSTEM_TIME || defined __DOXYGEN__
#define SNTP_SET_SYSTEM_TIME(sec)   LWIP_UNUSED_ARG(sec)
#endif

And nothing happens.

So I commented this out, and added
  extern void SNTP_SET_SYSTEM_TIME(uint32_t t);
to sntp.c.

in my code i defined
void SNTP_SET_SYSTEM_TIME(uint32_t t) {

	ntptime.tv_sec = t * 1000;
	ntptime.tv_usec = 0;
	console_printf("SNTP time from server: %ld \r\n", t);
	os_settimeofday(&ntptime, NULL);
}

And this works as expected and I get the correct ntp time stamp!

What would be a good and proper way to implement the callback function?

Another problem is, that os_gettimeofday(&daytime, NULL); gives weird 
results:

005104 Time = 21474836480
006104 Time = 25769803776
007104 Time = 30064771072
008104 Time = 34359738368
009104 Time = 38654705664
010104 Time = 42949672960
010134 SNTP time from server: 1531932280
(** syncronization happened)
010136 Date: 18.6.2018  16:44:40

after the sync this is the ouput:
011104 Time = 6579599043818647160
012104 Time = 6579599048113614456
013104 Time = 6579599052408581752
014104 Time = 6579599056703549048


any ideas?

regards

j


Re: os_time issues

Posted by Christopher Collins <ch...@runtime.io>.
Hi Jan,

On Wed, Jul 18, 2018 at 06:54:01PM +0200, Jan Clement wrote:
> Hello All,
> 
> i tried to get sntp client from lwip stack up and running today and 
> stumbled over some little problems and questions i would like to share 
> with you:
> 
> To start the sntp service I wrote:
> 
>   sntp_setoperatingmode(SNTP_OPMODE_POLL);
>   ip_addr_t ntp_server;
>   IP4_ADDR(&ntp_server.u_addr.ip4, 94, 16, 116, 137);//0.de.pool.ntp.org
>   sntp_setserver(0, &ntp_server);
>   sntp_init();
> 
> But the callback function, called by the stack upon receive of the 
> packet is defined as follows in lwip/apps/sntp_ops.h:
> 
> #if !defined SNTP_SET_SYSTEM_TIME || defined __DOXYGEN__
> #define SNTP_SET_SYSTEM_TIME(sec)   LWIP_UNUSED_ARG(sec)
> #endif

It looks like lwIP expects this macro to be defined by the OS (as you
probably inferred!).

> And nothing happens.
> 
> So I commented this out, and added
>   extern void SNTP_SET_SYSTEM_TIME(uint32_t t);
> to sntp.c.
> 
> in my code i defined
> void SNTP_SET_SYSTEM_TIME(uint32_t t) {
> 
> 	ntptime.tv_sec = t * 1000;
> 	ntptime.tv_usec = 0;
> 	console_printf("SNTP time from server: %ld \r\n", t);
> 	os_settimeofday(&ntptime, NULL);
> }
> 
> And this works as expected and I get the correct ntp time stamp!
> 
> What would be a good and proper way to implement the callback function?

I think your implementation is fine!  I would just turn that into a
function (with a lower-case name), and define `SNTP_SET_SYSTEM_TIME` to
call your function.

> 
> Another problem is, that os_gettimeofday(&daytime, NULL); gives weird 
> results:
> 
> 005104 Time = 21474836480
> 006104 Time = 25769803776
> 007104 Time = 30064771072
> 008104 Time = 34359738368
> 009104 Time = 38654705664
> 010104 Time = 42949672960
> 010134 SNTP time from server: 1531932280
> (** syncronization happened)
> 010136 Date: 18.6.2018  16:44:40
> 
> after the sync this is the ouput:
> 011104 Time = 6579599043818647160
> 012104 Time = 6579599048113614456
> 013104 Time = 6579599052408581752
> 014104 Time = 6579599056703549048

Hmm, that's odd.  How are you printing the `struct os_timeval` value
that `os_gettimeofday` fills in?

Chris

Re: os_time issues

Posted by Jan Clement <Ja...@cm-electronics.de>.
no one using sntp?

Am 18.07.2018 um 18:54 schrieb Jan Clement:
> Hello All,
> 
> i tried to get sntp client from lwip stack up and running today and 
> stumbled over some little problems and questions i would like to share 
> with you:
> 
> To start the sntp service I wrote:
> 
>   sntp_setoperatingmode(SNTP_OPMODE_POLL);
>   ip_addr_t ntp_server;
>   IP4_ADDR(&ntp_server.u_addr.ip4, 94, 16, 116, 137);//0.de.pool.ntp.org
>   sntp_setserver(0, &ntp_server);
>   sntp_init();
> 
> But the callback function, called by the stack upon receive of the 
> packet is defined as follows in lwip/apps/sntp_ops.h:
> 
> #if !defined SNTP_SET_SYSTEM_TIME || defined __DOXYGEN__
> #define SNTP_SET_SYSTEM_TIME(sec)   LWIP_UNUSED_ARG(sec)
> #endif
> 
> And nothing happens.
> 
> So I commented this out, and added
>   extern void SNTP_SET_SYSTEM_TIME(uint32_t t);
> to sntp.c.
> 
> in my code i defined
> void SNTP_SET_SYSTEM_TIME(uint32_t t) {
> 
>      ntptime.tv_sec = t * 1000;
>      ntptime.tv_usec = 0;
>      console_printf("SNTP time from server: %ld \r\n", t);
>      os_settimeofday(&ntptime, NULL);
> }
> 
> And this works as expected and I get the correct ntp time stamp!
> 
> What would be a good and proper way to implement the callback function?
> 
> Another problem is, that os_gettimeofday(&daytime, NULL); gives weird 
> results:
> 
> 005104 Time = 21474836480
> 006104 Time = 25769803776
> 007104 Time = 30064771072
> 008104 Time = 34359738368
> 009104 Time = 38654705664
> 010104 Time = 42949672960
> 010134 SNTP time from server: 1531932280
> (** syncronization happened)
> 010136 Date: 18.6.2018  16:44:40
> 
> after the sync this is the ouput:
> 011104 Time = 6579599043818647160
> 012104 Time = 6579599048113614456
> 013104 Time = 6579599052408581752
> 014104 Time = 6579599056703549048
> 
> 
> any ideas?
> 
> regards
> 
> j
>