Merge remote-tracking branch 'upstream/main' into sleep-revamp
This commit is contained in:
commit
af43f956d3
1
.github/workflows/build.yml
vendored
1
.github/workflows/build.yml
vendored
@ -176,6 +176,7 @@ jobs:
|
||||
- "TG-Watch"
|
||||
- "adafruit_feather_rp2040"
|
||||
- "adafruit_itsybitsy_rp2040"
|
||||
- "adafruit_macropad_rp2040"
|
||||
- "adafruit_neokey_trinkey_m0"
|
||||
- "adafruit_proxlight_trinkey_m0"
|
||||
- "adafruit_qt2040_trinkey"
|
||||
|
@ -645,7 +645,7 @@ STATIC void check_data_fit(size_t data_len, bool connectable) {
|
||||
// return true;
|
||||
// }
|
||||
|
||||
uint32_t _common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self, bool connectable, bool anonymous, uint32_t timeout, float interval, uint8_t *advertising_data, uint16_t advertising_data_len, uint8_t *scan_response_data, uint16_t scan_response_data_len) {
|
||||
uint32_t _common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self, bool connectable, bool anonymous, uint32_t timeout, float interval, uint8_t *advertising_data, uint16_t advertising_data_len, uint8_t *scan_response_data, uint16_t scan_response_data_len, mp_int_t tx_power) {
|
||||
check_enabled(self);
|
||||
|
||||
if (self->now_advertising) {
|
||||
@ -769,7 +769,7 @@ uint32_t _common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self,
|
||||
return 0;
|
||||
}
|
||||
|
||||
void common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self, bool connectable, bool anonymous, uint32_t timeout, mp_float_t interval, mp_buffer_info_t *advertising_data_bufinfo, mp_buffer_info_t *scan_response_data_bufinfo) {
|
||||
void common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self, bool connectable, bool anonymous, uint32_t timeout, mp_float_t interval, mp_buffer_info_t *advertising_data_bufinfo, mp_buffer_info_t *scan_response_data_bufinfo, mp_int_t tx_power) {
|
||||
check_enabled(self);
|
||||
|
||||
// interval value has already been validated.
|
||||
@ -793,12 +793,17 @@ void common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self, bool
|
||||
}
|
||||
}
|
||||
|
||||
if (tx_power != 0) {
|
||||
mp_raise_NotImplementedError(translate("Only tx_power=0 supported"));
|
||||
}
|
||||
|
||||
const uint32_t result = _common_hal_bleio_adapter_start_advertising(
|
||||
self, connectable, anonymous, timeout, interval,
|
||||
advertising_data_bufinfo->buf,
|
||||
advertising_data_bufinfo->len,
|
||||
scan_response_data_bufinfo->buf,
|
||||
scan_response_data_bufinfo->len);
|
||||
scan_response_data_bufinfo->len,
|
||||
tx_power);
|
||||
|
||||
if (result) {
|
||||
mp_raise_bleio_BluetoothError(translate("Already advertising"));
|
||||
|
@ -332,6 +332,32 @@ To add different types outside CircuitPython you need to include them in the int
|
||||
The intersphinx_mapping above includes references to Python, BusDevice and CircuitPython
|
||||
Documentation
|
||||
|
||||
When the parameter have two different types, you should reference them as follows::
|
||||
|
||||
|
||||
class Character_LCD:
|
||||
"""Base class for character LCD
|
||||
|
||||
:param ~digitalio.DigitalInOut rs: The reset data line
|
||||
:param ~pwmio.PWMOut,~digitalio.DigitalInOut blue: Blue RGB Anode
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self, rs, blue):
|
||||
self._rc = rs
|
||||
self.blue = blue
|
||||
|
||||
|
||||
Renders as:
|
||||
|
||||
.. py:class:: Character_LCD(rs, blue)
|
||||
:noindex:
|
||||
|
||||
Base class for character LCD
|
||||
|
||||
:param ~digitalio.DigitalInOut rs: The reset data line
|
||||
:param ~pwmio.PWMOut,~digitalio.DigitalInOut blue: Blue RGB Anode
|
||||
|
||||
|
||||
param_name
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
@ -1211,6 +1211,10 @@ msgstr ""
|
||||
msgid "Invalid AuthMode"
|
||||
msgstr ""
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||
msgid "Invalid BLE parameter"
|
||||
msgstr ""
|
||||
|
||||
#: shared-module/displayio/OnDiskBitmap.c
|
||||
msgid "Invalid BMP file"
|
||||
msgstr ""
|
||||
@ -2316,7 +2320,7 @@ msgstr ""
|
||||
msgid "Unsupported format"
|
||||
msgstr ""
|
||||
|
||||
#: ports/raspberrypi/common-hal/pulseio/PulseOut.c py/moduerrno.c
|
||||
#: py/moduerrno.c
|
||||
msgid "Unsupported operation"
|
||||
msgstr ""
|
||||
|
||||
|
@ -37,7 +37,7 @@
|
||||
// so define these before #include'ing that file.
|
||||
#define USB_CDC_EP_NUM_NOTIFICATION (3)
|
||||
#define USB_CDC_EP_NUM_DATA_OUT (2)
|
||||
#define USB_CDC_EP_NUM_DATA_IN (2)
|
||||
#define USB_CDC_EP_NUM_DATA_IN (1)
|
||||
#define USB_MSC_EP_NUM_OUT (5)
|
||||
#define USB_MSC_EP_NUM_IN (4)
|
||||
|
||||
|
@ -619,8 +619,6 @@ mp_obj_t common_hal_bleio_adapter_connect(bleio_adapter_obj_t *self, bleio_addre
|
||||
return mp_const_none;
|
||||
}
|
||||
|
||||
// The nRF SD 6.1.0 can only do one concurrent advertisement so share the advertising handle.
|
||||
uint8_t adv_handle = BLE_GAP_ADV_SET_HANDLE_NOT_SET;
|
||||
|
||||
STATIC void check_data_fit(size_t data_len, bool connectable) {
|
||||
if (data_len > BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_MAX_SUPPORTED ||
|
||||
@ -629,6 +627,9 @@ STATIC void check_data_fit(size_t data_len, bool connectable) {
|
||||
}
|
||||
}
|
||||
|
||||
// The nRF SD 6.1.0 can only do one concurrent advertisement so share the advertising handle.
|
||||
uint8_t adv_handle = BLE_GAP_ADV_SET_HANDLE_NOT_SET;
|
||||
|
||||
STATIC bool advertising_on_ble_evt(ble_evt_t *ble_evt, void *self_in) {
|
||||
bleio_adapter_obj_t *self = (bleio_adapter_obj_t *)self_in;
|
||||
|
||||
@ -647,7 +648,10 @@ STATIC bool advertising_on_ble_evt(ble_evt_t *ble_evt, void *self_in) {
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32_t _common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self, bool connectable, bool anonymous, uint32_t timeout, float interval, uint8_t *advertising_data, uint16_t advertising_data_len, uint8_t *scan_response_data, uint16_t scan_response_data_len) {
|
||||
uint32_t _common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self, bool connectable,
|
||||
bool anonymous, uint32_t timeout, float interval, uint8_t *advertising_data,
|
||||
uint16_t advertising_data_len, uint8_t *scan_response_data, uint16_t scan_response_data_len,
|
||||
mp_int_t tx_power) {
|
||||
if (self->current_advertising_data != NULL && self->current_advertising_data == self->advertising_data) {
|
||||
return NRF_ERROR_BUSY;
|
||||
}
|
||||
@ -725,7 +729,10 @@ uint32_t _common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self,
|
||||
}
|
||||
|
||||
ble_drv_add_event_handler(advertising_on_ble_evt, self);
|
||||
|
||||
err_code = sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_ADV, adv_handle, tx_power);
|
||||
if (err_code != NRF_SUCCESS) {
|
||||
return err_code;
|
||||
}
|
||||
vm_used_ble = true;
|
||||
err_code = sd_ble_gap_adv_start(adv_handle, BLE_CONN_CFG_TAG_CUSTOM);
|
||||
if (err_code != NRF_SUCCESS) {
|
||||
@ -736,7 +743,7 @@ uint32_t _common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self,
|
||||
}
|
||||
|
||||
|
||||
void common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self, bool connectable, bool anonymous, uint32_t timeout, mp_float_t interval, mp_buffer_info_t *advertising_data_bufinfo, mp_buffer_info_t *scan_response_data_bufinfo) {
|
||||
void common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self, bool connectable, bool anonymous, uint32_t timeout, mp_float_t interval, mp_buffer_info_t *advertising_data_bufinfo, mp_buffer_info_t *scan_response_data_bufinfo, mp_int_t tx_power) {
|
||||
if (self->current_advertising_data != NULL && self->current_advertising_data == self->advertising_data) {
|
||||
mp_raise_bleio_BluetoothError(translate("Already advertising."));
|
||||
}
|
||||
@ -784,7 +791,8 @@ void common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self, bool
|
||||
self->advertising_data,
|
||||
advertising_data_bufinfo->len,
|
||||
self->scan_response_data,
|
||||
scan_response_data_bufinfo->len));
|
||||
scan_response_data_bufinfo->len,
|
||||
tx_power));
|
||||
}
|
||||
|
||||
void common_hal_bleio_adapter_stop_advertising(bleio_adapter_obj_t *self) {
|
||||
|
@ -52,6 +52,9 @@ void check_nrf_error(uint32_t err_code) {
|
||||
case NRF_ERROR_TIMEOUT:
|
||||
mp_raise_msg(&mp_type_TimeoutError, NULL);
|
||||
return;
|
||||
case NRF_ERROR_INVALID_PARAM:
|
||||
mp_raise_ValueError(translate("Invalid BLE parameter"));
|
||||
return;
|
||||
case BLE_ERROR_INVALID_CONN_HANDLE:
|
||||
mp_raise_ConnectionError(translate("Not connected"));
|
||||
return;
|
||||
|
@ -106,7 +106,7 @@ INC += -I. \
|
||||
-I$(BUILD)
|
||||
|
||||
# Pico specific configuration
|
||||
CFLAGS += -DRASPBERRYPI -DPICO_ON_DEVICE=1 -DPICO_NO_BINARY_INFO=0 -DPICO_TIME_DEFAULT_ALARM_POOL_DISABLED=1 -DPICO_DIVIDER_CALL_IDIV0=0 -DPICO_DIVIDER_CALL_LDIV0=0 -DPICO_DIVIDER_HARDWARE=1 -DPICO_DOUBLE_ROM=1 -DPICO_FLOAT_ROM=1 -DPICO_MULTICORE=1 -DPICO_BITS_IN_RAM=0 -DPICO_DIVIDER_IN_RAM=0 -DPICO_DOUBLE_PROPAGATE_NANS=0 -DPICO_DOUBLE_IN_RAM=0 -DPICO_MEM_IN_RAM=0 -DPICO_FLOAT_IN_RAM=0 -DPICO_FLOAT_PROPAGATE_NANS=1 -DPICO_NO_FLASH=0 -DPICO_COPY_TO_RAM=0 -DPICO_DISABLE_SHARED_IRQ_HANDLERS=0 -DPICO_NO_BI_BOOTSEL_VIA_DOUBLE_RESET=0
|
||||
CFLAGS += -DRASPBERRYPI -DPICO_ON_DEVICE=1 -DPICO_NO_BINARY_INFO=0 -DPICO_TIME_DEFAULT_ALARM_POOL_DISABLED=0 -DPICO_DIVIDER_CALL_IDIV0=0 -DPICO_DIVIDER_CALL_LDIV0=0 -DPICO_DIVIDER_HARDWARE=1 -DPICO_DOUBLE_ROM=1 -DPICO_FLOAT_ROM=1 -DPICO_MULTICORE=1 -DPICO_BITS_IN_RAM=0 -DPICO_DIVIDER_IN_RAM=0 -DPICO_DOUBLE_PROPAGATE_NANS=0 -DPICO_DOUBLE_IN_RAM=0 -DPICO_MEM_IN_RAM=0 -DPICO_FLOAT_IN_RAM=0 -DPICO_FLOAT_PROPAGATE_NANS=1 -DPICO_NO_FLASH=0 -DPICO_COPY_TO_RAM=0 -DPICO_DISABLE_SHARED_IRQ_HANDLERS=0 -DPICO_NO_BI_BOOTSEL_VIA_DOUBLE_RESET=0
|
||||
OPTIMIZATION_FLAGS ?= -O3
|
||||
# TinyUSB defines
|
||||
CFLAGS += -DTUD_OPT_RP2040_USB_DEVICE_ENUMERATION_FIX=1 -DCFG_TUSB_MCU=OPT_MCU_RP2040 -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
|
||||
|
40
ports/raspberrypi/boards/adafruit_macropad_rp2040/board.c
Normal file
40
ports/raspberrypi/boards/adafruit_macropad_rp2040/board.c
Normal file
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2021 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 "shared-bindings/microcontroller/Pin.h"
|
||||
#include "src/rp2_common/hardware_gpio/include/hardware/gpio.h"
|
||||
|
||||
void board_init(void) {
|
||||
}
|
||||
|
||||
bool board_requests_safe_mode(void) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void reset_board(void) {
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
#define MICROPY_HW_BOARD_NAME "Adafruit Macropad RP2040"
|
||||
#define MICROPY_HW_MCU_NAME "rp2040"
|
||||
|
||||
#define MICROPY_HW_NEOPIXEL (&pin_GPIO16)
|
||||
|
||||
#define DEFAULT_I2C_BUS_SCL (&pin_GPIO25)
|
||||
#define DEFAULT_I2C_BUS_SDA (&pin_GPIO24)
|
@ -0,0 +1,9 @@
|
||||
USB_VID = 0x239A
|
||||
USB_PID = 0x8108
|
||||
USB_PRODUCT = "Macropad RP2040"
|
||||
USB_MANUFACTURER = "Adafruit"
|
||||
|
||||
CHIP_VARIANT = RP2040
|
||||
CHIP_FAMILY = rp2
|
||||
|
||||
EXTERNAL_FLASH_DEVICES = "W25Q64JVxQ"
|
38
ports/raspberrypi/boards/adafruit_macropad_rp2040/pins.c
Normal file
38
ports/raspberrypi/boards/adafruit_macropad_rp2040/pins.c
Normal file
@ -0,0 +1,38 @@
|
||||
#include "shared-bindings/board/__init__.h"
|
||||
|
||||
STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
|
||||
{ MP_ROM_QSTR(MP_QSTR_KEY1), MP_ROM_PTR(&pin_GPIO1) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_KEY2), MP_ROM_PTR(&pin_GPIO2) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_KEY3), MP_ROM_PTR(&pin_GPIO3) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_KEY4), MP_ROM_PTR(&pin_GPIO4) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_KEY5), MP_ROM_PTR(&pin_GPIO5) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_KEY6), MP_ROM_PTR(&pin_GPIO6) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_KEY7), MP_ROM_PTR(&pin_GPIO7) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_KEY8), MP_ROM_PTR(&pin_GPIO8) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_KEY9), MP_ROM_PTR(&pin_GPIO9) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_KEY10), MP_ROM_PTR(&pin_GPIO10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_KEY11), MP_ROM_PTR(&pin_GPIO11) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_KEY12), MP_ROM_PTR(&pin_GPIO12) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_SPEAKER), MP_ROM_PTR(&pin_GPIO14) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_ENCODER_SWITCH), MP_ROM_PTR(&pin_GPIO0) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO16) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_ENCODER_A), MP_ROM_PTR(&pin_GPIO17) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_ENCODER_B), MP_ROM_PTR(&pin_GPIO18) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_OLED_RESET), MP_ROM_PTR(&pin_GPIO23) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO24) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO25) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO26) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO27) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO28) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO29) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
|
||||
};
|
||||
MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);
|
@ -27,31 +27,38 @@
|
||||
#include "common-hal/pulseio/PulseOut.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "src/rp2_common/hardware_gpio/include/hardware/gpio.h"
|
||||
|
||||
#include "mpconfigport.h"
|
||||
#include "py/gc.h"
|
||||
#include "py/runtime.h"
|
||||
#include "shared-bindings/pulseio/PulseOut.h"
|
||||
#include "shared-bindings/pwmio/PWMOut.h"
|
||||
#include "common-hal/pwmio/PWMOut.h"
|
||||
#include "supervisor/shared/translate.h"
|
||||
#include "src/rp2_common/hardware_pwm/include/hardware/pwm.h"
|
||||
#include "src/common/pico_time/include/pico/time.h"
|
||||
|
||||
static uint8_t refcount = 0;
|
||||
|
||||
|
||||
static uint16_t *pulse_buffer = NULL;
|
||||
static volatile uint16_t pulse_index = 0;
|
||||
static uint16_t pulse_length;
|
||||
static volatile uint32_t current_compare = 0;
|
||||
pwmio_pwmout_obj_t *pwmout_obj;
|
||||
volatile uint16_t current_duty_cycle;
|
||||
|
||||
void pulse_finish(void) {
|
||||
pulse_index++;
|
||||
|
||||
// Always turn it off.
|
||||
// Turn pwm pin off by setting duty cyle to 1.
|
||||
common_hal_pwmio_pwmout_set_duty_cycle(pwmout_obj,1);
|
||||
if (pulse_index >= pulse_length) {
|
||||
return;
|
||||
}
|
||||
current_compare = (current_compare + pulse_buffer[pulse_index] * 3 / 4) & 0xffff;
|
||||
add_alarm_in_us(pulse_buffer[pulse_index], pulseout_interrupt_handler, NULL, false);
|
||||
if (pulse_index % 2 == 0) {
|
||||
common_hal_pwmio_pwmout_set_duty_cycle(pwmout_obj,current_duty_cycle);
|
||||
}
|
||||
}
|
||||
|
||||
int64_t pulseout_interrupt_handler(alarm_id_t id, void *user_data) {
|
||||
pulse_finish();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void pulseout_reset() {
|
||||
@ -63,12 +70,13 @@ void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t *self,
|
||||
const mcu_pin_obj_t *pin,
|
||||
uint32_t frequency,
|
||||
uint16_t duty_cycle) {
|
||||
mp_raise_NotImplementedError(translate("Unsupported operation"));
|
||||
|
||||
refcount++;
|
||||
|
||||
pwmout_obj = (pwmio_pwmout_obj_t *)carrier;
|
||||
current_duty_cycle = common_hal_pwmio_pwmout_get_duty_cycle(pwmout_obj);
|
||||
self->pin = carrier->pin->number;
|
||||
|
||||
self->slice = carrier->slice;
|
||||
pwm_set_enabled(pwmout_obj->slice,false);
|
||||
}
|
||||
|
||||
bool common_hal_pulseio_pulseout_deinited(pulseio_pulseout_obj_t *self) {
|
||||
@ -79,8 +87,6 @@ void common_hal_pulseio_pulseout_deinit(pulseio_pulseout_obj_t *self) {
|
||||
if (common_hal_pulseio_pulseout_deinited(self)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
refcount--;
|
||||
self->pin = NO_PIN;
|
||||
}
|
||||
@ -90,6 +96,14 @@ void common_hal_pulseio_pulseout_send(pulseio_pulseout_obj_t *self, uint16_t *pu
|
||||
pulse_index = 0;
|
||||
pulse_length = length;
|
||||
|
||||
current_compare = pulses[0] * 3 / 4;
|
||||
add_alarm_in_us(pulses[0], pulseout_interrupt_handler, NULL, false);
|
||||
common_hal_pwmio_pwmout_set_duty_cycle(pwmout_obj,current_duty_cycle);
|
||||
pwm_set_enabled(pwmout_obj->slice,true);
|
||||
|
||||
while (pulse_index < length) {
|
||||
// Do other things while we wait. The interrupts will handle sending the
|
||||
// signal.
|
||||
RUN_BACKGROUND_TASKS;
|
||||
}
|
||||
pwm_set_enabled(pwmout_obj->slice,false);
|
||||
}
|
||||
|
@ -28,6 +28,7 @@
|
||||
#define MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_PULSEIO_PULSEOUT_H
|
||||
|
||||
#include "common-hal/microcontroller/Pin.h"
|
||||
#include "src/common/pico_time/include/pico/time.h"
|
||||
|
||||
#include "py/obj.h"
|
||||
|
||||
@ -36,9 +37,10 @@
|
||||
typedef struct {
|
||||
mp_obj_base_t base;
|
||||
uint8_t pin;
|
||||
uint8_t slice;
|
||||
} pulseio_pulseout_obj_t;
|
||||
|
||||
void pulseout_reset(void);
|
||||
void pulseout_interrupt_handler(uint8_t index);
|
||||
int64_t pulseout_interrupt_handler(alarm_id_t id, void *user_data);
|
||||
|
||||
#endif // MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_PULSEIO_PULSEOUT_H
|
||||
|
@ -196,13 +196,13 @@ uint32_t *port_heap_get_top(void) {
|
||||
return port_stack_get_top();
|
||||
}
|
||||
|
||||
extern uint32_t __scratch_x_start__;
|
||||
void port_set_saved_word(uint32_t value) {
|
||||
// NOTE: This doesn't survive pressing the reset button (aka toggling RUN).
|
||||
watchdog_hw->scratch[0] = value;
|
||||
__scratch_x_start__ = value;
|
||||
}
|
||||
|
||||
uint32_t port_get_saved_word(void) {
|
||||
return watchdog_hw->scratch[0];
|
||||
return __scratch_x_start__;
|
||||
}
|
||||
|
||||
uint64_t port_get_raw_ticks(uint8_t *subticks) {
|
||||
|
@ -190,7 +190,7 @@ const mp_obj_property_t bleio_adapter_name_obj = {
|
||||
MP_ROM_NONE },
|
||||
};
|
||||
|
||||
//| def start_advertising(self, data: ReadableBuffer, *, scan_response: Optional[ReadableBuffer] = None, connectable: bool = True, anonymous: bool = False, timeout: int = 0, interval: float = 0.1) -> None:
|
||||
//| def start_advertising(self, data: ReadableBuffer, *, scan_response: Optional[ReadableBuffer] = None, connectable: bool = True, anonymous: bool = False, timeout: int = 0, interval: float = 0.1, tx_power: int = 0) -> None:
|
||||
//| """Starts advertising until `stop_advertising` is called or if connectable, another device
|
||||
//| connects to us.
|
||||
//|
|
||||
@ -205,13 +205,14 @@ const mp_obj_property_t bleio_adapter_name_obj = {
|
||||
//| :param bool connectable: If `True` then other devices are allowed to connect to this peripheral.
|
||||
//| :param bool anonymous: If `True` then this device's MAC address is randomized before advertising.
|
||||
//| :param int timeout: If set, we will only advertise for this many seconds. Zero means no timeout.
|
||||
//| :param float interval: advertising interval, in seconds"""
|
||||
//| :param float interval: advertising interval, in seconds
|
||||
//| :param tx_power int: transmitter power while advertising in dBm"""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t bleio_adapter_start_advertising(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
||||
bleio_adapter_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]);
|
||||
|
||||
enum { ARG_data, ARG_scan_response, ARG_connectable, ARG_anonymous, ARG_timeout, ARG_interval };
|
||||
enum { ARG_data, ARG_scan_response, ARG_connectable, ARG_anonymous, ARG_timeout, ARG_interval, ARG_tx_power };
|
||||
static const mp_arg_t allowed_args[] = {
|
||||
{ MP_QSTR_data, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
||||
{ MP_QSTR_scan_response, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
|
||||
@ -219,6 +220,7 @@ STATIC mp_obj_t bleio_adapter_start_advertising(mp_uint_t n_args, const mp_obj_t
|
||||
{ MP_QSTR_anonymous, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = false} },
|
||||
{ MP_QSTR_timeout, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
|
||||
{ MP_QSTR_interval, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
|
||||
{ MP_QSTR_tx_power, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
|
||||
};
|
||||
|
||||
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
||||
@ -251,7 +253,7 @@ STATIC mp_obj_t bleio_adapter_start_advertising(mp_uint_t n_args, const mp_obj_t
|
||||
}
|
||||
|
||||
common_hal_bleio_adapter_start_advertising(self, connectable, anonymous, timeout, interval,
|
||||
&data_bufinfo, &scan_response_bufinfo);
|
||||
&data_bufinfo, &scan_response_bufinfo, args[ARG_tx_power].u_int);
|
||||
|
||||
return mp_const_none;
|
||||
}
|
||||
|
@ -44,6 +44,8 @@ void common_hal_bleio_adapter_construct_hci_uart(bleio_adapter_obj_t *self, busi
|
||||
extern bool common_hal_bleio_adapter_get_advertising(bleio_adapter_obj_t *self);
|
||||
extern bool common_hal_bleio_adapter_get_enabled(bleio_adapter_obj_t *self);
|
||||
extern void common_hal_bleio_adapter_set_enabled(bleio_adapter_obj_t *self, bool enabled);
|
||||
extern mp_int_t common_hal_bleio_adapter_get_tx_power(bleio_adapter_obj_t *self);
|
||||
extern void common_hal_bleio_adapter_set_tx_power(bleio_adapter_obj_t *self, mp_int_t tx_power);
|
||||
extern bool common_hal_bleio_adapter_get_connected(bleio_adapter_obj_t *self);
|
||||
extern bleio_address_obj_t *common_hal_bleio_adapter_get_address(bleio_adapter_obj_t *self);
|
||||
extern bool common_hal_bleio_adapter_set_address(bleio_adapter_obj_t *self, bleio_address_obj_t *address);
|
||||
@ -51,9 +53,9 @@ extern bool common_hal_bleio_adapter_set_address(bleio_adapter_obj_t *self, blei
|
||||
extern mp_obj_str_t *common_hal_bleio_adapter_get_name(bleio_adapter_obj_t *self);
|
||||
extern void common_hal_bleio_adapter_set_name(bleio_adapter_obj_t *self, const char *name);
|
||||
|
||||
extern uint32_t _common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self, bool connectable, bool anonymous, uint32_t timeout, float interval, uint8_t *advertising_data, uint16_t advertising_data_len, uint8_t *scan_response_data, uint16_t scan_response_data_len);
|
||||
extern uint32_t _common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self, bool connectable, bool anonymous, uint32_t timeout, float interval, uint8_t *advertising_data, uint16_t advertising_data_len, uint8_t *scan_response_data, uint16_t scan_response_data_len, mp_int_t tx_power);
|
||||
|
||||
extern void common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self, bool connectable, bool anonymous, uint32_t timeout, mp_float_t interval, mp_buffer_info_t *advertising_data_bufinfo, mp_buffer_info_t *scan_response_data_bufinfo);
|
||||
extern void common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self, bool connectable, bool anonymous, uint32_t timeout, mp_float_t interval, mp_buffer_info_t *advertising_data_bufinfo, mp_buffer_info_t *scan_response_data_bufinfo, mp_int_t tx_power);
|
||||
extern void common_hal_bleio_adapter_stop_advertising(bleio_adapter_obj_t *self);
|
||||
|
||||
extern mp_obj_t common_hal_bleio_adapter_start_scan(bleio_adapter_obj_t *self, uint8_t *prefixes, size_t prefix_length, bool extended, mp_int_t buffer_size, mp_float_t timeout, mp_float_t interval, mp_float_t window, mp_int_t minimum_rssi, bool active);
|
||||
|
@ -63,7 +63,11 @@ static const uint8_t usb_msc_descriptor_template[] = {
|
||||
0xFF, // 11 bEndpointAddress (IN/D2H) [SET AT RUNTIME: 0x80 | number]
|
||||
#define MSC_IN_ENDPOINT_INDEX (11)
|
||||
0x02, // 12 bmAttributes (Bulk)
|
||||
#if USB_HIGHSPEED
|
||||
0x00, 0x02, // 13,14 wMaxPacketSize 512
|
||||
#else
|
||||
0x40, 0x00, // 13,14 wMaxPacketSize 64
|
||||
#endif
|
||||
0x00, // 15 bInterval 0 (unit depends on device speed)
|
||||
|
||||
// MSC Endpoint OUT Descriptor
|
||||
@ -72,7 +76,11 @@ static const uint8_t usb_msc_descriptor_template[] = {
|
||||
0xFF, // 18 bEndpointAddress (OUT/H2D) [SET AT RUNTIME]
|
||||
#define MSC_OUT_ENDPOINT_INDEX (18)
|
||||
0x02, // 19 bmAttributes (Bulk)
|
||||
#if USB_HIGHSPEED
|
||||
0x00, 0x02, // 20,21 wMaxPacketSize 512
|
||||
#else
|
||||
0x40, 0x00, // 20,21 wMaxPacketSize 64
|
||||
#endif
|
||||
0x00, // 22 bInterval 0 (unit depends on device speed)
|
||||
};
|
||||
|
||||
|
@ -121,7 +121,11 @@ static const uint8_t usb_cdc_descriptor_template[] = {
|
||||
0xFF, // 54 bEndpointAddress (OUT/H2D) [SET AT RUNTIME]
|
||||
#define CDC_DATA_OUT_ENDPOINT_INDEX 54
|
||||
0x02, // 55 bmAttributes (Bulk)
|
||||
#if USB_HIGHSPEED
|
||||
0x00, 0x02, // 56,57 wMaxPacketSize 512
|
||||
#else
|
||||
0x40, 0x00, // 56,57 wMaxPacketSize 64
|
||||
#endif
|
||||
0x00, // 58 bInterval 0 (unit depends on device speed)
|
||||
|
||||
// CDC Data IN Endpoint Descriptor
|
||||
@ -130,7 +134,11 @@ static const uint8_t usb_cdc_descriptor_template[] = {
|
||||
0xFF, // 61 bEndpointAddress (IN/D2H) [SET AT RUNTIME: 0x80 | number]
|
||||
#define CDC_DATA_IN_ENDPOINT_INDEX 61
|
||||
0x02, // 62 bmAttributes (Bulk)
|
||||
#if USB_HIGHSPEED
|
||||
0x00, 0x02, // 63,64 wMaxPacketSize 512
|
||||
#else
|
||||
0x40, 0x00, // 63,64 wMaxPacketSize 64
|
||||
#endif
|
||||
0x00, // 65 bInterval 0 (unit depends on device speed)
|
||||
};
|
||||
|
||||
|
@ -127,7 +127,11 @@ static const uint8_t usb_midi_descriptor_template[] = {
|
||||
0xFF, // 66 bEndpointAddress (OUT/H2D) [SET AT RUNTIME]
|
||||
#define MIDI_STREAMING_OUT_ENDPOINT_INDEX (66)
|
||||
0x02, // 67 bmAttributes (Bulk)
|
||||
#if USB_HIGHSPEED
|
||||
0x00, 0x02, // 68,69 wMaxPacketSize (512)
|
||||
#else
|
||||
0x40, 0x00, // 68,69 wMaxPacketSize (64)
|
||||
#endif
|
||||
0x00, // 70 bInterval 0 (unit depends on device speed)
|
||||
|
||||
// MIDI Data Endpoint Descriptor
|
||||
@ -143,7 +147,11 @@ static const uint8_t usb_midi_descriptor_template[] = {
|
||||
0xFF, // 78 bEndpointAddress (IN/D2H) [SET AT RUNTIME: 0x80 | number]
|
||||
#define MIDI_STREAMING_IN_ENDPOINT_INDEX (78)
|
||||
0x02, // 79 bmAttributes (Bulk)
|
||||
0x40, 0x00, // 8081 wMaxPacketSize 64
|
||||
#if USB_HIGHSPEED
|
||||
0x00, 0x02, // 80, 81 wMaxPacketSize (512)
|
||||
#else
|
||||
0x40, 0x00, // 80, 81 wMaxPacketSize (64)
|
||||
#endif
|
||||
0x00, // 82 bInterval 0 (unit depends on device speed)
|
||||
|
||||
// MIDI Data Endpoint Descriptor
|
||||
|
@ -78,7 +78,7 @@ safe_mode_t wait_for_safe_mode_reset(void) {
|
||||
#endif
|
||||
uint64_t start_ticks = supervisor_ticks_ms64();
|
||||
uint64_t diff = 0;
|
||||
while (diff < 700) {
|
||||
while (diff < 1000) {
|
||||
#ifdef MICROPY_HW_LED_STATUS
|
||||
// Blink on for 100, off for 100, on for 100, off for 100 and on for 200
|
||||
common_hal_digitalio_digitalinout_set_value(&status_led, diff > 100 && diff / 100 != 2 && diff / 100 != 4);
|
||||
|
Loading…
Reference in New Issue
Block a user