Clock with Real-Time Clock (RTC-8564) and I2C LCD module(SB1062B).

Dependencies:   DebouncedEdgeIn I2cLCD_cursor Rtc8564 mbed beep

/media/uploads/togayan/imgp0004s.jpg /media/uploads/togayan/lcdclock_circuit_rev4.png

ViewModel/ClockViewModel.cpp

Committer:
togayan
Date:
2014-02-14
Revision:
1:f8713c387a68
Parent:
0:86ab67787717
Child:
2:6f0158399eff

File content as of revision 1:f8713c387a68:

#include "ClockViewModel.h"
#include "EventMechanism/EventParam0.h"

using ViewModel::ClockViewModel;

// Icon Name ----
// Mark
// Battery_1
// Battery_2
// Battery_3
// Battery_4
// NoSound
// Lock
// ArrowDown
// ArrowUp
// Input
// Alarm
// Tell
// Antenna
// --------------

ClockViewModel::ClockViewModel(I2cLCD& i2clcd, PinName set, PinName select, EventMechanism::I_EventHandler* evHandler, DigitalOut& led)
    :m_i2clcd(i2clcd),
     m_set(set),
     m_select(select),
     m_evHandler(evHandler),
     m_clock(0),
     m_dateTime(0),
     m_led(led)
{
    m_set.mode(PullUp);
    m_set.fall(this, &ClockViewModel::setButtonPressed);
}

void ClockViewModel::setClock(Model::Clock* clock)
{
    m_clock = clock;
    m_dateTime = m_clock->getDateTime();
}

void ClockViewModel::initialize()
{
    //m_set.rise(this, &ClockViewModel::setButtonPressed);
    m_select.fall(this, &ClockViewModel::selectButtonPressed);
    
    // print ICON
    m_i2clcd.seticon( I2cLCD::Mark );
    m_i2clcd.seticon( I2cLCD::Battery_1 );
    m_i2clcd.seticon( I2cLCD::Battery_2 );
    m_i2clcd.seticon( I2cLCD::Battery_3 );
    m_i2clcd.seticon( I2cLCD::Battery_4 );
    m_i2clcd.seticon( I2cLCD::NoSound );
    m_i2clcd.seticon( I2cLCD::Lock );
    m_i2clcd.seticon( I2cLCD::ArrowDown );
    m_i2clcd.seticon( I2cLCD::ArrowUp );
    m_i2clcd.seticon( I2cLCD::Input );
    m_i2clcd.seticon( I2cLCD::Alarm );
    m_i2clcd.seticon( I2cLCD::Tell );
    m_i2clcd.seticon( I2cLCD::Antenna );
}

void ClockViewModel::dateTimeUpdated()
{
    static char dat[31] = " 20-- / -- / --\n  -- : -- : --";
    uint8_t val = 0;

    val = m_dateTime->year % 100;
    dat[3] = '0' + val / 10;
    dat[4] = '0' + val % 10;
    val = m_dateTime->month;
    dat[8] = '0' + val / 10;
    dat[9] = '0' + val % 10;
    val = m_dateTime->day;
    dat[13] = '0' + val / 10;
    dat[14] = '0' + val % 10;
    val = m_dateTime->hour;
    dat[18] = '0' + val / 10;
    dat[19] = '0' + val % 10;
    val = m_dateTime->minute;
    dat[23] = '0' + val / 10;
    dat[24] = '0' + val % 10;
    val = m_dateTime->second;
    dat[28] = '0' + val / 10;
    dat[29] = '0' + val % 10;

    m_i2clcd.locate(0, 0);
    m_i2clcd.puts(dat);
}

void ClockViewModel::setButtonPressed()
{
    m_evHandler->postEvent(new EventMechanism::EventParam0<ClockViewModel>(this, &ClockViewModel::setButtonPressedAsync));
}

void ClockViewModel::setButtonPressedAsync()
{
    puts("setButtonPressedAsync\n");
    m_led = (m_led == 1)? 0 : 1;
    m_clock->initialize();
}

void ClockViewModel::selectButtonPressed()
{
    m_evHandler->postEvent(new EventMechanism::EventParam0<ClockViewModel>(this, &ClockViewModel::selectButtonPressedAsync));
}

void ClockViewModel::selectButtonPressedAsync()
{
    puts("selectButtonPressedAsync\n");
    m_led = (m_led == 1)? 0 : 1;
    m_clock->initialize();
}