Position hold depends on GPS (#14101)
[betaflight.git] / src / main / drivers / compass / compass_virtual.c
blob4136b7fdbb8a360b098926f9221331a95c99a951
1 /*
2 * This file is part of Cleanflight and Betaflight.
4 * Cleanflight and Betaflight are free software. You can redistribute
5 * this software and/or modify this software under the terms of the
6 * GNU General Public License as published by the Free Software
7 * Foundation, either version 3 of the License, or (at your option)
8 * any later version.
10 * Cleanflight and Betaflight are distributed in the hope that they
11 * will be useful, but WITHOUT ANY WARRANTY; without even the implied
12 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13 * See the GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this software.
18 * If not, see <http://www.gnu.org/licenses/>.
21 #include <stdbool.h>
22 #include <stdint.h>
24 #include "platform.h"
26 #ifdef USE_VIRTUAL_MAG
28 #include "build/build_config.h"
30 #include "common/axis.h"
31 #include "common/utils.h"
33 #include "compass.h"
34 #include "compass_virtual.h"
36 static int16_t virtualMagData[XYZ_AXIS_COUNT];
38 static bool virtualMagInit(magDev_t *mag)
40 UNUSED(mag);
42 // initially point north
43 virtualMagData[X] = 4096;
44 virtualMagData[Y] = 0;
45 virtualMagData[Z] = 0;
46 return true;
49 void virtualMagSet(int16_t x, int16_t y, int16_t z)
51 virtualMagData[X] = x;
52 virtualMagData[Y] = y;
53 virtualMagData[Z] = z;
56 static bool virtualMagRead(magDev_t *mag, int16_t *magData)
58 UNUSED(mag);
60 magData[X] = virtualMagData[X];
61 magData[Y] = virtualMagData[Y];
62 magData[Z] = virtualMagData[Z];
63 return true;
66 bool virtualMagDetect(magDev_t *mag)
68 mag->init = virtualMagInit;
69 mag->read = virtualMagRead;
70 return true;
72 #endif // USE_VIRTUAL_MAG