ds3231 ads111x bh1750 update + I2c device desciptor

This commit is contained in:
lilian 2017-08-04 00:12:42 -03:00
parent 0654299a17
commit cfefe95fe0
12 changed files with 190 additions and 177 deletions

View file

@ -11,9 +11,6 @@
#include "espressif/sdk_private.h"
#include "esp8266.h"
#include "i2c/i2c.h"
static uint8_t _bus;
/* Convert normal decimal to binary coded decimal */
static inline uint8_t decToBcd(uint8_t dec)
@ -30,20 +27,20 @@ static inline uint8_t bcdToDec(uint8_t bcd)
/* Send a number of bytes to the rtc over i2c
* returns true to indicate success
*/
static inline int ds3231_send(uint8_t reg, uint8_t *data, uint8_t len)
static inline int ds3231_send(i2c_dev_t *dev, uint8_t reg, uint8_t *data, uint8_t len)
{
return i2c_slave_write(_bus, DS3231_ADDR, &reg, data, len);
return i2c_slave_write(dev->bus, dev->addr, &reg, data, len);
}
/* Read a number of bytes from the rtc over i2c
* returns true to indicate success
*/
static inline int ds3231_recv(uint8_t reg, uint8_t *data, uint8_t len)
static inline int ds3231_recv(i2c_dev_t *dev, uint8_t reg, uint8_t *data, uint8_t len)
{
return i2c_slave_read(_bus, DS3231_ADDR, &reg, data, len);
return i2c_slave_read(dev->bus, dev->addr, &reg, data, len);
}
int ds3231_setTime(struct tm *time)
int ds3231_setTime(i2c_dev_t *dev, struct tm *time)
{
uint8_t data[7];
@ -56,10 +53,10 @@ int ds3231_setTime(struct tm *time)
data[5] = decToBcd(time->tm_mon + 1);
data[6] = decToBcd(time->tm_year - 100);
return ds3231_send(DS3231_ADDR_TIME, data, 7);
return ds3231_send(dev, DS3231_ADDR_TIME, data, 7);
}
int ds3231_setAlarm(uint8_t alarms, struct tm *time1, uint8_t option1, struct tm *time2, uint8_t option2)
int ds3231_setAlarm(i2c_dev_t *dev, uint8_t alarms, struct tm *time1, uint8_t option1, struct tm *time2, uint8_t option2)
{
int i = 0;
uint8_t data[7];
@ -83,7 +80,7 @@ int ds3231_setAlarm(uint8_t alarms, struct tm *time1, uint8_t option1, struct tm
(option2 == DS3231_ALARM2_MATCH_MINHOURDATE ? decToBcd(time2->tm_mday) : DS3231_ALARM_NOTSET));
}
return ds3231_send((alarms == DS3231_ALARM_2 ? DS3231_ADDR_ALARM2 : DS3231_ADDR_ALARM1), data, i);
return ds3231_send(dev, (alarms == DS3231_ALARM_2 ? DS3231_ADDR_ALARM2 : DS3231_ADDR_ALARM1), data, i);
}
/* Get a byte containing just the requested bits
@ -93,12 +90,12 @@ int ds3231_setAlarm(uint8_t alarms, struct tm *time1, uint8_t option1, struct tm
* of use a mask of 0xff to just return the whole register byte
* returns true to indicate success
*/
bool ds3231_getFlag(uint8_t addr, uint8_t mask, uint8_t *flag)
bool ds3231_getFlag(i2c_dev_t *dev, uint8_t addr, uint8_t mask, uint8_t *flag)
{
uint8_t data;
/* get register */
if (!ds3231_recv(addr, &data, 1))
if (!ds3231_recv(dev, addr, &data, 1))
{
/* return only requested flag */
*flag = (data & mask);
@ -114,12 +111,12 @@ bool ds3231_getFlag(uint8_t addr, uint8_t mask, uint8_t *flag)
* DS3231_SET/DS3231_CLEAR/DS3231_REPLACE
* returns true to indicate success
*/
bool ds3231_setFlag(uint8_t addr, uint8_t bits, uint8_t mode)
bool ds3231_setFlag(i2c_dev_t *dev, uint8_t addr, uint8_t bits, uint8_t mode)
{
uint8_t data;
/* get status register */
if (!ds3231_recv(addr, &data, 1))
if (!ds3231_recv(dev, addr, &data, 1))
{
/* clear the flag */
if (mode == DS3231_REPLACE)
@ -129,18 +126,18 @@ bool ds3231_setFlag(uint8_t addr, uint8_t bits, uint8_t mode)
else
data &= ~bits;
if (!ds3231_send(addr, &data, 1))
if (!ds3231_send(dev, addr, &data, 1))
return true;
}
return false;
}
bool ds3231_getOscillatorStopFlag(bool *flag)
bool ds3231_getOscillatorStopFlag(i2c_dev_t *dev, bool *flag)
{
uint8_t f;
if (ds3231_getFlag(DS3231_ADDR_STATUS, DS3231_STAT_OSCILLATOR, &f))
if (ds3231_getFlag(dev, DS3231_ADDR_STATUS, DS3231_STAT_OSCILLATOR, &f))
{
*flag = (f ? true : false);
return true;
@ -149,76 +146,76 @@ bool ds3231_getOscillatorStopFlag(bool *flag)
return false;
}
inline bool ds3231_clearOscillatorStopFlag()
inline bool ds3231_clearOscillatorStopFlag(i2c_dev_t *dev)
{
return ds3231_setFlag(DS3231_ADDR_STATUS, DS3231_STAT_OSCILLATOR, DS3231_CLEAR);
return ds3231_setFlag(dev, DS3231_ADDR_STATUS, DS3231_STAT_OSCILLATOR, DS3231_CLEAR);
}
inline bool ds3231_getAlarmFlags(uint8_t *alarms)
inline bool ds3231_getAlarmFlags(i2c_dev_t *dev, uint8_t *alarms)
{
return ds3231_getFlag(DS3231_ADDR_STATUS, DS3231_ALARM_BOTH, alarms);
return ds3231_getFlag(dev, DS3231_ADDR_STATUS, DS3231_ALARM_BOTH, alarms);
}
inline bool ds3231_clearAlarmFlags(uint8_t alarms)
inline bool ds3231_clearAlarmFlags(i2c_dev_t *dev, uint8_t alarms)
{
return ds3231_setFlag(DS3231_ADDR_STATUS, alarms, DS3231_CLEAR);
return ds3231_setFlag(dev, DS3231_ADDR_STATUS, alarms, DS3231_CLEAR);
}
inline bool ds3231_enableAlarmInts(uint8_t alarms)
inline bool ds3231_enableAlarmInts(i2c_dev_t *dev, uint8_t alarms)
{
return ds3231_setFlag(DS3231_ADDR_CONTROL, DS3231_CTRL_ALARM_INTS | alarms, DS3231_SET);
return ds3231_setFlag(dev, DS3231_ADDR_CONTROL, DS3231_CTRL_ALARM_INTS | alarms, DS3231_SET);
}
inline bool ds3231_disableAlarmInts(uint8_t alarms)
inline bool ds3231_disableAlarmInts(i2c_dev_t *dev, uint8_t alarms)
{
/* Just disable specific alarm(s) requested
* does not disable alarm interrupts generally (which would enable the squarewave)
*/
return ds3231_setFlag(DS3231_ADDR_CONTROL, alarms, DS3231_CLEAR);
return ds3231_setFlag(dev, DS3231_ADDR_CONTROL, alarms, DS3231_CLEAR);
}
inline bool ds3231_enable32khz()
inline bool ds3231_enable32khz(i2c_dev_t *dev)
{
return ds3231_setFlag(DS3231_ADDR_STATUS, DS3231_STAT_32KHZ, DS3231_SET);
return ds3231_setFlag(dev, DS3231_ADDR_STATUS, DS3231_STAT_32KHZ, DS3231_SET);
}
inline bool ds3231_disable32khz()
inline bool ds3231_disable32khz(i2c_dev_t *dev)
{
return ds3231_setFlag(DS3231_ADDR_STATUS, DS3231_STAT_32KHZ, DS3231_CLEAR);
return ds3231_setFlag(dev, DS3231_ADDR_STATUS, DS3231_STAT_32KHZ, DS3231_CLEAR);
}
inline bool ds3231_enableSquarewave()
inline bool ds3231_enableSquarewave(i2c_dev_t *dev)
{
return ds3231_setFlag(DS3231_ADDR_CONTROL, DS3231_CTRL_ALARM_INTS, DS3231_CLEAR);
return ds3231_setFlag(dev, DS3231_ADDR_CONTROL, DS3231_CTRL_ALARM_INTS, DS3231_CLEAR);
}
inline bool ds3231_disableSquarewave()
inline bool ds3231_disableSquarewave(i2c_dev_t *dev)
{
return ds3231_setFlag(DS3231_ADDR_CONTROL, DS3231_CTRL_ALARM_INTS, DS3231_SET);
return ds3231_setFlag(dev, DS3231_ADDR_CONTROL, DS3231_CTRL_ALARM_INTS, DS3231_SET);
}
bool ds3231_setSquarewaveFreq(uint8_t freq)
bool ds3231_setSquarewaveFreq(i2c_dev_t *dev, uint8_t freq)
{
uint8_t flag = 0;
if (ds3231_getFlag(DS3231_ADDR_CONTROL, 0xff, &flag))
if (ds3231_getFlag(dev, DS3231_ADDR_CONTROL, 0xff, &flag))
{
/* clear current rate */
flag &= ~DS3231_CTRL_SQWAVE_8192HZ;
/* set new rate */
flag |= freq;
return ds3231_setFlag(DS3231_ADDR_CONTROL, flag, DS3231_REPLACE);
return ds3231_setFlag(dev, DS3231_ADDR_CONTROL, flag, DS3231_REPLACE);
}
return false;
}
bool ds3231_getRawTemp(int16_t *temp)
bool ds3231_getRawTemp(i2c_dev_t *dev, int16_t *temp)
{
uint8_t data[2];
data[0] = DS3231_ADDR_TEMP;
if (!ds3231_recv(DS3231_ADDR_TEMP,data, 2))
if (!ds3231_recv(dev, DS3231_ADDR_TEMP,data, 2))
{
*temp = (int16_t)(int8_t)data[0] << 2 | data[1] >> 6;
return true;
@ -227,11 +224,11 @@ bool ds3231_getRawTemp(int16_t *temp)
return false;
}
bool ds3231_getTempInteger(int8_t *temp)
bool ds3231_getTempInteger(i2c_dev_t *dev, int8_t *temp)
{
int16_t tInt;
if (ds3231_getRawTemp(&tInt)) {
if (ds3231_getRawTemp(dev, &tInt)) {
*temp = tInt >> 2;
return true;
}
@ -239,11 +236,11 @@ bool ds3231_getTempInteger(int8_t *temp)
return false;
}
bool ds3231_getTempFloat(float *temp)
bool ds3231_getTempFloat(i2c_dev_t *dev, float *temp)
{
int16_t tInt;
if (ds3231_getRawTemp(&tInt)) {
if (ds3231_getRawTemp(dev, &tInt)) {
*temp = tInt * 0.25;
return true;
}
@ -251,12 +248,12 @@ bool ds3231_getTempFloat(float *temp)
return false;
}
bool ds3231_getTime(struct tm *time)
bool ds3231_getTime(i2c_dev_t *dev, struct tm *time)
{
uint8_t data[7];
/* read time */
if (ds3231_recv(DS3231_ADDR_TIME, data, 7))
if (ds3231_recv(dev, DS3231_ADDR_TIME, data, 7))
{
return false;
}
@ -285,9 +282,3 @@ bool ds3231_getTime(struct tm *time)
return true;
}
void ds3231_Init(uint8_t bus)
{
_bus = bus;
//i2c_init(0, scl, sda);
}