Go to the documentation of this file.00001
00008
00009
00010
00011
00012
00013
00014
00015 #pragma once
00016
00017
00018
00019 namespace px4 {
00020
00027 union custom_mode {
00028 enum MAIN_MODE : uint8_t {
00029 MAIN_MODE_MANUAL = 1,
00030 MAIN_MODE_ALTCTL,
00031 MAIN_MODE_POSCTL,
00032 MAIN_MODE_AUTO,
00033 MAIN_MODE_ACRO,
00034 MAIN_MODE_OFFBOARD,
00035 };
00036
00037 enum SUB_MODE_AUTO : uint8_t {
00038 SUB_MODE_AUTO_READY = 1,
00039 SUB_MODE_AUTO_TAKEOFF,
00040 SUB_MODE_AUTO_LOITER,
00041 SUB_MODE_AUTO_MISSION,
00042 SUB_MODE_AUTO_RTL,
00043 SUB_MODE_AUTO_LAND,
00044 SUB_MODE_AUTO_RTGS
00045 };
00046
00047 struct {
00048 uint16_t reserved;
00049 uint8_t main_mode;
00050 uint8_t sub_mode;
00051 };
00052 uint32_t data;
00053 float data_float;
00054
00055 custom_mode() : data(0)
00056 { };
00057
00058 explicit custom_mode(uint32_t val) : data(val)
00059 { };
00060
00061 constexpr custom_mode(uint8_t mm, uint8_t sm) :
00062 reserved(0),
00063 main_mode(mm),
00064 sub_mode(sm)
00065 { };
00066 };
00067
00075 constexpr uint32_t define_mode(enum custom_mode::MAIN_MODE mm, uint8_t sm = 0) {
00076 return custom_mode(mm, sm).data;
00077 }
00078
00087 constexpr uint32_t define_mode_auto(enum custom_mode::SUB_MODE_AUTO sm) {
00088 return define_mode(custom_mode::MAIN_MODE_AUTO, sm);
00089 }
00090
00091 };