mirror of
https://github.com/lumapu/ahoy.git
synced 2025-05-11 07:56:39 +02:00
Merge branch 'main' of https://github.com/grindylow/ahoy
This commit is contained in:
commit
b0c74c4b6a
9 changed files with 248 additions and 118 deletions
|
@ -22,6 +22,10 @@
|
|||
#define RF_CHANNELS 5
|
||||
#define RF_LOOP_CNT 300
|
||||
|
||||
#define TX_REQ_INFO 0X15
|
||||
#define TX_REQ_DEVCONTROL 0x51
|
||||
#define ALL_FRAMES 0x80
|
||||
#define SINGLE_FRAME 0x81
|
||||
|
||||
const char* const rf24AmpPower[] = {"MIN", "LOW", "HIGH", "MAX"};
|
||||
|
||||
|
@ -158,27 +162,26 @@ class HmRadio {
|
|||
return mRfChLst[mTxChIdx];
|
||||
}
|
||||
|
||||
void sendControlPacket(uint64_t invId, uint8_t cmd, uint16_t data) {
|
||||
void sendControlPacket(uint64_t invId, uint8_t cmd, uint16_t *data) {
|
||||
DPRINTLN(DBG_VERBOSE, F("hmRadio.h:sendControlPacket"));
|
||||
// sendCmdPacket(invId, 0x51, 0x80, false); // 0x80 implementation as original DTU code
|
||||
sendCmdPacket(invId, 0x51, 0x81, false);
|
||||
sendCmdPacket(invId, TX_REQ_DEVCONTROL, ALL_FRAMES, false); // 0x80 implementation as original DTU code
|
||||
int cnt = 0;
|
||||
mTxBuf[10] = cmd; // cmd --> 0x0b => Type_ActivePowerContr, 0 on, 1 off, 2 restart, 12 reactive power, 13 power factor
|
||||
mTxBuf[10 + (++cnt)] = 0x00;
|
||||
if (cmd == 11){
|
||||
if (cmd >= ActivePowerContr && cmd <= PFSet){
|
||||
// 4 bytes control data
|
||||
// Power Limit fix point 10 eg. 30 W --> 0d300 = 0x012c
|
||||
// -1 = 0xffff --> no limit
|
||||
if (data == 0xffff){
|
||||
data &= 0xffff; // ToDo: unlimit value is needed and is inverter specific! --> get it via RF from inverter or via user interface
|
||||
if (data[0] == 0xffff){
|
||||
data[0] &= 0xffff; // ToDo: unlimit value is needed and is inverter specific! --> get it via RF from inverter or via user interface
|
||||
} else {
|
||||
data*= 10;
|
||||
data[0] *= 10; // will overwrite the data bc it is a pointer
|
||||
}
|
||||
mTxBuf[10 + (++cnt)] = (data >> 8) & 0xff; // 0x01
|
||||
mTxBuf[10 + (++cnt)] = (data ) & 0xff; // 0x2c
|
||||
// mTxBuf[10 + (++cnt)] = 0x00; // not persistent
|
||||
mTxBuf[10 + (++cnt)] = 0x01; // persistent
|
||||
mTxBuf[10 + (++cnt)] = 0x00;
|
||||
mTxBuf[10 + (++cnt)] = (data[0] >> 8) & 0xff; // power limit
|
||||
mTxBuf[10 + (++cnt)] = (data[0] ) & 0xff; // power limit
|
||||
mTxBuf[10 + (++cnt)] = (data[1] >> 8) & 0xff; // setting for persistens handling
|
||||
mTxBuf[10 + (++cnt)] = (data[1] ) & 0xff; // setting for persistens handling
|
||||
data[0] /= 10; // UGLY!
|
||||
}
|
||||
// crc control data
|
||||
uint16_t crc = crc16(&mTxBuf[10], cnt+1);
|
||||
|
@ -191,14 +194,20 @@ class HmRadio {
|
|||
sendPacket(invId, mTxBuf, 10 + (++cnt), true);
|
||||
}
|
||||
|
||||
void sendTimePacket(uint64_t invId, uint32_t ts) {
|
||||
void sendTimePacket(uint64_t invId, uint8_t cmd, uint32_t ts, uint16_t alarmMesId) {
|
||||
//DPRINTLN(DBG_VERBOSE, F("hmRadio.h:sendTimePacket"));
|
||||
sendCmdPacket(invId, 0x15, 0x80, false);
|
||||
mTxBuf[10] = 0x0b; // cid
|
||||
sendCmdPacket(invId, TX_REQ_INFO, ALL_FRAMES, false);
|
||||
mTxBuf[10] = cmd; // cid
|
||||
mTxBuf[11] = 0x00;
|
||||
CP_U32_LittleEndian(&mTxBuf[12], ts);
|
||||
mTxBuf[19] = 0x05;
|
||||
|
||||
if (cmd == RealTimeRunData_Debug || cmd == AlarmData || cmd == AlarmUpdate ){
|
||||
mTxBuf[18] = (alarmMesId >> 8) & 0xff;
|
||||
mTxBuf[19] = (alarmMesId ) & 0xff;
|
||||
//mTxBuf[19] = 0x05; // ToDo: Shall be the last received Alarm Index Number
|
||||
} else {
|
||||
mTxBuf[18] = 0x00;
|
||||
mTxBuf[19] = 0x00;
|
||||
}
|
||||
uint16_t crc = crc16(&mTxBuf[10], 14);
|
||||
mTxBuf[24] = (crc >> 8) & 0xff;
|
||||
mTxBuf[25] = (crc ) & 0xff;
|
||||
|
@ -341,6 +350,8 @@ class HmRadio {
|
|||
BUFFER *mBufCtrl;
|
||||
uint8_t mTxBuf[MAX_RF_PAYLOAD_SIZE];
|
||||
|
||||
DevControlCmdType DevControlCmd;
|
||||
|
||||
volatile bool mIrqRcvd;
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue