From 367a6e3a3dd370fd43f4d19955a4c56abd007824 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Thu, 24 Aug 2017 16:09:13 -0400 Subject: [PATCH 01/11] Checkpoint: Python interface finished. microcontroller.core.temperature. Dummy value returned for now. --- atmel-samd/Makefile | 1 + atmel-samd/common-hal/microcontroller/core.c | 34 +++++++ shared-bindings/microcontroller/__init__.c | 2 + shared-bindings/microcontroller/core.c | 93 ++++++++++++++++++++ shared-bindings/microcontroller/core.h | 36 ++++++++ 5 files changed, 166 insertions(+) create mode 100644 atmel-samd/common-hal/microcontroller/core.c create mode 100644 shared-bindings/microcontroller/core.c create mode 100644 shared-bindings/microcontroller/core.h diff --git a/atmel-samd/Makefile b/atmel-samd/Makefile index 913461261ae..cca4fb77fa2 100644 --- a/atmel-samd/Makefile +++ b/atmel-samd/Makefile @@ -250,6 +250,7 @@ SRC_COMMON_HAL = \ digitalio/__init__.c \ digitalio/DigitalInOut.c \ microcontroller/__init__.c \ + microcontroller/core.c \ microcontroller/Pin.c \ neopixel_write/__init__.c \ os/__init__.c \ diff --git a/atmel-samd/common-hal/microcontroller/core.c b/atmel-samd/common-hal/microcontroller/core.c new file mode 100644 index 00000000000..4af06e84ef9 --- /dev/null +++ b/atmel-samd/common-hal/microcontroller/core.c @@ -0,0 +1,34 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2016 Dan Halbert 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 "py/mphal.h" + +#include "samd21_pins.h" + +float common_hal_mcu_core_get_temperature(void) { + // TODO: Fake computation for now + return 123.0F; +} diff --git a/shared-bindings/microcontroller/__init__.c b/shared-bindings/microcontroller/__init__.c index fbe359ed943..c0e5ce331a0 100644 --- a/shared-bindings/microcontroller/__init__.c +++ b/shared-bindings/microcontroller/__init__.c @@ -33,6 +33,7 @@ #include "py/runtime.h" #include "shared-bindings/microcontroller/__init__.h" +#include "shared-bindings/microcontroller/core.h" #include "shared-bindings/microcontroller/Pin.h" #include "common-hal/microcontroller/Pin.h" @@ -107,6 +108,7 @@ const mp_obj_module_t mcu_pin_module = { STATIC const mp_rom_map_elem_t mcu_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_microcontroller) }, { MP_ROM_QSTR(MP_QSTR_delay_us), MP_ROM_PTR(&mcu_delay_us_obj) }, + { MP_ROM_QSTR(MP_QSTR_core), MP_ROM_PTR(&mcu_core_obj) }, { MP_ROM_QSTR(MP_QSTR_disable_interrupts), MP_ROM_PTR(&mcu_disable_interrupts_obj) }, { MP_ROM_QSTR(MP_QSTR_enable_interrupts), MP_ROM_PTR(&mcu_enable_interrupts_obj) }, { MP_ROM_QSTR(MP_QSTR_Pin), MP_ROM_PTR(&mcu_pin_type) }, diff --git a/shared-bindings/microcontroller/core.c b/shared-bindings/microcontroller/core.c new file mode 100644 index 00000000000..eb58805527a --- /dev/null +++ b/shared-bindings/microcontroller/core.c @@ -0,0 +1,93 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2017 Dan Halbert 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. + */ + +// Microcontroller contains pin references and microcontroller specific control +// functions. + +#include + +#include "py/obj.h" +#include "py/objproperty.h" +#include "py/runtime.h" + +#include "shared-bindings/microcontroller/core.h" + +// Forward declaration due to circularity. +const mp_obj_type_t mcu_core_type; +// there is a singleton microcontroller.core object +const mp_obj_base_t mcu_core_obj = {&mcu_core_type}; + +STATIC mp_obj_t mcu_core_obj_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { + // check arguments + mp_arg_check_num(n_args, n_kw, 0, 0, false); + + // return singleton object + return (mp_obj_t)&mcu_core_obj; +} + +//| :mod:`microcontroller.core` --- Microcontroller core information and control +//| -------------------------------------------------------- +//| +//| .. module:: microcontroller.core +//| :synopsis: Microcontroller core information and control +//| :platform: SAMD21 +//| +//| Get basic info about the code (chip) itself and control it. +//| + +//| .. attribute:: temperature +//| +//| Return the core (on-chip) temperature, in Fahrenheit. +//| +STATIC mp_obj_t mcu_core_obj_get_temperature(mp_obj_t self) { + return mp_obj_new_float(common_hal_mcu_core_get_temperature()); +} + +MP_DEFINE_CONST_FUN_OBJ_1(mcu_core_get_temperature_obj, mcu_core_obj_get_temperature); + +const mp_obj_property_t mcu_core_temperature_obj = { + .base.type = &mp_type_property, + .proxy = {(mp_obj_t)&mcu_core_get_temperature_obj, // getter + (mp_obj_t)&mp_const_none_obj, // no setter + (mp_obj_t)&mp_const_none_obj, // no deleter + }, +}; + +STATIC const mp_map_elem_t mcu_core_obj_locals_dict_table[] = { + { MP_OBJ_NEW_QSTR(MP_QSTR_temperature), (mp_obj_t)&mcu_core_temperature_obj }, +}; + +STATIC MP_DEFINE_CONST_DICT(mcu_core_obj_locals_dict, mcu_core_obj_locals_dict_table); + +const mp_obj_type_t mcu_core_type = { + { &mp_type_type }, + .name = MP_QSTR_core, + .make_new = mcu_core_obj_make_new, + .locals_dict = (mp_obj_t)&mcu_core_obj_locals_dict, +}; + + + diff --git a/shared-bindings/microcontroller/core.h b/shared-bindings/microcontroller/core.h new file mode 100644 index 00000000000..e6616ce59b5 --- /dev/null +++ b/shared-bindings/microcontroller/core.h @@ -0,0 +1,36 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2017 Dan Halbert 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. + */ + +#ifndef __MICROPY_INCLUDED_SHARED_BINDINGS_MICROCONTROLLER___CORE___H__ +#define __MICROPY_INCLUDED_SHARED_BINDINGS_MICROCONTROLLER___CORE___H__ + +#include "py/obj.h" + +extern const mp_obj_base_t mcu_core_obj; + +float common_hal_mcu_core_get_temperature(void); + +#endif // __MICROPY_INCLUDED_SHARED_BINDINGS_MICROCONTROLLER___CORE___H__ From 0267c45268569f79633630ad7329d4ba89a1828b Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Tue, 29 Aug 2017 13:45:44 -0400 Subject: [PATCH 02/11] Finish core.temperature. Add core.frequency. Squeeze firmware size by using -finline-limit. Otherwise non-Express builds were slightly too big. --- atmel-samd/Makefile | 4 +- atmel-samd/common-hal/microcontroller/core.c | 220 +++++++++++++++++-- shared-bindings/microcontroller/__init__.c | 4 +- shared-bindings/microcontroller/core.c | 25 ++- shared-bindings/microcontroller/core.h | 1 + 5 files changed, 226 insertions(+), 28 deletions(-) diff --git a/atmel-samd/Makefile b/atmel-samd/Makefile index ae637b973c0..3b2af17eebd 100644 --- a/atmel-samd/Makefile +++ b/atmel-samd/Makefile @@ -135,7 +135,9 @@ ifeq ($(DEBUG), 1) # -DMICROPY_DEBUG_MODULES may also be added to an -flto build, if you wish. CFLAGS += -Os -ggdb -DNDEBUG -DENABLE_MICRO_TRACE_BUFFER -DMICROPY_DEBUG_MODULES else -CFLAGS += -Os -DNDEBUG -flto +# -finline-limit can shrink the image size. -finline-limit=80 or so is similar to not having it on. +# There is no simple default value, though. +CFLAGS += -Os -DNDEBUG -flto -finline-limit=57 endif ifneq ($(FROZEN_DIR),) diff --git a/atmel-samd/common-hal/microcontroller/core.c b/atmel-samd/common-hal/microcontroller/core.c index 4af06e84ef9..ee2efac318b 100644 --- a/atmel-samd/common-hal/microcontroller/core.c +++ b/atmel-samd/common-hal/microcontroller/core.c @@ -1,34 +1,210 @@ /* - * This file is part of the MicroPython project, http://micropython.org/ + * Includes code from ASF sample code adc_temp.h and adc_temp.c, + * and so includes this license: * - * The MIT License (MIT) + * Copyright (C) 2015 Atmel Corporation. All rights reserved. * - * Copyright (c) 2016 Dan Halbert for Adafruit Industries + * License * - * 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: + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. * - * 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. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ -#include "py/mphal.h" +#include "py/obj.h" +#include "py/runtime.h" + +// Don't reorder these includes because they are dependencies of adc_feature.h. +// They should really be included by adc_feature.h. +#include +#include "asf/sam0/drivers/system/clock/gclk.h" +#include "asf/sam0/utils/cmsis/samd21/include/component/adc.h" + +#include "asf/sam0/drivers/adc/adc_sam_d_r/adc_feature.h" +#include "asf/sam0/drivers/adc/adc.h" + +#define ADC_TEMP_SAMPLE_LENGTH 4 +#define INT1V_VALUE_FLOAT 1.0 +#define INT1V_DIVIDER_1000 1000.0 +#define ADC_12BIT_FULL_SCALE_VALUE_FLOAT 4095.0 + +typedef struct nvm_calibration_data_t { + float tempR; // Production Room temperature + float tempH; // Production Hot temperature + float INT1VR; // Room temp 2's complement of the internal 1V reference value + float INT1VH; // Hot temp 2's complement of the internal 1V reference value + uint16_t ADCR; // Production Room temperature ADC value + uint16_t ADCH; // Production Hot temperature ADC value + float VADCR; // Room temperature ADC voltage + float VADCH; // Hot temperature ADC voltage +} nvm_calibration_data_t; + -#include "samd21_pins.h" +// Decimal to fraction conversion. (adapted from ASF sample). +STATIC float convert_dec_to_frac(uint8_t val) { + float float_val = (float)val; + if (val < 10) { + return (float_val/10.0); + } else if (val < 100) { + return (float_val/100.0); + } else { + return (float_val/1000.0); + } +} + +STATIC void configure_adc_temp(struct adc_module *adc_instance) { + struct adc_config config_adc; + adc_get_config_defaults(&config_adc); + + // The parameters chosen here are from the temperature example in: + // http://www.atmel.com/images/Atmel-42645-ADC-Configurations-with-Examples_ApplicationNote_AT11481.pdf + // That note also recommends in general: + // "Discard the first conversion result whenever there is a change + // in ADC configuration like voltage reference / ADC channel change." + + config_adc.clock_prescaler = ADC_CLOCK_PRESCALER_DIV16; + config_adc.reference = ADC_REFERENCE_INT1V; + config_adc.positive_input = ADC_POSITIVE_INPUT_TEMP; + config_adc.negative_input = ADC_NEGATIVE_INPUT_GND; + config_adc.sample_length = ADC_TEMP_SAMPLE_LENGTH; + adc_init(adc_instance, ADC, &config_adc); + + // Oversample and decimate. A higher samplenum produces a more stable result. + ADC->AVGCTRL.reg = ADC_AVGCTRL_ADJRES(2) | ADC_AVGCTRL_SAMPLENUM_4; + //ADC->AVGCTRL.reg = ADC_AVGCTRL_ADJRES(4) | ADC_AVGCTRL_SAMPLENUM_16; +} + +// Extract the production calibration data information from NVM (adapted from ASF sample). +// +STATIC void load_calibration_data(nvm_calibration_data_t *cal) { + volatile uint32_t val1; /* Temperature Log Row Content first 32 bits */ + volatile uint32_t val2; /* Temperature Log Row Content another 32 bits */ + uint8_t room_temp_val_int; /* Integer part of room temperature in °C */ + uint8_t room_temp_val_dec; /* Decimal part of room temperature in °C */ + uint8_t hot_temp_val_int; /* Integer part of hot temperature in °C */ + uint8_t hot_temp_val_dec; /* Decimal part of hot temperature in °C */ + int8_t room_int1v_val; /* internal 1V reference drift at room temperature */ + int8_t hot_int1v_val; /* internal 1V reference drift at hot temperature*/ + + uint32_t *temp_log_row_ptr = (uint32_t *)NVMCTRL_TEMP_LOG; + + val1 = *temp_log_row_ptr; + temp_log_row_ptr++; + val2 = *temp_log_row_ptr; + + room_temp_val_int = (uint8_t)((val1 & NVMCTRL_FUSES_ROOM_TEMP_VAL_INT_Msk) >> NVMCTRL_FUSES_ROOM_TEMP_VAL_INT_Pos); + room_temp_val_dec = (uint8_t)((val1 & NVMCTRL_FUSES_ROOM_TEMP_VAL_DEC_Msk) >> NVMCTRL_FUSES_ROOM_TEMP_VAL_DEC_Pos); + + hot_temp_val_int = (uint8_t)((val1 & NVMCTRL_FUSES_HOT_TEMP_VAL_INT_Msk) >> NVMCTRL_FUSES_HOT_TEMP_VAL_INT_Pos); + hot_temp_val_dec = (uint8_t)((val1 & NVMCTRL_FUSES_HOT_TEMP_VAL_DEC_Msk) >> NVMCTRL_FUSES_HOT_TEMP_VAL_DEC_Pos); + + room_int1v_val = (int8_t)((val1 & NVMCTRL_FUSES_ROOM_INT1V_VAL_Msk) >> NVMCTRL_FUSES_ROOM_INT1V_VAL_Pos); + hot_int1v_val = (int8_t)((val2 & NVMCTRL_FUSES_HOT_INT1V_VAL_Msk) >> NVMCTRL_FUSES_HOT_INT1V_VAL_Pos); + + cal->ADCR = (uint16_t)((val2 & NVMCTRL_FUSES_ROOM_ADC_VAL_Msk) >> NVMCTRL_FUSES_ROOM_ADC_VAL_Pos); + + cal->ADCH = (uint16_t)((val2 & NVMCTRL_FUSES_HOT_ADC_VAL_Msk) >> NVMCTRL_FUSES_HOT_ADC_VAL_Pos); + + cal->tempR = room_temp_val_int + convert_dec_to_frac(room_temp_val_dec); + cal->tempH = hot_temp_val_int + convert_dec_to_frac(hot_temp_val_dec); + + cal->INT1VR = 1 - ((float)room_int1v_val/INT1V_DIVIDER_1000); + cal->INT1VH = 1 - ((float)hot_int1v_val/INT1V_DIVIDER_1000); + + cal->VADCR = ((float)cal->ADCR * cal->INT1VR)/ADC_12BIT_FULL_SCALE_VALUE_FLOAT; + cal->VADCH = ((float)cal->ADCH * cal->INT1VH)/ADC_12BIT_FULL_SCALE_VALUE_FLOAT; +} + +/* + * Calculate fine temperature using Equation1 and Equation + * 1b as mentioned in data sheet section "Temperature Sensor Characteristics" + * of Electrical Characteristics. (adapted from ASF sample code). + */ +STATIC float calculate_temperature(uint16_t raw_code, nvm_calibration_data_t *cal) +{ + float VADC; /* Voltage calculation using ADC result for Coarse Temp calculation */ + float VADCM; /* Voltage calculation using ADC result for Fine Temp calculation. */ + float INT1VM; /* Voltage calculation for reality INT1V value during the ADC conversion */ + + VADC = ((float)raw_code * INT1V_VALUE_FLOAT)/ADC_12BIT_FULL_SCALE_VALUE_FLOAT; + + // Hopefully compiler will remove common subepxressions here. + + /* Coarse Temp Calculation by assume INT1V=1V for this ADC conversion */ + float coarse_temp = cal->tempR + (((cal->tempH - cal->tempR)/(cal->VADCH - cal->VADCR)) * (VADC - cal->VADCR)); + + /* Calculation to find the real INT1V value during the ADC conversion */ + INT1VM = cal->INT1VR + (((cal->INT1VH - cal->INT1VR) * (coarse_temp - cal->tempR))/(cal->tempH - cal->tempR)); + + VADCM = ((float)raw_code * INT1VM)/ADC_12BIT_FULL_SCALE_VALUE_FLOAT; + + /* Fine Temp Calculation by replace INT1V=1V by INT1V = INT1Vm for ADC conversion */ + float fine_temp = cal->tempR + (((cal->tempH - cal->tempR)/(cal->VADCH - cal->VADCR)) * (VADCM - cal->VADCR)); + + return fine_temp; +} + + +// External interface. +// float common_hal_mcu_core_get_temperature(void) { - // TODO: Fake computation for now - return 123.0F; + struct adc_module adc_instance_struct; + + system_voltage_reference_enable(SYSTEM_VOLTAGE_REFERENCE_TEMPSENSE); + configure_adc_temp(&adc_instance_struct); + nvm_calibration_data_t nvm_calibration_data; + load_calibration_data(&nvm_calibration_data); + + adc_enable(&adc_instance_struct); + + uint16_t data; + enum status_code status; + + // Read twice and discard first result, as recommended in section 14 of + // http://www.atmel.com/images/Atmel-42645-ADC-Configurations-with-Examples_ApplicationNote_AT11481.pdf + // "Discard the first conversion result whenever there is a change in ADC configuration + // like voltage reference / ADC channel change" + // Empirical observation shows the first reading is quite different than subsequent ones. + + adc_start_conversion(&adc_instance_struct); + do { + status = adc_read(&adc_instance_struct, &data); + } while (status == STATUS_BUSY); + + adc_start_conversion(&adc_instance_struct); + do { + status = adc_read(&adc_instance_struct, &data); + } while (status == STATUS_BUSY); + + return calculate_temperature(data, &nvm_calibration_data); +} + + +float common_hal_mcu_core_get_frequency(void) { + return (float) system_cpu_clock_get_hz(); } diff --git a/shared-bindings/microcontroller/__init__.c b/shared-bindings/microcontroller/__init__.c index c004ac6ba2a..a88aaa376ad 100644 --- a/shared-bindings/microcontroller/__init__.c +++ b/shared-bindings/microcontroller/__init__.c @@ -118,9 +118,9 @@ STATIC const mp_rom_map_elem_t mcu_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_disable_interrupts), MP_ROM_PTR(&mcu_disable_interrupts_obj) }, { MP_ROM_QSTR(MP_QSTR_enable_interrupts), MP_ROM_PTR(&mcu_enable_interrupts_obj) }, #if CIRCUITPY_INTERNAL_NVM_SIZE > 0 - { MP_ROM_QSTR(MP_QSTR_nvm), &common_hal_mcu_nvm_obj }, + { MP_ROM_QSTR(MP_QSTR_nvm), MP_ROM_PTR(&common_hal_mcu_nvm_obj) }, #else - { MP_ROM_QSTR(MP_QSTR_nvm), &mp_const_none_obj }, + { MP_ROM_QSTR(MP_QSTR_nvm), MP_ROM_PTR(&mp_const_none_obj) }, #endif { MP_ROM_QSTR(MP_QSTR_Pin), MP_ROM_PTR(&mcu_pin_type) }, { MP_ROM_QSTR(MP_QSTR_pin), MP_ROM_PTR(&mcu_pin_module) }, diff --git a/shared-bindings/microcontroller/core.c b/shared-bindings/microcontroller/core.c index eb58805527a..e7c09e3d4b1 100644 --- a/shared-bindings/microcontroller/core.c +++ b/shared-bindings/microcontroller/core.c @@ -58,9 +58,27 @@ STATIC mp_obj_t mcu_core_obj_make_new(const mp_obj_type_t *type, size_t n_args, //| Get basic info about the code (chip) itself and control it. //| +//| .. attribute:: frequency +//| +//| Return the CPU operating frequency as a float, in Hz. +//| +STATIC mp_obj_t mcu_core_obj_get_frequency(mp_obj_t self) { + return mp_obj_new_float(common_hal_mcu_core_get_frequency()); +} + +MP_DEFINE_CONST_FUN_OBJ_1(mcu_core_get_frequency_obj, mcu_core_obj_get_frequency); + +const mp_obj_property_t mcu_core_frequency_obj = { + .base.type = &mp_type_property, + .proxy = {(mp_obj_t)&mcu_core_get_frequency_obj, // getter + (mp_obj_t)&mp_const_none_obj, // no setter + (mp_obj_t)&mp_const_none_obj, // no deleter + }, +}; + //| .. attribute:: temperature //| -//| Return the core (on-chip) temperature, in Fahrenheit. +//| Return the core (on-chip) temperature, in Celsius. //| STATIC mp_obj_t mcu_core_obj_get_temperature(mp_obj_t self) { return mp_obj_new_float(common_hal_mcu_core_get_temperature()); @@ -76,8 +94,9 @@ const mp_obj_property_t mcu_core_temperature_obj = { }, }; -STATIC const mp_map_elem_t mcu_core_obj_locals_dict_table[] = { - { MP_OBJ_NEW_QSTR(MP_QSTR_temperature), (mp_obj_t)&mcu_core_temperature_obj }, +STATIC const mp_rom_map_elem_t mcu_core_obj_locals_dict_table[] = { + { MP_ROM_QSTR(MP_QSTR_frequency), MP_ROM_PTR(&mcu_core_frequency_obj) }, + { MP_ROM_QSTR(MP_QSTR_temperature), MP_ROM_PTR(&mcu_core_temperature_obj) }, }; STATIC MP_DEFINE_CONST_DICT(mcu_core_obj_locals_dict, mcu_core_obj_locals_dict_table); diff --git a/shared-bindings/microcontroller/core.h b/shared-bindings/microcontroller/core.h index e6616ce59b5..1915d18f5ca 100644 --- a/shared-bindings/microcontroller/core.h +++ b/shared-bindings/microcontroller/core.h @@ -31,6 +31,7 @@ extern const mp_obj_base_t mcu_core_obj; +float common_hal_mcu_core_get_frequency(void); float common_hal_mcu_core_get_temperature(void); #endif // __MICROPY_INCLUDED_SHARED_BINDINGS_MICROCONTROLLER___CORE___H__ From 55a6555b5333549aa16da94f47ba27de5fa3d8d3 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Tue, 29 Aug 2017 14:08:48 -0400 Subject: [PATCH 03/11] Update submodules. --- atmel-samd/freetouch | 2 +- lib/axtls | 2 +- shared-bindings/busio/UART.c | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/atmel-samd/freetouch b/atmel-samd/freetouch index 7d8a8f99989..1f21fde3fed 160000 --- a/atmel-samd/freetouch +++ b/atmel-samd/freetouch @@ -1 +1 @@ -Subproject commit 7d8a8f99989a4de5b3fbf491df956d1aaca2c172 +Subproject commit 1f21fde3fed141950b9dcc1b608733bce2ed212e diff --git a/lib/axtls b/lib/axtls index 9b3092eb3b4..67d27df4b5d 160000 --- a/lib/axtls +++ b/lib/axtls @@ -1 +1 @@ -Subproject commit 9b3092eb3b4b230a63c0c389bfbd3c55682c620f +Subproject commit 67d27df4b5d097e146599fc4fb160a2adcbf5632 diff --git a/shared-bindings/busio/UART.c b/shared-bindings/busio/UART.c index 0939910dcf5..ee23ff05535 100644 --- a/shared-bindings/busio/UART.c +++ b/shared-bindings/busio/UART.c @@ -147,7 +147,9 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(busio_uart___exit___obj, 4, 4, busio_ //| .. method:: read(nbytes=None) //| //| Read characters. If ``nbytes`` is specified then read at most that many -//| bytes. Otherwise, read everything that has been buffered. +//| bytes. Otherwise, read everything that arrives until the connection +//| times out. Providing the number of bytes expected is highly recommended +//| because it will be faster. //| //| :return: Data read //| :rtype: bytes or None From 9500e6236b860d33b4aed4193d6571c6df545f10 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Tue, 29 Aug 2017 15:20:53 -0400 Subject: [PATCH 04/11] fix submodule commits --- atmel-samd/freetouch | 2 +- lib/axtls | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/atmel-samd/freetouch b/atmel-samd/freetouch index 1f21fde3fed..7d8a8f99989 160000 --- a/atmel-samd/freetouch +++ b/atmel-samd/freetouch @@ -1 +1 @@ -Subproject commit 1f21fde3fed141950b9dcc1b608733bce2ed212e +Subproject commit 7d8a8f99989a4de5b3fbf491df956d1aaca2c172 diff --git a/lib/axtls b/lib/axtls index 67d27df4b5d..9b3092eb3b4 160000 --- a/lib/axtls +++ b/lib/axtls @@ -1 +1 @@ -Subproject commit 67d27df4b5d097e146599fc4fb160a2adcbf5632 +Subproject commit 9b3092eb3b4b230a63c0c389bfbd3c55682c620f From 536731bbdcd25ee40a6b8ba3bc1e775ebacdc98a Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Tue, 29 Aug 2017 15:34:36 -0400 Subject: [PATCH 05/11] core.frequency is now int instead of float --- atmel-samd/common-hal/microcontroller/core.c | 4 ++-- shared-bindings/microcontroller/core.c | 4 ++-- shared-bindings/microcontroller/core.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/atmel-samd/common-hal/microcontroller/core.c b/atmel-samd/common-hal/microcontroller/core.c index ee2efac318b..8e18b60374d 100644 --- a/atmel-samd/common-hal/microcontroller/core.c +++ b/atmel-samd/common-hal/microcontroller/core.c @@ -205,6 +205,6 @@ float common_hal_mcu_core_get_temperature(void) { } -float common_hal_mcu_core_get_frequency(void) { - return (float) system_cpu_clock_get_hz(); +uint32_t common_hal_mcu_core_get_frequency(void) { + return system_cpu_clock_get_hz(); } diff --git a/shared-bindings/microcontroller/core.c b/shared-bindings/microcontroller/core.c index e7c09e3d4b1..ca601a76389 100644 --- a/shared-bindings/microcontroller/core.c +++ b/shared-bindings/microcontroller/core.c @@ -60,10 +60,10 @@ STATIC mp_obj_t mcu_core_obj_make_new(const mp_obj_type_t *type, size_t n_args, //| .. attribute:: frequency //| -//| Return the CPU operating frequency as a float, in Hz. +//| Return the CPU operating frequency as an int, in Hz. //| STATIC mp_obj_t mcu_core_obj_get_frequency(mp_obj_t self) { - return mp_obj_new_float(common_hal_mcu_core_get_frequency()); + return mp_obj_new_int_from_uint(common_hal_mcu_core_get_frequency()); } MP_DEFINE_CONST_FUN_OBJ_1(mcu_core_get_frequency_obj, mcu_core_obj_get_frequency); diff --git a/shared-bindings/microcontroller/core.h b/shared-bindings/microcontroller/core.h index 1915d18f5ca..86b1772175d 100644 --- a/shared-bindings/microcontroller/core.h +++ b/shared-bindings/microcontroller/core.h @@ -31,7 +31,7 @@ extern const mp_obj_base_t mcu_core_obj; -float common_hal_mcu_core_get_frequency(void); +uint32_t common_hal_mcu_core_get_frequency(void); float common_hal_mcu_core_get_temperature(void); #endif // __MICROPY_INCLUDED_SHARED_BINDINGS_MICROCONTROLLER___CORE___H__ From 3a4d91be9fe32d0167a83b5d6a935e12c56a4ad2 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Tue, 29 Aug 2017 20:52:29 -0400 Subject: [PATCH 06/11] Rework `microcontroller.core` so it's a module with a `core.Core` singleton class. Clarify some documentation. Transpose support matrix in `shared-bindings/index.rst`. It was getting r-e-a-l-l-y w-i-d-e, especially after adding `core` and `nvm` entries. --- atmel-samd/Makefile | 3 +- .../{microcontroller/core.c => core/Core.c} | 33 +++++- atmel-samd/common-hal/core/Core.h | 37 ++++++ atmel-samd/common-hal/core/__init__.c | 27 +++++ .../common-hal/microcontroller/__init__.c | 10 ++ atmel-samd/common-hal/nvm/__init__.c | 26 ++++ atmel-samd/mpconfigport.h | 2 + esp8266/Makefile | 2 + esp8266/common-hal/core/Core.c | 40 +++++++ esp8266/common-hal/core/Core.h | 37 ++++++ esp8266/common-hal/core/__init__.c | 27 +++++ esp8266/common-hal/microcontroller/__init__.c | 10 ++ esp8266/esp_mphal.c | 4 + esp8266/mpconfigport.h | 2 + shared-bindings/core/Core.c | 109 +++++++++++++++++ shared-bindings/core/Core.h | 39 ++++++ shared-bindings/core/__init__.c | 64 ++++++++++ .../core.h => core/__init__.h} | 13 +- shared-bindings/index.rst | 33 ++++-- shared-bindings/microcontroller/__init__.c | 13 +- shared-bindings/microcontroller/__init__.h | 5 + shared-bindings/microcontroller/core.c | 112 ------------------ shared-bindings/nvm/ByteArray.c | 4 +- 23 files changed, 512 insertions(+), 140 deletions(-) rename atmel-samd/common-hal/{microcontroller/core.c => core/Core.c} (86%) create mode 100644 atmel-samd/common-hal/core/Core.h create mode 100644 atmel-samd/common-hal/core/__init__.c create mode 100644 esp8266/common-hal/core/Core.c create mode 100644 esp8266/common-hal/core/Core.h create mode 100644 esp8266/common-hal/core/__init__.c create mode 100644 shared-bindings/core/Core.c create mode 100644 shared-bindings/core/Core.h create mode 100644 shared-bindings/core/__init__.c rename shared-bindings/{microcontroller/core.h => core/__init__.h} (76%) delete mode 100644 shared-bindings/microcontroller/core.c diff --git a/atmel-samd/Makefile b/atmel-samd/Makefile index fd9c65fb546..5474bba699c 100644 --- a/atmel-samd/Makefile +++ b/atmel-samd/Makefile @@ -246,10 +246,11 @@ SRC_COMMON_HAL = \ busio/I2C.c \ busio/SPI.c \ busio/UART.c \ + core/__init__.c \ + core/Core.c \ digitalio/__init__.c \ digitalio/DigitalInOut.c \ microcontroller/__init__.c \ - microcontroller/core.c \ microcontroller/Pin.c \ neopixel_write/__init__.c \ nvm/__init__.c \ diff --git a/atmel-samd/common-hal/microcontroller/core.c b/atmel-samd/common-hal/core/Core.c similarity index 86% rename from atmel-samd/common-hal/microcontroller/core.c rename to atmel-samd/common-hal/core/Core.c index 8e18b60374d..d94f564db1c 100644 --- a/atmel-samd/common-hal/microcontroller/core.c +++ b/atmel-samd/common-hal/core/Core.c @@ -1,3 +1,29 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2016 Dan Halbert 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. + */ + /* * Includes code from ASF sample code adc_temp.h and adc_temp.c, * and so includes this license: @@ -35,8 +61,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#include "py/obj.h" -#include "py/runtime.h" +#include "common-hal/core/Core.h" // Don't reorder these includes because they are dependencies of adc_feature.h. // They should really be included by adc_feature.h. @@ -172,7 +197,7 @@ STATIC float calculate_temperature(uint16_t raw_code, nvm_calibration_data_t *ca // External interface. // -float common_hal_mcu_core_get_temperature(void) { +float common_hal_core_core_get_temperature(void) { struct adc_module adc_instance_struct; system_voltage_reference_enable(SYSTEM_VOLTAGE_REFERENCE_TEMPSENSE); @@ -205,6 +230,6 @@ float common_hal_mcu_core_get_temperature(void) { } -uint32_t common_hal_mcu_core_get_frequency(void) { +uint32_t common_hal_core_core_get_frequency(void) { return system_cpu_clock_get_hz(); } diff --git a/atmel-samd/common-hal/core/Core.h b/atmel-samd/common-hal/core/Core.h new file mode 100644 index 00000000000..37fac02b168 --- /dev/null +++ b/atmel-samd/common-hal/core/Core.h @@ -0,0 +1,37 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2017 Dan Halbert 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. + */ + +#ifndef MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_CORE_CORE_H +#define MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_CORE_CORE_H + +#include "py/obj.h" + +typedef struct { + mp_obj_base_t base; + // Stores no state currently. +} core_core_obj_t; + +#endif // MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_CORE_CORE_H diff --git a/atmel-samd/common-hal/core/__init__.c b/atmel-samd/common-hal/core/__init__.c new file mode 100644 index 00000000000..2181435f28b --- /dev/null +++ b/atmel-samd/common-hal/core/__init__.c @@ -0,0 +1,27 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2017 Dan Halbert 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. + */ + +// No core module functions. diff --git a/atmel-samd/common-hal/microcontroller/__init__.c b/atmel-samd/common-hal/microcontroller/__init__.c index 2b9cc8bfcd6..636ec0b34f9 100644 --- a/atmel-samd/common-hal/microcontroller/__init__.c +++ b/atmel-samd/common-hal/microcontroller/__init__.c @@ -30,6 +30,7 @@ #include "samd21_pins.h" #include "shared-bindings/nvm/ByteArray.h" +#include "shared-bindings/core/Core.h" void common_hal_mcu_delay_us(uint32_t delay) { mp_hal_delay_us(delay); @@ -50,8 +51,17 @@ void common_hal_mcu_enable_interrupts(void) { cpu_irq_restore(irq_flags); } +// The singleton core.Core object. +// It currently only has properties, and no state. +core_core_obj_t common_hal_core_core_obj = { + .base = { + .type = &core_core_type, + }, +}; + // NVM is only available on Express boards for now. #if CIRCUITPY_INTERNAL_NVM_SIZE > 0 +// The singleton nvm.ByteAray object. nvm_bytearray_obj_t common_hal_mcu_nvm_obj = { .base = { .type = &nvm_bytearray_type, diff --git a/atmel-samd/common-hal/nvm/__init__.c b/atmel-samd/common-hal/nvm/__init__.c index 1b702a1584d..f0792430f01 100644 --- a/atmel-samd/common-hal/nvm/__init__.c +++ b/atmel-samd/common-hal/nvm/__init__.c @@ -1 +1,27 @@ +/* + * 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. + */ + // No nvm module functions. diff --git a/atmel-samd/mpconfigport.h b/atmel-samd/mpconfigport.h index e99d190be5c..376084c9f95 100644 --- a/atmel-samd/mpconfigport.h +++ b/atmel-samd/mpconfigport.h @@ -143,6 +143,7 @@ extern const struct _mp_obj_module_t digitalio_module; extern const struct _mp_obj_module_t pulseio_module; extern const struct _mp_obj_module_t busio_module; extern const struct _mp_obj_module_t board_module; +extern const struct _mp_obj_module_t core_module; extern const struct _mp_obj_module_t os_module; extern const struct _mp_obj_module_t random_module; extern const struct _mp_obj_module_t storage_module; @@ -196,6 +197,7 @@ extern const struct _mp_obj_module_t usb_hid_module; { MP_OBJ_NEW_QSTR(MP_QSTR_digitalio), (mp_obj_t)&digitalio_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_busio), (mp_obj_t)&busio_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_board), (mp_obj_t)&board_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_core), (mp_obj_t)&core_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_os), (mp_obj_t)&os_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_random), (mp_obj_t)&random_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_storage), (mp_obj_t)&storage_module }, \ diff --git a/esp8266/Makefile b/esp8266/Makefile index 5c32160ccb8..8fc8f22e644 100644 --- a/esp8266/Makefile +++ b/esp8266/Makefile @@ -104,6 +104,8 @@ SRC_COMMON_HAL = \ analogio/__init__.c \ analogio/AnalogIn.c \ analogio/AnalogOut.c \ + core/__init__.c \ + core/Core.c \ digitalio/__init__.c \ digitalio/DigitalInOut.c \ pulseio/__init__.c \ diff --git a/esp8266/common-hal/core/Core.c b/esp8266/common-hal/core/Core.c new file mode 100644 index 00000000000..8056f3ead1d --- /dev/null +++ b/esp8266/common-hal/core/Core.c @@ -0,0 +1,40 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2016 Dan Halbert 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 "common-hal/core/Core.h" + +#include + +#include "esp_mphal.h" + + +float common_hal_core_core_get_temperature(void) { + return NAN; +} + +uint32_t common_hal_core_core_get_frequency(void) { + return mp_hal_get_cpu_freq(); +} diff --git a/esp8266/common-hal/core/Core.h b/esp8266/common-hal/core/Core.h new file mode 100644 index 00000000000..9f089f6c148 --- /dev/null +++ b/esp8266/common-hal/core/Core.h @@ -0,0 +1,37 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2017 Dan Halbert 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. + */ + +#ifndef MICROPY_INCLUDED_ESP8266_COMMON_HAL_CORE_CORE_H +#define MICROPY_INCLUDED_ESP8266_COMMON_HAL_CORE_CORE_H + +#include "py/obj.h" + +typedef struct { + mp_obj_base_t base; + // Stores no state currently. +} core_core_obj_t; + +#endif // MICROPY_INCLUDED_ESP8266_COMMON_HAL_CORE_CORE_H diff --git a/esp8266/common-hal/core/__init__.c b/esp8266/common-hal/core/__init__.c new file mode 100644 index 00000000000..2181435f28b --- /dev/null +++ b/esp8266/common-hal/core/__init__.c @@ -0,0 +1,27 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2017 Dan Halbert 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. + */ + +// No core module functions. diff --git a/esp8266/common-hal/microcontroller/__init__.c b/esp8266/common-hal/microcontroller/__init__.c index 4fb5eee6329..3db8efba90c 100644 --- a/esp8266/common-hal/microcontroller/__init__.c +++ b/esp8266/common-hal/microcontroller/__init__.c @@ -28,6 +28,8 @@ #include "common-hal/microcontroller/Pin.h" #include "shared-bindings/microcontroller/Pin.h" +#include "shared-bindings/core/Core.h" + #include "eagle_soc.h" #include "ets_alt_task.h" #include "etshal.h" @@ -52,6 +54,14 @@ void common_hal_mcu_enable_interrupts() { enable_irq(saved_interrupt_state & ~(1 << ETS_LOOP_ITER_BIT)); } +// The singleton core.Core object. +// It currently only has properties, and no state. +core_core_obj_t common_hal_core_core_obj = { + .base = { + .type = &core_core_type, + }, +}; + // This macro is used to simplify pin definition in boards//pins.c #define PIN(p_name, p_gpio_number, p_gpio_function, p_peripheral) \ const mcu_pin_obj_t pin_## p_name = { \ diff --git a/esp8266/esp_mphal.c b/esp8266/esp_mphal.c index effed04dda6..748c90292ff 100644 --- a/esp8266/esp_mphal.c +++ b/esp8266/esp_mphal.c @@ -55,6 +55,10 @@ void mp_hal_delay_us(uint32_t us) { } } +uint32_t mp_hal_get_cpu_freq(void) { + return system_get_cpu_freq() * 1000000; +} + int mp_hal_stdin_rx_chr(void) { for (;;) { int c = ringbuf_get(&input_buf); diff --git a/esp8266/mpconfigport.h b/esp8266/mpconfigport.h index 41351709902..dcdfc38637e 100644 --- a/esp8266/mpconfigport.h +++ b/esp8266/mpconfigport.h @@ -164,6 +164,7 @@ extern const struct _mp_obj_module_t mp_module_machine; extern const struct _mp_obj_module_t mp_module_onewire; extern const struct _mp_obj_module_t microcontroller_module; extern const struct _mp_obj_module_t board_module; +extern const struct _mp_obj_module_t core_module; extern const struct _mp_obj_module_t analogio_module; extern const struct _mp_obj_module_t digitalio_module; extern const struct _mp_obj_module_t pulseio_module; @@ -181,6 +182,7 @@ extern const struct _mp_obj_module_t multiterminal_module; { MP_ROM_QSTR(MP_QSTR__onewire), MP_ROM_PTR(&mp_module_onewire) }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_microcontroller), (mp_obj_t)µcontroller_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_board), (mp_obj_t)&board_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_core), (mp_obj_t)&core_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_analogio), (mp_obj_t)&analogio_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_digitalio), (mp_obj_t)&digitalio_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_pulseio), (mp_obj_t)&pulseio_module }, \ diff --git a/shared-bindings/core/Core.c b/shared-bindings/core/Core.c new file mode 100644 index 00000000000..9d3e68646fb --- /dev/null +++ b/shared-bindings/core/Core.c @@ -0,0 +1,109 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2017 Dan Halbert 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 +#include + +#include "py/objproperty.h" +#include "shared-bindings/core/Core.h" + +#include "py/objproperty.h" +#include "py/runtime.h" + +//| .. currentmodule:: core +//| +//| :class:Core` --- Microcontroller core information and control +//| -------------------------------------------------------- +//| +//| Get basic info about the code (chip) itself and control it. +//| +//| You cannot create an instance of Core, but you can access the sole instance available +//| by importing the microcontroller module. +//| +//| Usage:: +//| +//| import microcontroller +//| print(microcontroller.core.frequency) +//| print(microcontroller.core.temperature) +//| + + +STATIC mp_obj_t core_core_make_new(const mp_obj_type_t *type, + size_t n_args, size_t n_kw, const mp_obj_t *args) { + mp_raise_TypeError("cannot be created: use instance in microcontroller.core"); +} + +//| .. attribute:: frequency +//| +//| Return the CPU operating frequency as an int, in Hz. +//| +STATIC mp_obj_t core_core_get_frequency(mp_obj_t self) { + return mp_obj_new_int_from_uint(common_hal_core_core_get_frequency()); +} + +MP_DEFINE_CONST_FUN_OBJ_1(core_core_get_frequency_obj, core_core_get_frequency); + +const mp_obj_property_t core_core_frequency_obj = { + .base.type = &mp_type_property, + .proxy = {(mp_obj_t)&core_core_get_frequency_obj, // getter + (mp_obj_t)&mp_const_none_obj, // no setter + (mp_obj_t)&mp_const_none_obj, // no deleter + }, +}; + +//| .. attribute:: temperature +//| +//| Return the core (on-chip) temperature, in Celsius, as a float. +//| If the temperature is not available, return None. +//| +STATIC mp_obj_t core_core_get_temperature(mp_obj_t self) { + float temperature = common_hal_core_core_get_temperature(); + return isnan(temperature) ? mp_const_none : mp_obj_new_float(temperature); +} + +MP_DEFINE_CONST_FUN_OBJ_1(core_core_get_temperature_obj, core_core_get_temperature); + +const mp_obj_property_t core_core_temperature_obj = { + .base.type = &mp_type_property, + .proxy = {(mp_obj_t)&core_core_get_temperature_obj, // getter + (mp_obj_t)&mp_const_none_obj, // no setter + (mp_obj_t)&mp_const_none_obj, // no deleter + }, +}; + +STATIC const mp_rom_map_elem_t core_core_locals_dict_table[] = { + { MP_ROM_QSTR(MP_QSTR_frequency), MP_ROM_PTR(&core_core_frequency_obj) }, + { MP_ROM_QSTR(MP_QSTR_temperature), MP_ROM_PTR(&core_core_temperature_obj) }, +}; + +STATIC MP_DEFINE_CONST_DICT(core_core_locals_dict, core_core_locals_dict_table); + +const mp_obj_type_t core_core_type = { + { &mp_type_type }, + .name = MP_QSTR_core, + .make_new = core_core_make_new, + .locals_dict = (mp_obj_t)&core_core_locals_dict, +}; diff --git a/shared-bindings/core/Core.h b/shared-bindings/core/Core.h new file mode 100644 index 00000000000..16171e867a5 --- /dev/null +++ b/shared-bindings/core/Core.h @@ -0,0 +1,39 @@ +/* + * This file is part of the Micro Python 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. + */ + +#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_CORE_CORE_H +#define MICROPY_INCLUDED_SHARED_BINDINGS_CORE_CORE_H + +#include "py/obj.h" + +#include "common-hal/core/Core.h" + +const mp_obj_type_t core_core_type; + +uint32_t common_hal_core_core_get_frequency(void); +float common_hal_core_core_get_temperature(void); + +#endif // MICROPY_INCLUDED_SHARED_BINDINGS_CORE_CORE_H diff --git a/shared-bindings/core/__init__.c b/shared-bindings/core/__init__.c new file mode 100644 index 00000000000..887d3b515c7 --- /dev/null +++ b/shared-bindings/core/__init__.c @@ -0,0 +1,64 @@ +/* + * 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 "py/obj.h" +#include "py/mphal.h" +#include "py/runtime.h" + +#include "shared-bindings/core/__init__.h" +#include "shared-bindings/core/Core.h" + +//| :mod:`core` --- Microcontroller core chip information and control +//| =========================================================== +//| +//| .. module:: core +//| :synopsis: Core chip information and control +//| :platform: SAMD21,ESP8266 +//| +//| The `core` module defines the class `Core`. +//| It provdes microcontroller core chip information and control, such as +//| temperature and clock frequency. +//| +//| There is only one instance of Core, available in `microcontroller.core`. +//| + +//| Libraries +//| +//| .. toctree:: +//| :maxdepth: 3 +//| +//| Core +STATIC const mp_rom_map_elem_t core_module_globals_table[] = { + { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_core) }, + { MP_ROM_QSTR(MP_QSTR_Core), MP_ROM_PTR(&core_core_type) }, +}; + +STATIC MP_DEFINE_CONST_DICT(core_module_globals, core_module_globals_table); + +const mp_obj_module_t core_module = { + .base = { &mp_type_module }, + .globals = (mp_obj_dict_t*)&core_module_globals, +}; diff --git a/shared-bindings/microcontroller/core.h b/shared-bindings/core/__init__.h similarity index 76% rename from shared-bindings/microcontroller/core.h rename to shared-bindings/core/__init__.h index 86b1772175d..adc86717b2e 100644 --- a/shared-bindings/microcontroller/core.h +++ b/shared-bindings/core/__init__.h @@ -24,14 +24,7 @@ * THE SOFTWARE. */ -#ifndef __MICROPY_INCLUDED_SHARED_BINDINGS_MICROCONTROLLER___CORE___H__ -#define __MICROPY_INCLUDED_SHARED_BINDINGS_MICROCONTROLLER___CORE___H__ +#ifndef SHARED_BINDINGS_CORE_H +#define SHARED_BINDINGS_CORE_H -#include "py/obj.h" - -extern const mp_obj_base_t mcu_core_obj; - -uint32_t common_hal_mcu_core_get_frequency(void); -float common_hal_mcu_core_get_temperature(void); - -#endif // __MICROPY_INCLUDED_SHARED_BINDINGS_MICROCONTROLLER___CORE___H__ +#endif // SHARED_BINDINGS_CORE_H diff --git a/shared-bindings/index.rst b/shared-bindings/index.rst index ab92fd57c43..2ec72eca6bd 100644 --- a/shared-bindings/index.rst +++ b/shared-bindings/index.rst @@ -12,13 +12,32 @@ limited. For example, a microcontroller without analog features will not have Support Matrix --------------- -=============== ========== ========= =========== ======= ======= =========== ================= =============== ================ ======= ========= ======== ========= ======== ========= ======= ========= -Port `analogio` `audioio` `bitbangio` `board` `busio` `digitalio` `microcontroller` `multiterminal` `neopixel_write` `os` `pulseio` `random` `storage` `time` `touchio` `uheap` `usb_hid` -=============== ========== ========= =========== ======= ======= =========== ================= =============== ================ ======= ========= ======== ========= ======== ========= ======= ========= -SAMD21 **Yes** No No **Yes** **Yes** **Yes** **Yes** No **Yes** **Yes** No **Yes** **Yes** **Yes** **Yes** Debug **Yes** -SAMD21 Express **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** No **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** Debug **Yes** -ESP8266 **Yes** No **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** No **Yes** **Yes** **Yes** No Debug No -=============== ========== ========= =========== ======= ======= =========== ================= =============== ================ ======= ========= ======== ========= ======== ========= ======= ========= + + + +================= ======= ============== ======= +Module / Port SAMD21 SAMD21 Express ESP8266 +================= ======= ============== ======= +`analogio` **Yes** **Yes** **Yes** +`audioio` No **Yes** No +`bitbangio` No **Yes** **Yes** +`board` **Yes** **Yes** **Yes** +`busio` **Yes** **Yes** **Yes** +`core` **Yes** **Yes** **Partial** + (not temperature) +`digitalio` **Yes** **Yes** **Yes** +`microcontroller` **Yes** **Yes** **Yes** +`multiterminal` No No **Yes** +`neopixel_write` **Yes** **Yes** **Yes** +`nvm` No **Yes** No +`os` **Yes** **Yes** **Yes** +`pulseio` No **Yes** No +`random` **Yes** **Yes** **Yes** +`storage` **Yes** **Yes** **Yes** +`time` **Yes** **Yes** **Yes** +`touchio` **Yes** **Yes** No +`uheap` Debug Debug Debug +`usb_hid` **Yes** **Yes** No Modules --------- diff --git a/shared-bindings/microcontroller/__init__.c b/shared-bindings/microcontroller/__init__.c index a88aaa376ad..c511ffe4590 100644 --- a/shared-bindings/microcontroller/__init__.c +++ b/shared-bindings/microcontroller/__init__.c @@ -33,7 +33,6 @@ #include "py/runtime.h" #include "shared-bindings/microcontroller/__init__.h" -#include "shared-bindings/microcontroller/core.h" #include "shared-bindings/microcontroller/Pin.h" #include "common-hal/microcontroller/Pin.h" @@ -57,6 +56,12 @@ //| Pin //| +//| .. attribute:: core +//| +//| Core chip information and control, such as temperature and clock frequency. +//| This object is the sole instance of `core.Core`. +//| + //| .. method:: delay_us(delay) //| //| Dedicated delay method used for very short delays. DO NOT do long delays @@ -93,8 +98,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mcu_enable_interrupts_obj, mcu_enable_interrupt //| .. attribute:: nvm //| -//| Available non-volatile memory. Its a `nvm.ByteArray` when available or -//| ``None`` otherwise. +//| Available non-volatile memory. +//| This object is the sole instance of `nvm.ByteArray` when available or ``None`` otherwise. //| //| :mod:`microcontroller.pin` --- Microcontroller pin names @@ -114,7 +119,7 @@ const mp_obj_module_t mcu_pin_module = { STATIC const mp_rom_map_elem_t mcu_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_microcontroller) }, { MP_ROM_QSTR(MP_QSTR_delay_us), MP_ROM_PTR(&mcu_delay_us_obj) }, - { MP_ROM_QSTR(MP_QSTR_core), MP_ROM_PTR(&mcu_core_obj) }, + { MP_ROM_QSTR(MP_QSTR_core), MP_ROM_PTR(&common_hal_core_core_obj) }, { MP_ROM_QSTR(MP_QSTR_disable_interrupts), MP_ROM_PTR(&mcu_disable_interrupts_obj) }, { MP_ROM_QSTR(MP_QSTR_enable_interrupts), MP_ROM_PTR(&mcu_enable_interrupts_obj) }, #if CIRCUITPY_INTERNAL_NVM_SIZE > 0 diff --git a/shared-bindings/microcontroller/__init__.h b/shared-bindings/microcontroller/__init__.h index 9bad926cd3d..1ae90822607 100644 --- a/shared-bindings/microcontroller/__init__.h +++ b/shared-bindings/microcontroller/__init__.h @@ -30,6 +30,8 @@ #include "py/mpconfig.h" #include "py/obj.h" +#include "common-hal/core/Core.h" + extern void common_hal_mcu_delay_us(uint32_t); extern void common_hal_mcu_disable_interrupts(void); @@ -37,6 +39,9 @@ extern void common_hal_mcu_enable_interrupts(void); extern const mp_obj_dict_t mcu_pin_globals; +extern const core_core_obj_t common_hal_core_core_obj; + + #if CIRCUITPY_INTERNAL_NVM_SIZE > 0 #include "common-hal/nvm/ByteArray.h" diff --git a/shared-bindings/microcontroller/core.c b/shared-bindings/microcontroller/core.c deleted file mode 100644 index ca601a76389..00000000000 --- a/shared-bindings/microcontroller/core.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2017 Dan Halbert 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. - */ - -// Microcontroller contains pin references and microcontroller specific control -// functions. - -#include - -#include "py/obj.h" -#include "py/objproperty.h" -#include "py/runtime.h" - -#include "shared-bindings/microcontroller/core.h" - -// Forward declaration due to circularity. -const mp_obj_type_t mcu_core_type; -// there is a singleton microcontroller.core object -const mp_obj_base_t mcu_core_obj = {&mcu_core_type}; - -STATIC mp_obj_t mcu_core_obj_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { - // check arguments - mp_arg_check_num(n_args, n_kw, 0, 0, false); - - // return singleton object - return (mp_obj_t)&mcu_core_obj; -} - -//| :mod:`microcontroller.core` --- Microcontroller core information and control -//| -------------------------------------------------------- -//| -//| .. module:: microcontroller.core -//| :synopsis: Microcontroller core information and control -//| :platform: SAMD21 -//| -//| Get basic info about the code (chip) itself and control it. -//| - -//| .. attribute:: frequency -//| -//| Return the CPU operating frequency as an int, in Hz. -//| -STATIC mp_obj_t mcu_core_obj_get_frequency(mp_obj_t self) { - return mp_obj_new_int_from_uint(common_hal_mcu_core_get_frequency()); -} - -MP_DEFINE_CONST_FUN_OBJ_1(mcu_core_get_frequency_obj, mcu_core_obj_get_frequency); - -const mp_obj_property_t mcu_core_frequency_obj = { - .base.type = &mp_type_property, - .proxy = {(mp_obj_t)&mcu_core_get_frequency_obj, // getter - (mp_obj_t)&mp_const_none_obj, // no setter - (mp_obj_t)&mp_const_none_obj, // no deleter - }, -}; - -//| .. attribute:: temperature -//| -//| Return the core (on-chip) temperature, in Celsius. -//| -STATIC mp_obj_t mcu_core_obj_get_temperature(mp_obj_t self) { - return mp_obj_new_float(common_hal_mcu_core_get_temperature()); -} - -MP_DEFINE_CONST_FUN_OBJ_1(mcu_core_get_temperature_obj, mcu_core_obj_get_temperature); - -const mp_obj_property_t mcu_core_temperature_obj = { - .base.type = &mp_type_property, - .proxy = {(mp_obj_t)&mcu_core_get_temperature_obj, // getter - (mp_obj_t)&mp_const_none_obj, // no setter - (mp_obj_t)&mp_const_none_obj, // no deleter - }, -}; - -STATIC const mp_rom_map_elem_t mcu_core_obj_locals_dict_table[] = { - { MP_ROM_QSTR(MP_QSTR_frequency), MP_ROM_PTR(&mcu_core_frequency_obj) }, - { MP_ROM_QSTR(MP_QSTR_temperature), MP_ROM_PTR(&mcu_core_temperature_obj) }, -}; - -STATIC MP_DEFINE_CONST_DICT(mcu_core_obj_locals_dict, mcu_core_obj_locals_dict_table); - -const mp_obj_type_t mcu_core_type = { - { &mp_type_type }, - .name = MP_QSTR_core, - .make_new = mcu_core_obj_make_new, - .locals_dict = (mp_obj_t)&mcu_core_obj_locals_dict, -}; - - - diff --git a/shared-bindings/nvm/ByteArray.c b/shared-bindings/nvm/ByteArray.c index 0ba511a7799..6f67a74a95d 100644 --- a/shared-bindings/nvm/ByteArray.c +++ b/shared-bindings/nvm/ByteArray.c @@ -46,11 +46,11 @@ //| .. class:: ByteArray() //| -//| Not currently dynamically supported. Access one through `microcontroller.nvm`. +//| Not currently dynamically supported. Access the sole instance through `microcontroller.nvm`. //| STATIC mp_obj_t nvm_bytearray_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) { - return mp_const_none; + mp_raise_TypeError("cannot be created: use instance in microcontroller.nvm"); } //| .. method:: __len__() From 299a82d0b17a2958b3cf2c454ee00fa99da59417 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Tue, 29 Aug 2017 22:21:51 -0400 Subject: [PATCH 07/11] Fix documentation glitches --- shared-bindings/core/Core.c | 6 +++++- shared-bindings/index.rst | 6 ++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/shared-bindings/core/Core.c b/shared-bindings/core/Core.c index 9d3e68646fb..584ceae4b11 100644 --- a/shared-bindings/core/Core.c +++ b/shared-bindings/core/Core.c @@ -35,7 +35,7 @@ //| .. currentmodule:: core //| -//| :class:Core` --- Microcontroller core information and control +//| :class:`Core` --- Microcontroller core information and control //| -------------------------------------------------------- //| //| Get basic info about the code (chip) itself and control it. @@ -50,6 +50,10 @@ //| print(microcontroller.core.temperature) //| +//| .. class:: Core() +//| +//| You cannot currently create an instance of `Core`. Use `microcontroller.core` to access +//| the sole instance available. STATIC mp_obj_t core_core_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { diff --git a/shared-bindings/index.rst b/shared-bindings/index.rst index 2ec72eca6bd..6ef33e751ba 100644 --- a/shared-bindings/index.rst +++ b/shared-bindings/index.rst @@ -12,9 +12,6 @@ limited. For example, a microcontroller without analog features will not have Support Matrix --------------- - - - ================= ======= ============== ======= Module / Port SAMD21 SAMD21 Express ESP8266 ================= ======= ============== ======= @@ -24,7 +21,7 @@ Module / Port SAMD21 SAMD21 Express ESP8266 `board` **Yes** **Yes** **Yes** `busio` **Yes** **Yes** **Yes** `core` **Yes** **Yes** **Partial** - (not temperature) + (.temperature not available) `digitalio` **Yes** **Yes** **Yes** `microcontroller` **Yes** **Yes** **Yes** `multiterminal` No No **Yes** @@ -38,6 +35,7 @@ Module / Port SAMD21 SAMD21 Express ESP8266 `touchio` **Yes** **Yes** No `uheap` Debug Debug Debug `usb_hid` **Yes** **Yes** No +================= ======= ============== ======= Modules --------- From 214eff627e6013aff5e54346a0a7da33ce514417 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Wed, 30 Aug 2017 09:52:05 -0700 Subject: [PATCH 08/11] Typo --- atmel-samd/common-hal/microcontroller/__init__.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atmel-samd/common-hal/microcontroller/__init__.c b/atmel-samd/common-hal/microcontroller/__init__.c index 636ec0b34f9..abf8b2535e2 100644 --- a/atmel-samd/common-hal/microcontroller/__init__.c +++ b/atmel-samd/common-hal/microcontroller/__init__.c @@ -61,7 +61,7 @@ core_core_obj_t common_hal_core_core_obj = { // NVM is only available on Express boards for now. #if CIRCUITPY_INTERNAL_NVM_SIZE > 0 -// The singleton nvm.ByteAray object. +// The singleton nvm.ByteArray object. nvm_bytearray_obj_t common_hal_mcu_nvm_obj = { .base = { .type = &nvm_bytearray_type, From 1b5a07c97e78441bb37622298316f0378cc8c159 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Wed, 30 Aug 2017 09:52:57 -0700 Subject: [PATCH 09/11] Copyright year --- esp8266/common-hal/core/Core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esp8266/common-hal/core/Core.c b/esp8266/common-hal/core/Core.c index 8056f3ead1d..dc558314909 100644 --- a/esp8266/common-hal/core/Core.c +++ b/esp8266/common-hal/core/Core.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Dan Halbert for Adafruit Industries + * Copyright (c) 2017 Dan Halbert 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 From 20f52eeb3db4f3462c453186e15758e571e2d5c5 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Wed, 30 Aug 2017 16:51:24 -0400 Subject: [PATCH 10/11] Rename Core -> Processor; microcontroller.core-> microcontroller.cpu --- atmel-samd/Makefile | 4 +- .../common-hal/microcontroller/__init__.c | 8 +-- .../{core/Core.c => processor/Processor.c} | 8 +-- .../common-hal/processor/Processor.h | 8 +-- .../common-hal/{core => processor}/__init__.c | 0 atmel-samd/mpconfigport.h | 4 +- esp8266/Makefile | 4 +- esp8266/common-hal/microcontroller/__init__.c | 8 +-- .../{core/Core.c => processor/Processor.c} | 6 +- .../common-hal/processor/Processor.h | 8 +-- .../common-hal/{core => processor}/__init__.c | 0 esp8266/mpconfigport.h | 4 +- shared-bindings/index.rst | 4 +- shared-bindings/microcontroller/__init__.c | 10 +-- shared-bindings/microcontroller/__init__.h | 5 +- .../{core/Core.c => processor/Processor.c} | 63 +++++++++---------- .../{core/Core.h => processor/Processor.h} | 14 ++--- .../{core => processor}/__init__.c | 32 +++++----- .../{core => processor}/__init__.h | 6 +- 19 files changed, 98 insertions(+), 98 deletions(-) rename atmel-samd/common-hal/{core/Core.c => processor/Processor.c} (97%) rename esp8266/common-hal/core/Core.h => atmel-samd/common-hal/processor/Processor.h (86%) rename atmel-samd/common-hal/{core => processor}/__init__.c (100%) rename esp8266/common-hal/{core/Core.c => processor/Processor.c} (89%) rename atmel-samd/common-hal/core/Core.h => esp8266/common-hal/processor/Processor.h (86%) rename esp8266/common-hal/{core => processor}/__init__.c (100%) rename shared-bindings/{core/Core.c => processor/Processor.c} (54%) rename shared-bindings/{core/Core.h => processor/Processor.h} (77%) rename shared-bindings/{core => processor}/__init__.c (61%) rename shared-bindings/{core => processor}/__init__.h (91%) diff --git a/atmel-samd/Makefile b/atmel-samd/Makefile index 5474bba699c..2aae34fbee1 100644 --- a/atmel-samd/Makefile +++ b/atmel-samd/Makefile @@ -246,8 +246,6 @@ SRC_COMMON_HAL = \ busio/I2C.c \ busio/SPI.c \ busio/UART.c \ - core/__init__.c \ - core/Core.c \ digitalio/__init__.c \ digitalio/DigitalInOut.c \ microcontroller/__init__.c \ @@ -256,6 +254,8 @@ SRC_COMMON_HAL = \ nvm/__init__.c \ nvm/ByteArray.c \ os/__init__.c \ + processor/__init__.c \ + processor/Processor.c \ pulseio/__init__.c \ pulseio/PulseIn.c \ pulseio/PulseOut.c \ diff --git a/atmel-samd/common-hal/microcontroller/__init__.c b/atmel-samd/common-hal/microcontroller/__init__.c index abf8b2535e2..b600c4f1d87 100644 --- a/atmel-samd/common-hal/microcontroller/__init__.c +++ b/atmel-samd/common-hal/microcontroller/__init__.c @@ -30,7 +30,7 @@ #include "samd21_pins.h" #include "shared-bindings/nvm/ByteArray.h" -#include "shared-bindings/core/Core.h" +#include "shared-bindings/processor/Processor.h" void common_hal_mcu_delay_us(uint32_t delay) { mp_hal_delay_us(delay); @@ -51,11 +51,11 @@ void common_hal_mcu_enable_interrupts(void) { cpu_irq_restore(irq_flags); } -// The singleton core.Core object. +// The singleton processor.Processor object, bound to microcontroller.cpu // It currently only has properties, and no state. -core_core_obj_t common_hal_core_core_obj = { +processor_cpu_obj_t common_hal_processor_cpu_obj = { .base = { - .type = &core_core_type, + .type = &processor_cpu_type, }, }; diff --git a/atmel-samd/common-hal/core/Core.c b/atmel-samd/common-hal/processor/Processor.c similarity index 97% rename from atmel-samd/common-hal/core/Core.c rename to atmel-samd/common-hal/processor/Processor.c index d94f564db1c..d984cb3b58b 100644 --- a/atmel-samd/common-hal/core/Core.c +++ b/atmel-samd/common-hal/processor/Processor.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Dan Halbert for Adafruit Industries + * Copyright (c) 2017 Dan Halbert 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 @@ -61,7 +61,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#include "common-hal/core/Core.h" +#include "common-hal/processor/Processor.h" // Don't reorder these includes because they are dependencies of adc_feature.h. // They should really be included by adc_feature.h. @@ -197,7 +197,7 @@ STATIC float calculate_temperature(uint16_t raw_code, nvm_calibration_data_t *ca // External interface. // -float common_hal_core_core_get_temperature(void) { +float common_hal_processor_cpu_get_temperature(void) { struct adc_module adc_instance_struct; system_voltage_reference_enable(SYSTEM_VOLTAGE_REFERENCE_TEMPSENSE); @@ -230,6 +230,6 @@ float common_hal_core_core_get_temperature(void) { } -uint32_t common_hal_core_core_get_frequency(void) { +uint32_t common_hal_processor_cpu_get_frequency(void) { return system_cpu_clock_get_hz(); } diff --git a/esp8266/common-hal/core/Core.h b/atmel-samd/common-hal/processor/Processor.h similarity index 86% rename from esp8266/common-hal/core/Core.h rename to atmel-samd/common-hal/processor/Processor.h index 9f089f6c148..68c4894c895 100644 --- a/esp8266/common-hal/core/Core.h +++ b/atmel-samd/common-hal/processor/Processor.h @@ -24,14 +24,14 @@ * THE SOFTWARE. */ -#ifndef MICROPY_INCLUDED_ESP8266_COMMON_HAL_CORE_CORE_H -#define MICROPY_INCLUDED_ESP8266_COMMON_HAL_CORE_CORE_H +#ifndef MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_PROCESSOR_CPU_H +#define MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_PROCESSOR_CPU_H #include "py/obj.h" typedef struct { mp_obj_base_t base; // Stores no state currently. -} core_core_obj_t; +} processor_cpu_obj_t; -#endif // MICROPY_INCLUDED_ESP8266_COMMON_HAL_CORE_CORE_H +#endif // MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_PROCESSOR_CPU_H diff --git a/atmel-samd/common-hal/core/__init__.c b/atmel-samd/common-hal/processor/__init__.c similarity index 100% rename from atmel-samd/common-hal/core/__init__.c rename to atmel-samd/common-hal/processor/__init__.c diff --git a/atmel-samd/mpconfigport.h b/atmel-samd/mpconfigport.h index 376084c9f95..4bbe15b6b78 100644 --- a/atmel-samd/mpconfigport.h +++ b/atmel-samd/mpconfigport.h @@ -143,7 +143,7 @@ extern const struct _mp_obj_module_t digitalio_module; extern const struct _mp_obj_module_t pulseio_module; extern const struct _mp_obj_module_t busio_module; extern const struct _mp_obj_module_t board_module; -extern const struct _mp_obj_module_t core_module; +extern const struct _mp_obj_module_t processor_module; extern const struct _mp_obj_module_t os_module; extern const struct _mp_obj_module_t random_module; extern const struct _mp_obj_module_t storage_module; @@ -197,7 +197,7 @@ extern const struct _mp_obj_module_t usb_hid_module; { MP_OBJ_NEW_QSTR(MP_QSTR_digitalio), (mp_obj_t)&digitalio_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_busio), (mp_obj_t)&busio_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_board), (mp_obj_t)&board_module }, \ - { MP_OBJ_NEW_QSTR(MP_QSTR_core), (mp_obj_t)&core_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_processor), (mp_obj_t)&processor_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_os), (mp_obj_t)&os_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_random), (mp_obj_t)&random_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_storage), (mp_obj_t)&storage_module }, \ diff --git a/esp8266/Makefile b/esp8266/Makefile index 8fc8f22e644..9be6a8972c1 100644 --- a/esp8266/Makefile +++ b/esp8266/Makefile @@ -101,11 +101,11 @@ SRC_C = \ SRC_COMMON_HAL = \ microcontroller/__init__.c \ microcontroller/Pin.c \ + processor/__init__.c \ + processor/Processor.c \ analogio/__init__.c \ analogio/AnalogIn.c \ analogio/AnalogOut.c \ - core/__init__.c \ - core/Core.c \ digitalio/__init__.c \ digitalio/DigitalInOut.c \ pulseio/__init__.c \ diff --git a/esp8266/common-hal/microcontroller/__init__.c b/esp8266/common-hal/microcontroller/__init__.c index 3db8efba90c..c3b582ce8db 100644 --- a/esp8266/common-hal/microcontroller/__init__.c +++ b/esp8266/common-hal/microcontroller/__init__.c @@ -28,7 +28,7 @@ #include "common-hal/microcontroller/Pin.h" #include "shared-bindings/microcontroller/Pin.h" -#include "shared-bindings/core/Core.h" +#include "shared-bindings/processor/Processor.h" #include "eagle_soc.h" #include "ets_alt_task.h" @@ -54,11 +54,11 @@ void common_hal_mcu_enable_interrupts() { enable_irq(saved_interrupt_state & ~(1 << ETS_LOOP_ITER_BIT)); } -// The singleton core.Core object. +// The singleton processor.Processor object, returned by microcontroller.cpu // It currently only has properties, and no state. -core_core_obj_t common_hal_core_core_obj = { +processor_cpu_obj_t common_hal_processor_cpu_obj = { .base = { - .type = &core_core_type, + .type = &processor_cpu_type, }, }; diff --git a/esp8266/common-hal/core/Core.c b/esp8266/common-hal/processor/Processor.c similarity index 89% rename from esp8266/common-hal/core/Core.c rename to esp8266/common-hal/processor/Processor.c index dc558314909..0e58b40c4ac 100644 --- a/esp8266/common-hal/core/Core.c +++ b/esp8266/common-hal/processor/Processor.c @@ -24,17 +24,17 @@ * THE SOFTWARE. */ -#include "common-hal/core/Core.h" +#include "common-hal/processor/Processor.h" #include #include "esp_mphal.h" -float common_hal_core_core_get_temperature(void) { +float common_hal_processor_cpu_get_temperature(void) { return NAN; } -uint32_t common_hal_core_core_get_frequency(void) { +uint32_t common_hal_processor_cpu_get_frequency(void) { return mp_hal_get_cpu_freq(); } diff --git a/atmel-samd/common-hal/core/Core.h b/esp8266/common-hal/processor/Processor.h similarity index 86% rename from atmel-samd/common-hal/core/Core.h rename to esp8266/common-hal/processor/Processor.h index 37fac02b168..2893f991136 100644 --- a/atmel-samd/common-hal/core/Core.h +++ b/esp8266/common-hal/processor/Processor.h @@ -24,14 +24,14 @@ * THE SOFTWARE. */ -#ifndef MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_CORE_CORE_H -#define MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_CORE_CORE_H +#ifndef MICROPY_INCLUDED_ESP8266_COMMON_HAL_PROCESSOR_CPU_H +#define MICROPY_INCLUDED_ESP8266_COMMON_HAL_PROCESSOR_CPU_H #include "py/obj.h" typedef struct { mp_obj_base_t base; // Stores no state currently. -} core_core_obj_t; +} processor_cpu_obj_t; -#endif // MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_CORE_CORE_H +#endif // MICROPY_INCLUDED_ESP8266_COMMON_HAL_PROCESSOR_CPU_H diff --git a/esp8266/common-hal/core/__init__.c b/esp8266/common-hal/processor/__init__.c similarity index 100% rename from esp8266/common-hal/core/__init__.c rename to esp8266/common-hal/processor/__init__.c diff --git a/esp8266/mpconfigport.h b/esp8266/mpconfigport.h index dcdfc38637e..a7e63abd473 100644 --- a/esp8266/mpconfigport.h +++ b/esp8266/mpconfigport.h @@ -164,7 +164,7 @@ extern const struct _mp_obj_module_t mp_module_machine; extern const struct _mp_obj_module_t mp_module_onewire; extern const struct _mp_obj_module_t microcontroller_module; extern const struct _mp_obj_module_t board_module; -extern const struct _mp_obj_module_t core_module; +extern const struct _mp_obj_module_t processor_module; extern const struct _mp_obj_module_t analogio_module; extern const struct _mp_obj_module_t digitalio_module; extern const struct _mp_obj_module_t pulseio_module; @@ -182,7 +182,7 @@ extern const struct _mp_obj_module_t multiterminal_module; { MP_ROM_QSTR(MP_QSTR__onewire), MP_ROM_PTR(&mp_module_onewire) }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_microcontroller), (mp_obj_t)µcontroller_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_board), (mp_obj_t)&board_module }, \ - { MP_OBJ_NEW_QSTR(MP_QSTR_core), (mp_obj_t)&core_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_processor), (mp_obj_t)&processor_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_analogio), (mp_obj_t)&analogio_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_digitalio), (mp_obj_t)&digitalio_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_pulseio), (mp_obj_t)&pulseio_module }, \ diff --git a/shared-bindings/index.rst b/shared-bindings/index.rst index 6ef33e751ba..b364cc0d21a 100644 --- a/shared-bindings/index.rst +++ b/shared-bindings/index.rst @@ -20,14 +20,14 @@ Module / Port SAMD21 SAMD21 Express ESP8266 `bitbangio` No **Yes** **Yes** `board` **Yes** **Yes** **Yes** `busio` **Yes** **Yes** **Yes** -`core` **Yes** **Yes** **Partial** - (.temperature not available) `digitalio` **Yes** **Yes** **Yes** `microcontroller` **Yes** **Yes** **Yes** `multiterminal` No No **Yes** `neopixel_write` **Yes** **Yes** **Yes** `nvm` No **Yes** No `os` **Yes** **Yes** **Yes** +`processor` **Yes** **Yes** **Partial** + (.temperature not available) `pulseio` No **Yes** No `random` **Yes** **Yes** **Yes** `storage` **Yes** **Yes** **Yes** diff --git a/shared-bindings/microcontroller/__init__.c b/shared-bindings/microcontroller/__init__.c index c511ffe4590..9cd6d4dc335 100644 --- a/shared-bindings/microcontroller/__init__.c +++ b/shared-bindings/microcontroller/__init__.c @@ -38,7 +38,7 @@ #include "py/runtime.h" -//| :mod:`microcontroller` --- Pin references and core functionality +//| :mod:`microcontroller` --- Pin references and cpu functionality //| ================================================================ //| //| .. module:: microcontroller @@ -56,10 +56,10 @@ //| Pin //| -//| .. attribute:: core +//| .. attribute:: cpu //| -//| Core chip information and control, such as temperature and clock frequency. -//| This object is the sole instance of `core.Core`. +//| CPU information and control, such as temperature and clock frequency. +//| This object is the sole instance of `processor.Processor`. //| //| .. method:: delay_us(delay) @@ -119,7 +119,7 @@ const mp_obj_module_t mcu_pin_module = { STATIC const mp_rom_map_elem_t mcu_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_microcontroller) }, { MP_ROM_QSTR(MP_QSTR_delay_us), MP_ROM_PTR(&mcu_delay_us_obj) }, - { MP_ROM_QSTR(MP_QSTR_core), MP_ROM_PTR(&common_hal_core_core_obj) }, + { MP_ROM_QSTR(MP_QSTR_cpu), MP_ROM_PTR(&common_hal_processor_cpu_obj) }, { MP_ROM_QSTR(MP_QSTR_disable_interrupts), MP_ROM_PTR(&mcu_disable_interrupts_obj) }, { MP_ROM_QSTR(MP_QSTR_enable_interrupts), MP_ROM_PTR(&mcu_enable_interrupts_obj) }, #if CIRCUITPY_INTERNAL_NVM_SIZE > 0 diff --git a/shared-bindings/microcontroller/__init__.h b/shared-bindings/microcontroller/__init__.h index 1ae90822607..a33bb0313cd 100644 --- a/shared-bindings/microcontroller/__init__.h +++ b/shared-bindings/microcontroller/__init__.h @@ -1,3 +1,4 @@ + /* * This file is part of the MicroPython project, http://micropython.org/ * @@ -30,7 +31,7 @@ #include "py/mpconfig.h" #include "py/obj.h" -#include "common-hal/core/Core.h" +#include "common-hal/processor/Processor.h" extern void common_hal_mcu_delay_us(uint32_t); @@ -39,7 +40,7 @@ extern void common_hal_mcu_enable_interrupts(void); extern const mp_obj_dict_t mcu_pin_globals; -extern const core_core_obj_t common_hal_core_core_obj; +extern const processor_cpu_obj_t common_hal_processor_cpu_obj; #if CIRCUITPY_INTERNAL_NVM_SIZE > 0 diff --git a/shared-bindings/core/Core.c b/shared-bindings/processor/Processor.c similarity index 54% rename from shared-bindings/core/Core.c rename to shared-bindings/processor/Processor.c index 584ceae4b11..36f9264b57c 100644 --- a/shared-bindings/core/Core.c +++ b/shared-bindings/processor/Processor.c @@ -28,51 +28,50 @@ #include #include "py/objproperty.h" -#include "shared-bindings/core/Core.h" +#include "shared-bindings/processor/Processor.h" #include "py/objproperty.h" #include "py/runtime.h" -//| .. currentmodule:: core +//| .. currentmodule:: processor //| -//| :class:`Core` --- Microcontroller core information and control +//| :class:`Processor` --- Microcontroller CPU information and control //| -------------------------------------------------------- //| -//| Get basic info about the code (chip) itself and control it. +//| Get basic info about the microcontroller CPU and control it. //| -//| You cannot create an instance of Core, but you can access the sole instance available -//| by importing the microcontroller module. +//| You cannot create an instance of Processor, but you can access the sole instance available +//| by importing the microcontroller module and using its cpu attribute. //| //| Usage:: //| //| import microcontroller -//| print(microcontroller.core.frequency) -//| print(microcontroller.core.temperature) -//| +//| print(microcontroller.cpu.frequency) +//| print(microcontroller.cpu.temperature) -//| .. class:: Core() +//| .. class:: Processor() //| -//| You cannot currently create an instance of `Core`. Use `microcontroller.core` to access +//| You cannot currently create an instance of `Processor`. Use `microcontroller.cpu` to access //| the sole instance available. -STATIC mp_obj_t core_core_make_new(const mp_obj_type_t *type, +STATIC mp_obj_t processor_cpu_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { - mp_raise_TypeError("cannot be created: use instance in microcontroller.core"); + mp_raise_TypeError("cannot be created: use instance in microcontroller.cpu"); } //| .. attribute:: frequency //| //| Return the CPU operating frequency as an int, in Hz. //| -STATIC mp_obj_t core_core_get_frequency(mp_obj_t self) { - return mp_obj_new_int_from_uint(common_hal_core_core_get_frequency()); +STATIC mp_obj_t processor_cpu_get_frequency(mp_obj_t self) { + return mp_obj_new_int_from_uint(common_hal_processor_cpu_get_frequency()); } -MP_DEFINE_CONST_FUN_OBJ_1(core_core_get_frequency_obj, core_core_get_frequency); +MP_DEFINE_CONST_FUN_OBJ_1(processor_cpu_get_frequency_obj, processor_cpu_get_frequency); -const mp_obj_property_t core_core_frequency_obj = { +const mp_obj_property_t processor_cpu_frequency_obj = { .base.type = &mp_type_property, - .proxy = {(mp_obj_t)&core_core_get_frequency_obj, // getter + .proxy = {(mp_obj_t)&processor_cpu_get_frequency_obj, // getter (mp_obj_t)&mp_const_none_obj, // no setter (mp_obj_t)&mp_const_none_obj, // no deleter }, @@ -80,34 +79,34 @@ const mp_obj_property_t core_core_frequency_obj = { //| .. attribute:: temperature //| -//| Return the core (on-chip) temperature, in Celsius, as a float. +//| Return the on-chip temperature, in Celsius, as a float. //| If the temperature is not available, return None. //| -STATIC mp_obj_t core_core_get_temperature(mp_obj_t self) { - float temperature = common_hal_core_core_get_temperature(); +STATIC mp_obj_t processor_cpu_get_temperature(mp_obj_t self) { + float temperature = common_hal_processor_cpu_get_temperature(); return isnan(temperature) ? mp_const_none : mp_obj_new_float(temperature); } -MP_DEFINE_CONST_FUN_OBJ_1(core_core_get_temperature_obj, core_core_get_temperature); +MP_DEFINE_CONST_FUN_OBJ_1(processor_cpu_get_temperature_obj, processor_cpu_get_temperature); -const mp_obj_property_t core_core_temperature_obj = { +const mp_obj_property_t processor_cpu_temperature_obj = { .base.type = &mp_type_property, - .proxy = {(mp_obj_t)&core_core_get_temperature_obj, // getter + .proxy = {(mp_obj_t)&processor_cpu_get_temperature_obj, // getter (mp_obj_t)&mp_const_none_obj, // no setter (mp_obj_t)&mp_const_none_obj, // no deleter }, }; -STATIC const mp_rom_map_elem_t core_core_locals_dict_table[] = { - { MP_ROM_QSTR(MP_QSTR_frequency), MP_ROM_PTR(&core_core_frequency_obj) }, - { MP_ROM_QSTR(MP_QSTR_temperature), MP_ROM_PTR(&core_core_temperature_obj) }, +STATIC const mp_rom_map_elem_t processor_cpu_locals_dict_table[] = { + { MP_ROM_QSTR(MP_QSTR_frequency), MP_ROM_PTR(&processor_cpu_frequency_obj) }, + { MP_ROM_QSTR(MP_QSTR_temperature), MP_ROM_PTR(&processor_cpu_temperature_obj) }, }; -STATIC MP_DEFINE_CONST_DICT(core_core_locals_dict, core_core_locals_dict_table); +STATIC MP_DEFINE_CONST_DICT(processor_cpu_locals_dict, processor_cpu_locals_dict_table); -const mp_obj_type_t core_core_type = { +const mp_obj_type_t processor_cpu_type = { { &mp_type_type }, - .name = MP_QSTR_core, - .make_new = core_core_make_new, - .locals_dict = (mp_obj_t)&core_core_locals_dict, + .name = MP_QSTR_Processor, + .make_new = processor_cpu_make_new, + .locals_dict = (mp_obj_t)&processor_cpu_locals_dict, }; diff --git a/shared-bindings/core/Core.h b/shared-bindings/processor/Processor.h similarity index 77% rename from shared-bindings/core/Core.h rename to shared-bindings/processor/Processor.h index 16171e867a5..4e85f0c7fa6 100644 --- a/shared-bindings/core/Core.h +++ b/shared-bindings/processor/Processor.h @@ -24,16 +24,16 @@ * THE SOFTWARE. */ -#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_CORE_CORE_H -#define MICROPY_INCLUDED_SHARED_BINDINGS_CORE_CORE_H +#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_PROCESSOR_CPU_H +#define MICROPY_INCLUDED_SHARED_BINDINGS_PROCESSOR_CPU_H #include "py/obj.h" -#include "common-hal/core/Core.h" +#include "common-hal/processor/Processor.h" -const mp_obj_type_t core_core_type; +const mp_obj_type_t processor_cpu_type; -uint32_t common_hal_core_core_get_frequency(void); -float common_hal_core_core_get_temperature(void); +uint32_t common_hal_processor_cpu_get_frequency(void); +float common_hal_processor_cpu_get_temperature(void); -#endif // MICROPY_INCLUDED_SHARED_BINDINGS_CORE_CORE_H +#endif // MICROPY_INCLUDED_SHARED_BINDINGS_PROCESSOR_CPU_H diff --git a/shared-bindings/core/__init__.c b/shared-bindings/processor/__init__.c similarity index 61% rename from shared-bindings/core/__init__.c rename to shared-bindings/processor/__init__.c index 887d3b515c7..c6469dc5ac9 100644 --- a/shared-bindings/core/__init__.c +++ b/shared-bindings/processor/__init__.c @@ -28,21 +28,21 @@ #include "py/mphal.h" #include "py/runtime.h" -#include "shared-bindings/core/__init__.h" -#include "shared-bindings/core/Core.h" +#include "shared-bindings/processor/__init__.h" +#include "shared-bindings/processor/Processor.h" -//| :mod:`core` --- Microcontroller core chip information and control -//| =========================================================== +//| :mod:`processor` --- Microcontroller CPU information and control +//| ================================================================ //| -//| .. module:: core -//| :synopsis: Core chip information and control +//| .. module:: processor +//| :synopsis: CPU information and control //| :platform: SAMD21,ESP8266 //| -//| The `core` module defines the class `Core`. -//| It provdes microcontroller core chip information and control, such as +//| The `processor` module defines the class `Processor`. +//| It provides microcontroller CPU information and control, such as //| temperature and clock frequency. //| -//| There is only one instance of Core, available in `microcontroller.core`. +//| There is only one instance of Processor, available in `microcontroller.cpu`. //| //| Libraries @@ -50,15 +50,15 @@ //| .. toctree:: //| :maxdepth: 3 //| -//| Core -STATIC const mp_rom_map_elem_t core_module_globals_table[] = { - { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_core) }, - { MP_ROM_QSTR(MP_QSTR_Core), MP_ROM_PTR(&core_core_type) }, +//| Processor +STATIC const mp_rom_map_elem_t processor_module_globals_table[] = { + { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_processor) }, + { MP_ROM_QSTR(MP_QSTR_Processor), MP_ROM_PTR(&processor_cpu_type) }, }; -STATIC MP_DEFINE_CONST_DICT(core_module_globals, core_module_globals_table); +STATIC MP_DEFINE_CONST_DICT(processor_module_globals, processor_module_globals_table); -const mp_obj_module_t core_module = { +const mp_obj_module_t processor_module = { .base = { &mp_type_module }, - .globals = (mp_obj_dict_t*)&core_module_globals, + .globals = (mp_obj_dict_t*)&processor_module_globals, }; diff --git a/shared-bindings/core/__init__.h b/shared-bindings/processor/__init__.h similarity index 91% rename from shared-bindings/core/__init__.h rename to shared-bindings/processor/__init__.h index adc86717b2e..dab8594be60 100644 --- a/shared-bindings/core/__init__.h +++ b/shared-bindings/processor/__init__.h @@ -24,7 +24,7 @@ * THE SOFTWARE. */ -#ifndef SHARED_BINDINGS_CORE_H -#define SHARED_BINDINGS_CORE_H +#ifndef SHARED_BINDINGS_PROCESSOR_H +#define SHARED_BINDINGS_PROCESSOR_H -#endif // SHARED_BINDINGS_CORE_H +#endif // SHARED_BINDINGS_PROCESSOR_H From 4113ba1494d75312a835a395cd42dc6c86d1e30a Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Thu, 31 Aug 2017 11:05:22 -0400 Subject: [PATCH 11/11] Make `Processor` be a class in `microcontroller`. Change `core` to `cpu`. --- atmel-samd/Makefile | 3 +- .../Processor.c | 6 +- .../Processor.h | 8 +-- .../common-hal/microcontroller/__init__.c | 8 +-- atmel-samd/common-hal/processor/__init__.c | 27 -------- atmel-samd/mpconfigport.h | 2 - esp8266/Makefile | 3 +- .../Processor.c | 6 +- .../Processor.h | 8 +-- esp8266/common-hal/microcontroller/__init__.c | 12 ++-- esp8266/common-hal/processor/__init__.c | 27 -------- esp8266/mpconfigport.h | 2 - shared-bindings/index.rst | 2 - .../Processor.c | 57 ++++++++--------- .../Processor.h | 14 ++-- shared-bindings/microcontroller/__init__.c | 12 +++- shared-bindings/microcontroller/__init__.h | 4 +- shared-bindings/nvm/ByteArray.c | 5 -- shared-bindings/processor/__init__.c | 64 ------------------- shared-bindings/processor/__init__.h | 30 --------- 20 files changed, 70 insertions(+), 230 deletions(-) rename atmel-samd/common-hal/{processor => microcontroller}/Processor.c (98%) rename atmel-samd/common-hal/{processor => microcontroller}/Processor.h (84%) delete mode 100644 atmel-samd/common-hal/processor/__init__.c rename esp8266/common-hal/{processor => microcontroller}/Processor.c (89%) rename esp8266/common-hal/{processor => microcontroller}/Processor.h (84%) delete mode 100644 esp8266/common-hal/processor/__init__.c rename shared-bindings/{processor => microcontroller}/Processor.c (57%) rename shared-bindings/{processor => microcontroller}/Processor.h (75%) delete mode 100644 shared-bindings/processor/__init__.c delete mode 100644 shared-bindings/processor/__init__.h diff --git a/atmel-samd/Makefile b/atmel-samd/Makefile index 2aae34fbee1..6fb2f1d67df 100644 --- a/atmel-samd/Makefile +++ b/atmel-samd/Makefile @@ -250,12 +250,11 @@ SRC_COMMON_HAL = \ digitalio/DigitalInOut.c \ microcontroller/__init__.c \ microcontroller/Pin.c \ + microcontroller/Processor.c \ neopixel_write/__init__.c \ nvm/__init__.c \ nvm/ByteArray.c \ os/__init__.c \ - processor/__init__.c \ - processor/Processor.c \ pulseio/__init__.c \ pulseio/PulseIn.c \ pulseio/PulseOut.c \ diff --git a/atmel-samd/common-hal/processor/Processor.c b/atmel-samd/common-hal/microcontroller/Processor.c similarity index 98% rename from atmel-samd/common-hal/processor/Processor.c rename to atmel-samd/common-hal/microcontroller/Processor.c index d984cb3b58b..a1d5e8c1272 100644 --- a/atmel-samd/common-hal/processor/Processor.c +++ b/atmel-samd/common-hal/microcontroller/Processor.c @@ -61,7 +61,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#include "common-hal/processor/Processor.h" +#include "common-hal/microcontroller/Processor.h" // Don't reorder these includes because they are dependencies of adc_feature.h. // They should really be included by adc_feature.h. @@ -197,7 +197,7 @@ STATIC float calculate_temperature(uint16_t raw_code, nvm_calibration_data_t *ca // External interface. // -float common_hal_processor_cpu_get_temperature(void) { +float common_hal_mcu_processor_get_temperature(void) { struct adc_module adc_instance_struct; system_voltage_reference_enable(SYSTEM_VOLTAGE_REFERENCE_TEMPSENSE); @@ -230,6 +230,6 @@ float common_hal_processor_cpu_get_temperature(void) { } -uint32_t common_hal_processor_cpu_get_frequency(void) { +uint32_t common_hal_mcu_processor_get_frequency(void) { return system_cpu_clock_get_hz(); } diff --git a/atmel-samd/common-hal/processor/Processor.h b/atmel-samd/common-hal/microcontroller/Processor.h similarity index 84% rename from atmel-samd/common-hal/processor/Processor.h rename to atmel-samd/common-hal/microcontroller/Processor.h index 68c4894c895..81f92bb0f6c 100644 --- a/atmel-samd/common-hal/processor/Processor.h +++ b/atmel-samd/common-hal/microcontroller/Processor.h @@ -24,14 +24,14 @@ * THE SOFTWARE. */ -#ifndef MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_PROCESSOR_CPU_H -#define MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_PROCESSOR_CPU_H +#ifndef MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_MICROCONTROLLER_PROCESSOR_H +#define MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_MICROCONTROLLER_PROCESSOR_H #include "py/obj.h" typedef struct { mp_obj_base_t base; // Stores no state currently. -} processor_cpu_obj_t; +} mcu_processor_obj_t; -#endif // MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_PROCESSOR_CPU_H +#endif // MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_MICROCONTROLLER_PROCESSOR_H diff --git a/atmel-samd/common-hal/microcontroller/__init__.c b/atmel-samd/common-hal/microcontroller/__init__.c index b600c4f1d87..84cea008b8d 100644 --- a/atmel-samd/common-hal/microcontroller/__init__.c +++ b/atmel-samd/common-hal/microcontroller/__init__.c @@ -30,7 +30,7 @@ #include "samd21_pins.h" #include "shared-bindings/nvm/ByteArray.h" -#include "shared-bindings/processor/Processor.h" +#include "shared-bindings/microcontroller/Processor.h" void common_hal_mcu_delay_us(uint32_t delay) { mp_hal_delay_us(delay); @@ -51,11 +51,11 @@ void common_hal_mcu_enable_interrupts(void) { cpu_irq_restore(irq_flags); } -// The singleton processor.Processor object, bound to microcontroller.cpu +// The singleton microcontroller.Processor object, bound to microcontroller.cpu // It currently only has properties, and no state. -processor_cpu_obj_t common_hal_processor_cpu_obj = { +mcu_processor_obj_t common_hal_mcu_processor_obj = { .base = { - .type = &processor_cpu_type, + .type = &mcu_processor_type, }, }; diff --git a/atmel-samd/common-hal/processor/__init__.c b/atmel-samd/common-hal/processor/__init__.c deleted file mode 100644 index 2181435f28b..00000000000 --- a/atmel-samd/common-hal/processor/__init__.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2017 Dan Halbert 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. - */ - -// No core module functions. diff --git a/atmel-samd/mpconfigport.h b/atmel-samd/mpconfigport.h index 4bbe15b6b78..e99d190be5c 100644 --- a/atmel-samd/mpconfigport.h +++ b/atmel-samd/mpconfigport.h @@ -143,7 +143,6 @@ extern const struct _mp_obj_module_t digitalio_module; extern const struct _mp_obj_module_t pulseio_module; extern const struct _mp_obj_module_t busio_module; extern const struct _mp_obj_module_t board_module; -extern const struct _mp_obj_module_t processor_module; extern const struct _mp_obj_module_t os_module; extern const struct _mp_obj_module_t random_module; extern const struct _mp_obj_module_t storage_module; @@ -197,7 +196,6 @@ extern const struct _mp_obj_module_t usb_hid_module; { MP_OBJ_NEW_QSTR(MP_QSTR_digitalio), (mp_obj_t)&digitalio_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_busio), (mp_obj_t)&busio_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_board), (mp_obj_t)&board_module }, \ - { MP_OBJ_NEW_QSTR(MP_QSTR_processor), (mp_obj_t)&processor_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_os), (mp_obj_t)&os_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_random), (mp_obj_t)&random_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_storage), (mp_obj_t)&storage_module }, \ diff --git a/esp8266/Makefile b/esp8266/Makefile index 9be6a8972c1..3daff9c62e5 100644 --- a/esp8266/Makefile +++ b/esp8266/Makefile @@ -101,8 +101,7 @@ SRC_C = \ SRC_COMMON_HAL = \ microcontroller/__init__.c \ microcontroller/Pin.c \ - processor/__init__.c \ - processor/Processor.c \ + microcontroller/Processor.c \ analogio/__init__.c \ analogio/AnalogIn.c \ analogio/AnalogOut.c \ diff --git a/esp8266/common-hal/processor/Processor.c b/esp8266/common-hal/microcontroller/Processor.c similarity index 89% rename from esp8266/common-hal/processor/Processor.c rename to esp8266/common-hal/microcontroller/Processor.c index 0e58b40c4ac..fb0a3d50ac2 100644 --- a/esp8266/common-hal/processor/Processor.c +++ b/esp8266/common-hal/microcontroller/Processor.c @@ -24,17 +24,17 @@ * THE SOFTWARE. */ -#include "common-hal/processor/Processor.h" +#include "common-hal/microcontroller/Processor.h" #include #include "esp_mphal.h" -float common_hal_processor_cpu_get_temperature(void) { +float common_hal_mcu_processor_get_temperature(void) { return NAN; } -uint32_t common_hal_processor_cpu_get_frequency(void) { +uint32_t common_hal_mcu_processor_get_frequency(void) { return mp_hal_get_cpu_freq(); } diff --git a/esp8266/common-hal/processor/Processor.h b/esp8266/common-hal/microcontroller/Processor.h similarity index 84% rename from esp8266/common-hal/processor/Processor.h rename to esp8266/common-hal/microcontroller/Processor.h index 2893f991136..8fc59c2cb10 100644 --- a/esp8266/common-hal/processor/Processor.h +++ b/esp8266/common-hal/microcontroller/Processor.h @@ -24,14 +24,14 @@ * THE SOFTWARE. */ -#ifndef MICROPY_INCLUDED_ESP8266_COMMON_HAL_PROCESSOR_CPU_H -#define MICROPY_INCLUDED_ESP8266_COMMON_HAL_PROCESSOR_CPU_H +#ifndef MICROPY_INCLUDED_ESP8266_COMMON_HAL_MICROCONTROLLER_PROCESSOR_H +#define MICROPY_INCLUDED_ESP8266_COMMON_HAL_MICROCONTROLLER_PROCESSOR_H #include "py/obj.h" typedef struct { mp_obj_base_t base; // Stores no state currently. -} processor_cpu_obj_t; +} mcu_processor_obj_t; -#endif // MICROPY_INCLUDED_ESP8266_COMMON_HAL_PROCESSOR_CPU_H +#endif // MICROPY_INCLUDED_ESP8266_COMMON_HAL_MICROCONTROLLER_PROCESSOR_H diff --git a/esp8266/common-hal/microcontroller/__init__.c b/esp8266/common-hal/microcontroller/__init__.c index c3b582ce8db..6aef23761c8 100644 --- a/esp8266/common-hal/microcontroller/__init__.c +++ b/esp8266/common-hal/microcontroller/__init__.c @@ -25,10 +25,10 @@ */ #include "common-hal/microcontroller/Pin.h" -#include "common-hal/microcontroller/Pin.h" -#include "shared-bindings/microcontroller/Pin.h" +#include "common-hal/microcontroller/Processor.h" -#include "shared-bindings/processor/Processor.h" +#include "shared-bindings/microcontroller/Pin.h" +#include "shared-bindings/microcontroller/Processor.h" #include "eagle_soc.h" #include "ets_alt_task.h" @@ -54,11 +54,11 @@ void common_hal_mcu_enable_interrupts() { enable_irq(saved_interrupt_state & ~(1 << ETS_LOOP_ITER_BIT)); } -// The singleton processor.Processor object, returned by microcontroller.cpu +// The singleton microcontroller.Processor object, returned by microcontroller.cpu // It currently only has properties, and no state. -processor_cpu_obj_t common_hal_processor_cpu_obj = { +mcu_processor_obj_t common_hal_mcu_processor_obj = { .base = { - .type = &processor_cpu_type, + .type = &mcu_processor_type, }, }; diff --git a/esp8266/common-hal/processor/__init__.c b/esp8266/common-hal/processor/__init__.c deleted file mode 100644 index 2181435f28b..00000000000 --- a/esp8266/common-hal/processor/__init__.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2017 Dan Halbert 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. - */ - -// No core module functions. diff --git a/esp8266/mpconfigport.h b/esp8266/mpconfigport.h index a7e63abd473..41351709902 100644 --- a/esp8266/mpconfigport.h +++ b/esp8266/mpconfigport.h @@ -164,7 +164,6 @@ extern const struct _mp_obj_module_t mp_module_machine; extern const struct _mp_obj_module_t mp_module_onewire; extern const struct _mp_obj_module_t microcontroller_module; extern const struct _mp_obj_module_t board_module; -extern const struct _mp_obj_module_t processor_module; extern const struct _mp_obj_module_t analogio_module; extern const struct _mp_obj_module_t digitalio_module; extern const struct _mp_obj_module_t pulseio_module; @@ -182,7 +181,6 @@ extern const struct _mp_obj_module_t multiterminal_module; { MP_ROM_QSTR(MP_QSTR__onewire), MP_ROM_PTR(&mp_module_onewire) }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_microcontroller), (mp_obj_t)µcontroller_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_board), (mp_obj_t)&board_module }, \ - { MP_OBJ_NEW_QSTR(MP_QSTR_processor), (mp_obj_t)&processor_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_analogio), (mp_obj_t)&analogio_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_digitalio), (mp_obj_t)&digitalio_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_pulseio), (mp_obj_t)&pulseio_module }, \ diff --git a/shared-bindings/index.rst b/shared-bindings/index.rst index b364cc0d21a..49b6ce5bc3a 100644 --- a/shared-bindings/index.rst +++ b/shared-bindings/index.rst @@ -26,8 +26,6 @@ Module / Port SAMD21 SAMD21 Express ESP8266 `neopixel_write` **Yes** **Yes** **Yes** `nvm` No **Yes** No `os` **Yes** **Yes** **Yes** -`processor` **Yes** **Yes** **Partial** - (.temperature not available) `pulseio` No **Yes** No `random` **Yes** **Yes** **Yes** `storage` **Yes** **Yes** **Yes** diff --git a/shared-bindings/processor/Processor.c b/shared-bindings/microcontroller/Processor.c similarity index 57% rename from shared-bindings/processor/Processor.c rename to shared-bindings/microcontroller/Processor.c index 36f9264b57c..0e843bd31d4 100644 --- a/shared-bindings/processor/Processor.c +++ b/shared-bindings/microcontroller/Processor.c @@ -24,54 +24,50 @@ * THE SOFTWARE. */ +#include "shared-bindings/microcontroller/__init__.h" +#include "shared-bindings/microcontroller/Processor.h" + #include #include #include "py/objproperty.h" -#include "shared-bindings/processor/Processor.h" #include "py/objproperty.h" #include "py/runtime.h" -//| .. currentmodule:: processor +//| .. currentmodule:: microcontroller //| //| :class:`Processor` --- Microcontroller CPU information and control //| -------------------------------------------------------- //| -//| Get basic info about the microcontroller CPU and control it. -//| -//| You cannot create an instance of Processor, but you can access the sole instance available -//| by importing the microcontroller module and using its cpu attribute. +//| Get information about the microcontroller CPU and control it. //| //| Usage:: //| //| import microcontroller //| print(microcontroller.cpu.frequency) //| print(microcontroller.cpu.temperature) +//| //| .. class:: Processor() //| -//| You cannot currently create an instance of `Processor`. Use `microcontroller.cpu` to access -//| the sole instance available. - -STATIC mp_obj_t processor_cpu_make_new(const mp_obj_type_t *type, - size_t n_args, size_t n_kw, const mp_obj_t *args) { - mp_raise_TypeError("cannot be created: use instance in microcontroller.cpu"); -} +//| You cannot create an instance of `microcontroller.Processor`. +//| Use `microcontroller.cpu` to access the sole instance available. +//| //| .. attribute:: frequency //| //| Return the CPU operating frequency as an int, in Hz. //| -STATIC mp_obj_t processor_cpu_get_frequency(mp_obj_t self) { - return mp_obj_new_int_from_uint(common_hal_processor_cpu_get_frequency()); +STATIC mp_obj_t mcu_processor_get_frequency(mp_obj_t self) { + return mp_obj_new_int_from_uint(common_hal_mcu_processor_get_frequency()); } -MP_DEFINE_CONST_FUN_OBJ_1(processor_cpu_get_frequency_obj, processor_cpu_get_frequency); +MP_DEFINE_CONST_FUN_OBJ_1(mcu_processor_get_frequency_obj, mcu_processor_get_frequency); -const mp_obj_property_t processor_cpu_frequency_obj = { +const mp_obj_property_t mcu_processor_frequency_obj = { .base.type = &mp_type_property, - .proxy = {(mp_obj_t)&processor_cpu_get_frequency_obj, // getter + .proxy = {(mp_obj_t)&mcu_processor_get_frequency_obj, // getter (mp_obj_t)&mp_const_none_obj, // no setter (mp_obj_t)&mp_const_none_obj, // no deleter }, @@ -80,33 +76,32 @@ const mp_obj_property_t processor_cpu_frequency_obj = { //| .. attribute:: temperature //| //| Return the on-chip temperature, in Celsius, as a float. -//| If the temperature is not available, return None. +//| If the temperature is not available, return `None`. //| -STATIC mp_obj_t processor_cpu_get_temperature(mp_obj_t self) { - float temperature = common_hal_processor_cpu_get_temperature(); +STATIC mp_obj_t mcu_processor_get_temperature(mp_obj_t self) { + float temperature = common_hal_mcu_processor_get_temperature(); return isnan(temperature) ? mp_const_none : mp_obj_new_float(temperature); } -MP_DEFINE_CONST_FUN_OBJ_1(processor_cpu_get_temperature_obj, processor_cpu_get_temperature); +MP_DEFINE_CONST_FUN_OBJ_1(mcu_processor_get_temperature_obj, mcu_processor_get_temperature); -const mp_obj_property_t processor_cpu_temperature_obj = { +const mp_obj_property_t mcu_processor_temperature_obj = { .base.type = &mp_type_property, - .proxy = {(mp_obj_t)&processor_cpu_get_temperature_obj, // getter + .proxy = {(mp_obj_t)&mcu_processor_get_temperature_obj, // getter (mp_obj_t)&mp_const_none_obj, // no setter (mp_obj_t)&mp_const_none_obj, // no deleter }, }; -STATIC const mp_rom_map_elem_t processor_cpu_locals_dict_table[] = { - { MP_ROM_QSTR(MP_QSTR_frequency), MP_ROM_PTR(&processor_cpu_frequency_obj) }, - { MP_ROM_QSTR(MP_QSTR_temperature), MP_ROM_PTR(&processor_cpu_temperature_obj) }, +STATIC const mp_rom_map_elem_t mcu_processor_locals_dict_table[] = { + { MP_ROM_QSTR(MP_QSTR_frequency), MP_ROM_PTR(&mcu_processor_frequency_obj) }, + { MP_ROM_QSTR(MP_QSTR_temperature), MP_ROM_PTR(&mcu_processor_temperature_obj) }, }; -STATIC MP_DEFINE_CONST_DICT(processor_cpu_locals_dict, processor_cpu_locals_dict_table); +STATIC MP_DEFINE_CONST_DICT(mcu_processor_locals_dict, mcu_processor_locals_dict_table); -const mp_obj_type_t processor_cpu_type = { +const mp_obj_type_t mcu_processor_type = { { &mp_type_type }, .name = MP_QSTR_Processor, - .make_new = processor_cpu_make_new, - .locals_dict = (mp_obj_t)&processor_cpu_locals_dict, + .locals_dict = (mp_obj_t)&mcu_processor_locals_dict, }; diff --git a/shared-bindings/processor/Processor.h b/shared-bindings/microcontroller/Processor.h similarity index 75% rename from shared-bindings/processor/Processor.h rename to shared-bindings/microcontroller/Processor.h index 4e85f0c7fa6..a79dea47894 100644 --- a/shared-bindings/processor/Processor.h +++ b/shared-bindings/microcontroller/Processor.h @@ -24,16 +24,16 @@ * THE SOFTWARE. */ -#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_PROCESSOR_CPU_H -#define MICROPY_INCLUDED_SHARED_BINDINGS_PROCESSOR_CPU_H +#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_MICROCONTROLLER_PROCESSOR_H +#define MICROPY_INCLUDED_SHARED_BINDINGS_MICROCONTROLLER_PROCESSOR_H #include "py/obj.h" -#include "common-hal/processor/Processor.h" +#include "common-hal/microcontroller/Processor.h" -const mp_obj_type_t processor_cpu_type; +const mp_obj_type_t mcu_processor_type; -uint32_t common_hal_processor_cpu_get_frequency(void); -float common_hal_processor_cpu_get_temperature(void); +uint32_t common_hal_mcu_processor_get_frequency(void); +float common_hal_mcu_processor_get_temperature(void); -#endif // MICROPY_INCLUDED_SHARED_BINDINGS_PROCESSOR_CPU_H +#endif // MICROPY_INCLUDED_SHARED_BINDINGS_MICROCONTROLLER_PROCESSOR_H diff --git a/shared-bindings/microcontroller/__init__.c b/shared-bindings/microcontroller/__init__.c index 9cd6d4dc335..0546ebf30f9 100644 --- a/shared-bindings/microcontroller/__init__.c +++ b/shared-bindings/microcontroller/__init__.c @@ -32,9 +32,13 @@ #include "py/obj.h" #include "py/runtime.h" +#include "common-hal/microcontroller/Pin.h" +#include "common-hal/microcontroller/Processor.h" + #include "shared-bindings/microcontroller/__init__.h" #include "shared-bindings/microcontroller/Pin.h" -#include "common-hal/microcontroller/Pin.h" +#include "shared-bindings/microcontroller/Processor.h" + #include "py/runtime.h" @@ -59,7 +63,7 @@ //| .. attribute:: cpu //| //| CPU information and control, such as temperature and clock frequency. -//| This object is the sole instance of `processor.Processor`. +//| This object is the sole instance of `microcontroller.Processor`. //| //| .. method:: delay_us(delay) @@ -118,8 +122,8 @@ const mp_obj_module_t mcu_pin_module = { STATIC const mp_rom_map_elem_t mcu_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_microcontroller) }, + { MP_ROM_QSTR(MP_QSTR_cpu), MP_ROM_PTR(&common_hal_mcu_processor_obj) }, { MP_ROM_QSTR(MP_QSTR_delay_us), MP_ROM_PTR(&mcu_delay_us_obj) }, - { MP_ROM_QSTR(MP_QSTR_cpu), MP_ROM_PTR(&common_hal_processor_cpu_obj) }, { MP_ROM_QSTR(MP_QSTR_disable_interrupts), MP_ROM_PTR(&mcu_disable_interrupts_obj) }, { MP_ROM_QSTR(MP_QSTR_enable_interrupts), MP_ROM_PTR(&mcu_enable_interrupts_obj) }, #if CIRCUITPY_INTERNAL_NVM_SIZE > 0 @@ -129,6 +133,8 @@ STATIC const mp_rom_map_elem_t mcu_module_globals_table[] = { #endif { MP_ROM_QSTR(MP_QSTR_Pin), MP_ROM_PTR(&mcu_pin_type) }, { MP_ROM_QSTR(MP_QSTR_pin), MP_ROM_PTR(&mcu_pin_module) }, + { MP_ROM_QSTR(MP_QSTR_Processor), MP_ROM_PTR(&mcu_processor_type) }, + }; STATIC MP_DEFINE_CONST_DICT(mcu_module_globals, mcu_module_globals_table); diff --git a/shared-bindings/microcontroller/__init__.h b/shared-bindings/microcontroller/__init__.h index a33bb0313cd..d43db4bf456 100644 --- a/shared-bindings/microcontroller/__init__.h +++ b/shared-bindings/microcontroller/__init__.h @@ -31,7 +31,7 @@ #include "py/mpconfig.h" #include "py/obj.h" -#include "common-hal/processor/Processor.h" +#include "common-hal/microcontroller/Processor.h" extern void common_hal_mcu_delay_us(uint32_t); @@ -40,7 +40,7 @@ extern void common_hal_mcu_enable_interrupts(void); extern const mp_obj_dict_t mcu_pin_globals; -extern const processor_cpu_obj_t common_hal_processor_cpu_obj; +extern const mcu_processor_obj_t common_hal_mcu_processor_obj; #if CIRCUITPY_INTERNAL_NVM_SIZE > 0 diff --git a/shared-bindings/nvm/ByteArray.c b/shared-bindings/nvm/ByteArray.c index 6f67a74a95d..361d03c55df 100644 --- a/shared-bindings/nvm/ByteArray.c +++ b/shared-bindings/nvm/ByteArray.c @@ -48,10 +48,6 @@ //| //| Not currently dynamically supported. Access the sole instance through `microcontroller.nvm`. //| -STATIC mp_obj_t nvm_bytearray_make_new(const mp_obj_type_t *type, - mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) { - mp_raise_TypeError("cannot be created: use instance in microcontroller.nvm"); -} //| .. method:: __len__() //| @@ -151,7 +147,6 @@ STATIC mp_obj_t nvm_bytearray_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj const mp_obj_type_t nvm_bytearray_type = { { &mp_type_type }, .name = MP_QSTR_ByteArray, - .make_new = nvm_bytearray_make_new, .subscr = nvm_bytearray_subscr, .unary_op = nvm_bytearray_unary_op, .print = NULL, diff --git a/shared-bindings/processor/__init__.c b/shared-bindings/processor/__init__.c deleted file mode 100644 index c6469dc5ac9..00000000000 --- a/shared-bindings/processor/__init__.c +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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 "py/obj.h" -#include "py/mphal.h" -#include "py/runtime.h" - -#include "shared-bindings/processor/__init__.h" -#include "shared-bindings/processor/Processor.h" - -//| :mod:`processor` --- Microcontroller CPU information and control -//| ================================================================ -//| -//| .. module:: processor -//| :synopsis: CPU information and control -//| :platform: SAMD21,ESP8266 -//| -//| The `processor` module defines the class `Processor`. -//| It provides microcontroller CPU information and control, such as -//| temperature and clock frequency. -//| -//| There is only one instance of Processor, available in `microcontroller.cpu`. -//| - -//| Libraries -//| -//| .. toctree:: -//| :maxdepth: 3 -//| -//| Processor -STATIC const mp_rom_map_elem_t processor_module_globals_table[] = { - { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_processor) }, - { MP_ROM_QSTR(MP_QSTR_Processor), MP_ROM_PTR(&processor_cpu_type) }, -}; - -STATIC MP_DEFINE_CONST_DICT(processor_module_globals, processor_module_globals_table); - -const mp_obj_module_t processor_module = { - .base = { &mp_type_module }, - .globals = (mp_obj_dict_t*)&processor_module_globals, -}; diff --git a/shared-bindings/processor/__init__.h b/shared-bindings/processor/__init__.h deleted file mode 100644 index dab8594be60..00000000000 --- a/shared-bindings/processor/__init__.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2017 Dan Halbert 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. - */ - -#ifndef SHARED_BINDINGS_PROCESSOR_H -#define SHARED_BINDINGS_PROCESSOR_H - -#endif // SHARED_BINDINGS_PROCESSOR_H