Esempio n. 1
0
void GetDay( Calendar *date ){
	int dayNum = BCDtoInt(date->DayOfMonth);
	int month = BCDtoInt(date->Month);
	int year = BCDtoInt(date->Year);
	int dayName;
	int d, m, y, c;

	d = GetdNumber(dayNum);
	m = GetmNumber(month, year);
	y = GetyNumber(year);
	c = GetcNumber(year);

	dayName = (d + m + y + (y/4) + c) % 7;

	date->DayOfWeek = dayName;
}
Esempio n. 2
0
void IncrementReminderMonth( y_reminder *reminder ){
	int month = BCDtoInt( reminder->Time.Month );

	if( month < 12 ) {
		month++;
		reminder->Time.Month = IntToBCD( month );

	} else {
		reminder->Time.Month = 1;
		IncrementReminderYear( reminder );
	}
}
Esempio n. 3
0
void IncrementReminderYear( y_reminder *reminder ){
	int year = BCDtoInt( reminder->Time.Year & 0xFF );

	if( year < 99 ) {
		year++;
		reminder->Time.Year &= 0xff00;
		reminder->Time.Year |= IntToBCD( year );

	} else {
		int century = BCDtoInt( reminder->Time.Year >> 8 );
		century++;
		reminder->Time.Year &= 0x0000;
		reminder->Time.Year |= ( IntToBCD( century ) << 8 );
	}
}
Esempio n. 4
0
void IncrementReminderDay( y_reminder *reminder ){
	int day = BCDtoInt( reminder->Time.DayOfMonth );

	if ( day < 28 ) reminder->Time.DayOfMonth = IntToBCD( ++day );
	else {
		if ( reminder->Time.Month == 0x04 || reminder->Time.Month == 0x06 || reminder->Time.Month == 0x09 || reminder->Time.Month == 0x11 ){
			if ( day < 30 ) reminder->Time.DayOfMonth = IntToBCD( ++day );
			else {
				reminder->Time.DayOfMonth = 1;
				IncrementReminderMonth( reminder );
			}
		} else if ( reminder->Time.Month == 0x02 ){
			int year = BCDtoInt( reminder->Time.Year );
			if ( IsLeapYear(year) ){
				if ( day < 29 ) reminder->Time.DayOfMonth = IntToBCD( ++day );
				else {
						reminder->Time.DayOfMonth = 1;
						IncrementReminderMonth( reminder );
				}
			} else {
				if ( day < 28 ) reminder->Time.DayOfMonth = IntToBCD( ++day );
				else {
					reminder->Time.DayOfMonth = 1;
					IncrementReminderMonth( reminder );
				}
			}
		} else {
			if ( day < 31 ) reminder->Time.DayOfMonth = IntToBCD( ++day );
			else {
				reminder->Time.DayOfMonth = 1;
				IncrementReminderMonth( reminder );
			}
		}

	}
}
Esempio n. 5
0
void Sync_RTC(void){
	
	time_t ltime;
	struct tm *rtc_tm;
	
	ltime = time(NULL);
	rtc_tm = localtime(&ltime);
	
	int fd;
	unsigned char buff[10];
	unsigned char data[10];
	buff[0] = 0x02;
	
	
	/* Open I2C-BUS */	
	I2C_Open(&fd, 0x51);
	
	/* Write register */
	I2C_Send(&fd, buff, 1) ;
	
	/* Read the RTC */
	I2C_Read(&fd, data, 7);
	
	/* Close I2C-BUS */
	I2C_Close(&fd);
	
	data[0] &= 0x7F;
	data[1] &= 0x7F;
	data[2] &= 0x3F;
	data[3] &= 0x3F;
	data[4] &= 0x07;
	data[5] &= 0x1F;
	data[6] &= 0xFF;
	
	rtc_tm -> tm_sec = BCDtoInt(data[0]);
	rtc_tm -> tm_min = BCDtoInt(data[1]);
	rtc_tm -> tm_hour = BCDtoInt(data[2]);
	rtc_tm -> tm_mday = BCDtoInt(data[3]);
	rtc_tm -> tm_wday = BCDtoInt(data[4]);
	rtc_tm -> tm_mon = BCDtoInt(data[5]);
	rtc_tm -> tm_year = BCDtoInt(data[6]);
	
	const struct timeval tv = {mktime(rtc_tm), 0};
    settimeofday(&tv, 0);
	}
Esempio n. 6
0
void Read_RTC(void){
	
	int fd;
	unsigned char buff[10];
	unsigned char data[10];
	
	buff[0] = 0x02;
	
	
	
	
	/* Open I2C-BUS */	
	I2C_Open(&fd, 0x51);
	
	/* Write register */
	I2C_Send(&fd, buff, 1) ;
	
	/* Read the RTC */
	I2C_Read(&fd, data, 7);
	
	/* Close I2C-BUS */
	I2C_Close(&fd);
	
	data[0] &= 0x7F;
	data[1] &= 0x7F;
	data[2] &= 0x3F;
	data[3] &= 0x3F;
	data[4] &= 0x07;
	data[5] &= 0x1F;
	data[6] &= 0xFF;	
	
	printf("Sec: %d\n",BCDtoInt(data[0]));
	printf("Min: %d\n",BCDtoInt(data[1]));
	printf("Hour: %d\n",BCDtoInt(data[2]));
	printf("MDays: %d\n",BCDtoInt(data[3]));
	printf("WDays: %d\n",BCDtoInt(data[4]));
	printf("Month: %d\n",BCDtoInt(data[5]));
	printf("Year: %d\n",BCDtoInt(data[6]));
	
}