Browse Source

ported vtol module to posix

sbg
tumbili 10 years ago
parent
commit
93e557ab75
  1. 12
      src/modules/vtol_att_control/standard.cpp
  2. 2
      src/modules/vtol_att_control/tailsitter.cpp
  3. 12
      src/modules/vtol_att_control/tiltrotor.cpp
  4. 38
      src/modules/vtol_att_control/vtol_att_control_main.cpp
  5. 5
      src/modules/vtol_att_control/vtol_att_control_main.h
  6. 24
      src/modules/vtol_att_control/vtol_type.cpp

12
src/modules/vtol_att_control/standard.cpp

@ -288,11 +288,11 @@ Standard::set_max_mc(unsigned pwm_value) @@ -288,11 +288,11 @@ Standard::set_max_mc(unsigned pwm_value)
int ret;
unsigned servo_count;
char *dev = PWM_OUTPUT0_DEVICE_PATH;
int fd = open(dev, 0);
int fd = px4_open(dev, 0);
if (fd < 0) {err(1, "can't open %s", dev);}
if (fd < 0) {PX4_WARN("can't open %s", dev);}
ret = ioctl(fd, PWM_SERVO_GET_COUNT, (unsigned long)&servo_count);
ret = px4_ioctl(fd, PWM_SERVO_GET_COUNT, (unsigned long)&servo_count);
struct pwm_output_values pwm_values;
memset(&pwm_values, 0, sizeof(pwm_values));
@ -301,9 +301,9 @@ Standard::set_max_mc(unsigned pwm_value) @@ -301,9 +301,9 @@ Standard::set_max_mc(unsigned pwm_value)
pwm_values.channel_count = _params->vtol_motor_count;
}
ret = ioctl(fd, PWM_SERVO_SET_MAX_PWM, (long unsigned int)&pwm_values);
ret = px4_ioctl(fd, PWM_SERVO_SET_MAX_PWM, (long unsigned int)&pwm_values);
if (ret != OK) {errx(ret, "failed setting max values");}
if (ret != OK) {PX4_WARN("failed setting max values");}
close(fd);
px4_close(fd);
}

2
src/modules/vtol_att_control/tailsitter.cpp

@ -116,7 +116,7 @@ Tailsitter::scale_mc_output() @@ -116,7 +116,7 @@ Tailsitter::scale_mc_output()
float airspeed;
calc_tot_airspeed(); // estimate air velocity seen by elevons
// if airspeed is not updating, we assume the normal average speed
if (bool nonfinite = !isfinite(_airspeed->true_airspeed_m_s) ||
if (bool nonfinite = !PX4_ISFINITE(_airspeed->true_airspeed_m_s) ||
hrt_elapsed_time(&_airspeed->timestamp) > 1e6) {
airspeed = _params->mc_airspeed_trim;
if (nonfinite) {

12
src/modules/vtol_att_control/tiltrotor.cpp

@ -382,11 +382,11 @@ void Tiltrotor::set_rear_motor_state(rear_motor_state state) { @@ -382,11 +382,11 @@ void Tiltrotor::set_rear_motor_state(rear_motor_state state) {
int ret;
unsigned servo_count;
char *dev = PWM_OUTPUT0_DEVICE_PATH;
int fd = open(dev, 0);
int fd = px4_open(dev, 0);
if (fd < 0) {err(1, "can't open %s", dev);}
if (fd < 0) {PX4_WARN("can't open %s", dev);}
ret = ioctl(fd, PWM_SERVO_GET_COUNT, (unsigned long)&servo_count);
ret = px4_ioctl(fd, PWM_SERVO_GET_COUNT, (unsigned long)&servo_count);
struct pwm_output_values pwm_values;
memset(&pwm_values, 0, sizeof(pwm_values));
@ -399,11 +399,11 @@ void Tiltrotor::set_rear_motor_state(rear_motor_state state) { @@ -399,11 +399,11 @@ void Tiltrotor::set_rear_motor_state(rear_motor_state state) {
pwm_values.channel_count = _params->vtol_motor_count;
}
ret = ioctl(fd, PWM_SERVO_SET_MAX_PWM, (long unsigned int)&pwm_values);
ret = px4_ioctl(fd, PWM_SERVO_SET_MAX_PWM, (long unsigned int)&pwm_values);
if (ret != OK) {errx(ret, "failed setting max values");}
if (ret != OK) {PX4_WARN("failed setting max values");}
close(fd);
px4_close(fd);
}
bool Tiltrotor::is_motor_off_channel(const int channel) {

38
src/modules/vtol_att_control/vtol_att_control_main.cpp

@ -150,7 +150,7 @@ VtolAttitudeControl::~VtolAttitudeControl() @@ -150,7 +150,7 @@ VtolAttitudeControl::~VtolAttitudeControl()
/* if we have given up, kill it */
if (++i > 50) {
task_delete(_control_task);
px4_task_delete(_control_task);
break;
}
} while (_control_task != -1);
@ -442,7 +442,7 @@ VtolAttitudeControl::task_main_trampoline(int argc, char *argv[]) @@ -442,7 +442,7 @@ VtolAttitudeControl::task_main_trampoline(int argc, char *argv[])
void VtolAttitudeControl::task_main()
{
warnx("started");
PX4_WARN("started");
fflush(stdout);
/* do subscriptions */
@ -471,7 +471,7 @@ void VtolAttitudeControl::task_main() @@ -471,7 +471,7 @@ void VtolAttitudeControl::task_main()
_vtol_type->set_idle_mc();
/* wakeup source*/
struct pollfd fds[3]; /*input_mc, input_fw, parameters*/
px4_pollfd_struct_t fds[3]; /*input_mc, input_fw, parameters*/
fds[0].fd = _actuator_inputs_mc;
fds[0].events = POLLIN;
@ -491,7 +491,7 @@ void VtolAttitudeControl::task_main() @@ -491,7 +491,7 @@ void VtolAttitudeControl::task_main()
}
/* wait for up to 100ms for data */
int pret = poll(&fds[0], (sizeof(fds) / sizeof(fds[0])), 100);
int pret = px4_poll(&fds[0], (sizeof(fds) / sizeof(fds[0])), 100);
/* timed out - periodic check for _task_should_exit */
@ -633,7 +633,7 @@ void VtolAttitudeControl::task_main() @@ -633,7 +633,7 @@ void VtolAttitudeControl::task_main()
warnx("exit");
_control_task = -1;
_exit(0);
return;
}
int
@ -646,11 +646,11 @@ VtolAttitudeControl::start() @@ -646,11 +646,11 @@ VtolAttitudeControl::start()
SCHED_DEFAULT,
SCHED_PRIORITY_MAX - 10,
2048,
(main_t)&VtolAttitudeControl::task_main_trampoline,
(px4_main_t)&VtolAttitudeControl::task_main_trampoline,
nullptr);
if (_control_task < 0) {
warn("task start failed");
PX4_WARN("task start failed");
return -errno;
}
@ -661,49 +661,53 @@ VtolAttitudeControl::start() @@ -661,49 +661,53 @@ VtolAttitudeControl::start()
int vtol_att_control_main(int argc, char *argv[])
{
if (argc < 2) {
errx(1, "usage: vtol_att_control {start|stop|status}");
PX4_WARN("usage: vtol_att_control {start|stop|status}");
}
if (!strcmp(argv[1], "start")) {
if (VTOL_att_control::g_control != nullptr) {
errx(1, "already running");
PX4_WARN("already running");
return 0;
}
VTOL_att_control::g_control = new VtolAttitudeControl;
if (VTOL_att_control::g_control == nullptr) {
errx(1, "alloc failed");
PX4_WARN("alloc failed");
return 1;
}
if (OK != VTOL_att_control::g_control->start()) {
delete VTOL_att_control::g_control;
VTOL_att_control::g_control = nullptr;
err(1, "start failed");
PX4_WARN("start failed");
return 1;
}
exit(0);
}
if (!strcmp(argv[1], "stop")) {
if (VTOL_att_control::g_control == nullptr) {
errx(1, "not running");
PX4_WARN("not running");
return 0;
}
delete VTOL_att_control::g_control;
VTOL_att_control::g_control = nullptr;
exit(0);
return 0;
}
if (!strcmp(argv[1], "status")) {
if (VTOL_att_control::g_control) {
errx(0, "running");
PX4_WARN("running");
} else {
errx(1, "not running");
PX4_WARN("not running");
}
return 0;
}
warnx("unrecognized command");
PX4_WARN("unrecognized command");
return 1;
}

5
src/modules/vtol_att_control/vtol_att_control_main.h

@ -46,6 +46,10 @@ @@ -46,6 +46,10 @@
#ifndef VTOL_ATT_CONTROL_MAIN_H
#define VTOL_ATT_CONTROL_MAIN_H
#include <px4_config.h>
#include <px4_defines.h>
#include <px4_tasks.h>
#include <px4_posix.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@ -80,7 +84,6 @@ @@ -80,7 +84,6 @@
#include <systemlib/circuit_breaker.h>
#include <lib/mathlib/mathlib.h>
#include <lib/geo/geo.h>
#include <nuttx/fs/ioctl.h>
#include <fcntl.h>
#include "tiltrotor.h"

24
src/modules/vtol_att_control/vtol_type.cpp

@ -40,7 +40,7 @@ @@ -40,7 +40,7 @@
#include "vtol_type.h"
#include "drivers/drv_pwm_output.h"
#include <nuttx/fs/ioctl.h>
#include <px4_defines.h>
#include "vtol_att_control_main.h"
VtolType::VtolType(VtolAttitudeControl *att_controller) :
@ -81,11 +81,11 @@ void VtolType::set_idle_mc() @@ -81,11 +81,11 @@ void VtolType::set_idle_mc()
int ret;
unsigned servo_count;
char *dev = PWM_OUTPUT0_DEVICE_PATH;
int fd = open(dev, 0);
int fd = px4_open(dev, 0);
if (fd < 0) {err(1, "can't open %s", dev);}
if (fd < 0) {PX4_WARN("can't open %s", dev);}
ret = ioctl(fd, PWM_SERVO_GET_COUNT, (unsigned long)&servo_count);
ret = px4_ioctl(fd, PWM_SERVO_GET_COUNT, (unsigned long)&servo_count);
unsigned pwm_value = _params->idle_pwm_mc;
struct pwm_output_values pwm_values;
memset(&pwm_values, 0, sizeof(pwm_values));
@ -95,11 +95,11 @@ void VtolType::set_idle_mc() @@ -95,11 +95,11 @@ void VtolType::set_idle_mc()
pwm_values.channel_count++;
}
ret = ioctl(fd, PWM_SERVO_SET_MIN_PWM, (long unsigned int)&pwm_values);
ret = px4_ioctl(fd, PWM_SERVO_SET_MIN_PWM, (long unsigned int)&pwm_values);
if (ret != OK) {errx(ret, "failed setting min values");}
if (ret != OK) {PX4_WARN("failed setting min values");}
close(fd);
px4_close(fd);
flag_idle_mc = true;
}
@ -111,9 +111,9 @@ void VtolType::set_idle_fw() @@ -111,9 +111,9 @@ void VtolType::set_idle_fw()
{
int ret;
char *dev = PWM_OUTPUT0_DEVICE_PATH;
int fd = open(dev, 0);
int fd = px4_open(dev, 0);
if (fd < 0) {err(1, "can't open %s", dev);}
if (fd < 0) {PX4_WARN("can't open %s", dev);}
unsigned pwm_value = PWM_LOWEST_MIN;
struct pwm_output_values pwm_values;
@ -125,9 +125,9 @@ void VtolType::set_idle_fw() @@ -125,9 +125,9 @@ void VtolType::set_idle_fw()
pwm_values.channel_count++;
}
ret = ioctl(fd, PWM_SERVO_SET_MIN_PWM, (long unsigned int)&pwm_values);
ret = px4_ioctl(fd, PWM_SERVO_SET_MIN_PWM, (long unsigned int)&pwm_values);
if (ret != OK) {errx(ret, "failed setting min values");}
if (ret != OK) {PX4_WARN("failed setting min values");}
close(fd);
px4_close(fd);
}

Loading…
Cancel
Save