151

Re: print gcode files to miniMaker

Yesterday I loaded a new spool of filament onto my mini w and this morning when I went to check on it the filament had snapped at the bottom of the extruder.  I have been plagued with this issue for a long time now and I think it is because of how the extruder is placed directly over the spool of filament.  That causes the filament to twist into an 'S' pattern and that puts a lot of strain on it right where it enters the extruder.

Anyway as a test I decided to remove the metal cup at the base of the extruder and replace it with a spare piece of bowden tube I had laying about.  The theory is that this will spread the stress out over a wider length of the filament and hopefully it will stop me from wasting a whole lot of filament whenever I forget to unload the spool.

Anyway I have it setup and will leave it in place for a few days to see what happens.  If it works I think I will rework it so the bowden tube goes all the way up to the extruder gears.  That should smooth out the process of inserting new filament.  Right now it can snag a bit when you install new filament.

http://soliforum.com/i/?858UFGn.jpg

http://soliforum.com/i/?SAavw0r.jpg

152

Re: print gcode files to miniMaker

I spent some time with wireshark today and have a partial trace of commands.  Wifi still works poorly with XYZWare, there are often long delays between commands and sometimes the state is not properly refreshed.  However it is usable if you can put up with the unresponsivness of it all.

Here is what I have so far, you can see that almost nothing is ever returned from an individual command, instead we need to rely on status messages, and those can be unreliable.

-----------------
// clean nozzle

>XYZv3/query=a\n
<e:0\n
<j:9511,0\n    // idle state
<t:1,24,0\n

>XYZv3/action=cleannozzle:new\n

// loop looking for change in status
>XYZv3/query=a\n
<j:9536,51\n    // cleaning warming up
<t:1,24,0\n    // extruder turned off
..
<t:1,26,200\n    // extruder warming up to 200 deg
..
<t:1,191,200\n    // made it, or close enough
..
<j:9536,52\n    // ready to clean

//call 
XYZv3/action=cleannozzle:cancel
// or wait for
<j:9511,0\n    // idle state
<t:1,203,0\n

-------------------
// calibrate

>XYZv3/query=a\n
<j:9511,0\n    // idle state

>XYZv3/action=calibratejr:new\n

>XYZv3/query=j\n
<j:9535,40\n    // begin calibration
..
<j:9535,41\n    // ask to lower detector

>XYZv3/action=calibratejr:detectorok\n
>XYZv3/query=j\n
<j:9535,43\n    // calibrating
..
<j:9535,44\n    // ask to raise detector

>XYZv3/action=calibratejr:getdata\n
<calibratejr:{335,372,377,352,375,369,365,378,356}\n
<$\n

>XYZv3/action=calibratejr:release\n

>XYZv3/query=j\n
<j:9511,0\n    // idle state

----------------
// home

>XYZv3/action=home\n

>XYZv3/query=j\n
<j:9511,0\n    // idle state
..
<j:9534,5\n    // homing
..
<j:9511,0\n    // idle state

>XYZv3/action=jog:{"axis":"y","dir":"+","len":"150"}\n

>XYZv3/query=j\n
// initially no value returned
..
<j:9511,0\n    // idle state

>XYZv3/action=jog:{"axis":"x","dir":"+","len":"150"}\n

>XYZv3/query=j\n
..
<j:9511,0\n    // idle state

>XYZv3/action=jog:{"axis":"z","dir":"+","len":"150"}\n

>XYZv3/query=j\n
<j:9511,0\n    // idle state
..
<j:9532,30\n    // jogging
..
<j:9511,0\n    // idle state

>XYZv3/action=jog:{"axis":"z","dir":"-","len":"150"}\n

>XYZv3/query=j\n
<j:9511,0\n    // idle state
..
<j:9532,30\n    // jogging
..
<j:9511,0\n    // idle state


---------------------
// settings

>XYZv3/query=a\n
<o:p8,t1,c1,a+\n
<s:{"fm":0,"fd":0,"sd":"yes","button":"no","buzzer":"on"}\n

>XYZv3/config=autolevel:off\n

>XYZv3/query=a\n
<o:p8,t1,c1,a-\n

>XYZv3/config=autolevel:on\n

>XYZv3/query=a\n
<o:p8,t1,c1,a+\n

>XYZv3/config=buzzer:off\n

>XYZv3/query=a\n
<s:{"fm":0,"fd":0,"sd":"yes","button":"no","buzzer":"off"}\n

>XYZv3/config=buzzer:on\n

>XYZv3/query=a\n
<s:{"fm":0,"fd":0,"sd":"yes","button":"no","buzzer":"on"}\n

>XYZv3/config=restoredefault:on\n


-----------------------
// z offset

>XYZv3/query=a\n
<z:241\n

>XYZv3/config=zoffset:get\n
<241\n
<$\n

>XYZv3/action=home\n

>XYZv3/action=zoffset:up\n

>XYZv3/config=zoffset:get\n  // seems delayed, reading old value!!!!
<241\n
<$\n

>XYZv3/config=zoffset:set[261]\n

>XYZv3/query=a\n
<z:261\n

153

Re: print gcode files to miniMaker

It has been several days since I augmented my extruder and the filament has not snapped off yet.  It is probably time to make this a permanent fix.

154

Re: print gcode files to miniMaker

Here is a more complete list of wifi commands

-----------------
// clean nozzle

>XYZv3/query=a\n
<e:0\n
<j:9511,0\n    // idle state
<t:1,24,0\n

>XYZv3/action=cleannozzle:new\n

// loop looking for change in status
>XYZv3/query=a\n
<j:9536,51\n    // cleaning warming up
<t:1,24,0\n    // extruder turned off
..
<t:1,26,200\n    // extruder warming up to 200 deg
..
<t:1,191,200\n    // made it, or close enough
..
<j:9536,52\n    // ready to clean

//call 
XYZv3/action=cleannozzle:cancel
// or wait for
<j:9511,0\n    // idle state
<t:1,203,0\n

-------------------
// calibrate

>XYZv3/query=a\n
<j:9511,0\n    // idle state

>XYZv3/action=calibratejr:new\n

>XYZv3/query=j\n
<j:9535,40\n    // begin calibration
..
<j:9535,41\n    // ask to lower detector

>XYZv3/action=calibratejr:detectorok\n
>XYZv3/query=j\n
<j:9535,43\n    // calibrating
..
<j:9535,44\n    // ask to raise detector

>XYZv3/action=calibratejr:getdata\n
<calibratejr:{335,372,377,352,375,369,365,378,356}\n
<$\n

>XYZv3/action=calibratejr:release\n

>XYZv3/query=j\n
<j:9511,0\n    // idle state

----------------
// home

>XYZv3/action=home\n

>XYZv3/query=j\n
<j:9511,0\n    // idle state
..
<j:9534,5\n    // homing
..
<j:9511,0\n    // idle state

>XYZv3/action=jog:{"axis":"y","dir":"+","len":"150"}\n

>XYZv3/query=j\n
// initially no value returned
..
<j:9511,0\n    // idle state

>XYZv3/action=jog:{"axis":"x","dir":"+","len":"150"}\n

>XYZv3/query=j\n
..
<j:9511,0\n    // idle state

>XYZv3/action=jog:{"axis":"z","dir":"+","len":"150"}\n

>XYZv3/query=j\n
<j:9511,0\n    // idle state
..
<j:9532,30\n    // jogging
..
<j:9511,0\n    // idle state

>XYZv3/action=jog:{"axis":"z","dir":"-","len":"150"}\n

>XYZv3/query=j\n
<j:9511,0\n    // idle state
..
<j:9532,30\n    // jogging
..
<j:9511,0\n    // idle state


---------------------
// settings

>XYZv3/query=a\n
<o:p8,t1,c1,a+\n
<s:{"fm":0,"fd":0,"sd":"yes","button":"no","buzzer":"on"}\n

>XYZv3/config=autolevel:off\n

>XYZv3/query=a\n
<o:p8,t1,c1,a-\n

>XYZv3/config=autolevel:on\n

>XYZv3/query=a\n
<o:p8,t1,c1,a+\n

>XYZv3/config=buzzer:off\n

>XYZv3/query=a\n
<s:{"fm":0,"fd":0,"sd":"yes","button":"no","buzzer":"off"}\n

>XYZv3/config=buzzer:on\n

>XYZv3/query=a\n
<s:{"fm":0,"fd":0,"sd":"yes","button":"no","buzzer":"on"}\n

>XYZv3/config=restoredefault:on\n


-----------------------
// z offset

>XYZv3/query=a\n
<z:241\n

>XYZv3/config=zoffset:get\n
<241\n
<$\n

>XYZv3/action=home\n

>XYZv3/action=zoffset:up\n

>XYZv3/config=zoffset:get\n  // seems delayed, reading old value!!!!
<241\n
<$\n

>XYZv3/config=zoffset:set[261]\n

>XYZv3/query=a\n
<z:261\n

------------------------
// load/unload
// an error of 0x40000206 indicates no spool installed

>XYZv3/query=a\n
<e:0\n
<j:9511,0\n    // idle state
<t:1,22,0\n

>XYZv3/action=load:new\n

>XYZv3/query=a\n
<j:9530,11\n    // warming up
<t:1,24,200\n
..
<j:9530,12\n    // loading
<t:1,202,200\n

>XYZv3/action=load:cancel\n

>XYZv3/query=a\n
<j:9530,12\n    // loading
<t:1,202,200\n
..
<j:9511,0\n    // idle state
<t:1,201,0\n

// optionally call, if you did not cancel
>XYZv3/action=load:retry\n

>XYZv3/action=unload:new\n

>XYZv3/query=a\n
<j:9531,21\n    // warming up
<t:1,128,200\n
..
<t:1,199,100\n
..
<j:9531,22\n    // unloading
<t:1,199,100\n
..
<j:9511,0\n    // idle state
<t:1,92,0\n

// optionally call 
>XYZv3/action=unload:retry\n

------------------
// print

>XYZv3/query=a\n
<d:0,0,0\n
<e:0\n
<j:9511,0\n    // idle state
<t:1,26,0\n

>XYZv3/upload=MyTest.gcode,18688\n
<ok\n
><data>                // no newline
<ok\n
...
><data>                // no newline
<ok\n
>XYZv3/uploadDidFinish        // no newline
<ok\n
<ok\n

>XYZv3/query=a\n
<d:0,0,0\n
<j:9520,0\n    // check file format
<t:1,87,0\n
..
<d:0,1,2\n
<j:9505,0\n    // print in progress
<t:1,195,200\n
..
<d:0,2,2\n
<j:9505,0\n    // print in progress
<t:1,202,200\n
..
<d:69,2,1\n
<j:9505,0\n    // print in progress
<t:1,203,200\n
..
<d:0,0,0\n
<j:9509,0\n    // print ending
<t:1,194,0\n
..
// just prior to removing fillament spool
<w:1,PMP6QTH64R1093\n
<e:0\n
<f:1,199864\n
<j:9509,0\n    // print ending
..
// after removing fillament spool
<w:1,--------------\n
<e:1073742342\n
<f:1,-1\n
<j:9511,0\n    // idle state

155 (edited by zheli 2018-07-15 20:37:24)

Re: print gcode files to miniMaker

Great work david! Just finished the all posts in the thread and I just want to say I really appreciate all your hard work!

Just cloned your repo and tried to compile the console command binary. Had to comment out all the code regarding to wifi and it compiled smile Unfortunately I can only try it tomorrow at work.

Owns a DaVinci mini

156 (edited by david.tucker 2018-07-16 01:58:25)

Re: print gcode files to miniMaker

Thanks for the kind words zheli. 

Can I ask what your build environment was, say ubuntu linux or windows 7 with visual C 2015, etc.  And any idea what the wifi issues where? 

I can compile my code on my ubuntu based windows subsystem for linux install.  That is a linux compatibility layer built into windows 10. And on the windows side Im using windows 10 and Visual Studio 2012 pro.

Oh, I suppose I should ask what branch you pulled, did you get the latest code or one of the older releases.

Wifi only sort of works, I am still working out how best to communicate using it.  Even if I perfect things on my end it is still a relatively unstable protocol, I would recommend using the serial port (usb) if you can make it work.

157 (edited by david.tucker 2018-07-16 02:23:29)

Re: print gcode files to miniMaker

I'm looking a little closer at my wifi logs and noticed that XYZWare sends a \r\n sequence at the end of all the commands it sends to the printer, but receives only a \n when communicating back to the pc. 

That is interesting because on the serial side we don't send any sort of a newline character at the end of our commands, which seems odd to me.  I thought I tested out appending a newline and it did not work, but I should double check that to see.  I would rather just use a \n char to terminate everywhere if that works.

I also noticed that during printing when the machine sends an ok response back it actually has a space at the end of the sequence, so the bytes are "ok \n"

158

Re: print gcode files to miniMaker

david.tucker wrote:

Thanks for the kind words zheli. 

Can I ask what your build environment was, say ubuntu linux or windows 7 with visual C 2015, etc.  And any idea what the wifi issues where? 

I can compile my code on my ubuntu based windows subsystem for linux install.  That is a linux compatibility layer built into windows 10. And on the windows side Im using windows 10 and Visual Studio 2012 pro.

Oh, I suppose I should ask what branch you pulled, did you get the latest code or one of the older releases.

Wifi only sort of works, I am still working out how best to communicate using it.  Even if I perfect things on my end it is still a relatively unstable protocol, I would recommend using the serial port (usb) if you can make it work.

I was using the master branch, probably should checkout one of the version branch tongue

Basically all I did is just to run `make` command in miniMoverConsole folder and of course it couldn't find `linux/wireless.h` file on Mac. So I just commented out that line and also changed autoDetectWifi to always return true. After that it was able to produce a executable `minimover` binary file. (At least I can get the help printout)

Owns a DaVinci mini

159

Re: print gcode files to miniMaker

Thanks for that, I will try to get rid of that linux\wireless.h file!

Let me know how it works on the mac, I assume your serial device is named /dev/tty* (where * is any characters), but I don't know if that is how it works on a mac.  There seems to be some inconsistency on naming devices in a unix environment.  Anyway you may need to tweak the file serial_linux.cpp:48 to match whatever your serial port is called rather than "tty"

160

Re: print gcode files to miniMaker

I removed the linux\wireless.h file and the code that depended on it, it was not being used anyway.  Now wireless should compile on the mac, although it is not really ready for serious use yet.

161

Re: print gcode files to miniMaker

So I left my spool of filament loaded up for 2 weeks and it has not broken yet.  I think my experiment is working out well.  I really need to sit down and make a more permanent setup for the bowden tube.  My real hope is to redesign the full guide path, right now it is a bit awkward to load and unload filament, especially when it snaps in the extruder.

162 (edited by david.tucker 2018-07-30 04:02:29)

Re: print gcode files to miniMaker

I have my program working 'ok' over wifi now.  I spent some time getting the action commands cleaned up, those are commands like load filament and calibrate.  Anyway previously they did not work at all on wifi and now the mostly work.  That is if you are lucky they work great and if you are unlucky then tend to lock things up.

I have a plan to improve things a bit.  If I rework those functions to poll for status (asynchronous) rather than block then at least the UI won't lock up while we wait for wifi to update things.

Anyway the core issue is deep in the firmware of the mini w (and most likely the rest of the wireless machines) the mini w can't seem to communicate with the wifi adapter and update its status reliably while it is performing some other task, the end result is that a query for status often fails (more often than it succeeds) and since we rely on status updates to detect a process is complete that can lead to the UI locking up for a very long time.

I may be able to make it act a bit better by carefully tuning how fast I poll for a status update.

One interesting thing I noticed when looking into this is that querying for all status (query=a) often returns a varied amount of data, that is one query may return the 'b' and 'z' parameters while another query returns 'X' and 'v'.  Both cases will return the terminating '$' character and what parameters are returned vs missing seems to follow no clear pattern.  All I can think is that the underlying firmware is struggling to keep up, probably because they are using a separate computer to manage the wifi network and that most likely is causing the communications issues.

Once again I want to point out that XYZWare is very inconsistent and often locks up for extended periods of times when communicating over wifi.  The core issue is that this protocol is not well defined or well implemented in the firmware.

163

Re: print gcode files to miniMaker

This all brings up an interesting question, how reliable are your machines over wifi.  All I have to look at is one poorly maintained mini w machine.  Anyway do you experience long delays in XYZWare when interacting with your machine?  How does it compare to connecting via the usb cable.  I'm finding that things are much more responsive over usb, in fact it works so much better that I wonder why anyone would consider using wifi at all.  I frequently need to restart my machine because the wifi controller has gotten itself stuck in a funky state.

164

Re: print gcode files to miniMaker

Hello David,

I have been using miniMover 0.9 with Cura and it works like a dream! I have recently really gotten into modeling and printing threaded parts, but ran into a problem. When I tried to print a larger gcode file for a spike lugnut cover I modeled (41,000 kB), after a while it says process failed. I have heard that printing larger files is an issue and I was wondering if this was an issue you were aware of. Anyways, I have LOVED your miniMover utility and greatly hope that I can print large files in the near future.

165

Re: print gcode files to miniMaker

cmeskins wrote:

Hello David,

I have been using miniMover 0.9 with Cura and it works like a dream! I have recently really gotten into modeling and printing threaded parts, but ran into a problem. When I tried to print a larger gcode file for a spike lugnut cover I modeled (41,000 kB), after a while it says process failed. I have heard that printing larger files is an issue and I was wondering if this was an issue you were aware of. Anyways, I have LOVED your miniMover utility and greatly hope that I can print large files in the near future.


The issue is probably the amount of memory the printer has to load the file into or the time it takes to transfer the file. The XYZ printers are not made for complex or large files.

Printing since 2009 and still love it!
Anycubic 4MAX best $225 ever invested.
Voxelabs Proxima SLA. 6 inch 2k Mono LCD.
Anycubic Predator, massive Delta machine. 450 x 370 print envelope.

166

Re: print gcode files to miniMaker

carl_m1968,

If that were the case, wouldn't XYZware have had issue loading and slicing my model too? After trying to do this with miniMover I tested it with XYZware and it started printing the model (even though it didn't slice it well at all). It's almost as if miniMover 0.9 is timing out, but I'm no coding guru in the slightest.

167

Re: print gcode files to miniMaker

Cmeskins, can you send me the .gcode file and I will test it out here. I did test sending a large gcode file to the printer (around 50 mb) and it worked, but was slow to upload.

168

Re: print gcode files to miniMaker

Hi, David,

I take quick look at your code today, lots of efficiency issue, you should keep your code as efficient as possible, otherwise it is going to give you a lots of hanging, freezing, no response etc.

For example, you have void MainDlgUpdate(HWND hDlg) that you wrote in memo that is running 2x per second, but you run const XYZPrinterInfo *inf = xyz.getPrinterInfo(); in it, do you really think any of those information going to change every half second?

Also you are trying to check if ssid and password changed and try to update the value if changed. Didn't you already updated that when click autoconnect?

I did not spend enough time to fully understood your code, so the above point may be wrong, my point is, if some code need to run again and again like 2x per second, make it do as little as possible.

I think you did really good job in design this app, and wish you best luck with the wifi stuff.

(Da Vinci 1.0, Jr. 1.0 RAMPS, miniMaker) X4, (Creality CR-10S, CR-10 mini, Ender-3) X4, Anycubic MEGA X4, Anycubic Chrion X1, ADMILAB Gantry X2 (MonoPrice Maker Select V2, Plus, Ultimate)X4--Select mini X1, Anycubic photon X4, Wanhao duplicate D7 X1.
iNSTONE Inventor Pro X2, CTC Dual X2, ANET-A8, Hictop 3DP-11, Solidoodle Press, FLSUN I3 2017X1

169

Re: print gcode files to miniMaker

David,

So upon further testing with miniMover 0.9, I have discovered that this utility times out after an average of 1 minute and 25 seconds. I uploaded several other larger prints to my printer and timed with a stopwatch for when the dreaded "process failed" message appeared. I might also add that I am using a da vinci mini w 3D printer as this is the only printer I own. I get fantastic prints with Cura and miniMover 0.9 as long as the gcode is small enough to be transferred within that 1 minute and 25 second time window. Hope this information is helpful.

170

Re: print gcode files to miniMaker

yizhou.he wrote:

Hi, David,

I take quick look at your code today, lots of efficiency issue, you should keep your code as efficient as possible, otherwise it is going to give you a lots of hanging, freezing, no response etc.

For example, you have void MainDlgUpdate(HWND hDlg) that you wrote in memo that is running 2x per second, but you run const XYZPrinterInfo *inf = xyz.getPrinterInfo(); in it, do you really think any of those information going to change every half second?

Also you are trying to check if ssid and password changed and try to update the value if changed. Didn't you already updated that when click autoconnect?

I did not spend enough time to fully understood your code, so the above point may be wrong, my point is, if some code need to run again and again like 2x per second, make it do as little as possible.

I think you did really good job in design this app, and wish you best luck with the wifi stuff.

Thanks for your notes, these are good ideas. 

On the first one I already changed things around so that I am only polling for an update on the printer status once every 2 minutes or so, and then I added in a flag that can be set to force an update if someone edits the z-offset or any of the other settings that depend on the printer status.  That code is in the head branch but has not been released yet.  I also drive all of this via timers now so that the message pump has time to spin between editing a value and polling for the change.

On the second one that is working around an issue in win32.  I only want to update the value stored in the text box if it changed, otherwise I will block the user from being able to edit.  The test is very fast (C is very efficient compared to C# when it comes to strings) so it is not expensive.

As for blocking, the real issue is that every communication with the printer takes a long time to complete and my code is not well written to deal with that.  That is what I am working on now, splitting up the code even more so I can update the UI while waiting for communication wit the printer to complete.  With the USB connection things were fast enough that you could usually get away with my setup, but wifi is 10x slower and that pushes almost all communication into the 'too slow' bin.

I have been a C++ developer for 20 years now, but in truth I hardly ever do windows UI's and it is not one of my strengths at all.  That is part of the fun of this project, forcing myself into areas of code that I usually never get to play with.

171

Re: print gcode files to miniMaker

cmeskins wrote:

David,

So upon further testing with miniMover 0.9, I have discovered that this utility times out after an average of 1 minute and 25 seconds. I uploaded several other larger prints to my printer and timed with a stopwatch for when the dreaded "process failed" message appeared. I might also add that I am using a da vinci mini w 3D printer as this is the only printer I own. I get fantastic prints with Cura and miniMover 0.9 as long as the gcode is small enough to be transferred within that 1 minute and 25 second time window. Hope this information is helpful.

Thanks, I will try to pull out a large print file to test with.  It could be that I have a timeout set too short, or it could be that the printer won't upload anything too large.

I suspect that when you slice with XYZWare they are being more aggressive in there slicing and using a lower resolution model so the resulting file is smaller than what cura generates.

172

Re: print gcode files to miniMaker

david.tucker wrote:

I have been a C++ developer for 20 years now, but in truth I hardly ever do windows UI's and it is not one of my strengths at all.  That is part of the fun of this project, forcing myself into areas of code that I usually never get to play with.

Read more about WaitForSingleObject(ghMutex, INFINITE), my guest is the infinite is causing the trouble. There are work around to avoid use INFINITE and allow you do other things while waiting for response.

(Da Vinci 1.0, Jr. 1.0 RAMPS, miniMaker) X4, (Creality CR-10S, CR-10 mini, Ender-3) X4, Anycubic MEGA X4, Anycubic Chrion X1, ADMILAB Gantry X2 (MonoPrice Maker Select V2, Plus, Ultimate)X4--Select mini X1, Anycubic photon X4, Wanhao duplicate D7 X1.
iNSTONE Inventor Pro X2, CTC Dual X2, ANET-A8, Hictop 3DP-11, Solidoodle Press, FLSUN I3 2017X1

173

Re: print gcode files to miniMaker

yizhou.he wrote:
david.tucker wrote:

I have been a C++ developer for 20 years now, but in truth I hardly ever do windows UI's and it is not one of my strengths at all.  That is part of the fun of this project, forcing myself into areas of code that I usually never get to play with.

Read more about WaitForSingleObject(ghMutex, INFINITE), my guest is the infinite is causing the trouble. There are work around to avoid use INFINITE and allow you do other things while waiting for response.

Not a bad guess, but I definitely want to block indefinitely on WaitForSingleObject.  Any function that calls that from the same thread will just pass on through without blocking, but any function that makes that call from a different thread will block if another function has the lock.  That is the proper way to do it, at least for how I am using the code.

This is only there as a coarse protection when calling code form more than one thread.  in this case it protects me from doing something stupid (trying to send two commands to the printer at once) and allows me to isolate the print calls into there own thread without needing to make the UI code overly complex.

Anyway I'm working on making these calls unnecessary.  I will probably leave them in place anyway, a little protection is not a bad thing, but I'm working on code now to eliminate the print worker thread.  Basically rather than blocking till a print is finished, I'm going to split the sending and monitoring calls up so that each call only takes a fraction of a second.  That way I can pump the UI while waiting for the call to finish.  I have this stubbed in already but have not found much time to finish it up.

174

Re: print gcode files to miniMaker

I think you can at least give a more specific timeout to most of the WaitForSingleObject that expect response within minutes, otherwise your app may hung whenever miniMaker loss power or reboot or when you have poor wifi signal for whatever reason. You can pop a error message which make debug less problematic.

(Da Vinci 1.0, Jr. 1.0 RAMPS, miniMaker) X4, (Creality CR-10S, CR-10 mini, Ender-3) X4, Anycubic MEGA X4, Anycubic Chrion X1, ADMILAB Gantry X2 (MonoPrice Maker Select V2, Plus, Ultimate)X4--Select mini X1, Anycubic photon X4, Wanhao duplicate D7 X1.
iNSTONE Inventor Pro X2, CTC Dual X2, ANET-A8, Hictop 3DP-11, Solidoodle Press, FLSUN I3 2017X1

175

Re: print gcode files to miniMaker

yizhou.he wrote:

I think you can at least give a more specific timeout to most of the WaitForSingleObject that expect response within minutes, otherwise your app may hung whenever miniMaker loss power or reboot or when you have poor wifi signal for whatever reason. You can pop a error message which make debug less problematic.

Another good idea, but that is all handled inside of the xyzv3 class.  Every call either returns immediately or has a predefined timeout, it should be impossible to block permanently even if the communications fail.  I put it there so that the command line and UI interfaces could share the code, and so anyone else using the xyzv3 class can communicate without needing to know how it works underneath.

At the higher level of the UI I'm not concerned with locking things up, only with stopping collisions.  I let the lower level code do all the dirty work.