meerk40t 0.9.3001__py2.py3-none-any.whl → 0.9.7010__py2.py3-none-any.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.
- meerk40t/__init__.py +1 -1
- meerk40t/balormk/balor_params.py +167 -167
- meerk40t/balormk/clone_loader.py +457 -457
- meerk40t/balormk/controller.py +1566 -1512
- meerk40t/balormk/cylindermod.py +64 -0
- meerk40t/balormk/device.py +966 -1959
- meerk40t/balormk/driver.py +778 -591
- meerk40t/balormk/galvo_commands.py +1195 -0
- meerk40t/balormk/gui/balorconfig.py +237 -111
- meerk40t/balormk/gui/balorcontroller.py +191 -184
- meerk40t/balormk/gui/baloroperationproperties.py +116 -115
- meerk40t/balormk/gui/corscene.py +845 -0
- meerk40t/balormk/gui/gui.py +179 -147
- meerk40t/balormk/livelightjob.py +466 -382
- meerk40t/balormk/mock_connection.py +131 -109
- meerk40t/balormk/plugin.py +133 -135
- meerk40t/balormk/usb_connection.py +306 -301
- meerk40t/camera/__init__.py +1 -1
- meerk40t/camera/camera.py +514 -397
- meerk40t/camera/gui/camerapanel.py +1241 -1095
- meerk40t/camera/gui/gui.py +58 -58
- meerk40t/camera/plugin.py +441 -399
- meerk40t/ch341/__init__.py +27 -27
- meerk40t/ch341/ch341device.py +628 -628
- meerk40t/ch341/libusb.py +595 -589
- meerk40t/ch341/mock.py +171 -171
- meerk40t/ch341/windriver.py +157 -157
- meerk40t/constants.py +13 -0
- meerk40t/core/__init__.py +1 -1
- meerk40t/core/bindalias.py +550 -539
- meerk40t/core/core.py +47 -47
- meerk40t/core/cutcode/cubiccut.py +73 -73
- meerk40t/core/cutcode/cutcode.py +315 -312
- meerk40t/core/cutcode/cutgroup.py +141 -137
- meerk40t/core/cutcode/cutobject.py +192 -185
- meerk40t/core/cutcode/dwellcut.py +37 -37
- meerk40t/core/cutcode/gotocut.py +29 -29
- meerk40t/core/cutcode/homecut.py +29 -29
- meerk40t/core/cutcode/inputcut.py +34 -34
- meerk40t/core/cutcode/linecut.py +33 -33
- meerk40t/core/cutcode/outputcut.py +34 -34
- meerk40t/core/cutcode/plotcut.py +335 -335
- meerk40t/core/cutcode/quadcut.py +61 -61
- meerk40t/core/cutcode/rastercut.py +168 -148
- meerk40t/core/cutcode/waitcut.py +34 -34
- meerk40t/core/cutplan.py +1843 -1316
- meerk40t/core/drivers.py +330 -329
- meerk40t/core/elements/align.py +801 -669
- meerk40t/core/elements/branches.py +1844 -1507
- meerk40t/core/elements/clipboard.py +229 -219
- meerk40t/core/elements/element_treeops.py +4561 -2837
- meerk40t/core/elements/element_types.py +125 -105
- meerk40t/core/elements/elements.py +4329 -3617
- meerk40t/core/elements/files.py +117 -64
- meerk40t/core/elements/geometry.py +473 -224
- meerk40t/core/elements/grid.py +467 -316
- meerk40t/core/elements/materials.py +158 -94
- meerk40t/core/elements/notes.py +50 -38
- meerk40t/core/elements/offset_clpr.py +933 -912
- meerk40t/core/elements/offset_mk.py +963 -955
- meerk40t/core/elements/penbox.py +339 -267
- meerk40t/core/elements/placements.py +300 -83
- meerk40t/core/elements/render.py +785 -687
- meerk40t/core/elements/shapes.py +2618 -2092
- meerk40t/core/elements/trace.py +651 -563
- meerk40t/core/elements/tree_commands.py +415 -409
- meerk40t/core/elements/undo_redo.py +116 -58
- meerk40t/core/elements/wordlist.py +319 -200
- meerk40t/core/exceptions.py +9 -9
- meerk40t/core/laserjob.py +220 -220
- meerk40t/core/logging.py +63 -63
- meerk40t/core/node/blobnode.py +83 -86
- meerk40t/core/node/bootstrap.py +105 -103
- meerk40t/core/node/branch_elems.py +40 -31
- meerk40t/core/node/branch_ops.py +45 -38
- meerk40t/core/node/branch_regmark.py +48 -41
- meerk40t/core/node/cutnode.py +29 -32
- meerk40t/core/node/effect_hatch.py +375 -257
- meerk40t/core/node/effect_warp.py +398 -0
- meerk40t/core/node/effect_wobble.py +441 -309
- meerk40t/core/node/elem_ellipse.py +404 -309
- meerk40t/core/node/elem_image.py +1082 -801
- meerk40t/core/node/elem_line.py +358 -292
- meerk40t/core/node/elem_path.py +259 -201
- meerk40t/core/node/elem_point.py +129 -102
- meerk40t/core/node/elem_polyline.py +310 -246
- meerk40t/core/node/elem_rect.py +376 -286
- meerk40t/core/node/elem_text.py +445 -418
- meerk40t/core/node/filenode.py +59 -40
- meerk40t/core/node/groupnode.py +138 -74
- meerk40t/core/node/image_processed.py +777 -766
- meerk40t/core/node/image_raster.py +156 -113
- meerk40t/core/node/layernode.py +31 -31
- meerk40t/core/node/mixins.py +135 -107
- meerk40t/core/node/node.py +1427 -1304
- meerk40t/core/node/nutils.py +117 -114
- meerk40t/core/node/op_cut.py +462 -335
- meerk40t/core/node/op_dots.py +296 -251
- meerk40t/core/node/op_engrave.py +414 -311
- meerk40t/core/node/op_image.py +755 -369
- meerk40t/core/node/op_raster.py +787 -522
- meerk40t/core/node/place_current.py +37 -40
- meerk40t/core/node/place_point.py +329 -126
- meerk40t/core/node/refnode.py +58 -47
- meerk40t/core/node/rootnode.py +225 -219
- meerk40t/core/node/util_console.py +48 -48
- meerk40t/core/node/util_goto.py +84 -65
- meerk40t/core/node/util_home.py +61 -61
- meerk40t/core/node/util_input.py +102 -102
- meerk40t/core/node/util_output.py +102 -102
- meerk40t/core/node/util_wait.py +65 -65
- meerk40t/core/parameters.py +709 -707
- meerk40t/core/planner.py +875 -785
- meerk40t/core/plotplanner.py +656 -652
- meerk40t/core/space.py +120 -113
- meerk40t/core/spoolers.py +706 -705
- meerk40t/core/svg_io.py +1836 -1549
- meerk40t/core/treeop.py +534 -445
- meerk40t/core/undos.py +278 -124
- meerk40t/core/units.py +784 -680
- meerk40t/core/view.py +393 -322
- meerk40t/core/webhelp.py +62 -62
- meerk40t/core/wordlist.py +513 -504
- meerk40t/cylinder/cylinder.py +247 -0
- meerk40t/cylinder/gui/cylindersettings.py +41 -0
- meerk40t/cylinder/gui/gui.py +24 -0
- meerk40t/device/__init__.py +1 -1
- meerk40t/device/basedevice.py +322 -123
- meerk40t/device/devicechoices.py +50 -0
- meerk40t/device/dummydevice.py +163 -128
- meerk40t/device/gui/defaultactions.py +618 -602
- meerk40t/device/gui/effectspanel.py +114 -0
- meerk40t/device/gui/formatterpanel.py +253 -290
- meerk40t/device/gui/warningpanel.py +337 -260
- meerk40t/device/mixins.py +13 -13
- meerk40t/dxf/__init__.py +1 -1
- meerk40t/dxf/dxf_io.py +766 -554
- meerk40t/dxf/plugin.py +47 -35
- meerk40t/external_plugins.py +79 -79
- meerk40t/external_plugins_build.py +28 -28
- meerk40t/extra/cag.py +112 -116
- meerk40t/extra/coolant.py +403 -0
- meerk40t/extra/encode_detect.py +198 -0
- meerk40t/extra/ezd.py +1165 -1165
- meerk40t/extra/hershey.py +835 -340
- meerk40t/extra/imageactions.py +322 -316
- meerk40t/extra/inkscape.py +630 -622
- meerk40t/extra/lbrn.py +424 -424
- meerk40t/extra/outerworld.py +284 -0
- meerk40t/extra/param_functions.py +1542 -1556
- meerk40t/extra/potrace.py +257 -253
- meerk40t/extra/serial_exchange.py +118 -0
- meerk40t/extra/updater.py +602 -453
- meerk40t/extra/vectrace.py +147 -146
- meerk40t/extra/winsleep.py +83 -83
- meerk40t/extra/xcs_reader.py +597 -0
- meerk40t/fill/fills.py +781 -335
- meerk40t/fill/patternfill.py +1061 -1061
- meerk40t/fill/patterns.py +614 -567
- meerk40t/grbl/control.py +87 -87
- meerk40t/grbl/controller.py +990 -903
- meerk40t/grbl/device.py +1081 -768
- meerk40t/grbl/driver.py +989 -771
- meerk40t/grbl/emulator.py +532 -497
- meerk40t/grbl/gcodejob.py +783 -767
- meerk40t/grbl/gui/grblconfiguration.py +373 -298
- meerk40t/grbl/gui/grblcontroller.py +485 -271
- meerk40t/grbl/gui/grblhardwareconfig.py +269 -153
- meerk40t/grbl/gui/grbloperationconfig.py +105 -0
- meerk40t/grbl/gui/gui.py +147 -116
- meerk40t/grbl/interpreter.py +44 -44
- meerk40t/grbl/loader.py +22 -22
- meerk40t/grbl/mock_connection.py +56 -56
- meerk40t/grbl/plugin.py +294 -264
- meerk40t/grbl/serial_connection.py +93 -88
- meerk40t/grbl/tcp_connection.py +81 -79
- meerk40t/grbl/ws_connection.py +112 -0
- meerk40t/gui/__init__.py +1 -1
- meerk40t/gui/about.py +2042 -296
- meerk40t/gui/alignment.py +1644 -1608
- meerk40t/gui/autoexec.py +199 -0
- meerk40t/gui/basicops.py +791 -670
- meerk40t/gui/bufferview.py +77 -71
- meerk40t/gui/busy.py +170 -133
- meerk40t/gui/choicepropertypanel.py +1673 -1469
- meerk40t/gui/consolepanel.py +706 -542
- meerk40t/gui/devicepanel.py +687 -581
- meerk40t/gui/dialogoptions.py +110 -107
- meerk40t/gui/executejob.py +316 -306
- meerk40t/gui/fonts.py +90 -90
- meerk40t/gui/functionwrapper.py +252 -0
- meerk40t/gui/gui_mixins.py +729 -0
- meerk40t/gui/guicolors.py +205 -182
- meerk40t/gui/help_assets/help_assets.py +218 -201
- meerk40t/gui/helper.py +154 -0
- meerk40t/gui/hersheymanager.py +1430 -846
- meerk40t/gui/icons.py +3422 -2747
- meerk40t/gui/imagesplitter.py +555 -508
- meerk40t/gui/keymap.py +354 -344
- meerk40t/gui/laserpanel.py +892 -806
- meerk40t/gui/laserrender.py +1470 -1232
- meerk40t/gui/lasertoolpanel.py +805 -793
- meerk40t/gui/magnetoptions.py +436 -0
- meerk40t/gui/materialmanager.py +2917 -0
- meerk40t/gui/materialtest.py +1722 -1694
- meerk40t/gui/mkdebug.py +646 -359
- meerk40t/gui/mwindow.py +163 -140
- meerk40t/gui/navigationpanels.py +2605 -2467
- meerk40t/gui/notes.py +143 -142
- meerk40t/gui/opassignment.py +414 -410
- meerk40t/gui/operation_info.py +310 -299
- meerk40t/gui/plugin.py +494 -328
- meerk40t/gui/position.py +714 -669
- meerk40t/gui/preferences.py +901 -650
- meerk40t/gui/propertypanels/attributes.py +1461 -1131
- meerk40t/gui/propertypanels/blobproperty.py +117 -114
- meerk40t/gui/propertypanels/consoleproperty.py +83 -80
- meerk40t/gui/propertypanels/gotoproperty.py +77 -0
- meerk40t/gui/propertypanels/groupproperties.py +223 -217
- meerk40t/gui/propertypanels/hatchproperty.py +489 -469
- meerk40t/gui/propertypanels/imageproperty.py +2244 -1384
- meerk40t/gui/propertypanels/inputproperty.py +59 -58
- meerk40t/gui/propertypanels/opbranchproperties.py +82 -80
- meerk40t/gui/propertypanels/operationpropertymain.py +1890 -1638
- meerk40t/gui/propertypanels/outputproperty.py +59 -58
- meerk40t/gui/propertypanels/pathproperty.py +389 -380
- meerk40t/gui/propertypanels/placementproperty.py +1214 -383
- meerk40t/gui/propertypanels/pointproperty.py +140 -136
- meerk40t/gui/propertypanels/propertywindow.py +313 -181
- meerk40t/gui/propertypanels/rasterwizardpanels.py +996 -912
- meerk40t/gui/propertypanels/regbranchproperties.py +76 -0
- meerk40t/gui/propertypanels/textproperty.py +770 -755
- meerk40t/gui/propertypanels/waitproperty.py +56 -55
- meerk40t/gui/propertypanels/warpproperty.py +121 -0
- meerk40t/gui/propertypanels/wobbleproperty.py +255 -204
- meerk40t/gui/ribbon.py +2468 -2210
- meerk40t/gui/scene/scene.py +1100 -1051
- meerk40t/gui/scene/sceneconst.py +22 -22
- meerk40t/gui/scene/scenepanel.py +439 -349
- meerk40t/gui/scene/scenespacewidget.py +365 -365
- meerk40t/gui/scene/widget.py +518 -505
- meerk40t/gui/scenewidgets/affinemover.py +215 -215
- meerk40t/gui/scenewidgets/attractionwidget.py +315 -309
- meerk40t/gui/scenewidgets/bedwidget.py +120 -97
- meerk40t/gui/scenewidgets/elementswidget.py +137 -107
- meerk40t/gui/scenewidgets/gridwidget.py +785 -745
- meerk40t/gui/scenewidgets/guidewidget.py +765 -765
- meerk40t/gui/scenewidgets/laserpathwidget.py +66 -66
- meerk40t/gui/scenewidgets/machineoriginwidget.py +86 -86
- meerk40t/gui/scenewidgets/nodeselector.py +28 -28
- meerk40t/gui/scenewidgets/rectselectwidget.py +589 -346
- meerk40t/gui/scenewidgets/relocatewidget.py +33 -33
- meerk40t/gui/scenewidgets/reticlewidget.py +83 -83
- meerk40t/gui/scenewidgets/selectionwidget.py +2952 -2756
- meerk40t/gui/simpleui.py +357 -333
- meerk40t/gui/simulation.py +2431 -2094
- meerk40t/gui/snapoptions.py +208 -203
- meerk40t/gui/spoolerpanel.py +1227 -1180
- meerk40t/gui/statusbarwidgets/defaultoperations.py +480 -353
- meerk40t/gui/statusbarwidgets/infowidget.py +520 -483
- meerk40t/gui/statusbarwidgets/opassignwidget.py +356 -355
- meerk40t/gui/statusbarwidgets/selectionwidget.py +172 -171
- meerk40t/gui/statusbarwidgets/shapepropwidget.py +754 -236
- meerk40t/gui/statusbarwidgets/statusbar.py +272 -260
- meerk40t/gui/statusbarwidgets/statusbarwidget.py +268 -270
- meerk40t/gui/statusbarwidgets/strokewidget.py +267 -251
- meerk40t/gui/themes.py +200 -78
- meerk40t/gui/tips.py +591 -0
- meerk40t/gui/toolwidgets/circlebrush.py +35 -35
- meerk40t/gui/toolwidgets/toolcircle.py +248 -242
- meerk40t/gui/toolwidgets/toolcontainer.py +82 -77
- meerk40t/gui/toolwidgets/tooldraw.py +97 -90
- meerk40t/gui/toolwidgets/toolellipse.py +219 -212
- meerk40t/gui/toolwidgets/toolimagecut.py +25 -132
- meerk40t/gui/toolwidgets/toolline.py +39 -144
- meerk40t/gui/toolwidgets/toollinetext.py +79 -236
- meerk40t/gui/toolwidgets/toollinetext_inline.py +296 -0
- meerk40t/gui/toolwidgets/toolmeasure.py +160 -216
- meerk40t/gui/toolwidgets/toolnodeedit.py +2088 -2074
- meerk40t/gui/toolwidgets/toolnodemove.py +92 -94
- meerk40t/gui/toolwidgets/toolparameter.py +754 -668
- meerk40t/gui/toolwidgets/toolplacement.py +108 -108
- meerk40t/gui/toolwidgets/toolpoint.py +68 -59
- meerk40t/gui/toolwidgets/toolpointlistbuilder.py +294 -0
- meerk40t/gui/toolwidgets/toolpointmove.py +183 -0
- meerk40t/gui/toolwidgets/toolpolygon.py +288 -403
- meerk40t/gui/toolwidgets/toolpolyline.py +38 -196
- meerk40t/gui/toolwidgets/toolrect.py +211 -207
- meerk40t/gui/toolwidgets/toolrelocate.py +72 -72
- meerk40t/gui/toolwidgets/toolribbon.py +598 -113
- meerk40t/gui/toolwidgets/tooltabedit.py +546 -0
- meerk40t/gui/toolwidgets/tooltext.py +98 -89
- meerk40t/gui/toolwidgets/toolvector.py +213 -204
- meerk40t/gui/toolwidgets/toolwidget.py +39 -39
- meerk40t/gui/usbconnect.py +98 -91
- meerk40t/gui/utilitywidgets/buttonwidget.py +18 -18
- meerk40t/gui/utilitywidgets/checkboxwidget.py +90 -90
- meerk40t/gui/utilitywidgets/controlwidget.py +14 -14
- meerk40t/gui/utilitywidgets/cyclocycloidwidget.py +343 -340
- meerk40t/gui/utilitywidgets/debugwidgets.py +148 -0
- meerk40t/gui/utilitywidgets/handlewidget.py +27 -27
- meerk40t/gui/utilitywidgets/harmonograph.py +450 -447
- meerk40t/gui/utilitywidgets/openclosewidget.py +40 -40
- meerk40t/gui/utilitywidgets/rotationwidget.py +54 -54
- meerk40t/gui/utilitywidgets/scalewidget.py +75 -75
- meerk40t/gui/utilitywidgets/seekbarwidget.py +183 -183
- meerk40t/gui/utilitywidgets/togglewidget.py +142 -142
- meerk40t/gui/utilitywidgets/toolbarwidget.py +8 -8
- meerk40t/gui/wordlisteditor.py +985 -931
- meerk40t/gui/wxmeerk40t.py +1444 -1169
- meerk40t/gui/wxmmain.py +5578 -4112
- meerk40t/gui/wxmribbon.py +1591 -1076
- meerk40t/gui/wxmscene.py +1635 -1453
- meerk40t/gui/wxmtree.py +2410 -2089
- meerk40t/gui/wxutils.py +1769 -1099
- meerk40t/gui/zmatrix.py +102 -102
- meerk40t/image/__init__.py +1 -1
- meerk40t/image/dither.py +429 -0
- meerk40t/image/imagetools.py +2778 -2269
- meerk40t/internal_plugins.py +150 -130
- meerk40t/kernel/__init__.py +63 -12
- meerk40t/kernel/channel.py +259 -212
- meerk40t/kernel/context.py +538 -538
- meerk40t/kernel/exceptions.py +41 -41
- meerk40t/kernel/functions.py +463 -414
- meerk40t/kernel/jobs.py +100 -100
- meerk40t/kernel/kernel.py +3809 -3571
- meerk40t/kernel/lifecycles.py +71 -71
- meerk40t/kernel/module.py +49 -49
- meerk40t/kernel/service.py +147 -147
- meerk40t/kernel/settings.py +383 -343
- meerk40t/lihuiyu/controller.py +883 -876
- meerk40t/lihuiyu/device.py +1181 -1069
- meerk40t/lihuiyu/driver.py +1466 -1372
- meerk40t/lihuiyu/gui/gui.py +127 -106
- meerk40t/lihuiyu/gui/lhyaccelgui.py +377 -363
- meerk40t/lihuiyu/gui/lhycontrollergui.py +741 -651
- meerk40t/lihuiyu/gui/lhydrivergui.py +470 -446
- meerk40t/lihuiyu/gui/lhyoperationproperties.py +238 -237
- meerk40t/lihuiyu/gui/tcpcontroller.py +226 -190
- meerk40t/lihuiyu/interpreter.py +53 -53
- meerk40t/lihuiyu/laserspeed.py +450 -450
- meerk40t/lihuiyu/loader.py +90 -90
- meerk40t/lihuiyu/parser.py +404 -404
- meerk40t/lihuiyu/plugin.py +101 -102
- meerk40t/lihuiyu/tcp_connection.py +111 -109
- meerk40t/main.py +231 -165
- meerk40t/moshi/builder.py +788 -781
- meerk40t/moshi/controller.py +505 -499
- meerk40t/moshi/device.py +495 -442
- meerk40t/moshi/driver.py +862 -696
- meerk40t/moshi/gui/gui.py +78 -76
- meerk40t/moshi/gui/moshicontrollergui.py +538 -522
- meerk40t/moshi/gui/moshidrivergui.py +87 -75
- meerk40t/moshi/plugin.py +43 -43
- meerk40t/network/console_server.py +102 -57
- meerk40t/network/kernelserver.py +10 -9
- meerk40t/network/tcp_server.py +142 -140
- meerk40t/network/udp_server.py +103 -77
- meerk40t/network/web_server.py +390 -0
- meerk40t/newly/controller.py +1158 -1144
- meerk40t/newly/device.py +874 -732
- meerk40t/newly/driver.py +540 -412
- meerk40t/newly/gui/gui.py +219 -188
- meerk40t/newly/gui/newlyconfig.py +116 -101
- meerk40t/newly/gui/newlycontroller.py +193 -186
- meerk40t/newly/gui/operationproperties.py +51 -51
- meerk40t/newly/mock_connection.py +82 -82
- meerk40t/newly/newly_params.py +56 -56
- meerk40t/newly/plugin.py +1214 -1246
- meerk40t/newly/usb_connection.py +322 -322
- meerk40t/rotary/gui/gui.py +52 -46
- meerk40t/rotary/gui/rotarysettings.py +240 -232
- meerk40t/rotary/rotary.py +202 -98
- meerk40t/ruida/control.py +291 -91
- meerk40t/ruida/controller.py +138 -1088
- meerk40t/ruida/device.py +672 -231
- meerk40t/ruida/driver.py +534 -472
- meerk40t/ruida/emulator.py +1494 -1491
- meerk40t/ruida/exceptions.py +4 -4
- meerk40t/ruida/gui/gui.py +71 -76
- meerk40t/ruida/gui/ruidaconfig.py +239 -72
- meerk40t/ruida/gui/ruidacontroller.py +187 -184
- meerk40t/ruida/gui/ruidaoperationproperties.py +48 -47
- meerk40t/ruida/loader.py +54 -52
- meerk40t/ruida/mock_connection.py +57 -109
- meerk40t/ruida/plugin.py +124 -87
- meerk40t/ruida/rdjob.py +2084 -945
- meerk40t/ruida/serial_connection.py +116 -0
- meerk40t/ruida/tcp_connection.py +146 -0
- meerk40t/ruida/udp_connection.py +73 -0
- meerk40t/svgelements.py +9671 -9669
- meerk40t/tools/driver_to_path.py +584 -579
- meerk40t/tools/geomstr.py +5583 -4680
- meerk40t/tools/jhfparser.py +357 -292
- meerk40t/tools/kerftest.py +904 -890
- meerk40t/tools/livinghinges.py +1168 -1033
- meerk40t/tools/pathtools.py +987 -949
- meerk40t/tools/pmatrix.py +234 -0
- meerk40t/tools/pointfinder.py +942 -942
- meerk40t/tools/polybool.py +940 -940
- meerk40t/tools/rasterplotter.py +1660 -547
- meerk40t/tools/shxparser.py +989 -901
- meerk40t/tools/ttfparser.py +726 -446
- meerk40t/tools/zinglplotter.py +595 -593
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/LICENSE +21 -21
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/METADATA +150 -139
- meerk40t-0.9.7010.dist-info/RECORD +445 -0
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/WHEEL +1 -1
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/top_level.txt +0 -1
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/zip-safe +1 -1
- meerk40t/balormk/elementlightjob.py +0 -159
- meerk40t-0.9.3001.dist-info/RECORD +0 -437
- test/bootstrap.py +0 -63
- test/test_cli.py +0 -12
- test/test_core_cutcode.py +0 -418
- test/test_core_elements.py +0 -144
- test/test_core_plotplanner.py +0 -397
- test/test_core_viewports.py +0 -312
- test/test_drivers_grbl.py +0 -108
- test/test_drivers_lihuiyu.py +0 -443
- test/test_drivers_newly.py +0 -113
- test/test_element_degenerate_points.py +0 -43
- test/test_elements_classify.py +0 -97
- test/test_elements_penbox.py +0 -22
- test/test_file_svg.py +0 -176
- test/test_fill.py +0 -155
- test/test_geomstr.py +0 -1523
- test/test_geomstr_nodes.py +0 -18
- test/test_imagetools_actualize.py +0 -306
- test/test_imagetools_wizard.py +0 -258
- test/test_kernel.py +0 -200
- test/test_laser_speeds.py +0 -3303
- test/test_length.py +0 -57
- test/test_lifecycle.py +0 -66
- test/test_operations.py +0 -251
- test/test_operations_hatch.py +0 -57
- test/test_ruida.py +0 -19
- test/test_spooler.py +0 -22
- test/test_tools_rasterplotter.py +0 -29
- test/test_wobble.py +0 -133
- test/test_zingl.py +0 -124
- {test → meerk40t/cylinder}/__init__.py +0 -0
- /meerk40t/{core/element_commands.py → cylinder/gui/__init__.py} +0 -0
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/entry_points.txt +0 -0
meerk40t/ch341/mock.py
CHANGED
@@ -1,171 +1,171 @@
|
|
1
|
-
# MIT License.
|
2
|
-
import random
|
3
|
-
import time
|
4
|
-
|
5
|
-
|
6
|
-
class MockCH341Driver:
|
7
|
-
"""
|
8
|
-
This is basic interface code for a mock CH341.
|
9
|
-
"""
|
10
|
-
|
11
|
-
def __init__(self, channel=None, state=None, bulk=True):
|
12
|
-
self.driver_index = None
|
13
|
-
self.driver_value = None
|
14
|
-
self.channel = channel
|
15
|
-
self.state = state
|
16
|
-
self.bulk = bulk
|
17
|
-
|
18
|
-
self.mock_status = 206
|
19
|
-
self.mock_error = 207
|
20
|
-
self.mock_finish = 236
|
21
|
-
|
22
|
-
self._start_time_status = None
|
23
|
-
self._end_time_status = None
|
24
|
-
self._time_status = None
|
25
|
-
|
26
|
-
def is_connected(self):
|
27
|
-
return self.driver_value != -1 and self.driver_index is not None
|
28
|
-
|
29
|
-
@property
|
30
|
-
def driver_name(self):
|
31
|
-
return "Mock"
|
32
|
-
|
33
|
-
@property
|
34
|
-
def address(self):
|
35
|
-
return None
|
36
|
-
|
37
|
-
@property
|
38
|
-
def bus(self):
|
39
|
-
return None
|
40
|
-
|
41
|
-
def open(self, usb_index):
|
42
|
-
"""
|
43
|
-
Opens the driver for unknown criteria.
|
44
|
-
"""
|
45
|
-
_ = self.channel._
|
46
|
-
self.channel(_("Using Mock Driver."))
|
47
|
-
|
48
|
-
if self.driver_value is None:
|
49
|
-
self.channel(_("Using Mock Driver to connect."))
|
50
|
-
self.channel(_("Attempting connection to USB."))
|
51
|
-
self.state("STATE_USB_CONNECTING")
|
52
|
-
self.driver_value = 0 # Would connect here.
|
53
|
-
self.driver_index = usb_index
|
54
|
-
self.state("STATE_USB_CONNECTED")
|
55
|
-
self.channel(_("USB Connected."))
|
56
|
-
self.channel(_("Sending CH341 mode change to EPP1.9."))
|
57
|
-
try:
|
58
|
-
# self.driver.CH341InitParallel(self.driver_index, 1)
|
59
|
-
self.channel(_("CH341 mode change to EPP1.9: Success."))
|
60
|
-
except ConnectionError as e:
|
61
|
-
self.channel(str(e))
|
62
|
-
self.channel(_("CH341 mode change to EPP1.9: Fail."))
|
63
|
-
raise ConnectionRefusedError
|
64
|
-
# self.driver.CH341CloseDevice(self.driver_index)
|
65
|
-
# self.driver.CH341SetExclusive(self.driver_index, 1)
|
66
|
-
self.channel(_("Device Connected.\n"))
|
67
|
-
|
68
|
-
def close(self):
|
69
|
-
"""
|
70
|
-
Closes the driver for the stated device index.
|
71
|
-
"""
|
72
|
-
_ = self.channel._
|
73
|
-
self.driver_value = None
|
74
|
-
self.state("STATE_USB_SET_DISCONNECTING")
|
75
|
-
self.channel(_("Attempting disconnection from USB."))
|
76
|
-
if self.driver_value == -1:
|
77
|
-
self.channel(_("USB connection did not exist."))
|
78
|
-
raise ConnectionError
|
79
|
-
# self.driver.CH341CloseDevice(self.driver_index)
|
80
|
-
self.state("STATE_USB_DISCONNECTED")
|
81
|
-
self.channel(_("USB Disconnection Successful.\n"))
|
82
|
-
|
83
|
-
def reset(self):
|
84
|
-
pass
|
85
|
-
|
86
|
-
def release(self):
|
87
|
-
pass
|
88
|
-
|
89
|
-
def write(self, packet):
|
90
|
-
"""
|
91
|
-
Writes a 32 byte packet to the device. This is typically \x00 + 30 bytes + CRC
|
92
|
-
The driver will packetize the \0xA6 writes.
|
93
|
-
|
94
|
-
@param packet: 32 bytes of data to be written to the CH341.
|
95
|
-
@return:
|
96
|
-
"""
|
97
|
-
if not self.is_connected():
|
98
|
-
raise ConnectionError
|
99
|
-
if packet.startswith(b"\x00A"):
|
100
|
-
self._start_time_status = time.time()
|
101
|
-
self._end_time_status = self._start_time_status + 0.5
|
102
|
-
self._time_status = 204
|
103
|
-
if random.randint(0, 5000) == 0:
|
104
|
-
# Write failed.
|
105
|
-
raise ConnectionError
|
106
|
-
time.sleep(0.04)
|
107
|
-
# Mock
|
108
|
-
|
109
|
-
def write_addr(self, packet):
|
110
|
-
"""
|
111
|
-
Writes an address byte packet to the device. This is typically 1 byte
|
112
|
-
The driver will packetize the \0xA7 writes.
|
113
|
-
|
114
|
-
@param packet: 1 byte of data to be written to the CH341.
|
115
|
-
@return:
|
116
|
-
"""
|
117
|
-
if not self.is_connected():
|
118
|
-
raise ConnectionError
|
119
|
-
time.sleep(0.04)
|
120
|
-
# Mock.
|
121
|
-
|
122
|
-
def get_status(self):
|
123
|
-
"""
|
124
|
-
Gets the status bytes from the CH341. This is usually 255 for the D0-D7 values
|
125
|
-
And the state flags for the chip signals. Importantly are WAIT which means do not
|
126
|
-
send data, and ERR which means the data sent was faulty. And PEMP which means the
|
127
|
-
buffer is empty.
|
128
|
-
|
129
|
-
StateBitERR 0x00000100
|
130
|
-
StateBitPEMP 0x00000200
|
131
|
-
StateBitINT 0x00000400
|
132
|
-
StateBitSLCT 0x00000800
|
133
|
-
StateBitWAIT 0x00002000
|
134
|
-
StateBitDATAS 0x00004000
|
135
|
-
StateBitADDRS 0x00008000
|
136
|
-
StateBitRESET 0x00010000
|
137
|
-
StateBitWRITE 0x00020000
|
138
|
-
StateBitSCL 0x00400000
|
139
|
-
StateBitSDA 0x00800000
|
140
|
-
@return:
|
141
|
-
"""
|
142
|
-
if not self.is_connected():
|
143
|
-
raise ConnectionError
|
144
|
-
if self._start_time_status is not None:
|
145
|
-
if self._start_time_status <= time.time() <= self._end_time_status:
|
146
|
-
return [255, self._time_status, 0, 0, 0, 1]
|
147
|
-
if self._end_time_status >= time.time():
|
148
|
-
self._start_time_status = None
|
149
|
-
self._end_time_status = None
|
150
|
-
self._time_status = None
|
151
|
-
|
152
|
-
# Mock
|
153
|
-
from random import randint
|
154
|
-
|
155
|
-
if randint(0, 500) == 0:
|
156
|
-
status = [255, self.mock_error, 0, 0, 0, 1]
|
157
|
-
else:
|
158
|
-
status = [255, self.mock_status, 0, 0, 0, 1]
|
159
|
-
if randint(0, 1000) == 0:
|
160
|
-
status = [255, self.mock_finish, 0, 0, 0, 1]
|
161
|
-
time.sleep(0.01)
|
162
|
-
return status
|
163
|
-
|
164
|
-
def get_chip_version(self):
|
165
|
-
"""
|
166
|
-
Gets the version of the CH341 chip being used.
|
167
|
-
@return: version.
|
168
|
-
"""
|
169
|
-
if not self.is_connected():
|
170
|
-
raise ConnectionError
|
171
|
-
return 999 # MOCK.
|
1
|
+
# MIT License.
|
2
|
+
import random
|
3
|
+
import time
|
4
|
+
|
5
|
+
|
6
|
+
class MockCH341Driver:
|
7
|
+
"""
|
8
|
+
This is basic interface code for a mock CH341.
|
9
|
+
"""
|
10
|
+
|
11
|
+
def __init__(self, channel=None, state=None, bulk=True):
|
12
|
+
self.driver_index = None
|
13
|
+
self.driver_value = None
|
14
|
+
self.channel = channel
|
15
|
+
self.state = state
|
16
|
+
self.bulk = bulk
|
17
|
+
|
18
|
+
self.mock_status = 206
|
19
|
+
self.mock_error = 207
|
20
|
+
self.mock_finish = 236
|
21
|
+
|
22
|
+
self._start_time_status = None
|
23
|
+
self._end_time_status = None
|
24
|
+
self._time_status = None
|
25
|
+
|
26
|
+
def is_connected(self):
|
27
|
+
return self.driver_value != -1 and self.driver_index is not None
|
28
|
+
|
29
|
+
@property
|
30
|
+
def driver_name(self):
|
31
|
+
return "Mock"
|
32
|
+
|
33
|
+
@property
|
34
|
+
def address(self):
|
35
|
+
return None
|
36
|
+
|
37
|
+
@property
|
38
|
+
def bus(self):
|
39
|
+
return None
|
40
|
+
|
41
|
+
def open(self, usb_index):
|
42
|
+
"""
|
43
|
+
Opens the driver for unknown criteria.
|
44
|
+
"""
|
45
|
+
_ = self.channel._
|
46
|
+
self.channel(_("Using Mock Driver."))
|
47
|
+
|
48
|
+
if self.driver_value is None:
|
49
|
+
self.channel(_("Using Mock Driver to connect."))
|
50
|
+
self.channel(_("Attempting connection to USB."))
|
51
|
+
self.state("STATE_USB_CONNECTING")
|
52
|
+
self.driver_value = 0 # Would connect here.
|
53
|
+
self.driver_index = usb_index
|
54
|
+
self.state("STATE_USB_CONNECTED")
|
55
|
+
self.channel(_("USB Connected."))
|
56
|
+
self.channel(_("Sending CH341 mode change to EPP1.9."))
|
57
|
+
try:
|
58
|
+
# self.driver.CH341InitParallel(self.driver_index, 1)
|
59
|
+
self.channel(_("CH341 mode change to EPP1.9: Success."))
|
60
|
+
except ConnectionError as e:
|
61
|
+
self.channel(str(e))
|
62
|
+
self.channel(_("CH341 mode change to EPP1.9: Fail."))
|
63
|
+
raise ConnectionRefusedError
|
64
|
+
# self.driver.CH341CloseDevice(self.driver_index)
|
65
|
+
# self.driver.CH341SetExclusive(self.driver_index, 1)
|
66
|
+
self.channel(_("Device Connected.\n"))
|
67
|
+
|
68
|
+
def close(self):
|
69
|
+
"""
|
70
|
+
Closes the driver for the stated device index.
|
71
|
+
"""
|
72
|
+
_ = self.channel._
|
73
|
+
self.driver_value = None
|
74
|
+
self.state("STATE_USB_SET_DISCONNECTING")
|
75
|
+
self.channel(_("Attempting disconnection from USB."))
|
76
|
+
if self.driver_value == -1:
|
77
|
+
self.channel(_("USB connection did not exist."))
|
78
|
+
raise ConnectionError
|
79
|
+
# self.driver.CH341CloseDevice(self.driver_index)
|
80
|
+
self.state("STATE_USB_DISCONNECTED")
|
81
|
+
self.channel(_("USB Disconnection Successful.\n"))
|
82
|
+
|
83
|
+
def reset(self):
|
84
|
+
pass
|
85
|
+
|
86
|
+
def release(self):
|
87
|
+
pass
|
88
|
+
|
89
|
+
def write(self, packet):
|
90
|
+
"""
|
91
|
+
Writes a 32 byte packet to the device. This is typically \x00 + 30 bytes + CRC
|
92
|
+
The driver will packetize the \0xA6 writes.
|
93
|
+
|
94
|
+
@param packet: 32 bytes of data to be written to the CH341.
|
95
|
+
@return:
|
96
|
+
"""
|
97
|
+
if not self.is_connected():
|
98
|
+
raise ConnectionError
|
99
|
+
if packet.startswith(b"\x00A"):
|
100
|
+
self._start_time_status = time.time()
|
101
|
+
self._end_time_status = self._start_time_status + 0.5
|
102
|
+
self._time_status = 204
|
103
|
+
if random.randint(0, 5000) == 0:
|
104
|
+
# Write failed.
|
105
|
+
raise ConnectionError
|
106
|
+
time.sleep(0.04)
|
107
|
+
# Mock
|
108
|
+
|
109
|
+
def write_addr(self, packet):
|
110
|
+
"""
|
111
|
+
Writes an address byte packet to the device. This is typically 1 byte
|
112
|
+
The driver will packetize the \0xA7 writes.
|
113
|
+
|
114
|
+
@param packet: 1 byte of data to be written to the CH341.
|
115
|
+
@return:
|
116
|
+
"""
|
117
|
+
if not self.is_connected():
|
118
|
+
raise ConnectionError
|
119
|
+
time.sleep(0.04)
|
120
|
+
# Mock.
|
121
|
+
|
122
|
+
def get_status(self):
|
123
|
+
"""
|
124
|
+
Gets the status bytes from the CH341. This is usually 255 for the D0-D7 values
|
125
|
+
And the state flags for the chip signals. Importantly are WAIT which means do not
|
126
|
+
send data, and ERR which means the data sent was faulty. And PEMP which means the
|
127
|
+
buffer is empty.
|
128
|
+
|
129
|
+
StateBitERR 0x00000100
|
130
|
+
StateBitPEMP 0x00000200
|
131
|
+
StateBitINT 0x00000400
|
132
|
+
StateBitSLCT 0x00000800
|
133
|
+
StateBitWAIT 0x00002000
|
134
|
+
StateBitDATAS 0x00004000
|
135
|
+
StateBitADDRS 0x00008000
|
136
|
+
StateBitRESET 0x00010000
|
137
|
+
StateBitWRITE 0x00020000
|
138
|
+
StateBitSCL 0x00400000
|
139
|
+
StateBitSDA 0x00800000
|
140
|
+
@return:
|
141
|
+
"""
|
142
|
+
if not self.is_connected():
|
143
|
+
raise ConnectionError
|
144
|
+
if self._start_time_status is not None:
|
145
|
+
if self._start_time_status <= time.time() <= self._end_time_status:
|
146
|
+
return [255, self._time_status, 0, 0, 0, 1]
|
147
|
+
if self._end_time_status >= time.time():
|
148
|
+
self._start_time_status = None
|
149
|
+
self._end_time_status = None
|
150
|
+
self._time_status = None
|
151
|
+
|
152
|
+
# Mock
|
153
|
+
from random import randint
|
154
|
+
|
155
|
+
if randint(0, 500) == 0:
|
156
|
+
status = [255, self.mock_error, 0, 0, 0, 1]
|
157
|
+
else:
|
158
|
+
status = [255, self.mock_status, 0, 0, 0, 1]
|
159
|
+
if randint(0, 1000) == 0:
|
160
|
+
status = [255, self.mock_finish, 0, 0, 0, 1]
|
161
|
+
time.sleep(0.01)
|
162
|
+
return status
|
163
|
+
|
164
|
+
def get_chip_version(self):
|
165
|
+
"""
|
166
|
+
Gets the version of the CH341 chip being used.
|
167
|
+
@return: version. E.g. 48.
|
168
|
+
"""
|
169
|
+
if not self.is_connected():
|
170
|
+
raise ConnectionError
|
171
|
+
return 999 # MOCK.
|
meerk40t/ch341/windriver.py
CHANGED
@@ -1,157 +1,157 @@
|
|
1
|
-
from meerk40t.ch341.ch341device import CH341Device
|
2
|
-
from meerk40t.ch341.libusb import mCH341_PARA_CMD_STS
|
3
|
-
|
4
|
-
# MIT License.
|
5
|
-
|
6
|
-
|
7
|
-
class WinCH341Driver:
|
8
|
-
"""
|
9
|
-
This is basic interface code for a CH341 to be run in EPP 1.9 mode.
|
10
|
-
"""
|
11
|
-
|
12
|
-
def __init__(self, channel=None, state=None, bulk=True):
|
13
|
-
self.driver_index = None
|
14
|
-
self.channel = channel
|
15
|
-
self.state = state
|
16
|
-
self.bulk = bulk
|
17
|
-
self.driver = None
|
18
|
-
|
19
|
-
def is_connected(self):
|
20
|
-
return self.driver is not None
|
21
|
-
|
22
|
-
@property
|
23
|
-
def driver_name(self):
|
24
|
-
return "WinDll"
|
25
|
-
|
26
|
-
@property
|
27
|
-
def address(self):
|
28
|
-
return None
|
29
|
-
|
30
|
-
@property
|
31
|
-
def bus(self):
|
32
|
-
return None
|
33
|
-
|
34
|
-
def open(self, usb_index):
|
35
|
-
"""
|
36
|
-
Opens the driver for unknown criteria.
|
37
|
-
"""
|
38
|
-
_ = self.channel._
|
39
|
-
if self.driver is not None:
|
40
|
-
return
|
41
|
-
self.channel(_("Using CH341 Driver to connect."))
|
42
|
-
self.channel(_("Attempting connection to USB."))
|
43
|
-
self.state("STATE_USB_CONNECTING")
|
44
|
-
devices = list(CH341Device.enumerate_devices())
|
45
|
-
if not devices:
|
46
|
-
self.channel(_("No CH341 Devices detected.\n"))
|
47
|
-
self.state("STATE_CONNECTION_FAILED")
|
48
|
-
raise IndexError # No more devices.
|
49
|
-
if usb_index >= len(devices):
|
50
|
-
self.channel(_("Connection to USB failed.\n"))
|
51
|
-
self.state("STATE_CONNECTION_FAILED")
|
52
|
-
raise IndexError # No more devices.
|
53
|
-
self.driver = devices[usb_index]
|
54
|
-
self.driver.open()
|
55
|
-
self.driver_index = usb_index
|
56
|
-
self.state("STATE_USB_CONNECTED")
|
57
|
-
self.channel(_("USB Connected."))
|
58
|
-
self.channel(_("Sending CH341 mode change to EPP1.9."))
|
59
|
-
success = self.driver.CH341InitParallel(1)
|
60
|
-
if success:
|
61
|
-
self.channel(_("CH341 mode change to EPP1.9: Success."))
|
62
|
-
else:
|
63
|
-
self.channel(_("CH341 mode change to EPP1.9: Fail."))
|
64
|
-
self.driver.close()
|
65
|
-
raise ConnectionRefusedError
|
66
|
-
self.channel(_("Device Connected.\n"))
|
67
|
-
|
68
|
-
def close(self):
|
69
|
-
"""
|
70
|
-
Closes the driver for the stated device index.
|
71
|
-
"""
|
72
|
-
_ = self.channel._
|
73
|
-
if self.driver is None:
|
74
|
-
self.channel(_("USB connection did not exist."))
|
75
|
-
return
|
76
|
-
self.state("STATE_USB_SET_DISCONNECTING")
|
77
|
-
self.channel(_("Attempting disconnection from USB."))
|
78
|
-
self.driver.close()
|
79
|
-
self.state("STATE_USB_DISCONNECTED")
|
80
|
-
self.channel(_("USB Disconnection Successful.\n"))
|
81
|
-
self.driver_index = None
|
82
|
-
|
83
|
-
def reset(self):
|
84
|
-
_ = self.channel._
|
85
|
-
self.channel(_("USB connection reset."))
|
86
|
-
self.driver.CH341ResetDevice()
|
87
|
-
|
88
|
-
def release(self):
|
89
|
-
pass
|
90
|
-
|
91
|
-
def write(self, packet):
|
92
|
-
"""
|
93
|
-
Writes a 32 byte packet to the device. This is typically \x00 + 30 bytes + CRC
|
94
|
-
The driver will packetize the \0xA6 writes.
|
95
|
-
|
96
|
-
@param packet: 32 bytes of data to be written to the CH341.
|
97
|
-
@return:
|
98
|
-
"""
|
99
|
-
if not self.is_connected():
|
100
|
-
raise ConnectionError("Not connected.")
|
101
|
-
success = self.driver.CH341EppWriteData(packet)
|
102
|
-
if not success:
|
103
|
-
raise ConnectionError("Failed to write to CH341:Windll.")
|
104
|
-
|
105
|
-
def write_addr(self, packet):
|
106
|
-
"""
|
107
|
-
Writes an address byte packet to the device. This is typically 1 byte
|
108
|
-
The driver will packetize the \0xA7 writes.
|
109
|
-
|
110
|
-
@param packet: 1 byte of data to be written to the CH341.
|
111
|
-
@return:
|
112
|
-
"""
|
113
|
-
if not self.is_connected():
|
114
|
-
raise ConnectionError("Not connected.")
|
115
|
-
success = self.driver.CH341EppWriteAddr(packet)
|
116
|
-
if not success:
|
117
|
-
raise ConnectionError("Failed to write to CH341:Windll.")
|
118
|
-
|
119
|
-
def get_status(self):
|
120
|
-
"""
|
121
|
-
Gets the status bytes from the CH341. This is usually 255 for the D0-D7 values
|
122
|
-
And the state flags for the chip signals. Importantly are WAIT which means do not
|
123
|
-
send data, and ERR which means the data sent was faulty. And PEMP which means the
|
124
|
-
buffer is empty.
|
125
|
-
|
126
|
-
StateBitERR 0x00000100
|
127
|
-
StateBitPEMP 0x00000200
|
128
|
-
StateBitINT 0x00000400
|
129
|
-
StateBitSLCT 0x00000800
|
130
|
-
StateBitWAIT 0x00002000
|
131
|
-
StateBitDATAS 0x00004000
|
132
|
-
StateBitADDRS 0x00008000
|
133
|
-
StateBitRESET 0x00010000
|
134
|
-
StateBitWRITE 0x00020000
|
135
|
-
StateBitSCL 0x00400000
|
136
|
-
StateBitSDA 0x00800000
|
137
|
-
@return:
|
138
|
-
"""
|
139
|
-
if not self.is_connected():
|
140
|
-
raise ConnectionRefusedError("Not connected.")
|
141
|
-
if self.bulk:
|
142
|
-
write_buffer = bytes([mCH341_PARA_CMD_STS])
|
143
|
-
self.driver.CH341WriteData(write_buffer)
|
144
|
-
data = self.driver.CH341ReadData(8)
|
145
|
-
if len(data) != 0:
|
146
|
-
return data
|
147
|
-
return [0] * 6
|
148
|
-
return self.driver.CH341GetStatus()
|
149
|
-
|
150
|
-
def get_chip_version(self):
|
151
|
-
"""
|
152
|
-
Gets the version of the CH341 chip being used.
|
153
|
-
@return: version.
|
154
|
-
"""
|
155
|
-
if not self.is_connected():
|
156
|
-
raise ConnectionRefusedError
|
157
|
-
return self.driver.CH341GetVerIC()
|
1
|
+
from meerk40t.ch341.ch341device import CH341Device
|
2
|
+
from meerk40t.ch341.libusb import mCH341_PARA_CMD_STS
|
3
|
+
|
4
|
+
# MIT License.
|
5
|
+
|
6
|
+
|
7
|
+
class WinCH341Driver:
|
8
|
+
"""
|
9
|
+
This is basic interface code for a CH341 to be run in EPP 1.9 mode.
|
10
|
+
"""
|
11
|
+
|
12
|
+
def __init__(self, channel=None, state=None, bulk=True):
|
13
|
+
self.driver_index = None
|
14
|
+
self.channel = channel
|
15
|
+
self.state = state
|
16
|
+
self.bulk = bulk
|
17
|
+
self.driver = None
|
18
|
+
|
19
|
+
def is_connected(self):
|
20
|
+
return self.driver is not None
|
21
|
+
|
22
|
+
@property
|
23
|
+
def driver_name(self):
|
24
|
+
return "WinDll"
|
25
|
+
|
26
|
+
@property
|
27
|
+
def address(self):
|
28
|
+
return None
|
29
|
+
|
30
|
+
@property
|
31
|
+
def bus(self):
|
32
|
+
return None
|
33
|
+
|
34
|
+
def open(self, usb_index):
|
35
|
+
"""
|
36
|
+
Opens the driver for unknown criteria.
|
37
|
+
"""
|
38
|
+
_ = self.channel._
|
39
|
+
if self.driver is not None:
|
40
|
+
return
|
41
|
+
self.channel(_("Using CH341 Driver to connect."))
|
42
|
+
self.channel(_("Attempting connection to USB."))
|
43
|
+
self.state("STATE_USB_CONNECTING")
|
44
|
+
devices = list(CH341Device.enumerate_devices())
|
45
|
+
if not devices:
|
46
|
+
self.channel(_("No CH341 Devices detected.\n"))
|
47
|
+
self.state("STATE_CONNECTION_FAILED")
|
48
|
+
raise IndexError # No more devices.
|
49
|
+
if usb_index >= len(devices):
|
50
|
+
self.channel(_("Connection to USB failed.\n"))
|
51
|
+
self.state("STATE_CONNECTION_FAILED")
|
52
|
+
raise IndexError # No more devices.
|
53
|
+
self.driver = devices[usb_index]
|
54
|
+
self.driver.open()
|
55
|
+
self.driver_index = usb_index
|
56
|
+
self.state("STATE_USB_CONNECTED")
|
57
|
+
self.channel(_("USB Connected."))
|
58
|
+
self.channel(_("Sending CH341 mode change to EPP1.9."))
|
59
|
+
success = self.driver.CH341InitParallel(1)
|
60
|
+
if success:
|
61
|
+
self.channel(_("CH341 mode change to EPP1.9: Success."))
|
62
|
+
else:
|
63
|
+
self.channel(_("CH341 mode change to EPP1.9: Fail."))
|
64
|
+
self.driver.close()
|
65
|
+
raise ConnectionRefusedError
|
66
|
+
self.channel(_("Device Connected.\n"))
|
67
|
+
|
68
|
+
def close(self):
|
69
|
+
"""
|
70
|
+
Closes the driver for the stated device index.
|
71
|
+
"""
|
72
|
+
_ = self.channel._
|
73
|
+
if self.driver is None:
|
74
|
+
self.channel(_("USB connection did not exist."))
|
75
|
+
return
|
76
|
+
self.state("STATE_USB_SET_DISCONNECTING")
|
77
|
+
self.channel(_("Attempting disconnection from USB."))
|
78
|
+
self.driver.close()
|
79
|
+
self.state("STATE_USB_DISCONNECTED")
|
80
|
+
self.channel(_("USB Disconnection Successful.\n"))
|
81
|
+
self.driver_index = None
|
82
|
+
|
83
|
+
def reset(self):
|
84
|
+
_ = self.channel._
|
85
|
+
self.channel(_("USB connection reset."))
|
86
|
+
self.driver.CH341ResetDevice()
|
87
|
+
|
88
|
+
def release(self):
|
89
|
+
pass
|
90
|
+
|
91
|
+
def write(self, packet):
|
92
|
+
"""
|
93
|
+
Writes a 32 byte packet to the device. This is typically \x00 + 30 bytes + CRC
|
94
|
+
The driver will packetize the \0xA6 writes.
|
95
|
+
|
96
|
+
@param packet: 32 bytes of data to be written to the CH341.
|
97
|
+
@return:
|
98
|
+
"""
|
99
|
+
if not self.is_connected():
|
100
|
+
raise ConnectionError("Not connected.")
|
101
|
+
success = self.driver.CH341EppWriteData(packet)
|
102
|
+
if not success:
|
103
|
+
raise ConnectionError("Failed to write to CH341:Windll.")
|
104
|
+
|
105
|
+
def write_addr(self, packet):
|
106
|
+
"""
|
107
|
+
Writes an address byte packet to the device. This is typically 1 byte
|
108
|
+
The driver will packetize the \0xA7 writes.
|
109
|
+
|
110
|
+
@param packet: 1 byte of data to be written to the CH341.
|
111
|
+
@return:
|
112
|
+
"""
|
113
|
+
if not self.is_connected():
|
114
|
+
raise ConnectionError("Not connected.")
|
115
|
+
success = self.driver.CH341EppWriteAddr(packet)
|
116
|
+
if not success:
|
117
|
+
raise ConnectionError("Failed to write to CH341:Windll.")
|
118
|
+
|
119
|
+
def get_status(self):
|
120
|
+
"""
|
121
|
+
Gets the status bytes from the CH341. This is usually 255 for the D0-D7 values
|
122
|
+
And the state flags for the chip signals. Importantly are WAIT which means do not
|
123
|
+
send data, and ERR which means the data sent was faulty. And PEMP which means the
|
124
|
+
buffer is empty.
|
125
|
+
|
126
|
+
StateBitERR 0x00000100
|
127
|
+
StateBitPEMP 0x00000200
|
128
|
+
StateBitINT 0x00000400
|
129
|
+
StateBitSLCT 0x00000800
|
130
|
+
StateBitWAIT 0x00002000
|
131
|
+
StateBitDATAS 0x00004000
|
132
|
+
StateBitADDRS 0x00008000
|
133
|
+
StateBitRESET 0x00010000
|
134
|
+
StateBitWRITE 0x00020000
|
135
|
+
StateBitSCL 0x00400000
|
136
|
+
StateBitSDA 0x00800000
|
137
|
+
@return:
|
138
|
+
"""
|
139
|
+
if not self.is_connected():
|
140
|
+
raise ConnectionRefusedError("Not connected.")
|
141
|
+
if self.bulk:
|
142
|
+
write_buffer = bytes([mCH341_PARA_CMD_STS])
|
143
|
+
self.driver.CH341WriteData(write_buffer)
|
144
|
+
data = self.driver.CH341ReadData(8)
|
145
|
+
if len(data) != 0:
|
146
|
+
return data
|
147
|
+
return [0] * 6
|
148
|
+
return self.driver.CH341GetStatus()
|
149
|
+
|
150
|
+
def get_chip_version(self):
|
151
|
+
"""
|
152
|
+
Gets the version of the CH341 chip being used.
|
153
|
+
@return: version. E.g. 48.
|
154
|
+
"""
|
155
|
+
if not self.is_connected():
|
156
|
+
raise ConnectionRefusedError
|
157
|
+
return self.driver.CH341GetVerIC()
|
meerk40t/constants.py
ADDED
meerk40t/core/__init__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
name = "core"
|
1
|
+
name = "core"
|