##// END OF EJS Templates
Versiones de pruebas de integracion OK
Versiones de pruebas de integracion OK

File last commit:

r209:210
r223:224
Show More
clock.cpp
119 lines | 2.9 KiB | text/x-c | CppLexer
/*
* clock.cpp
*
* Created on: Nov 5, 2014
* Author: Alan Aguilar Sologuren
*/
#include <clock.h>
namespace te_clock {
/*!
* \fn request
* \brief Escribe un valor en la memoria RAM interna del RTC DS1308, en la
* direccion especificada.
* \param addr direccion relativa a la RAM (0 es la primera) del registro
* en DS1308.
* \param reqcode El codigo del comando a ejecutar
* \return estatus
* 0 success
* 2 error: address send, nack received
* 3 error: data send, nack received
* 4 other twi error
*/
inline uint8_t request(uint8_t reqcode, uint8_t addr = -1, uint8_t val = -1) {
Wire.beginTransmission(IDT5V19_CTRL_ID);
Wire.write(reqcode);
if (addr != -1)
Wire.write(addr);
if (val != -1)
Wire.write(val);
return Wire.endTransmission();
}
/*!
* \fn progsave
* \brief Escribe un valor en la memoria RAM interna del RTC DS1308, en la
* direccion especificada.
*/
inline uint8_t progsave(void) {
return request(0x01);
}
/*!
* \fn progrestore
* \brief Escribe un valor en la memoria RAM interna del RTC DS1308, en la
* direccion especificada.
*/
inline uint8_t progrestore(void) {
return request(0x02);
}
/*!
* \fn read
* \brief Lee un buffer de la memoria RAM interna del RTC DS1308, de la
* direccion especificada.
* \param addr direccion relativa a la RAM (0 es la primera) del registro
* en DS1308.
* \param buff Direccion del buffer al cual se copiaran los valores.
* \param cnt Numero de elementos acpiar del DS1308.
* \return estatus
* 0 success
* 2 error: address send, nack received
* 3 error: data send, nack received
* 4 other twi error
*/
uint8_t progread(uint8_t addr, uint8_t buf[], uint8_t cnt) {
uint8_t nread = 0;
while ((cnt > 0) && (addr < IDT5V19_MAX_ADD)) {
request(0x00, addr);
Wire.requestFrom((uint8_t) IDT5V19_CTRL_ID, cnt);
while (Wire.available() && (cnt > 0) && (addr < IDT5V19_MAX_ADD)) {
buf[nread] = Wire.read();
nread++;
cnt--;
addr++;
} /* while */
}
return (nread);
}
/*!
* \fn progwrite
* \brief Escribe el contenido de un buffer de cnt elementos en la memoria
* RAM interna del RTC DS1308, en la direccion especificada.
* \param addr direccion relativa a la RAM (0 es la primera) del inicio del
* buffer en DS1308.
* \param pbuf direccion del buffer a copiar en la RAM del DS1308.
* \param cnt Numero de elementos a copiar.
* \return estatus
* 0 success
* 2 error: address send, nack received
* 3 error: data send, nack received
* 4 other twi error
*/
uint8_t progwrite(uint8_t addr, const uint8_t *pbuf, uint8_t cnt) {
uint8_t nbytes, rc = 0;
if (addr >= IDT5V19_MAX_ADD)
return (IDT5V19_MAX_ADD); // 0 thru 55
if (addr + cnt > IDT5V19_MAX_ADD)
cnt = IDT5V19_MAX_ADD - addr;
while (cnt > 0) {
nbytes = min(cnt, BUFFER_LENGTH-1);
Wire.beginTransmission(IDT5V19_CTRL_ID);
Wire.write(0x00);
Wire.write(addr);
Wire.write((uint8_t*) pbuf, nbytes);
rc = Wire.endTransmission();
cnt -= nbytes;
addr += nbytes;
pbuf += nbytes;
}
return (rc);
}
}