Private variables ---------------------------------------------------------*/ Private function prototypes -----------------------------------------------*/ Private functions ---------------------------------------------------------*/ / * @brief * Get accelerometer output * * @details * * @note * * @param[out] data * Pointer to output buffer * * @param[in] lowResolution * Resolution
| 71 | * Error code |
| 72 | ******************************************************************************/ |
| 73 | rt_err_t efm_accel_get_data(struct efm32_accel_result_t *data, |
| 74 | rt_bool_t lowResolution) |
| 75 | { |
| 76 | RT_ASSERT(accel != RT_NULL); |
| 77 | |
| 78 | rt_err_t ret; |
| 79 | |
| 80 | if (data == RT_NULL) |
| 81 | { |
| 82 | return -RT_ERROR; |
| 83 | } |
| 84 | |
| 85 | ret = RT_EOK; |
| 86 | do |
| 87 | { |
| 88 | /* --------- ADC interface --------- */ |
| 89 | #if (EFM32_USING_ACCEL == EFM32_INTERFACE_ADC) |
| 90 | struct efm32_adc_result_t result; |
| 91 | |
| 92 | result.mode = control.mode; |
| 93 | result.buffer = (void *)data; |
| 94 | if ((ret = accel->control(accel, RT_DEVICE_CTRL_RESUME, |
| 95 | (void *)&result)) != RT_EOK) |
| 96 | { |
| 97 | break; |
| 98 | } |
| 99 | if ((ret = accel->control(accel, RT_DEVICE_CTRL_ADC_RESULT, \ |
| 100 | (void *)&result)) != RT_EOK) |
| 101 | { |
| 102 | break; |
| 103 | } |
| 104 | |
| 105 | data->x += accelOffset.x - 0x800; |
| 106 | data->y += accelOffset.y - 0x800; |
| 107 | data->z += accelOffset.z - 0x800; |
| 108 | if (lowResolution) |
| 109 | { |
| 110 | data->x >>= 4; |
| 111 | data->y >>= 4; |
| 112 | data->z >>= 4; |
| 113 | } |
| 114 | |
| 115 | /* --------- IIC interface --------- */ |
| 116 | #elif (EFM32_USING_ACCEL == EFM32_INTERFACE_IIC) |
| 117 | if (lowResolution || \ |
| 118 | ((accelConfig & ACCEL_MASK_RANGE) != MCTL_RANGE_8G)) |
| 119 | { |
| 120 | rt_int8_t buf[3]; |
| 121 | |
| 122 | buf[0] = XOUT8; |
| 123 | if (accel->read(accel, ACCEL_IIC_SLAVE_ADDRESS, (void *)buf, \ |
| 124 | sizeof(buf)) == 0) |
| 125 | { |
| 126 | ret = -RT_ERROR; |
| 127 | break; |
| 128 | } |
| 129 | data->x = buf[0]; |
| 130 | data->y = buf[1]; |
no test coverage detected