Merge branch 'main' of https://github.com/adafruit/circuitpython into main
This commit is contained in:
commit
737828ccb1
6
.github/workflows/build.yml
vendored
6
.github/workflows/build.yml
vendored
@ -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
|
||||
|
@ -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[]) {
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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)
|
||||
|
@ -9,3 +9,5 @@ CHIP_FAMILY = samd21
|
||||
INTERNAL_FLASH_FILESYSTEM = 1
|
||||
LONGINT_IMPL = NONE
|
||||
CIRCUITPY_FULL_BUILD = 0
|
||||
|
||||
SUPEROPT_GC = 0
|
||||
|
@ -16,3 +16,5 @@ CIRCUITPY_AUDIOBUSIO = 0
|
||||
CIRCUITPY_VECTORIO = 0
|
||||
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_DotStar
|
||||
|
||||
SUPEROPT_GC = 0
|
||||
|
37
ports/atmel-samd/boards/stackrduino_m0_pro/board.c
Normal file
37
ports/atmel-samd/boards/stackrduino_m0_pro/board.c
Normal file
@ -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) {
|
||||
}
|
33
ports/atmel-samd/boards/stackrduino_m0_pro/mpconfigboard.h
Normal file
33
ports/atmel-samd/boards/stackrduino_m0_pro/mpconfigboard.h
Normal file
@ -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
|
58
ports/atmel-samd/boards/stackrduino_m0_pro/mpconfigboard.mk
Normal file
58
ports/atmel-samd/boards/stackrduino_m0_pro/mpconfigboard.mk
Normal file
@ -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
|
40
ports/atmel-samd/boards/stackrduino_m0_pro/pins.c
Normal file
40
ports/atmel-samd/boards/stackrduino_m0_pro/pins.c
Normal file
@ -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);
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
4
ports/nrf/boards/bastble/README.md
Normal file
4
ports/nrf/boards/bastble/README.md
Normal file
@ -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.
|
41
ports/nrf/boards/bastble/board.c
Normal file
41
ports/nrf/boards/bastble/board.c
Normal file
@ -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) {
|
||||
|
||||
}
|
25
ports/nrf/boards/bastble/mpconfigboard.h
Normal file
25
ports/nrf/boards/bastble/mpconfigboard.h
Normal file
@ -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)
|
10
ports/nrf/boards/bastble/mpconfigboard.mk
Normal file
10
ports/nrf/boards/bastble/mpconfigboard.mk
Normal file
@ -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"
|
47
ports/nrf/boards/bastble/pins.c
Normal file
47
ports/nrf/boards/bastble/pins.c
Normal file
@ -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);
|
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
2
py/py.mk
2
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\"
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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 },
|
||||
|
@ -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);
|
||||
|
@ -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) {
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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 {\
|
||||
|
Loading…
x
Reference in New Issue
Block a user