#define HMC5883_ADDR_READ 0x3d
#define HMC5883_CONFIG_A 0
+
+#define HMC5883_CONFIG_A_MA 5
+#define HMC5883_CONFIG_A_MA_1 0
+#define HMC5883_CONFIG_A_MA_2 1
+#define HMC5883_CONFIG_A_MA_4 2
+#define HMC5883_CONFIG_A_MA_8 3
+#define HMC5883_CONFIG_A_MA_MASK 3
+
+#define HMC5883_CONFIG_A_DO 2
+#define HMC5883_CONFIG_A_DO_0_75 0
+#define HMC5883_CONFIG_A_DO_1_5 1
+#define HMC5883_CONFIG_A_DO_3 2
+#define HMC5883_CONFIG_A_DO_7_5 3
+#define HMC5883_CONFIG_A_DO_15 4
+#define HMC5883_CONFIG_A_DO_30 5
+#define HMC5883_CONFIG_A_DO_75 6
+#define HMC5883_CONFIG_A_DO_MASK 7
+
+#define HMC5883_CONFIG_A_MS 0
+#define HMC5883_CONFIG_A_MS_NORMAL 0
+#define HMC5883_CONFIG_A_MS_POSITIVE_BIAS 1
+#define HMC5883_CONFIG_A_MS_NEGATIVE_BIAS 2
+#define HMC5883_CONFIG_A_MS_MASK 3
+
#define HMC5883_CONFIG_B 1
+
+#define HMC5883_CONFIG_B_GN 5
+#define HMC5883_CONFIG_B_GN_0_88 0
+#define HMC5883_CONFIG_B_GN_1_3 1
+#define HMC5883_CONFIG_B_GN_1_9 2
+#define HMC5883_CONFIG_B_GN_2_5 3
+#define HMC5883_CONFIG_B_GN_4_0 4
+#define HMC5883_CONFIG_B_GN_4_7 5
+#define HMC5883_CONFIG_B_GN_5_6 6
+#define HMC5883_CONFIG_B_GN_8_1 7
+#define HMC5883_CONFIG_B_GN_MASK 7
+
#define HMC5883_MODE 2
+#define HMC5883_MODE_CONTINUOUS 0
+#define HMC5883_MODE_SINGLE 1
+#define HMC5883_MODE_IDLE 2
+
#define HMC5883_X_MSB 3
#define HMC5883_X_LSB 4
#define HMC5883_Y_MSB 5
#define HMC5883_ID_B 11
#define HMC5883_ID_C 12
+struct ao_hmc5883_sample {
+ int16_t x, y, z;
+};
+
void
ao_hmc5883_init(void);