COSA
An Object-Oriented Platform for Arduino Programming
Alarm::Clock Class Reference

#include <Alarm.hh>

Inheritance diagram for Alarm::Clock:
Inheritance graph
Collaboration diagram for Alarm::Clock:
Collaboration graph

Public Types

enum  InterruptMode { ON_LOW_LEVEL_MODE = 0, ON_CHANGE_MODE = _BV(ISC00), ON_FALLING_MODE = _BV(ISC01), ON_RISING_MODE = (_BV(ISC01) | _BV(ISC00)) }
 
enum  Mode { OUTPUT_MODE = 0, INPUT_MODE = 1 }
 
enum  Direction { MSB_FIRST = 0, LSB_FIRST = 1 }
 

Public Member Functions

 Clock (Board::ExternalInterruptPin pin, InterruptMode mode=ON_RISING_MODE, bool pullup=false)
 
virtual uint32_t time ()
 
void time (uint32_t sec)
 
uint32_t await ()
 
void tick (uint16_t ms)
 
void calibration (int16_t ms)
 
int16_t calibration ()
 
void adjust (int16_t ms)
 
virtual bool start (Job *job)
 
virtual bool stop (Job *job)
 
virtual void dispatch ()
 
virtual void enable ()
 
virtual void disable ()
 
virtual void clear ()
 
void clear () const
 
void mode (Mode mode)
 
Mode mode () const
 
void _set () const
 
void _set (int value) const
 
void set () const
 
void set (int value) const
 
void high () const
 
void on () const
 
void _clear () const
 
void low () const
 
void off () const
 
void _toggle () const
 
void toggle () const
 
void _write (int value) const
 
void write (int value) const
 
void write (uint8_t value, OutputPin &clk, Direction order=MSB_FIRST) const
 
void write (uint16_t value, uint8_t bits, uint16_t us) const
 
OutputPinoperator<< (int value)
 
void pulse (uint16_t us) const
 
uint8_t pin () const
 
bool is_set () const
 
bool is_high () const
 
bool is_on () const
 
bool is_clear () const
 
bool is_low () const
 
bool is_off () const
 
bool read () const
 
uint8_t read (OutputPin &clk, Direction order=MSB_FIRST) const
 
 operator bool () const
 
Pinoperator>> (uint8_t &var)
 

Static Public Member Functions

static void mode (Board::DigitalPin pin, Mode mode)
 
static Mode mode (Board::DigitalPin pin)
 
static void mode (Board::DigitalPin pin, uint8_t initial=0)
 
static void toggle (Board::DigitalPin pin)
 
static void _write (Board::DigitalPin pin, uint8_t value)
 
static void write (Board::DigitalPin pin, int value)
 
static uint8_t MASK (uint8_t pin)
 
static volatile uint8_t * PIN (uint8_t pin)
 
static volatile uint8_t * DDR (uint8_t pin)
 
static volatile uint8_t * PORT (uint8_t pin)
 
static bool read (Board::DigitalPin pin)
 

Protected Member Functions

virtual void on_interrupt (uint16_t arg=0)
 
volatile uint8_t * PIN () const
 
volatile uint8_t * DDR () const
 
volatile uint8_t * PORT () const
 
volatile uint8_t * PCIMR () const
 

Protected Attributes

int16_t m_msec
 Milli-seconds fraction. More...
 
uint32_t m_sec
 Seconds counter. More...
 
int16_t m_cal
 Milli-seconds calibration. More...
 
Head m_queue
 
volatile uint8_t *const m_sfr
 
const uint8_t m_mask
 
const uint8_t m_pin
 

Detailed Description

Alarm Clock is an external interrupt based job scheduler. The interrupt source should provide an interrupt every second to update the seconds counter and dispatch expired alarms.

Definition at line 42 of file Alarm.hh.

Member Enumeration Documentation

enum Pin::Direction
inherited

Serialization directions; most or least significant bit first.

Enumerator
MSB_FIRST 
LSB_FIRST 

Definition at line 84 of file Pin.hh.

Enumerator
ON_LOW_LEVEL_MODE 
ON_CHANGE_MODE 
ON_FALLING_MODE 
ON_RISING_MODE 

Definition at line 35 of file ExternalInterrupt.hh.

enum IOPin::Mode
inherited
Enumerator
OUTPUT_MODE 
INPUT_MODE 

Definition at line 31 of file IOPin.hh.

Constructor & Destructor Documentation

Alarm::Clock::Clock ( Board::ExternalInterruptPin  pin,
InterruptMode  mode = ON_RISING_MODE,
bool  pullup = false 
)
inline

Construct Alarm Clock with given external interrupt pin, mode and pullup flag. The external interrupt is assumed to be a 1 Hz pulse generated by an external RTC module.

Parameters
[in]pinexternal interrupt pin.
[in]modepin mode (Default ON_RISING_MODE).
[in]pullupflag (Default false).

Definition at line 52 of file Alarm.hh.

Member Function Documentation

void OutputPin::_clear ( ) const
inlineinherited

Clear the output pin. Unprotected version.

Definition at line 114 of file OutputPin.hh.

void OutputPin::_set ( ) const
inlineinherited

Set the output pin. Unprotected version.

Definition at line 75 of file OutputPin.hh.

void OutputPin::_set ( int  value) const
inlineinherited

Set the output pin with the given value. Zero(0) to clear and non-zero to set. Unprotected version.

Parameters
[in]valueto set.

Definition at line 184 of file OutputPin.hh.

void OutputPin::_toggle ( ) const
inlineinherited

Toggle the output pin. Unprotected version.

Definition at line 153 of file OutputPin.hh.

void OutputPin::_write ( int  value) const
inlineinherited

Set the output pin with the given value. Zero(0) to clear and non-zero to set. Unprotected version.

Parameters
[in]valueto set.

Definition at line 219 of file OutputPin.hh.

static void OutputPin::_write ( Board::DigitalPin  pin,
uint8_t  value 
)
inlinestaticinherited

Set the given output pin with the given value. Zero(0) to clear and non-zero to set. Unprotected version when pin and value are constants.

Parameters
[in]pinnumber (must be constant).
[in]valueto write (must be constant).

Definition at line 345 of file OutputPin.hh.

void Clock::adjust ( int16_t  ms)
inlineinherited

Adjust clock calibration with given number of milli-seconds.

Parameters
[in]msmilli-seconds.
Note
atomic

Definition at line 136 of file Clock.hh.

uint32_t Clock::await ( )
inlineinherited

Synchronize with clock by waiting for next clock update. Returns clock time in seconds.

Returns
seconds.

Definition at line 77 of file Clock.hh.

void Clock::calibration ( int16_t  ms)
inlineinherited

Set clock calibration to given number of milli-seconds to adjust by per second.

Parameters
[in]msmilli-seconds.
Note
atomic

Definition at line 114 of file Clock.hh.

int16_t Clock::calibration ( )
inlineinherited

Get current clock calibration in milli-seconds.

Returns
calibration.
Note
atomic

Definition at line 124 of file Clock.hh.

void ExternalInterrupt::clear ( )
virtualinherited

Clear external interrupt flag.

Note
atomic

Reimplemented from Interrupt::Handler.

Definition at line 205 of file ExternalInterrupt.cpp.

void OutputPin::clear ( ) const
inlineinherited

Clear the output pin.

Note
atomic

Definition at line 124 of file OutputPin.hh.

static volatile uint8_t* Pin::DDR ( uint8_t  pin)
inlinestaticinherited

Return pointer to Data Direction Register.

Parameters
[in]pinnumber.
Returns
DDR register pointer.

Definition at line 64 of file Pin.hh.

volatile uint8_t* Pin::DDR ( ) const
inlineprotectedinherited

Return pointer to Data Direction Register.

Returns
DDR register pointer.

Definition at line 245 of file Pin.hh.

void ExternalInterrupt::disable ( )
virtualinherited

Disable external interrupt handler.

Note
atomic

Reimplemented from Interrupt::Handler.

Definition at line 199 of file ExternalInterrupt.cpp.

void Job::Scheduler::dispatch ( )
virtualinherited

Dispatch expired jobs. This member function is typically called from an interrupt service routine.

Reimplemented in RTT::Scheduler.

Definition at line 53 of file Job_Scheduler.cpp.

void ExternalInterrupt::enable ( )
virtualinherited

Enable external interrupt handler.

Note
atomic

Reimplemented from Interrupt::Handler.

Definition at line 190 of file ExternalInterrupt.cpp.

void OutputPin::high ( ) const
inlineinherited

Set the output pin.

Note
atomic

Definition at line 95 of file OutputPin.hh.

bool Pin::is_clear ( ) const
inlineinherited

Return true(1) if the pin is clear otherwise false(0).

Returns
boolean.

Definition at line 142 of file Pin.hh.

bool Pin::is_high ( ) const
inlineinherited

Return true(1) if the pin is set otherwise false(0).

Returns
boolean.

Definition at line 122 of file Pin.hh.

bool Pin::is_low ( ) const
inlineinherited

Return true(1) if the pin is clear otherwise false(0).

Returns
boolean.

Definition at line 152 of file Pin.hh.

bool Pin::is_off ( ) const
inlineinherited

Return true(1) if the pin is clear otherwise false(0).

Returns
boolean.

Definition at line 162 of file Pin.hh.

bool Pin::is_on ( ) const
inlineinherited

Return true(1) if the pin is set otherwise false(0).

Returns
boolean.

Definition at line 132 of file Pin.hh.

bool Pin::is_set ( ) const
inlineinherited

Return true(1) if the pin is set otherwise false(0).

Returns
boolean.

Definition at line 112 of file Pin.hh.

void OutputPin::low ( ) const
inlineinherited

Clear the output pin.

Note
atomic

Definition at line 134 of file OutputPin.hh.

static uint8_t Pin::MASK ( uint8_t  pin)
inlinestaticinherited

Return bit mask for given Arduino pin number.

Parameters
[in]pinnumber.
Returns
pin bit mask.

Definition at line 42 of file Pin.hh.

void IOPin::mode ( Mode  mode)
inlineinherited

Change IO-pin to given mode.

Parameters
[in]modenew operation mode.
Note
atomic

Definition at line 56 of file IOPin.hh.

static void OutputPin::mode ( Board::DigitalPin  pin,
uint8_t  initial = 0 
)
inlinestaticinherited

Set output pin to mode.

Parameters
[in]pinnumber.
[in]initialvalue.
Note
atomic

Definition at line 56 of file OutputPin.hh.

Mode IOPin::mode ( ) const
inlineinherited

Get current IO-pin mode.

Returns
mode.

Definition at line 71 of file IOPin.hh.

static void IOPin::mode ( Board::DigitalPin  pin,
Mode  mode 
)
inlinestaticinherited

Change IO-pin to given mode.

Parameters
[in]pinnumber.
[in]modenew operation mode.
Note
atomic

Definition at line 83 of file IOPin.hh.

static Mode IOPin::mode ( Board::DigitalPin  pin)
inlinestaticinherited

Get IO-pin mode.

Parameters
[in]pinnumber.
Returns
mode.

Definition at line 101 of file IOPin.hh.

void OutputPin::off ( ) const
inlineinherited

Clear the output pin.

Note
atomic

Definition at line 144 of file OutputPin.hh.

void OutputPin::on ( ) const
inlineinherited

Set the output pin.

Note
atomic

Definition at line 105 of file OutputPin.hh.

virtual void Alarm::Clock::on_interrupt ( uint16_t  arg = 0)
inlineprotectedvirtual

Increment the seconds counter and dispatch any expired alarms.

Parameters
[in]argargument from interrupt service routine (not used).

Reimplemented from ExternalInterrupt.

Definition at line 65 of file Alarm.hh.

Pin::operator bool ( ) const
inlineinherited

Read input pin and assign variable.

Parameters
[out]varto assign.
Returns
pin.

Definition at line 204 of file Pin.hh.

OutputPin& OutputPin::operator<< ( int  value)
inlineinherited

Set the output pin with the given value. Zero(0) to clear and non-zero to set. Output operator syntax.

Parameters
[in]valueto write.
Returns
output pin.

Definition at line 364 of file OutputPin.hh.

Pin& Pin::operator>> ( uint8_t &  var)
inlineinherited

Read input pin and assign variable.

Parameters
[out]varto assign.
Returns
pin.

Definition at line 215 of file Pin.hh.

volatile uint8_t* Pin::PCIMR ( ) const
inlineprotectedinherited

Return pin change interrupt mask register.

Returns
pin change mask register pointer.

Definition at line 263 of file Pin.hh.

static volatile uint8_t* Pin::PIN ( uint8_t  pin)
inlinestaticinherited

Return pointer to PIN register.

Parameters
[in]pinnumber.
Returns
PIN register pointer.

Definition at line 53 of file Pin.hh.

uint8_t Pin::pin ( ) const
inlineinherited

Return Arduino pin number of abstract pin.

Returns
pin number.

Definition at line 103 of file Pin.hh.

volatile uint8_t* Pin::PIN ( ) const
inlineprotectedinherited

Return pointer to PIN register.

Returns
PIN register pointer.

Definition at line 236 of file Pin.hh.

static volatile uint8_t* Pin::PORT ( uint8_t  pin)
inlinestaticinherited

Return pointer to data PORT register.

Parameters
[in]pinnumber.
Returns
PORT register pointer.

Definition at line 75 of file Pin.hh.

volatile uint8_t* Pin::PORT ( ) const
inlineprotectedinherited

Return pointer to data PORT register.

Returns
PORT register pointer.

Definition at line 254 of file Pin.hh.

void OutputPin::pulse ( uint16_t  us) const
inlineinherited

Toggle the output pin to form a pulse with given width in micro-seconds.

Parameters
[in]uspulse width in micro seconds
Note
atomic
pulse width is limited to 1000 us

Definition at line 378 of file OutputPin.hh.

bool Pin::read ( ) const
inlineinherited

Return true(1) if the pin is set otherwise false(0).

Returns
boolean.

Definition at line 172 of file Pin.hh.

uint8_t Pin::read ( OutputPin clk,
Direction  order = MSB_FIRST 
) const
inherited

Shift in a byte from the input pin using the given clock output pin. Shift in according to given direction.

Parameters
[in]clkoutput pin.
[in]orderbit first.
Returns
value.

Definition at line 25 of file Pin.cpp.

static bool Pin::read ( Board::DigitalPin  pin)
inlinestaticinherited

Use pin number directly to read value. Does not require an instance. Return true(1) if the pin is set otherwise false(0).

Parameters
[in]pinnumber.
Returns
boolean.

Definition at line 193 of file Pin.hh.

void OutputPin::set ( ) const
inlineinherited

Set the output pin.

Note
atomic

Definition at line 85 of file OutputPin.hh.

void OutputPin::set ( int  value) const
inlineinherited

Set the output pin with the given value. Zero(0) to clear and non-zero to set.

Parameters
[in]valueto set.
Note
atomic

Definition at line 201 of file OutputPin.hh.

bool Job::Scheduler::start ( Job job)
virtualinherited

Start given job. Returns true(1) if successful otherwise false(0).

Parameters
[in]jobto start.
Returns
bool.

Reimplemented in RTT::Scheduler.

Definition at line 24 of file Job_Scheduler.cpp.

bool Job::Scheduler::stop ( Job job)
virtualinherited

Stop given job. Returns true(1) if successful otherwise false(0).

Parameters
[in]jobto stop.
Returns
bool.

Definition at line 44 of file Job_Scheduler.cpp.

void Clock::tick ( uint16_t  ms)
inlineinherited

Increment the clock with the given number of milli-seconds. Dispatch jobs if the clock seconds counter is incremented.

Parameters
[in]msmilli-seconds in a tick.
Note
atomic

Definition at line 94 of file Clock.hh.

virtual uint32_t Clock::time ( )
inlinevirtualinherited

Return clock time in seconds.

Returns
seconds.
Note
atomic

Implements Job::Scheduler.

Definition at line 51 of file Clock.hh.

void Clock::time ( uint32_t  sec)
inlineinherited

Set clock (seconds) to real-time (for instance seconds from a given date; epoch 1900-01-01 00:00 or 1970-01-01 00:00).

Parameters
[in]sec.
Note
atomic

Definition at line 64 of file Clock.hh.

void OutputPin::toggle ( ) const
inlineinherited

Toggle the output pin.

Note
atomic

Definition at line 163 of file OutputPin.hh.

static void OutputPin::toggle ( Board::DigitalPin  pin)
inlinestaticinherited

Toggle the output pin. Atomic per definition

Parameters
[in]pinnumber.

Definition at line 173 of file OutputPin.hh.

void OutputPin::write ( int  value) const
inlineinherited

Set the output pin with the given value. Zero(0) to clear and non-zero to set.

Parameters
[in]valueto write.
Note
atomic

Definition at line 236 of file OutputPin.hh.

void OutputPin::write ( uint8_t  value,
OutputPin clk,
Direction  order = MSB_FIRST 
) const
inherited

Shift out given byte to the output pin using the given clock output pin. Shift out according to given direction. Data (bits) are transfered on clock transition. Interrupts are allowed during the shift out.

Parameters
[in]valueto write.
[in]clkoutput pin.
[in]orderbit first.

Definition at line 24 of file OutputPin.cpp.

void OutputPin::write ( uint16_t  value,
uint8_t  bits,
uint16_t  us 
) const
inherited

Shift out given value and number of bits to the output pin using the given pulse length in micro-seconds. Shift out from LSB(0) to MSB(bits-1). This operation is synchronized and will turn off interrupt handling during the transmission period.

Parameters
[in]valueto write.
[in]bitsto write.
[in]usmicro-second bit period.
Note
atomic
us should not exceed 1000

Definition at line 46 of file OutputPin.cpp.

static void OutputPin::write ( Board::DigitalPin  pin,
int  value 
)
inlinestaticinherited

Set the given output pin with the given value. Zero(0) to clear and non-zero to set.

Parameters
[in]pinnumber.
[in]valueto write.
Note
atomic

Definition at line 306 of file OutputPin.hh.

Member Data Documentation

int16_t Clock::m_cal
protectedinherited

Milli-seconds calibration.

Definition at line 144 of file Clock.hh.

const uint8_t Pin::m_mask
protectedinherited

Pin mask in port.

Definition at line 227 of file Pin.hh.

int16_t Clock::m_msec
protectedinherited

Milli-seconds fraction.

Definition at line 142 of file Clock.hh.

const uint8_t Pin::m_pin
protectedinherited

Pin identity.

Definition at line 230 of file Pin.hh.

Head Job::Scheduler::m_queue
protectedinherited

Job queue.

Definition at line 84 of file Job.hh.

uint32_t Clock::m_sec
protectedinherited

Seconds counter.

Definition at line 143 of file Clock.hh.

volatile uint8_t* const Pin::m_sfr
protectedinherited

Special function register pointer.

Definition at line 224 of file Pin.hh.


The documentation for this class was generated from the following file: