10#include <Eigen/Geometry>
12#include <halx/core.hpp>
13#include <halx/peripheral/uart.hpp>
136 Bno055(peripheral::UartBase &uart) : uart_{uart} {}
139 core::TimeoutHelper timeout_helper{timeout};
140 while (!timeout_helper.is_timeout()) {
141 std::array<uint8_t, 1> data{0x00};
159 return Eigen::Quaternionf{
160 static_cast<int16_t
>(((*res)[1] << 8) | (*res)[0]) / 16384.0f,
161 static_cast<int16_t
>(((*res)[3] << 8) | (*res)[2]) / 16384.0f,
162 static_cast<int16_t
>(((*res)[5] << 8) | (*res)[4]) / 16384.0f,
163 static_cast<int16_t
>(((*res)[7] << 8) | (*res)[6]) / 16384.0f};
168 const std::array<uint8_t, N> &data) {
169 std::array<uint8_t, 4> buf{0xAA, 0x00, std::to_underlying(address), N};
171 if (!uart_.transmit(buf.data(), buf.size(), 5)) {
174 if (!uart_.transmit(data.data(), data.size(), 5)) {
177 if (!uart_.receive(buf.data(), 2, 5)) {
180 return buf[0] == 0xEE && buf[1] == 0x01;
185 std::array<uint8_t, 4> tx_buf{0xAA, 0x01, std::to_underlying(address), N};
186 std::array<uint8_t, N> rx_buf;
188 if (!uart_.transmit(tx_buf.data(), tx_buf.size(), 5)) {
191 if (!uart_.receive(tx_buf.data(), 2, 5)) {
194 if (tx_buf[0] != 0xBB || tx_buf[1] != N) {
197 if (!uart_.receive(rx_buf.data(), rx_buf.size(), 5)) {
204 peripheral::UartBase &uart_;
Bno055(peripheral::UartBase &uart)
Definition bno055.hpp:136
bool write_register(Bno055Register address, const std::array< uint8_t, N > &data)
Definition bno055.hpp:167
bool start(uint32_t timeout)
Definition bno055.hpp:138
std::optional< Eigen::Quaternionf > get_quaternion()
Definition bno055.hpp:154
std::optional< std::array< uint8_t, N > > read_register(Bno055Register address)
Definition bno055.hpp:184
Bno055Register
Definition bno055.hpp:17
@ GYR_DATA_Y_MSB
Definition bno055.hpp:42
@ GYR_SLEEP_CONFIG
Definition bno055.hpp:114
@ EUL_DATA_X_LSB
Definition bno055.hpp:45
@ GYR_OFFSET_X_MSB
Definition bno055.hpp:98
@ GYR_HR_X_SET
Definition bno055.hpp:124
@ MAG_OFFSET_Y_MSB
Definition bno055.hpp:94
@ ACC_OFFSET_X_LSB
Definition bno055.hpp:85
@ CALIB_STAT
Definition bno055.hpp:72
@ QUA_DATA_X_LSB
Definition bno055.hpp:53
@ ACC_RADIUS_LSB
Definition bno055.hpp:103
@ GYR_OFFSET_Y_LSB
Definition bno055.hpp:99
@ GRV_DATA_Y_MSB
Definition bno055.hpp:68
@ ACC_HG_DURATION
Definition bno055.hpp:119
@ GRV_DATA_Y_LSB
Definition bno055.hpp:67
@ GYR_OFFSET_Z_LSB
Definition bno055.hpp:101
@ QUA_DATA_W_MSB
Definition bno055.hpp:52
@ AXIS_MAP_CONFIG
Definition bno055.hpp:83
@ MAG_OFFSET_X_LSB
Definition bno055.hpp:91
@ LIA_DATA_Z_MSB
Definition bno055.hpp:64
@ MAG_DATA_Y_MSB
Definition bno055.hpp:36
@ GRV_DATA_Z_LSB
Definition bno055.hpp:69
@ GYR_CONFIG_1
Definition bno055.hpp:112
@ GYR_OFFSET_X_LSB
Definition bno055.hpp:97
@ BL_REV_ID
Definition bno055.hpp:25
@ INT_MSK
Definition bno055.hpp:115
@ EUL_DATA_Z_MSB
Definition bno055.hpp:50
@ MAG_ID
Definition bno055.hpp:21
@ ACC_DATA_X_MSB
Definition bno055.hpp:28
@ ACC_AM_THRES
Definition bno055.hpp:117
@ GYR_DATA_X_MSB
Definition bno055.hpp:40
@ ACC_SLEEP_CONFIG
Definition bno055.hpp:113
@ UNIT_SEL
Definition bno055.hpp:78
@ GYR_DATA_Z_LSB
Definition bno055.hpp:43
@ GYR_DATA_Z_MSB
Definition bno055.hpp:44
@ ACC_RADIUS_MSB
Definition bno055.hpp:104
@ ACC_OFFSET_Y_LSB
Definition bno055.hpp:87
@ MAG_DATA_Z_LSB
Definition bno055.hpp:37
@ MAG_CONFIG
Definition bno055.hpp:110
@ MAG_RADIUS_LSB
Definition bno055.hpp:105
@ SYS_ERR
Definition bno055.hpp:77
@ MAG_DATA_X_MSB
Definition bno055.hpp:34
@ GYR_OFFSET_Z_MSB
Definition bno055.hpp:102
@ PAGE_ID
Definition bno055.hpp:26
@ ACC_OFFSET_Z_LSB
Definition bno055.hpp:89
@ QUA_DATA_Y_LSB
Definition bno055.hpp:55
@ EUL_DATA_Z_LSB
Definition bno055.hpp:49
@ ACC_DATA_X_LSB
Definition bno055.hpp:27
@ EUL_DATA_Y_LSB
Definition bno055.hpp:47
@ ACC_DATA_Z_LSB
Definition bno055.hpp:31
@ MAG_DATA_Z_MSB
Definition bno055.hpp:38
@ INT_EN
Definition bno055.hpp:116
@ LIA_DATA_X_LSB
Definition bno055.hpp:59
@ QUA_DATA_W_LSB
Definition bno055.hpp:51
@ MAG_OFFSET_Y_LSB
Definition bno055.hpp:93
@ GYR_ID
Definition bno055.hpp:22
@ CHIP_ID
Definition bno055.hpp:19
@ LIA_DATA_Y_MSB
Definition bno055.hpp:62
@ MAG_DATA_Y_LSB
Definition bno055.hpp:35
@ GRV_DATA_X_MSB
Definition bno055.hpp:66
@ SYS_CLK_STATUS
Definition bno055.hpp:75
@ MAG_OFFSET_Z_MSB
Definition bno055.hpp:96
@ GYR_OFFSET_Y_MSB
Definition bno055.hpp:100
@ QUA_DATA_Z_LSB
Definition bno055.hpp:57
@ QUA_DATA_Y_MSB
Definition bno055.hpp:56
@ GRV_DATA_X_LSB
Definition bno055.hpp:65
@ GRV_DATA_Z_MSB
Definition bno055.hpp:70
@ MAG_OFFSET_X_MSB
Definition bno055.hpp:92
@ SYS_STATUS
Definition bno055.hpp:76
@ LIA_DATA_Z_LSB
Definition bno055.hpp:63
@ ACC_DATA_Y_MSB
Definition bno055.hpp:30
@ LIA_DATA_X_MSB
Definition bno055.hpp:60
@ ST_RESULT
Definition bno055.hpp:73
@ ACC_ID
Definition bno055.hpp:20
@ GYR_HR_Y_SET
Definition bno055.hpp:126
@ TEMP
Definition bno055.hpp:71
@ ACC_OFFSET_X_MSB
Definition bno055.hpp:86
@ ACC_OFFSET_Z_MSB
Definition bno055.hpp:90
@ GYR_CONFIG_0
Definition bno055.hpp:111
@ ACC_NM_THRES
Definition bno055.hpp:121
@ MAG_DATA_X_LSB
Definition bno055.hpp:33
@ EUL_DATA_Y_MSB
Definition bno055.hpp:48
@ GYR_DUR_Y
Definition bno055.hpp:127
@ ACC_INT_SETTINGS
Definition bno055.hpp:118
@ GYR_INT_SETTING
Definition bno055.hpp:123
@ SW_REV_ID_MSB
Definition bno055.hpp:24
@ GYR_AM_SET
Definition bno055.hpp:131
@ ACC_CONFIG
Definition bno055.hpp:109
@ QUA_DATA_X_MSB
Definition bno055.hpp:54
@ GYR_DUR_X
Definition bno055.hpp:125
@ PWR_MODE
Definition bno055.hpp:80
@ ACC_OFFSET_Y_MSB
Definition bno055.hpp:88
@ MAG_RADIUS_MSB
Definition bno055.hpp:106
@ OPR_MODE
Definition bno055.hpp:79
@ GYR_DATA_X_LSB
Definition bno055.hpp:39
@ EUL_DATA_X_MSB
Definition bno055.hpp:46
@ MAG_OFFSET_Z_LSB
Definition bno055.hpp:95
@ GYR_HR_Z_SET
Definition bno055.hpp:128
@ SYS_TRIGGER
Definition bno055.hpp:81
@ ACC_HG_THRES
Definition bno055.hpp:120
@ SW_REV_ID_LSB
Definition bno055.hpp:23
@ LIA_DATA_Y_LSB
Definition bno055.hpp:61
@ ACC_NM_SET
Definition bno055.hpp:122
@ ACC_DATA_Y_LSB
Definition bno055.hpp:29
@ AXIS_MAP_SIGN
Definition bno055.hpp:84
@ GYR_DATA_Y_LSB
Definition bno055.hpp:41
@ GYR_DUR_Z
Definition bno055.hpp:129
@ TEMP_SOURCE
Definition bno055.hpp:82
@ QUA_DATA_Z_MSB
Definition bno055.hpp:58
@ ACC_DATA_Z_MSB
Definition bno055.hpp:32
@ GYR_AM_THRES
Definition bno055.hpp:130
@ INT_STA
Definition bno055.hpp:74