Other Parts Discussed in Thread: CC3200
The sl_DevGet of the time set on the network processor fails with the year 2036 bug. Granted it is 20 years away but I don't like inserting known future failures into products.
http://en.wikipedia.org/wiki/Network_Time_Protocol#Timestamps
Is it possible to simply read back the 32bit unsigned SNTP time stored on the network processor instead of relying upon the problematic network processor code to translate it into year/month/day hr:min:sec?
To reproduce the error you can use this code:
UART_PRINT("Time Code Test\r\n");
// Check for expected year 2036 sntp time problem.
dateTime_g.sl_tm_year = 2035;
dateTime_g.sl_tm_mon = 1;
dateTime_g.sl_tm_day = 1;
dateTime_g.sl_tm_hour = 13;
dateTime_g.sl_tm_min = 55;
dateTime_g.sl_tm_sec = 23;
//
xSize=sizeof(SlDateTime_t);
xConfig=SL_DEVICE_GENERAL_CONFIGURATION_DATE_TIME;
//
sl_DevSet(SL_DEVICE_GENERAL_CONFIGURATION,SL_DEVICE_GENERAL_CONFIGURATION_DATE_TIME,sizeof(SlDateTime_t),(unsigned char *) (&dateTime_g));
sl_DevGet(SL_DEVICE_GENERAL_CONFIGURATION,&xConfig,&xSize,(unsigned char *) (&dateTime2_g));
UART_PRINT("%d-->%d/%02d/%02d %02d:%02d:%02d\r\n",dateTime_g.sl_tm_year, dateTime2_g.sl_tm_year,dateTime2_g.sl_tm_mon,dateTime2_g.sl_tm_day,dateTime2_g.sl_tm_hour,dateTime2_g.sl_tm_min,dateTime2_g.sl_tm_sec);
//
dateTime_g.sl_tm_year = 2037;
sl_DevSet(SL_DEVICE_GENERAL_CONFIGURATION,SL_DEVICE_GENERAL_CONFIGURATION_DATE_TIME,sizeof(SlDateTime_t),(unsigned char *) (&dateTime_g));
sl_DevGet(SL_DEVICE_GENERAL_CONFIGURATION,&xConfig,&xSize,(unsigned char *) (&dateTime2_g));
UART_PRINT("%d-->%d/%02d/%02d %02d:%02d:%02d\r\n",dateTime_g.sl_tm_year, dateTime2_g.sl_tm_year,dateTime2_g.sl_tm_mon,dateTime2_g.sl_tm_day,dateTime2_g.sl_tm_hour,dateTime2_g.sl_tm_min,dateTime2_g.sl_tm_sec);
//
dateTime_g.sl_tm_year = 2040;
sl_DevSet(SL_DEVICE_GENERAL_CONFIGURATION,SL_DEVICE_GENERAL_CONFIGURATION_DATE_TIME,sizeof(SlDateTime_t),(unsigned char *) (&dateTime_g));
sl_DevGet(SL_DEVICE_GENERAL_CONFIGURATION,&xConfig,&xSize,(unsigned char *) (&dateTime2_g));
UART_PRINT("%d-->%d/%02d/%02d %02d:%02d:%02d\r\n",dateTime_g.sl_tm_year, dateTime2_g.sl_tm_year,dateTime2_g.sl_tm_mon,dateTime2_g.sl_tm_day,dateTime2_g.sl_tm_hour,dateTime2_g.sl_tm_min,dateTime2_g.sl_tm_sec);
//
dateTime_g.sl_tm_year = 2050;
sl_DevSet(SL_DEVICE_GENERAL_CONFIGURATION,SL_DEVICE_GENERAL_CONFIGURATION_DATE_TIME,sizeof(SlDateTime_t),(unsigned char *) (&dateTime_g));
sl_DevGet(SL_DEVICE_GENERAL_CONFIGURATION,&xConfig,&xSize,(unsigned char *) (&dateTime2_g));
UART_PRINT("%d-->%d/%02d/%02d %02d:%02d:%02d\r\n",dateTime_g.sl_tm_year, dateTime2_g.sl_tm_year,dateTime2_g.sl_tm_mon,dateTime2_g.sl_tm_day,dateTime2_g.sl_tm_hour,dateTime2_g.sl_tm_min,dateTime2_g.sl_tm_sec);
//
dateTime_g.sl_tm_year = 2015;
sl_DevSet(SL_DEVICE_GENERAL_CONFIGURATION,SL_DEVICE_GENERAL_CONFIGURATION_DATE_TIME,sizeof(SlDateTime_t),(unsigned char *) (&dateTime_g));
sl_DevGet(SL_DEVICE_GENERAL_CONFIGURATION,&xConfig,&xSize,(unsigned char *) (&dateTime2_g));
UART_PRINT("%d-->%d/%02d/%02d %02d:%02d:%02d\r\n",dateTime_g.sl_tm_year, dateTime2_g.sl_tm_year,dateTime2_g.sl_tm_mon,dateTime2_g.sl_tm_day,dateTime2_g.sl_tm_hour,dateTime2_g.sl_tm_min,dateTime2_g.sl_tm_sec);
Which will produce the following output:
Time Code Test
2035-->2035/01/01 13:55:23
2037-->1900/11/26 07:27:07
2040-->1903/11/26 07:27:07
2050-->1913/11/26 07:27:07
2015-->2015/01/01 13:55:23