diff --git a/src/Makefile b/src/Makefile index 4ad59ddbe..c0a1a15a8 100755 --- a/src/Makefile +++ b/src/Makefile @@ -210,6 +210,7 @@ FIRM_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/img/,\ FIRM_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/py/, \ py_helper.o \ + py_omv.o \ py_sensor.o \ py_image.o \ py_time.o \ diff --git a/src/micropython b/src/micropython index 5d1b550a5..6416c0f74 160000 --- a/src/micropython +++ b/src/micropython @@ -1 +1 @@ -Subproject commit 5d1b550a5f94bc7fefd06c790e40a6e8f35cee9e +Subproject commit 6416c0f7455668c37b9fffdff4937b31d379fe06 diff --git a/src/omv/Makefile b/src/omv/Makefile index 017b4df3d..8c3a74b6a 100644 --- a/src/omv/Makefile +++ b/src/omv/Makefile @@ -80,6 +80,7 @@ SRCS += $(addprefix img/, \ SRCS += $(addprefix py/, \ py_helper.c \ + py_omv.c \ py_sensor.c \ py_image.c \ py_time.c \ diff --git a/src/omv/py/py_omv.c b/src/omv/py/py_omv.c new file mode 100644 index 000000000..ca5002da8 --- /dev/null +++ b/src/omv/py/py_omv.c @@ -0,0 +1,61 @@ +/* This file is part of the OpenMV project. + * Copyright (c) 2013-2018 Ibrahim Abdelkader & Kwabena W. Agyeman + * This work is licensed under the MIT license, see the file LICENSE for details. + */ +#include +#include "usbdbg.h" +#include "omv_boardconfig.h" + +static mp_obj_t py_omv_version_string() +{ + char str[12]; + snprintf(str, 12, "%d.%d.%d", + FIRMWARE_VERSION_MAJOR, + FIRMWARE_VERSION_MINOR, + FIRMWARE_VERSION_PATCH); + return mp_obj_new_str(str, strlen(str)); +} +STATIC MP_DEFINE_CONST_FUN_OBJ_0(py_omv_version_string_obj, py_omv_version_string); + +static mp_obj_t py_omv_arch() +{ + char *str = OMV_ARCH_STR; + return mp_obj_new_str(str, strlen(str)); +} +STATIC MP_DEFINE_CONST_FUN_OBJ_0(py_omv_arch_obj, py_omv_arch); + +static mp_obj_t py_omv_board_type() +{ + char *str = OMV_BOARD_TYPE; + return mp_obj_new_str(str, strlen(str)); +} +STATIC MP_DEFINE_CONST_FUN_OBJ_0(py_omv_board_type_obj, py_omv_board_type); + +static mp_obj_t py_omv_board_id() +{ + char str[25]; + snprintf(str, 25, "%08X%08X%08X", + *((unsigned int *) (OMV_UNIQUE_ID_ADDR + 8)), + *((unsigned int *) (OMV_UNIQUE_ID_ADDR + 4)), + *((unsigned int *) (OMV_UNIQUE_ID_ADDR + 0))); + return mp_obj_new_str(str, strlen(str)); +} +STATIC MP_DEFINE_CONST_FUN_OBJ_0(py_omv_board_id_obj, py_omv_board_id); + +static const mp_rom_map_elem_t globals_dict_table[] = { + { MP_ROM_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_omv) }, + { MP_ROM_QSTR(MP_QSTR_version_major), MP_ROM_INT(FIRMWARE_VERSION_MAJOR) }, + { MP_ROM_QSTR(MP_QSTR_version_minor), MP_ROM_INT(FIRMWARE_VERSION_MINOR) }, + { MP_ROM_QSTR(MP_QSTR_version_patch), MP_ROM_INT(FIRMWARE_VERSION_PATCH) }, + { MP_ROM_QSTR(MP_QSTR_version_string), MP_ROM_PTR(&py_omv_version_string_obj) }, + { MP_ROM_QSTR(MP_QSTR_arch), MP_ROM_PTR(&py_omv_arch_obj) }, + { MP_ROM_QSTR(MP_QSTR_board_type), MP_ROM_PTR(&py_omv_board_type_obj) }, + { MP_ROM_QSTR(MP_QSTR_board_id), MP_ROM_PTR(&py_omv_board_id_obj) } +}; + +STATIC MP_DEFINE_CONST_DICT(globals_dict, globals_dict_table); + +const mp_obj_module_t omv_module = { + .base = { &mp_type_module }, + .globals = (mp_obj_t) &globals_dict, +}; diff --git a/src/omv/py/qstrdefsomv.h b/src/omv/py/qstrdefsomv.h index 9e2a96e76..7f041a5de 100644 --- a/src/omv/py/qstrdefsomv.h +++ b/src/omv/py/qstrdefsomv.h @@ -7,6 +7,16 @@ * */ +// OMV Module +Q(omv) +Q(version_major) +Q(version_minor) +Q(version_patch) +Q(version_string) +Q(arch) +Q(board_type) +Q(board_id) + // Image module Q(image) Q(Image)