@ -230,17 +230,18 @@ bool usb_connect() { 
			
		
	
		
			
				
					    time_t  rawtime ;   
			
		
	
		
			
				
					    time ( & rawtime ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    struct  tm  *  sys_time  =  gmtime ( & rawtime ) ;   
			
		
	
		
			
				
					    struct  tm  sys_time ;   
			
		
	
		
			
				
					    gmtime_r ( & rawtime ,  & sys_time ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Get time from RTC
   
			
		
	
		
			
				
					    timestamp_t  rtc_time ;   
			
		
	
		
			
				
					    libusb_control_transfer ( dev_handle ,  0xc0 ,  0xa0 ,  0 ,  0 ,  ( unsigned  char * ) & rtc_time ,  sizeof ( rtc_time ) ,  TIMEOUT ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    //printf("System: %d-%d-%d\t%d:%d:%d\n", 1900 + sys_time->tm_year, 1 + sys_time->tm_mon, sys_time->tm_mday, sys_time->tm_hour, sys_time->tm_min, sys_time-> tm_sec);
   
			
		
	
		
			
				
					    //printf("System: %d-%d-%d\t%d:%d:%d\n", 1900 + sys_time.tm_year, 1 + sys_time.tm_mon, sys_time.tm_mday, sys_time.tm_hour, sys_time.tm_min, sys_time. tm_sec);
   
			
		
	
		
			
				
					    //printf("RTC: %d-%d-%d\t%d:%d:%d\n", rtc_time.year, rtc_time.month, rtc_time.day, rtc_time.hour, rtc_time.minute, rtc_time.second);
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Update system time from RTC if it looks off, and RTC time is good
   
			
		
	
		
			
				
					    if  ( 1900  +  sys_time - > tm_year  <  2019  & &  rtc_time . year  > =  2019 ) {   
			
		
	
		
			
				
					       if  ( 1900  +  sys_time . tm_year  <  2019  & &  rtc_time . year  > =  2019 ) {   
			
		
	
		
			
				
					      LOGE ( " System time wrong, setting from RTC " ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					      struct  tm  new_time  =  {  0  } ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -472,18 +473,19 @@ void can_health(PubMaster &pm) { 
			
		
	
		
			
				
					    time_t  rawtime ;   
			
		
	
		
			
				
					    time ( & rawtime ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    struct  tm  *  sys_time  =  gmtime ( & rawtime ) ;   
			
		
	
		
			
				
					    struct  tm  sys_time ;   
			
		
	
		
			
				
					    gmtime_r ( & rawtime ,  & sys_time ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Write time to RTC if it looks reasonable
   
			
		
	
		
			
				
					    if  ( 1900  +  sys_time - > tm_year  > =  2019 ) {   
			
		
	
		
			
				
					    if  ( 1900  +  sys_time . tm_year  > =  2019 ) {   
			
		
	
		
			
				
					      pthread_mutex_lock ( & usb_lock ) ;   
			
		
	
		
			
				
					      libusb_control_transfer ( dev_handle ,  0x40 ,  0xa1 ,  ( uint16_t ) ( 1900  +  sys_time - > tm_year ) ,  0 ,  NULL ,  0 ,  TIMEOUT ) ;   
			
		
	
		
			
				
					      libusb_control_transfer ( dev_handle ,  0x40 ,  0xa2 ,  ( uint16_t ) ( 1  +  sys_time - > tm_mon ) ,  0 ,  NULL ,  0 ,  TIMEOUT ) ;   
			
		
	
		
			
				
					      libusb_control_transfer ( dev_handle ,  0x40 ,  0xa3 ,  ( uint16_t ) sys_time - > tm_mday ,  0 ,  NULL ,  0 ,  TIMEOUT ) ;   
			
		
	
		
			
				
					      // libusb_control_transfer(dev_handle, 0x40, 0xa4, (uint16_t)(1 + sys_time-> tm_wday), 0, NULL, 0, TIMEOUT);
   
			
		
	
		
			
				
					      libusb_control_transfer ( dev_handle ,  0x40 ,  0xa5 ,  ( uint16_t ) sys_time - > tm_hour ,  0 ,  NULL ,  0 ,  TIMEOUT ) ;   
			
		
	
		
			
				
					      libusb_control_transfer ( dev_handle ,  0x40 ,  0xa6 ,  ( uint16_t ) sys_time - > tm_min ,  0 ,  NULL ,  0 ,  TIMEOUT ) ;   
			
		
	
		
			
				
					      libusb_control_transfer ( dev_handle ,  0x40 ,  0xa7 ,  ( uint16_t ) sys_time - > tm_sec ,  0 ,  NULL ,  0 ,  TIMEOUT ) ;   
			
		
	
		
			
				
					      libusb_control_transfer ( dev_handle ,  0x40 ,  0xa1 ,  ( uint16_t ) ( 1900  +  sys_time . tm_year ) ,  0 ,  NULL ,  0 ,  TIMEOUT ) ;   
			
		
	
		
			
				
					      libusb_control_transfer ( dev_handle ,  0x40 ,  0xa2 ,  ( uint16_t ) ( 1  +  sys_time . tm_mon ) ,  0 ,  NULL ,  0 ,  TIMEOUT ) ;   
			
		
	
		
			
				
					      libusb_control_transfer ( dev_handle ,  0x40 ,  0xa3 ,  ( uint16_t ) sys_time . tm_mday ,  0 ,  NULL ,  0 ,  TIMEOUT ) ;   
			
		
	
		
			
				
					      // libusb_control_transfer(dev_handle, 0x40, 0xa4, (uint16_t)(1 + sys_time. tm_wday), 0, NULL, 0, TIMEOUT);
   
			
		
	
		
			
				
					      libusb_control_transfer ( dev_handle ,  0x40 ,  0xa5 ,  ( uint16_t ) sys_time . tm_hour ,  0 ,  NULL ,  0 ,  TIMEOUT ) ;   
			
		
	
		
			
				
					      libusb_control_transfer ( dev_handle ,  0x40 ,  0xa6 ,  ( uint16_t ) sys_time . tm_min ,  0 ,  NULL ,  0 ,  TIMEOUT ) ;   
			
		
	
		
			
				
					      libusb_control_transfer ( dev_handle ,  0x40 ,  0xa7 ,  ( uint16_t ) sys_time . tm_sec ,  0 ,  NULL ,  0 ,  TIMEOUT ) ;   
			
		
	
		
			
				
					      pthread_mutex_unlock ( & usb_lock ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					  }