MCPcopy Create free account
hub / github.com/TactilityProject/Tactility / start

Function start

Drivers/qmi8658-module/source/qmi8658.cpp:39–72  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

37// region Driver lifecycle
38
39static error_t start(Device* device) {
40 auto* i2c_controller = device_get_parent(device);
41 if (device_get_type(i2c_controller) != &I2C_CONTROLLER_TYPE) {
42 LOG_E(TAG, "Parent is not an I2C controller");
43 return ERROR_RESOURCE;
44 }
45
46 auto address = GET_CONFIG(device)->address;
47
48 // Verify chip ID
49 uint8_t who_am_i = 0;
50 if (i2c_controller_register8_get(i2c_controller, address, REG_WHO_AM_I, &who_am_i, I2C_TIMEOUT_TICKS) != ERROR_NONE
51 || who_am_i != WHO_AM_I_VALUE) {
52 LOG_E(TAG, "WHO_AM_I mismatch: got 0x%02X, expected 0x%02X", who_am_i, WHO_AM_I_VALUE);
53 return ERROR_RESOURCE;
54 }
55
56 // Disable all sensors during configuration
57 if (i2c_controller_register8_set(i2c_controller, address, REG_CTRL7, 0x00, I2C_TIMEOUT_TICKS) != ERROR_NONE) return ERROR_RESOURCE;
58
59 // Serial interface: auto address increment, little-endian
60 if (i2c_controller_register8_set(i2c_controller, address, REG_CTRL1, CTRL1_VAL, I2C_TIMEOUT_TICKS) != ERROR_NONE) return ERROR_RESOURCE;
61
62 // Accel: ±8g, 1000Hz ODR
63 if (i2c_controller_register8_set(i2c_controller, address, REG_CTRL2, CTRL2_VAL, I2C_TIMEOUT_TICKS) != ERROR_NONE) return ERROR_RESOURCE;
64
65 // Gyro: ±2048°/s, 1000Hz ODR
66 if (i2c_controller_register8_set(i2c_controller, address, REG_CTRL3, CTRL3_VAL, I2C_TIMEOUT_TICKS) != ERROR_NONE) return ERROR_RESOURCE;
67
68 // Enable accel + gyro
69 if (i2c_controller_register8_set(i2c_controller, address, REG_CTRL7, CTRL7_ENABLE, I2C_TIMEOUT_TICKS) != ERROR_NONE) return ERROR_RESOURCE;
70
71 return ERROR_NONE;
72}
73
74static error_t stop(Device* device) {
75 auto* i2c_controller = device_get_parent(device);

Callers

nothing calls this directly

Calls 4

device_get_parentFunction · 0.85
device_get_typeFunction · 0.85

Tested by

no test coverage detected