Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .vscode/cmake-variants.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ CONFIG:
buildType: RelWithDebInfo
settings:
CONFIG: px4_sitl_default
px4_sitl_evl4:
short: px4_sitl_evl4
buildType: RelWithDebInfo
settings:
CONFIG: px4_sitl_evl4
px4_sitl_nolockstep:
short: px4_sitl_nolockstep
buildType: RelWithDebInfo
Expand Down Expand Up @@ -426,3 +431,8 @@ CONFIG:
buildType: MinSizeRel
settings:
CONFIG: x-mav_ap-h743v2_default
radxa_rock5b_default:
short: radxa_rock5b
buildType: RelWithDebInfo
settings:
CONFIG: radxa_rock5b_default
6 changes: 6 additions & 0 deletions Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,12 @@ menu "Toolchain"
help
Board Platform is running the Linux operating system

config BOARD_EVL4_TARGET
bool "EVL4 OS Target"
depends on PLATFORM_POSIX
help
Board Platform is running the EVL4 operating system

config BOARD_TOOLCHAIN
string "Toolchain"
default ""
Expand Down
87 changes: 87 additions & 0 deletions boards/px4/sitl/evl4.px4board
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
CONFIG_PLATFORM_POSIX=y
CONFIG_BOARD_NOLOCKSTEP=y
CONFIG_BOARD_EVL4_TARGET=y
CONFIG_BOARD_TESTING=y
CONFIG_BOARD_ETHERNET=y
CONFIG_BOARD_ROOT_PATH="."
CONFIG_DRIVERS_CAMERA_TRIGGER=y
CONFIG_DRIVERS_GPS=y
CONFIG_DRIVERS_OSD_MSP_OSD=y
CONFIG_DRIVERS_TONE_ALARM=y
CONFIG_MODULES_AIRSHIP_ATT_CONTROL=y
CONFIG_MODULES_AIRSPEED_SELECTOR=y
CONFIG_MODULES_ATTITUDE_ESTIMATOR_Q=y
CONFIG_MODULES_CAMERA_FEEDBACK=y
CONFIG_MODULES_COMMANDER=y
CONFIG_MODULES_CONTROL_ALLOCATOR=y
CONFIG_MODULES_DATAMAN=y
CONFIG_MODULES_EKF2=y
CONFIG_EKF2_VERBOSE_STATUS=y
CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_FIGURE_OF_EIGHT=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
CONFIG_MODULES_GYRO_FFT=y
CONFIG_MODULES_LAND_DETECTOR=y
CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=y
CONFIG_MODULES_LOAD_MON=y
CONFIG_MODULES_LOCAL_POSITION_ESTIMATOR=y
CONFIG_MODULES_LOGGER=y
CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MAVLINK=y
CONFIG_MAVLINK_DIALECT="development"
CONFIG_MODULES_MC_ATT_CONTROL=y
CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
CONFIG_MODULES_MC_POS_CONTROL=y
CONFIG_MODULES_MC_RATE_CONTROL=y
CONFIG_MODULES_NAVIGATOR=y
CONFIG_MODE_NAVIGATOR_VTOL_TAKEOFF=y
CONFIG_MODULES_PAYLOAD_DELIVERER=y
CONFIG_MODULES_RC_UPDATE=y
CONFIG_MODULES_REPLAY=y
CONFIG_MODULES_ROVER_ACKERMANN=y
CONFIG_MODULES_ROVER_DIFFERENTIAL=y
CONFIG_MODULES_ROVER_MECANUM=y
CONFIG_MODULES_ROVER_POS_CONTROL=y
CONFIG_MODULES_SENSORS=y
CONFIG_COMMON_SIMULATION=y
CONFIG_MODULES_SIMULATION_GZ_MSGS=y
CONFIG_MODULES_SIMULATION_GZ_BRIDGE=y
CONFIG_MODULES_SIMULATION_GZ_PLUGINS=y
CONFIG_MODULES_SIMULATION_SENSOR_AGP_SIM=y
CONFIG_MODULES_TEMPERATURE_COMPENSATION=y
CONFIG_MODULES_UUV_ATT_CONTROL=y
CONFIG_MODULES_UUV_POS_CONTROL=y
CONFIG_MODULES_UXRCE_DDS_CLIENT=y
CONFIG_MODULES_VTOL_ATT_CONTROL=y
CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y
CONFIG_SYSTEMCMDS_BSONDUMP=y
CONFIG_SYSTEMCMDS_DYN=y
CONFIG_SYSTEMCMDS_FAILURE=y
CONFIG_SYSTEMCMDS_LED_CONTROL=y
CONFIG_SYSTEMCMDS_PARAM=y
CONFIG_SYSTEMCMDS_PERF=y
CONFIG_SYSTEMCMDS_SD_BENCH=y
CONFIG_SYSTEMCMDS_SHUTDOWN=y
CONFIG_SYSTEMCMDS_SYSTEM_TIME=y
CONFIG_SYSTEMCMDS_TOPIC_LISTENER=y
CONFIG_SYSTEMCMDS_TUNE_CONTROL=y
CONFIG_SYSTEMCMDS_UORB=y
CONFIG_SYSTEMCMDS_VER=y
CONFIG_SYSTEMCMDS_WORK_QUEUE=y
CONFIG_EXAMPLES_DYN_HELLO=y
CONFIG_EXAMPLES_FAKE_GPS=y
CONFIG_EXAMPLES_FAKE_IMU=y
CONFIG_EXAMPLES_FAKE_MAGNETOMETER=y
CONFIG_EXAMPLES_HELLO=y
CONFIG_EXAMPLES_PX4_MAVLINK_DEBUG=y
CONFIG_EXAMPLES_PX4_SIMPLE_APP=y
CONFIG_EXAMPLES_WORK_ITEM=y
CONFIG_MODULES_SPACECRAFT=n
1 change: 1 addition & 0 deletions boards/px4/sitl/test.px4board
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
CONFIG_BOARD_NOLOCKSTEP=y
CONFIG_BOARD_EVL4_TARGET=y
CONFIG_DRIVERS_DISTANCE_SENSOR_LIGHTWARE_LASER_SERIAL=y
1 change: 0 additions & 1 deletion boards/radxa/rock5b/default.px4board
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
CONFIG_PLATFORM_POSIX=y
CONFIG_BOARD_LINUX_TARGET=y
CONFIG_BOARD_EVL4_TARGET=y
CONFIG_BOARD_TOOLCHAIN="aarch64-linux-gnu"
CONFIG_BOARD_ARCHITECTURE="rk3588s2"
CONFIG_COMMON_BAROMETERS=y
Expand Down
73 changes: 73 additions & 0 deletions boards/radxa/rock5b/evl.px4board
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
CONFIG_PLATFORM_POSIX=y
CONFIG_BOARD_LINUX_TARGET=y
CONFIG_BOARD_EVL4_TARGET=y
CONFIG_BOARD_TOOLCHAIN="aarch64-linux-gnu"
CONFIG_BOARD_ARCHITECTURE="rk3588s2"
CONFIG_COMMON_BAROMETERS=y
CONFIG_DRIVERS_BATT_SMBUS=y
CONFIG_DRIVERS_CAMERA_TRIGGER=y
CONFIG_COMMON_DISTANCE_SENSOR=y
CONFIG_DRIVERS_GPS=y
CONFIG_COMMON_IMU=y
CONFIG_COMMON_MAGNETOMETER=y
CONFIG_BOARD_ROOT_PATH="."
CONFIG_DRIVERS_LINUX_PWM_OUT=y
CONFIG_DRIVERS_IMU_INVENSENSE_ICM20602=y
CONFIG_DRIVERS_BAROMETER_GOERTEK_SPL06=y
CONFIG_DRIVERS_MAGNETOMETER_QMC5883L=y
CONFIG_DRIVERS_RC_INPUT=y
CONFIG_DRIVERS_SMART_BATTERY_BATMON=y
CONFIG_MODULES_AIRSPEED_SELECTOR=y
CONFIG_MODULES_ATTITUDE_ESTIMATOR_Q=y
CONFIG_MODULES_BATTERY_STATUS=y
CONFIG_MODULES_CAMERA_FEEDBACK=y
CONFIG_MODULES_COMMANDER=y
CONFIG_MODULES_CONTROL_ALLOCATOR=y
CONFIG_MODULES_DATAMAN=y
CONFIG_MODULES_EKF2=y
CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
CONFIG_MODULES_GYRO_FFT=y
CONFIG_MODULES_LAND_DETECTOR=y
CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=y
CONFIG_MODULES_LOAD_MON=y
CONFIG_MODULES_LOCAL_POSITION_ESTIMATOR=y
CONFIG_MODULES_LOGGER=y
CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MAVLINK=y
CONFIG_MODULES_MC_ATT_CONTROL=y
CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
CONFIG_MODULES_MC_POS_CONTROL=y
CONFIG_MODULES_MC_RATE_CONTROL=y
CONFIG_MODULES_NAVIGATOR=y
CONFIG_MODULES_RC_UPDATE=y
CONFIG_MODULES_ROVER_POS_CONTROL=y
CONFIG_MODULES_SENSORS=y
CONFIG_MODULES_SIMULATION_BATTERY_SIMULATOR=y
CONFIG_MODULES_SIMULATION_SIMULATOR_MAVLINK=y
CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y
CONFIG_MODULES_TEMPERATURE_COMPENSATION=y
CONFIG_MODULES_UUV_ATT_CONTROL=y
CONFIG_MODULES_UUV_POS_CONTROL=y
CONFIG_MODULES_VTOL_ATT_CONTROL=y
CONFIG_SYSTEMCMDS_BSONDUMP=y
CONFIG_SYSTEMCMDS_DYN=y
CONFIG_SYSTEMCMDS_LED_CONTROL=y
CONFIG_SYSTEMCMDS_PARAM=y
CONFIG_SYSTEMCMDS_PERF=y
CONFIG_SYSTEMCMDS_SD_BENCH=y
CONFIG_SYSTEMCMDS_SHUTDOWN=y
CONFIG_SYSTEMCMDS_SYSTEM_TIME=y
CONFIG_SYSTEMCMDS_TOPIC_LISTENER=y
CONFIG_SYSTEMCMDS_TUNE_CONTROL=y
CONFIG_SYSTEMCMDS_UORB=y
CONFIG_SYSTEMCMDS_VER=y
CONFIG_SYSTEMCMDS_WORK_QUEUE=y
4 changes: 4 additions & 0 deletions boards/radxa/rock5b/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@
#
############################################################################

if(EVL4_TARGET)
add_definitions( "-D__PX4_EVL4" )
endif()

add_library(drivers_board
i2c.cpp
spi.cpp
Expand Down
59 changes: 59 additions & 0 deletions boards/radxa/rock5b/src/board_pwm_out.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,20 @@
#include <unistd.h>
#include <px4_platform_common/log.h>

#ifdef __PX4_EVL4
#include <evl/syscall.h>
#include <linux/pwm.h>
#include <string.h>
#endif

using namespace pwm_out;

const char RockSysfsPWMOut::_device[] = "/sys/class/pwm/pwmchip";

#if defined(__PX4_EVL4)
const char RockSysfsPWMOut::_oob_device[] = "/dev/pwm";
#endif

RockSysfsPWMOut::RockSysfsPWMOut(int max_num_outputs)
{
if (max_num_outputs > MAX_NUM_PWM) {
Expand Down Expand Up @@ -115,6 +125,26 @@ int RockSysfsPWMOut::init()
return 0;
}

#ifdef __PX4_EVL4
int RockSysfsPWMOut::oob_init()
{
int i;
char path[128];

for (i = 0; i < _pwm_num; ++i) {
::snprintf(path, sizeof(path), "%s%d", _oob_device, i>0?i+1:0); // 1 is pwm fan
_pwm_fd[i] = ::open(path, O_WRONLY | 010000000000);

if (_pwm_fd[i] == -1) {
PX4_ERR("PWM: Failed to open %s. error: %s", path, strerror(errno));
return -errno;
}
}

return 0;
}
#endif

int RockSysfsPWMOut::send_output_pwm(const uint16_t *pwm, int num_outputs)
{
char data[16];
Expand All @@ -138,6 +168,35 @@ int RockSysfsPWMOut::send_output_pwm(const uint16_t *pwm, int num_outputs)
return ret;
}

#ifdef __PX4_EVL4
int RockSysfsPWMOut::oob_send_output_pwm(const uint16_t *pwm, int num_outputs)
{
if (num_outputs > _pwm_num) {
num_outputs = _pwm_num;
}

int ret = 0;
struct pwm_state_request req;

req.enabled = true;
req.polarity = PWM_UAPI_POLARITY_NORMAL;
req.period = (int)1e9 / FREQUENCY_PWM;

//convert this to duty_cycle in ns
for (int i = 0; i < num_outputs; ++i) {
req.duty_cycle = pwm[i] * 1000;
ret = ioctl(_pwm_fd[i], PWM_SET_STATE_IOCTL, &req);

if (ret < 0) {
PX4_ERR("PWM: Failed to oob_set duty cycle. error: %s", strerror(errno));
return -errno;
}
}

return ret;
}
#endif

int RockSysfsPWMOut::pwm_write_sysfs(char *path, int value)
{
int fd = ::open(path, O_WRONLY | O_CLOEXEC);
Expand Down
8 changes: 8 additions & 0 deletions boards/radxa/rock5b/src/board_pwm_out.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,11 @@ class RockSysfsPWMOut : public PWMOutBase

int send_output_pwm(const uint16_t *pwm, int num_outputs) override;

#ifdef __PX4_EVL4
int oob_init() override;
int oob_send_output_pwm(const uint16_t *pwm, int num_outputs) override;
#endif

private:
int pwm_write_sysfs(char *path, int value);
int pwm_write_sysfs_str(char *path,const char* s, int n);
Expand All @@ -64,6 +69,9 @@ class RockSysfsPWMOut : public PWMOutBase
int _pwm_num;

static const char _device[];
#ifdef __PX4_EVL4
static const char _oob_device[];
#endif
};

}
4 changes: 4 additions & 0 deletions cmake/kconfig.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,10 @@ if(EXISTS ${BOARD_DEFCONFIG})
add_definitions( "-D__PX4_LINUX" )
endif()

if(EVL4_TARGET)
add_definitions( "-D__PX4_EVL4" )
endif()

if(LOCKSTEP)
set(ENABLE_LOCKSTEP_SCHEDULER yes)
endif()
Expand Down
2 changes: 2 additions & 0 deletions platforms/common/include/px4_platform_common/board_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,8 @@ typedef enum PX4_SOC_ARCH_ID_t {

PX4_SOC_ARCH_ID_VOXL2 = 0x100A,

PX4_SOC_ARCH_ID_RADXA = 0x1010,

} PX4_SOC_ARCH_ID_t;


Expand Down
Loading
Loading