mqtt/mqtt_template.c
changeset 4020 205d5379b35e
parent 4019 ad2b84071881
child 4021 07504d4c40ee
--- a/mqtt/mqtt_template.c	Fri Sep 20 15:30:22 2024 +0200
+++ b/mqtt/mqtt_template.c	Wed Sep 25 11:10:33 2024 +0200
@@ -71,6 +71,9 @@
 
 #define printf_fmt_SIMPLE(C_type, C_name, name, _A) #name " : " printf_fmt_##C_type
 #define printf_fmt_OBJECT(C_type, C_name, name, _A) #name " : {{ " TYPE_##C_type(printf_fmt, _A) " }}"
+#define printf_fmt_ARRAY(C_type, C_name, name, _A) #name " : [ " TYPE_##C_type(printf_fmt, _A) " ]"
+#define printf_fmt_ARRAY_SIMPLE(C_type, index, _A) printf_fmt_##C_type
+#define printf_fmt_ARRAY_OBJECT(C_type, index, _A) "{{ " TYPE_##C_type(printf_fmt, _A) " }}"
 
 #define scanf_fmt_BOOL   "%B"
 #define scanf_fmt_SINT   "%hhd"
@@ -89,42 +92,51 @@
 
 #define scanf_fmt_SIMPLE(C_type, C_name, name, _A) #name " : " scanf_fmt_##C_type
 #define scanf_fmt_OBJECT(C_type, C_name, name, _A) #name " : {{ " TYPE_##C_type(scanf_fmt, _A) " }}"
-
-#define   scanf_arg_BOOL(name, data_ptr) &data_ptr->name
-#define   scanf_arg_SINT(name, data_ptr) &data_ptr->name
-#define  scanf_arg_USINT(name, data_ptr) &data_ptr->name
-#define    scanf_arg_INT(name, data_ptr) &data_ptr->name
-#define   scanf_arg_UINT(name, data_ptr) &data_ptr->name
-#define   scanf_arg_DINT(name, data_ptr) &data_ptr->name
-#define  scanf_arg_UDINT(name, data_ptr) &data_ptr->name
-#define   scanf_arg_LINT(name, data_ptr) &data_ptr->name
-#define  scanf_arg_ULINT(name, data_ptr) &data_ptr->name
-#define   scanf_arg_REAL(name, data_ptr) &data_ptr->name
-#define  scanf_arg_LREAL(name, data_ptr) &data_ptr->name
-#define scanf_arg_STRING(name, data_ptr) scan_string, &data_ptr->name 
+#define scanf_fmt_ARRAY(C_type, C_name, name, _A) #name " : [ " TYPE_##C_type(scanf_fmt, _A) " ]"
+#define scanf_fmt_ARRAY_SIMPLE(C_type, index, _A) scanf_fmt_##C_type
+#define scanf_fmt_ARRAY_OBJECT(C_type, index, _A) "{{ " TYPE_##C_type(scanf_fmt, _A) " }}"
+
+#define   scanf_arg_BOOL(arg) arg
+#define   scanf_arg_SINT(arg) arg
+#define  scanf_arg_USINT(arg) arg
+#define    scanf_arg_INT(arg) arg
+#define   scanf_arg_UINT(arg) arg
+#define   scanf_arg_DINT(arg) arg
+#define  scanf_arg_UDINT(arg) arg
+#define   scanf_arg_LINT(arg) arg
+#define  scanf_arg_ULINT(arg) arg
+#define   scanf_arg_REAL(arg) arg
+#define  scanf_arg_LREAL(arg) arg
+#define scanf_arg_STRING(arg) scan_string, arg
 
 #define scanf_args_separator ,
 
-#define scanf_args_SIMPLE(C_type, C_name, name, data_ptr) scanf_arg_##C_type(C_name, data_ptr)
+#define scanf_args_SIMPLE(C_type, C_name, name, data_ptr) scanf_arg_##C_type(&data_ptr->C_name)
 #define scanf_args_OBJECT(C_type, C_name, name, data_ptr) TYPE_##C_type(scanf_args, (&data_ptr->C_name))
-
-#define   printf_arg_BOOL(name, data_ptr) data_ptr->name
-#define   printf_arg_SINT(name, data_ptr) data_ptr->name
-#define  printf_arg_USINT(name, data_ptr) data_ptr->name
-#define    printf_arg_INT(name, data_ptr) data_ptr->name
-#define   printf_arg_UINT(name, data_ptr) data_ptr->name
-#define   printf_arg_DINT(name, data_ptr) data_ptr->name
-#define  printf_arg_UDINT(name, data_ptr) data_ptr->name
-#define   printf_arg_LINT(name, data_ptr) data_ptr->name
-#define  printf_arg_ULINT(name, data_ptr) data_ptr->name
-#define   printf_arg_REAL(name, data_ptr) data_ptr->name
-#define  printf_arg_LREAL(name, data_ptr) data_ptr->name
-#define printf_arg_STRING(name, data_ptr) data_ptr->name.len, data_ptr->name.body 
+#define scanf_args_ARRAY(C_type, C_name, name, data_ptr) TYPE_##C_type(scanf_args, data_ptr->C_name.table)
+#define scanf_args_ARRAY_SIMPLE(C_type, index, data_ptr) scanf_arg_##C_type(&data_ptr[index])
+#define scanf_args_ARRAY_OBJECT(C_type, index, data_ptr) TYPE_##C_type(scanf_args, (&data_ptr[index]))
+
+#define   printf_arg_BOOL(arg) arg
+#define   printf_arg_SINT(arg) arg
+#define  printf_arg_USINT(arg) arg
+#define    printf_arg_INT(arg) arg
+#define   printf_arg_UINT(arg) arg
+#define   printf_arg_DINT(arg) arg
+#define  printf_arg_UDINT(arg) arg
+#define   printf_arg_LINT(arg) arg
+#define  printf_arg_ULINT(arg) arg
+#define   printf_arg_REAL(arg) arg
+#define  printf_arg_LREAL(arg) arg
+#define printf_arg_STRING(arg) arg.len, arg.body 
 
 #define printf_args_separator ,
 
-#define printf_args_SIMPLE(C_type, C_name, name, data_ptr) printf_arg_##C_type(C_name, data_ptr)
+#define printf_args_SIMPLE(C_type, C_name, name, data_ptr) printf_arg_##C_type(data_ptr->C_name)
 #define printf_args_OBJECT(C_type, C_name, name, data_ptr) TYPE_##C_type(printf_args, (&data_ptr->C_name))
+#define printf_args_ARRAY(C_type, C_name, name, data_ptr) TYPE_##C_type(printf_args, (&data_ptr->C_name.table))
+#define printf_args_ARRAY_SIMPLE(C_type, index, data_ptr) printf_arg_##C_type(data_ptr[index])
+#define printf_args_ARRAY_OBJECT(C_type, index, data_ptr) TYPE_##C_type(printf_args, (data_ptr[index]))
 
 static void scan_string(const char *str, int len, void *user_data) {{
 	IEC_STRING *iecstr = (IEC_STRING*)user_data;