mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-24 12:33:33 +08:00
make navigator work for posix
This commit is contained in:
@@ -44,6 +44,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <px4_config.h>
|
#include <px4_config.h>
|
||||||
|
#include <px4_defines.h>
|
||||||
|
#include <px4_tasks.h>
|
||||||
|
#include <px4_posix.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -174,7 +177,7 @@ Navigator::~Navigator()
|
|||||||
|
|
||||||
/* if we have given up, kill it */
|
/* if we have given up, kill it */
|
||||||
if (++i > 50) {
|
if (++i > 50) {
|
||||||
task_delete(_navigator_task);
|
px4_task_delete(_navigator_task);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} while (_navigator_task != -1);
|
} while (_navigator_task != -1);
|
||||||
@@ -505,7 +508,7 @@ Navigator::task_main()
|
|||||||
warnx("exiting.");
|
warnx("exiting.");
|
||||||
|
|
||||||
_navigator_task = -1;
|
_navigator_task = -1;
|
||||||
_exit(0);
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -516,9 +519,9 @@ Navigator::start()
|
|||||||
/* start the task */
|
/* start the task */
|
||||||
_navigator_task = px4_task_spawn_cmd("navigator",
|
_navigator_task = px4_task_spawn_cmd("navigator",
|
||||||
SCHED_DEFAULT,
|
SCHED_DEFAULT,
|
||||||
SCHED_PRIORITY_DEFAULT + 20,
|
SCHED_PRIORITY_MAX -5,
|
||||||
1700,
|
1700,
|
||||||
(main_t)&Navigator::task_main_trampoline,
|
(px4_main_t)&Navigator::task_main_trampoline,
|
||||||
nullptr);
|
nullptr);
|
||||||
|
|
||||||
if (_navigator_task < 0) {
|
if (_navigator_task < 0) {
|
||||||
@@ -584,54 +587,57 @@ void Navigator::load_fence_from_file(const char *filename)
|
|||||||
|
|
||||||
static void usage()
|
static void usage()
|
||||||
{
|
{
|
||||||
errx(1, "usage: navigator {start|stop|status|fence|fencefile}");
|
warnx("usage: navigator {start|stop|status|fence|fencefile}");
|
||||||
}
|
}
|
||||||
|
|
||||||
int navigator_main(int argc, char *argv[])
|
int navigator_main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
if (argc < 2) {
|
if (argc < 2) {
|
||||||
usage();
|
usage();
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcmp(argv[1], "start")) {
|
if (!strcmp(argv[1], "start")) {
|
||||||
|
|
||||||
if (navigator::g_navigator != nullptr) {
|
if (navigator::g_navigator != nullptr) {
|
||||||
errx(1, "already running");
|
warnx("already running");
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
navigator::g_navigator = new Navigator;
|
navigator::g_navigator = new Navigator;
|
||||||
|
|
||||||
if (navigator::g_navigator == nullptr) {
|
if (navigator::g_navigator == nullptr) {
|
||||||
errx(1, "alloc failed");
|
warnx("alloc failed");
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (OK != navigator::g_navigator->start()) {
|
if (OK != navigator::g_navigator->start()) {
|
||||||
delete navigator::g_navigator;
|
delete navigator::g_navigator;
|
||||||
navigator::g_navigator = nullptr;
|
navigator::g_navigator = nullptr;
|
||||||
err(1, "start failed");
|
warnx("start failed");
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (navigator::g_navigator == nullptr)
|
if (navigator::g_navigator == nullptr) {
|
||||||
errx(1, "not running");
|
warnx("not running");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (!strcmp(argv[1], "stop")) {
|
if (!strcmp(argv[1], "stop")) {
|
||||||
delete navigator::g_navigator;
|
delete navigator::g_navigator;
|
||||||
navigator::g_navigator = nullptr;
|
navigator::g_navigator = nullptr;
|
||||||
|
|
||||||
} else if (!strcmp(argv[1], "status")) {
|
} else if (!strcmp(argv[1], "status")) {
|
||||||
navigator::g_navigator->status();
|
navigator::g_navigator->status();
|
||||||
|
|
||||||
} else if (!strcmp(argv[1], "fence")) {
|
} else if (!strcmp(argv[1], "fence")) {
|
||||||
navigator::g_navigator->add_fence_point(argc - 2, argv + 2);
|
navigator::g_navigator->add_fence_point(argc - 2, argv + 2);
|
||||||
|
|
||||||
} else if (!strcmp(argv[1], "fencefile")) {
|
} else if (!strcmp(argv[1], "fencefile")) {
|
||||||
navigator::g_navigator->load_fence_from_file(GEOFENCE_FILENAME);
|
navigator::g_navigator->load_fence_from_file(GEOFENCE_FILENAME);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
usage();
|
usage();
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user