Merge branch 'master' into m5stack-dev

This commit is contained in:
0x1abin
2018-04-17 09:45:15 +08:00
18 changed files with 886 additions and 25 deletions
@@ -322,7 +322,12 @@ STATIC void machine_uart_print(const mp_print_t *print, mp_obj_t self_in, mp_pri
mp_printf(print, "\n data CB: True, on len: %d", self->data_cb_size);
}
if (self->pattern_cb) {
mp_printf(print, "\n pattern CB: True, pattern: [%s]", self->pattern);
char pattern[80] = {'\0'};
for (int i=0; i<self->pattern_len; i++) {
if ((self->pattern[i] >= 0x20) && (self->pattern[i] < 0x7f)) pattern[strlen(pattern)] = self->pattern[i];
else sprintf(pattern+strlen(pattern), "\\x%02x", self->pattern[i]);
}
mp_printf(print, "\n pattern CB: True, pattern: b'%s'", pattern);
}
if (self->error_cb) {
mp_printf(print, "\n error CB: True");
@@ -438,10 +443,16 @@ STATIC void machine_uart_init_helper(machine_uart_obj_t *self, size_t n_args, co
if (args[ARG_timeout].u_int >= 0) self->timeout = args[ARG_timeout].u_int;
// set line end
if (MP_OBJ_IS_STR(args[ARG_lineend].u_obj)) {
size_t lnendlen;
const char *lnend = mp_obj_str_get_data(args[ARG_lineend].u_obj, &lnendlen);
if ((lnend) && (lnendlen > 0) && (lnendlen < 3)) sprintf((char *)self->lineend, "%s", lnend);
mp_buffer_info_t lnend_buff;
mp_obj_type_t *type = mp_obj_get_type(args[ARG_lineend].u_obj);
if (type->buffer_p.get_buffer != NULL) {
int ret = type->buffer_p.get_buffer(args[ARG_lineend].u_obj, &lnend_buff, MP_BUFFER_READ);
if (ret == 0) {
if ((lnend_buff.len > 0) && (lnend_buff.len < sizeof(self->lineend))) {
memset(self->lineend, 0, sizeof(self->lineend));
memcpy(self->lineend, lnend_buff.buf, lnend_buff.len);
}
}
}
}
@@ -684,8 +695,12 @@ STATIC mp_obj_t machine_uart_callback(size_t n_args, const mp_obj_t *pos_args, m
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
int datalen = -1;
mp_buffer_info_t pattern_buff;
int cbtype = args[ARG_type].u_int;
if ((!MP_OBJ_IS_FUN(args[ARG_func].u_obj)) && (!MP_OBJ_IS_METH(args[ARG_func].u_obj))) {
// CB function not given, disable callback
if (uart_mutex) xSemaphoreTake(uart_mutex, 200 / portTICK_PERIOD_MS);
switch(cbtype) {
case UART_CB_TYPE_DATA:
@@ -707,29 +722,43 @@ STATIC mp_obj_t machine_uart_callback(size_t n_args, const mp_obj_t *pos_args, m
return mp_const_none;
}
// Get callback parameters
switch(cbtype) {
case UART_CB_TYPE_DATA:
if ((args[ARG_datalen].u_int <= 0) || (args[ARG_datalen].u_int >= self->buffer_size)) {
mp_raise_ValueError("invalid data length");
}
datalen = args[ARG_datalen].u_int;
break;
case UART_CB_TYPE_PATTERN:
{
bool has_pattern = false;
mp_obj_type_t *type = mp_obj_get_type(args[ARG_pattern].u_obj);
if (type->buffer_p.get_buffer != NULL) {
int ret = type->buffer_p.get_buffer(args[ARG_pattern].u_obj, &pattern_buff, MP_BUFFER_READ);
if (ret == 0) {
if ((pattern_buff.len > 0) && (pattern_buff.len <= sizeof(self->pattern))) has_pattern = true;
}
}
if (!has_pattern) {
mp_raise_ValueError("invalid pattern");
}
}
break;
default:
break;
}
int datalen = -1;
size_t patternlen = 0;
const char * pattern = NULL;
if (MP_OBJ_IS_STR(args[ARG_pattern].u_obj)) {
pattern = mp_obj_str_get_data(args[ARG_pattern].u_obj, &patternlen);
if (patternlen > sizeof(self->pattern)) patternlen = sizeof(self->pattern);
}
if ((args[ARG_datalen].u_int >= 0) && (args[ARG_datalen].u_int < self->buffer_size)) datalen = args[ARG_datalen].u_int;
// Set the callback
if (uart_mutex) xSemaphoreTake(uart_mutex, 200 / portTICK_PERIOD_MS);
switch(cbtype) {
case UART_CB_TYPE_DATA:
if (datalen >= 0) self->data_cb_size = datalen;
self->data_cb_size = datalen;
self->data_cb = args[ARG_func].u_obj;
break;
case UART_CB_TYPE_PATTERN:
if (pattern) {
memcpy(self->pattern, pattern, patternlen);
self->pattern_len = patternlen;
}
memcpy(self->pattern, pattern_buff.buf, pattern_buff.len);
self->pattern_len = pattern_buff.len;
self->pattern_cb = args[ARG_func].u_obj;
break;
case UART_CB_TYPE_ERROR:
@@ -848,6 +848,20 @@ STATIC mp_obj_t mod_machine_stdin_disable(mp_obj_t pattern_in) {
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_machine_stdin_disable_obj, mod_machine_stdin_disable);
//---------------------------------------
STATIC mp_obj_t mod_machine_reset_wdt() {
mp_hal_reset_wdt();
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_machine_reset_wdt_obj, mod_machine_reset_wdt);
//-------------------------------------
STATIC mp_obj_t mod_machine_set_wdt() {
mp_hal_set_wdt_tmo();
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_machine_set_wdt_obj, mod_machine_set_wdt);
//===============================================================
STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
@@ -859,6 +873,8 @@ STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_freq), MP_ROM_PTR(&machine_freq_obj) },
{ MP_ROM_QSTR(MP_QSTR_reset), MP_ROM_PTR(&machine_reset_obj) },
{ MP_ROM_QSTR(MP_QSTR_resetWDT), MP_ROM_PTR(&mod_machine_reset_wdt_obj) },
{ MP_ROM_QSTR(MP_QSTR_setWDT), MP_ROM_PTR(&mod_machine_set_wdt_obj) },
{ MP_ROM_QSTR(MP_QSTR_unique_id), MP_ROM_PTR(&machine_unique_id_obj) },
{ MP_ROM_QSTR(MP_QSTR_idle), MP_ROM_PTR(&machine_idle_obj) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_deepsleep), MP_ROM_PTR(&machine_deepsleep_obj) },
File diff suppressed because it is too large Load Diff
@@ -24,12 +24,12 @@
* THE SOFTWARE.
*/
#define MICROPY_GIT_TAG "ESP32_LoBo_v3.2.10"
#define MICROPY_GIT_TAG "ESP32_LoBo_v3.2.11"
#define MICROPY_GIT_HASH "gbae9709a"
#define MICROPY_BUILD_DATE "2018-04-15"
#define MICROPY_BUILD_DATE "2018-04-16"
#define MICROPY_VERSION_MAJOR (3)
#define MICROPY_VERSION_MINOR (2)
#define MICROPY_VERSION_MICRO (10)
#define MICROPY_VERSION_STRING "3.2.10"
#define MICROPY_VERSION_MICRO (11)
#define MICROPY_VERSION_STRING "3.2.11"
#define MICROPY_CORE_VERSION "59dda71"
#define MICROPY_CORE_DATE "2018-04-10"
Binary file not shown.
Binary file not shown.