@@ -38,7 +38,6 @@ void Flight::task(TASK taskname, CallBack TaskCallback, UserData userData)
3838{
3939 taskData.cmdData = taskname;
4040 taskData.cmdSequence ++;
41-
4241 api->send (2 , encrypt, SET_CONTROL, CODE_TASK, (unsigned char *)&taskData, sizeof (taskData),
4342 100 , 3 , TaskCallback ? TaskCallback : Flight::taskCallback, userData);
4443}
@@ -48,14 +47,12 @@ unsigned short Flight::task(TASK taskname, int timeout)
4847 taskData.cmdData = taskname;
4948 taskData.cmdSequence ++;
5049
51- api->send (2 , encrypt, SET_CONTROL, CODE_TASK, (unsigned char *)&taskData, sizeof (taskData),
52- 100 , 3 , 0 , 0 );
53-
54- api->serialDevice ->lockACK ();
55- api->serialDevice ->wait (timeout);
56- api->serialDevice ->freeACK ();
57-
58- return api->missionACKUnion .simpleACK ;
50+ api->send (2 , encrypt, SET_CONTROL, CODE_TASK, (unsigned char *) &taskData, sizeof (taskData),
51+ 100 , 3 , 0 , 0 );
52+ api->serialDevice ->lockACK ();
53+ api->serialDevice ->wait (timeout);
54+ api->serialDevice ->freeACK ();
55+ return api->missionACKUnion .simpleACK ;
5956}
6057
6158void Flight::setArm (bool enable, CallBack ArmCallback, UserData userData)
@@ -96,9 +93,36 @@ void Flight::setMovementControl(uint8_t flag, float32_t x, float32_t y, float32_
9693 data.flag = flag;
9794 data.x = x;
9895 data.y = y;
99- data.z = z;
10096 data.yaw = yaw;
101- api->send (0 , encrypt, SET_CONTROL, CODE_CONTROL, &data, sizeof (FlightData));
97+ if (api->getFwVersion () > MAKE_VERSION (3 ,2 ,0 ,0 ) && api->getFwVersion () < MAKE_VERSION (3 ,2 ,15 ,39 )) {
98+ if (flag & (1 << 4 )) {
99+ if (api->getBroadcastData ().pos .health > 3 ) {
100+ if (api->homepointAltitude != 999999 ) {
101+ data.z = z + api->homepointAltitude ;
102+ api->send (0 , encrypt, SET_CONTROL, CODE_CONTROL, &data, sizeof (FlightData));
103+ }
104+ } else {
105+ API_LOG (api->getDriver (), STATUS_LOG, " Not enough GPS locks, cannot run Movement Control \n " );
106+ }
107+ }
108+ }
109+ else if (api->getFwVersion () == MAKE_VERSION (3 ,2 ,100 ,0 )) {
110+ if (flag & (1 << 4 )) {
111+ if (api->getBroadcastData ().pos .health > 3 ) {
112+ if (api->homepointAltitude != 999999 ) {
113+ data.z = z + api->homepointAltitude ;
114+ api->send (0 , encrypt, SET_CONTROL, CODE_CONTROL, &data, sizeof (FlightData));
115+ }
116+ } else {
117+ API_LOG (api->getDriver (), STATUS_LOG, " Not enough GPS locks, cannot run Movement Control \n " );
118+ }
119+ }
120+ }
121+ else
122+ {
123+ data.z = z;
124+ api->send (0 , encrypt, SET_CONTROL, CODE_CONTROL, &data, sizeof (FlightData));
125+ }
102126}
103127
104128
@@ -213,7 +237,7 @@ void Flight::armCallback(CoreAPI *api, Header *protocolHeader, UserData userData
213237 }
214238}
215239
216- void Flight::taskCallback (CoreAPI *api, Header *protocolHeader, UserData userData __UNUSED )
240+ void Flight::taskCallback (CoreAPI *api, Header *protocolHeader, UserData userData)
217241{
218242 unsigned short ack_data;
219243 if (protocolHeader->length - EXC_DATA_SIZE <= 2 )
0 commit comments