Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
François Revol
firmware
Commits
25fc8939
Verified
Commit
25fc8939
authored
Jul 27, 2019
by
schneider
Committed by
Rahix
Aug 22, 2019
Browse files
feat(bhi160): Initial Python support for the accelerometer
parent
163954af
Changes
9
Hide whitespace changes
Inline
Side-by-side
epicardium/epicardium.h
View file @
25fc8939
...
...
@@ -156,9 +156,12 @@ API(API_INTERRUPT_DISABLE, int epic_interrupt_disable(api_int_id_t int_id));
#define EPIC_INT_UART_RX 2
/** RTC Alarm interrupt. See :c:func:`epic_isr_rtc_alarm` */
#define EPIC_INT_RTC_ALARM 3
/** TODO: BHI */
#define EPIC_INT_BHI160_ACCELEROMETER 4
API_ISR
(
EPIC_INT_BHI160_ACCELEROMETER
,
epic_isr_bhi160_accelerometer
);
/* Number of defined interrupts. */
#define EPIC_INT_NUM
4
#define EPIC_INT_NUM
5
/* clang-format on */
/*
...
...
epicardium/modules/bhi.c
View file @
25fc8939
...
...
@@ -11,6 +11,7 @@
#include
"semphr.h"
#include
"queue.h"
#include
"api/interrupt-sender.h"
#include
"epicardium.h"
#include
"modules/log.h"
#include
"modules/modules.h"
...
...
@@ -211,6 +212,9 @@ bhi160_handle_packet(bhy_data_type_t data_type, bhy_data_generic_t *sensor_data)
&
data_vector
,
BHI160_MUTEX_WAIT_MS
);
if
(
sensor_id
==
VS_ID_ACCELEROMETER_WAKEUP
)
{
api_interrupt_trigger
(
EPIC_INT_BHI160_ACCELEROMETER
);
}
break
;
default:
break
;
...
...
pycardium/meson.build
View file @
25fc8939
name
=
'pycardium'
modsrc
=
files
(
'modules/bhi160-sys.c'
,
'modules/buttons.c'
,
'modules/fat_file.c'
,
'modules/fat_reader_import.c'
,
...
...
pycardium/modules/bhi160-sys.c
0 → 100644
View file @
25fc8939
#include
"py/obj.h"
#include
"py/runtime.h"
#include
"py/builtin.h"
#include
"epicardium.h"
#include
"api/common.h"
#include
"mphalport.h"
STATIC
mp_obj_t
mp_bhi160_enable_sensor
(
size_t
n_args
,
const
mp_obj_t
*
args
)
{
int
sensor_type
=
mp_obj_get_int
(
args
[
0
]);
struct
bhi160_sensor_config
cfg
=
{
0
};
cfg
.
sample_buffer_len
=
mp_obj_get_int
(
args
[
1
]);
cfg
.
sample_rate
=
mp_obj_get_int
(
args
[
2
]);
cfg
.
dynamic_range
=
mp_obj_get_int
(
args
[
3
]);
//cfg.sample_buffer_len = 200;
//cfg.sample_rate = 4;
//cfg.dynamic_range = 2;
int
sd
=
epic_bhi160_enable_sensor
(
sensor_type
,
&
cfg
);
return
MP_OBJ_NEW_SMALL_INT
(
sd
);
}
STATIC
mp_obj_t
mp_bhi160_read_sensor
(
mp_obj_t
stream_id_in
)
{
struct
bhi160_data_vector
buf
[
100
];
int
sd
=
mp_obj_get_int
(
stream_id_in
);
int
n
=
epic_stream_read
(
sd
,
buf
,
sizeof
(
buf
));
return
MP_OBJ_NEW_SMALL_INT
(
n
);
}
STATIC
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN
(
mp_bhi160_enable_sensor_obj
,
4
,
4
,
mp_bhi160_enable_sensor
);
STATIC
MP_DEFINE_CONST_FUN_OBJ_1
(
mp_bhi160_read_sensor_obj
,
mp_bhi160_read_sensor
);
STATIC
const
mp_rom_map_elem_t
bhi160_module_globals_table
[]
=
{
{
MP_ROM_QSTR
(
MP_QSTR___name__
),
MP_ROM_QSTR
(
MP_QSTR_sys_bhi160
)
},
{
MP_ROM_QSTR
(
MP_QSTR_enable_sensor
),
MP_ROM_PTR
(
&
mp_bhi160_enable_sensor_obj
)
},
{
MP_ROM_QSTR
(
MP_QSTR_read_sensor
),
MP_ROM_PTR
(
&
mp_bhi160_read_sensor_obj
)
},
};
STATIC
MP_DEFINE_CONST_DICT
(
bhi160_module_globals
,
bhi160_module_globals_table
);
// Define module object.
const
mp_obj_module_t
bhi160_module
=
{
.
base
=
{
&
mp_type_module
},
.
globals
=
(
mp_obj_dict_t
*
)
&
bhi160_module_globals
,
};
/* clang-format off */
// Register the module to make it available in Python
MP_REGISTER_MODULE
(
MP_QSTR_sys_bhi160
,
bhi160_module
,
MODULE_BHI160_ENABLED
);
pycardium/modules/interrupt.c
View file @
25fc8939
...
...
@@ -85,6 +85,8 @@ static const mp_rom_map_elem_t interrupt_module_globals_table[] = {
/* Interrupt Numbers */
{
MP_ROM_QSTR
(
MP_QSTR_RTC_ALARM
),
MP_OBJ_NEW_SMALL_INT
(
EPIC_INT_RTC_ALARM
)
},
{
MP_ROM_QSTR
(
MP_QSTR_BHI160_ACCELEROMETER
),
MP_OBJ_NEW_SMALL_INT
(
EPIC_INT_BHI160_ACCELEROMETER
)
},
};
static
MP_DEFINE_CONST_DICT
(
interrupt_module_globals
,
interrupt_module_globals_table
...
...
pycardium/modules/py/bhi160.py
0 → 100644
View file @
25fc8939
import
sys_bhi160
import
interrupt
class
BHI160Accelerometer
:
def
__init__
(
self
,
sample_rate
=
4
,
dynamic_range
=
2
,
callback
=
None
,
sample_buffer_len
=
200
):
interrupt
.
disable_callback
(
interrupt
.
BHI160_ACCELEROMETER
)
interrupt
.
set_callback
(
interrupt
.
BHI160_ACCELEROMETER
,
self
.
_accelerometer_interrupt
)
self
.
acc_sd
=
sys_bhi160
.
enable_sensor
(
0
,
sample_buffer_len
,
sample_rate
,
dynamic_range
)
self
.
_callback
=
callback
if
callback
:
interrupt
.
enable_callback
(
interrupt
.
BHI160_ACCELEROMETER
)
def
__enter__
(
self
):
return
self
def
__exit__
(
self
,
_et
,
_ev
,
_t
):
self
.
close
()
def
close
(
self
):
if
self
.
acc_sd
is
not
None
:
self
.
acc_sd
=
None
self
.
acc_sd
=
sys_bhi160
.
disable_sensor
(
0
)
interrupt
.
disable_callback
(
interrupt
.
BHI160_ACCELEROMETER
)
interrupt
.
set_callback
(
interrupt
.
BHI160_ACCELEROMETER
,
None
)
def
_accelerometer_interrupt
(
self
,
_
):
if
self
.
acc_sd
is
not
None
:
data
=
sys_bhi160
.
read_sensor
(
self
.
acc_sd
)
print
(
data
)
if
self
.
_callback
:
self
.
_callback
(
data
)
pycardium/modules/py/meson.build
View file @
25fc8939
python_modules
=
files
(
'bhi160.py'
,
'color.py'
,
'htmlcolor.py'
,
'display.py'
,
...
...
pycardium/modules/qstrdefs.h
View file @
25fc8939
...
...
@@ -57,9 +57,14 @@ Q(vibrate)
Q
(
set_callback
)
Q
(
enable_callback
)
Q
(
disable_callback
)
Q
(
BHI160
)
Q
(
BHI160
_ACCELEROMETER
)
Q
(
RTC_ALARM
)
/* bhi160 */
Q
(
sys_bhi160
)
Q
(
enable_sensor
)
Q
(
read_sensor
)
/* display */
Q
(
sys_display
)
Q
(
display
)
...
...
pycardium/mpconfigport.h
View file @
25fc8939
...
...
@@ -45,6 +45,7 @@ int mp_hal_trng_read_int(void);
#define MICROPY_PY_UERRNO (1)
/* Modules */
#define MODULE_BHI160_ENABLED (1)
#define MODULE_BME680_ENABLED (1)
#define MODULE_BUTTONS_ENABLED (1)
#define MODULE_DISPLAY_ENABLED (1)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment