From 7c476ef9241f1f9e3c9eedbe777b73afa0c34fb7 Mon Sep 17 00:00:00 2001 From: Robert Johansson Date: Sat, 21 Apr 2012 07:17:25 +0900 Subject: [PATCH 1/2] updated mbus usb schematics from Tomas --- hardware/MBus.sch | 654 ++++++++++++++++++++++++++++++++++++++++++ hardware/MBus_USB.pdf | Bin 32266 -> 32167 bytes 2 files changed, 654 insertions(+) create mode 100644 hardware/MBus.sch diff --git a/hardware/MBus.sch b/hardware/MBus.sch new file mode 100644 index 0000000..bb96228 --- /dev/null +++ b/hardware/MBus.sch @@ -0,0 +1,654 @@ +EESchema Schematic File Version 2 date 07/12/2011 21:02:04 +LIBS:power +LIBS:device +LIBS:transistors +LIBS:conn +LIBS:linear +LIBS:regul +LIBS:74xx +LIBS:cmos4000 +LIBS:adc-dac +LIBS:memory +LIBS:xilinx +LIBS:special +LIBS:microcontrollers +LIBS:dsp +LIBS:microchip +LIBS:analog_switches +LIBS:motorola +LIBS:texas +LIBS:intel +LIBS:audio +LIBS:interface +LIBS:digital-audio +LIBS:philips +LIBS:display +LIBS:cypress +LIBS:siliconi +LIBS:opto +LIBS:atmel +LIBS:contrib +LIBS:valves +LIBS:MBus-cache +EELAYER 25 0 +EELAYER END +$Descr A4 11700 8267 +encoding utf-8 +Sheet 1 1 +Title "" +Date "7 dec 2011" +Rev "" +Comp "" +Comment1 "" +Comment2 "" +Comment3 "" +Comment4 "" +$EndDescr +Text Notes 5550 2900 0 60 ~ 0 +approx 34V +Text Notes 1300 1600 0 60 ~ 0 +Optional external\npower supply +Text Notes 9700 3150 0 60 ~ 0 +MBus +Text Label 8900 3250 0 60 ~ 0 +MBus- +Wire Wire Line + 9200 3250 8900 3250 +Wire Wire Line + 8900 3250 8900 3500 +Connection ~ 8700 3500 +Wire Wire Line + 8900 3500 8700 3500 +Connection ~ 7700 2900 +Wire Wire Line + 7700 2950 7700 2900 +Wire Wire Line + 5450 3050 5450 2900 +Wire Wire Line + 5450 2900 8900 2900 +Wire Wire Line + 8900 2900 8900 3050 +Wire Wire Line + 6050 4050 5750 4050 +Wire Wire Line + 5750 4050 5750 5050 +Wire Wire Line + 5750 5050 3500 5050 +Wire Wire Line + 3550 5300 3550 5250 +Wire Wire Line + 3550 5250 3500 5250 +Wire Wire Line + 2700 3200 2700 1800 +Wire Wire Line + 2150 1800 2250 1800 +Connection ~ 7700 3900 +Wire Wire Line + 7700 3950 7700 3450 +Wire Wire Line + 6600 4050 6550 4050 +Connection ~ 7300 3750 +Wire Wire Line + 6900 4250 6900 4450 +Wire Wire Line + 7700 4450 7700 4550 +Wire Wire Line + 8350 4150 8500 4150 +Connection ~ 8700 4000 +Wire Wire Line + 8700 4000 8500 4000 +Wire Wire Line + 8700 3950 8700 4050 +Connection ~ 5450 3900 +Wire Wire Line + 5400 3900 5450 3900 +Connection ~ 2700 2200 +Wire Wire Line + 2650 2200 2700 2200 +Wire Wire Line + 2400 2400 2400 2350 +Wire Wire Line + 2400 2350 2700 2350 +Wire Wire Line + 3775 2975 3775 2950 +Connection ~ 3775 3600 +Wire Wire Line + 3775 3575 3775 3600 +Wire Wire Line + 3550 3600 3850 3600 +Connection ~ 3600 3900 +Wire Wire Line + 3650 3900 3550 3900 +Connection ~ 4750 3900 +Wire Wire Line + 5450 4400 5450 4500 +Wire Wire Line + 3600 4450 3600 4500 +Connection ~ 1800 3200 +Wire Wire Line + 1800 3200 1950 3200 +Wire Wire Line + 3550 3500 3600 3500 +Wire Wire Line + 3600 3500 3600 3200 +Wire Wire Line + 3600 3200 3550 3200 +Wire Wire Line + 3050 3200 3000 3200 +Wire Wire Line + 3000 3200 3000 2950 +Wire Wire Line + 1800 3550 1800 2950 +Wire Wire Line + 1800 4300 1800 4350 +Wire Wire Line + 2700 3200 2450 3200 +Wire Wire Line + 1850 3850 1800 3850 +Wire Wire Line + 1800 3850 1800 3900 +Wire Wire Line + 2700 4200 2700 4350 +Connection ~ 3000 2950 +Wire Wire Line + 1800 3550 1850 3550 +Wire Wire Line + 3600 3900 3600 3950 +Wire Wire Line + 4750 4400 4750 4500 +Wire Wire Line + 4800 3900 4700 3900 +Wire Wire Line + 4200 3900 4150 3900 +Wire Wire Line + 3600 3800 3600 3750 +Wire Wire Line + 3600 3750 3550 3750 +Wire Wire Line + 4250 3600 4750 3600 +Wire Wire Line + 4750 3600 4750 4000 +Wire Wire Line + 1800 2950 3775 2950 +Wire Wire Line + 2400 2800 2400 2850 +Wire Wire Line + 2700 1800 2650 1800 +Connection ~ 2700 2350 +Wire Wire Line + 5450 3550 5450 4000 +Wire Wire Line + 8700 3550 8700 3450 +Wire Wire Line + 8700 4550 8700 4600 +Wire Wire Line + 8050 4350 8050 4550 +Wire Wire Line + 7300 4350 7300 4450 +Wire Wire Line + 7300 3450 7300 3850 +Wire Wire Line + 8050 3950 8050 3900 +Wire Wire Line + 8400 3750 6900 3750 +Wire Wire Line + 6900 3750 6900 3850 +Wire Wire Line + 8500 4000 8500 4150 +Wire Wire Line + 8050 3900 7500 3900 +Wire Wire Line + 7500 3900 7500 4650 +Wire Wire Line + 7500 4650 6550 4650 +Wire Wire Line + 2150 2000 2200 2000 +Wire Wire Line + 2200 2000 2200 2050 +Wire Wire Line + 3500 4950 3550 4950 +Wire Wire Line + 3550 4950 3550 4750 +Wire Wire Line + 3550 4750 3500 4750 +Wire Wire Line + 2900 4750 1450 4750 +Wire Wire Line + 1450 4750 1450 2200 +Wire Wire Line + 1450 2200 2250 2200 +Wire Wire Line + 3500 5150 5950 5150 +Wire Wire Line + 5950 5150 5950 4650 +Wire Wire Line + 5950 4650 6050 4650 +Wire Wire Line + 7300 2950 7300 2900 +Connection ~ 7300 2900 +Wire Wire Line + 8700 2950 8700 2900 +Connection ~ 8700 2900 +Wire Wire Line + 8900 3050 9200 3050 +Text Label 8900 3050 0 60 ~ 0 +MBus+ +Text Label 3550 5150 0 60 ~ 0 +RxD (receive from MBus) +Text Label 3550 5050 0 60 ~ 0 +TxD (send to MBus) +Text Label 3550 5250 0 60 ~ 0 +USB GND +Text Label 3550 4950 0 60 ~ 0 +USB +5V +Text Notes 2000 5050 0 60 ~ 0 +To USB serial adapter\n(e.g. PL2303,\nwith 3.3V/5V levels) +$Comp +L CONN_2 P1 +U 1 1 4EAA8D88 +P 1800 1900 +F 0 "P1" V 1750 1900 40 0000 C CNN +F 1 "CONN_2" V 1850 1900 40 0000 C CNN + 1 1800 1900 + -1 0 0 -1 +$EndComp +$Comp +L CONN_2 P3 +U 1 1 4EAA8D6F +P 9550 3150 +F 0 "P3" V 9500 3150 40 0000 C CNN +F 1 "CONN_2" V 9600 3150 40 0000 C CNN + 1 9550 3150 + 1 0 0 -1 +$EndComp +$Comp +L GND #PWR2 +U 1 1 4EAA8D62 +P 2200 2050 +F 0 "#PWR2" H 2200 2050 30 0001 C CNN +F 1 "GND" H 2200 1980 30 0001 C CNN + 1 2200 2050 + 1 0 0 -1 +$EndComp +$Comp +L GND #PWR5 +U 1 1 4EAA8D58 +P 3550 5300 +F 0 "#PWR5" H 3550 5300 30 0001 C CNN +F 1 "GND" H 3550 5230 30 0001 C CNN + 1 3550 5300 + 1 0 0 -1 +$EndComp +$Comp +L INDUCTOR L1 +U 1 1 4EAA8D47 +P 3200 4750 +F 0 "L1" V 3150 4750 40 0000 C CNN +F 1 "INDUCTOR" V 3300 4750 40 0000 C CNN + 1 3200 4750 + 0 -1 -1 0 +$EndComp +$Comp +L CONN_4 P2 +U 1 1 4EAA8D01 +P 3150 5100 +F 0 "P2" V 3100 5100 50 0000 C CNN +F 1 "CONN_4" V 3200 5100 50 0000 C CNN + 1 3150 5100 + -1 0 0 -1 +$EndComp +$Comp +L GND #PWR11 +U 1 1 4EAA8A6A +P 7300 4450 +F 0 "#PWR11" H 7300 4450 30 0001 C CNN +F 1 "GND" H 7300 4380 30 0001 C CNN + 1 7300 4450 + 1 0 0 -1 +$EndComp +$Comp +L GND #PWR12 +U 1 1 4EAA8A65 +P 7700 4550 +F 0 "#PWR12" H 7700 4550 30 0001 C CNN +F 1 "GND" H 7700 4480 30 0001 C CNN + 1 7700 4550 + 1 0 0 -1 +$EndComp +$Comp +L GND #PWR10 +U 1 1 4EAA8A62 +P 6900 4450 +F 0 "#PWR10" H 6900 4450 30 0001 C CNN +F 1 "GND" H 6900 4380 30 0001 C CNN + 1 6900 4450 + 1 0 0 -1 +$EndComp +$Comp +L GND #PWR13 +U 1 1 4EAA8A5F +P 8050 4550 +F 0 "#PWR13" H 8050 4550 30 0001 C CNN +F 1 "GND" H 8050 4480 30 0001 C CNN + 1 8050 4550 + 1 0 0 -1 +$EndComp +$Comp +L GND #PWR14 +U 1 1 4EAA8A57 +P 8700 4600 +F 0 "#PWR14" H 8700 4600 30 0001 C CNN +F 1 "GND" H 8700 4530 30 0001 C CNN + 1 8700 4600 + 1 0 0 -1 +$EndComp +$Comp +L R R7 +U 1 1 4EAA8A32 +P 6300 4650 +F 0 "R7" V 6380 4650 50 0000 C CNN +F 1 "1k" V 6300 4650 50 0000 C CNN + 1 6300 4650 + 0 -1 -1 0 +$EndComp +$Comp +L R R11 +U 1 1 4EAA8A2E +P 7700 4200 +F 0 "R11" V 7780 4200 50 0000 C CNN +F 1 "3k3" V 7700 4200 50 0000 C CNN + 1 7700 4200 + 1 0 0 -1 +$EndComp +$Comp +L R R9 +U 1 1 4EAA8A2B +P 7300 4100 +F 0 "R9" V 7380 4100 50 0000 C CNN +F 1 "22k" V 7300 4100 50 0000 C CNN + 1 7300 4100 + 1 0 0 -1 +$EndComp +$Comp +L R R6 +U 1 1 4EAA8A29 +P 6300 4050 +F 0 "R6" V 6380 4050 50 0000 C CNN +F 1 "1k" V 6300 4050 50 0000 C CNN + 1 6300 4050 + 0 -1 -1 0 +$EndComp +$Comp +L R R13 +U 1 1 4EAA8A22 +P 8700 4300 +F 0 "R13" V 8780 4300 50 0000 C CNN +F 1 "82" V 8700 4300 50 0000 C CNN + 1 8700 4300 + 1 0 0 -1 +$EndComp +$Comp +L R R8 +U 1 1 4EAA8A1F +P 7300 3200 +F 0 "R8" V 7380 3200 50 0000 C CNN +F 1 "39k" V 7300 3200 50 0000 C CNN + 1 7300 3200 + 1 0 0 -1 +$EndComp +$Comp +L R R10 +U 1 1 4EAA8A1D +P 7700 3200 +F 0 "R10" V 7780 3200 50 0000 C CNN +F 1 "33k" V 7700 3200 50 0000 C CNN + 1 7700 3200 + 1 0 0 -1 +$EndComp +$Comp +L R R12 +U 1 1 4EAA8A07 +P 8700 3200 +F 0 "R12" V 8780 3200 50 0000 C CNN +F 1 "220k" V 8700 3200 50 0000 C CNN + 1 8700 3200 + 1 0 0 -1 +$EndComp +$Comp +L BC237 Q2 +U 1 1 4EAA89E3 +P 8150 4150 +F 0 "Q2" H 8350 4050 50 0000 C CNN +F 1 "BC337" H 8400 4300 50 0000 C CNN +F 2 "TO92-EBC" H 8340 4150 30 0001 C CNN + 1 8150 4150 + -1 0 0 -1 +$EndComp +$Comp +L DIODE D1 +U 1 1 4EAA899B +P 2450 1800 +F 0 "D1" H 2450 1900 40 0000 C CNN +F 1 "DIODE" H 2450 1700 40 0000 C CNN + 1 2450 1800 + 1 0 0 -1 +$EndComp +$Comp +L GND #PWR3 +U 1 1 4EAA895D +P 2400 2850 +F 0 "#PWR3" H 2400 2850 30 0001 C CNN +F 1 "GND" H 2400 2780 30 0001 C CNN + 1 2400 2850 + 1 0 0 -1 +$EndComp +$Comp +L GND #PWR9 +U 1 1 4EAA88DA +P 5450 4500 +F 0 "#PWR9" H 5450 4500 30 0001 C CNN +F 1 "GND" H 5450 4430 30 0001 C CNN + 1 5450 4500 + 1 0 0 -1 +$EndComp +$Comp +L GND #PWR8 +U 1 1 4EAA88D5 +P 4750 4500 +F 0 "#PWR8" H 4750 4500 30 0001 C CNN +F 1 "GND" H 4750 4430 30 0001 C CNN + 1 4750 4500 + 1 0 0 -1 +$EndComp +$Comp +L GND #PWR6 +U 1 1 4EAA888F +P 3600 3800 +F 0 "#PWR6" H 3600 3800 30 0001 C CNN +F 1 "GND" H 3600 3730 30 0001 C CNN + 1 3600 3800 + 1 0 0 -1 +$EndComp +$Comp +L DIODESCH D3 +U 1 1 4EAA8633 +P 4050 3600 +F 0 "D3" H 4050 3700 40 0000 C CNN +F 1 "DIODESCH" H 4050 3500 40 0000 C CNN + 1 4050 3600 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D2 +U 1 1 4EAA862B +P 2450 2200 +F 0 "D2" H 2450 2300 40 0000 C CNN +F 1 "DIODE" H 2450 2100 40 0000 C CNN + 1 2450 2200 + 1 0 0 -1 +$EndComp +$Comp +L INDUCTOR L3 +U 1 1 4EAA8616 +P 5100 3900 +F 0 "L3" V 5050 3900 40 0000 C CNN +F 1 "INDUCTOR" V 5200 3900 40 0000 C CNN + 1 5100 3900 + 0 -1 -1 0 +$EndComp +$Comp +L INDUCTOR L2 +U 1 1 4EAA860E +P 3775 3275 +F 0 "L2" V 3725 3275 40 0000 C CNN +F 1 "150uH" V 3875 3275 40 0000 C CNN + 1 3775 3275 + 1 0 0 -1 +$EndComp +$Comp +L FUSE F1 +U 1 1 4EAA8605 +P 5450 3300 +F 0 "F1" H 5550 3350 40 0000 C CNN +F 1 "FUSE" H 5350 3250 40 0000 C CNN + 1 5450 3300 + 0 -1 -1 0 +$EndComp +$Comp +L CP1 C3 +U 1 1 4EAA85ED +P 4750 4200 +F 0 "C3" H 4800 4300 50 0000 L CNN +F 1 "47u" H 4800 4100 50 0000 L CNN + 1 4750 4200 + 1 0 0 -1 +$EndComp +$Comp +L CP1 C4 +U 1 1 4EAA85E6 +P 5450 4200 +F 0 "C4" H 5500 4300 50 0000 L CNN +F 1 "47u" H 5500 4100 50 0000 L CNN + 1 5450 4200 + 1 0 0 -1 +$EndComp +$Comp +L CP1 C2 +U 1 1 4EAA85E2 +P 2400 2600 +F 0 "C2" H 2450 2700 50 0000 L CNN +F 1 "22u / 50V" H 2450 2500 50 0000 L CNN + 1 2400 2600 + 1 0 0 -1 +$EndComp +$Comp +L R R2 +U 1 1 4EAA85C4 +P 3300 3200 +F 0 "R2" V 3380 3200 50 0000 C CNN +F 1 "180" V 3300 3200 50 0000 C CNN + 1 3300 3200 + 0 -1 -1 0 +$EndComp +$Comp +L R R1 +U 1 1 4EAA85BA +P 2200 3200 +F 0 "R1" V 2280 3200 50 0000 C CNN +F 1 "0.47" V 2200 3200 50 0000 C CNN + 1 2200 3200 + 0 1 1 0 +$EndComp +$Comp +L GND #PWR7 +U 1 1 4EAA85A1 +P 3600 4500 +F 0 "#PWR7" H 3600 4500 30 0001 C CNN +F 1 "GND" H 3600 4430 30 0001 C CNN + 1 3600 4500 + 1 0 0 -1 +$EndComp +$Comp +L GND #PWR1 +U 1 1 4EAA8599 +P 1800 4350 +F 0 "#PWR1" H 1800 4350 30 0001 C CNN +F 1 "GND" H 1800 4280 30 0001 C CNN + 1 1800 4350 + 1 0 0 -1 +$EndComp +$Comp +L C C1 +U 1 1 4EAA8585 +P 1800 4100 +F 0 "C1" H 1850 4200 50 0000 L CNN +F 1 "330p" H 1850 4000 50 0000 L CNN + 1 1800 4100 + 1 0 0 -1 +$EndComp +$Comp +L R R5 +U 1 1 4EAA8565 +P 4450 3900 +F 0 "R5" V 4530 3900 50 0000 C CNN +F 1 "22k" V 4450 3900 50 0000 C CNN + 1 4450 3900 + 0 1 1 0 +$EndComp +$Comp +L R R4 +U 1 1 4EAA855B +P 3900 3900 +F 0 "R4" V 3980 3900 50 0000 C CNN +F 1 "100k" V 3900 3900 50 0000 C CNN + 1 3900 3900 + 0 1 1 0 +$EndComp +$Comp +L R R3 +U 1 1 4EAA8543 +P 3600 4200 +F 0 "R3" V 3680 4200 50 0000 C CNN +F 1 "4k7" V 3600 4200 50 0000 C CNN + 1 3600 4200 + 1 0 0 -1 +$EndComp +$Comp +L GND #PWR4 +U 1 1 4EAA84C7 +P 2700 4350 +F 0 "#PWR4" H 2700 4350 30 0001 C CNN +F 1 "GND" H 2700 4280 30 0001 C CNN + 1 2700 4350 + 1 0 0 -1 +$EndComp +$Comp +L MC34063 U1 +U 1 1 4EAA8411 +P 2700 3700 +F 0 "U1" H 2850 4050 60 0000 L CNN +F 1 "MC34063" H 2800 3350 60 0000 L CNN + 1 2700 3700 + 1 0 0 -1 +$EndComp +$Comp +L BC307 Q3 +U 1 1 4EAA83EE +P 8600 3750 +F 0 "Q3" H 8800 3650 50 0000 C CNN +F 1 "BD136" H 8850 3900 50 0000 C CNN + 1 8600 3750 + 1 0 0 1 +$EndComp +$Comp +L BC237 Q1 +U 1 1 4EAA83E1 +P 6800 4050 +F 0 "Q1" H 7000 3950 50 0000 C CNN +F 1 "BC337" H 7050 4200 50 0000 C CNN +F 2 "TO92-EBC" H 6990 4050 30 0001 C CNN + 1 6800 4050 + 1 0 0 -1 +$EndComp +$EndSCHEMATC + diff --git a/hardware/MBus_USB.pdf b/hardware/MBus_USB.pdf index 0883eeca9d3645df29e609cecfc1553b57629464..2b6e48b188931f6c0a30bc7ebd60338a8ef184c0 100644 GIT binary patch delta 6735 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 D3B+yw delta 6768 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 From 281394c092499b4eda27f883ea9d47b71a0e9616 Mon Sep 17 00:00:00 2001 From: Robert Johansson Date: Sat, 21 Apr 2012 08:34:01 +0900 Subject: [PATCH 2/2] attempt to unify the XML output for sequences of multi-telegram frames (single XML document, global record counts, no repeat of frame headers) --- bin/mbus-tcp-request-data-multi-reply.c | 19 +-- mbus/mbus-protocol.c | 177 ++++++++++++++++++++---- mbus/mbus-protocol.h | 1 + 3 files changed, 151 insertions(+), 46 deletions(-) diff --git a/bin/mbus-tcp-request-data-multi-reply.c b/bin/mbus-tcp-request-data-multi-reply.c index bdbc0cc..fee2d2a 100644 --- a/bin/mbus-tcp-request-data-multi-reply.c +++ b/bin/mbus-tcp-request-data-multi-reply.c @@ -112,24 +112,9 @@ main(int argc, char **argv) } // - // here, figure out how the list of frames should be merged into a single - // XML document, but for now let's just dump all frames as independent XMLs + // generate XML and print to standard output // - for (reply_iter = &reply; reply_iter; reply_iter = reply_iter->next) - { - if (mbus_frame_data_parse(reply_iter, &reply_data) == -1) - { - fprintf(stderr, "M-bus data parse error.\n"); - return 1; - } - printf("%s", mbus_frame_data_xml(&reply_data)); - - // manual free, all records in the list - if (reply_data.data_var.record) - { - mbus_data_record_free(reply_data.data_var.record); - } - } + printf("%s", mbus_frame_xml(&reply)); mbus_disconnect(handle); return 0; diff --git a/mbus/mbus-protocol.c b/mbus/mbus-protocol.c index c6916f9..ba0183b 100644 --- a/mbus/mbus-protocol.c +++ b/mbus/mbus-protocol.c @@ -2877,6 +2877,62 @@ mbus_data_variable_header_xml(mbus_data_variable_header *header) return ""; } +//------------------------------------------------------------------------------ +/// Generate XML for a single variable-length data record +//------------------------------------------------------------------------------ +char * +mbus_data_variable_record_xml(mbus_data_record *record, int record_cnt, int frame_cnt) +{ + static char buff[8192]; + char str_encoded[768]; + size_t len = 0; + int val; + + if (record) + { + if (frame_cnt >= 0) + { + len += snprintf(&buff[len], sizeof(buff) - len, + " \n", + record_cnt, frame_cnt); + } + else + { + len += snprintf(&buff[len], sizeof(buff) - len, + " \n", record_cnt); + } + + if (record->drh.dib.dif == 0x0F) // MBUS_DIB_DIF_VENDOR_SPECIFIC + { + len += snprintf(&buff[len], sizeof(buff) - len, + " Manufacturer specific\n"); + } + else if (record->drh.dib.dif == 0x1F) + { + len += snprintf(&buff[len], sizeof(buff) - len, + " More records follow\n"); + } + else + { + mbus_str_xml_encode(str_encoded, mbus_data_record_function(record), sizeof(str_encoded)); + len += snprintf(&buff[len], sizeof(buff) - len, + " %s\n", str_encoded); + + mbus_str_xml_encode(str_encoded, mbus_data_record_unit(record), sizeof(str_encoded)); + len += snprintf(&buff[len], sizeof(buff) - len, + " %s\n", str_encoded); + } + + mbus_str_xml_encode(str_encoded, mbus_data_record_value(record), sizeof(str_encoded)); + len += snprintf(&buff[len], sizeof(buff) - len, " %s\n", str_encoded); + len += snprintf(&buff[len], sizeof(buff) - len, " \n\n"); + + return buff; + } + + return ""; +} + //------------------------------------------------------------------------------ /// Generate XML for variable-length data //------------------------------------------------------------------------------ @@ -2887,40 +2943,20 @@ mbus_data_variable_xml(mbus_data_variable *data) static char buff[8192]; char str_encoded[768]; size_t len = 0; - size_t i; + int i; if (data) { len += snprintf(&buff[len], sizeof(buff) - len, "\n\n"); - len += snprintf(&buff[len], sizeof(buff) - len, "%s", mbus_data_variable_header_xml(&(data->header))); + len += snprintf(&buff[len], sizeof(buff) - len, "%s", + mbus_data_variable_header_xml(&(data->header))); for (record = data->record, i = 0; record; record = record->next, i++) { - len += snprintf(&buff[len], sizeof(buff) - len, " \n", i); - - if (record->drh.dib.dif == 0x0F) //MBUS_DIB_DIF_VENDOR_SPECIFIC) - { - len += snprintf(&buff[len], sizeof(buff) - len, " Manufacturer specific\n"); - } - else if (record->drh.dib.dif == 0x1F) - { - len += snprintf(&buff[len], sizeof(buff) - len, " More records follow\n"); - } - else - { - mbus_str_xml_encode(str_encoded, mbus_data_record_function(record), sizeof(str_encoded)); - len += snprintf(&buff[len], sizeof(buff) - len, " %s\n", str_encoded); - - mbus_str_xml_encode(str_encoded, mbus_data_record_unit(record), sizeof(str_encoded)); - len += snprintf(&buff[len], sizeof(buff) - len, " %s\n", str_encoded); - } - - mbus_str_xml_encode(str_encoded, mbus_data_record_value(record), sizeof(str_encoded)); - len += snprintf(&buff[len], sizeof(buff) - len, " %s\n", str_encoded); - len += snprintf(&buff[len], sizeof(buff) - len, " \n\n"); - } - + len += snprintf(&buff[len], sizeof(buff) - len, "%s", + mbus_data_variable_record_xml(record, i, -1)); + } len += snprintf(&buff[len], sizeof(buff) - len, "\n"); return buff; @@ -2929,9 +2965,9 @@ mbus_data_variable_xml(mbus_data_variable *data) return ""; } -/// +//------------------------------------------------------------------------------ /// Generate XML representation of fixed-length frame. -/// +//------------------------------------------------------------------------------ char * mbus_data_fixed_xml(mbus_data_fixed *data) { @@ -2996,7 +3032,7 @@ mbus_data_fixed_xml(mbus_data_fixed *data) } //------------------------------------------------------------------------------ -/// Return a string containing an XML representation of the M-BUS frame. +/// Return a string containing an XML representation of the M-BUS frame data. //------------------------------------------------------------------------------ char * mbus_frame_data_xml(mbus_frame_data *data) @@ -3018,6 +3054,89 @@ mbus_frame_data_xml(mbus_frame_data *data) } +//------------------------------------------------------------------------------ +/// Return an XML representation of the M-BUS frame. +//------------------------------------------------------------------------------ +char * +mbus_frame_xml(mbus_frame *frame) +{ + mbus_frame_data frame_data; + mbus_frame *iter; + + mbus_data_record *record; + static char buff[8192]; + + size_t len = 0; + int record_cnt = 0, frame_cnt; + + if (frame) + { + if (frame->type == MBUS_DATA_TYPE_FIXED) + { + // + // generate XML for fixed data + // + if (mbus_frame_data_parse(iter, &frame_data) == -1) + { + mbus_error_str_set("M-bus data parse error."); + return NULL; + } + return mbus_data_fixed_xml(&(frame_data.data_fix)); + } + + if (frame->type == MBUS_DATA_TYPE_VARIABLE) + { + // + // generate XML for a sequence of variable data frames + // + + // include frame counter in XML output if more than one frame + // is available (frame_cnt = -1 => not included in output) + frame_cnt = (frame->next == NULL) ? -1 : 0; + + len += snprintf(&buff[len], sizeof(buff) - len, "\n\n"); + + for (iter = frame; iter; iter = iter->next, frame_cnt++) + { + if (mbus_frame_data_parse(iter, &frame_data) == -1) + { + mbus_error_str_set("M-bus variable data parse error."); + return NULL; + } + + // only print the header info for the first frame (should be + // the same for each frame in a sequence of a multi-telegram + // transfer. + if (frame_cnt < 1) + { + len += snprintf(&buff[len], sizeof(buff) - len, "%s", + mbus_data_variable_header_xml(&(frame_data.data_var.header))); + } + + // loop through all records in the current frame, using a global + // record count as record ID in the XML output + for (record = frame_data.data_var.record; record; record = record->next, record_cnt++) + { + len += snprintf(&buff[len], sizeof(buff) - len, "%s", + mbus_data_variable_record_xml(record, record_cnt, frame_cnt)); + } + + // free all records in the list + if (frame_data.data_var.record) + { + mbus_data_record_free(frame_data.data_var.record); + } + } + + len += snprintf(&buff[len], sizeof(buff) - len, "\n"); + + return buff; + } + } + + return ""; +} + //------------------------------------------------------------------------------ /// Allocate and initialize a new frame data structure diff --git a/mbus/mbus-protocol.h b/mbus/mbus-protocol.h index d0596da..1f0a685 100644 --- a/mbus/mbus-protocol.h +++ b/mbus/mbus-protocol.h @@ -492,6 +492,7 @@ char *mbus_frame_data_xml(mbus_frame_data *data); char *mbus_data_variable_header_xml(mbus_data_variable_header *header); +char *mbus_frame_xml(mbus_frame *frame); // // Debug/dump