|
|
@@ -8,20 +8,23 @@
|
|
|
#include <net/if.h>
|
|
|
#include <arpa/inet.h>
|
|
|
#include <sys/vfs.h>
|
|
|
+#include <sys/ioctl.h>
|
|
|
+#include <linux/rtc.h>
|
|
|
|
|
|
#undef LOG_TAG
|
|
|
#define LOG_TAG "main"
|
|
|
|
|
|
|
|
|
-GlobalDeviceManager __globalDeviceManage;
|
|
|
-GlobalDeviceManager __globalDeviceManage2;
|
|
|
+GlobalDeviceManager __globalDeviceManage={0};
|
|
|
+GlobalDeviceManager __globalDeviceManage2={0};
|
|
|
|
|
|
+int ntp_sync_flag=0;
|
|
|
unsigned long __globalSxIdx;
|
|
|
-NTPClient* globalNTPclient;
|
|
|
_User_Log _GlobalUserLoginInfo;
|
|
|
UserInfo _GlobalUserInfoNew;
|
|
|
char _GlobalUserToken[64];
|
|
|
MenuAuthority _GlobalMenuAuthority;
|
|
|
+NTPManager _globalNTPManager;
|
|
|
|
|
|
void printf_global_device_info(GlobalDeviceInfo* _globalDeviceInfo)
|
|
|
{
|
|
|
@@ -273,10 +276,122 @@ void get_disk_occupy(char ** reused)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
-int set_local_timeandzone(struct tm* t, int zone)
|
|
|
+
|
|
|
+static int set_rtc(time_t t)
|
|
|
+{
|
|
|
+ /*
|
|
|
+ int r=0,fd;
|
|
|
+ struct rtc_time *rtc;
|
|
|
+
|
|
|
+ struct tm *tm = gmtime(&t);
|
|
|
+ fd = open("/dev/rtc0", O_RDONLY);
|
|
|
+ if (fd < 0) {
|
|
|
+ perror("open rtc failed\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ rtc = (struct rtc_time*)tm;
|
|
|
+ if (ioctl(fd, RTC_SET_TIME, rtc) < 0) {
|
|
|
+ perror("ioctl RTC_SET_TIME failed\n");
|
|
|
+ r = -1;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ printf("set rtc ok!\n");
|
|
|
+ }
|
|
|
+ close(fd);
|
|
|
+
|
|
|
+ return r;
|
|
|
+ */
|
|
|
+ system("hwclock -w -f /dev/rtc0");
|
|
|
+ return 0;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+#define MY_MINUTE 60
|
|
|
+#define MY_HOUR (60*MY_MINUTE)
|
|
|
+#define MY_DAY (24*MY_HOUR)
|
|
|
+#define MY_YEAR (365*MY_DAY)
|
|
|
+static int my_month[12] = {
|
|
|
+ 0,
|
|
|
+ MY_DAY*(31),
|
|
|
+ MY_DAY*(31+29),
|
|
|
+ MY_DAY*(31+29+31),
|
|
|
+ MY_DAY*(31+29+31+30),
|
|
|
+ MY_DAY*(31+29+31+30+31),
|
|
|
+ MY_DAY*(31+29+31+30+31+30),
|
|
|
+ MY_DAY*(31+29+31+30+31+30+31),
|
|
|
+ MY_DAY*(31+29+31+30+31+30+31+31),
|
|
|
+ MY_DAY*(31+29+31+30+31+30+31+31+30),
|
|
|
+ MY_DAY*(31+29+31+30+31+30+31+31+30+31),
|
|
|
+ MY_DAY*(31+29+31+30+31+30+31+31+30+31+30)
|
|
|
+};
|
|
|
+time_t mktime2(struct tm *t, int zone)
|
|
|
+{
|
|
|
+ time_t res,year;
|
|
|
+
|
|
|
+ year = t->tm_year - 70;
|
|
|
+ /* magic offsets (y+1) needed to get leapyears right.*/
|
|
|
+ res = MY_YEAR*year + MY_DAY*((year+1)/4);
|
|
|
+ res += my_month[t->tm_mon];
|
|
|
+ /* and (y+2) here. If it wasn't a leap-year, we have to adjust */
|
|
|
+ if (t->tm_mon>1 && ((year+2)%4))
|
|
|
+ res -= MY_DAY;
|
|
|
+ res += MY_DAY*(t->tm_mday-1);
|
|
|
+ res += MY_HOUR*t->tm_hour;
|
|
|
+ res += MY_MINUTE*t->tm_min;
|
|
|
+ res += t->tm_sec;
|
|
|
+
|
|
|
+ res -= zone*3600;
|
|
|
+
|
|
|
+ return res;
|
|
|
+}
|
|
|
+time_t mktime0(void)
|
|
|
+{
|
|
|
+ struct tm t;
|
|
|
+
|
|
|
+ t.tm_year = 70;
|
|
|
+ t.tm_mon = 0;
|
|
|
+ t.tm_mday = 1;
|
|
|
+ t.tm_hour = 0;
|
|
|
+ t.tm_min = 0;
|
|
|
+ t.tm_sec = 0;
|
|
|
+ return mktime(&t);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+int set_time(struct tm *t, int zone)
|
|
|
+{
|
|
|
+ if(!t) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ t->tm_year -= 1900;
|
|
|
+ t->tm_mon -= 1;
|
|
|
+ time_t utc = mktime2(t, zone);
|
|
|
+ stime(&utc);
|
|
|
+ set_rtc(utc);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+int set_utctime(time_t t)
|
|
|
+{
|
|
|
+ stime(&t);
|
|
|
+ set_rtc(t);
|
|
|
+ sleep(1);
|
|
|
+ //system("hwclock -w -f /dev/rtc0");
|
|
|
+ //system("hwclock -w");
|
|
|
+ system("hwclock --show");
|
|
|
+
|
|
|
+ system("hwclock -s");
|
|
|
+
|
|
|
+ return 0;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+int set_zone(int zone)
|
|
|
{
|
|
|
char buf[256];
|
|
|
- struct timeval tv;
|
|
|
|
|
|
#if 0
|
|
|
switch(zone) {
|
|
|
@@ -356,19 +471,80 @@ int set_local_timeandzone(struct tm* t, int zone)
|
|
|
return -1;
|
|
|
}
|
|
|
#else
|
|
|
- sprintf(buf, "ln -sf /usr/share/zoneinfo/Etc/GMT%s%d /etc/localtime", (zone<0)?"+":"-", abs(zone));
|
|
|
+ sprintf(buf, "ln -sf /usr/share/zoneinfo/GMT%s%d /etc/localtime", (zone<0)?"+":"-", abs(zone));
|
|
|
#endif
|
|
|
- system(buf);
|
|
|
|
|
|
- //t += zone * 3600;
|
|
|
- //struct tm* ptm = localtime(&t);
|
|
|
- memset(buf, 0, sizeof(buf));
|
|
|
- //sprintf(buf, "echo \"Hello\"");
|
|
|
- sprintf(buf, "date -s \"%04d-%02d-%02d %02d:%02d:%02d\" && hwclock -w -f /dev/rtc0 ", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
|
|
|
- log_i("%s",buf);
|
|
|
- system(buf);
|
|
|
+ log_i("set_zone: %s", buf);
|
|
|
+ return system(buf);
|
|
|
+}
|
|
|
|
|
|
- return 0;
|
|
|
+
|
|
|
+void print_time(char *s, struct tm *tm)
|
|
|
+{
|
|
|
+ printf("___%s___, %04d-%02d-%02d %02d:%02d:%02d\n", s, tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
|
|
|
+}
|
|
|
+
|
|
|
+void print_utc(char *s, time_t t)
|
|
|
+{
|
|
|
+ struct tm *tm=gmtime(&t);
|
|
|
+
|
|
|
+ tm->tm_year += 1900;
|
|
|
+ tm->tm_mon += 1;
|
|
|
+ print_time(s, tm);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+int set_time_zone(struct tm *t, int zone)
|
|
|
+{
|
|
|
+ int r;
|
|
|
+
|
|
|
+ if(!t) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ r = set_zone(zone);
|
|
|
+ if(r) {
|
|
|
+ log_e("__1__ set_zone failed\n");
|
|
|
+ }
|
|
|
+
|
|
|
+ print_time("111", t);
|
|
|
+ r = set_time(t, zone);
|
|
|
+ if(r) {
|
|
|
+ log_e("__1__ set_time failed\n");
|
|
|
+ }
|
|
|
+ print_utc("222", time(NULL));
|
|
|
+
|
|
|
+ return r;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+int set_utctime_zone(time_t t, int zone)
|
|
|
+{
|
|
|
+ int r;
|
|
|
+
|
|
|
+ r = set_zone(zone);
|
|
|
+ if(r) {
|
|
|
+ log_e("__2__ set_zone failed\n");
|
|
|
+ }
|
|
|
+
|
|
|
+ r = set_utctime(t);
|
|
|
+ if(r) {
|
|
|
+ log_e("__2__ set_time failed\n");
|
|
|
+ }
|
|
|
+
|
|
|
+ return r;
|
|
|
+}
|
|
|
+
|
|
|
+int get_time_str(char *s, int len, time_t t)
|
|
|
+{
|
|
|
+ struct tm *tm=localtime(&t);
|
|
|
+ return snprintf(s, len, "%04d-%02d-%02d %02d:%02d:%02d.000",tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
|
|
|
+}
|
|
|
+
|
|
|
+int get_time_str2(char *s, int len, time_t t)
|
|
|
+{
|
|
|
+ struct tm *tm=localtime(&t);
|
|
|
+ return snprintf(s, len, "%04d%02d%02d%02d%02d%02d", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
|
|
|
}
|
|
|
|
|
|
char* getUserNamebyToken(char* Token)
|
|
|
@@ -396,6 +572,29 @@ char* getUserNamebyToken(char* Token)
|
|
|
}
|
|
|
|
|
|
|
|
|
+typedef struct {
|
|
|
+ uint16_t year;
|
|
|
+ uint8_t mon;
|
|
|
+ uint8_t day;
|
|
|
+ uint8_t hour;
|
|
|
+ uint8_t min;
|
|
|
+ uint8_t sec;
|
|
|
+}datetime_t;
|
|
|
+int get_bldtime(char *buf, int len)
|
|
|
+{
|
|
|
+ char mon[10]={0};
|
|
|
+ datetime_t dt;
|
|
|
+ char *mon2[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
|
|
|
+
|
|
|
+ sscanf(__DATE__, "%s %hhu %hu", mon,&dt.day,&dt.year);
|
|
|
+ sscanf(__TIME__, "%hhu:%hhu:%hhu", &dt.hour,&dt.min,&dt.sec);
|
|
|
+ for(int i=0;i<12;i++) {
|
|
|
+ if(strcmp(mon, mon2[i])==0) {
|
|
|
+ dt.mon = i+1; break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return snprintf(buf,len,"%04hu/%02hhu/%02hhu %02hhu:%02hhu:%02hhu",dt.year,dt.mon,dt.day,dt.hour,dt.min,dt.sec);
|
|
|
+}
|
|
|
|
|
|
|
|
|
int is_process_running(const char *process_name)
|