From 0ae76aff32c43fda9c2339287837fc4ac4ecabd5 Mon Sep 17 00:00:00 2001
From: Larry Wang <wxiaodong@gmail.com>
Date: Thu, 7 Sep 2017 22:09:53 -0700
Subject: [PATCH] updated to use rc driver from PX4, instead of from FC addons
 (#7798)

* updated to use rc driver from PX4, instead of from FC addons

* fixed format

* update per comments

* fix format

* fix format

* remove duplicated __PX4_QURT
---
 cmake/configs/qurt_sdflight_legacy.cmake |  3 ++-
 posix-configs/eagle/200qx/px4.config     | 32 +-----------------------
 posix-configs/eagle/210qc/px4.config     | 32 +-----------------------
 posix-configs/excelsior/px4.config       |  2 +-
 src/drivers/spektrum_rc/spektrum_rc.cpp  | 25 +++++++++++++++---
 5 files changed, 26 insertions(+), 68 deletions(-)

diff --git a/cmake/configs/qurt_sdflight_legacy.cmake b/cmake/configs/qurt_sdflight_legacy.cmake
index 25401b9d13..9a6eeb9aa3 100644
--- a/cmake/configs/qurt_sdflight_legacy.cmake
+++ b/cmake/configs/qurt_sdflight_legacy.cmake
@@ -70,12 +70,12 @@ set(config_module_list
 	#
 	drivers/gps
 	drivers/pwm_out_rc_in
+	drivers/spektrum_rc
 	drivers/qshell/qurt
 
 	#
 	# FC_ADDON drivers
 	#
-	platforms/qurt/fc_addon/rc_receiver
 	platforms/qurt/fc_addon/uart_esc
 
 	#
@@ -91,6 +91,7 @@ set(config_module_list
 	lib/terrain_estimation
 	lib/runway_takeoff
 	lib/tailsitter_recovery
+	lib/rc
 	lib/version
 	lib/DriverFramework/framework
 	lib/micro-CDR
diff --git a/posix-configs/eagle/200qx/px4.config b/posix-configs/eagle/200qx/px4.config
index e267b7f121..53a29d4eef 100644
--- a/posix-configs/eagle/200qx/px4.config
+++ b/posix-configs/eagle/200qx/px4.config
@@ -14,36 +14,6 @@ param set MC_ROLL_P 7.0
 param set MC_ROLLRATE_P 0.08
 param set MC_ROLLRATE_I 0.0
 param set MC_ROLLRATE_D 0.001
-param set RC_MAP_THROTTLE 1
-param set RC_MAP_ROLL 2
-param set RC_MAP_PITCH 3
-param set RC_MAP_YAW 4
-param set RC_MAP_MODE_SW 5
-param set RC_MAP_POSCTL_SW 6
-param set RC1_MAX 1900
-param set RC1_MIN 1099
-param set RC1_TRIM 1099
-param set RC1_REV 1
-param set RC2_MAX 1900
-param set RC2_MIN 1099
-param set RC2_TRIM 1500
-param set RC2_REV -1
-param set RC3_MAX 1900
-param set RC3_MIN 1099
-param set RC3_TRIM 1500
-param set RC3_REV 1
-param set RC4_MAX 1900
-param set RC4_MIN 1099
-param set RC4_TRIM 1500
-param set RC4_REV -1
-param set RC5_MAX 1900
-param set RC5_MIN 1099
-param set RC5_TRIM 1500
-param set RC5_REV 1
-param set RC6_MAX 1900
-param set RC6_MIN 1099
-param set RC6_TRIM 1099
-param set RC6_REV 1
 param set ATT_W_MAG 0.00
 param set SENS_BOARD_ROT 0
 param set RC_RECEIVER_TYPE 1
@@ -65,7 +35,7 @@ land_detector start multicopter
 mc_pos_control start
 mc_att_control start
 uart_esc start -D /dev/tty-2
-rc_receiver start -D /dev/tty-1
+spektrum_rc start -d /dev/tty-1
 sleep 1
 list_devices
 list_files
diff --git a/posix-configs/eagle/210qc/px4.config b/posix-configs/eagle/210qc/px4.config
index e267b7f121..53a29d4eef 100644
--- a/posix-configs/eagle/210qc/px4.config
+++ b/posix-configs/eagle/210qc/px4.config
@@ -14,36 +14,6 @@ param set MC_ROLL_P 7.0
 param set MC_ROLLRATE_P 0.08
 param set MC_ROLLRATE_I 0.0
 param set MC_ROLLRATE_D 0.001
-param set RC_MAP_THROTTLE 1
-param set RC_MAP_ROLL 2
-param set RC_MAP_PITCH 3
-param set RC_MAP_YAW 4
-param set RC_MAP_MODE_SW 5
-param set RC_MAP_POSCTL_SW 6
-param set RC1_MAX 1900
-param set RC1_MIN 1099
-param set RC1_TRIM 1099
-param set RC1_REV 1
-param set RC2_MAX 1900
-param set RC2_MIN 1099
-param set RC2_TRIM 1500
-param set RC2_REV -1
-param set RC3_MAX 1900
-param set RC3_MIN 1099
-param set RC3_TRIM 1500
-param set RC3_REV 1
-param set RC4_MAX 1900
-param set RC4_MIN 1099
-param set RC4_TRIM 1500
-param set RC4_REV -1
-param set RC5_MAX 1900
-param set RC5_MIN 1099
-param set RC5_TRIM 1500
-param set RC5_REV 1
-param set RC6_MAX 1900
-param set RC6_MIN 1099
-param set RC6_TRIM 1099
-param set RC6_REV 1
 param set ATT_W_MAG 0.00
 param set SENS_BOARD_ROT 0
 param set RC_RECEIVER_TYPE 1
@@ -65,7 +35,7 @@ land_detector start multicopter
 mc_pos_control start
 mc_att_control start
 uart_esc start -D /dev/tty-2
-rc_receiver start -D /dev/tty-1
+spektrum_rc start -d /dev/tty-1
 sleep 1
 list_devices
 list_files
diff --git a/posix-configs/excelsior/px4.config b/posix-configs/excelsior/px4.config
index 58deeb98ce..bb00bd1997 100644
--- a/posix-configs/excelsior/px4.config
+++ b/posix-configs/excelsior/px4.config
@@ -84,7 +84,7 @@ land_detector start multicopter
 mc_pos_control start
 mc_att_control start
 uart_esc start -D /dev/tty-1
-rc_receiver start -D /dev/tty-101
+spektrum_rc start -d /dev/tty-101
 sleep 1
 list_devices
 list_files
diff --git a/src/drivers/spektrum_rc/spektrum_rc.cpp b/src/drivers/spektrum_rc/spektrum_rc.cpp
index e6921d06c8..899c31eea6 100644
--- a/src/drivers/spektrum_rc/spektrum_rc.cpp
+++ b/src/drivers/spektrum_rc/spektrum_rc.cpp
@@ -41,6 +41,7 @@
 
 #include <px4_tasks.h>
 #include <px4_posix.h>
+#include <px4_getopt.h>
 
 #include <lib/rc/dsm.h>
 #include <drivers/drv_rc_input.h>
@@ -76,7 +77,23 @@ void fill_input_rc(uint16_t raw_rc_count, uint16_t raw_rc_values[input_rc_s::RC_
 
 void task_main(int argc, char *argv[])
 {
-	int uart_fd = dsm_init(SPEKTRUM_UART_DEVICE_PATH);
+	const char *device_path = SPEKTRUM_UART_DEVICE_PATH;
+	int ch;
+	int myoptind = 1;
+	const char *myoptarg = NULL;
+
+	while ((ch = px4_getopt(argc, argv, "d:", &myoptind, &myoptarg)) != EOF) {
+		switch (ch) {
+		case 'd':
+			device_path = myoptarg;
+			break;
+
+		default:
+			break;
+		}
+	}
+
+	int uart_fd = dsm_init(device_path);
 
 	if (uart_fd < 1) {
 		PX4_ERR("dsm init failed");
@@ -190,7 +207,7 @@ void fill_input_rc(uint16_t raw_rc_count, uint16_t raw_rc_values[input_rc_s::RC_
 	input_rc.rc_total_frame_count = 0;
 }
 
-int start()
+int start(int argc, char *argv[])
 {
 	if (_is_running) {
 		PX4_WARN("already running");
@@ -206,7 +223,7 @@ int start()
 					  SCHED_PRIORITY_DEFAULT,
 					  2000,
 					  (px4_main_t)&task_main,
-					  nullptr);
+					  (char *const *)argv);
 
 	if (_task_handle < 0) {
 		PX4_ERR("task start failed");
@@ -263,7 +280,7 @@ int spektrum_rc_main(int argc, char *argv[])
 
 
 	if (!strcmp(verb, "start")) {
-		return spektrum_rc::start();
+		return spektrum_rc::start(argc - 1, argv + 1);
 	}
 
 	else if (!strcmp(verb, "stop")) {
-- 
GitLab