summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraskpatricw <4002194+askpatrickw@users.noreply.github.com>2020-12-21 17:59:35 -0800
committeraskpatricw <4002194+askpatrickw@users.noreply.github.com>2020-12-21 17:59:35 -0800
commit737828ccb15824b320797a5fae51cab71eb247d4 (patch)
treece90dd1192cba012c370bd139e87815fdb98b427
parent10d735db9f0b2ad3525f2bf4b68ae0c5474686ec (diff)
parentdf8cba10682ad2a33a8ccb97350e82328be92bef (diff)
Merge branch 'main' of https://github.com/adafruit/circuitpython into main
-rw-r--r--.github/workflows/build.yml6
-rw-r--r--devices/ble_hci/common-hal/_bleio/att.c48
-rw-r--r--devices/ble_hci/common-hal/_bleio/hci_include/att_internal.h52
-rw-r--r--devices/ble_hci/common-hal/_bleio/hci_include/hci.h22
-rw-r--r--devices/ble_hci/common-hal/_bleio/hci_include/hci_vs.h20
-rw-r--r--devices/ble_hci/common-hal/_bleio/hci_include/l2cap_internal.h16
-rw-r--r--locale/pt_BR.po6
-rw-r--r--ports/atmel-samd/Makefile9
-rw-r--r--ports/atmel-samd/boards/bast_pro_mini_m0/mpconfigboard.mk2
-rwxr-xr-xports/atmel-samd/boards/sparkfun_lumidrive/mpconfigboard.mk2
-rw-r--r--ports/atmel-samd/boards/stackrduino_m0_pro/board.c37
-rw-r--r--ports/atmel-samd/boards/stackrduino_m0_pro/mpconfigboard.h33
-rw-r--r--ports/atmel-samd/boards/stackrduino_m0_pro/mpconfigboard.mk58
-rw-r--r--ports/atmel-samd/boards/stackrduino_m0_pro/pins.c40
-rw-r--r--ports/cxd56/Makefile2
-rw-r--r--ports/litex/Makefile2
-rw-r--r--ports/mimxrt10xx/Makefile4
-rwxr-xr-xports/nrf/Makefile2
-rw-r--r--ports/nrf/boards/bastble/README.md4
-rw-r--r--ports/nrf/boards/bastble/board.c41
-rw-r--r--ports/nrf/boards/bastble/mpconfigboard.h25
-rw-r--r--ports/nrf/boards/bastble/mpconfigboard.mk10
-rw-r--r--ports/nrf/boards/bastble/pins.c47
-rw-r--r--ports/nrf/boards/simmel/mpconfigboard.mk2
-rwxr-xr-xports/stm/Makefile5
-rw-r--r--ports/stm/boards/espruino_pico/mpconfigboard.mk2
-rw-r--r--py/py.mk2
-rw-r--r--shared-bindings/adafruit_bus_device/I2CDevice.c8
-rw-r--r--shared-bindings/adafruit_bus_device/I2CDevice.h2
-rw-r--r--shared-bindings/camera/ImageFormat.c1
-rw-r--r--shared-bindings/camera/ImageFormat.h2
-rw-r--r--shared-module/adafruit_bus_device/I2CDevice.c4
-rw-r--r--shared-module/displayio/ColorConverter.c9
-rw-r--r--shared-module/displayio/OnDiskBitmap.c5
-rw-r--r--supervisor/shared/external_flash/devices.h60
35 files changed, 486 insertions, 104 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 6ca679325..36b8db388 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -185,6 +185,7 @@ jobs:
- "arduino_nano_33_iot"
- "arduino_zero"
- "bast_pro_mini_m0"
+ - "bastble"
- "bdmicro_vina_d21"
- "bdmicro_vina_d51"
- "bless_dev_board_multi_sensor"
@@ -311,6 +312,7 @@ jobs:
- "sparkfun_samd21_mini"
- "sparkfun_samd51_thing_plus"
- "spresense"
+ - "stackrduino_m0_pro"
- "stm32f411ce_blackpill"
- "stm32f411ve_discovery"
- "stm32f412zg_discovery"
@@ -343,8 +345,8 @@ jobs:
run: |
sudo apt-get install -y gettext
pip install requests sh click setuptools awscli
- wget https://adafruit-circuit-python.s3.amazonaws.com/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2
- sudo tar -C /usr --strip-components=1 -xaf gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2
+ wget --no-verbose https://adafruit-circuit-python.s3.amazonaws.com/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
+ sudo tar -C /usr --strip-components=1 -xaf gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
- name: Versions
run: |
gcc --version
diff --git a/devices/ble_hci/common-hal/_bleio/att.c b/devices/ble_hci/common-hal/_bleio/att.c
index 6528361cb..4573d5e9f 100644
--- a/devices/ble_hci/common-hal/_bleio/att.c
+++ b/devices/ble_hci/common-hal/_bleio/att.c
@@ -61,7 +61,7 @@ STATIC struct {
typedef struct __packed {
uint8_t properties;
uint16_t value_handle;
- uint8_t uuid[0]; // 2 or 16 bytes
+ uint8_t uuid[]; // 2 or 16 bytes
} characteristic_declaration_t;
STATIC uint8_t bleio_properties_to_ble_spec_properties(uint8_t bleio_properties) {
@@ -1010,21 +1010,22 @@ void process_read_group_req(uint16_t conn_handle, uint16_t mtu, uint8_t dlen, ui
}
int att_read_group_req(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle, uint16_t uuid, uint8_t response_buffer[]) {
- struct __packed {
+
+ typedef struct __packed {
struct bt_att_hdr h;
struct bt_att_read_group_req r;
- } req = { {
- .code = BT_ATT_OP_READ_GROUP_REQ,
- }, {
- .start_handle = start_handle,
- .end_handle = end_handle,
- }
- };
- req.r.uuid[0] = uuid & 0xff;
- req.r.uuid[1] = uuid >> 8;
+ } req_t;
+ uint8_t req_bytes[sizeof(req_t) + sizeof(uuid)];
+ req_t *req = (req_t *) req_bytes;
- return send_req_wait_for_rsp(conn_handle, sizeof(req), (uint8_t *) &req, response_buffer);
+ req->h.code = BT_ATT_OP_READ_GROUP_REQ;
+ req->r.start_handle = start_handle;
+ req->r.end_handle = end_handle;
+ req->r.uuid[0] = uuid & 0xff;
+ req->r.uuid[1] = uuid >> 8;
+
+ return send_req_wait_for_rsp(conn_handle, sizeof(req_bytes), req_bytes, response_buffer);
}
STATIC void process_read_group_rsp(uint16_t conn_handle, uint8_t dlen, uint8_t data[]) {
@@ -1305,20 +1306,21 @@ STATIC void process_read_type_req(uint16_t conn_handle, uint16_t mtu, uint8_t dl
}
int att_read_type_req(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle, uint16_t type, uint8_t response_buffer[]) {
- struct __packed {
+ typedef struct __packed {
struct bt_att_hdr h;
struct bt_att_read_type_req r;
- } req = { {
- .code = BT_ATT_OP_READ_TYPE_REQ,
- }, {
- .start_handle = start_handle,
- .end_handle = end_handle,
- }
- };
- req.r.uuid[0] = type & 0xff;
- req.r.uuid[1] = type >> 8;
+ } req_t;
- return send_req_wait_for_rsp(conn_handle, sizeof(req), (uint8_t *) &req, response_buffer);
+ uint8_t req_bytes[sizeof(req_t) + sizeof(type)];
+ req_t *req = (req_t *) req_bytes;
+
+ req->h.code = BT_ATT_OP_READ_TYPE_REQ;
+ req->r.start_handle = start_handle;
+ req->r.end_handle = end_handle;
+ req->r.uuid[0] = type & 0xff;
+ req->r.uuid[1] = type >> 8;
+
+ return send_req_wait_for_rsp(conn_handle, sizeof(req_bytes), req_bytes, response_buffer);
}
STATIC void process_read_type_rsp(uint16_t conn_handle, uint8_t dlen, uint8_t data[]) {
diff --git a/devices/ble_hci/common-hal/_bleio/hci_include/att_internal.h b/devices/ble_hci/common-hal/_bleio/hci_include/att_internal.h
index d6a4cb79c..b8efccaf4 100644
--- a/devices/ble_hci/common-hal/_bleio/hci_include/att_internal.h
+++ b/devices/ble_hci/common-hal/_bleio/hci_include/att_internal.h
@@ -69,7 +69,7 @@ struct bt_att_info_128 {
#define BT_ATT_OP_FIND_INFO_RSP 0x05
struct bt_att_find_info_rsp {
uint8_t format;
- uint8_t info[0];
+ uint8_t info[];
} __packed;
/* Find By Type Value Request */
@@ -78,7 +78,7 @@ struct bt_att_find_type_req {
uint16_t start_handle;
uint16_t end_handle;
uint16_t type;
- uint8_t value[0];
+ uint8_t value[];
} __packed;
struct bt_att_handle_group {
@@ -89,7 +89,8 @@ struct bt_att_handle_group {
/* Find By Type Value Response */
#define BT_ATT_OP_FIND_TYPE_RSP 0x07
struct bt_att_find_type_rsp {
- struct bt_att_handle_group list[0];
+ uint8_t _dummy[0];
+ struct bt_att_handle_group list[];
} __packed;
/* Read By Type Request */
@@ -97,19 +98,19 @@ struct bt_att_find_type_rsp {
struct bt_att_read_type_req {
uint16_t start_handle;
uint16_t end_handle;
- uint8_t uuid[0];
+ uint8_t uuid[];
} __packed;
struct bt_att_data {
uint16_t handle;
- uint8_t value[0];
+ uint8_t value[];
} __packed;
/* Read By Type Response */
#define BT_ATT_OP_READ_TYPE_RSP 0x09
struct bt_att_read_type_rsp {
uint8_t len;
- struct bt_att_data data[0];
+ struct bt_att_data data[];
} __packed;
/* Read Request */
@@ -121,7 +122,8 @@ struct bt_att_read_req {
/* Read Response */
#define BT_ATT_OP_READ_RSP 0x0b
struct bt_att_read_rsp {
- uint8_t value[0];
+ uint8_t _dummy[0];
+ uint8_t value[];
} __packed;
/* Read Blob Request */
@@ -134,7 +136,8 @@ struct bt_att_read_blob_req {
/* Read Blob Response */
#define BT_ATT_OP_READ_BLOB_RSP 0x0d
struct bt_att_read_blob_rsp {
- uint8_t value[0];
+ uint8_t _dummy[0];
+ uint8_t value[];
} __packed;
/* Read Multiple Request */
@@ -142,13 +145,15 @@ struct bt_att_read_blob_rsp {
#define BT_ATT_OP_READ_MULT_REQ 0x0e
struct bt_att_read_mult_req {
- uint16_t handles[0];
+ uint8_t _dummy[0];
+ uint16_t handles[];
} __packed;
/* Read Multiple Respose */
#define BT_ATT_OP_READ_MULT_RSP 0x0f
struct bt_att_read_mult_rsp {
- uint8_t value[0];
+ uint8_t _dummy[0];
+ uint8_t value[];
} __packed;
/* Read by Group Type Request */
@@ -156,27 +161,27 @@ struct bt_att_read_mult_rsp {
struct bt_att_read_group_req {
uint16_t start_handle;
uint16_t end_handle;
- uint8_t uuid[0];
+ uint8_t uuid[];
} __packed;
struct bt_att_group_data {
uint16_t start_handle;
uint16_t end_handle;
- uint8_t value[0];
+ uint8_t value[];
} __packed;
/* Read by Group Type Response */
#define BT_ATT_OP_READ_GROUP_RSP 0x11
struct bt_att_read_group_rsp {
uint8_t len;
- struct bt_att_group_data data[0];
+ struct bt_att_group_data data[];
} __packed;
/* Write Request */
#define BT_ATT_OP_WRITE_REQ 0x12
struct bt_att_write_req {
uint16_t handle;
- uint8_t value[0];
+ uint8_t value[];
} __packed;
/* Write Response */
@@ -187,7 +192,7 @@ struct bt_att_write_req {
struct bt_att_prepare_write_req {
uint16_t handle;
uint16_t offset;
- uint8_t value[0];
+ uint8_t value[];
} __packed;
/* Prepare Write Respond */
@@ -195,7 +200,7 @@ struct bt_att_prepare_write_req {
struct bt_att_prepare_write_rsp {
uint16_t handle;
uint16_t offset;
- uint8_t value[0];
+ uint8_t value[];
} __packed;
/* Execute Write Request */
@@ -214,14 +219,14 @@ struct bt_att_exec_write_req {
#define BT_ATT_OP_NOTIFY 0x1b
struct bt_att_notify {
uint16_t handle;
- uint8_t value[0];
+ uint8_t value[];
} __packed;
/* Handle Value Indication */
#define BT_ATT_OP_INDICATE 0x1d
struct bt_att_indicate {
uint16_t handle;
- uint8_t value[0];
+ uint8_t value[];
} __packed;
/* Handle Value Confirm */
@@ -233,14 +238,15 @@ struct bt_att_signature {
#define BT_ATT_OP_READ_MULT_VL_REQ 0x20
struct bt_att_read_mult_vl_req {
- uint16_t handles[0];
+ uint8_t _dummy[0];
+ uint16_t handles[];
} __packed;
/* Read Multiple Respose */
#define BT_ATT_OP_READ_MULT_VL_RSP 0x21
struct bt_att_read_mult_vl_rsp {
uint16_t len;
- uint8_t value[0];
+ uint8_t value[];
} __packed;
/* Handle Multiple Value Notification */
@@ -248,19 +254,19 @@ struct bt_att_read_mult_vl_rsp {
struct bt_att_notify_mult {
uint16_t handle;
uint16_t len;
- uint8_t value[0];
+ uint8_t value[];
} __packed;
/* Write Command */
#define BT_ATT_OP_WRITE_CMD 0x52
struct bt_att_write_cmd {
uint16_t handle;
- uint8_t value[0];
+ uint8_t value[];
} __packed;
/* Signed Write Command */
#define BT_ATT_OP_SIGNED_WRITE_CMD 0xd2
struct bt_att_signed_write_cmd {
uint16_t handle;
- uint8_t value[0];
+ uint8_t value[];
} __packed;
diff --git a/devices/ble_hci/common-hal/_bleio/hci_include/hci.h b/devices/ble_hci/common-hal/_bleio/hci_include/hci.h
index 5213edbf0..797278946 100644
--- a/devices/ble_hci/common-hal/_bleio/hci_include/hci.h
+++ b/devices/ble_hci/common-hal/_bleio/hci_include/hci.h
@@ -454,7 +454,7 @@ struct bt_hci_handle_count {
#define BT_HCI_OP_HOST_NUM_COMPLETED_PACKETS BT_OP(BT_OGF_BASEBAND, 0x0035)
struct bt_hci_cp_host_num_completed_packets {
uint8_t num_handles;
- struct bt_hci_handle_count h[0];
+ struct bt_hci_handle_count h[];
} __packed;
#define BT_HCI_OP_WRITE_INQUIRY_MODE BT_OP(BT_OGF_BASEBAND, 0x0045)
@@ -1099,7 +1099,7 @@ struct bt_hci_ext_adv_set {
struct bt_hci_cp_le_set_ext_adv_enable {
uint8_t enable;
uint8_t set_num;
- struct bt_hci_ext_adv_set s[0];
+ struct bt_hci_ext_adv_set s[];
} __packed;
#define BT_HCI_OP_LE_READ_MAX_ADV_DATA_LEN BT_OP(BT_OGF_LE, 0x003a)
@@ -1158,7 +1158,7 @@ struct bt_hci_cp_le_set_ext_scan_param {
uint8_t own_addr_type;
uint8_t filter_policy;
uint8_t phys;
- struct bt_hci_ext_scan_phy p[0];
+ struct bt_hci_ext_scan_phy p[];
} __packed;
/* Extends BT_HCI_LE_SCAN_FILTER_DUP */
@@ -1189,7 +1189,7 @@ struct bt_hci_cp_le_ext_create_conn {
uint8_t own_addr_type;
bt_addr_le_t peer_addr;
uint8_t phys;
- struct bt_hci_ext_conn_phy p[0];
+ struct bt_hci_ext_conn_phy p[];
} __packed;
#define BT_HCI_OP_LE_PER_ADV_CREATE_SYNC BT_OP(BT_OGF_LE, 0x0044)
@@ -1354,7 +1354,7 @@ struct bt_hci_evt_role_change {
#define BT_HCI_EVT_NUM_COMPLETED_PACKETS 0x13
struct bt_hci_evt_num_completed_packets {
uint8_t num_handles;
- struct bt_hci_handle_count h[0];
+ struct bt_hci_handle_count h[];
} __packed;
#define BT_HCI_EVT_PIN_CODE_REQ 0x16
@@ -1510,11 +1510,11 @@ struct bt_hci_evt_le_advertising_info {
uint8_t evt_type;
bt_addr_le_t addr;
uint8_t length;
- uint8_t data[0];
+ uint8_t data[];
} __packed;
struct bt_hci_evt_le_advertising_report {
uint8_t num_reports;
- struct bt_hci_evt_le_advertising_info adv_info[0];
+ struct bt_hci_evt_le_advertising_info adv_info[];
} __packed;
#define BT_HCI_EVT_LE_CONN_UPDATE_COMPLETE 0x03
@@ -1593,7 +1593,7 @@ struct bt_hci_evt_le_direct_adv_info {
} __packed;
struct bt_hci_evt_le_direct_adv_report {
uint8_t num_reports;
- struct bt_hci_evt_le_direct_adv_info direct_adv_info[0];
+ struct bt_hci_evt_le_direct_adv_info direct_adv_info[];
} __packed;
#define BT_HCI_EVT_LE_PHY_UPDATE_COMPLETE 0x0c
@@ -1628,11 +1628,11 @@ struct bt_hci_evt_le_ext_advertising_info {
uint16_t interval;
bt_addr_le_t direct_addr;
uint8_t length;
- uint8_t data[0];
+ uint8_t data[];
} __packed;
struct bt_hci_evt_le_ext_advertising_report {
uint8_t num_reports;
- struct bt_hci_evt_le_ext_advertising_info adv_info[0];
+ struct bt_hci_evt_le_ext_advertising_info adv_info[];
} __packed;
#define BT_HCI_EVT_LE_PER_ADV_SYNC_ESTABLISHED 0x0e
@@ -1654,7 +1654,7 @@ struct bt_hci_evt_le_per_advertising_report {
uint8_t unused;
uint8_t data_status;
uint8_t length;
- uint8_t data[0];
+ uint8_t data[];
} __packed;
#define BT_HCI_EVT_LE_PER_ADV_SYNC_LOST 0x10
diff --git a/devices/ble_hci/common-hal/_bleio/hci_include/hci_vs.h b/devices/ble_hci/common-hal/_bleio/hci_include/hci_vs.h
index e4f94b6a8..660691398 100644
--- a/devices/ble_hci/common-hal/_bleio/hci_include/hci_vs.h
+++ b/devices/ble_hci/common-hal/_bleio/hci_include/hci_vs.h
@@ -104,7 +104,7 @@ struct bt_hci_cp_vs_set_trace_enable {
#define BT_HCI_OP_VS_READ_BUILD_INFO BT_OP(BT_OGF_VS, 0x0008)
struct bt_hci_rp_vs_read_build_info {
uint8_t status;
- uint8_t info[0];
+ uint8_t info[];
} __packed;
struct bt_hci_vs_static_addr {
@@ -116,7 +116,7 @@ struct bt_hci_vs_static_addr {
struct bt_hci_rp_vs_read_static_addrs {
uint8_t status;
uint8_t num_addrs;
- struct bt_hci_vs_static_addr a[0];
+ struct bt_hci_vs_static_addr a[];
} __packed;
#define BT_HCI_OP_VS_READ_KEY_HIERARCHY_ROOTS BT_OP(BT_OGF_VS, 0x000a)
@@ -143,7 +143,7 @@ struct bt_hci_vs_cmd {
struct bt_hci_rp_vs_read_host_stack_cmds {
uint8_t status;
uint8_t num_cmds;
- struct bt_hci_vs_cmd c[0];
+ struct bt_hci_vs_cmd c[];
} __packed;
#define BT_HCI_VS_SCAN_REQ_REPORTS_DISABLED 0x00
@@ -189,7 +189,7 @@ struct bt_hci_rp_vs_read_tx_power_level {
struct bt_hci_rp_vs_read_usb_transport_mode {
uint8_t status;
uint8_t num_supported_modes;
- uint8_t supported_mode[0];
+ uint8_t supported_mode[];
} __packed;
#define BT_HCI_VS_USB_H2_MODE 0x00
@@ -210,7 +210,7 @@ struct bt_hci_evt_vs {
#define BT_HCI_EVT_VS_FATAL_ERROR 0x02
struct bt_hci_evt_vs_fatal_error {
uint64_t pc;
- uint8_t err_info[0];
+ uint8_t err_info[];
} __packed;
#define BT_HCI_VS_TRACE_LMP_TX 0x01
@@ -221,7 +221,7 @@ struct bt_hci_evt_vs_fatal_error {
#define BT_HCI_EVT_VS_TRACE_INFO 0x03
struct bt_hci_evt_vs_trace_info {
uint8_t type;
- uint8_t data[0];
+ uint8_t data[];
} __packed;
#define BT_HCI_EVT_VS_SCAN_REQ_RX 0x04
@@ -267,14 +267,14 @@ struct bt_hci_rp_mesh_get_opts {
#define BT_HCI_OC_MESH_SET_SCAN_FILTER 0x01
struct bt_hci_mesh_pattern {
uint8_t pattern_len;
- uint8_t pattern[0];
+ uint8_t pattern[];
} __packed;
struct bt_hci_cp_mesh_set_scan_filter {
uint8_t scan_filter;
uint8_t filter_dup;
uint8_t num_patterns;
- struct bt_hci_mesh_pattern patterns[0];
+ struct bt_hci_mesh_pattern patterns[];
} __packed;
struct bt_hci_rp_mesh_set_scan_filter {
uint8_t status;
@@ -365,11 +365,11 @@ struct bt_hci_evt_mesh_scan_report {
int8_t rssi;
uint32_t instant;
uint8_t data_len;
- uint8_t data[0];
+ uint8_t data[];
} __packed;
struct bt_hci_evt_mesh_scanning_report {
uint8_t num_reports;
- struct bt_hci_evt_mesh_scan_report reports[0];
+ struct bt_hci_evt_mesh_scan_report reports[];
} __packed;
#ifdef __cplusplus
diff --git a/devices/ble_hci/common-hal/_bleio/hci_include/l2cap_internal.h b/devices/ble_hci/common-hal/_bleio/hci_include/l2cap_internal.h
index bed311cf3..a0a2ed056 100644
--- a/devices/ble_hci/common-hal/_bleio/hci_include/l2cap_internal.h
+++ b/devices/ble_hci/common-hal/_bleio/hci_include/l2cap_internal.h
@@ -45,7 +45,7 @@ struct bt_l2cap_sig_hdr {
#define BT_L2CAP_CMD_REJECT 0x01
struct bt_l2cap_cmd_reject {
uint16_t reason;
- uint8_t data[0];
+ uint8_t data[];
} __packed;
struct bt_l2cap_cmd_reject_cid_data {
@@ -88,7 +88,7 @@ struct bt_l2cap_conn_rsp {
struct bt_l2cap_conf_req {
uint16_t dcid;
uint16_t flags;
- uint8_t data[0];
+ uint8_t data[];
} __packed;
#define BT_L2CAP_CONF_RSP 0x05
@@ -96,7 +96,7 @@ struct bt_l2cap_conf_rsp {
uint16_t scid;
uint16_t flags;
uint16_t result;
- uint8_t data[0];
+ uint8_t data[];
} __packed;
/* Option type used by MTU config request data */
@@ -108,7 +108,7 @@ struct bt_l2cap_conf_rsp {
struct bt_l2cap_conf_opt {
uint8_t type;
uint8_t len;
- uint8_t data[0];
+ uint8_t data[];
} __packed;
#define BT_L2CAP_DISCONN_REQ 0x06
@@ -139,7 +139,7 @@ struct bt_l2cap_info_req {
struct bt_l2cap_info_rsp {
uint16_t type;
uint16_t result;
- uint8_t data[0];
+ uint8_t data[];
} __packed;
#define BT_L2CAP_CONN_PARAM_REQ 0x12
@@ -201,7 +201,7 @@ struct bt_l2cap_ecred_conn_req {
uint16_t mtu;
uint16_t mps;
uint16_t credits;
- uint16_t scid[0];
+ uint16_t scid[];
} __packed;
#define BT_L2CAP_ECRED_CONN_RSP 0x18
@@ -210,14 +210,14 @@ struct bt_l2cap_ecred_conn_rsp {
uint16_t mps;
uint16_t credits;
uint16_t result;
- uint16_t dcid[0];
+ uint16_t dcid[];
} __packed;
#define BT_L2CAP_ECRED_RECONF_REQ 0x19
struct bt_l2cap_ecred_reconf_req {
uint16_t mtu;
uint16_t mps;
- uint16_t scid[0];
+ uint16_t scid[];
} __packed;
#define BT_L2CAP_RECONF_SUCCESS 0x0000
diff --git a/locale/pt_BR.po b/locale/pt_BR.po
index eb7392850..8d3d54fab 100644
--- a/locale/pt_BR.po
+++ b/locale/pt_BR.po
@@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-12-14 12:59-0500\n"
-"PO-Revision-Date: 2020-12-11 19:08+0000\n"
+"PO-Revision-Date: 2020-12-16 17:00+0000\n"
"Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n"
"Language-Team: \n"
"Language: pt_BR\n"
@@ -1107,7 +1107,7 @@ msgstr "Frequência PWM inválida"
#: ports/esp32s2/common-hal/analogio/AnalogIn.c
msgid "Invalid Pin"
-msgstr ""
+msgstr "Pino inválido"
#: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c
msgid "Invalid argument"
@@ -1977,7 +1977,7 @@ msgstr "Não é possível gravar no nvm."
#: shared-bindings/alarm/SleepMemory.c
msgid "Unable to write to sleep_memory."
-msgstr ""
+msgstr "Não foi possível escrever no sleep_memory."
#: ports/nrf/common-hal/_bleio/UUID.c
msgid "Unexpected nrfx uuid type"
diff --git a/ports/atmel-samd/Makefile b/ports/atmel-samd/Makefile
index dc7b4e4c8..58c1c0d60 100644
--- a/ports/atmel-samd/Makefile
+++ b/ports/atmel-samd/Makefile
@@ -94,21 +94,21 @@ endif
ifeq ($(CHIP_FAMILY), samd51)
PERIPHERALS_CHIP_FAMILY=sam_d5x_e5x
-OPTIMIZATION_FLAGS ?= -O2
+OPTIMIZATION_FLAGS ?= -O2 -fno-inline-functions
# TinyUSB defines
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_SAMD51 -DCFG_TUD_MIDI_RX_BUFSIZE=128 -DCFG_TUD_CDC_RX_BUFSIZE=256 -DCFG_TUD_MIDI_TX_BUFSIZE=128 -DCFG_TUD_CDC_TX_BUFSIZE=256 -DCFG_TUD_MSC_BUFSIZE=1024
endif
ifeq ($(CHIP_FAMILY), same51)
PERIPHERALS_CHIP_FAMILY=sam_d5x_e5x
-OPTIMIZATION_FLAGS ?= -O2
+OPTIMIZATION_FLAGS ?= -O2 -fno-inline-functions
# TinyUSB defines
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_SAME5X -DCFG_TUD_MIDI_RX_BUFSIZE=128 -DCFG_TUD_CDC_RX_BUFSIZE=256 -DCFG_TUD_MIDI_TX_BUFSIZE=128 -DCFG_TUD_CDC_TX_BUFSIZE=256 -DCFG_TUD_MSC_BUFSIZE=1024
endif
ifeq ($(CHIP_FAMILY), same54)
PERIPHERALS_CHIP_FAMILY=sam_d5x_e5x
-OPTIMIZATION_FLAGS ?= -O2
+OPTIMIZATION_FLAGS ?= -O2 -fno-inline-functions
# TinyUSB defines
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_SAME5X -DCFG_TUD_MIDI_RX_BUFSIZE=128 -DCFG_TUD_CDC_RX_BUFSIZE=256 -DCFG_TUD_MIDI_TX_BUFSIZE=128 -DCFG_TUD_CDC_TX_BUFSIZE=256 -DCFG_TUD_MSC_BUFSIZE=1024
endif
@@ -116,6 +116,9 @@ endif
# option to override default optimization level, set in boards/$(BOARD)/mpconfigboard.mk
CFLAGS += $(OPTIMIZATION_FLAGS)
+# Add -ftree-vrp optimization and checking to all builds. It's not enabled for -Os by default.
+CFLAGS += -ftree-vrp
+
$(echo PERIPHERALS_CHIP_FAMILY=$(PERIPHERALS_CHIP_FAMILY))
#Debugging/Optimization
ifeq ($(DEBUG), 1)
diff --git a/ports/atmel-samd/boards/bast_pro_mini_m0/mpconfigboard.mk b/ports/atmel-samd/boards/bast_pro_mini_m0/mpconfigboard.mk
index 055e6b19e..6a2c89619 100644
--- a/ports/atmel-samd/boards/bast_pro_mini_m0/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/bast_pro_mini_m0/mpconfigboard.mk
@@ -9,3 +9,5 @@ CHIP_FAMILY = samd21
INTERNAL_FLASH_FILESYSTEM = 1
LONGINT_IMPL = NONE
CIRCUITPY_FULL_BUILD = 0
+
+SUPEROPT_GC = 0
diff --git a/ports/atmel-samd/boards/sparkfun_lumidrive/mpconfigboard.mk b/ports/atmel-samd/boards/sparkfun_lumidrive/mpconfigboard.mk
index 3f75d175c..e71bb0739 100755
--- a/ports/atmel-samd/boards/sparkfun_lumidrive/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/sparkfun_lumidrive/mpconfigboard.mk
@@ -16,3 +16,5 @@ CIRCUITPY_AUDIOBUSIO = 0
CIRCUITPY_VECTORIO = 0
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_DotStar
+
+SUPEROPT_GC = 0
diff --git a/ports/atmel-samd/boards/stackrduino_m0_pro/board.c b/ports/atmel-samd/boards/stackrduino_m0_pro/board.c
new file mode 100644
index 000000000..84960e73c
--- /dev/null
+++ b/ports/atmel-samd/boards/stackrduino_m0_pro/board.c
@@ -0,0 +1,37 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
+ *
+ * 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 "supervisor/board.h"
+
+void board_init(void) {
+}
+
+bool board_requests_safe_mode(void) {
+ return false;
+}
+
+void reset_board(void) {
+}
diff --git a/ports/atmel-samd/boards/stackrduino_m0_pro/mpconfigboard.h b/ports/atmel-samd/boards/stackrduino_m0_pro/mpconfigboard.h
new file mode 100644
index 000000000..f0b2764a4
--- /dev/null
+++ b/ports/atmel-samd/boards/stackrduino_m0_pro/mpconfigboard.h
@@ -0,0 +1,33 @@
+#define MICROPY_HW_BOARD_NAME "StackRduino M0 PRO"
+#define MICROPY_HW_MCU_NAME "samd21g18"
+
+#define MICROPY_HW_LED_STATUS (&pin_PA17)
+#define MICROPY_HW_NEOPIXEL (&pin_PA06)
+
+#define SPI_FLASH_BAUDRATE (8000000)
+
+#define SPI_FLASH_MOSI_PIN &pin_PB22
+#define SPI_FLASH_MISO_PIN &pin_PB03
+#define SPI_FLASH_SCK_PIN &pin_PB23
+#define SPI_FLASH_CS_PIN &pin_PA27
+
+// These are pins not to reset.
+#define MICROPY_PORT_A (PORT_PA06)
+#define MICROPY_PORT_B (0)
+#define MICROPY_PORT_C (0)
+
+#define BOARD_HAS_CRYSTAL 1
+
+#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
+#define DEFAULT_I2C_BUS_SDA (&pin_PA22)
+
+#define DEFAULT_SPI_BUS_SCK (&pin_PB11)
+#define DEFAULT_SPI_BUS_MOSI (&pin_PB10)
+#define DEFAULT_SPI_BUS_MISO (&pin_PA12)
+
+#define DEFAULT_UART_BUS_RX (&pin_PA11)
+#define DEFAULT_UART_BUS_TX (&pin_PA10)
+
+// USB is always used internally so skip the pin objects for it.
+#define IGNORE_PIN_PA24 1
+#define IGNORE_PIN_PA25 1
diff --git a/ports/atmel-samd/boards/stackrduino_m0_pro/mpconfigboard.mk b/ports/atmel-samd/boards/stackrduino_m0_pro/mpconfigboard.mk
new file mode 100644
index 000000000..704d26514
--- /dev/null
+++ b/ports/atmel-samd/boards/stackrduino_m0_pro/mpconfigboard.mk
@@ -0,0 +1,58 @@
+USB_VID = 0x1209
+USB_PID = 0xE3E3
+USB_PRODUCT = "StackRduino M0 PRO"
+USB_MANUFACTURER = "StackRduino"
+
+CHIP_VARIANT = SAMD21G18A
+CHIP_FAMILY = samd21
+
+SPI_FLASH_FILESYSTEM = 1
+EXTERNAL_FLASH_DEVICE_COUNT = 1
+EXTERNAL_FLASH_DEVICES = "W25Q64JV_IQ"
+LONGINT_IMPL = MPZ
+
+
+CIRCUITPY_BITBANGIO = 0
+CIRCUITPY_FREQUENCYIO = 0
+CIRCUITPY_COUNTIO = 0
+CIRCUITPY_I2CPERIPHERAL = 0
+CIRCUITPY_VECTORIO = 0
+CIRCUITPY_BUSDEVICE = 0
+
+CFLAGS_INLINE_LIMIT = 55
+SUPEROPT_GC = 0
+
+CFLAGS_BOARD = --param max-inline-insns-auto=15
+ifeq ($(TRANSLATION), ja)
+RELEASE_NEEDS_CLEAN_BUILD = 1
+CFLAGS_INLINE_LIMIT = 35
+endif
+ifeq ($(TRANSLATION), zh_Latn_pinyin)
+RELEASE_NEEDS_CLEAN_BUILD = 1
+CFLAGS_INLINE_LIMIT = 35
+endif
+ifeq ($(TRANSLATION), de_DE)
+RELEASE_NEEDS_CLEAN_BUILD = 1
+CFLAGS_INLINE_LIMIT = 35
+SUPEROPT_VM = 0
+endif
+ifeq ($(TRANSLATION), pl)
+RELEASE_NEEDS_CLEAN_BUILD = 1
+CFLAGS_INLINE_LIMIT = 35
+SUPEROPT_VM = 0
+endif
+ifeq ($(TRANSLATION), fr)
+RELEASE_NEEDS_CLEAN_BUILD = 1
+CFLAGS_INLINE_LIMIT = 35
+SUPEROPT_VM = 0
+endif
+ifeq ($(TRANSLATION), pt_BR)
+RELEASE_NEEDS_CLEAN_BUILD = 1
+CFLAGS_INLINE_LIMIT = 35
+SUPEROPT_VM = 0
+endif
+ifeq ($(TRANSLATION), es)
+RELEASE_NEEDS_CLEAN_BUILD = 1
+CFLAGS_INLINE_LIMIT = 35
+SUPEROPT_VM = 0
+endif
diff --git a/ports/atmel-samd/boards/stackrduino_m0_pro/pins.c b/ports/atmel-samd/boards/stackrduino_m0_pro/pins.c
new file mode 100644
index 000000000..95d2eb5a3
--- /dev/null
+++ b/ports/atmel-samd/boards/stackrduino_m0_pro/pins.c
@@ -0,0 +1,40 @@
+#include "shared-bindings/board/__init__.h"
+
+STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
+ { MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_PA02) },
+ { MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_PB08) },
+ { MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_PB09) },
+ { MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_PA04) },
+ { MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_PA05) },
+ { MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_PB02) },
+ { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_PB11) },
+ { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_PB10) },
+ { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_PA12) },
+ { MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_PA11) },
+ { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_PA11) },
+ { MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_PA10) },
+ { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_PA10) },
+ { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_PA22) },
+ { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_PA23) },
+ { MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_PA08) },
+ { MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_PA09) },
+ { MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_PA14) },
+ { MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_PA15) },
+ { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA20) },
+ { MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_PA21) },
+ { MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_PA06) },
+ { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_PA06) },
+ { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA07) },
+ { MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA18) },
+ { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) },
+ { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) },
+ { MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PA17) },
+ { MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_PA28) },
+ { MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_PA28) },
+ { MP_ROM_QSTR(MP_QSTR_D15), MP_ROM_PTR(&pin_PA13) },
+ { MP_ROM_QSTR(MP_QSTR_CHRG_EN), MP_ROM_PTR(&pin_PA13) },
+ { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
+ { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
+ { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
+};
+MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);
diff --git a/ports/cxd56/Makefile b/ports/cxd56/Makefile
index 5201f0db5..1c48a23ca 100644
--- a/ports/cxd56/Makefile
+++ b/ports/cxd56/Makefile
@@ -122,7 +122,7 @@ CFLAGS += \
-fdata-sections \
-Wall \
-OPTIMIZATION_FLAGS ?= -O2
+OPTIMIZATION_FLAGS ?= -O2 -fno-inline-functions
# option to override compiler optimization level, set in boards/$(BOARD)/mpconfigboard.mk
CFLAGS += $(OPTIMIZATION_FLAGS)
diff --git a/ports/litex/Makefile b/ports/litex/Makefile
index 612953daa..f384f2457 100644
--- a/ports/litex/Makefile
+++ b/ports/litex/Makefile
@@ -80,7 +80,7 @@ ifeq ($(DEBUG), 1)
OPTIMIZATION_FLAGS ?= -Og
else
CFLAGS += -DNDEBUG -ggdb3
- OPTIMIZATION_FLAGS ?= -O2
+ OPTIMIZATION_FLAGS ?= -O2 -fno-inline-functions
# TODO: Test with -flto
### CFLAGS += -flto
endif
diff --git a/ports/mimxrt10xx/Makefile b/ports/mimxrt10xx/Makefile
index a17e5f703..04949bf01 100644
--- a/ports/mimxrt10xx/Makefile
+++ b/ports/mimxrt10xx/Makefile
@@ -75,7 +75,7 @@ INC += \
# NDEBUG disables assert() statements. This reduces code size pretty dramatically, per tannewt.
-CFLAGS += -Os -DNDEBUG -ffreestanding
+CFLAGS += -Os -ftree-vrp -DNDEBUG -ffreestanding
# TinyUSB defines
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_MIMXRT10XX -DCFG_TUD_MIDI_RX_BUFSIZE=512 -DCFG_TUD_CDC_RX_BUFSIZE=512 -DCFG_TUD_MIDI_TX_BUFSIZE=512 -DCFG_TUD_CDC_TX_BUFSIZE=512 -DCFG_TUD_MSC_BUFSIZE=1024
@@ -108,7 +108,7 @@ CFLAGS += \
-g3 -Wno-unused-parameter \
-ffunction-sections -fdata-sections -fstack-usage
-OPTIMIZATION_FLAGS ?= -O2
+OPTIMIZATION_FLAGS ?= -O2 -fno-inline-functions
# option to override compiler optimization level, set in boards/$(BOARD)/mpconfigboard.mk
CFLAGS += $(OPTIMIZATION_FLAGS)
diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile
index 3fef68e88..278625e92 100755
--- a/ports/nrf/Makefile
+++ b/ports/nrf/Makefile
@@ -89,7 +89,7 @@ ifeq ($(DEBUG), 1)
CFLAGS += -ggdb3
OPTIMIZATION_FLAGS = -Og
else
- OPTIMIZATION_FLAGS ?= -O2
+ OPTIMIZATION_FLAGS ?= -O2 -fno-inline-functions
CFLAGS += -DNDEBUG -ggdb3
CFLAGS += -flto -flto-partition=none
endif
diff --git a/ports/nrf/boards/bastble/README.md b/ports/nrf/boards/bastble/README.md
new file mode 100644
index 000000000..0af6209bd
--- /dev/null
+++ b/ports/nrf/boards/bastble/README.md
@@ -0,0 +1,4 @@
+# Electronic Cats BastBLE
+
+The [BastBLE](https://electroniccats.com/store/bast-ble/) based on Nordic nRF 52840 and containing
+a powerful Cortex M4F. This board include a external memory QSPI flash.
diff --git a/ports/nrf/boards/bastble/board.c b/ports/nrf/boards/bastble/board.c
new file mode 100644
index 000000000..b6fb04f06
--- /dev/null
+++ b/ports/nrf/boards/bastble/board.c
@@ -0,0 +1,41 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
+ *
+ * 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 "supervisor/board.h"
+#include "nrf.h"
+#include "nrf_rtc.h"
+
+void board_init(void) {
+
+}
+
+bool board_requests_safe_mode(void) {
+ return false;
+}
+
+void reset_board(void) {
+
+}
diff --git a/ports/nrf/boards/bastble/mpconfigboard.h b/ports/nrf/boards/bastble/mpconfigboard.h
new file mode 100644
index 000000000..e36227c6b
--- /dev/null
+++ b/ports/nrf/boards/bastble/mpconfigboard.h
@@ -0,0 +1,25 @@
+#include "nrfx/hal/nrf_gpio.h"
+
+#define MICROPY_HW_BOARD_NAME "BastBLE"
+#define MICROPY_HW_MCU_NAME "nRF52840"
+
+#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
+
+#if QSPI_FLASH_FILESYSTEM
+#define MICROPY_QSPI_DATA0 NRF_GPIO_PIN_MAP(0, 30)
+#define MICROPY_QSPI_DATA1 NRF_GPIO_PIN_MAP(0, 29)
+#define MICROPY_QSPI_DATA2 NRF_GPIO_PIN_MAP(0, 28)
+#define MICROPY_QSPI_DATA3 NRF_GPIO_PIN_MAP(0, 2)
+#define MICROPY_QSPI_SCK NRF_GPIO_PIN_MAP(0, 3)
+#define MICROPY_QSPI_CS NRF_GPIO_PIN_MAP(0, 26)
+#endif
+
+#define DEFAULT_I2C_BUS_SCL (&pin_P1_10)
+#define DEFAULT_I2C_BUS_SDA (&pin_P1_11)
+
+#define DEFAULT_SPI_BUS_SCK (&pin_P1_00)
+#define DEFAULT_SPI_BUS_MOSI (&pin_P1_06)
+#define DEFAULT_SPI_BUS_MISO (&pin_P0_15)
+
+#define DEFAULT_UART_BUS_RX (&pin_P0_09)
+#define DEFAULT_UART_BUS_TX (&pin_P0_10)
diff --git a/ports/nrf/boards/bastble/mpconfigboard.mk b/ports/nrf/boards/bastble/mpconfigboard.mk
new file mode 100644
index 000000000..eca900de7
--- /dev/null
+++ b/ports/nrf/boards/bastble/mpconfigboard.mk
@@ -0,0 +1,10 @@
+USB_VID = 0x1209
+USB_PID = 0x805A
+USB_PRODUCT = "BastBLE"
+USB_MANUFACTURER = "ElectronicCats"
+
+MCU_CHIP = nrf52840
+
+QSPI_FLASH_FILESYSTEM = 1
+EXTERNAL_FLASH_DEVICE_COUNT = 1
+EXTERNAL_FLASH_DEVICES = "GD25Q16C"
diff --git a/ports/nrf/boards/bastble/pins.c b/ports/nrf/boards/bastble/pins.c
new file mode 100644
index 000000000..b35dad43d
--- /dev/null
+++ b/ports/nrf/boards/bastble/pins.c
@@ -0,0 +1,47 @@
+#include "shared-bindings/board/__init__.h"
+
+STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
+ { MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_P1_11) },
+ { MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_P1_10) },
+ { MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_P1_00) },
+ { MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_P1_02) },
+ { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_P1_13) },
+ { MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_P1_06) },
+ { MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_P0_15) },
+ { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_P0_06) },
+ { MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_P1_09) },
+ { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_P0_08) },
+ { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_P0_26) },
+ { MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_P0_07) },
+
+ { MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_P0_02) },
+ { MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_P0_28) },
+ { MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_P0_05) },
+ { MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_P0_03) },
+
+ { MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_P0_30) },
+ { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_P1_11) },
+
+ { MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_P0_29) },
+ { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_P1_10) },
+
+ { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_P1_06) },
+ { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_P0_15) },
+
+ { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_P1_00) },
+ { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_P0_24) },
+
+ { MP_ROM_QSTR(MP_QSTR_AREF), MP_ROM_PTR(&pin_P0_31) },
+
+ // voltage sense battery
+ { MP_ROM_QSTR(MP_QSTR_VBAT), MP_ROM_PTR(&pin_P0_26) },
+
+ { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_P0_10) },
+ { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_P0_09) },
+
+ { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
+ { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
+ { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
+};
+
+MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
diff --git a/ports/nrf/boards/simmel/mpconfigboard.mk b/ports/nrf/boards/simmel/mpconfigboard.mk
index 704881b3c..dd6b1fbfd 100644
--- a/ports/nrf/boards/simmel/mpconfigboard.mk
+++ b/ports/nrf/boards/simmel/mpconfigboard.mk
@@ -16,12 +16,14 @@ CIRCUITPY_AUDIOMP3 = 0
CIRCUITPY_BUSIO = 1
CIRCUITPY_DISPLAYIO = 0
CIRCUITPY_FRAMEBUFFERIO = 0
+CIRCUITPY_GAMEPAD = 0
CIRCUITPY_NEOPIXEL_WRITE = 0
CIRCUITPY_NVM = 0
CIRCUITPY_PIXELBUF = 0
CIRCUITPY_RGBMATRIX = 0
CIRCUITPY_ROTARYIO = 0
CIRCUITPY_RTC = 1
+CIRCUITPY_SDCARDIO = 0
CIRCUITPY_TOUCHIO = 0
CIRCUITPY_ULAB = 0
CIRCUITPY_WATCHDOG = 1
diff --git a/ports/stm/Makefile b/ports/stm/Makefile
index b9426e07e..e09fe736c 100755
--- a/ports/stm/Makefile
+++ b/ports/stm/Makefile
@@ -86,7 +86,7 @@ ifeq ($(DEBUG), 1)
CFLAGS += -fno-inline -fno-ipa-sra
else
CFLAGS += -DNDEBUG
- OPTIMIZATION_FLAGS ?= -O2
+ OPTIMIZATION_FLAGS ?= -O2 -fno-inline-functions
CFLAGS += -ggdb3
# TODO: Test with -flto
# CFLAGS += -flto
@@ -95,6 +95,9 @@ endif
# to override compiler optimization level, set in boards/$(BOARD)/mpconfigboard.mk
CFLAGS += $(OPTIMIZATION_FLAGS)
+# Add -ftree-vrp optimization and checking to all builds. It's not enabled for -Os by default.
+CFLAGS += -ftree-vrp
+
# MCU Series is defined by the HAL package and doesn't need to be specified here
C_DEFS = -D$(MCU_PACKAGE) -DUSE_HAL_DRIVER -DUSE_FULL_LL_DRIVER -D$(MCU_VARIANT)
diff --git a/ports/stm/boards/espruino_pico/mpconfigboard.mk b/ports/stm/boards/espruino_pico/mpconfigboard.mk
index 556ff35c4..14f9323fd 100644
--- a/ports/stm/boards/espruino_pico/mpconfigboard.mk
+++ b/ports/stm/boards/espruino_pico/mpconfigboard.mk
@@ -20,3 +20,5 @@ LD_FILE = boards/STM32F401xd_fs.ld
# lto for this port, and if other stuff hasn't been added in the
# meantime
CIRCUITPY_ULAB = 0
+
+SUPEROPT_GC = 0
diff --git a/py/py.mk b/py/py.mk
index 1a8f1219a..3f94aa67a 100644
--- a/py/py.mk
+++ b/py/py.mk
@@ -19,7 +19,7 @@ endif
QSTR_GLOBAL_DEPENDENCIES += $(PY_SRC)/mpconfig.h mpconfigport.h
# some code is performance bottleneck and compiled with other optimization options
-_CSUPEROPT = -O3
+CSUPEROPT = -O3
# this sets the config file for FatFs
CFLAGS_MOD += -DFFCONF_H=\"lib/oofatfs/ffconf.h\"
diff --git a/shared-bindings/adafruit_bus_device/I2CDevice.c b/shared-bindings/adafruit_bus_device/I2CDevice.c
index 4c9086162..a4c04e198 100644
--- a/shared-bindings/adafruit_bus_device/I2CDevice.c
+++ b/shared-bindings/adafruit_bus_device/I2CDevice.c
@@ -163,7 +163,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_KW(adafruit_bus_device_i2cdevice_readinto_obj, 2,
//| """
//| ...
//|
-STATIC void write(adafruit_bus_device_i2cdevice_obj_t *self, mp_obj_t buffer, int32_t start, mp_int_t end) {
+STATIC void write(adafruit_bus_device_i2cdevice_obj_t *self, mp_obj_t buffer, int32_t start, mp_int_t end, bool transmit_stop_bit) {
mp_buffer_info_t bufinfo;
mp_get_buffer_raise(buffer, &bufinfo, MP_BUFFER_READ);
@@ -173,7 +173,7 @@ STATIC void write(adafruit_bus_device_i2cdevice_obj_t *self, mp_obj_t buffer, in
mp_raise_ValueError(translate("Buffer must be at least length 1"));
}
- uint8_t status = common_hal_adafruit_bus_device_i2cdevice_write(MP_OBJ_TO_PTR(self), ((uint8_t*)bufinfo.buf) + start, length);
+ uint8_t status = common_hal_adafruit_bus_device_i2cdevice_write(MP_OBJ_TO_PTR(self), ((uint8_t*)bufinfo.buf) + start, length, transmit_stop_bit);
if (status != 0) {
mp_raise_OSError(status);
}
@@ -191,7 +191,7 @@ STATIC mp_obj_t adafruit_bus_device_i2cdevice_write(size_t n_args, const mp_obj_
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);
- write(self, args[ARG_buffer].u_obj, args[ARG_start].u_int, args[ARG_end].u_int);
+ write(self, args[ARG_buffer].u_obj, args[ARG_start].u_int, args[ARG_end].u_int, true);
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_KW(adafruit_bus_device_i2cdevice_write_obj, 2, adafruit_bus_device_i2cdevice_write);
@@ -233,7 +233,7 @@ STATIC mp_obj_t adafruit_bus_device_i2cdevice_write_then_readinto(size_t n_args,
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);
- write(self, args[ARG_out_buffer].u_obj, args[ARG_out_start].u_int, args[ARG_out_end].u_int);
+ write(self, args[ARG_out_buffer].u_obj, args[ARG_out_start].u_int, args[ARG_out_end].u_int, false);
readinto(self, args[ARG_in_buffer].u_obj, args[ARG_in_start].u_int, args[ARG_in_end].u_int);
diff --git a/shared-bindings/adafruit_bus_device/I2CDevice.h b/shared-bindings/adafruit_bus_device/I2CDevice.h
index 7b2182ff0..cf7b1321a 100644
--- a/shared-bindings/adafruit_bus_device/I2CDevice.h
+++ b/shared-bindings/adafruit_bus_device/I2CDevice.h
@@ -45,7 +45,7 @@ extern const mp_obj_type_t adafruit_bus_device_i2cdevice_type;
// Initializes the hardware peripheral.
extern void common_hal_adafruit_bus_device_i2cdevice_construct(adafruit_bus_device_i2cdevice_obj_t *self, busio_i2c_obj_t *i2c, uint8_t device_address);
extern uint8_t common_hal_adafruit_bus_device_i2cdevice_readinto(adafruit_bus_device_i2cdevice_obj_t *self, mp_obj_t buffer, size_t length);
-extern uint8_t common_hal_adafruit_bus_device_i2cdevice_write(adafruit_bus_device_i2cdevice_obj_t *self, mp_obj_t buffer, size_t length);
+extern uint8_t common_hal_adafruit_bus_device_i2cdevice_write(adafruit_bus_device_i2cdevice_obj_t *self, mp_obj_t buffer, size_t length, bool transmit_stop_bit);
extern void common_hal_adafruit_bus_device_i2cdevice_lock(adafruit_bus_device_i2cdevice_obj_t *self);
extern void common_hal_adafruit_bus_device_i2cdevice_unlock(adafruit_bus_device_i2cdevice_obj_t *self);
extern void common_hal_adafruit_bus_device_i2cdevice_probe_for_device(adafruit_bus_device_i2cdevice_obj_t *self);
diff --git a/shared-bindings/camera/ImageFormat.c b/shared-bindings/camera/ImageFormat.c
index d4bdddc56..9f2f9617f 100644
--- a/shared-bindings/camera/ImageFormat.c
+++ b/shared-bindings/camera/ImageFormat.c
@@ -38,7 +38,6 @@
//| RGB565: ImageFormat
//| """RGB565 format."""
//|
-const mp_obj_type_t camera_imageformat_type;
const camera_imageformat_obj_t camera_imageformat_jpg_obj = {
{ &camera_imageformat_type },
diff --git a/shared-bindings/camera/ImageFormat.h b/shared-bindings/camera/ImageFormat.h
index 8abc88438..32a36354f 100644
--- a/shared-bindings/camera/ImageFormat.h
+++ b/shared-bindings/camera/ImageFormat.h
@@ -35,7 +35,7 @@ typedef enum {
IMAGEFORMAT_RGB565,
} camera_imageformat_t;
-const mp_obj_type_t camera_imageformat_type;
+extern const mp_obj_type_t camera_imageformat_type;
camera_imageformat_t camera_imageformat_obj_to_type(mp_obj_t obj);
mp_obj_t camera_imageformat_type_to_obj(camera_imageformat_t mode);
diff --git a/shared-module/adafruit_bus_device/I2CDevice.c b/shared-module/adafruit_bus_device/I2CDevice.c
index ee4b4fa55..83abe80d6 100644
--- a/shared-module/adafruit_bus_device/I2CDevice.c
+++ b/shared-module/adafruit_bus_device/I2CDevice.c
@@ -57,8 +57,8 @@ uint8_t common_hal_adafruit_bus_device_i2cdevice_readinto(adafruit_bus_device_i2
return common_hal_busio_i2c_read(self->i2c, self->device_address, buffer, length);
}
-uint8_t common_hal_adafruit_bus_device_i2cdevice_write(adafruit_bus_device_i2cdevice_obj_t *self, mp_obj_t buffer, size_t length) {
- return common_hal_busio_i2c_write(self->i2c, self->device_address, buffer, length, true);
+uint8_t common_hal_adafruit_bus_device_i2cdevice_write(adafruit_bus_device_i2cdevice_obj_t *self, mp_obj_t buffer, size_t length, bool transmit_stop_bit) {
+ return common_hal_busio_i2c_write(self->i2c, self->device_address, buffer, length, transmit_stop_bit);
}
void common_hal_adafruit_bus_device_i2cdevice_probe_for_device(adafruit_bus_device_i2cdevice_obj_t *self) {
diff --git a/shared-module/displayio/ColorConverter.c b/shared-module/displayio/ColorConverter.c
index 80558d037..40dcd9d16 100644
--- a/shared-module/displayio/ColorConverter.c
+++ b/shared-module/displayio/ColorConverter.c
@@ -29,6 +29,8 @@
#include "py/misc.h"
#include "py/runtime.h"
+#define NO_TRANSPARENT_COLOR (0x1000000)
+
uint32_t displayio_colorconverter_dither_noise_1 (uint32_t n)
{
n = (n >> 13) ^ n;
@@ -42,6 +44,7 @@ uint32_t displayio_colorconverter_dither_noise_2(uint32_t x, uint32_t y) {
void common_hal_displayio_colorconverter_construct(displayio_colorconverter_t* self, bool dither) {
self->dither = dither;
+ self->transparent_color = NO_TRANSPARENT_COLOR;
}
uint16_t displayio_colorconverter_compute_rgb565(uint32_t color_rgb888) {
@@ -130,7 +133,7 @@ bool common_hal_displayio_colorconverter_get_dither(displayio_colorconverter_t*
}
void common_hal_displayio_colorconverter_make_transparent(displayio_colorconverter_t* self, uint32_t transparent_color) {
- if (self->transparent_color >= 0x1000000) {
+ if (self->transparent_color != NO_TRANSPARENT_COLOR) {
mp_raise_RuntimeError(translate("Only one color can be transparent at a time"));
}
self->transparent_color = transparent_color;
@@ -138,8 +141,8 @@ void common_hal_displayio_colorconverter_make_transparent(displayio_colorconvert
void common_hal_displayio_colorconverter_make_opaque(displayio_colorconverter_t* self, uint32_t transparent_color) {
(void) transparent_color;
- // 0x1000000 will never equal a valid color
- self->transparent_color = 0x1000000;
+ // NO_TRANSPARENT_COLOR will never equal a valid color
+ self->transparent_color = NO_TRANSPARENT_COLOR;
}
void displayio_colorconverter_convert(displayio_colorconverter_t *self, const _displayio_colorspace_t* colorspace, const displayio_input_pixel_t *input_pixel, displayio_output_pixel_t *output_color) {
diff --git a/shared-module/displayio/OnDiskBitmap.c b/shared-module/displayio/OnDiskBitmap.c
index 993fc03de..c1a0ddeb7 100644
--- a/shared-module/displayio/OnDiskBitmap.c
+++ b/shared-module/displayio/OnDiskBitmap.c
@@ -57,7 +57,7 @@ void common_hal_displayio_ondiskbitmap_construct(displayio_ondiskbitmap_t *self,
uint32_t compression = read_word(bmp_header, 15);
uint32_t number_of_colors = read_word(bmp_header, 23);
- bool indexed = ((bits_per_pixel <= 8) && (number_of_colors != 0));
+ bool indexed = bits_per_pixel <= 8;
self->bitfield_compressed = (compression == 3);
self->bits_per_pixel = bits_per_pixel;
self->width = read_word(bmp_header, 9);
@@ -75,6 +75,9 @@ void common_hal_displayio_ondiskbitmap_construct(displayio_ondiskbitmap_t *self,
self->b_bitmask = 0x1f;
}
} else if (indexed && self->bits_per_pixel != 1) {
+ if (number_of_colors == 0) {
+ number_of_colors = 1 << bits_per_pixel;
+ }
uint16_t palette_size = number_of_colors * sizeof(uint32_t);
uint16_t palette_offset = 0xe + header_size;
diff --git a/supervisor/shared/external_flash/devices.h b/supervisor/shared/external_flash/devices.h
index a874dbd4f..6c7d9550f 100644
--- a/supervisor/shared/external_flash/devices.h
+++ b/supervisor/shared/external_flash/devices.h
@@ -94,6 +94,26 @@ typedef struct {
.single_status_byte = false, \
}
+// Settings for the Adesto Tech AT25DF641-SSHD-T 8MiB SPI flash
+// for the Oak Dev Tech Icy Tree M0 (SAMD21) feather board.
+// Source: https://www.digikey.com/product-detail/en/adesto-technologies/AT25SF641-SDHD-T/1265-1180-1-ND/
+// Datasheet: https://www.adestotech.com/wp-content/uploads/doc8693.pdf
+#define AT25DF641A {\
+ .total_size = (1 << 23), /* 8 MiB */ \
+ .start_up_time_us = 10000, \
+ .manufacturer_id = 0x1f, \
+ .memory_type = 0x48, \
+ .capacity = 0x00, \
+ .max_clock_speed_mhz = 85, \
+ .quad_enable_bit_mask = 0x00, \
+ .has_sector_protection = true, \
+ .supports_fast_read = true, \
+ .supports_qspi = false, \
+ .supports_qspi_writes = false, \
+ .write_status_register_split = false, \
+ .single_status_byte = false, \
+}
+
// Settings for the Adesto Tech AT25SF161-SSHD-T 2MiB SPI flash
// for the StringCar M0 (SAMD21) Express board.
// Source: https://www.digikey.com/product-detail/en/adesto-technologies/AT25SF161-SDHD-T/1265-1230-1-ND/
@@ -114,6 +134,7 @@ typedef struct {
.single_status_byte = false, \
}
+
// Settings for the Adesto Tech AT25SF041 1MiB SPI flash. It's on the SparkFun
// SAMD51 Thing Plus board
// Datasheet: https://www.adestotech.com/wp-content/uploads/DS-AT25SF041_044.pdf
@@ -537,7 +558,7 @@ typedef struct {
.start_up_time_us = 800, \
.manufacturer_id = 0xc2, \
.memory_type = 0x28, \
- .capacity = 0x18, \
+ .capacity = 0x15, \
.max_clock_speed_mhz = 33, /* 8 mhz for dual/quad */ \
.quad_enable_bit_mask = 0x80, \
.has_sector_protection = false, \
@@ -566,6 +587,43 @@ typedef struct {
.single_status_byte = true, \
}
+// Settings for the Macronix MX25L51245G 64MiB SPI flash.
+// Datasheet: https://www.macronix.com/Lists/Datasheet/Attachments/7437/MX25L51245G,%203V,%20512Mb,%20v1.6.pdf
+#define MX25L25645G {\
+ .total_size = (1 << 25), /* 32 MiB */ \
+ .start_up_time_us = 5000, \
+ .manufacturer_id = 0x9f, \
+ .memory_type = 0xab, \
+ .capacity = 0x90, \
+ .max_clock_speed_mhz = 133, \
+ .quad_enable_bit_mask = 0xaf, \
+ .has_sector_protection = false, \
+ .supports_fast_read = true, \
+ .supports_qspi = true, \
+ .supports_qspi_writes = true, \
+ .write_status_register_split = false, \
+ .single_status_byte = true, \
+}
+
+// Settings for the Macronix MX25L12833F 16MiB SPI flash
+// Datasheet: https://www.macronix.com/Lists/Datasheet/Attachments/7447/MX25L12833F,%203V,%20128Mb,%20v1.0.pdf
+
+#define MX25L12833F {\
+ .total_size = (1UL << 24), /* 16 MiB */ \
+ .start_up_time_us = 5000, \
+ .manufacturer_id = 0xc2, \
+ .memory_type = 0x20, \
+ .capacity = 0x18, \
+ .max_clock_speed_mhz = 133, \
+ .quad_enable_bit_mask = 0x40, \
+ .has_sector_protection = true, \
+ .supports_fast_read = true, \
+ .supports_qspi = true, \
+ .supports_qspi_writes = true, \
+ .write_status_register_split = false, \
+ .single_status_byte = true, \
+ }
+
// Settings for the Winbond W25Q128JV-PM 16MiB SPI flash. Note that JV-IM has a different .memory_type (0x70)
// Datasheet: https://www.winbond.com/resource-files/w25q128jv%20revf%2003272018%20plus.pdf
#define W25Q128JV_PM {\