harden sensor acquisition after audit
This commit is contained in:
@@ -84,6 +84,7 @@ void app_main(void)
|
||||
ESP_LOGE(TAG,
|
||||
"ADXL345 not found at 0x53 or 0x1D (expected DEVID 0xE5): %s",
|
||||
esp_err_to_name(err));
|
||||
i2c_del_master_bus(bus);
|
||||
return;
|
||||
}
|
||||
ESP_LOGI(TAG, "ADXL345 detected at 0x%02X; 100 Hz, +/-8 g, full resolution",
|
||||
@@ -95,6 +96,8 @@ void app_main(void)
|
||||
ESP_LOGE(TAG,
|
||||
"L3G4200D not found at 0x69 or 0x68 (expected WHO_AM_I 0xD3): %s",
|
||||
esp_err_to_name(err));
|
||||
adxl345_deinit(&accelerometer);
|
||||
i2c_del_master_bus(bus);
|
||||
return;
|
||||
}
|
||||
ESP_LOGI(TAG, "L3G4200D detected at 0x%02X; 100 Hz, 25 Hz BW, +/-500 dps",
|
||||
@@ -103,27 +106,35 @@ void app_main(void)
|
||||
// Discard the gyroscope's visible startup transient before beginning the stream.
|
||||
vTaskDelay(pdMS_TO_TICKS(500));
|
||||
|
||||
printf("# format=trikke_axis_validation_v1\n");
|
||||
printf("# accel_scale_g_per_lsb=0.0039,gyro_scale_dps_per_lsb=0.0175\n");
|
||||
printf("# format=trikke_freshness_validation_v2\n");
|
||||
printf("# nominal_accel_scale_g_per_lsb=0.0039,"
|
||||
"nominal_gyro_scale_dps_per_lsb=0.0175\n");
|
||||
printf("# enclosure_axes=+x:right,+y:top,+z:toward_cover\n");
|
||||
printf("# mapping=accel(x,y,z)=(native_y,-native_x,native_z);"
|
||||
"gyro(x,y,z)=(native_x,native_y,native_z)\n");
|
||||
printf("sequence,timestamp_us,accel_x_raw,accel_y_raw,accel_z_raw,"
|
||||
printf("# status_masks=accel_data_ready:0x80,accel_overrun:0x01,"
|
||||
"gyro_data_ready:0x08,gyro_overrun:0x80\n");
|
||||
printf("sequence,poll_timestamp_us,accel_x_raw,accel_y_raw,accel_z_raw,"
|
||||
"gyro_x_raw,gyro_y_raw,gyro_z_raw,"
|
||||
"accel_native_x_raw,accel_native_y_raw,accel_native_z_raw,"
|
||||
"gyro_native_x_raw,gyro_native_y_raw,gyro_native_z_raw\n");
|
||||
"gyro_native_x_raw,gyro_native_y_raw,gyro_native_z_raw,"
|
||||
"accel_int_source,gyro_status,loop_overrun_count\n");
|
||||
|
||||
uint32_t sequence = 0;
|
||||
uint32_t read_error_count = 0;
|
||||
uint32_t loop_overrun_count = 0;
|
||||
TickType_t last_wake = xTaskGetTickCount();
|
||||
|
||||
while (true) {
|
||||
adxl345_sample_t accel = {0};
|
||||
l3g4200d_sample_t gyro = {0};
|
||||
uint8_t accel_int_source = 0;
|
||||
uint8_t gyro_status = 0;
|
||||
const int64_t timestamp_us = esp_timer_get_time();
|
||||
|
||||
const esp_err_t accel_err = adxl345_read_raw(&accelerometer, &accel);
|
||||
const esp_err_t gyro_err = l3g4200d_read_raw(&gyroscope, &gyro);
|
||||
const esp_err_t accel_err = adxl345_read_raw(&accelerometer, &accel,
|
||||
&accel_int_source);
|
||||
const esp_err_t gyro_err = l3g4200d_read_raw(&gyroscope, &gyro, &gyro_status);
|
||||
|
||||
if (accel_err == ESP_OK && gyro_err == ESP_OK) {
|
||||
const trikke_axes_sample_t enclosure_accel = map_accel_to_enclosure(&accel);
|
||||
@@ -132,12 +143,14 @@ void app_main(void)
|
||||
printf("%" PRIu32 ",%" PRId64 ",%" PRId32 ",%" PRId32 ",%" PRId32
|
||||
",%" PRId32 ",%" PRId32 ",%" PRId32
|
||||
",%" PRId16 ",%" PRId16 ",%" PRId16
|
||||
",%" PRId16 ",%" PRId16 ",%" PRId16 "\n",
|
||||
",%" PRId16 ",%" PRId16 ",%" PRId16
|
||||
",%" PRIu8 ",%" PRIu8 ",%" PRIu32 "\n",
|
||||
sequence, timestamp_us,
|
||||
enclosure_accel.x, enclosure_accel.y, enclosure_accel.z,
|
||||
enclosure_gyro.x, enclosure_gyro.y, enclosure_gyro.z,
|
||||
accel.x, accel.y, accel.z,
|
||||
gyro.x, gyro.y, gyro.z);
|
||||
gyro.x, gyro.y, gyro.z,
|
||||
accel_int_source, gyro_status, loop_overrun_count);
|
||||
} else {
|
||||
++read_error_count;
|
||||
ESP_LOGE(TAG,
|
||||
@@ -147,6 +160,10 @@ void app_main(void)
|
||||
}
|
||||
|
||||
++sequence;
|
||||
xTaskDelayUntil(&last_wake, TRIKKE_SAMPLE_TICKS);
|
||||
if (xTaskDelayUntil(&last_wake, TRIKKE_SAMPLE_TICKS) == pdFALSE) {
|
||||
// Do not issue a burst of back-to-back samples after a stalled output path.
|
||||
++loop_overrun_count;
|
||||
last_wake = xTaskGetTickCount();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user