pyxcp 0.22.24__cp311-cp311-win_amd64.whl → 0.22.26__cp311-cp311-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pyxcp might be problematic. Click here for more details.
- pyxcp/__init__.py +1 -1
- pyxcp/config/__init__.py +3 -1
- pyxcp/cpp_ext/cpp_ext.cp310-win_amd64.pyd +0 -0
- pyxcp/cpp_ext/cpp_ext.cp311-win_amd64.pyd +0 -0
- pyxcp/cpp_ext/cpp_ext.cp38-win_amd64.pyd +0 -0
- pyxcp/cpp_ext/cpp_ext.cp39-win_amd64.pyd +0 -0
- pyxcp/daq_stim/__init__.py +1 -1
- pyxcp/daq_stim/stim.cp310-win_amd64.pyd +0 -0
- pyxcp/daq_stim/stim.cp311-win_amd64.pyd +0 -0
- pyxcp/daq_stim/stim.cp38-win_amd64.pyd +0 -0
- pyxcp/daq_stim/stim.cp39-win_amd64.pyd +0 -0
- pyxcp/daq_stim/stim_wrapper.cpp +3 -1
- pyxcp/examples/run_daq.py +0 -2
- pyxcp/master/errorhandler.py +7 -1
- pyxcp/master/master.py +41 -40
- pyxcp/recorder/__init__.py +7 -8
- pyxcp/recorder/converter/__init__.py +416 -2
- pyxcp/recorder/rekorder.cp310-win_amd64.pyd +0 -0
- pyxcp/recorder/rekorder.cp311-win_amd64.pyd +0 -0
- pyxcp/recorder/rekorder.cp38-win_amd64.pyd +0 -0
- pyxcp/recorder/rekorder.cp39-win_amd64.pyd +0 -0
- pyxcp/types.py +7 -1
- {pyxcp-0.22.24.dist-info → pyxcp-0.22.26.dist-info}/METADATA +1 -1
- {pyxcp-0.22.24.dist-info → pyxcp-0.22.26.dist-info}/RECORD +27 -32
- pyxcp/examples/ex_arrow.py +0 -109
- pyxcp/examples/ex_csv.py +0 -85
- pyxcp/examples/ex_excel.py +0 -95
- pyxcp/examples/ex_mdf.py +0 -124
- pyxcp/examples/ex_sqlite.py +0 -128
- {pyxcp-0.22.24.dist-info → pyxcp-0.22.26.dist-info}/LICENSE +0 -0
- {pyxcp-0.22.24.dist-info → pyxcp-0.22.26.dist-info}/WHEEL +0 -0
- {pyxcp-0.22.24.dist-info → pyxcp-0.22.26.dist-info}/entry_points.txt +0 -0
pyxcp/types.py
CHANGED
|
@@ -491,9 +491,15 @@ SetCalPageMode = BitStruct(
|
|
|
491
491
|
"ecu" / Flag,
|
|
492
492
|
)
|
|
493
493
|
|
|
494
|
+
PagProperties = BitStruct(
|
|
495
|
+
Padding(7),
|
|
496
|
+
"freezeSupported" / Flag,
|
|
497
|
+
)
|
|
498
|
+
|
|
499
|
+
|
|
494
500
|
GetPagProcessorInfoResponse = Struct(
|
|
495
501
|
"maxSegments" / Int8ul,
|
|
496
|
-
"pagProperties" /
|
|
502
|
+
"pagProperties" / PagProperties,
|
|
497
503
|
)
|
|
498
504
|
|
|
499
505
|
GetSegmentInfoMode0Response = Struct(
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
pyxcp/__init__.py,sha256=
|
|
1
|
+
pyxcp/__init__.py,sha256=RJc-8q7P408Jmlwt5OMDoDop9h53YvraQnGC0mdVmtY,548
|
|
2
2
|
pyxcp/aml/EtasCANMonitoring.a2l,sha256=EJYwe3Z3H24vyWAa6lUgcdKnQY8pwFxjyCN6ZU1ST8w,1509
|
|
3
3
|
pyxcp/aml/EtasCANMonitoring.aml,sha256=xl0DdyeiIaLW0mmmJNAyJS0CQdOLSxt9dxfgrdSlU8Y,2405
|
|
4
4
|
pyxcp/aml/ifdata_CAN.a2l,sha256=NCUnCUEEgRbZYSLGtUGwL2e7zJ8hrp0SbmLHGv8uY58,612
|
|
@@ -18,34 +18,34 @@ pyxcp/asamkeydll.c,sha256=dVEvU0S1kgIo62S0La-T8xHSw668LM_DYc_fiQ0No6g,2952
|
|
|
18
18
|
pyxcp/asamkeydll.sh,sha256=DC2NKUMwvi39OQgJ6514Chr4wc1LYbTmQHmMq9jAHHs,59
|
|
19
19
|
pyxcp/checksum.py,sha256=alze1JiZ2JmdRul9QzP_-fuAqJcNyYBbo35zBwEKqHk,11535
|
|
20
20
|
pyxcp/cmdline.py,sha256=na3ZbWQ-5ezsi1MrkuxMTCAXonUF3X6-LutoneyE3dU,1529
|
|
21
|
-
pyxcp/config/__init__.py,sha256=
|
|
21
|
+
pyxcp/config/__init__.py,sha256=nToBy_zPFQZmCUgRZ1RUjlw-OulCcvoFuGFvPw242z8,41701
|
|
22
22
|
pyxcp/config/legacy.py,sha256=4QdDheX8DbBKv5JVT72_C_cjCgKvZmhN3tJ6hsvBEtI,5220
|
|
23
23
|
pyxcp/constants.py,sha256=9yGfujC0ImTYQWfn41wyw8pluJTSrhMGWIVeIZTgsLg,1160
|
|
24
24
|
pyxcp/cpp_ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
25
|
pyxcp/cpp_ext/bin.hpp,sha256=PwJloZek21la-RBSda2Hc0u_6gID0sfTduPeplaAyR4,2561
|
|
26
26
|
pyxcp/cpp_ext/blockmem.hpp,sha256=ysaJwmTWGTfE54Outk3gJYOfAVFd_QaonBMtXLcXwCc,1242
|
|
27
|
-
pyxcp/cpp_ext/cpp_ext.cp310-win_amd64.pyd,sha256=
|
|
28
|
-
pyxcp/cpp_ext/cpp_ext.cp311-win_amd64.pyd,sha256=
|
|
29
|
-
pyxcp/cpp_ext/cpp_ext.cp38-win_amd64.pyd,sha256=
|
|
30
|
-
pyxcp/cpp_ext/cpp_ext.cp39-win_amd64.pyd,sha256=
|
|
27
|
+
pyxcp/cpp_ext/cpp_ext.cp310-win_amd64.pyd,sha256=6QbsSXVMsmE8L8Uo3JIojb_U9EOrdJc-MZk-2GI3Y5c,279552
|
|
28
|
+
pyxcp/cpp_ext/cpp_ext.cp311-win_amd64.pyd,sha256=BD3qqAHgl5HJP--VT_C5fbtSODPobAGd1ks0co8kq9E,281600
|
|
29
|
+
pyxcp/cpp_ext/cpp_ext.cp38-win_amd64.pyd,sha256=dAWWWsucJ22tqPC_06-Kr6nhz5nNe4m6YYeMhh384AY,279552
|
|
30
|
+
pyxcp/cpp_ext/cpp_ext.cp39-win_amd64.pyd,sha256=te0D-4CZw619YbwRrIxS8jmdS_UcPS2gQPCSb0Jx8Vg,260096
|
|
31
31
|
pyxcp/cpp_ext/daqlist.hpp,sha256=g2hlxgoQorAGKHedZFZ0c2FQh1APMIA9sVB6M6hD_n8,7277
|
|
32
32
|
pyxcp/cpp_ext/event.hpp,sha256=Z-1yxsEKsr81NnLVEWJ2ANA8FV7YsM7EbNxaw-elheE,1200
|
|
33
33
|
pyxcp/cpp_ext/extension_wrapper.cpp,sha256=FXFjyruBjQYqjCYZZcajdYv6dvNnCggMAbWLqJmfuTM,4756
|
|
34
34
|
pyxcp/cpp_ext/helper.hpp,sha256=ONAsVupIqqmNDp8bgGWS0TfSYeCFkk3kwwZbbqsh0HQ,7813
|
|
35
35
|
pyxcp/cpp_ext/mcobject.hpp,sha256=A5GKcfjYMcfm3hfTQfFuS4JYNFTvfmzAcMXCe01GOs4,6429
|
|
36
36
|
pyxcp/cpp_ext/tsqueue.hpp,sha256=FWMemzXNgV5dQ7gYmTCzC0QYfgl0VI9JCybYelBcCHU,1026
|
|
37
|
-
pyxcp/daq_stim/__init__.py,sha256=
|
|
37
|
+
pyxcp/daq_stim/__init__.py,sha256=xQNF6MlVnPHtjj5fKEvXnLWxIJs_Fqd5XVMN4lcFaC8,9532
|
|
38
38
|
pyxcp/daq_stim/optimize/__init__.py,sha256=FUWK0GkNpNT-sUlhibp7xa2aSYpm6Flh5yA2w2IOJqg,2520
|
|
39
39
|
pyxcp/daq_stim/optimize/binpacking.py,sha256=Iltho5diKlJG-ltbmx053U2vOFRlCISolXK61T14l_I,1257
|
|
40
40
|
pyxcp/daq_stim/scheduler.cpp,sha256=a7VK7kP2Hs8yMlcDAkXwJ0bH88lr_yz156sphcHS7Z4,715
|
|
41
41
|
pyxcp/daq_stim/scheduler.hpp,sha256=U_6tUbebmzX5vVZS0EFSgTaPsyxMg6yRXHG_aPWA0x4,1884
|
|
42
|
-
pyxcp/daq_stim/stim.cp310-win_amd64.pyd,sha256=
|
|
43
|
-
pyxcp/daq_stim/stim.cp311-win_amd64.pyd,sha256=
|
|
44
|
-
pyxcp/daq_stim/stim.cp38-win_amd64.pyd,sha256=
|
|
45
|
-
pyxcp/daq_stim/stim.cp39-win_amd64.pyd,sha256=
|
|
42
|
+
pyxcp/daq_stim/stim.cp310-win_amd64.pyd,sha256=Ipaa8gxNZetfWUs8SHP-uQ-3bQ6aJzv7queAOKmcZBA,189440
|
|
43
|
+
pyxcp/daq_stim/stim.cp311-win_amd64.pyd,sha256=PeX2RT5L-kBqyfvg3AazPSrD1Fd93K9b1hB8fVzzTns,192000
|
|
44
|
+
pyxcp/daq_stim/stim.cp38-win_amd64.pyd,sha256=Sh3DMZHjlD4EOKom7gyLPp2yMyIcVZK02msoFsFdCrg,189440
|
|
45
|
+
pyxcp/daq_stim/stim.cp39-win_amd64.pyd,sha256=cfMM0LKRqcjWx-I0ijRk85aN9YEPlsToeNJU-dLBMec,183296
|
|
46
46
|
pyxcp/daq_stim/stim.cpp,sha256=F2OG67W4KKwTTiUCxm-9egIv3TLFdOkRunX6xf7YOtc,177
|
|
47
47
|
pyxcp/daq_stim/stim.hpp,sha256=U-uInRrA6OCdMl1l1SWbQ_KEPpnNYrWut924IvbW6R0,18508
|
|
48
|
-
pyxcp/daq_stim/stim_wrapper.cpp,sha256=
|
|
48
|
+
pyxcp/daq_stim/stim_wrapper.cpp,sha256=iT2yxJ3LRG7HoYC1bwhM3tCAxF9X_HHierBNsLRmTJg,1995
|
|
49
49
|
pyxcp/dllif.py,sha256=nXzD5toh_z9Zjj3x3trigURfwE98fYaL4RmUlI7FaqY,3308
|
|
50
50
|
pyxcp/errormatrix.py,sha256=iY3VlAem7pNfpK4scD_087wxMlLxNuidB7bbpiUiAyc,45464
|
|
51
51
|
pyxcp/examples/conf_can.toml,sha256=4o-M4xmh7pCzuQLfXnIOLIXqx5aZjMAZ6jtjYJ8hLBQ,370
|
|
@@ -57,12 +57,7 @@ pyxcp/examples/conf_nixnet.json,sha256=BvXPrljPGzaRTNPch3K0XfU3KSBP1sVDDNP7yY850
|
|
|
57
57
|
pyxcp/examples/conf_socket_can.toml,sha256=gTacQGm0p6fhPCMWC3ScLq9Xj-xJmNbjNXkjO4o7r8k,269
|
|
58
58
|
pyxcp/examples/conf_sxi.json,sha256=cXwNGoOpvqhdjXBQcE8lKgTs50wi9beosWKskZGJ-nI,158
|
|
59
59
|
pyxcp/examples/conf_sxi.toml,sha256=t-XsgRljcMdj0f3_CGRT60c77LeQPNbjIT17YxDK3Yg,125
|
|
60
|
-
pyxcp/examples/
|
|
61
|
-
pyxcp/examples/ex_csv.py,sha256=GNWQ3IatXj3Kg5MUX6p8tzJRUppGreON9dkrNiqdTtk,2461
|
|
62
|
-
pyxcp/examples/ex_excel.py,sha256=VpoqRTv-rHz-MnaFKt5f7MqDrK9OLYyRJvVWzCFsayc,2828
|
|
63
|
-
pyxcp/examples/ex_mdf.py,sha256=zfivlNkbbsfvwqsISttaoQk1R888r7UUtwSqocE60sU,3759
|
|
64
|
-
pyxcp/examples/ex_sqlite.py,sha256=ludD0EIziBhBNnC3MOrQTGs06cl7iNyL2yefwe53zNc,4268
|
|
65
|
-
pyxcp/examples/run_daq.py,sha256=KXL9myK3w7RCIgjZblU2i1XOP5l4V0YRQKNRXF7ISIo,5518
|
|
60
|
+
pyxcp/examples/run_daq.py,sha256=gSKkJ_S4QgP6Pgeu-gNoh_hGzxtrAgcbQ1AEEC2QWHE,5484
|
|
66
61
|
pyxcp/examples/xcp_policy.py,sha256=io9tS2W-7PvR8ZzU203KolFrDp67eorUlwNWvA4kC5k,1921
|
|
67
62
|
pyxcp/examples/xcp_read_benchmark.py,sha256=zOG0Yrji10vA0vhHa27KK7zgc3JDpzXzXsFnIU4C_AM,956
|
|
68
63
|
pyxcp/examples/xcp_skel.py,sha256=YXLQC8nn8aAwYSVuBGhr1dvmdMBjmO1Ee1w3e5sy16s,1159
|
|
@@ -71,16 +66,16 @@ pyxcp/examples/xcp_user_supplied_driver.py,sha256=bL-6HDvPjgRErvYVdaRL_Pg1GDxu02
|
|
|
71
66
|
pyxcp/examples/xcphello.py,sha256=xbcWq8StRJyUZBLUvknsXv7VkEBD5SU0SJjlZTHsSzs,2630
|
|
72
67
|
pyxcp/examples/xcphello_recorder.py,sha256=QHWJsq5h5CI9t5qEmMSorZyzirTpoXz4nzuKTMzbZCA,3409
|
|
73
68
|
pyxcp/master/__init__.py,sha256=QQbkUJM1WQ-5p2MiNFYxLAmHhNsCQLzDp-S4aoOFxoA,318
|
|
74
|
-
pyxcp/master/errorhandler.py,sha256=
|
|
75
|
-
pyxcp/master/master.py,sha256=
|
|
69
|
+
pyxcp/master/errorhandler.py,sha256=ulL6WiraZbVZnM2pfR8S9vlWAAP5UXwXqmbjjxH9rgc,15359
|
|
70
|
+
pyxcp/master/master.py,sha256=y5i5HTw5g4HKHW8tXfpNc0hmaQjle-3dsUkVFqPjUXc,78365
|
|
76
71
|
pyxcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
77
|
-
pyxcp/recorder/__init__.py,sha256=
|
|
72
|
+
pyxcp/recorder/__init__.py,sha256=jeTmKvfjIenxHxt7zn6HMjnDpuPQU0d9SdnYK_t3gdE,2850
|
|
78
73
|
pyxcp/recorder/build_clang.cmd,sha256=JvFngSnb28XcBGXxC6MGrcOCGYfahOIvHpgRpqbA6HQ,175
|
|
79
74
|
pyxcp/recorder/build_clang.sh,sha256=zmU3nZxaNH1pxGWMyQ-S541TuVqxS00p3iPR9NUP4Ec,181
|
|
80
75
|
pyxcp/recorder/build_gcc.cmd,sha256=zj732DdvqDzGAFg7dvF83DUpf8Qf6rQ0cqEaID15Z80,238
|
|
81
76
|
pyxcp/recorder/build_gcc.sh,sha256=nCSh7G8xtxWtDNrMqNUxcjnm_CFpMeduIF0X-RSJtHA,211
|
|
82
77
|
pyxcp/recorder/build_gcc_arm.sh,sha256=jEo6Mgt_aVDL3nHtffecXOrN6gRsEoaA3S4pPrAzpCE,240
|
|
83
|
-
pyxcp/recorder/converter/__init__.py,sha256=
|
|
78
|
+
pyxcp/recorder/converter/__init__.py,sha256=7gP3JmI5aPjVcoVqO7EqwdDKqzzidytH8a8pPKyRvAU,14779
|
|
84
79
|
pyxcp/recorder/lz4.c,sha256=rOy3JE2SsOXvJ8a9pgGEfGpbDJnJR03dSVej0CwPmjg,120974
|
|
85
80
|
pyxcp/recorder/lz4.h,sha256=Kz_2V6kvOunNHoPl9-EqxWDVCvYXbU0J-pkSnCeXubs,46483
|
|
86
81
|
pyxcp/recorder/lz4hc.c,sha256=E56iE5CQ6fhQIVi3qNpxiIIP2sTGeC80JtVPyhidV6Q,88870
|
|
@@ -89,10 +84,10 @@ pyxcp/recorder/mio.hpp,sha256=5ASJLKSEykH0deAQD5uak-_yAgd5p2n8t06315GSGrg,63346
|
|
|
89
84
|
pyxcp/recorder/reader.hpp,sha256=rr9XZ_ciL6eF2_xEqyt9XYNqTIze9ytAsnf8uYukO9U,5201
|
|
90
85
|
pyxcp/recorder/reco.py,sha256=6N6FIwfCEVMpi5dr3eUOQa1lowcg2LCnS_sy_-b-UiQ,8725
|
|
91
86
|
pyxcp/recorder/recorder.rst,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
92
|
-
pyxcp/recorder/rekorder.cp310-win_amd64.pyd,sha256=
|
|
93
|
-
pyxcp/recorder/rekorder.cp311-win_amd64.pyd,sha256=
|
|
94
|
-
pyxcp/recorder/rekorder.cp38-win_amd64.pyd,sha256=
|
|
95
|
-
pyxcp/recorder/rekorder.cp39-win_amd64.pyd,sha256=
|
|
87
|
+
pyxcp/recorder/rekorder.cp310-win_amd64.pyd,sha256=kdZ8tFAEG6DYBZhh6gq353ciHfADV_tr-4xODSm0Xtw,377856
|
|
88
|
+
pyxcp/recorder/rekorder.cp311-win_amd64.pyd,sha256=KY_0mU2ZWOtaTZohpLAlXPOBQ5ueyXlkDCqrh1Gjcwo,380416
|
|
89
|
+
pyxcp/recorder/rekorder.cp38-win_amd64.pyd,sha256=QXsP963LBZg8uxjZqmFgxBlxxjFKiKKrvja-v7asr1c,377856
|
|
90
|
+
pyxcp/recorder/rekorder.cp39-win_amd64.pyd,sha256=MHWy_5Em0uDyGq39Rt3kmwMZRG9qYwcGN5tWug_i-Js,364032
|
|
96
91
|
pyxcp/recorder/rekorder.cpp,sha256=U0LMyk8pZXx9emgS_WPVthvn_9IpgE7JGrh4kg-8CX4,1900
|
|
97
92
|
pyxcp/recorder/rekorder.hpp,sha256=sWvRch9bVt6mmgrFHp5mwWhap7HoFG4geeb7UqEIzio,7638
|
|
98
93
|
pyxcp/recorder/setup.py,sha256=_99XFPQAd5V4LcJaSGJwdnbxgxJ7kl8DEXfHsnKO1Yg,998
|
|
@@ -126,12 +121,12 @@ pyxcp/transport/eth.py,sha256=xPzN2oSALoPKJVvZpBljPSV1AxfpjRusOzymO-TD1Rw,8711
|
|
|
126
121
|
pyxcp/transport/sxi.py,sha256=vM8WZIKuu_dNuqkxZM_1n6iQkQCCzo4ykWpiG6ba8Fk,4695
|
|
127
122
|
pyxcp/transport/transport_wrapper.cpp,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
128
123
|
pyxcp/transport/usb_transport.py,sha256=JuYrwkWsUdibdVNA57LBEQT3a3ykOgWPdWcfqj96nDE,8343
|
|
129
|
-
pyxcp/types.py,sha256=
|
|
124
|
+
pyxcp/types.py,sha256=mjp3FhsTTbS3D5VuC-dfdbMql0lJwEfbZjf8a2pHi1o,26158
|
|
130
125
|
pyxcp/utils.py,sha256=unlg0CoNwcWYfd-BE0hZJ93uhlAoW_nryv9tS_R3C44,2969
|
|
131
126
|
pyxcp/vector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
132
127
|
pyxcp/vector/map.py,sha256=7Gnhvr79geMeqqGVIJPxODXGwABdNDinnqzhpooN5TE,2306
|
|
133
|
-
pyxcp-0.22.
|
|
134
|
-
pyxcp-0.22.
|
|
135
|
-
pyxcp-0.22.
|
|
136
|
-
pyxcp-0.22.
|
|
137
|
-
pyxcp-0.22.
|
|
128
|
+
pyxcp-0.22.26.dist-info/entry_points.txt,sha256=2JbL-pWn9UxpBrS64aWiFFkq9x2A7y-dkrxYlfQqIJU,307
|
|
129
|
+
pyxcp-0.22.26.dist-info/LICENSE,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
|
|
130
|
+
pyxcp-0.22.26.dist-info/METADATA,sha256=_lhdH3MGmewLKRJk-lBDNRuqSu2n9VJs_hbwWsuSUD8,4088
|
|
131
|
+
pyxcp-0.22.26.dist-info/WHEEL,sha256=n3g3Tr2YV6me3FFXedNkHR60jH48Lz9fadlpSPtgLFw,98
|
|
132
|
+
pyxcp-0.22.26.dist-info/RECORD,,
|
pyxcp/examples/ex_arrow.py
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
import logging
|
|
3
|
-
from array import array
|
|
4
|
-
from dataclasses import dataclass, field
|
|
5
|
-
from typing import Any, List
|
|
6
|
-
|
|
7
|
-
import pyarrow as pa
|
|
8
|
-
import pyarrow.parquet as pq
|
|
9
|
-
|
|
10
|
-
from pyxcp.recorder import XcpLogFileDecoder
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
MAP_TO_ARROW = {
|
|
14
|
-
"U8": pa.uint8(),
|
|
15
|
-
"I8": pa.int8(),
|
|
16
|
-
"U16": pa.uint16(),
|
|
17
|
-
"I16": pa.int16(),
|
|
18
|
-
"U32": pa.uint32(),
|
|
19
|
-
"I32": pa.int32(),
|
|
20
|
-
"U64": pa.uint64(),
|
|
21
|
-
"I64": pa.int64(),
|
|
22
|
-
"F32": pa.float32(),
|
|
23
|
-
"F64": pa.float64(),
|
|
24
|
-
"F16": pa.float16(),
|
|
25
|
-
"BF16": pa.float16(),
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
MAP_TO_ARRAY = {
|
|
29
|
-
"U8": "B",
|
|
30
|
-
"I8": "b",
|
|
31
|
-
"U16": "H",
|
|
32
|
-
"I16": "h",
|
|
33
|
-
"U32": "L",
|
|
34
|
-
"I32": "l",
|
|
35
|
-
"U64": "Q",
|
|
36
|
-
"I64": "q",
|
|
37
|
-
"F32": "f",
|
|
38
|
-
"F64": "d",
|
|
39
|
-
"F16": "f",
|
|
40
|
-
"BF16": "f",
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
logger = logging.getLogger("PyXCP")
|
|
44
|
-
|
|
45
|
-
parser = argparse.ArgumentParser(description="Use .xmraw files in an Apache Arrow application.")
|
|
46
|
-
parser.add_argument("xmraw_file", help=".xmraw file")
|
|
47
|
-
args = parser.parse_args()
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
@dataclass
|
|
51
|
-
class Storage:
|
|
52
|
-
name: str
|
|
53
|
-
arrow_type: Any
|
|
54
|
-
arr: array
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
@dataclass
|
|
58
|
-
class StorageContainer:
|
|
59
|
-
name: str
|
|
60
|
-
arr: List[Storage] = field(default_factory=[])
|
|
61
|
-
ts0: List[int] = field(default_factory=lambda: array("Q"))
|
|
62
|
-
ts1: List[int] = field(default_factory=lambda: array("Q"))
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
class Decoder(XcpLogFileDecoder):
|
|
66
|
-
|
|
67
|
-
def initialize(self) -> None:
|
|
68
|
-
self.arrow_tables = []
|
|
69
|
-
for dl in self.daq_lists:
|
|
70
|
-
result = []
|
|
71
|
-
for name, type_str in dl.headers:
|
|
72
|
-
array_txpe = MAP_TO_ARRAY[type_str]
|
|
73
|
-
arrow_type = MAP_TO_ARROW[type_str]
|
|
74
|
-
sd = Storage(name, arrow_type, array(array_txpe))
|
|
75
|
-
print(f"\t{name!r} {array_txpe} {arrow_type}", sd)
|
|
76
|
-
result.append(sd)
|
|
77
|
-
sc = StorageContainer(dl.name, result)
|
|
78
|
-
self.arrow_tables.append(sc)
|
|
79
|
-
|
|
80
|
-
def finalize(self) -> Any:
|
|
81
|
-
result = []
|
|
82
|
-
for arr in self.arrow_tables:
|
|
83
|
-
timestamp0 = arr.ts0
|
|
84
|
-
timestamp1 = arr.ts1
|
|
85
|
-
names = ["timestamp0", "timestamp1"]
|
|
86
|
-
data = [timestamp0, timestamp1]
|
|
87
|
-
for sd in arr.arr:
|
|
88
|
-
adt = pa.array(sd.arr, type=sd.arrow_type)
|
|
89
|
-
names.append(sd.name)
|
|
90
|
-
data.append(adt)
|
|
91
|
-
table = pa.Table.from_arrays(data, names=names)
|
|
92
|
-
fname = f"{arr.name}.parquet"
|
|
93
|
-
print("Writing table", fname)
|
|
94
|
-
pq.write_table(table, fname)
|
|
95
|
-
print("done.", table.shape)
|
|
96
|
-
result.append(table)
|
|
97
|
-
return result
|
|
98
|
-
|
|
99
|
-
def on_daq_list(self, daq_list_num: int, timestamp0: int, timestamp1: int, measurements: list) -> None:
|
|
100
|
-
sc = self.arrow_tables[daq_list_num]
|
|
101
|
-
sc.ts0.append(timestamp0)
|
|
102
|
-
sc.ts1.append(timestamp1)
|
|
103
|
-
for idx, elem in enumerate(measurements):
|
|
104
|
-
sto = sc.arr[idx]
|
|
105
|
-
sto.arr.append(elem)
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
decoder = Decoder(args.xmraw_file)
|
|
109
|
-
res = decoder.run()
|
pyxcp/examples/ex_csv.py
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
import logging
|
|
3
|
-
import os
|
|
4
|
-
import csv
|
|
5
|
-
from array import array
|
|
6
|
-
from dataclasses import dataclass, field
|
|
7
|
-
from mmap import PAGESIZE
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
from typing import Any, List
|
|
10
|
-
|
|
11
|
-
from pyxcp.recorder import XcpLogFileDecoder
|
|
12
|
-
from pyxcp.recorder.converter import MAP_TO_ARRAY
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
MAP_TO_SQL = {
|
|
16
|
-
"U8": "INTEGER",
|
|
17
|
-
"I8": "INTEGER",
|
|
18
|
-
"U16": "INTEGER",
|
|
19
|
-
"I16": "INTEGER",
|
|
20
|
-
"U32": "INTEGER",
|
|
21
|
-
"I32": "INTEGER",
|
|
22
|
-
"U64": "INTEGER",
|
|
23
|
-
"I64": "INTEGER",
|
|
24
|
-
"F32": "FLOAT",
|
|
25
|
-
"F64": "FLOAT",
|
|
26
|
-
"F16": "FLOAT",
|
|
27
|
-
"BF16": "FLOAT",
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
logger = logging.getLogger("PyXCP")
|
|
31
|
-
|
|
32
|
-
parser = argparse.ArgumentParser(description="Use .xmraw files in an Apache Arrow application.")
|
|
33
|
-
parser.add_argument("xmraw_file", help=".xmraw file")
|
|
34
|
-
args = parser.parse_args()
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
@dataclass
|
|
38
|
-
class Storage:
|
|
39
|
-
name: str
|
|
40
|
-
arrow_type: Any
|
|
41
|
-
arr: array
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
@dataclass
|
|
45
|
-
class StorageContainer:
|
|
46
|
-
name: str
|
|
47
|
-
arr: List[Storage] = field(default_factory=[])
|
|
48
|
-
ts0: List[int] = field(default_factory=lambda: array("Q"))
|
|
49
|
-
ts1: List[int] = field(default_factory=lambda: array("Q"))
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
class Decoder(XcpLogFileDecoder):
|
|
53
|
-
|
|
54
|
-
def __init__(self, recording_file_name: str):
|
|
55
|
-
super().__init__(recording_file_name)
|
|
56
|
-
|
|
57
|
-
def initialize(self) -> None:
|
|
58
|
-
self.arrow_tables = []
|
|
59
|
-
self.csv_writers = []
|
|
60
|
-
for dl in self.daq_lists:
|
|
61
|
-
result = []
|
|
62
|
-
for name, type_str in dl.headers:
|
|
63
|
-
array_txpe = MAP_TO_ARRAY[type_str]
|
|
64
|
-
sql_type = MAP_TO_SQL[type_str]
|
|
65
|
-
sd = Storage(name, sql_type, array(array_txpe))
|
|
66
|
-
result.append(sd)
|
|
67
|
-
sc = StorageContainer(dl.name, result)
|
|
68
|
-
writer = csv.writer(open(f"{sc.name}.csv", "w", newline=""), dialect="excel")
|
|
69
|
-
headers = ["ts0", "ts1"] + [e.name for e in sc.arr]
|
|
70
|
-
writer.writerow(headers)
|
|
71
|
-
self.csv_writers.append(writer)
|
|
72
|
-
self.arrow_tables.append(sc)
|
|
73
|
-
print("\nInserting data...")
|
|
74
|
-
|
|
75
|
-
def finalize(self) -> None:
|
|
76
|
-
print("Done.")
|
|
77
|
-
|
|
78
|
-
def on_daq_list(self, daq_list_num: int, timestamp0: int, timestamp1: int, measurements: list) -> None:
|
|
79
|
-
sc = self.arrow_tables[daq_list_num]
|
|
80
|
-
writer = self.csv_writers[daq_list_num]
|
|
81
|
-
data = [timestamp0, timestamp1, *measurements]
|
|
82
|
-
writer.writerow(data)
|
|
83
|
-
|
|
84
|
-
decoder = Decoder(args.xmraw_file)
|
|
85
|
-
decoder.run()
|
pyxcp/examples/ex_excel.py
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
import logging
|
|
3
|
-
import os
|
|
4
|
-
import xlsxwriter
|
|
5
|
-
from array import array
|
|
6
|
-
from dataclasses import dataclass, field
|
|
7
|
-
from mmap import PAGESIZE
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
from typing import Any, List
|
|
10
|
-
|
|
11
|
-
from pyxcp.recorder import XcpLogFileDecoder
|
|
12
|
-
from pyxcp.recorder.converter import MAP_TO_ARRAY
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
MAP_TO_SQL = {
|
|
16
|
-
"U8": "INTEGER",
|
|
17
|
-
"I8": "INTEGER",
|
|
18
|
-
"U16": "INTEGER",
|
|
19
|
-
"I16": "INTEGER",
|
|
20
|
-
"U32": "INTEGER",
|
|
21
|
-
"I32": "INTEGER",
|
|
22
|
-
"U64": "INTEGER",
|
|
23
|
-
"I64": "INTEGER",
|
|
24
|
-
"F32": "FLOAT",
|
|
25
|
-
"F64": "FLOAT",
|
|
26
|
-
"F16": "FLOAT",
|
|
27
|
-
"BF16": "FLOAT",
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
logger = logging.getLogger("PyXCP")
|
|
31
|
-
|
|
32
|
-
parser = argparse.ArgumentParser(description="Use .xmraw files in an Apache Arrow application.")
|
|
33
|
-
parser.add_argument("xmraw_file", help=".xmraw file")
|
|
34
|
-
args = parser.parse_args()
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
@dataclass
|
|
38
|
-
class Storage:
|
|
39
|
-
name: str
|
|
40
|
-
arrow_type: Any
|
|
41
|
-
arr: array
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
@dataclass
|
|
45
|
-
class StorageContainer:
|
|
46
|
-
name: str
|
|
47
|
-
arr: List[Storage] = field(default_factory=[])
|
|
48
|
-
ts0: List[int] = field(default_factory=lambda: array("Q"))
|
|
49
|
-
ts1: List[int] = field(default_factory=lambda: array("Q"))
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
class Decoder(XcpLogFileDecoder):
|
|
53
|
-
|
|
54
|
-
def __init__(self, recording_file_name: str):
|
|
55
|
-
super().__init__(recording_file_name)
|
|
56
|
-
self.xls_file_name = Path(recording_file_name).with_suffix(".xlsx")
|
|
57
|
-
try:
|
|
58
|
-
os.unlink(self.xls_file_name)
|
|
59
|
-
except Exception as e:
|
|
60
|
-
print(e)
|
|
61
|
-
|
|
62
|
-
def initialize(self) -> None:
|
|
63
|
-
self.arrow_tables = []
|
|
64
|
-
self.xls_workbook = xlsxwriter.Workbook(self.xls_file_name)
|
|
65
|
-
self.xls_sheets = []
|
|
66
|
-
self.rows = []
|
|
67
|
-
for dl in self.daq_lists:
|
|
68
|
-
result = []
|
|
69
|
-
for name, type_str in dl.headers:
|
|
70
|
-
array_txpe = MAP_TO_ARRAY[type_str]
|
|
71
|
-
sql_type = MAP_TO_SQL[type_str]
|
|
72
|
-
sd = Storage(name, sql_type, array(array_txpe))
|
|
73
|
-
result.append(sd)
|
|
74
|
-
sc = StorageContainer(dl.name, result)
|
|
75
|
-
sheet = self.xls_workbook.add_worksheet(sc.name)
|
|
76
|
-
self.xls_sheets.append(sheet)
|
|
77
|
-
headers = ["ts0", "ts1"] + [e.name for e in sc.arr]
|
|
78
|
-
sheet.write_row(0, 0, headers)
|
|
79
|
-
self.rows.append(1)
|
|
80
|
-
self.arrow_tables.append(sc)
|
|
81
|
-
print("\nInserting data...")
|
|
82
|
-
|
|
83
|
-
def finalize(self) -> None:
|
|
84
|
-
self.xls_workbook.close()
|
|
85
|
-
print("Done.")
|
|
86
|
-
|
|
87
|
-
def on_daq_list(self, daq_list_num: int, timestamp0: int, timestamp1: int, measurements: list) -> None:
|
|
88
|
-
sheet = self.xls_sheets[daq_list_num]
|
|
89
|
-
row = self.rows[daq_list_num]
|
|
90
|
-
data = [timestamp0, timestamp1] + measurements
|
|
91
|
-
sheet.write_row(row, 0, data)
|
|
92
|
-
self.rows[daq_list_num] += 1
|
|
93
|
-
|
|
94
|
-
decoder = Decoder(args.xmraw_file)
|
|
95
|
-
decoder.run()
|
pyxcp/examples/ex_mdf.py
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
import logging
|
|
3
|
-
from array import array
|
|
4
|
-
from dataclasses import dataclass, field
|
|
5
|
-
from pathlib import Path
|
|
6
|
-
from typing import Any, List
|
|
7
|
-
|
|
8
|
-
import numpy as np
|
|
9
|
-
from asammdf import MDF, Signal
|
|
10
|
-
from asammdf.blocks.v4_blocks import HeaderBlock # ChannelGroup
|
|
11
|
-
from asammdf.blocks.v4_constants import FLAG_HD_TIME_OFFSET_VALID # FLAG_HD_LOCAL_TIME,
|
|
12
|
-
|
|
13
|
-
from pyxcp.recorder import XcpLogFileDecoder
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
MAP_TO_NP = {
|
|
17
|
-
"U8": np.uint8,
|
|
18
|
-
"I8": np.int8,
|
|
19
|
-
"U16": np.uint16,
|
|
20
|
-
"I16": np.int16,
|
|
21
|
-
"U32": np.uint32,
|
|
22
|
-
"I32": np.int32,
|
|
23
|
-
"U64": np.uint64,
|
|
24
|
-
"I64": np.int64,
|
|
25
|
-
"F32": np.float32,
|
|
26
|
-
"F64": np.float64,
|
|
27
|
-
"F16": np.float16,
|
|
28
|
-
"BF16": np.float16,
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
MAP_TO_ARRAY = {
|
|
32
|
-
"U8": "B",
|
|
33
|
-
"I8": "b",
|
|
34
|
-
"U16": "H",
|
|
35
|
-
"I16": "h",
|
|
36
|
-
"U32": "L",
|
|
37
|
-
"I32": "l",
|
|
38
|
-
"U64": "Q",
|
|
39
|
-
"I64": "q",
|
|
40
|
-
"F32": "f",
|
|
41
|
-
"F64": "d",
|
|
42
|
-
"F16": "f",
|
|
43
|
-
# "BF16"
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
logger = logging.getLogger("PyXCP")
|
|
47
|
-
|
|
48
|
-
parser = argparse.ArgumentParser(description="Use .xmraw files in an Apache Arrow application.")
|
|
49
|
-
parser.add_argument("xmraw_file", help=".xmraw file")
|
|
50
|
-
args = parser.parse_args()
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
@dataclass
|
|
54
|
-
class Storage:
|
|
55
|
-
name: str
|
|
56
|
-
arrow_type: Any
|
|
57
|
-
arr: array
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
@dataclass
|
|
61
|
-
class StorageContainer:
|
|
62
|
-
name: str
|
|
63
|
-
arr: list[Storage] = field(default_factory=[])
|
|
64
|
-
ts0: List[int] = field(default_factory=lambda: array("Q"))
|
|
65
|
-
ts1: List[int] = field(default_factory=lambda: array("Q"))
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
class Decoder(XcpLogFileDecoder):
|
|
69
|
-
|
|
70
|
-
def __init__(self, recording_file_name: str):
|
|
71
|
-
super().__init__(recording_file_name)
|
|
72
|
-
self.mdf_file_name = Path(recording_file_name).with_suffix(".mf4")
|
|
73
|
-
|
|
74
|
-
def initialize(self) -> None:
|
|
75
|
-
self.tables = []
|
|
76
|
-
for dl in self.daq_lists:
|
|
77
|
-
result = []
|
|
78
|
-
for name, type_str in dl.headers:
|
|
79
|
-
array_txpe = MAP_TO_ARRAY[type_str]
|
|
80
|
-
arrow_type = MAP_TO_NP[type_str]
|
|
81
|
-
sd = Storage(name, arrow_type, array(array_txpe))
|
|
82
|
-
result.append(sd)
|
|
83
|
-
sc = StorageContainer(dl.name, result)
|
|
84
|
-
self.tables.append(sc)
|
|
85
|
-
print("Extracting DAQ lists...")
|
|
86
|
-
|
|
87
|
-
def finalize(self) -> None:
|
|
88
|
-
print("Creating MDF result...")
|
|
89
|
-
timestamp_info = self.parameters.timestamp_info
|
|
90
|
-
hdr = HeaderBlock(
|
|
91
|
-
abs_time=timestamp_info.timestamp_ns,
|
|
92
|
-
tz_offset=timestamp_info.utc_offset,
|
|
93
|
-
daylight_save_time=timestamp_info.dst_offset,
|
|
94
|
-
time_flags=FLAG_HD_TIME_OFFSET_VALID,
|
|
95
|
-
)
|
|
96
|
-
hdr.comment = f"""<HDcomment><TX>Timezone: {timestamp_info.timezone}</TX></HDcomment>""" # Test-Comment.
|
|
97
|
-
mdf4 = MDF(version="4.10")
|
|
98
|
-
mdf4.header = hdr
|
|
99
|
-
# result = []
|
|
100
|
-
for idx, arr in enumerate(self.tables):
|
|
101
|
-
signals = []
|
|
102
|
-
timestamps = arr.ts0
|
|
103
|
-
for sd in arr.arr:
|
|
104
|
-
|
|
105
|
-
signal = Signal(samples=sd.arr, name=sd.name, timestamps=timestamps)
|
|
106
|
-
signals.append(signal)
|
|
107
|
-
print(f"Appending data-group {arr.name!r}")
|
|
108
|
-
mdf4.append(signals, acq_name=arr.name, comment="Created by pyXCP recorder")
|
|
109
|
-
print(f"Writing '{self.mdf_file_name!s}'")
|
|
110
|
-
mdf4.save(self.mdf_file_name, compression=2, overwrite=True)
|
|
111
|
-
print("Done.")
|
|
112
|
-
return mdf4
|
|
113
|
-
|
|
114
|
-
def on_daq_list(self, daq_list_num: int, timestamp0: int, timestamp1: int, measurements: list) -> None:
|
|
115
|
-
sc = self.tables[daq_list_num]
|
|
116
|
-
sc.ts0.append(timestamp0)
|
|
117
|
-
sc.ts1.append(timestamp1)
|
|
118
|
-
for idx, elem in enumerate(measurements):
|
|
119
|
-
sto = sc.arr[idx]
|
|
120
|
-
sto.arr.append(elem)
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
decoder = Decoder(args.xmraw_file)
|
|
124
|
-
res = decoder.run()
|