Fix merge bugs; remove shared/tinyusb/*
This commit is contained in:
parent
a8fb081166
commit
c0a4abc03c
|
@ -32,7 +32,7 @@
|
||||||
#include "py/binary.h"
|
#include "py/binary.h"
|
||||||
#include "py/objstr.h"
|
#include "py/objstr.h"
|
||||||
|
|
||||||
#include "lib/uzlib/tinf.h"
|
//#include "lib/uzlib/tinf.h"
|
||||||
|
|
||||||
#if MICROPY_PY_BINASCII
|
#if MICROPY_PY_BINASCII
|
||||||
|
|
||||||
|
@ -219,7 +219,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_KW(mod_binascii_b2a_base64_obj, 1, mod_binascii_b
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if MICROPY_PY_UBINASCII_CRC32
|
#if MICROPY_PY_UBINASCII_CRC32
|
||||||
#include "lib/uzlib/tinf.h"
|
//#include "lib/uzlib/uzlib.h"
|
||||||
|
|
||||||
STATIC mp_obj_t mod_binascii_crc32(size_t n_args, const mp_obj_t *args) {
|
STATIC mp_obj_t mod_binascii_crc32(size_t n_args, const mp_obj_t *args) {
|
||||||
mp_buffer_info_t bufinfo;
|
mp_buffer_info_t bufinfo;
|
||||||
|
|
|
@ -31,10 +31,10 @@
|
||||||
#include "py/stream.h"
|
#include "py/stream.h"
|
||||||
#include "py/mperrno.h"
|
#include "py/mperrno.h"
|
||||||
|
|
||||||
#if MICROPY_PY_UZLIB
|
#if MICROPY_PY_ZLIB
|
||||||
|
|
||||||
#define UZLIB_CONF_PARANOID_CHECKS (1)
|
#define UZLIB_CONF_PARANOID_CHECKS (1)
|
||||||
#include "lib/uzlib/tinf.h"
|
#include "lib/uzlib/uzlib.h"
|
||||||
|
|
||||||
#if 0 // print debugging info
|
#if 0 // print debugging info
|
||||||
#define DEBUG_printf DEBUG_printf
|
#define DEBUG_printf DEBUG_printf
|
||||||
|
@ -243,4 +243,4 @@ MP_REGISTER_MODULE(MP_QSTR_zlib, mp_module_uzlib);
|
||||||
#include "lib/uzlib/adler32.c"
|
#include "lib/uzlib/adler32.c"
|
||||||
#include "lib/uzlib/crc32.c"
|
#include "lib/uzlib/crc32.c"
|
||||||
|
|
||||||
#endif // MICROPY_PY_UZLIB
|
#endif // MICROPY_PY_ZLIB
|
||||||
|
|
|
@ -59,8 +59,7 @@ MP_DEFINE_CONST_OBJ_TYPE(
|
||||||
cyw43_pin_type,
|
cyw43_pin_type,
|
||||||
MP_QSTR_CywPin,
|
MP_QSTR_CywPin,
|
||||||
MP_TYPE_FLAG_NONE,
|
MP_TYPE_FLAG_NONE,
|
||||||
print, shared_bindings_microcontroller_pin_print,
|
print, shared_bindings_microcontroller_pin_print
|
||||||
unary_op, mp_generic_unary_op
|
|
||||||
);
|
);
|
||||||
|
|
||||||
//| PM_STANDARD: int
|
//| PM_STANDARD: int
|
||||||
|
|
|
@ -31,6 +31,8 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#include "py/compile.h"
|
#include "py/compile.h"
|
||||||
|
// CIRCUITPY: for gc_collect() after each import
|
||||||
|
#include "py/gc.h"
|
||||||
#include "py/objmodule.h"
|
#include "py/objmodule.h"
|
||||||
#include "py/persistentcode.h"
|
#include "py/persistentcode.h"
|
||||||
#include "py/runtime.h"
|
#include "py/runtime.h"
|
||||||
|
@ -136,7 +138,6 @@ STATIC mp_import_stat_t stat_top_level(qstr mod_name, vstr_t *dest) {
|
||||||
return stat;
|
return stat;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
// sys.path was empty or no matches, do not search the filesystem or
|
// sys.path was empty or no matches, do not search the filesystem or
|
||||||
// frozen code.
|
// frozen code.
|
||||||
|
|
|
@ -255,7 +255,7 @@ STATIC void compile_error_set_line(compiler_t *comp, mp_parse_node_t pn) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC void compile_syntax_error(compiler_t *comp, mp_parse_node_t pn, mp_rom_error_text_t msg) {
|
STATIC void compile_syntax_error(compiler_t *comp, mp_parse_node_t pn, const compressed_string_t *msg) {
|
||||||
// only register the error if there has been no other error
|
// only register the error if there has been no other error
|
||||||
if (comp->compile_error == MP_OBJ_NULL) {
|
if (comp->compile_error == MP_OBJ_NULL) {
|
||||||
comp->compile_error = mp_obj_new_exception_msg(&mp_type_SyntaxError, msg);
|
comp->compile_error = mp_obj_new_exception_msg(&mp_type_SyntaxError, msg);
|
||||||
|
|
17
py/gc.c
17
py/gc.c
|
@ -260,14 +260,6 @@ void gc_add(void *start, void *end) {
|
||||||
prev_area->next = area;
|
prev_area->next = area;
|
||||||
}
|
}
|
||||||
|
|
||||||
// CIRCUITPY
|
|
||||||
// TODO FOR MERGE: fix this for multiple areas??
|
|
||||||
void gc_deinit(void) {
|
|
||||||
// Run any finalisers before we stop using the heap.
|
|
||||||
gc_sweep_all();
|
|
||||||
MP_STATIC_ASSERT(!MICROPY_GC_SPLIT_HEAP);
|
|
||||||
memset(&MP_STATE_MEM(area), 0, sizeof(MP_STATE_MEM(area)));
|
|
||||||
|
|
||||||
#if MICROPY_GC_SPLIT_HEAP_AUTO
|
#if MICROPY_GC_SPLIT_HEAP_AUTO
|
||||||
// Try to automatically add a heap area large enough to fulfill 'failed_alloc'.
|
// Try to automatically add a heap area large enough to fulfill 'failed_alloc'.
|
||||||
STATIC bool gc_try_add_heap(size_t failed_alloc) {
|
STATIC bool gc_try_add_heap(size_t failed_alloc) {
|
||||||
|
@ -346,6 +338,15 @@ STATIC bool gc_try_add_heap(size_t failed_alloc) {
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// CIRCUITPY
|
||||||
|
// TODO FOR MERGE: fix this for multiple areas??
|
||||||
|
void gc_deinit(void) {
|
||||||
|
// Run any finalisers before we stop using the heap.
|
||||||
|
gc_sweep_all();
|
||||||
|
MP_STATIC_ASSERT(!MICROPY_GC_SPLIT_HEAP);
|
||||||
|
memset(&MP_STATE_MEM(area), 0, sizeof(MP_STATE_MEM(area)));
|
||||||
|
}
|
||||||
|
|
||||||
void gc_lock(void) {
|
void gc_lock(void) {
|
||||||
// This does not need to be atomic or have the GC mutex because:
|
// This does not need to be atomic or have the GC mutex because:
|
||||||
// - each thread has its own gc_lock_depth so there are no races between threads;
|
// - each thread has its own gc_lock_depth so there are no races between threads;
|
||||||
|
|
|
@ -26,6 +26,11 @@
|
||||||
#ifndef MICROPY_INCLUDED_PY_MPCONFIG_H
|
#ifndef MICROPY_INCLUDED_PY_MPCONFIG_H
|
||||||
#define MICROPY_INCLUDED_PY_MPCONFIG_H
|
#define MICROPY_INCLUDED_PY_MPCONFIG_H
|
||||||
|
|
||||||
|
// Is this a CircuitPython build?
|
||||||
|
#ifndef CIRCUITPY
|
||||||
|
#define CIRCUITPY 0
|
||||||
|
#endif
|
||||||
|
|
||||||
// In CircuitPython, version info is in genhdr/mpversion.h.
|
// In CircuitPython, version info is in genhdr/mpversion.h.
|
||||||
#if CIRCUITPY
|
#if CIRCUITPY
|
||||||
#include "genhdr/mpversion.h"
|
#include "genhdr/mpversion.h"
|
||||||
|
@ -53,11 +58,6 @@
|
||||||
// You can override any of the options below using mpconfigport.h file
|
// You can override any of the options below using mpconfigport.h file
|
||||||
// located in a directory of your port.
|
// located in a directory of your port.
|
||||||
|
|
||||||
// Is this a CircuitPython build?
|
|
||||||
#ifndef CIRCUITPY
|
|
||||||
#define CIRCUITPY 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// mpconfigport.h is a file containing configuration settings for a
|
// mpconfigport.h is a file containing configuration settings for a
|
||||||
// particular port. mpconfigport.h is actually a default name for
|
// particular port. mpconfigport.h is actually a default name for
|
||||||
// such config, and it can be overridden using MP_CONFIGFILE preprocessor
|
// such config, and it can be overridden using MP_CONFIGFILE preprocessor
|
||||||
|
@ -540,6 +540,15 @@
|
||||||
#define MICROPY_OPT_COMPUTED_GOTO (0)
|
#define MICROPY_OPT_COMPUTED_GOTO (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// CIRCUITPY
|
||||||
|
// Whether to save trade flash space for speed in MICROPY_OPT_COMPUTED_GOTO.
|
||||||
|
// Costs about 3% speed, saves about 1500 bytes space. In addition to the assumptions
|
||||||
|
// of MICROPY_OPT_COMPUTED_GOTO, also assumes that mp_execute_bytecode is less than
|
||||||
|
// 32kB in size.
|
||||||
|
#ifndef MICROPY_OPT_COMPUTED_GOTO_SAVE_SPACE
|
||||||
|
#define MICROPY_OPT_COMPUTED_GOTO_SAVE_SPACE (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
// Optimise the fast path for loading attributes from instance types. Increases
|
// Optimise the fast path for loading attributes from instance types. Increases
|
||||||
// Thumb2 code size by about 48 bytes.
|
// Thumb2 code size by about 48 bytes.
|
||||||
#ifndef MICROPY_OPT_LOAD_ATTR_FAST_PATH
|
#ifndef MICROPY_OPT_LOAD_ATTR_FAST_PATH
|
||||||
|
@ -597,6 +606,12 @@
|
||||||
#define MICROPY_HAS_FILE_READER (MICROPY_READER_POSIX || MICROPY_READER_VFS)
|
#define MICROPY_HAS_FILE_READER (MICROPY_READER_POSIX || MICROPY_READER_VFS)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// CIRCUITPY
|
||||||
|
// Number of VFS mounts to persist across soft-reset.
|
||||||
|
#ifndef MICROPY_FATFS_NUM_PERSISTENT
|
||||||
|
#define MICROPY_FATFS_NUM_PERSISTENT (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
// Hook for the VM at the start of the opcode loop (can contain variable
|
// Hook for the VM at the start of the opcode loop (can contain variable
|
||||||
// definitions usable by the other hook functions)
|
// definitions usable by the other hook functions)
|
||||||
#ifndef MICROPY_VM_HOOK_INIT
|
#ifndef MICROPY_VM_HOOK_INIT
|
||||||
|
@ -1595,6 +1610,7 @@ typedef double mp_float_t;
|
||||||
// TODO? CIRCUITPY_ZLIB instead
|
// TODO? CIRCUITPY_ZLIB instead
|
||||||
#ifndef MICROPY_PY_ZLIB
|
#ifndef MICROPY_PY_ZLIB
|
||||||
#define MICROPY_PY_ZLIB (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
|
#define MICROPY_PY_ZLIB (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
|
||||||
|
#endif
|
||||||
|
|
||||||
// Whether to provide "deflate" module (decompression-only by default)
|
// Whether to provide "deflate" module (decompression-only by default)
|
||||||
#ifndef MICROPY_PY_DEFLATE
|
#ifndef MICROPY_PY_DEFLATE
|
||||||
|
@ -1977,6 +1993,19 @@ typedef double mp_float_t;
|
||||||
#define MP_WEAK __attribute__((weak))
|
#define MP_WEAK __attribute__((weak))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// CIRCUITPY
|
||||||
|
// Modifier for functions which should not be instrumented when tracing with
|
||||||
|
// -finstrument-functions
|
||||||
|
#ifndef MP_NO_INSTRUMENT
|
||||||
|
#define MP_NO_INSTRUMENT __attribute__((no_instrument_function))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// CIRCUITPY
|
||||||
|
// Modifier for functions which should ideally inlined
|
||||||
|
#ifndef MP_INLINE
|
||||||
|
#define MP_INLINE inline MP_NO_INSTRUMENT
|
||||||
|
#endif
|
||||||
|
|
||||||
// Modifier for functions which should be never inlined
|
// Modifier for functions which should be never inlined
|
||||||
#ifndef MP_NOINLINE
|
#ifndef MP_NOINLINE
|
||||||
#define MP_NOINLINE __attribute__((noinline))
|
#define MP_NOINLINE __attribute__((noinline))
|
||||||
|
@ -1997,6 +2026,13 @@ typedef double mp_float_t;
|
||||||
#define MP_UNLIKELY(x) __builtin_expect((x), 0)
|
#define MP_UNLIKELY(x) __builtin_expect((x), 0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// CIRCUITPY
|
||||||
|
// Modifier for functions which aren't often used. Calls will also be considered
|
||||||
|
// unlikely. Section names are `.text.unlikely` for use in linker scripts.
|
||||||
|
#ifndef MP_COLD
|
||||||
|
#define MP_COLD __attribute__((cold))
|
||||||
|
#endif
|
||||||
|
|
||||||
// To annotate that code is unreachable
|
// To annotate that code is unreachable
|
||||||
#ifndef MP_UNREACHABLE
|
#ifndef MP_UNREACHABLE
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
|
|
2
py/obj.h
2
py/obj.h
|
@ -1057,7 +1057,7 @@ mp_obj_t mp_obj_new_memoryview(byte typecode, size_t nitems, void *items);
|
||||||
|
|
||||||
const mp_obj_type_t *mp_obj_get_type(mp_const_obj_t o_in);
|
const mp_obj_type_t *mp_obj_get_type(mp_const_obj_t o_in);
|
||||||
const char *mp_obj_get_type_str(mp_const_obj_t o_in);
|
const char *mp_obj_get_type_str(mp_const_obj_t o_in);
|
||||||
CIRCUITPY
|
// CIRCUITPY
|
||||||
#define mp_obj_get_type_qstr(o_in) (mp_obj_get_type((o_in))->name)
|
#define mp_obj_get_type_qstr(o_in) (mp_obj_get_type((o_in))->name)
|
||||||
bool mp_obj_is_subclass_fast(mp_const_obj_t object, mp_const_obj_t classinfo); // arguments should be type objects
|
bool mp_obj_is_subclass_fast(mp_const_obj_t object, mp_const_obj_t classinfo); // arguments should be type objects
|
||||||
mp_obj_t mp_obj_cast_to_native_base(mp_obj_t self_in, mp_const_obj_t native_type);
|
mp_obj_t mp_obj_cast_to_native_base(mp_obj_t self_in, mp_const_obj_t native_type);
|
||||||
|
|
|
@ -103,8 +103,7 @@ MP_DEFINE_CONST_OBJ_TYPE(
|
||||||
MP_QSTR_coroutine,
|
MP_QSTR_coroutine,
|
||||||
MP_TYPE_FLAG_BINDS_SELF,
|
MP_TYPE_FLAG_BINDS_SELF,
|
||||||
GEN_WRAP_TYPE_ATTR
|
GEN_WRAP_TYPE_ATTR
|
||||||
call, gen_wrap_call,
|
call, gen_wrap_call
|
||||||
unary_op, mp_generic_unary_op
|
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -191,8 +190,7 @@ MP_DEFINE_CONST_OBJ_TYPE(
|
||||||
MP_QSTR_coroutine,
|
MP_QSTR_coroutine,
|
||||||
MP_TYPE_FLAG_BINDS_SELF,
|
MP_TYPE_FLAG_BINDS_SELF,
|
||||||
GEN_WRAP_TYPE_ATTR
|
GEN_WRAP_TYPE_ATTR
|
||||||
call, native_gen_wrap_call,
|
call, native_gen_wrap_call
|
||||||
unary_op, mp_generic_unary_op
|
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -475,7 +473,6 @@ MP_DEFINE_CONST_OBJ_TYPE(
|
||||||
MP_QSTR_coroutine,
|
MP_QSTR_coroutine,
|
||||||
MP_TYPE_FLAG_ITER_IS_ITERNEXT,
|
MP_TYPE_FLAG_ITER_IS_ITERNEXT,
|
||||||
print, coro_instance_print,
|
print, coro_instance_print,
|
||||||
unary_op, mp_generic_unary_op,
|
|
||||||
iter, gen_instance_iternext,
|
iter, gen_instance_iternext,
|
||||||
locals_dict, &coro_instance_locals_dict
|
locals_dict, &coro_instance_locals_dict
|
||||||
);
|
);
|
||||||
|
|
11
py/parse.c
11
py/parse.c
|
@ -653,20 +653,11 @@ STATIC const mp_rom_map_elem_t mp_constants_table[] = {
|
||||||
STATIC MP_DEFINE_CONST_MAP(mp_constants_map, mp_constants_table);
|
STATIC MP_DEFINE_CONST_MAP(mp_constants_map, mp_constants_table);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
STATIC void push_result_rule(parser_t *parser, size_t src_line, uint8_t rule_id, size_t num_args);
|
#if defined(MICROPY_COMP_CONST_FOLDING_COMPILER_WORKAROUND) && MICROPY_COMP_CONST_FOLDING_COMPILER_WORKAROUND
|
||||||
|
|
||||||
#if MICROPY_COMP_CONST_FOLDING
|
|
||||||
// CIRCUITPY: The compilers mentioned below are esp-2020r3. We are using minimum esp-2021r3 (ESP-IDF v4.4).
|
|
||||||
// See https://github.com/micropython/micropython/commit/f63b4f85aae1e0ade7a7c9f908debb5905cc144d
|
|
||||||
// and https://github.com/espressif/esp-idf/issues/9130
|
|
||||||
// So disable this for CircuitPython.
|
|
||||||
/*
|
|
||||||
#if MICROPY_COMP_CONST_FOLDING_COMPILER_WORKAROUND
|
|
||||||
// Some versions of the xtensa-esp32-elf-gcc compiler generate wrong code if this
|
// Some versions of the xtensa-esp32-elf-gcc compiler generate wrong code if this
|
||||||
// function is static, so provide a hook for them to work around this problem.
|
// function is static, so provide a hook for them to work around this problem.
|
||||||
MP_NOINLINE
|
MP_NOINLINE
|
||||||
#endif
|
#endif
|
||||||
*/
|
|
||||||
STATIC bool fold_logical_constants(parser_t *parser, uint8_t rule_id, size_t *num_args) {
|
STATIC bool fold_logical_constants(parser_t *parser, uint8_t rule_id, size_t *num_args) {
|
||||||
if (rule_id == RULE_or_test
|
if (rule_id == RULE_or_test
|
||||||
|| rule_id == RULE_and_test) {
|
|| rule_id == RULE_and_test) {
|
||||||
|
|
|
@ -1393,7 +1393,8 @@ mp_obj_t mp_getiter(mp_obj_t o_in, mp_obj_iter_buf_t *iter_buf) {
|
||||||
|
|
||||||
STATIC mp_fun_1_t type_get_iternext(const mp_obj_type_t *type) {
|
STATIC mp_fun_1_t type_get_iternext(const mp_obj_type_t *type) {
|
||||||
if ((type->flags & MP_TYPE_FLAG_ITER_IS_STREAM) == MP_TYPE_FLAG_ITER_IS_STREAM) {
|
if ((type->flags & MP_TYPE_FLAG_ITER_IS_STREAM) == MP_TYPE_FLAG_ITER_IS_STREAM) {
|
||||||
mp_obj_t mp_stream_unbuffered_iter(mp_obj_t self);
|
// CIRCUITPY: unneeded declaration
|
||||||
|
// mp_obj_t mp_stream_unbuffered_iter(mp_obj_t self);
|
||||||
return mp_stream_unbuffered_iter;
|
return mp_stream_unbuffered_iter;
|
||||||
} else if (type->flags & MP_TYPE_FLAG_ITER_IS_ITERNEXT) {
|
} else if (type->flags & MP_TYPE_FLAG_ITER_IS_ITERNEXT) {
|
||||||
return (mp_fun_1_t)MP_OBJ_TYPE_GET_SLOT(type, iter);
|
return (mp_fun_1_t)MP_OBJ_TYPE_GET_SLOT(type, iter);
|
||||||
|
|
|
@ -163,6 +163,9 @@ static inline void mp_globals_set(mp_obj_dict_t *d) {
|
||||||
MP_STATE_THREAD(dict_globals) = d;
|
MP_STATE_THREAD(dict_globals) = d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mp_globals_locals_set_from_nlr_jump_callback(void *ctx_in);
|
||||||
|
void mp_call_function_1_from_nlr_jump_callback(void *ctx_in);
|
||||||
|
|
||||||
mp_obj_t mp_load_name(qstr qst);
|
mp_obj_t mp_load_name(qstr qst);
|
||||||
mp_obj_t mp_load_global(qstr qst);
|
mp_obj_t mp_load_global(qstr qst);
|
||||||
mp_obj_t mp_load_build_class(void);
|
mp_obj_t mp_load_build_class(void);
|
||||||
|
|
|
@ -248,6 +248,5 @@ MP_DEFINE_CONST_OBJ_TYPE(
|
||||||
bleio_connection_type,
|
bleio_connection_type,
|
||||||
MP_QSTR_Connection,
|
MP_QSTR_Connection,
|
||||||
MP_TYPE_FLAG_NONE,
|
MP_TYPE_FLAG_NONE,
|
||||||
locals_dict, &bleio_connection_locals_dict,
|
locals_dict, &bleio_connection_locals_dict
|
||||||
unary_op, mp_generic_unary_op
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -45,7 +45,9 @@
|
||||||
//| """Returns a hash for the Pin."""
|
//| """Returns a hash for the Pin."""
|
||||||
//| ...
|
//| ...
|
||||||
//|
|
//|
|
||||||
// Provided by mp_generic_unary_op().
|
// Provided inherently.
|
||||||
|
// See https://github.com/micropython/micropython/pull/10348.
|
||||||
|
|
||||||
|
|
||||||
static void get_pin_name(const mcu_pin_obj_t *self, qstr *package, qstr *module, qstr *name) {
|
static void get_pin_name(const mcu_pin_obj_t *self, qstr *package, qstr *module, qstr *name) {
|
||||||
const mp_map_t *board_map = &board_module_globals.map;
|
const mp_map_t *board_map = &board_module_globals.map;
|
||||||
|
@ -86,8 +88,7 @@ MP_DEFINE_CONST_OBJ_TYPE(
|
||||||
mcu_pin_type,
|
mcu_pin_type,
|
||||||
MP_QSTR_Pin,
|
MP_QSTR_Pin,
|
||||||
MP_TYPE_FLAG_NONE,
|
MP_TYPE_FLAG_NONE,
|
||||||
print, shared_bindings_microcontroller_pin_print,
|
print, shared_bindings_microcontroller_pin_print
|
||||||
unary_op, mp_generic_unary_op
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const mcu_pin_obj_t *validate_obj_is_pin(mp_obj_t obj, qstr arg_name) {
|
const mcu_pin_obj_t *validate_obj_is_pin(mp_obj_t obj, qstr arg_name) {
|
||||||
|
|
|
@ -51,7 +51,8 @@
|
||||||
//| def __hash__(self) -> int:
|
//| def __hash__(self) -> int:
|
||||||
//| """Returns a hash for the Socket."""
|
//| """Returns a hash for the Socket."""
|
||||||
//| ...
|
//| ...
|
||||||
// Provided by mp_generic_unary_op().
|
// Provided inherently.
|
||||||
|
// See https://github.com/micropython/micropython/pull/10348.
|
||||||
|
|
||||||
//| def __enter__(self) -> Socket:
|
//| def __enter__(self) -> Socket:
|
||||||
//| """No-op used by Context Managers."""
|
//| """No-op used by Context Managers."""
|
||||||
|
@ -452,6 +453,5 @@ MP_DEFINE_CONST_OBJ_TYPE(
|
||||||
MP_QSTR_Socket,
|
MP_QSTR_Socket,
|
||||||
MP_TYPE_FLAG_NONE,
|
MP_TYPE_FLAG_NONE,
|
||||||
locals_dict, &socketpool_socket_locals_dict,
|
locals_dict, &socketpool_socket_locals_dict,
|
||||||
unary_op, mp_generic_unary_op,
|
|
||||||
protocol, &socket_stream_p
|
protocol, &socket_stream_p
|
||||||
);
|
);
|
||||||
|
|
|
@ -48,7 +48,8 @@
|
||||||
//| def __hash__(self) -> int:
|
//| def __hash__(self) -> int:
|
||||||
//| """Returns a hash for the Socket."""
|
//| """Returns a hash for the Socket."""
|
||||||
//| ...
|
//| ...
|
||||||
// Provided by mp_generic_unary_op().
|
// Provided by automatic inclusion of hash()
|
||||||
|
// https://github.com/micropython/micropython/pull/10348
|
||||||
|
|
||||||
//| def __enter__(self) -> SSLSocket:
|
//| def __enter__(self) -> SSLSocket:
|
||||||
//| """No-op used by Context Managers."""
|
//| """No-op used by Context Managers."""
|
||||||
|
@ -301,7 +302,5 @@ MP_DEFINE_CONST_OBJ_TYPE(
|
||||||
ssl_sslsocket_type,
|
ssl_sslsocket_type,
|
||||||
MP_QSTR_SSLSocket,
|
MP_QSTR_SSLSocket,
|
||||||
MP_TYPE_FLAG_NONE,
|
MP_TYPE_FLAG_NONE,
|
||||||
locals_dict, &ssl_sslsocket_locals_dict,
|
locals_dict, &ssl_sslsocket_locals_dict
|
||||||
unary_op, mp_generic_unary_op
|
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -63,6 +63,5 @@ MP_DEFINE_CONST_OBJ_TYPE(
|
||||||
MP_QSTR_Packet,
|
MP_QSTR_Packet,
|
||||||
MP_TYPE_FLAG_NONE,
|
MP_TYPE_FLAG_NONE,
|
||||||
print, wifi_packet_print,
|
print, wifi_packet_print,
|
||||||
locals_dict, &wifi_packet_locals_dict,
|
locals_dict, &wifi_packet_locals_dict
|
||||||
unary_op, mp_generic_unary_op
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -29,13 +29,14 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "py/mphal.h"
|
||||||
#include "py/compile.h"
|
#include "py/compile.h"
|
||||||
#include "py/runtime.h"
|
#include "py/runtime.h"
|
||||||
#include "py/repl.h"
|
#include "py/repl.h"
|
||||||
#include "py/gc.h"
|
#include "py/gc.h"
|
||||||
#include "py/frozenmod.h"
|
#include "py/frozenmod.h"
|
||||||
#include "py/mphal.h"
|
#include "py/mphal.h"
|
||||||
#if MICROPY_HW_ENABLE_USB
|
#if defined(MICROPY_HW_ENABLE_USB) && MICROPY_HW_ENABLE_USB
|
||||||
#include "irq.h"
|
#include "irq.h"
|
||||||
#include "usb.h"
|
#include "usb.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -638,7 +639,7 @@ friendly_repl_reset:
|
||||||
for (;;) {
|
for (;;) {
|
||||||
input_restart:
|
input_restart:
|
||||||
|
|
||||||
#if MICROPY_HW_ENABLE_USB
|
#if defined(MICROPY_HW_ENABLE_USB) && MICROPY_HW_ENABLE_USB
|
||||||
if (usb_vcp_is_enabled()) {
|
if (usb_vcp_is_enabled()) {
|
||||||
// If the user gets to here and interrupts are disabled then
|
// If the user gets to here and interrupts are disabled then
|
||||||
// they'll never see the prompt, traceback etc. The USB REPL needs
|
// they'll never see the prompt, traceback etc. The USB REPL needs
|
||||||
|
|
|
@ -1,60 +0,0 @@
|
||||||
/*
|
|
||||||
* This file is part of the MicroPython project, http://micropython.org/
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2022 Ibrahim Abdelkader <iabdalkader@openmv.io>
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "py/runtime.h"
|
|
||||||
#include "py/mphal.h"
|
|
||||||
#include "modmachine.h"
|
|
||||||
|
|
||||||
#if MICROPY_HW_USB_CDC_1200BPS_TOUCH && MICROPY_HW_ENABLE_USBDEV
|
|
||||||
|
|
||||||
#include "tusb.h"
|
|
||||||
|
|
||||||
static mp_sched_node_t mp_bootloader_sched_node;
|
|
||||||
|
|
||||||
STATIC void usbd_cdc_run_bootloader_task(mp_sched_node_t *node) {
|
|
||||||
mp_hal_delay_ms(250);
|
|
||||||
machine_bootloader(0, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
#if MICROPY_HW_USB_EXTERNAL_TINYUSB
|
|
||||||
mp_usbd_line_state_cb
|
|
||||||
#else
|
|
||||||
tud_cdc_line_state_cb
|
|
||||||
#endif
|
|
||||||
(uint8_t itf, bool dtr, bool rts) {
|
|
||||||
if (dtr == false && rts == false) {
|
|
||||||
// Device is disconnected.
|
|
||||||
cdc_line_coding_t line_coding;
|
|
||||||
tud_cdc_n_get_line_coding(itf, &line_coding);
|
|
||||||
if (line_coding.bit_rate == 1200) {
|
|
||||||
// Delay bootloader jump to allow the USB stack to service endpoints.
|
|
||||||
mp_sched_schedule_node(&mp_bootloader_sched_node, usbd_cdc_run_bootloader_task);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,133 +0,0 @@
|
||||||
/*
|
|
||||||
* This file is part of the MicroPython project, http://micropython.org/
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2019 Damien P. George
|
|
||||||
* Copyright (c) 2022 Blake W. Felt & Angus Gratton
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "py/mpconfig.h"
|
|
||||||
|
|
||||||
#if MICROPY_HW_ENABLE_USBDEV
|
|
||||||
|
|
||||||
#include "tusb.h"
|
|
||||||
#include "mp_usbd.h"
|
|
||||||
#include "mp_usbd_internal.h"
|
|
||||||
|
|
||||||
#define USBD_CDC_CMD_MAX_SIZE (8)
|
|
||||||
#define USBD_CDC_IN_OUT_MAX_SIZE ((CFG_TUD_MAX_SPEED == OPT_MODE_HIGH_SPEED) ? 512 : 64)
|
|
||||||
|
|
||||||
const tusb_desc_device_t mp_usbd_desc_device_static = {
|
|
||||||
.bLength = sizeof(tusb_desc_device_t),
|
|
||||||
.bDescriptorType = TUSB_DESC_DEVICE,
|
|
||||||
.bcdUSB = 0x0200,
|
|
||||||
.bDeviceClass = TUSB_CLASS_MISC,
|
|
||||||
.bDeviceSubClass = MISC_SUBCLASS_COMMON,
|
|
||||||
.bDeviceProtocol = MISC_PROTOCOL_IAD,
|
|
||||||
.bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE,
|
|
||||||
.idVendor = MICROPY_HW_USB_VID,
|
|
||||||
.idProduct = MICROPY_HW_USB_PID,
|
|
||||||
.bcdDevice = 0x0100,
|
|
||||||
.iManufacturer = USBD_STR_MANUF,
|
|
||||||
.iProduct = USBD_STR_PRODUCT,
|
|
||||||
.iSerialNumber = USBD_STR_SERIAL,
|
|
||||||
.bNumConfigurations = 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint8_t mp_usbd_desc_cfg_static[USBD_STATIC_DESC_LEN] = {
|
|
||||||
TUD_CONFIG_DESCRIPTOR(1, USBD_ITF_STATIC_MAX, USBD_STR_0, USBD_STATIC_DESC_LEN,
|
|
||||||
0, USBD_MAX_POWER_MA),
|
|
||||||
|
|
||||||
#if CFG_TUD_CDC
|
|
||||||
TUD_CDC_DESCRIPTOR(USBD_ITF_CDC, USBD_STR_CDC, USBD_CDC_EP_CMD,
|
|
||||||
USBD_CDC_CMD_MAX_SIZE, USBD_CDC_EP_OUT, USBD_CDC_EP_IN, USBD_CDC_IN_OUT_MAX_SIZE),
|
|
||||||
#endif
|
|
||||||
#if CFG_TUD_MSC
|
|
||||||
TUD_MSC_DESCRIPTOR(USBD_ITF_MSC, 5, EPNUM_MSC_OUT, EPNUM_MSC_IN, 64),
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t *tud_descriptor_string_cb(uint8_t index, uint16_t langid) {
|
|
||||||
char serial_buf[MICROPY_HW_USB_DESC_STR_MAX + 1]; // Includes terminating NUL byte
|
|
||||||
static uint16_t desc_wstr[MICROPY_HW_USB_DESC_STR_MAX + 1]; // Includes prefix uint16_t
|
|
||||||
const char *desc_str;
|
|
||||||
uint16_t desc_len;
|
|
||||||
|
|
||||||
switch (index) {
|
|
||||||
case 0:
|
|
||||||
desc_wstr[1] = 0x0409; // supported language is English
|
|
||||||
desc_len = 4;
|
|
||||||
break;
|
|
||||||
case USBD_STR_SERIAL:
|
|
||||||
// TODO: make a port-specific serial number callback
|
|
||||||
mp_usbd_port_get_serial_number(serial_buf);
|
|
||||||
desc_str = serial_buf;
|
|
||||||
break;
|
|
||||||
case USBD_STR_MANUF:
|
|
||||||
desc_str = MICROPY_HW_USB_MANUFACTURER_STRING;
|
|
||||||
break;
|
|
||||||
case USBD_STR_PRODUCT:
|
|
||||||
desc_str = MICROPY_HW_USB_PRODUCT_FS_STRING;
|
|
||||||
break;
|
|
||||||
#if CFG_TUD_CDC
|
|
||||||
case USBD_STR_CDC:
|
|
||||||
desc_str = MICROPY_HW_USB_CDC_INTERFACE_STRING;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#if CFG_TUD_MSC
|
|
||||||
case USBD_STR_MSC:
|
|
||||||
desc_str = MICROPY_HW_USB_MSC_INTERFACE_STRING;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
desc_str = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (index != 0) {
|
|
||||||
if (desc_str == NULL) {
|
|
||||||
return NULL; // Will STALL the endpoint
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert from narrow string to wide string
|
|
||||||
desc_len = 2;
|
|
||||||
for (int i = 0; i < MICROPY_HW_USB_DESC_STR_MAX && desc_str[i] != 0; i++) {
|
|
||||||
desc_wstr[1 + i] = desc_str[i];
|
|
||||||
desc_len += 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// first byte is length (including header), second byte is string type
|
|
||||||
desc_wstr[0] = (TUSB_DESC_STRING << 8) | desc_len;
|
|
||||||
|
|
||||||
return desc_wstr;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const uint8_t *tud_descriptor_device_cb(void) {
|
|
||||||
return (const void *)&mp_usbd_desc_device_static;
|
|
||||||
}
|
|
||||||
|
|
||||||
const uint8_t *tud_descriptor_configuration_cb(uint8_t index) {
|
|
||||||
(void)index;
|
|
||||||
return mp_usbd_desc_cfg_static;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,34 +0,0 @@
|
||||||
/*
|
|
||||||
* This file is part of the MicroPython project, http://micropython.org/
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2022 Angus Gratton
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
#ifndef MICROPY_INCLUDED_SHARED_TINYUSB_MP_USBD_INTERNAL_H
|
|
||||||
#define MICROPY_INCLUDED_SHARED_TINYUSB_MP_USBD_INTERNAL_H
|
|
||||||
#include "tusb.h"
|
|
||||||
|
|
||||||
// Static USB device descriptor values
|
|
||||||
extern const tusb_desc_device_t mp_usbd_desc_device_static;
|
|
||||||
extern const uint8_t mp_usbd_desc_cfg_static[USBD_STATIC_DESC_LEN];
|
|
||||||
|
|
||||||
#endif // MICROPY_INCLUDED_SHARED_TINYUSB_MP_USBD_INTERNAL_H
|
|
|
@ -1,146 +0,0 @@
|
||||||
/*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2020-2021 Damien P. George
|
|
||||||
* Copyright (c) 2022 Angus Gratton
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MICROPY_INCLUDED_SHARED_TINYUSB_TUSB_CONFIG_H
|
|
||||||
#define MICROPY_INCLUDED_SHARED_TINYUSB_TUSB_CONFIG_H
|
|
||||||
|
|
||||||
#include "py/mpconfig.h"
|
|
||||||
|
|
||||||
#if MICROPY_HW_ENABLE_USBDEV
|
|
||||||
|
|
||||||
#ifndef MICROPY_HW_USB_MANUFACTURER_STRING
|
|
||||||
#define MICROPY_HW_USB_MANUFACTURER_STRING "MicroPython"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MICROPY_HW_USB_PRODUCT_FS_STRING
|
|
||||||
#define MICROPY_HW_USB_PRODUCT_FS_STRING "Board in FS mode"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MICROPY_HW_USB_CDC_INTERFACE_STRING
|
|
||||||
#define MICROPY_HW_USB_CDC_INTERFACE_STRING "Board CDC"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MICROPY_HW_USB_MSC_INQUIRY_VENDOR_STRING
|
|
||||||
#define MICROPY_HW_USB_MSC_INQUIRY_VENDOR_STRING "MicroPy"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MICROPY_HW_USB_MSC_INQUIRY_PRODUCT_STRING
|
|
||||||
#define MICROPY_HW_USB_MSC_INQUIRY_PRODUCT_STRING "Mass Storage"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MICROPY_HW_USB_MSC_INQUIRY_REVISION_STRING
|
|
||||||
#define MICROPY_HW_USB_MSC_INQUIRY_REVISION_STRING "1.00"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CFG_TUSB_RHPORT0_MODE
|
|
||||||
#define CFG_TUSB_RHPORT0_MODE (OPT_MODE_DEVICE)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if MICROPY_HW_USB_CDC
|
|
||||||
#define CFG_TUD_CDC (1)
|
|
||||||
#else
|
|
||||||
#define CFG_TUD_CDC (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if MICROPY_HW_USB_MSC
|
|
||||||
#define CFG_TUD_MSC (1)
|
|
||||||
#else
|
|
||||||
#define CFG_TUD_MSC (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// CDC Configuration
|
|
||||||
#if CFG_TUD_CDC
|
|
||||||
#define CFG_TUD_CDC_RX_BUFSIZE ((CFG_TUD_MAX_SPEED == OPT_MODE_HIGH_SPEED) ? 512 : 256)
|
|
||||||
#define CFG_TUD_CDC_TX_BUFSIZE ((CFG_TUD_MAX_SPEED == OPT_MODE_HIGH_SPEED) ? 512 : 256)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// MSC Configuration
|
|
||||||
#if CFG_TUD_MSC
|
|
||||||
#ifndef MICROPY_HW_USB_MSC_INTERFACE_STRING
|
|
||||||
#define MICROPY_HW_USB_MSC_INTERFACE_STRING "Board MSC"
|
|
||||||
#endif
|
|
||||||
// Set MSC EP buffer size to FatFS block size to avoid partial read/writes (offset arg).
|
|
||||||
#define CFG_TUD_MSC_BUFSIZE (MICROPY_FATFS_MAX_SS)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Define static descriptor size and interface count based on the above config
|
|
||||||
|
|
||||||
#define USBD_STATIC_DESC_LEN (TUD_CONFIG_DESC_LEN + \
|
|
||||||
(CFG_TUD_CDC ? (TUD_CDC_DESC_LEN) : 0) + \
|
|
||||||
(CFG_TUD_MSC ? (TUD_MSC_DESC_LEN) : 0) \
|
|
||||||
)
|
|
||||||
|
|
||||||
#define USBD_STR_0 (0x00)
|
|
||||||
#define USBD_STR_MANUF (0x01)
|
|
||||||
#define USBD_STR_PRODUCT (0x02)
|
|
||||||
#define USBD_STR_SERIAL (0x03)
|
|
||||||
#define USBD_STR_CDC (0x04)
|
|
||||||
#define USBD_STR_MSC (0x05)
|
|
||||||
|
|
||||||
#define USBD_MAX_POWER_MA (250)
|
|
||||||
|
|
||||||
#ifndef MICROPY_HW_USB_DESC_STR_MAX
|
|
||||||
#define MICROPY_HW_USB_DESC_STR_MAX (20)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if CFG_TUD_CDC
|
|
||||||
#define USBD_ITF_CDC (0) // needs 2 interfaces
|
|
||||||
#define USBD_CDC_EP_CMD (0x81)
|
|
||||||
#define USBD_CDC_EP_OUT (0x02)
|
|
||||||
#define USBD_CDC_EP_IN (0x82)
|
|
||||||
#endif // CFG_TUD_CDC
|
|
||||||
|
|
||||||
#if CFG_TUD_MSC
|
|
||||||
// Interface & Endpoint numbers for MSC come after CDC, if it is enabled
|
|
||||||
#if CFG_TUD_CDC
|
|
||||||
#define USBD_ITF_MSC (2)
|
|
||||||
#define EPNUM_MSC_OUT (0x03)
|
|
||||||
#define EPNUM_MSC_IN (0x83)
|
|
||||||
#else
|
|
||||||
#define USBD_ITF_MSC (0)
|
|
||||||
#define EPNUM_MSC_OUT (0x01)
|
|
||||||
#define EPNUM_MSC_IN (0x81)
|
|
||||||
#endif // CFG_TUD_CDC
|
|
||||||
#endif // CFG_TUD_MSC
|
|
||||||
|
|
||||||
/* Limits of statically defined USB interfaces, endpoints, strings */
|
|
||||||
#if CFG_TUD_MSC
|
|
||||||
#define USBD_ITF_STATIC_MAX (USBD_ITF_MSC + 1)
|
|
||||||
#define USBD_STR_STATIC_MAX (USBD_STR_MSC + 1)
|
|
||||||
#define USBD_EP_STATIC_MAX (EPNUM_MSC_OUT + 1)
|
|
||||||
#elif CFG_TUD_CDC
|
|
||||||
#define USBD_ITF_STATIC_MAX (USBD_ITF_CDC + 2)
|
|
||||||
#define USBD_STR_STATIC_MAX (USBD_STR_CDC + 1)
|
|
||||||
#define USBD_EP_STATIC_MAX (((EPNUM_CDC_EP_IN)&~TUSB_DIR_IN_MASK) + 1)
|
|
||||||
#else // !CFG_TUD_MSC && !CFG_TUD_CDC
|
|
||||||
#define USBD_ITF_STATIC_MAX (0)
|
|
||||||
#define USBD_STR_STATIC_MAX (0)
|
|
||||||
#define USBD_EP_STATIC_MAX (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // MICROPY_HW_ENABLE_USBDEV
|
|
||||||
|
|
||||||
#endif // MICROPY_INCLUDED_SHARED_TINYUSB_TUSB_CONFIG_H
|
|
Loading…
Reference in New Issue