Merge branch 'adafruit:main' into main
This commit is contained in:
commit
bde6b2d395
|
@ -104,24 +104,21 @@ else
|
||||||
CFLAGS += -DNDEBUG
|
CFLAGS += -DNDEBUG
|
||||||
|
|
||||||
# Do a default shrink for small builds, including all SAMD21 builds.
|
# Do a default shrink for small builds, including all SAMD21 builds.
|
||||||
ifeq ($(CIRCUITPY_FULL_BUILD),0)
|
|
||||||
SHRINK_BUILD = 1
|
|
||||||
else
|
|
||||||
ifeq ($(CHIP_FAMILY), samd21)
|
|
||||||
SHRINK_BUILD = 1
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
# -finline-limit can shrink the image size.
|
# -finline-limit can shrink the image size.
|
||||||
# -finline-limit=80 or so is similar to not having it on.
|
# -finline-limit=80 or so is similar to not having it on.
|
||||||
# There is no simple default value, though.
|
# There is no simple default value, though.
|
||||||
ifeq ($(SHRINK_BUILD), 1)
|
ifeq ($(CIRCUITPY_FULL_BUILD),0)
|
||||||
CFLAGS += -finline-limit=45
|
CFLAGS += -finline-limit=45
|
||||||
|
else
|
||||||
|
ifeq ($(CHIP_FAMILY), samd21)
|
||||||
|
# max-inline-insns-auto increases the size of SAMD51 builds.
|
||||||
|
CFLAGS += -finline-limit=45 --param max-inline-insns-auto=110
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# We used to do this but it seems to not reduce space any more, at least in gcc 11.
|
# We used to do this but it seems to not reduce space any more, at least in gcc 11.
|
||||||
# Leave it here, commented out, just for reference.
|
# Leave it here, commented out, just for reference.
|
||||||
# --param inline-unit-growth=15 --param max-inline-insns-auto=20
|
# --param inline-unit-growth=15
|
||||||
|
|
||||||
ifdef CFLAGS_BOARD
|
ifdef CFLAGS_BOARD
|
||||||
CFLAGS += $(CFLAGS_BOARD)
|
CFLAGS += $(CFLAGS_BOARD)
|
||||||
|
|
|
@ -64,7 +64,7 @@ float common_hal_mcu_processor_get_voltage(void) {
|
||||||
|
|
||||||
uint32_t common_hal_mcu_processor_get_frequency(void) {
|
uint32_t common_hal_mcu_processor_get_frequency(void) {
|
||||||
#if defined(CONFIG_IDF_TARGET_ESP32)
|
#if defined(CONFIG_IDF_TARGET_ESP32)
|
||||||
return CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ * 100000;
|
return CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ * 1000000;
|
||||||
#elif defined(CONFIG_IDF_TARGET_ESP32C3)
|
#elif defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||||
return CONFIG_ESP32C3_DEFAULT_CPU_FREQ_MHZ * 1000000;
|
return CONFIG_ESP32C3_DEFAULT_CPU_FREQ_MHZ * 1000000;
|
||||||
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
|
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
|
||||||
|
|
|
@ -706,8 +706,6 @@ bool socketpool_socket(socketpool_socketpool_obj_t *self,
|
||||||
case MOD_NETWORK_SOCK_STREAM: {
|
case MOD_NETWORK_SOCK_STREAM: {
|
||||||
// Register the socket object as our callback argument.
|
// Register the socket object as our callback argument.
|
||||||
tcp_arg(socket->pcb.tcp, (void *)socket);
|
tcp_arg(socket->pcb.tcp, (void *)socket);
|
||||||
// Register our error callback.
|
|
||||||
tcp_err(socket->pcb.tcp, _lwip_tcp_error);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MOD_NETWORK_SOCK_DGRAM: {
|
case MOD_NETWORK_SOCK_DGRAM: {
|
||||||
|
@ -916,10 +914,11 @@ void socketpool_socket_close(socketpool_socket_obj_t *socket) {
|
||||||
case SOCKETPOOL_SOCK_STREAM: {
|
case SOCKETPOOL_SOCK_STREAM: {
|
||||||
// Deregister callback (pcb.tcp is set to NULL below so must deregister now)
|
// Deregister callback (pcb.tcp is set to NULL below so must deregister now)
|
||||||
tcp_arg(socket->pcb.tcp, NULL);
|
tcp_arg(socket->pcb.tcp, NULL);
|
||||||
tcp_err(socket->pcb.tcp, NULL);
|
|
||||||
tcp_recv(socket->pcb.tcp, NULL);
|
|
||||||
|
|
||||||
if (socket->pcb.tcp->state != LISTEN) {
|
if (socket->pcb.tcp->state != LISTEN) {
|
||||||
|
tcp_err(socket->pcb.tcp, NULL);
|
||||||
|
tcp_recv(socket->pcb.tcp, NULL);
|
||||||
|
|
||||||
// Schedule a callback to abort the connection if it's not cleanly closed after
|
// Schedule a callback to abort the connection if it's not cleanly closed after
|
||||||
// the given timeout. The callback must be set before calling tcp_close since
|
// the given timeout. The callback must be set before calling tcp_close since
|
||||||
// the latter may free the pcb; if it doesn't then the callback will be active.
|
// the latter may free the pcb; if it doesn't then the callback will be active.
|
||||||
|
@ -977,6 +976,7 @@ void common_hal_socketpool_socket_connect(socketpool_socket_obj_t *socket,
|
||||||
// Register our receive callback.
|
// Register our receive callback.
|
||||||
MICROPY_PY_LWIP_ENTER
|
MICROPY_PY_LWIP_ENTER
|
||||||
tcp_recv(socket->pcb.tcp, _lwip_tcp_recv);
|
tcp_recv(socket->pcb.tcp, _lwip_tcp_recv);
|
||||||
|
tcp_err(socket->pcb.tcp, _lwip_tcp_error);
|
||||||
socket->state = STATE_CONNECTING;
|
socket->state = STATE_CONNECTING;
|
||||||
err = tcp_connect(socket->pcb.tcp, &dest, port, _lwip_tcp_connected);
|
err = tcp_connect(socket->pcb.tcp, &dest, port, _lwip_tcp_connected);
|
||||||
if (err != ERR_OK) {
|
if (err != ERR_OK) {
|
||||||
|
|
|
@ -97,7 +97,7 @@
|
||||||
//|
|
//|
|
||||||
//| display_bus.send(42, struct.pack(">hh", 0, odg.bitmap.width - 1))
|
//| display_bus.send(42, struct.pack(">hh", 0, odg.bitmap.width - 1))
|
||||||
//| display_bus.send(43, struct.pack(">hh", 0, odg.bitmap.height - 1))
|
//| display_bus.send(43, struct.pack(">hh", 0, odg.bitmap.height - 1))
|
||||||
//| display_bus.send(44, d.bitmap)
|
//| display_bus.send(44, odg.bitmap)
|
||||||
//|
|
//|
|
||||||
//| # The following optional code will free the OnDiskGif and allocated resources
|
//| # The following optional code will free the OnDiskGif and allocated resources
|
||||||
//| # after use. This may be required before loading a new GIF in situations
|
//| # after use. This may be required before loading a new GIF in situations
|
||||||
|
|
|
@ -72,7 +72,7 @@ STATIC void close_file(file_arg *active_file) {
|
||||||
// nothing
|
// nothing
|
||||||
}
|
}
|
||||||
STATIC bool is_eof(file_arg *active_file) {
|
STATIC bool is_eof(file_arg *active_file) {
|
||||||
return f_eof(active_file);
|
return f_eof(active_file) || f_error(active_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return 0 if there is no next character (EOF).
|
// Return 0 if there is no next character (EOF).
|
||||||
|
|
|
@ -293,24 +293,40 @@ uint16_t tud_hid_get_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t
|
||||||
// Callback invoked when we receive Set_Report request through control endpoint
|
// Callback invoked when we receive Set_Report request through control endpoint
|
||||||
void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t const *buffer, uint16_t bufsize) {
|
void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t const *buffer, uint16_t bufsize) {
|
||||||
(void)itf;
|
(void)itf;
|
||||||
if (report_type == HID_REPORT_TYPE_INVALID) {
|
|
||||||
report_id = buffer[0];
|
usb_hid_device_obj_t *hid_device = NULL;
|
||||||
buffer++;
|
size_t id_idx;
|
||||||
bufsize--;
|
|
||||||
|
if (report_id == 0 && report_type == HID_REPORT_TYPE_INVALID) {
|
||||||
|
// This could be a report with a non-zero report ID in the first byte, or
|
||||||
|
// it could be for report ID 0.
|
||||||
|
// Heuristic: see if there's a device with report ID 0, and if its report length matches
|
||||||
|
// the size of the incoming buffer. In that case, assume the first byte is not the report ID,
|
||||||
|
// but is data. Otherwise use the first byte as the report id.
|
||||||
|
if (usb_hid_get_device_with_report_id(0, &hid_device, &id_idx) &&
|
||||||
|
hid_device &&
|
||||||
|
hid_device->out_report_buffers[id_idx] &&
|
||||||
|
hid_device->out_report_lengths[id_idx] == bufsize) {
|
||||||
|
// Use as is, with report_id 0.
|
||||||
|
} else {
|
||||||
|
// No matching report ID 0, so use the first byte as the report ID.
|
||||||
|
report_id = buffer[0];
|
||||||
|
buffer++;
|
||||||
|
bufsize--;
|
||||||
|
}
|
||||||
} else if (report_type != HID_REPORT_TYPE_OUTPUT && report_type != HID_REPORT_TYPE_FEATURE) {
|
} else if (report_type != HID_REPORT_TYPE_OUTPUT && report_type != HID_REPORT_TYPE_FEATURE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
usb_hid_device_obj_t *hid_device;
|
// report_id might be changed due to parsing above, so test again.
|
||||||
size_t id_idx;
|
if ((report_id == 0 && report_type == HID_REPORT_TYPE_INVALID) ||
|
||||||
// Find device with this report id, and get the report id index.
|
// Fetch the matching device if we don't already have the report_id 0 device.
|
||||||
if (usb_hid_get_device_with_report_id(report_id, &hid_device, &id_idx)) {
|
(usb_hid_get_device_with_report_id(report_id, &hid_device, &id_idx) &&
|
||||||
|
hid_device &&
|
||||||
|
hid_device->out_report_buffers[id_idx] &&
|
||||||
|
hid_device->out_report_lengths[id_idx] == bufsize)) {
|
||||||
// If a report of the correct size has been read, save it in the proper OUT report buffer.
|
// If a report of the correct size has been read, save it in the proper OUT report buffer.
|
||||||
if (hid_device &&
|
memcpy(hid_device->out_report_buffers[id_idx], buffer, bufsize);
|
||||||
hid_device->out_report_buffers[id_idx] &&
|
hid_device->out_report_buffers_updated[id_idx] = true;
|
||||||
hid_device->out_report_lengths[id_idx] >= bufsize) {
|
|
||||||
memcpy(hid_device->out_report_buffers[id_idx], buffer, bufsize);
|
|
||||||
hid_device->out_report_buffers_updated[id_idx] = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -261,6 +261,7 @@ void supervisor_start_web_workflow(void) {
|
||||||
const mcu_reset_reason_t reset_reason = common_hal_mcu_processor_get_reset_reason();
|
const mcu_reset_reason_t reset_reason = common_hal_mcu_processor_get_reset_reason();
|
||||||
if (reset_reason != RESET_REASON_POWER_ON &&
|
if (reset_reason != RESET_REASON_POWER_ON &&
|
||||||
reset_reason != RESET_REASON_RESET_PIN &&
|
reset_reason != RESET_REASON_RESET_PIN &&
|
||||||
|
reset_reason != RESET_REASON_DEEP_SLEEP_ALARM &&
|
||||||
reset_reason != RESET_REASON_UNKNOWN &&
|
reset_reason != RESET_REASON_UNKNOWN &&
|
||||||
reset_reason != RESET_REASON_SOFTWARE) {
|
reset_reason != RESET_REASON_SOFTWARE) {
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue