PX4 Firmware
PX4 Autopilot Software http://px4.io
lis3mdl_main.h
Go to the documentation of this file.
1 /****************************************************************************
2  *
3  * Copyright (c) 2015 PX4 Development Team. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in
13  * the documentation and/or other materials provided with the
14  * distribution.
15  * 3. Neither the name PX4 nor the names of its contributors may be
16  * used to endorse or promote products derived from this software
17  * without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
22  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
23  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
24  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
25  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
26  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30  * POSSIBILITY OF SUCH DAMAGE.
31  *
32  ****************************************************************************/
33 
34 /**
35  * @file lis3mdl_main.h
36  */
37 
38 #pragma once
39 
40 #include "lis3mdl.h"
41 
42 namespace lis3mdl
43 {
44 /**
45  * @struct List of supported bus configurations
46  */
49  const char *devpath;
51  uint8_t busnum;
53 } bus_options[] = {
54 #ifdef PX4_I2C_BUS_EXPANSION
55  { LIS3MDL_BUS_I2C_EXTERNAL, "/dev/lis3mdl_ext", &LIS3MDL_I2C_interface, PX4_I2C_BUS_EXPANSION, NULL },
56 #endif /* PX4_I2C_BUS_EXPANSION */
57 #ifdef PX4_I2C_BUS_EXPANSION1
58  { LIS3MDL_BUS_I2C_EXTERNAL, "/dev/lis3mdl_ext1", &LIS3MDL_I2C_interface, PX4_I2C_BUS_EXPANSION1, NULL },
59 #endif /* PX4_I2C_BUS_EXPANSION1 */
60 #ifdef PX4_I2C_BUS_EXPANSION2
61  { LIS3MDL_BUS_I2C_EXTERNAL, "/dev/lis3mdl_ext2", &LIS3MDL_I2C_interface, PX4_I2C_BUS_EXPANSION2, NULL },
62 #endif /* PX4_I2C_BUS_EXPANSION2 */
63 #ifdef PX4_I2C_BUS_ONBOARD
64  { LIS3MDL_BUS_I2C_INTERNAL, "/dev/lis3mdl_int", &LIS3MDL_I2C_interface, PX4_I2C_BUS_ONBOARD, NULL },
65 #endif /* PX4_I2C_BUS_ONBOARD */
66 #ifdef PX4_SPIDEV_LIS
67  { LIS3MDL_BUS_SPI, "/dev/lis3mdl_spi", &LIS3MDL_SPI_interface, PX4_SPI_BUS_SENSORS, NULL },
68 #endif /* PX4_SPIDEV_LIS */
69 };
70 
71 /**
72  * @brief Calibrate and self test. Self test feature cannot be used to calculate scale.
73  *
74  * SELF TEST OPERATION
75  * Note: To check the LIS3MDL for proper operation, a self test feature is incorporated :
76  * sensor offset straps are excited to create a nominal field strength
77  * (bias field) to be measured. To implement self test, the least significant bits
78  * (MS1 and MS0) of configuration register A are changed from 00 to 01 (positive bias).
79  * A few measurements are taken and stored with and without the additional magnetic
80  * field. According to ST datasheet, those values must stay between thresholds in order
81  * to pass the self test.
82  */
83 int calibrate(struct lis3mdl_bus_option &bus);
84 
85 /**
86  * @brief Prints info about the driver.
87  */
88 int info(struct lis3mdl_bus_option &bus);
89 
90 /**
91  * @brief Initializes the driver -- sets defaults and starts a cycle
92  */
93 int init(struct lis3mdl_bus_option &bus);
94 
95 /**
96  * @brief Resets the driver.
97  */
98 int reset(struct lis3mdl_bus_option &bus);
99 
100 /**
101  * @brief Starts the driver for a specific bus option
102  */
103 int start_bus(struct lis3mdl_bus_option &bus, Rotation rotation);
104 
105 /**
106  * @brief Starts the driver. This function call only returns once the driver
107  * is either successfully up and running or failed to start.
108  */
109 int start(struct lis3mdl_bus_option &bus, Rotation rotation);
110 
111 /**
112  * @brief Stop the driver.
113  */
114 int stop(struct lis3mdl_bus_option &bus);
115 
116 /**
117  * @brief Perform some basic functional tests on the driver;
118  * make sure we can collect data from the sensor in polled
119  * and automatic modes.
120  */
121 int test(struct lis3mdl_bus_option &bus);
122 
123 /**
124  * @brief Prints info about the driver argument usage.
125  */
126 void usage();
127 
128 } // namespace lis3mdl
int init(struct lis3mdl_bus_option &bus)
Initializes the driver – sets defaults and starts a cycle.
struct lis3mdl::lis3mdl_bus_option bus_options[]
int reset(struct lis3mdl_bus_option &bus)
Resets the driver.
LIS3MDL_constructor interface_constructor
Definition: lis3mdl_main.h:50
LIS3MDL_BUS
Definition: lis3mdl.h:98
device::Device *(* LIS3MDL_constructor)(int)
Definition: lis3mdl.h:96
Rotation
Enum for board and external compass rotations.
Definition: rotation.h:51
Shared defines for the LIS3MDL driver.
device::Device * LIS3MDL_SPI_interface(int bus)
int info(struct lis3mdl_bus_option &bus)
Prints info about the driver.
void usage()
Prints info about the driver argument usage.
int calibrate(struct lis3mdl_bus_option &bus)
Calibrate and self test.
device::Device * LIS3MDL_I2C_interface(int bus)
int stop(struct lis3mdl_bus_option &bus)
Stop the driver.
int test(struct lis3mdl_bus_option &bus)
Perform some basic functional tests on the driver; make sure we can collect data from the sensor in p...
int start(struct lis3mdl_bus_option &bus, Rotation rotation)
Starts the driver.
int start_bus(struct lis3mdl_bus_option &bus, Rotation rotation)
Starts the driver for a specific bus option.