LibDriver PMW3901MB
Loading...
Searching...
No Matches
driver_pmw3901mb_register_test.c
Go to the documentation of this file.
1
36
38
39static pmw3901mb_handle_t gs_handle;
40
49{
50 uint8_t res;
51 uint8_t id;
52 uint8_t motion;
53 int16_t delta;
54 uint8_t burst;
55 uint8_t squal;
56 uint8_t sum;
57 uint8_t max;
58 uint8_t min;
59 uint8_t observation;
60 uint8_t grab;
61 uint8_t status;
62 uint16_t shutter;
64
65 /* link interface function */
76
77 /* get information */
78 res = pmw3901mb_info(&info);
79 if (res != 0)
80 {
81 pmw3901mb_interface_debug_print("pmw3901mb: get info failed.\n");
82
83 return 1;
84 }
85 else
86 {
87 /* print chip info */
88 pmw3901mb_interface_debug_print("pmw3901mb: chip is %s.\n", info.chip_name);
89 pmw3901mb_interface_debug_print("pmw3901mb: manufacturer is %s.\n", info.manufacturer_name);
90 pmw3901mb_interface_debug_print("pmw3901mb: interface is %s.\n", info.interface);
91 pmw3901mb_interface_debug_print("pmw3901mb: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
92 pmw3901mb_interface_debug_print("pmw3901mb: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
93 pmw3901mb_interface_debug_print("pmw3901mb: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
94 pmw3901mb_interface_debug_print("pmw3901mb: max current is %0.2fmA.\n", info.max_current_ma);
95 pmw3901mb_interface_debug_print("pmw3901mb: max temperature is %0.1fC.\n", info.temperature_max);
96 pmw3901mb_interface_debug_print("pmw3901mb: min temperature is %0.1fC.\n", info.temperature_min);
97 }
98
99 /* start the register test */
100 pmw3901mb_interface_debug_print("pmw3901mb: start the register test.\n");
101
102 /* init pmw3901mb */
103 res = pmw3901mb_init(&gs_handle);
104 if (res != 0)
105 {
106 pmw3901mb_interface_debug_print("pmw3901mb: init failed.\n");
107
108 return 1;
109 }
110
111 /* power up */
112 res = pmw3901mb_power_up(&gs_handle);
113 if (res != 0)
114 {
115 pmw3901mb_interface_debug_print("pmw3901mb: power up failed.\n");
116 (void)pmw3901mb_deinit(&gs_handle);
117
118 return 1;
119 }
120
121 /* pmw3901mb_get_product_id test */
122 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_get_product_id test.\n");
123
124 /* get product id */
125 res = pmw3901mb_get_product_id(&gs_handle, (uint8_t *)&id);
126 if (res != 0)
127 {
128 pmw3901mb_interface_debug_print("pmw3901mb: get product id failed.\n");
129 (void)pmw3901mb_deinit(&gs_handle);
130
131 return 1;
132 }
133 pmw3901mb_interface_debug_print("pmw3901mb: product id 0x%02X.\n", id);
134
135 /* pmw3901mb_get_inverse_product_id test */
136 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_get_inverse_product_id test.\n");
137
138 /* get inverse product id */
139 res = pmw3901mb_get_inverse_product_id(&gs_handle, (uint8_t *)&id);
140 if (res != 0)
141 {
142 pmw3901mb_interface_debug_print("pmw3901mb: get inverse product id failed.\n");
143 (void)pmw3901mb_deinit(&gs_handle);
144
145 return 1;
146 }
147 pmw3901mb_interface_debug_print("pmw3901mb: inverse product id 0x%02X.\n", id);
148
149 /* pmw3901mb_get_revision_id test */
150 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_get_revision_id test.\n");
151
152 /* get revision id */
153 res = pmw3901mb_get_revision_id(&gs_handle, (uint8_t *)&id);
154 if (res != 0)
155 {
156 pmw3901mb_interface_debug_print("pmw3901mb: get revision id failed.\n");
157 (void)pmw3901mb_deinit(&gs_handle);
158
159 return 1;
160 }
161 pmw3901mb_interface_debug_print("pmw3901mb: get revision id 0x%02X.\n", id);
162
163 /* pmw3901mb_get_motion test */
164 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_get_motion test.\n");
165
166 /* get motion */
167 res = pmw3901mb_get_motion(&gs_handle, (uint8_t *)&motion);
168 if (res != 0)
169 {
170 pmw3901mb_interface_debug_print("pmw3901mb: get motion failed.\n");
171 (void)pmw3901mb_deinit(&gs_handle);
172
173 return 1;
174 }
175 pmw3901mb_interface_debug_print("pmw3901mb: get motion 0x%02X.\n", motion);
176
177 /* pmw3901mb_set_motion test */
178 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_set_motion test.\n");
179
180 /* set motion */
181 motion = 0x00;
182 res = pmw3901mb_set_motion(&gs_handle, motion);
183 if (res != 0)
184 {
185 pmw3901mb_interface_debug_print("pmw3901mb: set motion failed.\n");
186 (void)pmw3901mb_deinit(&gs_handle);
187
188 return 1;
189 }
190 pmw3901mb_interface_debug_print("pmw3901mb: check motion %s.\n", res == 0 ? "ok" : "error");
191
192 /* pmw3901mb_get_delta_x test */
193 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_get_delta_x test.\n");
194
195 /* get delta x */
196 res = pmw3901mb_get_delta_x(&gs_handle, (int16_t *)&delta);
197 if (res != 0)
198 {
199 pmw3901mb_interface_debug_print("pmw3901mb: get delta x failed.\n");
200 (void)pmw3901mb_deinit(&gs_handle);
201
202 return 1;
203 }
204 pmw3901mb_interface_debug_print("pmw3901mb: delta x is %d.\n", delta);
205
206 /* pmw3901mb_get_delta_y test */
207 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_get_delta_y test.\n");
208
209 /* get delta y */
210 res = pmw3901mb_get_delta_y(&gs_handle, (int16_t *)&delta);
211 if (res != 0)
212 {
213 pmw3901mb_interface_debug_print("pmw3901mb: get delta y failed.\n");
214 (void)pmw3901mb_deinit(&gs_handle);
215
216 return 1;
217 }
218 pmw3901mb_interface_debug_print("pmw3901mb: delta y is %d.\n", delta);
219
220 /* pmw3901mb_get_motion_burst test */
221 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_get_motion_burst test.\n");
222
223 /* get motion burst */
224 res = pmw3901mb_get_motion_burst(&gs_handle, (uint8_t *)&burst, 1);
225 if (res != 0)
226 {
227 pmw3901mb_interface_debug_print("pmw3901mb: get motion burst failed.\n");
228 (void)pmw3901mb_deinit(&gs_handle);
229
230 return 1;
231 }
232 pmw3901mb_interface_debug_print("pmw3901mb: motion burst is 0x%02X.\n", burst);
233
234 /* pmw3901mb_get_squal test */
235 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_get_squal test.\n");
236
237 /* get squal */
238 res = pmw3901mb_get_squal(&gs_handle, (uint8_t *)&squal);
239 if (res != 0)
240 {
241 pmw3901mb_interface_debug_print("pmw3901mb: get squal failed.\n");
242 (void)pmw3901mb_deinit(&gs_handle);
243
244 return 1;
245 }
246 pmw3901mb_interface_debug_print("pmw3901mb: get squal is 0x%02X.\n", squal);
247
248 /* pmw3901mb_get_raw_data_sum test */
249 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_get_raw_data_sum test.\n");
250
251 /* get raw data sum */
252 res = pmw3901mb_get_raw_data_sum(&gs_handle, (uint8_t *)&sum);
253 if (res != 0)
254 {
255 pmw3901mb_interface_debug_print("pmw3901mb: get raw data sum failed.\n");
256 (void)pmw3901mb_deinit(&gs_handle);
257
258 return 1;
259 }
260 pmw3901mb_interface_debug_print("pmw3901mb: get raw data sum is 0x%02X.\n", sum);
261
262 /* pmw3901mb_get_max_raw_data test */
263 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_get_max_raw_data test.\n");
264
265 /* get max raw data */
266 res = pmw3901mb_get_max_raw_data(&gs_handle, (uint8_t *)&max);
267 if (res != 0)
268 {
269 pmw3901mb_interface_debug_print("pmw3901mb: get max raw data failed.\n");
270 (void)pmw3901mb_deinit(&gs_handle);
271
272 return 1;
273 }
274 pmw3901mb_interface_debug_print("pmw3901mb: get max raw data is 0x%02X.\n", max);
275
276 /* pmw3901mb_get_min_raw_data test */
277 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_get_min_raw_data test.\n");
278
279 /* get min raw data */
280 res = pmw3901mb_get_min_raw_data(&gs_handle, (uint8_t *)&min);
281 if (res != 0)
282 {
283 pmw3901mb_interface_debug_print("pmw3901mb: get min raw data failed.\n");
284 (void)pmw3901mb_deinit(&gs_handle);
285
286 return 1;
287 }
288 pmw3901mb_interface_debug_print("pmw3901mb: get min raw data is 0x%02X.\n", min);
289
290 /* pmw3901mb_get_shutter test */
291 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_get_shutter test.\n");
292
293 /* get shutter */
294 res = pmw3901mb_get_shutter(&gs_handle, (uint16_t *)&shutter);
295 if (res != 0)
296 {
297 pmw3901mb_interface_debug_print("pmw3901mb: get shutter failed.\n");
298 (void)pmw3901mb_deinit(&gs_handle);
299
300 return 1;
301 }
302 pmw3901mb_interface_debug_print("pmw3901mb: get shutter is 0x%04X.\n", shutter);
303
304 /* pmw3901mb_get_observation test */
305 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_get_observation test.\n");
306
307 /* get observation */
308 res = pmw3901mb_get_observation(&gs_handle, (uint8_t *)&observation);
309 if (res != 0)
310 {
311 pmw3901mb_interface_debug_print("pmw3901mb: get observation failed.\n");
312 (void)pmw3901mb_deinit(&gs_handle);
313
314 return 1;
315 }
316 pmw3901mb_interface_debug_print("pmw3901mb: get observation is 0x%02X.\n", observation);
317
318 /* pmw3901mb_set_observation test */
319 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_set_observation test.\n");
320
321 /* set observation */
322 observation = 0x00;
323 res = pmw3901mb_set_observation(&gs_handle, observation);
324 if (res != 0)
325 {
326 pmw3901mb_interface_debug_print("pmw3901mb: set observation failed.\n");
327 (void)pmw3901mb_deinit(&gs_handle);
328
329 return 1;
330 }
331 pmw3901mb_interface_debug_print("pmw3901mb: check observation %s.\n", res == 0 ? "ok" : "error");
332
333 /* pmw3901mb_get_raw_data_grab test */
334 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_get_raw_data_grab test.\n");
335
336 /* get raw data grab */
337 res = pmw3901mb_get_raw_data_grab(&gs_handle, (uint8_t *)&grab, 1);
338 if (res != 0)
339 {
340 pmw3901mb_interface_debug_print("pmw3901mb: get raw data grab failed.\n");
341 (void)pmw3901mb_deinit(&gs_handle);
342
343 return 1;
344 }
345 pmw3901mb_interface_debug_print("pmw3901mb: get grab is 0x%02X.\n", grab);
346
347 /* pmw3901mb_set_raw_data_grab test */
348 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_set_raw_data_grab test.\n");
349
350 /* set raw data grab */
351 grab = 0x00;
352 res = pmw3901mb_set_raw_data_grab(&gs_handle, (uint8_t *)&grab, 1);
353 if (res != 0)
354 {
355 pmw3901mb_interface_debug_print("pmw3901mb: set raw data grab failed.\n");
356 (void)pmw3901mb_deinit(&gs_handle);
357
358 return 1;
359 }
360 pmw3901mb_interface_debug_print("pmw3901mb: check grab %s.\n", res == 0 ? "ok" : "error");
361
362 /* pmw3901mb_get_raw_data_grab_status test */
363 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_get_raw_data_grab_status test.\n");
364
365 /* get raw data grab status */
366 res = pmw3901mb_get_raw_data_grab_status(&gs_handle, (uint8_t *)&status);
367 if (res != 0)
368 {
369 pmw3901mb_interface_debug_print("pmw3901mb: get raw data grab status failed.\n");
370 (void)pmw3901mb_deinit(&gs_handle);
371
372 return 1;
373 }
374 pmw3901mb_interface_debug_print("pmw3901mb: get status is 0x%02X.\n", status);
375
376 /* pmw3901mb_reset test */
377 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_reset test.\n");
378
379 /* reset */
380 res = pmw3901mb_reset(&gs_handle);
381 if (res != 0)
382 {
383 pmw3901mb_interface_debug_print("pmw3901mb: reset failed.\n");
384 (void)pmw3901mb_deinit(&gs_handle);
385
386 return 1;
387 }
388 pmw3901mb_interface_debug_print("pmw3901mb: check reset %s.\n", res == 0 ? "ok" : "error");
389
390 /* pmw3901mb_shutdown test */
391 pmw3901mb_interface_debug_print("pmw3901mb: pmw3901mb_shutdown test.\n");
392
393 /* shutdown */
394 res = pmw3901mb_shutdown(&gs_handle);
395 if (res != 0)
396 {
397 pmw3901mb_interface_debug_print("pmw3901mb: shutdown failed.\n");
398 (void)pmw3901mb_deinit(&gs_handle);
399
400 return 1;
401 }
402 pmw3901mb_interface_debug_print("pmw3901mb: check shutdown %s.\n", res == 0 ? "ok" : "error");
403
404 /* finish the register test */
405 pmw3901mb_interface_debug_print("pmw3901mb: finish the register test.\n");
406 (void)pmw3901mb_deinit(&gs_handle);
407
408 return 0;
409}
driver pmw3901mb register test header file
uint8_t pmw3901mb_init(pmw3901mb_handle_t *handle)
initialize the chip
uint8_t pmw3901mb_set_raw_data_grab(pmw3901mb_handle_t *handle, uint8_t *grab, uint16_t len)
set the raw data grab
uint8_t pmw3901mb_get_min_raw_data(pmw3901mb_handle_t *handle, uint8_t *min)
get the minimum raw data value
struct pmw3901mb_handle_s pmw3901mb_handle_t
pmw3901mb handle structure definition
uint8_t pmw3901mb_get_shutter(pmw3901mb_handle_t *handle, uint16_t *shutter)
get the shutter
uint8_t pmw3901mb_get_motion_burst(pmw3901mb_handle_t *handle, uint8_t *burst, uint8_t len)
get the motion burst
uint8_t pmw3901mb_set_observation(pmw3901mb_handle_t *handle, uint8_t observation)
set the observation
uint8_t pmw3901mb_set_motion(pmw3901mb_handle_t *handle, uint8_t motion)
set the motion
uint8_t pmw3901mb_get_motion(pmw3901mb_handle_t *handle, uint8_t *motion)
get the motion
struct pmw3901mb_info_s pmw3901mb_info_t
pmw3901mb information structure definition
uint8_t pmw3901mb_get_squal(pmw3901mb_handle_t *handle, uint8_t *squal)
get the surface quality
uint8_t pmw3901mb_get_delta_y(pmw3901mb_handle_t *handle, int16_t *delta)
get the delta y
uint8_t pmw3901mb_get_delta_x(pmw3901mb_handle_t *handle, int16_t *delta)
get the delta x
uint8_t pmw3901mb_get_max_raw_data(pmw3901mb_handle_t *handle, uint8_t *max)
get the maximum raw data value
uint8_t pmw3901mb_power_up(pmw3901mb_handle_t *handle)
power up the chip
uint8_t pmw3901mb_shutdown(pmw3901mb_handle_t *handle)
shutdown the chip
uint8_t pmw3901mb_info(pmw3901mb_info_t *info)
get chip's information
uint8_t pmw3901mb_get_raw_data_sum(pmw3901mb_handle_t *handle, uint8_t *sum)
get the average raw data value
uint8_t pmw3901mb_get_product_id(pmw3901mb_handle_t *handle, uint8_t *id)
get the product id
uint8_t pmw3901mb_get_inverse_product_id(pmw3901mb_handle_t *handle, uint8_t *id)
get the inverse product id
uint8_t pmw3901mb_get_raw_data_grab(pmw3901mb_handle_t *handle, uint8_t *grab, uint16_t len)
get the raw data grab
uint8_t pmw3901mb_get_observation(pmw3901mb_handle_t *handle, uint8_t *observation)
get the observation
uint8_t pmw3901mb_deinit(pmw3901mb_handle_t *handle)
close the chip
uint8_t pmw3901mb_get_raw_data_grab_status(pmw3901mb_handle_t *handle, uint8_t *status)
get the raw data grab status
uint8_t pmw3901mb_reset(pmw3901mb_handle_t *handle)
reset the chip
uint8_t pmw3901mb_get_revision_id(pmw3901mb_handle_t *handle, uint8_t *id)
get the revision id
void pmw3901mb_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t pmw3901mb_interface_spi_write(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus write
uint8_t pmw3901mb_interface_spi_deinit(void)
interface spi bus deinit
uint8_t pmw3901mb_interface_reset_gpio_write(uint8_t data)
interface reset gpio write
uint8_t pmw3901mb_interface_spi_read(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus read
uint8_t pmw3901mb_interface_spi_init(void)
interface spi bus init
uint8_t pmw3901mb_interface_reset_gpio_deinit(void)
interface reset gpio deinit
void pmw3901mb_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t pmw3901mb_interface_reset_gpio_init(void)
interface reset gpio init
uint8_t pmw3901mb_register_test(void)
register test