CANConfigPython 0.1.0a1__tar.gz

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.
Files changed (242) hide show
  1. canconfigpython-0.1.0a1/.github/workflows/linux-build.yml +32 -0
  2. canconfigpython-0.1.0a1/AGENTS.md +17 -0
  3. canconfigpython-0.1.0a1/DEVELOPING.md +156 -0
  4. canconfigpython-0.1.0a1/LICENSE +21 -0
  5. canconfigpython-0.1.0a1/MANIFEST.in +10 -0
  6. canconfigpython-0.1.0a1/PKG-INFO +197 -0
  7. canconfigpython-0.1.0a1/README.md +73 -0
  8. canconfigpython-0.1.0a1/THIRD_PARTY_NOTICES.md +69 -0
  9. canconfigpython-0.1.0a1/VALIDATION.md +65 -0
  10. canconfigpython-0.1.0a1/licenses/GPL-3.0.txt +674 -0
  11. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-LICENSE.txt +866 -0
  12. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-LICENSE.FDL.txt +450 -0
  13. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-LICENSE.GPL2.txt +339 -0
  14. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-LICENSE.GPL3-EXCEPT.txt +704 -0
  15. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-LICENSE.GPL3.txt +674 -0
  16. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-LICENSE.GPLv3.txt +686 -0
  17. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-LICENSE.LGPL3.txt +165 -0
  18. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-LICENSE.LGPLv21.txt +514 -0
  19. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-LICENSE.LGPLv3.txt +175 -0
  20. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-LICENSE.PREVIEW.COMMERCIAL.txt +626 -0
  21. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__angle__LICENSE.txt +32 -0
  22. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__angle__src__libANGLE__renderer__d3d__d3d11__dxgi_support_data.json.txt +1164 -0
  23. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__angle__src__libANGLE__renderer__d3d__d3d11__load_functions_data.json.txt +1116 -0
  24. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__angle__src__libANGLE__renderer__d3d__d3d11__swizzle_format_data.json.txt +77 -0
  25. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__angle__src__libANGLE__renderer__d3d__d3d11__texture_format_data.json.txt +692 -0
  26. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__angle__src__third_party__compiler__LICENSE.txt +22 -0
  27. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__angle__src__third_party__murmurhash__LICENSE.txt +2 -0
  28. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__double-conversion__LICENSE.txt +26 -0
  29. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__easing__easing.cpp.txt +670 -0
  30. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__easing__legal.qdoc.txt +35 -0
  31. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__forkfd__forkfd.c.txt +875 -0
  32. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__forkfd__forkfd.h.txt +66 -0
  33. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__forkfd__forkfd_gcc.h.txt +63 -0
  34. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__freebsd__0001-Patch-the-FreeBSD-strto-u-ll-functions-to-work-insid.patch.txt +151 -0
  35. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__freebsd__strtoll.c.txt +134 -0
  36. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__freebsd__strtoull.c.txt +112 -0
  37. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__freetype__docs__LICENSE.TXT.txt +37 -0
  38. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__freetype__src__tools__no-copyright.txt +61 -0
  39. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__freetype__src__tools__update-copyright-year.txt +135 -0
  40. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__freetype__src__tools__update-copyright.txt +14 -0
  41. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__harfbuzz-ng__COPYING.txt +36 -0
  42. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__harfbuzz__COPYING.txt +24 -0
  43. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__libpng__LICENSE.txt +112 -0
  44. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__md4__md4.cpp.txt +265 -0
  45. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__md4__md4.h.txt +31 -0
  46. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__md5__md5.cpp.txt +247 -0
  47. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__md5__md5.h.txt +48 -0
  48. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__pcre__COPYING.txt +5 -0
  49. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__pcre__LICENCE.txt +93 -0
  50. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__rfc6234__patches__0001-Fix-compilation-MSVC-warning-in-3rdparty-rfc6234.patch.txt +86 -0
  51. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__rfc6234__sha-private.h.txt +28 -0
  52. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__rfc6234__sha.h.txt +357 -0
  53. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__rfc6234__sha224-256.c.txt +583 -0
  54. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__rfc6234__sha384-512.c.txt +1034 -0
  55. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__sha1__sha1.cpp.txt +261 -0
  56. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-32-rvk.macros.txt +555 -0
  57. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-32.macros.txt +26 -0
  58. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-64.macros.txt +728 -0
  59. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-int-set.h.txt +6 -0
  60. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-interface.h.txt +46 -0
  61. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-opt32-settings.h.txt +4 -0
  62. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-opt32.c.txt +524 -0
  63. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-opt64-settings.h.txt +7 -0
  64. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-opt64.c.txt +512 -0
  65. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-unrolling.macros.txt +124 -0
  66. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakNISTInterface.c.txt +82 -0
  67. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakNISTInterface.h.txt +70 -0
  68. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakSponge.c.txt +266 -0
  69. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakSponge.h.txt +80 -0
  70. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__sha3__brg_endian.h.txt +142 -0
  71. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtbase-src__3rdparty__xkbcommon__COPYING.txt +188 -0
  72. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtserialport-LICENSE.FDL.txt +450 -0
  73. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtserialport-LICENSE.GPL2.txt +339 -0
  74. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtserialport-LICENSE.GPL3-EXCEPT.txt +704 -0
  75. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtserialport-LICENSE.GPL3.txt +674 -0
  76. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtserialport-LICENSE.GPLv2.txt +292 -0
  77. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtserialport-LICENSE.GPLv3.txt +686 -0
  78. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtserialport-LICENSE.LGPL3.txt +165 -0
  79. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtserialport-LICENSE.LGPLv21.txt +514 -0
  80. canconfigpython-0.1.0a1/licenses/Qt-5.7.1-qtserialport-LICENSE.LGPLv3.txt +175 -0
  81. canconfigpython-0.1.0a1/licenses/gcc-COPYING.RUNTIME.txt +73 -0
  82. canconfigpython-0.1.0a1/licenses/gcc-COPYING3.LIB.txt +165 -0
  83. canconfigpython-0.1.0a1/licenses/gcc-COPYING3.txt +674 -0
  84. canconfigpython-0.1.0a1/licenses/linux-libc6-copyright.txt +529 -0
  85. canconfigpython-0.1.0a1/licenses/linux-libcap2-copyright.txt +112 -0
  86. canconfigpython-0.1.0a1/licenses/linux-libcom-err2-copyright.txt +403 -0
  87. canconfigpython-0.1.0a1/licenses/linux-libdouble-conversion3-copyright.txt +41 -0
  88. canconfigpython-0.1.0a1/licenses/linux-libgcc-s1-copyright.txt +1532 -0
  89. canconfigpython-0.1.0a1/licenses/linux-libglib2.0-0t64-copyright.txt +1250 -0
  90. canconfigpython-0.1.0a1/licenses/linux-libgssapi-krb5-2-copyright.txt +1374 -0
  91. canconfigpython-0.1.0a1/licenses/linux-libicu74-copyright.txt +49 -0
  92. canconfigpython-0.1.0a1/licenses/linux-libk5crypto3-copyright.txt +1374 -0
  93. canconfigpython-0.1.0a1/licenses/linux-libkeyutils1-copyright.txt +52 -0
  94. canconfigpython-0.1.0a1/licenses/linux-libkrb5-3-copyright.txt +1374 -0
  95. canconfigpython-0.1.0a1/licenses/linux-libkrb5support0-copyright.txt +1374 -0
  96. canconfigpython-0.1.0a1/licenses/linux-libpcre2-16-0-copyright.txt +122 -0
  97. canconfigpython-0.1.0a1/licenses/linux-libpcre2-8-0-copyright.txt +122 -0
  98. canconfigpython-0.1.0a1/licenses/linux-libqt5core5t64-copyright.txt +2932 -0
  99. canconfigpython-0.1.0a1/licenses/linux-libqt5network5t64-copyright.txt +2932 -0
  100. canconfigpython-0.1.0a1/licenses/linux-libqt5serialport5-copyright.txt +134 -0
  101. canconfigpython-0.1.0a1/licenses/linux-libstdc++6-copyright.txt +1532 -0
  102. canconfigpython-0.1.0a1/licenses/linux-libudev1-copyright.txt +287 -0
  103. canconfigpython-0.1.0a1/licenses/linux-libzstd1-copyright.txt +123 -0
  104. canconfigpython-0.1.0a1/licenses/linux-packages.json +102 -0
  105. canconfigpython-0.1.0a1/licenses/linux-zlib1g-copyright.txt +84 -0
  106. canconfigpython-0.1.0a1/licenses/mingw-w64-COPYING.MinGW-w64-runtime.txt.txt +240 -0
  107. canconfigpython-0.1.0a1/licenses/mingw-w64-COPYING.MinGW-w64.txt.txt +135 -0
  108. canconfigpython-0.1.0a1/licenses/mingw-w64-COPYING.txt +43 -0
  109. canconfigpython-0.1.0a1/licenses/qt-source-notices.json +278 -0
  110. canconfigpython-0.1.0a1/licenses/winpthreads-COPYING.txt +57 -0
  111. canconfigpython-0.1.0a1/native/PORTING.md +24 -0
  112. canconfigpython-0.1.0a1/native/common/qhdlcdatalink.cpp +1077 -0
  113. canconfigpython-0.1.0a1/native/common/qhdlcdatalink.h +207 -0
  114. canconfigpython-0.1.0a1/native/common/qringbuffer.h +134 -0
  115. canconfigpython-0.1.0a1/native/common/qrs232com.cpp +179 -0
  116. canconfigpython-0.1.0a1/native/common/qrs232com.h +24 -0
  117. canconfigpython-0.1.0a1/native/common/qserialdevicebase.cpp +47 -0
  118. canconfigpython-0.1.0a1/native/common/qserialdevicebase.h +50 -0
  119. canconfigpython-0.1.0a1/native/common/qsocketcom.cpp +279 -0
  120. canconfigpython-0.1.0a1/native/common/qsocketcom.h +32 -0
  121. canconfigpython-0.1.0a1/native/common/qtcpsocketsvr.cpp +27 -0
  122. canconfigpython-0.1.0a1/native/common/qtcpsocketsvr.h +21 -0
  123. canconfigpython-0.1.0a1/native/common/qudpsocketsvr.cpp +204 -0
  124. canconfigpython-0.1.0a1/native/common/qudpsocketsvr.h +52 -0
  125. canconfigpython-0.1.0a1/native/common/qudpsocketwii.cpp +58 -0
  126. canconfigpython-0.1.0a1/native/common/qudpsocketwii.h +38 -0
  127. canconfigpython-0.1.0a1/native/console/CANConfigConsole.pro +13 -0
  128. canconfigpython-0.1.0a1/native/console/console_config.cpp +531 -0
  129. canconfigpython-0.1.0a1/native/console/console_config.h +73 -0
  130. canconfigpython-0.1.0a1/native/console/console_config_test.cpp +309 -0
  131. canconfigpython-0.1.0a1/native/console/console_config_test.pro +7 -0
  132. canconfigpython-0.1.0a1/native/console/console_fake_device.h +207 -0
  133. canconfigpython-0.1.0a1/native/console/console_fake_driver.cpp +47 -0
  134. canconfigpython-0.1.0a1/native/console/console_fake_driver.pro +10 -0
  135. canconfigpython-0.1.0a1/native/console/console_firmware.cpp +249 -0
  136. canconfigpython-0.1.0a1/native/console/console_firmware.h +32 -0
  137. canconfigpython-0.1.0a1/native/console/console_firmware_test.cpp +145 -0
  138. canconfigpython-0.1.0a1/native/console/console_firmware_test.pro +6 -0
  139. canconfigpython-0.1.0a1/native/console/main.cpp +345 -0
  140. canconfigpython-0.1.0a1/native/console/test_console_cli.py +543 -0
  141. canconfigpython-0.1.0a1/native/driver/WIICAN.pro +18 -0
  142. canconfigpython-0.1.0a1/native/driver/configuration_response_p.h +38 -0
  143. canconfigpython-0.1.0a1/native/driver/wiican.cpp +3318 -0
  144. canconfigpython-0.1.0a1/native/driver/wiican.h +247 -0
  145. canconfigpython-0.1.0a1/native/driver/wiican_driver.cpp +296 -0
  146. canconfigpython-0.1.0a1/native/driver/wiican_driver2.h +619 -0
  147. canconfigpython-0.1.0a1/native/driver/wiican_global.h +12 -0
  148. canconfigpython-0.1.0a1/native/driver/wiican_server.cpp +123 -0
  149. canconfigpython-0.1.0a1/native/driver/wiican_server.h +40 -0
  150. canconfigpython-0.1.0a1/native/shared/Ymodem.cpp +1791 -0
  151. canconfigpython-0.1.0a1/native/shared/Ymodem.h +143 -0
  152. canconfigpython-0.1.0a1/native/shared/configuration_backup_p.h +412 -0
  153. canconfigpython-0.1.0a1/native/shared/fw_update_port_tracker.cpp +661 -0
  154. canconfigpython-0.1.0a1/native/shared/fw_update_port_tracker.h +148 -0
  155. canconfigpython-0.1.0a1/native/upstream.json +154 -0
  156. canconfigpython-0.1.0a1/pyproject.toml +44 -0
  157. canconfigpython-0.1.0a1/setup.cfg +4 -0
  158. canconfigpython-0.1.0a1/setup.py +36 -0
  159. canconfigpython-0.1.0a1/src/CANConfigPython.egg-info/PKG-INFO +197 -0
  160. canconfigpython-0.1.0a1/src/CANConfigPython.egg-info/SOURCES.txt +240 -0
  161. canconfigpython-0.1.0a1/src/CANConfigPython.egg-info/dependency_links.txt +1 -0
  162. canconfigpython-0.1.0a1/src/CANConfigPython.egg-info/entry_points.txt +3 -0
  163. canconfigpython-0.1.0a1/src/CANConfigPython.egg-info/requires.txt +6 -0
  164. canconfigpython-0.1.0a1/src/CANConfigPython.egg-info/top_level.txt +1 -0
  165. canconfigpython-0.1.0a1/src/canconfigpython/__init__.py +7 -0
  166. canconfigpython-0.1.0a1/src/canconfigpython/__main__.py +3 -0
  167. canconfigpython-0.1.0a1/src/canconfigpython/cli.py +111 -0
  168. canconfigpython-0.1.0a1/src/canconfigpython/client.py +243 -0
  169. canconfigpython-0.1.0a1/src/canconfigpython/commands.py +57 -0
  170. canconfigpython-0.1.0a1/src/canconfigpython/errors.py +19 -0
  171. canconfigpython-0.1.0a1/src/canconfigpython/resources/docs/native-source.tar.gz +0 -0
  172. canconfigpython-0.1.0a1/src/canconfigpython/resources/docs/user-guide.en.md +274 -0
  173. canconfigpython-0.1.0a1/src/canconfigpython/resources/docs/user-guide.zh-CN.md +265 -0
  174. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/SKILL.md +71 -0
  175. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/agents/openai.yaml +4 -0
  176. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/changes.schema.json +832 -0
  177. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/bridge_dual_rates.json +18 -0
  178. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/bridge_mapping.json +13 -0
  179. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/cancom_115200_8n1.json +10 -0
  180. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/cancom_format_crc.json +8 -0
  181. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/cancom_gap.json +8 -0
  182. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/cancom_transparent_id.json +10 -0
  183. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/fb_1m.json +12 -0
  184. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/fb_500k.json +12 -0
  185. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/fb_adaptive_single.json +7 -0
  186. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/fb_return_manual.json +22 -0
  187. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/fb_silent_adaptive_option.json +7 -0
  188. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/filter_blacklist.json +7 -0
  189. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/filter_mask.json +12 -0
  190. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/filter_range.json +12 -0
  191. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/hub_h_external.json +13 -0
  192. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/hub_input_filter.json +13 -0
  193. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/hub_l_external.json +13 -0
  194. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/hub_mapping.json +46 -0
  195. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/hub_routing.json +8 -0
  196. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/index.en.md +55 -0
  197. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/index.json +661 -0
  198. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/index.zh-CN.md +55 -0
  199. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/negative/adaptive_mixed.json +8 -0
  200. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/negative/hub_missing_ps.json +12 -0
  201. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/negative/restricted_inheritance.json +12 -0
  202. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/negative/short_user_data.json +7 -0
  203. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/negative/string_numeric_id.json +7 -0
  204. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/negative/unknown_field.json +7 -0
  205. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/negative/unsupported_adaptive.json +7 -0
  206. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/negative/wrong_uid.json +7 -0
  207. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/rpt_adaptive_all.json +12 -0
  208. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/rpt_silent.json +7 -0
  209. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/assets/examples/user_data.json +7 -0
  210. canconfigpython-0.1.0a1/src/canconfigpython/resources/skill/canconfig-python/references/operations.md +68 -0
  211. canconfigpython-0.1.0a1/src/canconfigpython/resources.py +17 -0
  212. canconfigpython-0.1.0a1/src/canconfigpython/runtime/Qt5Core.dll +0 -0
  213. canconfigpython-0.1.0a1/src/canconfigpython/runtime/Qt5Network.dll +0 -0
  214. canconfigpython-0.1.0a1/src/canconfigpython/runtime/Qt5SerialPort.dll +0 -0
  215. canconfigpython-0.1.0a1/src/canconfigpython/runtime/WIICAN.dll +0 -0
  216. canconfigpython-0.1.0a1/src/canconfigpython/runtime/canconfigconsole.exe +0 -0
  217. canconfigpython-0.1.0a1/src/canconfigpython/runtime/libgcc_s_dw2-1.dll +0 -0
  218. canconfigpython-0.1.0a1/src/canconfigpython/runtime/libstdc++-6.dll +0 -0
  219. canconfigpython-0.1.0a1/src/canconfigpython/runtime/libwinpthread-1.dll +0 -0
  220. canconfigpython-0.1.0a1/src/canconfigpython/runtime/manifest.json +19 -0
  221. canconfigpython-0.1.0a1/src/canconfigpython/runtime.py +61 -0
  222. canconfigpython-0.1.0a1/tests/conftest.py +45 -0
  223. canconfigpython-0.1.0a1/tests/test_cli.py +52 -0
  224. canconfigpython-0.1.0a1/tests/test_client.py +169 -0
  225. canconfigpython-0.1.0a1/tests/test_qt_free_root.py +126 -0
  226. canconfigpython-0.1.0a1/tests/test_remote_build.py +129 -0
  227. canconfigpython-0.1.0a1/tools/build_linux.sh +17 -0
  228. canconfigpython-0.1.0a1/tools/build_linux_remote.py +314 -0
  229. canconfigpython-0.1.0a1/tools/build_native.py +156 -0
  230. canconfigpython-0.1.0a1/tools/bundle_source.py +52 -0
  231. canconfigpython-0.1.0a1/tools/check_wheel.py +49 -0
  232. canconfigpython-0.1.0a1/tools/collect_linux_licenses.py +43 -0
  233. canconfigpython-0.1.0a1/tools/collect_windows_licenses.py +86 -0
  234. canconfigpython-0.1.0a1/tools/import_sources.py +41 -0
  235. canconfigpython-0.1.0a1/tools/port_snapshot.py +163 -0
  236. canconfigpython-0.1.0a1/tools/prepare_qt_free_root.py +166 -0
  237. canconfigpython-0.1.0a1/tools/publish_release.py +93 -0
  238. canconfigpython-0.1.0a1/tools/refresh_wheel_resources.py +74 -0
  239. canconfigpython-0.1.0a1/tools/rehash_runtime.py +19 -0
  240. canconfigpython-0.1.0a1/tools/repair_linux_wheel.py +47 -0
  241. canconfigpython-0.1.0a1/tools/smoke_installed.py +92 -0
  242. canconfigpython-0.1.0a1/tools/verify_linux_remote.py +124 -0
@@ -0,0 +1,32 @@
1
+ name: Linux build and package checks
2
+ on:
3
+ workflow_dispatch:
4
+ push:
5
+ pull_request:
6
+ permissions:
7
+ contents: read
8
+ jobs:
9
+ linux:
10
+ runs-on: ubuntu-22.04
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ - uses: actions/setup-python@v5
14
+ with:
15
+ python-version: '3.12'
16
+ - name: Install Qt build dependencies
17
+ run: sudo apt-get update && sudo apt-get install -y qtbase5-dev libqt5serialport5-dev patchelf
18
+ - name: Install Python build tools
19
+ run: python -m pip install build setuptools wheel pytest twine auditwheel PyYAML
20
+ - name: Build and test Linux runtime
21
+ run: bash tools/build_linux.sh
22
+ - name: Install without system Qt
23
+ run: |
24
+ docker run --rm -v "$PWD:/io:ro" python:3.12-slim-bookworm sh -c \
25
+ 'python -m pip install /io/dist/linux/*.whl && cd /tmp && python /io/tools/smoke_installed.py'
26
+ - uses: actions/upload-artifact@v4
27
+ with:
28
+ name: linux-wheel-and-validation
29
+ path: |
30
+ dist/linux/*.whl
31
+ build/native/*/test.log
32
+ licenses/linux-*
@@ -0,0 +1,17 @@
1
+ # CANConfigPython development
2
+
3
+ - This repository is a Python subprocess wrapper and a pinned native source snapshot.
4
+ Do not introduce a second Python serial protocol implementation.
5
+ - Do not modify sibling GUI/Console/driver repositories as a side effect of work here.
6
+ - Read native/upstream.json for provenance and native/PORTING.md for the local delta.
7
+ - Never test on physical hardware unless the user authorized the device and operation.
8
+ Use the isolated fake driver in build/native/fake for process integration tests.
9
+ - Preserve result envelope schema_version=1 and backend exit codes 0–12.
10
+ Missing final results after hardware execution are unknown; never auto-retry/rollback.
11
+ - Never log passwords or place them in arguments. Keep JSON stdout UTF-8.
12
+ - Build dependencies with tools/build_native.py; do not ship fake drivers.
13
+ A platform wheel must contain its runtime and notices, never be tagged "any".
14
+ - Run native unit tests, Python tests and installed-wheel smoke checks after changes.
15
+ Record simulated, platform and physical-device verification separately in VALIDATION.md.
16
+ - Keep bundled guides and Skill synchronized with observable CLI behavior.
17
+ User authorization persists; do not add repetitive confirmation gates.
@@ -0,0 +1,156 @@
1
+ # Build and release
2
+
3
+ Runtime protocol: Console 2.3, bridge API 1, JSON schema_version=1.
4
+ Python dependencies at runtime: standard library only. Native build: Qt 5 Core,
5
+ Network, SerialPort, Test, qmake, make and a C++11 compiler.
6
+
7
+ ## Windows
8
+
9
+ The tested toolchain is Qt 5.7.1 MinGW 5.3 32-bit. It builds an x86 subprocess,
10
+ usable by x86 and x64 Python. From a project-local Python development environment:
11
+
12
+ ~~~powershell
13
+ python -m pip install build setuptools wheel pytest twine PyYAML
14
+ python tools/build_native.py --qmake D:\Qt\Qt5.7.1\5.7\mingw53_32\bin\qmake.exe --compiler-bin D:\Qt\Qt5.7.1\Tools\mingw530_32\bin
15
+ python tools/collect_windows_licenses.py
16
+ python -m pytest -q
17
+ python tools/bundle_source.py
18
+ python -m build --wheel --sdist --no-isolation
19
+ $env:CANCONFIG_WHEEL_PLATFORM = 'win_amd64'
20
+ try { python -m build --wheel --no-isolation }
21
+ finally { Remove-Item Env:CANCONFIG_WHEEL_PLATFORM -ErrorAction SilentlyContinue }
22
+ ~~~
23
+
24
+ The default wheel is win32. Never merely rename a wheel; its internal tags must
25
+ match. The source archive includes this platform's staged runtime for matching
26
+ source installs; rebuild/stage the runtime on the other platform before building.
27
+ Source distributions require a supported native toolchain to create a runtime
28
+ when not already staged. Do not upload a generic "any" wheel.
29
+
30
+ To run full native process acceptance, put Qt/compiler bin directories on PATH for
31
+ that terminal, then:
32
+ ~~~console
33
+ python native/console/test_console_cli.py src/canconfigpython/runtime/canconfigconsole.exe build/native/fake/WIICAN.dll
34
+ ~~~
35
+ The test copies the executable and fake driver into an isolated directory. No
36
+ physical device is selected. Never ship the fake driver.
37
+
38
+ ## Linux x86_64
39
+
40
+ On Debian/Ubuntu, provision build dependencies in the dedicated build environment:
41
+ ~~~bash
42
+ sudo apt-get update
43
+ sudo apt-get install -y build-essential qtbase5-dev libqt5serialport5-dev patchelf python3-venv
44
+ python3 -m venv .venv
45
+ . .venv/bin/activate
46
+ python -m pip install build setuptools wheel pytest twine auditwheel PyYAML
47
+ bash tools/build_linux.sh
48
+ ~~~
49
+
50
+ The build preserves qmake launcher symlinks (including Ubuntu/Debian qtchooser),
51
+ selects Qt 5 and checks its version before compilation.
52
+ The script compiles and tests native code, resolves the non-glibc dependency closure,
53
+ collects distro license/source records, tests Python and native subprocess behavior,
54
+ builds a Linux wheel, audits/repairs it and refreshes runtime hashes/RECORD.
55
+ Auditwheel limitations around dlopen are handled by explicitly including WIICAN
56
+ and traversing its dependency closure before repair. It does not justify unsupported
57
+ glibc tags; an incompatible baseline fails the build.
58
+
59
+ The GitHub Actions workflow provides a Linux build plus an installed-wheel check
60
+ inside a fresh Python Debian container without Qt installed. It only builds/uploads
61
+ CI artifacts, not PyPI. Configure it in the chosen repository and inspect the actual
62
+ run before marking Linux verified. ARM64/musl are not first-release targets.
63
+
64
+ ## Build on an existing Linux SSH host
65
+
66
+ The optional helper uses one SSH connection for upload, build, checks and download.
67
+ Install its development-only dependency and provide an existing verified host-key file:
68
+
69
+ ~~~powershell
70
+ python -m pip install "paramiko>=3.4"
71
+ python tools/build_linux_remote.py --host HOST --user USER --known-hosts PATH_TO_KNOWN_HOSTS --identity PATH_TO_EXISTING_KEY --check-only
72
+ python tools/build_linux_remote.py --host HOST --user USER --known-hosts PATH_TO_KNOWN_HOSTS --identity PATH_TO_EXISTING_KEY
73
+ ~~~
74
+
75
+ For password authentication, run in your own terminal and replace the identity
76
+ option with --password-prompt. Input is hidden; passwords are never arguments,
77
+ logs or files. The helper rejects unknown/changed host keys and does not modify
78
+ authorized_keys. Verify a host key separately before adding it to known_hosts.
79
+
80
+ Auto mode uses Docker when the SSH user already has access: compilation runs in
81
+ Ubuntu 22.04 and installation is checked in a fresh Python Debian container without
82
+ system Qt. Otherwise it uses existing host build dependencies and an isolated venv;
83
+ the default only reports missing packages. Add --install-build-deps to install the
84
+ listed build packages on Ubuntu/Debian via apt and sudo. This option cannot be
85
+ combined with --check-only. If sudo requires a password, a second hidden prompt
86
+ appears in your local terminal; the password travels only through SSH stdin and
87
+ is never saved. No Docker daemon or SSH key is installed. Use --backend to select
88
+ docker or host explicitly. Host mode requires Python 3.10+ and the dependencies above.
89
+ Its isolated-venv check does not replace the Qt-free installation acceptance criterion.
90
+ When Docker is unavailable, tools/verify_linux_remote.py checks an existing wheel
91
+ in a separate filesystem prepared by tools/prepare_qt_free_root.py. It copies the
92
+ system Python runtime and its dependencies, installs only the exact wheel, adds
93
+ only the native runtime's OS-provided glibc dependencies (including libresolv), and
94
+ asserts that all Qt/WIICAN libraries are inside that installed wheel. It enters
95
+ the filesystem via sudo/chroot, drops to the build user's numeric UID/GID before
96
+ executing tests, mounts no host directories and exposes no device nodes. No host
97
+ Qt package is changed. This verifies bundled dependencies on the host's glibc;
98
+ it does not verify older distributions or constitute a security sandbox.
99
+ The seven installed checks and the verified wheel SHA-256 are downloaded to
100
+ validation/linux/clean-install.json, qt-free-smoke.json and qt-free-root.json.
101
+ Before the CLI checks, the isolated ELF loader resolves every native file with
102
+ --list. Its results are retained in qt-free-elf-check.json even on failure;
103
+ the root inventory is downloaded before running tests. Non-glibc dependencies
104
+ resolved outside the bundled runtime fail preparation instead of being silently
105
+ copied from the host.
106
+
107
+ Each run creates a separate canconfigpython-build-* directory in the remote home.
108
+ Linux wheels are downloaded to dist/linux with transfer hashes checked. Logs and
109
+ status are in build/linux-remote.log and build/linux-remote-state.json; native test
110
+ logs/source notices are in validation/linux. No hardware commands or PyPI uploads
111
+ are executed. On interruption, inspect the retained remote build/container before
112
+ restarting. A failed build may leave only remote logs; its path remains in the state.
113
+
114
+ ## Validate a release
115
+
116
+ ~~~console
117
+ python tools/check_wheel.py dist/WHEEL_FILENAME.whl
118
+ python -m twine check dist/*
119
+ ~~~
120
+
121
+ Install each platform wheel in a clean environment outside the source directory.
122
+ Run version, doctor, schema, docs/skill export and offline firmware preflight.
123
+ The installed interpreter can run `python tools/smoke_installed.py --report REPORT.json`
124
+ to check those seven offline paths from a temporary working directory.
125
+ Verify upgrade/uninstall behavior and rerun relevant fake-driver tests for changes.
126
+ Physical configuration/password/firmware operations require explicit device scope
127
+ and separate hardware records. Update VALIDATION.md with actual evidence.
128
+
129
+ Do not bundle compiler tools, compiled fake drivers, real credentials, build logs, caches,
130
+ test firmware, local SSH host-key state or downloaded source archives inside wheels.
131
+ Native source/build scripts are in the sdist and the compact corresponding-source
132
+ archive in every wheel. Run tools/bundle_source.py after source changes and before
133
+ building: Console includes GPL-3.0-or-later Ymodem, while Python code remains MIT.
134
+
135
+ ## Publish
136
+
137
+ PyPI account credentials are not stored in this repository.
138
+ Once both required platforms and release criteria are verified, upload the exact
139
+ checked artifacts using your existing account:
140
+
141
+ ~~~console
142
+ python -m twine upload dist/canconfigpython-0.1.0a1-*.whl dist/canconfigpython-0.1.0a1.tar.gz
143
+ ~~~
144
+
145
+ A Linux wheel may be in dist/linux; include its explicit path when uploading.
146
+ The local release helper tools/publish_release.py checks build/release-manifest.json,
147
+ all artifact hashes and metadata, and the exact Linux wheel's Qt-free acceptance
148
+ record before calling Twine. --check-only verifies files/metadata without uploading.
149
+ After uploading, it compares PyPI's reported filenames and SHA-256 values with the
150
+ manifest and writes validation/pypi-release.json. It refuses a preexisting filename
151
+ with a different digest; an interrupted partial upload can resume only matching files.
152
+ Enter the token via Twine's hidden prompt or a locally configured credential store.
153
+ Never paste tokens in chat or commit .pypirc. A configured PyPI Trusted Publisher
154
+ is another option; it must match the chosen repository/workflow. Version uploads
155
+ are immutable, so do not upload a partially validated replacement under the same
156
+ version. No upload is performed by build_linux.sh or the CI build workflow.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 CANConfigPython contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,10 @@
1
+ include LICENSE THIRD_PARTY_NOTICES.md README.md
2
+ include AGENTS.md DEVELOPING.md VALIDATION.md
3
+ recursive-include licenses *
4
+ recursive-include native *.cpp *.h *.pro *.pri *.json *.md *.py
5
+ recursive-include tools *.py *.sh
6
+ recursive-include tests *.py
7
+ recursive-include src/canconfigpython/resources *
8
+ recursive-include src/canconfigpython/runtime *
9
+ recursive-include .github *.yml
10
+ global-exclude __pycache__ *.pyc
@@ -0,0 +1,197 @@
1
+ Metadata-Version: 2.1
2
+ Name: CANConfigPython
3
+ Version: 0.1.0a1
4
+ Summary: CAN device configuration CLI using a bundled Qt/WIICAN console backend
5
+ Author: CANConfigPython contributors
6
+ License: Python wrapper: MIT; bundled Console: GPL-3.0-or-later; other components: see THIRD_PARTY_NOTICES.md
7
+ Keywords: can,canconfig,canhub,serial
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Environment :: Console
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Operating System :: Microsoft :: Windows
12
+ Classifier: Operating System :: POSIX :: Linux
13
+ Classifier: Topic :: System :: Hardware
14
+ Requires-Python: >=3.8
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ License-File: THIRD_PARTY_NOTICES.md
18
+ License-File: licenses\GPL-3.0.txt
19
+ License-File: licenses\Qt-5.7.1-LICENSE.txt
20
+ License-File: licenses\Qt-5.7.1-qtbase-LICENSE.FDL.txt
21
+ License-File: licenses\Qt-5.7.1-qtbase-LICENSE.GPL2.txt
22
+ License-File: licenses\Qt-5.7.1-qtbase-LICENSE.GPL3-EXCEPT.txt
23
+ License-File: licenses\Qt-5.7.1-qtbase-LICENSE.GPL3.txt
24
+ License-File: licenses\Qt-5.7.1-qtbase-LICENSE.GPLv3.txt
25
+ License-File: licenses\Qt-5.7.1-qtbase-LICENSE.LGPL3.txt
26
+ License-File: licenses\Qt-5.7.1-qtbase-LICENSE.LGPLv21.txt
27
+ License-File: licenses\Qt-5.7.1-qtbase-LICENSE.LGPLv3.txt
28
+ License-File: licenses\Qt-5.7.1-qtbase-LICENSE.PREVIEW.COMMERCIAL.txt
29
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__angle__LICENSE.txt
30
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__angle__src__libANGLE__renderer__d3d__d3d11__dxgi_support_data.json.txt
31
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__angle__src__libANGLE__renderer__d3d__d3d11__load_functions_data.json.txt
32
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__angle__src__libANGLE__renderer__d3d__d3d11__swizzle_format_data.json.txt
33
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__angle__src__libANGLE__renderer__d3d__d3d11__texture_format_data.json.txt
34
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__angle__src__third_party__compiler__LICENSE.txt
35
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__angle__src__third_party__murmurhash__LICENSE.txt
36
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__double-conversion__LICENSE.txt
37
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__easing__easing.cpp.txt
38
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__easing__legal.qdoc.txt
39
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__forkfd__forkfd.c.txt
40
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__forkfd__forkfd.h.txt
41
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__forkfd__forkfd_gcc.h.txt
42
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__freebsd__0001-Patch-the-FreeBSD-strto-u-ll-functions-to-work-insid.patch.txt
43
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__freebsd__strtoll.c.txt
44
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__freebsd__strtoull.c.txt
45
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__freetype__docs__LICENSE.TXT.txt
46
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__freetype__src__tools__no-copyright.txt
47
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__freetype__src__tools__update-copyright-year.txt
48
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__freetype__src__tools__update-copyright.txt
49
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__harfbuzz-ng__COPYING.txt
50
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__harfbuzz__COPYING.txt
51
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__libpng__LICENSE.txt
52
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__md4__md4.cpp.txt
53
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__md4__md4.h.txt
54
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__md5__md5.cpp.txt
55
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__md5__md5.h.txt
56
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__pcre__COPYING.txt
57
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__pcre__LICENCE.txt
58
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__rfc6234__patches__0001-Fix-compilation-MSVC-warning-in-3rdparty-rfc6234.patch.txt
59
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__rfc6234__sha-private.h.txt
60
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__rfc6234__sha.h.txt
61
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__rfc6234__sha224-256.c.txt
62
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__rfc6234__sha384-512.c.txt
63
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__sha1__sha1.cpp.txt
64
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-32-rvk.macros.txt
65
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-32.macros.txt
66
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-64.macros.txt
67
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-int-set.h.txt
68
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-interface.h.txt
69
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-opt32-settings.h.txt
70
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-opt32.c.txt
71
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-opt64-settings.h.txt
72
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-opt64.c.txt
73
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakF-1600-unrolling.macros.txt
74
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakNISTInterface.c.txt
75
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakNISTInterface.h.txt
76
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakSponge.c.txt
77
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__sha3__KeccakSponge.h.txt
78
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__sha3__brg_endian.h.txt
79
+ License-File: licenses\Qt-5.7.1-qtbase-src__3rdparty__xkbcommon__COPYING.txt
80
+ License-File: licenses\Qt-5.7.1-qtserialport-LICENSE.FDL.txt
81
+ License-File: licenses\Qt-5.7.1-qtserialport-LICENSE.GPL2.txt
82
+ License-File: licenses\Qt-5.7.1-qtserialport-LICENSE.GPL3-EXCEPT.txt
83
+ License-File: licenses\Qt-5.7.1-qtserialport-LICENSE.GPL3.txt
84
+ License-File: licenses\Qt-5.7.1-qtserialport-LICENSE.GPLv2.txt
85
+ License-File: licenses\Qt-5.7.1-qtserialport-LICENSE.GPLv3.txt
86
+ License-File: licenses\Qt-5.7.1-qtserialport-LICENSE.LGPL3.txt
87
+ License-File: licenses\Qt-5.7.1-qtserialport-LICENSE.LGPLv21.txt
88
+ License-File: licenses\Qt-5.7.1-qtserialport-LICENSE.LGPLv3.txt
89
+ License-File: licenses\gcc-COPYING.RUNTIME.txt
90
+ License-File: licenses\gcc-COPYING3.LIB.txt
91
+ License-File: licenses\gcc-COPYING3.txt
92
+ License-File: licenses\linux-libc6-copyright.txt
93
+ License-File: licenses\linux-libcap2-copyright.txt
94
+ License-File: licenses\linux-libcom-err2-copyright.txt
95
+ License-File: licenses\linux-libdouble-conversion3-copyright.txt
96
+ License-File: licenses\linux-libgcc-s1-copyright.txt
97
+ License-File: licenses\linux-libglib2.0-0t64-copyright.txt
98
+ License-File: licenses\linux-libgssapi-krb5-2-copyright.txt
99
+ License-File: licenses\linux-libicu74-copyright.txt
100
+ License-File: licenses\linux-libk5crypto3-copyright.txt
101
+ License-File: licenses\linux-libkeyutils1-copyright.txt
102
+ License-File: licenses\linux-libkrb5-3-copyright.txt
103
+ License-File: licenses\linux-libkrb5support0-copyright.txt
104
+ License-File: licenses\linux-libpcre2-16-0-copyright.txt
105
+ License-File: licenses\linux-libpcre2-8-0-copyright.txt
106
+ License-File: licenses\linux-libqt5core5t64-copyright.txt
107
+ License-File: licenses\linux-libqt5network5t64-copyright.txt
108
+ License-File: licenses\linux-libqt5serialport5-copyright.txt
109
+ License-File: licenses\linux-libstdc++6-copyright.txt
110
+ License-File: licenses\linux-libudev1-copyright.txt
111
+ License-File: licenses\linux-libzstd1-copyright.txt
112
+ License-File: licenses\linux-packages.json
113
+ License-File: licenses\linux-zlib1g-copyright.txt
114
+ License-File: licenses\mingw-w64-COPYING.MinGW-w64-runtime.txt.txt
115
+ License-File: licenses\mingw-w64-COPYING.MinGW-w64.txt.txt
116
+ License-File: licenses\mingw-w64-COPYING.txt
117
+ License-File: licenses\qt-source-notices.json
118
+ License-File: licenses\winpthreads-COPYING.txt
119
+ Provides-Extra: dev
120
+ Requires-Dist: pytest>=7; extra == "dev"
121
+ Requires-Dist: build>=1; extra == "dev"
122
+ Requires-Dist: twine>=5; extra == "dev"
123
+ Requires-Dist: PyYAML>=6; extra == "dev"
124
+
125
+ # CANConfigPython
126
+
127
+ Python CLI and API for CANHub, CANFB, CANBridge, CANRPT and CANCOM configuration.
128
+ The package runs a bundled Qt console subprocess, which uses WIICAN. It does not
129
+ require a GUI installation or a separately installed Qt runtime.
130
+
131
+ **0.1.0a1 is a prerelease.** Windows wheels are tested with Python 3.8 x86 and
132
+ Python 3.12 x64; both run the bundled x86 runtime as a separate process.
133
+ The Linux x86_64 wheel requires glibc 2.38 or later and was built/tested on
134
+ Ubuntu 24.04 with Python 3.12 and Qt 5.15.13. The bundled runtime contains Console,
135
+ WIICAN and the required Qt/shared libraries. Consult VALIDATION.md and the release
136
+ evidence for installation checks. ARM64, macOS and musl are not supported.
137
+
138
+ ~~~text
139
+ canconfig / Python Client
140
+ -> CANConfigConsole.exe + WIICAN.dll (Windows)
141
+ -> CANConfigConsole + libWIICAN.so.1 (Linux)
142
+ ~~~
143
+
144
+ ## First use
145
+
146
+ Until the project is uploaded, install the supplied local wheel:
147
+ ~~~console
148
+ python -m pip install path/to/canconfigpython-0.1.0a1-py3-none-win_amd64.whl
149
+ canconfig --version --json
150
+ canconfig doctor --json
151
+ canconfig docs export --output ./canconfig-docs
152
+ canconfig skill export --output ./canconfig-skill
153
+ ~~~
154
+
155
+ After publication, use `python -m pip install --pre CANConfigPython`.
156
+ `doctor`, `schema`, `validate` and firmware `--dry-run` do not open hardware.
157
+ Configuration `info` and `--dry-run` do connect and may change the device run mode.
158
+
159
+ - [中文使用说明](src/canconfigpython/resources/docs/user-guide.zh-CN.md)
160
+ - [English user guide](src/canconfigpython/resources/docs/user-guide.en.md)
161
+ - [Agent Skill](src/canconfigpython/resources/skill/canconfig-python/SKILL.md)
162
+ - [Build and release](DEVELOPING.md)
163
+ - [Validation record](VALIDATION.md)
164
+ - [Third-party notices](THIRD_PARTY_NOTICES.md)
165
+
166
+ ## Python API
167
+
168
+ ~~~python
169
+ from canconfigpython import Client, ConfigError
170
+
171
+ client = Client()
172
+ try:
173
+ result = client.execute("info", port="COM3") # Linux: /dev/serial/by-id/...
174
+ except ConfigError as error:
175
+ print(error.code, error.message)
176
+ else:
177
+ print(result["exit_code"], result["effects"], result["verification"])
178
+ ~~~
179
+
180
+ `execute(command, password=..., new_password=..., **options)` uses snake_case options
181
+ such as `expect_uid`, `dry_run`, and `timeout_ms`; its command names match the CLI.
182
+ Provide passwords from a secret store or prompt, not source code. Backend failures
183
+ return the full result; callers must check `ok` and `exit_code`.
184
+ Local validation/runtime errors raise `ConfigError`. The wrapper does not retry.
185
+
186
+ The Python layer uses only the standard library. Python 3.8+ is supported by syntax;
187
+ see the validation record for interpreter versions actually tested.
188
+
189
+ ## License
190
+
191
+ The Python wrapper and project additions are MIT. The bundled Console incorporates
192
+ XinLi's GPL-3.0-or-later Ymodem implementation and is distributed under that license.
193
+ Its corresponding project source is included in every wheel as
194
+ `canconfigpython/resources/docs/native-source.tar.gz` (also exported by `canconfig docs export`).
195
+ Qt and compiler runtime components retain their own licenses. Materials and rebuild instructions are in
196
+ [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md). A runtime manifest checks bundle
197
+ consistency; it is not a publisher signature.
@@ -0,0 +1,73 @@
1
+ # CANConfigPython
2
+
3
+ Python CLI and API for CANHub, CANFB, CANBridge, CANRPT and CANCOM configuration.
4
+ The package runs a bundled Qt console subprocess, which uses WIICAN. It does not
5
+ require a GUI installation or a separately installed Qt runtime.
6
+
7
+ **0.1.0a1 is a prerelease.** Windows wheels are tested with Python 3.8 x86 and
8
+ Python 3.12 x64; both run the bundled x86 runtime as a separate process.
9
+ The Linux x86_64 wheel requires glibc 2.38 or later and was built/tested on
10
+ Ubuntu 24.04 with Python 3.12 and Qt 5.15.13. The bundled runtime contains Console,
11
+ WIICAN and the required Qt/shared libraries. Consult VALIDATION.md and the release
12
+ evidence for installation checks. ARM64, macOS and musl are not supported.
13
+
14
+ ~~~text
15
+ canconfig / Python Client
16
+ -> CANConfigConsole.exe + WIICAN.dll (Windows)
17
+ -> CANConfigConsole + libWIICAN.so.1 (Linux)
18
+ ~~~
19
+
20
+ ## First use
21
+
22
+ Until the project is uploaded, install the supplied local wheel:
23
+ ~~~console
24
+ python -m pip install path/to/canconfigpython-0.1.0a1-py3-none-win_amd64.whl
25
+ canconfig --version --json
26
+ canconfig doctor --json
27
+ canconfig docs export --output ./canconfig-docs
28
+ canconfig skill export --output ./canconfig-skill
29
+ ~~~
30
+
31
+ After publication, use `python -m pip install --pre CANConfigPython`.
32
+ `doctor`, `schema`, `validate` and firmware `--dry-run` do not open hardware.
33
+ Configuration `info` and `--dry-run` do connect and may change the device run mode.
34
+
35
+ - [中文使用说明](src/canconfigpython/resources/docs/user-guide.zh-CN.md)
36
+ - [English user guide](src/canconfigpython/resources/docs/user-guide.en.md)
37
+ - [Agent Skill](src/canconfigpython/resources/skill/canconfig-python/SKILL.md)
38
+ - [Build and release](DEVELOPING.md)
39
+ - [Validation record](VALIDATION.md)
40
+ - [Third-party notices](THIRD_PARTY_NOTICES.md)
41
+
42
+ ## Python API
43
+
44
+ ~~~python
45
+ from canconfigpython import Client, ConfigError
46
+
47
+ client = Client()
48
+ try:
49
+ result = client.execute("info", port="COM3") # Linux: /dev/serial/by-id/...
50
+ except ConfigError as error:
51
+ print(error.code, error.message)
52
+ else:
53
+ print(result["exit_code"], result["effects"], result["verification"])
54
+ ~~~
55
+
56
+ `execute(command, password=..., new_password=..., **options)` uses snake_case options
57
+ such as `expect_uid`, `dry_run`, and `timeout_ms`; its command names match the CLI.
58
+ Provide passwords from a secret store or prompt, not source code. Backend failures
59
+ return the full result; callers must check `ok` and `exit_code`.
60
+ Local validation/runtime errors raise `ConfigError`. The wrapper does not retry.
61
+
62
+ The Python layer uses only the standard library. Python 3.8+ is supported by syntax;
63
+ see the validation record for interpreter versions actually tested.
64
+
65
+ ## License
66
+
67
+ The Python wrapper and project additions are MIT. The bundled Console incorporates
68
+ XinLi's GPL-3.0-or-later Ymodem implementation and is distributed under that license.
69
+ Its corresponding project source is included in every wheel as
70
+ `canconfigpython/resources/docs/native-source.tar.gz` (also exported by `canconfig docs export`).
71
+ Qt and compiler runtime components retain their own licenses. Materials and rebuild instructions are in
72
+ [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md). A runtime manifest checks bundle
73
+ consistency; it is not a publisher signature.
@@ -0,0 +1,69 @@
1
+ # Third-party notices
2
+
3
+ The Python wrapper and original project additions are MIT. This does **not**
4
+ relicense upstream code or libraries shipped with it.
5
+
6
+ ## Console and Ymodem
7
+
8
+ native/shared/Ymodem.cpp and Ymodem.h are Copyright (c) 2018 XinLi and licensed
9
+ under GPL-3.0-or-later, as their original headers state. The Console links that
10
+ implementation and is distributed under GPL-3.0-or-later; it is not an MIT-only
11
+ executable. The license text is in licenses/GPL-3.0.txt. MIT notices remain on
12
+ project-owned contributions; upstream copyright and license headers are retained.
13
+
14
+ Every wheel includes the corresponding project source and build scripts at
15
+ canconfigpython/resources/docs/native-source.tar.gz. Export it with `canconfig docs export`,
16
+ extract it and follow DEVELOPING.md to rebuild. The PyPI source distribution
17
+ also contains these sources. Qt/compiler dependency source locations are recorded
18
+ below and in the collected license/source records. Keep these materials together
19
+ when distributing binaries. The Python wrapper communicates with the separate
20
+ Console process using its CLI and retains its MIT license.
21
+
22
+ ## Windows runtime
23
+
24
+ | Files | Component | License materials |
25
+ |---|---|---|
26
+ | Qt5Core.dll, Qt5Network.dll, Qt5SerialPort.dll | Qt 5.7.1, The Qt Company and contributors | Qt LGPLv3/GPLv3 texts and source-component notices in licenses |
27
+ | libgcc_s_dw2-1.dll, libstdc++-6.dll | GCC 5.3 runtime | GPLv3 with GCC Runtime Library Exception; gcc-* texts |
28
+ | libwinpthread-1.dll | MinGW-w64 winpthreads | winpthreads-COPYING.txt and mingw-w64-* texts |
29
+ | WIICAN.dll | Project driver source snapshot | LICENSE and native/upstream.json |
30
+ | Console executable | Project source plus XinLi Ymodem | GPL-3.0-or-later; licenses/GPL-3.0.txt and bundled source |
31
+
32
+ The Qt source license collection can include notices for source components not
33
+ linked into these libraries. It is preserved to retain third-party attributions.
34
+ Only the runtime dependency closure is bundled.
35
+
36
+ Exact Qt source packages:
37
+ - [QtBase 5.7.1](https://download.qt.io/archive/qt/5.7/5.7.1/submodules/qtbase-opensource-src-5.7.1.tar.xz)
38
+ - [QtSerialPort 5.7.1](https://download.qt.io/archive/qt/5.7/5.7.1/submodules/qtserialport-opensource-src-5.7.1.tar.xz)
39
+ - [GCC 5.3 source](https://ftp.gnu.org/gnu/gcc/gcc-5.3.0/)
40
+ - [MinGW-w64 source project](https://www.mingw-w64.org/)
41
+
42
+ Windows uses dynamically linked Qt 5.7.1 from the MinGW 5.3 32-bit distribution.
43
+ No modifications to those Qt binaries are made. Preserve matching source
44
+ access and notices when redistributing.
45
+
46
+ ## Linux runtime
47
+
48
+ Linux uses separately compiled Console/WIICAN and Qt 5 shared objects.
49
+ Exact packages/versions are recorded by tools/collect_linux_licenses.py in
50
+ licenses/linux-packages.json when a Linux build is performed. Adjacent copyright
51
+ files identify licenses and sources. On Debian/Ubuntu obtain matching sources
52
+ with apt-get source and the recorded source package/version (enable source
53
+ repositories first). Preserve equivalent source access for other toolchains.
54
+
55
+ The Linux wheel contains its non-glibc runtime closure. glibc and the ELF loader
56
+ are system dependencies governed by the audited manylinux baseline.
57
+
58
+ ## Replacing or rebuilding libraries
59
+
60
+ Users may modify/replace LGPL-covered libraries and debug those modifications.
61
+ There is no publisher signature or DRM lock. Runtime SHA-256 checks bundle
62
+ consistency only. Build with compatible Qt, then run tools/build_native.py to
63
+ restage and regenerate the manifest. Build/install your resulting wheel.
64
+ For intentionally modified prebuilt libraries, tools/rehash_runtime.py accepts
65
+ local replacements without claiming publisher authenticity. Maintain architecture/
66
+ ABI and rerun tests.
67
+
68
+ The source distribution contains native source/build instructions so the executable
69
+ can be rebuilt/relinked. Retain license texts and source access for modified builds.
@@ -0,0 +1,65 @@
1
+ # Validation record — 2026-10-16
2
+
3
+ Version: CANConfigPython 0.1.0a1 / Console 2.3 / bridge API 1.
4
+ Stage: local prerelease candidate; not published to PyPI.
5
+
6
+ | Check | Evidence/status |
7
+ |---|---|
8
+ | Windows native configuration core | PASS: 167 Qt tests |
9
+ | Windows firmware transport simulation | PASS: 29 Qt tests |
10
+ | Windows Console subprocess + fake driver | PASS: 83 tests including documented examples |
11
+ | Python wrapper | PASS: 55 tests on Windows Python 3.8 x86; original 42 on Linux Python 3.12; 13 Qt-free checker/loader regressions |
12
+ | Agent Skill structure | PASS: skill-creator quick_validate.py in UTF-8 mode |
13
+ | Windows wheel structure/install | PASS: win32 and win_amd64; Python 3.8.0 x86 and 3.12.10 x64; seven offline smoke checks per interpreter |
14
+ | Windows installation lifecycle | PASS: force-reinstall on both; uninstall/removal/reinstall on x86; pip check on both |
15
+ | Package metadata/integrity | PASS: twine check, wheel RECORD, runtime hashes; GPL Console source bundled and checked |
16
+ | Qt toolchain selection | PASS: Windows Qt 5.7.1 and Linux Qt 5.15.13; preserves qtchooser launcher symlinks |
17
+ | Remote Linux build helper | PASS: SSH authentication, dependency provisioning, build, tests, artifact transfer and SHA-256 |
18
+ | Linux native configuration/firmware | PASS: 167 + 29 Qt tests on Ubuntu 24.04.5 x86_64 |
19
+ | Linux Console subprocess + fake driver | PASS: 82; SKIP: one Windows console-event test (83 cases total) |
20
+ | Linux packaging | PASS: auditwheel, RECORD/runtime hashes, licenses and source; manylinux_2_38_x86_64 / manylinux_2_39_x86_64 |
21
+ | Linux installed wheel on build host | PASS: seven offline checks with Python 3.12.3 |
22
+ | Linux without system Qt | PENDING: license-text classification fixed; native glibc closure added after isolated WIICAN load failure; exact-wheel check required before upload |
23
+ | Physical hardware config/password/firmware | NOT_CHECKED; no device operations performed |
24
+ | PyPI publication | NOT_UPLOADED; credentials not configured in this session |
25
+
26
+ The Linux build completed on Ubuntu 24.04.5, Python 3.12.3, Qt 5.15.13 and
27
+ glibc 2.39. Auditwheel established a minimum glibc of 2.38 for the produced wheel.
28
+ The source/runtime packages are recorded in licenses/linux-packages.json. Build
29
+ and test evidence is in validation/linux. The host-venv installation passed;
30
+ the final Qt-free filesystem check remains separate and is required by the
31
+ upload helper. An initial Qt-free preparation attempt incorrectly classified
32
+ Qt license text as an external library. The checker now inspects ELF file headers,
33
+ validates both installed paths and symlink targets, and reports offending paths.
34
+ Regression cases cover notices, external libraries, pre-install contamination and
35
+ disguised ELF files; the real Linux wheel is checked locally as well.
36
+ The subsequent isolated run started Python successfully but failed WIICAN loading.
37
+ ELF inspection identifies four external system libraries: the loader, libc, libm
38
+ and libresolv. Preparation previously copied only Python's dependencies; it now
39
+ also copies the native runtime's strictly allowed glibc dependencies and rejects
40
+ any missing non-glibc runtime library. A loader check precedes CLI execution and
41
+ keeps concrete missing-library diagnostics. Full isolated execution remains
42
+ pending until the corrected helper runs on the Linux host.
43
+ Passwords are local terminal input, never files or chat.
44
+
45
+ Python code is MIT. Console incorporates existing GPL-3.0-or-later Ymodem source;
46
+ its license and corresponding project source are preserved in each wheel.
47
+
48
+ ## Documentation coverage versus validation
49
+
50
+ | Function | Chinese/English coverage | Validation |
51
+ |---|---|---|
52
+ | Install, version, doctor, help, schema | COMPLETE | PASS_CLI / PASS_INSTALLED_WHEEL_WINDOWS_AND_LINUX_HOST |
53
+ | Export docs and Skill | COMPLETE | PASS_CLI |
54
+ | Device identity/capabilities | COMPLETE | PASS_FAKE_DRIVER |
55
+ | INI export/validate/restore and sections | COMPLETE | PASS_FAKE_DRIVER |
56
+ | JSON syntax/snapshot/parameter apply | COMPLETE | PASS_FAKE_DRIVER |
57
+ | Adaptive mode boundaries | COMPLETE | PASS_NATIVE_SIMULATION |
58
+ | Password change and result handling | COMPLETE | PASS_FAKE_DRIVER |
59
+ | Firmware preflight and Ymodem outcomes | COMPLETE | PASS_NATIVE_SIMULATION |
60
+ | Timeout, interruption and unknown effects | COMPLETE | PASS_CLI / PASS_NATIVE_SIMULATION |
61
+ | Linux permissions/device aliases | COMPLETE | PASS_LINUX_BUILD / PENDING_HARDWARE |
62
+ | Actual device/flash/power-cycle behavior | COMPLETE limitations | PENDING_HARDWARE |
63
+
64
+ COMPLETE describes written coverage, not hardware acceptance. Fake-driver success
65
+ does not prove actual electrical communication, device timing or persistence.