@@ -239,6 +239,196 @@ float ICM_20948::getGyrDPS(int16_t axis_val)
239
239
}
240
240
}
241
241
242
+ // Gyro Bias
243
+ ICM_20948_Status_e ICM_20948::SetBiasGyroX ( int32_t newValue)
244
+ {
245
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
246
+ unsigned char gyro_bias_reg[4 ];
247
+ gyro_bias_reg[0 ] = (unsigned char )(newValue >> 24 );
248
+ gyro_bias_reg[1 ] = (unsigned char )(newValue >> 16 );
249
+ gyro_bias_reg[2 ] = (unsigned char )(newValue >> 8 );
250
+ gyro_bias_reg[3 ] = (unsigned char )(newValue & 0xff );
251
+ result = inv_icm20948_write_mems (&_device, GYRO_BIAS_X, 4 , (const unsigned char *)&gyro_bias_reg);
252
+ return result;
253
+ }
254
+
255
+ ICM_20948_Status_e ICM_20948::SetBiasGyroY ( int32_t newValue)
256
+ {
257
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
258
+ unsigned char gyro_bias_reg[4 ];
259
+ gyro_bias_reg[0 ] = (unsigned char )(newValue >> 24 );
260
+ gyro_bias_reg[1 ] = (unsigned char )(newValue >> 16 );
261
+ gyro_bias_reg[2 ] = (unsigned char )(newValue >> 8 );
262
+ gyro_bias_reg[3 ] = (unsigned char )(newValue & 0xff );
263
+ result = inv_icm20948_write_mems (&_device, GYRO_BIAS_Y, 4 , (const unsigned char *)&gyro_bias_reg);
264
+ return result;
265
+ }
266
+
267
+ ICM_20948_Status_e ICM_20948::SetBiasGyroZ ( int32_t newValue)
268
+ {
269
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
270
+ unsigned char gyro_bias_reg[4 ];
271
+ gyro_bias_reg[0 ] = (unsigned char )(newValue >> 24 );
272
+ gyro_bias_reg[1 ] = (unsigned char )(newValue >> 16 );
273
+ gyro_bias_reg[2 ] = (unsigned char )(newValue >> 8 );
274
+ gyro_bias_reg[3 ] = (unsigned char )(newValue & 0xff );
275
+ result = inv_icm20948_write_mems (&_device, GYRO_BIAS_Z, 4 , (const unsigned char *)&gyro_bias_reg);
276
+ return result;
277
+ }
278
+
279
+ ICM_20948_Status_e ICM_20948::GetBiasGyroX ( int32_t * bias)
280
+ {
281
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
282
+ unsigned char bias_data[4 ] = { 0 };
283
+ result = inv_icm20948_read_mems (&_device, GYRO_BIAS_X, 4 , bias_data);
284
+ bias[0 ] = (int32_t )(bias_data[0 ] << 24 ) | (bias_data[1 ] << 16 ) | (bias_data[2 ] << 8 ) | (bias_data[3 ]);
285
+ return result;
286
+ }
287
+
288
+ ICM_20948_Status_e ICM_20948::GetBiasGyroY ( int32_t * bias)
289
+ {
290
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
291
+ unsigned char bias_data[4 ] = { 0 };
292
+ result = inv_icm20948_read_mems (&_device, GYRO_BIAS_Y, 4 , bias_data);
293
+ bias[0 ] = (int32_t )(bias_data[0 ] << 24 ) | (bias_data[1 ] << 16 ) | (bias_data[2 ] << 8 ) | (bias_data[3 ]);
294
+ return result;
295
+ }
296
+
297
+ ICM_20948_Status_e ICM_20948::GetBiasGyroZ ( int32_t * bias)
298
+ {
299
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
300
+ unsigned char bias_data[4 ] = { 0 };
301
+ result = inv_icm20948_read_mems (&_device, GYRO_BIAS_Z, 4 , bias_data);
302
+ bias[0 ] = (int32_t )(bias_data[0 ] << 24 ) | (bias_data[1 ] << 16 ) | (bias_data[2 ] << 8 ) | (bias_data[3 ]);
303
+ return result;
304
+ }
305
+ // Accel Bias
306
+ ICM_20948_Status_e ICM_20948::SetBiasAccelX ( int32_t newValue)
307
+ {
308
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
309
+ unsigned char accel_bias_reg[4 ];
310
+ accel_bias_reg[0 ] = (unsigned char )(newValue >> 24 );
311
+ accel_bias_reg[1 ] = (unsigned char )(newValue >> 16 );
312
+ accel_bias_reg[2 ] = (unsigned char )(newValue >> 8 );
313
+ accel_bias_reg[3 ] = (unsigned char )(newValue & 0xff );
314
+ result = inv_icm20948_write_mems (&_device, ACCEL_BIAS_X, 4 , (const unsigned char *)&accel_bias_reg);
315
+ return result;
316
+ }
317
+
318
+ ICM_20948_Status_e ICM_20948::SetBiasAccelY ( int32_t newValue)
319
+ {
320
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
321
+ unsigned char accel_bias_reg[4 ];
322
+ accel_bias_reg[0 ] = (unsigned char )(newValue >> 24 );
323
+ accel_bias_reg[1 ] = (unsigned char )(newValue >> 16 );
324
+ accel_bias_reg[2 ] = (unsigned char )(newValue >> 8 );
325
+ accel_bias_reg[3 ] = (unsigned char )(newValue & 0xff );
326
+ result = inv_icm20948_write_mems (&_device, ACCEL_BIAS_Y, 4 , (const unsigned char *)&accel_bias_reg);
327
+ return result;
328
+ }
329
+
330
+ ICM_20948_Status_e ICM_20948::SetBiasAccelZ ( int32_t newValue)
331
+ {
332
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
333
+ unsigned char accel_bias_reg[4 ];
334
+ accel_bias_reg[0 ] = (unsigned char )(newValue >> 24 );
335
+ accel_bias_reg[1 ] = (unsigned char )(newValue >> 16 );
336
+ accel_bias_reg[2 ] = (unsigned char )(newValue >> 8 );
337
+ accel_bias_reg[3 ] = (unsigned char )(newValue & 0xff );
338
+ result = inv_icm20948_write_mems (&_device, ACCEL_BIAS_Z, 4 , (const unsigned char *)&accel_bias_reg);
339
+ return result;
340
+ }
341
+
342
+ ICM_20948_Status_e ICM_20948::GetBiasAccelX ( int32_t * bias)
343
+ {
344
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
345
+ unsigned char bias_data[4 ] = { 0 };
346
+ result = inv_icm20948_read_mems (&_device, ACCEL_BIAS_X, 4 , bias_data);
347
+ bias[0 ] = (int32_t )(bias_data[0 ] << 24 ) | (bias_data[1 ] << 16 ) | (bias_data[2 ] << 8 ) | (bias_data[3 ]);
348
+ return result;
349
+ }
350
+
351
+ ICM_20948_Status_e ICM_20948::GetBiasAccelY ( int32_t * bias)
352
+ {
353
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
354
+ unsigned char bias_data[4 ] = { 0 };
355
+ result = inv_icm20948_read_mems (&_device, ACCEL_BIAS_Y, 4 , bias_data);
356
+ bias[0 ] = (int32_t )(bias_data[0 ] << 24 ) | (bias_data[1 ] << 16 ) | (bias_data[2 ] << 8 ) | (bias_data[3 ]);
357
+ return result;
358
+ }
359
+
360
+ ICM_20948_Status_e ICM_20948::GetBiasAccelZ ( int32_t * bias)
361
+ {
362
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
363
+ unsigned char bias_data[4 ] = { 0 };
364
+ result = inv_icm20948_read_mems (&_device, ACCEL_BIAS_Z, 4 , bias_data);
365
+ bias[0 ] = (int32_t )(bias_data[0 ] << 24 ) | (bias_data[1 ] << 16 ) | (bias_data[2 ] << 8 ) | (bias_data[3 ]);
366
+ return result;
367
+ }
368
+ // CPass Bias
369
+ ICM_20948_Status_e ICM_20948::SetBiasCPassX ( int32_t newValue)
370
+ {
371
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
372
+ unsigned char cpass_bias_reg[4 ];
373
+ cpass_bias_reg[0 ] = (unsigned char )(newValue >> 24 );
374
+ cpass_bias_reg[1 ] = (unsigned char )(newValue >> 16 );
375
+ cpass_bias_reg[2 ] = (unsigned char )(newValue >> 8 );
376
+ cpass_bias_reg[3 ] = (unsigned char )(newValue & 0xff );
377
+ result = inv_icm20948_write_mems (&_device, CPASS_BIAS_X, 4 , (const unsigned char *)&cpass_bias_reg);
378
+ return result;
379
+ }
380
+
381
+ ICM_20948_Status_e ICM_20948::SetBiasCPassY ( int32_t newValue)
382
+ {
383
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
384
+ unsigned char cpass_bias_reg[4 ];
385
+ cpass_bias_reg[0 ] = (unsigned char )(newValue >> 24 );
386
+ cpass_bias_reg[1 ] = (unsigned char )(newValue >> 16 );
387
+ cpass_bias_reg[2 ] = (unsigned char )(newValue >> 8 );
388
+ cpass_bias_reg[3 ] = (unsigned char )(newValue & 0xff );
389
+ result = inv_icm20948_write_mems (&_device, CPASS_BIAS_Y, 4 , (const unsigned char *)&cpass_bias_reg);
390
+ return result;
391
+ }
392
+
393
+ ICM_20948_Status_e ICM_20948::SetBiasCPassZ ( int32_t newValue)
394
+ {
395
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
396
+ unsigned char cpass_bias_reg[4 ];
397
+ cpass_bias_reg[0 ] = (unsigned char )(newValue >> 24 );
398
+ cpass_bias_reg[1 ] = (unsigned char )(newValue >> 16 );
399
+ cpass_bias_reg[2 ] = (unsigned char )(newValue >> 8 );
400
+ cpass_bias_reg[3 ] = (unsigned char )(newValue & 0xff );
401
+ result = inv_icm20948_write_mems (&_device, CPASS_BIAS_Z, 4 , (const unsigned char *)&cpass_bias_reg);
402
+ return result;
403
+ }
404
+
405
+ ICM_20948_Status_e ICM_20948::GetBiasCPassX ( int32_t * bias)
406
+ {
407
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
408
+ unsigned char bias_data[4 ] = { 0 };
409
+ result = inv_icm20948_read_mems (&_device, CPASS_BIAS_X, 4 , bias_data);
410
+ bias[0 ] = (int32_t )(bias_data[0 ] << 24 ) | (bias_data[1 ] << 16 ) | (bias_data[2 ] << 8 ) | (bias_data[3 ]);
411
+ return result;
412
+ }
413
+
414
+ ICM_20948_Status_e ICM_20948::GetBiasCPassY ( int32_t * bias)
415
+ {
416
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
417
+ unsigned char bias_data[4 ] = { 0 };
418
+ result = inv_icm20948_read_mems (&_device, CPASS_BIAS_Y, 4 , bias_data);
419
+ bias[0 ] = (int32_t )(bias_data[0 ] << 24 ) | (bias_data[1 ] << 16 ) | (bias_data[2 ] << 8 ) | (bias_data[3 ]);
420
+ return result;
421
+ }
422
+
423
+ ICM_20948_Status_e ICM_20948::GetBiasCPassZ ( int32_t * bias)
424
+ {
425
+ ICM_20948_Status_e result = ICM_20948_Stat_Ok;
426
+ unsigned char bias_data[4 ] = { 0 };
427
+ result = inv_icm20948_read_mems (&_device, CPASS_BIAS_Z, 4 , bias_data);
428
+ bias[0 ] = (int32_t )(bias_data[0 ] << 24 ) | (bias_data[1 ] << 16 ) | (bias_data[2 ] << 8 ) | (bias_data[3 ]);
429
+ return result;
430
+ }
431
+
242
432
float ICM_20948::temp (void )
243
433
{
244
434
return getTempC (agmt.tmp .val );
@@ -1796,3 +1986,5 @@ ICM_20948_Status_e ICM_20948_read_SPI(uint8_t reg, uint8_t *buff, uint32_t len,
1796
1986
1797
1987
return ICM_20948_Stat_Ok;
1798
1988
}
1989
+
1990
+
0 commit comments