Skip to content
Snippets Groups Projects
Verified Commit 96d3843f authored by koalo's avatar koalo Committed by rahix
Browse files

feat(bhi160): Provide orientation data

parent 99b6e7c9
No related branches found
No related tags found
No related merge requests found
...@@ -157,11 +157,13 @@ API(API_INTERRUPT_DISABLE, int epic_interrupt_disable(api_int_id_t int_id)); ...@@ -157,11 +157,13 @@ API(API_INTERRUPT_DISABLE, int epic_interrupt_disable(api_int_id_t int_id));
/** BHI */ /** BHI */
#define EPIC_INT_BHI160_ACCELEROMETER 4 #define EPIC_INT_BHI160_ACCELEROMETER 4
API_ISR(EPIC_INT_BHI160_ACCELEROMETER, epic_isr_bhi160_accelerometer); API_ISR(EPIC_INT_BHI160_ACCELEROMETER, epic_isr_bhi160_accelerometer);
#define EPIC_INT_BHI160_GYROSCOPE 5 #define EPIC_INT_BHI160_ORIENTATION 5
API_ISR(EPIC_INT_BHI160_ORIENTATION, epic_isr_bhi160_orientation);
#define EPIC_INT_BHI160_GYROSCOPE 6
API_ISR(EPIC_INT_BHI160_GYROSCOPE, epic_isr_bhi160_gyroscope); API_ISR(EPIC_INT_BHI160_GYROSCOPE, epic_isr_bhi160_gyroscope);
/* Number of defined interrupts. */ /* Number of defined interrupts. */
#define EPIC_INT_NUM 6 #define EPIC_INT_NUM 7
/* clang-format on */ /* clang-format on */
/* /*
...@@ -923,7 +925,7 @@ enum bhi160_sensor_type { ...@@ -923,7 +925,7 @@ enum bhi160_sensor_type {
BHI160_ACCELEROMETER = 0, BHI160_ACCELEROMETER = 0,
/** Magnetometer (**Unimplemented**) */ /** Magnetometer (**Unimplemented**) */
BHI160_MAGNETOMETER = 1, BHI160_MAGNETOMETER = 1,
/** Orientation (**Unimplemented**) */ /** Orientation */
BHI160_ORIENTATION = 2, BHI160_ORIENTATION = 2,
/** Gyroscope */ /** Gyroscope */
BHI160_GYROSCOPE = 3, BHI160_GYROSCOPE = 3,
......
...@@ -88,6 +88,8 @@ static bhy_virtual_sensor_t bhi160_lookup_vs_id(enum bhi160_sensor_type type) ...@@ -88,6 +88,8 @@ static bhy_virtual_sensor_t bhi160_lookup_vs_id(enum bhi160_sensor_type type)
switch (type) { switch (type) {
case BHI160_ACCELEROMETER: case BHI160_ACCELEROMETER:
return VS_ID_ACCELEROMETER; return VS_ID_ACCELEROMETER;
case BHI160_ORIENTATION:
return VS_ID_ORIENTATION;
case BHI160_GYROSCOPE: case BHI160_GYROSCOPE:
return VS_ID_GYROSCOPE; return VS_ID_GYROSCOPE;
default: default:
...@@ -103,6 +105,8 @@ static int bhi160_lookup_sd(enum bhi160_sensor_type type) ...@@ -103,6 +105,8 @@ static int bhi160_lookup_sd(enum bhi160_sensor_type type)
switch (type) { switch (type) {
case BHI160_ACCELEROMETER: case BHI160_ACCELEROMETER:
return SD_BHI160_ACCELEROMETER; return SD_BHI160_ACCELEROMETER;
case BHI160_ORIENTATION:
return SD_BHI160_ORIENTATION;
case BHI160_GYROSCOPE: case BHI160_GYROSCOPE:
return SD_BHI160_GYROSCOPE; return SD_BHI160_GYROSCOPE;
default: default:
...@@ -237,10 +241,12 @@ bhi160_handle_packet(bhy_data_type_t data_type, bhy_data_generic_t *sensor_data) ...@@ -237,10 +241,12 @@ bhi160_handle_packet(bhy_data_type_t data_type, bhy_data_generic_t *sensor_data)
sensor_data->data_scalar_u16.data; sensor_data->data_scalar_u16.data;
break; break;
case VS_ID_ACCELEROMETER_WAKEUP: case VS_ID_ACCELEROMETER_WAKEUP:
case VS_ID_ORIENTATION_WAKEUP:
case VS_ID_GYROSCOPE_WAKEUP: case VS_ID_GYROSCOPE_WAKEUP:
wakeup = true; wakeup = true;
/* fall through */ /* fall through */
case VS_ID_ACCELEROMETER: case VS_ID_ACCELEROMETER:
case VS_ID_ORIENTATION:
case VS_ID_GYROSCOPE: case VS_ID_GYROSCOPE:
switch (sensor_id) { switch (sensor_id) {
case VS_ID_ACCELEROMETER_WAKEUP: case VS_ID_ACCELEROMETER_WAKEUP:
...@@ -248,6 +254,11 @@ bhi160_handle_packet(bhy_data_type_t data_type, bhy_data_generic_t *sensor_data) ...@@ -248,6 +254,11 @@ bhi160_handle_packet(bhy_data_type_t data_type, bhy_data_generic_t *sensor_data)
sensor_type = BHI160_ACCELEROMETER; sensor_type = BHI160_ACCELEROMETER;
epic_int = EPIC_INT_BHI160_ACCELEROMETER; epic_int = EPIC_INT_BHI160_ACCELEROMETER;
break; break;
case VS_ID_ORIENTATION_WAKEUP:
case VS_ID_ORIENTATION:
sensor_type = BHI160_ORIENTATION;
epic_int = EPIC_INT_BHI160_ORIENTATION;
break;
case VS_ID_GYROSCOPE_WAKEUP: case VS_ID_GYROSCOPE_WAKEUP:
case VS_ID_GYROSCOPE: case VS_ID_GYROSCOPE:
sensor_type = BHI160_GYROSCOPE; sensor_type = BHI160_GYROSCOPE;
......
...@@ -27,6 +27,7 @@ typedef unsigned int size_t; ...@@ -27,6 +27,7 @@ typedef unsigned int size_t;
enum stream_descriptor { enum stream_descriptor {
/** BHI160 */ /** BHI160 */
SD_BHI160_ACCELEROMETER, SD_BHI160_ACCELEROMETER,
SD_BHI160_ORIENTATION,
SD_BHI160_GYROSCOPE, SD_BHI160_GYROSCOPE,
/** Highest descriptor must always be ``SD_MAX``. */ /** Highest descriptor must always be ``SD_MAX``. */
SD_MAX, SD_MAX,
......
...@@ -87,6 +87,8 @@ static const mp_rom_map_elem_t interrupt_module_globals_table[] = { ...@@ -87,6 +87,8 @@ static const mp_rom_map_elem_t interrupt_module_globals_table[] = {
MP_OBJ_NEW_SMALL_INT(EPIC_INT_RTC_ALARM) }, MP_OBJ_NEW_SMALL_INT(EPIC_INT_RTC_ALARM) },
{ MP_ROM_QSTR(MP_QSTR_BHI160_ACCELEROMETER), { MP_ROM_QSTR(MP_QSTR_BHI160_ACCELEROMETER),
MP_OBJ_NEW_SMALL_INT(EPIC_INT_BHI160_ACCELEROMETER) }, MP_OBJ_NEW_SMALL_INT(EPIC_INT_BHI160_ACCELEROMETER) },
{ MP_ROM_QSTR(MP_QSTR_BHI160_ORIENTATION),
MP_OBJ_NEW_SMALL_INT(EPIC_INT_BHI160_ORIENTATION) },
{ MP_ROM_QSTR(MP_QSTR_BHI160_GYROSCOPE), { MP_ROM_QSTR(MP_QSTR_BHI160_GYROSCOPE),
MP_OBJ_NEW_SMALL_INT(EPIC_INT_BHI160_GYROSCOPE) }, MP_OBJ_NEW_SMALL_INT(EPIC_INT_BHI160_GYROSCOPE) },
}; };
......
...@@ -96,3 +96,29 @@ class BHI160Gyroscope(BHI160): ...@@ -96,3 +96,29 @@ class BHI160Gyroscope(BHI160):
"z": self.convert_single(sample[2]), "z": self.convert_single(sample[2]),
} }
) )
class BHI160Orientation(BHI160):
def __init__(
self, sample_rate=4, dynamic_range=2, callback=None, sample_buffer_len=200
):
self.sample_rate = sample_rate
self.dynamic_range = dynamic_range
self.callback = callback
self.sample_buffer_len = sample_buffer_len
self.sensor_id = 2
self.interrupt_id = interrupt.BHI160_ORIENTATION
self._callback = callback
self.enable_sensor()
def convert_single(self, value):
return 360 * value / 32768.0
def convert(self, sample):
return dict(
{
"x": self.convert_single(sample[0]),
"y": self.convert_single(sample[1]),
"z": self.convert_single(sample[2]),
}
)
...@@ -58,6 +58,7 @@ Q(set_callback) ...@@ -58,6 +58,7 @@ Q(set_callback)
Q(enable_callback) Q(enable_callback)
Q(disable_callback) Q(disable_callback)
Q(BHI160_ACCELEROMETER) Q(BHI160_ACCELEROMETER)
Q(BHI160_ORIENTATION)
Q(BHI160_GYROSCOPE) Q(BHI160_GYROSCOPE)
Q(RTC_ALARM) Q(RTC_ALARM)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment