using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Media; using System.IO.Ports; using System.Globalization; using System.Diagnostics; using Microsoft.Web.WebView2.Core; namespace Test_1 { public partial class Scherm_1 : Form{ static SerialPort port; string datain; byte cmdsendstatus=48; public Scherm_1(){ //Initialization InitializeComponent(); port = new SerialPort(); InitializeWebView2(); //NEW received_data = 2; textBox10.Text = (zoom - 14).ToString(); yoLabel01.Text = "Yo The KING!"; //button6.Enabled = true; } private async void InitializeWebView2(){ //NEW await webView21.EnsureCoreWebView2Async(null); string hostedUrl = "https://demo.mugenros.com.my/index5.html"; webView21.CoreWebView2.Navigate(hostedUrl); webView21.CoreWebView2.WebMessageReceived += WebView21_WebMessageReceived; } private void AddMarker(string color, string latText, string lngText, int index, bool center){ if (double.TryParse(latText.Trim(), out double lat) && double.TryParse(lngText.Trim(), out double lng)){ webView21.CoreWebView2.ExecuteScriptAsync($"addMarker({index}, {lat}, {lng}, '{color}', {center.ToString().ToLower()})"); }else{ MessageBox.Show($"Please enter valid coordinates for Marker {index + 1}.", "Invalid Input", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } private void ComboBox1_Click(object sender, EventArgs e){ //Declare Serial port string[] ports = SerialPort.GetPortNames(); PortNumber.Items.Clear(); PortNumber.Items.AddRange(ports); } private void Port_DataReceived(object sender, SerialDataReceivedEventArgs e) { while (port.BytesToRead > 0) // Process incoming bytes { int receivedByte = port.ReadByte(); // Read one byte receive_buffer[receive_buffer_counter++] = (byte)receivedByte; if (receive_buffer_counter >= 35) // Full packet received { Invoke(new Action(() => { Console.WriteLine("Received: " + BitConverter.ToString(receive_buffer)); datain = ""; for (int i = 0; i < 35; i++) { datain += receive_buffer[i] + " "; } if (yoLabel01.InvokeRequired) { yoLabel01.Invoke(new Action(() => yoLabel01.Text = datain)); } else { yoLabel01.Text = datain; } if (receive_buffer[0]=='J' && receive_buffer[1] == 'B') { if (receive_buffer[34] == 50) { cmdsendstatus = receive_buffer[34]; // Should be 50 /*Invoke(new Action(() => { Console.WriteLine("Before assignment: cmdsendstatus = " + cmdsendstatus); Console.WriteLine("receive_buffer[34] = " + receive_buffer[34]); cmdsendstatus = receive_buffer[34]; // Should be 50 Console.WriteLine("After assignment: cmdsendstatus = " + cmdsendstatus); if (cmdsendstatus == 50) { Console.WriteLine("cmdsendstatus successfully set to 50!"); } }));*/ } else { get_data(); } } })); receive_buffer_counter = 0; // Reset for next packet } } /*if (port.IsOpen) { byte[] receivedData = new byte[port.BytesToRead]; port.Read(receivedData, 0, receivedData.Length); Console.WriteLine("Received: " + BitConverter.ToString(receivedData)); datain = BitConverter.ToString(receivedData) + " "+ receivedData.Length.ToString(new CultureInfo("en-US")); if (yoLabel01.InvokeRequired) { yoLabel01.Invoke(new Action(() => yoLabel01.Text = datain)); } else { yoLabel01.Text = datain; } }*/ } private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e){ try{ SerialPort sp = (SerialPort)sender; //datain = ""; while (sp.BytesToRead > 0){ int nextByte = sp.ReadByte(); datain+=nextByte.ToString(new CultureInfo("en-US")) + " "; /*if (nextByte >= 0){ receive_buffer[receive_buffer_counter] = (byte)nextByte; datain+=receive_buffer[receive_buffer_counter].ToString(new CultureInfo("en-US")) + " "; if (yoLabel01.InvokeRequired){yoLabel01.Invoke(new Action(() => yoLabel01.Text = datain));}else{yoLabel01.Text = datain;} if (receive_byte_previous == 'J' && receive_buffer[receive_buffer_counter] == 'B'){ receive_buffer_counter = 0; receive_start_detect++; if (receive_start_detect >= 2){ //int temcmdstatus = (int)receive_buffer[32] - 48; //if (temcmdstatus < 2) if ((int)receive_buffer[32] < 50) { get_data(); }else{ cmdsendstatus = (int)receive_buffer[32] - 48; } } } else{ receive_byte_previous = receive_buffer[receive_buffer_counter]; receive_buffer_counter++; if (receive_buffer_counter > 48) receive_buffer_counter = 0; } }*/ } if (yoLabel01.InvokeRequired){yoLabel01.Invoke(new Action(() => yoLabel01.Text = datain));}else{yoLabel01.Text = datain;} }catch (Exception ex){ MessageBox.Show("Error receiving data: " + ex.Message); } } private void OpenClose_Click(object sender, EventArgs e){ // Open close serial port if (OpenClose.Text == "Open"){ if (PortNumber.Text.Length > 1){ port = new SerialPort(PortNumber.Text, 9600, Parity.None, 8, StopBits.One); //port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); port.DataReceived += Port_DataReceived; port.Open(); OpenClose.Text = "Close"; Location_update_timer.Enabled = true; }else{ string message = "No port selected"; string title = "Error"; MessageBox.Show(message, title); return; } }else{ clear_waypoint_labels(); port.Close(); OpenClose.Text = "Open"; Location_update_timer.Enabled = false; label12.Visible = false; //Home Marker label24.Visible = false; //Connection LOST Label first_receive = 0; button6.Enabled = false; //Create List Button flight_timer.Enabled = false; // } } private void get_data(){ //Get data from Drone to display check_byte = 0; for (temp_byte = 0+2; temp_byte <= 30 + 2; temp_byte++) check_byte ^= receive_buffer[temp_byte]; if (check_byte == receive_buffer[31 + 2]){ first_receive = 1; last_receive = milliseconds; receive_start_detect = 1; error = receive_buffer[0 + 2]; flight_mode = receive_buffer[1 + 2]; battery_voltage = (float)receive_buffer[2 + 2] / 10.0f; battery_bar_level = receive_buffer[2 + 2]; temperature = (short)(receive_buffer[3 + 2] | receive_buffer[4 + 2] << 8); roll_angle = receive_buffer[5 + 2] - 100; pitch_angle = receive_buffer[6 + 2] - 100; start = receive_buffer[7 + 2]; altitude_meters = (receive_buffer[8 + 2] | receive_buffer[9 + 2] << 8) - 1000; if (altitude_meters > max_altitude_meters) max_altitude_meters = altitude_meters; takeoff_throttle = receive_buffer[10 + 2] | receive_buffer[11 + 2] << 8; actual_compass_heading = receive_buffer[12 + 2] | receive_buffer[13 + 2] << 8; heading_lock = receive_buffer[14 + 2]; number_used_sats = receive_buffer[15 + 2]; fix_type = receive_buffer[16 + 2]; l_lat_gps = (int)receive_buffer[17 + 2] | (int)receive_buffer[18 + 2] << 8 | (int)receive_buffer[19 + 2] << 16 | (int)receive_buffer[20 + 2] << 24; l_lon_gps = (int)receive_buffer[21 + 2] | (int)receive_buffer[22 + 2] << 8 | (int)receive_buffer[23 + 2] << 16 | (int)receive_buffer[24 + 2] << 24; adjustable_setting_1 = (float)(receive_buffer[25 + 2] | receive_buffer[26 + 2] << 8) / 100.0f; adjustable_setting_2 = (float)(receive_buffer[27 + 2] | receive_buffer[28 + 2] << 8) / 100.0f; adjustable_setting_3 = (float)(receive_buffer[29 + 2] | receive_buffer[30 + 2] << 8) / 100.0f; ground_distance = Math.Pow((float)((l_lat_gps - home_lat_gps) ^ 2) * 0.111, 2); ground_distance += Math.Pow((float)(l_lon_gps - home_lon_gps) * (Math.Cos((l_lat_gps / 1000000) * 0.017453) * 0.111), 2); ground_distance = Math.Sqrt(ground_distance); los_distance = Math.Sqrt(Math.Pow(ground_distance, 2) + Math.Pow(altitude_meters, 2)); } } private void Timer2_Tick(object sender, EventArgs e){ //Loop program if (start == 2 && flight_mode == 3 && fly_waypoint_list.Enabled == false){ button6.Enabled = true; //Create List Button webView21.CoreWebView2.ExecuteScriptAsync("enableMapClick()"); } else button6.Enabled = false; //Create List Button if (start != 2) clear_waypoint_labels(); if(port.IsOpen && first_receive == 0){ label27.Visible = true; //Waiting for telemetry signal Label }else label27.Visible = false; //Waiting for telemetry signal Label milliseconds += 100; if (first_receive == 1){ //Display data if (milliseconds - last_receive > 2000 && label24.Visible == false) label24.Visible = true; //Connection LOST Label if (milliseconds - last_receive < 1000 && label24.Visible == true) label24.Visible = false; //Connection LOST Label if (flight_mode == 1) textBox2.Text = "1-Auto level"; if (flight_mode == 2) textBox2.Text = "2-Altutude hold"; if (flight_mode == 3) textBox2.Text = "3-GPS hold"; if (flight_mode == 4) textBox2.Text = "4-RTH active"; if (flight_mode == 5) textBox2.Text = "5-RTH Increase altitude"; if (flight_mode == 6) textBox2.Text = "6-RTH Returning to home position"; if (flight_mode == 7) textBox2.Text = "7-RTH Landing"; if (flight_mode == 8) textBox2.Text = "8-RTH finished"; if (flight_mode == 9) textBox2.Text = "9-Fly to waypoint"; if (start == 0){ pictureBox1.Visible = true; //Motor Status pictureBox2.Visible = false; pictureBox3.Visible = false; } if (start == 1){ pictureBox1.Visible = false; pictureBox2.Visible = false; pictureBox3.Visible = true; } if (start == 2){ pictureBox1.Visible = false; pictureBox2.Visible = true; pictureBox3.Visible = false; } if (error == 0) textBox3.Text = "No error"; if (error == 1) textBox3.Text = "Battery LOW"; if (error == 2) textBox3.Text = "Program loop time"; if (error == 3) textBox3.Text = "ACC cal error"; if (error == 4) textBox3.Text = "GPS watchdog time"; if (error == 5) textBox3.Text = "Manual take-off thr error"; if (error == 6) textBox3.Text = "No take-off detected"; if (error == 7) textBox3.Text = "Auto throttle error"; label15.Text = number_used_sats.ToString(); //Satelite Numbers if (number_used_sats > 6){ pictureBox4.Visible = false; //Satelite Status pictureBox5.Visible = false; pictureBox6.Visible = true; }else if (number_used_sats > 3){ pictureBox4.Visible = false; pictureBox5.Visible = true; pictureBox6.Visible = false; }else{ pictureBox4.Visible = true; pictureBox5.Visible = false; pictureBox6.Visible = false; } label16.Text = ((float)l_lat_gps / 1000000.0).ToString(new CultureInfo("en-US")); label17.Text = ((float)l_lon_gps / 1000000.0).ToString(new CultureInfo("en-US")); label18.Text = actual_compass_heading.ToString(); label19.Text = altitude_meters.ToString() + "m"; label20.Text = max_altitude_meters.ToString() + "m"; label21.Text = battery_voltage.ToString("00.0") + "V"; label4.Text = pitch_angle.ToString(); label14.Text = roll_angle.ToString(); label37.Text = ((float)temperature / 340.0 + 36.53).ToString("00.0") + "C"; if (battery_bar_level > 124) battery_bar_level = 124; if (battery_bar_level < 85) battery_bar_level = 85; if (battery_bar_level > 108) panel5.BackColor = Color.Lime; else if (battery_bar_level > 100) panel5.BackColor = Color.Yellow; else panel5.BackColor = Color.Red; panel6.Size = new Size(34,134 - ((battery_bar_level - 80)*3)); if (home_gps_set == 1) label22.Text = los_distance.ToString("0.") + "m"; else label22.Text = "0m"; if (home_gps_set == 0 && number_used_sats > 4 && start == 2){ //First Step set home location home_gps_set = 1; home_lat_gps = l_lat_gps; //FROM Drone home_lon_gps = l_lon_gps; //FROM Drone //label12.Visible = true; //Home Marker } if (home_gps_set == 1 && start == 0){ home_gps_set = 0; label12.Visible = false; //Home Marker } if(start == 2){ if (flight_timer.Enabled == false) flight_timer.Enabled = true; } if(start == 0){ if (flight_timer.Enabled == true) flight_timer.Enabled = false; } } } private void Location_update_timer_Tick(object sender, EventArgs e){ //update coordinate in the map. if (number_used_sats > 4 && l_lat_gps != 0){ if (home_gps_set == 0){ //Set home location to the map AddMarker("green", ((float)(l_lat_gps) / 1000000.0).ToString(new CultureInfo("en-US")), ((float)l_lon_gps / 1000000.0).ToString(new CultureInfo("en-US")), 0, true); } else{ //Set running location to the map AddMarker("red", ((float)(l_lat_gps) / 1000000.0).ToString(new CultureInfo("en-US")), ((float)l_lon_gps / 1000000.0).ToString(new CultureInfo("en-US")), 1, true); AddMarker("green", ((float)(home_lat_gps) / 1000000.0).ToString(new CultureInfo("en-US")), ((float)home_lon_gps / 1000000.0).ToString(new CultureInfo("en-US")), 0, true); } } } private void Rx_timer_blink_Tick(object sender, EventArgs e){ if (received_data > 0) received_data++; if (received_data == 2){ indicator_on(); } if (received_data == 3){ indicator_off(); } if (received_data == 10){ received_data = 0; } } private void clear_waypoint_labels(){ label23.Visible = false; label28.Visible = false; label29.Visible = false; label30.Visible = false; label31.Visible = false; label32.Visible = false; label33.Visible = false; label34.Visible = false; label35.Visible = false; button1.Enabled = true; //Zoom Button button4.Enabled = true; //Zoom Button } private void indicator_on(){ Graphics g = panel1.CreateGraphics(); Pen p = new Pen(Color.Blue); SolidBrush sb = new SolidBrush(Color.LightBlue); g.DrawEllipse(p, 1, 1, 10, 10); g.FillEllipse(sb, 1, 1, 10, 10); } private void indicator_off(){ Graphics g = panel1.CreateGraphics(); Pen p = new Pen(Color.DarkBlue); SolidBrush sb = new SolidBrush(Color.DarkBlue); g.DrawEllipse(p, 1, 1, 10, 10); g.FillEllipse(sb, 1, 1, 10, 10); } private void Button1_Click(object sender, EventArgs e){ //Zoom Button if (zoom > 14) zoom--; textBox10.Text = (zoom - 14).ToString(); } private void Button4_Click(object sender, EventArgs e){ //Zoom Button if (zoom < 19) zoom++; textBox10.Text = (zoom - 14).ToString(); } /*private void Send_telemetry_data_Tick(object sender, EventArgs e) { // Sending telemetry data when cmdsendstatus is 0 and flight_mode is 3 if (cmdsendstatus == 48 && flight_mode == 3 && new_telemetry_data_to_send > 0 && new_telemetry_data_to_send <= 10) { if (port.IsOpen) { try { port.Write(send_buffer, 0, 13); } catch (Exception ex) { MessageBox.Show("Error sending data: " + ex.Message); } new_telemetry_data_to_send++; label26.Text = "Try " + new_telemetry_data_to_send.ToString(); } } else if (cmdsendstatus == 49 && new_telemetry_data_to_send > 0 && new_telemetry_data_to_send <= 10) { if (port.IsOpen) { try { port.Write(send_buffer, 0, 13); } catch (Exception ex) { MessageBox.Show("Error sending data: " + ex.Message); } new_telemetry_data_to_send++; label26.Text = "Sending " + new_telemetry_data_to_send.ToString(); } } else // If conditions fail, disable timer and update status { Send_telemetry_data.Enabled = false; if (flight_mode == 3 || cmdsendstatus == 49) { label26.Text = "Fail"; } else if (flight_mode == 9 || cmdsendstatus == 50) { label26.Text = "Received"; if (waypoint_send_step == 2) waypoint_send_step = 3; } new_telemetry_data_to_send = 0; } }*/ private void Send_telemetry_data_Tick(object sender, EventArgs e){ //Send telemetry data to drone //Console.WriteLine("cmdsendstatus changed to: " + cmdsendstatus); if (cmdsendstatus==48 && flight_mode == 3 && new_telemetry_data_to_send > 0 && new_telemetry_data_to_send <= 10){ if (port.IsOpen){ try{ if (port.IsOpen){ port.Write(send_buffer, 0, 13); }else{ MessageBox.Show("Serial port is not open."); } }catch (Exception ex){ MessageBox.Show("Error sending data: " + ex.Message); } new_telemetry_data_to_send++; label26.Text = "Try " + new_telemetry_data_to_send.ToString(); } } else if (cmdsendstatus == 48 && flight_mode == 3 && new_telemetry_data_to_send > 10) { new_telemetry_data_to_send = 0; Send_telemetry_data.Enabled = false; label26.Text = "Fail"; } else if (cmdsendstatus == 48 && flight_mode == 9) { new_telemetry_data_to_send = 0; Send_telemetry_data.Enabled = false; label26.Text = "Received"; if (waypoint_send_step == 2) waypoint_send_step = 3; } else if(cmdsendstatus==49 && new_telemetry_data_to_send > 0 && new_telemetry_data_to_send <= 10){ if (port.IsOpen){ try{ if (port.IsOpen){ port.Write(send_buffer, 0, 13); }else{ MessageBox.Show("Serial port is not open."); } }catch (Exception ex){ MessageBox.Show("Error sending data: " + ex.Message); } new_telemetry_data_to_send++; label26.Text = "Sending " + new_telemetry_data_to_send.ToString(); } } else if (cmdsendstatus == 49 && new_telemetry_data_to_send > 10) { new_telemetry_data_to_send = 0; Send_telemetry_data.Enabled = false; label26.Text = "Fail"; cmdsendstatus = 48; } else if (cmdsendstatus == 50) { new_telemetry_data_to_send = 0; Send_telemetry_data.Enabled = false; label26.Text = "Received"; cmdsendstatus = 48; /*/// Ensure UI updates correctly Invoke(new Action(() => { label26.Text = "Received"; })); // Delay reset to 48 Task.Delay(100).ContinueWith(_ => { cmdsendstatus = 48; Console.WriteLine("cmdsendstatus reset to 48 after delay."); });*/ } } private void BT_reset_waypoints(object sender, EventArgs e){ //Reset clear_waypoint_labels(); create_waypoint_list = false; fly_waypoint_list.Enabled = false; Send_telemetry_data.Enabled = false; label26.Text = "-"; webView21.CoreWebView2.ExecuteScriptAsync("resetMap()"); yoLabel01.Text = "Yo is King"; } private void Button6_Click(object sender, EventArgs e){ //Createlist Waypoint Button clear_waypoint_labels(); create_waypoint_list = true; waypoint_list_counter = 0; datain="Createlist Ready"; if (yoLabel01.InvokeRequired){yoLabel01.Invoke(new Action(() => yoLabel01.Text = datain));}else{yoLabel01.Text = datain;} datain=""; } private void Fly_waypoint_list_Tick(object sender, EventArgs e){ //Way point Running flow if(flight_mode != 3 && flight_mode != 9){ fly_waypoint_list.Enabled = false; label26.Text = "Aborted"; } if (waypoint_send_step == 1) { click_lat = waypoint_click_lat[send_telemetry_data_counter]; click_lon = waypoint_click_lon[send_telemetry_data_counter]; new_telemetry_data_to_send = 1; send_buffer[0] = (byte)'W'; send_buffer[1] = (byte)'P'; send_buffer[5] = (byte)(click_lat >> 24); send_buffer[4] = (byte)(click_lat >> 16); send_buffer[3] = (byte)(click_lat >> 8); send_buffer[2] = (byte)(click_lat); send_buffer[9] = (byte)(click_lon >> 24); send_buffer[8] = (byte)(click_lon >> 16); send_buffer[7] = (byte)(click_lon >> 8); send_buffer[6] = (byte)(click_lon); send_buffer[10] = (byte)'-'; check_byte = 0; for (temp_byte = 0; temp_byte <= 10; temp_byte++){ check_byte ^= send_buffer[temp_byte]; } send_buffer[11] = check_byte; send_buffer[12] = (byte)'0'; Send_telemetry_data.Enabled = true; waypoint_send_step = 2; } if(waypoint_send_step == 3){ if (flight_mode == 3) waypoint_send_step = 4; } if (waypoint_send_step == 4){ if (waypoint_list_counter == send_telemetry_data_counter){ label26.Text = "Waypoints ready"; fly_waypoint_list.Enabled = false; }else{ waypoint_send_step = 1; send_telemetry_data_counter++; } } } private void Button7_Click(object sender, EventArgs e){ //Flylist Button for start fly send_telemetry_data_counter = 1; waypoint_send_step = 1; fly_waypoint_list.Enabled = true; } private void Flight_timer_Tick(object sender, EventArgs e){ //Fly time flight_timer_seconds++; label36.Text = ("00:" + (flight_timer_seconds / 60).ToString("00.") + ":" + (flight_timer_seconds % 60).ToString("00.")); } private void WebView21_WebMessageReceived(object sender, CoreWebView2WebMessageReceivedEventArgs e){ if (port.IsOpen && first_receive == 1 && start == 2 && flight_mode == 3 && fly_waypoint_list.Enabled == false){ var message = e.TryGetWebMessageAsString(); if (!string.IsNullOrEmpty(message)){ var coordinates = message.Split(','); if (coordinates.Length == 2){ if (double.TryParse(coordinates[0].Split(':')[1].Trim(), out double latitude) && double.TryParse(coordinates[1].Split(':')[1].Trim(), out double longitude)){ click_lat = (int)(latitude * 1000000); click_lon = (int)(longitude * 1000000); //AddMarker("blue", ((float)(click_lat) / 1000000.0).ToString(new CultureInfo("en-US")), ((float)click_lon / 1000000.0).ToString(new CultureInfo("en-US")), 2, true); button1.Enabled = false; //Zoom Button button4.Enabled = false; //Zoom Button send_buffer[0] = (byte)'W'; send_buffer[1] = (byte)'P'; send_buffer[5] = (byte)(click_lat >> 24); send_buffer[4] = (byte)(click_lat >> 16); send_buffer[3] = (byte)(click_lat >> 8); send_buffer[2] = (byte)(click_lat); send_buffer[9] = (byte)(click_lon >> 24); send_buffer[8] = (byte)(click_lon >> 16); send_buffer[7] = (byte)(click_lon >> 8); send_buffer[6] = (byte)(click_lon); send_buffer[10] = (byte)'-'; check_byte = 0; for (temp_byte = 0; temp_byte <= 10; temp_byte++){ check_byte ^= send_buffer[temp_byte]; } send_buffer[11] = check_byte; send_buffer[12] = (byte)'0'; if (create_waypoint_list){ if (waypoint_list_counter < 5){ waypoint_list_counter++; waypoint_click_lat[waypoint_list_counter] = click_lat; waypoint_click_lon[waypoint_list_counter] = click_lon; AddMarker("blue", ((float)(click_lat) / 1000000.0).ToString(new CultureInfo("en-US")), ((float)click_lon / 1000000.0).ToString(new CultureInfo("en-US")), waypoint_list_counter+1, true); datain+=waypoint_click_lat[waypoint_list_counter]+","+waypoint_click_lon[waypoint_list_counter]+"\n"; if (yoLabel01.InvokeRequired){yoLabel01.Invoke(new Action(() => yoLabel01.Text = datain));}else{yoLabel01.Text = datain;} } }else{ try{ if (port.IsOpen){ port.Write(send_buffer, 0, 13); }else{ MessageBox.Show("Serial port is not open."); } }catch (Exception ex){ MessageBox.Show("Error sending data: " + ex.Message); } label26.Text = "Try 1"; new_telemetry_data_to_send = 1; Send_telemetry_data.Enabled = true; } } } } } } private void btnOffMotor_Click(object sender, EventArgs e){ send_buffer[0] = (byte)'W'; send_buffer[1] = (byte)'P'; send_buffer[10] = (byte)'-'; check_byte = 0; for (temp_byte = 0; temp_byte <= 10; temp_byte++){ check_byte ^= send_buffer[temp_byte]; } send_buffer[11] = check_byte; send_buffer[12] = (byte)'q'; cmdsendstatus = 49; new_telemetry_data_to_send = 1; Send_telemetry_data.Enabled = true; } private void btnTakeOff_Click(object sender, EventArgs e){ send_buffer[0] = (byte)'W'; send_buffer[1] = (byte)'P'; send_buffer[10] = (byte)'-'; check_byte = 0; for (temp_byte = 0; temp_byte <= 10; temp_byte++){ check_byte ^= send_buffer[temp_byte]; } send_buffer[11] = check_byte; send_buffer[12] = (byte)'p'; cmdsendstatus= 49; new_telemetry_data_to_send = 1; Send_telemetry_data.Enabled = true; } private void btnOnMotor_Click(object sender, EventArgs e) { send_buffer[0] = (byte)'W'; send_buffer[1] = (byte)'P'; send_buffer[10] = (byte)'-'; check_byte = 0; for (temp_byte = 0; temp_byte <= 10; temp_byte++){ check_byte ^= send_buffer[temp_byte]; } send_buffer[11] = check_byte; send_buffer[12] = (byte)'e'; cmdsendstatus= 49; new_telemetry_data_to_send = 1; Send_telemetry_data.Enabled = true; } private void btnCallAcc_Click(object sender, EventArgs e) { send_buffer[0] = (byte)'W'; send_buffer[1] = (byte)'P'; send_buffer[10] = (byte)'-'; check_byte = 0; for (temp_byte = 0; temp_byte <= 10; temp_byte++){ check_byte ^= send_buffer[temp_byte]; } send_buffer[11] = check_byte; send_buffer[12] = (byte)'f'; cmdsendstatus= 49; new_telemetry_data_to_send = 1; Send_telemetry_data.Enabled = true; } private void btnStartGpsCal_Click(object sender, EventArgs e) { send_buffer[0] = (byte)'W'; send_buffer[1] = (byte)'P'; send_buffer[10] = (byte)'-'; check_byte = 0; for (temp_byte = 0; temp_byte <= 10; temp_byte++){ check_byte ^= send_buffer[temp_byte]; } send_buffer[11] = check_byte; send_buffer[12] = (byte)'g'; cmdsendstatus= 49; new_telemetry_data_to_send = 1; Send_telemetry_data.Enabled = true; } private void btnFinishGpsCal_Click(object sender, EventArgs e) { send_buffer[0] = (byte)'W'; send_buffer[1] = (byte)'P'; send_buffer[10] = (byte)'-'; check_byte = 0; for (temp_byte = 0; temp_byte <= 10; temp_byte++){ check_byte ^= send_buffer[temp_byte]; } send_buffer[11] = check_byte; send_buffer[12] = (byte)'h'; cmdsendstatus= 49; new_telemetry_data_to_send = 1; Send_telemetry_data.Enabled = true; } private void btnRTH_Click(object sender, EventArgs e) { send_buffer[0] = (byte)'W'; send_buffer[1] = (byte)'P'; send_buffer[10] = (byte)'-'; check_byte = 0; for (temp_byte = 0; temp_byte <= 10; temp_byte++){ check_byte ^= send_buffer[temp_byte]; } send_buffer[11] = check_byte; send_buffer[12] = (byte)'v'; cmdsendstatus= 49; new_telemetry_data_to_send = 1; Send_telemetry_data.Enabled = true; } private void btnGpsHold_Click(object sender, EventArgs e) { send_buffer[0] = (byte)'W'; send_buffer[1] = (byte)'P'; send_buffer[10] = (byte)'-'; check_byte = 0; for (temp_byte = 0; temp_byte <= 10; temp_byte++){ check_byte ^= send_buffer[temp_byte]; } send_buffer[11] = check_byte; send_buffer[12] = (byte)'c'; cmdsendstatus= 49; new_telemetry_data_to_send = 1; Send_telemetry_data.Enabled = true; } private void btnAltHold_Click(object sender, EventArgs e) { send_buffer[0] = (byte)'W'; send_buffer[1] = (byte)'P'; send_buffer[10] = (byte)'-'; check_byte = 0; for (temp_byte = 0; temp_byte <= 10; temp_byte++){ check_byte ^= send_buffer[temp_byte]; } send_buffer[11] = check_byte; send_buffer[12] = (byte)'x'; cmdsendstatus= 49; new_telemetry_data_to_send = 1; Send_telemetry_data.Enabled = true; } private void btnAutoLvl_Click(object sender, EventArgs e) { send_buffer[0] = (byte)'W'; send_buffer[1] = (byte)'P'; send_buffer[10] = (byte)'-'; check_byte = 0; for (temp_byte = 0; temp_byte <= 10; temp_byte++){ check_byte ^= send_buffer[temp_byte]; } send_buffer[11] = check_byte; send_buffer[12] = (byte)'z'; cmdsendstatus= 49; new_telemetry_data_to_send = 1; Send_telemetry_data.Enabled = true; } } }