@@ -293,6 +293,21 @@ void write_holding_register(struct node* const node, const uint16_t r, const uin
293
293
else
294
294
{ return ; }
295
295
}
296
+ else if (!strncmp (node -> info .name , "com.widgetlords.mio.6090" , 50 ))
297
+ {
298
+ regw .length = 1 ;
299
+
300
+ if (r >= 61 && r <= 66 )
301
+ {
302
+ snprintf (name , sizeof (name ), "ch%u.type" , r - 60 );
303
+
304
+ regw .type = WLMIO_REGISTER_VALUE_UINT8 ;
305
+
306
+ memcpy (regw .value , & v , 1 );
307
+ }
308
+ else
309
+ { return ; }
310
+ }
296
311
else
297
312
{ return ; }
298
313
@@ -999,6 +1014,47 @@ int8_t read_holding_register(const struct node* const node, const uint16_t reg,
999
1014
memcpy (& v , regr .value , 2 );
1000
1015
}
1001
1016
}
1017
+ else if (!strncmp (node -> info .name , "com.widgetlords.mio.6090" , 50 ))
1018
+ {
1019
+ if (reg >= 49 && reg <= 60 )
1020
+ {
1021
+ snprintf (name , sizeof (name ), "ch%u.input" , (reg - 49 ) / 2 + 1 );
1022
+ if (strcmp (cache .name , name ))
1023
+ {
1024
+ strncpy (cache .name , name , sizeof (cache .name ));
1025
+ cache .name [sizeof (cache .name ) - 1 ] = '\0' ;
1026
+ r = wlmio_register_access_sync (node -> id , cache .name , NULL , & cache .reg );
1027
+ if (r < 0 || cache .reg .type != WLMIO_REGISTER_VALUE_UINT32 )
1028
+ { return -1 ; }
1029
+ }
1030
+
1031
+ memcpy (& v , cache .reg .value + (~reg & 1 ) * 2 , 2 );
1032
+ }
1033
+ else if (reg >= 61 && reg <= 66 )
1034
+ {
1035
+ snprintf (name , sizeof (name ), "ch%u.type" , reg - 60 );
1036
+ r = wlmio_register_access_sync (node -> id , name , NULL , & regr );
1037
+ if (r < 0 || regr .type != WLMIO_REGISTER_VALUE_UINT8 )
1038
+ { return -1 ; }
1039
+ memcpy (& v , regr .value , 1 );
1040
+ }
1041
+ else if (reg >= 67 && reg <= 72 )
1042
+ {
1043
+ snprintf (name , sizeof (name ), "ch%u.counts" , reg - 66 );
1044
+ r = wlmio_register_access_sync (node -> id , name , NULL , & regr );
1045
+ if (r < 0 || regr .type != WLMIO_REGISTER_VALUE_UINT16 )
1046
+ { return -1 ; }
1047
+ memcpy (& v , regr .value , 2 );
1048
+ }
1049
+ else if (reg >= 73 && reg <= 75 )
1050
+ {
1051
+ snprintf (name , sizeof (name ), "t%u" , reg - 72 );
1052
+ r = wlmio_register_access_sync (node -> id , name , NULL , & regr );
1053
+ if (r < 0 || regr .type != WLMIO_REGISTER_VALUE_UINT16 )
1054
+ { return -1 ; }
1055
+ memcpy (& v , regr .value , 2 );
1056
+ }
1057
+ }
1002
1058
1003
1059
v = htons (v );
1004
1060
memcpy (dst , & v , 2 );
@@ -1206,6 +1262,8 @@ void info_callback(int32_t r, void* p)
1206
1262
{ node -> holding_registers_length += 4 ; }
1207
1263
else if (!strncmp (node -> info .name , "com.widgetlords.mio.6080" , 50 ))
1208
1264
{ node -> holding_registers_length += 41 ; }
1265
+ else if (!strncmp (node -> info .name , "com.widgetlords.mio.6090" , 50 ))
1266
+ { node -> holding_registers_length += 26 ; }
1209
1267
}
1210
1268
1211
1269
0 commit comments