Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef _DJI2MAV_WAYPOINTLIST_H_
00010 #define _DJI2MAV_WAYPOINTLIST_H_
00011
00012
00013 #include "dji_sdk_dji2mav/log.h"
00014
00015 namespace dji2mav {
00016
00017 class WaypointList {
00018 public:
00019 WaypointList() {
00020 m_listSize = 0;
00021 m_targetIdx = -1;
00022 }
00023
00024
00025 ~WaypointList() {
00026 }
00027
00028
00029 inline const float ( *getWaypointList() )[7] {
00030 return m_wpList;
00031 }
00032
00033
00034 inline uint16_t getListSize() {
00035 return m_listSize;
00036 }
00037
00038
00039 inline void setListSize(const uint16_t size) {
00040 m_listSize = size;
00041 }
00042
00043
00044 inline uint16_t getTargetIdx() {
00045 return m_targetIdx;
00046 }
00047
00048
00049 inline void setTargetIdx(uint16_t targetIdx) {
00050 m_targetIdx = targetIdx;
00051 }
00052
00053
00054 inline void readyToUpload() {
00055 m_targetIdx = 0;
00056 }
00057
00058
00059 inline void readyToDownload() {
00060 m_targetIdx = 0;
00061 }
00062
00063
00064 inline void finishUpload() {
00065 if(m_targetIdx != m_listSize) {
00066 DJI2MAV_ERROR("Uploaded waypoint list size %u doesn't "
00067 "matched the one %u that is set while init!",
00068 m_targetIdx, m_listSize);
00069 }
00070 m_targetIdx = -1;
00071 }
00072
00073
00074 inline bool isDownloadFinished() {
00075 if(m_targetIdx == m_listSize) {
00076 m_targetIdx = -1;
00077 return true;
00078 } else {
00079 return false;
00080 }
00081 }
00082
00083
00084 inline bool isValidIdx(uint16_t idx) {
00085 return (idx < m_listSize);
00086 }
00087
00088
00089 void getWaypointData(uint16_t idx, uint16_t &cmd,
00090 float ¶m1, float ¶m2, float ¶m3,
00091 float ¶m4, float &lat, float &lon, float &alt) {
00092
00093 cmd = m_cmd[idx];
00094 param1 = m_wpList[idx][0];
00095 param2 = m_wpList[idx][1];
00096 param3 = m_wpList[idx][2];
00097 param4 = m_wpList[idx][3];
00098 lat = m_wpList[idx][4];
00099 lon = m_wpList[idx][5];
00100 alt = m_wpList[idx][6];
00101
00102 ++m_targetIdx;
00103
00104 }
00105
00106
00107 void setWaypointData(uint16_t idx, uint16_t cmd, float param1,
00108 float param2, float ¶m3, float param4, float lat,
00109 float lon, float alt) {
00110
00111 m_cmd[idx] = cmd;
00112 m_wpList[idx][0] = param1;
00113 m_wpList[idx][1] = param2;
00114 m_wpList[idx][2] = param3;
00115 m_wpList[idx][3] = param4;
00116 m_wpList[idx][4] = lat;
00117 m_wpList[idx][5] = lon;
00118 m_wpList[idx][6] = alt;
00119
00120 ++m_targetIdx;
00121
00122 }
00123
00124
00125 inline uint16_t getWaypointCmd(uint16_t idx) {
00126 return m_cmd[idx];
00127 }
00128
00129
00130 inline void setWaypointCmd(uint16_t idx, uint16_t cmd) {
00131 m_cmd[idx] = cmd;
00132 }
00133
00134
00135 inline float getWaypointParam1(uint16_t idx) {
00136 return m_wpList[idx][0];
00137 }
00138
00139
00140 inline void setWaypointParam1(uint16_t idx, float param1) {
00141 m_wpList[idx][0] = param1;
00142 }
00143
00144
00145 inline float getWaypointParam2(uint16_t idx) {
00146 return m_wpList[idx][1];
00147 }
00148
00149
00150 inline void setWaypointParam2(uint16_t idx, float param2) {
00151 m_wpList[idx][1] = param2;
00152 }
00153
00154
00155 inline float getWaypointParam3(uint16_t idx) {
00156 return m_wpList[idx][2];
00157 }
00158
00159
00160 inline void setWaypointParam3(uint16_t idx, float param3) {
00161 m_wpList[idx][2] = param3;
00162 }
00163
00164
00165 inline float getWaypointParam4(uint16_t idx) {
00166 return m_wpList[idx][3];
00167 }
00168
00169
00170 inline void setWaypointParam4(uint16_t idx, float param4) {
00171 m_wpList[idx][3] = param4;
00172 }
00173
00174
00175 inline float getWaypointLat(uint16_t idx) {
00176 return m_wpList[idx][4];
00177 }
00178
00179
00180 inline void setWaypointLat(uint16_t idx, float lat) {
00181 m_wpList[idx][4] = lat;
00182 }
00183
00184
00185 inline float getWaypointLon(uint16_t idx) {
00186 return m_wpList[idx][5];
00187 }
00188
00189
00190 inline void setWaypointLon(uint16_t idx, float lon) {
00191 m_wpList[idx][5] = lon;
00192 }
00193
00194
00195 inline float getWaypointAlt(uint16_t idx) {
00196 return m_wpList[idx][5];
00197 }
00198
00199
00200 inline void setWaypointAlt(uint16_t idx, float alt) {
00201 m_wpList[idx][5] = alt;
00202 }
00203
00204
00205 inline float getWpHeading(uint16_t idx) {
00206 return getWaypointParam4(idx);
00207 }
00208
00209
00210 inline void setWpHeading(uint16_t idx, float heading) {
00211 setWpHeading(idx, heading);
00212 }
00213
00214
00215 inline float getWpStaytime(uint16_t idx) {
00216 return getWaypointParam1(idx);
00217 }
00218
00219
00220 inline void setWpStaytime(uint16_t idx, float staytime) {
00221 setWaypointParam1(idx, staytime);
00222 }
00223
00224
00225 bool clearMission() {
00226 m_listSize = 0;
00227 m_targetIdx = -1;
00228 }
00229
00230
00231 void displayMission() {
00232 DJI2MAV_INFO("Display the full waypoint mission:");
00233 for(uint16_t i = 0; i < m_listSize; ++i) {
00234 DJI2MAV_INFO("Index %d: param1 %f, param2 %f, param3 %f, "
00235 "param4 %f, lat %f, lon %f, alt %f", i,
00236 m_wpList[i][0], m_wpList[i][1], m_wpList[i][2],
00237 m_wpList[i][3], m_wpList[i][4], m_wpList[i][5],
00238 m_wpList[i][6]);
00239 }
00240 DJI2MAV_INFO("--- End of display ---");
00241 }
00242
00243
00244 private:
00245 float m_wpList[100][7];
00246 uint16_t m_cmd[100];
00247 uint16_t m_listSize;
00248 int m_targetIdx;
00249
00250 };
00251
00252 }
00253
00254
00255 #endif