LibDriver QMC5883L
Loading...
Searching...
No Matches
driver_qmc5883l_read_test.c
Go to the documentation of this file.
1
36
38
39static qmc5883l_handle_t gs_handle;
40
49uint8_t qmc5883l_read_test(uint32_t times)
50{
51 uint8_t res;
52 uint32_t i;
53 int16_t raw[3];
54 float m_gauss[3];
55 int16_t raw_deg;
56 float deg;
57 qmc5883l_info_t info;
58
59 /* link interface function */
67
68 /* get qmc5883l info */
69 res = qmc5883l_info(&info);
70 if (res != 0)
71 {
72 qmc5883l_interface_debug_print("qmc5883l: get info failed.\n");
73
74 return 1;
75 }
76 else
77 {
78 /* print chip information */
79 qmc5883l_interface_debug_print("qmc5883l: chip is %s.\n", info.chip_name);
80 qmc5883l_interface_debug_print("qmc5883l: manufacturer is %s.\n", info.manufacturer_name);
81 qmc5883l_interface_debug_print("qmc5883l: interface is %s.\n", info.interface);
82 qmc5883l_interface_debug_print("qmc5883l: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
83 qmc5883l_interface_debug_print("qmc5883l: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
84 qmc5883l_interface_debug_print("qmc5883l: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
85 qmc5883l_interface_debug_print("qmc5883l: max current is %0.2fmA.\n", info.max_current_ma);
86 qmc5883l_interface_debug_print("qmc5883l: max temperature is %0.1fC.\n", info.temperature_max);
87 qmc5883l_interface_debug_print("qmc5883l: min temperature is %0.1fC.\n", info.temperature_min);
88 }
89
90 /* qmc5883l init */
91 res = qmc5883l_init(&gs_handle);
92 if (res != 0)
93 {
94 qmc5883l_interface_debug_print("qmc5883l: init failed.\n");
95
96 return 1;
97 }
98
99 /* set output rate 10Hz */
101 if (res != 0)
102 {
103 qmc5883l_interface_debug_print("qmc5883l: set output rate failed.\n");
104 (void)qmc5883l_deinit(&gs_handle);
105
106 return 1;
107 }
108
109 /* set full scale 2gauss */
111 if (res != 0)
112 {
113 qmc5883l_interface_debug_print("qmc5883l: set full scale failed.\n");
114 (void)qmc5883l_deinit(&gs_handle);
115
116 return 1;
117 }
118
119 /* set over sample 512 */
121 if (res != 0)
122 {
123 qmc5883l_interface_debug_print("qmc5883l: set over sample failed.\n");
124 (void)qmc5883l_deinit(&gs_handle);
125
126 return 1;
127 }
128
129 /* disable interrupt */
131 if (res != 0)
132 {
133 qmc5883l_interface_debug_print("qmc5883l: set interrupt failed.\n");
134 (void)qmc5883l_deinit(&gs_handle);
135
136 return 1;
137 }
138
139 /* enable pointer roll over */
141 if (res != 0)
142 {
143 qmc5883l_interface_debug_print("qmc5883l: set pointer roll over failed.\n");
144 (void)qmc5883l_deinit(&gs_handle);
145
146 return 1;
147 }
148
149 /* set 0x01 */
150 res = qmc5883l_set_period(&gs_handle, 0x01);
151 if (res != 0)
152 {
153 qmc5883l_interface_debug_print("qmc5883l: set period failed.\n");
154 (void)qmc5883l_deinit(&gs_handle);
155
156 return 1;
157 }
158
159 /* set continuous mode */
161 if (res != 0)
162 {
163 qmc5883l_interface_debug_print("qmc5883l: set mode failed.\n");
164 (void)qmc5883l_deinit(&gs_handle);
165
166 return 1;
167 }
168
169 /* output */
170 qmc5883l_interface_debug_print("qmc5883l: 2gauss full scale test.\n");
171
172 for (i = 0; i < times; i++)
173 {
174 /* delay 1 s*/
176
177 /* read */
178 res = qmc5883l_read(&gs_handle, (int16_t *)raw, m_gauss);
179 if (res != 0)
180 {
181 qmc5883l_interface_debug_print("qmc5883l: read failed.\n");
182 (void)qmc5883l_deinit(&gs_handle);
183
184 return 1;
185 }
186
187 /* read temperature */
188 res = qmc5883l_read_temperature(&gs_handle, &raw_deg, &deg);
189 if (res != 0)
190 {
191 qmc5883l_interface_debug_print("qmc5883l: read temperature failed.\n");
192 (void)qmc5883l_deinit(&gs_handle);
193
194 return 1;
195 }
196
197 /* print result */
198 qmc5883l_interface_debug_print("qmc5883l: read x %.2f m_gauss.\n", m_gauss[0]);
199 qmc5883l_interface_debug_print("qmc5883l: read y %.2f m_gauss.\n", m_gauss[1]);
200 qmc5883l_interface_debug_print("qmc5883l: read z %.2f m_gauss.\n", m_gauss[2]);
201 qmc5883l_interface_debug_print("qmc5883l: temperature %.2fC.\n", deg + 30.0f);
202 }
203
204 /* set full scale 8gauss */
206 if (res != 0)
207 {
208 qmc5883l_interface_debug_print("qmc5883l: set full scale failed.\n");
209 (void)qmc5883l_deinit(&gs_handle);
210
211 return 1;
212 }
213
214 /* output */
215 qmc5883l_interface_debug_print("qmc5883l: 8gauss full scale test.\n");
216
217 for (i = 0; i < times; i++)
218 {
219 /* delay 1 s*/
221
222 /* read */
223 res = qmc5883l_read(&gs_handle, (int16_t *)raw, m_gauss);
224 if (res != 0)
225 {
226 qmc5883l_interface_debug_print("qmc5883l: read failed.\n");
227 (void)qmc5883l_deinit(&gs_handle);
228
229 return 1;
230 }
231
232 /* read temperature */
233 res = qmc5883l_read_temperature(&gs_handle, &raw_deg, &deg);
234 if (res != 0)
235 {
236 qmc5883l_interface_debug_print("qmc5883l: read temperature failed.\n");
237 (void)qmc5883l_deinit(&gs_handle);
238
239 return 1;
240 }
241
242 /* print result */
243 qmc5883l_interface_debug_print("qmc5883l: read x %.2f m_gauss.\n", m_gauss[0]);
244 qmc5883l_interface_debug_print("qmc5883l: read y %.2f m_gauss.\n", m_gauss[1]);
245 qmc5883l_interface_debug_print("qmc5883l: read z %.2f m_gauss.\n", m_gauss[2]);
246 qmc5883l_interface_debug_print("qmc5883l: temperature %.2fC.\n", deg + 30.0f);
247 }
248
249 /* finish read test */
250 qmc5883l_interface_debug_print("qmc5883l: finish read test.\n");
251 (void)qmc5883l_deinit(&gs_handle);
252
253 return 0;
254}
driver qmc5883l read test header file
uint8_t qmc5883l_set_full_scale(qmc5883l_handle_t *handle, qmc5883l_full_scale_t scale)
set the full scale
uint8_t qmc5883l_read(qmc5883l_handle_t *handle, int16_t raw[3], float m_gauss[3])
read data
uint8_t qmc5883l_set_over_sample(qmc5883l_handle_t *handle, qmc5883l_over_sample_t sample)
set the over sample
uint8_t qmc5883l_init(qmc5883l_handle_t *handle)
initialize the chip
uint8_t qmc5883l_set_pointer_roll_over(qmc5883l_handle_t *handle, qmc5883l_bool_t enable)
enable or disable pointer roll over
struct qmc5883l_handle_s qmc5883l_handle_t
qmc5883l handle structure definition
uint8_t qmc5883l_set_interrupt(qmc5883l_handle_t *handle, qmc5883l_bool_t enable)
enable or disable interrupt
uint8_t qmc5883l_info(qmc5883l_info_t *info)
get chip's information
uint8_t qmc5883l_set_period(qmc5883l_handle_t *handle, uint8_t fbr)
set period
uint8_t qmc5883l_read_temperature(qmc5883l_handle_t *handle, int16_t *raw, float *deg)
read temperature
uint8_t qmc5883l_deinit(qmc5883l_handle_t *handle)
close the chip
uint8_t qmc5883l_set_output_rate(qmc5883l_handle_t *handle, qmc5883l_output_rate_t rate)
set the output rate
struct qmc5883l_info_s qmc5883l_info_t
qmc5883l information structure definition
uint8_t qmc5883l_set_mode(qmc5883l_handle_t *handle, qmc5883l_mode_t mode)
set the chip mode
@ QMC5883L_FULL_SCALE_8GAUSS
@ QMC5883L_FULL_SCALE_2GAUSS
@ QMC5883L_BOOL_TRUE
@ QMC5883L_BOOL_FALSE
@ QMC5883L_OUTPUT_RATE_10HZ
@ QMC5883L_MODE_CONTINUOUS
@ QMC5883L_OVER_SAMPLE_512
uint8_t qmc5883l_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t qmc5883l_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
void qmc5883l_interface_delay_ms(uint32_t ms)
interface delay ms
void qmc5883l_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t qmc5883l_interface_iic_init(void)
interface iic bus init
uint8_t qmc5883l_interface_iic_deinit(void)
interface iic bus deinit
uint8_t qmc5883l_read_test(uint32_t times)
read test
char manufacturer_name[32]