private void SetLabels(logoInstructionDef msg) { DoFly_label.Visible = false; UseParam_label.Visible = false; SubCmd_label.Visible = false; Argument_label.Visible = false; switch (Cmd_comboBox.SelectedIndex) { // cmd,fly,param,sub,x case 0: // _REPEAT(n, pr) {1, 0, pr, 0, n}, DoFly_checkBox.Checked = false; UseParam_label.Visible = true; UseParam_label.Text = "< --- ( pr )"; SubCmd_numericUpDown.Value = 0; Argument_label.Visible = true; Argument_label.Text = "< --- ( n )"; break; case 1: // _END {1, 0, 0, 1, 0}, DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 1; Arg_numericUpDown.Value = 0; break; case 2: // _ELSE {1, 0, 0, 3, 0}, DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 3; Arg_numericUpDown.Value = 0; break; case 3: // _TO(fn) {1, 0, 0, 2, fn}, DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 2; Argument_label.Visible = true; Argument_label.Text = "< --- ( fn )"; break; case 4: // _DO(fn, x, pr) {2, 0, pr, fn, x}, case 5: // _EXEC(fn, x, pr) {10,0, pr, fn, x}, DoFly_checkBox.Checked = false; UseParam_label.Visible = true; UseParam_label.Text = "< --- ( pr )"; SubCmd_label.Visible = true; SubCmd_label.Text = "< --- ( fn )"; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 6: // _FD(x, fl, pr) {3, fl, pr, 0, x}, case 11: // _MV_X(x, fl, pr) {5, fl, pr, 0, x}, DoFly_label.Visible = false; DoFly_label.Text = "< --- ( fl )"; UseParam_label.Visible = true; UseParam_label.Text = "< --- ( pr )"; SubCmd_numericUpDown.Value = 2; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 7: // _RT(x, pr) {4, 0, pr, 0, x}, DoFly_checkBox.Checked = false; UseParam_label.Visible = true; UseParam_label.Text = "< --- ( pr )"; SubCmd_numericUpDown.Value = 0; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 8: // _SET_ANGLE(x, pr) {4, 0, pr, 1, x}, DoFly_checkBox.Checked = false; UseParam_label.Visible = true; UseParam_label.Text = "< --- ( pr )"; SubCmd_numericUpDown.Value = 1; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 9: // _USE_CURRENT_ANGLE {4, 0, 0, 2, 0}, case 54: // USE_CURRENT_ANGLE _USE_CURRENT_ANGLE DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 2; Arg_numericUpDown.Value = 0; break; case 10: // _USE_ANGLE_TO_GOAL {4, 0, 0, 3, 0}, case 55: // USE_ANGLE_GOAL _USE_ANGLE_TO_GOAL DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 3; Arg_numericUpDown.Value = 0; break; case 12: // _SET_X(x, fl, pr) {5, fl, pr, 1, x}, DoFly_label.Visible = false; DoFly_label.Text = "< --- ( fl )"; UseParam_label.Visible = true; UseParam_label.Text = "< --- ( pr )"; SubCmd_numericUpDown.Value = 1; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 13: // _MV_Y(y, fl, pr) {5, fl, pr, 2, y}, DoFly_label.Visible = false; DoFly_label.Text = "< --- ( fl )"; UseParam_label.Visible = true; UseParam_label.Text = "< --- ( pr )"; SubCmd_numericUpDown.Value = 2; Argument_label.Visible = true; Argument_label.Text = "< --- ( y )"; break; case 14: // _SET_Y(y, fl, pr) {5, fl, pr, 3, y}, DoFly_label.Visible = false; DoFly_label.Text = "< --- ( fl )"; UseParam_label.Visible = true; UseParam_label.Text = "< --- ( pr )"; SubCmd_numericUpDown.Value = 3; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 15: // _MV_Z(z, fl, pr) {5, fl, pr, 4, z}, DoFly_label.Visible = false; DoFly_label.Text = "< --- ( fl )"; UseParam_label.Visible = true; UseParam_label.Text = "< --- ( pr )"; SubCmd_numericUpDown.Value = 4; Argument_label.Visible = true; Argument_label.Text = "< --- ( z )"; break; case 16: // _SET_Z(z, fl, pr) {5, fl, pr, 5, z}, DoFly_label.Visible = false; DoFly_label.Text = "< --- ( fl )"; UseParam_label.Visible = true; UseParam_label.Text = "< --- ( pr )"; SubCmd_numericUpDown.Value = 5; Argument_label.Visible = true; Argument_label.Text = "< --- ( z )"; break; case 17: // _USE_CURRENT_POS(fl) {5, fl, 0, 6, 0}, DoFly_label.Visible = false; DoFly_label.Text = "< --- ( fl )"; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 6; Arg_numericUpDown.Value = 0; break; case 18: // _HOME(fl) {5, fl, 0, 7, 0}, DoFly_label.Visible = false; DoFly_label.Text = "< --- ( fl )"; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 7; Arg_numericUpDown.Value = 0; break; case 19: // _SET_ABS_VAL_HIGH(x) {5, 0, 0, 8, x}, // Set the high and then low words for X and DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 8; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 20: // _SET_ABS_X_LOW(x) {5, 0, 0, 9, x}, // then Y, as 4 consecutive instructions. DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 9; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 21: // _SET_ABS_Y_LOW(y, fl) {5, fl, 0, 10, y}, // (as VAL_HIGH, X_LOW, VAL_HIGH, Y_LOW) DoFly_label.Visible = false; DoFly_label.Text = "< --- ( fl )"; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 10; Argument_label.Visible = true; Argument_label.Text = "< --- ( y )"; break; case 22: // _FLAG_ON(f) {6, 0, 0, 0, f}, DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 0; Argument_label.Visible = true; Argument_label.Text = "< --- ( f )"; break; case 23: // _FLAG_OFF(f) {6, 0, 0, 1, f}, DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 1; Argument_label.Visible = true; Argument_label.Text = "< --- ( f )"; break; case 24: // _FLAG_TOGGLE(f) {6, 0, 0, 2, f}, DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 2; Argument_label.Visible = true; Argument_label.Text = "< --- ( f )"; break; case 25: // _PEN_UP {7, 0, 0, 0, 0}, DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 0; Arg_numericUpDown.Value = 0; break; case 26: // _PEN_DOWN {7, 1, 0, 1, 0}, DoFly_checkBox.Checked = true; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 1; Arg_numericUpDown.Value = 0; break; case 27: // _PEN_TOGGLE {7, 0, 0, 2, 0}, DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 2; Arg_numericUpDown.Value = 0; break; case 28: // _SET_TURTLE(x) {8, 0, 0, 0, x}, case 29: // _PARAM_SET(x) {9, 0, 0, 0, x}, DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 0; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 30: // _PARAM_ADD(x) {9, 0, 0, 1, x}, DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 1; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 31: // _PARAM_MUL(x) {9, 0, 0, 2, x}, DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 0; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 32: // _PARAM_DIV(x) {9, 0, 0, 3, x}, DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 3; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 33: // _SPEED_INCREASE(s, pr) {11,0, pr, 0, s}, DoFly_checkBox.Checked = false; UseParam_label.Visible = true; UseParam_label.Text = "< --- ( pr )"; SubCmd_numericUpDown.Value = 0; Argument_label.Visible = true; Argument_label.Text = "< --- ( s )"; break; case 34: // _SET_SPEED(s, pr) {11,0, pr, 1, s}, DoFly_checkBox.Checked = false; UseParam_label.Visible = true; UseParam_label.Text = "< --- ( pr )"; SubCmd_numericUpDown.Value = 1; Argument_label.Visible = true; Argument_label.Text = "< --- ( s )"; break; case 35: // _SET_INTERRUPT(fn) {12,0, 0, 1, fn}, DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 1; Argument_label.Visible = true; Argument_label.Text = "< --- ( fn )"; break; case 36: // _CLEAR_INTERRUPT {12,0, 0, 0, 0}, DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 0; Arg_numericUpDown.Value = 0; break; case 37: // _LOAD_TO_PARAM(val) {13,0, 0, val,0}, DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 0; SubCmd_label.Visible = true; SubCmd_label.Text = "< --- ( val )"; Arg_numericUpDown.Value = 0; break; case 38: // _IF_EQ(val, x, pr) {14,0, pr, val,x}, case 39: // _IF_NE(val, x, pr) {15,0, pr, val,x}, case 40: // _IF_GT(val, x, pr) {16,0, pr, val,x}, case 41: // _IF_LT(val, x, pr) {17,0, pr, val,x}, case 42: // _IF_GE(val, x, pr) {18,0, pr, val,x}, case 43: // _IF_LE(val, x, pr) {19,0, pr, val,x}, DoFly_checkBox.Checked = false; UseParam_label.Visible = true; UseParam_label.Text = "< --- ( pr )"; SubCmd_label.Visible = true; SubCmd_label.Text = "< --- ( val )"; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 44: // FD(x) _FD(x, 1, 0) case 45: // BK(x) _FD(-x, 1, 0) DoFly_checkBox.Checked = true; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 0; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 46: // FD_PARAM _FD(1, 1, 1) DoFly_checkBox.Checked = true; UseParam_checkBox.Checked = true; SubCmd_numericUpDown.Value = 0; Arg_numericUpDown.Value = 1; break; case 47: // BK_PARAM _FD(-1, 1, 1) DoFly_checkBox.Checked = true; UseParam_checkBox.Checked = true; SubCmd_numericUpDown.Value = 0; Arg_numericUpDown.Value = -1; break; case 48: // RT(x) _RT(x, 0) case 49: // LT(X) _RT(-x, 0) DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 0; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 50: // SET_ANGLE(x) _SET_ANGLE(x, 0) DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 0; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 51: // RT_PARAM _RT(1, 1) DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = true; SubCmd_numericUpDown.Value = 0; Arg_numericUpDown.Value = 1; break; case 52: // LT_PARAM _RT(-1, 1) DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = true; SubCmd_numericUpDown.Value = 0; Arg_numericUpDown.Value = -1; break; case 53: // SET_ANGLE_PARAM _SET_ANGLE(0, 1) DoFly_checkBox.Checked = false; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 0; Arg_numericUpDown.Value = 0; break; case 56: // EAST(x) _MV_X(x, 1, 0) case 57: // WEST(x) _MV_X(-x, 1, 0) DoFly_checkBox.Checked = true; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 0; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 58: // SET_X_POS(x) _SET_X(x, 1, 0) DoFly_checkBox.Checked = true; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 1; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 59: // EAST_PARAM _MV_X(1, 1, 1) case 60: // WEST_PARAM _MV_X(-1, 1, 1) DoFly_checkBox.Checked = true; UseParam_checkBox.Checked = false; SubCmd_numericUpDown.Value = 0; Argument_label.Visible = true; Argument_label.Text = "< --- ( x )"; break; case 61: // SET_X_POS_PARAM _SET_X(1, 1, 1) case 62: // USE_CURRENT_POS _USE_CURRENT_POS(1) case 63: // NORTH(y) _MV_Y(y, 1, 0) case 64: // SOUTH(y) _MV_Y(-y, 1, 0) case 65: // SET_Y_POS(y) _SET_Y(y, 1, 0) case 66: // NORTH_PARAM _MV_Y(1, 1, 1) case 67: // SOUTH_PARAM _MV_Y(-1, 1, 1) case 68: // SET_Y_POS_PARAM _SET_Y(1, 1, 1) case 69: // ALT_UP(z) _MV_Z(z, 0, 0) case 70: // ALT_DOWN(z) _MV_Z(-z, 0, 0) case 71: // SET_ALT(z) _SET_Z(z, 0, 0) case 72: // ALT_UP_PARAM _MV_Z(1, 0, 1) case 73: // ALT_DOWN_PARAM _MV_Z(-1, 0, 1) case 74: // SET_ALT_PARAM _SET_Z(1, 0, 1) case 75: // SPEED_INCREASE(x) _SPEED_INCREASE(x, 0) case 76: // SPEED_DECREASE(x) _SPEED_INCREASE(-x, 0) case 77: // SET_SPEED(x) _SET_SPEED(x, 0) case 78: // SPEED_INCREASE_PARAM _SPEED_INCREASE(1, 1) case 79: // SPEED_DECREASE_PARAM _SPEED_INCREASE(-1, 1) case 80: // SET_SPEED_PARAM _SET_SPEED(0, 1) case 81: // FLAG_ON(f) _FLAG_ON(f) case 82: // FLAG_OFF(f) _FLAG_OFF(f) case 83: // FLAG_TOGGLE(f) _FLAG_TOGGLE(f) case 84: // PEN_UP _PEN_UP case 85: // PEN_DOWN _PEN_DOWN case 86: // PEN_TOGGLE _PEN_TOGGLE case 87: // SET_TURTLE(x) _SET_TURTLE(x) case 88: // REPEAT(n) _REPEAT(n, 0) case 89: // REPEAT_PARAM _REPEAT(1, 1) case 90: // REPEAT_FOREVER _REPEAT(-1, 0) case 91: // END _END case 92: // ELSE _ELSE case 93: // TO(func) _TO(func) case 94: // DO(func) _DO(func, 0, 0) case 95: // DO_ARG(func, arg) _DO(func, arg, 0) case 96: // DO_PARAM(func) _DO(func, 1, 1) case 97: // EXEC(func) _EXEC(func, 0, 0) case 98: // EXEC_ARG(func, arg) _EXEC(func, arg, 0) case 99: // EXEC_PARAM(func) _EXEC(func, 1, 1) case 100: // PARAM_SET(x) _PARAM_SET(x) case 101: // PARAM_ADD(x) _PARAM_ADD(x) case 102: // PARAM_SUB(x) _PARAM_ADD(-x) case 103: // PARAM_MUL(x) _PARAM_MUL(x) case 104: // PARAM_DIV(x) _PARAM_DIV(x) case 105: // SET_INTERRUPT(fn) _SET_INTERRUPT(fn) case 106: // CLEAR_INTERRUPT _CLEAR_INTERRUPT case 107: // LOAD_TO_PARAM(val) _LOAD_TO_PARAM(val) case 108: // IF_EQ(val, x) _IF_EQ(val, x, 0) case 109: // IF_NE(val, x) _IF_NE(val, x, 0) case 110: // IF_GT(val, x) _IF_GT(val, x, 0) case 111: // IF_LT(val, x) _IF_LT(val, x, 0) case 112: // IF_GE(val, x) _IF_GE(val, x, 0) case 113: // IF_LE(val, x) _IF_LE(val, x, 0) case 114: // IF_EQ_PARAM(val) _IF_EQ(val, 1, 1) case 115: // IF_NE_PARAM(val) _IF_NE(val, 1, 1) case 116: // IF_GT_PARAM(val) _IF_GT(val, 1, 1) case 117: // IF_LT_PARAM(val) _IF_LT(val, 1, 1) case 118: // IF_GE_PARAM(val) _IF_GE(val, 1, 1) case 119: // IF_LE_PARAM(val) _IF_LE(val, 1, 1) case 120: // SET_POS(x, y) _SET_X(x, 0, 0) _SET_Y(y, 1, 0) case 121: // SET_ABS_POS(x, y) _SET_ABS_VAL_HIGH((((uint32_t)(x))>>16)&0xFFFF) _SET_ABS_X_LOW(((uint32_t)(x))&0xFFFF) _SET_ABS_VAL_HIGH((((uint32_t)(y))>>16)&0xFFFF) _SET_ABS_Y_LOW(((uint32_t)(y))&0xFFFF, 1) case 122: // HOME _HOME(1) break; } // switch }
private byte[] generateDataMsgPacket() { // only 1 command is supported right now by this // app, but you can send up to logoInstructionDef[x] logoInstructionDef[] inst = new logoInstructionDef[1]; inst[0] = new logoInstructionDef(CreateMsgData()); DataMsg dataMsg = new DataMsg(DataMsgCmd_comboBox.SelectedIndex, (byte)DataMsgType_IndexMission_numericUpDown.Value, (byte)DataMsgType_IndexCmd_numericUpDown.Value); return DataMsg.generatepacket(dataMsg, inst); }
private string ConvertMsgToString(logoInstructionDef msg) { // For UDB Logo instructions, bytes should be passed in using the following format // (Below, an X represents a hex digit 0-F. Mulit-digit values are MSB first.) // L begin remote Logo command // XX byte: command // XX byte: subcommand // X 0-1: do fly // X 0-1: use param // XXXX word: argument // * done with command data // XX byte: checksum should equal the sum of the 10 bytes before the *, mod 256 // // For example: "L0201000005*E8" runs: // the DO command(02) for subroutine 01 with fly and param off(00) and an argument of 0005 // data StringBuilder hex = new StringBuilder(); hex.AppendFormat("{0:X2}", msg.cmd); hex.AppendFormat("{0:X2}", msg.subcmd); hex.AppendFormat("{0:X1}", Convert.ToByte(msg.do_fly)); hex.AppendFormat("{0:X1}", Convert.ToByte(msg.use_param)); hex.AppendFormat("{0:X4}", msg.arg); // checksum byte[] ascii = System.Text.Encoding.ASCII.GetBytes(hex.ToString()); byte checksum = 0; for (int i = 0; i < ascii.Length; i++) { checksum += ascii[i]; } hex.Append("*"); hex.AppendFormat("{0:X2}", checksum); // Add the header "L" and we're done! return "L" + hex.ToString(); }
private logoInstructionDef CreateMsgData() { logoInstructionDef msg = new logoInstructionDef(); msg.subcmd = Convert.ToByte(SubCmd_numericUpDown.Value); msg.do_fly = DoFly_checkBox.Checked; msg.use_param = UseParam_checkBox.Checked; msg.arg = Convert.ToInt16(Arg_numericUpDown.Value); switch (Cmd_comboBox.SelectedIndex) { // cmd,fly,param,sub,x case 0: // _REPEAT(n, pr) {1, 0, pr, 0, n}, case 1: // _END {1, 0, 0, 1, 0}, case 2: // _ELSE {1, 0, 0, 3, 0}, case 3: // _TO(fn) {1, 0, 0, 2, fn}, case 88: // REPEAT(n) _REPEAT(n, 0) case 89: // REPEAT_PARAM _REPEAT(1, 1) case 90: // REPEAT_FOREVER _REPEAT(-1, 0) case 91: // END _END case 92: // ELSE _ELSE case 93: // TO(func) _TO(func) msg.cmd = 1; break; case 4: // _DO(fn, x, pr) {2, 0, pr, fn, x}, case 94: // DO(func) _DO(func, 0, 0) case 95: // DO_ARG(func, arg) _DO(func, arg, 0) case 96: // DO_PARAM(func) _DO(func, 1, 1) msg.cmd = 2; break; case 5: // _EXEC(fn, x, pr) {10,0, pr, fn, x}, case 97: // EXEC(func) _EXEC(func, 0, 0) case 98: // EXEC_ARG(func, arg) _EXEC(func, arg, 0) case 99: // EXEC_PARAM(func) _EXEC(func, 1, 1) msg.cmd = 10; break; case 6: // _FD(x, fl, pr) {3, fl, pr, 0, x}, case 44: // FD(x) _FD(x, 1, 0) case 45: // BK(x) _FD(-x, 1, 0) case 46: // FD_PARAM _FD(1, 1, 1) case 47: // BK_PARAM _FD(-1, 1, 1) msg.cmd = 3; break; case 7: // _RT(x, pr) {4, 0, pr, 0, x}, case 8: // _SET_ANGLE(x, pr) {4, 0, pr, 1, x}, case 9: // _USE_CURRENT_ANGLE {4, 0, 0, 2, 0}, case 10: // _USE_ANGLE_TO_GOAL {4, 0, 0, 3, 0}, case 48: // RT(x) _RT(x, 0) case 49: // LT(X) _RT(-x, 0) case 50: // SET_ANGLE(x) _SET_ANGLE(x, 0) case 51: // RT_PARAM _RT(1, 1) case 52: // LT_PARAM _RT(-1, 1) case 53: // SET_ANGLE_PARAM _SET_ANGLE(0, 1) case 54: // USE_CURRENT_ANGLE _USE_CURRENT_ANGLE case 55: // USE_ANGLE_GOAL _USE_ANGLE_TO_GOAL msg.cmd = 4; break; case 11: // _MV_X(x, fl, pr) {5, fl, pr, 0, x}, case 12: // _SET_X(x, fl, pr) {5, fl, pr, 1, x}, case 13: // _MV_Y(y, fl, pr) {5, fl, pr, 2, y}, case 14: // _SET_Y(y, fl, pr) {5, fl, pr, 3, y}, case 15: // _MV_Z(z, fl, pr) {5, fl, pr, 4, z}, case 16: // _SET_Z(z, fl, pr) {5, fl, pr, 5, z}, case 17: // _USE_CURRENT_POS(fl) {5, fl, 0, 6, 0}, case 18: // _HOME(fl) {5, fl, 0, 7, 0}, case 19: // _SET_ABS_VAL_HIGH(x) {5, 0, 0, 8, x}, // Set the high and then low words for X and case 20: // _SET_ABS_X_LOW(x) {5, 0, 0, 9, x}, // then Y, as 4 consecutive instructions. case 21: // _SET_ABS_Y_LOW(y, fl) {5, fl, 0, 10, y}, // (as VAL_HIGH, X_LOW, VAL_HIGH, Y_LOW) case 56: // EAST(x) _MV_X(x, 1, 0) case 57: // WEST(x) _MV_X(-x, 1, 0) case 58: // SET_X_POS(x) _SET_X(x, 1, 0) case 59: // EAST_PARAM _MV_X(1, 1, 1) case 60: // WEST_PARAM _MV_X(-1, 1, 1) case 61: // SET_X_POS_PARAM _SET_X(1, 1, 1) case 62: // USE_CURRENT_POS _USE_CURRENT_POS(1) case 63: // NORTH(y) _MV_Y(y, 1, 0) case 64: // SOUTH(y) _MV_Y(-y, 1, 0) case 65: // SET_Y_POS(y) _SET_Y(y, 1, 0) case 66: // NORTH_PARAM _MV_Y(1, 1, 1) case 67: // SOUTH_PARAM _MV_Y(-1, 1, 1) case 68: // SET_Y_POS_PARAM _SET_Y(1, 1, 1) case 69: // ALT_UP(z) _MV_Z(z, 0, 0) case 70: // ALT_DOWN(z) _MV_Z(-z, 0, 0) case 71: // SET_ALT(z) _SET_Z(z, 0, 0) case 72: // ALT_UP_PARAM _MV_Z(1, 0, 1) case 73: // ALT_DOWN_PARAM _MV_Z(-1, 0, 1) case 74: // SET_ALT_PARAM _SET_Z(1, 0, 1) case 120: // SET_POS(x, y) _SET_X(x, 0, 0) _SET_Y(y, 1, 0) case 121: // SET_ABS_POS(x, y) _SET_ABS_VAL_HIGH((((uint32_t)(x))>>16)&0xFFFF) _SET_ABS_X_LOW(((uint32_t)(x))&0xFFFF) _SET_ABS_VAL_HIGH((((uint32_t)(y))>>16)&0xFFFF) _SET_ABS_Y_LOW(((uint32_t)(y))&0xFFFF, 1) case 122: // HOME _HOME(1) msg.cmd = 5; break; case 22: // _FLAG_ON(f) {6, 0, 0, 0, f}, case 23: // _FLAG_OFF(f) {6, 0, 0, 1, f}, case 24: // _FLAG_TOGGLE(f) {6, 0, 0, 2, f}, case 81: // FLAG_ON(f) _FLAG_ON(f) case 82: // FLAG_OFF(f) _FLAG_OFF(f) case 83: // FLAG_TOGGLE(f) _FLAG_TOGGLE(f) msg.cmd = 6; break; case 25: // _PEN_UP {7, 0, 0, 0, 0}, case 26: // _PEN_DOWN {7, 1, 0, 1, 0}, case 27: // _PEN_TOGGLE {7, 0, 0, 2, 0}, case 84: // PEN_UP _PEN_UP case 85: // PEN_DOWN _PEN_DOWN case 86: // PEN_TOGGLE _PEN_TOGGLE msg.cmd = 7; break; case 28: // _SET_TURTLE(x) {8, 0, 0, 0, x}, case 87: // SET_TURTLE(x) _SET_TURTLE(x) msg.cmd = 8; break; case 29: // _PARAM_SET(x) {9, 0, 0, 0, x}, case 30: // _PARAM_ADD(x) {9, 0, 0, 1, x}, case 31: // _PARAM_MUL(x) {9, 0, 0, 2, x}, case 32: // _PARAM_DIV(x) {9, 0, 0, 3, x}, case 100: // PARAM_SET(x) _PARAM_SET(x) case 101: // PARAM_ADD(x) _PARAM_ADD(x) case 102: // PARAM_SUB(x) _PARAM_ADD(-x) case 103: // PARAM_MUL(x) _PARAM_MUL(x) case 104: // PARAM_DIV(x) _PARAM_DIV(x) msg.cmd = 9; break; case 33: // _SPEED_INCREASE(s, pr) {11,0, pr, 0, s}, case 34: // _SET_SPEED(s, pr) {11,0, pr, 1, s}, case 75: // SPEED_INCREASE(x) _SPEED_INCREASE(x, 0) case 76: // SPEED_DECREASE(x) _SPEED_INCREASE(-x, 0) case 77: // SET_SPEED(x) _SET_SPEED(x, 0) case 78: // SPEED_INCREASE_PARAM _SPEED_INCREASE(1, 1) case 79: // SPEED_DECREASE_PARAM _SPEED_INCREASE(-1, 1) case 80: // SET_SPEED_PARAM _SET_SPEED(0, 1) msg.cmd = 11; break; case 35: // _SET_INTERRUPT(fn) {12,0, 0, 1, fn}, case 36: // _CLEAR_INTERRUPT {12,0, 0, 0, 0}, case 105: // SET_INTERRUPT(fn) _SET_INTERRUPT(fn) case 106: // CLEAR_INTERRUPT _CLEAR_INTERRUPT msg.cmd = 12; break; case 37: // _LOAD_TO_PARAM(val) {13,0, 0, val,0}, case 107: // LOAD_TO_PARAM(val) _LOAD_TO_PARAM(val) msg.cmd = 13; break; case 38: // _IF_EQ(val, x, pr) {14,0, pr, val,x}, case 108: // IF_EQ(val, x) _IF_EQ(val, x, 0) case 114: // IF_EQ_PARAM(val) _IF_EQ(val, 1, 1) msg.cmd = 14; break; case 39: // _IF_NE(val, x, pr) {15,0, pr, val,x}, case 109: // IF_NE(val, x) _IF_NE(val, x, 0) case 115: // IF_NE_PARAM(val) _IF_NE(val, 1, 1) msg.cmd = 15; break; case 40: // _IF_GT(val, x, pr) {16,0, pr, val,x}, case 110: // IF_GT(val, x) _IF_GT(val, x, 0) case 116: // IF_GT_PARAM(val) _IF_GT(val, 1, 1) msg.cmd = 16; break; case 41: // _IF_LT(val, x, pr) {17,0, pr, val,x}, case 111: // IF_LT(val, x) _IF_LT(val, x, 0) case 117: // IF_LT_PARAM(val) _IF_LT(val, 1, 1) msg.cmd = 17; break; case 42: // _IF_GE(val, x, pr) {18,0, pr, val,x}, case 112: // IF_GE(val, x) _IF_GE(val, x, 0) case 118: // IF_GE_PARAM(val) _IF_GE(val, 1, 1) msg.cmd = 18; break; case 43: // _IF_LE(val, x, pr) {19,0, pr, val,x}, case 113: // IF_LE(val, x) _IF_LE(val, x, 0) case 119: // IF_LE_PARAM(val) _IF_LE(val, 1, 1) msg.cmd = 19; break; default: msg.cmd = 0; // invalid? break; } return msg; }
public logoInstructionDef(logoInstructionDef that) { this.cmd = that.cmd; this.do_fly = that.do_fly; this.use_param = that.use_param; this.subcmd = that.subcmd; this.arg = that.arg; }