diff options
Diffstat (limited to 'cc3200')
-rw-r--r-- | cc3200/Makefile | 21 | ||||
-rw-r--r-- | cc3200/README.md | 133 | ||||
-rw-r--r-- | cc3200/application.mk | 6 | ||||
-rw-r--r-- | cc3200/boards/LAUNCHXL/mpconfigboard.h | 2 | ||||
-rw-r--r-- | cc3200/boards/WIPY/mpconfigboard.h | 3 | ||||
-rw-r--r-- | cc3200/misc/mpirq.c | 2 | ||||
-rw-r--r-- | cc3200/mods/modnetwork.c | 2 | ||||
-rw-r--r-- | cc3200/mods/moduhashlib.c | 2 | ||||
-rw-r--r-- | cc3200/mods/modusocket.c | 5 | ||||
-rw-r--r-- | cc3200/mods/modwlan.c | 33 | ||||
-rw-r--r-- | cc3200/mods/pybadc.c | 4 | ||||
-rw-r--r-- | cc3200/mods/pybi2c.c | 2 | ||||
-rw-r--r-- | cc3200/mods/pybpin.c | 4 | ||||
-rw-r--r-- | cc3200/mods/pybrtc.c | 2 | ||||
-rw-r--r-- | cc3200/mods/pybsd.c | 4 | ||||
-rw-r--r-- | cc3200/mods/pybspi.c | 25 | ||||
-rw-r--r-- | cc3200/mods/pybtimer.c | 2 | ||||
-rw-r--r-- | cc3200/mods/pybuart.c | 15 | ||||
-rw-r--r-- | cc3200/mods/pybwdt.c | 2 | ||||
-rw-r--r-- | cc3200/mpconfigport.h | 3 | ||||
-rw-r--r-- | cc3200/mptask.c | 7 | ||||
-rw-r--r-- | cc3200/tools/smoke.py | 2 |
22 files changed, 185 insertions, 96 deletions
diff --git a/cc3200/Makefile b/cc3200/Makefile index 7623d20e7a..1798ac927c 100644 --- a/cc3200/Makefile +++ b/cc3200/Makefile @@ -8,6 +8,9 @@ endif # Make 'release' the default build type BTYPE ?= release +# Port for flashing firmware +PORT ?= /dev/ttyUSB1 + # If the build directory is not given, make it reflect the board name. BUILD ?= build/$(BOARD)/$(BTYPE) @@ -23,6 +26,9 @@ CFLAGS += -Iboards/$(BOARD) LDFLAGS = -Wl,-nostdlib -Wl,--gc-sections -Wl,-Map=$@.map +FLASH_SIZE_WIPY = 2M +FLASH_SIZE_LAUNCHXL = 1M + ifeq ($(BTARGET), application) # qstr definitions (must come before including py.mk) QSTR_DEFS = qstrdefsport.h $(BUILD)/pins_qstr.h @@ -39,3 +45,18 @@ endif # always include MicroPython make rules include ../py/mkrules.mk + +erase: + cc3200tool -p $(PORT) format_flash --size $(FLASH_SIZE_$(BOARD)) + +deploy: + cc3200tool -p $(PORT) \ + write_file bootmgr/build/$(BOARD)/$(BTYPE)/bootloader.bin /sys/mcuimg.bin \ + write_file build/$(BOARD)/$(BTYPE)/mcuimg.bin /sys/factimg.bin + +# Files *.ucf and *ucf.signed.bin come from CC3200SDK-SERVICEPACK +# package from http://www.ti.com/tool/cc3200sdk +servicepack: + cc3200tool -p $(PORT) \ + write_file --file-size=0x20000 --signature ota_1.0.1.6-2.7.0.0.ucf.signed.bin \ + ota_1.0.1.6-2.7.0.0.ucf /sys/servicepack.ucf diff --git a/cc3200/README.md b/cc3200/README.md index 2fa39d6709..753fd450a2 100644 --- a/cc3200/README.md +++ b/cc3200/README.md @@ -1,36 +1,66 @@ -# Build Instructions for the CC3200 +MicroPython port to CC3200 WiFi SoC +=================================== -Currently the CC3200 port of MicroPython builds under Linux and OSX **but not under Windows**. +This is a MicroPython port to Texas Instruments CC3200 WiFi SoC (ARM Cortex-M4 +architecture). This port supports 2 boards: WiPy and TI CC3200-LAUNCHXL. -The tool chain required for the build can be found at <https://launchpad.net/gcc-arm-embedded>. +## Build Instructions for the CC3200 -In order to download the image to the CC3200 you will need the CCS_Uniflash tool from TI, which at this -moment is only available for Windows, so, you need Linux/OSX to build and Windows to flash the image. +Currently the CC3200 port of MicroPython builds under Linux and OSX, +but not under Windows. -## To build an image suitable for debugging: +The toolchain required for the build can be found at +<https://launchpad.net/gcc-arm-embedded>. + +In order to flash the image to the CC3200 you will need the +[cc3200tool](https://github.com/ALLTERCO/cc3200tool). An alternative is +to use CCS_Uniflash tool from TI, which works only under Windows, and all +support is provided by TI itself. + +Building the bootloader: + +``` +make BTARGET=bootloader BTYPE=release BOARD=LAUNCHXL +``` + +Building the "release" image: -In order to debug the port specific code, optimizations need to be disabled on the -port file (check the Makefile for specific details). You can use CCS from TI. -Use the CC3200.ccxml file supplied with this distribution for the debuuger configuration. -```bash -make BTARGET=application BTYPE=debug BOARD=LAUNCHXL ``` -## To build an image suitable to be flashed to the device: -```bash make BTARGET=application BTYPE=release BOARD=LAUNCHXL ``` -## Building the bootloader -```bash -make BTARGET=bootloader BTYPE=release BOARD=LAUNCHXL + +To build an image suitable for debugging: + +In order to debug the port specific code, optimizations need to be disabled on the +port file (check the Makefile for specific details). You can use CCS from TI. +Use the CC3200.ccxml file supplied with this distribution for the debuuger configuration. + +``` +make BTARGET=application BTYPE=debug BOARD=LAUNCHXL ``` -## Regarding old revisions of the CC3200-LAUNCHXL -First silicon (pre-release) revisions of the CC3200 had issues with the ram blocks, and MicroPython cannot run -there. Make sure to use a **v4.1 (or higer) LAUNCHXL board** when trying this port, otherwise it won't work. +## Flashing the CC3200-LAUNCHXL + +Note that WiPy comes factory programmed with a default version of MicroPython, +it cannot be programmed via serial, and can be upgraded only with OTA (see +below). -## Flashing the CC3200 - Make sure that you have built both the *bootloader* and the *application* in **release** mode. - Make sure the SOP2 jumper is in position. +- Make sure you Linux system recognized the board and created `ttyUSB*` + devices (see below for configuration of `ftdi_sio` driver). +- Run "make erase" and immediately press Reset button on the device. +- Wait few seconds. +- Run "make deploy" and immediately press Reset button on the device. +- You are recommended to install the latest vendor WiFi firmware + servicepack from http://www.ti.com/tool/cc3200sdk. Download + CC3200SDK-SERVICEPACK package, install it, and locate `ota_*.ucf` + and `ota_*.ucf.signed.bin` files. Copy them to the port's directory + and run "make servicepack", with immediate press of Reset button. +- Remove the SOP2 jumper and reset the board. + +Flashing process using TI Uniflash: + - Open CCS_Uniflash and connect to the board (by default on port 22). - Format the serial flash (select 1MB size in case of the CC3200-LAUNCHXL, 2MB in case of the WiPy, leave the rest unchecked). - Mark the following files for erasing: `/cert/ca.pem`, `/cert/client.pem`, `/cert/private.key` and `/tmp/pac.bin`. @@ -40,26 +70,30 @@ there. Make sure to use a **v4.1 (or higer) LAUNCHXL board** when trying this po - Flash the latest service pack (servicepack_1.0.0.10.0.bin) using the "Service Pack Update" button. - Close CCS_Uniflash, remove the SOP2 jumper and reset the board. -## Updating the board to with new software version -- Make sure the board is running and connected to the same network as the computer. - -```bash -make BTARGET=application BTYPE=release BOARD=LAUNCHXL WIPY_IP=192.168.1.1 WIPY_USER=micro WIPY_PWD=python deploy -``` - -If `WIPY_IP`, `WIPY_USER` or `WIPY_PWD` are omitted the default values (the ones shown above) will be used. - ## Playing with MicroPython and the CC3200: Once the software is running, you have two options to access the MicroPython REPL: -- Through telnet. +- Through telnet. * Connect to the network created by the board (as boots up in AP mode), **ssid = "wipy-wlan", key = "www.wipy.io"**. * You can also reinitialize the WLAN in station mode and connect to another AP, or in AP mode but with a different ssid and/or key. * Use your favourite telnet client with the following settings: **host = 192.168.1.1, port = 23.** * Log in with **user = "micro" and password = "python"** +- Through UART (serial). + * This is enabled by default in the standard configuration, for UART0 (speed 115200). + * For CC3200-LAUNCHXL, you will need to configure Linux `ftdi_sio` driver as described + in the [blog post](http://www.achanceofbrainshowers.com/blog/tech/2014/8/19/cc3200-development-under-linux/). + After that, connecting a board will create two `/dev/ttyUSB*` devices, a serial + console is available on the 2nd one (usually `/dev/ttyUSB1`). + * WiPy doesn't have onboard USB-UART converter, so you will need an external one, + connected to GPIO01 (Tx) and GPIO02 (Rx). + * Usage of UART port for REPL is controlled by MICROPY_STDIO_UART setting (and + is done at the high level, using a suitable call to `os.dupterm()` function + in boot.py, so you can override it at runtime regardless of MICROPY_STDIO_UART + setting). + The board has a small file system of 192K (WiPy) or 64K (Launchpad) located in the serial flash connected to the CC3200. SD cards are also supported, you can connect any SD card and configure the pinout using the SD class API. @@ -68,15 +102,19 @@ SD cards are also supported, you can connect any SD card and configure the pinou To upload your MicroPython scripts to the FTP server, open your FTP client of choice and connect to: **ftp://192.168.1.1, user = "micro", password = "python"** -I have tested the FTP server with **FileZilla, FireFTP, FireFox, IE and Chrome,** other clients should work as well, but I am -not 100% sure of it. +Tested FTP clients are: FileZilla, FireFTP, FireFox, IE and Chrome. Other +clients should work as well, but you may need to configure them to use a +single connection (this should be the default for any compliant FTP client). -## Upgrading the firmware Over The Air: +## Upgrading the firmware Over The Air (OTA) -OTA software updates can be performed through the FTP server. After building a new **mcuimg.bin** in release mode, upload it to: -`/flash/sys/mcuimg.bin` it will take around 6s (The TI simplelink file system is quite slow because every file is mirrored for -safety). You won't see the file being stored inside `/flash/sys/` because it's actually saved bypassing FatFS, but rest assured that -the file was successfully transferred, and it has been signed with a MD5 checksum to verify its integrity. +OTA software updates can be performed through the builtin FTP server. After +building a new `mcuimg.bin` in release mode, upload it to: +`/flash/sys/mcuimg.bin`. It will take around 6s (The TI SimpleLink file +system is quite slow because every file is mirrored for safety). You won't +see the file being stored inside `/flash/sys/` because it's actually saved +bypassing FatFS, but rest assured that the file was successfully transferred, +and it has been signed with a MD5 checksum to verify its integrity. Now, reset the MCU by pressing the switch on the board, or by typing: ```python @@ -84,10 +122,27 @@ import machine machine.reset() ``` -### Note regarding FileZilla: +There's a script which automates this process from the host side: + +- Make sure the board is running and connected to the same network as the computer. + +```bash +make BTARGET=application BTYPE=release BOARD=LAUNCHXL WIPY_IP=192.168.1.1 WIPY_USER=micro WIPY_PWD=python deploy-ota +``` + +If `WIPY_IP`, `WIPY_USER` or `WIPY_PWD` are omitted the default values (the ones shown above) will be used. + + +## Notes and known issues + +## Regarding old revisions of the CC3200-LAUNCHXL + +First silicon (pre-release) revisions of the CC3200 had issues with the ram blocks, and MicroPython cannot run +there. Make sure to use a **v4.1 (or higer) LAUNCHXL board** when trying this port, otherwise it won't work. + +### Note regarding FileZilla Do not use the quick connect button, instead, open the site manager and create a new configuration. In the "General" tab make sure that encryption is set to: "Only use plain FTP (insecure)". In the Transfer Settings tab limit the max number of connections to one, otherwise FileZilla will try to open a second command connection when retrieving and saving files, and for simplicity and to reduce code size, only one command and one data connections are possible. - diff --git a/cc3200/application.mk b/cc3200/application.mk index 300262c971..f2801c3376 100644 --- a/cc3200/application.mk +++ b/cc3200/application.mk @@ -162,8 +162,6 @@ APP_STM_SRC_C = $(addprefix stmhal/,\ import.c \ input.c \ irq.c \ - lexerfatfs.c \ - moduselect.c \ pybstdio.c \ ) @@ -208,9 +206,9 @@ WIPY_PWD ?= 'python' all: $(BUILD)/mcuimg.bin -.PHONY: deploy +.PHONY: deploy-ota -deploy: $(BUILD)/mcuimg.bin +deploy-ota: $(BUILD)/mcuimg.bin $(ECHO) "Writing $< to the board" $(Q)$(PYTHON) $(UPDATE_WIPY) --verify --ip $(WIPY_IP) --user $(WIPY_USER) --password $(WIPY_PWD) --file $< diff --git a/cc3200/boards/LAUNCHXL/mpconfigboard.h b/cc3200/boards/LAUNCHXL/mpconfigboard.h index ac7b41f5dd..32ef5290b4 100644 --- a/cc3200/boards/LAUNCHXL/mpconfigboard.h +++ b/cc3200/boards/LAUNCHXL/mpconfigboard.h @@ -32,7 +32,7 @@ #define MICROPY_HW_ANTENNA_DIVERSITY (0) -#define MICROPY_STDIO_UART 0 +#define MICROPY_STDIO_UART 1 #define MICROPY_STDIO_UART_BAUD 115200 #define MICROPY_SYS_LED_PRCM PRCM_GPIOA1 diff --git a/cc3200/boards/WIPY/mpconfigboard.h b/cc3200/boards/WIPY/mpconfigboard.h index 57fdc9a609..9f04dbf237 100644 --- a/cc3200/boards/WIPY/mpconfigboard.h +++ b/cc3200/boards/WIPY/mpconfigboard.h @@ -32,6 +32,9 @@ #define MICROPY_HW_ANTENNA_DIVERSITY (1) +#define MICROPY_STDIO_UART 1 +#define MICROPY_STDIO_UART_BAUD 115200 + #define MICROPY_SYS_LED_PRCM PRCM_GPIOA3 #define MICROPY_SAFE_BOOT_PRCM PRCM_GPIOA3 #define MICROPY_SYS_LED_PORT GPIOA3_BASE diff --git a/cc3200/misc/mpirq.c b/cc3200/misc/mpirq.c index 4389ab0c3c..be57467593 100644 --- a/cc3200/misc/mpirq.c +++ b/cc3200/misc/mpirq.c @@ -176,7 +176,7 @@ STATIC mp_obj_t mp_irq_flags (mp_obj_t self_in) { } STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_irq_flags_obj, mp_irq_flags); -STATIC mp_obj_t mp_irq_call (mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) { +STATIC mp_obj_t mp_irq_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 0, false); mp_irq_handler (self_in); return mp_const_none; diff --git a/cc3200/mods/modnetwork.c b/cc3200/mods/modnetwork.c index f98d9a88ad..89d61e939a 100644 --- a/cc3200/mods/modnetwork.c +++ b/cc3200/mods/modnetwork.c @@ -91,7 +91,7 @@ STATIC const mp_arg_t network_server_args[] = { { MP_QSTR_login, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, { MP_QSTR_timeout, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, }; -STATIC mp_obj_t network_server_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *all_args) { +STATIC mp_obj_t network_server_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { // parse args mp_map_t kw_args; mp_map_init_fixed_table(&kw_args, n_kw, all_args + n_args); diff --git a/cc3200/mods/moduhashlib.c b/cc3200/mods/moduhashlib.c index 46f30be21d..c22cc8a067 100644 --- a/cc3200/mods/moduhashlib.c +++ b/cc3200/mods/moduhashlib.c @@ -121,7 +121,7 @@ STATIC mp_obj_t hash_read (mp_obj_t self_in) { /// \classmethod \constructor([data[, block_size]]) /// initial data must be given if block_size wants to be passed -STATIC mp_obj_t hash_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) { +STATIC mp_obj_t hash_make_new(mp_obj_t type_in, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 2, false); mp_obj_hash_t *self = m_new0(mp_obj_hash_t, 1); self->base.type = type_in; diff --git a/cc3200/mods/modusocket.c b/cc3200/mods/modusocket.c index 81a4c2e198..9554c26081 100644 --- a/cc3200/mods/modusocket.c +++ b/cc3200/mods/modusocket.c @@ -127,7 +127,7 @@ void modusocket_close_all_user_sockets (void) { // socket class // constructor socket(family=AF_INET, type=SOCK_STREAM, proto=IPPROTO_TCP, fileno=None) -STATIC mp_obj_t socket_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) { +STATIC mp_obj_t socket_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 4, false); // create socket object @@ -434,7 +434,6 @@ STATIC const mp_map_elem_t socket_locals_dict_table[] = { // stream methods { MP_OBJ_NEW_QSTR(MP_QSTR_read), (mp_obj_t)&mp_stream_read_obj }, - { MP_OBJ_NEW_QSTR(MP_QSTR_readall), (mp_obj_t)&mp_stream_readall_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_readinto), (mp_obj_t)&mp_stream_readinto_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_readline), (mp_obj_t)&mp_stream_unbuffered_readline_obj}, { MP_OBJ_NEW_QSTR(MP_QSTR_write), (mp_obj_t)&mp_stream_write_obj }, @@ -446,7 +445,7 @@ STATIC mp_uint_t socket_read(mp_obj_t self_in, void *buf, mp_uint_t size, int *e mod_network_socket_obj_t *self = self_in; mp_int_t ret = wlan_socket_recv(self, buf, size, errcode); if (ret < 0) { - // we need to ignore the socket closed error here because a readall() or read() without params + // we need to ignore the socket closed error here because a read() without params // only returns when the socket is closed by the other end if (*errcode != SL_ESECCLOSED) { ret = MP_STREAM_ERROR; diff --git a/cc3200/mods/modwlan.c b/cc3200/mods/modwlan.c index 4b3dd4ec38..d9b018350a 100644 --- a/cc3200/mods/modwlan.c +++ b/cc3200/mods/modwlan.c @@ -45,7 +45,6 @@ #include "modnetwork.h" #include "modusocket.h" #include "modwlan.h" -#include "pybioctl.h" #include "pybrtc.h" #include "debug.h" #if (MICROPY_PORT_HAS_TELNET || MICROPY_PORT_HAS_FTP) @@ -830,7 +829,7 @@ STATIC const mp_arg_t wlan_init_args[] = { { MP_QSTR_channel, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 1} }, { MP_QSTR_antenna, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = ANTENNA_TYPE_INTERNAL} }, }; -STATIC mp_obj_t wlan_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *all_args) { +STATIC mp_obj_t wlan_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { // parse args mp_map_t kw_args; mp_map_init_fixed_table(&kw_args, n_kw, all_args + n_args); @@ -1250,6 +1249,21 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_KW(wlan_irq_obj, 1, wlan_irq); //} //STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(wlan_urn_obj, 1, 2, wlan_urn); +STATIC mp_obj_t wlan_print_ver(void) { + SlVersionFull ver; + byte config_opt = SL_DEVICE_GENERAL_VERSION; + byte config_len = sizeof(ver); + sl_DevGet(SL_DEVICE_GENERAL_CONFIGURATION, &config_opt, &config_len, (byte*)&ver); + printf("NWP: %d.%d.%d.%d\n", ver.NwpVersion[0], ver.NwpVersion[1], ver.NwpVersion[2], ver.NwpVersion[3]); + printf("MAC: %d.%d.%d.%d\n", ver.ChipFwAndPhyVersion.FwVersion[0], ver.ChipFwAndPhyVersion.FwVersion[1], + ver.ChipFwAndPhyVersion.FwVersion[2], ver.ChipFwAndPhyVersion.FwVersion[3]); + printf("PHY: %d.%d.%d.%d\n", ver.ChipFwAndPhyVersion.PhyVersion[0], ver.ChipFwAndPhyVersion.PhyVersion[1], + ver.ChipFwAndPhyVersion.PhyVersion[2], ver.ChipFwAndPhyVersion.PhyVersion[3]); + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_0(wlan_print_ver_fun_obj, wlan_print_ver); +STATIC MP_DEFINE_CONST_STATICMETHOD_OBJ(wlan_print_ver_obj, MP_ROM_PTR(&wlan_print_ver_fun_obj)); + STATIC const mp_map_elem_t wlan_locals_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_init), (mp_obj_t)&wlan_init_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_scan), (mp_obj_t)&wlan_scan_obj }, @@ -1266,6 +1280,7 @@ STATIC const mp_map_elem_t wlan_locals_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_irq), (mp_obj_t)&wlan_irq_obj }, // { MP_OBJ_NEW_QSTR(MP_QSTR_connections), (mp_obj_t)&wlan_connections_obj }, // { MP_OBJ_NEW_QSTR(MP_QSTR_urn), (mp_obj_t)&wlan_urn_obj }, + { MP_OBJ_NEW_QSTR(MP_QSTR_print_ver), (mp_obj_t)&wlan_print_ver_obj }, // class constants { MP_OBJ_NEW_QSTR(MP_QSTR_STA), MP_OBJ_NEW_SMALL_INT(ROLE_STA) }, @@ -1461,7 +1476,7 @@ int wlan_socket_settimeout(mod_network_socket_obj_t *s, mp_uint_t timeout_s, int int wlan_socket_ioctl (mod_network_socket_obj_t *s, mp_uint_t request, mp_uint_t arg, int *_errno) { mp_int_t ret; - if (request == MP_IOCTL_POLL) { + if (request == MP_STREAM_POLL) { mp_uint_t flags = arg; ret = 0; int32_t sd = s->sock_base.sd; @@ -1473,13 +1488,13 @@ int wlan_socket_ioctl (mod_network_socket_obj_t *s, mp_uint_t request, mp_uint_t FD_ZERO(&xfds); // set fds if needed - if (flags & MP_IOCTL_POLL_RD) { + if (flags & MP_STREAM_POLL_RD) { FD_SET(sd, &rfds); } - if (flags & MP_IOCTL_POLL_WR) { + if (flags & MP_STREAM_POLL_WR) { FD_SET(sd, &wfds); } - if (flags & MP_IOCTL_POLL_HUP) { + if (flags & MP_STREAM_POLL_HUP) { FD_SET(sd, &xfds); } @@ -1497,13 +1512,13 @@ int wlan_socket_ioctl (mod_network_socket_obj_t *s, mp_uint_t request, mp_uint_t // check return of select if (FD_ISSET(sd, &rfds)) { - ret |= MP_IOCTL_POLL_RD; + ret |= MP_STREAM_POLL_RD; } if (FD_ISSET(sd, &wfds)) { - ret |= MP_IOCTL_POLL_WR; + ret |= MP_STREAM_POLL_WR; } if (FD_ISSET(sd, &xfds)) { - ret |= MP_IOCTL_POLL_HUP; + ret |= MP_STREAM_POLL_HUP; } } else { *_errno = EINVAL; diff --git a/cc3200/mods/pybadc.c b/cc3200/mods/pybadc.c index f8c9b3da54..e63bebbd04 100644 --- a/cc3200/mods/pybadc.c +++ b/cc3200/mods/pybadc.c @@ -140,7 +140,7 @@ STATIC const mp_arg_t pyb_adc_init_args[] = { { MP_QSTR_id, MP_ARG_INT, {.u_int = 0} }, { MP_QSTR_bits, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 12} }, }; -STATIC mp_obj_t adc_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *all_args) { +STATIC mp_obj_t adc_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { // parse args mp_map_t kw_args; mp_map_init_fixed_table(&kw_args, n_kw, all_args + n_args); @@ -289,7 +289,7 @@ STATIC mp_obj_t adc_channel_value(mp_obj_t self_in) { } STATIC MP_DEFINE_CONST_FUN_OBJ_1(adc_channel_value_obj, adc_channel_value); -STATIC mp_obj_t adc_channel_call(mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) { +STATIC mp_obj_t adc_channel_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 0, false); return adc_channel_value (self_in); } diff --git a/cc3200/mods/pybi2c.c b/cc3200/mods/pybi2c.c index d92782d8ae..32451802dc 100644 --- a/cc3200/mods/pybi2c.c +++ b/cc3200/mods/pybi2c.c @@ -332,7 +332,7 @@ STATIC const mp_arg_t pyb_i2c_init_args[] = { { MP_QSTR_baudrate, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 100000} }, { MP_QSTR_pins, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, }; -STATIC mp_obj_t pyb_i2c_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *all_args) { +STATIC mp_obj_t pyb_i2c_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { // parse args mp_map_t kw_args; mp_map_init_fixed_table(&kw_args, n_kw, all_args + n_args); diff --git a/cc3200/mods/pybpin.c b/cc3200/mods/pybpin.c index f59e65fc26..ac0ecef257 100644 --- a/cc3200/mods/pybpin.c +++ b/cc3200/mods/pybpin.c @@ -647,7 +647,7 @@ STATIC void pin_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t mp_printf(print, ", alt=%d)", alt); } -STATIC mp_obj_t pin_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) { +STATIC mp_obj_t pin_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 1, MP_OBJ_FUN_ARGS_MAX, true); // Run an argument through the mapper and return the result. @@ -747,7 +747,7 @@ STATIC mp_obj_t pin_drive(mp_uint_t n_args, const mp_obj_t *args) { } STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(pin_drive_obj, 1, 2, pin_drive); -STATIC mp_obj_t pin_call(mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) { +STATIC mp_obj_t pin_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); mp_obj_t _args[2] = {self_in, *args}; return pin_value (n_args + 1, _args); diff --git a/cc3200/mods/pybrtc.c b/cc3200/mods/pybrtc.c index 4662edbe7e..db00f49399 100644 --- a/cc3200/mods/pybrtc.c +++ b/cc3200/mods/pybrtc.c @@ -285,7 +285,7 @@ STATIC const mp_arg_t pyb_rtc_init_args[] = { { MP_QSTR_id, MP_ARG_INT, {.u_int = 0} }, { MP_QSTR_datetime, MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, }; -STATIC mp_obj_t pyb_rtc_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *all_args) { +STATIC mp_obj_t pyb_rtc_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { // parse args mp_map_t kw_args; mp_map_init_fixed_table(&kw_args, n_kw, all_args + n_args); diff --git a/cc3200/mods/pybsd.c b/cc3200/mods/pybsd.c index d7efbe872c..b8d5b4cc1a 100644 --- a/cc3200/mods/pybsd.c +++ b/cc3200/mods/pybsd.c @@ -64,7 +64,7 @@ STATIC const mp_obj_t pyb_sd_def_pin[3] = {&pin_GP10, &pin_GP11, &pin_GP15}; DECLARE PRIVATE FUNCTIONS ******************************************************************************/ STATIC void pyb_sd_hw_init (pybsd_obj_t *self); -STATIC mp_obj_t pyb_sd_make_new (const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args); +STATIC mp_obj_t pyb_sd_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args); STATIC mp_obj_t pyb_sd_deinit (mp_obj_t self_in); /****************************************************************************** @@ -123,7 +123,7 @@ STATIC const mp_arg_t pyb_sd_init_args[] = { { MP_QSTR_id, MP_ARG_INT, {.u_int = 0} }, { MP_QSTR_pins, MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, }; -STATIC mp_obj_t pyb_sd_make_new (const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *all_args) { +STATIC mp_obj_t pyb_sd_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { // parse args mp_map_t kw_args; mp_map_init_fixed_table(&kw_args, n_kw, all_args + n_args); diff --git a/cc3200/mods/pybspi.c b/cc3200/mods/pybspi.c index 5a040e3f59..6fc7ee62d9 100644 --- a/cc3200/mods/pybspi.c +++ b/cc3200/mods/pybspi.c @@ -148,7 +148,7 @@ STATIC void pybspi_transfer (pyb_spi_obj_t *self, const char *txdata, char *rxda STATIC void pyb_spi_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { pyb_spi_obj_t *self = self_in; if (self->baudrate > 0) { - mp_printf(print, "SPI(0, SPI.MASTER, baudrate=%u, bits=%u, polarity=%u, phase=%u, firstbit=SPI.MSB)", + mp_printf(print, "SPI(0, baudrate=%u, bits=%u, polarity=%u, phase=%u, firstbit=SPI.MSB)", self->baudrate, (self->wlen * 8), self->polarity, self->phase); } else { mp_print_str(print, "SPI(0)"); @@ -156,13 +156,8 @@ STATIC void pyb_spi_print(const mp_print_t *print, mp_obj_t self_in, mp_print_ki } STATIC mp_obj_t pyb_spi_init_helper(pyb_spi_obj_t *self, const mp_arg_val_t *args) { - // verify that mode is master - if (args[0].u_int != SPI_MODE_MASTER) { - goto invalid_args; - } - uint bits; - switch (args[2].u_int) { + switch (args[1].u_int) { case 8: bits = SPI_WL_8; break; @@ -177,27 +172,27 @@ STATIC mp_obj_t pyb_spi_init_helper(pyb_spi_obj_t *self, const mp_arg_val_t *arg break; } - uint polarity = args[3].u_int; - uint phase = args[4].u_int; + uint polarity = args[2].u_int; + uint phase = args[3].u_int; if (polarity > 1 || phase > 1) { goto invalid_args; } - uint firstbit = args[5].u_int; + uint firstbit = args[4].u_int; if (firstbit != PYBSPI_FIRST_BIT_MSB) { goto invalid_args; } // build the configuration - self->baudrate = args[1].u_int; - self->wlen = args[2].u_int >> 3; + self->baudrate = args[0].u_int; + self->wlen = args[1].u_int >> 3; self->config = bits | SPI_CS_ACTIVELOW | SPI_SW_CTRL_CS | SPI_4PIN_MODE | SPI_TURBO_OFF; self->polarity = polarity; self->phase = phase; self->submode = (polarity << 1) | phase; // assign the pins - mp_obj_t pins_o = args[6].u_obj; + mp_obj_t pins_o = args[5].u_obj; if (pins_o != mp_const_none) { mp_obj_t *pins; if (pins_o == MP_OBJ_NULL) { @@ -223,7 +218,6 @@ invalid_args: static const mp_arg_t pyb_spi_init_args[] = { { MP_QSTR_id, MP_ARG_INT, {.u_int = 0} }, - { MP_QSTR_mode, MP_ARG_INT, {.u_int = SPI_MODE_MASTER} }, { MP_QSTR_baudrate, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 1000000} }, // 1MHz { MP_QSTR_bits, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 8} }, { MP_QSTR_polarity, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} }, @@ -231,7 +225,7 @@ static const mp_arg_t pyb_spi_init_args[] = { { MP_QSTR_firstbit, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = PYBSPI_FIRST_BIT_MSB} }, { MP_QSTR_pins, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, }; -STATIC mp_obj_t pyb_spi_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *all_args) { +STATIC mp_obj_t pyb_spi_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { // parse args mp_map_t kw_args; mp_map_init_fixed_table(&kw_args, n_kw, all_args + n_args); @@ -379,7 +373,6 @@ STATIC const mp_map_elem_t pyb_spi_locals_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_write_readinto), (mp_obj_t)&pyb_spi_write_readinto_obj }, // class constants - { MP_OBJ_NEW_QSTR(MP_QSTR_MASTER), MP_OBJ_NEW_SMALL_INT(SPI_MODE_MASTER) }, { MP_OBJ_NEW_QSTR(MP_QSTR_MSB), MP_OBJ_NEW_SMALL_INT(PYBSPI_FIRST_BIT_MSB) }, }; diff --git a/cc3200/mods/pybtimer.c b/cc3200/mods/pybtimer.c index 2ac71cccb7..0eeb6eefd3 100644 --- a/cc3200/mods/pybtimer.c +++ b/cc3200/mods/pybtimer.c @@ -322,7 +322,7 @@ error: mp_raise_ValueError(mpexception_value_invalid_arguments); } -STATIC mp_obj_t pyb_timer_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) { +STATIC mp_obj_t pyb_timer_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { // check arguments mp_arg_check_num(n_args, n_kw, 1, MP_OBJ_FUN_ARGS_MAX, true); diff --git a/cc3200/mods/pybuart.c b/cc3200/mods/pybuart.c index 493522f835..fe710be920 100644 --- a/cc3200/mods/pybuart.c +++ b/cc3200/mods/pybuart.c @@ -46,7 +46,6 @@ #include "uart.h" #include "pybuart.h" #include "mpirq.h" -#include "pybioctl.h" #include "pybsleep.h" #include "mpexception.h" #include "py/mpstate.h" @@ -443,7 +442,7 @@ STATIC const mp_arg_t pyb_uart_init_args[] = { { MP_QSTR_stop, MP_ARG_INT, {.u_int = 1} }, { MP_QSTR_pins, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, }; -STATIC mp_obj_t pyb_uart_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *all_args) { +STATIC mp_obj_t pyb_uart_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { // parse args mp_map_t kw_args; mp_map_init_fixed_table(&kw_args, n_kw, all_args + n_args); @@ -570,8 +569,6 @@ STATIC const mp_map_elem_t pyb_uart_locals_dict_table[] = { /// \method read([nbytes]) { MP_OBJ_NEW_QSTR(MP_QSTR_read), (mp_obj_t)&mp_stream_read_obj }, - /// \method readall() - { MP_OBJ_NEW_QSTR(MP_QSTR_readall), (mp_obj_t)&mp_stream_readall_obj }, /// \method readline() { MP_OBJ_NEW_QSTR(MP_QSTR_readline), (mp_obj_t)&mp_stream_unbuffered_readline_obj}, /// \method readinto(buf[, nbytes]) @@ -632,14 +629,14 @@ STATIC mp_uint_t pyb_uart_ioctl(mp_obj_t self_in, mp_uint_t request, mp_uint_t a mp_uint_t ret; uart_check_init(self); - if (request == MP_IOCTL_POLL) { + if (request == MP_STREAM_POLL) { mp_uint_t flags = arg; ret = 0; - if ((flags & MP_IOCTL_POLL_RD) && uart_rx_any(self)) { - ret |= MP_IOCTL_POLL_RD; + if ((flags & MP_STREAM_POLL_RD) && uart_rx_any(self)) { + ret |= MP_STREAM_POLL_RD; } - if ((flags & MP_IOCTL_POLL_WR) && MAP_UARTSpaceAvail(self->reg)) { - ret |= MP_IOCTL_POLL_WR; + if ((flags & MP_STREAM_POLL_WR) && MAP_UARTSpaceAvail(self->reg)) { + ret |= MP_STREAM_POLL_WR; } } else { *errcode = EINVAL; diff --git a/cc3200/mods/pybwdt.c b/cc3200/mods/pybwdt.c index 30478c83ce..b4c8472685 100644 --- a/cc3200/mods/pybwdt.c +++ b/cc3200/mods/pybwdt.c @@ -92,7 +92,7 @@ STATIC const mp_arg_t pyb_wdt_init_args[] = { { MP_QSTR_id, MP_ARG_OBJ, {.u_obj = mp_const_none} }, { MP_QSTR_timeout, MP_ARG_INT, {.u_int = 5000} }, // 5 s }; -STATIC mp_obj_t pyb_wdt_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *all_args) { +STATIC mp_obj_t pyb_wdt_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { // check the arguments mp_map_t kw_args; mp_map_init_fixed_table(&kw_args, n_kw, all_args + n_args); diff --git a/cc3200/mpconfigport.h b/cc3200/mpconfigport.h index bf3e691bd8..5b6a035d5c 100644 --- a/cc3200/mpconfigport.h +++ b/cc3200/mpconfigport.h @@ -55,6 +55,7 @@ #define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_NONE) #define MICROPY_OPT_COMPUTED_GOTO (0) #define MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE (0) +#define MICROPY_READER_FATFS (1) #ifndef DEBUG // we need ram on the launchxl while debugging #define MICROPY_CPYTHON_COMPAT (1) #else @@ -112,6 +113,7 @@ #define MICROPY_PY_URE (1) #define MICROPY_PY_UHEAPQ (0) #define MICROPY_PY_UHASHLIB (0) +#define MICROPY_PY_USELECT (1) #define MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF (1) #define MICROPY_EMERGENCY_EXCEPTION_BUF_SIZE (0) @@ -192,6 +194,7 @@ typedef long mp_off_t; #define MICROPY_BEGIN_ATOMIC_SECTION() disable_irq() #define MICROPY_END_ATOMIC_SECTION(state) enable_irq(state) +#define MICROPY_EVENT_POLL_HOOK __WFI(); // assembly functions to handle critical sections, interrupt // disabling/enabling and sleep mode enter/exit diff --git a/cc3200/mptask.c b/cc3200/mptask.c index eb673b08cf..3c34ceeca0 100644 --- a/cc3200/mptask.c +++ b/cc3200/mptask.c @@ -98,7 +98,12 @@ static FATFS *sflash_fatfs; static const char fresh_main_py[] = "# main.py -- put your code here!\r\n"; static const char fresh_boot_py[] = "# boot.py -- run on boot-up\r\n" - "# can run arbitrary Python, but best to keep it minimal\r\n"; + "# can run arbitrary Python, but best to keep it minimal\r\n" + #if MICROPY_STDIO_UART + "import os, machine\r\n" + "os.dupterm(machine.UART(0, " MP_STRINGIFY(MICROPY_STDIO_UART_BAUD) "))\r\n" + #endif + ; /****************************************************************************** DECLARE PUBLIC FUNCTIONS diff --git a/cc3200/tools/smoke.py b/cc3200/tools/smoke.py index 20a8377877..3ade11cf87 100644 --- a/cc3200/tools/smoke.py +++ b/cc3200/tools/smoke.py @@ -51,7 +51,7 @@ n_w = f.write(test_bytes) print(n_w == len(test_bytes)) f.close() f = open('test.txt', 'r') -r = bytes(f.readall(), 'ascii') +r = bytes(f.read(), 'ascii') # check that we can write and read it correctly print(r == test_bytes) f.close() |