##// END OF EJS Templates
se borraran las librerias de arduino, puesto que desde este momento se usara el plugin de arduino para eclipse
se borraran las librerias de arduino, puesto que desde este momento se usara el plugin de arduino para eclipse

File last commit:

r132:133
r135:136
Show More
clock.cpp
112 lines | 2.8 KiB | text/x-c | CppLexer
/*
* clock.cpp
*
* Created on: Nov 5, 2014
* Author: Alan Aguilar Sologuren
*/
#include <clock.h>
#include <Wire/Wire.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
*/
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);
}
}