Skip to content

Commit f0d1825

Browse files
icyqwqlbuque
authored andcommitted
cmodule: Add m5utils and remap method.
Signed-off-by: icyqwq <[email protected]>
1 parent a1df3bb commit f0d1825

File tree

6 files changed

+130
-0
lines changed

6 files changed

+130
-0
lines changed

m5stack/cmodules/cmodules.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
# add cdrivers
66
include(${CMAKE_CURRENT_LIST_DIR}/cdriver/cdriver.cmake)
7+
include(${CMAKE_CURRENT_LIST_DIR}/m5utils/m5utils.cmake)
78

89
if(M5_CAMERA_MODULE_ENABLE)
910
# add m5camera module

m5stack/cmodules/m5utils/m5utils.c

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
2+
//
3+
// SPDX-License-Identifier: MIT
4+
5+
#include <stdio.h>
6+
#include <string.h>
7+
#include <sys/time.h>
8+
9+
#include "py/runtime.h"
10+
11+
STATIC mp_obj_t m5_utils_remap(size_t n_args, const mp_obj_t *args) {
12+
mp_float_t x = mp_obj_get_float(args[0]);
13+
mp_float_t in_min = mp_obj_get_float(args[1]);
14+
mp_float_t in_max = mp_obj_get_float(args[2]);
15+
mp_float_t out_min = mp_obj_get_float(args[3]);
16+
mp_float_t out_max = mp_obj_get_float(args[4]);
17+
18+
if (in_max == in_min) {
19+
// 抛出异常或返回错误
20+
mp_raise_ValueError("Input range cannot be zero");
21+
return mp_const_none;
22+
}
23+
24+
mp_float_t result = (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
25+
return mp_obj_new_float(result);
26+
}
27+
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(m5_utils_remap_obj, 5, 5, m5_utils_remap);
28+
29+
30+
STATIC const mp_rom_map_elem_t m5utils_module_globals_table[] = {
31+
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_m5utils) },
32+
33+
{ MP_ROM_QSTR(MP_QSTR_remap), MP_ROM_PTR(&m5_utils_remap_obj) },
34+
};
35+
36+
STATIC MP_DEFINE_CONST_DICT(m5utils_module_globals, m5utils_module_globals_table);
37+
38+
const mp_obj_module_t m5utils_module = {
39+
.base = { &mp_type_module },
40+
.globals = (mp_obj_dict_t *)&m5utils_module_globals,
41+
};
42+
43+
MP_REGISTER_MODULE(MP_QSTR_m5utils, m5utils_module);
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
2+
#
3+
# SPDX-License-Identifier: MIT
4+
5+
add_library(usermod_M5UTILS INTERFACE)
6+
7+
target_sources(usermod_M5UTILS INTERFACE
8+
${CMAKE_CURRENT_LIST_DIR}/m5utils.c
9+
)
10+
11+
target_include_directories(usermod_M5UTILS INTERFACE
12+
${CMAKE_CURRENT_LIST_DIR}
13+
)
14+
15+
target_link_libraries(usermod INTERFACE usermod_M5UTILS)
16+
17+
set_source_files_properties(
18+
${CMAKE_CURRENT_LIST_DIR}/m5utils.c
19+
PROPERTIES COMPILE_FLAGS
20+
"-Wno-discarded-qualifiers -Wno-implicit-int"
21+
)

third-party/cmodules/cmodules.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
22
#
33
# SPDX-License-Identifier: MIT
4+
include(${CMAKE_CURRENT_LIST_DIR}/m5utils/m5utils.cmake)
45

56
if(M5_CAMERA_MODULE_ENABLE)
67
# add m5camera module
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
2+
//
3+
// SPDX-License-Identifier: MIT
4+
5+
#include <stdio.h>
6+
#include <string.h>
7+
#include <sys/time.h>
8+
9+
#include "py/runtime.h"
10+
11+
STATIC mp_obj_t m5_utils_remap(size_t n_args, const mp_obj_t *args) {
12+
mp_float_t x = mp_obj_get_float(args[0]);
13+
mp_float_t in_min = mp_obj_get_float(args[1]);
14+
mp_float_t in_max = mp_obj_get_float(args[2]);
15+
mp_float_t out_min = mp_obj_get_float(args[3]);
16+
mp_float_t out_max = mp_obj_get_float(args[4]);
17+
18+
if (in_max == in_min) {
19+
// 抛出异常或返回错误
20+
mp_raise_ValueError("Input range cannot be zero");
21+
return mp_const_none;
22+
}
23+
24+
mp_float_t result = (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
25+
return mp_obj_new_float(result);
26+
}
27+
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(m5_utils_remap_obj, 5, 5, m5_utils_remap);
28+
29+
30+
STATIC const mp_rom_map_elem_t m5utils_module_globals_table[] = {
31+
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_m5utils) },
32+
33+
{ MP_ROM_QSTR(MP_QSTR_remap), MP_ROM_PTR(&m5_utils_remap_obj) },
34+
};
35+
36+
STATIC MP_DEFINE_CONST_DICT(m5utils_module_globals, m5utils_module_globals_table);
37+
38+
const mp_obj_module_t m5utils_module = {
39+
.base = { &mp_type_module },
40+
.globals = (mp_obj_dict_t *)&m5utils_module_globals,
41+
};
42+
43+
MP_REGISTER_MODULE(MP_QSTR_m5utils, m5utils_module);
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
2+
#
3+
# SPDX-License-Identifier: MIT
4+
5+
add_library(usermod_M5UTILS INTERFACE)
6+
7+
target_sources(usermod_M5UTILS INTERFACE
8+
${CMAKE_CURRENT_LIST_DIR}/m5utils.c
9+
)
10+
11+
target_include_directories(usermod_M5UTILS INTERFACE
12+
${CMAKE_CURRENT_LIST_DIR}
13+
)
14+
15+
target_link_libraries(usermod INTERFACE usermod_M5UTILS)
16+
17+
set_source_files_properties(
18+
${CMAKE_CURRENT_LIST_DIR}/m5utils.c
19+
PROPERTIES COMPILE_FLAGS
20+
"-Wno-discarded-qualifiers -Wno-implicit-int"
21+
)

0 commit comments

Comments
 (0)