FastArduino v1.10
C++ library to build fast but small Arduino/AVR projects
|
I2C device driver for the DS1307 RTC chip. More...
#include <fastarduino/devices/ds1307.h>
Classes | |
class | DisableOutputFuture |
Create a future to be used by asynchronous method disable_output(DisableOutputFuture&). More... | |
class | EnableOutputFuture |
Create a future to be used by asynchronous method enable_output(EnableOutputFuture&). More... | |
class | GetRam1Future |
Create a future to be used by asynchronous method get_ram(GetRam1Future&). More... | |
class | GetRamFuture |
Create a future to be used by asynchronous method get_ram(GetRamFuture<SIZE>&). More... | |
class | HaltClockFuture |
Create a future to be used by asynchronous method halt_clock(HaltClockFuture&). More... | |
class | SetRam1Future |
Create a future to be used by asynchronous method set_ram(SetRam1Future&). More... | |
class | SetRamFuture |
Create a future to be used by asynchronous method set_ram(SetRamFuture<SIZE>&). More... | |
Public Types | |
using | SetDatetimeFuture = TWriteRegisterFuture< TIME_ADDRESS, tm, DatetimeConverterToDevice > |
Create a future to be used by asynchronous method set_datetime(SetDatetimeFuture&). More... | |
using | GetDatetimeFuture = TReadRegisterFuture< TIME_ADDRESS, tm, DatetimeConverterFromDevice > |
Create a future to be used by asynchronous method get_datetime(GetDatetimeFuture&). More... | |
Public Types inherited from i2c::I2CDevice< MANAGER > | |
using | MANAGER = MANAGER |
the type of I2C Manager that can handle this device. More... | |
Public Member Functions | |
DS1307 (MANAGER &manager) | |
Create a new device driver for a DS1307 chip. More... | |
int | set_datetime (SetDatetimeFuture &future) |
Change date and time of the RTC chip connected to this driver. More... | |
int | get_datetime (GetDatetimeFuture &future) |
Get the current date and time from the RTC chip. More... | |
template<uint8_t SIZE> | |
int | set_ram (SetRamFuture< SIZE > &future) |
Set several cells of the chip internal RAM to specified values. More... | |
int | set_ram (SetRam1Future &future) |
Set one cell of the chip internal RAM to the specified value. More... | |
template<uint8_t SIZE> | |
int | get_ram (GetRamFuture< SIZE > &future) |
Get values of several cells from the chip internal RAM. More... | |
int | get_ram (GetRam1Future &future) |
Get the value of one cell of the chip internal RAM. More... | |
int | halt_clock (HaltClockFuture &future) |
Disable the RTC oscillator, hence the time will not be updated anymore. More... | |
int | enable_output (EnableOutputFuture &future) |
Enable square wave output to the SQW/OUT pin of the RTC chip. More... | |
int | disable_output (DisableOutputFuture &future) |
Enable square wave output to the SQW/OUT pin of the RTC chip. More... | |
bool | set_datetime (const tm &datetime) |
Change date and time of the RTC chip connected to this driver. More... | |
bool | get_datetime (tm &datetime) |
Get the current date and time from the RTC chip. More... | |
bool | halt_clock () |
Disable the RTC oscillator, hence the time will not be updated anymore. More... | |
bool | enable_output (SquareWaveFrequency frequency=SquareWaveFrequency::FREQ_1HZ) |
Enable square wave output to the SQW/OUT pin of the RTC chip. More... | |
bool | disable_output (bool output_value=false) |
Disable square wave output to the SQW/OUT pin of the RTC chip. More... | |
bool | set_ram (uint8_t address, uint8_t data) |
Set one cell of the chip internal RAM to the specified value. More... | |
uint8_t | get_ram (uint8_t address) |
Get the value of one cell of the chip internal RAM. More... | |
template<uint8_t SIZE> | |
bool | set_ram (uint8_t address, const uint8_t(&data)[SIZE]) |
Set several cells of the chip internal RAM to specified values. More... | |
template<uint8_t SIZE> | |
bool | get_ram (uint8_t address, uint8_t(&data)[SIZE]) |
Get values of several cells from the chip internal RAM. More... | |
template<typename T > | |
bool | set_ram (uint8_t address, const T &data) |
Write any type of data to the chip internal RAM. More... | |
template<typename T > | |
bool | get_ram (uint8_t address, T &data) |
Read any type of data from the chip internal RAM. More... | |
Static Public Member Functions | |
static constexpr uint8_t | ram_size () |
Get the size of the additional RAM size of the chip. More... | |
Additional Inherited Members | |
Protected Types inherited from i2c::I2CDevice< MANAGER > | |
using | ABSTRACT_FUTURE = typename MANAGER::ABSTRACT_FUTURE |
The abstract base class of all futures to be defined for a device. More... | |
using | FUTURE = typename MANAGER::template FUTURE< OUT, IN > |
The template base class of all futures to be defined for a device. More... | |
Protected Member Functions inherited from i2c::I2CDevice< MANAGER > | |
I2CDevice (MANAGER &manager, uint8_t device, UNUSED Mode< MODE > mode, bool auto_stop) | |
Create a new I2C device. More... | |
I2CDevice (const I2CDevice &)=delete | |
I2CDevice & | operator= (const I2CDevice &)=delete |
void | set_device (uint8_t device) |
Change the I2C address of this device. More... | |
int | launch_commands (ABSTRACT_FUTURE &future, utils::range< I2CLightCommand > commands) |
Launch execution (asynchronously or synchronously, depending on MANAGER) of a chain of I2CLightCommand items (constructed with read() and write() methods). More... | |
int | async_read (F &future, bool stop=true) |
Helper method that asynchronously launches I2C commands for a simple Future performing one write followed by one read (typically for device register reading). More... | |
bool | sync_read (T &result) |
Helper method that launches I2C commands for a simple Future performing one write followed by one read (typically for device register reading); the method blocks until the end of the I2C transaction. More... | |
int | async_write (F &future, bool stop=true) |
Helper method that asynchronously launches I2C commands for a simple Future performing only one write (typically for device register writing). More... | |
int | async_multi_write (F &future, bool stop=true) |
Helper method that asynchronously launches I2C commands for a simple Future performing several register writes. More... | |
bool | sync_write (const T &value) |
Helper method that launches I2C commands for a simple Future performing only one write (typically for device register writing); the method blocks until the end of the I2C transaction. More... | |
bool | sync_write () |
Helper method that launches I2C commands for a simple Future performing only one write (typically for device register writing); the method blocks until the end of the I2C transaction. More... | |
Static Protected Member Functions inherited from i2c::I2CDevice< MANAGER > | |
static constexpr I2CLightCommand | read (uint8_t read_count=0, bool finish_future=false, bool stop=false) |
Build a read I2CLightCommand that can be later pushed to the I2C Manager for proper handling. More... | |
static constexpr I2CLightCommand | write (uint8_t write_count=0, bool finish_future=false, bool stop=false) |
Build a write I2CLightCommand that can be later pushed to the I2C Manager for proper handling. More... | |
I2C device driver for the DS1307 RTC chip.
Note that this chip only supports standard I2C mode (100 KHz).
MANAGER | one of FastArduino available I2C Manager |
using devices::rtc::DS1307< MANAGER >::SetDatetimeFuture = TWriteRegisterFuture<TIME_ADDRESS, tm, DatetimeConverterToDevice> |
Create a future to be used by asynchronous method set_datetime(SetDatetimeFuture&).
This is used by set_datetime()
to pass input settings, and it shall be used by the caller to determine when the I2C transaction is finished.
datetime | the new date/time to set on the RTC chip; all values must be properly set and be correct, in particular, note that tm::tm_wday must be set correctly by yourself (the RTC chip does not calculate it itself). |
using devices::rtc::DS1307< MANAGER >::GetDatetimeFuture = TReadRegisterFuture<TIME_ADDRESS, tm, DatetimeConverterFromDevice> |
Create a future to be used by asynchronous method get_datetime(GetDatetimeFuture&).
This is used by get_datetime()
to get device data, and it shall be used by the caller to determine when the I2C transaction is finished.
|
inlineexplicit |
|
inlinestaticconstexpr |
|
inline |
Change date and time of the RTC chip connected to this driver.
future | a SetDatetimeFuture passed by the caller, that will be updated once the current I2C action is finished. |
0 | if no problem occurred during the preparation of I2C transaction |
errors
.
|
inline |
Get the current date and time from the RTC chip.
future | a GetDatetimeFuture passed by the caller, that will be updated once the current I2C action is finished. |
0 | if no problem occurred during the preparation of I2C transaction |
errors
.
|
inline |
Set several cells of the chip internal RAM to specified values.
SIZE | the number of bytes to be written; address + SIZE must be less than ram_size() . |
future | a SetRamFuture<SIZE> passed by the caller, that will be updated once the current I2C action is finished. |
0 | if no problem occurred during the preparation of I2C transaction |
errors
.
|
inline |
Set one cell of the chip internal RAM to the specified value.
future | an SetRam1Future passed by the caller, that will be updated once the current I2C action is finished. |
0 | if no problem occurred during the preparation of I2C transaction |
errors
.
|
inline |
Get values of several cells from the chip internal RAM.
SIZE | the number of bytes to read; address + SIZE must be less than ram_size() . |
future | an GetRamFuture passed by the caller, that will be updated once the current I2C action is finished. |
0 | if no problem occurred during the preparation of I2C transaction |
errors
.
|
inline |
Get the value of one cell of the chip internal RAM.
future | an GetRam1Future passed by the caller, that will be updated once the current I2C action is finished. |
0 | if no problem occurred during the preparation of I2C transaction |
errors
.
|
inline |
Disable the RTC oscillator, hence the time will not be updated anymore.
If you want to re-enable the clock, you need to set a new date/time with set_datetime()
.
future | a HaltClockFuture passed by the caller, that will be updated once the current I2C action is finished. |
0 | if no problem occurred during the preparation of I2C transaction |
errors
.
|
inline |
Enable square wave output to the SQW/OUT pin of the RTC chip.
future | an EnableOutputFuture passed by the caller, that will be updated once the current I2C action is finished. |
0 | if no problem occurred during the preparation of I2C transaction |
errors
.
|
inline |
Enable square wave output to the SQW/OUT pin of the RTC chip.
future | a DisableOutputFuture passed by the caller, that will be updated once the current I2C action is finished. |
0 | if no problem occurred during the preparation of I2C transaction |
errors
.
|
inline |
Change date and time of the RTC chip connected to this driver.
datetime | the new date/time to set on the RTC chip; all values must be properly set and be correct, in particular, note that tm::tm_wday must be set correctly by yourself (the RTC chip does not calculate it itself). |
true | if the operation succeeded |
false | if the operation failed |
|
inline |
Get the current date and time from the RTC chip.
datetime | a reference to a tm variable that will be filled with current date and time from the RTC chip |
true | if the operation succeeded |
false | if the operation failed |
|
inline |
Disable the RTC oscillator, hence the time will not be updated anymore.
If you want to re-enable the clock, you need to set a new date/time with set_datetime()
.
true | if the operation succeeded |
false | if the operation failed |
|
inline |
Enable square wave output to the SQW/OUT pin of the RTC chip.
frequency | one of the supported RTC frequencies, defined in SquareWaveFrequency enum |
true | if the operation succeeded |
false | if the operation failed |
|
inline |
Disable square wave output to the SQW/OUT pin of the RTC chip.
output_value | value to force on SQW/OUT pin |
true | if the operation succeeded |
false | if the operation failed |
|
inline |
Set one cell of the chip internal RAM to the specified value.
address | the address of the cell to write, must be between 0 and ram_size() . |
data | the value to put at address |
true | if the operation succeeded |
false | if the operation failed |
|
inline |
Get the value of one cell of the chip internal RAM.
address | the address of the cell to read, must be between 0 and ram_size() . |
address
|
inline |
Set several cells of the chip internal RAM to specified values.
SIZE | the number of bytes to be written; address + SIZE must be less than ram_size() . |
address | the address of the first cell to write, must be between 0 and ram_size() . |
data | pointer to a buffer containing the values to write |
true | if the operation succeeded |
false | if the operation failed |
|
inline |
Get values of several cells from the chip internal RAM.
SIZE | the number of bytes to read; address + SIZE must be less than ram_size() . |
address | the address of the first cell to read, must be between 0 and ram_size() . |
data | pointer to a buffer where read values will be copied |
true | if the operation succeeded |
false | if the operation failed |
|
inline |
Write any type of data to the chip internal RAM.
T | the type of data to be written |
address | the address where to write data, must be between 0 and ram_size() - sizeof(T) . |
data | the actual data of type T , to be written |
true | if the operation succeeded |
false | if the operation failed |
|
inline |
Read any type of data from the chip internal RAM.
Note that this method only copies bytes to a variable of some type, no constructor will be called; hence, it is preferrable to use only simple struct types.
T | the type of data to be read |
address | the address where to find data to read, must be between 0 and ram_size() - sizeof(T) . |
data | a reference to a variable that will be copied the read content |
true | if the operation succeeded |
false | if the operation failed |