forked from ArduPilot/ardupilot
/
SIM_QMC5883L.h
53 lines (38 loc) · 1.25 KB
/
SIM_QMC5883L.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#pragma once
#include "SIM_config.h"
#if AP_SIM_COMPASS_QMC5883L_ENABLED
#include "SIM_I2CDevice.h"
namespace SITL {
class QMC5883L : public I2CDevice
{
public:
QMC5883L();
void update(const class Aircraft &aircraft) override;
int rdwr(I2C::i2c_rdwr_ioctl_data *&data) override;
private:
union Registers {
uint8_t byte[256];
struct PACKED ByName {
uint8_t DATA_OUTPUT_X_low;
uint8_t DATA_OUTPUT_X_high;
uint8_t DATA_OUTPUT_Y_low;
uint8_t DATA_OUTPUT_Y_high;
uint8_t DATA_OUTPUT_Z_low;
uint8_t DATA_OUTPUT_Z_high;
uint8_t REG_STATUS;
uint8_t unused1[2]; // unused
uint8_t REG_CONF1;
uint8_t REG_CONF2;
uint8_t ZEROX_ZEROB; // magic register number from driver
uint8_t ZEROX_ZEROC; // magic register from driver should always be 0x01
uint8_t REG_ID;
uint8_t unused2[242];
} byname;
} registers;
// 256 1-byte registers:
assert_storage_size<Registers::ByName, 256> assert_storage_size_registers_reg UNUSED_PRIVATE_MEMBER;
Bitmask<256> writable_registers;
void reset();
};
} // namespace SITL
#endif // AP_SIM_COMPASS_QMC5883L_ENABLED