-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbmi323_i2c_interrupt_streaming.py
46 lines (40 loc) · 1.78 KB
/
bmi323_i2c_interrupt_streaming.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import logging
import struct
import sys
import time
from pathlib import Path
from umrx_app_v3.shuttle_board.bmi323.bmi323_shuttle import BMI323Shuttle
def setup_logging(level: int = logging.DEBUG) -> logging.Logger:
logger = logging.getLogger()
logger.setLevel(level)
stdout_handler = logging.StreamHandler(sys.stdout)
log_format = "(%(asctime)s) [%(levelname)-8s] %(filename)s:%(lineno)d: %(message)s"
log_formatter = logging.Formatter(log_format)
stdout_handler.setFormatter(log_formatter)
file_handler = logging.FileHandler(f"{Path(__file__).parent / Path(__file__).stem}.log", mode="w")
file_handler.setFormatter(log_formatter)
logger.addHandler(stdout_handler)
logger.addHandler(file_handler)
return logger
if __name__ == "__main__":
logger = setup_logging()
# This example is for Application Board 3.1 hardware
shuttle = BMI323Shuttle.on_hardware_v3_rev1()
shuttle.initialize()
shuttle.check_connected_hw()
shuttle.configure_i2c()
logger.info(f"acc_chip_id=0x{shuttle.sensor.chip_id:02X}")
assert shuttle.sensor.chip_id == 0x0043
shuttle.configure_interrupt_streaming()
shuttle.start_streaming()
time.sleep(0.1)
for idx in range(1000):
for streaming in shuttle.board.receive_interrupt_streaming_multiple(includes_mcu_timestamp=False):
sensor_id, packet, time_stamp, payload = streaming
d_x, d_y, d_z = struct.unpack("<xxhhh", payload)
if sensor_id == 1:
logger.info(f"[{idx}][a] {packet=:06d} {' ' * 30} a_x={d_x:04d}, a_y={d_y:04d}, a_z={d_z:04d}")
elif sensor_id == 2:
logger.info(f"[{idx}][g] {packet=:06d} g_x={d_x:04d}, g_y={d_y:04d}, g_z={d_z:04d}")
time.sleep(0.05)
shuttle.board.stop_interrupt_streaming()