AIRCON_IREG_TEMP_MIXED,
AIRCON_IREG_MAX,
AIRCON_IREG_DS_ID_BASE = 0x1000,
- AIRCON_IREG_DS_ID_MAX = AIRCON_IREG_DS_ID_BASE + 4*DS_NUM_SENSORS,
+ AIRCON_IREG_DS_ID_MAX = AIRCON_IREG_DS_ID_BASE + 3*DS_NUM_SENSORS,
};
enum aircon_holding_registers {
bool modbus_check_input_register(u16 addr)
{
- return (addr < AIRCON_IREG_MAX || addr >= AIRCON_IREG_DS_ID_MAX && addr < AIRCON_IREG_DS_ID_MAX);
+ return (addr < AIRCON_IREG_MAX || addr >= AIRCON_IREG_DS_ID_BASE && addr < AIRCON_IREG_DS_ID_MAX);
}
static const byte temp_sensor_addrs[][8] = {
{
if (addr <= AIRCON_IREG_TEMP_MIXED) {
byte i = 0;
- while (i < DS_NUM_SENSORS && memcmp(ds_sensors[i].address, temp_sensor_addrs[addr], 8))
+ while (i < DS_NUM_SENSORS && memcmp(ds_sensors[i].address + 1, temp_sensor_addrs[addr], 6))
i++;
if (i >= DS_NUM_SENSORS)
return 0x8000;
return 0x8000;
return ds_sensors[i].current_temp & 0xffff;
} else if (addr >= AIRCON_IREG_DS_ID_BASE && addr < AIRCON_IREG_DS_ID_MAX) {
- byte i = (addr - AIRCON_IREG_DS_ID_BASE) / 4;
- byte j = (addr - AIRCON_IREG_DS_ID_BASE) % 4;
- return get_u16_be(ds_sensors[i].address + 2*j);
+ byte i = (addr - AIRCON_IREG_DS_ID_BASE) / 3;
+ byte j = (addr - AIRCON_IREG_DS_ID_BASE) % 3;
+ return get_u16_be(ds_sensors[i].address + 2*j + 1);
} else {
return 0;
}