You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
3.6 KiB
157 lines
3.6 KiB
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*- |
|
|
|
/// |
|
/// @file GCS_Ardupilot.pde |
|
/// @brief GCS driver for the legacy Ardupilot GCS protocol. |
|
/// |
|
|
|
#if GCS_PROTOCOL == GCS_PROTOCOL_LEGACY |
|
|
|
/* |
|
Message Prefixes |
|
!!! Position Low rate telemetry |
|
+++ Attitude High rate telemetry |
|
### Mode Change in control mode |
|
%%% Waypoint Current and previous waypoints |
|
XXX Alert Text alert - NOTE: Alert message generation is not localized to a function |
|
PPP IMU Performance Sent every 20 seconds for performance monitoring |
|
|
|
Message Suffix |
|
*** All messages use this suffix |
|
*/ |
|
|
|
void |
|
GCS_LEGACY::send_text(uint8_t severity, const char *str) |
|
{ |
|
if(severity >= DEBUG_LEVEL){ |
|
_port->print("MSG: "); |
|
_port->println(str); |
|
} |
|
} |
|
|
|
void |
|
GCS_LEGACY::send_message(uint8_t id, uint32_t param) |
|
{ |
|
switch(id) { |
|
case MSG_ATTITUDE: // ** Attitude message |
|
print_attitude(); |
|
break; |
|
case MSG_LOCATION: // ** Location/GPS message |
|
print_position(); |
|
break; |
|
case MSG_MODE_CHANGE: |
|
case MSG_HEARTBEAT: // ** Location/GPS message |
|
print_control_mode(); |
|
break; |
|
case MSG_CPU_LOAD: |
|
//TODO: replace with appropriate message |
|
_port->printf_P(PSTR("MSG: load %ld%%\n"), param); |
|
break; |
|
//case MSG_PERF_REPORT: |
|
// printPerfData(); |
|
} |
|
} |
|
|
|
void |
|
GCS_LEGACY::print_attitude(void) |
|
{ |
|
_port->print("+++"); |
|
_port->print("ASP:"); |
|
_port->print((int)airspeed / 100, DEC); |
|
_port->print(",THH:"); |
|
_port->print(servo_out[CH_THROTTLE], DEC); |
|
_port->print (",RLL:"); |
|
_port->print(roll_sensor / 100, DEC); |
|
_port->print (",PCH:"); |
|
_port->print(pitch_sensor / 100, DEC); |
|
_port->println(",***"); |
|
} |
|
|
|
void |
|
GCS_LEGACY::print_control_mode(void) |
|
{ |
|
switch (control_mode){ |
|
case MANUAL: |
|
_port->println("###MANUAL***"); |
|
break; |
|
case STABILIZE: |
|
_port->println("###STABILIZE***"); |
|
break; |
|
case CIRCLE: |
|
_port->println("###CIRCLE***"); |
|
break; |
|
case FLY_BY_WIRE_A: |
|
_port->println("###FBW A***"); |
|
break; |
|
case FLY_BY_WIRE_B: |
|
_port->println("###FBW B***"); |
|
break; |
|
case AUTO: |
|
_port->println("###AUTO***"); |
|
break; |
|
case RTL: |
|
_port->println("###RTL***"); |
|
break; |
|
case LOITER: |
|
_port->println("###LOITER***"); |
|
break; |
|
case TAKEOFF: |
|
_port->println("##TAKEOFF***"); |
|
break; |
|
case LAND: |
|
_port->println("##LAND***"); |
|
break; |
|
} |
|
} |
|
|
|
void |
|
GCS_LEGACY::print_position(void) |
|
{ |
|
_port->print("!!!"); |
|
_port->print("LAT:"); |
|
_port->print(current_loc.lat/10,DEC); |
|
_port->print(",LON:"); |
|
_port->print(current_loc.lng/10,DEC); //wp_current_lat |
|
_port->print(",SPD:"); |
|
_port->print(gps.ground_speed/100,DEC); |
|
_port->print(",CRT:"); |
|
_port->print(climb_rate,DEC); |
|
_port->print(",ALT:"); |
|
_port->print(current_loc.alt/100,DEC); |
|
_port->print(",ALH:"); |
|
_port->print(next_WP.alt/100,DEC); |
|
_port->print(",CRS:"); |
|
_port->print(yaw_sensor/100,DEC); |
|
_port->print(",BER:"); |
|
_port->print(target_bearing/100,DEC); |
|
_port->print(",WPN:"); |
|
_port->print(get(PARAM_WP_INDEX),DEC);//Actually is the waypoint. |
|
_port->print(",DST:"); |
|
_port->print(wp_distance,DEC); |
|
_port->print(",BTV:"); |
|
_port->print(battery_voltage,DEC); |
|
_port->print(",RSP:"); |
|
_port->print(servo_out[CH_ROLL]/100,DEC); |
|
_port->print(",TOW:"); |
|
_port->print(gps.time); |
|
_port->println(",***"); |
|
} |
|
|
|
void |
|
GCS_LEGACY::print_waypoint(struct Location *cmd,byte index) |
|
{ |
|
_port->print("command #: "); |
|
_port->print(index, DEC); |
|
_port->print(" id: "); |
|
_port->print(cmd->id,DEC); |
|
_port->print(" p1: "); |
|
_port->print(cmd->p1,DEC); |
|
_port->print(" p2: "); |
|
_port->print(cmd->alt,DEC); |
|
_port->print(" p3: "); |
|
_port->print(cmd->lat,DEC); |
|
_port->print(" p4: "); |
|
_port->println(cmd->lng,DEC); |
|
} |
|
|
|
#endif // GCS_PROTOCOL_LEGACY
|
|
|