#include "util.h"
#include "ds18b20.h"
#include "modbus.h"
+#include "registers.h"
#include <libopencm3/cm3/nvic.h>
#include <libopencm3/cm3/systick.h>
/*** Modbus callbacks ***/
-enum aircon_coils {
- AIRCON_COIL_EXCHANGER_BYPASS,
- AIRCON_COIL_MAX,
-};
-
-enum aircon_input_registers {
- AIRCON_IREG_TEMP_FROM_INSIDE,
- AIRCON_IREG_TEMP_TO_INSIDE,
- AIRCON_IREG_TEMP_FROM_OUTSIDE,
- AIRCON_IREG_TEMP_TO_OUTSIDE,
- AIRCON_IREG_TEMP_MIXED,
- AIRCON_IREG_MAX,
- AIRCON_IREG_DS_ID_BASE = 0x1000,
- AIRCON_IREG_DS_ID_MAX = AIRCON_IREG_DS_ID_BASE + 3*DS_NUM_SENSORS,
-};
-
-enum aircon_holding_registers {
- AIRCON_HREG_EXCHANGER_FAN,
- AIRCON_HREG_REMOTE_CONTROL,
- AIRCON_HREG_MAX,
-};
-
bool modbus_check_discrete_input(u16 addr UNUSED)
{
return false;
return 0x8000;
if (ds_sensors[i].current_temp == DS_TEMP_UNKNOWN)
return 0x8000;
- return ds_sensors[i].current_temp & 0xffff;
+ return ((ds_sensors[i].current_temp + 5) / 10) & 0xffff;
} else if (addr >= AIRCON_IREG_DS_ID_BASE && addr < AIRCON_IREG_DS_ID_MAX) {
byte i = (addr - AIRCON_IREG_DS_ID_BASE) / 3;
byte j = (addr - AIRCON_IREG_DS_ID_BASE) % 3;
--- /dev/null
+/*
+ * Air Conditioning Controller -- MODBUS Registers
+ *
+ * (c) 2019 Martin Mareš <mj@ucw.cz>
+ */
+
+#ifndef _AIRCON_REGISTERS_H
+#define _AIRCON_REGISTERS_H
+
+enum aircon_coils {
+ AIRCON_COIL_EXCHANGER_BYPASS,
+ AIRCON_COIL_MAX,
+};
+
+enum aircon_input_registers {
+ AIRCON_IREG_TEMP_FROM_INSIDE, // s16 in 0.01 °C
+ AIRCON_IREG_TEMP_TO_INSIDE,
+ AIRCON_IREG_TEMP_FROM_OUTSIDE,
+ AIRCON_IREG_TEMP_TO_OUTSIDE,
+ AIRCON_IREG_TEMP_MIXED,
+ AIRCON_IREG_MAX,
+ AIRCON_IREG_DS_ID_BASE = 0x1000,
+ AIRCON_IREG_DS_ID_MAX = AIRCON_IREG_DS_ID_BASE + 3*DS_NUM_SENSORS,
+};
+
+enum aircon_holding_registers {
+ AIRCON_HREG_EXCHANGER_FAN,
+ AIRCON_HREG_REMOTE_CONTROL,
+ AIRCON_HREG_MAX,
+};
+
+#endif