Example #1
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 );
	}
}
Example #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 );
	}
}
Example #3
0
void PCF8583::SetTime(int UnixTimeStamp)
{

    DateTime date(UnixTimeStamp);
    DigitalOut myled(LED3);
    myled = 1;
    wait(0.2);
    myled = 0;
    wait(0.2);
            
    PCF8583::i2c->start();
    PCF8583::i2c->write(RTCAddr);
    PCF8583::i2c->write(SecondsRegAddr);
    PCF8583::i2c->write(IntToBCD(date.second()));
    PCF8583::i2c->write(IntToBCD(date.minute()));
    PCF8583::i2c->write(0x3F & (IntToBCD(date.hour())));
    PCF8583::i2c->write(0x3F & (IntToBCD(date.day())));
    PCF8583::i2c->write(0x1F & (IntToBCD(date.month())));
    PCF8583::i2c->stop();

}
Example #4
0
void PCF8583::SetAlarm(int UnixTimeStamp)
{

    DateTime date(UnixTimeStamp);
    PCF8583::i2c->start();
    PCF8583::i2c->write(RTCAddr);
    PCF8583::i2c->write(AlarmSecondsRegAddr);
    PCF8583::i2c->write(IntToBCD(date.second()));
    PCF8583::i2c->write(IntToBCD(date.minute()));
    PCF8583::i2c->write(0x3F & (IntToBCD(date.hour())));
    PCF8583::i2c->write(0x1F & (IntToBCD(date.day())));
    PCF8583::i2c->write(0x7F);
    PCF8583::i2c->stop();
    
    //set alarm register into active mode
    
    SetReg(AlarmControlRegAddr,0x90);//(FetchReg(AlarmControlRegAddr) & 0x0F ) | 0x90);
    SetReg(ControlRegAddr,(FetchReg(ControlRegAddr) | 0x04));
    
    // await allarm

}
Example #5
0
void PCF8583::SetAlarm(uint8_t seconds, uint8_t minutes, uint8_t hours)
{
    //set alarm times
    PCF8583::i2c->start();
    PCF8583::i2c->write(RTCAddr);
    PCF8583::i2c->write(AlarmSecondsRegAddr);
    PCF8583::i2c->write(IntToBCD(seconds));
    PCF8583::i2c->write(IntToBCD(minutes));
    PCF8583::i2c->write(0x3F & (IntToBCD(hours)));
    PCF8583::i2c->write(0x3F & (IntToBCD(1)));
    PCF8583::i2c->write(0x1F & (IntToBCD(2)));
    PCF8583::i2c->stop();
    
    //set alarm register into active mode
    
    SetReg(AlarmControlRegAddr,0x9C);//(FetchReg(AlarmControlRegAddr) & 0x0F ) | 0x90);
    SetReg(ControlRegAddr,(FetchReg(ControlRegAddr)) | 0x04);
    
    // await allarm
      
    
}
Example #6
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 );
			}
		}

	}
}