@ -1530,7 +1530,6 @@ Mavlink::update_rate_mult()
@@ -1530,7 +1530,6 @@ Mavlink::update_rate_mult()
// check for RADIO_STATUS timeout and reset
if ( hrt_elapsed_time ( & _rstatus . timestamp ) > 5 _s ) {
PX4_ERR ( " instance %d: RADIO_STATUS timeout " , _instance_id ) ;
set_telemetry_status_type ( telemetry_status_s : : LINK_TYPE_GENERIC ) ;
_radio_status_available = false ;
_radio_status_critical = false ;
@ -1551,23 +1550,25 @@ void
@@ -1551,23 +1550,25 @@ void
Mavlink : : update_radio_status ( const radio_status_s & radio_status )
{
_rstatus = radio_status ;
set_telemetry_status_type ( telemetry_status_s : : LINK_TYPE_3DR_RADIO ) ;
/* check hardware limits */
_radio_status_available = true ;
_radio_status_critical = ( radio_status . txbuf < RADIO_BUFFER_LOW_PERCENTAGE ) ;
if ( radio_status . txbuf < RADIO_BUFFER_CRITICAL_LOW_PERCENTAGE ) {
/* this indicates link congestion, reduce rate by 20% */
_radio_status_mult * = 0.80f ;
if ( _use_software_mav_throttling ) {
/* check hardware limits */
_radio_status_critical = ( radio_status . txbuf < RADIO_BUFFER_LOW_PERCENTAGE ) ;
if ( radio_status . txbuf < RADIO_BUFFER_CRITICAL_LOW_PERCENTAGE ) {
/* this indicates link congestion, reduce rate by 20% */
_radio_status_mult * = 0.80f ;
} else if ( radio_status . txbuf < RADIO_BUFFER_LOW_PERCENTAGE ) {
/* this indicates link congestion, reduce rate by 2.5% */
_radio_status_mult * = 0.975f ;
} else if ( radio_status . txbuf < RADIO_BUFFER_LOW_PERCENTAGE ) {
/* this indicates link congestion, reduce rate by 2.5% */
_radio_status_mult * = 0.975f ;
} else if ( radio_status . txbuf > RADIO_BUFFER_HALF_PERCENTAGE ) {
/* this indicates spare bandwidth, increase by 2.5% */
_radio_status_mult * = 1.025f ;
} else if ( radio_status . txbuf > RADIO_BUFFER_HALF_PERCENTAGE ) {
/* this indicates spare bandwidth, increase by 2.5% */
_radio_status_mult * = 1.025f ;
}
}
}
@ -1847,7 +1848,7 @@ Mavlink::task_main(int argc, char *argv[])
@@ -1847,7 +1848,7 @@ Mavlink::task_main(int argc, char *argv[])
int temp_int_arg ;
# endif
while ( ( ch = px4_getopt ( argc , argv , " b:r:d:n:u:o:m:t:c:fwxz " , & myoptind , & myoptarg ) ) ! = EOF ) {
while ( ( ch = px4_getopt ( argc , argv , " b:r:d:n:u:o:m:t:c:fs wxz " , & myoptind , & myoptarg ) ) ! = EOF ) {
switch ( ch ) {
case ' b ' :
if ( px4_get_parameter_value ( myoptarg , _baudrate ) ! = 0 ) {
@ -2028,6 +2029,10 @@ Mavlink::task_main(int argc, char *argv[])
@@ -2028,6 +2029,10 @@ Mavlink::task_main(int argc, char *argv[])
_forwarding_on = true ;
break ;
case ' s ' :
_use_software_mav_throttling = true ;
break ;
case ' w ' :
_wait_to_transmit = true ;
break ;
@ -2253,7 +2258,7 @@ Mavlink::task_main(int argc, char *argv[])
@@ -2253,7 +2258,7 @@ Mavlink::task_main(int argc, char *argv[])
# endif // CONFIG_NET
}
check_radio_config ( ) ;
configure_sik_radio ( ) ;
if ( status_sub - > update ( & status_time , & status ) ) {
/* switch HIL mode if required */
@ -2603,11 +2608,10 @@ void Mavlink::publish_telemetry_status()
@@ -2603,11 +2608,10 @@ void Mavlink::publish_telemetry_status()
_telem_status_pub . publish ( _tstatus ) ;
}
void Mavlink : : check_radio_config ( )
void Mavlink : : configure_sik_radio ( )
{
/* radio config check */
if ( _uart_fd > = 0 & & _param_mav_radio_id . get ( ) ! = 0
& & _tstatus . type = = telemetry_status_s : : LINK_TYPE_3DR_RADIO ) {
if ( _uart_fd > = 0 & & _param_sik_radio_id . get ( ) ! = 0 ) {
/* request to configure radio and radio is present */
FILE * fs = fdopen ( _uart_fd , " w " ) ;
@ -2617,9 +2621,9 @@ void Mavlink::check_radio_config()
@@ -2617,9 +2621,9 @@ void Mavlink::check_radio_config()
fprintf ( fs , " +++ \n " ) ;
px4_usleep ( 1200000 ) ;
if ( _param_mav _radio_id . get ( ) > 0 ) {
if ( _param_sik _radio_id . get ( ) > 0 ) {
/* set channel */
fprintf ( fs , " ATS3=%u \n " , _param_mav _radio_id . get ( ) ) ;
fprintf ( fs , " ATS3=%u \n " , _param_sik _radio_id . get ( ) ) ;
px4_usleep ( 200000 ) ;
} else {
@ -2650,8 +2654,8 @@ void Mavlink::check_radio_config()
@@ -2650,8 +2654,8 @@ void Mavlink::check_radio_config()
}
/* reset param and save */
_param_mav _radio_id . set ( 0 ) ;
_param_mav _radio_id . commit_no_notification ( ) ;
_param_sik _radio_id . set ( 0 ) ;
_param_sik _radio_id . commit_no_notification ( ) ;
}
}
@ -2750,9 +2754,8 @@ Mavlink::display_status()
@@ -2750,9 +2754,8 @@ Mavlink::display_status()
printf ( " \t type: \t \t " ) ;
switch ( _tstatus . type ) {
case telemetry_status_s : : LINK_TYPE_3DR_RADIO :
printf ( " 3DR RADIO \n " ) ;
if ( _radio_status_available ) {
printf ( " RADIO Link \n " ) ;
printf ( " \t rssi: \t \t %d \n " , _rstatus . rssi ) ;
printf ( " \t remote rssi: \t %u \n " , _rstatus . remote_rssi ) ;
printf ( " \t txbuf: \t %u \n " , _rstatus . txbuf ) ;
@ -2760,15 +2763,12 @@ Mavlink::display_status()
@@ -2760,15 +2763,12 @@ Mavlink::display_status()
printf ( " \t remote noise: \t %u \n " , _rstatus . remote_noise ) ;
printf ( " \t rx errors: \t %u \n " , _rstatus . rxerrors ) ;
printf ( " \t fixed: \t %u \n " , _rstatus . fix ) ;
break ;
case telemetry_status_s : : LINK_TYPE_USB :
} else if ( _is_usb_uart ) {
printf ( " USB CDC \n " ) ;
break ;
default :
} else {
printf ( " GENERIC LINK OR RADIO \n " ) ;
break ;
}
} else {