Leetro: Difference between revisions
(2 intermediate revisions by the same user not shown) | |||
Line 18: | Line 18: | ||
|- | |- | ||
| arc_center || 4 || 0x4020300 || (p1, p2), p3, p4, (p5, p6) || | | arc_center || 4 || 0x4020300 || (p1, p2), p3, p4, (p5, p6) || | ||
2 <= p1 <= 4, | 2 <= p1 <= 4, | ||
2 <= p2 <= 4, | 2 <= p2 <= 4, | ||
0x2000001 | 0x2000001 | ||
|- | |- | ||
| c_arc_curve || 3 || 0x3000c09 || p1, p2, (p3,p4) || | | c_arc_curve || 3 || 0x3000c09 || p1, p2, (p3,p4) || | ||
Line 26: | Line 26: | ||
| c_bzerve_curve || 8 || 0x8000b09 || p1, p2, p3, p4, p5, p6, p7, p8 || | | c_bzerve_curve || 8 || 0x8000b09 || p1, p2, p3, p4, p5, p6, p7, p8 || | ||
|- | |- | ||
| c_change_multi_voltage || 3 || 0x3003509 || p1, p2, 0x3003509 || 0 <= p1 <= 10,000, 0 <= p2 <= 10,000, 0x2000003 | | c_change_multi_voltage || 3 || 0x3003509 || p1, p2, 0x3003509 || | ||
0 <= p1 <= 10,000, | |||
0 <= p2 <= 10,000, | |||
0x2000003 | |||
|- | |- | ||
| c_change_voltage || 2 || 0x2003509 || p1, 0x2003509 || 0 <= p1 <= 10,000, 0x2000003 | | c_change_voltage || 2 || 0x2003509 || p1, 0x2003509 || | ||
0 <= p1 <= 10,000, | |||
0x2000003 | |||
|- | |- | ||
| c_curve_begin || 1 || 0x1000109 || (p1, p2) || | | c_curve_begin || 1 || 0x1000109 || (p1, p2) || | ||
Line 34: | Line 39: | ||
| c_curve_end || 0 || 0x209 || || | | c_curve_end || 0 || 0x209 || || | ||
|- | |- | ||
| c_delay_time || 2 || 0x2003209 || p1 * 20, 0x2003209 || 0 <= p1, 0x2000004 | | c_delay_time || 2 || 0x2003209 || p1 * 20, 0x2003209 || | ||
0 <= p1, | |||
0x2000004 | |||
|- | |- | ||
| c_fast_line2 || 2 || 0x2020309 || p1, p2 || | | c_fast_line2 || 2 || 0x2020309 || p1, p2 || | ||
Line 50: | Line 57: | ||
| c_set_max_accel || 1 || 0x1004509 || (p1, p2) || | | c_set_max_accel || 1 || 0x1004509 || (p1, p2) || | ||
|- | |- | ||
| c_set_move_profile || 3 || 0x3000a09 || (p1,p2), (p3,p4), (p4,p5)|| 0 <= (p2,p1) <= 1m, 0 <= (p4,p3) <= 1m, 0x2000002 | | c_set_move_profile || 3 || 0x3000a09 || (p1,p2), (p3,p4), (p4,p5)|| | ||
0 <= (p2,p1) <= 1m, | |||
0 <= (p4,p3) <= 1m, | |||
0x2000002 | |||
|- | |- | ||
| c_set_multi_power || 7 || 0x7002009 || p1, p2, p3, p4, (p5,p6), (p7,p8), p9|| 0 <= (p6,p5) <= 1m, 0 <= (p8,p7) <= 1m, 0 <= p1 <= 10,000, 0 <= p2 <= 10,000, 0 <= p3 <= 10,000, 0 <= p4 <= 10,000, 0x2000002 | | c_set_multi_power || 7 || 0x7002009 || p1, p2, p3, p4, (p5,p6), (p7,p8), p9|| | ||
0 <= (p6,p5) <= 1m, | |||
0 <= (p8,p7) <= 1m, | |||
0 <= p1 <= 10,000, | |||
0 <= p2 <= 10,000, | |||
0 <= p3 <= 10,000, | |||
0 <= p4 <= 10,000, | |||
0x2000002 | |||
|- | |- | ||
| c_set_power || 5 || 0x5002009 || p1, p2, (p3, p4), (p5,p6), p7 || 0 <= (p4,p3) <= 1m, 0 <= (p6,p5) <= 1m, 0 <= p1 <= 10,000, 0 <= p2 <= 10,0000, 0x2000003 | | c_set_power || 5 || 0x5002009 || p1, p2, (p3, p4), (p5,p6), p7 || | ||
0 <= (p4,p3) <= 1m, | |||
0 <= (p6,p5) <= 1m, | |||
0 <= p1 <= 10,000, | |||
0 <= p2 <= 10,0000, | |||
0x2000003 | |||
|- | |- | ||
| c_set_vector_profile || 3 || 0x3000409 || (p1, p2), (p3, p4), (p5, p6) || 0<=(p2,p1)<=1m, 0<= (p4,p3) <= 1m, 0x2000002 | | c_set_vector_profile || 3 || 0x3000409 || (p1, p2), (p3, p4), (p5, p6) || | ||
0 <= (p2,p1) <= 1m, | |||
0 <= (p4,p3) <= 1m, | |||
0x2000002 | |||
|- | |- | ||
| c_write_data || 3 || 0x3003309 || p1, p2, 0x3003309 || | | c_write_data || 3 || 0x3003309 || p1, p2, 0x3003309 || | ||
|- | |- | ||
| change_multi_voltage || 2 || 0x2000120 || p1, p2 || 0 <= p1 <= 10,000, 0 <= p2 <= 10,000, 0x2000003 | | change_multi_voltage || 2 || 0x2000120 || p1, p2 || | ||
0 <= p1 <= 10,000, | |||
0 <= p2 <= 10,000, | |||
0x2000003 | |||
|- | |- | ||
| change_power_ontime || 1 || 0x1020109 || p1 || | | change_power_ontime || 1 || 0x1020109 || p1 || | ||
Line 66: | Line 94: | ||
| change_speed_ontime || 1 || 0x1020009 || (p1,p2) || | | change_speed_ontime || 1 || 0x1020009 || (p1,p2) || | ||
|- | |- | ||
| change_voltage || 1 || 0x1000120 || p1 || 0 <= p1 <= 10,000, 0x2000003 | | change_voltage || 1 || 0x1000120 || p1 || | ||
0 <= p1 <= 10,000, | |||
0x2000003 | |||
|- | |- | ||
| change_voltage2 || 1 || 0x1000b20 || p1 || 0 <= p1 <= 10,000, 0x2000003 | | change_voltage2 || 1 || 0x1000b20 || p1 || | ||
0 <= p1 <= 10,000, | |||
0x2000003 | |||
|- | |- | ||
| check_batch_done || - || - || - (not export command) || | | check_batch_done || - || - || - (not export command) || | ||
Line 88: | Line 120: | ||
| checkin_byte || - || - ||- (not export command) || | | checkin_byte || - || - ||- (not export command) || | ||
|- | |- | ||
| con_hmove || 2 || 0x2010200 || p1, p2 || 2 <= p1 <= 4, 0x2000001 | | con_hmove || 2 || 0x2010200 || p1, p2 || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| con_hmove2 || 3 || 0x3020200 || (p1, p3), p2, p4 || 2 <= p1 <= 4, 2 <= p3 <= 4, 0x2000001 | | con_hmove2 || 3 || 0x3020200 || (p1, p3), p2, p4 || | ||
2 <= p1 <= 4, | |||
2 <= p3 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| con_line2 || 3 || 0x3022000 || (p1, p3), p2, p4 || 2 <= p1 <= 4, 2 <= p3 <= 4, 0x2000001 | | con_line2 || 3 || 0x3022000 || (p1, p3), p2, p4 || | ||
2 <= p1 <= 4, | |||
2 <= p3 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| con_pmove || 2 || 0x2010000 || p1, p2 || 2 <= p1 <= 4, 0x2000001 | | con_pmove || 2 || 0x2010000 || p1, p2 || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| con_pmove2 || 3 || 0x3020000 || (p1, p3), p2, p4 || 2 <= p1 <= 4, 2 <= p3 <= 4, 0x2000001 | | con_pmove2 || 3 || 0x3020000 || (p1, p3), p2, p4 || | ||
2 <= p1 <= 4, | |||
2 <= p3 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| con_vmove || 2 || 0x2010100 || p1, p2 || 2 <= p1 <= 4, 0x2000001 | | con_vmove || 2 || 0x2010100 || p1, p2 || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| con_vmove2 || 3 || 0x3020100 || (p1, p3), p2, p2 (yes, p2 twice) || 2 <= p1 <= 4, 2 <= p3 <= 4, | | con_vmove2 || 3 || 0x3020100 || (p1, p3), p2, p2 (yes, p2 twice) || | ||
2 <= p1 <= 4, | |||
2 <= p3 <= 4, | |||
0x2000001 | 0x2000001 | ||
|- | |- | ||
| con_decel_stop || 1 || 0x1010102 || p1 || 2 <= p1 <= 4, 0x2000001 | | con_decel_stop || 1 || 0x1010102 || p1 || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| con_decel_stop2 || 1 || 0x1020102 || (p1,p2) || 2 <= p1 <= 4, 2 <= p2 <= 4,0x2000001 | | con_decel_stop2 || 1 || 0x1020102 || (p1,p2) || | ||
2 <= p1 <= 4, | |||
2 <= p2 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| con_decel_stop3 || 1 || 0x1030102 || (p1,p2,p3) || 2 <= p1 <= 4, 2 <= p2 <= 4, 2 <= p3 <= 4, 0x2000001 | | con_decel_stop3 || 1 || 0x1030102 || (p1,p2,p3) || | ||
2 <= p1 <= 4, | |||
2 <= p2 <= 4, | |||
2 <= p3 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| delay_time || 1 || 0x1000602 || p1 * 20 || 0 <= p1, 0x2000004 | | delay_time || 1 || 0x1000602 || p1 * 20 || | ||
0 <= p1, | |||
0x2000004 | |||
|- | |- | ||
| end_backlash || 1 || 0x1004b01 || (p1,0) || 2 <= p1 <= 4, 0x2000001 | | end_backlash || 1 || 0x1004b01 || (p1,0) || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| fast_arc_center || 4 || 0x4024300 || (p1, p2), p3, p4, (p5,p6) || 2 <= p1 <= 4, 2 <= p2 <= 4 0x2000001 | | fast_arc_center || 4 || 0x4024300 || (p1, p2), p3, p4, (p5,p6) || | ||
2 <= p1 <= 4, | |||
2 <= p2 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| fast_hmove || 2 || 0x2014200 || p1, p2 || 2 <= p1 <= 4, 0x2000001 | | fast_hmove || 2 || 0x2014200 || p1, p2 || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| fast_hmove2 || 3 || 0x3024200 || (p1, p3), p2, p4|| 2 <= p1 <= 4, 2 <= p3 <= 4, 0x2000001 | | fast_hmove2 || 3 || 0x3024200 || (p1, p3), p2, p4|| | ||
2 <= p1 <= 4, | |||
2 <= p3 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| fast_line2 || 3 || 0x3026000 || (p1, p3), p2, p4 || 2 <= p1 <= 4, 2 <= p3 <= 4, 0x2000001 | | fast_line2 || 3 || 0x3026000 || (p1, p3), p2, p4 || | ||
2 <= p1 <= 4, | |||
2 <= p3 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| fast_pmove || 2 || 0x2014000 || p1, p2 || 2 <= p1 <= 4, 0x2000001 | | fast_pmove || 2 || 0x2014000 || p1, p2 || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| fast_pmove2 || 3 || 0x3024000 || (p1, p3), p2, p4 || 2 <= p1 <= 4, 2 <= p3 <= 4, 0x2000001 | | fast_pmove2 || 3 || 0x3024000 || (p1, p3), p2, p4 || | ||
2 <= p1 <= 4, | |||
2 <= p3 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| fast_vmove || 2 || 0x2014100 || p1, p2 || 2 <= p1 <= 4, 0x2000001 | | fast_vmove || 2 || 0x2014100 || p1, p2 || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| fast_vmove2 || 3 || 0x3024100 || (p1, p3), p2, p4|| 2 <= p1 <= 4, 2 <= p3 <= 4, 0x2000001 | | fast_vmove2 || 3 || 0x3024100 || (p1, p3), p2, p4|| | ||
2 <= p1 <= 4, | |||
2 <= p3 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| get_abs_pos || - || - || p1, *p2 (not export command) || 2 <= p1 <= 4, p2 (return) | | get_abs_pos || - || - || p1, *p2 (not export command) || | ||
2 <= p1 <= 4, | |||
p2 (return) | |||
|- | |- | ||
| get_fmw_ver || - || - || - (not export command) || | | get_fmw_ver || - || - || - (not export command) || | ||
Line 151: | Line 236: | ||
| read_data || - || - || p1 (not export command) || | | read_data || - || - || p1 (not export command) || | ||
|- | |- | ||
| reset_pos || - || 0x2014501 || defers to set_abs_pos(p1, 0)|| 2 <= p1 <= 4, 0x2000001 | | reset_pos || - || 0x2014501 || defers to set_abs_pos(p1, 0)|| | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| set_abs_pos || 2 || 0x2014501 || p1, p2 || 2 <= p1 <= 4, 0x2000001 | | set_abs_pos || 2 || 0x2014501 || p1, p2 || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| set_axis_ratio || 2 || 0x2015001 || p1, (p2, p3) || 2 <= p1 <= 4, 0x2000001 | | set_axis_ratio || 2 || 0x2015001 || p1, (p2, p3) || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| set_backlash || 2 || 0x2004a01 || p1, p2 || 2 <= p1 <= 4, 0x2000001 | | set_backlash || 2 || 0x2004a01 || p1, p2 || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| set_batch_flag || - || - || - (not exported) || | | set_batch_flag || - || - || - (not exported) || | ||
Line 163: | Line 256: | ||
| set_conacc_start_speed || 1 || 0x1025101 || (p1,p2) || | | set_conacc_start_speed || 1 || 0x1025101 || (p1,p2) || | ||
|- | |- | ||
| set_conspeed || 2 || 0x2010001 || p1, (p2,p3) || 2 <= p1 <= 4, 0x2000001 | | set_conspeed || 2 || 0x2010001 || p1, (p2,p3) || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| | | set_cmd_counter || 2 || 0x2004c01 || p1, p2 || | ||
|- | |- | ||
| | | set_home_mode || 1 || 0x1014001 || (p1,p2) || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| | | set_laser_mode || 1 || 0x1000220 || p1 || | ||
0 <= p1 <= 4 (crimped), | |||
0x2000001 | 0x2000001 | ||
|- | |- | ||
| | | set_level_in || 1 || 0x1014d01 || defers to set_level_sprt(p1, (p2)?9:0) || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| | | set_level_sprt || 1 || 0x1014d01 || (p1, p2 & 0xF) || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| set_outmode || 1 || 0x1014101 || (p1,p2,p3) || 2 <= p1 <= 4, 0x2000001 | | set_maxspeed || 2 || 0x2014301 || p1, (p2, p3) || | ||
2 <= p1 <= 4, | |||
0 <= (p3,p2) <= 1m, | |||
0x2000001 | |||
|- | |||
| set_outmode || 1 || 0x1014101 || (p1,p2,p3) || | |||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| set_power_mode || 1 || 0x1000320 || p1 || 0 <= p1 <= 4 (crimped), | | set_power_mode || 1 || 0x1000320 || p1 || | ||
0 <= p1 <= 4 (crimped), | |||
No fail value. | |||
|- | |- | ||
| set_profile || 4 || 0x4010101 || p1, (p2,p3), (p4,p5), (p6,p7) || 2 <= p1 <= 4, 0 <= (p3,p2) <= 1m, 0 <= (p5,p4) <= 1m | | set_profile || 4 || 0x4010101 || p1, (p2,p3), (p4,p5), (p6,p7) || | ||
2 <= p1 <= 4, | |||
0 <= (p3,p2) <= 1m, | |||
0 <= (p5,p4) <= 1m | |||
0x2000002 | |||
|- | |- | ||
| set_pwm2_frq || 1 || 0x1000a20 || p1 || 0 <= p1 < 60000, fail returns -1 | | set_pwm2_frq || 1 || 0x1000a20 || p1 || | ||
0 <= p1 < 60000, | |||
fail returns -1 | |||
|- | |- | ||
| set_pwm_frq || 1 || 0x1000420 || p1 || 0 <= p1 < 60000, fail returns -1 | | set_pwm_frq || 1 || 0x1000420 || p1 || | ||
0 <= p1 < 60000, | |||
fail returns -1 | |||
|- | |- | ||
| set_scan_startpos || 1 || 0x1000620 || p1 || | | set_scan_startpos || 1 || 0x1000620 || p1 || | ||
Line 190: | Line 309: | ||
| set_scan_step || 1 || 0x1000520 || p1 - 1 || | | set_scan_step || 1 || 0x1000520 || p1 - 1 || | ||
|- | |- | ||
| set_signal_in || 1 || 0x1014e01 || (p1, p2 & 0x1F) || 2 <= p1 <= 4, 0x2000001 | | set_signal_in || 1 || 0x1014e01 || (p1, p2 & 0x1F) || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| set_vector_conspeed || 1 || 0x1000201 || (p1, p2) || 0 <= (p2,p1) <= 1m | | set_vector_conspeed || 1 || 0x1000201 || (p1, p2) || | ||
0 <= (p2,p1) <= 1m | |||
|- | |- | ||
| set_vector_profile || 3 || 0x3000301 || (p1, p2), (p2, p3), (p5,p6) || 0 <= (p2,p1) <= 1m, 0 <= (p4,p3) <= 1m, 0x2000002 | | set_vector_profile || 3 || 0x3000301 || (p1, p2), (p2, p3), (p5,p6) || | ||
0 <= (p2,p1) <= 1m, | |||
0 <= (p4,p3) <= 1m, | |||
0x2000002 | |||
|- | |- | ||
| start_backlash || 1 || 0x1004b01 || (p1,2) || 2 <= p1 <= 4, 0x2000001 | | start_backlash || 1 || 0x1004b01 || (p1,2) || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| sudden_stop || 1 || 0x1010002 || p1 || 2 <= p1 <= 4, 0x2000001 | | sudden_stop || 1 || 0x1010002 || p1 || | ||
2 <= p1 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| sudden_stop2 || 2 || 0x1020002 || (p1,p2) || 2 <= p1 <= 4, 2 <= p2 <= 4, 0x2000001 | | sudden_stop2 || 2 || 0x1020002 || (p1,p2) || | ||
2 <= p1 <= 4, | |||
2 <= p2 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| sudden_stop3 || 1 || 0x1030002 || (p1,p2,p3) || 2 <= p1 <= 4, 2 <= p2 <= 4, 2 <= p3 <= 4, 0x2000001 | | sudden_stop3 || 1 || 0x1030002 || (p1,p2,p3) || | ||
2 <= p1 <= 4, | |||
2 <= p2 <= 4, | |||
2 <= p3 <= 4, | |||
0x2000001 | |||
|- | |- | ||
| write_data || 2 || 0x2000305 || p1, p2 || | | write_data || 2 || 0x2000305 || p1, p2 || |
Latest revision as of 10:35, 6 June 2020
Leetro
The Leetro laser cutter board is a proprietary controller with proprietary software. In the case of Leetro this software is called `LaserCut`. Like most proprietary laser cutting software intended for a specific board it has significant disadvantages and the only open source solutions are attempts at reverse engineering. In this case the reverse engineering is still very minor and scattershot. To the point that there do not seem to be any third party applications that work with the software.
USB Protocol
The usb device is located at vendor 0548 with a PID of 1005
These are sent to endpoint 0x04 and read from 0x88.
Leetro Commands
There are some parsing attempts made through London Hackerspace to decode .mol files, here's a list of the commands and their values:
Command | Length | Code | Parameters | Ranges |
---|---|---|---|---|
arc_center | 4 | 0x4020300 | (p1, p2), p3, p4, (p5, p6) |
2 <= p1 <= 4, 2 <= p2 <= 4, 0x2000001 |
c_arc_curve | 3 | 0x3000c09 | p1, p2, (p3,p4) | |
c_bzerve_curve | 8 | 0x8000b09 | p1, p2, p3, p4, p5, p6, p7, p8 | |
c_change_multi_voltage | 3 | 0x3003509 | p1, p2, 0x3003509 |
0 <= p1 <= 10,000, 0 <= p2 <= 10,000, 0x2000003 |
c_change_voltage | 2 | 0x2003509 | p1, 0x2003509 |
0 <= p1 <= 10,000, 0x2000003 |
c_curve_begin | 1 | 0x1000109 | (p1, p2) | |
c_curve_end | 0 | 0x209 | ||
c_delay_time | 2 | 0x2003209 | p1 * 20, 0x2003209 |
0 <= p1, 0x2000004 |
c_fast_line2 | 2 | 0x2020309 | p1, p2 | |
c_outport_bit | 2 | 0x2003609 | (p1 - 1), 0x2003609 | |
c_outport_byte | 2 | 0x2003709 | p1 & 3F, 0x2003709 | |
c_set_laser_mode | 2 | 0x2003409 | p1, 0x2003409 | |
c_set_lkh_length | 1 | 0x1000e09 | p1 | |
c_set_lkh_step | 1 | 0x1000d09 | p1 | |
c_set_max_accel | 1 | 0x1004509 | (p1, p2) | |
c_set_move_profile | 3 | 0x3000a09 | (p1,p2), (p3,p4), (p4,p5) |
0 <= (p2,p1) <= 1m, 0 <= (p4,p3) <= 1m, 0x2000002 |
c_set_multi_power | 7 | 0x7002009 | p1, p2, p3, p4, (p5,p6), (p7,p8), p9 |
0 <= (p6,p5) <= 1m, 0 <= (p8,p7) <= 1m, 0 <= p1 <= 10,000, 0 <= p2 <= 10,000, 0 <= p3 <= 10,000, 0 <= p4 <= 10,000, 0x2000002 |
c_set_power | 5 | 0x5002009 | p1, p2, (p3, p4), (p5,p6), p7 |
0 <= (p4,p3) <= 1m, 0 <= (p6,p5) <= 1m, 0 <= p1 <= 10,000, 0 <= p2 <= 10,0000, 0x2000003 |
c_set_vector_profile | 3 | 0x3000409 | (p1, p2), (p3, p4), (p5, p6) |
0 <= (p2,p1) <= 1m, 0 <= (p4,p3) <= 1m, 0x2000002 |
c_write_data | 3 | 0x3003309 | p1, p2, 0x3003309 | |
change_multi_voltage | 2 | 0x2000120 | p1, p2 |
0 <= p1 <= 10,000, 0 <= p2 <= 10,000, 0x2000003 |
change_power_ontime | 1 | 0x1020109 | p1 | |
change_speed_ontime | 1 | 0x1020009 | (p1,p2) | |
change_voltage | 1 | 0x1000120 | p1 |
0 <= p1 <= 10,000, 0x2000003 |
change_voltage2 | 1 | 0x1000b20 | p1 |
0 <= p1 <= 10,000, 0x2000003 |
check_batch_done | - | - | - (not export command) | |
check_done | - | - | p1 (not export command) | |
check_home | - | - | p1 (not export command) | |
check_limit | - | - | p1 (not export command) | |
check_SD | - | - | p1 (not export command) | |
check_status | - | - | p1 (not export command) | |
check_status32 | - | - | p1 (not export command) | |
checkin_bit | - | - | (p1 - 1) (not export command) | |
checkin_byte | - | - | - (not export command) | |
con_hmove | 2 | 0x2010200 | p1, p2 |
2 <= p1 <= 4, 0x2000001 |
con_hmove2 | 3 | 0x3020200 | (p1, p3), p2, p4 |
2 <= p1 <= 4, 2 <= p3 <= 4, 0x2000001 |
con_line2 | 3 | 0x3022000 | (p1, p3), p2, p4 |
2 <= p1 <= 4, 2 <= p3 <= 4, 0x2000001 |
con_pmove | 2 | 0x2010000 | p1, p2 |
2 <= p1 <= 4, 0x2000001 |
con_pmove2 | 3 | 0x3020000 | (p1, p3), p2, p4 |
2 <= p1 <= 4, 2 <= p3 <= 4, 0x2000001 |
con_vmove | 2 | 0x2010100 | p1, p2 |
2 <= p1 <= 4, 0x2000001 |
con_vmove2 | 3 | 0x3020100 | (p1, p3), p2, p2 (yes, p2 twice) |
2 <= p1 <= 4, 2 <= p3 <= 4, 0x2000001 |
con_decel_stop | 1 | 0x1010102 | p1 |
2 <= p1 <= 4, 0x2000001 |
con_decel_stop2 | 1 | 0x1020102 | (p1,p2) |
2 <= p1 <= 4, 2 <= p2 <= 4, 0x2000001 |
con_decel_stop3 | 1 | 0x1030102 | (p1,p2,p3) |
2 <= p1 <= 4, 2 <= p2 <= 4, 2 <= p3 <= 4, 0x2000001 |
delay_time | 1 | 0x1000602 | p1 * 20 |
0 <= p1, 0x2000004 |
end_backlash | 1 | 0x1004b01 | (p1,0) |
2 <= p1 <= 4, 0x2000001 |
fast_arc_center | 4 | 0x4024300 | (p1, p2), p3, p4, (p5,p6) |
2 <= p1 <= 4, 2 <= p2 <= 4, 0x2000001 |
fast_hmove | 2 | 0x2014200 | p1, p2 |
2 <= p1 <= 4, 0x2000001 |
fast_hmove2 | 3 | 0x3024200 | (p1, p3), p2, p4 |
2 <= p1 <= 4, 2 <= p3 <= 4, 0x2000001 |
fast_line2 | 3 | 0x3026000 | (p1, p3), p2, p4 |
2 <= p1 <= 4, 2 <= p3 <= 4, 0x2000001 |
fast_pmove | 2 | 0x2014000 | p1, p2 |
2 <= p1 <= 4, 0x2000001 |
fast_pmove2 | 3 | 0x3024000 | (p1, p3), p2, p4 |
2 <= p1 <= 4, 2 <= p3 <= 4, 0x2000001 |
fast_vmove | 2 | 0x2014100 | p1, p2 |
2 <= p1 <= 4, 0x2000001 |
fast_vmove2 | 3 | 0x3024100 | (p1, p3), p2, p4 |
2 <= p1 <= 4, 2 <= p3 <= 4, 0x2000001 |
get_abs_pos | - | - | p1, *p2 (not export command) |
2 <= p1 <= 4, p2 (return) |
get_fmw_ver | - | - | - (not export command) | |
get_hdw_ver | - | - | - (not export command) | |
get_lib_ver | - | - | - (not export command) | |
get_sn | - | - | - (not export command) | |
get_init_board | - | - | - (not export command) | |
move_pause | 0 | 0x202 | ||
move_resume | 0 | 0x302 | ||
outport_bit | 1 | 0x1000105 | (p1 -1) | |
outport_byte | 1 | 0x1000205 | p1 & 0x3F | |
read_data | - | - | p1 (not export command) | |
reset_pos | - | 0x2014501 | defers to set_abs_pos(p1, 0) |
2 <= p1 <= 4, 0x2000001 |
set_abs_pos | 2 | 0x2014501 | p1, p2 |
2 <= p1 <= 4, 0x2000001 |
set_axis_ratio | 2 | 0x2015001 | p1, (p2, p3) |
2 <= p1 <= 4, 0x2000001 |
set_backlash | 2 | 0x2004a01 | p1, p2 |
2 <= p1 <= 4, 0x2000001 |
set_batch_flag | - | - | - (not exported) | |
set_conacc_start_speed | 1 | 0x1025101 | (p1,p2) | |
set_conspeed | 2 | 0x2010001 | p1, (p2,p3) |
2 <= p1 <= 4, 0x2000001 |
set_cmd_counter | 2 | 0x2004c01 | p1, p2 | |
set_home_mode | 1 | 0x1014001 | (p1,p2) |
2 <= p1 <= 4, 0x2000001 |
set_laser_mode | 1 | 0x1000220 | p1 |
0 <= p1 <= 4 (crimped), 0x2000001 |
set_level_in | 1 | 0x1014d01 | defers to set_level_sprt(p1, (p2)?9:0) |
2 <= p1 <= 4, 0x2000001 |
set_level_sprt | 1 | 0x1014d01 | (p1, p2 & 0xF) |
2 <= p1 <= 4, 0x2000001 |
set_maxspeed | 2 | 0x2014301 | p1, (p2, p3) |
2 <= p1 <= 4, 0 <= (p3,p2) <= 1m, 0x2000001 |
set_outmode | 1 | 0x1014101 | (p1,p2,p3) |
2 <= p1 <= 4, 0x2000001 |
set_power_mode | 1 | 0x1000320 | p1 |
0 <= p1 <= 4 (crimped), No fail value. |
set_profile | 4 | 0x4010101 | p1, (p2,p3), (p4,p5), (p6,p7) |
2 <= p1 <= 4, 0 <= (p3,p2) <= 1m, 0 <= (p5,p4) <= 1m 0x2000002 |
set_pwm2_frq | 1 | 0x1000a20 | p1 |
0 <= p1 < 60000, fail returns -1 |
set_pwm_frq | 1 | 0x1000420 | p1 |
0 <= p1 < 60000, fail returns -1 |
set_scan_startpos | 1 | 0x1000620 | p1 | |
set_scan_step | 1 | 0x1000520 | p1 - 1 | |
set_signal_in | 1 | 0x1014e01 | (p1, p2 & 0x1F) |
2 <= p1 <= 4, 0x2000001 |
set_vector_conspeed | 1 | 0x1000201 | (p1, p2) |
0 <= (p2,p1) <= 1m |
set_vector_profile | 3 | 0x3000301 | (p1, p2), (p2, p3), (p5,p6) |
0 <= (p2,p1) <= 1m, 0 <= (p4,p3) <= 1m, 0x2000002 |
start_backlash | 1 | 0x1004b01 | (p1,2) |
2 <= p1 <= 4, 0x2000001 |
sudden_stop | 1 | 0x1010002 | p1 |
2 <= p1 <= 4, 0x2000001 |
sudden_stop2 | 2 | 0x1020002 | (p1,p2) |
2 <= p1 <= 4, 2 <= p2 <= 4, 0x2000001 |
sudden_stop3 | 1 | 0x1030002 | (p1,p2,p3) |
2 <= p1 <= 4, 2 <= p2 <= 4, 2 <= p3 <= 4, 0x2000001 |
write_data | 2 | 0x2000305 | p1, p2 | |
write_data_block | p1 | 0x80000720 | p1, p2 | |
write_power_data | p1 | 0x80000820 | p1, p2 | |
write_power_tab | (p1,p2) | 0x80000920 | p1, p2, p3 |
init_board calls a series of commands to set these to valid and acceptable defaults:
Command Called | Static Paramaters Used |
---|---|
set_batch_flag | 1 |
set_maxspeed | 0, 0x412e8480 |
set_out_mode | 1, 0 |
set_home_mode | 0 |
set_con_speed | 0 , 0x409f4000 |
set_profile | 0, 0x409f4000, 0, 0x40bf4000, 0, 0x40f38800 |
set_vector_conspeed | 0, 0x409f4000 |
set_vector_profile | 0, 0x409f4000, 0, 0x40bf4000, 0, 0x40f38800 |
set_laser_mode | 0 |
Reverse engineering resources.
- Richard-sim has a fake dll that pretends to be the relevant controller dll and replaces the actual dll used in LaserCut so that it will write all the materials rather than send them to a laser. https://github.com/richard-sim/mpc05ls
- The London Hackerspace Wiki has a great collection of resources for Leetro reverse engineering. (https://wiki.london.hackspace.org.uk/view/Project:RELaserSoftware)
- The Mol parser also from London Hacker Space. https://github.com/londonhackspace/dumpmol
- The explanation for the files format. https://wiki.london.hackspace.org.uk/view/Project:RELaserSoftware/USB_protocol
- Some cursory work done to control the laser. https://pointless.net/hg/mpc6515/
Links
Official
Other Sources
- London HackerSpace London Hackerspace resources