You've already forked TEF6686_ESP32
152 lines
4.1 KiB
C++
152 lines
4.1 KiB
C++
#ifndef RX8010SJ_ADAPTER
|
|
#define RX8010SJ_ADAPTER
|
|
|
|
#include "Arduino.h"
|
|
#include "Wire.h"
|
|
|
|
#define RX8010_FCT_FREQ_4096 0b000
|
|
#define RX8010_FCT_FREQ_64 0b001
|
|
#define RX8010_FCT_FREQ_1 0b010
|
|
#define RX8010_FCT_FREQ_1_60 0b011
|
|
#define RX8010_FCT_FREQ_1_3600 0b100
|
|
|
|
#define RX8010_FCT_OUT_IRQ1 0b01
|
|
#define RX8010_FCT_OUT_IRQ2 0b00
|
|
#define RX8010_FCT_OUT_OFF 0b10
|
|
|
|
#define RX8010_ALARM_IGNORE 0b11111111
|
|
#define RX8010_ALARM_MOD_MONTH 0b0
|
|
#define RX8010_ALARM_MOD_WEEK 0b1
|
|
|
|
#define RX8010_TUI_MOD_SEC 0b0
|
|
#define RX8010_TUI_MOD_MIN 0b1
|
|
|
|
#define RX8010_FOUT_FREQ_OFF 0b00
|
|
#define RX8010_FOUT_FREQ_1 0b01
|
|
#define RX8010_FOUT_FREQ_1024 0b10
|
|
#define RX8010_FOUT_FREQ_32768 0b11
|
|
#define RX8010_FOUT_IRQ1 0b01
|
|
#define RX8010_FOUT_IRQ2 0b00
|
|
|
|
namespace RX8010SJ {
|
|
#define RX8010_SEC 0x10
|
|
#define RX8010_MIN 0x11
|
|
#define RX8010_HOUR 0x12
|
|
#define RX8010_WDAY 0x13
|
|
#define RX8010_MDAY 0x14
|
|
#define RX8010_MONTH 0x15
|
|
#define RX8010_YEAR 0x16
|
|
#define RX8010_RESV17 0x17
|
|
#define RX8010_ALMIN 0x18
|
|
#define RX8010_ALHOUR 0x19
|
|
#define RX8010_ALWDAY 0x1A
|
|
#define RX8010_TCOUNT0 0x1B
|
|
#define RX8010_TCOUNT1 0x1C
|
|
#define RX8010_EXT 0x1D
|
|
#define RX8010_FLAG 0x1E
|
|
#define RX8010_CTRL 0x1F
|
|
/* 0x20 to 0x2F are user registers */
|
|
#define RX8010_RESV30 0x30
|
|
#define RX8010_RESV31 0x31
|
|
#define RX8010_IRQ 0x32
|
|
|
|
/* Default values for reseting the module */
|
|
#define RX8010_ADDR17_DEF_VAL 0xD8
|
|
#define RX8010_ADDR30_DEF_VAL 0x00
|
|
#define RX8010_ADDR31_DEF_VAL 0x08
|
|
#define RX8010_ADDR31_DEF_VAL 0x08
|
|
#define RX8010_IRQ_DEF_VAL 0x04
|
|
#define RX8010_CTRL_DEF_VAL 0x04
|
|
|
|
#define RX8010_VLF_POS 1
|
|
#define RX8010_TE_POS 4
|
|
#define RX8010_TSEL0_POS 0
|
|
#define RX8010_TSEL1_POS 1
|
|
#define RX8010_TSEL2_POS 2
|
|
#define RX8010_TIE_POS 4
|
|
#define RX8010_TMPIN_POS 2
|
|
#define RX8010_TF_POS 4
|
|
#define RX8010_STOP_POS 6
|
|
#define RX8010_TSTP_POS 2
|
|
#define RX8010_AIE_POS 3
|
|
#define RX8010_WADA_POS 3
|
|
#define RX8010_AF_POS 3
|
|
#define RX8010_USEL_POS 5
|
|
#define RX8010_UF_POS 5
|
|
#define RX8010_UIE_POS 5
|
|
#define RX8010_FSEL0_POS 6
|
|
#define RX8010_FSEL1_POS 7
|
|
#define RX8010_FOPIN0_POS 0
|
|
#define RX8010_FOPIN1_POS 1
|
|
|
|
#define RX8010_AL_DISABLED 0b10000000
|
|
|
|
struct DateTime {
|
|
byte second;
|
|
byte minute;
|
|
byte hour;
|
|
byte dayOfWeek; // Has to be set
|
|
byte dayOfMonth;
|
|
byte month;
|
|
byte year; // Two digits
|
|
};
|
|
|
|
class Adapter {
|
|
public:
|
|
// Constructor/destructor
|
|
Adapter(byte i2cSlaveAddr);
|
|
virtual ~Adapter();
|
|
|
|
// Methods
|
|
bool initAdapter();
|
|
bool initModule();
|
|
void resetModule(void);
|
|
void toggleGlobalStop(bool stopEnabled);
|
|
|
|
// Calendar
|
|
DateTime readDateTime(void);
|
|
void writeDateTime(DateTime dateTime);
|
|
|
|
// Fixed cycle interrupt
|
|
void setFCTCounter(uint16_t multiplier, byte frequency);
|
|
uint16_t getFCTCounter();
|
|
void setFCTOutput(byte pin);
|
|
void enableFCT();
|
|
void disableFCT();
|
|
bool checkFCT();
|
|
|
|
// Alarm
|
|
void setAlarm(DateTime time, byte mode);
|
|
void enableAlarm();
|
|
void disableAlarm();
|
|
bool checkAlarm();
|
|
|
|
// Time Update Interrupt
|
|
void setTUIMode(byte mode);
|
|
void enableTUI();
|
|
void disableTUI();
|
|
bool checkTUI();
|
|
|
|
// Frequency output
|
|
void enableFOUT(byte frequency, byte pin);
|
|
void disableFOUT();
|
|
|
|
private:
|
|
byte i2cAddress;
|
|
|
|
byte readFromModule(byte address);
|
|
void writeToModule(byte address, byte data);
|
|
void writeFlag(byte address, byte pos, byte value);
|
|
byte getSingleBit(byte binary);
|
|
byte getValueFromBinary(byte binary, byte pos);
|
|
byte getValueFromBinary(byte binary, byte pos, byte val);
|
|
byte sumValueFromBinary(byte binary, byte length);
|
|
byte setEightyBinary(byte binary, byte val);
|
|
byte setFortyBinary(byte binary, byte val);
|
|
byte setTwentyBinary(byte binary, byte val);
|
|
byte setTenBinary(byte binary, byte val);
|
|
byte setBinary(byte binary, byte pos, byte flagVal);
|
|
};
|
|
}
|
|
|
|
#endif |