@@ -293,6 +293,21 @@ void write_holding_register(struct node* const node, const uint16_t r, const uin
293293 else
294294 { return ; }
295295 }
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+ }
296311 else
297312 { return ; }
298313
@@ -999,6 +1014,47 @@ int8_t read_holding_register(const struct node* const node, const uint16_t reg,
9991014 memcpy (& v , regr .value , 2 );
10001015 }
10011016 }
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+ }
10021058
10031059 v = htons (v );
10041060 memcpy (dst , & v , 2 );
@@ -1206,6 +1262,8 @@ void info_callback(int32_t r, void* p)
12061262 { node -> holding_registers_length += 4 ; }
12071263 else if (!strncmp (node -> info .name , "com.widgetlords.mio.6080" , 50 ))
12081264 { node -> holding_registers_length += 41 ; }
1265+ else if (!strncmp (node -> info .name , "com.widgetlords.mio.6090" , 50 ))
1266+ { node -> holding_registers_length += 26 ; }
12091267}
12101268
12111269
0 commit comments