1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package net.sf.openv4j;
26
27 import java.io.Serializable;
28
29 import java.util.Arrays;
30 import static net.sf.openv4j.DataType.*;
31 import static net.sf.openv4j.Group.*;
32 import static net.sf.openv4j.Property.*;
33 import static net.sf.openv4j.PropertyType.*;
34 import net.sf.openv4j.protocolhandlers.DataContainer;
35 import net.sf.openv4j.protocolhandlers.MemoryImage;
36
37
38
39
40 public enum DataPoint implements Serializable {
41
42 COMMON_CONFIG_DEVICE_TYPE_ID(0x00F8, COMMON, CONFIG, DEVICE_TYPE_ID, SHORT_HEX, AccessType.RO),
43 COMMON_TEMP_ACTUAL_OUTSIDE(0x0800, COMMON, TEMP_ACTUAL, OUTSIDE, SHORT, AccessType.RO, 0.1),
44 BOILER_TEMP_ACTUAL_BOILER_WATER_AT_0X0802(0x0802, Group.BOILER, TEMP_ACTUAL, Property.BOILER_WATER, SHORT, AccessType.RO, 0.1),
45 DHW_TEMP_ACTUAL_DHW_CYLINDER(0x0804, Group.DHW, TEMP_ACTUAL, DHW_CYLINDER, SHORT, AccessType.RO, 0.1),
46 DHW_TEMP_ACTUAL_DHW_CYLINDER_2(0x0806, Group.DHW, TEMP_ACTUAL, DHW_CYLINDER_2, SHORT, AccessType.RO, 0.1),
47 BOILER_TEMP_ACTUAL_EXHAUST(0x0808, Group.BOILER, TEMP_ACTUAL, EXHAUST, SHORT, AccessType.RO, 0.1),
48 BOILER_TEMP_ACTUAL_HEATING_RETURN(0x080a, Group.BOILER, TEMP_ACTUAL, HEATING_RETURN, SHORT, AccessType.RO, 0.1),
49 BOILER_TEMP_ACTUAL_HEATING_SUPPLY(0x080c, Group.BOILER, TEMP_ACTUAL, HEATING_SUPPLY, SHORT, AccessType.RO, 0.1),
50 COMMON_TEMP_LOW_PASS_OUTSIDE(0x080e, Group.COMMON, TEMP_LOW_PASS, OUTSIDE, SHORT, AccessType.RO, 0.1),
51 BOILER_TEMP_MAX_EXHAUST(0x089f, Group.BOILER, TEMP_MAX, EXHAUST, SHORT, AccessType.RO, 0.1),
52 BOILER_TEMP_LOW_PASS_BOILER_WATER(0x0810, Group.BOILER, TEMP_LOW_PASS, Property.BOILER_WATER, SHORT, AccessType.RO, 0.1),
53 DHW_TEMP_LOW_PASS_DHW_CYLINDER(0x0812, Group.DHW, TEMP_LOW_PASS, DHW_CYLINDER, SHORT, AccessType.RO, 0.1),
54 DHW_TEMP_LOW_PASS_DHW_CYLINDER_2(0x0814, Group.DHW, TEMP_LOW_PASS, DHW_CYLINDER_2, SHORT, AccessType.RO, 0.1),
55 BOILER_TEMP_LOW_PASS_EXHAUST(0x0816, Group.BOILER, TEMP_LOW_PASS, EXHAUST, SHORT, AccessType.RO, 0.1),
56 BOILER_TEMP_LOW_PASS_HEATING_RETURN(0x0818, Group.BOILER, TEMP_LOW_PASS, HEATING_RETURN, SHORT, AccessType.RO, 0.1),
57 BOILER_STATE_BURNER_STAGE_1(0x0842, Group.BOILER, STATE, BURNER_STAGE_1, BOOL, AccessType.RO),
58 DHW_STATE_DHW_PUMP(0x0845, Group.DHW, STATE, DHW_PUMP, BOOL, AccessType.RO),
59 DHW_STATE_DHW_RECIRC_PUMP(0x0846, Group.DHW, STATE, DHW_RECIRC_PUMP, BOOL, AccessType.RO),
60 BOILER_STATE_BURNER_STAGE_2(0x0849, Group.BOILER, STATE, BURNER_STAGE_2, BOOL, AccessType.RO),
61 BOILER_TEMP_LOW_PASS_HEATING_SUPPLY(0x081a, Group.BOILER, TEMP_LOW_PASS, HEATING_SUPPLY, SHORT, AccessType.RO, 0.1),
62 BOILER_ERROR_STATE_BURNER_STAGE_1(0x0883, Group.BOILER, ERROR_STATE, BURNER_STAGE_1, BOOL, AccessType.RO),
63 BOILER_OPERATING_TIME_S_BURNER_STAGE_1(0x0886, Group.BOILER, OPERATING_TIME_S, BURNER_STAGE_1, INTEGER, AccessType.RO),
64 BOILER_CYCLES_BURNER_STAGE_2(0x0887, Group.BOILER, CYCLES, BURNER_STAGE_2, INTEGER, AccessType.RO),
65 BOILER_CYCLES_BURNER_STAGE_1(0x088a, Group.BOILER, CYCLES, BURNER_STAGE_1, INTEGER, AccessType.RO),
66 COMMON_TIME_STAMP_DEVICE(0x088e, COMMON, TIME_STAMP, DEVICE, TIME_STAMP_8, AccessType.RW),
67 BOILER_TEMP_ACTUAL_UNKNOWN_AT_0X0896(0x0896, Group.BOILER, TEMP_ACTUAL, UNKNOWN, SHORT, AccessType.RO, 0.1),
68 BOILER_TEMP_ACTUAL_UNKNOWN_AT_0X0898(0x0898, Group.BOILER, TEMP_ACTUAL, UNKNOWN, SHORT, AccessType.RO, 0.1),
69 BOILER_TEMP_ACTUAL_UNKNOWN_AT_0X089A(0x089a, Group.BOILER, TEMP_ACTUAL, UNKNOWN, SHORT, AccessType.RO, 0.1),
70 BOILER_OPERATING_TIME_S_BURNER_STAGE_2(0x08a3, Group.BOILER, OPERATING_TIME_S, BURNER_STAGE_2, INTEGER, AccessType.RO),
71 BOILER_OPERATING_TIME_S_BURNER_STAGE_1_AT_0X08A7(0x08a7, Group.BOILER, OPERATING_TIME_S, BURNER_STAGE_1, INTEGER, AccessType.RO),
72 BOILER_OPERATING_TIME_S_BURNER_STAGE_2_AT_0X08AB(0x08ab, Group.BOILER, OPERATING_TIME_S, BURNER_STAGE_2, INTEGER, AccessType.RO),
73 BOILER_TEMP_ACTUAL_HEATING_SUPPLY_AT_0X0950(0x0950, Group.BOILER, TEMP_ACTUAL, HEATING_SUPPLY, SHORT, AccessType.RO, 0.1),
74 A1M1_CYCLES_HEATING_MONDAY(0x2000, Group.A1M1, CYCLES_HEATING, MONDAY, CYCLE_TIMES, AccessType.RW),
75 A1M1_CYCLES_HEATING_TUESDAY(0x2008, Group.A1M1, CYCLES_HEATING, TUESDAY, CYCLE_TIMES, AccessType.RW),
76 A1M1_CYCLES_HEATING_WEDNSDAY(0x2010, Group.A1M1, CYCLES_HEATING, WEDNSDAY, CYCLE_TIMES, AccessType.RW),
77 A1M1_CYCLES_HEATING_THURSDAY(0x2018, Group.A1M1, CYCLES_HEATING, THURSDAY, CYCLE_TIMES, AccessType.RW),
78 A1M1_CYCLES_HEATING_FRIDAY(0x2020, Group.A1M1, CYCLES_HEATING, FRIDAY, CYCLE_TIMES, AccessType.RW),
79 A1M1_CYCLES_HEATING_SATURDAY(0x2028, Group.A1M1, CYCLES_HEATING, SATURDAY, CYCLE_TIMES, AccessType.RW),
80 A1M1_CYCLES_HEATING_SUNDAY(0x2030, Group.A1M1, CYCLES_HEATING, SUNDAY, CYCLE_TIMES, AccessType.RW),
81 DHW_A1M1_CYCLES_HEATING_MONDAY(0x2100, Group.DHW_A1M1, CYCLES_HEATING, MONDAY, CYCLE_TIMES, AccessType.RW),
82 DHW_A1M1_CYCLES_HEATING_TUESDAY(0x2108, Group.DHW_A1M1, CYCLES_HEATING, TUESDAY, CYCLE_TIMES, AccessType.RW),
83 DHW_A1M1_CYCLES_HEATING_WEDNSDAY(0x2110, Group.DHW_A1M1, CYCLES_HEATING, WEDNSDAY, CYCLE_TIMES, AccessType.RW),
84 DHW_A1M1_CYCLES_HEATING_THURSDAY(0x2118, Group.DHW_A1M1, CYCLES_HEATING, THURSDAY, CYCLE_TIMES, AccessType.RW),
85 DHW_A1M1_CYCLES_HEATING_FRIDAY(0x2120, Group.DHW_A1M1, CYCLES_HEATING, FRIDAY, CYCLE_TIMES, AccessType.RW),
86 DHW_A1M1_CYCLES_HEATING_SATURDAY(0x2128, Group.DHW_A1M1, CYCLES_HEATING, SATURDAY, CYCLE_TIMES, AccessType.RW),
87 DHW_A1M1_CYCLES_HEATING_SUNDAY(0x2130, Group.DHW_A1M1, CYCLES_HEATING, SUNDAY, CYCLE_TIMES, AccessType.RW),
88 DHW_A1M1_CYCLES_RECIRC_MONDAY(0x2200, Group.DHW_A1M1, CYCLES_RECIRC, MONDAY, CYCLE_TIMES, AccessType.RW),
89 DHW_A1M1_CYCLES_RECIRC_TUESDAY(0x2208, Group.DHW_A1M1, CYCLES_RECIRC, TUESDAY, CYCLE_TIMES, AccessType.RW),
90 DHW_A1M1_CYCLES_RECIRC_WEDNSDAY(0x2210, Group.DHW_A1M1, CYCLES_RECIRC, WEDNSDAY, CYCLE_TIMES, AccessType.RW),
91 DHW_A1M1_CYCLES_RECIRC_THURSDAY(0x2218, Group.DHW_A1M1, CYCLES_RECIRC, THURSDAY, CYCLE_TIMES, AccessType.RW),
92 DHW_A1M1_CYCLES_RECIRC_FRIDAY(0x2220, Group.DHW_A1M1, CYCLES_RECIRC, FRIDAY, CYCLE_TIMES, AccessType.RW),
93 DHW_A1M1_CYCLES_RECIRC_SATURDAY(0x2228, Group.DHW_A1M1, CYCLES_RECIRC, SATURDAY, CYCLE_TIMES, AccessType.RW),
94 DHW_A1M1_CYCLES_RECIRC_SUNDAY(0x2230, Group.DHW_A1M1, CYCLES_RECIRC, SUNDAY, CYCLE_TIMES, AccessType.RW),
95 A1M1_CONFIG_OPERATING_TYPE(0x2301, Group.A1M1, CONFIG, OPERATING_TYPE, BYTE, AccessType.RW),
96 A1M1_STATE_SAVE_MODE(0x2302, Group.A1M1, STATE, SAVE_MODE, BOOL, AccessType.RO),
97 A1M1_STATE_PARTY_MODE(0x2303, Group.A1M1, STATE, PARTY_MODE, BOOL, AccessType.RO),
98 A1M1_CONFIG_SHIFT(0x2304, Group.A1M1, CONFIG, SHIFT, BYTE, AccessType.RW),
99 A1M1_CONFIG_SLOPE(0x2305, Group.A1M1, CONFIG, SLOPE, BYTE, AccessType.RW, 0.1),
100 A1M1_TEMP_NOMINAL_ROOM_NORMAL(0x2306, Group.A1M1, TEMP_NOMINAL, ROOM_NORMAL, BYTE, AccessType.RW),
101 A1M1_TEMP_NOMINAL_ROOM_REDUCED(0x2307, Group.A1M1, TEMP_NOMINAL, ROOM_REDUCED, BYTE, AccessType.RW),
102 A1M1_TEMP_NOMINAL_ROOM_PARTY(0x2308, Group.A1M1, TEMP_NOMINAL, ROOM_PARTY, BYTE, AccessType.RW),
103 A1M1_CONFIG_HOLIDAY_PROGRAMME(0x2309, Group.A1M1, CONFIG, Property.HOLIDAY_PROGRAMME, DataType.HOLIDAY, AccessType.RW),
104 A1M1_STATE_UNKNOWN_AT_0X2500(0x2500, Group.A1M1, STATE, UNKNOWN, BYTE, AccessType.RO),
105 A1M1_STATE_UNKNOWN_AT_0X2501(0x2501, Group.A1M1, STATE, UNKNOWN, BYTE, AccessType.RO),
106 A1M1_CONFIG_HEATUP_TIME(0x2502, Group.A1M1, CONFIG, HEATUP_TIME, INTEGER, AccessType.RO, 0.1),
107 A1M1_STATE_FROST(0x2506, Group.A1M1, STATE, FROST, BOOL, AccessType.RO),
108 A1M1_STATE_UNKNOWN_AT_0X2507(0x2507, Group.A1M1, STATE, UNKNOWN, BYTE, AccessType.RO),
109 A1M1_STATE_DHW_HEATUP(0x2508, Group.A1M1, STATE, DHW_HEATUP, BOOL, AccessType.RO),
110 A1M1_STATE_UNKNOWN_AT_0X2509(0x2509, Group.A1M1, STATE, UNKNOWN, BYTE, AccessType.RO),
111 A1M1_TEMP_NOMINAL_HEATING_SUPPLY(0x2511, Group.A1M1, TEMP_NOMINAL, Property.HEATING_SUPPLY, SHORT, AccessType.RO, 0.1),
112
113 A1M1_STATE_UNKNOWN_AT_0X2535(0x2535, Group.A1M1, STATE, UNKNOWN, BYTE, AccessType.RO), A1M1_STATE_UNKNOWN_AT_0X2541(0x2541, Group.A1M1, STATE, UNKNOWN, BYTE, AccessType.RO),
114 A1M1_STATE_PUMP(0x250a, Group.A1M1, STATE, PUMP, BOOL, AccessType.RO),
115 A1M1_TEMP_NOMINAL_ROOM_CURRENT(0x250c, Group.A1M1, TEMP_NOMINAL, Property.ROOM_CURRENT, SHORT, AccessType.RO, 0.1),
116 A1M1_TEMP_ACTUAL_UNKNOWN_AT_0X250E(0x250e, Group.A1M1, TEMP_ACTUAL, Property.UNKNOWN, SHORT, AccessType.RO, 0.1),
117 A1M1_POSITION_IN_PERCENT_MIXER(0x254c, Group.A1M1, POSITION_IN_PERCENT, MIXER, BYTE, AccessType.RO, 0.5),
118 A1M1_CONFIG_C2_A0(0x27a0, Group.A1M1, CONFIG, C2_A0, BYTE, AccessType.RW),
119 A1M1_CONFIG_C2_A2(0x27a2, Group.A1M1, CONFIG, C2_A2, BYTE, AccessType.RW),
120 A1M1_CONFIG_C2_A3(0x27a3, Group.A1M1, CONFIG, C2_A3, BYTE, AccessType.RW),
121 A1M1_CONFIG_C2_A4(0x27a4, Group.A1M1, CONFIG, C2_A4, BYTE, AccessType.RW),
122 A1M1_CONFIG_C2_A5(0x27a5, Group.A1M1, CONFIG, C2_A5, BYTE, AccessType.RW),
123 A1M1_CONFIG_C2_A6(0x27a6, Group.A1M1, CONFIG, C2_A6, BYTE, AccessType.RW),
124 A1M1_CONFIG_C2_A7(0x27a7, Group.A1M1, CONFIG, C2_A7, BYTE, AccessType.RW),
125 A1M1_CONFIG_C2_A9(0x27a9, Group.A1M1, CONFIG, C2_A9, BYTE, AccessType.RW),
126 A1M1_CONFIG_C2_B0(0x27b0, Group.A1M1, CONFIG, C2_B0, BYTE, AccessType.RW),
127 A1M1_CONFIG_C2_B1(0x27b1, Group.A1M1, CONFIG, C2_B1, BYTE, AccessType.RW),
128 A1M1_CONFIG_C2_B2(0x27b2, Group.A1M1, CONFIG, C2_B2, BYTE, AccessType.RW),
129 A1M1_CONFIG_C2_B3(0x27b3, Group.A1M1, CONFIG, C2_B3, BYTE, AccessType.RW),
130 A1M1_CONFIG_C2_B5(0x27b5, Group.A1M1, CONFIG, C2_B5, BYTE, AccessType.RW),
131 A1M1_CONFIG_C2_B7(0x27b7, Group.A1M1, CONFIG, C2_B7, BYTE, AccessType.RW),
132 A1M1_CONFIG_C2_B8(0x27b8, Group.A1M1, CONFIG, C2_B8, BYTE, AccessType.RW),
133 A1M1_CONFIG_C2_B9(0x27b9, Group.A1M1, CONFIG, C2_B9, BYTE, AccessType.RW),
134 A1M1_CONFIG_C2_C0(0x27c0, Group.A1M1, CONFIG, C2_C0, BYTE, AccessType.RW),
135 A1M1_CONFIG_C2_C1(0x27c1, Group.A1M1, CONFIG, C2_C1, BYTE, AccessType.RW),
136 A1M1_CONFIG_C2_C2(0x27c2, Group.A1M1, CONFIG, C2_C2, BYTE, AccessType.RW),
137 A1M1_CONFIG_C2_C4(0x27c4, Group.A1M1, CONFIG, C2_C4, BYTE, AccessType.RW),
138 A1M1_CONFIG_C2_C5(0x27c5, Group.A1M1, CONFIG, C2_C5, BYTE, AccessType.RW),
139 A1M1_CONFIG_C2_C6(0x27c6, Group.A1M1, CONFIG, C2_C6, BYTE, AccessType.RW),
140 A1M1_CONFIG_C2_C7(0x27c7, Group.A1M1, CONFIG, C2_C7, BYTE, AccessType.RW),
141 A1M1_CONFIG_C2_C8(0x27c8, Group.A1M1, CONFIG, C2_C8, BYTE, AccessType.RW),
142 A1M1_CONFIG_C2_C9(0x27c9, Group.A1M1, CONFIG, C2_C9, BYTE, AccessType.RW),
143 A1M1_CONFIG_C2_E1(0x27e1, Group.A1M1, CONFIG, C2_E1, BYTE, AccessType.RW),
144 A1M1_CONFIG_C2_E2(0x27e2, Group.A1M1, CONFIG, C2_E2, BYTE, AccessType.RW),
145 A1M1_CONFIG_C2_E5(0x27e5, Group.A1M1, CONFIG, C2_E5, BYTE, AccessType.RW),
146 A1M1_CONFIG_C2_E6(0x27e6, Group.A1M1, CONFIG, C2_E6, BYTE, AccessType.RW),
147 A1M1_CONFIG_C2_E7(0x27e7, Group.A1M1, CONFIG, C2_E7, BYTE, AccessType.RW),
148 A1M1_CONFIG_C2_E8(0x27e8, Group.A1M1, CONFIG, C2_E8, BYTE, AccessType.RW),
149 A1M1_CONFIG_C2_E9(0x27e9, Group.A1M1, CONFIG, C2_E9, BYTE, AccessType.RW),
150 A1M1_CONFIG_C2_F0(0x27f0, Group.A1M1, CONFIG, C2_F0, BYTE, AccessType.RW),
151 A1M1_CONFIG_C2_F1(0x27f1, Group.A1M1, CONFIG, C2_F1, BYTE, AccessType.RW),
152 A1M1_CONFIG_C2_F2(0x27f2, Group.A1M1, CONFIG, C2_F2, BYTE, AccessType.RW),
153 A1M1_TEMP_ACTUAL_HEATING_SUPPLY(0x2900, Group.A1M1, TEMP_ACTUAL, HEATING_SUPPLY, SHORT, AccessType.RO, 0.1),
154 A1M1_TEMP_ACTUAL_HEATING_RETURN(0x2902, Group.A1M1, TEMP_ACTUAL, HEATING_RETURN, SHORT, AccessType.RO, 0.1),
155 A1M1_STATE_PUMP_AT_0X2906(0x2906, Group.A1M1, STATE, PUMP, BOOL, AccessType.RO),
156
157 M2_CYCLES_HEATING_MONDAY(0x3000, Group.M2, CYCLES_HEATING, MONDAY, CYCLE_TIMES, AccessType.RW), M2_CYCLES_HEATING_TUESDAY(0x3008, Group.M2, CYCLES_HEATING, TUESDAY, CYCLE_TIMES, AccessType.RW),
158 M2_CYCLES_HEATING_WEDNSDAY(0x3010, Group.M2, CYCLES_HEATING, WEDNSDAY, CYCLE_TIMES, AccessType.RW),
159 M2_CYCLES_HEATING_THURSDAY(0x3018, Group.M2, CYCLES_HEATING, THURSDAY, CYCLE_TIMES, AccessType.RW),
160 M2_CYCLES_HEATING_FRIDAY(0x3020, Group.M2, CYCLES_HEATING, FRIDAY, CYCLE_TIMES, AccessType.RW),
161 M2_CYCLES_HEATING_SATURDAY(0x3028, Group.M2, CYCLES_HEATING, SATURDAY, CYCLE_TIMES, AccessType.RW),
162 M2_CYCLES_HEATING_SUNDAY(0x3030, Group.M2, CYCLES_HEATING, SUNDAY, CYCLE_TIMES, AccessType.RW),
163 DHW_M2_CYCLES_HEATING_TUESDAY(0x3108, Group.DHW_M2, CYCLES_HEATING, TUESDAY, CYCLE_TIMES, AccessType.RW),
164 DHW_M2_CYCLES_HEATING_WEDNSDAY(0x3110, Group.DHW_M2, CYCLES_HEATING, WEDNSDAY, CYCLE_TIMES, AccessType.RW),
165 DHW_M2_CYCLES_HEATING_THURSDAY(0x3118, Group.DHW_M2, CYCLES_HEATING, THURSDAY, CYCLE_TIMES, AccessType.RW),
166 DHW_M2_CYCLES_HEATING_FRIDAY(0x3120, Group.DHW_M2, CYCLES_HEATING, FRIDAY, CYCLE_TIMES, AccessType.RW),
167 DHW_M2_CYCLES_HEATING_SATURDAY(0x3128, Group.DHW_M2, CYCLES_HEATING, SATURDAY, CYCLE_TIMES, AccessType.RW),
168 DHW_M2_CYCLES_HEATING_SUNDAY(0x3130, Group.DHW_M2, CYCLES_HEATING, SUNDAY, CYCLE_TIMES, AccessType.RW),
169 DHW_M2_CYCLES_RECIRC_MONDAY(0x3200, Group.DHW_M2, CYCLES_RECIRC, MONDAY, CYCLE_TIMES, AccessType.RW),
170 DHW_M2_CYCLES_RECIRC_TUESDAY(0x3208, Group.DHW_M2, CYCLES_RECIRC, TUESDAY, CYCLE_TIMES, AccessType.RW),
171 DHW_M2_CYCLES_RECIRC_WEDNSDAY(0x3210, Group.DHW_M2, CYCLES_RECIRC, WEDNSDAY, CYCLE_TIMES, AccessType.RW),
172 DHW_M2_CYCLES_RECIRC_THURSDAY(0x3218, Group.DHW_M2, CYCLES_RECIRC, THURSDAY, CYCLE_TIMES, AccessType.RW),
173 DHW_M2_CYCLES_RECIRC_FRIDAY(0x3220, Group.DHW_M2, CYCLES_RECIRC, FRIDAY, CYCLE_TIMES, AccessType.RW),
174 DHW_M2_CYCLES_RECIRC_SATURDAY(0x3228, Group.DHW_M2, CYCLES_RECIRC, SATURDAY, CYCLE_TIMES, AccessType.RW),
175 DHW_M2_CYCLES_RECIRC_SUNDAY(0x3230, Group.DHW_M2, CYCLES_RECIRC, SUNDAY, CYCLE_TIMES, AccessType.RW),
176 M2_CONFIG_OPERATING_TYPE(0x3301, Group.M2, CONFIG, OPERATING_TYPE, BYTE, AccessType.RW),
177 M2_STATE_SAVE_MODE(0x3302, Group.M2, STATE, SAVE_MODE, BOOL, AccessType.RO),
178 M2_STATE_PARTY_MODE(0x3303, Group.M2, STATE, PARTY_MODE, BOOL, AccessType.RO),
179 M2_CONFIG_SHIFT(0x3304, Group.M2, CONFIG, SHIFT, BYTE, AccessType.RW),
180 M2_CONFIG_SLOPE(0x3305, Group.M2, CONFIG, SLOPE, BYTE, AccessType.RW, 0.1),
181 M2_TEMP_NOMINAL_ROOM_NORMAL(0x3306, Group.M2, TEMP_NOMINAL, ROOM_NORMAL, BYTE, AccessType.RW),
182 M2_TEMP_NOMINAL_ROOM_REDUCED(0x3307, Group.M2, TEMP_NOMINAL, ROOM_REDUCED, BYTE, AccessType.RW),
183 M2_TEMP_NOMINAL_ROOM_PARTY(0x3308, Group.M2, TEMP_NOMINAL, ROOM_PARTY, BYTE, AccessType.RW),
184 M2_CONFIG_HOLIDAY_PROGRAMME(0x3309, Group.M2, CONFIG, Property.HOLIDAY_PROGRAMME, DataType.HOLIDAY, AccessType.RW),
185 M2_STATE_UNKNOWN_AT_0X3500(0x3500, Group.M2, STATE, UNKNOWN, BYTE, AccessType.RO),
186 M2_STATE_UNKNOWN_AT_0X3501(0x3501, Group.M2, STATE, UNKNOWN, BYTE, AccessType.RO),
187 M2_CONFIG_HEATUP_TIME(0x3502, Group.M2, CONFIG, HEATUP_TIME, INTEGER, AccessType.RO, 0.1),
188 M2_STATE_FROST(0x3506, Group.M2, STATE, FROST, BOOL, AccessType.RO),
189 M2_STATE_UNKNOWN_AT_0X3507(0x3507, Group.M2, STATE, UNKNOWN, BYTE, AccessType.RO),
190 M2_STATE_DHW_HEATUP(0x3508, Group.M2, STATE, DHW_HEATUP, BOOL, AccessType.RO),
191 M2_STATE_UNKNOWN_AT_0X3509(0x3509, Group.M2, STATE, UNKNOWN, BYTE, AccessType.RO),
192 M2_TEMP_NOMINAL_HEATING_SUPPLY(0x3511, Group.M2, TEMP_NOMINAL, Property.HEATING_SUPPLY, SHORT, AccessType.RO, 0.1),
193
194 M2_STATE_UNKNOWN_AT_0X3535(0x3535, Group.M2, STATE, UNKNOWN, BYTE, AccessType.RO), M2_STATE_UNKNOWN_AT_0X3541(0x3541, Group.M2, STATE, UNKNOWN, BYTE, AccessType.RO),
195 M2_STATE_PUMP(0x350a, Group.M2, STATE, PUMP, BOOL, AccessType.RO),
196 M2_TEMP_NOMINAL_ROOM_CURRENT(0x350c, Group.M2, TEMP_NOMINAL, Property.ROOM_CURRENT, SHORT, AccessType.RO, 0.1),
197 M2_TEMP_ACTUAL_UNKNOWN_AT_0X350E(0x350e, Group.M2, TEMP_ACTUAL, Property.UNKNOWN, SHORT, AccessType.RO, 0.1),
198 M2_POSITION_IN_PERCENT_MIXER(0x354c, Group.M2, POSITION_IN_PERCENT, MIXER, BYTE, AccessType.RO, 0.5),
199 M2_CONFIG_C2_A0(0x37a0, Group.M2, CONFIG, C2_A0, BYTE, AccessType.RW),
200 M2_CONFIG_C2_A2(0x37a2, Group.M2, CONFIG, C2_A2, BYTE, AccessType.RW),
201 M2_CONFIG_C2_A3(0x37a3, Group.M2, CONFIG, C2_A3, BYTE, AccessType.RW),
202 M2_CONFIG_C2_A4(0x37a4, Group.M2, CONFIG, C2_A4, BYTE, AccessType.RW),
203 M2_CONFIG_C2_A5(0x37a5, Group.M2, CONFIG, C2_A5, BYTE, AccessType.RW),
204 M2_CONFIG_C2_A6(0x37a6, Group.M2, CONFIG, C2_A6, BYTE, AccessType.RW),
205 M2_CONFIG_C2_A7(0x37a7, Group.M2, CONFIG, C2_A7, BYTE, AccessType.RW),
206 M2_CONFIG_C2_A9(0x37a9, Group.M2, CONFIG, C2_A9, BYTE, AccessType.RW),
207 M2_CONFIG_C2_B0(0x37b0, Group.M2, CONFIG, C2_B0, BYTE, AccessType.RW),
208 M2_CONFIG_C2_B1(0x37b1, Group.M2, CONFIG, C2_B1, BYTE, AccessType.RW),
209 M2_CONFIG_C2_B2(0x37b2, Group.M2, CONFIG, C2_B2, BYTE, AccessType.RW),
210 M2_CONFIG_C2_B3(0x37b3, Group.M2, CONFIG, C2_B3, BYTE, AccessType.RW),
211 M2_CONFIG_C2_B5(0x37b5, Group.M2, CONFIG, C2_B5, BYTE, AccessType.RW),
212 M2_CONFIG_C2_B7(0x37b7, Group.M2, CONFIG, C2_B7, BYTE, AccessType.RW),
213 M2_CONFIG_C2_B8(0x37b8, Group.M2, CONFIG, C2_B8, BYTE, AccessType.RW),
214 M2_CONFIG_C2_B9(0x37b9, Group.M2, CONFIG, C2_B9, BYTE, AccessType.RW),
215 M2_CONFIG_C2_C0(0x37c0, Group.M2, CONFIG, C2_C0, BYTE, AccessType.RW),
216 M2_CONFIG_C2_C1(0x37c1, Group.M2, CONFIG, C2_C1, BYTE, AccessType.RW),
217 M2_CONFIG_C2_C2(0x37c2, Group.M2, CONFIG, C2_C2, BYTE, AccessType.RW),
218 M2_CONFIG_C2_C4(0x37c4, Group.M2, CONFIG, C2_C4, BYTE, AccessType.RW),
219 M2_CONFIG_C2_C5(0x37c5, Group.M2, CONFIG, C2_C5, BYTE, AccessType.RW),
220 M2_CONFIG_C2_C6(0x37c6, Group.M2, CONFIG, C2_C6, BYTE, AccessType.RW),
221 M2_CONFIG_C2_C7(0x37c7, Group.M2, CONFIG, C2_C7, BYTE, AccessType.RW),
222 M2_CONFIG_C2_C8(0x37c8, Group.M2, CONFIG, C2_C8, BYTE, AccessType.RW),
223 M2_CONFIG_C2_C9(0x37c9, Group.M2, CONFIG, C2_C9, BYTE, AccessType.RW),
224 M2_CONFIG_C2_E1(0x37e1, Group.M2, CONFIG, C2_E1, BYTE, AccessType.RW),
225 M2_CONFIG_C2_E2(0x37e2, Group.M2, CONFIG, C2_E2, BYTE, AccessType.RW),
226 M2_CONFIG_C2_E5(0x37e5, Group.M2, CONFIG, C2_E5, BYTE, AccessType.RW),
227 M2_CONFIG_C2_E6(0x37e6, Group.M2, CONFIG, C2_E6, BYTE, AccessType.RW),
228 M2_CONFIG_C2_E7(0x37e7, Group.M2, CONFIG, C2_E7, BYTE, AccessType.RW),
229 M2_CONFIG_C2_E8(0x37e8, Group.M2, CONFIG, C2_E8, BYTE, AccessType.RW),
230 M2_CONFIG_C2_E9(0x37e9, Group.M2, CONFIG, C2_E9, BYTE, AccessType.RW),
231 M2_CONFIG_C2_F0(0x37f0, Group.M2, CONFIG, C2_F0, BYTE, AccessType.RW),
232 M2_CONFIG_C2_F1(0x37f1, Group.M2, CONFIG, C2_F1, BYTE, AccessType.RW),
233 M2_CONFIG_C2_F2(0x37f2, Group.M2, CONFIG, C2_F2, BYTE, AccessType.RW),
234 M2_TEMP_ACTUAL_HEATING_SUPPLY(0x3900, Group.M2, TEMP_ACTUAL, HEATING_SUPPLY, SHORT, AccessType.RO, 0.1),
235 M2_TEMP_ACTUAL_HEATING_RETURN(0x3902, Group.M2, TEMP_ACTUAL, HEATING_RETURN, SHORT, AccessType.RO, 0.1),
236 M2_STATE_PUMP_AT_0X3906(0x3906, Group.M2, STATE, PUMP, BOOL, AccessType.RO),
237
238 M3_CYCLES_HEATING_MONDAY(0x4000, Group.M3, CYCLES_HEATING, MONDAY, CYCLE_TIMES, AccessType.RW), M3_CYCLES_HEATING_TUESDAY(0x4008, Group.M3, CYCLES_HEATING, TUESDAY, CYCLE_TIMES, AccessType.RW),
239 M3_CYCLES_HEATING_WEDNSDAY(0x4010, Group.M3, CYCLES_HEATING, WEDNSDAY, CYCLE_TIMES, AccessType.RW),
240 M3_CYCLES_HEATING_THURSDAY(0x4018, Group.M3, CYCLES_HEATING, THURSDAY, CYCLE_TIMES, AccessType.RW),
241 M3_CYCLES_HEATING_FRIDAY(0x4020, Group.M3, CYCLES_HEATING, FRIDAY, CYCLE_TIMES, AccessType.RW),
242 M3_CYCLES_HEATING_SATURDAY(0x4028, Group.M3, CYCLES_HEATING, SATURDAY, CYCLE_TIMES, AccessType.RW),
243 M3_CYCLES_HEATING_SUNDAY(0x4030, Group.M3, CYCLES_HEATING, SUNDAY, CYCLE_TIMES, AccessType.RW),
244 DHW_M3_CYCLES_HEATING_TUESDAY(0x4108, Group.DHW_M3, CYCLES_HEATING, TUESDAY, CYCLE_TIMES, AccessType.RW),
245 DHW_M3_CYCLES_HEATING_WEDNSDAY(0x4110, Group.DHW_M3, CYCLES_HEATING, WEDNSDAY, CYCLE_TIMES, AccessType.RW),
246 DHW_M3_CYCLES_HEATING_THURSDAY(0x4118, Group.DHW_M3, CYCLES_HEATING, THURSDAY, CYCLE_TIMES, AccessType.RW),
247 DHW_M3_CYCLES_HEATING_FRIDAY(0x4120, Group.DHW_M3, CYCLES_HEATING, FRIDAY, CYCLE_TIMES, AccessType.RW),
248 DHW_M3_CYCLES_HEATING_SATURDAY(0x4128, Group.DHW_M3, CYCLES_HEATING, SATURDAY, CYCLE_TIMES, AccessType.RW),
249 DHW_M3_CYCLES_HEATING_SUNDAY(0x4130, Group.DHW_M3, CYCLES_HEATING, SUNDAY, CYCLE_TIMES, AccessType.RW),
250 DHW_M3_CYCLES_RECIRC_MONDAY(0x4200, Group.DHW_M3, CYCLES_RECIRC, MONDAY, CYCLE_TIMES, AccessType.RW),
251 DHW_M3_CYCLES_RECIRC_TUESDAY(0x4208, Group.DHW_M3, CYCLES_RECIRC, TUESDAY, CYCLE_TIMES, AccessType.RW),
252 DHW_M3_CYCLES_RECIRC_WEDNSDAY(0x4210, Group.DHW_M3, CYCLES_RECIRC, WEDNSDAY, CYCLE_TIMES, AccessType.RW),
253 DHW_M3_CYCLES_RECIRC_THURSDAY(0x4218, Group.DHW_M3, CYCLES_RECIRC, THURSDAY, CYCLE_TIMES, AccessType.RW),
254 DHW_M3_CYCLES_RECIRC_FRIDAY(0x4220, Group.DHW_M3, CYCLES_RECIRC, FRIDAY, CYCLE_TIMES, AccessType.RW),
255 DHW_M3_CYCLES_RECIRC_SATURDAY(0x4228, Group.DHW_M3, CYCLES_RECIRC, SATURDAY, CYCLE_TIMES, AccessType.RW),
256 DHW_M3_CYCLES_RECIRC_SUNDAY(0x4230, Group.DHW_M3, CYCLES_RECIRC, SUNDAY, CYCLE_TIMES, AccessType.RW),
257 M3_CONFIG_OPERATING_TYPE(0x4301, Group.M3, CONFIG, OPERATING_TYPE, BYTE, AccessType.RW),
258 M3_STATE_SAVE_MODE(0x4302, Group.M3, STATE, SAVE_MODE, BOOL, AccessType.RO),
259 M3_STATE_PARTY_MODE(0x4303, Group.M3, STATE, PARTY_MODE, BOOL, AccessType.RO),
260 M3_CONFIG_SHIFT(0x4304, Group.M3, CONFIG, SHIFT, BYTE, AccessType.RW),
261 M3_CONFIG_SLOPE(0x4305, Group.M3, CONFIG, SLOPE, BYTE, AccessType.RW, 0.1),
262 M3_TEMP_NOMINAL_ROOM_NORMAL(0x4306, Group.M3, TEMP_NOMINAL, ROOM_NORMAL, BYTE, AccessType.RW),
263 M3_TEMP_NOMINAL_ROOM_REDUCED(0x4307, Group.M3, TEMP_NOMINAL, ROOM_REDUCED, BYTE, AccessType.RW),
264 M3_TEMP_NOMINAL_ROOM_PARTY(0x4308, Group.M3, TEMP_NOMINAL, ROOM_PARTY, BYTE, AccessType.RW),
265 M3_CONFIG_HOLIDAY_PROGRAMME(0x4309, Group.M3, CONFIG, Property.HOLIDAY_PROGRAMME, DataType.HOLIDAY, AccessType.RW),
266 M3_STATE_UNKNOWN_AT_0X4500(0x4500, Group.M3, STATE, UNKNOWN, BYTE, AccessType.RO),
267 M3_STATE_UNKNOWN_AT_0X4501(0x4501, Group.M3, STATE, UNKNOWN, BYTE, AccessType.RO),
268 M3_CONFIG_HEATUP_TIME(0x4502, Group.M3, CONFIG, HEATUP_TIME, INTEGER, AccessType.RO, 0.1),
269 M3_STATE_FROST(0x4506, Group.M3, STATE, FROST, BOOL, AccessType.RO),
270 M3_STATE_UNKNOWN_AT_0X4507(0x4507, Group.M3, STATE, UNKNOWN, BYTE, AccessType.RO),
271 M3_STATE_DHW_HEATUP(0x4508, Group.M3, STATE, DHW_HEATUP, BOOL, AccessType.RO),
272 M3_STATE_UNKNOWN_AT_0X4509(0x4509, Group.M3, STATE, UNKNOWN, BYTE, AccessType.RO),
273 M3_TEMP_NOMINAL_HEATING_SUPPLY(0x4511, Group.M3, TEMP_NOMINAL, Property.HEATING_SUPPLY, SHORT, AccessType.RO, 0.1),
274
275 M3_STATE_UNKNOWN_AT_0X4535(0x4535, Group.M3, STATE, UNKNOWN, BYTE, AccessType.RO), M3_STATE_UNKNOWN_AT_0X4541(0x4541, Group.M3, STATE, UNKNOWN, BYTE, AccessType.RO),
276 M3_STATE_PUMP(0x450a, Group.M3, STATE, PUMP, BOOL, AccessType.RO),
277 M3_TEMP_NOMINAL_ROOM_CURRENT(0x450c, Group.M3, TEMP_NOMINAL, Property.ROOM_CURRENT, SHORT, AccessType.RO, 0.1),
278 M3_TEMP_ACTUAL_UNKNOWN_AT_0X450E(0x450e, Group.M3, TEMP_ACTUAL, Property.UNKNOWN, SHORT, AccessType.RO, 0.1),
279 M3_POSITION_IN_PERCENT_MIXER(0x454c, Group.M3, POSITION_IN_PERCENT, MIXER, BYTE, AccessType.RO, 0.5),
280 M3_CONFIG_C2_A0(0x47a0, Group.M3, CONFIG, C2_A0, BYTE, AccessType.RW),
281 M3_CONFIG_C2_A2(0x47a2, Group.M3, CONFIG, C2_A2, BYTE, AccessType.RW),
282 M3_CONFIG_C2_A3(0x47a3, Group.M3, CONFIG, C2_A3, BYTE, AccessType.RW),
283 M3_CONFIG_C2_A4(0x47a4, Group.M3, CONFIG, C2_A4, BYTE, AccessType.RW),
284 M3_CONFIG_C2_A5(0x47a5, Group.M3, CONFIG, C2_A5, BYTE, AccessType.RW),
285 M3_CONFIG_C2_A6(0x47a6, Group.M3, CONFIG, C2_A6, BYTE, AccessType.RW),
286 M3_CONFIG_C2_A7(0x47a7, Group.M3, CONFIG, C2_A7, BYTE, AccessType.RW),
287 M3_CONFIG_C2_A9(0x47a9, Group.M3, CONFIG, C2_A9, BYTE, AccessType.RW),
288 M3_CONFIG_C2_B0(0x47b0, Group.M3, CONFIG, C2_B0, BYTE, AccessType.RW),
289 M3_CONFIG_C2_B1(0x47b1, Group.M3, CONFIG, C2_B1, BYTE, AccessType.RW),
290 M3_CONFIG_C2_B2(0x47b2, Group.M3, CONFIG, C2_B2, BYTE, AccessType.RW),
291 M3_CONFIG_C2_B3(0x47b3, Group.M3, CONFIG, C2_B3, BYTE, AccessType.RW),
292 M3_CONFIG_C2_B5(0x47b5, Group.M3, CONFIG, C2_B5, BYTE, AccessType.RW),
293 M3_CONFIG_C2_B7(0x47b7, Group.M3, CONFIG, C2_B7, BYTE, AccessType.RW),
294 M3_CONFIG_C2_B8(0x47b8, Group.M3, CONFIG, C2_B8, BYTE, AccessType.RW),
295 M3_CONFIG_C2_B9(0x47b9, Group.M3, CONFIG, C2_B9, BYTE, AccessType.RW),
296 M3_CONFIG_C2_C0(0x47c0, Group.M3, CONFIG, C2_C0, BYTE, AccessType.RW),
297 M3_CONFIG_C2_C1(0x47c1, Group.M3, CONFIG, C2_C1, BYTE, AccessType.RW),
298 M3_CONFIG_C2_C2(0x47c2, Group.M3, CONFIG, C2_C2, BYTE, AccessType.RW),
299 M3_CONFIG_C2_C4(0x47c4, Group.M3, CONFIG, C2_C4, BYTE, AccessType.RW),
300 M3_CONFIG_C2_C5(0x47c5, Group.M3, CONFIG, C2_C5, BYTE, AccessType.RW),
301 M3_CONFIG_C2_C6(0x47c6, Group.M3, CONFIG, C2_C6, BYTE, AccessType.RW),
302 M3_CONFIG_C2_C7(0x47c7, Group.M3, CONFIG, C2_C7, BYTE, AccessType.RW),
303 M3_CONFIG_C2_C8(0x47c8, Group.M3, CONFIG, C2_C8, BYTE, AccessType.RW),
304 M3_CONFIG_C2_C9(0x47c9, Group.M3, CONFIG, C2_C9, BYTE, AccessType.RW),
305 M3_CONFIG_C2_E1(0x47e1, Group.M3, CONFIG, C2_E1, BYTE, AccessType.RW),
306 M3_CONFIG_C2_E2(0x47e2, Group.M3, CONFIG, C2_E2, BYTE, AccessType.RW),
307 M3_CONFIG_C2_E5(0x47e5, Group.M3, CONFIG, C2_E5, BYTE, AccessType.RW),
308 M3_CONFIG_C2_E6(0x47e6, Group.M3, CONFIG, C2_E6, BYTE, AccessType.RW),
309 M3_CONFIG_C2_E7(0x47e7, Group.M3, CONFIG, C2_E7, BYTE, AccessType.RW),
310 M3_CONFIG_C2_E8(0x47e8, Group.M3, CONFIG, C2_E8, BYTE, AccessType.RW),
311 M3_CONFIG_C2_E9(0x47e9, Group.M3, CONFIG, C2_E9, BYTE, AccessType.RW),
312 M3_CONFIG_C2_F0(0x47f0, Group.M3, CONFIG, C2_F0, BYTE, AccessType.RW),
313 M3_CONFIG_C2_F1(0x47f1, Group.M3, CONFIG, C2_F1, BYTE, AccessType.RW),
314 M3_CONFIG_C2_F2(0x47f2, Group.M3, CONFIG, C2_F2, BYTE, AccessType.RW),
315 M3_TEMP_ACTUAL_HEATING_SUPPLY(0x4900, Group.M3, TEMP_ACTUAL, HEATING_SUPPLY, SHORT, AccessType.RO, 0.1),
316 M3_TEMP_ACTUAL_HEATING_RETURN(0x4902, Group.M3, TEMP_ACTUAL, HEATING_RETURN, SHORT, AccessType.RO, 0.1),
317 M3_STATE_PUMP_AT_0X4906(0x4906, Group.M3, STATE, PUMP, BOOL, AccessType.RO),
318 BOILER_TEMP_ACTUAL_BOILER_WATER(0x5500, Group.BOILER, TEMP_ACTUAL, Property.BOILER_WATER, SHORT, AccessType.RO, 0.1),
319 BOILER_TEMP_NOMINAL_BOILER_WATER(0x5502, Group.BOILER, TEMP_NOMINAL, Property.BOILER_WATER, SHORT, AccessType.RO, 0.1),
320 BOILER_TEMP_NOMINAL_BOILER_WATER_HYSTERERSIS_LOW_FIX(0x5504, Group.BOILER, TEMP_NOMINAL, Property.BOILER_WATER_HYSTERERSIS_LOW_FIX, SHORT, AccessType.RO, 0.1),
321 BOILER_TEMP_NOMINAL_BOILER_WATER_HYSTERERSIS_UPPER_FIX(0x5506, Group.BOILER, TEMP_NOMINAL, Property.BOILER_WATER_HYSTERERSIS_UPPER_FIX, SHORT, AccessType.RO, 0.1),
322 BOILER_TEMP_NOMINAL_BOILER_WATER_HYSTERERSIS_UPPER_VARIABLE(0x5508, Group.BOILER, TEMP_NOMINAL, Property.BOILER_WATER_HYSTERERSIS_UPPER_VARIABLE, SHORT, AccessType.RO, 0.1),
323 BOILER_POSITION_IN_PERCENT_THROTTLE_VALVE(0x5555, Group.BOILER, POSITION_IN_PERCENT, Property.THROTTLE_VALVE, SHORT, AccessType.RO, 0.5),
324 BOILER_STATE_BURNER_STAGES(0x551e, Group.BOILER, STATE, Property.BURNER_STAGES, BYTE, AccessType.RO),
325 BOILER_STATE_UNKNOWN_AT_0X551F(0x551f, Group.BOILER, STATE, UNKNOWN, BYTE, AccessType.RO),
326 BOILER_POWER_IN_PERCENT_BURNER(0x55e3, Group.BOILER, POWER_IN_PERCENT, Property.BURNER, SHORT, AccessType.RO, 0.5),
327
328
329
330
331 BOILER_CONFIG_C2_02(0x5702, Group.BOILER, CONFIG, Property.C2_02, BYTE, AccessType.RW), BOILER_CONFIG_C2_03(0x5703, Group.BOILER, CONFIG, C2_03, BYTE, AccessType.RW),
332 BOILER_CONFIG_C2_04(0x5704, Group.BOILER, CONFIG, C2_04, BYTE, AccessType.RW),
333 BOILER_CONFIG_C2_05(0x5705, Group.BOILER, CONFIG, C2_05, BYTE, AccessType.RW),
334 BOILER_CONFIG_C2_06(0x5706, Group.BOILER, CONFIG, C2_06, BYTE, AccessType.RW),
335 BOILER_CONFIG_C2_13(0x5713, Group.BOILER, CONFIG, C2_13, BYTE, AccessType.RW),
336 BOILER_CONFIG_C2_1F(0x571f, Group.BOILER, CONFIG, C2_1F, BYTE, AccessType.RW),
337 BOILER_CONFIG_C2_21(0x5721, Group.BOILER, CONFIG, C2_21, SHORT, AccessType.RW),
338 BOILER_CONFIG_C2_23(0x5723, Group.BOILER, CONFIG, C2_23, BYTE, AccessType.RW),
339 BOILER_CONFIG_C2_24(0x5724, Group.BOILER, CONFIG, C2_24, BYTE, AccessType.RW),
340 BOILER_CONFIG_C2_26(0x5726, Group.BOILER, CONFIG, C2_26, SHORT, AccessType.RW),
341 BOILER_CONFIG_C2_28(0x5728, Group.BOILER, CONFIG, C2_28, BYTE, AccessType.RW),
342 BOILER_CONFIG_C2_29(0x5729, Group.BOILER, CONFIG, C2_29, SHORT, AccessType.RW),
343 BOILER_CONFIG_C2_32(0x5732, Group.BOILER, CONFIG, C2_32, BYTE, AccessType.RW),
344 BOILER_CONFIG_C2_33(0x5733, Group.BOILER, CONFIG, C2_33, BYTE, AccessType.RW),
345
346 BOILER_CONFIG_C2_10(0x5710, Group.BOILER, CONFIG, C2_10, BYTE, AccessType.RW), BOILER_CONFIG_C2_11(0x5711, Group.BOILER, CONFIG, C2_11, BYTE, AccessType.RW),
347 BOILER_CONFIG_C2_12(0x5712, Group.BOILER, CONFIG, C2_12, BYTE, AccessType.RW),
348
349 BOILER_CONFIG_C2_15(0x5715, Group.BOILER, CONFIG, C2_15, BYTE, AccessType.RW), BOILER_CONFIG_C2_16(0x5716, Group.BOILER, CONFIG, C2_16, BYTE, AccessType.RW),
350 BOILER_CONFIG_C2_17(0x5717, Group.BOILER, CONFIG, C2_17, BYTE, AccessType.RW),
351 BOILER_CONFIG_C2_18(0x5718, Group.BOILER, CONFIG, C2_18, SHORT, AccessType.RW),
352 BOILER_CONFIG_C2_1A(0x571a, Group.BOILER, CONFIG, C2_1A, BYTE, AccessType.RW),
353
354 DHW_TEMP_NOMINAL_DHW_CYLINDER(0x6300, Group.DHW, TEMP_NOMINAL, DHW_CYLINDER, BYTE, AccessType.RW), SOLAR_STATE_NACHLADEUNTERDRUECKUNG(0x6551, Group.SOLAR, STATE, NACHLADEUNTERDRUECKUNG, BOOL, AccessType.RO),
355 SOLAR_STATE_PUMP(0x6552, Group.SOLAR, STATE, PUMP, BOOL, AccessType.RO, 0.1),
356 SOLAR_ENERGY_KWH_COLLECTOR(0x6560, Group.SOLAR, ENERGY_KWH, COLLECTOR, INTEGER, AccessType.RO),
357 SOLAR_TEMP_ACTUAL_COLLECTOR(0x6564, Group.SOLAR, TEMP_ACTUAL, COLLECTOR, SHORT, AccessType.RO, 0.1),
358 SOLAR_TEMP_ACTUAL_DHW_CYLINDER(0x6566, Group.SOLAR, TEMP_ACTUAL, DHW_CYLINDER, SHORT, AccessType.RO, 0.1),
359 SOLAR_OPERATING_TIME_H_COLLECTOR(0x6568, Group.SOLAR, OPERATING_TIME_H, COLLECTOR, SHORT, AccessType.RO),
360 DHW_CONFIG_C2_55(0x6755, Group.DHW, CONFIG, C2_55, BYTE, AccessType.RW),
361 DHW_CONFIG_C2_56(0x6756, Group.DHW, CONFIG, C2_56, BYTE, AccessType.RW),
362 DHW_CONFIG_C2_58(0x6758, Group.DHW, CONFIG, C2_58, BYTE, AccessType.RW),
363 DHW_CONFIG_C2_59(0x6759, Group.DHW, CONFIG, C2_59, BYTE, AccessType.RW),
364 DHW_CONFIG_C2_60(0x6760, Group.DHW, CONFIG, C2_60, BYTE, AccessType.RW),
365 DHW_CONFIG_C2_61(0x6761, Group.DHW, CONFIG, C2_61, BYTE, AccessType.RW),
366 DHW_CONFIG_C2_62(0x6762, Group.DHW, CONFIG, C2_62, BYTE, AccessType.RW),
367 DHW_CONFIG_C2_64(0x6764, Group.DHW, CONFIG, C2_64, BYTE, AccessType.RW),
368 DHW_CONFIG_C2_66(0x6766, Group.DHW, CONFIG, C2_66, BYTE, AccessType.RW),
369 DHW_CONFIG_C2_70(0x6770, Group.DHW, CONFIG, C2_70, BYTE, AccessType.RW),
370 DHW_CONFIG_C2_71(0x6771, Group.DHW, CONFIG, C2_71, BYTE, AccessType.RW),
371 DHW_CONFIG_C2_72(0x6772, Group.DHW, CONFIG, C2_72, BYTE, AccessType.RW),
372 DHW_CONFIG_C2_73(0x6773, Group.DHW, CONFIG, C2_73, BYTE, AccessType.RW),
373 DHW_CONFIG_C2_74(0x6774, Group.DHW, CONFIG, C2_74, BYTE, AccessType.RW),
374 DHW_CONFIG_C2_75(0x6775, Group.DHW, CONFIG, C2_75, BYTE, AccessType.RW),
375 COMMON_ERROR_ERROR_1(0x7507, Group.COMMON, ERROR, Property.ERROR_1, ERROR_LIST_ENTRY, AccessType.RO),
376 COMMON_ERROR_ERROR_2(0x7510, Group.COMMON, ERROR, Property.ERROR_2, ERROR_LIST_ENTRY, AccessType.RO),
377 COMMON_ERROR_ERROR_3(0x7519, Group.COMMON, ERROR, Property.ERROR_3, ERROR_LIST_ENTRY, AccessType.RO),
378 COMMON_ERROR_ERROR_4(0x7522, Group.COMMON, ERROR, Property.ERROR_4, ERROR_LIST_ENTRY, AccessType.RO),
379 COMMON_ERROR_ERROR_5(0x752b, Group.COMMON, ERROR, Property.ERROR_5, ERROR_LIST_ENTRY, AccessType.RO),
380 COMMON_ERROR_ERROR_6(0x7534, Group.COMMON, ERROR, Property.ERROR_6, ERROR_LIST_ENTRY, AccessType.RO),
381 COMMON_ERROR_ERROR_7(0x753d, Group.COMMON, ERROR, Property.ERROR_7, ERROR_LIST_ENTRY, AccessType.RO),
382 COMMON_ERROR_ERROR_8(0x7546, Group.COMMON, ERROR, Property.ERROR_8, ERROR_LIST_ENTRY, AccessType.RO),
383 COMMON_ERROR_ERROR_9(0x754f, Group.COMMON, ERROR, Property.ERROR_9, ERROR_LIST_ENTRY, AccessType.RO),
384 COMMON_ERROR_ERROR_10(0x7558, Group.COMMON, ERROR, Property.ERROR_10, ERROR_LIST_ENTRY, AccessType.RO),
385 BOILER_CONSUPTION_BURNER(0x7574, Group.BOILER, CONSUPTION, Property.BURNER, INTEGER, AccessType.RO, 0.0001),
386 COMMON_ERROR_STATUS_ERROR(0x7579, Group.COMMON, ERROR, Property.STATUS_ERROR, BOOL, AccessType.RO),
387 BOILER_POWER_IN_PERCENT_INTERNAL_PUMP(0x7660, Group.BOILER, POWER_IN_PERCENT, INTERNAL_PUMP, SHORT, AccessType.RO),
388 COMMON_CONFIG_C2_7F(0x777f, Group.COMMON, CONFIG, C2_7F, BYTE, AccessType.RW),
389 COMMON_CONFIG_C2_80(0x7780, Group.COMMON, CONFIG, C2_80, BYTE, AccessType.RW),
390 COMMON_CONFIG_C2_81(0x7781, Group.COMMON, CONFIG, C2_81, BYTE, AccessType.RW),
391 COMMON_CONFIG_C2_82(0x7782, Group.COMMON, CONFIG, C2_82, BYTE, AccessType.RW),
392 COMMON_CONFIG_C2_83(0x7783, Group.COMMON, CONFIG, C2_83, BYTE, AccessType.RW),
393 COMMON_CONFIG_C2_84(0x7784, Group.COMMON, CONFIG, C2_84, BYTE, AccessType.RW),
394 COMMON_CONFIG_C2_85(0x7785, Group.COMMON, CONFIG, C2_85, BYTE, AccessType.RW),
395 COMMON_CONFIG_C2_86(0x7786, Group.COMMON, CONFIG, C2_86, BYTE, AccessType.RW),
396 COMMON_CONFIG_C2_87(0x7787, Group.COMMON, CONFIG, C2_87, BYTE, AccessType.RW),
397 COMMON_CONFIG_C2_89(0x7789, Group.COMMON, CONFIG, C2_89, BYTE, AccessType.RW),
398 COMMON_CONFIG_C2_8A(0x778a, Group.COMMON, CONFIG, C2_8A, UBYTE, AccessType.RW),
399 COMMON_CONFIG_C2_8E(0x778e, Group.COMMON, CONFIG, C2_8E, BYTE, AccessType.RW),
400 COMMON_CONFIG_C2_90(0x7790, Group.COMMON, CONFIG, C2_90, UBYTE, AccessType.RW),
401 COMMON_CONFIG_C2_93(0x7793, Group.COMMON, CONFIG, C2_93, BYTE, AccessType.RW),
402 COMMON_CONFIG_C2_94(0x7794, Group.COMMON, CONFIG, C2_94, BYTE, AccessType.RW),
403 COMMON_CONFIG_C2_95(0x7795, Group.COMMON, CONFIG, C2_95, BYTE, AccessType.RW);
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457 public static final int[] BLOCKS_16 = {
458
459 0x0000, 0x0010, 0x0020, 0x0030, 0x0040, 0x0050, 0x0060, 0x0070, 0x0080, 0x0090, 0x00a0, 0x00b0, 0x00c0, 0x00d0, 0x00e0, 0x00f0, 0x0200, 0x0210, 0x0220,
460 0x0800, 0x0810, 0x0820, 0x0830, 0x0840, 0x0850, 0x0860, 0x0870, 0x0880, 0x0890, 0x08a0, 0x08b0, 0x08e0, 0x08f0,
461 0x0900, 0x0910,
462 0x1000, 0x1010, 0x1020, 0x1030, 0x1040, 0x1050, 0x1060, 0x1070, 0x1080, 0x1090,
463 0x2000, 0x2010, 0x2020, 0x2030, 0x2100, 0x2110, 0x2120, 0x2130,
464 0x2200, 0x2210, 0x2220, 0x2230,
465 0x2300, 0x2310,
466 0x2500, 0x2510, 0x2520, 0x2530, 0x2540,
467 0x27a0, 0x27b0, 0x27c0, 0x27e0, 0x27f0,
468 0x2900,
469 0x3000, 0x3010, 0x3020, 0x3030, 0x3100, 0x3110, 0x3120, 0x3130, 0x3200, 0x3210, 0x3220, 0x3230, 0x3300, 0x3310, 0x3500, 0x3510, 0x3520, 0x3530, 0x3540, 0x37a0, 0x37b0, 0x37c0, 0x37e0, 0x37f0, 0x3900, 0x4000, 0x4010, 0x4020, 0x4030, 0x4100, 0x4110, 0x4120, 0x4130, 0x4200, 0x4210, 0x4220, 0x4230, 0x4300, 0x4310, 0x4500, 0x4510, 0x4520, 0x4530, 0x4540, 0x47a0, 0x47b0, 0x47c0, 0x47e0, 0x47f0, 0x4900, 0x5300, 0x5500, 0x5510, 0x5520, 0x5530, 0x5700, 0x5710, 0x5720, 0x5730, 0x57a0, 0x57d0, 0x57f0, 0x6300, 0x6500, 0x6510,
470 0x6550, 0x6560,
471 0x6750, 0x6760, 0x6770, 0x6900, 0x7300, 0x7310, 0x7320, 0x7330, 0x7340, 0x7500, 0x7510, 0x7520, 0x7530, 0x7540, 0x7550, 0x7560, 0x7570, 0x7700, 0x7770, 0x7780, 0x7790, 0x7900,
472 0xa200, 0xa210, 0xa220, 0xa230, 0xa240, 0xa250, 0xa260, 0xa270, 0xa280, 0xa290, 0xa2a0, 0xa2b0, 0xa2c0, 0xa2d0, 0xa2e0, 0xa2f0,
473 0xa3f0
474 };
475
476
477
478
479
480
481
482 public static void printAll(StringBuilder sb, DataContainer dc) {
483 for (Group g : Group.values()) {
484 sb.append(g.toString()).append("\n");
485
486 for (DataPoint p : getSortedPoints()) {
487 if (g.equals(p.getGroup())) {
488 sb.append("\t");
489 p.toString(dc, sb);
490 sb.append("\n");
491 }
492 }
493 }
494 }
495
496
497
498
499
500
501
502
503 public static void printMatchingAddesses(DataPoint dataPoint, MemoryImage mem, StringBuilder sb) {
504 boolean headerPrinted = false;
505
506 for (int i = 0; i < (0x010000 - dataPoint.getLength()); i++) {
507 if (isInKnownBlocks16(i, dataPoint.getLength())) {
508 if (compareBytes(mem, dataPoint.getAddr(), i, dataPoint.getLength())) {
509 if (!headerPrinted) {
510 dataPoint.toString(mem, sb);
511 headerPrinted = true;
512 }
513
514 sb.append(String.format("\t\tAlso @0x%04x", i));
515
516 DataPoint p = findByAddr(i);
517
518 if (p != null) {
519 p.toString(mem, sb);
520 } else {
521 sb.append("\n");
522 }
523 }
524 }
525 }
526 }
527
528 private static boolean compareBytes(MemoryImage mem, int addr0, int addr1, int length) {
529
530 if ((addr0 == addr1) || (addr0 > addr1)) {
531 return false;
532 }
533
534 boolean isNotSet = true;
535
536 for (int i = 0; i <= length; i++) {
537 if (mem.getByte(addr0 + i) != mem.getByte(addr1 + i)) {
538 return false;
539 }
540
541 isNotSet &= (mem.getByte(addr0 + i) == null);
542 }
543
544 return !isNotSet;
545 }
546
547
548
549
550
551
552
553
554 public static DataPoint findByAddr(int addr) {
555 for (DataPoint p : DataPoint.values()) {
556 if (addr == p.getAddr()) {
557 return p;
558 }
559 }
560
561 return null;
562 }
563
564
565
566
567
568
569
570
571
572 public static boolean isInKnownBlocks16(int address, int length) {
573 for (int i = 0; i < length; i++) {
574 if (!isInKnownBlock16(address + i)) {
575 return false;
576 }
577 }
578
579 return true;
580 }
581
582
583
584
585
586
587
588
589 public static boolean isInKnownBlock16(int address) {
590 for (int base : BLOCKS_16) {
591 if ((base == ((address / 16) * 16))) {
592 return true;
593 }
594 }
595
596 return false;
597 }
598
599
600
601
602
603
604 public static DataPoint[] getSortedPoints() {
605 DataPoint[] result = Arrays.copyOf(DataPoint.values(), DataPoint.values().length);
606 Arrays.sort(result, new GroupAndNameComparator());
607
608 return result;
609 }
610
611
612
613
614
615
616
617
618 public boolean addressBelongsToMe(int addr) {
619 return (getAddr() <= addr) && ((getAddr() + getLength()) > addr);
620 }
621
622 private static boolean isUnknownRange(int address, int length) {
623 for (DataPoint dp : DataPoint.values()) {
624 for (int i = 0; i < length; i++) {
625 if (dp.addressBelongsToMe(address + i)) {
626 return false;
627 }
628 }
629 }
630
631 return true;
632 }
633 private final int addr;
634 private final Group group;
635 private final PropertyType valueKind;
636 private final Property value;
637 private final DataType type;
638 private final AccessType access;
639 private final double factor;
640 private final Alternative alternative;
641
642 private DataPoint(int addr, Group group, PropertyType valueKind, Property value, DataType type, AccessType access) {
643 this.addr = addr;
644 this.group = group;
645 this.valueKind = valueKind;
646 this.value = value;
647 this.type = type;
648 this.access = access;
649 this.factor = Double.NaN;
650 this.alternative = null;
651 }
652
653 private DataPoint(int addr, Group group, PropertyType valueKind, Property value, DataType type, AccessType access, Alternative alternative) {
654 this.addr = addr;
655 this.group = group;
656 this.valueKind = valueKind;
657 this.value = value;
658 this.type = type;
659 this.factor = Double.NaN;
660 this.access = access;
661 this.alternative = alternative;
662 }
663
664 private DataPoint(int addr, Group group, PropertyType valueKind, Property value, DataType type, AccessType access, double factor) {
665 this.addr = addr;
666 this.group = group;
667 this.valueKind = valueKind;
668 this.value = value;
669 this.type = type;
670 this.factor = factor;
671 this.access = access;
672 this.alternative = null;
673 }
674
675 private DataPoint(int addr, Group group, PropertyType valueKind, Property value, DataType type, AccessType access, double factor, Alternative alternative) {
676 this.addr = addr;
677 this.group = group;
678 this.valueKind = valueKind;
679 this.value = value;
680 this.type = type;
681 this.factor = factor;
682 this.access = access;
683 this.alternative = alternative;
684 }
685
686 private String getFormatString() {
687 switch (getType()) {
688 case BOOL:
689 return "%-28s: %s";
690
691 case SHORT_HEX:
692 return "%-28s: %04x";
693
694 case BYTE:
695 case UBYTE:
696 case SHORT:
697 case USHORT:
698 case INTEGER:
699
700 switch (getValueKind()) {
701 case OPERATING_TIME_S:
702 return "%-28s: %d s (%d:%02d:%02d)";
703
704 default:
705
706 if (Double.isNaN(getFactor())) {
707 return "%-28s: %d";
708 } else {
709 return "%-28s: %.1f";
710 }
711 }
712
713 case TIME_STAMP_8:
714
715 switch (getValueKind()) {
716 case TIME_STAMP:
717 return "%-28s: %s";
718
719 default:
720 return "%-28s: UNKNOWN ValueKind:\"" + getValueKind().name() + "\"";
721 }
722
723 case HOLIDAY:
724 return "%-28s: %s";
725
726 case CYCLE_TIMES:
727 return "%-28s: %s";
728
729 case ERROR_LIST_ENTRY:
730 return "%-28s: %s";
731
732 default:
733 return "%-28s: UNKNOWN ValueKind:\"" + getValueKind().name() + "\"";
734 }
735 }
736
737 private String getAlternativeStr() {
738 return "";
739 }
740
741
742
743
744
745
746
747
748
749 public void toString(MemoryImage mem, StringBuilder sb) {
750 final Object decodedValue = decode(mem);
751
752 switch (getType()) {
753 case BOOL:
754 case SHORT_HEX:
755 case BYTE:
756 case UBYTE:
757 case SHORT:
758 case USHORT:
759 case TIME_STAMP_8:
760 case CYCLE_TIMES:
761 case ERROR_LIST_ENTRY:
762 case HOLIDAY:
763 sb.append(String.format(getFormatString(), getLabel(), decodedValue));
764
765 break;
766
767 case INTEGER:
768
769 if (OPERATING_TIME_S.equals(getValueKind())) {
770 int data = (Integer) decodedValue;
771 int h = data / 3600;
772 int min = (data / 60) % 60;
773 int sec = data % 60;
774
775 sb.append(String.format(getFormatString(), getLabel(), data, h, min, sec));
776 } else {
777 sb.append(String.format(getFormatString(), getLabel(), decodedValue));
778 }
779
780 break;
781
782 default:
783 throw new UnsupportedOperationException("Not yet implemented");
784 }
785 }
786
787
788
789
790
791
792 public int getLength() {
793 return getType().getLength();
794 }
795
796
797
798
799
800
801 public int getAddr() {
802 return addr;
803 }
804
805
806
807
808
809
810 public Group getGroup() {
811 return group;
812 }
813
814
815
816
817
818
819 public PropertyType getValueKind() {
820 return valueKind;
821 }
822
823
824
825
826
827
828 public Property getValue() {
829 return value;
830 }
831
832
833
834
835
836
837 public DataType getType() {
838 return type;
839 }
840
841
842
843
844
845
846 public AccessType getAccess() {
847 return access;
848 }
849
850
851
852
853
854
855 public double getFactor() {
856 return factor;
857 }
858
859
860
861
862
863
864 public Alternative getAlternative() {
865 return alternative;
866 }
867
868
869
870
871
872
873 public String getName() {
874 return name();
875 }
876
877
878
879
880
881
882 public String getLabel() {
883 if (Property.UNKNOWN.equals(value)) {
884 return String.format("0x%04x %s%s", getAddr(), getValueKind().toString(), getAlternativeStr());
885 } else {
886 return String.format("%s %s%s", getValue().toString(), getValueKind().toString(), getAlternativeStr());
887 }
888 }
889
890
891
892
893
894
895
896
897 public Object decode(MemoryImage dc) {
898 switch (type) {
899 case BOOL:
900 return dc.getBool(addr);
901
902 case CYCLE_TIMES:
903 return dc.getCycleTimes(addr, 8);
904
905 case HOLIDAY:
906 return dc.getHoliday(addr);
907
908 case ERROR_LIST_ENTRY:
909 return dc.getErrorListEntry(addr);
910
911 case TIME_STAMP_8:
912 return dc.getTimeStamp_8(addr);
913
914 case SHORT_HEX:
915 return dc.getShortHex(addr);
916
917 case BYTE:
918
919 if (Double.isNaN(factor)) {
920 return dc.getByte(addr);
921 } else {
922 final Byte byteValue = dc.getByte(addr);
923
924 return (byteValue == null) ? null : (byteValue * factor);
925 }
926
927 case UBYTE:
928
929 if (Double.isNaN(factor)) {
930 return dc.getUByte(addr);
931 } else {
932 final Short byteValue = dc.getUByte(addr);
933
934 return (byteValue == null) ? null : (byteValue * factor);
935 }
936
937 case SHORT:
938
939 if (Double.isNaN(factor)) {
940 return dc.getShort(addr);
941 } else {
942 final Short shortValue = dc.getShort(addr);
943
944 return (shortValue == null) ? null : (shortValue * factor);
945 }
946
947 case USHORT:
948
949 if (Double.isNaN(factor)) {
950 return dc.getUShort(addr);
951 } else {
952 final Integer shortValue = dc.getUShort(addr);
953
954 return (shortValue == null) ? null : (shortValue * factor);
955 }
956
957 case INTEGER:
958
959 if (Double.isNaN(factor)) {
960 return dc.getInteger(addr);
961 } else {
962 final Integer intValue = dc.getInteger(addr);
963
964 return (intValue == null) ? null : (intValue * factor);
965 }
966
967 default:
968 return "UNKNOWN DATATYPE ";
969 }
970 }
971
972
973
974
975
976
977
978
979
980 public void encode(MemoryImage dc, Object o) {
981 if (AccessType.RO.equals(access)) {
982 throw new RuntimeException(String.format("DataPoint %s not setable!", this.toString()));
983 }
984 if (o instanceof Boolean) {
985 encodeBoolean(dc, ((Boolean) o).booleanValue());
986 } else if (o instanceof Double) {
987 encodeDouble(dc, ((Double) o).doubleValue());
988 } else if (o instanceof Byte) {
989 encodeByte(dc, ((Byte) o).byteValue());
990 } else if (o instanceof Short) {
991 encodeShort(dc, ((Short) o).shortValue());
992 } else if (o instanceof Integer) {
993 encodeInteger(dc, ((Integer) o).intValue());
994 } else {
995 switch (type) {
996
997 case SHORT_HEX:
998
999 if (o instanceof Short) {
1000 dc.setShortHex(addr, (Short) o);
1001 } else {
1002 throw new IllegalArgumentException("DataType Short expected");
1003 }
1004
1005 break;
1006
1007 default:
1008 throw new IllegalArgumentException();
1009 }
1010 }
1011 }
1012
1013 private void encodeBoolean(MemoryImage dc, boolean b) {
1014 if (BOOL.equals(type)) {
1015 dc.setBool(addr, b);
1016 } else {
1017 throw new IllegalArgumentException("DataType boolean expected");
1018 }
1019 }
1020
1021 private void encodeByte(MemoryImage dc, byte b) {
1022 switch (type) {
1023 case BYTE:
1024 if (Double.isNaN(factor)) {
1025 dc.setByte(addr, b);
1026 } else {
1027 dc.setByte(addr, (byte) Math.round(b / factor));
1028 }
1029 break;
1030 case SHORT:
1031 encodeShort(dc, (short) b);
1032 break;
1033 case INTEGER:
1034 encodeInteger(dc, (int) b);
1035 break;
1036 default:
1037 throw new IllegalArgumentException("DataType byte expected");
1038 }
1039 }
1040
1041 private void encodeShort(MemoryImage dc, short s) {
1042 switch (type) {
1043 case BYTE:
1044 throw new IllegalArgumentException("DataType byte expected");
1045 case SHORT:
1046 if (Double.isNaN(factor)) {
1047 dc.setShort(addr, s);
1048 } else {
1049 dc.setShort(addr, (short) Math.round(s / factor));
1050 }
1051 break;
1052 case INTEGER:
1053 encodeInteger(dc, (int) s);
1054 break;
1055 default:
1056 throw new IllegalArgumentException("DataType short expected");
1057 }
1058 }
1059
1060 private void encodeInteger(MemoryImage dc, int i) {
1061 switch (type) {
1062 case BYTE:
1063 throw new IllegalArgumentException("DataType byte expected");
1064 case SHORT:
1065 throw new IllegalArgumentException("DataType short expected");
1066 case INTEGER:
1067 if (Double.isNaN(factor)) {
1068 dc.setInteger(addr, i);
1069 } else {
1070 dc.setInteger(addr, (int) Math.round(i / factor));
1071 }
1072 break;
1073 default:
1074 throw new IllegalArgumentException("DataType int expected");
1075 }
1076 }
1077
1078 private void encodeDouble(MemoryImage dc, double d) {
1079 switch (type) {
1080 case BYTE:
1081 if (Double.isNaN(factor)) {
1082 dc.setByte(addr, (byte) Math.round(d));
1083 } else {
1084 dc.setByte(addr, (byte) Math.round(d / factor));
1085 }
1086 break;
1087 case SHORT:
1088 if (Double.isNaN(factor)) {
1089 dc.setShort(addr, (short) Math.round(d));
1090 } else {
1091 dc.setShort(addr, (short) Math.round(d / factor));
1092 }
1093 break;
1094 case INTEGER:
1095 if (Double.isNaN(factor)) {
1096 dc.setInteger(addr, (int) Math.round(d));
1097 } else {
1098 dc.setInteger(addr, (int) Math.round(d / factor));
1099 }
1100 break;
1101 default:
1102 throw new IllegalArgumentException("DataType byte expected");
1103 }
1104 }
1105
1106
1107
1108
1109
1110
1111
1112 public static void printAddresses(StringBuilder sb, MemoryImage memImage) {
1113 for (int i = 0; i < 0x010000;) {
1114 DataPoint p = DataPoint.findByAddr(i);
1115
1116 if (p != null) {
1117 sb.append(String.format("\t@0x%04x %-8s=> ", p.getAddr(), p.getGroup().getLabel()));
1118 p.toString(memImage, sb);
1119 sb.append("\n");
1120 i += p.getLength();
1121 } else {
1122 if (DataPoint.isInKnownBlocks16(i, 1)) {
1123 sb.append(String.format("\t\t@0x%04x 0x%02x byte: %4d", i, memImage.getRawByte(i) & 0xff, memImage.getByte(i)));
1124
1125 if (isInKnownBlocks16(i, 2) && isUnknownRange(i, 2)) {
1126 sb.append(String.format(" short: %6d", memImage.getShort(i)));
1127 }
1128
1129 if (isInKnownBlocks16(i, 4) && isUnknownRange(i, 4)) {
1130 sb.append(String.format(" int: %11d", memImage.getInteger(i)));
1131 }
1132
1133 sb.append("\n");
1134 }
1135
1136 i++;
1137 }
1138 }
1139
1140 System.err.print(sb.toString());
1141 }
1142 }