From 7e7513bc155a29847998e5d14c1c05006b3f256c Mon Sep 17 00:00:00 2001 From: Mark Charlebois Date: Sat, 13 Jun 2015 14:12:17 -0700 Subject: [PATCH] POSIX: change pthreads to px4_tasks in simulator The simulator was using pthread APIs directly so calls to px4_getpid() would fail since the task ID was not known. Changed simulator to use px4_task_spawn_cmd. Signed-off-by: Mark Charlebois --- src/modules/simulator/simulator.cpp | 1 - src/modules/simulator/simulator.h | 2 +- src/modules/simulator/simulator_mavlink.cpp | 30 ++++++++------------- 3 files changed, 12 insertions(+), 21 deletions(-) diff --git a/src/modules/simulator/simulator.cpp b/src/modules/simulator/simulator.cpp index 0c02da247f..702966cf6e 100644 --- a/src/modules/simulator/simulator.cpp +++ b/src/modules/simulator/simulator.cpp @@ -39,7 +39,6 @@ #include #include #include -#include #include #include #include diff --git a/src/modules/simulator/simulator.h b/src/modules/simulator/simulator.h index b2ebc880cd..43c97df668 100644 --- a/src/modules/simulator/simulator.h +++ b/src/modules/simulator/simulator.h @@ -276,7 +276,7 @@ private: void send_mavlink_message(const uint8_t msgid, const void *msg, uint8_t component_ID); void update_sensors(struct sensor_combined_s *sensor, mavlink_hil_sensor_t *imu); void update_gps(mavlink_hil_gps_t *gps_sim); - static void *sending_trampoline(void *); + static int sending_trampoline(int argc, char *argv[]); void send(); #endif }; diff --git a/src/modules/simulator/simulator_mavlink.cpp b/src/modules/simulator/simulator_mavlink.cpp index e4403fd221..88893f9c4a 100644 --- a/src/modules/simulator/simulator_mavlink.cpp +++ b/src/modules/simulator/simulator_mavlink.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include "simulator.h" #include "errno.h" #include @@ -250,9 +251,9 @@ void Simulator::poll_actuators() { } } -void *Simulator::sending_trampoline(void *) { +int Simulator::sending_trampoline(int argv, char *argc[]) { _instance->send(); - return 0; // why do I have to put this??? + return 0; } void Simulator::send() { @@ -326,21 +327,6 @@ void Simulator::updateSamples() return; } - // create a thread for sending data to the simulator - pthread_t sender_thread; - - // initialize threads - pthread_attr_t sender_thread_attr; - pthread_attr_init(&sender_thread_attr); - pthread_attr_setstacksize(&sender_thread_attr, 1000); - - struct sched_param param; - (void)pthread_attr_getschedparam(&sender_thread_attr, ¶m); - - /* low priority */ - param.sched_priority = SCHED_PRIORITY_DEFAULT; - (void)pthread_attr_setschedparam(&sender_thread_attr, ¶m); - // setup serial connection to autopilot (used to get manual controls) int serial_fd = openUart(PIXHAWK_DEVICE, 115200); @@ -381,9 +367,15 @@ void Simulator::updateSamples() // subscribe to topics _actuator_outputs_sub = orb_subscribe_multi(ORB_ID(actuator_outputs), 0); + char * argv[2] = { nullptr, nullptr }; + // got data from simulator, now activate the sending thread - pthread_create(&sender_thread, &sender_thread_attr, Simulator::sending_trampoline, NULL); - pthread_attr_destroy(&sender_thread_attr); + px4_task_spawn_cmd("simulator-send", + SCHED_DEFAULT, + SCHED_PRIORITY_DEFAULT, + 1000, + (px4_main_t)&Simulator::sending_trampoline, + (char *const *)argv); // wait for new mavlink messages to arrive while (true) {