From dac03f20d6bf14ab073d37513c675f433acf1fb3 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Thu, 28 Jun 2018 15:05:23 -0500 Subject: [PATCH 001/113] Include symbols in dumped build profiles This will make incremental compile more complete, taking device_has and inheritance hierarchy into account. --- tools/toolchains/__init__.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/tools/toolchains/__init__.py b/tools/toolchains/__init__.py index 740296024bb..a6016166b15 100644 --- a/tools/toolchains/__init__.py +++ b/tools/toolchains/__init__.py @@ -18,6 +18,7 @@ import re import sys +import json from os import stat, walk, getcwd, sep, remove from copy import copy from time import time, sleep @@ -1269,11 +1270,17 @@ def dump_build_profile(self): """Dump the current build profile and macros into the `.profile` file in the build directory""" for key in ["cxx", "c", "asm", "ld"]: - to_dump = (str(self.flags[key]) + str(sorted(self.macros))) + to_dump = { + "flags": sorted(self.flags[key]), + "macros": sorted(self.macros), + "symbols": sorted(self.get_symbols(for_asm=(key == "asm"))), + } if key in ["cxx", "c"]: - to_dump += str(self.flags['common']) + to_dump["symbols"].remove('MBED_BUILD_TIMESTAMP=%s' % self.timestamp) + to_dump["flags"].extend(sorted(self.flags['common'])) where = join(self.build_dir, self.PROFILE_FILE_NAME + "-" + key) - self._overwrite_when_not_equal(where, to_dump) + self._overwrite_when_not_equal(where, json.dumps( + to_dump, sort_keys=True, indent=4)) @staticmethod def _overwrite_when_not_equal(filename, content): From b6e0dd6b16cb7e216c140f770d95bb43dfde24be Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Fri, 29 Jun 2018 09:30:07 +0200 Subject: [PATCH 002/113] build_api.py : add comment about separate_names --- tools/build_api.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/build_api.py b/tools/build_api.py index 668c38ff1ca..6f8f23425c6 100644 --- a/tools/build_api.py +++ b/tools/build_api.py @@ -1073,6 +1073,7 @@ def build_mbed_libs(target, toolchain_name, clean=False, macros=None, # - mbed_overrides.o: this contains platform overrides of various # weak SDK functions # - mbed_main.o: this contains main redirection + # - PeripheralPins.o: PinMap can be weak separate_names, separate_objects = ['PeripheralPins.o', 'mbed_retarget.o', 'mbed_board.o', 'mbed_overrides.o', 'mbed_main.o', 'mbed_sdk_boot.o'], [] From 8c998e9e7b32306afea52709c8323ddbc67222cd Mon Sep 17 00:00:00 2001 From: mudassar-ublox Date: Thu, 28 Jun 2018 11:49:20 +0500 Subject: [PATCH 003/113] Cellular: Fixed set_sim_pin method calling --- features/cellular/easy_cellular/EasyCellularConnection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/cellular/easy_cellular/EasyCellularConnection.cpp b/features/cellular/easy_cellular/EasyCellularConnection.cpp index c92eef3edfe..63bb930d41b 100644 --- a/features/cellular/easy_cellular/EasyCellularConnection.cpp +++ b/features/cellular/easy_cellular/EasyCellularConnection.cpp @@ -156,7 +156,7 @@ nsapi_error_t EasyCellularConnection::connect(const char *sim_pin, const char *a } if (sim_pin) { - _cellularConnectionFSM->set_sim_pin(sim_pin); + this->set_sim_pin(sim_pin); } return connect(); From 16af4a8aee276def4a6ad33542ece2373030c682 Mon Sep 17 00:00:00 2001 From: bcostm Date: Wed, 20 Jun 2018 10:53:06 +0200 Subject: [PATCH 004/113] STM32: add lpuart_clock_source config Keep same clock configuration as done before this PR (LSE and PCLK1). Use a JSON file to change it. --- targets/TARGET_STM/serial_api.c | 35 +++++++++++++++++++++++++-------- targets/targets.json | 4 ++++ 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/targets/TARGET_STM/serial_api.c b/targets/TARGET_STM/serial_api.c index 065418c74bd..efe764a3187 100644 --- a/targets/TARGET_STM/serial_api.c +++ b/targets/TARGET_STM/serial_api.c @@ -32,6 +32,11 @@ #include "serial_api_hal.h" +// Possible choices of the LPUART_CLOCK_SOURCE configuration set in json file +#define USE_LPUART_CLK_LSE 0x01 +#define USE_LPUART_CLK_PCLK1 0x02 +#define USE_LPUART_CLK_HSI 0x04 + int stdio_uart_inited = 0; // used in platform/mbed_board.c and platform/mbed_retarget.cpp serial_t stdio_uart; @@ -367,29 +372,43 @@ void serial_baud(serial_t *obj, int baudrate) struct serial_s *obj_s = SERIAL_S(obj); obj_s->baudrate = baudrate; + #if defined(LPUART1_BASE) /* Note that LPUART clock source must be in the range [3 x baud rate, 4096 x baud rate], check Ref Manual */ if (obj_s->uart == LPUART_1) { - /* If baudrate is lower than 9600 try to change to LSE */ RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPUART1; +#if ((MBED_CONF_TARGET_LPUART_CLOCK_SOURCE) & USE_LPUART_CLK_LSE) if (baudrate <= 9600 && __HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY)) { - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPUART1; PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_LSE; HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); - } else { - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPUART1; - PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_PCLK1; - HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); + if (init_uart(obj) == HAL_OK) { + return; + } } +#endif +#if ((MBED_CONF_TARGET_LPUART_CLOCK_SOURCE) & USE_LPUART_CLK_PCLK1) + PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_PCLK1; + HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); if (init_uart(obj) == HAL_OK) { return; } - /* Change LPUART clock source and try again */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPUART1; +#endif +#if ((MBED_CONF_TARGET_LPUART_CLOCK_SOURCE) & USE_LPUART_CLK_HSI) + if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY)) { + PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_HSI; + HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); + if (init_uart(obj) == HAL_OK) { + return; + } + } +#endif + // Last chance using SYSCLK PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_SYSCLK; HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); } #endif /* LPUART1_BASE */ + if (init_uart(obj) != HAL_OK) { debug("Cannot initialize UART with baud rate %u\n", baudrate); } diff --git a/targets/targets.json b/targets/targets.json index a3e368ac91d..57450b37d71 100755 --- a/targets/targets.json +++ b/targets/targets.json @@ -735,6 +735,10 @@ "help": "Define if a Low Speed External xtal (LSE) is available on the board (0 = No, 1 = Yes). If Yes, the LSE will be used to clock the RTC, LPUART, ... otherwise the Low Speed Internal clock (LSI) will be used", "value": "1" }, + "lpuart_clock_source": { + "help": "Define the LPUART clock source. Mask values: USE_LPUART_CLK_LSE, USE_LPUART_CLK_PCLK1, USE_LPUART_CLK_HSI", + "value": "USE_LPUART_CLK_LSE|USE_LPUART_CLK_PCLK1" + }, "stdio_uart_tx": { "help": "default TX STDIO pins is defined in PinNames.h file, but it can be overridden" }, From bf943852a79e5082b7ca2cbf1c687d405de5a3cc Mon Sep 17 00:00:00 2001 From: bcostm Date: Fri, 29 Jun 2018 10:12:40 +0200 Subject: [PATCH 005/113] astyle --- targets/TARGET_STM/serial_api.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/TARGET_STM/serial_api.c b/targets/TARGET_STM/serial_api.c index efe764a3187..4a092784e17 100644 --- a/targets/TARGET_STM/serial_api.c +++ b/targets/TARGET_STM/serial_api.c @@ -399,7 +399,7 @@ void serial_baud(serial_t *obj, int baudrate) PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_HSI; HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); if (init_uart(obj) == HAL_OK) { - return; + return; } } #endif From 527aa1e111a157c049cb2f6520af2eda18f6f4d5 Mon Sep 17 00:00:00 2001 From: Marcus Chang Date: Thu, 28 Jun 2018 16:36:16 -0700 Subject: [PATCH 006/113] Fix race condition in serial_api.c for NRF52 series * Elevate RTC2 interrupt priority to same level as UARTE to prevent race condition on shared variables. * Remove unused TXDRDY event code. * Fix typo in macro. --- .../TARGET_NRF5x/TARGET_NRF52/serial_api.c | 106 ++++-------------- 1 file changed, 23 insertions(+), 83 deletions(-) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/serial_api.c b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/serial_api.c index a89fa324414..595f3e15e49 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/serial_api.c +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/serial_api.c @@ -110,11 +110,6 @@ #define DMA_BUFFER_SIZE MBED_CONF_NORDIC_UART_DMA_SIZE #define NUMBER_OF_BANKS 2 -/** - * Default timer delay for callbacks. - */ -#define CALLBACK_DELAY_US 100 - /** * Use RTC2 for idle timeouts. * Each channel is dedicated to one particular task. @@ -130,10 +125,10 @@ /** * SWI IRQ numbers */ -#define UARTE0_SWI_TX_0_IRQ SWI2_EGU2_IRQn -#define UARTE0_SWI_RX_0_IRQ SWI3_EGU3_IRQn -#define UARTE1_SWI_TX_0_IRQ SWI4_EGU4_IRQn -#define UARTE1_SWI_RX_0_IRQ SWI5_EGU5_IRQn +#define UARTE0_SWI_TX_IRQ SWI2_EGU2_IRQn +#define UARTE0_SWI_RX_IRQ SWI3_EGU3_IRQn +#define UARTE1_SWI_TX_IRQ SWI4_EGU4_IRQn +#define UARTE1_SWI_RX_IRQ SWI5_EGU5_IRQn /*** * _______ _ __ @@ -433,8 +428,8 @@ static void nordic_nrf5_uart_swi_rx_1(void) */ static void nordic_nrf5_uart_event_handler_endtx(int instance) { - /* Disable TXDRDY event again. */ - nordic_nrf5_uart_register[instance]->INTEN &= ~NRF_UARTE_INT_TXDRDY_MASK; + /* Disable ENDTX event again. */ + nordic_nrf5_uart_register[instance]->INTEN &= ~NRF_UARTE_INT_ENDTX_MASK; /* Release mutex. As the owner this call is safe. */ nordic_nrf5_uart_state[instance].tx_in_progress = 0; @@ -519,12 +514,12 @@ static void nordic_swi_tx_trigger(int instance) { if (instance == 0) { - NVIC_SetPendingIRQ(UARTE0_SWI_TX_0_IRQ); + NVIC_SetPendingIRQ(UARTE0_SWI_TX_IRQ); } #if UART1_ENABLED else if (instance == 1) { - NVIC_SetPendingIRQ(UARTE1_SWI_TX_0_IRQ); + NVIC_SetPendingIRQ(UARTE1_SWI_TX_IRQ); } #endif } @@ -538,11 +533,11 @@ static void nordic_swi_rx_trigger(int instance) { if (instance == 0) { - NVIC_SetPendingIRQ(UARTE0_SWI_RX_0_IRQ); + NVIC_SetPendingIRQ(UARTE0_SWI_RX_IRQ); } else if (instance == 1) { - NVIC_SetPendingIRQ(UARTE1_SWI_RX_0_IRQ); + NVIC_SetPendingIRQ(UARTE1_SWI_RX_IRQ); } } @@ -716,33 +711,14 @@ static void nordic_nrf5_uart_event_handler(int instance) nordic_nrf5_uart_event_handler_rxdrdy(instance); } - /* Tx single character has been sent. */ - if (nrf_uarte_event_check(nordic_nrf5_uart_register[instance], NRF_UARTE_EVENT_TXDRDY)) { - - nrf_uarte_event_clear(nordic_nrf5_uart_register[instance], NRF_UARTE_EVENT_TXDRDY); - - /* In non-async transfers this will generate an interrupt if callback and mask is set. */ - if (!nordic_nrf5_uart_state[instance].tx_asynch) { - - /* Use SWI to de-prioritize callback. */ - nordic_swi_tx_trigger(instance); - } - } - -#if DEVICE_SERIAL_ASYNCH /* Tx DMA buffer has been sent. */ if (nrf_uarte_event_check(nordic_nrf5_uart_register[instance], NRF_UARTE_EVENT_ENDTX)) { nrf_uarte_event_clear(nordic_nrf5_uart_register[instance], NRF_UARTE_EVENT_ENDTX); - /* Call async event handler in async mode. */ - if (nordic_nrf5_uart_state[instance].tx_asynch) { - - /* Use SWI to de-prioritize callback. */ - nordic_swi_tx_trigger(instance); - } + /* Use SWI to de-prioritize callback. */ + nordic_swi_tx_trigger(instance); } -#endif } /** @@ -1029,7 +1005,7 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) NRF_RTC_INT_COMPARE1_MASK); /* Enable RTC2 IRQ. Priority is set to lowest so that the UARTE ISR can interrupt it. */ - nrf_drv_common_irq_enable(RTC2_IRQn, APP_IRQ_PRIORITY_LOWEST); + nrf_drv_common_irq_enable(RTC2_IRQn, APP_IRQ_PRIORITY_HIGHEST); /* Start RTC2. According to the datasheet the added power consumption is neglible so * the RTC2 will run forever. @@ -1037,16 +1013,16 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) nrf_rtc_task_trigger(NRF_RTC2, NRF_RTC_TASK_START); /* Enable interrupts for SWI. */ - NVIC_SetVector(UARTE0_SWI_TX_0_IRQ, (uint32_t) nordic_nrf5_uart_swi_tx_0); - NVIC_SetVector(UARTE0_SWI_RX_0_IRQ, (uint32_t) nordic_nrf5_uart_swi_rx_0); - nrf_drv_common_irq_enable(UARTE0_SWI_TX_0_IRQ, APP_IRQ_PRIORITY_LOWEST); - nrf_drv_common_irq_enable(UARTE0_SWI_RX_0_IRQ, APP_IRQ_PRIORITY_LOWEST); + NVIC_SetVector(UARTE0_SWI_TX_IRQ, (uint32_t) nordic_nrf5_uart_swi_tx_0); + NVIC_SetVector(UARTE0_SWI_RX_IRQ, (uint32_t) nordic_nrf5_uart_swi_rx_0); + nrf_drv_common_irq_enable(UARTE0_SWI_TX_IRQ, APP_IRQ_PRIORITY_LOWEST); + nrf_drv_common_irq_enable(UARTE0_SWI_RX_IRQ, APP_IRQ_PRIORITY_LOWEST); #if UART1_ENABLED - NVIC_SetVector(UARTE1_SWI_TX_0_IRQ, (uint32_t) nordic_nrf5_uart_swi_tx_1); - NVIC_SetVector(UARTE1_SWI_RX_0_IRQ, (uint32_t) nordic_nrf5_uart_swi_rx_1); - nrf_drv_common_irq_enable(UARTE1_SWI_TX_0_IRQ, APP_IRQ_PRIORITY_LOWEST); - nrf_drv_common_irq_enable(UARTE1_SWI_RX_0_IRQ, APP_IRQ_PRIORITY_LOWEST); + NVIC_SetVector(UARTE1_SWI_TX_IRQ, (uint32_t) nordic_nrf5_uart_swi_tx_1); + NVIC_SetVector(UARTE1_SWI_RX_IRQ, (uint32_t) nordic_nrf5_uart_swi_rx_1); + nrf_drv_common_irq_enable(UARTE1_SWI_TX_IRQ, APP_IRQ_PRIORITY_LOWEST); + nrf_drv_common_irq_enable(UARTE1_SWI_RX_IRQ, APP_IRQ_PRIORITY_LOWEST); #endif /* Initialize FIFO buffer for UARTE0. */ @@ -1411,21 +1387,6 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) uart_object->mask &= ~type; } - - /* Enable TXDRDY event. */ - if ((type == NORDIC_TX_IRQ) && enable) { - - /* Clear Tx ready event and enable Tx ready interrupts. */ - nrf_uarte_event_clear(nordic_nrf5_uart_register[uart_object->instance], NRF_UARTE_EVENT_TXDRDY); - nordic_nrf5_uart_register[uart_object->instance]->INTEN |= NRF_UARTE_INT_TXDRDY_MASK; - - /* Disable TXDRDY event. */ - } else if ((type == NORDIC_TX_IRQ) && !enable) { - - /* Disable Tx ready interrupts and clear Tx ready event. */ - nordic_nrf5_uart_register[uart_object->instance]->INTEN &= ~NRF_UARTE_INT_TXDRDY_MASK; - nrf_uarte_event_clear(nordic_nrf5_uart_register[uart_object->instance], NRF_UARTE_EVENT_TXDRDY); - } } /** Get character. This is a blocking call, waiting for a character @@ -1503,26 +1464,15 @@ void serial_putc(serial_t *obj, int character) /* Take ownership and configure UART if necessary. */ nordic_nrf5_serial_configure(obj); - /** - * The UARTE module can generate two different Tx events: TXDRDY when each character has - * been transmitted and ENDTX when the entire buffer has been sent. - * - * For the blocking serial_putc, TXDRDY interrupts are enabled and only used for the - * single character TX IRQ callback handler. - */ - /* Arm Tx DMA buffer. */ nordic_nrf5_uart_state[instance].tx_data = character; nrf_uarte_tx_buffer_set(nordic_nrf5_uart_register[instance], &nordic_nrf5_uart_state[instance].tx_data, 1); - /* Clear TXDRDY event and enable TXDRDY interrupts. */ - nrf_uarte_event_clear(nordic_nrf5_uart_register[instance], NRF_UARTE_EVENT_TXDRDY); - nordic_nrf5_uart_register[instance]->INTEN |= NRF_UARTE_INT_TXDRDY_MASK; - - /* Clear ENDTX event. */ + /* Clear ENDTX event and enable interrupts. */ nrf_uarte_event_clear(nordic_nrf5_uart_register[instance], NRF_UARTE_EVENT_ENDTX); + nordic_nrf5_uart_register[instance]->INTEN |= NRF_UARTE_INT_ENDTX_MASK; /* Trigger DMA transfer. */ nrf_uarte_task_trigger(nordic_nrf5_uart_register[instance], @@ -1680,16 +1630,6 @@ int serial_tx_asynch(serial_t *obj, const void *tx, size_t tx_length, uint8_t tx nordic_nrf5_uart_state[instance].tx_asynch = true; nordic_nrf5_serial_configure(obj); - /** - * The UARTE module can generate two different Tx events: TXDRDY when each - * character has been transmitted and ENDTX when the entire buffer has been sent. - * - * For the async serial_tx_async, TXDRDY interrupts are disabled completely. ENDTX - * interrupts are enabled and used to signal the completion of the async transfer. - * - * The ENDTX interrupt is diabled immediately after it is fired in the ISR. - */ - /* Clear Tx event and enable Tx interrupts. */ nrf_uarte_event_clear(nordic_nrf5_uart_register[instance], NRF_UARTE_EVENT_ENDTX); nordic_nrf5_uart_register[instance]->INTEN |= NRF_UARTE_INT_ENDTX_MASK; From 1eb78369d365a5b943cf6ff414687f3aeda8614f Mon Sep 17 00:00:00 2001 From: Marcus Chang Date: Thu, 28 Jun 2018 16:38:29 -0700 Subject: [PATCH 007/113] Fix typo in NRF52 series README.md UART configuration parameters mispelled. --- targets/TARGET_NORDIC/TARGET_NRF5x/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/README.md b/targets/TARGET_NORDIC/TARGET_NRF5x/README.md index c51674cfee9..7dd4c278552 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/README.md +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/README.md @@ -108,15 +108,15 @@ All buffers can be resized to fit the application: ``` "name": "nordic", "config": { - "uart-dma-size": { + "uart_dma_size": { "help": "UART DMA buffer. 2 buffers per instance. DMA buffer is filled by UARTE", "value": 8 }, - "uart-0-fifo-size": { + "uart_0_fifo_size": { "help": "UART0 FIFO buffer. FIFO buffer is filled from DMA buffer.", "value": 32 }, - "uart-1-fifo-size": { + "uart_1_fifo_size": { "help": "UART1 FIFO buffer. FIFO buffer is filled from DMA buffer.", "value": 32 } From 80c60edaf0a96ebd1faf7fe8bf7a0231cfccf96e Mon Sep 17 00:00:00 2001 From: Hasnain Virk Date: Wed, 27 Jun 2018 15:23:52 +0300 Subject: [PATCH 008/113] Correcting doxygen Use of MSG_FLAGS was updated in previous PRs but the doc was not updated accordingly. --- features/lorawan/LoRaWANBase.h | 21 ++++++--------------- features/lorawan/LoRaWANInterface.h | 20 ++++++-------------- 2 files changed, 12 insertions(+), 29 deletions(-) diff --git a/features/lorawan/LoRaWANBase.h b/features/lorawan/LoRaWANBase.h index 50a2b545498..7db015e50fc 100644 --- a/features/lorawan/LoRaWANBase.h +++ b/features/lorawan/LoRaWANBase.h @@ -203,15 +203,9 @@ class LoRaWANBase { * MSG_CONFIRMED_FLAG = 0x02 * MSG_MULTICAST_FLAG = 0x04 * MSG_PROPRIETARY_FLAG = 0x08 - * MSG_MULTICAST_FLAG and MSG_PROPRIETARY_FLAG can be - * used in conjunction with MSG_UNCONFIRMED_FLAG and - * MSG_CONFIRMED_FLAG depending on the intended use. - * - * MSG_PROPRIETARY_FLAG|MSG_CONFIRMED_FLAG mask will set - * a confirmed message flag for a proprietary message. - * MSG_CONFIRMED_FLAG and MSG_UNCONFIRMED_FLAG are - * mutually exclusive. * + * All flags are mutually exclusive and MSG_MULTICAST_FLAG + * cannot be set. * * @return The number of bytes sent, or * LORAWAN_STATUS_WOULD_BLOCK if another TX is @@ -240,14 +234,11 @@ class LoRaWANBase { * MSG_MULTICAST_FLAG = 0x04, * MSG_PROPRIETARY_FLAG = 0x08 * - * MSG_MULTICAST_FLAG and MSG_PROPRIETARY_FLAG can be - * used in conjunction with MSG_UNCONFIRMED_FLAG and - * MSG_CONFIRMED_FLAG depending on the intended use. - * - * MSG_PROPRIETARY_FLAG|MSG_CONFIRMED_FLAG mask will set - * a confirmed message flag for a proprietary message. + * All flags can be used in conjunction with + * each other depending on the intended use case or reception + * expectation. * - * MSG_CONFIRMED_FLAG and MSG_UNCONFIRMED_FLAG are + * e.g., MSG_CONFIRMED_FLAG and MSG_UNCONFIRMED_FLAG are * not mutually exclusive, i.e., the user can subscribe to * receive both CONFIRMED AND UNCONFIRMED messages at * the same time. diff --git a/features/lorawan/LoRaWANInterface.h b/features/lorawan/LoRaWANInterface.h index 03539dafd2d..437d352d662 100644 --- a/features/lorawan/LoRaWANInterface.h +++ b/features/lorawan/LoRaWANInterface.h @@ -301,14 +301,9 @@ class LoRaWANInterface: public LoRaWANBase { * MSG_CONFIRMED_FLAG = 0x02 * MSG_MULTICAST_FLAG = 0x04 * MSG_PROPRIETARY_FLAG = 0x08 - * MSG_MULTICAST_FLAG and MSG_PROPRIETARY_FLAG can be - * used in conjunction with MSG_UNCONFIRMED_FLAG and - * MSG_CONFIRMED_FLAG depending on the intended use. * - * MSG_PROPRIETARY_FLAG|MSG_CONFIRMED_FLAG mask will set - * a confirmed message flag for a proprietary message. - * MSG_CONFIRMED_FLAG and MSG_UNCONFIRMED_FLAG are - * mutually exclusive. + * All flags are mutually exclusive and MSG_MULTICAST_FLAG + * cannot be set. * * * @return The number of bytes sent, or @@ -338,14 +333,11 @@ class LoRaWANInterface: public LoRaWANBase { * MSG_MULTICAST_FLAG = 0x04, * MSG_PROPRIETARY_FLAG = 0x08 * - * MSG_MULTICAST_FLAG and MSG_PROPRIETARY_FLAG can be - * used in conjunction with MSG_UNCONFIRMED_FLAG and - * MSG_CONFIRMED_FLAG depending on the intended use. + * All flags can be used in conjunction with + * each other depending on the intended use case or reception + * expectation. * - * MSG_PROPRIETARY_FLAG|MSG_CONFIRMED_FLAG mask will set - * a confirmed message flag for a proprietary message. - * - * MSG_CONFIRMED_FLAG and MSG_UNCONFIRMED_FLAG are + * e.g., MSG_CONFIRMED_FLAG and MSG_UNCONFIRMED_FLAG are * not mutually exclusive, i.e., the user can subscribe to * receive both CONFIRMED AND UNCONFIRMED messages at * the same time. From 7ce7196594c4779075e684f42c658fb2e2906b89 Mon Sep 17 00:00:00 2001 From: Amanda Butler Date: Fri, 29 Jun 2018 14:27:45 -0500 Subject: [PATCH 009/113] Copy edit LoRaWANinterface.h Copy edit for precise language and comma use. --- features/lorawan/LoRaWANInterface.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/features/lorawan/LoRaWANInterface.h b/features/lorawan/LoRaWANInterface.h index 437d352d662..34e5e3a3ef8 100644 --- a/features/lorawan/LoRaWANInterface.h +++ b/features/lorawan/LoRaWANInterface.h @@ -302,7 +302,7 @@ class LoRaWANInterface: public LoRaWANBase { * MSG_MULTICAST_FLAG = 0x04 * MSG_PROPRIETARY_FLAG = 0x08 * - * All flags are mutually exclusive and MSG_MULTICAST_FLAG + * All flags are mutually exclusive, and MSG_MULTICAST_FLAG * cannot be set. * * @@ -334,7 +334,7 @@ class LoRaWANInterface: public LoRaWANBase { * MSG_PROPRIETARY_FLAG = 0x08 * * All flags can be used in conjunction with - * each other depending on the intended use case or reception + * one another depending on the intended use case or reception * expectation. * * e.g., MSG_CONFIRMED_FLAG and MSG_UNCONFIRMED_FLAG are From 85f734909f5768506fdb3e59286aef549e9998c7 Mon Sep 17 00:00:00 2001 From: Amanda Butler Date: Fri, 29 Jun 2018 14:28:44 -0500 Subject: [PATCH 010/113] Copy edit LoRaWANBase.h Copy edit for precise language and comma use. --- features/lorawan/LoRaWANBase.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/features/lorawan/LoRaWANBase.h b/features/lorawan/LoRaWANBase.h index 7db015e50fc..36a1ee5979b 100644 --- a/features/lorawan/LoRaWANBase.h +++ b/features/lorawan/LoRaWANBase.h @@ -204,7 +204,7 @@ class LoRaWANBase { * MSG_MULTICAST_FLAG = 0x04 * MSG_PROPRIETARY_FLAG = 0x08 * - * All flags are mutually exclusive and MSG_MULTICAST_FLAG + * All flags are mutually exclusive, and MSG_MULTICAST_FLAG * cannot be set. * * @return The number of bytes sent, or @@ -235,7 +235,7 @@ class LoRaWANBase { * MSG_PROPRIETARY_FLAG = 0x08 * * All flags can be used in conjunction with - * each other depending on the intended use case or reception + * one another depending on the intended use case or reception * expectation. * * e.g., MSG_CONFIRMED_FLAG and MSG_UNCONFIRMED_FLAG are From ca1e05047e3ac4f7f70a8f9077e8bb1be6f1f0dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tero=20J=C3=A4=C3=A4sk=C3=B6?= Date: Fri, 15 Jun 2018 12:42:20 +0300 Subject: [PATCH 011/113] netsocket: dns: make dns-cache-size:0 remove whole DNS cache code Setting ""nsapi.dns-cache-size": 0" still left some of the DNS caching code in. Add crude #if to remove all of it. This allows one to save 429 bytes of flash and 48 bytes of RAM on ARMC5 builds. --- features/netsocket/nsapi_dns.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/features/netsocket/nsapi_dns.cpp b/features/netsocket/nsapi_dns.cpp index c38d9ac0a67..60bb10a0e7d 100644 --- a/features/netsocket/nsapi_dns.cpp +++ b/features/netsocket/nsapi_dns.cpp @@ -111,12 +111,15 @@ static nsapi_addr_t dns_servers[DNS_SERVERS_SIZE] = { 0,0, 0,0, 0x1c,0x04, 0xb1,0x2f}}, }; +#if (MBED_CONF_NSAPI_DNS_CACHE_SIZE > 0) static DNS_CACHE *dns_cache[MBED_CONF_NSAPI_DNS_CACHE_SIZE]; +// Protects cache shared between blocking and asynchronous calls +static SingletonPtr dns_cache_mutex; +#endif + static uint16_t dns_message_id = 1; static int dns_unique_id = 1; static DNS_QUERY *dns_query_queue[DNS_QUERY_QUEUE_SIZE]; -// Protects cache shared between blocking and asynchronous calls -static SingletonPtr dns_cache_mutex; // Protects from several threads running asynchronous DNS static SingletonPtr dns_mutex; static SingletonPtr dns_call_in; @@ -306,6 +309,7 @@ static int dns_scan_response(const uint8_t *ptr, uint16_t exp_id, uint32_t *ttl, static void nsapi_dns_cache_add(const char *host, nsapi_addr_t *address, uint32_t ttl) { +#if (MBED_CONF_NSAPI_DNS_CACHE_SIZE > 0) // RFC 1034: if TTL is zero, entry is not added to cache if (ttl == 0) { return; @@ -354,12 +358,14 @@ static void nsapi_dns_cache_add(const char *host, nsapi_addr_t *address, uint32_ } dns_cache_mutex->unlock(); +#endif } static nsapi_error_t nsapi_dns_cache_find(const char *host, nsapi_version_t version, nsapi_addr_t *address) { nsapi_error_t ret_val = NSAPI_ERROR_NO_ADDRESS; +#if (MBED_CONF_NSAPI_DNS_CACHE_SIZE > 0) dns_cache_mutex->lock(); for (int i = 0; i < MBED_CONF_NSAPI_DNS_CACHE_SIZE; i++) { @@ -382,6 +388,7 @@ static nsapi_error_t nsapi_dns_cache_find(const char *host, nsapi_version_t vers } dns_cache_mutex->unlock(); +#endif return ret_val; } From cf1186fa5dea31410fbc80da8495e4079838a2c1 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Wed, 23 May 2018 16:57:47 +0800 Subject: [PATCH 012/113] Meet new us_ticker HAL spec (Mbed OS 5.9) 1. Add USTICKER in device_has option of targets.json file. 2. Disable ticker interrupt in us_ticker_init 3. Add us_ticker_free 4. Enable interrupt in us_ticker_set_interrupt --- .../TARGET_NUVOTON/TARGET_M451/us_ticker.c | 32 +++++++++++++++++- .../TARGET_NUVOTON/TARGET_M480/us_ticker.c | 33 ++++++++++++++++++- .../TARGET_NUVOTON/TARGET_NANO100/us_ticker.c | 33 ++++++++++++++++++- .../TARGET_NUVOTON/TARGET_NUC472/us_ticker.c | 33 ++++++++++++++++++- targets/targets.json | 8 ++--- 5 files changed, 131 insertions(+), 8 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c index 51072c13b0a..a16c388609a 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c @@ -15,6 +15,9 @@ */ #include "us_ticker_api.h" + +#if DEVICE_USTICKER + #include "sleep_api.h" #include "mbed_assert.h" #include "nu_modutil.h" @@ -45,6 +48,10 @@ static int ticker_inited = 0; void us_ticker_init(void) { if (ticker_inited) { + /* By HAL spec, ticker_init allows the ticker to keep counting and disables the + * ticker interrupt. */ + us_ticker_disable_interrupt(); + us_ticker_clear_interrupt(); return; } ticker_inited = 1; @@ -75,13 +82,32 @@ void us_ticker_init(void) NVIC_EnableIRQ(TIMER_MODINIT.irq_n); - TIMER_EnableInt(timer_base); + TIMER_DisableInt(timer_base); TIMER_Start(timer_base); /* Wait for timer to start counting and raise active flag */ while(! (timer_base->CTL & TIMER_CTL_ACTSTS_Msk)); } +void us_ticker_free(void) +{ + TIMER_T *timer_base = (TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname); + + /* Stop counting */ + TIMER_Stop(timer_base); + /* Wait for timer to stop counting and unset active flag */ + while((timer_base->CTL & TIMER_CTL_ACTSTS_Msk)); + + /* Disable interrupt */ + TIMER_DisableInt(timer_base); + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); + + /* Disable IP clock */ + CLK_DisableModuleClock(TIMER_MODINIT.clkidx); + + ticker_inited = 0; +} + uint32_t us_ticker_read() { if (! ticker_inited) { @@ -110,6 +136,8 @@ void us_ticker_set_interrupt(timestamp_t timestamp) uint32_t cmp_timer = timestamp * NU_TMRCLK_PER_TICK; cmp_timer = NU_CLAMP(cmp_timer, TMR_CMP_MIN, TMR_CMP_MAX); timer_base->CMP = cmp_timer; + + TIMER_EnableInt(timer_base); } void us_ticker_disable_interrupt(void) @@ -145,3 +173,5 @@ static void tmr0_vec(void) // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); us_ticker_irq_handler(); } + +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_M480/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_M480/us_ticker.c index 9cce7987318..196f0ab3556 100644 --- a/targets/TARGET_NUVOTON/TARGET_M480/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M480/us_ticker.c @@ -15,6 +15,9 @@ */ #include "us_ticker_api.h" + +#if DEVICE_USTICKER + #include "sleep_api.h" #include "mbed_assert.h" #include "nu_modutil.h" @@ -45,6 +48,10 @@ static int ticker_inited = 0; void us_ticker_init(void) { if (ticker_inited) { + /* By HAL spec, ticker_init allows the ticker to keep counting and disables the + * ticker interrupt. */ + us_ticker_disable_interrupt(); + us_ticker_clear_interrupt(); return; } ticker_inited = 1; @@ -75,13 +82,33 @@ void us_ticker_init(void) NVIC_EnableIRQ(TIMER_MODINIT.irq_n); - TIMER_EnableInt(timer_base); + TIMER_DisableInt(timer_base); TIMER_Start(timer_base); /* Wait for timer to start counting and raise active flag */ while(! (timer_base->CTL & TIMER_CTL_ACTSTS_Msk)); } +void us_ticker_free(void) +{ + TIMER_T *timer_base = (TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname); + + /* Stop counting */ + TIMER_Stop(timer_base); + + /* Wait for timer to stop counting and unset active flag */ + while((timer_base->CTL & TIMER_CTL_ACTSTS_Msk)); + + /* Disable interrupt */ + TIMER_DisableInt(timer_base); + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); + + /* Disable IP clock */ + CLK_DisableModuleClock(TIMER_MODINIT.clkidx); + + ticker_inited = 0; +} + uint32_t us_ticker_read() { if (! ticker_inited) { @@ -110,6 +137,8 @@ void us_ticker_set_interrupt(timestamp_t timestamp) uint32_t cmp_timer = timestamp * NU_TMRCLK_PER_TICK; cmp_timer = NU_CLAMP(cmp_timer, TMR_CMP_MIN, TMR_CMP_MAX); timer_base->CMP = cmp_timer; + + TIMER_EnableInt(timer_base); } void us_ticker_disable_interrupt(void) @@ -145,3 +174,5 @@ static void tmr0_vec(void) // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); us_ticker_irq_handler(); } + +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_NANO100/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_NANO100/us_ticker.c index 07f7ff9adb6..0461648c189 100644 --- a/targets/TARGET_NUVOTON/TARGET_NANO100/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NANO100/us_ticker.c @@ -15,6 +15,9 @@ */ #include "us_ticker_api.h" + +#if DEVICE_USTICKER + #include "sleep_api.h" #include "mbed_assert.h" #include "nu_modutil.h" @@ -47,6 +50,10 @@ static int ticker_inited = 0; void us_ticker_init(void) { if (ticker_inited) { + /* By HAL spec, ticker_init allows the ticker to keep counting and disables the + * ticker interrupt. */ + us_ticker_disable_interrupt(); + us_ticker_clear_interrupt(); return; } ticker_inited = 1; @@ -77,13 +84,33 @@ void us_ticker_init(void) NVIC_EnableIRQ(TIMER_MODINIT.irq_n); - TIMER_EnableInt(timer_base); + TIMER_DisableInt(timer_base); TIMER_Start(timer_base); /* Wait for timer to start counting and raise active flag */ while(! (timer_base->CTL & TIMER_CTL_TMR_ACT_Msk)); } +void us_ticker_free(void) +{ + TIMER_T *timer_base = (TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname); + + /* Stop counting */ + TIMER_Stop(timer_base); + + /* Wait for timer to stop counting and unset active flag */ + while((timer_base->CTL & TIMER_CTL_TMR_ACT_Msk)); + + /* Disable interrupt */ + TIMER_DisableInt(timer_base); + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); + + /* Disable IP clock */ + CLK_DisableModuleClock(TIMER_MODINIT.clkidx); + + ticker_inited = 0; +} + uint32_t us_ticker_read() { if (! ticker_inited) { @@ -112,6 +139,8 @@ void us_ticker_set_interrupt(timestamp_t timestamp) uint32_t cmp_timer = timestamp * NU_TMRCLK_PER_TICK; cmp_timer = NU_CLAMP(cmp_timer, TMR_CMP_MIN, TMR_CMP_MAX); timer_base->CMPR = cmp_timer; + + TIMER_EnableInt(timer_base); } void us_ticker_disable_interrupt(void) @@ -147,3 +176,5 @@ void TMR0_IRQHandler(void) // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); us_ticker_irq_handler(); } + +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c index 30836509add..3043eccef63 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c @@ -15,6 +15,9 @@ */ #include "us_ticker_api.h" + +#if DEVICE_USTICKER + #include "sleep_api.h" #include "mbed_assert.h" #include "nu_modutil.h" @@ -45,6 +48,10 @@ static int ticker_inited = 0; void us_ticker_init(void) { if (ticker_inited) { + /* By HAL spec, ticker_init allows the ticker to keep counting and disables the + * ticker interrupt. */ + us_ticker_disable_interrupt(); + us_ticker_clear_interrupt(); return; } ticker_inited = 1; @@ -74,13 +81,33 @@ void us_ticker_init(void) NVIC_EnableIRQ(TIMER_MODINIT.irq_n); - TIMER_EnableInt(timer_base); + TIMER_DisableInt(timer_base); TIMER_Start(timer_base); /* Wait for timer to start counting and raise active flag */ while(! (timer_base->CTL & TIMER_CTL_ACTSTS_Msk)); } +void us_ticker_free(void) +{ + TIMER_T *timer_base = (TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname); + + /* Stop counting */ + TIMER_Stop(timer_base); + + /* Wait for timer to stop counting and unset active flag */ + while((timer_base->CTL & TIMER_CTL_ACTSTS_Msk)); + + /* Disable interrupt */ + TIMER_DisableInt(timer_base); + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); + + /* Disable IP clock */ + CLK_DisableModuleClock(TIMER_MODINIT.clkidx); + + ticker_inited = 0; +} + uint32_t us_ticker_read() { if (! ticker_inited) { @@ -109,6 +136,8 @@ void us_ticker_set_interrupt(timestamp_t timestamp) uint32_t cmp_timer = timestamp * NU_TMRCLK_PER_TICK; cmp_timer = NU_CLAMP(cmp_timer, TMR_CMP_MIN, TMR_CMP_MAX); timer_base->CMP = cmp_timer; + + TIMER_EnableInt(timer_base); } void us_ticker_disable_interrupt(void) @@ -144,3 +173,5 @@ static void tmr0_vec(void) // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); us_ticker_irq_handler(); } + +#endif diff --git a/targets/targets.json b/targets/targets.json index 57450b37d71..9760636a122 100755 --- a/targets/targets.json +++ b/targets/targets.json @@ -3860,8 +3860,8 @@ }, "inherits": ["Target"], "macros_add": ["MBEDTLS_CONFIG_HW_SUPPORT"], - "device_has": ["RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "TRNG", "CAN", "FLASH", "EMAC"], "features": ["LWIP"], + "device_has": ["USTICKER", "RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "TRNG", "CAN", "FLASH", "EMAC"], "release_versions": ["5"], "device_name": "NUC472HI8AE", "bootloader_supported": true, @@ -3932,7 +3932,7 @@ }, "inherits": ["Target"], "progen": {"target": "numaker-pfm-m453"}, - "device_has": ["RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "CAN", "FLASH"], + "device_has": ["USTICKER", "RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "CAN", "FLASH"], "release_versions": ["2", "5"], "device_name": "M453VG6AE", "bootloader_supported": true @@ -3963,7 +3963,7 @@ }, "inherits": ["Target"], "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\"","MBED_FAULT_HANDLER_DISABLED"], - "device_has": ["RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH"], + "device_has": ["USTICKER", "RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH"], "release_versions": ["5"], "device_name": "NANO130KE3BN" }, @@ -4131,8 +4131,8 @@ }, "inherits": ["Target"], "macros_add": ["MBEDTLS_CONFIG_HW_SUPPORT"], - "device_has": ["RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "TRNG", "FLASH", "CAN", "EMAC"], "features": ["LWIP"], + "device_has": ["USTICKER", "RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "TRNG", "FLASH", "CAN", "EMAC"], "release_versions": ["5"], "device_name": "M487JIDAE", "bootloader_supported": true, From 9a3c14a3f75b4904281cf0b0ef6b0d4f0899ac59 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Wed, 23 May 2018 17:17:59 +0800 Subject: [PATCH 013/113] Meet new lp_ticker HAL spec (Mbed OS 5.9) 1. Add LPTICKER in device_has option of targets.json file. 2. Disable ticker interrupt in lp_ticker_init 3. Add lp_ticker_free 4. Enable interrupt in lp_ticker_set_interrupt --- .../TARGET_NUVOTON/TARGET_M451/lp_ticker.c | 36 ++++++++++++++++++- .../TARGET_NUVOTON/TARGET_M480/lp_ticker.c | 36 ++++++++++++++++++- .../TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c | 36 ++++++++++++++++++- .../TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c | 36 ++++++++++++++++++- targets/targets.json | 8 ++--- 5 files changed, 144 insertions(+), 8 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c index 282005904fe..a2a8abee635 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c @@ -53,6 +53,10 @@ static int ticker_inited = 0; void lp_ticker_init(void) { if (ticker_inited) { + /* By HAL spec, ticker_init allows the ticker to keep counting and disables the + * ticker interrupt. */ + lp_ticker_disable_interrupt(); + lp_ticker_clear_interrupt(); return; } ticker_inited = 1; @@ -88,7 +92,7 @@ void lp_ticker_init(void) NVIC_EnableIRQ(TIMER_MODINIT.irq_n); - TIMER_EnableInt(timer_base); + TIMER_DisableInt(timer_base); wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); TIMER_EnableWakeup(timer_base); @@ -101,6 +105,33 @@ void lp_ticker_init(void) while(! (timer_base->CTL & TIMER_CTL_ACTSTS_Msk)); } +void lp_ticker_free(void) +{ + TIMER_T *timer_base = (TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname); + + /* Stop counting */ + TIMER_Stop(timer_base); + wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + + /* Wait for timer to stop counting and unset active flag */ + while((timer_base->CTL & TIMER_CTL_ACTSTS_Msk)); + + /* Disable wakeup */ + TIMER_DisableWakeup(timer_base); + wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + + /* Disable interrupt */ + TIMER_DisableInt(timer_base); + wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); + + /* Disable IP clock */ + CLK_DisableModuleClock(TIMER_MODINIT.clkidx); + + ticker_inited = 0; +} + timestamp_t lp_ticker_read() { if (! ticker_inited) { @@ -131,6 +162,9 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) timer_base->CMP = cmp_timer; wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + + TIMER_EnableInt(timer_base); + wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); } void lp_ticker_disable_interrupt(void) diff --git a/targets/TARGET_NUVOTON/TARGET_M480/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_M480/lp_ticker.c index a09360608ea..83c43fe13c7 100644 --- a/targets/TARGET_NUVOTON/TARGET_M480/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M480/lp_ticker.c @@ -53,6 +53,10 @@ static int ticker_inited = 0; void lp_ticker_init(void) { if (ticker_inited) { + /* By HAL spec, ticker_init allows the ticker to keep counting and disables the + * ticker interrupt. */ + lp_ticker_disable_interrupt(); + lp_ticker_clear_interrupt(); return; } ticker_inited = 1; @@ -88,7 +92,7 @@ void lp_ticker_init(void) NVIC_EnableIRQ(TIMER_MODINIT.irq_n); - TIMER_EnableInt(timer_base); + TIMER_DisableInt(timer_base); wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); TIMER_EnableWakeup(timer_base); @@ -101,6 +105,33 @@ void lp_ticker_init(void) while(! (timer_base->CTL & TIMER_CTL_ACTSTS_Msk)); } +void lp_ticker_free(void) +{ + TIMER_T *timer_base = (TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname); + + /* Stop counting */ + TIMER_Stop(timer_base); + wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + + /* Wait for timer to stop counting and unset active flag */ + while((timer_base->CTL & TIMER_CTL_ACTSTS_Msk)); + + /* Disable wakeup */ + TIMER_DisableWakeup(timer_base); + wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + + /* Disable interrupt */ + TIMER_DisableInt(timer_base); + wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); + + /* Disable IP clock */ + CLK_DisableModuleClock(TIMER_MODINIT.clkidx); + + ticker_inited = 0; +} + timestamp_t lp_ticker_read() { if (! ticker_inited) { @@ -131,6 +162,9 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) timer_base->CMP = cmp_timer; wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + + TIMER_EnableInt(timer_base); + wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); } void lp_ticker_disable_interrupt(void) diff --git a/targets/TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c index 6355531d330..451834ed550 100644 --- a/targets/TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c @@ -55,6 +55,10 @@ static int ticker_inited = 0; void lp_ticker_init(void) { if (ticker_inited) { + /* By HAL spec, ticker_init allows the ticker to keep counting and disables the + * ticker interrupt. */ + lp_ticker_disable_interrupt(); + lp_ticker_clear_interrupt(); return; } ticker_inited = 1; @@ -92,7 +96,7 @@ void lp_ticker_init(void) NVIC_EnableIRQ(TIMER_MODINIT.irq_n); - TIMER_EnableInt(timer_base); + TIMER_DisableInt(timer_base); wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); TIMER_EnableWakeup(timer_base); @@ -105,6 +109,33 @@ void lp_ticker_init(void) while(! (timer_base->CTL & TIMER_CTL_TMR_ACT_Msk)); } +void lp_ticker_free(void) +{ + TIMER_T *timer_base = (TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname); + + /* Stop counting */ + TIMER_Stop(timer_base); + wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + + /* Wait for timer to stop counting and unset active flag */ + while((timer_base->CTL & TIMER_CTL_TMR_ACT_Msk)); + + /* Disable wakeup */ + TIMER_DisableWakeup(timer_base); + wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + + /* Disable interrupt */ + TIMER_DisableInt(timer_base); + wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); + + /* Disable IP clock */ + CLK_DisableModuleClock(TIMER_MODINIT.clkidx); + + ticker_inited = 0; +} + timestamp_t lp_ticker_read() { if (! ticker_inited) { @@ -135,6 +166,9 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) timer_base->CMPR = cmp_timer; wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + + TIMER_EnableInt(timer_base); + wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); } void lp_ticker_disable_interrupt(void) diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c index 08ce7f8989b..015e7caf2bc 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c @@ -53,6 +53,10 @@ static int ticker_inited = 0; void lp_ticker_init(void) { if (ticker_inited) { + /* By HAL spec, ticker_init allows the ticker to keep counting and disables the + * ticker interrupt. */ + lp_ticker_disable_interrupt(); + lp_ticker_clear_interrupt(); return; } ticker_inited = 1; @@ -87,7 +91,7 @@ void lp_ticker_init(void) NVIC_EnableIRQ(TIMER_MODINIT.irq_n); - TIMER_EnableInt(timer_base); + TIMER_DisableInt(timer_base); wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); TIMER_EnableWakeup(timer_base); @@ -100,6 +104,33 @@ void lp_ticker_init(void) while(! (timer_base->CTL & TIMER_CTL_ACTSTS_Msk)); } +void lp_ticker_free(void) +{ + TIMER_T *timer_base = (TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname); + + /* Stop counting */ + TIMER_Stop(timer_base); + wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + + /* Wait for timer to stop counting and unset active flag */ + while((timer_base->CTL & TIMER_CTL_ACTSTS_Msk)); + + /* Disable wakeup */ + TIMER_DisableWakeup(timer_base); + wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + + /* Disable interrupt */ + TIMER_DisableInt(timer_base); + wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); + + /* Disable IP clock */ + CLK_DisableModuleClock(TIMER_MODINIT.clkidx); + + ticker_inited = 0; +} + timestamp_t lp_ticker_read() { if (! ticker_inited) { @@ -130,6 +161,9 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) timer_base->CMP = cmp_timer; wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + + TIMER_EnableInt(timer_base); + wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); } void lp_ticker_disable_interrupt(void) diff --git a/targets/targets.json b/targets/targets.json index 9760636a122..2fe52657049 100755 --- a/targets/targets.json +++ b/targets/targets.json @@ -3861,7 +3861,7 @@ "inherits": ["Target"], "macros_add": ["MBEDTLS_CONFIG_HW_SUPPORT"], "features": ["LWIP"], - "device_has": ["USTICKER", "RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "TRNG", "CAN", "FLASH", "EMAC"], + "device_has": ["USTICKER", "LPTICKER", "RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "TRNG", "CAN", "FLASH", "EMAC"], "release_versions": ["5"], "device_name": "NUC472HI8AE", "bootloader_supported": true, @@ -3932,7 +3932,7 @@ }, "inherits": ["Target"], "progen": {"target": "numaker-pfm-m453"}, - "device_has": ["USTICKER", "RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "CAN", "FLASH"], + "device_has": ["USTICKER", "LPTICKER", "RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "CAN", "FLASH"], "release_versions": ["2", "5"], "device_name": "M453VG6AE", "bootloader_supported": true @@ -3963,7 +3963,7 @@ }, "inherits": ["Target"], "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\"","MBED_FAULT_HANDLER_DISABLED"], - "device_has": ["USTICKER", "RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH"], + "device_has": ["USTICKER", "LPTICKER", "RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH"], "release_versions": ["5"], "device_name": "NANO130KE3BN" }, @@ -4132,7 +4132,7 @@ "inherits": ["Target"], "macros_add": ["MBEDTLS_CONFIG_HW_SUPPORT"], "features": ["LWIP"], - "device_has": ["USTICKER", "RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "TRNG", "FLASH", "CAN", "EMAC"], + "device_has": ["USTICKER", "LPTICKER", "RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "TRNG", "FLASH", "CAN", "EMAC"], "release_versions": ["5"], "device_name": "M487JIDAE", "bootloader_supported": true, From d88534b476f3a07e24d107d8b55ae345fd3e4b30 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Fri, 25 May 2018 10:44:21 +0800 Subject: [PATCH 014/113] Fix CLK_Idle incorrectly enters into deep sleep mode This can happen with CLK_PowerDown() called first and then CLK_Idle() called. --- .../TARGET_NANO100/device/StdDriver/nano100_clk.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/targets/TARGET_NUVOTON/TARGET_NANO100/device/StdDriver/nano100_clk.c b/targets/TARGET_NUVOTON/TARGET_NANO100/device/StdDriver/nano100_clk.c index 32f791872c4..16bcab302dc 100644 --- a/targets/TARGET_NUVOTON/TARGET_NANO100/device/StdDriver/nano100_clk.c +++ b/targets/TARGET_NUVOTON/TARGET_NANO100/device/StdDriver/nano100_clk.c @@ -70,7 +70,9 @@ void CLK_EnableCKO(uint32_t u32ClkSrc, uint32_t u32ClkDiv) */ void CLK_PowerDown(void) { - SCB->SCR = SCB_SCR_SLEEPDEEP_Msk; + /* Set the processor uses deep sleep as its low power mode */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + CLK->PWRCTL |= (CLK_PWRCTL_PD_EN_Msk | CLK_PWRCTL_WK_DLY_Msk ); __WFI(); } @@ -81,6 +83,9 @@ void CLK_PowerDown(void) */ void CLK_Idle(void) { + /* Set the processor uses sleep as its low power mode */ + SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; + CLK->PWRCTL &= ~(CLK_PWRCTL_PD_EN_Msk ); __WFI(); } From 15a75c8923ed2051c9a1077e91cf3721f566b04c Mon Sep 17 00:00:00 2001 From: ccli8 Date: Fri, 25 May 2018 13:30:56 +0800 Subject: [PATCH 015/113] Adjust static/dynamic memory allocation for IAR toolchain to pass Greentea test --- .../TARGET_NANO100/device/TOOLCHAIN_IAR/NANO130.icf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/TARGET_NUVOTON/TARGET_NANO100/device/TOOLCHAIN_IAR/NANO130.icf b/targets/TARGET_NUVOTON/TARGET_NANO100/device/TOOLCHAIN_IAR/NANO130.icf index 1663174b16b..af97fd718e0 100644 --- a/targets/TARGET_NUVOTON/TARGET_NANO100/device/TOOLCHAIN_IAR/NANO130.icf +++ b/targets/TARGET_NUVOTON/TARGET_NANO100/device/TOOLCHAIN_IAR/NANO130.icf @@ -10,7 +10,7 @@ define symbol __ICFEDIT_region_IRAM_start__ = 0x20000000; define symbol __ICFEDIT_region_IRAM_end__ = 0x20004000 - 1; /*-Sizes-*/ define symbol __ICFEDIT_size_cstack__ = 0x600; -define symbol __ICFEDIT_size_heap__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0xE00; /**** End of ICF editor section. ###ICF###*/ From 2b87cb95503f5acd16ff048945ff42996c3ba60f Mon Sep 17 00:00:00 2001 From: ccli8 Date: Thu, 24 May 2018 14:33:05 +0800 Subject: [PATCH 016/113] Fix Greentea test code Mark mbed-os-tests-mbed_hal-common_tickers/time_cpu_cycles not in-lined. Otherwise, time_cpu_cycles may be in-lined somewhere and takes different CPU cycles on invocation. --- TESTS/mbed_hal/common_tickers/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/TESTS/mbed_hal/common_tickers/main.cpp b/TESTS/mbed_hal/common_tickers/main.cpp index b63df92c0c3..873f06b78ba 100644 --- a/TESTS/mbed_hal/common_tickers/main.cpp +++ b/TESTS/mbed_hal/common_tickers/main.cpp @@ -52,6 +52,7 @@ unsigned int ticker_overflow_delta; /* Auxiliary function to count ticker ticks elapsed during execution of N cycles of empty while loop. * Parameter is used to disable compiler optimisation. */ +MBED_NOINLINE uint32_t count_ticks(uint32_t cycles, uint32_t step) { register uint32_t reg_cycles = cycles; From 27c29cf6223371f55b6d8238d57f001107719f55 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Fri, 1 Jun 2018 15:37:53 +0800 Subject: [PATCH 017/113] Reduce blocking code in lp_ticker 1. Introduce S/W interrupt enable/disable to reduce calls to TIMER_EnableInt/TIMER_DisableInt. 2. Allow dummy interrupt because clear interrupt flag is not synchronized. 3. Enable LPTICKER_DELAY_TICKS to make lp_ticker_set_interrupt non-blocking. --- .../TARGET_NUVOTON/TARGET_M451/lp_ticker.c | 66 +++++++++++++------ .../TARGET_NUVOTON/TARGET_M480/lp_ticker.c | 66 +++++++++++++------ .../TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c | 66 +++++++++++++------ .../TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c | 66 +++++++++++++------ targets/targets.json | 7 +- 5 files changed, 188 insertions(+), 83 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c index a2a8abee635..e557d30397c 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c @@ -42,7 +42,23 @@ static const struct nu_modinit_s timer1_modinit = {TIMER_1, TMR1_MODULE, CLK_CLK #define TIMER_MODINIT timer1_modinit -static int ticker_inited = 0; +/* S/W interrupt enable/disable + * + * Because H/W interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs delay for lp_ticker, + * we introduce S/W interrupt enable/disable to avoid blocking code. With S/W interrupt enable/disable, + * H/W interrupt is always enabled after ticker_init. A S/W flag is used to tell whether or not + * ticker_irq_handler is ready to call. + */ + +/* Ticker uninitialized */ +#define NU_TICKER_UNINIT 0 +/* Ticker initialized with interrupt disabled */ +#define NU_TICKER_INIT_INTR_DIS 1 +/* Ticker initialized with interrupt enabled */ +#define NU_TICKER_INIT_INTR_EN 2 + +/* Track ticker status */ +static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu @@ -52,14 +68,14 @@ static int ticker_inited = 0; void lp_ticker_init(void) { - if (ticker_inited) { + if (ticker_stat) { /* By HAL spec, ticker_init allows the ticker to keep counting and disables the * ticker interrupt. */ lp_ticker_disable_interrupt(); lp_ticker_clear_interrupt(); return; } - ticker_inited = 1; + ticker_stat = NU_TICKER_INIT_INTR_DIS; // Reset module SYS_ResetModule(TIMER_MODINIT.rsetidx); @@ -92,7 +108,7 @@ void lp_ticker_init(void) NVIC_EnableIRQ(TIMER_MODINIT.irq_n); - TIMER_DisableInt(timer_base); + TIMER_EnableInt(timer_base); wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); TIMER_EnableWakeup(timer_base); @@ -129,12 +145,12 @@ void lp_ticker_free(void) /* Disable IP clock */ CLK_DisableModuleClock(TIMER_MODINIT.clkidx); - ticker_inited = 0; + ticker_stat = NU_TICKER_UNINIT; } timestamp_t lp_ticker_read() { - if (! ticker_inited) { + if (ticker_stat == NU_TICKER_UNINIT) { lp_ticker_init(); } @@ -145,6 +161,9 @@ timestamp_t lp_ticker_read() void lp_ticker_set_interrupt(timestamp_t timestamp) { + /* We can call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_EN; + /* In continuous mode, counter will be reset to zero with the following sequence: * 1. Stop counting * 2. Configure new CMP value @@ -160,27 +179,33 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) uint32_t cmp_timer = timestamp * NU_TMRCLK_PER_TICK; cmp_timer = NU_CLAMP(cmp_timer, TMR_CMP_MIN, TMR_CMP_MAX); + /* NOTE: Rely on LPTICKER_DELAY_TICKS to be non-blocking. */ timer_base->CMP = cmp_timer; - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); - - TIMER_EnableInt(timer_base); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); } void lp_ticker_disable_interrupt(void) { - TIMER_DisableInt((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + /* We cannot call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_DIS; } void lp_ticker_clear_interrupt(void) { - TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + /* To avoid sync issue, we clear TIF/TWKF simultaneously rather than call separate + * driver API: + * + * TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); + * TIMER_ClearWakeupFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); + */ + TIMER_T *timer_base = (TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname); + timer_base->INTSTS = TIMER_INTSTS_TIF_Msk | TIMER_INTSTS_TWKF_Msk; } void lp_ticker_fire_interrupt(void) { + /* We can call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_EN; + // NOTE: This event was in the past. Set the interrupt as pending, but don't process it here. // This prevents a recursive loop under heavy load which can lead to a stack overflow. NVIC_SetPendingIRQ(TIMER_MODINIT.irq_n); @@ -197,14 +222,15 @@ const ticker_info_t* lp_ticker_get_info() static void tmr1_vec(void) { - TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); - - TIMER_ClearWakeupFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + /* NOTE: We need to clear interrupt flag earlier to reduce possibility of dummy interrupt. + * This is because "clear interrupt flag" needs delay which isn't added here to avoid + * blocking in ISR code. */ + lp_ticker_clear_interrupt(); // NOTE: lp_ticker_set_interrupt() may get called in lp_ticker_irq_handler(); - lp_ticker_irq_handler(); + if (ticker_stat == NU_TICKER_INIT_INTR_EN) { + lp_ticker_irq_handler(); + } } #endif diff --git a/targets/TARGET_NUVOTON/TARGET_M480/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_M480/lp_ticker.c index 83c43fe13c7..6d1a09e3970 100644 --- a/targets/TARGET_NUVOTON/TARGET_M480/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M480/lp_ticker.c @@ -42,7 +42,23 @@ static const struct nu_modinit_s timer1_modinit = {TIMER_1, TMR1_MODULE, CLK_CLK #define TIMER_MODINIT timer1_modinit -static int ticker_inited = 0; +/* S/W interrupt enable/disable + * + * Because H/W interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs delay for lp_ticker, + * we introduce S/W interrupt enable/disable to avoid blocking code. With S/W interrupt enable/disable, + * H/W interrupt is always enabled after ticker_init. A S/W flag is used to tell whether or not + * ticker_irq_handler is ready to call. + */ + +/* Ticker uninitialized */ +#define NU_TICKER_UNINIT 0 +/* Ticker initialized with interrupt disabled */ +#define NU_TICKER_INIT_INTR_DIS 1 +/* Ticker initialized with interrupt enabled */ +#define NU_TICKER_INIT_INTR_EN 2 + +/* Track ticker status */ +static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu @@ -52,14 +68,14 @@ static int ticker_inited = 0; void lp_ticker_init(void) { - if (ticker_inited) { + if (ticker_stat) { /* By HAL spec, ticker_init allows the ticker to keep counting and disables the * ticker interrupt. */ lp_ticker_disable_interrupt(); lp_ticker_clear_interrupt(); return; } - ticker_inited = 1; + ticker_stat = NU_TICKER_INIT_INTR_DIS; // Reset module SYS_ResetModule(TIMER_MODINIT.rsetidx); @@ -92,7 +108,7 @@ void lp_ticker_init(void) NVIC_EnableIRQ(TIMER_MODINIT.irq_n); - TIMER_DisableInt(timer_base); + TIMER_EnableInt(timer_base); wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); TIMER_EnableWakeup(timer_base); @@ -129,12 +145,12 @@ void lp_ticker_free(void) /* Disable IP clock */ CLK_DisableModuleClock(TIMER_MODINIT.clkidx); - ticker_inited = 0; + ticker_stat = NU_TICKER_UNINIT; } timestamp_t lp_ticker_read() { - if (! ticker_inited) { + if (ticker_stat == NU_TICKER_UNINIT) { lp_ticker_init(); } @@ -145,6 +161,9 @@ timestamp_t lp_ticker_read() void lp_ticker_set_interrupt(timestamp_t timestamp) { + /* We can call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_EN; + /* In continuous mode, counter will be reset to zero with the following sequence: * 1. Stop counting * 2. Configure new CMP value @@ -160,27 +179,33 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) uint32_t cmp_timer = timestamp * NU_TMRCLK_PER_TICK; cmp_timer = NU_CLAMP(cmp_timer, TMR_CMP_MIN, TMR_CMP_MAX); + /* NOTE: Rely on LPTICKER_DELAY_TICKS to be non-blocking. */ timer_base->CMP = cmp_timer; - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); - - TIMER_EnableInt(timer_base); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); } void lp_ticker_disable_interrupt(void) { - TIMER_DisableInt((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + /* We cannot call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_DIS; } void lp_ticker_clear_interrupt(void) { - TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + /* To avoid sync issue, we clear TIF/TWKF simultaneously rather than call separate + * driver API: + * + * TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); + * TIMER_ClearWakeupFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); + */ + TIMER_T *timer_base = (TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname); + timer_base->INTSTS = TIMER_INTSTS_TIF_Msk | TIMER_INTSTS_TWKF_Msk; } void lp_ticker_fire_interrupt(void) { + /* We can call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_EN; + // NOTE: This event was in the past. Set the interrupt as pending, but don't process it here. // This prevents a recursive loop under heavy load which can lead to a stack overflow. NVIC_SetPendingIRQ(TIMER_MODINIT.irq_n); @@ -197,14 +222,15 @@ const ticker_info_t* lp_ticker_get_info() static void tmr1_vec(void) { - TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); - - TIMER_ClearWakeupFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + /* NOTE: We need to clear interrupt flag earlier to reduce possibility of dummy interrupt. + * This is because "clear interrupt flag" needs delay which isn't added here to avoid + * blocking in ISR code. */ + lp_ticker_clear_interrupt(); // NOTE: lp_ticker_set_interrupt() may get called in lp_ticker_irq_handler(); - lp_ticker_irq_handler(); + if (ticker_stat == NU_TICKER_INIT_INTR_EN) { + lp_ticker_irq_handler(); + } } #endif diff --git a/targets/TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c index 451834ed550..719ffb97c37 100644 --- a/targets/TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c @@ -44,7 +44,23 @@ static const struct nu_modinit_s timer1_modinit = {TIMER_1, TMR1_MODULE, CLK_CLK #define TIMER_MODINIT timer1_modinit -static int ticker_inited = 0; +/* S/W interrupt enable/disable + * + * Because H/W interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs delay for lp_ticker, + * we introduce S/W interrupt enable/disable to avoid blocking code. With S/W interrupt enable/disable, + * H/W interrupt is always enabled after ticker_init. A S/W flag is used to tell whether or not + * ticker_irq_handler is ready to call. + */ + +/* Ticker uninitialized */ +#define NU_TICKER_UNINIT 0 +/* Ticker initialized with interrupt disabled */ +#define NU_TICKER_INIT_INTR_DIS 1 +/* Ticker initialized with interrupt enabled */ +#define NU_TICKER_INIT_INTR_EN 2 + +/* Track ticker status */ +static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu @@ -54,14 +70,14 @@ static int ticker_inited = 0; void lp_ticker_init(void) { - if (ticker_inited) { + if (ticker_stat) { /* By HAL spec, ticker_init allows the ticker to keep counting and disables the * ticker interrupt. */ lp_ticker_disable_interrupt(); lp_ticker_clear_interrupt(); return; } - ticker_inited = 1; + ticker_stat = NU_TICKER_INIT_INTR_DIS; // Reset module SYS_ResetModule(TIMER_MODINIT.rsetidx); @@ -96,7 +112,7 @@ void lp_ticker_init(void) NVIC_EnableIRQ(TIMER_MODINIT.irq_n); - TIMER_DisableInt(timer_base); + TIMER_EnableInt(timer_base); wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); TIMER_EnableWakeup(timer_base); @@ -133,12 +149,12 @@ void lp_ticker_free(void) /* Disable IP clock */ CLK_DisableModuleClock(TIMER_MODINIT.clkidx); - ticker_inited = 0; + ticker_stat = NU_TICKER_UNINIT; } timestamp_t lp_ticker_read() { - if (! ticker_inited) { + if (ticker_stat == NU_TICKER_UNINIT) { lp_ticker_init(); } @@ -149,6 +165,9 @@ timestamp_t lp_ticker_read() void lp_ticker_set_interrupt(timestamp_t timestamp) { + /* We can call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_EN; + /* In continuous mode, counter will be reset to zero with the following sequence: * 1. Stop counting * 2. Configure new CMP value @@ -164,27 +183,33 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) uint32_t cmp_timer = timestamp * NU_TMRCLK_PER_TICK; cmp_timer = NU_CLAMP(cmp_timer, TMR_CMP_MIN, TMR_CMP_MAX); + /* NOTE: Rely on LPTICKER_DELAY_TICKS to be non-blocking. */ timer_base->CMPR = cmp_timer; - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); - - TIMER_EnableInt(timer_base); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); } void lp_ticker_disable_interrupt(void) { - TIMER_DisableInt((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + /* We cannot call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_DIS; } void lp_ticker_clear_interrupt(void) { - TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + /* To avoid sync issue, we clear TIF/TWKF simultaneously rather than call separate + * driver API: + * + * TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); + * TIMER_ClearWakeupFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); + */ + TIMER_T *timer_base = (TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname); + timer_base->ISR = TIMER_ISR_TMR_IS_Msk | TIMER_ISR_TMR_WAKE_STS_Msk; } void lp_ticker_fire_interrupt(void) { + /* We can call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_EN; + // NOTE: This event was in the past. Set the interrupt as pending, but don't process it here. // This prevents a recursive loop under heavy load which can lead to a stack overflow. NVIC_SetPendingIRQ(TIMER_MODINIT.irq_n); @@ -201,14 +226,15 @@ const ticker_info_t* lp_ticker_get_info() void TMR1_IRQHandler(void) { - TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); - - TIMER_ClearWakeupFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + /* NOTE: We need to clear interrupt flag earlier to reduce possibility of dummy interrupt. + * This is because "clear interrupt flag" needs delay which isn't added here to avoid + * blocking in ISR code. */ + lp_ticker_clear_interrupt(); // NOTE: lp_ticker_set_interrupt() may get called in lp_ticker_irq_handler(); - lp_ticker_irq_handler(); + if (ticker_stat == NU_TICKER_INIT_INTR_EN) { + lp_ticker_irq_handler(); + } } #endif diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c index 015e7caf2bc..86dd7c22159 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c @@ -42,7 +42,23 @@ static const struct nu_modinit_s timer1_modinit = {TIMER_1, TMR1_MODULE, CLK_CLK #define TIMER_MODINIT timer1_modinit -static int ticker_inited = 0; +/* S/W interrupt enable/disable + * + * Because H/W interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs delay for lp_ticker, + * we introduce S/W interrupt enable/disable to avoid blocking code. With S/W interrupt enable/disable, + * H/W interrupt is always enabled after ticker_init. A S/W flag is used to tell whether or not + * ticker_irq_handler is ready to call. + */ + +/* Ticker uninitialized */ +#define NU_TICKER_UNINIT 0 +/* Ticker initialized with interrupt disabled */ +#define NU_TICKER_INIT_INTR_DIS 1 +/* Ticker initialized with interrupt enabled */ +#define NU_TICKER_INIT_INTR_EN 2 + +/* Track ticker status */ +static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu @@ -52,14 +68,14 @@ static int ticker_inited = 0; void lp_ticker_init(void) { - if (ticker_inited) { + if (ticker_stat) { /* By HAL spec, ticker_init allows the ticker to keep counting and disables the * ticker interrupt. */ lp_ticker_disable_interrupt(); lp_ticker_clear_interrupt(); return; } - ticker_inited = 1; + ticker_stat = NU_TICKER_INIT_INTR_DIS; // Reset module SYS_ResetModule(TIMER_MODINIT.rsetidx); @@ -91,7 +107,7 @@ void lp_ticker_init(void) NVIC_EnableIRQ(TIMER_MODINIT.irq_n); - TIMER_DisableInt(timer_base); + TIMER_EnableInt(timer_base); wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); TIMER_EnableWakeup(timer_base); @@ -128,12 +144,12 @@ void lp_ticker_free(void) /* Disable IP clock */ CLK_DisableModuleClock(TIMER_MODINIT.clkidx); - ticker_inited = 0; + ticker_stat = NU_TICKER_UNINIT; } timestamp_t lp_ticker_read() { - if (! ticker_inited) { + if (ticker_stat == NU_TICKER_UNINIT) { lp_ticker_init(); } @@ -144,6 +160,9 @@ timestamp_t lp_ticker_read() void lp_ticker_set_interrupt(timestamp_t timestamp) { + /* We can call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_EN; + /* In continuous mode, counter will be reset to zero with the following sequence: * 1. Stop counting * 2. Configure new CMP value @@ -159,27 +178,33 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) uint32_t cmp_timer = timestamp * NU_TMRCLK_PER_TICK; cmp_timer = NU_CLAMP(cmp_timer, TMR_CMP_MIN, TMR_CMP_MAX); + /* NOTE: Rely on LPTICKER_DELAY_TICKS to be non-blocking. */ timer_base->CMP = cmp_timer; - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); - - TIMER_EnableInt(timer_base); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); } void lp_ticker_disable_interrupt(void) { - TIMER_DisableInt((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + /* We cannot call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_DIS; } void lp_ticker_clear_interrupt(void) { - TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + /* To avoid sync issue, we clear TIF/TWKF simultaneously rather than call separate + * driver API: + * + * TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); + * TIMER_ClearWakeupFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); + */ + TIMER_T *timer_base = (TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname); + timer_base->INTSTS = TIMER_INTSTS_TIF_Msk | TIMER_INTSTS_TWKF_Msk; } void lp_ticker_fire_interrupt(void) { + /* We can call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_EN; + // NOTE: This event was in the past. Set the interrupt as pending, but don't process it here. // This prevents a recursive loop under heavy load which can lead to a stack overflow. NVIC_SetPendingIRQ(TIMER_MODINIT.irq_n); @@ -196,14 +221,15 @@ const ticker_info_t* lp_ticker_get_info() static void tmr1_vec(void) { - TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); - - TIMER_ClearWakeupFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); + /* NOTE: We need to clear interrupt flag earlier to reduce possibility of dummy interrupt. + * This is because "clear interrupt flag" needs delay which isn't added here to avoid + * blocking in ISR code. */ + lp_ticker_clear_interrupt(); // NOTE: lp_ticker_set_interrupt() may get called in lp_ticker_irq_handler(); - lp_ticker_irq_handler(); + if (ticker_stat == NU_TICKER_INIT_INTR_EN) { + lp_ticker_irq_handler(); + } } #endif diff --git a/targets/targets.json b/targets/targets.json index 2fe52657049..389eaf964f9 100755 --- a/targets/targets.json +++ b/targets/targets.json @@ -3859,8 +3859,8 @@ } }, "inherits": ["Target"], - "macros_add": ["MBEDTLS_CONFIG_HW_SUPPORT"], "features": ["LWIP"], + "macros_add": ["MBEDTLS_CONFIG_HW_SUPPORT", "LPTICKER_DELAY_TICKS=3"], "device_has": ["USTICKER", "LPTICKER", "RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "TRNG", "CAN", "FLASH", "EMAC"], "release_versions": ["5"], "device_name": "NUC472HI8AE", @@ -3931,6 +3931,7 @@ } }, "inherits": ["Target"], + "macros_add": ["LPTICKER_DELAY_TICKS=3"], "progen": {"target": "numaker-pfm-m453"}, "device_has": ["USTICKER", "LPTICKER", "RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "CAN", "FLASH"], "release_versions": ["2", "5"], @@ -3962,7 +3963,7 @@ } }, "inherits": ["Target"], - "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\"","MBED_FAULT_HANDLER_DISABLED"], + "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\"","MBED_FAULT_HANDLER_DISABLED", "LPTICKER_DELAY_TICKS=3"], "device_has": ["USTICKER", "LPTICKER", "RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH"], "release_versions": ["5"], "device_name": "NANO130KE3BN" @@ -4130,8 +4131,8 @@ } }, "inherits": ["Target"], - "macros_add": ["MBEDTLS_CONFIG_HW_SUPPORT"], "features": ["LWIP"], + "macros_add": ["MBEDTLS_CONFIG_HW_SUPPORT", "LPTICKER_DELAY_TICKS=3"], "device_has": ["USTICKER", "LPTICKER", "RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "TRNG", "FLASH", "CAN", "EMAC"], "release_versions": ["5"], "device_name": "M487JIDAE", From ab6f5fdb75252bb7d5cfd01391369043318d45ca Mon Sep 17 00:00:00 2001 From: ccli8 Date: Fri, 1 Jun 2018 16:38:02 +0800 Subject: [PATCH 018/113] Synchronize lp_ticker code to us_ticker This is to make us_ticker/lp_ticker code consistent. --- .../TARGET_NUVOTON/TARGET_M451/us_ticker.c | 51 ++++++++++++++----- .../TARGET_NUVOTON/TARGET_M480/us_ticker.c | 50 +++++++++++++----- .../TARGET_NUVOTON/TARGET_NANO100/us_ticker.c | 50 +++++++++++++----- .../TARGET_NUVOTON/TARGET_NUC472/us_ticker.c | 50 +++++++++++++----- 4 files changed, 153 insertions(+), 48 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c index a16c388609a..de6b4811045 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c @@ -40,21 +40,37 @@ static const struct nu_modinit_s timer0_modinit = {TIMER_0, TMR0_MODULE, CLK_CLK #define TIMER_MODINIT timer0_modinit -static int ticker_inited = 0; +/* S/W interrupt enable/disable + * + * Because H/W interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs delay for lp_ticker, + * we introduce S/W interrupt enable/disable to avoid blocking code. With S/W interrupt enable/disable, + * H/W interrupt is always enabled after ticker_init. A S/W flag is used to tell whether or not + * ticker_irq_handler is ready to call. + */ + +/* Ticker uninitialized */ +#define NU_TICKER_UNINIT 0 +/* Ticker initialized with interrupt disabled */ +#define NU_TICKER_INIT_INTR_DIS 1 +/* Ticker initialized with interrupt enabled */ +#define NU_TICKER_INIT_INTR_EN 2 + +/* Track ticker status */ +static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu void us_ticker_init(void) { - if (ticker_inited) { + if (ticker_stat) { /* By HAL spec, ticker_init allows the ticker to keep counting and disables the * ticker interrupt. */ us_ticker_disable_interrupt(); us_ticker_clear_interrupt(); return; } - ticker_inited = 1; + ticker_stat = NU_TICKER_INIT_INTR_DIS; // Reset IP SYS_ResetModule(TIMER_MODINIT.rsetidx); @@ -82,7 +98,7 @@ void us_ticker_init(void) NVIC_EnableIRQ(TIMER_MODINIT.irq_n); - TIMER_DisableInt(timer_base); + TIMER_EnableInt(timer_base); TIMER_Start(timer_base); /* Wait for timer to start counting and raise active flag */ @@ -95,6 +111,7 @@ void us_ticker_free(void) /* Stop counting */ TIMER_Stop(timer_base); + /* Wait for timer to stop counting and unset active flag */ while((timer_base->CTL & TIMER_CTL_ACTSTS_Msk)); @@ -105,12 +122,12 @@ void us_ticker_free(void) /* Disable IP clock */ CLK_DisableModuleClock(TIMER_MODINIT.clkidx); - ticker_inited = 0; + ticker_stat = NU_TICKER_UNINIT; } uint32_t us_ticker_read() { - if (! ticker_inited) { + if (ticker_stat == NU_TICKER_UNINIT) { us_ticker_init(); } @@ -121,6 +138,9 @@ uint32_t us_ticker_read() void us_ticker_set_interrupt(timestamp_t timestamp) { + /* We can call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_EN; + /* In continuous mode, counter will be reset to zero with the following sequence: * 1. Stop counting * 2. Configure new CMP value @@ -136,13 +156,12 @@ void us_ticker_set_interrupt(timestamp_t timestamp) uint32_t cmp_timer = timestamp * NU_TMRCLK_PER_TICK; cmp_timer = NU_CLAMP(cmp_timer, TMR_CMP_MIN, TMR_CMP_MAX); timer_base->CMP = cmp_timer; - - TIMER_EnableInt(timer_base); } void us_ticker_disable_interrupt(void) { - TIMER_DisableInt((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); + /* We cannot call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_DIS; } void us_ticker_clear_interrupt(void) @@ -152,6 +171,9 @@ void us_ticker_clear_interrupt(void) void us_ticker_fire_interrupt(void) { + /* We can call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_EN; + // NOTE: This event was in the past. Set the interrupt as pending, but don't process it here. // This prevents a recursive loop under heavy load which can lead to a stack overflow. NVIC_SetPendingIRQ(TIMER_MODINIT.irq_n); @@ -168,10 +190,15 @@ const ticker_info_t* us_ticker_get_info() static void tmr0_vec(void) { - TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - + /* NOTE: We need to clear interrupt flag earlier to reduce possibility of dummy interrupt. + * This is because "clear interrupt flag" needs delay which isn't added here to avoid + * blocking in ISR code. */ + us_ticker_clear_interrupt(); + // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); - us_ticker_irq_handler(); + if (ticker_stat == NU_TICKER_INIT_INTR_EN) { + us_ticker_irq_handler(); + } } #endif diff --git a/targets/TARGET_NUVOTON/TARGET_M480/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_M480/us_ticker.c index 196f0ab3556..064fdf9f6b5 100644 --- a/targets/TARGET_NUVOTON/TARGET_M480/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M480/us_ticker.c @@ -40,21 +40,37 @@ static const struct nu_modinit_s timer0_modinit = {TIMER_0, TMR0_MODULE, CLK_CLK #define TIMER_MODINIT timer0_modinit -static int ticker_inited = 0; +/* S/W interrupt enable/disable + * + * Because H/W interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs delay for lp_ticker, + * we introduce S/W interrupt enable/disable to avoid blocking code. With S/W interrupt enable/disable, + * H/W interrupt is always enabled after ticker_init. A S/W flag is used to tell whether or not + * ticker_irq_handler is ready to call. + */ + +/* Ticker uninitialized */ +#define NU_TICKER_UNINIT 0 +/* Ticker initialized with interrupt disabled */ +#define NU_TICKER_INIT_INTR_DIS 1 +/* Ticker initialized with interrupt enabled */ +#define NU_TICKER_INIT_INTR_EN 2 + +/* Track ticker status */ +static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu void us_ticker_init(void) { - if (ticker_inited) { + if (ticker_stat) { /* By HAL spec, ticker_init allows the ticker to keep counting and disables the * ticker interrupt. */ us_ticker_disable_interrupt(); us_ticker_clear_interrupt(); return; } - ticker_inited = 1; + ticker_stat = NU_TICKER_INIT_INTR_DIS; // Reset IP SYS_ResetModule(TIMER_MODINIT.rsetidx); @@ -82,7 +98,7 @@ void us_ticker_init(void) NVIC_EnableIRQ(TIMER_MODINIT.irq_n); - TIMER_DisableInt(timer_base); + TIMER_EnableInt(timer_base); TIMER_Start(timer_base); /* Wait for timer to start counting and raise active flag */ @@ -106,12 +122,12 @@ void us_ticker_free(void) /* Disable IP clock */ CLK_DisableModuleClock(TIMER_MODINIT.clkidx); - ticker_inited = 0; + ticker_stat = NU_TICKER_UNINIT; } uint32_t us_ticker_read() { - if (! ticker_inited) { + if (ticker_stat == NU_TICKER_UNINIT) { us_ticker_init(); } @@ -122,6 +138,9 @@ uint32_t us_ticker_read() void us_ticker_set_interrupt(timestamp_t timestamp) { + /* We can call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_EN; + /* In continuous mode, counter will be reset to zero with the following sequence: * 1. Stop counting * 2. Configure new CMP value @@ -137,13 +156,12 @@ void us_ticker_set_interrupt(timestamp_t timestamp) uint32_t cmp_timer = timestamp * NU_TMRCLK_PER_TICK; cmp_timer = NU_CLAMP(cmp_timer, TMR_CMP_MIN, TMR_CMP_MAX); timer_base->CMP = cmp_timer; - - TIMER_EnableInt(timer_base); } void us_ticker_disable_interrupt(void) { - TIMER_DisableInt((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); + /* We cannot call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_DIS; } void us_ticker_clear_interrupt(void) @@ -153,6 +171,9 @@ void us_ticker_clear_interrupt(void) void us_ticker_fire_interrupt(void) { + /* We can call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_EN; + // NOTE: This event was in the past. Set the interrupt as pending, but don't process it here. // This prevents a recursive loop under heavy load which can lead to a stack overflow. NVIC_SetPendingIRQ(TIMER_MODINIT.irq_n); @@ -169,10 +190,15 @@ const ticker_info_t* us_ticker_get_info() static void tmr0_vec(void) { - TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - + /* NOTE: We need to clear interrupt flag earlier to reduce possibility of dummy interrupt. + * This is because "clear interrupt flag" needs delay which isn't added here to avoid + * blocking in ISR code. */ + us_ticker_clear_interrupt(); + // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); - us_ticker_irq_handler(); + if (ticker_stat == NU_TICKER_INIT_INTR_EN) { + us_ticker_irq_handler(); + } } #endif diff --git a/targets/TARGET_NUVOTON/TARGET_NANO100/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_NANO100/us_ticker.c index 0461648c189..4eb0f4df47b 100644 --- a/targets/TARGET_NUVOTON/TARGET_NANO100/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NANO100/us_ticker.c @@ -42,21 +42,37 @@ static const struct nu_modinit_s timer0_modinit = {TIMER_0, TMR0_MODULE, CLK_CLK #define TIMER_MODINIT timer0_modinit -static int ticker_inited = 0; +/* S/W interrupt enable/disable + * + * Because H/W interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs delay for lp_ticker, + * we introduce S/W interrupt enable/disable to avoid blocking code. With S/W interrupt enable/disable, + * H/W interrupt is always enabled after ticker_init. A S/W flag is used to tell whether or not + * ticker_irq_handler is ready to call. + */ + +/* Ticker uninitialized */ +#define NU_TICKER_UNINIT 0 +/* Ticker initialized with interrupt disabled */ +#define NU_TICKER_INIT_INTR_DIS 1 +/* Ticker initialized with interrupt enabled */ +#define NU_TICKER_INIT_INTR_EN 2 + +/* Track ticker status */ +static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu void us_ticker_init(void) { - if (ticker_inited) { + if (ticker_stat) { /* By HAL spec, ticker_init allows the ticker to keep counting and disables the * ticker interrupt. */ us_ticker_disable_interrupt(); us_ticker_clear_interrupt(); return; } - ticker_inited = 1; + ticker_stat = NU_TICKER_INIT_INTR_DIS; // Reset IP SYS_ResetModule(TIMER_MODINIT.rsetidx); @@ -84,7 +100,7 @@ void us_ticker_init(void) NVIC_EnableIRQ(TIMER_MODINIT.irq_n); - TIMER_DisableInt(timer_base); + TIMER_EnableInt(timer_base); TIMER_Start(timer_base); /* Wait for timer to start counting and raise active flag */ @@ -108,12 +124,12 @@ void us_ticker_free(void) /* Disable IP clock */ CLK_DisableModuleClock(TIMER_MODINIT.clkidx); - ticker_inited = 0; + ticker_stat = NU_TICKER_UNINIT; } uint32_t us_ticker_read() { - if (! ticker_inited) { + if (ticker_stat == NU_TICKER_UNINIT) { us_ticker_init(); } @@ -124,6 +140,9 @@ uint32_t us_ticker_read() void us_ticker_set_interrupt(timestamp_t timestamp) { + /* We can call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_EN; + /* In continuous mode, counter will be reset to zero with the following sequence: * 1. Stop counting * 2. Configure new CMP value @@ -139,13 +158,12 @@ void us_ticker_set_interrupt(timestamp_t timestamp) uint32_t cmp_timer = timestamp * NU_TMRCLK_PER_TICK; cmp_timer = NU_CLAMP(cmp_timer, TMR_CMP_MIN, TMR_CMP_MAX); timer_base->CMPR = cmp_timer; - - TIMER_EnableInt(timer_base); } void us_ticker_disable_interrupt(void) { - TIMER_DisableInt((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); + /* We cannot call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_DIS; } void us_ticker_clear_interrupt(void) @@ -155,6 +173,9 @@ void us_ticker_clear_interrupt(void) void us_ticker_fire_interrupt(void) { + /* We can call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_EN; + // NOTE: This event was in the past. Set the interrupt as pending, but don't process it here. // This prevents a recursive loop under heavy load which can lead to a stack overflow. NVIC_SetPendingIRQ(TIMER_MODINIT.irq_n); @@ -171,10 +192,15 @@ const ticker_info_t* us_ticker_get_info() void TMR0_IRQHandler(void) { - TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - + /* NOTE: We need to clear interrupt flag earlier to reduce possibility of dummy interrupt. + * This is because "clear interrupt flag" needs delay which isn't added here to avoid + * blocking in ISR code. */ + us_ticker_clear_interrupt(); + // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); - us_ticker_irq_handler(); + if (ticker_stat == NU_TICKER_INIT_INTR_EN) { + us_ticker_irq_handler(); + } } #endif diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c index 3043eccef63..6bbc6ec6e73 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c @@ -40,21 +40,37 @@ static const struct nu_modinit_s timer0_modinit = {TIMER_0, TMR0_MODULE, CLK_CLK #define TIMER_MODINIT timer0_modinit -static int ticker_inited = 0; +/* S/W interrupt enable/disable + * + * Because H/W interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs delay for lp_ticker, + * we introduce S/W interrupt enable/disable to avoid blocking code. With S/W interrupt enable/disable, + * H/W interrupt is always enabled after ticker_init. A S/W flag is used to tell whether or not + * ticker_irq_handler is ready to call. + */ + +/* Ticker uninitialized */ +#define NU_TICKER_UNINIT 0 +/* Ticker initialized with interrupt disabled */ +#define NU_TICKER_INIT_INTR_DIS 1 +/* Ticker initialized with interrupt enabled */ +#define NU_TICKER_INIT_INTR_EN 2 + +/* Track ticker status */ +static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu void us_ticker_init(void) { - if (ticker_inited) { + if (ticker_stat) { /* By HAL spec, ticker_init allows the ticker to keep counting and disables the * ticker interrupt. */ us_ticker_disable_interrupt(); us_ticker_clear_interrupt(); return; } - ticker_inited = 1; + ticker_stat = NU_TICKER_INIT_INTR_DIS; // Reset IP SYS_ResetModule(TIMER_MODINIT.rsetidx); @@ -81,7 +97,7 @@ void us_ticker_init(void) NVIC_EnableIRQ(TIMER_MODINIT.irq_n); - TIMER_DisableInt(timer_base); + TIMER_EnableInt(timer_base); TIMER_Start(timer_base); /* Wait for timer to start counting and raise active flag */ @@ -105,12 +121,12 @@ void us_ticker_free(void) /* Disable IP clock */ CLK_DisableModuleClock(TIMER_MODINIT.clkidx); - ticker_inited = 0; + ticker_stat = NU_TICKER_UNINIT; } uint32_t us_ticker_read() { - if (! ticker_inited) { + if (ticker_stat == NU_TICKER_UNINIT) { us_ticker_init(); } @@ -121,6 +137,9 @@ uint32_t us_ticker_read() void us_ticker_set_interrupt(timestamp_t timestamp) { + /* We can call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_EN; + /* In continuous mode, counter will be reset to zero with the following sequence: * 1. Stop counting * 2. Configure new CMP value @@ -136,13 +155,12 @@ void us_ticker_set_interrupt(timestamp_t timestamp) uint32_t cmp_timer = timestamp * NU_TMRCLK_PER_TICK; cmp_timer = NU_CLAMP(cmp_timer, TMR_CMP_MIN, TMR_CMP_MAX); timer_base->CMP = cmp_timer; - - TIMER_EnableInt(timer_base); } void us_ticker_disable_interrupt(void) { - TIMER_DisableInt((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); + /* We cannot call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_DIS; } void us_ticker_clear_interrupt(void) @@ -152,6 +170,9 @@ void us_ticker_clear_interrupt(void) void us_ticker_fire_interrupt(void) { + /* We can call ticker_irq_handler now. */ + ticker_stat = NU_TICKER_INIT_INTR_EN; + // NOTE: This event was in the past. Set the interrupt as pending, but don't process it here. // This prevents a recursive loop under heavy load which can lead to a stack overflow. NVIC_SetPendingIRQ(TIMER_MODINIT.irq_n); @@ -168,10 +189,15 @@ const ticker_info_t* us_ticker_get_info() static void tmr0_vec(void) { - TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(TIMER_MODINIT.modname)); - + /* NOTE: We need to clear interrupt flag earlier to reduce possibility of dummy interrupt. + * This is because "clear interrupt flag" needs delay which isn't added here to avoid + * blocking in ISR code. */ + us_ticker_clear_interrupt(); + // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); - us_ticker_irq_handler(); + if (ticker_stat == NU_TICKER_INIT_INTR_EN) { + us_ticker_irq_handler(); + } } #endif From b1821947472bd8640e6a32ba5b07e0cbe3b4d775 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Mon, 11 Jun 2018 10:29:41 +0800 Subject: [PATCH 019/113] Fix trap in lp_ticker ISR with non-blocking "clear interrupt flag" --- .../TARGET_NUVOTON/TARGET_M451/lp_ticker.c | 67 ++++++++++--------- .../TARGET_NUVOTON/TARGET_M480/lp_ticker.c | 67 ++++++++++--------- .../TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c | 67 ++++++++++--------- .../TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c | 67 ++++++++++--------- 4 files changed, 144 insertions(+), 124 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c index e557d30397c..6b61819ee92 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c @@ -42,23 +42,14 @@ static const struct nu_modinit_s timer1_modinit = {TIMER_1, TMR1_MODULE, CLK_CLK #define TIMER_MODINIT timer1_modinit -/* S/W interrupt enable/disable +/* Timer interrupt enable/disable * - * Because H/W interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs delay for lp_ticker, - * we introduce S/W interrupt enable/disable to avoid blocking code. With S/W interrupt enable/disable, - * H/W interrupt is always enabled after ticker_init. A S/W flag is used to tell whether or not - * ticker_irq_handler is ready to call. + * Because Timer interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs wait for lp_ticker, + * we call NVIC_DisableIRQ/NVIC_EnableIRQ instead. */ -/* Ticker uninitialized */ -#define NU_TICKER_UNINIT 0 -/* Ticker initialized with interrupt disabled */ -#define NU_TICKER_INIT_INTR_DIS 1 -/* Ticker initialized with interrupt enabled */ -#define NU_TICKER_INIT_INTR_EN 2 - /* Track ticker status */ -static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; +static volatile uint16_t ticker_inited = 0; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu @@ -68,14 +59,15 @@ static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; void lp_ticker_init(void) { - if (ticker_stat) { + if (ticker_inited) { /* By HAL spec, ticker_init allows the ticker to keep counting and disables the * ticker interrupt. */ lp_ticker_disable_interrupt(); lp_ticker_clear_interrupt(); + NVIC_ClearPendingIRQ(TIMER_MODINIT.irq_n); return; } - ticker_stat = NU_TICKER_INIT_INTR_DIS; + ticker_inited = 1; // Reset module SYS_ResetModule(TIMER_MODINIT.rsetidx); @@ -106,7 +98,7 @@ void lp_ticker_init(void) // Set vector NVIC_SetVector(TIMER_MODINIT.irq_n, (uint32_t) TIMER_MODINIT.var); - NVIC_EnableIRQ(TIMER_MODINIT.irq_n); + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); TIMER_EnableInt(timer_base); wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); @@ -145,12 +137,12 @@ void lp_ticker_free(void) /* Disable IP clock */ CLK_DisableModuleClock(TIMER_MODINIT.clkidx); - ticker_stat = NU_TICKER_UNINIT; + ticker_inited = 0; } timestamp_t lp_ticker_read() { - if (ticker_stat == NU_TICKER_UNINIT) { + if (! ticker_inited) { lp_ticker_init(); } @@ -161,9 +153,6 @@ timestamp_t lp_ticker_read() void lp_ticker_set_interrupt(timestamp_t timestamp) { - /* We can call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_EN; - /* In continuous mode, counter will be reset to zero with the following sequence: * 1. Stop counting * 2. Configure new CMP value @@ -181,12 +170,15 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) /* NOTE: Rely on LPTICKER_DELAY_TICKS to be non-blocking. */ timer_base->CMP = cmp_timer; + + /* We can call ticker_irq_handler now. */ + NVIC_EnableIRQ(TIMER_MODINIT.irq_n); } void lp_ticker_disable_interrupt(void) { /* We cannot call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_DIS; + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); } void lp_ticker_clear_interrupt(void) @@ -203,12 +195,12 @@ void lp_ticker_clear_interrupt(void) void lp_ticker_fire_interrupt(void) { - /* We can call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_EN; - // NOTE: This event was in the past. Set the interrupt as pending, but don't process it here. // This prevents a recursive loop under heavy load which can lead to a stack overflow. NVIC_SetPendingIRQ(TIMER_MODINIT.irq_n); + + /* We can call ticker_irq_handler now. */ + NVIC_EnableIRQ(TIMER_MODINIT.irq_n); } const ticker_info_t* lp_ticker_get_info() @@ -222,15 +214,28 @@ const ticker_info_t* lp_ticker_get_info() static void tmr1_vec(void) { - /* NOTE: We need to clear interrupt flag earlier to reduce possibility of dummy interrupt. - * This is because "clear interrupt flag" needs delay which isn't added here to avoid - * blocking in ISR code. */ + /* NOTE: Avoid blocking in ISR due to wait for "clear interrupt flag" + * + * "clear interrupt flag" needs wait to take effect which isn't added here to avoid + * blocking in ISR. + * + * Continuing above, we will get stuck in ISR due to dummy interrupt until + * "clear interrupt flag" takes effect. To avoid it, we disable interrupt here and enable + * interrupt in lp_ticker_fire_interrupt/lp_ticker_set_interrupt. There is another risk + * that we may get stuck in a loop of ISR and lp_ticker_fire_interrupt/ + * lp_ticker_set_interrupt (called by lp_ticker_irq_handler), but actually we don't: + * 1. When lp_ticker_fire_interrupt gets called, it means there is a past event and so this + * interrupt isn't dummy. + * 2. With LPTICKER_DELAY_TICKS enabled, it is lp_ticker_set_interrupt_wrapper rather than + * lp_ticker_set_interrupt that gets straight called. lp_ticker_set_interrupt_wrapper + * guarantees that lp_ticker_set_interrupt won't get re-called in LPTICKER_DELAY_TICKS ticks + * which is just enough for "clear interrupt flag" to take effect. + */ lp_ticker_clear_interrupt(); + lp_ticker_disable_interrupt(); // NOTE: lp_ticker_set_interrupt() may get called in lp_ticker_irq_handler(); - if (ticker_stat == NU_TICKER_INIT_INTR_EN) { - lp_ticker_irq_handler(); - } + lp_ticker_irq_handler(); } #endif diff --git a/targets/TARGET_NUVOTON/TARGET_M480/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_M480/lp_ticker.c index 6d1a09e3970..6cf30d1f2b2 100644 --- a/targets/TARGET_NUVOTON/TARGET_M480/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M480/lp_ticker.c @@ -42,23 +42,14 @@ static const struct nu_modinit_s timer1_modinit = {TIMER_1, TMR1_MODULE, CLK_CLK #define TIMER_MODINIT timer1_modinit -/* S/W interrupt enable/disable +/* Timer interrupt enable/disable * - * Because H/W interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs delay for lp_ticker, - * we introduce S/W interrupt enable/disable to avoid blocking code. With S/W interrupt enable/disable, - * H/W interrupt is always enabled after ticker_init. A S/W flag is used to tell whether or not - * ticker_irq_handler is ready to call. + * Because Timer interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs wait for lp_ticker, + * we call NVIC_DisableIRQ/NVIC_EnableIRQ instead. */ -/* Ticker uninitialized */ -#define NU_TICKER_UNINIT 0 -/* Ticker initialized with interrupt disabled */ -#define NU_TICKER_INIT_INTR_DIS 1 -/* Ticker initialized with interrupt enabled */ -#define NU_TICKER_INIT_INTR_EN 2 - /* Track ticker status */ -static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; +static volatile uint16_t ticker_inited = 0; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu @@ -68,14 +59,15 @@ static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; void lp_ticker_init(void) { - if (ticker_stat) { + if (ticker_inited) { /* By HAL spec, ticker_init allows the ticker to keep counting and disables the * ticker interrupt. */ lp_ticker_disable_interrupt(); lp_ticker_clear_interrupt(); + NVIC_ClearPendingIRQ(TIMER_MODINIT.irq_n); return; } - ticker_stat = NU_TICKER_INIT_INTR_DIS; + ticker_inited = 1; // Reset module SYS_ResetModule(TIMER_MODINIT.rsetidx); @@ -106,7 +98,7 @@ void lp_ticker_init(void) // Set vector NVIC_SetVector(TIMER_MODINIT.irq_n, (uint32_t) TIMER_MODINIT.var); - NVIC_EnableIRQ(TIMER_MODINIT.irq_n); + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); TIMER_EnableInt(timer_base); wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); @@ -145,12 +137,12 @@ void lp_ticker_free(void) /* Disable IP clock */ CLK_DisableModuleClock(TIMER_MODINIT.clkidx); - ticker_stat = NU_TICKER_UNINIT; + ticker_inited = 0; } timestamp_t lp_ticker_read() { - if (ticker_stat == NU_TICKER_UNINIT) { + if (! ticker_inited) { lp_ticker_init(); } @@ -161,9 +153,6 @@ timestamp_t lp_ticker_read() void lp_ticker_set_interrupt(timestamp_t timestamp) { - /* We can call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_EN; - /* In continuous mode, counter will be reset to zero with the following sequence: * 1. Stop counting * 2. Configure new CMP value @@ -181,12 +170,15 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) /* NOTE: Rely on LPTICKER_DELAY_TICKS to be non-blocking. */ timer_base->CMP = cmp_timer; + + /* We can call ticker_irq_handler now. */ + NVIC_EnableIRQ(TIMER_MODINIT.irq_n); } void lp_ticker_disable_interrupt(void) { /* We cannot call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_DIS; + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); } void lp_ticker_clear_interrupt(void) @@ -203,12 +195,12 @@ void lp_ticker_clear_interrupt(void) void lp_ticker_fire_interrupt(void) { - /* We can call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_EN; - // NOTE: This event was in the past. Set the interrupt as pending, but don't process it here. // This prevents a recursive loop under heavy load which can lead to a stack overflow. NVIC_SetPendingIRQ(TIMER_MODINIT.irq_n); + + /* We can call ticker_irq_handler now. */ + NVIC_EnableIRQ(TIMER_MODINIT.irq_n); } const ticker_info_t* lp_ticker_get_info() @@ -222,15 +214,28 @@ const ticker_info_t* lp_ticker_get_info() static void tmr1_vec(void) { - /* NOTE: We need to clear interrupt flag earlier to reduce possibility of dummy interrupt. - * This is because "clear interrupt flag" needs delay which isn't added here to avoid - * blocking in ISR code. */ + /* NOTE: Avoid blocking in ISR due to wait for "clear interrupt flag" + * + * "clear interrupt flag" needs wait to take effect which isn't added here to avoid + * blocking in ISR. + * + * Continuing above, we will get stuck in ISR due to dummy interrupt until + * "clear interrupt flag" takes effect. To avoid it, we disable interrupt here and enable + * interrupt in lp_ticker_fire_interrupt/lp_ticker_set_interrupt. There is another risk + * that we may get stuck in a loop of ISR and lp_ticker_fire_interrupt/ + * lp_ticker_set_interrupt (called by lp_ticker_irq_handler), but actually we don't: + * 1. When lp_ticker_fire_interrupt gets called, it means there is a past event and so this + * interrupt isn't dummy. + * 2. With LPTICKER_DELAY_TICKS enabled, it is lp_ticker_set_interrupt_wrapper rather than + * lp_ticker_set_interrupt that gets straight called. lp_ticker_set_interrupt_wrapper + * guarantees that lp_ticker_set_interrupt won't get re-called in LPTICKER_DELAY_TICKS ticks + * which is just enough for "clear interrupt flag" to take effect. + */ lp_ticker_clear_interrupt(); + lp_ticker_disable_interrupt(); // NOTE: lp_ticker_set_interrupt() may get called in lp_ticker_irq_handler(); - if (ticker_stat == NU_TICKER_INIT_INTR_EN) { - lp_ticker_irq_handler(); - } + lp_ticker_irq_handler(); } #endif diff --git a/targets/TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c index 719ffb97c37..dda02fef4c2 100644 --- a/targets/TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c @@ -44,23 +44,14 @@ static const struct nu_modinit_s timer1_modinit = {TIMER_1, TMR1_MODULE, CLK_CLK #define TIMER_MODINIT timer1_modinit -/* S/W interrupt enable/disable +/* Timer interrupt enable/disable * - * Because H/W interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs delay for lp_ticker, - * we introduce S/W interrupt enable/disable to avoid blocking code. With S/W interrupt enable/disable, - * H/W interrupt is always enabled after ticker_init. A S/W flag is used to tell whether or not - * ticker_irq_handler is ready to call. + * Because Timer interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs wait for lp_ticker, + * we call NVIC_DisableIRQ/NVIC_EnableIRQ instead. */ -/* Ticker uninitialized */ -#define NU_TICKER_UNINIT 0 -/* Ticker initialized with interrupt disabled */ -#define NU_TICKER_INIT_INTR_DIS 1 -/* Ticker initialized with interrupt enabled */ -#define NU_TICKER_INIT_INTR_EN 2 - /* Track ticker status */ -static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; +static volatile uint16_t ticker_inited = 0; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu @@ -70,14 +61,15 @@ static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; void lp_ticker_init(void) { - if (ticker_stat) { + if (ticker_inited) { /* By HAL spec, ticker_init allows the ticker to keep counting and disables the * ticker interrupt. */ lp_ticker_disable_interrupt(); lp_ticker_clear_interrupt(); + NVIC_ClearPendingIRQ(TIMER_MODINIT.irq_n); return; } - ticker_stat = NU_TICKER_INIT_INTR_DIS; + ticker_inited = 1; // Reset module SYS_ResetModule(TIMER_MODINIT.rsetidx); @@ -110,7 +102,7 @@ void lp_ticker_init(void) // Set vector NVIC_SetVector(TIMER_MODINIT.irq_n, (uint32_t) TIMER_MODINIT.var); - NVIC_EnableIRQ(TIMER_MODINIT.irq_n); + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); TIMER_EnableInt(timer_base); wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); @@ -149,12 +141,12 @@ void lp_ticker_free(void) /* Disable IP clock */ CLK_DisableModuleClock(TIMER_MODINIT.clkidx); - ticker_stat = NU_TICKER_UNINIT; + ticker_inited = 0; } timestamp_t lp_ticker_read() { - if (ticker_stat == NU_TICKER_UNINIT) { + if (! ticker_inited) { lp_ticker_init(); } @@ -165,9 +157,6 @@ timestamp_t lp_ticker_read() void lp_ticker_set_interrupt(timestamp_t timestamp) { - /* We can call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_EN; - /* In continuous mode, counter will be reset to zero with the following sequence: * 1. Stop counting * 2. Configure new CMP value @@ -185,12 +174,15 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) /* NOTE: Rely on LPTICKER_DELAY_TICKS to be non-blocking. */ timer_base->CMPR = cmp_timer; + + /* We can call ticker_irq_handler now. */ + NVIC_EnableIRQ(TIMER_MODINIT.irq_n); } void lp_ticker_disable_interrupt(void) { /* We cannot call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_DIS; + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); } void lp_ticker_clear_interrupt(void) @@ -207,12 +199,12 @@ void lp_ticker_clear_interrupt(void) void lp_ticker_fire_interrupt(void) { - /* We can call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_EN; - // NOTE: This event was in the past. Set the interrupt as pending, but don't process it here. // This prevents a recursive loop under heavy load which can lead to a stack overflow. NVIC_SetPendingIRQ(TIMER_MODINIT.irq_n); + + /* We can call ticker_irq_handler now. */ + NVIC_EnableIRQ(TIMER_MODINIT.irq_n); } const ticker_info_t* lp_ticker_get_info() @@ -226,15 +218,28 @@ const ticker_info_t* lp_ticker_get_info() void TMR1_IRQHandler(void) { - /* NOTE: We need to clear interrupt flag earlier to reduce possibility of dummy interrupt. - * This is because "clear interrupt flag" needs delay which isn't added here to avoid - * blocking in ISR code. */ + /* NOTE: Avoid blocking in ISR due to wait for "clear interrupt flag" + * + * "clear interrupt flag" needs wait to take effect which isn't added here to avoid + * blocking in ISR. + * + * Continuing above, we will get stuck in ISR due to dummy interrupt until + * "clear interrupt flag" takes effect. To avoid it, we disable interrupt here and enable + * interrupt in lp_ticker_fire_interrupt/lp_ticker_set_interrupt. There is another risk + * that we may get stuck in a loop of ISR and lp_ticker_fire_interrupt/ + * lp_ticker_set_interrupt (called by lp_ticker_irq_handler), but actually we don't: + * 1. When lp_ticker_fire_interrupt gets called, it means there is a past event and so this + * interrupt isn't dummy. + * 2. With LPTICKER_DELAY_TICKS enabled, it is lp_ticker_set_interrupt_wrapper rather than + * lp_ticker_set_interrupt that gets straight called. lp_ticker_set_interrupt_wrapper + * guarantees that lp_ticker_set_interrupt won't get re-called in LPTICKER_DELAY_TICKS ticks + * which is just enough for "clear interrupt flag" to take effect. + */ lp_ticker_clear_interrupt(); + lp_ticker_disable_interrupt(); // NOTE: lp_ticker_set_interrupt() may get called in lp_ticker_irq_handler(); - if (ticker_stat == NU_TICKER_INIT_INTR_EN) { - lp_ticker_irq_handler(); - } + lp_ticker_irq_handler(); } #endif diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c index 86dd7c22159..956bc8892ff 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c @@ -42,23 +42,14 @@ static const struct nu_modinit_s timer1_modinit = {TIMER_1, TMR1_MODULE, CLK_CLK #define TIMER_MODINIT timer1_modinit -/* S/W interrupt enable/disable +/* Timer interrupt enable/disable * - * Because H/W interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs delay for lp_ticker, - * we introduce S/W interrupt enable/disable to avoid blocking code. With S/W interrupt enable/disable, - * H/W interrupt is always enabled after ticker_init. A S/W flag is used to tell whether or not - * ticker_irq_handler is ready to call. + * Because Timer interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs wait for lp_ticker, + * we call NVIC_DisableIRQ/NVIC_EnableIRQ instead. */ -/* Ticker uninitialized */ -#define NU_TICKER_UNINIT 0 -/* Ticker initialized with interrupt disabled */ -#define NU_TICKER_INIT_INTR_DIS 1 -/* Ticker initialized with interrupt enabled */ -#define NU_TICKER_INIT_INTR_EN 2 - /* Track ticker status */ -static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; +static volatile uint16_t ticker_inited = 0; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu @@ -68,14 +59,15 @@ static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; void lp_ticker_init(void) { - if (ticker_stat) { + if (ticker_inited) { /* By HAL spec, ticker_init allows the ticker to keep counting and disables the * ticker interrupt. */ lp_ticker_disable_interrupt(); lp_ticker_clear_interrupt(); + NVIC_ClearPendingIRQ(TIMER_MODINIT.irq_n); return; } - ticker_stat = NU_TICKER_INIT_INTR_DIS; + ticker_inited = 1; // Reset module SYS_ResetModule(TIMER_MODINIT.rsetidx); @@ -105,7 +97,7 @@ void lp_ticker_init(void) // Set vector NVIC_SetVector(TIMER_MODINIT.irq_n, (uint32_t) TIMER_MODINIT.var); - NVIC_EnableIRQ(TIMER_MODINIT.irq_n); + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); TIMER_EnableInt(timer_base); wait_us((NU_US_PER_SEC / NU_TMRCLK_PER_SEC) * 3); @@ -144,12 +136,12 @@ void lp_ticker_free(void) /* Disable IP clock */ CLK_DisableModuleClock(TIMER_MODINIT.clkidx); - ticker_stat = NU_TICKER_UNINIT; + ticker_inited = 0; } timestamp_t lp_ticker_read() { - if (ticker_stat == NU_TICKER_UNINIT) { + if (! ticker_inited) { lp_ticker_init(); } @@ -160,9 +152,6 @@ timestamp_t lp_ticker_read() void lp_ticker_set_interrupt(timestamp_t timestamp) { - /* We can call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_EN; - /* In continuous mode, counter will be reset to zero with the following sequence: * 1. Stop counting * 2. Configure new CMP value @@ -180,12 +169,15 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) /* NOTE: Rely on LPTICKER_DELAY_TICKS to be non-blocking. */ timer_base->CMP = cmp_timer; + + /* We can call ticker_irq_handler now. */ + NVIC_EnableIRQ(TIMER_MODINIT.irq_n); } void lp_ticker_disable_interrupt(void) { /* We cannot call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_DIS; + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); } void lp_ticker_clear_interrupt(void) @@ -202,12 +194,12 @@ void lp_ticker_clear_interrupt(void) void lp_ticker_fire_interrupt(void) { - /* We can call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_EN; - // NOTE: This event was in the past. Set the interrupt as pending, but don't process it here. // This prevents a recursive loop under heavy load which can lead to a stack overflow. NVIC_SetPendingIRQ(TIMER_MODINIT.irq_n); + + /* We can call ticker_irq_handler now. */ + NVIC_EnableIRQ(TIMER_MODINIT.irq_n); } const ticker_info_t* lp_ticker_get_info() @@ -221,15 +213,28 @@ const ticker_info_t* lp_ticker_get_info() static void tmr1_vec(void) { - /* NOTE: We need to clear interrupt flag earlier to reduce possibility of dummy interrupt. - * This is because "clear interrupt flag" needs delay which isn't added here to avoid - * blocking in ISR code. */ + /* NOTE: Avoid blocking in ISR due to wait for "clear interrupt flag" + * + * "clear interrupt flag" needs wait to take effect which isn't added here to avoid + * blocking in ISR. + * + * Continuing above, we will get stuck in ISR due to dummy interrupt until + * "clear interrupt flag" takes effect. To avoid it, we disable interrupt here and enable + * interrupt in lp_ticker_fire_interrupt/lp_ticker_set_interrupt. There is another risk + * that we may get stuck in a loop of ISR and lp_ticker_fire_interrupt/ + * lp_ticker_set_interrupt (called by lp_ticker_irq_handler), but actually we don't: + * 1. When lp_ticker_fire_interrupt gets called, it means there is a past event and so this + * interrupt isn't dummy. + * 2. With LPTICKER_DELAY_TICKS enabled, it is lp_ticker_set_interrupt_wrapper rather than + * lp_ticker_set_interrupt that gets straight called. lp_ticker_set_interrupt_wrapper + * guarantees that lp_ticker_set_interrupt won't get re-called in LPTICKER_DELAY_TICKS ticks + * which is just enough for "clear interrupt flag" to take effect. + */ lp_ticker_clear_interrupt(); + lp_ticker_disable_interrupt(); // NOTE: lp_ticker_set_interrupt() may get called in lp_ticker_irq_handler(); - if (ticker_stat == NU_TICKER_INIT_INTR_EN) { - lp_ticker_irq_handler(); - } + lp_ticker_irq_handler(); } #endif From c344ccf83bd1ec2b827a3b85f59d500ce25c3e82 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Mon, 11 Jun 2018 10:50:58 +0800 Subject: [PATCH 020/113] Synchronize lp_ticker code to us_ticker This is to make us_ticker/lp_ticker code consistent. --- .../TARGET_NUVOTON/TARGET_M451/us_ticker.c | 50 ++++++------------- .../TARGET_NUVOTON/TARGET_M480/us_ticker.c | 50 ++++++------------- .../TARGET_NUVOTON/TARGET_NANO100/us_ticker.c | 50 ++++++------------- .../TARGET_NUVOTON/TARGET_NUC472/us_ticker.c | 50 ++++++------------- 4 files changed, 64 insertions(+), 136 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c index de6b4811045..7a5deaea56a 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c @@ -40,37 +40,23 @@ static const struct nu_modinit_s timer0_modinit = {TIMER_0, TMR0_MODULE, CLK_CLK #define TIMER_MODINIT timer0_modinit -/* S/W interrupt enable/disable - * - * Because H/W interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs delay for lp_ticker, - * we introduce S/W interrupt enable/disable to avoid blocking code. With S/W interrupt enable/disable, - * H/W interrupt is always enabled after ticker_init. A S/W flag is used to tell whether or not - * ticker_irq_handler is ready to call. - */ - -/* Ticker uninitialized */ -#define NU_TICKER_UNINIT 0 -/* Ticker initialized with interrupt disabled */ -#define NU_TICKER_INIT_INTR_DIS 1 -/* Ticker initialized with interrupt enabled */ -#define NU_TICKER_INIT_INTR_EN 2 - /* Track ticker status */ -static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; +static volatile uint16_t ticker_inited = 0; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu void us_ticker_init(void) { - if (ticker_stat) { + if (ticker_inited) { /* By HAL spec, ticker_init allows the ticker to keep counting and disables the * ticker interrupt. */ us_ticker_disable_interrupt(); us_ticker_clear_interrupt(); + NVIC_ClearPendingIRQ(TIMER_MODINIT.irq_n); return; } - ticker_stat = NU_TICKER_INIT_INTR_DIS; + ticker_inited = 1; // Reset IP SYS_ResetModule(TIMER_MODINIT.rsetidx); @@ -96,7 +82,7 @@ void us_ticker_init(void) NVIC_SetVector(TIMER_MODINIT.irq_n, (uint32_t) TIMER_MODINIT.var); - NVIC_EnableIRQ(TIMER_MODINIT.irq_n); + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); TIMER_EnableInt(timer_base); @@ -122,12 +108,12 @@ void us_ticker_free(void) /* Disable IP clock */ CLK_DisableModuleClock(TIMER_MODINIT.clkidx); - ticker_stat = NU_TICKER_UNINIT; + ticker_inited = 0; } uint32_t us_ticker_read() { - if (ticker_stat == NU_TICKER_UNINIT) { + if (! ticker_inited) { us_ticker_init(); } @@ -138,9 +124,6 @@ uint32_t us_ticker_read() void us_ticker_set_interrupt(timestamp_t timestamp) { - /* We can call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_EN; - /* In continuous mode, counter will be reset to zero with the following sequence: * 1. Stop counting * 2. Configure new CMP value @@ -156,12 +139,15 @@ void us_ticker_set_interrupt(timestamp_t timestamp) uint32_t cmp_timer = timestamp * NU_TMRCLK_PER_TICK; cmp_timer = NU_CLAMP(cmp_timer, TMR_CMP_MIN, TMR_CMP_MAX); timer_base->CMP = cmp_timer; + + /* We can call ticker_irq_handler now. */ + NVIC_EnableIRQ(TIMER_MODINIT.irq_n); } void us_ticker_disable_interrupt(void) { /* We cannot call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_DIS; + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); } void us_ticker_clear_interrupt(void) @@ -171,12 +157,12 @@ void us_ticker_clear_interrupt(void) void us_ticker_fire_interrupt(void) { - /* We can call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_EN; - // NOTE: This event was in the past. Set the interrupt as pending, but don't process it here. // This prevents a recursive loop under heavy load which can lead to a stack overflow. NVIC_SetPendingIRQ(TIMER_MODINIT.irq_n); + + /* We can call ticker_irq_handler now. */ + NVIC_EnableIRQ(TIMER_MODINIT.irq_n); } const ticker_info_t* us_ticker_get_info() @@ -190,15 +176,11 @@ const ticker_info_t* us_ticker_get_info() static void tmr0_vec(void) { - /* NOTE: We need to clear interrupt flag earlier to reduce possibility of dummy interrupt. - * This is because "clear interrupt flag" needs delay which isn't added here to avoid - * blocking in ISR code. */ us_ticker_clear_interrupt(); + us_ticker_disable_interrupt(); // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); - if (ticker_stat == NU_TICKER_INIT_INTR_EN) { - us_ticker_irq_handler(); - } + us_ticker_irq_handler(); } #endif diff --git a/targets/TARGET_NUVOTON/TARGET_M480/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_M480/us_ticker.c index 064fdf9f6b5..911f912d8ba 100644 --- a/targets/TARGET_NUVOTON/TARGET_M480/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M480/us_ticker.c @@ -40,37 +40,23 @@ static const struct nu_modinit_s timer0_modinit = {TIMER_0, TMR0_MODULE, CLK_CLK #define TIMER_MODINIT timer0_modinit -/* S/W interrupt enable/disable - * - * Because H/W interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs delay for lp_ticker, - * we introduce S/W interrupt enable/disable to avoid blocking code. With S/W interrupt enable/disable, - * H/W interrupt is always enabled after ticker_init. A S/W flag is used to tell whether or not - * ticker_irq_handler is ready to call. - */ - -/* Ticker uninitialized */ -#define NU_TICKER_UNINIT 0 -/* Ticker initialized with interrupt disabled */ -#define NU_TICKER_INIT_INTR_DIS 1 -/* Ticker initialized with interrupt enabled */ -#define NU_TICKER_INIT_INTR_EN 2 - /* Track ticker status */ -static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; +static volatile uint16_t ticker_inited = 0; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu void us_ticker_init(void) { - if (ticker_stat) { + if (ticker_inited) { /* By HAL spec, ticker_init allows the ticker to keep counting and disables the * ticker interrupt. */ us_ticker_disable_interrupt(); us_ticker_clear_interrupt(); + NVIC_ClearPendingIRQ(TIMER_MODINIT.irq_n); return; } - ticker_stat = NU_TICKER_INIT_INTR_DIS; + ticker_inited = 1; // Reset IP SYS_ResetModule(TIMER_MODINIT.rsetidx); @@ -96,7 +82,7 @@ void us_ticker_init(void) NVIC_SetVector(TIMER_MODINIT.irq_n, (uint32_t) TIMER_MODINIT.var); - NVIC_EnableIRQ(TIMER_MODINIT.irq_n); + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); TIMER_EnableInt(timer_base); @@ -122,12 +108,12 @@ void us_ticker_free(void) /* Disable IP clock */ CLK_DisableModuleClock(TIMER_MODINIT.clkidx); - ticker_stat = NU_TICKER_UNINIT; + ticker_inited = 0; } uint32_t us_ticker_read() { - if (ticker_stat == NU_TICKER_UNINIT) { + if (! ticker_inited) { us_ticker_init(); } @@ -138,9 +124,6 @@ uint32_t us_ticker_read() void us_ticker_set_interrupt(timestamp_t timestamp) { - /* We can call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_EN; - /* In continuous mode, counter will be reset to zero with the following sequence: * 1. Stop counting * 2. Configure new CMP value @@ -156,12 +139,15 @@ void us_ticker_set_interrupt(timestamp_t timestamp) uint32_t cmp_timer = timestamp * NU_TMRCLK_PER_TICK; cmp_timer = NU_CLAMP(cmp_timer, TMR_CMP_MIN, TMR_CMP_MAX); timer_base->CMP = cmp_timer; + + /* We can call ticker_irq_handler now. */ + NVIC_EnableIRQ(TIMER_MODINIT.irq_n); } void us_ticker_disable_interrupt(void) { /* We cannot call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_DIS; + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); } void us_ticker_clear_interrupt(void) @@ -171,12 +157,12 @@ void us_ticker_clear_interrupt(void) void us_ticker_fire_interrupt(void) { - /* We can call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_EN; - // NOTE: This event was in the past. Set the interrupt as pending, but don't process it here. // This prevents a recursive loop under heavy load which can lead to a stack overflow. NVIC_SetPendingIRQ(TIMER_MODINIT.irq_n); + + /* We can call ticker_irq_handler now. */ + NVIC_EnableIRQ(TIMER_MODINIT.irq_n); } const ticker_info_t* us_ticker_get_info() @@ -190,15 +176,11 @@ const ticker_info_t* us_ticker_get_info() static void tmr0_vec(void) { - /* NOTE: We need to clear interrupt flag earlier to reduce possibility of dummy interrupt. - * This is because "clear interrupt flag" needs delay which isn't added here to avoid - * blocking in ISR code. */ us_ticker_clear_interrupt(); + us_ticker_disable_interrupt(); // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); - if (ticker_stat == NU_TICKER_INIT_INTR_EN) { - us_ticker_irq_handler(); - } + us_ticker_irq_handler(); } #endif diff --git a/targets/TARGET_NUVOTON/TARGET_NANO100/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_NANO100/us_ticker.c index 4eb0f4df47b..59628dddede 100644 --- a/targets/TARGET_NUVOTON/TARGET_NANO100/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NANO100/us_ticker.c @@ -42,37 +42,23 @@ static const struct nu_modinit_s timer0_modinit = {TIMER_0, TMR0_MODULE, CLK_CLK #define TIMER_MODINIT timer0_modinit -/* S/W interrupt enable/disable - * - * Because H/W interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs delay for lp_ticker, - * we introduce S/W interrupt enable/disable to avoid blocking code. With S/W interrupt enable/disable, - * H/W interrupt is always enabled after ticker_init. A S/W flag is used to tell whether or not - * ticker_irq_handler is ready to call. - */ - -/* Ticker uninitialized */ -#define NU_TICKER_UNINIT 0 -/* Ticker initialized with interrupt disabled */ -#define NU_TICKER_INIT_INTR_DIS 1 -/* Ticker initialized with interrupt enabled */ -#define NU_TICKER_INIT_INTR_EN 2 - /* Track ticker status */ -static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; +static volatile uint16_t ticker_inited = 0; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu void us_ticker_init(void) { - if (ticker_stat) { + if (ticker_inited) { /* By HAL spec, ticker_init allows the ticker to keep counting and disables the * ticker interrupt. */ us_ticker_disable_interrupt(); us_ticker_clear_interrupt(); + NVIC_ClearPendingIRQ(TIMER_MODINIT.irq_n); return; } - ticker_stat = NU_TICKER_INIT_INTR_DIS; + ticker_inited = 1; // Reset IP SYS_ResetModule(TIMER_MODINIT.rsetidx); @@ -98,7 +84,7 @@ void us_ticker_init(void) NVIC_SetVector(TIMER_MODINIT.irq_n, (uint32_t) TIMER_MODINIT.var); - NVIC_EnableIRQ(TIMER_MODINIT.irq_n); + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); TIMER_EnableInt(timer_base); @@ -124,12 +110,12 @@ void us_ticker_free(void) /* Disable IP clock */ CLK_DisableModuleClock(TIMER_MODINIT.clkidx); - ticker_stat = NU_TICKER_UNINIT; + ticker_inited = 0; } uint32_t us_ticker_read() { - if (ticker_stat == NU_TICKER_UNINIT) { + if (! ticker_inited) { us_ticker_init(); } @@ -140,9 +126,6 @@ uint32_t us_ticker_read() void us_ticker_set_interrupt(timestamp_t timestamp) { - /* We can call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_EN; - /* In continuous mode, counter will be reset to zero with the following sequence: * 1. Stop counting * 2. Configure new CMP value @@ -158,12 +141,15 @@ void us_ticker_set_interrupt(timestamp_t timestamp) uint32_t cmp_timer = timestamp * NU_TMRCLK_PER_TICK; cmp_timer = NU_CLAMP(cmp_timer, TMR_CMP_MIN, TMR_CMP_MAX); timer_base->CMPR = cmp_timer; + + /* We can call ticker_irq_handler now. */ + NVIC_EnableIRQ(TIMER_MODINIT.irq_n); } void us_ticker_disable_interrupt(void) { /* We cannot call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_DIS; + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); } void us_ticker_clear_interrupt(void) @@ -173,12 +159,12 @@ void us_ticker_clear_interrupt(void) void us_ticker_fire_interrupt(void) { - /* We can call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_EN; - // NOTE: This event was in the past. Set the interrupt as pending, but don't process it here. // This prevents a recursive loop under heavy load which can lead to a stack overflow. NVIC_SetPendingIRQ(TIMER_MODINIT.irq_n); + + /* We can call ticker_irq_handler now. */ + NVIC_EnableIRQ(TIMER_MODINIT.irq_n); } const ticker_info_t* us_ticker_get_info() @@ -192,15 +178,11 @@ const ticker_info_t* us_ticker_get_info() void TMR0_IRQHandler(void) { - /* NOTE: We need to clear interrupt flag earlier to reduce possibility of dummy interrupt. - * This is because "clear interrupt flag" needs delay which isn't added here to avoid - * blocking in ISR code. */ us_ticker_clear_interrupt(); + us_ticker_disable_interrupt(); // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); - if (ticker_stat == NU_TICKER_INIT_INTR_EN) { - us_ticker_irq_handler(); - } + us_ticker_irq_handler(); } #endif diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c index 6bbc6ec6e73..8d83bf813dc 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c @@ -40,37 +40,23 @@ static const struct nu_modinit_s timer0_modinit = {TIMER_0, TMR0_MODULE, CLK_CLK #define TIMER_MODINIT timer0_modinit -/* S/W interrupt enable/disable - * - * Because H/W interrupt enable/disable (TIMER_EnableInt/TIMER_DisableInt) needs delay for lp_ticker, - * we introduce S/W interrupt enable/disable to avoid blocking code. With S/W interrupt enable/disable, - * H/W interrupt is always enabled after ticker_init. A S/W flag is used to tell whether or not - * ticker_irq_handler is ready to call. - */ - -/* Ticker uninitialized */ -#define NU_TICKER_UNINIT 0 -/* Ticker initialized with interrupt disabled */ -#define NU_TICKER_INIT_INTR_DIS 1 -/* Ticker initialized with interrupt enabled */ -#define NU_TICKER_INIT_INTR_EN 2 - /* Track ticker status */ -static volatile uint16_t ticker_stat = NU_TICKER_UNINIT; +static volatile uint16_t ticker_inited = 0; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu void us_ticker_init(void) { - if (ticker_stat) { + if (ticker_inited) { /* By HAL spec, ticker_init allows the ticker to keep counting and disables the * ticker interrupt. */ us_ticker_disable_interrupt(); us_ticker_clear_interrupt(); + NVIC_ClearPendingIRQ(TIMER_MODINIT.irq_n); return; } - ticker_stat = NU_TICKER_INIT_INTR_DIS; + ticker_inited = 1; // Reset IP SYS_ResetModule(TIMER_MODINIT.rsetidx); @@ -95,7 +81,7 @@ void us_ticker_init(void) NVIC_SetVector(TIMER_MODINIT.irq_n, (uint32_t) TIMER_MODINIT.var); - NVIC_EnableIRQ(TIMER_MODINIT.irq_n); + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); TIMER_EnableInt(timer_base); @@ -121,12 +107,12 @@ void us_ticker_free(void) /* Disable IP clock */ CLK_DisableModuleClock(TIMER_MODINIT.clkidx); - ticker_stat = NU_TICKER_UNINIT; + ticker_inited = 0; } uint32_t us_ticker_read() { - if (ticker_stat == NU_TICKER_UNINIT) { + if (! ticker_inited) { us_ticker_init(); } @@ -137,9 +123,6 @@ uint32_t us_ticker_read() void us_ticker_set_interrupt(timestamp_t timestamp) { - /* We can call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_EN; - /* In continuous mode, counter will be reset to zero with the following sequence: * 1. Stop counting * 2. Configure new CMP value @@ -155,12 +138,15 @@ void us_ticker_set_interrupt(timestamp_t timestamp) uint32_t cmp_timer = timestamp * NU_TMRCLK_PER_TICK; cmp_timer = NU_CLAMP(cmp_timer, TMR_CMP_MIN, TMR_CMP_MAX); timer_base->CMP = cmp_timer; + + /* We can call ticker_irq_handler now. */ + NVIC_EnableIRQ(TIMER_MODINIT.irq_n); } void us_ticker_disable_interrupt(void) { /* We cannot call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_DIS; + NVIC_DisableIRQ(TIMER_MODINIT.irq_n); } void us_ticker_clear_interrupt(void) @@ -170,12 +156,12 @@ void us_ticker_clear_interrupt(void) void us_ticker_fire_interrupt(void) { - /* We can call ticker_irq_handler now. */ - ticker_stat = NU_TICKER_INIT_INTR_EN; - // NOTE: This event was in the past. Set the interrupt as pending, but don't process it here. // This prevents a recursive loop under heavy load which can lead to a stack overflow. NVIC_SetPendingIRQ(TIMER_MODINIT.irq_n); + + /* We can call ticker_irq_handler now. */ + NVIC_EnableIRQ(TIMER_MODINIT.irq_n); } const ticker_info_t* us_ticker_get_info() @@ -189,15 +175,11 @@ const ticker_info_t* us_ticker_get_info() static void tmr0_vec(void) { - /* NOTE: We need to clear interrupt flag earlier to reduce possibility of dummy interrupt. - * This is because "clear interrupt flag" needs delay which isn't added here to avoid - * blocking in ISR code. */ us_ticker_clear_interrupt(); + us_ticker_disable_interrupt(); // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); - if (ticker_stat == NU_TICKER_INIT_INTR_EN) { - us_ticker_irq_handler(); - } + us_ticker_irq_handler(); } #endif From 28a58c98592f3f792a3bdbce6422bec9e536fb89 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Thu, 28 Jun 2018 16:27:37 +0800 Subject: [PATCH 021/113] Remove special handling for dummy interrupt in lp_ticker It is because dummy interrupt is very rare or pending time caused by it is very short. --- .../TARGET_NUVOTON/TARGET_M451/lp_ticker.c | 35 ++++++++----------- .../TARGET_NUVOTON/TARGET_M480/lp_ticker.c | 35 ++++++++----------- .../TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c | 35 ++++++++----------- .../TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c | 35 ++++++++----------- 4 files changed, 60 insertions(+), 80 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c index 6b61819ee92..5a09e84a3df 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c @@ -54,8 +54,21 @@ static volatile uint16_t ticker_inited = 0; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu -/* NOTE: When system clock is higher than timer clock, we need to add 3 engine clock - * (recommended by designer) delay to wait for above timer control to take effect. */ +/* Synchronization issue with LXT/LIRC-clocked Timer + * + * PCLK : typical HCLK/2 + * ECLK (engine clock) : LXT/LIRC for Timer used to implement lp_ticker + * + * When system clock is higher than Timer clock (LXT/LIRC), we need to add delay for ECLK + * domain to take effect: + * 1. Write : typical 1PCLK + 2ECLK + * Read-check doesn't work because it just checks PCLK domain and doesn't check into + * ECLK domain. + * 2. Clear interrupt flag : typical 2PCLK + * It is very rare that we would meet dummy interrupt and get stuck in ISR until + * 'clear interrupt flag' takes effect. The issue is ignorable because the pending + * time is very short (at most 1 dummy interrupt). We won't take special handling for it. + */ void lp_ticker_init(void) { @@ -214,25 +227,7 @@ const ticker_info_t* lp_ticker_get_info() static void tmr1_vec(void) { - /* NOTE: Avoid blocking in ISR due to wait for "clear interrupt flag" - * - * "clear interrupt flag" needs wait to take effect which isn't added here to avoid - * blocking in ISR. - * - * Continuing above, we will get stuck in ISR due to dummy interrupt until - * "clear interrupt flag" takes effect. To avoid it, we disable interrupt here and enable - * interrupt in lp_ticker_fire_interrupt/lp_ticker_set_interrupt. There is another risk - * that we may get stuck in a loop of ISR and lp_ticker_fire_interrupt/ - * lp_ticker_set_interrupt (called by lp_ticker_irq_handler), but actually we don't: - * 1. When lp_ticker_fire_interrupt gets called, it means there is a past event and so this - * interrupt isn't dummy. - * 2. With LPTICKER_DELAY_TICKS enabled, it is lp_ticker_set_interrupt_wrapper rather than - * lp_ticker_set_interrupt that gets straight called. lp_ticker_set_interrupt_wrapper - * guarantees that lp_ticker_set_interrupt won't get re-called in LPTICKER_DELAY_TICKS ticks - * which is just enough for "clear interrupt flag" to take effect. - */ lp_ticker_clear_interrupt(); - lp_ticker_disable_interrupt(); // NOTE: lp_ticker_set_interrupt() may get called in lp_ticker_irq_handler(); lp_ticker_irq_handler(); diff --git a/targets/TARGET_NUVOTON/TARGET_M480/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_M480/lp_ticker.c index 6cf30d1f2b2..1811c72dfcf 100644 --- a/targets/TARGET_NUVOTON/TARGET_M480/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M480/lp_ticker.c @@ -54,8 +54,21 @@ static volatile uint16_t ticker_inited = 0; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu -/* NOTE: When system clock is higher than timer clock, we need to add 3 engine clock - * (recommended by designer) delay to wait for above timer control to take effect. */ +/* Synchronization issue with LXT/LIRC-clocked Timer + * + * PCLK : typical HCLK/2 + * ECLK (engine clock) : LXT/LIRC for Timer used to implement lp_ticker + * + * When system clock is higher than Timer clock (LXT/LIRC), we need to add delay for ECLK + * domain to take effect: + * 1. Write : typical 1PCLK + 2ECLK + * Read-check doesn't work because it just checks PCLK domain and doesn't check into + * ECLK domain. + * 2. Clear interrupt flag : typical 2PCLK + * It is very rare that we would meet dummy interrupt and get stuck in ISR until + * 'clear interrupt flag' takes effect. The issue is ignorable because the pending + * time is very short (at most 1 dummy interrupt). We won't take special handling for it. + */ void lp_ticker_init(void) { @@ -214,25 +227,7 @@ const ticker_info_t* lp_ticker_get_info() static void tmr1_vec(void) { - /* NOTE: Avoid blocking in ISR due to wait for "clear interrupt flag" - * - * "clear interrupt flag" needs wait to take effect which isn't added here to avoid - * blocking in ISR. - * - * Continuing above, we will get stuck in ISR due to dummy interrupt until - * "clear interrupt flag" takes effect. To avoid it, we disable interrupt here and enable - * interrupt in lp_ticker_fire_interrupt/lp_ticker_set_interrupt. There is another risk - * that we may get stuck in a loop of ISR and lp_ticker_fire_interrupt/ - * lp_ticker_set_interrupt (called by lp_ticker_irq_handler), but actually we don't: - * 1. When lp_ticker_fire_interrupt gets called, it means there is a past event and so this - * interrupt isn't dummy. - * 2. With LPTICKER_DELAY_TICKS enabled, it is lp_ticker_set_interrupt_wrapper rather than - * lp_ticker_set_interrupt that gets straight called. lp_ticker_set_interrupt_wrapper - * guarantees that lp_ticker_set_interrupt won't get re-called in LPTICKER_DELAY_TICKS ticks - * which is just enough for "clear interrupt flag" to take effect. - */ lp_ticker_clear_interrupt(); - lp_ticker_disable_interrupt(); // NOTE: lp_ticker_set_interrupt() may get called in lp_ticker_irq_handler(); lp_ticker_irq_handler(); diff --git a/targets/TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c index dda02fef4c2..c2faafc8564 100644 --- a/targets/TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NANO100/lp_ticker.c @@ -56,8 +56,21 @@ static volatile uint16_t ticker_inited = 0; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu -/* NOTE: When system clock is higher than timer clock, we need to add 3 engine clock - * (recommended by designer) delay to wait for above timer control to take effect. */ +/* Synchronization issue with LXT/LIRC-clocked Timer + * + * PCLK : typical HCLK/2 + * ECLK (engine clock) : LXT/LIRC for Timer used to implement lp_ticker + * + * When system clock is higher than Timer clock (LXT/LIRC), we need to add delay for ECLK + * domain to take effect: + * 1. Write : typical 1PCLK + 2ECLK + * Read-check doesn't work because it just checks PCLK domain and doesn't check into + * ECLK domain. + * 2. Clear interrupt flag : typical 2PCLK + * It is very rare that we would meet dummy interrupt and get stuck in ISR until + * 'clear interrupt flag' takes effect. The issue is ignorable because the pending + * time is very short (at most 1 dummy interrupt). We won't take special handling for it. + */ void lp_ticker_init(void) { @@ -218,25 +231,7 @@ const ticker_info_t* lp_ticker_get_info() void TMR1_IRQHandler(void) { - /* NOTE: Avoid blocking in ISR due to wait for "clear interrupt flag" - * - * "clear interrupt flag" needs wait to take effect which isn't added here to avoid - * blocking in ISR. - * - * Continuing above, we will get stuck in ISR due to dummy interrupt until - * "clear interrupt flag" takes effect. To avoid it, we disable interrupt here and enable - * interrupt in lp_ticker_fire_interrupt/lp_ticker_set_interrupt. There is another risk - * that we may get stuck in a loop of ISR and lp_ticker_fire_interrupt/ - * lp_ticker_set_interrupt (called by lp_ticker_irq_handler), but actually we don't: - * 1. When lp_ticker_fire_interrupt gets called, it means there is a past event and so this - * interrupt isn't dummy. - * 2. With LPTICKER_DELAY_TICKS enabled, it is lp_ticker_set_interrupt_wrapper rather than - * lp_ticker_set_interrupt that gets straight called. lp_ticker_set_interrupt_wrapper - * guarantees that lp_ticker_set_interrupt won't get re-called in LPTICKER_DELAY_TICKS ticks - * which is just enough for "clear interrupt flag" to take effect. - */ lp_ticker_clear_interrupt(); - lp_ticker_disable_interrupt(); // NOTE: lp_ticker_set_interrupt() may get called in lp_ticker_irq_handler(); lp_ticker_irq_handler(); diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c index 956bc8892ff..1f55c08ca21 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c @@ -54,8 +54,21 @@ static volatile uint16_t ticker_inited = 0; #define TMR_CMP_MIN 2 #define TMR_CMP_MAX 0xFFFFFFu -/* NOTE: When system clock is higher than timer clock, we need to add 3 engine clock - * (recommended by designer) delay to wait for above timer control to take effect. */ +/* Synchronization issue with LXT/LIRC-clocked Timer + * + * PCLK : typical HCLK/2 + * ECLK (engine clock) : LXT/LIRC for Timer used to implement lp_ticker + * + * When system clock is higher than Timer clock (LXT/LIRC), we need to add delay for ECLK + * domain to take effect: + * 1. Write : typical 1PCLK + 2ECLK + * Read-check doesn't work because it just checks PCLK domain and doesn't check into + * ECLK domain. + * 2. Clear interrupt flag : typical 2PCLK + * It is very rare that we would meet dummy interrupt and get stuck in ISR until + * 'clear interrupt flag' takes effect. The issue is ignorable because the pending + * time is very short (at most 1 dummy interrupt). We won't take special handling for it. + */ void lp_ticker_init(void) { @@ -213,25 +226,7 @@ const ticker_info_t* lp_ticker_get_info() static void tmr1_vec(void) { - /* NOTE: Avoid blocking in ISR due to wait for "clear interrupt flag" - * - * "clear interrupt flag" needs wait to take effect which isn't added here to avoid - * blocking in ISR. - * - * Continuing above, we will get stuck in ISR due to dummy interrupt until - * "clear interrupt flag" takes effect. To avoid it, we disable interrupt here and enable - * interrupt in lp_ticker_fire_interrupt/lp_ticker_set_interrupt. There is another risk - * that we may get stuck in a loop of ISR and lp_ticker_fire_interrupt/ - * lp_ticker_set_interrupt (called by lp_ticker_irq_handler), but actually we don't: - * 1. When lp_ticker_fire_interrupt gets called, it means there is a past event and so this - * interrupt isn't dummy. - * 2. With LPTICKER_DELAY_TICKS enabled, it is lp_ticker_set_interrupt_wrapper rather than - * lp_ticker_set_interrupt that gets straight called. lp_ticker_set_interrupt_wrapper - * guarantees that lp_ticker_set_interrupt won't get re-called in LPTICKER_DELAY_TICKS ticks - * which is just enough for "clear interrupt flag" to take effect. - */ lp_ticker_clear_interrupt(); - lp_ticker_disable_interrupt(); // NOTE: lp_ticker_set_interrupt() may get called in lp_ticker_irq_handler(); lp_ticker_irq_handler(); From 50df86511227d43b0eb02308b797626f10e25f88 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Thu, 28 Jun 2018 16:34:45 +0800 Subject: [PATCH 022/113] Synchronize lp_ticker code to us_ticker This is to make us_ticker/lp_ticker code consistent. --- targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c | 1 - targets/TARGET_NUVOTON/TARGET_M480/us_ticker.c | 1 - targets/TARGET_NUVOTON/TARGET_NANO100/us_ticker.c | 1 - targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c | 1 - 4 files changed, 4 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c index 7a5deaea56a..0fadea09deb 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c @@ -177,7 +177,6 @@ const ticker_info_t* us_ticker_get_info() static void tmr0_vec(void) { us_ticker_clear_interrupt(); - us_ticker_disable_interrupt(); // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); us_ticker_irq_handler(); diff --git a/targets/TARGET_NUVOTON/TARGET_M480/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_M480/us_ticker.c index 911f912d8ba..1441cf26b3e 100644 --- a/targets/TARGET_NUVOTON/TARGET_M480/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M480/us_ticker.c @@ -177,7 +177,6 @@ const ticker_info_t* us_ticker_get_info() static void tmr0_vec(void) { us_ticker_clear_interrupt(); - us_ticker_disable_interrupt(); // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); us_ticker_irq_handler(); diff --git a/targets/TARGET_NUVOTON/TARGET_NANO100/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_NANO100/us_ticker.c index 59628dddede..0c5160d839d 100644 --- a/targets/TARGET_NUVOTON/TARGET_NANO100/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NANO100/us_ticker.c @@ -179,7 +179,6 @@ const ticker_info_t* us_ticker_get_info() void TMR0_IRQHandler(void) { us_ticker_clear_interrupt(); - us_ticker_disable_interrupt(); // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); us_ticker_irq_handler(); diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c index 8d83bf813dc..03e58bac608 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c @@ -176,7 +176,6 @@ const ticker_info_t* us_ticker_get_info() static void tmr0_vec(void) { us_ticker_clear_interrupt(); - us_ticker_disable_interrupt(); // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); us_ticker_irq_handler(); From 88dcf7d5af820a18f1398e6f964cc676599c5012 Mon Sep 17 00:00:00 2001 From: Martin Kojtal Date: Thu, 24 May 2018 16:58:14 +0100 Subject: [PATCH 023/113] drivers: astyle update --- drivers/AnalogIn.h | 21 +++++--- drivers/AnalogOut.h | 30 ++++++++---- drivers/BusIn.cpp | 37 ++++++++------ drivers/BusIn.h | 11 +++-- drivers/BusInOut.cpp | 58 +++++++++++++--------- drivers/BusInOut.h | 15 +++--- drivers/BusOut.cpp | 43 ++++++++++------- drivers/BusOut.h | 11 +++-- drivers/CAN.cpp | 50 ++++++++++++------- drivers/CAN.h | 91 ++++++++++++++++++----------------- drivers/DigitalIn.h | 18 ++++--- drivers/DigitalInOut.h | 33 ++++++++----- drivers/DigitalOut.h | 24 ++++++---- drivers/Ethernet.cpp | 54 +++++++++++++++------ drivers/FlashIAP.cpp | 6 +-- drivers/FlashIAP.h | 10 ++-- drivers/I2C.cpp | 32 ++++++++----- drivers/I2C.h | 9 ++-- drivers/I2CSlave.cpp | 27 +++++++---- drivers/InterruptIn.cpp | 59 ++++++++++++++--------- drivers/InterruptIn.h | 14 +++--- drivers/InterruptManager.cpp | 52 ++++++++++++-------- drivers/InterruptManager.h | 56 ++++++++++++---------- drivers/LowPowerTicker.h | 6 ++- drivers/LowPowerTimeout.h | 3 +- drivers/LowPowerTimer.h | 3 +- drivers/MbedCRC.cpp | 20 ++++---- drivers/MbedCRC.h | 32 ++++++------- drivers/PortIn.h | 12 +++-- drivers/PortInOut.h | 27 +++++++---- drivers/PortOut.h | 18 ++++--- drivers/PwmOut.h | 49 ++++++++++++------- drivers/RawSerial.cpp | 24 ++++++---- drivers/SPI.cpp | 62 ++++++++++++++---------- drivers/SPI.h | 20 ++++---- drivers/SPISlave.cpp | 21 ++++---- drivers/Serial.cpp | 18 ++++--- drivers/Serial.h | 2 +- drivers/SerialBase.cpp | 93 ++++++++++++++++++++---------------- drivers/SerialBase.h | 40 ++++++++-------- drivers/SerialWireOutput.h | 4 +- drivers/Ticker.cpp | 11 +++-- drivers/Ticker.h | 31 +++++++----- drivers/Timeout.cpp | 3 +- drivers/Timer.cpp | 42 ++++++++++------ drivers/TimerEvent.cpp | 23 +++++---- drivers/UARTSerial.cpp | 24 +++++----- drivers/UARTSerial.h | 10 ++-- 48 files changed, 826 insertions(+), 533 deletions(-) diff --git a/drivers/AnalogIn.h b/drivers/AnalogIn.h index e81428fc21f..c9ccfa25a16 100644 --- a/drivers/AnalogIn.h +++ b/drivers/AnalogIn.h @@ -57,7 +57,8 @@ class AnalogIn { * * @param pin AnalogIn pin to connect to */ - AnalogIn(PinName pin) { + AnalogIn(PinName pin) + { lock(); analogin_init(&_adc, pin); unlock(); @@ -67,7 +68,8 @@ class AnalogIn { * * @returns A floating-point value representing the current input voltage, measured as a percentage */ - float read() { + float read() + { lock(); float ret = analogin_read(&_adc); unlock(); @@ -79,7 +81,8 @@ class AnalogIn { * @returns * 16-bit unsigned short representing the current input voltage, normalised to a 16-bit value */ - unsigned short read_u16() { + unsigned short read_u16() + { lock(); unsigned short ret = analogin_read_u16(&_adc); unlock(); @@ -99,22 +102,26 @@ class AnalogIn { * if(volume > 0.25) { ... } * @endcode */ - operator float() { + operator float() + { // Underlying call is thread safe return read(); } - virtual ~AnalogIn() { + virtual ~AnalogIn() + { // Do nothing } protected: - virtual void lock() { + virtual void lock() + { _mutex->lock(); } - virtual void unlock() { + virtual void unlock() + { _mutex->unlock(); } diff --git a/drivers/AnalogOut.h b/drivers/AnalogOut.h index 5038f0f7a43..3945c580c44 100644 --- a/drivers/AnalogOut.h +++ b/drivers/AnalogOut.h @@ -57,7 +57,8 @@ class AnalogOut { * * @param pin AnalogOut pin to connect to */ - AnalogOut(PinName pin) { + AnalogOut(PinName pin) + { analogout_init(&_dac, pin); } @@ -68,7 +69,8 @@ class AnalogOut { * 0.0f (representing 0v / 0%) and 1.0f (representing 3.3v / 100%). * Values outside this range will be saturated to 0.0f or 1.0f. */ - void write(float value) { + void write(float value) + { lock(); analogout_write(&_dac, value); unlock(); @@ -79,7 +81,8 @@ class AnalogOut { * @param value 16-bit unsigned short representing the output voltage, * normalised to a 16-bit value (0x0000 = 0v, 0xFFFF = 3.3v) */ - void write_u16(unsigned short value) { + void write_u16(unsigned short value) + { lock(); analogout_write_u16(&_dac, value); unlock(); @@ -95,7 +98,8 @@ class AnalogOut { * @note * This value may not match exactly the value set by a previous write(). */ - float read() { + float read() + { lock(); float ret = analogout_read(&_dac); unlock(); @@ -105,7 +109,8 @@ class AnalogOut { /** An operator shorthand for write() * \sa AnalogOut::write() */ - AnalogOut& operator= (float percent) { + AnalogOut &operator= (float percent) + { // Underlying write call is thread safe write(percent); return *this; @@ -114,7 +119,8 @@ class AnalogOut { /** An operator shorthand for write() * \sa AnalogOut::write() */ - AnalogOut& operator= (AnalogOut& rhs) { + AnalogOut &operator= (AnalogOut &rhs) + { // Underlying write call is thread safe write(rhs.read()); return *this; @@ -123,22 +129,26 @@ class AnalogOut { /** An operator shorthand for read() * \sa AnalogOut::read() */ - operator float() { + operator float() + { // Underlying read call is thread safe return read(); } - virtual ~AnalogOut() { + virtual ~AnalogOut() + { // Do nothing } protected: - virtual void lock() { + virtual void lock() + { _mutex.lock(); } - virtual void unlock() { + virtual void unlock() + { _mutex.unlock(); } diff --git a/drivers/BusIn.cpp b/drivers/BusIn.cpp index 1fd05282148..f6cc933e7ea 100644 --- a/drivers/BusIn.cpp +++ b/drivers/BusIn.cpp @@ -18,12 +18,13 @@ namespace mbed { -BusIn::BusIn(PinName p0, PinName p1, PinName p2, PinName p3, PinName p4, PinName p5, PinName p6, PinName p7, PinName p8, PinName p9, PinName p10, PinName p11, PinName p12, PinName p13, PinName p14, PinName p15) { +BusIn::BusIn(PinName p0, PinName p1, PinName p2, PinName p3, PinName p4, PinName p5, PinName p6, PinName p7, PinName p8, PinName p9, PinName p10, PinName p11, PinName p12, PinName p13, PinName p14, PinName p15) +{ PinName pins[16] = {p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15}; // No lock needed in the constructor _nc_mask = 0; - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { _pin[i] = (pins[i] != NC) ? new DigitalIn(pins[i]) : 0; if (pins[i] != NC) { _nc_mask |= (1 << i); @@ -31,10 +32,11 @@ BusIn::BusIn(PinName p0, PinName p1, PinName p2, PinName p3, PinName p4, PinName } } -BusIn::BusIn(PinName pins[16]) { +BusIn::BusIn(PinName pins[16]) +{ // No lock needed in the constructor _nc_mask = 0; - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { _pin[i] = (pins[i] != NC) ? new DigitalIn(pins[i]) : 0; if (pins[i] != NC) { _nc_mask |= (1 << i); @@ -42,19 +44,21 @@ BusIn::BusIn(PinName pins[16]) { } } -BusIn::~BusIn() { +BusIn::~BusIn() +{ // No lock needed in the destructor - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { if (_pin[i] != 0) { delete _pin[i]; } } } -int BusIn::read() { +int BusIn::read() +{ int v = 0; lock(); - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { if (_pin[i] != 0) { v |= _pin[i]->read() << i; } @@ -63,9 +67,10 @@ int BusIn::read() { return v; } -void BusIn::mode(PinMode pull) { +void BusIn::mode(PinMode pull) +{ lock(); - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { if (_pin[i] != 0) { _pin[i]->mode(pull); } @@ -73,20 +78,24 @@ void BusIn::mode(PinMode pull) { unlock(); } -void BusIn::lock() { +void BusIn::lock() +{ _mutex.lock(); } -void BusIn::unlock() { +void BusIn::unlock() +{ _mutex.unlock(); } -BusIn::operator int() { +BusIn::operator int() +{ // Underlying read is thread safe return read(); } -DigitalIn& BusIn::operator[] (int index) { +DigitalIn &BusIn::operator[](int index) +{ // No lock needed since _pin is not modified outside the constructor MBED_ASSERT(index >= 0 && index <= 16); MBED_ASSERT(_pin[index]); diff --git a/drivers/BusIn.h b/drivers/BusIn.h index d015529435f..80b20d72a1f 100644 --- a/drivers/BusIn.h +++ b/drivers/BusIn.h @@ -62,12 +62,12 @@ class BusIn : private NonCopyable { PinName p8 = NC, PinName p9 = NC, PinName p10 = NC, PinName p11 = NC, PinName p12 = NC, PinName p13 = NC, PinName p14 = NC, PinName p15 = NC); - + /** Create an BusIn, connected to the specified pins * * @param pins An array of pins to connect to bus bit */ - BusIn(PinName pins[16]); + BusIn(PinName pins[16]); virtual ~BusIn(); @@ -90,7 +90,8 @@ class BusIn : private NonCopyable { * @returns * Binary mask of connected pins */ - int mask() { + int mask() + { // No lock needed since _nc_mask is not modified outside the constructor return _nc_mask; } @@ -103,10 +104,10 @@ class BusIn : private NonCopyable { /** Access to particular bit in random-iterator fashion * @param index Position of bit */ - DigitalIn & operator[] (int index); + DigitalIn &operator[](int index); protected: - DigitalIn* _pin[16]; + DigitalIn *_pin[16]; /* Mask of bus's NC pins * If bit[n] is set to 1 - pin is connected diff --git a/drivers/BusInOut.cpp b/drivers/BusInOut.cpp index ff244fa464e..950cbb5d58f 100644 --- a/drivers/BusInOut.cpp +++ b/drivers/BusInOut.cpp @@ -18,12 +18,13 @@ namespace mbed { -BusInOut::BusInOut(PinName p0, PinName p1, PinName p2, PinName p3, PinName p4, PinName p5, PinName p6, PinName p7, PinName p8, PinName p9, PinName p10, PinName p11, PinName p12, PinName p13, PinName p14, PinName p15) { +BusInOut::BusInOut(PinName p0, PinName p1, PinName p2, PinName p3, PinName p4, PinName p5, PinName p6, PinName p7, PinName p8, PinName p9, PinName p10, PinName p11, PinName p12, PinName p13, PinName p14, PinName p15) +{ PinName pins[16] = {p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15}; // No lock needed in the constructor _nc_mask = 0; - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { _pin[i] = (pins[i] != NC) ? new DigitalInOut(pins[i]) : 0; if (pins[i] != NC) { _nc_mask |= (1 << i); @@ -31,10 +32,11 @@ BusInOut::BusInOut(PinName p0, PinName p1, PinName p2, PinName p3, PinName p4, P } } -BusInOut::BusInOut(PinName pins[16]) { +BusInOut::BusInOut(PinName pins[16]) +{ // No lock needed in the constructor _nc_mask = 0; - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { _pin[i] = (pins[i] != NC) ? new DigitalInOut(pins[i]) : 0; if (pins[i] != NC) { _nc_mask |= (1 << i); @@ -42,18 +44,20 @@ BusInOut::BusInOut(PinName pins[16]) { } } -BusInOut::~BusInOut() { +BusInOut::~BusInOut() +{ // No lock needed in the destructor - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { if (_pin[i] != 0) { delete _pin[i]; } } } -void BusInOut::write(int value) { +void BusInOut::write(int value) +{ lock(); - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { if (_pin[i] != 0) { _pin[i]->write((value >> i) & 1); } @@ -61,10 +65,11 @@ void BusInOut::write(int value) { unlock(); } -int BusInOut::read() { +int BusInOut::read() +{ lock(); int v = 0; - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { if (_pin[i] != 0) { v |= _pin[i]->read() << i; } @@ -73,9 +78,10 @@ int BusInOut::read() { return v; } -void BusInOut::output() { +void BusInOut::output() +{ lock(); - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { if (_pin[i] != 0) { _pin[i]->output(); } @@ -83,9 +89,10 @@ void BusInOut::output() { unlock(); } -void BusInOut::input() { +void BusInOut::input() +{ lock(); - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { if (_pin[i] != 0) { _pin[i]->input(); } @@ -93,9 +100,10 @@ void BusInOut::input() { unlock(); } -void BusInOut::mode(PinMode pull) { +void BusInOut::mode(PinMode pull) +{ lock(); - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { if (_pin[i] != 0) { _pin[i]->mode(pull); } @@ -103,35 +111,41 @@ void BusInOut::mode(PinMode pull) { unlock(); } -BusInOut& BusInOut::operator= (int v) { +BusInOut &BusInOut::operator= (int v) +{ // Underlying write is thread safe write(v); return *this; } -BusInOut& BusInOut::operator= (BusInOut& rhs) { +BusInOut &BusInOut::operator= (BusInOut &rhs) +{ // Underlying read is thread safe write(rhs.read()); return *this; } -DigitalInOut& BusInOut::operator[] (int index) { +DigitalInOut &BusInOut::operator[](int index) +{ // No lock needed since _pin is not modified outside the constructor MBED_ASSERT(index >= 0 && index <= 16); MBED_ASSERT(_pin[index]); return *_pin[index]; } -BusInOut::operator int() { +BusInOut::operator int() +{ // Underlying read is thread safe return read(); } -void BusInOut::lock() { +void BusInOut::lock() +{ _mutex.lock(); } -void BusInOut::unlock() { +void BusInOut::unlock() +{ _mutex.unlock(); } diff --git a/drivers/BusInOut.h b/drivers/BusInOut.h index 0be52cacc55..9bb4e995ae3 100644 --- a/drivers/BusInOut.h +++ b/drivers/BusInOut.h @@ -103,21 +103,22 @@ class BusInOut : private NonCopyable { * @returns * Binary mask of connected pins */ - int mask() { + int mask() + { // No lock needed since _nc_mask is not modified outside the constructor return _nc_mask; } - /** A shorthand for write() + /** A shorthand for write() * \sa BusInOut::write() - */ - BusInOut& operator= (int v); - BusInOut& operator= (BusInOut& rhs); + */ + BusInOut &operator= (int v); + BusInOut &operator= (BusInOut &rhs); /** Access to particular bit in random-iterator fashion * @param index Bit Position */ - DigitalInOut& operator[] (int index); + DigitalInOut &operator[](int index); /** A shorthand for read() * \sa BusInOut::read() @@ -127,7 +128,7 @@ class BusInOut : private NonCopyable { protected: virtual void lock(); virtual void unlock(); - DigitalInOut* _pin[16]; + DigitalInOut *_pin[16]; /* Mask of bus's NC pins * If bit[n] is set to 1 - pin is connected diff --git a/drivers/BusOut.cpp b/drivers/BusOut.cpp index 901955257a8..913ba197505 100644 --- a/drivers/BusOut.cpp +++ b/drivers/BusOut.cpp @@ -18,12 +18,13 @@ namespace mbed { -BusOut::BusOut(PinName p0, PinName p1, PinName p2, PinName p3, PinName p4, PinName p5, PinName p6, PinName p7, PinName p8, PinName p9, PinName p10, PinName p11, PinName p12, PinName p13, PinName p14, PinName p15) { +BusOut::BusOut(PinName p0, PinName p1, PinName p2, PinName p3, PinName p4, PinName p5, PinName p6, PinName p7, PinName p8, PinName p9, PinName p10, PinName p11, PinName p12, PinName p13, PinName p14, PinName p15) +{ PinName pins[16] = {p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15}; // No lock needed in the constructor _nc_mask = 0; - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { _pin[i] = (pins[i] != NC) ? new DigitalOut(pins[i]) : 0; if (pins[i] != NC) { _nc_mask |= (1 << i); @@ -31,10 +32,11 @@ BusOut::BusOut(PinName p0, PinName p1, PinName p2, PinName p3, PinName p4, PinNa } } -BusOut::BusOut(PinName pins[16]) { +BusOut::BusOut(PinName pins[16]) +{ // No lock needed in the constructor _nc_mask = 0; - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { _pin[i] = (pins[i] != NC) ? new DigitalOut(pins[i]) : 0; if (pins[i] != NC) { _nc_mask |= (1 << i); @@ -42,18 +44,20 @@ BusOut::BusOut(PinName pins[16]) { } } -BusOut::~BusOut() { +BusOut::~BusOut() +{ // No lock needed in the destructor - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { if (_pin[i] != 0) { delete _pin[i]; } } } -void BusOut::write(int value) { +void BusOut::write(int value) +{ lock(); - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { if (_pin[i] != 0) { _pin[i]->write((value >> i) & 1); } @@ -61,10 +65,11 @@ void BusOut::write(int value) { unlock(); } -int BusOut::read() { +int BusOut::read() +{ lock(); int v = 0; - for (int i=0; i<16; i++) { + for (int i = 0; i < 16; i++) { if (_pin[i] != 0) { v |= _pin[i]->read() << i; } @@ -73,35 +78,41 @@ int BusOut::read() { return v; } -BusOut& BusOut::operator= (int v) { +BusOut &BusOut::operator= (int v) +{ // Underlying write is thread safe write(v); return *this; } -BusOut& BusOut::operator= (BusOut& rhs) { +BusOut &BusOut::operator= (BusOut &rhs) +{ // Underlying write is thread safe write(rhs.read()); return *this; } -DigitalOut& BusOut::operator[] (int index) { +DigitalOut &BusOut::operator[](int index) +{ // No lock needed since _pin is not modified outside the constructor MBED_ASSERT(index >= 0 && index <= 16); MBED_ASSERT(_pin[index]); return *_pin[index]; } -BusOut::operator int() { +BusOut::operator int() +{ // Underlying read is thread safe return read(); } -void BusOut::lock() { +void BusOut::lock() +{ _mutex.lock(); } -void BusOut::unlock() { +void BusOut::unlock() +{ _mutex.unlock(); } diff --git a/drivers/BusOut.h b/drivers/BusOut.h index d7612d45924..2f908b65d84 100644 --- a/drivers/BusOut.h +++ b/drivers/BusOut.h @@ -87,7 +87,8 @@ class BusOut : private NonCopyable { * @returns * Binary mask of connected pins */ - int mask() { + int mask() + { // No lock needed since _nc_mask is not modified outside the constructor return _nc_mask; } @@ -95,13 +96,13 @@ class BusOut : private NonCopyable { /** A shorthand for write() * \sa BusOut::write() */ - BusOut& operator= (int v); - BusOut& operator= (BusOut& rhs); + BusOut &operator= (int v); + BusOut &operator= (BusOut &rhs); /** Access to particular bit in random-iterator fashion * @param index Bit Position */ - DigitalOut& operator[] (int index); + DigitalOut &operator[](int index); /** A shorthand for read() * \sa BusOut::read() @@ -111,7 +112,7 @@ class BusOut : private NonCopyable { protected: virtual void lock(); virtual void unlock(); - DigitalOut* _pin[16]; + DigitalOut *_pin[16]; /* Mask of bus's NC pins * If bit[n] is set to 1 - pin is connected diff --git a/drivers/CAN.cpp b/drivers/CAN.cpp index a5e8e4266b9..2c0a53442f5 100644 --- a/drivers/CAN.cpp +++ b/drivers/CAN.cpp @@ -22,7 +22,8 @@ namespace mbed { -CAN::CAN(PinName rd, PinName td) : _can(), _irq() { +CAN::CAN(PinName rd, PinName td) : _can(), _irq() +{ // No lock needed in constructor for (size_t i = 0; i < sizeof _irq / sizeof _irq[0]; i++) { @@ -33,7 +34,8 @@ CAN::CAN(PinName rd, PinName td) : _can(), _irq() { can_irq_init(&_can, (&CAN::_irq_handler), (uint32_t)this); } -CAN::CAN(PinName rd, PinName td, int hz) : _can(), _irq() { +CAN::CAN(PinName rd, PinName td, int hz) : _can(), _irq() +{ // No lock needed in constructor for (size_t i = 0; i < sizeof _irq / sizeof _irq[0]; i++) { @@ -44,7 +46,8 @@ CAN::CAN(PinName rd, PinName td, int hz) : _can(), _irq() { can_irq_init(&_can, (&CAN::_irq_handler), (uint32_t)this); } -CAN::~CAN() { +CAN::~CAN() +{ // No lock needed in destructor // Detaching interrupts releases the sleep lock if it was locked @@ -55,68 +58,78 @@ CAN::~CAN() { can_free(&_can); } -int CAN::frequency(int f) { +int CAN::frequency(int f) +{ lock(); int ret = can_frequency(&_can, f); unlock(); return ret; } -int CAN::write(CANMessage msg) { +int CAN::write(CANMessage msg) +{ lock(); int ret = can_write(&_can, msg, 0); unlock(); return ret; } -int CAN::read(CANMessage &msg, int handle) { +int CAN::read(CANMessage &msg, int handle) +{ lock(); int ret = can_read(&_can, &msg, handle); unlock(); return ret; } -void CAN::reset() { +void CAN::reset() +{ lock(); can_reset(&_can); unlock(); } -unsigned char CAN::rderror() { +unsigned char CAN::rderror() +{ lock(); int ret = can_rderror(&_can); unlock(); return ret; } -unsigned char CAN::tderror() { +unsigned char CAN::tderror() +{ lock(); int ret = can_tderror(&_can); unlock(); return ret; } -void CAN::monitor(bool silent) { +void CAN::monitor(bool silent) +{ lock(); can_monitor(&_can, (silent) ? 1 : 0); unlock(); } -int CAN::mode(Mode mode) { +int CAN::mode(Mode mode) +{ lock(); int ret = can_mode(&_can, (CanMode)mode); unlock(); return ret; } -int CAN::filter(unsigned int id, unsigned int mask, CANFormat format, int handle) { +int CAN::filter(unsigned int id, unsigned int mask, CANFormat format, int handle) +{ lock(); int ret = can_filter(&_can, id, mask, format, handle); unlock(); return ret; } -void CAN::attach(Callback func, IrqType type) { +void CAN::attach(Callback func, IrqType type) +{ lock(); if (func) { // lock deep sleep only the first time @@ -136,18 +149,21 @@ void CAN::attach(Callback func, IrqType type) { unlock(); } -void CAN::_irq_handler(uint32_t id, CanIrqType type) { - CAN *handler = (CAN*)id; +void CAN::_irq_handler(uint32_t id, CanIrqType type) +{ + CAN *handler = (CAN *)id; if (handler->_irq[type]) { handler->_irq[type].call(); } } -void CAN::lock() { +void CAN::lock() +{ _mutex.lock(); } -void CAN::unlock() { +void CAN::unlock() +{ _mutex.unlock(); } diff --git a/drivers/CAN.h b/drivers/CAN.h index 668e32c256e..5f506f68adb 100644 --- a/drivers/CAN.h +++ b/drivers/CAN.h @@ -38,7 +38,8 @@ class CANMessage : public CAN_Message { public: /** Creates empty CAN message. */ - CANMessage() : CAN_Message() { + CANMessage() : CAN_Message() + { len = 8; type = CANData; format = CANStandard; @@ -54,12 +55,13 @@ class CANMessage : public CAN_Message { * @param _type Type of Data: Use enum CANType for valid parameter values * @param _format Data Format: Use enum CANFormat for valid parameter values */ - CANMessage(int _id, const char *_data, char _len = 8, CANType _type = CANData, CANFormat _format = CANStandard) { - len = _len & 0xF; - type = _type; - format = _format; - id = _id; - memcpy(data, _data, _len); + CANMessage(int _id, const char *_data, char _len = 8, CANType _type = CANData, CANFormat _format = CANStandard) + { + len = _len & 0xF; + type = _type; + format = _format; + id = _id; + memcpy(data, _data, _len); } /** Creates CAN remote message. @@ -67,12 +69,13 @@ class CANMessage : public CAN_Message { * @param _id Message ID * @param _format Data Format: Use enum CANType for valid parameter values */ - CANMessage(int _id, CANFormat _format = CANStandard) { - len = 0; - type = CANRemote; - format = _format; - id = _id; - memset(data, 0, 8); + CANMessage(int _id, CANFormat _format = CANStandard) + { + len = 0; + type = CANRemote; + format = _format; + id = _id; + memset(data, 0, 8); } }; @@ -235,48 +238,50 @@ class CAN : private NonCopyable { /** Attach a function to call whenever a CAN frame received interrupt is * generated. - * + * * This function locks the deep sleep while a callback is attached - * + * * @param func A pointer to a void function, or 0 to set as none * @param type Which CAN interrupt to attach the member function to (CAN::RxIrq for message received, CAN::TxIrq for transmitted or aborted, CAN::EwIrq for error warning, CAN::DoIrq for data overrun, CAN::WuIrq for wake-up, CAN::EpIrq for error passive, CAN::AlIrq for arbitration lost, CAN::BeIrq for bus error) */ - void attach(Callback func, IrqType type=RxIrq); - - /** Attach a member function to call whenever a CAN frame received interrupt - * is generated. - * - * @param obj pointer to the object to call the member function on - * @param method pointer to the member function to be called - * @param type Which CAN interrupt to attach the member function to (CAN::RxIrq for message received, TxIrq for transmitted or aborted, EwIrq for error warning, DoIrq for data overrun, WuIrq for wake-up, EpIrq for error passive, AlIrq for arbitration lost, BeIrq for bus error) - * @deprecated - * The attach function does not support cv-qualifiers. Replaced by - * attach(callback(obj, method), type). - */ + void attach(Callback func, IrqType type = RxIrq); + + /** Attach a member function to call whenever a CAN frame received interrupt + * is generated. + * + * @param obj pointer to the object to call the member function on + * @param method pointer to the member function to be called + * @param type Which CAN interrupt to attach the member function to (CAN::RxIrq for message received, TxIrq for transmitted or aborted, EwIrq for error warning, DoIrq for data overrun, WuIrq for wake-up, EpIrq for error passive, AlIrq for arbitration lost, BeIrq for bus error) + * @deprecated + * The attach function does not support cv-qualifiers. Replaced by + * attach(callback(obj, method), type). + */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "The attach function does not support cv-qualifiers. Replaced by " - "attach(callback(obj, method), type).") - void attach(T* obj, void (T::*method)(), IrqType type=RxIrq) { + "The attach function does not support cv-qualifiers. Replaced by " + "attach(callback(obj, method), type).") + void attach(T *obj, void (T::*method)(), IrqType type = RxIrq) + { // Underlying call thread safe attach(callback(obj, method), type); } - /** Attach a member function to call whenever a CAN frame received interrupt - * is generated. - * - * @param obj pointer to the object to call the member function on - * @param method pointer to the member function to be called - * @param type Which CAN interrupt to attach the member function to (CAN::RxIrq for message received, TxIrq for transmitted or aborted, EwIrq for error warning, DoIrq for data overrun, WuIrq for wake-up, EpIrq for error passive, AlIrq for arbitration lost, BeIrq for bus error) - * @deprecated - * The attach function does not support cv-qualifiers. Replaced by - * attach(callback(obj, method), type). - */ + /** Attach a member function to call whenever a CAN frame received interrupt + * is generated. + * + * @param obj pointer to the object to call the member function on + * @param method pointer to the member function to be called + * @param type Which CAN interrupt to attach the member function to (CAN::RxIrq for message received, TxIrq for transmitted or aborted, EwIrq for error warning, DoIrq for data overrun, WuIrq for wake-up, EpIrq for error passive, AlIrq for arbitration lost, BeIrq for bus error) + * @deprecated + * The attach function does not support cv-qualifiers. Replaced by + * attach(callback(obj, method), type). + */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "The attach function does not support cv-qualifiers. Replaced by " - "attach(callback(obj, method), type).") - void attach(T* obj, void (*method)(T*), IrqType type=RxIrq) { + "The attach function does not support cv-qualifiers. Replaced by " + "attach(callback(obj, method), type).") + void attach(T *obj, void (*method)(T *), IrqType type = RxIrq) + { // Underlying call thread safe attach(callback(obj, method), type); } diff --git a/drivers/DigitalIn.h b/drivers/DigitalIn.h index d35476c296b..1a2af01fa3a 100644 --- a/drivers/DigitalIn.h +++ b/drivers/DigitalIn.h @@ -55,7 +55,8 @@ class DigitalIn { * * @param pin DigitalIn pin to connect to */ - DigitalIn(PinName pin) : gpio() { + DigitalIn(PinName pin) : gpio() + { // No lock needed in the constructor gpio_init_in(&gpio, pin); } @@ -65,7 +66,8 @@ class DigitalIn { * @param pin DigitalIn pin to connect to * @param mode the initial mode of the pin */ - DigitalIn(PinName pin, PinMode mode) : gpio() { + DigitalIn(PinName pin, PinMode mode) : gpio() + { // No lock needed in the constructor gpio_init_in_ex(&gpio, pin, mode); } @@ -75,7 +77,8 @@ class DigitalIn { * An integer representing the state of the input pin, * 0 for logical 0, 1 for logical 1 */ - int read() { + int read() + { // Thread safe / atomic HAL call return gpio_read(&gpio); } @@ -84,7 +87,8 @@ class DigitalIn { * * @param pull PullUp, PullDown, PullNone, OpenDrain */ - void mode(PinMode pull) { + void mode(PinMode pull) + { core_util_critical_section_enter(); gpio_mode(&gpio, pull); core_util_critical_section_exit(); @@ -96,7 +100,8 @@ class DigitalIn { * Non zero value if pin is connected to uc GPIO * 0 if gpio object was initialized with NC */ - int is_connected() { + int is_connected() + { // Thread safe / atomic HAL call return gpio_is_connected(&gpio); } @@ -104,7 +109,8 @@ class DigitalIn { /** An operator shorthand for read() * \sa DigitalIn::read() */ - operator int() { + operator int() + { // Underlying read is thread safe return read(); } diff --git a/drivers/DigitalInOut.h b/drivers/DigitalInOut.h index cc524ff5107..a11fcad2c0f 100644 --- a/drivers/DigitalInOut.h +++ b/drivers/DigitalInOut.h @@ -36,7 +36,8 @@ class DigitalInOut { * * @param pin DigitalInOut pin to connect to */ - DigitalInOut(PinName pin) : gpio() { + DigitalInOut(PinName pin) : gpio() + { // No lock needed in the constructor gpio_init_in(&gpio, pin); } @@ -48,7 +49,8 @@ class DigitalInOut { * @param mode the initial mode of the pin * @param value the initial value of the pin if is an output */ - DigitalInOut(PinName pin, PinDirection direction, PinMode mode, int value) : gpio() { + DigitalInOut(PinName pin, PinDirection direction, PinMode mode, int value) : gpio() + { // No lock needed in the constructor gpio_init_inout(&gpio, pin, direction, mode, value); } @@ -58,7 +60,8 @@ class DigitalInOut { * @param value An integer specifying the pin output value, * 0 for logical 0, 1 (or any other non-zero value) for logical 1 */ - void write(int value) { + void write(int value) + { // Thread safe / atomic HAL call gpio_write(&gpio, value); } @@ -69,14 +72,16 @@ class DigitalInOut { * an integer representing the output setting of the pin if it is an output, * or read the input if set as an input */ - int read() { + int read() + { // Thread safe / atomic HAL call return gpio_read(&gpio); } /** Set as an output */ - void output() { + void output() + { core_util_critical_section_enter(); gpio_dir(&gpio, PIN_OUTPUT); core_util_critical_section_exit(); @@ -84,7 +89,8 @@ class DigitalInOut { /** Set as an input */ - void input() { + void input() + { core_util_critical_section_enter(); gpio_dir(&gpio, PIN_INPUT); core_util_critical_section_exit(); @@ -94,7 +100,8 @@ class DigitalInOut { * * @param pull PullUp, PullDown, PullNone, OpenDrain */ - void mode(PinMode pull) { + void mode(PinMode pull) + { core_util_critical_section_enter(); gpio_mode(&gpio, pull); core_util_critical_section_exit(); @@ -106,7 +113,8 @@ class DigitalInOut { * Non zero value if pin is connected to uc GPIO * 0 if gpio object was initialized with NC */ - int is_connected() { + int is_connected() + { // Thread safe / atomic HAL call return gpio_is_connected(&gpio); } @@ -114,7 +122,8 @@ class DigitalInOut { /** A shorthand for write() * \sa DigitalInOut::write() */ - DigitalInOut& operator= (int value) { + DigitalInOut &operator= (int value) + { // Underlying write is thread safe write(value); return *this; @@ -123,7 +132,8 @@ class DigitalInOut { /** A shorthand for write() * \sa DigitalInOut::write() */ - DigitalInOut& operator= (DigitalInOut& rhs) { + DigitalInOut &operator= (DigitalInOut &rhs) + { core_util_critical_section_enter(); write(rhs.read()); core_util_critical_section_exit(); @@ -133,7 +143,8 @@ class DigitalInOut { /** A shorthand for read() * \sa DigitalInOut::read() */ - operator int() { + operator int() + { // Underlying call is thread safe return read(); } diff --git a/drivers/DigitalOut.h b/drivers/DigitalOut.h index 06c57359e00..fb6d1be6c2d 100644 --- a/drivers/DigitalOut.h +++ b/drivers/DigitalOut.h @@ -50,7 +50,8 @@ class DigitalOut { * * @param pin DigitalOut pin to connect to */ - DigitalOut(PinName pin) : gpio() { + DigitalOut(PinName pin) : gpio() + { // No lock needed in the constructor gpio_init_out(&gpio, pin); } @@ -60,7 +61,8 @@ class DigitalOut { * @param pin DigitalOut pin to connect to * @param value the initial pin value */ - DigitalOut(PinName pin, int value) : gpio() { + DigitalOut(PinName pin, int value) : gpio() + { // No lock needed in the constructor gpio_init_out_ex(&gpio, pin, value); } @@ -70,7 +72,8 @@ class DigitalOut { * @param value An integer specifying the pin output value, * 0 for logical 0, 1 (or any other non-zero value) for logical 1 */ - void write(int value) { + void write(int value) + { // Thread safe / atomic HAL call gpio_write(&gpio, value); } @@ -81,7 +84,8 @@ class DigitalOut { * an integer representing the output setting of the pin, * 0 for logical 0, 1 for logical 1 */ - int read() { + int read() + { // Thread safe / atomic HAL call return gpio_read(&gpio); } @@ -92,7 +96,8 @@ class DigitalOut { * Non zero value if pin is connected to uc GPIO * 0 if gpio object was initialized with NC */ - int is_connected() { + int is_connected() + { // Thread safe / atomic HAL call return gpio_is_connected(&gpio); } @@ -100,7 +105,8 @@ class DigitalOut { /** A shorthand for write() * \sa DigitalOut::write() */ - DigitalOut& operator= (int value) { + DigitalOut &operator= (int value) + { // Underlying write is thread safe write(value); return *this; @@ -109,7 +115,8 @@ class DigitalOut { /** A shorthand for write() * \sa DigitalOut::write() */ - DigitalOut& operator= (DigitalOut& rhs) { + DigitalOut &operator= (DigitalOut &rhs) + { core_util_critical_section_enter(); write(rhs.read()); core_util_critical_section_exit(); @@ -119,7 +126,8 @@ class DigitalOut { /** A shorthand for read() * \sa DigitalOut::read() */ - operator int() { + operator int() + { // Underlying call is thread safe return read(); } diff --git a/drivers/Ethernet.cpp b/drivers/Ethernet.cpp index c275f4a99bf..6b0a2bfab6f 100644 --- a/drivers/Ethernet.cpp +++ b/drivers/Ethernet.cpp @@ -21,48 +21,72 @@ namespace mbed { -Ethernet::Ethernet() { +Ethernet::Ethernet() +{ ethernet_init(); } -Ethernet::~Ethernet() { +Ethernet::~Ethernet() +{ ethernet_free(); } -int Ethernet::write(const char *data, int size) { +int Ethernet::write(const char *data, int size) +{ return ethernet_write(data, size); } -int Ethernet::send() { +int Ethernet::send() +{ return ethernet_send(); } -int Ethernet::receive() { +int Ethernet::receive() +{ return ethernet_receive(); } -int Ethernet::read(char *data, int size) { +int Ethernet::read(char *data, int size) +{ return ethernet_read(data, size); } -void Ethernet::address(char *mac) { +void Ethernet::address(char *mac) +{ return ethernet_address(mac); } -int Ethernet::link() { +int Ethernet::link() +{ return ethernet_link(); } -void Ethernet::set_link(Mode mode) { +void Ethernet::set_link(Mode mode) +{ int speed = -1; int duplex = 0; - switch(mode) { - case AutoNegotiate : speed = -1; duplex = 0; break; - case HalfDuplex10 : speed = 0; duplex = 0; break; - case FullDuplex10 : speed = 0; duplex = 1; break; - case HalfDuplex100 : speed = 1; duplex = 0; break; - case FullDuplex100 : speed = 1; duplex = 1; break; + switch (mode) { + case AutoNegotiate : + speed = -1; + duplex = 0; + break; + case HalfDuplex10 : + speed = 0; + duplex = 0; + break; + case FullDuplex10 : + speed = 0; + duplex = 1; + break; + case HalfDuplex100 : + speed = 1; + duplex = 0; + break; + case FullDuplex100 : + speed = 1; + duplex = 1; + break; } ethernet_set_link(speed, duplex); diff --git a/drivers/FlashIAP.cpp b/drivers/FlashIAP.cpp index 3c2009ef96b..8f710614722 100644 --- a/drivers/FlashIAP.cpp +++ b/drivers/FlashIAP.cpp @@ -99,7 +99,7 @@ int FlashIAP::program(const void *buffer, uint32_t addr, uint32_t size) // addr should be aligned to page size if (!is_aligned(addr, page_size) || (!buffer) || - ((addr + size) > (flash_start_addr + flash_size))) { + ((addr + size) > (flash_start_addr + flash_size))) { return -1; } @@ -143,7 +143,7 @@ bool FlashIAP::is_aligned_to_sector(uint32_t addr, uint32_t size) { uint32_t current_sector_size = flash_get_sector_size(&_flash, addr); if (!is_aligned(size, current_sector_size) || - !is_aligned(addr, current_sector_size)) { + !is_aligned(addr, current_sector_size)) { return false; } else { return true; @@ -160,7 +160,7 @@ int FlashIAP::erase(uint32_t addr, uint32_t size) if (erase_end_addr > flash_end_addr) { return -1; - } else if (erase_end_addr < flash_end_addr){ + } else if (erase_end_addr < flash_end_addr) { uint32_t following_sector_size = flash_get_sector_size(&_flash, erase_end_addr); if (!is_aligned(erase_end_addr, following_sector_size)) { return -1; diff --git a/drivers/FlashIAP.h b/drivers/FlashIAP.h index a818410c550..92a93996768 100644 --- a/drivers/FlashIAP.h +++ b/drivers/FlashIAP.h @@ -56,7 +56,7 @@ class FlashIAP : private NonCopyable { */ int deinit(); - /** Read data from a flash device. + /** Read data from a flash device. * * This method invokes memcpy - reads number of bytes from the address * @@ -90,7 +90,7 @@ class FlashIAP : private NonCopyable { /** Get the sector size at the defined address * - * Sector size might differ at address ranges. + * Sector size might differ at address ranges. * An example <0-0x1000, sector size=1024; 0x10000-0x20000, size=2048> * * @param addr Address of or inside the sector to query @@ -98,15 +98,15 @@ class FlashIAP : private NonCopyable { */ uint32_t get_sector_size(uint32_t addr) const; - /** Get the flash start address + /** Get the flash start address * - * @return Flash start address + * @return Flash start address */ uint32_t get_flash_start() const; /** Get the flash size * - * @return Flash size + * @return Flash size */ uint32_t get_flash_size() const; diff --git a/drivers/I2C.cpp b/drivers/I2C.cpp index 148d48ee38d..08d8d2320f9 100644 --- a/drivers/I2C.cpp +++ b/drivers/I2C.cpp @@ -41,7 +41,8 @@ I2C::I2C(PinName sda, PinName scl) : _owner = this; } -void I2C::frequency(int hz) { +void I2C::frequency(int hz) +{ lock(); _hz = hz; @@ -53,7 +54,8 @@ void I2C::frequency(int hz) { unlock(); } -void I2C::aquire() { +void I2C::aquire() +{ lock(); if (_owner != this) { i2c_frequency(&_i2c, _hz); @@ -63,7 +65,8 @@ void I2C::aquire() { } // write - Master Transmitter Mode -int I2C::write(int address, const char* data, int length, bool repeated) { +int I2C::write(int address, const char *data, int length, bool repeated) +{ lock(); aquire(); @@ -74,7 +77,8 @@ int I2C::write(int address, const char* data, int length, bool repeated) { return length != written; } -int I2C::write(int data) { +int I2C::write(int data) +{ lock(); int ret = i2c_byte_write(&_i2c, data); unlock(); @@ -82,7 +86,8 @@ int I2C::write(int data) { } // read - Master Receiver Mode -int I2C::read(int address, char* data, int length, bool repeated) { +int I2C::read(int address, char *data, int length, bool repeated) +{ lock(); aquire(); @@ -93,7 +98,8 @@ int I2C::read(int address, char* data, int length, bool repeated) { return length != read; } -int I2C::read(int ack) { +int I2C::read(int ack) +{ lock(); int ret; if (ack) { @@ -105,29 +111,33 @@ int I2C::read(int ack) { return ret; } -void I2C::start(void) { +void I2C::start(void) +{ lock(); i2c_start(&_i2c); unlock(); } -void I2C::stop(void) { +void I2C::stop(void) +{ lock(); i2c_stop(&_i2c); unlock(); } -void I2C::lock() { +void I2C::lock() +{ _mutex->lock(); } -void I2C::unlock() { +void I2C::unlock() +{ _mutex->unlock(); } #if DEVICE_I2C_ASYNCH -int I2C::transfer(int address, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t& callback, int event, bool repeated) +int I2C::transfer(int address, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t &callback, int event, bool repeated) { lock(); if (i2c_active(&_i2c)) { diff --git a/drivers/I2C.h b/drivers/I2C.h index a4b0598d299..13f43186d60 100644 --- a/drivers/I2C.h +++ b/drivers/I2C.h @@ -151,7 +151,8 @@ class I2C : private NonCopyable { */ virtual void unlock(void); - virtual ~I2C() { + virtual ~I2C() + { // Do nothing } @@ -160,7 +161,7 @@ class I2C : private NonCopyable { /** Start non-blocking I2C transfer. * * This function locks the deep sleep until any event has occurred - * + * * @param address 8/10 bit I2C slave address * @param tx_buffer The TX buffer with data to be transfered * @param tx_length The length of TX buffer in bytes @@ -171,13 +172,13 @@ class I2C : private NonCopyable { * @param repeated Repeated start, true - do not send stop at end * @return Zero if the transfer has started, or -1 if I2C peripheral is busy */ - int transfer(int address, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t& callback, int event = I2C_EVENT_TRANSFER_COMPLETE, bool repeated = false); + int transfer(int address, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t &callback, int event = I2C_EVENT_TRANSFER_COMPLETE, bool repeated = false); /** Abort the on-going I2C transfer */ void abort_transfer(); - protected: +protected: /** Lock deep sleep only if it is not yet locked */ void lock_deep_sleep(); diff --git a/drivers/I2CSlave.cpp b/drivers/I2CSlave.cpp index f168c2a6c74..b29b4e74e24 100644 --- a/drivers/I2CSlave.cpp +++ b/drivers/I2CSlave.cpp @@ -19,42 +19,51 @@ namespace mbed { -I2CSlave::I2CSlave(PinName sda, PinName scl) : _i2c() { +I2CSlave::I2CSlave(PinName sda, PinName scl) : _i2c() +{ i2c_init(&_i2c, sda, scl); i2c_frequency(&_i2c, 100000); i2c_slave_mode(&_i2c, 1); } -void I2CSlave::frequency(int hz) { +void I2CSlave::frequency(int hz) +{ i2c_frequency(&_i2c, hz); } -void I2CSlave::address(int address) { +void I2CSlave::address(int address) +{ int addr = (address & 0xFF) | 1; i2c_slave_address(&_i2c, 0, addr, 0); } -int I2CSlave::receive(void) { +int I2CSlave::receive(void) +{ return i2c_slave_receive(&_i2c); } -int I2CSlave::read(char *data, int length) { +int I2CSlave::read(char *data, int length) +{ return i2c_slave_read(&_i2c, data, length) != length; } -int I2CSlave::read(void) { +int I2CSlave::read(void) +{ return i2c_byte_read(&_i2c, 0); } -int I2CSlave::write(const char *data, int length) { +int I2CSlave::write(const char *data, int length) +{ return i2c_slave_write(&_i2c, data, length) != length; } -int I2CSlave::write(int data) { +int I2CSlave::write(int data) +{ return i2c_byte_write(&_i2c, data); } -void I2CSlave::stop(void) { +void I2CSlave::stop(void) +{ i2c_stop(&_i2c); } diff --git a/drivers/InterruptIn.cpp b/drivers/InterruptIn.cpp index 28f90419ad4..51d947f7a35 100644 --- a/drivers/InterruptIn.cpp +++ b/drivers/InterruptIn.cpp @@ -24,45 +24,52 @@ namespace mbed { // If not for that, we could simplify by having only the 2-param // constructor, with a default value for the PinMode. InterruptIn::InterruptIn(PinName pin) : gpio(), - gpio_irq(), - _rise(NULL), - _fall(NULL) { + gpio_irq(), + _rise(NULL), + _fall(NULL) +{ // No lock needed in the constructor irq_init(pin); gpio_init_in(&gpio, pin); } InterruptIn::InterruptIn(PinName pin, PinMode mode) : - gpio(), - gpio_irq(), - _rise(NULL), - _fall(NULL) { + gpio(), + gpio_irq(), + _rise(NULL), + _fall(NULL) +{ // No lock needed in the constructor irq_init(pin); gpio_init_in_ex(&gpio, pin, mode); } -void InterruptIn::irq_init(PinName pin) { - gpio_irq_init(&gpio_irq, pin, (&InterruptIn::_irq_handler), (uint32_t)this); +void InterruptIn::irq_init(PinName pin) +{ + gpio_irq_init(&gpio_irq, pin, (&InterruptIn::_irq_handler), (uint32_t)this); } -InterruptIn::~InterruptIn() { +InterruptIn::~InterruptIn() +{ // No lock needed in the destructor gpio_irq_free(&gpio_irq); } -int InterruptIn::read() { +int InterruptIn::read() +{ // Read only return gpio_read(&gpio); } -void InterruptIn::mode(PinMode pull) { +void InterruptIn::mode(PinMode pull) +{ core_util_critical_section_enter(); gpio_mode(&gpio, pull); core_util_critical_section_exit(); } -void InterruptIn::rise(Callback func) { +void InterruptIn::rise(Callback func) +{ core_util_critical_section_enter(); if (func) { _rise = func; @@ -74,7 +81,8 @@ void InterruptIn::rise(Callback func) { core_util_critical_section_exit(); } -void InterruptIn::fall(Callback func) { +void InterruptIn::fall(Callback func) +{ core_util_critical_section_enter(); if (func) { _fall = func; @@ -86,36 +94,41 @@ void InterruptIn::fall(Callback func) { core_util_critical_section_exit(); } -void InterruptIn::_irq_handler(uint32_t id, gpio_irq_event event) { - InterruptIn *handler = (InterruptIn*)id; +void InterruptIn::_irq_handler(uint32_t id, gpio_irq_event event) +{ + InterruptIn *handler = (InterruptIn *)id; switch (event) { - case IRQ_RISE: + case IRQ_RISE: if (handler->_rise) { handler->_rise(); } break; - case IRQ_FALL: + case IRQ_FALL: if (handler->_fall) { - handler->_fall(); + handler->_fall(); } break; - case IRQ_NONE: break; + case IRQ_NONE: + break; } } -void InterruptIn::enable_irq() { +void InterruptIn::enable_irq() +{ core_util_critical_section_enter(); gpio_irq_enable(&gpio_irq); core_util_critical_section_exit(); } -void InterruptIn::disable_irq() { +void InterruptIn::disable_irq() +{ core_util_critical_section_enter(); gpio_irq_disable(&gpio_irq); core_util_critical_section_exit(); } -InterruptIn::operator int() { +InterruptIn::operator int() +{ // Underlying call is atomic return read(); } diff --git a/drivers/InterruptIn.h b/drivers/InterruptIn.h index e226d31993d..ebc8c84fac3 100644 --- a/drivers/InterruptIn.h +++ b/drivers/InterruptIn.h @@ -106,9 +106,10 @@ class InterruptIn : private NonCopyable { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "The rise function does not support cv-qualifiers. Replaced by " - "rise(callback(obj, method)).") - void rise(T *obj, M method) { + "The rise function does not support cv-qualifiers. Replaced by " + "rise(callback(obj, method)).") + void rise(T *obj, M method) + { core_util_critical_section_enter(); rise(callback(obj, method)); core_util_critical_section_exit(); @@ -130,9 +131,10 @@ class InterruptIn : private NonCopyable { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "The fall function does not support cv-qualifiers. Replaced by " - "fall(callback(obj, method)).") - void fall(T *obj, M method) { + "The fall function does not support cv-qualifiers. Replaced by " + "fall(callback(obj, method)).") + void fall(T *obj, M method) + { core_util_critical_section_enter(); fall(callback(obj, method)); core_util_critical_section_exit(); diff --git a/drivers/InterruptManager.cpp b/drivers/InterruptManager.cpp index 9c2b4c2acb8..f557cf43781 100644 --- a/drivers/InterruptManager.cpp +++ b/drivers/InterruptManager.cpp @@ -32,12 +32,13 @@ namespace mbed { typedef void (*pvoidf)(void); -InterruptManager* InterruptManager::_instance = (InterruptManager*)NULL; +InterruptManager *InterruptManager::_instance = (InterruptManager *)NULL; -InterruptManager* InterruptManager::get() { +InterruptManager *InterruptManager::get() +{ if (NULL == _instance) { - InterruptManager* temp = new InterruptManager(); + InterruptManager *temp = new InterruptManager(); // Atomically set _instance core_util_critical_section_enter(); @@ -55,28 +56,33 @@ InterruptManager* InterruptManager::get() { return _instance; } -InterruptManager::InterruptManager() { +InterruptManager::InterruptManager() +{ // No mutex needed in constructor - memset(_chains, 0, NVIC_NUM_VECTORS * sizeof(CallChain*)); + memset(_chains, 0, NVIC_NUM_VECTORS * sizeof(CallChain *)); } -void InterruptManager::destroy() { +void InterruptManager::destroy() +{ // Not a good idea to call this unless NO interrupt at all // is under the control of the handler; otherwise, a system crash // is very likely to occur if (NULL != _instance) { delete _instance; - _instance = (InterruptManager*)NULL; + _instance = (InterruptManager *)NULL; } } -InterruptManager::~InterruptManager() { - for(int i = 0; i < NVIC_NUM_VECTORS; i++) - if (NULL != _chains[i]) +InterruptManager::~InterruptManager() +{ + for (int i = 0; i < NVIC_NUM_VECTORS; i++) + if (NULL != _chains[i]) { delete _chains[i]; + } } -bool InterruptManager::must_replace_vector(IRQn_Type irq) { +bool InterruptManager::must_replace_vector(IRQn_Type irq) +{ lock(); int ret = false; @@ -90,19 +96,22 @@ bool InterruptManager::must_replace_vector(IRQn_Type irq) { return ret; } -pFunctionPointer_t InterruptManager::add_common(void (*function)(void), IRQn_Type irq, bool front) { +pFunctionPointer_t InterruptManager::add_common(void (*function)(void), IRQn_Type irq, bool front) +{ lock(); int irq_pos = get_irq_index(irq); bool change = must_replace_vector(irq); pFunctionPointer_t pf = front ? _chains[irq_pos]->add_front(function) : _chains[irq_pos]->add(function); - if (change) + if (change) { NVIC_SetVector(irq, (uint32_t)&InterruptManager::static_irq_helper); + } unlock(); return pf; } -bool InterruptManager::remove_handler(pFunctionPointer_t handler, IRQn_Type irq) { +bool InterruptManager::remove_handler(pFunctionPointer_t handler, IRQn_Type irq) +{ int irq_pos = get_irq_index(irq); bool ret = false; @@ -117,24 +126,29 @@ bool InterruptManager::remove_handler(pFunctionPointer_t handler, IRQn_Type irq) return ret; } -void InterruptManager::irq_helper() { +void InterruptManager::irq_helper() +{ _chains[__get_IPSR()]->call(); } -int InterruptManager::get_irq_index(IRQn_Type irq) { +int InterruptManager::get_irq_index(IRQn_Type irq) +{ // Pure function - no lock needed return (int)irq + NVIC_USER_IRQ_OFFSET; } -void InterruptManager::static_irq_helper() { +void InterruptManager::static_irq_helper() +{ InterruptManager::get()->irq_helper(); } -void InterruptManager::lock() { +void InterruptManager::lock() +{ _mutex.lock(); } -void InterruptManager::unlock() { +void InterruptManager::unlock() +{ _mutex.unlock(); } diff --git a/drivers/InterruptManager.h b/drivers/InterruptManager.h index b787c4bda76..c65fb683e8f 100644 --- a/drivers/InterruptManager.h +++ b/drivers/InterruptManager.h @@ -58,26 +58,26 @@ namespace mbed { class InterruptManager : private NonCopyable { public: /** Get the instance of InterruptManager Class - * @deprecated + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. * * @return the only instance of this class */ MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") - static InterruptManager* get(); + "public API of mbed-os and is being removed in the future.") + static InterruptManager *get(); /** Destroy the current instance of the interrupt manager - * @deprecated + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. * */ MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") + "public API of mbed-os and is being removed in the future.") static void destroy(); /** Add a handler for an interrupt at the end of the handler list - * @deprecated + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. * * @param function the handler to add @@ -87,14 +87,15 @@ class InterruptManager : private NonCopyable { * The function object created for 'function' */ MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") - pFunctionPointer_t add_handler(void (*function)(void), IRQn_Type irq) { + "public API of mbed-os and is being removed in the future.") + pFunctionPointer_t add_handler(void (*function)(void), IRQn_Type irq) + { // Underlying call is thread safe return add_common(function, irq); } /** Add a handler for an interrupt at the beginning of the handler list - * @deprecated + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. * * @param function the handler to add @@ -104,14 +105,15 @@ class InterruptManager : private NonCopyable { * The function object created for 'function' */ MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") - pFunctionPointer_t add_handler_front(void (*function)(void), IRQn_Type irq) { + "public API of mbed-os and is being removed in the future.") + pFunctionPointer_t add_handler_front(void (*function)(void), IRQn_Type irq) + { // Underlying call is thread safe return add_common(function, irq, true); } /** Add a handler for an interrupt at the end of the handler list - * @deprecated + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. * * @param tptr pointer to the object that has the handler function @@ -123,14 +125,15 @@ class InterruptManager : private NonCopyable { */ template MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") - pFunctionPointer_t add_handler(T* tptr, void (T::*mptr)(void), IRQn_Type irq) { + "public API of mbed-os and is being removed in the future.") + pFunctionPointer_t add_handler(T *tptr, void (T::*mptr)(void), IRQn_Type irq) + { // Underlying call is thread safe return add_common(tptr, mptr, irq); } /** Add a handler for an interrupt at the beginning of the handler list - * @deprecated + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. * * @param tptr pointer to the object that has the handler function @@ -142,14 +145,15 @@ class InterruptManager : private NonCopyable { */ template MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") - pFunctionPointer_t add_handler_front(T* tptr, void (T::*mptr)(void), IRQn_Type irq) { + "public API of mbed-os and is being removed in the future.") + pFunctionPointer_t add_handler_front(T *tptr, void (T::*mptr)(void), IRQn_Type irq) + { // Underlying call is thread safe return add_common(tptr, mptr, irq, true); } /** Remove a handler from an interrupt - * @deprecated + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. * * @param handler the function object for the handler to remove @@ -159,7 +163,7 @@ class InterruptManager : private NonCopyable { * true if the handler was found and removed, false otherwise */ MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") + "public API of mbed-os and is being removed in the future.") bool remove_handler(pFunctionPointer_t handler, IRQn_Type irq); private: @@ -170,27 +174,29 @@ class InterruptManager : private NonCopyable { void unlock(); template - pFunctionPointer_t add_common(T *tptr, void (T::*mptr)(void), IRQn_Type irq, bool front=false) { + pFunctionPointer_t add_common(T *tptr, void (T::*mptr)(void), IRQn_Type irq, bool front = false) + { _mutex.lock(); int irq_pos = get_irq_index(irq); bool change = must_replace_vector(irq); pFunctionPointer_t pf = front ? _chains[irq_pos]->add_front(tptr, mptr) : _chains[irq_pos]->add(tptr, mptr); - if (change) + if (change) { NVIC_SetVector(irq, (uint32_t)&InterruptManager::static_irq_helper); + } _mutex.unlock(); return pf; } - pFunctionPointer_t add_common(void (*function)(void), IRQn_Type irq, bool front=false); + pFunctionPointer_t add_common(void (*function)(void), IRQn_Type irq, bool front = false); bool must_replace_vector(IRQn_Type irq); int get_irq_index(IRQn_Type irq); void irq_helper(); - void add_helper(void (*function)(void), IRQn_Type irq, bool front=false); + void add_helper(void (*function)(void), IRQn_Type irq, bool front = false); static void static_irq_helper(); - CallChain* _chains[NVIC_NUM_VECTORS]; - static InterruptManager* _instance; + CallChain *_chains[NVIC_NUM_VECTORS]; + static InterruptManager *_instance; PlatformMutex _mutex; }; diff --git a/drivers/LowPowerTicker.h b/drivers/LowPowerTicker.h index 9a4caf82180..a77307e68bc 100644 --- a/drivers/LowPowerTicker.h +++ b/drivers/LowPowerTicker.h @@ -35,10 +35,12 @@ namespace mbed { class LowPowerTicker : public Ticker, private NonCopyable { public: - LowPowerTicker() : Ticker(get_lp_ticker_data()) { + LowPowerTicker() : Ticker(get_lp_ticker_data()) + { } - virtual ~LowPowerTicker() { + virtual ~LowPowerTicker() + { } }; diff --git a/drivers/LowPowerTimeout.h b/drivers/LowPowerTimeout.h index ef96006738d..7c9d00e3844 100644 --- a/drivers/LowPowerTimeout.h +++ b/drivers/LowPowerTimeout.h @@ -35,7 +35,8 @@ namespace mbed { class LowPowerTimeout : public LowPowerTicker, private NonCopyable { private: - virtual void handler(void) { + virtual void handler(void) + { _function.call(); } }; diff --git a/drivers/LowPowerTimer.h b/drivers/LowPowerTimer.h index 20959d6721d..19bb8fdc3ef 100644 --- a/drivers/LowPowerTimer.h +++ b/drivers/LowPowerTimer.h @@ -35,7 +35,8 @@ namespace mbed { class LowPowerTimer : public Timer, private NonCopyable { public: - LowPowerTimer() : Timer(get_lp_ticker_data()) { + LowPowerTimer() : Timer(get_lp_ticker_data()) + { } }; diff --git a/drivers/MbedCRC.cpp b/drivers/MbedCRC.cpp index bece2e2366d..cc90945ac09 100644 --- a/drivers/MbedCRC.cpp +++ b/drivers/MbedCRC.cpp @@ -26,40 +26,40 @@ namespace mbed { */ template<> MbedCRC::MbedCRC(uint32_t initial_xor, uint32_t final_xor, bool reflect_data, bool reflect_remainder): - _initial_value(initial_xor), _final_xor(final_xor), _reflect_data(reflect_data), _reflect_remainder(reflect_remainder), - _crc_table((uint32_t *)Table_CRC_32bit_ANSI) + _initial_value(initial_xor), _final_xor(final_xor), _reflect_data(reflect_data), _reflect_remainder(reflect_remainder), + _crc_table((uint32_t *)Table_CRC_32bit_ANSI) { mbed_crc_ctor(); } template<> MbedCRC::MbedCRC(uint32_t initial_xor, uint32_t final_xor, bool reflect_data, bool reflect_remainder): - _initial_value(initial_xor), _final_xor(final_xor), _reflect_data(reflect_data), _reflect_remainder(reflect_remainder), - _crc_table((uint32_t *)Table_CRC_8bit_CCITT) + _initial_value(initial_xor), _final_xor(final_xor), _reflect_data(reflect_data), _reflect_remainder(reflect_remainder), + _crc_table((uint32_t *)Table_CRC_8bit_CCITT) { mbed_crc_ctor(); } template<> MbedCRC::MbedCRC(uint32_t initial_xor, uint32_t final_xor, bool reflect_data, bool reflect_remainder): - _initial_value(initial_xor), _final_xor(final_xor), _reflect_data(reflect_data), _reflect_remainder(reflect_remainder), - _crc_table((uint32_t *)Table_CRC_7Bit_SD) + _initial_value(initial_xor), _final_xor(final_xor), _reflect_data(reflect_data), _reflect_remainder(reflect_remainder), + _crc_table((uint32_t *)Table_CRC_7Bit_SD) { mbed_crc_ctor(); } template<> MbedCRC::MbedCRC(uint32_t initial_xor, uint32_t final_xor, bool reflect_data, bool reflect_remainder): - _initial_value(initial_xor), _final_xor(final_xor), _reflect_data(reflect_data), _reflect_remainder(reflect_remainder), - _crc_table((uint32_t *)Table_CRC_16bit_CCITT) + _initial_value(initial_xor), _final_xor(final_xor), _reflect_data(reflect_data), _reflect_remainder(reflect_remainder), + _crc_table((uint32_t *)Table_CRC_16bit_CCITT) { mbed_crc_ctor(); } template<> MbedCRC::MbedCRC(uint32_t initial_xor, uint32_t final_xor, bool reflect_data, bool reflect_remainder): - _initial_value(initial_xor), _final_xor(final_xor), _reflect_data(reflect_data), _reflect_remainder(reflect_remainder), - _crc_table((uint32_t *)Table_CRC_16bit_IBM) + _initial_value(initial_xor), _final_xor(final_xor), _reflect_data(reflect_data), _reflect_remainder(reflect_remainder), + _crc_table((uint32_t *)Table_CRC_16bit_IBM) { mbed_crc_ctor(); } diff --git a/drivers/MbedCRC.h b/drivers/MbedCRC.h index 3c37fba85b5..1221c4fe0bc 100644 --- a/drivers/MbedCRC.h +++ b/drivers/MbedCRC.h @@ -92,9 +92,8 @@ namespace mbed { * @ingroup drivers */ -template -class MbedCRC -{ +template +class MbedCRC { public: enum CrcMode { HARDWARE = 0, TABLE, BITWISE }; @@ -107,7 +106,7 @@ class MbedCRC * @param final_xor Final Xor value * @param reflect_data * @param reflect_remainder -* @note Default constructor without any arguments is valid only for supported CRC polynomials. :: crc_polynomial_t + * @note Default constructor without any arguments is valid only for supported CRC polynomials. :: crc_polynomial_t * MbedCRC ct; --- Valid POLY_7BIT_SD * MbedCRC <0x1021, 16> ct; --- Valid POLY_16BIT_CCITT * MbedCRC ct; --- Invalid, compilation error @@ -117,8 +116,8 @@ class MbedCRC * */ MbedCRC(uint32_t initial_xor, uint32_t final_xor, bool reflect_data, bool reflect_remainder) : - _initial_value(initial_xor), _final_xor(final_xor), _reflect_data(reflect_data), - _reflect_remainder(reflect_remainder), _crc_table(NULL) + _initial_value(initial_xor), _final_xor(final_xor), _reflect_data(reflect_data), + _reflect_remainder(reflect_remainder), _crc_table(NULL) { mbed_crc_ctor(); } @@ -170,8 +169,7 @@ class MbedCRC */ int32_t compute_partial(void *buffer, crc_data_size_t size, uint32_t *crc) { - switch (_mode) - { + switch (_mode) { case HARDWARE: #ifdef DEVICE_CRC hal_crc_compute_partial((uint8_t *)buffer, size); @@ -332,7 +330,7 @@ class MbedCRC */ uint32_t reflect_bytes(uint32_t data) const { - if(_reflect_data) { + if (_reflect_data) { uint32_t reflection = 0x0; for (uint8_t bit = 0; bit < 8; ++bit) { @@ -368,7 +366,7 @@ class MbedCRC data_byte = reflect_bytes(data[byte]); for (uint8_t bit = 8; bit > 0; --bit) { p_crc <<= 1; - if (( data_byte ^ p_crc) & get_top_bit()) { + if ((data_byte ^ p_crc) & get_top_bit()) { p_crc ^= polynomial; } data_byte <<= 1; @@ -392,13 +390,13 @@ class MbedCRC return 0; } - /** CRC computation using ROM tables - * - * @param buffer data buffer - * @param size size of the data - * @param crc CRC value is filled in, but the value is not the final - * @return 0 on success or a negative error code on failure - */ + /** CRC computation using ROM tables + * + * @param buffer data buffer + * @param size size of the data + * @param crc CRC value is filled in, but the value is not the final + * @return 0 on success or a negative error code on failure + */ int32_t table_compute_partial(const void *buffer, crc_data_size_t size, uint32_t *crc) const { MBED_ASSERT(crc != NULL); diff --git a/drivers/PortIn.h b/drivers/PortIn.h index 2796916fe25..62e48e1c19e 100644 --- a/drivers/PortIn.h +++ b/drivers/PortIn.h @@ -60,7 +60,8 @@ class PortIn { * @param port Port to connect to (Port0-Port5) * @param mask A bitmask to identify which bits in the port should be included (0 - ignore) */ - PortIn(PortName port, int mask = 0xFFFFFFFF) { + PortIn(PortName port, int mask = 0xFFFFFFFF) + { core_util_critical_section_enter(); port_init(&_port, port, mask, PIN_INPUT); core_util_critical_section_exit(); @@ -71,7 +72,8 @@ class PortIn { * @returns * An integer with each bit corresponding to associated port pin setting */ - int read() { + int read() + { return port_read(&_port); } @@ -79,7 +81,8 @@ class PortIn { * * @param mode PullUp, PullDown, PullNone, OpenDrain */ - void mode(PinMode mode) { + void mode(PinMode mode) + { core_util_critical_section_enter(); port_mode(&_port, mode); core_util_critical_section_exit(); @@ -87,7 +90,8 @@ class PortIn { /** A shorthand for read() */ - operator int() { + operator int() + { return read(); } diff --git a/drivers/PortInOut.h b/drivers/PortInOut.h index 4eb9ecb7292..00c972c2a0f 100644 --- a/drivers/PortInOut.h +++ b/drivers/PortInOut.h @@ -39,7 +39,8 @@ class PortInOut { * @param port Port to connect to (Port0-Port5) * @param mask A bitmask to identify which bits in the port should be included (0 - ignore) */ - PortInOut(PortName port, int mask = 0xFFFFFFFF) { + PortInOut(PortName port, int mask = 0xFFFFFFFF) + { core_util_critical_section_enter(); port_init(&_port, port, mask, PIN_INPUT); core_util_critical_section_exit(); @@ -49,7 +50,8 @@ class PortInOut { * * @param value An integer specifying a bit to write for every corresponding port pin */ - void write(int value) { + void write(int value) + { port_write(&_port, value); } @@ -58,13 +60,15 @@ class PortInOut { * @returns * An integer with each bit corresponding to associated port pin setting */ - int read() { + int read() + { return port_read(&_port); } /** Set as an output */ - void output() { + void output() + { core_util_critical_section_enter(); port_dir(&_port, PIN_OUTPUT); core_util_critical_section_exit(); @@ -72,7 +76,8 @@ class PortInOut { /** Set as an input */ - void input() { + void input() + { core_util_critical_section_enter(); port_dir(&_port, PIN_INPUT); core_util_critical_section_exit(); @@ -82,7 +87,8 @@ class PortInOut { * * @param mode PullUp, PullDown, PullNone, OpenDrain */ - void mode(PinMode mode) { + void mode(PinMode mode) + { core_util_critical_section_enter(); port_mode(&_port, mode); core_util_critical_section_exit(); @@ -91,7 +97,8 @@ class PortInOut { /** A shorthand for write() * \sa PortInOut::write() */ - PortInOut& operator= (int value) { + PortInOut &operator= (int value) + { write(value); return *this; } @@ -99,7 +106,8 @@ class PortInOut { /** A shorthand for write() * \sa PortInOut::write() */ - PortInOut& operator= (PortInOut& rhs) { + PortInOut &operator= (PortInOut &rhs) + { write(rhs.read()); return *this; } @@ -107,7 +115,8 @@ class PortInOut { /** A shorthand for read() * \sa PortInOut::read() */ - operator int() { + operator int() + { return read(); } diff --git a/drivers/PortOut.h b/drivers/PortOut.h index 9b8a76b60c3..ccdcc25dbf8 100644 --- a/drivers/PortOut.h +++ b/drivers/PortOut.h @@ -59,7 +59,8 @@ class PortOut { * @param port Port to connect to (Port0-Port5) * @param mask A bitmask to identify which bits in the port should be included (0 - ignore) */ - PortOut(PortName port, int mask = 0xFFFFFFFF) { + PortOut(PortName port, int mask = 0xFFFFFFFF) + { core_util_critical_section_enter(); port_init(&_port, port, mask, PIN_OUTPUT); core_util_critical_section_exit(); @@ -69,7 +70,8 @@ class PortOut { * * @param value An integer specifying a bit to write for every corresponding PortOut pin */ - void write(int value) { + void write(int value) + { port_write(&_port, value); } @@ -78,14 +80,16 @@ class PortOut { * @returns * An integer with each bit corresponding to associated PortOut pin setting */ - int read() { + int read() + { return port_read(&_port); } /** A shorthand for write() * \sa PortOut::write() */ - PortOut& operator= (int value) { + PortOut &operator= (int value) + { write(value); return *this; } @@ -93,7 +97,8 @@ class PortOut { /** A shorthand for read() * \sa PortOut::read() */ - PortOut& operator= (PortOut& rhs) { + PortOut &operator= (PortOut &rhs) + { write(rhs.read()); return *this; } @@ -101,7 +106,8 @@ class PortOut { /** A shorthand for read() * \sa PortOut::read() */ - operator int() { + operator int() + { return read(); } diff --git a/drivers/PwmOut.h b/drivers/PwmOut.h index 5f7bb478ae0..04e0a22618d 100644 --- a/drivers/PwmOut.h +++ b/drivers/PwmOut.h @@ -57,13 +57,15 @@ class PwmOut { * * @param pin PwmOut pin to connect to */ - PwmOut(PinName pin) : _deep_sleep_locked(false) { + PwmOut(PinName pin) : _deep_sleep_locked(false) + { core_util_critical_section_enter(); pwmout_init(&_pwm, pin); core_util_critical_section_exit(); } - ~PwmOut() { + ~PwmOut() + { core_util_critical_section_enter(); unlock_deep_sleep(); core_util_critical_section_exit(); @@ -76,7 +78,8 @@ class PwmOut { * 0.0f (representing on 0%) and 1.0f (representing on 100%). * Values outside this range will be saturated to 0.0f or 1.0f. */ - void write(float value) { + void write(float value) + { core_util_critical_section_enter(); lock_deep_sleep(); pwmout_write(&_pwm, value); @@ -93,7 +96,8 @@ class PwmOut { * @note * This value may not match exactly the value set by a previous write(). */ - float read() { + float read() + { core_util_critical_section_enter(); float val = pwmout_read(&_pwm); core_util_critical_section_exit(); @@ -107,7 +111,8 @@ class PwmOut { * The resolution is currently in microseconds; periods smaller than this * will be set to zero. */ - void period(float seconds) { + void period(float seconds) + { core_util_critical_section_enter(); pwmout_period(&_pwm, seconds); core_util_critical_section_exit(); @@ -116,7 +121,8 @@ class PwmOut { /** Set the PWM period, specified in milli-seconds (int), keeping the duty cycle the same. * @param ms Change the period of a PWM signal in milli-seconds without modifying the duty cycle */ - void period_ms(int ms) { + void period_ms(int ms) + { core_util_critical_section_enter(); pwmout_period_ms(&_pwm, ms); core_util_critical_section_exit(); @@ -125,7 +131,8 @@ class PwmOut { /** Set the PWM period, specified in micro-seconds (int), keeping the duty cycle the same. * @param us Change the period of a PWM signal in micro-seconds without modifying the duty cycle */ - void period_us(int us) { + void period_us(int us) + { core_util_critical_section_enter(); pwmout_period_us(&_pwm, us); core_util_critical_section_exit(); @@ -134,7 +141,8 @@ class PwmOut { /** Set the PWM pulsewidth, specified in seconds (float), keeping the period the same. * @param seconds Change the pulse width of a PWM signal specified in seconds (float) */ - void pulsewidth(float seconds) { + void pulsewidth(float seconds) + { core_util_critical_section_enter(); pwmout_pulsewidth(&_pwm, seconds); core_util_critical_section_exit(); @@ -143,16 +151,18 @@ class PwmOut { /** Set the PWM pulsewidth, specified in milli-seconds (int), keeping the period the same. * @param ms Change the pulse width of a PWM signal specified in milli-seconds */ - void pulsewidth_ms(int ms) { + void pulsewidth_ms(int ms) + { core_util_critical_section_enter(); pwmout_pulsewidth_ms(&_pwm, ms); core_util_critical_section_exit(); } /** Set the PWM pulsewidth, specified in micro-seconds (int), keeping the period the same. - * @param us Change the pulse width of a PWM signal specified in micro-seconds + * @param us Change the pulse width of a PWM signal specified in micro-seconds */ - void pulsewidth_us(int us) { + void pulsewidth_us(int us) + { core_util_critical_section_enter(); pwmout_pulsewidth_us(&_pwm, us); core_util_critical_section_exit(); @@ -161,7 +171,8 @@ class PwmOut { /** A operator shorthand for write() * \sa PwmOut::write() */ - PwmOut& operator= (float value) { + PwmOut &operator= (float value) + { // Underlying call is thread safe write(value); return *this; @@ -169,8 +180,9 @@ class PwmOut { /** A operator shorthand for write() * \sa PwmOut::write() - */ - PwmOut& operator= (PwmOut& rhs) { + */ + PwmOut &operator= (PwmOut &rhs) + { // Underlying call is thread safe write(rhs.read()); return *this; @@ -179,14 +191,16 @@ class PwmOut { /** An operator shorthand for read() * \sa PwmOut::read() */ - operator float() { + operator float() + { // Underlying call is thread safe return read(); } protected: /** Lock deep sleep only if it is not yet locked */ - void lock_deep_sleep() { + void lock_deep_sleep() + { if (_deep_sleep_locked == false) { sleep_manager_lock_deep_sleep(); _deep_sleep_locked = true; @@ -194,7 +208,8 @@ class PwmOut { } /** Unlock deep sleep in case it is locked */ - void unlock_deep_sleep() { + void unlock_deep_sleep() + { if (_deep_sleep_locked == true) { sleep_manager_unlock_deep_sleep(); _deep_sleep_locked = false; diff --git a/drivers/RawSerial.cpp b/drivers/RawSerial.cpp index 639586892ac..2943bd95206 100644 --- a/drivers/RawSerial.cpp +++ b/drivers/RawSerial.cpp @@ -25,28 +25,33 @@ namespace mbed { -RawSerial::RawSerial(PinName tx, PinName rx, int baud) : SerialBase(tx, rx, baud) { +RawSerial::RawSerial(PinName tx, PinName rx, int baud) : SerialBase(tx, rx, baud) +{ // No lock needed in the constructor } -int RawSerial::getc() { +int RawSerial::getc() +{ lock(); int ret = _base_getc(); unlock(); return ret; } -int RawSerial::putc(int c) { +int RawSerial::putc(int c) +{ lock(); int ret = _base_putc(c); unlock(); return ret; } -int RawSerial::puts(const char *str) { +int RawSerial::puts(const char *str) +{ lock(); - while (*str) + while (*str) { putc(*str ++); + } unlock(); return 0; } @@ -55,7 +60,8 @@ int RawSerial::puts(const char *str) { // means we can't call printf() directly, so we use sprintf() instead. // We only call malloc() for the sprintf() buffer if the buffer // length is above a certain threshold, otherwise we use just the stack. -int RawSerial::printf(const char *format, ...) { +int RawSerial::printf(const char *format, ...) +{ lock(); std::va_list arg; va_start(arg, format); @@ -80,13 +86,15 @@ int RawSerial::printf(const char *format, ...) { /** Acquire exclusive access to this serial port */ -void RawSerial::lock() { +void RawSerial::lock() +{ // No lock used - external synchronization required } /** Release exclusive access to this serial port */ -void RawSerial::unlock() { +void RawSerial::unlock() +{ // No lock used - external synchronization required } diff --git a/drivers/SPI.cpp b/drivers/SPI.cpp index cdc11702289..fc52be754d7 100644 --- a/drivers/SPI.cpp +++ b/drivers/SPI.cpp @@ -29,23 +29,25 @@ CircularBuffer, TRANSACTION_QUEUE_SIZE_SPI> SPI::_transaction_b #endif SPI::SPI(PinName mosi, PinName miso, PinName sclk, PinName ssel) : - _spi(), + _spi(), #if DEVICE_SPI_ASYNCH - _irq(this), - _usage(DMA_USAGE_NEVER), - _deep_sleep_locked(false), + _irq(this), + _usage(DMA_USAGE_NEVER), + _deep_sleep_locked(false), #endif - _bits(8), - _mode(0), - _hz(1000000), - _write_fill(SPI_FILL_CHAR) { + _bits(8), + _mode(0), + _hz(1000000), + _write_fill(SPI_FILL_CHAR) +{ // No lock needed in the constructor spi_init(&_spi, mosi, miso, sclk, ssel); _acquire(); } -void SPI::format(int bits, int mode) { +void SPI::format(int bits, int mode) +{ lock(); _bits = bits; _mode = mode; @@ -60,7 +62,8 @@ void SPI::format(int bits, int mode) { unlock(); } -void SPI::frequency(int hz) { +void SPI::frequency(int hz) +{ lock(); _hz = hz; // If changing format while you are the owner then just @@ -74,13 +77,14 @@ void SPI::frequency(int hz) { unlock(); } -SPI* SPI::_owner = NULL; +SPI *SPI::_owner = NULL; SingletonPtr SPI::_mutex; // ignore the fact there are multiple physical spis, and always update if it wasn't us last -void SPI::aquire() { +void SPI::aquire() +{ lock(); - if (_owner != this) { + if (_owner != this) { spi_format(&_spi, _bits, _mode, 0); spi_frequency(&_spi, _hz); _owner = this; @@ -89,15 +93,17 @@ void SPI::aquire() { } // Note: Private function with no locking -void SPI::_acquire() { - if (_owner != this) { +void SPI::_acquire() +{ + if (_owner != this) { spi_format(&_spi, _bits, _mode, 0); spi_frequency(&_spi, _hz); _owner = this; } } -int SPI::write(int value) { +int SPI::write(int value) +{ lock(); _acquire(); int ret = spi_master_write(&_spi, value); @@ -105,7 +111,8 @@ int SPI::write(int value) { return ret; } -int SPI::write(const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { +int SPI::write(const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) +{ lock(); _acquire(); int ret = spi_master_block_write(&_spi, tx_buffer, tx_length, rx_buffer, rx_length, _write_fill); @@ -113,15 +120,18 @@ int SPI::write(const char *tx_buffer, int tx_length, char *rx_buffer, int rx_len return ret; } -void SPI::lock() { +void SPI::lock() +{ _mutex->lock(); } -void SPI::unlock() { +void SPI::unlock() +{ _mutex->unlock(); } -void SPI::set_default_write_value(char data) { +void SPI::set_default_write_value(char data) +{ lock(); _write_fill = data; unlock(); @@ -129,7 +139,7 @@ void SPI::set_default_write_value(char data) { #if DEVICE_SPI_ASYNCH -int SPI::transfer(const void *tx_buffer, int tx_length, void *rx_buffer, int rx_length, unsigned char bit_width, const event_callback_t& callback, int event) +int SPI::transfer(const void *tx_buffer, int tx_length, void *rx_buffer, int rx_length, unsigned char bit_width, const event_callback_t &callback, int event) { if (spi_active(&_spi)) { return queue_transfer(tx_buffer, tx_length, rx_buffer, rx_length, bit_width, callback, event); @@ -170,7 +180,7 @@ int SPI::set_dma_usage(DMAUsage usage) return 0; } -int SPI::queue_transfer(const void *tx_buffer, int tx_length, void *rx_buffer, int rx_length, unsigned char bit_width, const event_callback_t& callback, int event) +int SPI::queue_transfer(const void *tx_buffer, int tx_length, void *rx_buffer, int rx_length, unsigned char bit_width, const event_callback_t &callback, int event) { #if TRANSACTION_QUEUE_SIZE_SPI transaction_t t; @@ -199,13 +209,13 @@ int SPI::queue_transfer(const void *tx_buffer, int tx_length, void *rx_buffer, i #endif } -void SPI::start_transfer(const void *tx_buffer, int tx_length, void *rx_buffer, int rx_length, unsigned char bit_width, const event_callback_t& callback, int event) +void SPI::start_transfer(const void *tx_buffer, int tx_length, void *rx_buffer, int rx_length, unsigned char bit_width, const event_callback_t &callback, int event) { lock_deep_sleep(); _acquire(); _callback = callback; _irq.callback(&SPI::irq_handler_asynch); - spi_master_transfer(&_spi, tx_buffer, tx_length, rx_buffer, rx_length, bit_width, _irq.entry(), event , _usage); + spi_master_transfer(&_spi, tx_buffer, tx_length, rx_buffer, rx_length, bit_width, _irq.entry(), event, _usage); } void SPI::lock_deep_sleep() @@ -235,8 +245,8 @@ void SPI::dequeue_transaction() { Transaction t; if (_transaction_buffer.pop(t)) { - SPI* obj = t.get_object(); - transaction_t* data = t.get_transaction(); + SPI *obj = t.get_object(); + transaction_t *data = t.get_transaction(); obj->start_transaction(data); } } diff --git a/drivers/SPI.h b/drivers/SPI.h index 144191902cb..8d24dcc9662 100644 --- a/drivers/SPI.h +++ b/drivers/SPI.h @@ -86,7 +86,7 @@ class SPI : private NonCopyable { * @param sclk SPI Clock pin * @param ssel SPI chip select pin */ - SPI(PinName mosi, PinName miso, PinName sclk, PinName ssel=NC); + SPI(PinName mosi, PinName miso, PinName sclk, PinName ssel = NC); /** Configure the data transmission format * @@ -157,7 +157,7 @@ class SPI : private NonCopyable { /** Start non-blocking SPI transfer using 8bit buffers. * * This function locks the deep sleep until any event has occurred - * + * * @param tx_buffer The TX buffer with data to be transfered. If NULL is passed, * the default SPI value is sent * @param tx_length The length of TX buffer in bytes @@ -169,11 +169,12 @@ class SPI : private NonCopyable { * @return Zero if the transfer has started, or -1 if SPI peripheral is busy */ template - int transfer(const Type *tx_buffer, int tx_length, Type *rx_buffer, int rx_length, const event_callback_t& callback, int event = SPI_EVENT_COMPLETE) { + int transfer(const Type *tx_buffer, int tx_length, Type *rx_buffer, int rx_length, const event_callback_t &callback, int event = SPI_EVENT_COMPLETE) + { if (spi_active(&_spi)) { - return queue_transfer(tx_buffer, tx_length, rx_buffer, rx_length, sizeof(Type)*8, callback, event); + return queue_transfer(tx_buffer, tx_length, rx_buffer, rx_length, sizeof(Type) * 8, callback, event); } - start_transfer(tx_buffer, tx_length, rx_buffer, rx_length, sizeof(Type)*8, callback, event); + start_transfer(tx_buffer, tx_length, rx_buffer, rx_length, sizeof(Type) * 8, callback, event); return 0; } @@ -215,7 +216,7 @@ class SPI : private NonCopyable { * @param event The logical OR of events to modify * @return Zero if the transfer has started or was added to the queue, or -1 if SPI peripheral is busy/buffer is full */ - int transfer(const void *tx_buffer, int tx_length, void *rx_buffer, int rx_length, unsigned char bit_width, const event_callback_t& callback, int event); + int transfer(const void *tx_buffer, int tx_length, void *rx_buffer, int rx_length, unsigned char bit_width, const event_callback_t &callback, int event); /** * @@ -230,7 +231,7 @@ class SPI : private NonCopyable { * @param event The logical OR of events to modify * @return Zero if a transfer was added to the queue, or -1 if the queue is full */ - int queue_transfer(const void *tx_buffer, int tx_length, void *rx_buffer, int rx_length, unsigned char bit_width, const event_callback_t& callback, int event); + int queue_transfer(const void *tx_buffer, int tx_length, void *rx_buffer, int rx_length, unsigned char bit_width, const event_callback_t &callback, int event); /** Configures a callback, spi peripheral and initiate a new transfer * @@ -244,7 +245,7 @@ class SPI : private NonCopyable { * @param callback The event callback function * @param event The logical OR of events to modify */ - void start_transfer(const void *tx_buffer, int tx_length, void *rx_buffer, int rx_length, unsigned char bit_width, const event_callback_t& callback, int event); + void start_transfer(const void *tx_buffer, int tx_length, void *rx_buffer, int rx_length, unsigned char bit_width, const event_callback_t &callback, int event); private: /** Lock deep sleep only if it is not yet locked */ @@ -272,7 +273,8 @@ class SPI : private NonCopyable { #endif public: - virtual ~SPI() { + virtual ~SPI() + { } protected: diff --git a/drivers/SPISlave.cpp b/drivers/SPISlave.cpp index 8ae263e5d86..1f826bb3433 100644 --- a/drivers/SPISlave.cpp +++ b/drivers/SPISlave.cpp @@ -24,32 +24,37 @@ SPISlave::SPISlave(PinName mosi, PinName miso, PinName sclk, PinName ssel) : _bits(8), _mode(0), _hz(1000000) - { +{ spi_init(&_spi, mosi, miso, sclk, ssel); spi_format(&_spi, _bits, _mode, 1); spi_frequency(&_spi, _hz); } -void SPISlave::format(int bits, int mode) { +void SPISlave::format(int bits, int mode) +{ _bits = bits; _mode = mode; spi_format(&_spi, _bits, _mode, 1); } -void SPISlave::frequency(int hz) { +void SPISlave::frequency(int hz) +{ _hz = hz; spi_frequency(&_spi, _hz); } -int SPISlave::receive(void) { - return(spi_slave_receive(&_spi)); +int SPISlave::receive(void) +{ + return (spi_slave_receive(&_spi)); } -int SPISlave::read(void) { - return(spi_slave_read(&_spi)); +int SPISlave::read(void) +{ + return (spi_slave_read(&_spi)); } -void SPISlave::reply(int value) { +void SPISlave::reply(int value) +{ spi_slave_write(&_spi, value); } diff --git a/drivers/Serial.cpp b/drivers/Serial.cpp index 8e3ce518a53..55e5a38bba5 100644 --- a/drivers/Serial.cpp +++ b/drivers/Serial.cpp @@ -20,27 +20,33 @@ namespace mbed { -Serial::Serial(PinName tx, PinName rx, const char *name, int baud) : SerialBase(tx, rx, baud), Stream(name) { +Serial::Serial(PinName tx, PinName rx, const char *name, int baud) : SerialBase(tx, rx, baud), Stream(name) +{ } -Serial::Serial(PinName tx, PinName rx, int baud): SerialBase(tx, rx, baud), Stream(NULL) { +Serial::Serial(PinName tx, PinName rx, int baud): SerialBase(tx, rx, baud), Stream(NULL) +{ } -int Serial::_getc() { +int Serial::_getc() +{ // Mutex is already held return _base_getc(); } -int Serial::_putc(int c) { +int Serial::_putc(int c) +{ // Mutex is already held return _base_putc(c); } -void Serial::lock() { +void Serial::lock() +{ _mutex.lock(); } -void Serial::unlock() { +void Serial::unlock() +{ _mutex.unlock(); } diff --git a/drivers/Serial.h b/drivers/Serial.h index 549943a47c0..11e237bffa4 100644 --- a/drivers/Serial.h +++ b/drivers/Serial.h @@ -68,7 +68,7 @@ class Serial : public SerialBase, public Stream, private NonCopyable { * @note * Either tx or rx may be specified as NC if unused */ - Serial(PinName tx, PinName rx, const char *name=NULL, int baud = MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE); + Serial(PinName tx, PinName rx, const char *name = NULL, int baud = MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE); /** Create a Serial port, connected to the specified transmit and receive pins, with the specified baud diff --git a/drivers/SerialBase.cpp b/drivers/SerialBase.cpp index ba5f9db3f25..b3f2399ac3e 100644 --- a/drivers/SerialBase.cpp +++ b/drivers/SerialBase.cpp @@ -24,11 +24,12 @@ namespace mbed { SerialBase::SerialBase(PinName tx, PinName rx, int baud) : #if DEVICE_SERIAL_ASYNCH - _thunk_irq(this), _tx_usage(DMA_USAGE_NEVER), - _rx_usage(DMA_USAGE_NEVER), _tx_callback(NULL), - _rx_callback(NULL), + _thunk_irq(this), _tx_usage(DMA_USAGE_NEVER), + _rx_usage(DMA_USAGE_NEVER), _tx_callback(NULL), + _rx_callback(NULL), #endif - _serial(), _baud(baud) { + _serial(), _baud(baud) +{ // No lock needed in the constructor for (size_t i = 0; i < sizeof _irq / sizeof _irq[0]; i++) { @@ -40,20 +41,23 @@ SerialBase::SerialBase(PinName tx, PinName rx, int baud) : serial_irq_handler(&_serial, SerialBase::_irq_handler, (uint32_t)this); } -void SerialBase::baud(int baudrate) { +void SerialBase::baud(int baudrate) +{ lock(); serial_baud(&_serial, baudrate); _baud = baudrate; unlock(); } -void SerialBase::format(int bits, Parity parity, int stop_bits) { +void SerialBase::format(int bits, Parity parity, int stop_bits) +{ lock(); serial_format(&_serial, bits, (SerialParity)parity, stop_bits); unlock(); } -int SerialBase::readable() { +int SerialBase::readable() +{ lock(); int ret = serial_readable(&_serial); unlock(); @@ -61,14 +65,16 @@ int SerialBase::readable() { } -int SerialBase::writeable() { +int SerialBase::writeable() +{ lock(); int ret = serial_writable(&_serial); unlock(); return ret; } -void SerialBase::attach(Callback func, IrqType type) { +void SerialBase::attach(Callback func, IrqType type) +{ lock(); // Disable interrupts when attaching interrupt handler core_util_critical_section_enter(); @@ -76,14 +82,14 @@ void SerialBase::attach(Callback func, IrqType type) { // lock deep sleep only the first time if (!_irq[type]) { sleep_manager_lock_deep_sleep(); - } + } _irq[type] = func; serial_irq_set(&_serial, (SerialIrq)type, 1); } else { // unlock deep sleep only the first time if (_irq[type]) { sleep_manager_unlock_deep_sleep(); - } + } _irq[type] = NULL; serial_irq_set(&_serial, (SerialIrq)type, 0); } @@ -91,45 +97,51 @@ void SerialBase::attach(Callback func, IrqType type) { unlock(); } -void SerialBase::_irq_handler(uint32_t id, SerialIrq irq_type) { - SerialBase *handler = (SerialBase*)id; +void SerialBase::_irq_handler(uint32_t id, SerialIrq irq_type) +{ + SerialBase *handler = (SerialBase *)id; if (handler->_irq[irq_type]) { handler->_irq[irq_type](); } } -int SerialBase::_base_getc() { +int SerialBase::_base_getc() +{ // Mutex is already held return serial_getc(&_serial); } -int SerialBase::_base_putc(int c) { +int SerialBase::_base_putc(int c) +{ // Mutex is already held serial_putc(&_serial, c); return c; } -void SerialBase::send_break() { +void SerialBase::send_break() +{ lock(); - // Wait for 1.5 frames before clearing the break condition - // This will have different effects on our platforms, but should - // ensure that we keep the break active for at least one frame. - // We consider a full frame (1 start bit + 8 data bits bits + - // 1 parity bit + 2 stop bits = 12 bits) for computation. - // One bit time (in us) = 1000000/_baud - // Twelve bits: 12000000/baud delay - // 1.5 frames: 18000000/baud delay - serial_break_set(&_serial); - wait_us(18000000/_baud); - serial_break_clear(&_serial); - unlock(); + // Wait for 1.5 frames before clearing the break condition + // This will have different effects on our platforms, but should + // ensure that we keep the break active for at least one frame. + // We consider a full frame (1 start bit + 8 data bits bits + + // 1 parity bit + 2 stop bits = 12 bits) for computation. + // One bit time (in us) = 1000000/_baud + // Twelve bits: 12000000/baud delay + // 1.5 frames: 18000000/baud delay + serial_break_set(&_serial); + wait_us(18000000 / _baud); + serial_break_clear(&_serial); + unlock(); } -void SerialBase::lock() { +void SerialBase::lock() +{ // Stub } -void SerialBase:: unlock() { +void SerialBase:: unlock() +{ // Stub } @@ -144,10 +156,11 @@ SerialBase::~SerialBase() } #if DEVICE_SERIAL_FC -void SerialBase::set_flow_control(Flow type, PinName flow1, PinName flow2) { +void SerialBase::set_flow_control(Flow type, PinName flow1, PinName flow2) +{ lock(); FlowControl flow_type = (FlowControl)type; - switch(type) { + switch (type) { case RTS: serial_set_flow_control(&_serial, flow_type, flow1, NC); break; @@ -170,7 +183,7 @@ void SerialBase::set_flow_control(Flow type, PinName flow1, PinName flow2) { #if DEVICE_SERIAL_ASYNCH -int SerialBase::write(const uint8_t *buffer, int length, const event_callback_t& callback, int event) +int SerialBase::write(const uint8_t *buffer, int length, const event_callback_t &callback, int event) { if (serial_tx_active(&_serial)) { return -1; // transaction ongoing @@ -179,7 +192,7 @@ int SerialBase::write(const uint8_t *buffer, int length, const event_callback_t& return 0; } -int SerialBase::write(const uint16_t *buffer, int length, const event_callback_t& callback, int event) +int SerialBase::write(const uint16_t *buffer, int length, const event_callback_t &callback, int event) { if (serial_tx_active(&_serial)) { return -1; // transaction ongoing @@ -188,7 +201,7 @@ int SerialBase::write(const uint16_t *buffer, int length, const event_callback_t return 0; } -void SerialBase::start_write(const void *buffer, int buffer_size, char buffer_width, const event_callback_t& callback, int event) +void SerialBase::start_write(const void *buffer, int buffer_size, char buffer_width, const event_callback_t &callback, int event) { _tx_callback = callback; @@ -235,27 +248,27 @@ int SerialBase::set_dma_usage_rx(DMAUsage usage) return 0; } -int SerialBase::read(uint8_t *buffer, int length, const event_callback_t& callback, int event, unsigned char char_match) +int SerialBase::read(uint8_t *buffer, int length, const event_callback_t &callback, int event, unsigned char char_match) { if (serial_rx_active(&_serial)) { return -1; // transaction ongoing } - start_read((void*)buffer, length, 8, callback, event, char_match); + start_read((void *)buffer, length, 8, callback, event, char_match); return 0; } -int SerialBase::read(uint16_t *buffer, int length, const event_callback_t& callback, int event, unsigned char char_match) +int SerialBase::read(uint16_t *buffer, int length, const event_callback_t &callback, int event, unsigned char char_match) { if (serial_rx_active(&_serial)) { return -1; // transaction ongoing } - start_read((void*)buffer, length, 16, callback, event, char_match); + start_read((void *)buffer, length, 16, callback, event, char_match); return 0; } -void SerialBase::start_read(void *buffer, int buffer_size, char buffer_width, const event_callback_t& callback, int event, unsigned char char_match) +void SerialBase::start_read(void *buffer, int buffer_size, char buffer_width, const event_callback_t &callback, int event, unsigned char char_match) { _rx_callback = callback; _thunk_irq.callback(&SerialBase::interrupt_handler_asynch); diff --git a/drivers/SerialBase.h b/drivers/SerialBase.h index 970cf4d19ce..9fe5ddef25a 100644 --- a/drivers/SerialBase.h +++ b/drivers/SerialBase.h @@ -76,7 +76,7 @@ class SerialBase : private NonCopyable { * @param parity The parity used (SerialBase::None, SerialBase::Odd, SerialBase::Even, SerialBase::Forced1, SerialBase::Forced0; default = SerialBase::None) * @param stop_bits The number of stop bits (1 or 2; default = 1) */ - void format(int bits=8, Parity parity=SerialBase::None, int stop_bits=1); + void format(int bits = 8, Parity parity = SerialBase::None, int stop_bits = 1); /** Determine if there is a character available to read * @@ -99,7 +99,7 @@ class SerialBase : private NonCopyable { * @param func A pointer to a void function, or 0 to set as none * @param type Which serial interrupt to attach the member function to (Seriall::RxIrq for receive, TxIrq for transmit buffer empty) */ - void attach(Callback func, IrqType type=RxIrq); + void attach(Callback func, IrqType type = RxIrq); /** Attach a member function to call whenever a serial interrupt is generated * @@ -112,9 +112,10 @@ class SerialBase : private NonCopyable { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "The attach function does not support cv-qualifiers. Replaced by " - "attach(callback(obj, method), type).") - void attach(T *obj, void (T::*method)(), IrqType type=RxIrq) { + "The attach function does not support cv-qualifiers. Replaced by " + "attach(callback(obj, method), type).") + void attach(T *obj, void (T::*method)(), IrqType type = RxIrq) + { attach(callback(obj, method), type); } @@ -129,9 +130,10 @@ class SerialBase : private NonCopyable { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "The attach function does not support cv-qualifiers. Replaced by " - "attach(callback(obj, method), type).") - void attach(T *obj, void (*method)(T*), IrqType type=RxIrq) { + "The attach function does not support cv-qualifiers. Replaced by " + "attach(callback(obj, method), type).") + void attach(T *obj, void (*method)(T *), IrqType type = RxIrq) + { attach(callback(obj, method), type); } @@ -158,7 +160,7 @@ class SerialBase : private NonCopyable { * @param flow1 the first flow control pin (RTS for RTS or RTSCTS, CTS for CTS) * @param flow2 the second flow control pin (CTS for RTSCTS) */ - void set_flow_control(Flow type, PinName flow1=NC, PinName flow2=NC); + void set_flow_control(Flow type, PinName flow1 = NC, PinName flow2 = NC); #endif static void _irq_handler(uint32_t id, SerialIrq irq_type); @@ -168,24 +170,24 @@ class SerialBase : private NonCopyable { /** Begin asynchronous write using 8bit buffer. The completition invokes registered TX event callback * * This function locks the deep sleep until any event has occurred - * + * * @param buffer The buffer where received data will be stored * @param length The buffer length in bytes * @param callback The event callback function * @param event The logical OR of TX events */ - int write(const uint8_t *buffer, int length, const event_callback_t& callback, int event = SERIAL_EVENT_TX_COMPLETE); + int write(const uint8_t *buffer, int length, const event_callback_t &callback, int event = SERIAL_EVENT_TX_COMPLETE); /** Begin asynchronous write using 16bit buffer. The completition invokes registered TX event callback * * This function locks the deep sleep until any event has occurred - * + * * @param buffer The buffer where received data will be stored * @param length The buffer length in bytes * @param callback The event callback function * @param event The logical OR of TX events */ - int write(const uint16_t *buffer, int length, const event_callback_t& callback, int event = SERIAL_EVENT_TX_COMPLETE); + int write(const uint16_t *buffer, int length, const event_callback_t &callback, int event = SERIAL_EVENT_TX_COMPLETE); /** Abort the on-going write transfer */ @@ -194,26 +196,26 @@ class SerialBase : private NonCopyable { /** Begin asynchronous reading using 8bit buffer. The completition invokes registred RX event callback. * * This function locks the deep sleep until any event has occurred - * + * * @param buffer The buffer where received data will be stored * @param length The buffer length in bytes * @param callback The event callback function * @param event The logical OR of RX events * @param char_match The matching character */ - int read(uint8_t *buffer, int length, const event_callback_t& callback, int event = SERIAL_EVENT_RX_COMPLETE, unsigned char char_match = SERIAL_RESERVED_CHAR_MATCH); + int read(uint8_t *buffer, int length, const event_callback_t &callback, int event = SERIAL_EVENT_RX_COMPLETE, unsigned char char_match = SERIAL_RESERVED_CHAR_MATCH); /** Begin asynchronous reading using 16bit buffer. The completition invokes registred RX event callback. * * This function locks the deep sleep until any event has occurred - * + * * @param buffer The buffer where received data will be stored * @param length The buffer length in bytes * @param callback The event callback function * @param event The logical OR of RX events * @param char_match The matching character */ - int read(uint16_t *buffer, int length, const event_callback_t& callback, int event = SERIAL_EVENT_RX_COMPLETE, unsigned char char_match = SERIAL_RESERVED_CHAR_MATCH); + int read(uint16_t *buffer, int length, const event_callback_t &callback, int event = SERIAL_EVENT_RX_COMPLETE, unsigned char char_match = SERIAL_RESERVED_CHAR_MATCH); /** Abort the on-going read transfer */ @@ -234,8 +236,8 @@ class SerialBase : private NonCopyable { int set_dma_usage_rx(DMAUsage usage); protected: - void start_read(void *buffer, int buffer_size, char buffer_width, const event_callback_t& callback, int event, unsigned char char_match); - void start_write(const void *buffer, int buffer_size, char buffer_width, const event_callback_t& callback, int event); + void start_read(void *buffer, int buffer_size, char buffer_width, const event_callback_t &callback, int event, unsigned char char_match); + void start_write(const void *buffer, int buffer_size, char buffer_width, const event_callback_t &callback, int event); void interrupt_handler_asynch(void); #endif diff --git a/drivers/SerialWireOutput.h b/drivers/SerialWireOutput.h index 39f0c390894..154197cf378 100644 --- a/drivers/SerialWireOutput.h +++ b/drivers/SerialWireOutput.h @@ -20,7 +20,7 @@ #include "platform/FileHandle.h" namespace mbed { - + class SerialWireOutput : public FileHandle { public: @@ -71,7 +71,7 @@ class SerialWireOutput : public FileHandle { return 0; } }; - + } // namespace mbed #endif diff --git a/drivers/Ticker.cpp b/drivers/Ticker.cpp index c2589c0d808..efa3efb9c00 100644 --- a/drivers/Ticker.cpp +++ b/drivers/Ticker.cpp @@ -22,11 +22,12 @@ namespace mbed { -void Ticker::detach() { +void Ticker::detach() +{ core_util_critical_section_enter(); remove(); // unlocked only if we were attached (we locked it) and this is not low power ticker - if(_function && _lock_deepsleep) { + if (_function && _lock_deepsleep) { sleep_manager_unlock_deep_sleep(); } @@ -34,7 +35,8 @@ void Ticker::detach() { core_util_critical_section_exit(); } -void Ticker::setup(us_timestamp_t t) { +void Ticker::setup(us_timestamp_t t) +{ core_util_critical_section_enter(); remove(); _delay = t; @@ -42,7 +44,8 @@ void Ticker::setup(us_timestamp_t t) { core_util_critical_section_exit(); } -void Ticker::handler() { +void Ticker::handler() +{ insert_absolute(event.timestamp + _delay); if (_function) { _function(); diff --git a/drivers/Ticker.h b/drivers/Ticker.h index 59a24dff436..e8bca7cbe97 100644 --- a/drivers/Ticker.h +++ b/drivers/Ticker.h @@ -66,11 +66,13 @@ namespace mbed { class Ticker : public TimerEvent, private NonCopyable { public: - Ticker() : TimerEvent(), _function(0), _lock_deepsleep(true) { + Ticker() : TimerEvent(), _function(0), _lock_deepsleep(true) + { } // When low power ticker is in use, then do not disable deep-sleep. - Ticker(const ticker_data_t *data) : TimerEvent(data), _function(0), _lock_deepsleep(true) { + Ticker(const ticker_data_t *data) : TimerEvent(data), _function(0), _lock_deepsleep(true) + { #if DEVICE_LPTICKER _lock_deepsleep = (data != get_lp_ticker_data()); #endif @@ -81,7 +83,8 @@ class Ticker : public TimerEvent, private NonCopyable { * @param func pointer to the function to be called * @param t the time between calls in seconds */ - void attach(Callback func, float t) { + void attach(Callback func, float t) + { attach_us(func, t * 1000000.0f); } @@ -96,9 +99,10 @@ class Ticker : public TimerEvent, private NonCopyable { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "The attach function does not support cv-qualifiers. Replaced by " - "attach(callback(obj, method), t).") - void attach(T *obj, M method, float t) { + "The attach function does not support cv-qualifiers. Replaced by " + "attach(callback(obj, method), t).") + void attach(T *obj, M method, float t) + { attach(callback(obj, method), t); } @@ -112,10 +116,11 @@ class Ticker : public TimerEvent, private NonCopyable { * for threads scheduling. * */ - void attach_us(Callback func, us_timestamp_t t) { + void attach_us(Callback func, us_timestamp_t t) + { core_util_critical_section_enter(); // lock only for the initial callback setup and this is not low power ticker - if(!_function && _lock_deepsleep) { + if (!_function && _lock_deepsleep) { sleep_manager_lock_deep_sleep(); } _function = func; @@ -134,13 +139,15 @@ class Ticker : public TimerEvent, private NonCopyable { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "The attach_us function does not support cv-qualifiers. Replaced by " - "attach_us(callback(obj, method), t).") - void attach_us(T *obj, M method, us_timestamp_t t) { + "The attach_us function does not support cv-qualifiers. Replaced by " + "attach_us(callback(obj, method), t).") + void attach_us(T *obj, M method, us_timestamp_t t) + { attach_us(Callback(obj, method), t); } - virtual ~Ticker() { + virtual ~Ticker() + { detach(); } diff --git a/drivers/Timeout.cpp b/drivers/Timeout.cpp index 6fc4a7e69bf..159cc0d4b43 100644 --- a/drivers/Timeout.cpp +++ b/drivers/Timeout.cpp @@ -17,7 +17,8 @@ namespace mbed { -void Timeout::handler() { +void Timeout::handler() +{ Callback local = _function; detach(); local.call(); diff --git a/drivers/Timer.cpp b/drivers/Timer.cpp index b8af5dc3d8d..ccf75f60897 100644 --- a/drivers/Timer.cpp +++ b/drivers/Timer.cpp @@ -21,21 +21,24 @@ namespace mbed { -Timer::Timer() : _running(), _start(), _time(), _ticker_data(get_us_ticker_data()), _lock_deepsleep(true) { +Timer::Timer() : _running(), _start(), _time(), _ticker_data(get_us_ticker_data()), _lock_deepsleep(true) +{ reset(); } -Timer::Timer(const ticker_data_t *data) : _running(), _start(), _time(), _ticker_data(data), _lock_deepsleep(true) { +Timer::Timer(const ticker_data_t *data) : _running(), _start(), _time(), _ticker_data(data), _lock_deepsleep(true) +{ reset(); #if DEVICE_LPTICKER _lock_deepsleep = (data != get_lp_ticker_data()); #endif } -Timer::~Timer() { +Timer::~Timer() +{ core_util_critical_section_enter(); if (_running) { - if(_lock_deepsleep) { + if (_lock_deepsleep) { sleep_manager_unlock_deep_sleep(); } } @@ -43,10 +46,11 @@ Timer::~Timer() { core_util_critical_section_exit(); } -void Timer::start() { +void Timer::start() +{ core_util_critical_section_enter(); if (!_running) { - if(_lock_deepsleep) { + if (_lock_deepsleep) { sleep_manager_lock_deep_sleep(); } _start = ticker_read_us(_ticker_data); @@ -55,11 +59,12 @@ void Timer::start() { core_util_critical_section_exit(); } -void Timer::stop() { +void Timer::stop() +{ core_util_critical_section_enter(); _time += slicetime(); if (_running) { - if(_lock_deepsleep) { + if (_lock_deepsleep) { sleep_manager_unlock_deep_sleep(); } } @@ -67,26 +72,31 @@ void Timer::stop() { core_util_critical_section_exit(); } -int Timer::read_us() { +int Timer::read_us() +{ return read_high_resolution_us(); } -float Timer::read() { +float Timer::read() +{ return (float)read_us() / 1000000.0f; } -int Timer::read_ms() { +int Timer::read_ms() +{ return read_high_resolution_us() / 1000; } -us_timestamp_t Timer::read_high_resolution_us() { +us_timestamp_t Timer::read_high_resolution_us() +{ core_util_critical_section_enter(); us_timestamp_t time = _time + slicetime(); core_util_critical_section_exit(); return time; } -us_timestamp_t Timer::slicetime() { +us_timestamp_t Timer::slicetime() +{ us_timestamp_t ret = 0; core_util_critical_section_enter(); if (_running) { @@ -96,14 +106,16 @@ us_timestamp_t Timer::slicetime() { return ret; } -void Timer::reset() { +void Timer::reset() +{ core_util_critical_section_enter(); _start = ticker_read_us(_ticker_data); _time = 0; core_util_critical_section_exit(); } -Timer::operator float() { +Timer::operator float() +{ return read(); } diff --git a/drivers/TimerEvent.cpp b/drivers/TimerEvent.cpp index d7a7c1c2a44..ddf495f681a 100644 --- a/drivers/TimerEvent.cpp +++ b/drivers/TimerEvent.cpp @@ -22,33 +22,40 @@ namespace mbed { -TimerEvent::TimerEvent() : event(), _ticker_data(get_us_ticker_data()) { +TimerEvent::TimerEvent() : event(), _ticker_data(get_us_ticker_data()) +{ ticker_set_handler(_ticker_data, (&TimerEvent::irq)); } -TimerEvent::TimerEvent(const ticker_data_t *data) : event(), _ticker_data(data) { +TimerEvent::TimerEvent(const ticker_data_t *data) : event(), _ticker_data(data) +{ ticker_set_handler(_ticker_data, (&TimerEvent::irq)); } -void TimerEvent::irq(uint32_t id) { - TimerEvent *timer_event = (TimerEvent*)id; +void TimerEvent::irq(uint32_t id) +{ + TimerEvent *timer_event = (TimerEvent *)id; timer_event->handler(); } -TimerEvent::~TimerEvent() { +TimerEvent::~TimerEvent() +{ remove(); } // insert in to linked list -void TimerEvent::insert(timestamp_t timestamp) { +void TimerEvent::insert(timestamp_t timestamp) +{ ticker_insert_event(_ticker_data, &event, timestamp, (uint32_t)this); } -void TimerEvent::insert_absolute(us_timestamp_t timestamp) { +void TimerEvent::insert_absolute(us_timestamp_t timestamp) +{ ticker_insert_event_us(_ticker_data, &event, timestamp, (uint32_t)this); } -void TimerEvent::remove() { +void TimerEvent::remove() +{ ticker_remove_event(_ticker_data, &event); } diff --git a/drivers/UARTSerial.cpp b/drivers/UARTSerial.cpp index c6fd37efe7c..81a5913c522 100644 --- a/drivers/UARTSerial.cpp +++ b/drivers/UARTSerial.cpp @@ -29,11 +29,11 @@ namespace mbed { UARTSerial::UARTSerial(PinName tx, PinName rx, int baud) : - SerialBase(tx, rx, baud), - _blocking(true), - _tx_irq_enabled(false), - _rx_irq_enabled(true), - _dcd_irq(NULL) + SerialBase(tx, rx, baud), + _blocking(true), + _tx_irq_enabled(false), + _rx_irq_enabled(true), + _dcd_irq(NULL) { /* Attatch IRQ routines to the serial device. */ SerialBase::attach(callback(this, &UARTSerial::rx_irq), RxIrq); @@ -56,7 +56,7 @@ void UARTSerial::set_baud(int baud) void UARTSerial::set_data_carrier_detect(PinName dcd_pin, bool active_high) { - delete _dcd_irq; + delete _dcd_irq; _dcd_irq = NULL; if (dcd_pin != NC) { @@ -121,7 +121,8 @@ int UARTSerial::sync() return 0; } -void UARTSerial::sigio(Callback func) { +void UARTSerial::sigio(Callback func) +{ core_util_critical_section_enter(); _sigio_cb = func; if (_sigio_cb) { @@ -133,7 +134,7 @@ void UARTSerial::sigio(Callback func) { core_util_critical_section_exit(); } -ssize_t UARTSerial::write(const void* buffer, size_t length) +ssize_t UARTSerial::write(const void *buffer, size_t length) { size_t data_written = 0; const char *buf_ptr = static_cast(buffer); @@ -178,10 +179,10 @@ ssize_t UARTSerial::write(const void* buffer, size_t length) api_unlock(); - return data_written != 0 ? (ssize_t) data_written : (ssize_t) -EAGAIN; + return data_written != 0 ? (ssize_t) data_written : (ssize_t) - EAGAIN; } -ssize_t UARTSerial::read(void* buffer, size_t length) +ssize_t UARTSerial::read(void *buffer, size_t length) { size_t data_read = 0; @@ -235,7 +236,8 @@ void UARTSerial::wake() } } -short UARTSerial::poll(short events) const { +short UARTSerial::poll(short events) const +{ short revents = 0; /* Check the Circular Buffer if space available for writing out */ diff --git a/drivers/UARTSerial.h b/drivers/UARTSerial.h index 08c35e14455..c3a110fd653 100644 --- a/drivers/UARTSerial.h +++ b/drivers/UARTSerial.h @@ -42,7 +42,7 @@ namespace mbed { /** \addtogroup drivers */ /** Class providing buffered UART communication functionality using separate circular buffer for send and receive channels - * + * * @ingroup drivers */ @@ -81,7 +81,7 @@ class UARTSerial : private SerialBase, public FileHandle, private NonCopyable Date: Wed, 20 Jun 2018 11:12:36 +0100 Subject: [PATCH 024/113] AStyle: ignore hal storage abstraction Deprecated API thus no changes there --- .astyleignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.astyleignore b/.astyleignore index 71141325c60..e1509e735ec 100644 --- a/.astyleignore +++ b/.astyleignore @@ -11,6 +11,7 @@ features/FEATURE_BLE/targets features/FEATURE_LWIP/lwip-interface/lwip features/unsupported/ features/FEATURE_COMMON_PAL/ +hal/storage_abstraction FEATURE_NANOSTACK/coap-service FEATURE_NANOSTACK/sal-stack-nanostack rtos/TARGET_CORTEX/rtx5 From 5c8d417a60935b4674c1c4058253896fb3d48a4d Mon Sep 17 00:00:00 2001 From: Martin Kojtal Date: Wed, 20 Jun 2018 11:24:18 +0100 Subject: [PATCH 025/113] hal: astyle update --- .../flash_common_algo.c | 6 +- hal/TARGET_FLASH_CMSIS_ALGO/flash_data.h | 2 +- hal/can_api.h | 32 ++++----- hal/crc_api.h | 4 +- hal/gpio_api.h | 10 +-- hal/i2c_api.h | 8 +-- hal/itm_api.h | 14 ++-- hal/lp_ticker_api.h | 6 +- hal/mbed_gpio.c | 24 ++++--- hal/mbed_itm_api.c | 11 ++- hal/mbed_lp_ticker_api.c | 2 +- hal/mbed_lp_ticker_wrapper.cpp | 2 +- hal/mbed_pinmap_common.c | 48 ++++++++----- hal/mbed_sleep_manager.c | 8 +-- hal/mbed_ticker_api.c | 68 +++++++++---------- hal/mbed_us_ticker_api.c | 2 +- hal/pinmap.h | 16 ++--- hal/sleep_api.h | 2 +- hal/ticker_api.h | 2 +- hal/us_ticker_api.h | 6 +- 20 files changed, 147 insertions(+), 126 deletions(-) diff --git a/hal/TARGET_FLASH_CMSIS_ALGO/flash_common_algo.c b/hal/TARGET_FLASH_CMSIS_ALGO/flash_common_algo.c index ebdad9e4f17..8fdc6443c67 100644 --- a/hal/TARGET_FLASH_CMSIS_ALGO/flash_common_algo.c +++ b/hal/TARGET_FLASH_CMSIS_ALGO/flash_common_algo.c @@ -97,7 +97,7 @@ static int32_t flash_algo_uninit(flash_t *obj, uint32_t address, uint32_t functi * @param end_addr End address to check. Could be the same as start_addr to just check start_addr * for e.g. flash_erase_sector. * @return 0 for success, -1 for error - */ + */ static int32_t flash_check_nonsecure(flash_t *obj, uint32_t start_addr, uint32_t end_addr) { /* Check if end address wraps around */ @@ -107,14 +107,14 @@ static int32_t flash_check_nonsecure(flash_t *obj, uint32_t start_addr, uint32_t /* Check if start address is in non-secure flash */ if ((start_addr < obj->target_config_ns->flash_start) || - (start_addr >= (obj->target_config_ns->flash_start + obj->target_config_ns->flash_size))) { + (start_addr >= (obj->target_config_ns->flash_start + obj->target_config_ns->flash_size))) { return -1; } /* Check if end address is in non-secure flash */ if (end_addr != start_addr) { if ((end_addr < obj->target_config_ns->flash_start) || - (end_addr >= (obj->target_config_ns->flash_start + obj->target_config_ns->flash_size))) { + (end_addr >= (obj->target_config_ns->flash_start + obj->target_config_ns->flash_size))) { return -1; } } diff --git a/hal/TARGET_FLASH_CMSIS_ALGO/flash_data.h b/hal/TARGET_FLASH_CMSIS_ALGO/flash_data.h index c36014aceee..fe6732a673f 100644 --- a/hal/TARGET_FLASH_CMSIS_ALGO/flash_data.h +++ b/hal/TARGET_FLASH_CMSIS_ALGO/flash_data.h @@ -74,7 +74,7 @@ typedef struct { uint32_t pc; } args_t; -typedef int32_t (*flash_algo_jump_t)(args_t*); +typedef int32_t (*flash_algo_jump_t)(args_t *); // prototypes for flash algo CMSIS API diff --git a/hal/can_api.h b/hal/can_api.h index 723342f0821..7fb63905115 100644 --- a/hal/can_api.h +++ b/hal/can_api.h @@ -57,23 +57,23 @@ typedef void (*can_irq_handler)(uint32_t id, CanIrqType type); typedef struct can_s can_t; -void can_init (can_t *obj, PinName rd, PinName td); -void can_init_freq (can_t *obj, PinName rd, PinName td, int hz); -void can_free (can_t *obj); -int can_frequency (can_t *obj, int hz); - -void can_irq_init (can_t *obj, can_irq_handler handler, uint32_t id); -void can_irq_free (can_t *obj); -void can_irq_set (can_t *obj, CanIrqType irq, uint32_t enable); - -int can_write (can_t *obj, CAN_Message, int cc); -int can_read (can_t *obj, CAN_Message *msg, int handle); -int can_mode (can_t *obj, CanMode mode); +void can_init(can_t *obj, PinName rd, PinName td); +void can_init_freq(can_t *obj, PinName rd, PinName td, int hz); +void can_free(can_t *obj); +int can_frequency(can_t *obj, int hz); + +void can_irq_init(can_t *obj, can_irq_handler handler, uint32_t id); +void can_irq_free(can_t *obj); +void can_irq_set(can_t *obj, CanIrqType irq, uint32_t enable); + +int can_write(can_t *obj, CAN_Message, int cc); +int can_read(can_t *obj, CAN_Message *msg, int handle); +int can_mode(can_t *obj, CanMode mode); int can_filter(can_t *obj, uint32_t id, uint32_t mask, CANFormat format, int32_t handle); -void can_reset (can_t *obj); -unsigned char can_rderror (can_t *obj); -unsigned char can_tderror (can_t *obj); -void can_monitor (can_t *obj, int silent); +void can_reset(can_t *obj); +unsigned char can_rderror(can_t *obj); +unsigned char can_tderror(can_t *obj); +void can_monitor(can_t *obj, int silent); #ifdef __cplusplus }; diff --git a/hal/crc_api.h b/hal/crc_api.h index fbd0820adb8..2421e46315e 100644 --- a/hal/crc_api.h +++ b/hal/crc_api.h @@ -145,7 +145,7 @@ extern "C" { * * \return True if running if the polynomial is supported, false if not. */ -bool hal_crc_is_supported(const crc_mbed_config_t* config); +bool hal_crc_is_supported(const crc_mbed_config_t *config); /** Initialize the hardware CRC module with the given polynomial * @@ -177,7 +177,7 @@ bool hal_crc_is_supported(const crc_mbed_config_t* config); * hardware CRC module. For example, polynomial and initial seed * values. */ -void hal_crc_compute_partial_start(const crc_mbed_config_t* config); +void hal_crc_compute_partial_start(const crc_mbed_config_t *config); /** Writes data to the current CRC module. * diff --git a/hal/gpio_api.h b/hal/gpio_api.h index a99fdec048e..9f11937be40 100644 --- a/hal/gpio_api.h +++ b/hal/gpio_api.h @@ -86,7 +86,7 @@ int gpio_read(gpio_t *obj); * @param gpio The GPIO object * @param pin The pin name */ -void gpio_init_in(gpio_t* gpio, PinName pin); +void gpio_init_in(gpio_t *gpio, PinName pin); /** Init the input pin and set the mode * @@ -94,7 +94,7 @@ void gpio_init_in(gpio_t* gpio, PinName pin); * @param pin The pin name * @param mode The pin mode to be set */ -void gpio_init_in_ex(gpio_t* gpio, PinName pin, PinMode mode); +void gpio_init_in_ex(gpio_t *gpio, PinName pin, PinMode mode); /** Init the output pin as an output, with predefined output value 0 * @@ -102,7 +102,7 @@ void gpio_init_in_ex(gpio_t* gpio, PinName pin, PinMode mode); * @param pin The pin name * @return An integer value 1 or 0 */ -void gpio_init_out(gpio_t* gpio, PinName pin); +void gpio_init_out(gpio_t *gpio, PinName pin); /** Init the pin as an output and set the output value * @@ -110,7 +110,7 @@ void gpio_init_out(gpio_t* gpio, PinName pin); * @param pin The pin name * @param value The value to be set */ -void gpio_init_out_ex(gpio_t* gpio, PinName pin, int value); +void gpio_init_out_ex(gpio_t *gpio, PinName pin, int value); /** Init the pin to be in/out * @@ -120,7 +120,7 @@ void gpio_init_out_ex(gpio_t* gpio, PinName pin, int value); * @param mode The pin mode to be set * @param value The value to be set for an output pin */ -void gpio_init_inout(gpio_t* gpio, PinName pin, PinDirection direction, PinMode mode, int value); +void gpio_init_inout(gpio_t *gpio, PinName pin, PinDirection direction, PinMode mode, int value); /**@}*/ diff --git a/hal/i2c_api.h b/hal/i2c_api.h index 70121930fe1..18f902369e2 100644 --- a/hal/i2c_api.h +++ b/hal/i2c_api.h @@ -58,8 +58,8 @@ typedef struct i2c_s i2c_t; #endif enum { - I2C_ERROR_NO_SLAVE = -1, - I2C_ERROR_BUS_BUSY = -2 + I2C_ERROR_NO_SLAVE = -1, + I2C_ERROR_BUS_BUSY = -2 }; #ifdef __cplusplus @@ -73,7 +73,7 @@ extern "C" { /** Initialize the I2C peripheral. It sets the default parameters for I2C * peripheral, and configures its specifieds pins. - * + * * @param obj The I2C object * @param sda The sda pin * @param scl The scl pin @@ -117,7 +117,7 @@ int i2c_read(i2c_t *obj, int address, char *data, int length, int stop); * @param data The buffer for sending * @param length Number of bytes to write * @param stop Stop to be generated after the transfer is done - * @return + * @return * zero or non-zero - Number of written bytes * negative - I2C_ERROR_XXX status */ diff --git a/hal/itm_api.h b/hal/itm_api.h index c773963fd2c..cf824bfad45 100644 --- a/hal/itm_api.h +++ b/hal/itm_api.h @@ -38,15 +38,15 @@ enum { /** * @brief Target specific initialization function. - * This function is responsible for initializing and configuring - * the debug clock for the ITM and setting up the SWO pin for + * This function is responsible for initializing and configuring + * the debug clock for the ITM and setting up the SWO pin for * debug output. - * + * * The only Cortex-M register that should be modified is the clock * prescaler in TPI->ACPR. - * - * The generic mbed_itm_init initialization function will setup: - * + * + * The generic mbed_itm_init initialization function will setup: + * * ITM->LAR * ITM->TPR * ITM->TCR @@ -54,7 +54,7 @@ enum { * TPI->SPPR * TPI->FFCR * DWT->CTRL - * + * * for SWO output on stimulus port 0. */ void itm_init(void); diff --git a/hal/lp_ticker_api.h b/hal/lp_ticker_api.h index 30a243edebd..374990803cb 100644 --- a/hal/lp_ticker_api.h +++ b/hal/lp_ticker_api.h @@ -79,7 +79,7 @@ ticker_irq_handler_type set_lp_ticker_irq_handler(ticker_irq_handler_type ticker * * @return The low power ticker data */ -const ticker_data_t* get_lp_ticker_data(void); +const ticker_data_t *get_lp_ticker_data(void); /** The wrapper for ticker_irq_handler, to pass lp ticker's data * @@ -207,7 +207,7 @@ void lp_ticker_disable_interrupt(void); void lp_ticker_clear_interrupt(void); /** Set pending interrupt that should be fired right away. - * + * * Pseudo Code: * @code * void lp_ticker_fire_interrupt(void) @@ -232,7 +232,7 @@ void lp_ticker_fire_interrupt(void); * } * @endcode */ -const ticker_info_t* lp_ticker_get_info(void); +const ticker_info_t *lp_ticker_get_info(void); /**@}*/ diff --git a/hal/mbed_gpio.c b/hal/mbed_gpio.c index b9dda3f1b3b..7bf52dd76d1 100644 --- a/hal/mbed_gpio.c +++ b/hal/mbed_gpio.c @@ -15,7 +15,7 @@ */ #include "hal/gpio_api.h" -static inline void _gpio_init_in(gpio_t* gpio, PinName pin, PinMode mode) +static inline void _gpio_init_in(gpio_t *gpio, PinName pin, PinMode mode) { gpio_init(gpio, pin); if (pin != NC) { @@ -24,7 +24,7 @@ static inline void _gpio_init_in(gpio_t* gpio, PinName pin, PinMode mode) } } -static inline void _gpio_init_out(gpio_t* gpio, PinName pin, PinMode mode, int value) +static inline void _gpio_init_out(gpio_t *gpio, PinName pin, PinMode mode, int value) { gpio_init(gpio, pin); if (pin != NC) { @@ -34,27 +34,33 @@ static inline void _gpio_init_out(gpio_t* gpio, PinName pin, PinMode mode, int v } } -void gpio_init_in(gpio_t* gpio, PinName pin) { +void gpio_init_in(gpio_t *gpio, PinName pin) +{ gpio_init_in_ex(gpio, pin, PullDefault); } -void gpio_init_in_ex(gpio_t* gpio, PinName pin, PinMode mode) { +void gpio_init_in_ex(gpio_t *gpio, PinName pin, PinMode mode) +{ _gpio_init_in(gpio, pin, mode); } -void gpio_init_out(gpio_t* gpio, PinName pin) { +void gpio_init_out(gpio_t *gpio, PinName pin) +{ gpio_init_out_ex(gpio, pin, 0); } -void gpio_init_out_ex(gpio_t* gpio, PinName pin, int value) { +void gpio_init_out_ex(gpio_t *gpio, PinName pin, int value) +{ _gpio_init_out(gpio, pin, PullNone, value); } -void gpio_init_inout(gpio_t* gpio, PinName pin, PinDirection direction, PinMode mode, int value) { +void gpio_init_inout(gpio_t *gpio, PinName pin, PinDirection direction, PinMode mode, int value) +{ if (direction == PIN_INPUT) { _gpio_init_in(gpio, pin, mode); - if (pin != NC) - gpio_write(gpio, value); // we prepare the value in case it is switched later + if (pin != NC) { + gpio_write(gpio, value); // we prepare the value in case it is switched later + } } else { _gpio_init_out(gpio, pin, mode, value); } diff --git a/hal/mbed_itm_api.c b/hal/mbed_itm_api.c index 5826570be21..64c116a3f6c 100644 --- a/hal/mbed_itm_api.c +++ b/hal/mbed_itm_api.c @@ -21,7 +21,7 @@ #include -#define ITM_ENABLE_WRITE 0xC5ACCE55 +#define ITM_ENABLE_WRITE 0xC5ACCE55 #define SWO_NRZ 0x02 #define SWO_STIMULUS_PORT 0x01 @@ -56,13 +56,13 @@ void mbed_itm_init(void) ITM->TPR = 0x0; /* Trace Control Register */ - ITM->TCR = (1 << ITM_TCR_TraceBusID_Pos) | - (1 << ITM_TCR_DWTENA_Pos) | + ITM->TCR = (1 << ITM_TCR_TraceBusID_Pos) | + (1 << ITM_TCR_DWTENA_Pos) | (1 << ITM_TCR_SYNCENA_Pos) | (1 << ITM_TCR_ITMENA_Pos); /* Trace Enable Register */ - ITM->TER = SWO_STIMULUS_PORT; + ITM->TER = SWO_STIMULUS_PORT; } } @@ -70,8 +70,7 @@ uint32_t mbed_itm_send(uint32_t port, uint32_t data) { /* Check if ITM and port is enabled */ if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ - ((ITM->TER & (1UL << port) ) != 0UL) ) /* ITM Port enabled */ - { + ((ITM->TER & (1UL << port)) != 0UL)) { /* ITM Port enabled */ /* write data to port */ ITM->PORT[port].u32 = data; diff --git a/hal/mbed_lp_ticker_api.c b/hal/mbed_lp_ticker_api.c index 020d36454e1..f9cf2b272ea 100644 --- a/hal/mbed_lp_ticker_api.c +++ b/hal/mbed_lp_ticker_api.c @@ -42,7 +42,7 @@ static const ticker_data_t lp_data = { .queue = &events, }; -const ticker_data_t* get_lp_ticker_data(void) +const ticker_data_t *get_lp_ticker_data(void) { return &lp_data; } diff --git a/hal/mbed_lp_ticker_wrapper.cpp b/hal/mbed_lp_ticker_wrapper.cpp index 53817bf1522..9c1a2b47289 100644 --- a/hal/mbed_lp_ticker_wrapper.cpp +++ b/hal/mbed_lp_ticker_wrapper.cpp @@ -43,7 +43,7 @@ static void init_local() { MBED_ASSERT(core_util_in_critical_section()); - const ticker_info_t* info = lp_ticker_get_info(); + const ticker_info_t *info = lp_ticker_get_info(); if (info->bits >= 32) { mask = 0xffffffff; } else { diff --git a/hal/mbed_pinmap_common.c b/hal/mbed_pinmap_common.c index 1cb369f7e71..18056075021 100644 --- a/hal/mbed_pinmap_common.c +++ b/hal/mbed_pinmap_common.c @@ -16,9 +16,11 @@ #include "hal/pinmap.h" #include "platform/mbed_error.h" -void pinmap_pinout(PinName pin, const PinMap *map) { - if (pin == NC) +void pinmap_pinout(PinName pin, const PinMap *map) +{ + if (pin == NC) { return; + } while (map->pin != NC) { if (map->pin == pin) { @@ -32,58 +34,72 @@ void pinmap_pinout(PinName pin, const PinMap *map) { MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_PLATFORM, MBED_ERROR_CODE_PINMAP_INVALID), "could not pinout", pin); } -uint32_t pinmap_merge(uint32_t a, uint32_t b) { +uint32_t pinmap_merge(uint32_t a, uint32_t b) +{ // both are the same (inc both NC) - if (a == b) + if (a == b) { return a; + } // one (or both) is not connected - if (a == (uint32_t)NC) + if (a == (uint32_t)NC) { return b; - if (b == (uint32_t)NC) + } + if (b == (uint32_t)NC) { return a; + } // mis-match error case MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_PLATFORM, MBED_ERROR_CODE_PINMAP_INVALID), "pinmap mis-match", a); return (uint32_t)NC; } -uint32_t pinmap_find_peripheral(PinName pin, const PinMap* map) { +uint32_t pinmap_find_peripheral(PinName pin, const PinMap *map) +{ while (map->pin != NC) { - if (map->pin == pin) + if (map->pin == pin) { return map->peripheral; + } map++; } return (uint32_t)NC; } -uint32_t pinmap_peripheral(PinName pin, const PinMap* map) { +uint32_t pinmap_peripheral(PinName pin, const PinMap *map) +{ uint32_t peripheral = (uint32_t)NC; - if (pin == (PinName)NC) + if (pin == (PinName)NC) { return (uint32_t)NC; + } peripheral = pinmap_find_peripheral(pin, map); - if ((uint32_t)NC == peripheral) // no mapping available + if ((uint32_t)NC == peripheral) { // no mapping available MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_PLATFORM, MBED_ERROR_CODE_PINMAP_INVALID), "pinmap not found for peripheral", peripheral); + } return peripheral; } -uint32_t pinmap_find_function(PinName pin, const PinMap* map) { +uint32_t pinmap_find_function(PinName pin, const PinMap *map) +{ while (map->pin != NC) { - if (map->pin == pin) + if (map->pin == pin) { return map->function; + } map++; } return (uint32_t)NC; } -uint32_t pinmap_function(PinName pin, const PinMap* map) { +uint32_t pinmap_function(PinName pin, const PinMap *map) +{ uint32_t function = (uint32_t)NC; - if (pin == (PinName)NC) + if (pin == (PinName)NC) { return (uint32_t)NC; + } function = pinmap_find_function(pin, map); - if ((uint32_t)NC == function) // no mapping available + if ((uint32_t)NC == function) { // no mapping available MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_PLATFORM, MBED_ERROR_CODE_PINMAP_INVALID), "pinmap not found for function", function); + } return function; } diff --git a/hal/mbed_sleep_manager.c b/hal/mbed_sleep_manager.c index 12cd7cfb000..d485965da67 100644 --- a/hal/mbed_sleep_manager.c +++ b/hal/mbed_sleep_manager.c @@ -82,7 +82,7 @@ typedef struct sleep_statistic { static sleep_statistic_t sleep_stats[STATISTIC_COUNT]; -static sleep_statistic_t* sleep_tracker_find(const char *const filename) +static sleep_statistic_t *sleep_tracker_find(const char *const filename) { for (int i = 0; i < STATISTIC_COUNT; ++i) { if (sleep_stats[i].identifier == filename) { @@ -93,7 +93,7 @@ static sleep_statistic_t* sleep_tracker_find(const char *const filename) return NULL; } -static sleep_statistic_t* sleep_tracker_add(const char* const filename) +static sleep_statistic_t *sleep_tracker_add(const char *const filename) { for (int i = 0; i < STATISTIC_COUNT; ++i) { if (sleep_stats[i].identifier == NULL) { @@ -121,7 +121,7 @@ static void sleep_tracker_print_stats(void) } debug("[id: %s, count: %u]\r\n", sleep_stats[i].identifier, - sleep_stats[i].count); + sleep_stats[i].count); } } @@ -139,7 +139,7 @@ void sleep_tracker_lock(const char *const filename, int line) debug("LOCK: %s, ln: %i, lock count: %u\r\n", filename, line, deep_sleep_lock); } -void sleep_tracker_unlock(const char* const filename, int line) +void sleep_tracker_unlock(const char *const filename, int line) { sleep_statistic_t *stat = sleep_tracker_find(filename); diff --git a/hal/mbed_ticker_api.c b/hal/mbed_ticker_api.c index 2fdf280b345..c9bf84e6827 100644 --- a/hal/mbed_ticker_api.c +++ b/hal/mbed_ticker_api.c @@ -23,13 +23,13 @@ static void schedule_interrupt(const ticker_data_t *const ticker); static void update_present_time(const ticker_data_t *const ticker); /* - * Initialize a ticker instance. + * Initialize a ticker instance. */ static void initialize(const ticker_data_t *ticker) { - // return if the queue has already been initialized, in that case the + // return if the queue has already been initialized, in that case the // interface used by the queue is already initialized. - if (ticker->queue->initialized) { + if (ticker->queue->initialized) { return; } @@ -57,7 +57,7 @@ static void initialize(const ticker_data_t *ticker) } uint32_t max_delta = 0x7 << (bits - 4); // 7/16th uint64_t max_delta_us = - ((uint64_t)max_delta * 1000000 + frequency - 1) / frequency; + ((uint64_t)max_delta * 1000000 + frequency - 1) / frequency; ticker->queue->event_handler = NULL; ticker->queue->head = NULL; @@ -70,13 +70,13 @@ static void initialize(const ticker_data_t *ticker) ticker->queue->max_delta_us = max_delta_us; ticker->queue->present_time = 0; ticker->queue->initialized = true; - + update_present_time(ticker); schedule_interrupt(ticker); } /** - * Set the event handler function of a ticker instance. + * Set the event handler function of a ticker instance. */ static void set_handler(const ticker_data_t *const ticker, ticker_event_handler handler) { @@ -86,18 +86,18 @@ static void set_handler(const ticker_data_t *const ticker, ticker_event_handler /* * Convert a 32 bit timestamp into a 64 bit timestamp. * - * A 64 bit timestamp is used as the point of time of reference while the - * timestamp to convert is relative to this point of time. + * A 64 bit timestamp is used as the point of time of reference while the + * timestamp to convert is relative to this point of time. + * + * The lower 32 bits of the timestamp returned will be equal to the timestamp to + * convert. * - * The lower 32 bits of the timestamp returned will be equal to the timestamp to - * convert. - * - * If the timestamp to convert is less than the lower 32 bits of the time - * reference then the timestamp to convert is seen as an overflowed value and - * the upper 32 bit of the timestamp returned will be equal to the upper 32 bit - * of the reference point + 1. - * Otherwise, the upper 32 bit returned will be equal to the upper 32 bit of the - * reference point. + * If the timestamp to convert is less than the lower 32 bits of the time + * reference then the timestamp to convert is seen as an overflowed value and + * the upper 32 bit of the timestamp returned will be equal to the upper 32 bit + * of the reference point + 1. + * Otherwise, the upper 32 bit returned will be equal to the upper 32 bit of the + * reference point. * * @param ref: The 64 bit timestamp of reference. * @param timestamp: The timestamp to convert. @@ -107,8 +107,8 @@ static us_timestamp_t convert_timestamp(us_timestamp_t ref, timestamp_t timestam bool overflow = timestamp < ((timestamp_t) ref) ? true : false; us_timestamp_t result = (ref & ~((us_timestamp_t)UINT32_MAX)) | timestamp; - if (overflow) { - result += (1ULL<<32); + if (overflow) { + result += (1ULL << 32); } return result; @@ -214,15 +214,15 @@ int _ticker_match_interval_passed(timestamp_t prev_tick, timestamp_t cur_tick, t } /** - * Compute the time when the interrupt has to be triggered and schedule it. - * - * If there is no event in the queue or the next event to execute is in more + * Compute the time when the interrupt has to be triggered and schedule it. + * + * If there is no event in the queue or the next event to execute is in more * than ticker.queue.max_delta ticks from now then the ticker irq will be * scheduled in ticker.queue.max_delta ticks. Otherwise the irq will be * scheduled to happen when the running counter reach the timestamp of the * first event in the queue. - * - * @note If there is no event in the queue then the interrupt is scheduled to + * + * @note If there is no event in the queue then the interrupt is scheduled to * in ticker.queue.max_delta. This is necessary to keep track * of the timer overflow. */ @@ -259,7 +259,7 @@ static void schedule_interrupt(const ticker_data_t *const ticker) } } else { uint32_t match_tick = - (queue->tick_last_read + queue->max_delta) & queue->bitmask; + (queue->tick_last_read + queue->max_delta) & queue->bitmask; ticker->interface->set_interrupt(match_tick); } } @@ -285,10 +285,10 @@ void ticker_irq_handler(const ticker_data_t *const ticker) break; } - // update the current timestamp used by the queue + // update the current timestamp used by the queue update_present_time(ticker); - if (ticker->queue->head->timestamp <= ticker->queue->present_time) { + if (ticker->queue->head->timestamp <= ticker->queue->present_time) { // This event was in the past: // point to the following one and execute its handler ticker_event_t *p = ticker->queue->head; @@ -300,7 +300,7 @@ void ticker_irq_handler(const ticker_data_t *const ticker) * event handler may have altered the chain of pending events. */ } else { break; - } + } } schedule_interrupt(ticker); @@ -315,13 +315,13 @@ void ticker_insert_event(const ticker_data_t *const ticker, ticker_event_t *obj, // update the current timestamp update_present_time(ticker); us_timestamp_t absolute_timestamp = convert_timestamp( - ticker->queue->present_time, - timestamp - ); + ticker->queue->present_time, + timestamp + ); // defer to ticker_insert_event_us ticker_insert_event_us( - ticker, + ticker, obj, absolute_timestamp, id ); @@ -352,7 +352,7 @@ void ticker_insert_event_us(const ticker_data_t *const ticker, ticker_event_t *o prev = p; p = p->next; } - + /* if we're at the end p will be NULL, which is correct */ obj->next = p; @@ -378,7 +378,7 @@ void ticker_remove_event(const ticker_data_t *const ticker, ticker_event_t *obj) schedule_interrupt(ticker); } else { // find the object before me, then drop me - ticker_event_t* p = ticker->queue->head; + ticker_event_t *p = ticker->queue->head; while (p != NULL) { if (p->next == obj) { p->next = obj->next; diff --git a/hal/mbed_us_ticker_api.c b/hal/mbed_us_ticker_api.c index 69b533482bd..9b025fa3f84 100644 --- a/hal/mbed_us_ticker_api.c +++ b/hal/mbed_us_ticker_api.c @@ -34,7 +34,7 @@ static const ticker_data_t us_data = { .queue = &events }; -const ticker_data_t* get_us_ticker_data(void) +const ticker_data_t *get_us_ticker_data(void) { return &us_data; } diff --git a/hal/pinmap.h b/hal/pinmap.h index 844a4cbbec1..4b3db4afa4b 100644 --- a/hal/pinmap.h +++ b/hal/pinmap.h @@ -32,14 +32,14 @@ typedef struct { } PinMap; void pin_function(PinName pin, int function); -void pin_mode (PinName pin, PinMode mode); - -uint32_t pinmap_peripheral(PinName pin, const PinMap* map); -uint32_t pinmap_function(PinName pin, const PinMap* map); -uint32_t pinmap_merge (uint32_t a, uint32_t b); -void pinmap_pinout (PinName pin, const PinMap *map); -uint32_t pinmap_find_peripheral(PinName pin, const PinMap* map); -uint32_t pinmap_find_function(PinName pin, const PinMap* map); +void pin_mode(PinName pin, PinMode mode); + +uint32_t pinmap_peripheral(PinName pin, const PinMap *map); +uint32_t pinmap_function(PinName pin, const PinMap *map); +uint32_t pinmap_merge(uint32_t a, uint32_t b); +void pinmap_pinout(PinName pin, const PinMap *map); +uint32_t pinmap_find_peripheral(PinName pin, const PinMap *map); +uint32_t pinmap_find_function(PinName pin, const PinMap *map); #ifdef __cplusplus } diff --git a/hal/sleep_api.h b/hal/sleep_api.h index 88c38750052..bc484d6f1bf 100644 --- a/hal/sleep_api.h +++ b/hal/sleep_api.h @@ -73,7 +73,7 @@ extern "C" { * The processor can be woken up by any internal peripheral interrupt or external pin interrupt. * * The wake-up time shall be less than 10 us. - * + * */ void hal_sleep(void); diff --git a/hal/ticker_api.h b/hal/ticker_api.h index 8b2c9ffccb0..661bd809955 100644 --- a/hal/ticker_api.h +++ b/hal/ticker_api.h @@ -80,7 +80,7 @@ typedef struct { uint64_t tick_remainder; /**< Ticks that have not been added to base_time */ us_timestamp_t present_time; /**< Store the timestamp used for present time */ bool initialized; /**< Indicate if the instance is initialized */ - uint8_t frequency_shifts; /**< If frequency is a value of 2^n, this is n, otherwise 0 */ + uint8_t frequency_shifts; /**< If frequency is a value of 2^n, this is n, otherwise 0 */ } ticker_event_queue_t; /** Ticker's data structure diff --git a/hal/us_ticker_api.h b/hal/us_ticker_api.h index 3b40805b9be..77f43580f0e 100644 --- a/hal/us_ticker_api.h +++ b/hal/us_ticker_api.h @@ -102,7 +102,7 @@ extern "C" { * @ingroup hal_lp_ticker */ - + typedef void (*ticker_irq_handler_type)(const ticker_data_t *const); /** Set ticker IRQ handler @@ -121,7 +121,7 @@ ticker_irq_handler_type set_us_ticker_irq_handler(ticker_irq_handler_type ticker * * @return The microsecond ticker data */ -const ticker_data_t* get_us_ticker_data(void); +const ticker_data_t *get_us_ticker_data(void); /** The wrapper for ticker_irq_handler, to pass us ticker's data @@ -269,7 +269,7 @@ void us_ticker_fire_interrupt(void); * } * @endcode */ -const ticker_info_t* us_ticker_get_info(void); +const ticker_info_t *us_ticker_get_info(void); /**@}*/ From ca2c4928c195d25cd71fb18461572196bbd79084 Mon Sep 17 00:00:00 2001 From: Martin Kojtal Date: Wed, 27 Jun 2018 15:09:15 +0100 Subject: [PATCH 026/113] platform: astyle update --- platform/ATCmdParser.cpp | 40 +- platform/ATCmdParser.h | 17 +- platform/CThunk.h | 280 +++-- platform/CallChain.cpp | 38 +- platform/CallChain.h | 70 +- platform/Callback.h | 1748 ++++++++++++++++++------------ platform/CircularBuffer.h | 53 +- platform/CriticalSectionLock.h | 12 +- platform/DirHandle.h | 22 +- platform/FileBase.cpp | 24 +- platform/FileBase.h | 8 +- platform/FileHandle.h | 2 +- platform/FilePath.cpp | 33 +- platform/FilePath.h | 16 +- platform/FileSystemHandle.h | 2 +- platform/FileSystemLike.h | 4 +- platform/FunctionPointer.h | 38 +- platform/LocalFileSystem.cpp | 78 +- platform/LocalFileSystem.h | 5 +- platform/NonCopyable.h | 8 +- platform/PlatformMutex.h | 12 +- platform/ScopedLock.h | 4 +- platform/SingletonPtr.h | 8 +- platform/Stream.cpp | 77 +- platform/Stream.h | 27 +- platform/Transaction.h | 17 +- platform/astyle-branch.out | 74 ++ platform/mbed_alloc_wrappers.cpp | 81 +- platform/mbed_application.c | 12 +- platform/mbed_board.c | 14 +- platform/mbed_critical.c | 25 +- platform/mbed_critical.h | 6 +- platform/mbed_debug.h | 8 +- platform/mbed_error.c | 216 ++-- platform/mbed_error.h | 899 ++++++++------- platform/mbed_error_hist.c | 26 +- platform/mbed_error_hist.h | 42 +- platform/mbed_interface.c | 34 +- platform/mbed_interface.h | 4 +- platform/mbed_mem_trace.cpp | 24 +- platform/mbed_mem_trace.h | 2 +- platform/mbed_mktime.c | 71 +- platform/mbed_mktime.h | 4 +- platform/mbed_power_mgmt.h | 4 +- platform/mbed_retarget.cpp | 437 +++++--- platform/mbed_retarget.h | 22 +- platform/mbed_rtc_time.cpp | 10 +- platform/mbed_sdk_boot.c | 18 +- platform/mbed_semihost_api.c | 58 +- platform/mbed_semihost_api.h | 38 +- platform/mbed_toolchain.h | 2 +- platform/mbed_wait_api.h | 18 +- platform/mbed_wait_api_no_rtos.c | 9 +- platform/mbed_wait_api_rtos.cpp | 9 +- 54 files changed, 2785 insertions(+), 2025 deletions(-) create mode 100644 platform/astyle-branch.out diff --git a/platform/ATCmdParser.cpp b/platform/ATCmdParser.cpp index 30a4b8fa2b8..9c422b3438d 100644 --- a/platform/ATCmdParser.cpp +++ b/platform/ATCmdParser.cpp @@ -79,7 +79,7 @@ void ATCmdParser::flush() int ATCmdParser::write(const char *data, int size) { int i = 0; - for ( ; i < size; i++) { + for (; i < size; i++) { if (putc(data[i]) < 0) { return -1; } @@ -90,7 +90,7 @@ int ATCmdParser::write(const char *data, int size) int ATCmdParser::read(char *data, int size) { int i = 0; - for ( ; i < size; i++) { + for (; i < size; i++) { int c = getc(); if (c < 0) { return -1; @@ -110,7 +110,7 @@ int ATCmdParser::vprintf(const char *format, va_list args) } int i = 0; - for ( ; _buffer[i]; i++) { + for (; _buffer[i]; i++) { if (putc(_buffer[i]) < 0) { return -1; } @@ -128,7 +128,7 @@ int ATCmdParser::vscanf(const char *format, va_list args) int offset = 0; while (format[i]) { - if (format[i] == '%' && format[i+1] != '%' && format[i+1] != '*') { + if (format[i] == '%' && format[i + 1] != '%' && format[i + 1] != '*') { _buffer[offset++] = '%'; _buffer[offset++] = '*'; i++; @@ -155,7 +155,7 @@ int ATCmdParser::vscanf(const char *format, va_list args) while (true) { // Ran out of space - if (j+1 >= _buffer_size - offset) { + if (j + 1 >= _buffer_size - offset) { return false; } // Receive next character @@ -168,12 +168,12 @@ int ATCmdParser::vscanf(const char *format, va_list args) // Check for match int count = -1; - sscanf(_buffer+offset, _buffer, &count); + sscanf(_buffer + offset, _buffer, &count); // We only succeed if all characters in the response are matched if (count == j) { // Store the found results - vsscanf(_buffer+offset, format, args); + vsscanf(_buffer + offset, format, args); return j; } } @@ -220,14 +220,14 @@ bool ATCmdParser::vrecv(const char *response, va_list args) bool whole_line_wanted = false; while (response[i]) { - if (response[i] == '%' && response[i+1] != '%' && response[i+1] != '*') { + if (response[i] == '%' && response[i + 1] != '%' && response[i + 1] != '*') { _buffer[offset++] = '%'; _buffer[offset++] = '*'; i++; } else { _buffer[offset++] = response[i++]; // Find linebreaks, taking care not to be fooled if they're in a %[^\n] conversion specification - if (response[i - 1] == '\n' && !(i >= 3 && response[i-3] == '[' && response[i-2] == '^')) { + if (response[i - 1] == '\n' && !(i >= 3 && response[i - 3] == '[' && response[i - 2] == '^')) { whole_line_wanted = true; break; } @@ -260,7 +260,7 @@ bool ATCmdParser::vrecv(const char *response, va_list args) } // Simplify newlines (borrowed from retarget.cpp) if ((c == CR && _in_prev != LF) || - (c == LF && _in_prev != CR)) { + (c == LF && _in_prev != CR)) { _in_prev = c; c = '\n'; } else if ((c == CR && _in_prev == LF) || @@ -277,7 +277,7 @@ bool ATCmdParser::vrecv(const char *response, va_list args) // Check for oob data for (struct oob *oob = _oobs; oob; oob = oob->next) { if ((unsigned)j == oob->len && memcmp( - oob->prefix, _buffer+offset, oob->len) == 0) { + oob->prefix, _buffer + offset, oob->len) == 0) { debug_if(_dbg_on, "AT! %s\n", oob->prefix); oob->cb(); @@ -298,18 +298,18 @@ bool ATCmdParser::vrecv(const char *response, va_list args) // This allows recv("Foo: %s\n") to work, and not match with just the first character of a string // (scanf does not itself match whitespace in its format string, so \n is not significant to it) } else { - sscanf(_buffer+offset, _buffer, &count); + sscanf(_buffer + offset, _buffer, &count); } // We only succeed if all characters in the response are matched if (count == j) { - debug_if(_dbg_on, "AT= %s\n", _buffer+offset); + debug_if(_dbg_on, "AT= %s\n", _buffer + offset); // Reuse the front end of the buffer memcpy(_buffer, response, i); _buffer[i] = 0; // Store the found results - vsscanf(_buffer+offset, _buffer, args); + vsscanf(_buffer + offset, _buffer, args); // Jump to next line and continue parsing response += i; @@ -318,8 +318,8 @@ bool ATCmdParser::vrecv(const char *response, va_list args) // Clear the buffer when we hit a newline or ran out of space // running out of space usually means we ran into binary data - if (c == '\n' || j+1 >= _buffer_size - offset) { - debug_if(_dbg_on, "AT< %s", _buffer+offset); + if (c == '\n' || j + 1 >= _buffer_size - offset) { + debug_if(_dbg_on, "AT< %s", _buffer + offset); j = 0; } } @@ -396,7 +396,7 @@ bool ATCmdParser::process_oob() } // Simplify newlines (borrowed from retarget.cpp) if ((c == CR && _in_prev != LF) || - (c == LF && _in_prev != CR)) { + (c == LF && _in_prev != CR)) { _in_prev = c; c = '\n'; } else if ((c == CR && _in_prev == LF) || @@ -414,17 +414,17 @@ bool ATCmdParser::process_oob() struct oob *oob = _oobs; while (oob) { if (i == (int)oob->len && memcmp( - oob->prefix, _buffer, oob->len) == 0) { + oob->prefix, _buffer, oob->len) == 0) { debug_if(_dbg_on, "AT! %s\r\n", oob->prefix); oob->cb(); return true; } oob = oob->next; } - + // Clear the buffer when we hit a newline or ran out of space // running out of space usually means we ran into binary data - if (((i+1) >= _buffer_size) || (c == '\n')) { + if (((i + 1) >= _buffer_size) || (c == '\n')) { debug_if(_dbg_on, "AT< %s", _buffer); i = 0; } diff --git a/platform/ATCmdParser.h b/platform/ATCmdParser.h index 47e1badf9fa..40adea9c84a 100644 --- a/platform/ATCmdParser.h +++ b/platform/ATCmdParser.h @@ -52,8 +52,7 @@ namespace mbed { * @endcode */ -class ATCmdParser : private NonCopyable -{ +class ATCmdParser : private NonCopyable { private: // File handle // Not owned by ATCmdParser @@ -90,8 +89,8 @@ class ATCmdParser : private NonCopyable * @param debug turns on/off debug output for AT commands */ ATCmdParser(FileHandle *fh, const char *output_delimiter = "\r", - int buffer_size = 256, int timeout = 8000, bool debug = false) - : _fh(fh), _buffer_size(buffer_size), _in_prev(0), _oobs(NULL) + int buffer_size = 256, int timeout = 8000, bool debug = false) + : _fh(fh), _buffer_size(buffer_size), _in_prev(0), _oobs(NULL) { _buffer = new char[buffer_size]; set_timeout(timeout); @@ -198,7 +197,7 @@ class ATCmdParser : private NonCopyable * @param ... all printf-like arguments to insert into command * @return true only if command is successfully sent */ - bool send(const char *command, ...) MBED_PRINTF_METHOD(1,2); + bool send(const char *command, ...) MBED_PRINTF_METHOD(1, 2); bool vsend(const char *command, va_list args); @@ -216,7 +215,7 @@ class ATCmdParser : private NonCopyable * @param ... all scanf-like arguments to extract from response * @return true only if response is successfully matched */ - bool recv(const char *response, ...) MBED_SCANF_METHOD(1,2); + bool recv(const char *response, ...) MBED_SCANF_METHOD(1, 2); bool vrecv(const char *response, va_list args); @@ -261,7 +260,7 @@ class ATCmdParser : private NonCopyable * @param ... arguments to printf * @return number of bytes written or -1 on failure */ - int printf(const char *format, ...) MBED_PRINTF_METHOD(1,2); + int printf(const char *format, ...) MBED_PRINTF_METHOD(1, 2); int vprintf(const char *format, va_list args); @@ -273,7 +272,7 @@ class ATCmdParser : private NonCopyable * @param ... arguments to scanf * @return number of bytes read or -1 on failure */ - int scanf(const char *format, ...) MBED_SCANF_METHOD(1,2); + int scanf(const char *format, ...) MBED_SCANF_METHOD(1, 2); int vscanf(const char *format, va_list args); @@ -298,7 +297,7 @@ class ATCmdParser : private NonCopyable * recv operation. */ void abort(); - + /** * Process out-of-band data * diff --git a/platform/CThunk.h b/platform/CThunk.h index 5e5cccb7f08..0b4e685eaf7 100644 --- a/platform/CThunk.h +++ b/platform/CThunk.h @@ -84,165 +84,163 @@ typedef void (*CThunkEntry)(void); * @note Synchronization level: Not protected */ template -class CThunk -{ - public: - typedef void (T::*CCallbackSimple)(void); - typedef void (T::*CCallback)(void* context); - - inline CThunk(T *instance) - { - init(instance, NULL, NULL); - } - - inline CThunk(T *instance, CCallback callback) - { - init(instance, callback, NULL); - } - - ~CThunk() { - - } - - inline CThunk(T *instance, CCallbackSimple callback) - { - init(instance, (CCallback)callback, NULL); - } - - inline CThunk(T &instance, CCallback callback) - { - init(instance, callback, NULL); - } - - inline CThunk(T &instance, CCallbackSimple callback) - { - init(instance, (CCallback)callback, NULL); - } - - inline CThunk(T &instance, CCallback callback, void* context) - { - init(instance, callback, context); - } - - inline void callback(CCallback callback) - { - m_callback = callback; - } - - inline void callback(CCallbackSimple callback) - { - m_callback = (CCallback)callback; - } - - inline void context(void* context) - { - m_thunk.context = (uint32_t)context; - } - - inline void context(uint32_t context) - { - m_thunk.context = context; - } - - inline uint32_t entry(void) - { - return (((uint32_t)&m_thunk)|CTHUNK_ADDRESS); - } - - /* get thunk entry point for connecting rhunk to an IRQ table */ - inline operator CThunkEntry(void) - { - return (CThunkEntry)entry(); - } - - /* get thunk entry point for connecting rhunk to an IRQ table */ - inline operator uint32_t(void) - { - return entry(); - } - - /* simple test function */ - inline void call(void) - { - (((CThunkEntry)(entry()))()); - } - - private: - T* m_instance; - volatile CCallback m_callback; +class CThunk { +public: + typedef void (T::*CCallbackSimple)(void); + typedef void (T::*CCallback)(void *context); + + inline CThunk(T *instance) + { + init(instance, NULL, NULL); + } + + inline CThunk(T *instance, CCallback callback) + { + init(instance, callback, NULL); + } + + ~CThunk() + { + + } + + inline CThunk(T *instance, CCallbackSimple callback) + { + init(instance, (CCallback)callback, NULL); + } + + inline CThunk(T &instance, CCallback callback) + { + init(instance, callback, NULL); + } + + inline CThunk(T &instance, CCallbackSimple callback) + { + init(instance, (CCallback)callback, NULL); + } + + inline CThunk(T &instance, CCallback callback, void *context) + { + init(instance, callback, context); + } + + inline void callback(CCallback callback) + { + m_callback = callback; + } + + inline void callback(CCallbackSimple callback) + { + m_callback = (CCallback)callback; + } + + inline void context(void *context) + { + m_thunk.context = (uint32_t)context; + } + + inline void context(uint32_t context) + { + m_thunk.context = context; + } + + inline uint32_t entry(void) + { + return (((uint32_t)&m_thunk) | CTHUNK_ADDRESS); + } + + /* get thunk entry point for connecting rhunk to an IRQ table */ + inline operator CThunkEntry(void) + { + return (CThunkEntry)entry(); + } + + /* get thunk entry point for connecting rhunk to an IRQ table */ + inline operator uint32_t(void) + { + return entry(); + } + + /* simple test function */ + inline void call(void) + { + (((CThunkEntry)(entry()))()); + } + +private: + T *m_instance; + volatile CCallback m_callback; // TODO: this needs proper fix, to refactor toolchain header file and all its use // PACKED there is not defined properly for IAR #if defined (__ICCARM__) - typedef __packed struct - { - CTHUNK_VARIABLES; - volatile uint32_t instance; - volatile uint32_t context; - volatile uint32_t callback; - volatile uint32_t trampoline; - } CThunkTrampoline; + typedef __packed struct { + CTHUNK_VARIABLES; + volatile uint32_t instance; + volatile uint32_t context; + volatile uint32_t callback; + volatile uint32_t trampoline; + } CThunkTrampoline; #else - typedef struct - { - CTHUNK_VARIABLES; - volatile uint32_t instance; - volatile uint32_t context; - volatile uint32_t callback; - volatile uint32_t trampoline; - } __attribute__((__packed__)) CThunkTrampoline; + typedef struct { + CTHUNK_VARIABLES; + volatile uint32_t instance; + volatile uint32_t context; + volatile uint32_t callback; + volatile uint32_t trampoline; + } __attribute__((__packed__)) CThunkTrampoline; #endif - static void trampoline(T* instance, void* context, CCallback* callback) - { - if(instance && *callback) { - (static_cast(instance)->**callback)(context); - } + static void trampoline(T *instance, void *context, CCallback *callback) + { + if (instance && *callback) { + (static_cast(instance)->**callback)(context); } + } - volatile CThunkTrampoline m_thunk; + volatile CThunkTrampoline m_thunk; - inline void init(T *instance, CCallback callback, void* context) - { - /* remember callback - need to add this level of redirection - as pointer size for member functions differs between platforms */ - m_callback = callback; + inline void init(T *instance, CCallback callback, void *context) + { + /* remember callback - need to add this level of redirection + as pointer size for member functions differs between platforms */ + m_callback = callback; - /* populate thunking trampoline */ - CTHUNK_ASSIGMENT; - m_thunk.context = (uint32_t)context; - m_thunk.instance = (uint32_t)instance; - m_thunk.callback = (uint32_t)&m_callback; - m_thunk.trampoline = (uint32_t)&trampoline; + /* populate thunking trampoline */ + CTHUNK_ASSIGMENT; + m_thunk.context = (uint32_t)context; + m_thunk.instance = (uint32_t)instance; + m_thunk.callback = (uint32_t)&m_callback; + m_thunk.trampoline = (uint32_t)&trampoline; #if defined(__CORTEX_A9) - /* Data cache clean */ - /* Cache control */ - { - uint32_t start_addr = (uint32_t)&m_thunk & 0xFFFFFFE0; - uint32_t end_addr = (uint32_t)&m_thunk + sizeof(m_thunk); - uint32_t addr; - - /* Data cache clean and invalid */ - for (addr = start_addr; addr < end_addr; addr += 0x20) { - L1C_CleanInvalidateDCacheMVA((void *)addr); - } - /* Instruction cache invalid */ - L1C_InvalidateICacheAll(); - MMU_InvalidateTLB(); - L1C_InvalidateBTAC(); + /* Data cache clean */ + /* Cache control */ + { + uint32_t start_addr = (uint32_t)&m_thunk & 0xFFFFFFE0; + uint32_t end_addr = (uint32_t)&m_thunk + sizeof(m_thunk); + uint32_t addr; + + /* Data cache clean and invalid */ + for (addr = start_addr; addr < end_addr; addr += 0x20) { + L1C_CleanInvalidateDCacheMVA((void *)addr); } + /* Instruction cache invalid */ + L1C_InvalidateICacheAll(); + MMU_InvalidateTLB(); + L1C_InvalidateBTAC(); + } #endif #if defined(__CORTEX_M7) - /* Data cache clean and invalid */ - SCB_CleanInvalidateDCache(); + /* Data cache clean and invalid */ + SCB_CleanInvalidateDCache(); - /* Instruction cache invalid */ - SCB_InvalidateICache(); + /* Instruction cache invalid */ + SCB_InvalidateICache(); #endif - __ISB(); - __DSB(); - } + __ISB(); + __DSB(); + } }; /**@}*/ diff --git a/platform/CallChain.cpp b/platform/CallChain.cpp index ebddc0fedcb..6a72d932a40 100644 --- a/platform/CallChain.cpp +++ b/platform/CallChain.cpp @@ -13,26 +13,31 @@ namespace mbed { class CallChainLink { public: - CallChainLink(): cb(), next(NULL) { + CallChainLink(): cb(), next(NULL) + { // No work to do } - CallChainLink(Callback &callback): cb(callback), next(NULL) { + CallChainLink(Callback &callback): cb(callback), next(NULL) + { // No work to do } Callback cb; - CallChainLink * next; + CallChainLink *next; }; -CallChain::CallChain(int size) : _chain(NULL) { +CallChain::CallChain(int size) : _chain(NULL) +{ // No work to do } -CallChain::~CallChain() { +CallChain::~CallChain() +{ clear(); } -pFunctionPointer_t CallChain::add(Callback func) { +pFunctionPointer_t CallChain::add(Callback func) +{ CallChainLink *new_link = new CallChainLink(func); if (NULL == _chain) { _chain = new_link; @@ -49,14 +54,16 @@ pFunctionPointer_t CallChain::add(Callback func) { } } -pFunctionPointer_t CallChain::add_front(Callback func) { +pFunctionPointer_t CallChain::add_front(Callback func) +{ CallChainLink *link = new CallChainLink(func); link->next = _chain; _chain = link; return &link->cb; } -int CallChain::size() const { +int CallChain::size() const +{ CallChainLink *link = _chain; int elements = 0; while (link != NULL) { @@ -66,7 +73,8 @@ int CallChain::size() const { return elements; } -pFunctionPointer_t CallChain::get(int idx) const { +pFunctionPointer_t CallChain::get(int idx) const +{ CallChainLink *link = _chain; for (int i = 0; i < idx; i++) { if (NULL == link) { @@ -77,7 +85,8 @@ pFunctionPointer_t CallChain::get(int idx) const { return &link->cb; } -int CallChain::find(pFunctionPointer_t f) const { +int CallChain::find(pFunctionPointer_t f) const +{ CallChainLink *link = _chain; int i = 0; while (link != NULL) { @@ -90,7 +99,8 @@ int CallChain::find(pFunctionPointer_t f) const { return -1; } -void CallChain::clear() { +void CallChain::clear() +{ CallChainLink *link = _chain; _chain = NULL; while (link != NULL) { @@ -100,7 +110,8 @@ void CallChain::clear() { } } -bool CallChain::remove(pFunctionPointer_t f) { +bool CallChain::remove(pFunctionPointer_t f) +{ CallChainLink *link = _chain; while (link != NULL) { if (f == &link->cb) { @@ -112,7 +123,8 @@ bool CallChain::remove(pFunctionPointer_t f) { return false; } -void CallChain::call() { +void CallChain::call() +{ CallChainLink *link = _chain; while (link != NULL) { link->cb.call(); diff --git a/platform/CallChain.h b/platform/CallChain.h index 60f3894bee4..85682102d35 100644 --- a/platform/CallChain.h +++ b/platform/CallChain.h @@ -75,26 +75,26 @@ class CallChainLink; class CallChain : private NonCopyable { public: /** Create an empty chain - * @deprecated + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. * * @param size (optional) Initial size of the chain */ MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") + "public API of mbed-os and is being removed in the future.") CallChain(int size = 4); /** Create an empty chain - * @deprecated + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. */ MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") + "public API of mbed-os and is being removed in the future.") virtual ~CallChain(); /** Add a function at the end of the chain * - * @deprecated + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. * * @param func A pointer to a void function @@ -103,7 +103,7 @@ class CallChain : private NonCopyable { * The function object created for 'func' */ MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") + "public API of mbed-os and is being removed in the future.") pFunctionPointer_t add(Callback func); /** Add a function at the end of the chain @@ -120,14 +120,15 @@ class CallChain : private NonCopyable { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "The add function does not support cv-qualifiers. Replaced by " - "add(callback(obj, method)).") - pFunctionPointer_t add(T *obj, M method) { + "The add function does not support cv-qualifiers. Replaced by " + "add(callback(obj, method)).") + pFunctionPointer_t add(T *obj, M method) + { return add(callback(obj, method)); } /** Add a function at the beginning of the chain - * @deprecated + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. * * @@ -137,7 +138,7 @@ class CallChain : private NonCopyable { * The function object created for 'func' */ MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") + "public API of mbed-os and is being removed in the future.") pFunctionPointer_t add_front(Callback func); /** Add a function at the beginning of the chain @@ -154,23 +155,24 @@ class CallChain : private NonCopyable { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "The add_front function does not support cv-qualifiers. Replaced by " - "add_front(callback(obj, method)).") - pFunctionPointer_t add_front(T *obj, M method) { + "The add_front function does not support cv-qualifiers. Replaced by " + "add_front(callback(obj, method)).") + pFunctionPointer_t add_front(T *obj, M method) + { return add_front(callback(obj, method)); } /** Get the number of functions in the chain - * @deprecated + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. * */ MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") + "public API of mbed-os and is being removed in the future.") int size() const; /** Get a function object from the chain - * @deprecated + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. * * @param i function object index @@ -179,11 +181,11 @@ class CallChain : private NonCopyable { * The function object at position 'i' in the chain */ MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") + "public API of mbed-os and is being removed in the future.") pFunctionPointer_t get(int i) const; /** Look for a function object in the call chain - * @deprecated + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. * * @param f the function object to search @@ -192,18 +194,18 @@ class CallChain : private NonCopyable { * The index of the function object if found, -1 otherwise. */ MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") + "public API of mbed-os and is being removed in the future.") int find(pFunctionPointer_t f) const; /** Clear the call chain (remove all functions in the chain). * @deprecated Do not use this function. This class is not part of the public API of mbed-os and is being removed in the future. */ MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") + "public API of mbed-os and is being removed in the future.") void clear(); /** Remove a function object from the chain - * @deprecated + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. * * @arg f the function object to remove @@ -212,37 +214,39 @@ class CallChain : private NonCopyable { * true if the function object was found and removed, false otherwise. */ MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") + "public API of mbed-os and is being removed in the future.") bool remove(pFunctionPointer_t f); /** Call all the functions in the chain in sequence - * @deprecated + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. * */ MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") + "public API of mbed-os and is being removed in the future.") void call(); - /** - * @deprecated + /** + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. * */ MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") - void operator ()(void) { + "public API of mbed-os and is being removed in the future.") + void operator()(void) + { call(); } - /** - * @deprecated + /** + * @deprecated * Do not use this function, this class is not part of the public API of mbed-os and is being removed in the future. * */ MBED_DEPRECATED_SINCE("mbed-os-5.6", "This class is not part of the " - "public API of mbed-os and is being removed in the future.") - pFunctionPointer_t operator [](int i) const { + "public API of mbed-os and is being removed in the future.") + pFunctionPointer_t operator [](int i) const + { return get(i); } diff --git a/platform/Callback.h b/platform/Callback.h index b2f06e42fdb..bf3d66114b6 100644 --- a/platform/Callback.h +++ b/platform/Callback.h @@ -47,18 +47,20 @@ class Callback; // massive and misleading error messages when confronted with an // invalid type (or worse, runtime failures) namespace detail { - struct nil {}; +struct nil {}; - template - struct enable_if { typedef R type; }; +template +struct enable_if { + typedef R type; +}; - template - struct enable_if {}; +template +struct enable_if {}; - template - struct is_type { - static const bool value = true; - }; +template +struct is_type { + static const bool value = true; +}; } #define MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, M) \ @@ -77,7 +79,8 @@ class Callback { /** Create a Callback with a static function * @param func Static function to attach */ - Callback(R (*func)() = 0) { + Callback(R(*func)() = 0) + { if (!func) { memset(this, 0, sizeof(Callback)); } else { @@ -88,7 +91,8 @@ class Callback { /** Attach a Callback * @param func The Callback to attach */ - Callback(const Callback &func) { + Callback(const Callback &func) + { if (func._ops) { func._ops->move(this, &func); } @@ -100,8 +104,9 @@ class Callback { * @param method Member function to attach */ template - Callback(U *obj, R (T::*method)()) { - generate(method_context(obj, method)); + Callback(U *obj, R(T::*method)()) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -109,8 +114,9 @@ class Callback { * @param method Member function to attach */ template - Callback(const U *obj, R (T::*method)() const) { - generate(method_context(obj, method)); + Callback(const U *obj, R(T::*method)() const) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -118,8 +124,9 @@ class Callback { * @param method Member function to attach */ template - Callback(volatile U *obj, R (T::*method)() volatile) { - generate(method_context(obj, method)); + Callback(volatile U *obj, R(T::*method)() volatile) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -127,44 +134,49 @@ class Callback { * @param method Member function to attach */ template - Callback(const volatile U *obj, R (T::*method)() const volatile) { - generate(method_context(obj, method)); + Callback(const volatile U *obj, R(T::*method)() const volatile) + { + generate(method_context(obj, method)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(T*), U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(T *), U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(const T*), const U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(const T *), const U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(volatile T*), volatile U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(volatile T *), volatile U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(const volatile T*), const volatile U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(const volatile T *), const volatile U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a function object @@ -172,7 +184,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)())) { + Callback(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)())) + { generate(f); } @@ -181,7 +194,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)() const)) { + Callback(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)() const)) + { generate(f); } @@ -190,7 +204,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)() volatile)) { + Callback(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)() volatile)) + { generate(f); } @@ -199,7 +214,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)() const volatile)) { + Callback(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)() const volatile)) + { generate(f); } @@ -211,8 +227,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(U *obj, R (*func)(T*)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(U *obj, R(*func)(T *)) + { new (this) Callback(func, obj); } @@ -224,8 +241,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(const U *obj, R (*func)(const T*)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(const U *obj, R(*func)(const T *)) + { new (this) Callback(func, obj); } @@ -237,8 +255,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(volatile U *obj, R (*func)(volatile T*)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(volatile U *obj, R(*func)(volatile T *)) + { new (this) Callback(func, obj); } @@ -250,14 +269,16 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(const volatile U *obj, R (*func)(const volatile T*)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(const volatile U *obj, R(*func)(const volatile T *)) + { new (this) Callback(func, obj); } /** Destroy a callback */ - ~Callback() { + ~Callback() + { if (_ops) { _ops->dtor(this); } @@ -269,8 +290,9 @@ class Callback { * Replaced by simple assignment 'Callback cb = func' */ MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)()) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)()) + { this->~Callback(); new (this) Callback(func); } @@ -281,8 +303,9 @@ class Callback { * Replaced by simple assignment 'Callback cb = func' */ MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const Callback &func) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const Callback &func) + { this->~Callback(); new (this) Callback(func); } @@ -295,8 +318,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(U *obj, R (T::*method)()) { + "Replaced by simple assignment 'Callback cb = func") + void attach(U *obj, R(T::*method)()) + { this->~Callback(); new (this) Callback(obj, method); } @@ -309,8 +333,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const U *obj, R (T::*method)() const) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const U *obj, R(T::*method)() const) + { this->~Callback(); new (this) Callback(obj, method); } @@ -323,8 +348,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(volatile U *obj, R (T::*method)() volatile) { + "Replaced by simple assignment 'Callback cb = func") + void attach(volatile U *obj, R(T::*method)() volatile) + { this->~Callback(); new (this) Callback(obj, method); } @@ -337,8 +363,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const volatile U *obj, R (T::*method)() const volatile) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const volatile U *obj, R(T::*method)() const volatile) + { this->~Callback(); new (this) Callback(obj, method); } @@ -351,8 +378,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(T*), U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(T *), U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -365,8 +393,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(const T*), const U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(const T *), const U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -379,8 +408,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(volatile T*), volatile U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(volatile T *), volatile U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -393,8 +423,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(const volatile T*), const volatile U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(const volatile T *), const volatile U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -407,8 +438,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)())) { + "Replaced by simple assignment 'Callback cb = func") + void attach(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)())) + { this->~Callback(); new (this) Callback(f); } @@ -421,8 +453,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)() const)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)() const)) + { this->~Callback(); new (this) Callback(f); } @@ -435,8 +468,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)() volatile)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)() volatile)) + { this->~Callback(); new (this) Callback(f); } @@ -449,8 +483,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)() const volatile)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)() const volatile)) + { this->~Callback(); new (this) Callback(f); } @@ -463,8 +498,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(U *obj, R (*func)(T*)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(U *obj, R(*func)(T *)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -477,8 +513,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(const U *obj, R (*func)(const T*)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(const U *obj, R(*func)(const T *)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -491,8 +528,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(volatile U *obj, R (*func)(volatile T*)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(volatile U *obj, R(*func)(volatile T *)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -505,15 +543,17 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(const volatile U *obj, R (*func)(const volatile T*)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(const volatile U *obj, R(*func)(const volatile T *)) + { this->~Callback(); new (this) Callback(func, obj); } /** Assign a callback */ - Callback &operator=(const Callback &that) { + Callback &operator=(const Callback &that) + { if (this != &that) { this->~Callback(); new (this) Callback(that); @@ -524,42 +564,48 @@ class Callback { /** Call the attached function */ - R call() const { + R call() const + { MBED_ASSERT(_ops); return _ops->call(this); } /** Call the attached function */ - R operator()() const { + R operator()() const + { return call(); } /** Test if function has been attached */ - operator bool() const { + operator bool() const + { return _ops; } /** Test for equality */ - friend bool operator==(const Callback &l, const Callback &r) { + friend bool operator==(const Callback &l, const Callback &r) + { return memcmp(&l, &r, sizeof(Callback)) == 0; } /** Test for inequality */ - friend bool operator!=(const Callback &l, const Callback &r) { + friend bool operator!=(const Callback &l, const Callback &r) + { return !(l == r); } /** Static thunk for passing as C-style function * @param func Callback to call passed as void pointer - * @return the value as determined by func which is of + * @return the value as determined by func which is of * type and determined by the signiture of func */ - static R thunk(void *func) { - return static_cast(func)->call(); + static R thunk(void *func) + { + return static_cast(func)->call(); } private: @@ -569,21 +615,22 @@ class Callback { struct _class; union { void (*_staticfunc)(); - void (*_boundfunc)(_class*); + void (*_boundfunc)(_class *); void (_class::*_methodfunc)(); } _func; void *_obj; // Dynamically dispatched operations const struct ops { - R (*call)(const void*); - void (*move)(void*, const void*); - void (*dtor)(void*); + R(*call)(const void *); + void (*move)(void *, const void *); + void (*dtor)(void *); } *_ops; // Generate operations for function object template - void generate(const F &f) { + void generate(const F &f) + { static const ops ops = { &Callback::function_call, &Callback::function_move, @@ -591,7 +638,7 @@ class Callback { }; MBED_STATIC_ASSERT(sizeof(Callback) - sizeof(_ops) >= sizeof(F), - "Type F must not exceed the size of the Callback class"); + "Type F must not exceed the size of the Callback class"); memset(this, 0, sizeof(Callback)); new (this) F(f); _ops = &ops; @@ -599,18 +646,21 @@ class Callback { // Function attributes template - static R function_call(const void *p) { - return (*(F*)p)(); + static R function_call(const void *p) + { + return (*(F *)p)(); } template - static void function_move(void *d, const void *p) { - new (d) F(*(F*)p); + static void function_move(void *d, const void *p) + { + new (d) F(*(F *)p); } template - static void function_dtor(void *p) { - ((F*)p)->~F(); + static void function_dtor(void *p) + { + ((F *)p)->~F(); } // Wrappers for functions with context @@ -622,7 +672,8 @@ class Callback { method_context(O *obj, M method) : method(method), obj(obj) {} - R operator()() const { + R operator()() const + { return (obj->*method)(); } }; @@ -635,7 +686,8 @@ class Callback { function_context(F func, A *arg) : func(func), arg(arg) {} - R operator()() const { + R operator()() const + { return func(arg); } }; @@ -651,7 +703,8 @@ class Callback { /** Create a Callback with a static function * @param func Static function to attach */ - Callback(R (*func)(A0) = 0) { + Callback(R(*func)(A0) = 0) + { if (!func) { memset(this, 0, sizeof(Callback)); } else { @@ -662,7 +715,8 @@ class Callback { /** Attach a Callback * @param func The Callback to attach */ - Callback(const Callback &func) { + Callback(const Callback &func) + { if (func._ops) { func._ops->move(this, &func); } @@ -674,8 +728,9 @@ class Callback { * @param method Member function to attach */ template - Callback(U *obj, R (T::*method)(A0)) { - generate(method_context(obj, method)); + Callback(U *obj, R(T::*method)(A0)) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -683,8 +738,9 @@ class Callback { * @param method Member function to attach */ template - Callback(const U *obj, R (T::*method)(A0) const) { - generate(method_context(obj, method)); + Callback(const U *obj, R(T::*method)(A0) const) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -692,8 +748,9 @@ class Callback { * @param method Member function to attach */ template - Callback(volatile U *obj, R (T::*method)(A0) volatile) { - generate(method_context(obj, method)); + Callback(volatile U *obj, R(T::*method)(A0) volatile) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -701,44 +758,49 @@ class Callback { * @param method Member function to attach */ template - Callback(const volatile U *obj, R (T::*method)(A0) const volatile) { - generate(method_context(obj, method)); + Callback(const volatile U *obj, R(T::*method)(A0) const volatile) + { + generate(method_context(obj, method)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(T*, A0), U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(T *, A0), U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(const T*, A0), const U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(const T *, A0), const U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(volatile T*, A0), volatile U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(volatile T *, A0), volatile U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(const volatile T*, A0), const volatile U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(const volatile T *, A0), const volatile U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a function object @@ -746,7 +808,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0))) { + Callback(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0))) + { generate(f); } @@ -755,7 +818,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0) const)) { + Callback(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0) const)) + { generate(f); } @@ -764,7 +828,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0) volatile)) { + Callback(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0) volatile)) + { generate(f); } @@ -773,7 +838,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0) const volatile)) { + Callback(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0) const volatile)) + { generate(f); } @@ -785,8 +851,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(U *obj, R (*func)(T*, A0)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(U *obj, R(*func)(T *, A0)) + { new (this) Callback(func, obj); } @@ -798,8 +865,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(const U *obj, R (*func)(const T*, A0)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(const U *obj, R(*func)(const T *, A0)) + { new (this) Callback(func, obj); } @@ -811,8 +879,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(volatile U *obj, R (*func)(volatile T*, A0)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(volatile U *obj, R(*func)(volatile T *, A0)) + { new (this) Callback(func, obj); } @@ -824,14 +893,16 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(const volatile U *obj, R (*func)(const volatile T*, A0)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(const volatile U *obj, R(*func)(const volatile T *, A0)) + { new (this) Callback(func, obj); } /** Destroy a callback */ - ~Callback() { + ~Callback() + { if (_ops) { _ops->dtor(this); } @@ -843,8 +914,9 @@ class Callback { * Replaced by simple assignment 'Callback cb = func' */ MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(A0)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(A0)) + { this->~Callback(); new (this) Callback(func); } @@ -855,8 +927,9 @@ class Callback { * Replaced by simple assignment 'Callback cb = func' */ MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const Callback &func) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const Callback &func) + { this->~Callback(); new (this) Callback(func); } @@ -869,8 +942,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(U *obj, R (T::*method)(A0)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(U *obj, R(T::*method)(A0)) + { this->~Callback(); new (this) Callback(obj, method); } @@ -883,8 +957,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const U *obj, R (T::*method)(A0) const) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const U *obj, R(T::*method)(A0) const) + { this->~Callback(); new (this) Callback(obj, method); } @@ -897,8 +972,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(volatile U *obj, R (T::*method)(A0) volatile) { + "Replaced by simple assignment 'Callback cb = func") + void attach(volatile U *obj, R(T::*method)(A0) volatile) + { this->~Callback(); new (this) Callback(obj, method); } @@ -911,8 +987,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const volatile U *obj, R (T::*method)(A0) const volatile) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const volatile U *obj, R(T::*method)(A0) const volatile) + { this->~Callback(); new (this) Callback(obj, method); } @@ -925,8 +1002,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(T*, A0), U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(T *, A0), U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -939,8 +1017,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(const T*, A0), const U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(const T *, A0), const U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -953,8 +1032,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(volatile T*, A0), volatile U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(volatile T *, A0), volatile U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -967,8 +1047,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(const volatile T*, A0), const volatile U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(const volatile T *, A0), const volatile U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -981,8 +1062,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0))) { + "Replaced by simple assignment 'Callback cb = func") + void attach(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0))) + { this->~Callback(); new (this) Callback(f); } @@ -995,8 +1077,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0) const)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0) const)) + { this->~Callback(); new (this) Callback(f); } @@ -1009,8 +1092,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0) volatile)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0) volatile)) + { this->~Callback(); new (this) Callback(f); } @@ -1023,8 +1107,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0) const volatile)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0) const volatile)) + { this->~Callback(); new (this) Callback(f); } @@ -1037,8 +1122,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(U *obj, R (*func)(T*, A0)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(U *obj, R(*func)(T *, A0)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -1051,8 +1137,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(const U *obj, R (*func)(const T*, A0)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(const U *obj, R(*func)(const T *, A0)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -1065,8 +1152,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(volatile U *obj, R (*func)(volatile T*, A0)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(volatile U *obj, R(*func)(volatile T *, A0)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -1079,15 +1167,17 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(const volatile U *obj, R (*func)(const volatile T*, A0)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(const volatile U *obj, R(*func)(const volatile T *, A0)) + { this->~Callback(); new (this) Callback(func, obj); } /** Assign a callback */ - Callback &operator=(const Callback &that) { + Callback &operator=(const Callback &that) + { if (this != &that) { this->~Callback(); new (this) Callback(that); @@ -1098,43 +1188,49 @@ class Callback { /** Call the attached function */ - R call(A0 a0) const { + R call(A0 a0) const + { MBED_ASSERT(_ops); return _ops->call(this, a0); } /** Call the attached function */ - R operator()(A0 a0) const { + R operator()(A0 a0) const + { return call(a0); } /** Test if function has been attached */ - operator bool() const { + operator bool() const + { return _ops; } /** Test for equality */ - friend bool operator==(const Callback &l, const Callback &r) { + friend bool operator==(const Callback &l, const Callback &r) + { return memcmp(&l, &r, sizeof(Callback)) == 0; } /** Test for inequality */ - friend bool operator!=(const Callback &l, const Callback &r) { + friend bool operator!=(const Callback &l, const Callback &r) + { return !(l == r); } /** Static thunk for passing as C-style function * @param func Callback to call passed as void pointer * @param a0 An argument to be called with function func - * @return the value as determined by func which is of + * @return the value as determined by func which is of * type and determined by the signiture of func */ - static R thunk(void *func, A0 a0) { - return static_cast(func)->call(a0); + static R thunk(void *func, A0 a0) + { + return static_cast(func)->call(a0); } private: @@ -1144,21 +1240,22 @@ class Callback { struct _class; union { void (*_staticfunc)(A0); - void (*_boundfunc)(_class*, A0); + void (*_boundfunc)(_class *, A0); void (_class::*_methodfunc)(A0); } _func; void *_obj; // Dynamically dispatched operations const struct ops { - R (*call)(const void*, A0); - void (*move)(void*, const void*); - void (*dtor)(void*); + R(*call)(const void *, A0); + void (*move)(void *, const void *); + void (*dtor)(void *); } *_ops; // Generate operations for function object template - void generate(const F &f) { + void generate(const F &f) + { static const ops ops = { &Callback::function_call, &Callback::function_move, @@ -1166,7 +1263,7 @@ class Callback { }; MBED_STATIC_ASSERT(sizeof(Callback) - sizeof(_ops) >= sizeof(F), - "Type F must not exceed the size of the Callback class"); + "Type F must not exceed the size of the Callback class"); memset(this, 0, sizeof(Callback)); new (this) F(f); _ops = &ops; @@ -1174,18 +1271,21 @@ class Callback { // Function attributes template - static R function_call(const void *p, A0 a0) { - return (*(F*)p)(a0); + static R function_call(const void *p, A0 a0) + { + return (*(F *)p)(a0); } template - static void function_move(void *d, const void *p) { - new (d) F(*(F*)p); + static void function_move(void *d, const void *p) + { + new (d) F(*(F *)p); } template - static void function_dtor(void *p) { - ((F*)p)->~F(); + static void function_dtor(void *p) + { + ((F *)p)->~F(); } // Wrappers for functions with context @@ -1197,7 +1297,8 @@ class Callback { method_context(O *obj, M method) : method(method), obj(obj) {} - R operator()(A0 a0) const { + R operator()(A0 a0) const + { return (obj->*method)(a0); } }; @@ -1210,7 +1311,8 @@ class Callback { function_context(F func, A *arg) : func(func), arg(arg) {} - R operator()(A0 a0) const { + R operator()(A0 a0) const + { return func(arg, a0); } }; @@ -1226,7 +1328,8 @@ class Callback { /** Create a Callback with a static function * @param func Static function to attach */ - Callback(R (*func)(A0, A1) = 0) { + Callback(R(*func)(A0, A1) = 0) + { if (!func) { memset(this, 0, sizeof(Callback)); } else { @@ -1237,7 +1340,8 @@ class Callback { /** Attach a Callback * @param func The Callback to attach */ - Callback(const Callback &func) { + Callback(const Callback &func) + { if (func._ops) { func._ops->move(this, &func); } @@ -1249,8 +1353,9 @@ class Callback { * @param method Member function to attach */ template - Callback(U *obj, R (T::*method)(A0, A1)) { - generate(method_context(obj, method)); + Callback(U *obj, R(T::*method)(A0, A1)) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -1258,8 +1363,9 @@ class Callback { * @param method Member function to attach */ template - Callback(const U *obj, R (T::*method)(A0, A1) const) { - generate(method_context(obj, method)); + Callback(const U *obj, R(T::*method)(A0, A1) const) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -1267,8 +1373,9 @@ class Callback { * @param method Member function to attach */ template - Callback(volatile U *obj, R (T::*method)(A0, A1) volatile) { - generate(method_context(obj, method)); + Callback(volatile U *obj, R(T::*method)(A0, A1) volatile) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -1276,44 +1383,49 @@ class Callback { * @param method Member function to attach */ template - Callback(const volatile U *obj, R (T::*method)(A0, A1) const volatile) { - generate(method_context(obj, method)); + Callback(const volatile U *obj, R(T::*method)(A0, A1) const volatile) + { + generate(method_context(obj, method)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(T*, A0, A1), U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(T *, A0, A1), U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(const T*, A0, A1), const U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(const T *, A0, A1), const U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(volatile T*, A0, A1), volatile U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(volatile T *, A0, A1), volatile U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(const volatile T*, A0, A1), const volatile U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(const volatile T *, A0, A1), const volatile U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a function object @@ -1321,7 +1433,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1))) { + Callback(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1))) + { generate(f); } @@ -1330,7 +1443,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1) const)) { + Callback(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1) const)) + { generate(f); } @@ -1339,7 +1453,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1) volatile)) { + Callback(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1) volatile)) + { generate(f); } @@ -1348,7 +1463,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1) const volatile)) { + Callback(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1) const volatile)) + { generate(f); } @@ -1360,8 +1476,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(U *obj, R (*func)(T*, A0, A1)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(U *obj, R(*func)(T *, A0, A1)) + { new (this) Callback(func, obj); } @@ -1373,8 +1490,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(const U *obj, R (*func)(const T*, A0, A1)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(const U *obj, R(*func)(const T *, A0, A1)) + { new (this) Callback(func, obj); } @@ -1386,8 +1504,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(volatile U *obj, R (*func)(volatile T*, A0, A1)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(volatile U *obj, R(*func)(volatile T *, A0, A1)) + { new (this) Callback(func, obj); } @@ -1399,14 +1518,16 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(const volatile U *obj, R (*func)(const volatile T*, A0, A1)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(const volatile U *obj, R(*func)(const volatile T *, A0, A1)) + { new (this) Callback(func, obj); } /** Destroy a callback */ - ~Callback() { + ~Callback() + { if (_ops) { _ops->dtor(this); } @@ -1418,8 +1539,9 @@ class Callback { * Replaced by simple assignment 'Callback cb = func' */ MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(A0, A1)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(A0, A1)) + { this->~Callback(); new (this) Callback(func); } @@ -1430,8 +1552,9 @@ class Callback { * Replaced by simple assignment 'Callback cb = func' */ MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const Callback &func) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const Callback &func) + { this->~Callback(); new (this) Callback(func); } @@ -1444,8 +1567,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(U *obj, R (T::*method)(A0, A1)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(U *obj, R(T::*method)(A0, A1)) + { this->~Callback(); new (this) Callback(obj, method); } @@ -1458,8 +1582,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const U *obj, R (T::*method)(A0, A1) const) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const U *obj, R(T::*method)(A0, A1) const) + { this->~Callback(); new (this) Callback(obj, method); } @@ -1472,8 +1597,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(volatile U *obj, R (T::*method)(A0, A1) volatile) { + "Replaced by simple assignment 'Callback cb = func") + void attach(volatile U *obj, R(T::*method)(A0, A1) volatile) + { this->~Callback(); new (this) Callback(obj, method); } @@ -1486,8 +1612,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const volatile U *obj, R (T::*method)(A0, A1) const volatile) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const volatile U *obj, R(T::*method)(A0, A1) const volatile) + { this->~Callback(); new (this) Callback(obj, method); } @@ -1500,8 +1627,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(T*, A0, A1), U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(T *, A0, A1), U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -1514,8 +1642,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(const T*, A0, A1), const U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(const T *, A0, A1), const U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -1528,8 +1657,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(volatile T*, A0, A1), volatile U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(volatile T *, A0, A1), volatile U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -1542,8 +1672,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(const volatile T*, A0, A1), const volatile U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(const volatile T *, A0, A1), const volatile U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -1556,8 +1687,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1))) { + "Replaced by simple assignment 'Callback cb = func") + void attach(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1))) + { this->~Callback(); new (this) Callback(f); } @@ -1570,8 +1702,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1) const)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1) const)) + { this->~Callback(); new (this) Callback(f); } @@ -1584,8 +1717,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1) volatile)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1) volatile)) + { this->~Callback(); new (this) Callback(f); } @@ -1598,8 +1732,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1) const volatile)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1) const volatile)) + { this->~Callback(); new (this) Callback(f); } @@ -1612,8 +1747,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(U *obj, R (*func)(T*, A0, A1)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(U *obj, R(*func)(T *, A0, A1)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -1626,8 +1762,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(const U *obj, R (*func)(const T*, A0, A1)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(const U *obj, R(*func)(const T *, A0, A1)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -1640,8 +1777,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(volatile U *obj, R (*func)(volatile T*, A0, A1)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(volatile U *obj, R(*func)(volatile T *, A0, A1)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -1654,15 +1792,17 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(const volatile U *obj, R (*func)(const volatile T*, A0, A1)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(const volatile U *obj, R(*func)(const volatile T *, A0, A1)) + { this->~Callback(); new (this) Callback(func, obj); } /** Assign a callback */ - Callback &operator=(const Callback &that) { + Callback &operator=(const Callback &that) + { if (this != &that) { this->~Callback(); new (this) Callback(that); @@ -1673,32 +1813,37 @@ class Callback { /** Call the attached function */ - R call(A0 a0, A1 a1) const { + R call(A0 a0, A1 a1) const + { MBED_ASSERT(_ops); return _ops->call(this, a0, a1); } /** Call the attached function */ - R operator()(A0 a0, A1 a1) const { + R operator()(A0 a0, A1 a1) const + { return call(a0, a1); } /** Test if function has been attached */ - operator bool() const { + operator bool() const + { return _ops; } /** Test for equality */ - friend bool operator==(const Callback &l, const Callback &r) { + friend bool operator==(const Callback &l, const Callback &r) + { return memcmp(&l, &r, sizeof(Callback)) == 0; } /** Test for inequality */ - friend bool operator!=(const Callback &l, const Callback &r) { + friend bool operator!=(const Callback &l, const Callback &r) + { return !(l == r); } @@ -1706,11 +1851,12 @@ class Callback { * @param func Callback to call passed as void pointer * @param a0 An argument to be called with function func * @param a1 An argument to be called with function func - * @return the value as determined by func which is of + * @return the value as determined by func which is of * type and determined by the signiture of func */ - static R thunk(void *func, A0 a0, A1 a1) { - return static_cast(func)->call(a0, a1); + static R thunk(void *func, A0 a0, A1 a1) + { + return static_cast(func)->call(a0, a1); } private: @@ -1720,21 +1866,22 @@ class Callback { struct _class; union { void (*_staticfunc)(A0, A1); - void (*_boundfunc)(_class*, A0, A1); + void (*_boundfunc)(_class *, A0, A1); void (_class::*_methodfunc)(A0, A1); } _func; void *_obj; // Dynamically dispatched operations const struct ops { - R (*call)(const void*, A0, A1); - void (*move)(void*, const void*); - void (*dtor)(void*); + R(*call)(const void *, A0, A1); + void (*move)(void *, const void *); + void (*dtor)(void *); } *_ops; // Generate operations for function object template - void generate(const F &f) { + void generate(const F &f) + { static const ops ops = { &Callback::function_call, &Callback::function_move, @@ -1742,7 +1889,7 @@ class Callback { }; MBED_STATIC_ASSERT(sizeof(Callback) - sizeof(_ops) >= sizeof(F), - "Type F must not exceed the size of the Callback class"); + "Type F must not exceed the size of the Callback class"); memset(this, 0, sizeof(Callback)); new (this) F(f); _ops = &ops; @@ -1750,18 +1897,21 @@ class Callback { // Function attributes template - static R function_call(const void *p, A0 a0, A1 a1) { - return (*(F*)p)(a0, a1); + static R function_call(const void *p, A0 a0, A1 a1) + { + return (*(F *)p)(a0, a1); } template - static void function_move(void *d, const void *p) { - new (d) F(*(F*)p); + static void function_move(void *d, const void *p) + { + new (d) F(*(F *)p); } template - static void function_dtor(void *p) { - ((F*)p)->~F(); + static void function_dtor(void *p) + { + ((F *)p)->~F(); } // Wrappers for functions with context @@ -1773,7 +1923,8 @@ class Callback { method_context(O *obj, M method) : method(method), obj(obj) {} - R operator()(A0 a0, A1 a1) const { + R operator()(A0 a0, A1 a1) const + { return (obj->*method)(a0, a1); } }; @@ -1786,7 +1937,8 @@ class Callback { function_context(F func, A *arg) : func(func), arg(arg) {} - R operator()(A0 a0, A1 a1) const { + R operator()(A0 a0, A1 a1) const + { return func(arg, a0, a1); } }; @@ -1802,7 +1954,8 @@ class Callback { /** Create a Callback with a static function * @param func Static function to attach */ - Callback(R (*func)(A0, A1, A2) = 0) { + Callback(R(*func)(A0, A1, A2) = 0) + { if (!func) { memset(this, 0, sizeof(Callback)); } else { @@ -1813,7 +1966,8 @@ class Callback { /** Attach a Callback * @param func The Callback to attach */ - Callback(const Callback &func) { + Callback(const Callback &func) + { if (func._ops) { func._ops->move(this, &func); } @@ -1825,8 +1979,9 @@ class Callback { * @param method Member function to attach */ template - Callback(U *obj, R (T::*method)(A0, A1, A2)) { - generate(method_context(obj, method)); + Callback(U *obj, R(T::*method)(A0, A1, A2)) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -1834,8 +1989,9 @@ class Callback { * @param method Member function to attach */ template - Callback(const U *obj, R (T::*method)(A0, A1, A2) const) { - generate(method_context(obj, method)); + Callback(const U *obj, R(T::*method)(A0, A1, A2) const) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -1843,8 +1999,9 @@ class Callback { * @param method Member function to attach */ template - Callback(volatile U *obj, R (T::*method)(A0, A1, A2) volatile) { - generate(method_context(obj, method)); + Callback(volatile U *obj, R(T::*method)(A0, A1, A2) volatile) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -1852,44 +2009,49 @@ class Callback { * @param method Member function to attach */ template - Callback(const volatile U *obj, R (T::*method)(A0, A1, A2) const volatile) { - generate(method_context(obj, method)); + Callback(const volatile U *obj, R(T::*method)(A0, A1, A2) const volatile) + { + generate(method_context(obj, method)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(T*, A0, A1, A2), U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(T *, A0, A1, A2), U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(const T*, A0, A1, A2), const U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(const T *, A0, A1, A2), const U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(volatile T*, A0, A1, A2), volatile U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(volatile T *, A0, A1, A2), volatile U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(const volatile T*, A0, A1, A2), const volatile U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(const volatile T *, A0, A1, A2), const volatile U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a function object @@ -1897,7 +2059,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2))) { + Callback(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2))) + { generate(f); } @@ -1906,7 +2069,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2) const)) { + Callback(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2) const)) + { generate(f); } @@ -1915,7 +2079,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2) volatile)) { + Callback(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2) volatile)) + { generate(f); } @@ -1924,7 +2089,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2) const volatile)) { + Callback(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2) const volatile)) + { generate(f); } @@ -1936,8 +2102,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(U *obj, R (*func)(T*, A0, A1, A2)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(U *obj, R(*func)(T *, A0, A1, A2)) + { new (this) Callback(func, obj); } @@ -1949,8 +2116,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(const U *obj, R (*func)(const T*, A0, A1, A2)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(const U *obj, R(*func)(const T *, A0, A1, A2)) + { new (this) Callback(func, obj); } @@ -1962,8 +2130,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(volatile U *obj, R (*func)(volatile T*, A0, A1, A2)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(volatile U *obj, R(*func)(volatile T *, A0, A1, A2)) + { new (this) Callback(func, obj); } @@ -1975,14 +2144,16 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(const volatile U *obj, R (*func)(const volatile T*, A0, A1, A2)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(const volatile U *obj, R(*func)(const volatile T *, A0, A1, A2)) + { new (this) Callback(func, obj); } /** Destroy a callback */ - ~Callback() { + ~Callback() + { if (_ops) { _ops->dtor(this); } @@ -1994,8 +2165,9 @@ class Callback { * Replaced by simple assignment 'Callback cb = func' */ MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(A0, A1, A2)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(A0, A1, A2)) + { this->~Callback(); new (this) Callback(func); } @@ -2006,8 +2178,9 @@ class Callback { * Replaced by simple assignment 'Callback cb = func' */ MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const Callback &func) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const Callback &func) + { this->~Callback(); new (this) Callback(func); } @@ -2020,8 +2193,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(U *obj, R (T::*method)(A0, A1, A2)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(U *obj, R(T::*method)(A0, A1, A2)) + { this->~Callback(); new (this) Callback(obj, method); } @@ -2034,8 +2208,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const U *obj, R (T::*method)(A0, A1, A2) const) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const U *obj, R(T::*method)(A0, A1, A2) const) + { this->~Callback(); new (this) Callback(obj, method); } @@ -2048,8 +2223,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(volatile U *obj, R (T::*method)(A0, A1, A2) volatile) { + "Replaced by simple assignment 'Callback cb = func") + void attach(volatile U *obj, R(T::*method)(A0, A1, A2) volatile) + { this->~Callback(); new (this) Callback(obj, method); } @@ -2062,8 +2238,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const volatile U *obj, R (T::*method)(A0, A1, A2) const volatile) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const volatile U *obj, R(T::*method)(A0, A1, A2) const volatile) + { this->~Callback(); new (this) Callback(obj, method); } @@ -2076,8 +2253,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(T*, A0, A1, A2), U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(T *, A0, A1, A2), U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -2090,8 +2268,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(const T*, A0, A1, A2), const U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(const T *, A0, A1, A2), const U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -2104,8 +2283,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(volatile T*, A0, A1, A2), volatile U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(volatile T *, A0, A1, A2), volatile U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -2118,8 +2298,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(const volatile T*, A0, A1, A2), const volatile U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(const volatile T *, A0, A1, A2), const volatile U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -2132,8 +2313,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2))) { + "Replaced by simple assignment 'Callback cb = func") + void attach(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2))) + { this->~Callback(); new (this) Callback(f); } @@ -2146,8 +2328,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2) const)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2) const)) + { this->~Callback(); new (this) Callback(f); } @@ -2160,8 +2343,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2) volatile)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2) volatile)) + { this->~Callback(); new (this) Callback(f); } @@ -2174,8 +2358,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2) const volatile)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2) const volatile)) + { this->~Callback(); new (this) Callback(f); } @@ -2188,8 +2373,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(U *obj, R (*func)(T*, A0, A1, A2)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(U *obj, R(*func)(T *, A0, A1, A2)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -2202,8 +2388,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(const U *obj, R (*func)(const T*, A0, A1, A2)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(const U *obj, R(*func)(const T *, A0, A1, A2)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -2216,8 +2403,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(volatile U *obj, R (*func)(volatile T*, A0, A1, A2)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(volatile U *obj, R(*func)(volatile T *, A0, A1, A2)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -2230,15 +2418,17 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(const volatile U *obj, R (*func)(const volatile T*, A0, A1, A2)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(const volatile U *obj, R(*func)(const volatile T *, A0, A1, A2)) + { this->~Callback(); new (this) Callback(func, obj); } /** Assign a callback */ - Callback &operator=(const Callback &that) { + Callback &operator=(const Callback &that) + { if (this != &that) { this->~Callback(); new (this) Callback(that); @@ -2249,32 +2439,37 @@ class Callback { /** Call the attached function */ - R call(A0 a0, A1 a1, A2 a2) const { + R call(A0 a0, A1 a1, A2 a2) const + { MBED_ASSERT(_ops); return _ops->call(this, a0, a1, a2); } /** Call the attached function */ - R operator()(A0 a0, A1 a1, A2 a2) const { + R operator()(A0 a0, A1 a1, A2 a2) const + { return call(a0, a1, a2); } /** Test if function has been attached */ - operator bool() const { + operator bool() const + { return _ops; } /** Test for equality */ - friend bool operator==(const Callback &l, const Callback &r) { + friend bool operator==(const Callback &l, const Callback &r) + { return memcmp(&l, &r, sizeof(Callback)) == 0; } /** Test for inequality */ - friend bool operator!=(const Callback &l, const Callback &r) { + friend bool operator!=(const Callback &l, const Callback &r) + { return !(l == r); } @@ -2283,11 +2478,12 @@ class Callback { * @param a0 An argument to be called with function func * @param a1 An argument to be called with function func * @param a2 An argument to be called with function func - * @return the value as determined by func which is of + * @return the value as determined by func which is of * type and determined by the signiture of func */ - static R thunk(void *func, A0 a0, A1 a1, A2 a2) { - return static_cast(func)->call(a0, a1, a2); + static R thunk(void *func, A0 a0, A1 a1, A2 a2) + { + return static_cast(func)->call(a0, a1, a2); } private: @@ -2297,21 +2493,22 @@ class Callback { struct _class; union { void (*_staticfunc)(A0, A1, A2); - void (*_boundfunc)(_class*, A0, A1, A2); + void (*_boundfunc)(_class *, A0, A1, A2); void (_class::*_methodfunc)(A0, A1, A2); } _func; void *_obj; // Dynamically dispatched operations const struct ops { - R (*call)(const void*, A0, A1, A2); - void (*move)(void*, const void*); - void (*dtor)(void*); + R(*call)(const void *, A0, A1, A2); + void (*move)(void *, const void *); + void (*dtor)(void *); } *_ops; // Generate operations for function object template - void generate(const F &f) { + void generate(const F &f) + { static const ops ops = { &Callback::function_call, &Callback::function_move, @@ -2319,7 +2516,7 @@ class Callback { }; MBED_STATIC_ASSERT(sizeof(Callback) - sizeof(_ops) >= sizeof(F), - "Type F must not exceed the size of the Callback class"); + "Type F must not exceed the size of the Callback class"); memset(this, 0, sizeof(Callback)); new (this) F(f); _ops = &ops; @@ -2327,18 +2524,21 @@ class Callback { // Function attributes template - static R function_call(const void *p, A0 a0, A1 a1, A2 a2) { - return (*(F*)p)(a0, a1, a2); + static R function_call(const void *p, A0 a0, A1 a1, A2 a2) + { + return (*(F *)p)(a0, a1, a2); } template - static void function_move(void *d, const void *p) { - new (d) F(*(F*)p); + static void function_move(void *d, const void *p) + { + new (d) F(*(F *)p); } template - static void function_dtor(void *p) { - ((F*)p)->~F(); + static void function_dtor(void *p) + { + ((F *)p)->~F(); } // Wrappers for functions with context @@ -2350,7 +2550,8 @@ class Callback { method_context(O *obj, M method) : method(method), obj(obj) {} - R operator()(A0 a0, A1 a1, A2 a2) const { + R operator()(A0 a0, A1 a1, A2 a2) const + { return (obj->*method)(a0, a1, a2); } }; @@ -2363,7 +2564,8 @@ class Callback { function_context(F func, A *arg) : func(func), arg(arg) {} - R operator()(A0 a0, A1 a1, A2 a2) const { + R operator()(A0 a0, A1 a1, A2 a2) const + { return func(arg, a0, a1, a2); } }; @@ -2379,7 +2581,8 @@ class Callback { /** Create a Callback with a static function * @param func Static function to attach */ - Callback(R (*func)(A0, A1, A2, A3) = 0) { + Callback(R(*func)(A0, A1, A2, A3) = 0) + { if (!func) { memset(this, 0, sizeof(Callback)); } else { @@ -2390,7 +2593,8 @@ class Callback { /** Attach a Callback * @param func The Callback to attach */ - Callback(const Callback &func) { + Callback(const Callback &func) + { if (func._ops) { func._ops->move(this, &func); } @@ -2402,8 +2606,9 @@ class Callback { * @param method Member function to attach */ template - Callback(U *obj, R (T::*method)(A0, A1, A2, A3)) { - generate(method_context(obj, method)); + Callback(U *obj, R(T::*method)(A0, A1, A2, A3)) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -2411,8 +2616,9 @@ class Callback { * @param method Member function to attach */ template - Callback(const U *obj, R (T::*method)(A0, A1, A2, A3) const) { - generate(method_context(obj, method)); + Callback(const U *obj, R(T::*method)(A0, A1, A2, A3) const) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -2420,8 +2626,9 @@ class Callback { * @param method Member function to attach */ template - Callback(volatile U *obj, R (T::*method)(A0, A1, A2, A3) volatile) { - generate(method_context(obj, method)); + Callback(volatile U *obj, R(T::*method)(A0, A1, A2, A3) volatile) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -2429,44 +2636,49 @@ class Callback { * @param method Member function to attach */ template - Callback(const volatile U *obj, R (T::*method)(A0, A1, A2, A3) const volatile) { - generate(method_context(obj, method)); + Callback(const volatile U *obj, R(T::*method)(A0, A1, A2, A3) const volatile) + { + generate(method_context(obj, method)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(T*, A0, A1, A2, A3), U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(T *, A0, A1, A2, A3), U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(const T*, A0, A1, A2, A3), const U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(const T *, A0, A1, A2, A3), const U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(volatile T*, A0, A1, A2, A3), volatile U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(volatile T *, A0, A1, A2, A3), volatile U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(const volatile T*, A0, A1, A2, A3), const volatile U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(const volatile T *, A0, A1, A2, A3), const volatile U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a function object @@ -2474,7 +2686,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2, A3))) { + Callback(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2, A3))) + { generate(f); } @@ -2483,7 +2696,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2, A3) const)) { + Callback(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2, A3) const)) + { generate(f); } @@ -2492,7 +2706,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2, A3) volatile)) { + Callback(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2, A3) volatile)) + { generate(f); } @@ -2501,7 +2716,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2, A3) const volatile)) { + Callback(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2, A3) const volatile)) + { generate(f); } @@ -2513,8 +2729,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(U *obj, R (*func)(T*, A0, A1, A2, A3)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(U *obj, R(*func)(T *, A0, A1, A2, A3)) + { new (this) Callback(func, obj); } @@ -2526,8 +2743,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(const U *obj, R (*func)(const T*, A0, A1, A2, A3)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(const U *obj, R(*func)(const T *, A0, A1, A2, A3)) + { new (this) Callback(func, obj); } @@ -2539,8 +2757,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(volatile U *obj, R (*func)(volatile T*, A0, A1, A2, A3)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(volatile U *obj, R(*func)(volatile T *, A0, A1, A2, A3)) + { new (this) Callback(func, obj); } @@ -2552,14 +2771,16 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(const volatile U *obj, R (*func)(const volatile T*, A0, A1, A2, A3)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(const volatile U *obj, R(*func)(const volatile T *, A0, A1, A2, A3)) + { new (this) Callback(func, obj); } /** Destroy a callback */ - ~Callback() { + ~Callback() + { if (_ops) { _ops->dtor(this); } @@ -2571,8 +2792,9 @@ class Callback { * Replaced by simple assignment 'Callback cb = func' */ MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(A0, A1, A2, A3)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(A0, A1, A2, A3)) + { this->~Callback(); new (this) Callback(func); } @@ -2583,8 +2805,9 @@ class Callback { * Replaced by simple assignment 'Callback cb = func' */ MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const Callback &func) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const Callback &func) + { this->~Callback(); new (this) Callback(func); } @@ -2597,8 +2820,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(U *obj, R (T::*method)(A0, A1, A2, A3)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(U *obj, R(T::*method)(A0, A1, A2, A3)) + { this->~Callback(); new (this) Callback(obj, method); } @@ -2611,8 +2835,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const U *obj, R (T::*method)(A0, A1, A2, A3) const) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const U *obj, R(T::*method)(A0, A1, A2, A3) const) + { this->~Callback(); new (this) Callback(obj, method); } @@ -2625,8 +2850,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(volatile U *obj, R (T::*method)(A0, A1, A2, A3) volatile) { + "Replaced by simple assignment 'Callback cb = func") + void attach(volatile U *obj, R(T::*method)(A0, A1, A2, A3) volatile) + { this->~Callback(); new (this) Callback(obj, method); } @@ -2639,8 +2865,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const volatile U *obj, R (T::*method)(A0, A1, A2, A3) const volatile) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const volatile U *obj, R(T::*method)(A0, A1, A2, A3) const volatile) + { this->~Callback(); new (this) Callback(obj, method); } @@ -2653,8 +2880,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(T*, A0, A1, A2, A3), U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(T *, A0, A1, A2, A3), U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -2667,8 +2895,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(const T*, A0, A1, A2, A3), const U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(const T *, A0, A1, A2, A3), const U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -2681,8 +2910,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(volatile T*, A0, A1, A2, A3), volatile U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(volatile T *, A0, A1, A2, A3), volatile U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -2695,8 +2925,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(const volatile T*, A0, A1, A2, A3), const volatile U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(const volatile T *, A0, A1, A2, A3), const volatile U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -2709,8 +2940,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2, A3))) { + "Replaced by simple assignment 'Callback cb = func") + void attach(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2, A3))) + { this->~Callback(); new (this) Callback(f); } @@ -2723,8 +2955,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2, A3) const)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2, A3) const)) + { this->~Callback(); new (this) Callback(f); } @@ -2737,8 +2970,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2, A3) volatile)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2, A3) volatile)) + { this->~Callback(); new (this) Callback(f); } @@ -2751,8 +2985,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2, A3) const volatile)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2, A3) const volatile)) + { this->~Callback(); new (this) Callback(f); } @@ -2765,8 +3000,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(U *obj, R (*func)(T*, A0, A1, A2, A3)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(U *obj, R(*func)(T *, A0, A1, A2, A3)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -2779,8 +3015,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(const U *obj, R (*func)(const T*, A0, A1, A2, A3)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(const U *obj, R(*func)(const T *, A0, A1, A2, A3)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -2793,8 +3030,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(volatile U *obj, R (*func)(volatile T*, A0, A1, A2, A3)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(volatile U *obj, R(*func)(volatile T *, A0, A1, A2, A3)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -2807,15 +3045,17 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(const volatile U *obj, R (*func)(const volatile T*, A0, A1, A2, A3)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(const volatile U *obj, R(*func)(const volatile T *, A0, A1, A2, A3)) + { this->~Callback(); new (this) Callback(func, obj); } /** Assign a callback */ - Callback &operator=(const Callback &that) { + Callback &operator=(const Callback &that) + { if (this != &that) { this->~Callback(); new (this) Callback(that); @@ -2826,32 +3066,37 @@ class Callback { /** Call the attached function */ - R call(A0 a0, A1 a1, A2 a2, A3 a3) const { + R call(A0 a0, A1 a1, A2 a2, A3 a3) const + { MBED_ASSERT(_ops); return _ops->call(this, a0, a1, a2, a3); } /** Call the attached function */ - R operator()(A0 a0, A1 a1, A2 a2, A3 a3) const { + R operator()(A0 a0, A1 a1, A2 a2, A3 a3) const + { return call(a0, a1, a2, a3); } /** Test if function has been attached */ - operator bool() const { + operator bool() const + { return _ops; } /** Test for equality */ - friend bool operator==(const Callback &l, const Callback &r) { + friend bool operator==(const Callback &l, const Callback &r) + { return memcmp(&l, &r, sizeof(Callback)) == 0; } /** Test for inequality */ - friend bool operator!=(const Callback &l, const Callback &r) { + friend bool operator!=(const Callback &l, const Callback &r) + { return !(l == r); } @@ -2861,11 +3106,12 @@ class Callback { * @param a1 An argument to be called with function func * @param a2 An argument to be called with function func * @param a3 An argument to be called with function func - * @return the value as determined by func which is of + * @return the value as determined by func which is of * type and determined by the signiture of func */ - static R thunk(void *func, A0 a0, A1 a1, A2 a2, A3 a3) { - return static_cast(func)->call(a0, a1, a2, a3); + static R thunk(void *func, A0 a0, A1 a1, A2 a2, A3 a3) + { + return static_cast(func)->call(a0, a1, a2, a3); } private: @@ -2875,21 +3121,22 @@ class Callback { struct _class; union { void (*_staticfunc)(A0, A1, A2, A3); - void (*_boundfunc)(_class*, A0, A1, A2, A3); + void (*_boundfunc)(_class *, A0, A1, A2, A3); void (_class::*_methodfunc)(A0, A1, A2, A3); } _func; void *_obj; // Dynamically dispatched operations const struct ops { - R (*call)(const void*, A0, A1, A2, A3); - void (*move)(void*, const void*); - void (*dtor)(void*); + R(*call)(const void *, A0, A1, A2, A3); + void (*move)(void *, const void *); + void (*dtor)(void *); } *_ops; // Generate operations for function object template - void generate(const F &f) { + void generate(const F &f) + { static const ops ops = { &Callback::function_call, &Callback::function_move, @@ -2897,7 +3144,7 @@ class Callback { }; MBED_STATIC_ASSERT(sizeof(Callback) - sizeof(_ops) >= sizeof(F), - "Type F must not exceed the size of the Callback class"); + "Type F must not exceed the size of the Callback class"); memset(this, 0, sizeof(Callback)); new (this) F(f); _ops = &ops; @@ -2905,18 +3152,21 @@ class Callback { // Function attributes template - static R function_call(const void *p, A0 a0, A1 a1, A2 a2, A3 a3) { - return (*(F*)p)(a0, a1, a2, a3); + static R function_call(const void *p, A0 a0, A1 a1, A2 a2, A3 a3) + { + return (*(F *)p)(a0, a1, a2, a3); } template - static void function_move(void *d, const void *p) { - new (d) F(*(F*)p); + static void function_move(void *d, const void *p) + { + new (d) F(*(F *)p); } template - static void function_dtor(void *p) { - ((F*)p)->~F(); + static void function_dtor(void *p) + { + ((F *)p)->~F(); } // Wrappers for functions with context @@ -2928,7 +3178,8 @@ class Callback { method_context(O *obj, M method) : method(method), obj(obj) {} - R operator()(A0 a0, A1 a1, A2 a2, A3 a3) const { + R operator()(A0 a0, A1 a1, A2 a2, A3 a3) const + { return (obj->*method)(a0, a1, a2, a3); } }; @@ -2941,7 +3192,8 @@ class Callback { function_context(F func, A *arg) : func(func), arg(arg) {} - R operator()(A0 a0, A1 a1, A2 a2, A3 a3) const { + R operator()(A0 a0, A1 a1, A2 a2, A3 a3) const + { return func(arg, a0, a1, a2, a3); } }; @@ -2957,7 +3209,8 @@ class Callback { /** Create a Callback with a static function * @param func Static function to attach */ - Callback(R (*func)(A0, A1, A2, A3, A4) = 0) { + Callback(R(*func)(A0, A1, A2, A3, A4) = 0) + { if (!func) { memset(this, 0, sizeof(Callback)); } else { @@ -2968,7 +3221,8 @@ class Callback { /** Attach a Callback * @param func The Callback to attach */ - Callback(const Callback &func) { + Callback(const Callback &func) + { if (func._ops) { func._ops->move(this, &func); } @@ -2980,8 +3234,9 @@ class Callback { * @param method Member function to attach */ template - Callback(U *obj, R (T::*method)(A0, A1, A2, A3, A4)) { - generate(method_context(obj, method)); + Callback(U *obj, R(T::*method)(A0, A1, A2, A3, A4)) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -2989,8 +3244,9 @@ class Callback { * @param method Member function to attach */ template - Callback(const U *obj, R (T::*method)(A0, A1, A2, A3, A4) const) { - generate(method_context(obj, method)); + Callback(const U *obj, R(T::*method)(A0, A1, A2, A3, A4) const) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -2998,8 +3254,9 @@ class Callback { * @param method Member function to attach */ template - Callback(volatile U *obj, R (T::*method)(A0, A1, A2, A3, A4) volatile) { - generate(method_context(obj, method)); + Callback(volatile U *obj, R(T::*method)(A0, A1, A2, A3, A4) volatile) + { + generate(method_context(obj, method)); } /** Create a Callback with a member function @@ -3007,44 +3264,49 @@ class Callback { * @param method Member function to attach */ template - Callback(const volatile U *obj, R (T::*method)(A0, A1, A2, A3, A4) const volatile) { - generate(method_context(obj, method)); + Callback(const volatile U *obj, R(T::*method)(A0, A1, A2, A3, A4) const volatile) + { + generate(method_context(obj, method)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(T*, A0, A1, A2, A3, A4), U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(T *, A0, A1, A2, A3, A4), U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(const T*, A0, A1, A2, A3, A4), const U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(const T *, A0, A1, A2, A3, A4), const U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(volatile T*, A0, A1, A2, A3, A4), volatile U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(volatile T *, A0, A1, A2, A3, A4), volatile U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a static function and bound pointer * @param func Static function to attach - * @param arg Pointer argument to function + * @param arg Pointer argument to function */ template - Callback(R (*func)(const volatile T*, A0, A1, A2, A3, A4), const volatile U *arg) { - generate(function_context(func, arg)); + Callback(R(*func)(const volatile T *, A0, A1, A2, A3, A4), const volatile U *arg) + { + generate(function_context(func, arg)); } /** Create a Callback with a function object @@ -3052,7 +3314,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2, A3, A4))) { + Callback(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2, A3, A4))) + { generate(f); } @@ -3061,7 +3324,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2, A3, A4) const)) { + Callback(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2, A3, A4) const)) + { generate(f); } @@ -3070,7 +3334,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2, A3, A4) volatile)) { + Callback(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2, A3, A4) volatile)) + { generate(f); } @@ -3079,7 +3344,8 @@ class Callback { * @note The function object is limited to a single word of storage */ template - Callback(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2, A3, A4) const volatile)) { + Callback(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2, A3, A4) const volatile)) + { generate(f); } @@ -3091,8 +3357,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(U *obj, R (*func)(T*, A0, A1, A2, A3, A4)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(U *obj, R(*func)(T *, A0, A1, A2, A3, A4)) + { new (this) Callback(func, obj); } @@ -3104,8 +3371,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(const U *obj, R (*func)(const T*, A0, A1, A2, A3, A4)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(const U *obj, R(*func)(const T *, A0, A1, A2, A3, A4)) + { new (this) Callback(func, obj); } @@ -3117,8 +3385,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(volatile U *obj, R (*func)(volatile T*, A0, A1, A2, A3, A4)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(volatile U *obj, R(*func)(volatile T *, A0, A1, A2, A3, A4)) + { new (this) Callback(func, obj); } @@ -3130,14 +3399,16 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to Callback(func, arg)") - Callback(const volatile U *obj, R (*func)(const volatile T*, A0, A1, A2, A3, A4)) { + "Arguments to callback have been reordered to Callback(func, arg)") + Callback(const volatile U *obj, R(*func)(const volatile T *, A0, A1, A2, A3, A4)) + { new (this) Callback(func, obj); } /** Destroy a callback */ - ~Callback() { + ~Callback() + { if (_ops) { _ops->dtor(this); } @@ -3149,8 +3420,9 @@ class Callback { * Replaced by simple assignment 'Callback cb = func' */ MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(A0, A1, A2, A3, A4)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(A0, A1, A2, A3, A4)) + { this->~Callback(); new (this) Callback(func); } @@ -3161,8 +3433,9 @@ class Callback { * Replaced by simple assignment 'Callback cb = func' */ MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const Callback &func) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const Callback &func) + { this->~Callback(); new (this) Callback(func); } @@ -3175,8 +3448,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(U *obj, R (T::*method)(A0, A1, A2, A3, A4)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(U *obj, R(T::*method)(A0, A1, A2, A3, A4)) + { this->~Callback(); new (this) Callback(obj, method); } @@ -3189,8 +3463,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const U *obj, R (T::*method)(A0, A1, A2, A3, A4) const) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const U *obj, R(T::*method)(A0, A1, A2, A3, A4) const) + { this->~Callback(); new (this) Callback(obj, method); } @@ -3203,8 +3478,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(volatile U *obj, R (T::*method)(A0, A1, A2, A3, A4) volatile) { + "Replaced by simple assignment 'Callback cb = func") + void attach(volatile U *obj, R(T::*method)(A0, A1, A2, A3, A4) volatile) + { this->~Callback(); new (this) Callback(obj, method); } @@ -3217,8 +3493,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const volatile U *obj, R (T::*method)(A0, A1, A2, A3, A4) const volatile) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const volatile U *obj, R(T::*method)(A0, A1, A2, A3, A4) const volatile) + { this->~Callback(); new (this) Callback(obj, method); } @@ -3231,8 +3508,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(T*, A0, A1, A2, A3, A4), U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(T *, A0, A1, A2, A3, A4), U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -3245,8 +3523,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(const T*, A0, A1, A2, A3, A4), const U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(const T *, A0, A1, A2, A3, A4), const U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -3259,8 +3538,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(volatile T*, A0, A1, A2, A3, A4), volatile U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(volatile T *, A0, A1, A2, A3, A4), volatile U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -3273,8 +3553,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(R (*func)(const volatile T*, A0, A1, A2, A3, A4), const volatile U *arg) { + "Replaced by simple assignment 'Callback cb = func") + void attach(R(*func)(const volatile T *, A0, A1, A2, A3, A4), const volatile U *arg) + { this->~Callback(); new (this) Callback(func, arg); } @@ -3287,8 +3568,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2, A3, A4))) { + "Replaced by simple assignment 'Callback cb = func") + void attach(F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2, A3, A4))) + { this->~Callback(); new (this) Callback(f); } @@ -3301,8 +3583,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2, A3, A4) const)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2, A3, A4) const)) + { this->~Callback(); new (this) Callback(f); } @@ -3315,8 +3598,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2, A3, A4) volatile)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2, A3, A4) volatile)) + { this->~Callback(); new (this) Callback(f); } @@ -3329,8 +3613,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.4", - "Replaced by simple assignment 'Callback cb = func") - void attach(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R (F::*)(A0, A1, A2, A3, A4) const volatile)) { + "Replaced by simple assignment 'Callback cb = func") + void attach(const volatile F f, MBED_ENABLE_IF_CALLBACK_COMPATIBLE(F, R(F::*)(A0, A1, A2, A3, A4) const volatile)) + { this->~Callback(); new (this) Callback(f); } @@ -3343,8 +3628,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(U *obj, R (*func)(T*, A0, A1, A2, A3, A4)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(U *obj, R(*func)(T *, A0, A1, A2, A3, A4)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -3357,8 +3643,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(const U *obj, R (*func)(const T*, A0, A1, A2, A3, A4)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(const U *obj, R(*func)(const T *, A0, A1, A2, A3, A4)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -3371,8 +3658,9 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(volatile U *obj, R (*func)(volatile T*, A0, A1, A2, A3, A4)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(volatile U *obj, R(*func)(volatile T *, A0, A1, A2, A3, A4)) + { this->~Callback(); new (this) Callback(func, obj); } @@ -3385,15 +3673,17 @@ class Callback { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to attach(func, arg)") - void attach(const volatile U *obj, R (*func)(const volatile T*, A0, A1, A2, A3, A4)) { + "Arguments to callback have been reordered to attach(func, arg)") + void attach(const volatile U *obj, R(*func)(const volatile T *, A0, A1, A2, A3, A4)) + { this->~Callback(); new (this) Callback(func, obj); } /** Assign a callback */ - Callback &operator=(const Callback &that) { + Callback &operator=(const Callback &that) + { if (this != &that) { this->~Callback(); new (this) Callback(that); @@ -3404,32 +3694,37 @@ class Callback { /** Call the attached function */ - R call(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) const { + R call(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) const + { MBED_ASSERT(_ops); return _ops->call(this, a0, a1, a2, a3, a4); } /** Call the attached function */ - R operator()(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) const { + R operator()(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) const + { return call(a0, a1, a2, a3, a4); } /** Test if function has been attached */ - operator bool() const { + operator bool() const + { return _ops; } /** Test for equality */ - friend bool operator==(const Callback &l, const Callback &r) { + friend bool operator==(const Callback &l, const Callback &r) + { return memcmp(&l, &r, sizeof(Callback)) == 0; } /** Test for inequality */ - friend bool operator!=(const Callback &l, const Callback &r) { + friend bool operator!=(const Callback &l, const Callback &r) + { return !(l == r); } @@ -3440,11 +3735,12 @@ class Callback { * @param a2 An argument to be called with function func * @param a3 An argument to be called with function func * @param a4 An argument to be called with function func - * @return the value as determined by func which is of + * @return the value as determined by func which is of * type and determined by the signiture of func */ - static R thunk(void *func, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { - return static_cast(func)->call(a0, a1, a2, a3, a4); + static R thunk(void *func, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) + { + return static_cast(func)->call(a0, a1, a2, a3, a4); } private: @@ -3454,21 +3750,22 @@ class Callback { struct _class; union { void (*_staticfunc)(A0, A1, A2, A3, A4); - void (*_boundfunc)(_class*, A0, A1, A2, A3, A4); + void (*_boundfunc)(_class *, A0, A1, A2, A3, A4); void (_class::*_methodfunc)(A0, A1, A2, A3, A4); } _func; void *_obj; // Dynamically dispatched operations const struct ops { - R (*call)(const void*, A0, A1, A2, A3, A4); - void (*move)(void*, const void*); - void (*dtor)(void*); + R(*call)(const void *, A0, A1, A2, A3, A4); + void (*move)(void *, const void *); + void (*dtor)(void *); } *_ops; // Generate operations for function object template - void generate(const F &f) { + void generate(const F &f) + { static const ops ops = { &Callback::function_call, &Callback::function_move, @@ -3476,7 +3773,7 @@ class Callback { }; MBED_STATIC_ASSERT(sizeof(Callback) - sizeof(_ops) >= sizeof(F), - "Type F must not exceed the size of the Callback class"); + "Type F must not exceed the size of the Callback class"); memset(this, 0, sizeof(Callback)); new (this) F(f); _ops = &ops; @@ -3484,18 +3781,21 @@ class Callback { // Function attributes template - static R function_call(const void *p, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { - return (*(F*)p)(a0, a1, a2, a3, a4); + static R function_call(const void *p, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) + { + return (*(F *)p)(a0, a1, a2, a3, a4); } template - static void function_move(void *d, const void *p) { - new (d) F(*(F*)p); + static void function_move(void *d, const void *p) + { + new (d) F(*(F *)p); } template - static void function_dtor(void *p) { - ((F*)p)->~F(); + static void function_dtor(void *p) + { + ((F *)p)->~F(); } // Wrappers for functions with context @@ -3507,7 +3807,8 @@ class Callback { method_context(O *obj, M method) : method(method), obj(obj) {} - R operator()(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) const { + R operator()(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) const + { return (obj->*method)(a0, a1, a2, a3, a4); } }; @@ -3520,7 +3821,8 @@ class Callback { function_context(F func, A *arg) : func(func), arg(arg) {} - R operator()(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) const { + R operator()(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) const + { return func(arg, a0, a1, a2, a3, a4); } }; @@ -3536,7 +3838,8 @@ typedef Callback event_callback_t; * @return Callback with infered type */ template -Callback callback(R (*func)() = 0) { +Callback callback(R(*func)() = 0) +{ return Callback(func); } @@ -3546,7 +3849,8 @@ Callback callback(R (*func)() = 0) { * @return Callback with infered type */ template -Callback callback(const Callback &func) { +Callback callback(const Callback &func) +{ return Callback(func); } @@ -3557,7 +3861,8 @@ Callback callback(const Callback &func) { * @return Callback with infered type */ template -Callback callback(U *obj, R (T::*method)()) { +Callback callback(U *obj, R(T::*method)()) +{ return Callback(obj, method); } @@ -3568,7 +3873,8 @@ Callback callback(U *obj, R (T::*method)()) { * @return Callback with infered type */ template -Callback callback(const U *obj, R (T::*method)() const) { +Callback callback(const U *obj, R(T::*method)() const) +{ return Callback(obj, method); } @@ -3579,7 +3885,8 @@ Callback callback(const U *obj, R (T::*method)() const) { * @return Callback with infered type */ template -Callback callback(volatile U *obj, R (T::*method)() volatile) { +Callback callback(volatile U *obj, R(T::*method)() volatile) +{ return Callback(obj, method); } @@ -3590,7 +3897,8 @@ Callback callback(volatile U *obj, R (T::*method)() volatile) { * @return Callback with infered type */ template -Callback callback(const volatile U *obj, R (T::*method)() const volatile) { +Callback callback(const volatile U *obj, R(T::*method)() const volatile) +{ return Callback(obj, method); } @@ -3601,7 +3909,8 @@ Callback callback(const volatile U *obj, R (T::*method)() const volatile) { * @return Callback with infered type */ template -Callback callback(R (*func)(T*), U *arg) { +Callback callback(R(*func)(T *), U *arg) +{ return Callback(func, arg); } @@ -3612,7 +3921,8 @@ Callback callback(R (*func)(T*), U *arg) { * @return Callback with infered type */ template -Callback callback(R (*func)(const T*), const U *arg) { +Callback callback(R(*func)(const T *), const U *arg) +{ return Callback(func, arg); } @@ -3623,7 +3933,8 @@ Callback callback(R (*func)(const T*), const U *arg) { * @return Callback with infered type */ template -Callback callback(R (*func)(volatile T*), volatile U *arg) { +Callback callback(R(*func)(volatile T *), volatile U *arg) +{ return Callback(func, arg); } @@ -3634,7 +3945,8 @@ Callback callback(R (*func)(volatile T*), volatile U *arg) { * @return Callback with infered type */ template -Callback callback(R (*func)(const volatile T*), const volatile U *arg) { +Callback callback(R(*func)(const volatile T *), const volatile U *arg) +{ return Callback(func, arg); } @@ -3648,8 +3960,9 @@ Callback callback(R (*func)(const volatile T*), const volatile U *arg) { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(U *obj, R (*func)(T*)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(U *obj, R(*func)(T *)) +{ return Callback(func, obj); } @@ -3663,8 +3976,9 @@ Callback callback(U *obj, R (*func)(T*)) { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(const U *obj, R (*func)(const T*)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(const U *obj, R(*func)(const T *)) +{ return Callback(func, obj); } @@ -3678,8 +3992,9 @@ Callback callback(const U *obj, R (*func)(const T*)) { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(volatile U *obj, R (*func)(volatile T*)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(volatile U *obj, R(*func)(volatile T *)) +{ return Callback(func, obj); } @@ -3693,8 +4008,9 @@ Callback callback(volatile U *obj, R (*func)(volatile T*)) { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(const volatile U *obj, R (*func)(const volatile T*)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(const volatile U *obj, R(*func)(const volatile T *)) +{ return Callback(func, obj); } @@ -3705,7 +4021,8 @@ Callback callback(const volatile U *obj, R (*func)(const volatile T*)) { * @return Callback with infered type */ template -Callback callback(R (*func)(A0) = 0) { +Callback callback(R(*func)(A0) = 0) +{ return Callback(func); } @@ -3715,7 +4032,8 @@ Callback callback(R (*func)(A0) = 0) { * @return Callback with infered type */ template -Callback callback(const Callback &func) { +Callback callback(const Callback &func) +{ return Callback(func); } @@ -3726,7 +4044,8 @@ Callback callback(const Callback &func) { * @return Callback with infered type */ template -Callback callback(U *obj, R (T::*method)(A0)) { +Callback callback(U *obj, R(T::*method)(A0)) +{ return Callback(obj, method); } @@ -3737,7 +4056,8 @@ Callback callback(U *obj, R (T::*method)(A0)) { * @return Callback with infered type */ template -Callback callback(const U *obj, R (T::*method)(A0) const) { +Callback callback(const U *obj, R(T::*method)(A0) const) +{ return Callback(obj, method); } @@ -3748,7 +4068,8 @@ Callback callback(const U *obj, R (T::*method)(A0) const) { * @return Callback with infered type */ template -Callback callback(volatile U *obj, R (T::*method)(A0) volatile) { +Callback callback(volatile U *obj, R(T::*method)(A0) volatile) +{ return Callback(obj, method); } @@ -3759,7 +4080,8 @@ Callback callback(volatile U *obj, R (T::*method)(A0) volatile) { * @return Callback with infered type */ template -Callback callback(const volatile U *obj, R (T::*method)(A0) const volatile) { +Callback callback(const volatile U *obj, R(T::*method)(A0) const volatile) +{ return Callback(obj, method); } @@ -3770,7 +4092,8 @@ Callback callback(const volatile U *obj, R (T::*method)(A0) const volatil * @return Callback with infered type */ template -Callback callback(R (*func)(T*, A0), U *arg) { +Callback callback(R(*func)(T *, A0), U *arg) +{ return Callback(func, arg); } @@ -3781,7 +4104,8 @@ Callback callback(R (*func)(T*, A0), U *arg) { * @return Callback with infered type */ template -Callback callback(R (*func)(const T*, A0), const U *arg) { +Callback callback(R(*func)(const T *, A0), const U *arg) +{ return Callback(func, arg); } @@ -3792,7 +4116,8 @@ Callback callback(R (*func)(const T*, A0), const U *arg) { * @return Callback with infered type */ template -Callback callback(R (*func)(volatile T*, A0), volatile U *arg) { +Callback callback(R(*func)(volatile T *, A0), volatile U *arg) +{ return Callback(func, arg); } @@ -3803,7 +4128,8 @@ Callback callback(R (*func)(volatile T*, A0), volatile U *arg) { * @return Callback with infered type */ template -Callback callback(R (*func)(const volatile T*, A0), const volatile U *arg) { +Callback callback(R(*func)(const volatile T *, A0), const volatile U *arg) +{ return Callback(func, arg); } @@ -3817,8 +4143,9 @@ Callback callback(R (*func)(const volatile T*, A0), const volatile U *arg */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(U *obj, R (*func)(T*, A0)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(U *obj, R(*func)(T *, A0)) +{ return Callback(func, obj); } @@ -3832,8 +4159,9 @@ Callback callback(U *obj, R (*func)(T*, A0)) { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(const U *obj, R (*func)(const T*, A0)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(const U *obj, R(*func)(const T *, A0)) +{ return Callback(func, obj); } @@ -3847,8 +4175,9 @@ Callback callback(const U *obj, R (*func)(const T*, A0)) { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(volatile U *obj, R (*func)(volatile T*, A0)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(volatile U *obj, R(*func)(volatile T *, A0)) +{ return Callback(func, obj); } @@ -3862,8 +4191,9 @@ Callback callback(volatile U *obj, R (*func)(volatile T*, A0)) { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(const volatile U *obj, R (*func)(const volatile T*, A0)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(const volatile U *obj, R(*func)(const volatile T *, A0)) +{ return Callback(func, obj); } @@ -3874,7 +4204,8 @@ Callback callback(const volatile U *obj, R (*func)(const volatile T*, A0) * @return Callback with infered type */ template -Callback callback(R (*func)(A0, A1) = 0) { +Callback callback(R(*func)(A0, A1) = 0) +{ return Callback(func); } @@ -3884,7 +4215,8 @@ Callback callback(R (*func)(A0, A1) = 0) { * @return Callback with infered type */ template -Callback callback(const Callback &func) { +Callback callback(const Callback &func) +{ return Callback(func); } @@ -3895,7 +4227,8 @@ Callback callback(const Callback &func) { * @return Callback with infered type */ template -Callback callback(U *obj, R (T::*method)(A0, A1)) { +Callback callback(U *obj, R(T::*method)(A0, A1)) +{ return Callback(obj, method); } @@ -3906,7 +4239,8 @@ Callback callback(U *obj, R (T::*method)(A0, A1)) { * @return Callback with infered type */ template -Callback callback(const U *obj, R (T::*method)(A0, A1) const) { +Callback callback(const U *obj, R(T::*method)(A0, A1) const) +{ return Callback(obj, method); } @@ -3917,7 +4251,8 @@ Callback callback(const U *obj, R (T::*method)(A0, A1) const) { * @return Callback with infered type */ template -Callback callback(volatile U *obj, R (T::*method)(A0, A1) volatile) { +Callback callback(volatile U *obj, R(T::*method)(A0, A1) volatile) +{ return Callback(obj, method); } @@ -3928,7 +4263,8 @@ Callback callback(volatile U *obj, R (T::*method)(A0, A1) volatile) { * @return Callback with infered type */ template -Callback callback(const volatile U *obj, R (T::*method)(A0, A1) const volatile) { +Callback callback(const volatile U *obj, R(T::*method)(A0, A1) const volatile) +{ return Callback(obj, method); } @@ -3939,7 +4275,8 @@ Callback callback(const volatile U *obj, R (T::*method)(A0, A1) const * @return Callback with infered type */ template -Callback callback(R (*func)(T*, A0, A1), U *arg) { +Callback callback(R(*func)(T *, A0, A1), U *arg) +{ return Callback(func, arg); } @@ -3950,7 +4287,8 @@ Callback callback(R (*func)(T*, A0, A1), U *arg) { * @return Callback with infered type */ template -Callback callback(R (*func)(const T*, A0, A1), const U *arg) { +Callback callback(R(*func)(const T *, A0, A1), const U *arg) +{ return Callback(func, arg); } @@ -3961,7 +4299,8 @@ Callback callback(R (*func)(const T*, A0, A1), const U *arg) { * @return Callback with infered type */ template -Callback callback(R (*func)(volatile T*, A0, A1), volatile U *arg) { +Callback callback(R(*func)(volatile T *, A0, A1), volatile U *arg) +{ return Callback(func, arg); } @@ -3972,7 +4311,8 @@ Callback callback(R (*func)(volatile T*, A0, A1), volatile U *arg) { * @return Callback with infered type */ template -Callback callback(R (*func)(const volatile T*, A0, A1), const volatile U *arg) { +Callback callback(R(*func)(const volatile T *, A0, A1), const volatile U *arg) +{ return Callback(func, arg); } @@ -3986,8 +4326,9 @@ Callback callback(R (*func)(const volatile T*, A0, A1), const volatil */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(U *obj, R (*func)(T*, A0, A1)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(U *obj, R(*func)(T *, A0, A1)) +{ return Callback(func, obj); } @@ -4001,8 +4342,9 @@ Callback callback(U *obj, R (*func)(T*, A0, A1)) { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(const U *obj, R (*func)(const T*, A0, A1)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(const U *obj, R(*func)(const T *, A0, A1)) +{ return Callback(func, obj); } @@ -4016,8 +4358,9 @@ Callback callback(const U *obj, R (*func)(const T*, A0, A1)) { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(volatile U *obj, R (*func)(volatile T*, A0, A1)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(volatile U *obj, R(*func)(volatile T *, A0, A1)) +{ return Callback(func, obj); } @@ -4031,8 +4374,9 @@ Callback callback(volatile U *obj, R (*func)(volatile T*, A0, A1)) { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(const volatile U *obj, R (*func)(const volatile T*, A0, A1)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(const volatile U *obj, R(*func)(const volatile T *, A0, A1)) +{ return Callback(func, obj); } @@ -4043,7 +4387,8 @@ Callback callback(const volatile U *obj, R (*func)(const volatile T*, * @return Callback with infered type */ template -Callback callback(R (*func)(A0, A1, A2) = 0) { +Callback callback(R(*func)(A0, A1, A2) = 0) +{ return Callback(func); } @@ -4053,7 +4398,8 @@ Callback callback(R (*func)(A0, A1, A2) = 0) { * @return Callback with infered type */ template -Callback callback(const Callback &func) { +Callback callback(const Callback &func) +{ return Callback(func); } @@ -4064,7 +4410,8 @@ Callback callback(const Callback &func) { * @return Callback with infered type */ template -Callback callback(U *obj, R (T::*method)(A0, A1, A2)) { +Callback callback(U *obj, R(T::*method)(A0, A1, A2)) +{ return Callback(obj, method); } @@ -4075,7 +4422,8 @@ Callback callback(U *obj, R (T::*method)(A0, A1, A2)) { * @return Callback with infered type */ template -Callback callback(const U *obj, R (T::*method)(A0, A1, A2) const) { +Callback callback(const U *obj, R(T::*method)(A0, A1, A2) const) +{ return Callback(obj, method); } @@ -4086,7 +4434,8 @@ Callback callback(const U *obj, R (T::*method)(A0, A1, A2) const) * @return Callback with infered type */ template -Callback callback(volatile U *obj, R (T::*method)(A0, A1, A2) volatile) { +Callback callback(volatile U *obj, R(T::*method)(A0, A1, A2) volatile) +{ return Callback(obj, method); } @@ -4097,7 +4446,8 @@ Callback callback(volatile U *obj, R (T::*method)(A0, A1, A2) vol * @return Callback with infered type */ template -Callback callback(const volatile U *obj, R (T::*method)(A0, A1, A2) const volatile) { +Callback callback(const volatile U *obj, R(T::*method)(A0, A1, A2) const volatile) +{ return Callback(obj, method); } @@ -4108,7 +4458,8 @@ Callback callback(const volatile U *obj, R (T::*method)(A0, A1, A * @return Callback with infered type */ template -Callback callback(R (*func)(T*, A0, A1, A2), U *arg) { +Callback callback(R(*func)(T *, A0, A1, A2), U *arg) +{ return Callback(func, arg); } @@ -4119,7 +4470,8 @@ Callback callback(R (*func)(T*, A0, A1, A2), U *arg) { * @return Callback with infered type */ template -Callback callback(R (*func)(const T*, A0, A1, A2), const U *arg) { +Callback callback(R(*func)(const T *, A0, A1, A2), const U *arg) +{ return Callback(func, arg); } @@ -4130,7 +4482,8 @@ Callback callback(R (*func)(const T*, A0, A1, A2), const U *arg) * @return Callback with infered type */ template -Callback callback(R (*func)(volatile T*, A0, A1, A2), volatile U *arg) { +Callback callback(R(*func)(volatile T *, A0, A1, A2), volatile U *arg) +{ return Callback(func, arg); } @@ -4141,7 +4494,8 @@ Callback callback(R (*func)(volatile T*, A0, A1, A2), volatile U * @return Callback with infered type */ template -Callback callback(R (*func)(const volatile T*, A0, A1, A2), const volatile U *arg) { +Callback callback(R(*func)(const volatile T *, A0, A1, A2), const volatile U *arg) +{ return Callback(func, arg); } @@ -4155,8 +4509,9 @@ Callback callback(R (*func)(const volatile T*, A0, A1, A2), const */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(U *obj, R (*func)(T*, A0, A1, A2)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(U *obj, R(*func)(T *, A0, A1, A2)) +{ return Callback(func, obj); } @@ -4170,8 +4525,9 @@ Callback callback(U *obj, R (*func)(T*, A0, A1, A2)) { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(const U *obj, R (*func)(const T*, A0, A1, A2)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(const U *obj, R(*func)(const T *, A0, A1, A2)) +{ return Callback(func, obj); } @@ -4185,8 +4541,9 @@ Callback callback(const U *obj, R (*func)(const T*, A0, A1, A2)) */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(volatile U *obj, R (*func)(volatile T*, A0, A1, A2)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(volatile U *obj, R(*func)(volatile T *, A0, A1, A2)) +{ return Callback(func, obj); } @@ -4200,8 +4557,9 @@ Callback callback(volatile U *obj, R (*func)(volatile T*, A0, A1, */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(const volatile U *obj, R (*func)(const volatile T*, A0, A1, A2)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(const volatile U *obj, R(*func)(const volatile T *, A0, A1, A2)) +{ return Callback(func, obj); } @@ -4212,7 +4570,8 @@ Callback callback(const volatile U *obj, R (*func)(const volatile * @return Callback with infered type */ template -Callback callback(R (*func)(A0, A1, A2, A3) = 0) { +Callback callback(R(*func)(A0, A1, A2, A3) = 0) +{ return Callback(func); } @@ -4222,7 +4581,8 @@ Callback callback(R (*func)(A0, A1, A2, A3) = 0) { * @return Callback with infered type */ template -Callback callback(const Callback &func) { +Callback callback(const Callback &func) +{ return Callback(func); } @@ -4233,7 +4593,8 @@ Callback callback(const Callback &func) { * @return Callback with infered type */ template -Callback callback(U *obj, R (T::*method)(A0, A1, A2, A3)) { +Callback callback(U *obj, R(T::*method)(A0, A1, A2, A3)) +{ return Callback(obj, method); } @@ -4244,7 +4605,8 @@ Callback callback(U *obj, R (T::*method)(A0, A1, A2, A3)) { * @return Callback with infered type */ template -Callback callback(const U *obj, R (T::*method)(A0, A1, A2, A3) const) { +Callback callback(const U *obj, R(T::*method)(A0, A1, A2, A3) const) +{ return Callback(obj, method); } @@ -4255,7 +4617,8 @@ Callback callback(const U *obj, R (T::*method)(A0, A1, A2, A3 * @return Callback with infered type */ template -Callback callback(volatile U *obj, R (T::*method)(A0, A1, A2, A3) volatile) { +Callback callback(volatile U *obj, R(T::*method)(A0, A1, A2, A3) volatile) +{ return Callback(obj, method); } @@ -4266,7 +4629,8 @@ Callback callback(volatile U *obj, R (T::*method)(A0, A1, A2, * @return Callback with infered type */ template -Callback callback(const volatile U *obj, R (T::*method)(A0, A1, A2, A3) const volatile) { +Callback callback(const volatile U *obj, R(T::*method)(A0, A1, A2, A3) const volatile) +{ return Callback(obj, method); } @@ -4277,7 +4641,8 @@ Callback callback(const volatile U *obj, R (T::*method)(A0, A * @return Callback with infered type */ template -Callback callback(R (*func)(T*, A0, A1, A2, A3), U *arg) { +Callback callback(R(*func)(T *, A0, A1, A2, A3), U *arg) +{ return Callback(func, arg); } @@ -4288,7 +4653,8 @@ Callback callback(R (*func)(T*, A0, A1, A2, A3), U *arg) { * @return Callback with infered type */ template -Callback callback(R (*func)(const T*, A0, A1, A2, A3), const U *arg) { +Callback callback(R(*func)(const T *, A0, A1, A2, A3), const U *arg) +{ return Callback(func, arg); } @@ -4299,7 +4665,8 @@ Callback callback(R (*func)(const T*, A0, A1, A2, A3), const * @return Callback with infered type */ template -Callback callback(R (*func)(volatile T*, A0, A1, A2, A3), volatile U *arg) { +Callback callback(R(*func)(volatile T *, A0, A1, A2, A3), volatile U *arg) +{ return Callback(func, arg); } @@ -4310,7 +4677,8 @@ Callback callback(R (*func)(volatile T*, A0, A1, A2, A3), vol * @return Callback with infered type */ template -Callback callback(R (*func)(const volatile T*, A0, A1, A2, A3), const volatile U *arg) { +Callback callback(R(*func)(const volatile T *, A0, A1, A2, A3), const volatile U *arg) +{ return Callback(func, arg); } @@ -4324,8 +4692,9 @@ Callback callback(R (*func)(const volatile T*, A0, A1, A2, A3 */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(U *obj, R (*func)(T*, A0, A1, A2, A3)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(U *obj, R(*func)(T *, A0, A1, A2, A3)) +{ return Callback(func, obj); } @@ -4339,8 +4708,9 @@ Callback callback(U *obj, R (*func)(T*, A0, A1, A2, A3)) { */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(const U *obj, R (*func)(const T*, A0, A1, A2, A3)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(const U *obj, R(*func)(const T *, A0, A1, A2, A3)) +{ return Callback(func, obj); } @@ -4354,8 +4724,9 @@ Callback callback(const U *obj, R (*func)(const T*, A0, A1, A */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(volatile U *obj, R (*func)(volatile T*, A0, A1, A2, A3)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(volatile U *obj, R(*func)(volatile T *, A0, A1, A2, A3)) +{ return Callback(func, obj); } @@ -4369,8 +4740,9 @@ Callback callback(volatile U *obj, R (*func)(volatile T*, A0, */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(const volatile U *obj, R (*func)(const volatile T*, A0, A1, A2, A3)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(const volatile U *obj, R(*func)(const volatile T *, A0, A1, A2, A3)) +{ return Callback(func, obj); } @@ -4381,7 +4753,8 @@ Callback callback(const volatile U *obj, R (*func)(const vola * @return Callback with infered type */ template -Callback callback(R (*func)(A0, A1, A2, A3, A4) = 0) { +Callback callback(R(*func)(A0, A1, A2, A3, A4) = 0) +{ return Callback(func); } @@ -4391,7 +4764,8 @@ Callback callback(R (*func)(A0, A1, A2, A3, A4) = 0) { * @return Callback with infered type */ template -Callback callback(const Callback &func) { +Callback callback(const Callback &func) +{ return Callback(func); } @@ -4402,7 +4776,8 @@ Callback callback(const Callback & * @return Callback with infered type */ template -Callback callback(U *obj, R (T::*method)(A0, A1, A2, A3, A4)) { +Callback callback(U *obj, R(T::*method)(A0, A1, A2, A3, A4)) +{ return Callback(obj, method); } @@ -4413,7 +4788,8 @@ Callback callback(U *obj, R (T::*method)(A0, A1, A2, A3, * @return Callback with infered type */ template -Callback callback(const U *obj, R (T::*method)(A0, A1, A2, A3, A4) const) { +Callback callback(const U *obj, R(T::*method)(A0, A1, A2, A3, A4) const) +{ return Callback(obj, method); } @@ -4424,7 +4800,8 @@ Callback callback(const U *obj, R (T::*method)(A0, A1, A2 * @return Callback with infered type */ template -Callback callback(volatile U *obj, R (T::*method)(A0, A1, A2, A3, A4) volatile) { +Callback callback(volatile U *obj, R(T::*method)(A0, A1, A2, A3, A4) volatile) +{ return Callback(obj, method); } @@ -4435,7 +4812,8 @@ Callback callback(volatile U *obj, R (T::*method)(A0, A1, * @return Callback with infered type */ template -Callback callback(const volatile U *obj, R (T::*method)(A0, A1, A2, A3, A4) const volatile) { +Callback callback(const volatile U *obj, R(T::*method)(A0, A1, A2, A3, A4) const volatile) +{ return Callback(obj, method); } @@ -4446,7 +4824,8 @@ Callback callback(const volatile U *obj, R (T::*method)(A * @return Callback with infered type */ template -Callback callback(R (*func)(T*, A0, A1, A2, A3, A4), U *arg) { +Callback callback(R(*func)(T *, A0, A1, A2, A3, A4), U *arg) +{ return Callback(func, arg); } @@ -4457,7 +4836,8 @@ Callback callback(R (*func)(T*, A0, A1, A2, A3, A4), U *a * @return Callback with infered type */ template -Callback callback(R (*func)(const T*, A0, A1, A2, A3, A4), const U *arg) { +Callback callback(R(*func)(const T *, A0, A1, A2, A3, A4), const U *arg) +{ return Callback(func, arg); } @@ -4468,7 +4848,8 @@ Callback callback(R (*func)(const T*, A0, A1, A2, A3, A4) * @return Callback with infered type */ template -Callback callback(R (*func)(volatile T*, A0, A1, A2, A3, A4), volatile U *arg) { +Callback callback(R(*func)(volatile T *, A0, A1, A2, A3, A4), volatile U *arg) +{ return Callback(func, arg); } @@ -4479,7 +4860,8 @@ Callback callback(R (*func)(volatile T*, A0, A1, A2, A3, * @return Callback with infered type */ template -Callback callback(R (*func)(const volatile T*, A0, A1, A2, A3, A4), const volatile U *arg) { +Callback callback(R(*func)(const volatile T *, A0, A1, A2, A3, A4), const volatile U *arg) +{ return Callback(func, arg); } @@ -4493,8 +4875,9 @@ Callback callback(R (*func)(const volatile T*, A0, A1, A2 */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(U *obj, R (*func)(T*, A0, A1, A2, A3, A4)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(U *obj, R(*func)(T *, A0, A1, A2, A3, A4)) +{ return Callback(func, obj); } @@ -4508,8 +4891,9 @@ Callback callback(U *obj, R (*func)(T*, A0, A1, A2, A3, A */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(const U *obj, R (*func)(const T*, A0, A1, A2, A3, A4)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(const U *obj, R(*func)(const T *, A0, A1, A2, A3, A4)) +{ return Callback(func, obj); } @@ -4523,8 +4907,9 @@ Callback callback(const U *obj, R (*func)(const T*, A0, A */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(volatile U *obj, R (*func)(volatile T*, A0, A1, A2, A3, A4)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(volatile U *obj, R(*func)(volatile T *, A0, A1, A2, A3, A4)) +{ return Callback(func, obj); } @@ -4538,8 +4923,9 @@ Callback callback(volatile U *obj, R (*func)(volatile T*, */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "Arguments to callback have been reordered to callback(func, arg)") -Callback callback(const volatile U *obj, R (*func)(const volatile T*, A0, A1, A2, A3, A4)) { + "Arguments to callback have been reordered to callback(func, arg)") +Callback callback(const volatile U *obj, R(*func)(const volatile T *, A0, A1, A2, A3, A4)) +{ return Callback(func, obj); } diff --git a/platform/CircularBuffer.h b/platform/CircularBuffer.h index 00e1eab862c..accb3abce93 100644 --- a/platform/CircularBuffer.h +++ b/platform/CircularBuffer.h @@ -24,17 +24,29 @@ namespace mbed { namespace internal { /* Detect if CounterType of the Circular buffer is of unsigned type. */ template -struct is_unsigned { static const bool value = false; }; +struct is_unsigned { + static const bool value = false; +}; template<> -struct is_unsigned { static const bool value = true; }; +struct is_unsigned { + static const bool value = true; +}; template<> -struct is_unsigned { static const bool value = true; }; +struct is_unsigned { + static const bool value = true; +}; template<> -struct is_unsigned { static const bool value = true; }; +struct is_unsigned { + static const bool value = true; +}; template<> -struct is_unsigned { static const bool value = true; }; +struct is_unsigned { + static const bool value = true; +}; template<> -struct is_unsigned { static const bool value = true; }; +struct is_unsigned { + static const bool value = true; +}; }; /** \addtogroup platform */ @@ -52,7 +64,8 @@ struct is_unsigned { static const bool value = true; }; template class CircularBuffer { public: - CircularBuffer() : _head(0), _tail(0), _full(false) { + CircularBuffer() : _head(0), _tail(0), _full(false) + { MBED_STATIC_ASSERT( internal::is_unsigned::value, "CounterType must be unsigned" @@ -65,7 +78,8 @@ class CircularBuffer { ); } - ~CircularBuffer() { + ~CircularBuffer() + { } /** Push the transaction to the buffer. This overwrites the buffer if it's @@ -73,7 +87,8 @@ class CircularBuffer { * * @param data Data to be pushed to the buffer */ - void push(const T& data) { + void push(const T &data) + { core_util_critical_section_enter(); if (full()) { _tail++; @@ -92,7 +107,8 @@ class CircularBuffer { * @param data Data to be popped from the buffer * @return True if the buffer is not empty and data contains a transaction, false otherwise */ - bool pop(T& data) { + bool pop(T &data) + { bool data_popped = false; core_util_critical_section_enter(); if (!empty()) { @@ -109,7 +125,8 @@ class CircularBuffer { * * @return True if the buffer is empty, false if not */ - bool empty() const { + bool empty() const + { core_util_critical_section_enter(); bool is_empty = (_head == _tail) && !_full; core_util_critical_section_exit(); @@ -120,7 +137,8 @@ class CircularBuffer { * * @return True if the buffer is full, false if not */ - bool full() const { + bool full() const + { core_util_critical_section_enter(); bool full = _full; core_util_critical_section_exit(); @@ -130,7 +148,8 @@ class CircularBuffer { /** Reset the buffer * */ - void reset() { + void reset() + { core_util_critical_section_enter(); _head = 0; _tail = 0; @@ -139,7 +158,8 @@ class CircularBuffer { } /** Get the number of elements currently stored in the circular_buffer */ - CounterType size() const { + CounterType size() const + { core_util_critical_section_enter(); CounterType elements; if (!_full) { @@ -160,7 +180,8 @@ class CircularBuffer { * @param data Data to be peeked from the buffer * @return True if the buffer is not empty and data contains a transaction, false otherwise */ - bool peek(T& data) const { + bool peek(T &data) const + { bool data_updated = false; core_util_critical_section_enter(); if (!empty()) { @@ -170,7 +191,7 @@ class CircularBuffer { core_util_critical_section_exit(); return data_updated; } - + private: T _pool[BufferSize]; volatile CounterType _head; diff --git a/platform/CriticalSectionLock.h b/platform/CriticalSectionLock.h index 17fa4750ead..f654f5d26ca 100644 --- a/platform/CriticalSectionLock.h +++ b/platform/CriticalSectionLock.h @@ -57,12 +57,12 @@ namespace mbed { */ class CriticalSectionLock { public: - CriticalSectionLock() + CriticalSectionLock() { core_util_critical_section_enter(); } - ~CriticalSectionLock() + ~CriticalSectionLock() { core_util_critical_section_exit(); } @@ -72,8 +72,8 @@ class CriticalSectionLock { * */ MBED_DEPRECATED_SINCE("mbed-os-5.8", - "This function is inconsistent with RAII and is being removed in the future." - "Replaced by static function CriticalSectionLock::enable.") + "This function is inconsistent with RAII and is being removed in the future." + "Replaced by static function CriticalSectionLock::enable.") void lock() { core_util_critical_section_enter(); @@ -84,8 +84,8 @@ class CriticalSectionLock { * */ MBED_DEPRECATED_SINCE("mbed-os-5.8", - "This function is inconsistent with RAII and is being removed in the future." - "Replaced by static function CriticalSectionLock::disable.") + "This function is inconsistent with RAII and is being removed in the future." + "Replaced by static function CriticalSectionLock::disable.") void unlock() { core_util_critical_section_exit(); diff --git a/platform/DirHandle.h b/platform/DirHandle.h index 033ed92eb7a..d0b04d04f27 100644 --- a/platform/DirHandle.h +++ b/platform/DirHandle.h @@ -80,7 +80,7 @@ class DirHandle : private NonCopyable { */ virtual void rewind() = 0; - /** Get the sizeof the directory + /** Get the sizeof the directory * * @return Number of files in the directory */ @@ -108,7 +108,10 @@ class DirHandle : private NonCopyable { * @deprecated Replaced by `int DirHandle::close()' */ MBED_DEPRECATED_SINCE("mbed-os-5.4", "Replaced by DirHandle::close") - virtual int closedir() { return close(); }; + virtual int closedir() + { + return close(); + }; /** Return the directory entry at the current position, and * advances the position to the next entry. @@ -130,7 +133,10 @@ class DirHandle : private NonCopyable { * @deprecated Replaced by `void DirHandle::rewind()' */ MBED_DEPRECATED_SINCE("mbed-os-5.4", "Replaced by DirHandle::rewind") - virtual void rewinddir() { rewind(); } + virtual void rewinddir() + { + rewind(); + } /** Returns the current position of the DirHandle. * @@ -140,7 +146,10 @@ class DirHandle : private NonCopyable { * @deprecated Replaced by `off_t DirHandle::tell()' */ MBED_DEPRECATED_SINCE("mbed-os-5.4", "Replaced by DirHandle::tell") - virtual off_t telldir() { return tell(); } + virtual off_t telldir() + { + return tell(); + } /** Sets the position of the DirHandle. * @@ -148,7 +157,10 @@ class DirHandle : private NonCopyable { * @deprecated Replaced by `void DirHandle::seek(off_t offset)' */ MBED_DEPRECATED_SINCE("mbed-os-5.4", "Replaced by DirHandle::seek") - virtual void seekdir(off_t location) { seek(location); } + virtual void seekdir(off_t location) + { + seek(location); + } }; /**@}*/ diff --git a/platform/FileBase.cpp b/platform/FileBase.cpp index 4458f584b48..a6ca848a82b 100644 --- a/platform/FileBase.cpp +++ b/platform/FileBase.cpp @@ -23,8 +23,9 @@ FileBase *FileBase::_head = NULL; SingletonPtr FileBase::_mutex; FileBase::FileBase(const char *name, PathType t) : _next(NULL), - _name(name), - _path_type(t) { + _name(name), + _path_type(t) +{ _mutex->lock(); if (name != NULL) { // put this object at head of the list @@ -36,7 +37,8 @@ FileBase::FileBase(const char *name, PathType t) : _next(NULL), _mutex->unlock(); } -FileBase::~FileBase() { +FileBase::~FileBase() +{ _mutex->lock(); if (_name != NULL) { // remove this object from the list @@ -53,12 +55,13 @@ FileBase::~FileBase() { _mutex->unlock(); if (getPathType() == FilePathType) { - extern void remove_filehandle(FileHandle *file); - remove_filehandle(static_cast(static_cast(this))); + extern void remove_filehandle(FileHandle * file); + remove_filehandle(static_cast(static_cast(this))); } } -FileBase *FileBase::lookup(const char *name, unsigned int len) { +FileBase *FileBase::lookup(const char *name, unsigned int len) +{ _mutex->lock(); FileBase *p = _head; while (p != NULL) { @@ -73,7 +76,8 @@ FileBase *FileBase::lookup(const char *name, unsigned int len) { return NULL; } -FileBase *FileBase::get(int n) { +FileBase *FileBase::get(int n) +{ _mutex->lock(); FileBase *p = _head; int m = 0; @@ -90,12 +94,14 @@ FileBase *FileBase::get(int n) { return NULL; } -const char* FileBase::getName(void) { +const char *FileBase::getName(void) +{ // Constant read so no lock needed return _name; } -PathType FileBase::getPathType(void) { +PathType FileBase::getPathType(void) +{ // Constant read so no lock needed return _path_type; } diff --git a/platform/FileBase.h b/platform/FileBase.h index 4f6371923b2..0ef63b40af1 100644 --- a/platform/FileBase.h +++ b/platform/FileBase.h @@ -27,7 +27,7 @@ typedef int FILEHANDLE; #include "platform/NonCopyable.h" namespace mbed { - + typedef enum { FilePathType, FileSystemPathType @@ -42,13 +42,13 @@ typedef enum { /** Class FileBase * */ - + class FileBase : private NonCopyable { public: FileBase(const char *name, PathType t); virtual ~FileBase(); - const char* getName(void); + const char *getName(void); PathType getPathType(void); static FileBase *lookup(const char *name, unsigned int len); @@ -61,7 +61,7 @@ class FileBase : private NonCopyable { static SingletonPtr _mutex; FileBase *_next; - const char * const _name; + const char *const _name; const PathType _path_type; }; diff --git a/platform/FileHandle.h b/platform/FileHandle.h index 7c2c8f38322..03b6399a66e 100644 --- a/platform/FileHandle.h +++ b/platform/FileHandle.h @@ -69,7 +69,7 @@ class FileHandle : private NonCopyable { * * if some data can be written, and non-blocking set, write partial * * @param buffer The buffer to write from - * @param size The number of bytes to write + * @param size The number of bytes to write * @return The number of bytes written, negative error on failure */ virtual ssize_t write(const void *buffer, size_t size) = 0; diff --git a/platform/FilePath.cpp b/platform/FilePath.cpp index ee348993f50..92511d1b687 100644 --- a/platform/FilePath.cpp +++ b/platform/FilePath.cpp @@ -17,11 +17,12 @@ namespace mbed { -FilePath::FilePath(const char* file_path) : file_name(NULL), fb(NULL) { +FilePath::FilePath(const char *file_path) : file_name(NULL), fb(NULL) +{ // skip slashes file_path += strspn(file_path, "/"); - const char* file_system = file_path; + const char *file_system = file_path; file_name = file_system; int len = 0; while (true) { @@ -41,37 +42,45 @@ FilePath::FilePath(const char* file_path) : file_name(NULL), fb(NULL) { fb = FileBase::lookup(file_system, len); } -const char* FilePath::fileName(void) { +const char *FilePath::fileName(void) +{ return file_name; } -bool FilePath::isFileSystem(void) { - if (NULL == fb) +bool FilePath::isFileSystem(void) +{ + if (NULL == fb) { return false; + } return (fb->getPathType() == FileSystemPathType); } -FileSystemLike* FilePath::fileSystem(void) { +FileSystemLike *FilePath::fileSystem(void) +{ if (isFileSystem()) { - return static_cast(fb); + return static_cast(fb); } return NULL; } -bool FilePath::isFile(void) { - if (NULL == fb) +bool FilePath::isFile(void) +{ + if (NULL == fb) { return false; + } return (fb->getPathType() == FilePathType); } -FileLike* FilePath::file(void) { +FileLike *FilePath::file(void) +{ if (isFile()) { - return (FileLike*)fb; + return (FileLike *)fb; } return NULL; } -bool FilePath::exists(void) { +bool FilePath::exists(void) +{ return fb != NULL; } diff --git a/platform/FilePath.h b/platform/FilePath.h index d380041ca05..6183ffbcefe 100644 --- a/platform/FilePath.h +++ b/platform/FilePath.h @@ -33,27 +33,27 @@ class FileSystem; /** Class FilePath * */ - + class FilePath { public: /** Constructor FilePath * * @param file_path The path of file. - */ - FilePath(const char* file_path); + */ + FilePath(const char *file_path); - const char* fileName(void); + const char *fileName(void); bool isFileSystem(void); - FileSystemLike* fileSystem(void); + FileSystemLike *fileSystem(void); bool isFile(void); - FileLike* file(void); + FileLike *file(void); bool exists(void); private: - const char* file_name; - FileBase* fb; + const char *file_name; + FileBase *fb; }; /**@}*/ diff --git a/platform/FileSystemHandle.h b/platform/FileSystemHandle.h index 349e25855ee..750dab056a5 100644 --- a/platform/FileSystemHandle.h +++ b/platform/FileSystemHandle.h @@ -101,7 +101,7 @@ class FileSystemHandle : private NonCopyable { * @param buf The stat buffer to write to * @return 0 on success, negative error code on failure */ - virtual int statvfs(const char *path, struct statvfs *buf); + virtual int statvfs(const char *path, struct statvfs *buf); }; /**@}*/ diff --git a/platform/FileSystemLike.h b/platform/FileSystemLike.h index aef7913cf67..abcd6358d39 100644 --- a/platform/FileSystemLike.h +++ b/platform/FileSystemLike.h @@ -59,7 +59,7 @@ class FileSystemLike : public FileSystemHandle, public FileBase, private NonCopy * @deprecated Replaced by `int open(FileHandle **, ...)` for propagating error codes */ MBED_DEPRECATED_SINCE("mbed-os-5.5", - "Replaced by `int open(FileHandle **, ...)` for propagating error codes") + "Replaced by `int open(FileHandle **, ...)` for propagating error codes") FileHandle *open(const char *path, int flags) { FileHandle *file; @@ -74,7 +74,7 @@ class FileSystemLike : public FileSystemHandle, public FileBase, private NonCopy * @deprecated Replaced by `int open(DirHandle **, ...)` for propagating error codes */ MBED_DEPRECATED_SINCE("mbed-os-5.5", - "Replaced by `int open(DirHandle **, ...)` for propagating error codes") + "Replaced by `int open(DirHandle **, ...)` for propagating error codes") DirHandle *opendir(const char *path) { DirHandle *dir; diff --git a/platform/FunctionPointer.h b/platform/FunctionPointer.h index 18c34c2106e..c17f53a9a96 100644 --- a/platform/FunctionPointer.h +++ b/platform/FunctionPointer.h @@ -35,21 +35,23 @@ template class FunctionPointerArg1 : public Callback { public: MBED_DEPRECATED_SINCE("mbed-os-5.1", - "FunctionPointerArg1 has been replaced by Callback") - FunctionPointerArg1(R (*function)(A1) = 0) + "FunctionPointerArg1 has been replaced by Callback") + FunctionPointerArg1(R(*function)(A1) = 0) : Callback(function) {} template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "FunctionPointerArg1 has been replaced by Callback") - FunctionPointerArg1(T *object, R (T::*member)(A1)) + "FunctionPointerArg1 has been replaced by Callback") + FunctionPointerArg1(T *object, R(T::*member)(A1)) : Callback(object, member) {} - R (*get_function())(A1) { - return *reinterpret_cast(this); + R(*get_function())(A1) + { + return *reinterpret_cast(this); } - R call(A1 a1) const { + R call(A1 a1) const + { if (!Callback::operator bool()) { return (R)0; } @@ -57,7 +59,8 @@ class FunctionPointerArg1 : public Callback { return Callback::call(a1); } - R operator()(A1 a1) const { + R operator()(A1 a1) const + { return Callback::call(a1); } }; @@ -66,21 +69,23 @@ template class FunctionPointerArg1 : public Callback { public: MBED_DEPRECATED_SINCE("mbed-os-5.1", - "FunctionPointer has been replaced by Callback") - FunctionPointerArg1(R (*function)() = 0) + "FunctionPointer has been replaced by Callback") + FunctionPointerArg1(R(*function)() = 0) : Callback(function) {} template MBED_DEPRECATED_SINCE("mbed-os-5.1", - "FunctionPointer has been replaced by Callback") - FunctionPointerArg1(T *object, R (T::*member)()) + "FunctionPointer has been replaced by Callback") + FunctionPointerArg1(T *object, R(T::*member)()) : Callback(object, member) {} - R (*get_function())() { - return *reinterpret_cast(this); + R(*get_function())() + { + return *reinterpret_cast(this); } - R call() const { + R call() const + { if (!Callback::operator bool()) { return (R)0; } @@ -88,7 +93,8 @@ class FunctionPointerArg1 : public Callback { return Callback::call(); } - R operator()() const { + R operator()() const + { return Callback::call(); } }; diff --git a/platform/LocalFileSystem.cpp b/platform/LocalFileSystem.cpp index 13daee31c26..c5c7d33dff7 100644 --- a/platform/LocalFileSystem.cpp +++ b/platform/LocalFileSystem.cpp @@ -45,7 +45,8 @@ typedef struct { /* File Search info record */ #define RESERVED_FOR_USER_APPLICATIONS (0x100) /* 0x100 - 0x1ff */ #define USR_XFFIND (RESERVED_FOR_USER_APPLICATIONS + 0) -static int xffind (const char *pattern, XFINFO *info) { +static int xffind(const char *pattern, XFINFO *info) +{ unsigned param[4]; param[0] = (unsigned long)pattern; @@ -63,7 +64,8 @@ static int xffind (const char *pattern, XFINFO *info) { #define OPEN_A 8 #define OPEN_INVALID -1 -int posix_to_semihost_open_flags(int flags) { +int posix_to_semihost_open_flags(int flags) +{ /* POSIX flags -> semihosting open mode */ int openmode; if (flags & O_RDWR) { @@ -94,7 +96,8 @@ int posix_to_semihost_open_flags(int flags) { return openmode; } -FILEHANDLE local_file_open(const char* name, int flags) { +FILEHANDLE local_file_open(const char *name, int flags) +{ int openmode = posix_to_semihost_open_flags(flags); if (openmode == OPEN_INVALID) { return (FILEHANDLE)NULL; @@ -108,42 +111,48 @@ FILEHANDLE local_file_open(const char* name, int flags) { return fh; } -LocalFileHandle::LocalFileHandle(FILEHANDLE fh) : _fh(fh), pos(0) { +LocalFileHandle::LocalFileHandle(FILEHANDLE fh) : _fh(fh), pos(0) +{ // No lock needed in constructor } -int LocalFileHandle::close() { +int LocalFileHandle::close() +{ int retval = semihost_close(_fh); delete this; return retval; } -ssize_t LocalFileHandle::write(const void *buffer, size_t length) { +ssize_t LocalFileHandle::write(const void *buffer, size_t length) +{ lock(); - ssize_t n = semihost_write(_fh, (const unsigned char*)buffer, length, 0); // number of characters not written + ssize_t n = semihost_write(_fh, (const unsigned char *)buffer, length, 0); // number of characters not written n = length - n; // number of characters written pos += n; unlock(); return n; } -ssize_t LocalFileHandle::read(void *buffer, size_t length) { +ssize_t LocalFileHandle::read(void *buffer, size_t length) +{ lock(); - ssize_t n = semihost_read(_fh, (unsigned char*)buffer, length, 0); // number of characters not read + ssize_t n = semihost_read(_fh, (unsigned char *)buffer, length, 0); // number of characters not read n = length - n; // number of characters read pos += n; unlock(); return n; } -int LocalFileHandle::isatty() { +int LocalFileHandle::isatty() +{ lock(); int ret = semihost_istty(_fh); unlock(); return ret; } -off_t LocalFileHandle::seek(off_t position, int whence) { +off_t LocalFileHandle::seek(off_t position, int whence) +{ lock(); if (whence == SEEK_CUR) { position += pos; @@ -158,25 +167,29 @@ off_t LocalFileHandle::seek(off_t position, int whence) { return position; } -int LocalFileHandle::sync() { +int LocalFileHandle::sync() +{ lock(); int ret = semihost_ensure(_fh); unlock(); return ret; } -off_t LocalFileHandle::size() { +off_t LocalFileHandle::size() +{ lock(); off_t off = semihost_flen(_fh); unlock(); return off; } -void LocalFileHandle::lock() { +void LocalFileHandle::lock() +{ _mutex.lock(); } -void LocalFileHandle::unlock() { +void LocalFileHandle::unlock() +{ _mutex.unlock(); } @@ -185,18 +198,21 @@ class LocalDirHandle : public DirHandle { public: XFINFO info; - LocalDirHandle() : info() { + LocalDirHandle() : info() + { } - virtual int close() { + virtual int close() + { // No lock can be used in destructor delete this; return 0; } - virtual int read(struct dirent *ent) { + virtual int read(struct dirent *ent) + { lock(); - if (xffind("*", &info)!=0) { + if (xffind("*", &info) != 0) { unlock(); return 0; } @@ -205,20 +221,23 @@ class LocalDirHandle : public DirHandle { return 1; } - virtual void rewind() { + virtual void rewind() + { lock(); info.fileID = 0; unlock(); } - virtual off_t tell() { + virtual off_t tell() + { lock(); int fileId = info.fileID; unlock(); return fileId; } - virtual void seek(off_t offset) { + virtual void seek(off_t offset) + { lock(); info.fileID = offset; unlock(); @@ -227,16 +246,19 @@ class LocalDirHandle : public DirHandle { protected: PlatformMutex _mutex; - virtual void lock() { + virtual void lock() + { _mutex.lock(); } - virtual void unlock() { + virtual void unlock() + { _mutex.unlock(); } }; -int LocalFileSystem::open(FileHandle **file, const char* name, int flags) { +int LocalFileSystem::open(FileHandle **file, const char *name, int flags) +{ // No global state modified so function is thread safe /* reject filenames with / in them */ @@ -260,13 +282,15 @@ int LocalFileSystem::open(FileHandle **file, const char* name, int flags) { return 0; } -int LocalFileSystem::remove(const char *filename) { +int LocalFileSystem::remove(const char *filename) +{ // No global state modified so function is thread safe return semihost_remove(filename); } -int LocalFileSystem::open(DirHandle **dir, const char *name) { +int LocalFileSystem::open(DirHandle **dir, const char *name) +{ // No global state modified so function is thread safe *dir = new LocalDirHandle(); diff --git a/platform/LocalFileSystem.h b/platform/LocalFileSystem.h index ce0baafaf07..78ca4993750 100644 --- a/platform/LocalFileSystem.h +++ b/platform/LocalFileSystem.h @@ -32,7 +32,7 @@ namespace mbed { * @{ */ -FILEHANDLE local_file_open(const char* name, int flags); +FILEHANDLE local_file_open(const char *name, int flags); /** * @class LocalFileHandle @@ -106,7 +106,8 @@ class LocalFileSystem : public FileSystemLike, private NonCopyable { public: - PlatformMutex() { + PlatformMutex() + { // Stub } - ~PlatformMutex() { + ~PlatformMutex() + { // Stub } - void lock() { + void lock() + { // Do nothing } - void unlock() { + void unlock() + { // Do nothing } }; diff --git a/platform/ScopedLock.h b/platform/ScopedLock.h index 674462f2554..8f79fbf7ddd 100644 --- a/platform/ScopedLock.h +++ b/platform/ScopedLock.h @@ -65,7 +65,7 @@ class ScopedLock : private NonCopyable > { * @param lockable reference to the instance of Lockable object * @note lockable object should outlive the ScopedLock object */ - ScopedLock(Lockable& lockable): _lockable(lockable) + ScopedLock(Lockable &lockable): _lockable(lockable) { _lockable.lock(); } @@ -75,7 +75,7 @@ class ScopedLock : private NonCopyable > { _lockable.unlock(); } private: - Lockable& _lockable; + Lockable &_lockable; }; /**@}*/ diff --git a/platform/SingletonPtr.h b/platform/SingletonPtr.h index 848fd099f46..a7f5f6bde5b 100644 --- a/platform/SingletonPtr.h +++ b/platform/SingletonPtr.h @@ -56,7 +56,7 @@ inline static void singleton_lock(void) inline static void singleton_unlock(void) { #ifdef MBED_CONF_RTOS_PRESENT - osMutexRelease (singleton_mutex_id); + osMutexRelease(singleton_mutex_id); #endif } @@ -80,7 +80,8 @@ struct SingletonPtr { * @returns * A pointer to the singleton */ - T* get() { + T *get() + { if (NULL == _ptr) { singleton_lock(); if (NULL == _ptr) { @@ -99,7 +100,8 @@ struct SingletonPtr { * @returns * A pointer to the singleton */ - T* operator->() { + T *operator->() + { return get(); } diff --git a/platform/Stream.cpp b/platform/Stream.cpp index 63d83c5a4e6..3c14bb19c06 100644 --- a/platform/Stream.cpp +++ b/platform/Stream.cpp @@ -19,13 +19,14 @@ namespace mbed { -Stream::Stream(const char *name) : FileLike(name), _file(NULL) { +Stream::Stream(const char *name) : FileLike(name), _file(NULL) +{ // No lock needed in constructor /* open ourselves */ _file = fdopen(this, "w+"); // fdopen() will make us buffered because Stream::isatty() // wrongly returns zero which is not being changed for - // backward compatibility + // backward compatibility if (_file) { mbed_set_unbuffered_stream(_file); } else { @@ -33,47 +34,54 @@ Stream::Stream(const char *name) : FileLike(name), _file(NULL) { } } -Stream::~Stream() { +Stream::~Stream() +{ // No lock can be used in destructor fclose(_file); } -int Stream::putc(int c) { +int Stream::putc(int c) +{ lock(); fflush(_file); int ret = std::fputc(c, _file); unlock(); return ret; } -int Stream::puts(const char *s) { +int Stream::puts(const char *s) +{ lock(); fflush(_file); int ret = std::fputs(s, _file); unlock(); return ret; } -int Stream::getc() { +int Stream::getc() +{ lock(); fflush(_file); int ret = mbed_getc(_file); unlock(); return ret; } -char* Stream::gets(char *s, int size) { +char *Stream::gets(char *s, int size) +{ lock(); fflush(_file); - char *ret = mbed_gets(s,size,_file); + char *ret = mbed_gets(s, size, _file); unlock(); return ret; } -int Stream::close() { +int Stream::close() +{ return 0; } -ssize_t Stream::write(const void* buffer, size_t length) { - const char* ptr = (const char*)buffer; - const char* end = ptr + length; +ssize_t Stream::write(const void *buffer, size_t length) +{ + const char *ptr = (const char *)buffer; + const char *end = ptr + length; lock(); while (ptr != end) { @@ -83,48 +91,58 @@ ssize_t Stream::write(const void* buffer, size_t length) { } unlock(); - return ptr - (const char*)buffer; + return ptr - (const char *)buffer; } -ssize_t Stream::read(void* buffer, size_t length) { - char* ptr = (char*)buffer; - char* end = ptr + length; +ssize_t Stream::read(void *buffer, size_t length) +{ + char *ptr = (char *)buffer; + char *end = ptr + length; lock(); while (ptr != end) { int c = _getc(); - if (c==EOF) break; + if (c == EOF) { + break; + } *ptr++ = c; } unlock(); - return ptr - (const char*)buffer; + return ptr - (const char *)buffer; } -off_t Stream::seek(off_t offset, int whence) { +off_t Stream::seek(off_t offset, int whence) +{ return 0; } -off_t Stream::tell() { +off_t Stream::tell() +{ return 0; } -void Stream::rewind() { +void Stream::rewind() +{ } -int Stream::isatty() { +int Stream::isatty() +{ return 0; } -int Stream::sync() { +int Stream::sync() +{ return 0; } -off_t Stream::size() { +off_t Stream::size() +{ return 0; } -int Stream::printf(const char* format, ...) { +int Stream::printf(const char *format, ...) +{ lock(); std::va_list arg; va_start(arg, format); @@ -135,7 +153,8 @@ int Stream::printf(const char* format, ...) { return r; } -int Stream::scanf(const char* format, ...) { +int Stream::scanf(const char *format, ...) +{ lock(); std::va_list arg; va_start(arg, format); @@ -146,7 +165,8 @@ int Stream::scanf(const char* format, ...) { return r; } -int Stream::vprintf(const char* format, std::va_list args) { +int Stream::vprintf(const char *format, std::va_list args) +{ lock(); fflush(_file); int r = vfprintf(_file, format, args); @@ -154,7 +174,8 @@ int Stream::vprintf(const char* format, std::va_list args) { return r; } -int Stream::vscanf(const char* format, std::va_list args) { +int Stream::vscanf(const char *format, std::va_list args) +{ lock(); fflush(_file); int r = vfscanf(_file, format, args); diff --git a/platform/Stream.h b/platform/Stream.h index 20b7e44afcb..bb761a59790 100644 --- a/platform/Stream.h +++ b/platform/Stream.h @@ -33,7 +33,7 @@ namespace mbed { extern void mbed_set_unbuffered_stream(std::FILE *_file); extern int mbed_getc(std::FILE *_file); -extern char* mbed_gets(char *s, int size, std::FILE *_file); +extern char *mbed_gets(char *s, int size, std::FILE *_file); /** File stream * @@ -42,24 +42,27 @@ extern char* mbed_gets(char *s, int size, std::FILE *_file); class Stream : public FileLike, private NonCopyable { public: - Stream(const char *name=NULL); + Stream(const char *name = NULL); virtual ~Stream(); int putc(int c); int puts(const char *s); int getc(); char *gets(char *s, int size); - int printf(const char* format, ...); - int scanf(const char* format, ...); - int vprintf(const char* format, std::va_list args); - int vscanf(const char* format, std::va_list args); + int printf(const char *format, ...); + int scanf(const char *format, ...); + int vprintf(const char *format, std::va_list args); + int vscanf(const char *format, std::va_list args); - operator std::FILE*() {return _file;} + operator std::FILE *() + { + return _file; + } protected: virtual int close(); - virtual ssize_t write(const void* buffer, size_t length); - virtual ssize_t read(void* buffer, size_t length); + virtual ssize_t write(const void *buffer, size_t length); + virtual ssize_t read(void *buffer, size_t length); virtual off_t seek(off_t offset, int whence); virtual off_t tell(); virtual void rewind(); @@ -74,13 +77,15 @@ class Stream : public FileLike, private NonCopyable { /** Acquire exclusive access to this object. */ - virtual void lock() { + virtual void lock() + { // Stub } /** Release exclusive access to this object. */ - virtual void unlock() { + virtual void unlock() + { // Stub } }; diff --git a/platform/Transaction.h b/platform/Transaction.h index 23f03e07f22..1d8d6ff9de5 100644 --- a/platform/Transaction.h +++ b/platform/Transaction.h @@ -46,20 +46,24 @@ typedef struct { template class Transaction { public: - Transaction(Class *tpointer, const transaction_t& transaction) : _obj(tpointer), _data(transaction) { + Transaction(Class *tpointer, const transaction_t &transaction) : _obj(tpointer), _data(transaction) + { } - Transaction() : _obj(), _data() { + Transaction() : _obj(), _data() + { } - ~Transaction() { + ~Transaction() + { } /** Get object's instance for the transaction * * @return The object which was stored */ - Class* get_object() { + Class *get_object() + { return _obj; } @@ -67,12 +71,13 @@ class Transaction { * * @return The transaction which was stored */ - transaction_t* get_transaction() { + transaction_t *get_transaction() + { return &_data; } private: - Class* _obj; + Class *_obj; transaction_t _data; }; /**@}*/ diff --git a/platform/astyle-branch.out b/platform/astyle-branch.out new file mode 100644 index 00000000000..a72b2fde8fa --- /dev/null +++ b/platform/astyle-branch.out @@ -0,0 +1,74 @@ +Formatted .\ATCmdParser.cpp +Formatted .\ATCmdParser.h +Formatted .\Callback.h +Formatted .\CallChain.cpp +Formatted .\CallChain.h +Formatted .\CircularBuffer.h +Unchanged .\critical.h +Formatted .\CriticalSectionLock.h +Formatted .\CThunk.h +Unchanged .\DeepSleepLock.h +Formatted .\DirHandle.h +Formatted .\FileBase.cpp +Formatted .\FileBase.h +Unchanged .\FileHandle.cpp +Formatted .\FileHandle.h +Unchanged .\FileLike.h +Formatted .\FilePath.cpp +Formatted .\FilePath.h +Unchanged .\FileSystemHandle.cpp +Formatted .\FileSystemHandle.h +Formatted .\FileSystemLike.h +Formatted .\FunctionPointer.h +Formatted .\LocalFileSystem.cpp +Formatted .\LocalFileSystem.h +Formatted .\mbed_alloc_wrappers.cpp +Formatted .\mbed_application.c +Unchanged .\mbed_application.h +Unchanged .\mbed_assert.c +Unchanged .\mbed_assert.h +Formatted .\mbed_board.c +Formatted .\mbed_critical.c +Formatted .\mbed_critical.h +Formatted .\mbed_debug.h +Formatted .\mbed_error.c +Formatted .\mbed_error.h +Formatted .\mbed_error_hist.c +Formatted .\mbed_error_hist.h +Formatted .\mbed_interface.c +Formatted .\mbed_interface.h +Formatted .\mbed_mem_trace.cpp +Formatted .\mbed_mem_trace.h +Formatted .\mbed_mktime.c +Formatted .\mbed_mktime.h +Unchanged .\mbed_poll.cpp +Unchanged .\mbed_poll.h +Formatted .\mbed_power_mgmt.h +Unchanged .\mbed_preprocessor.h +Formatted .\mbed_retarget.cpp +Formatted .\mbed_retarget.h +Formatted .\mbed_rtc_time.cpp +Unchanged .\mbed_rtc_time.h +Formatted .\mbed_sdk_boot.c +Formatted .\mbed_semihost_api.c +Formatted .\mbed_semihost_api.h +Unchanged .\mbed_sleep.h +Unchanged .\mbed_stats.c +Unchanged .\mbed_stats.h +Formatted .\mbed_toolchain.h +Formatted .\mbed_wait_api.h +Formatted .\mbed_wait_api_no_rtos.c +Formatted .\mbed_wait_api_rtos.cpp +Formatted .\NonCopyable.h +Unchanged .\platform.h +Formatted .\PlatformMutex.h +Unchanged .\rtc_time.h +Formatted .\ScopedLock.h +Unchanged .\semihost_api.h +Formatted .\SingletonPtr.h +Unchanged .\sleep.h +Formatted .\Stream.cpp +Formatted .\Stream.h +Unchanged .\toolchain.h +Formatted .\Transaction.h +Unchanged .\wait_api.h diff --git a/platform/mbed_alloc_wrappers.cpp b/platform/mbed_alloc_wrappers.cpp index 58f153c70d0..87fcd95f142 100644 --- a/platform/mbed_alloc_wrappers.cpp +++ b/platform/mbed_alloc_wrappers.cpp @@ -76,33 +76,35 @@ void mbed_stats_heap_get(mbed_stats_heap_t *stats) #endif/* FEATURE_UVISOR */ extern "C" { - void * __real__malloc_r(struct _reent * r, size_t size); - void * __real__memalign_r(struct _reent * r, size_t alignment, size_t bytes); - void * __real__realloc_r(struct _reent * r, void * ptr, size_t size); - void __real__free_r(struct _reent * r, void * ptr); - void* __real__calloc_r(struct _reent * r, size_t nmemb, size_t size); - void* malloc_wrapper(struct _reent * r, size_t size, void * caller); - void free_wrapper(struct _reent * r, void * ptr, void* caller); + void *__real__malloc_r(struct _reent *r, size_t size); + void *__real__memalign_r(struct _reent *r, size_t alignment, size_t bytes); + void *__real__realloc_r(struct _reent *r, void *ptr, size_t size); + void __real__free_r(struct _reent *r, void *ptr); + void *__real__calloc_r(struct _reent *r, size_t nmemb, size_t size); + void *malloc_wrapper(struct _reent *r, size_t size, void *caller); + void free_wrapper(struct _reent *r, void *ptr, void *caller); } // TODO: memory tracing doesn't work with uVisor enabled. #if !defined(FEATURE_UVISOR) -extern "C" void * __wrap__malloc_r(struct _reent * r, size_t size) { +extern "C" void *__wrap__malloc_r(struct _reent *r, size_t size) +{ return malloc_wrapper(r, size, MBED_CALLER_ADDR()); } -extern "C" void * malloc_wrapper(struct _reent * r, size_t size, void * caller) { +extern "C" void *malloc_wrapper(struct _reent *r, size_t size, void *caller) +{ void *ptr = NULL; #ifdef MBED_MEM_TRACING_ENABLED mbed_mem_trace_lock(); #endif #ifdef MBED_HEAP_STATS_ENABLED malloc_stats_mutex->lock(); - alloc_info_t *alloc_info = (alloc_info_t*)__real__malloc_r(r, size + sizeof(alloc_info_t)); + alloc_info_t *alloc_info = (alloc_info_t *)__real__malloc_r(r, size + sizeof(alloc_info_t)); if (alloc_info != NULL) { alloc_info->size = size; - ptr = (void*)(alloc_info + 1); + ptr = (void *)(alloc_info + 1); heap_stats.current_size += size; heap_stats.total_size += size; heap_stats.alloc_cnt += 1; @@ -123,7 +125,8 @@ extern "C" void * malloc_wrapper(struct _reent * r, size_t size, void * caller) return ptr; } -extern "C" void * __wrap__realloc_r(struct _reent * r, void * ptr, size_t size) { +extern "C" void *__wrap__realloc_r(struct _reent *r, void *ptr, size_t size) +{ void *new_ptr = NULL; #ifdef MBED_MEM_TRACING_ENABLED mbed_mem_trace_lock(); @@ -139,7 +142,7 @@ extern "C" void * __wrap__realloc_r(struct _reent * r, void * ptr, size_t size) // Get old size uint32_t old_size = 0; if (ptr != NULL) { - alloc_info_t *alloc_info = ((alloc_info_t*)ptr) - 1; + alloc_info_t *alloc_info = ((alloc_info_t *)ptr) - 1; old_size = alloc_info->size; } @@ -152,7 +155,7 @@ extern "C" void * __wrap__realloc_r(struct _reent * r, void * ptr, size_t size) // and free the old buffer if (new_ptr != NULL) { uint32_t copy_size = (old_size < size) ? old_size : size; - memcpy(new_ptr, (void*)ptr, copy_size); + memcpy(new_ptr, (void *)ptr, copy_size); free(ptr); } #else // #ifdef MBED_HEAP_STATS_ENABLED @@ -165,11 +168,13 @@ extern "C" void * __wrap__realloc_r(struct _reent * r, void * ptr, size_t size) return new_ptr; } -extern "C" void __wrap__free_r(struct _reent * r, void * ptr) { +extern "C" void __wrap__free_r(struct _reent *r, void *ptr) +{ free_wrapper(r, ptr, MBED_CALLER_ADDR()); } -extern "C" void free_wrapper(struct _reent * r, void * ptr, void * caller) { +extern "C" void free_wrapper(struct _reent *r, void *ptr, void *caller) +{ #ifdef MBED_MEM_TRACING_ENABLED mbed_mem_trace_lock(); #endif @@ -177,11 +182,11 @@ extern "C" void free_wrapper(struct _reent * r, void * ptr, void * caller) { malloc_stats_mutex->lock(); alloc_info_t *alloc_info = NULL; if (ptr != NULL) { - alloc_info = ((alloc_info_t*)ptr) - 1; + alloc_info = ((alloc_info_t *)ptr) - 1; heap_stats.current_size -= alloc_info->size; heap_stats.alloc_cnt -= 1; } - __real__free_r(r, (void*)alloc_info); + __real__free_r(r, (void *)alloc_info); malloc_stats_mutex->unlock(); #else // #ifdef MBED_HEAP_STATS_ENABLED __real__free_r(r, ptr); @@ -192,7 +197,8 @@ extern "C" void free_wrapper(struct _reent * r, void * ptr, void * caller) { #endif // #ifdef MBED_MEM_TRACING_ENABLED } -extern "C" void * __wrap__calloc_r(struct _reent * r, size_t nmemb, size_t size) { +extern "C" void *__wrap__calloc_r(struct _reent *r, size_t nmemb, size_t size) +{ void *ptr = NULL; #ifdef MBED_MEM_TRACING_ENABLED mbed_mem_trace_lock(); @@ -214,7 +220,8 @@ extern "C" void * __wrap__calloc_r(struct _reent * r, size_t nmemb, size_t size) return ptr; } -extern "C" void * __wrap__memalign_r(struct _reent * r, size_t alignment, size_t bytes) { +extern "C" void *__wrap__memalign_r(struct _reent *r, size_t alignment, size_t bytes) +{ return __real__memalign_r(r, alignment, bytes); } @@ -255,26 +262,28 @@ extern "C" { void *SUPER_REALLOC(void *ptr, size_t size); void *SUPER_CALLOC(size_t nmemb, size_t size); void SUPER_FREE(void *ptr); - void *malloc_wrapper(size_t size, void* caller); - void free_wrapper(void *ptr, void* caller); + void *malloc_wrapper(size_t size, void *caller); + void free_wrapper(void *ptr, void *caller); } -extern "C" void* SUB_MALLOC(size_t size) { +extern "C" void *SUB_MALLOC(size_t size) +{ return malloc_wrapper(size, MBED_CALLER_ADDR()); } -extern "C" void* malloc_wrapper(size_t size, void* caller) { +extern "C" void *malloc_wrapper(size_t size, void *caller) +{ void *ptr = NULL; #ifdef MBED_MEM_TRACING_ENABLED mbed_mem_trace_lock(); #endif #ifdef MBED_HEAP_STATS_ENABLED malloc_stats_mutex->lock(); - alloc_info_t *alloc_info = (alloc_info_t*)SUPER_MALLOC(size + sizeof(alloc_info_t)); + alloc_info_t *alloc_info = (alloc_info_t *)SUPER_MALLOC(size + sizeof(alloc_info_t)); if (alloc_info != NULL) { alloc_info->size = size; - ptr = (void*)(alloc_info + 1); + ptr = (void *)(alloc_info + 1); heap_stats.current_size += size; heap_stats.total_size += size; heap_stats.alloc_cnt += 1; @@ -296,7 +305,8 @@ extern "C" void* malloc_wrapper(size_t size, void* caller) { } -extern "C" void* SUB_REALLOC(void *ptr, size_t size) { +extern "C" void *SUB_REALLOC(void *ptr, size_t size) +{ void *new_ptr = NULL; #ifdef MBED_MEM_TRACING_ENABLED mbed_mem_trace_lock(); @@ -307,7 +317,7 @@ extern "C" void* SUB_REALLOC(void *ptr, size_t size) { // Get old size uint32_t old_size = 0; if (ptr != NULL) { - alloc_info_t *alloc_info = ((alloc_info_t*)ptr) - 1; + alloc_info_t *alloc_info = ((alloc_info_t *)ptr) - 1; old_size = alloc_info->size; } @@ -320,7 +330,7 @@ extern "C" void* SUB_REALLOC(void *ptr, size_t size) { // and free the old buffer if (new_ptr != NULL) { uint32_t copy_size = (old_size < size) ? old_size : size; - memcpy(new_ptr, (void*)ptr, copy_size); + memcpy(new_ptr, (void *)ptr, copy_size); free(ptr); } #else // #ifdef MBED_HEAP_STATS_ENABLED @@ -333,7 +343,8 @@ extern "C" void* SUB_REALLOC(void *ptr, size_t size) { return new_ptr; } -extern "C" void *SUB_CALLOC(size_t nmemb, size_t size) { +extern "C" void *SUB_CALLOC(size_t nmemb, size_t size) +{ void *ptr = NULL; #ifdef MBED_MEM_TRACING_ENABLED mbed_mem_trace_lock(); @@ -354,11 +365,13 @@ extern "C" void *SUB_CALLOC(size_t nmemb, size_t size) { return ptr; } -extern "C" void SUB_FREE(void *ptr) { +extern "C" void SUB_FREE(void *ptr) +{ free_wrapper(ptr, MBED_CALLER_ADDR()); } -extern "C" void free_wrapper(void *ptr, void* caller) { +extern "C" void free_wrapper(void *ptr, void *caller) +{ #ifdef MBED_MEM_TRACING_ENABLED mbed_mem_trace_lock(); #endif @@ -366,11 +379,11 @@ extern "C" void free_wrapper(void *ptr, void* caller) { malloc_stats_mutex->lock(); alloc_info_t *alloc_info = NULL; if (ptr != NULL) { - alloc_info = ((alloc_info_t*)ptr) - 1; + alloc_info = ((alloc_info_t *)ptr) - 1; heap_stats.current_size -= alloc_info->size; heap_stats.alloc_cnt -= 1; } - SUPER_FREE((void*)alloc_info); + SUPER_FREE((void *)alloc_info); malloc_stats_mutex->unlock(); #else // #ifdef MBED_HEAP_STATS_ENABLED SUPER_FREE(ptr); diff --git a/platform/mbed_application.c b/platform/mbed_application.c index 9cfe8b07208..e94ef083b88 100644 --- a/platform/mbed_application.c +++ b/platform/mbed_application.c @@ -46,8 +46,8 @@ void mbed_start_application(uintptr_t address) powerdown_nvic(); powerdown_scb(address); - sp = *((void**)address + 0); - pc = *((void**)address + 1); + sp = *((void **)address + 0); + pc = *((void **)address + 1); start_new_application(sp, pc); } @@ -133,16 +133,16 @@ __asm static void start_new_application(void *sp, void *pc) void start_new_application(void *sp, void *pc) { - __asm volatile ( + __asm volatile( "movw r2, #0 \n" // Fail to compile "mov r2, #0" with ARMC6. Replace with MOVW. - // We needn't "movt r2, #0" immediately following because MOVW - // will zero-extend the 16-bit immediate. + // We needn't "movt r2, #0" immediately following because MOVW + // will zero-extend the 16-bit immediate. "msr control, r2 \n" // Switch to main stack "mov sp, %0 \n" "msr primask, r2 \n" // Enable interrupts "bx %1 \n" : - : "l" (sp), "l" (pc) + : "l"(sp), "l"(pc) : "r2", "cc", "memory" ); } diff --git a/platform/mbed_board.c b/platform/mbed_board.c index 227c774c8b2..0c837cfb32f 100644 --- a/platform/mbed_board.c +++ b/platform/mbed_board.c @@ -26,11 +26,13 @@ extern int stdio_uart_inited; extern serial_t stdio_uart; #endif -WEAK void mbed_die(void) { +WEAK void mbed_die(void) +{ #if !defined (NRF51_H) && !defined(TARGET_EFM32) core_util_critical_section_enter(); #endif - gpio_t led_err; gpio_init_out(&led_err, LED1); + gpio_t led_err; + gpio_init_out(&led_err, LED1); while (1) { for (int i = 0; i < 4; ++i) { @@ -49,14 +51,16 @@ WEAK void mbed_die(void) { } } -void mbed_error_printf(const char* format, ...) { +void mbed_error_printf(const char *format, ...) +{ va_list arg; va_start(arg, format); mbed_error_vfprintf(format, arg); va_end(arg); } -void mbed_error_vfprintf(const char * format, va_list arg) { +void mbed_error_vfprintf(const char *format, va_list arg) +{ #if DEVICE_SERIAL #define ERROR_BUF_SIZE (128) core_util_critical_section_enter(); @@ -70,7 +74,7 @@ void mbed_error_vfprintf(const char * format, va_list arg) { char stdio_out_prev = '\0'; for (int i = 0; i < size; i++) { if (buffer[i] == '\n' && stdio_out_prev != '\r') { - serial_putc(&stdio_uart, '\r'); + serial_putc(&stdio_uart, '\r'); } serial_putc(&stdio_uart, buffer[i]); stdio_out_prev = buffer[i]; diff --git a/platform/mbed_critical.c b/platform/mbed_critical.c index d9dcc78a4b3..3b3aaa566fd 100644 --- a/platform/mbed_critical.c +++ b/platform/mbed_critical.c @@ -38,7 +38,7 @@ #else #error "Unknown architecture for exclusive access" #endif -#else +#else #define MBED_EXCLUSIVE_ACCESS __EXCLUSIVE_ACCESS #endif #endif @@ -57,7 +57,7 @@ bool core_util_are_interrupts_enabled(void) bool core_util_is_isr_active(void) { #if defined(__CORTEX_A9) - switch(__get_CPSR() & 0x1FU) { + switch (__get_CPSR() & 0x1FU) { case CPSR_M_USR: case CPSR_M_SYS: return false; @@ -79,7 +79,7 @@ void core_util_critical_section_enter(void) { // FIXME #ifdef FEATURE_UVISOR - #warning "core_util_critical_section_enter needs fixing to work from unprivileged code" +#warning "core_util_critical_section_enter needs fixing to work from unprivileged code" #else // If the reentrancy counter overflows something has gone badly wrong. MBED_ASSERT(critical_section_reentrancy_counter < UINT32_MAX); @@ -94,7 +94,7 @@ void core_util_critical_section_exit(void) { // FIXME #ifdef FEATURE_UVISOR - #warning "core_util_critical_section_exit needs fixing to work from unprivileged code" +#warning "core_util_critical_section_exit needs fixing to work from unprivileged code" #endif /* FEATURE_UVISOR */ // If critical_section_enter has not previously been called, do nothing @@ -112,7 +112,7 @@ void core_util_critical_section_exit(void) #if MBED_EXCLUSIVE_ACCESS /* Supress __ldrex and __strex deprecated warnings - "#3731-D: intrinsic is deprecated" */ -#if defined (__CC_ARM) +#if defined (__CC_ARM) #pragma diag_suppress 3731 #endif @@ -330,18 +330,21 @@ uint32_t core_util_atomic_decr_u32(volatile uint32_t *valuePtr, uint32_t delta) #endif -bool core_util_atomic_cas_ptr(void * volatile *ptr, void **expectedCurrentValue, void *desiredValue) { +bool core_util_atomic_cas_ptr(void *volatile *ptr, void **expectedCurrentValue, void *desiredValue) +{ return core_util_atomic_cas_u32( - (volatile uint32_t *)ptr, - (uint32_t *)expectedCurrentValue, - (uint32_t)desiredValue); + (volatile uint32_t *)ptr, + (uint32_t *)expectedCurrentValue, + (uint32_t)desiredValue); } -void *core_util_atomic_incr_ptr(void * volatile *valuePtr, ptrdiff_t delta) { +void *core_util_atomic_incr_ptr(void *volatile *valuePtr, ptrdiff_t delta) +{ return (void *)core_util_atomic_incr_u32((volatile uint32_t *)valuePtr, (uint32_t)delta); } -void *core_util_atomic_decr_ptr(void * volatile *valuePtr, ptrdiff_t delta) { +void *core_util_atomic_decr_ptr(void *volatile *valuePtr, ptrdiff_t delta) +{ return (void *)core_util_atomic_decr_u32((volatile uint32_t *)valuePtr, (uint32_t)delta); } diff --git a/platform/mbed_critical.h b/platform/mbed_critical.h index 17ec7889343..f5ecc37aabd 100644 --- a/platform/mbed_critical.h +++ b/platform/mbed_critical.h @@ -315,7 +315,7 @@ bool core_util_atomic_cas_u32(volatile uint32_t *ptr, uint32_t *expectedCurrentV * always succeeds if the current value is expected, as per the pseudocode * above; it will not spuriously fail as "atomic_compare_exchange_weak" may. */ -bool core_util_atomic_cas_ptr(void * volatile *ptr, void **expectedCurrentValue, void *desiredValue); +bool core_util_atomic_cas_ptr(void *volatile *ptr, void **expectedCurrentValue, void *desiredValue); /** * Atomic increment. @@ -350,7 +350,7 @@ uint32_t core_util_atomic_incr_u32(volatile uint32_t *valuePtr, uint32_t delta); * @note The type of the pointer argument is not taken into account * and the pointer is incremented by bytes. */ -void *core_util_atomic_incr_ptr(void * volatile *valuePtr, ptrdiff_t delta); +void *core_util_atomic_incr_ptr(void *volatile *valuePtr, ptrdiff_t delta); /** * Atomic decrement. @@ -385,7 +385,7 @@ uint32_t core_util_atomic_decr_u32(volatile uint32_t *valuePtr, uint32_t delta); * @note The type of the pointer argument is not taken into account * and the pointer is decremented by bytes */ -void *core_util_atomic_decr_ptr(void * volatile *valuePtr, ptrdiff_t delta); +void *core_util_atomic_decr_ptr(void *volatile *valuePtr, ptrdiff_t delta); #ifdef __cplusplus } // extern "C" diff --git a/platform/mbed_debug.h b/platform/mbed_debug.h index 5f9a19805d6..5ccc123bb07 100644 --- a/platform/mbed_debug.h +++ b/platform/mbed_debug.h @@ -5,7 +5,7 @@ * \defgroup platform_debug Debug functions * @{ */ - + /* mbed Microcontroller Library * Copyright (c) 2006-2013 ARM Limited * @@ -37,7 +37,8 @@ extern "C" { * * @param format printf-style format string, followed by variables */ -static inline void debug(const char *format, ...) { +static inline void debug(const char *format, ...) +{ #if DEVICE_STDIO_MESSAGES && !defined(NDEBUG) va_list args; va_start(args, format); @@ -55,7 +56,8 @@ static inline void debug(const char *format, ...) { * @param condition output only if condition is true (!= 0) * @param format printf-style format string, followed by variables */ -static inline void debug_if(int condition, const char *format, ...) { +static inline void debug_if(int condition, const char *format, ...) +{ #if DEVICE_STDIO_MESSAGES && !defined(NDEBUG) if (condition) { va_list args; diff --git a/platform/mbed_error.c b/platform/mbed_error.c index 1fcaa7c35cf..e1bebb2b157 100644 --- a/platform/mbed_error.c +++ b/platform/mbed_error.c @@ -21,7 +21,7 @@ #include "platform/mbed_error.h" #include "platform/mbed_error_hist.h" #include "platform/mbed_interface.h" -#ifdef MBED_CONF_RTOS_PRESENT +#ifdef MBED_CONF_RTOS_PRESENT #include "rtx_os.h" #endif @@ -43,7 +43,7 @@ sp = __get_PSP();/*Read PSP*/ \ } \ } \ - } + } static uint8_t error_in_progress = 0; @@ -59,8 +59,8 @@ static void mbed_halt_system(void) { //If not in ISR context exit, otherwise spin on WFI if (core_util_is_isr_active() || !core_util_are_interrupts_enabled()) { - for(;;) { - __WFI(); + for (;;) { + __WFI(); } } else { //exit eventually calls mbed_die @@ -68,13 +68,14 @@ static void mbed_halt_system(void) } } -WEAK void error(const char* format, ...) { +WEAK void error(const char *format, ...) +{ // Prevent recursion if error is called again if (error_in_progress) { return; } - + //Call handle_error/print_error_report permanently setting error_in_progress flag handle_error(MBED_ERROR_UNKNOWN, 0, NULL, 0); print_error_report(&last_error_ctx, "Fatal Run-time error"); @@ -90,46 +91,46 @@ WEAK void error(const char* format, ...) { } //Set an error status with the error handling system -static mbed_error_status_t handle_error(mbed_error_status_t error_status, unsigned int error_value, const char *filename, int line_number) +static mbed_error_status_t handle_error(mbed_error_status_t error_status, unsigned int error_value, const char *filename, int line_number) { mbed_error_ctx current_error_ctx; - + //Error status should always be < 0 if (error_status >= 0) { //This is a weird situation, someone called mbed_error with invalid error code. //We will still handle the situation but change the error code to ERROR_INVALID_ARGUMENT, atleast the context will have info on who called it error_status = MBED_ERROR_INVALID_ARGUMENT; } - + //Prevent corruption by holding out other callers //and we also need this until we remove the "error" call completely while (error_in_progress == 1); - + //Use critsect here, as we don't want inadvertant modification of this global variable core_util_critical_section_enter(); error_in_progress = 1; core_util_critical_section_exit(); - + //Increment error count error_count++; - + //Clear the context capturing buffer memset(¤t_error_ctx, sizeof(mbed_error_ctx), 0); //Capture error information current_error_ctx.error_status = error_status; current_error_ctx.error_address = (uint32_t)MBED_CALLER_ADDR(); current_error_ctx.error_value = error_value; -#ifdef MBED_CONF_RTOS_PRESENT +#ifdef MBED_CONF_RTOS_PRESENT //Capture thread info osRtxThread_t *current_thread = osRtxInfo.thread.run.curr; current_error_ctx.thread_id = (uint32_t)current_thread; current_error_ctx.thread_entry_address = (uint32_t)current_thread->thread_addr; current_error_ctx.thread_stack_size = current_thread->stack_size; current_error_ctx.thread_stack_mem = (uint32_t)current_thread->stack_mem; -#ifdef TARGET_CORTEX_M +#ifdef TARGET_CORTEX_M GET_CURRENT_SP(current_error_ctx.thread_current_sp); #endif //TARGET_CORTEX_M - + #endif //MBED_CONF_RTOS_PRESENT #ifdef MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED @@ -139,121 +140,124 @@ static mbed_error_status_t handle_error(mbed_error_status_t error_status, unsign strncpy(current_error_ctx.error_filename, filename, MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN); current_error_ctx.error_line_number = line_number; #endif - + //Capture the fist system error and store it if (error_count == 1) { //first error memcpy(&first_error_ctx, ¤t_error_ctx, sizeof(mbed_error_ctx)); } - + //copy this error to last error memcpy(&last_error_ctx, ¤t_error_ctx, sizeof(mbed_error_ctx)); - + #if MBED_CONF_PLATFORM_ERROR_HIST_ENABLED //Log the error with error log mbed_error_hist_put(¤t_error_ctx); -#endif - +#endif + //Call the error hook if available if (error_hook != NULL) { error_hook(&last_error_ctx); } - + error_in_progress = 0; - + return MBED_SUCCESS; } //Return the first error -mbed_error_status_t mbed_get_first_error(void) +mbed_error_status_t mbed_get_first_error(void) { //return the first error recorded return first_error_ctx.error_status; } //Return the last error -mbed_error_status_t mbed_get_last_error(void) +mbed_error_status_t mbed_get_last_error(void) { //return the last error recorded return last_error_ctx.error_status; } //Gets the current error count -int mbed_get_error_count(void) +int mbed_get_error_count(void) { //return the current error count return error_count; } -//Sets a fatal error -mbed_error_status_t mbed_warning(mbed_error_status_t error_status, const char *error_msg, unsigned int error_value, const char *filename, int line_number) +//Sets a fatal error +mbed_error_status_t mbed_warning(mbed_error_status_t error_status, const char *error_msg, unsigned int error_value, const char *filename, int line_number) { return handle_error(error_status, error_value, filename, line_number); } -//Sets a fatal error, this function is marked WEAK to be able to override this for some tests -WEAK mbed_error_status_t mbed_error(mbed_error_status_t error_status, const char *error_msg, unsigned int error_value, const char *filename, int line_number) +//Sets a fatal error, this function is marked WEAK to be able to override this for some tests +WEAK mbed_error_status_t mbed_error(mbed_error_status_t error_status, const char *error_msg, unsigned int error_value, const char *filename, int line_number) { //set the error reported and then halt the system - if ( MBED_SUCCESS != handle_error(error_status, error_value, filename, line_number)) + if (MBED_SUCCESS != handle_error(error_status, error_value, filename, line_number)) { return MBED_ERROR_FAILED_OPERATION; - + } + //On fatal errors print the error context/report print_error_report(&last_error_ctx, error_msg); mbed_halt_system(); - + return MBED_ERROR_FAILED_OPERATION; } //Register an application defined callback with error handling -mbed_error_status_t mbed_set_error_hook(mbed_error_hook_t error_hook_in) +mbed_error_status_t mbed_set_error_hook(mbed_error_hook_t error_hook_in) { //register the new hook/callback - if ( error_hook_in != NULL ) { + if (error_hook_in != NULL) { error_hook = error_hook_in; return MBED_SUCCESS; - } - + } + return MBED_ERROR_INVALID_ARGUMENT; } -//Retrieve the first error context from error log -mbed_error_status_t mbed_get_first_error_info (mbed_error_ctx *error_info) +//Retrieve the first error context from error log +mbed_error_status_t mbed_get_first_error_info(mbed_error_ctx *error_info) { memcpy(error_info, &first_error_ctx, sizeof(first_error_ctx)); return MBED_SUCCESS; } -//Retrieve the last error context from error log -mbed_error_status_t mbed_get_last_error_info (mbed_error_ctx *error_info) +//Retrieve the last error context from error log +mbed_error_status_t mbed_get_last_error_info(mbed_error_ctx *error_info) { memcpy(error_info, &last_error_ctx, sizeof(mbed_error_ctx)); return MBED_SUCCESS; } //Makes an mbed_error_status_t value -mbed_error_status_t mbed_make_error(mbed_error_type_t error_type, mbed_module_type_t entity, mbed_error_code_t error_code) +mbed_error_status_t mbed_make_error(mbed_error_type_t error_type, mbed_module_type_t entity, mbed_error_code_t error_code) { - switch(error_type) - { + switch (error_type) { case MBED_ERROR_TYPE_POSIX: - if (error_code >= MBED_POSIX_ERROR_BASE && error_code <= MBED_SYSTEM_ERROR_BASE) + if (error_code >= MBED_POSIX_ERROR_BASE && error_code <= MBED_SYSTEM_ERROR_BASE) { return -error_code; + } break; - + case MBED_ERROR_TYPE_SYSTEM: - if (error_code >= MBED_SYSTEM_ERROR_BASE && error_code <= MBED_CUSTOM_ERROR_BASE) + if (error_code >= MBED_SYSTEM_ERROR_BASE && error_code <= MBED_CUSTOM_ERROR_BASE) { return MAKE_MBED_ERROR(MBED_ERROR_TYPE_SYSTEM, entity, error_code); + } break; - + case MBED_ERROR_TYPE_CUSTOM: - if (error_code >= MBED_CUSTOM_ERROR_BASE) + if (error_code >= MBED_CUSTOM_ERROR_BASE) { return MAKE_MBED_ERROR(MBED_ERROR_TYPE_CUSTOM, entity, error_code); + } break; - + default: break; } - + //If we are passed incorrect values return a generic system error return MAKE_MBED_ERROR(MBED_ERROR_TYPE_SYSTEM, MBED_MODULE_UNKNOWN, MBED_ERROR_CODE_UNKNOWN); } @@ -263,21 +267,21 @@ mbed_error_status_t mbed_make_error(mbed_error_type_t error_type, mbed_module_ty * @return 0 or MBED_SUCCESS on success. * */ -mbed_error_status_t mbed_clear_all_errors(void) +mbed_error_status_t mbed_clear_all_errors(void) { mbed_error_status_t status = MBED_SUCCESS; - + //Make sure we dont multiple clients resetting core_util_critical_section_enter(); //Clear the error and context capturing buffer memset(&last_error_ctx, sizeof(mbed_error_ctx), 0); //reset error count to 0 error_count = 0; -#if MBED_CONF_PLATFORM_ERROR_HIST_ENABLED +#if MBED_CONF_PLATFORM_ERROR_HIST_ENABLED status = mbed_error_hist_reset(); #endif core_util_critical_section_exit(); - + return status; } @@ -292,7 +296,7 @@ static void print_thread(osRtxThread_t *thread) static void print_threads_info(osRtxThread_t *threads) { while (threads != NULL) { - print_thread( threads ); + print_thread(threads); threads = threads->thread_next; } } @@ -302,96 +306,96 @@ static void print_error_report(mbed_error_ctx *ctx, const char *error_msg) { uint32_t error_code = MBED_GET_ERROR_CODE(ctx->error_status); uint32_t error_module = MBED_GET_ERROR_MODULE(ctx->error_status); - + mbed_error_printf("\n\n++ MbedOS Error Info ++\nError Status: 0x%X Code: %d Module: %d\nError Message: ", ctx->error_status, error_code, error_module); - + switch (error_code) { //These are errors reported by kernel handled from mbed_rtx_handlers case MBED_ERROR_CODE_RTOS_EVENT: mbed_error_printf("Kernel Error: 0x%X, ", ctx->error_value); break; - + case MBED_ERROR_CODE_RTOS_THREAD_EVENT: mbed_error_printf("Thread: 0x%X, ", ctx->error_value); break; - + case MBED_ERROR_CODE_RTOS_MUTEX_EVENT: mbed_error_printf("Mutex: 0x%X, ", ctx->error_value); break; - + case MBED_ERROR_CODE_RTOS_SEMAPHORE_EVENT: mbed_error_printf("Semaphore: 0x%X, ", ctx->error_value); break; - + case MBED_ERROR_CODE_RTOS_MEMORY_POOL_EVENT: mbed_error_printf("MemoryPool: 0x%X, ", ctx->error_value); break; - + case MBED_ERROR_CODE_RTOS_EVENT_FLAGS_EVENT: mbed_error_printf("EventFlags: 0x%X, ", ctx->error_value); break; - + case MBED_ERROR_CODE_RTOS_TIMER_EVENT: mbed_error_printf("Timer: 0x%X, ", ctx->error_value); break; - - case MBED_ERROR_CODE_RTOS_MESSAGE_QUEUE_EVENT: + + case MBED_ERROR_CODE_RTOS_MESSAGE_QUEUE_EVENT: mbed_error_printf("MessageQueue: 0x%X, ", ctx->error_value); break; - + default: //Nothing to do here, just print the error info down break; } mbed_error_printf(error_msg); mbed_error_printf("\nLocation: 0x%X", ctx->error_address); - + #if MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED && !defined(NDEBUG) if ((NULL != ctx->error_filename[0]) && (ctx->error_line_number != 0)) { - //for string, we must pass address of a ptr which has the address of the string + //for string, we must pass address of a ptr which has the address of the string mbed_error_printf("\nFile:%s+%d", ctx->error_filename, ctx->error_line_number); } -#endif - +#endif + mbed_error_printf("\nError Value: 0x%X", ctx->error_value); #ifdef TARGET_CORTEX_M - mbed_error_printf("\nCurrent Thread: Id: 0x%X Entry: 0x%X StackSize: 0x%X StackMem: 0x%X SP: 0x%X ", - ctx->thread_id, ctx->thread_entry_address, ctx->thread_stack_size, ctx->thread_stack_mem, ctx->thread_current_sp); + mbed_error_printf("\nCurrent Thread: Id: 0x%X Entry: 0x%X StackSize: 0x%X StackMem: 0x%X SP: 0x%X ", + ctx->thread_id, ctx->thread_entry_address, ctx->thread_stack_size, ctx->thread_stack_mem, ctx->thread_current_sp); #else //For Cortex-A targets we dont have support to capture the current SP - mbed_error_printf("\nCurrent Thread: Id: 0x%X Entry: 0x%X StackSize: 0x%X StackMem: 0x%X ", - ctx->thread_id, ctx->thread_entry_address, ctx->thread_stack_size, ctx->thread_stack_mem); + mbed_error_printf("\nCurrent Thread: Id: 0x%X Entry: 0x%X StackSize: 0x%X StackMem: 0x%X ", + ctx->thread_id, ctx->thread_entry_address, ctx->thread_stack_size, ctx->thread_stack_mem); #endif //TARGET_CORTEX_M - + #if MBED_CONF_PLATFORM_ERROR_ALL_THREADS_INFO && defined(MBED_CONF_RTOS_PRESENT) mbed_error_printf("\nNext:"); print_thread(osRtxInfo.thread.run.next); - + mbed_error_printf("\nWait:"); osRtxThread_t *threads = (osRtxThread_t *)&osRtxInfo.thread.wait_list; print_threads_info(threads); - + mbed_error_printf("\nDelay:"); threads = (osRtxThread_t *)&osRtxInfo.thread.delay_list; print_threads_info(threads); - + mbed_error_printf("\nIdle:"); threads = (osRtxThread_t *)&osRtxInfo.thread.idle; print_threads_info(threads); #endif - + mbed_error_printf("\n-- MbedOS Error Info --\n"); } #if MBED_CONF_PLATFORM_ERROR_HIST_ENABLED //Retrieve the error context from error log at the specified index -mbed_error_status_t mbed_get_error_hist_info (int index, mbed_error_ctx *error_info) +mbed_error_status_t mbed_get_error_hist_info(int index, mbed_error_ctx *error_info) { return mbed_error_hist_get(index, error_info); } //Retrieve the error log count -int mbed_get_error_hist_count(void) +int mbed_get_error_hist_count(void) { return mbed_error_hist_get_count(); } @@ -402,56 +406,56 @@ mbed_error_status_t mbed_save_error_hist(const char *path) mbed_error_ctx ctx = {0}; int log_count = mbed_error_hist_get_count(); FILE *error_log_file = NULL; - + //Ensure path is valid - if (path==NULL) { + if (path == NULL) { ret = MBED_MAKE_ERROR(MBED_MODULE_PLATFORM, MBED_ERROR_CODE_INVALID_ARGUMENT); goto exit; } - + //Open the file for saving the error log info - if ((error_log_file = fopen( path, "w" )) == NULL){ + if ((error_log_file = fopen(path, "w")) == NULL) { ret = MBED_MAKE_ERROR(MBED_MODULE_PLATFORM, MBED_ERROR_CODE_OPEN_FAILED); goto exit; } - + //First store the first and last errors - if (fprintf(error_log_file, "\nFirst Error: Status:0x%x ThreadId:0x%x Address:0x%x Value:0x%x\n", - (unsigned int)first_error_ctx.error_status, - (unsigned int)first_error_ctx.thread_id, - (unsigned int)first_error_ctx.error_address, - (unsigned int)first_error_ctx.error_value) <= 0) { + if (fprintf(error_log_file, "\nFirst Error: Status:0x%x ThreadId:0x%x Address:0x%x Value:0x%x\n", + (unsigned int)first_error_ctx.error_status, + (unsigned int)first_error_ctx.thread_id, + (unsigned int)first_error_ctx.error_address, + (unsigned int)first_error_ctx.error_value) <= 0) { ret = MBED_MAKE_ERROR(MBED_MODULE_PLATFORM, MBED_ERROR_CODE_WRITE_FAILED); goto exit; } - - if (fprintf(error_log_file, "\nLast Error: Status:0x%x ThreadId:0x%x Address:0x%x Value:0x%x\n", - (unsigned int)last_error_ctx.error_status, - (unsigned int)last_error_ctx.thread_id, - (unsigned int)last_error_ctx.error_address, - (unsigned int)last_error_ctx.error_value) <= 0) { + + if (fprintf(error_log_file, "\nLast Error: Status:0x%x ThreadId:0x%x Address:0x%x Value:0x%x\n", + (unsigned int)last_error_ctx.error_status, + (unsigned int)last_error_ctx.thread_id, + (unsigned int)last_error_ctx.error_address, + (unsigned int)last_error_ctx.error_value) <= 0) { ret = MBED_MAKE_ERROR(MBED_MODULE_PLATFORM, MBED_ERROR_CODE_WRITE_FAILED); goto exit; } - + //Update with error log info while (--log_count >= 0) { mbed_error_hist_get(log_count, &ctx); //first line of file will be error log count - if (fprintf(error_log_file, "\n%d: Status:0x%x ThreadId:0x%x Address:0x%x Value:0x%x\n", - log_count, - (unsigned int)ctx.error_status, - (unsigned int)ctx.thread_id, - (unsigned int)ctx.error_address, - (unsigned int)ctx.error_value) <= 0) { + if (fprintf(error_log_file, "\n%d: Status:0x%x ThreadId:0x%x Address:0x%x Value:0x%x\n", + log_count, + (unsigned int)ctx.error_status, + (unsigned int)ctx.thread_id, + (unsigned int)ctx.error_address, + (unsigned int)ctx.error_value) <= 0) { ret = MBED_MAKE_ERROR(MBED_MODULE_PLATFORM, MBED_ERROR_CODE_WRITE_FAILED); goto exit; } } - + exit: fclose(error_log_file); - + return ret; } #endif diff --git a/platform/mbed_error.h b/platform/mbed_error.h index 630b052bcdc..3ba9fd24aad 100644 --- a/platform/mbed_error.h +++ b/platform/mbed_error.h @@ -29,14 +29,14 @@ extern "C" { #endif -/** Define this macro to include filenames in error context. For release builds, do not include filename to save memory. +/** Define this macro to include filenames in error context. For release builds, do not include filename to save memory. * MBED_PLATFORM_CONF_ERROR_FILENAME_CAPTURE_ENABLED - */ + */ /** Define this macro to enable error history - * MBED_PLATFORM_CONF_ERROR_HIST_ENABLED + * MBED_PLATFORM_CONF_ERROR_HIST_ENABLED */ - + #ifndef MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN #define MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN 16 #else //MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN @@ -46,7 +46,7 @@ extern "C" { //longer that 64 bytes with the current implementation. #error "Unsupported error filename buffer length detected, max supported length is 64 chars. Please change MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN or max-error-filename-len in configuration." #endif -#endif +#endif #define MBED_ERROR_STATUS_CODE_MASK (0x0000FFFF) #define MBED_ERROR_STATUS_CODE_POS (0) @@ -68,10 +68,10 @@ extern "C" { ((0x80000000) | \ (MBED_ERROR_STATUS_CODE_MASK & (error_code << MBED_ERROR_STATUS_CODE_POS)) | \ (MBED_ERROR_STATUS_MODULE_MASK & (module << MBED_ERROR_STATUS_MODULE_POS)) | \ - (MBED_ERROR_STATUS_TYPE_MASK & (type << MBED_ERROR_STATUS_TYPE_POS))) + (MBED_ERROR_STATUS_TYPE_MASK & (type << MBED_ERROR_STATUS_TYPE_POS))) #define MBED_GET_ERROR_TYPE( error_status ) ((error_status & MBED_ERROR_STATUS_TYPE_MASK) >> MBED_ERROR_STATUS_TYPE_POS) -#define MBED_GET_ERROR_MODULE( error_status ) ((error_status & MBED_ERROR_STATUS_MODULE_MASK) >> MBED_ERROR_STATUS_MODULE_POS) +#define MBED_GET_ERROR_MODULE( error_status ) ((error_status & MBED_ERROR_STATUS_MODULE_MASK) >> MBED_ERROR_STATUS_MODULE_POS) #define MBED_GET_ERROR_CODE( error_status ) (int)((MBED_GET_ERROR_TYPE( error_status ) == MBED_ERROR_TYPE_POSIX)?(-error_status):((error_status & MBED_ERROR_STATUS_CODE_MASK) >> MBED_ERROR_STATUS_CODE_POS)) /** mbed_error_status_t description @@ -84,7 +84,7 @@ extern "C" { | 31 Always Negative | 30-29(2 bits) | 28-24 | 23-16(8 bits) | 15-0(16 bits) | | -1 | TYPE | (unused/reserved) | MODULE TYPE | ERROR CODE | \endverbatim - * + * * The error status value range for each error type is as follows:\n * Posix Error Status-es - 0xFFFFFFFF to 0xFFFFFF01(-1 -255) - This corresponds to Posix error codes represented as negative.\n * System Error Status-es - 0x80XX0100 to 0x80XX0FFF - This corresponds to System error codes range(all values are negative). Bits 23-16 will be module type(marked with XX)\n @@ -141,7 +141,7 @@ typedef int mbed_error_status_t; * @param error_value Value associated with the error status. This would depend on error code/error scenario. * * @code - * + * * MBED_WARNING( ERROR_INVALID_SIZE, "MyDriver: Invalid size in read" ) * MBED_WARNING1( ERROR_INVALID_SIZE, "MyDriver: Invalid size in read", size_val ) * @@ -152,15 +152,15 @@ typedef int mbed_error_status_t; */ #ifdef NDEBUG #define MBED_WARNING1( error_status, error_msg, error_value ) mbed_warning( error_status, (const char *)NULL, (uint32_t)error_value, NULL, 0 ) -#define MBED_WARNING( error_status, error_msg ) mbed_warning( error_status, (const char *)NULL, (uint32_t)0, NULL, 0 ) +#define MBED_WARNING( error_status, error_msg ) mbed_warning( error_status, (const char *)NULL, (uint32_t)0, NULL, 0 ) #else //NDEBUG #if MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED #define MBED_WARNING1( error_status, error_msg, error_value ) mbed_warning( error_status, (const char *)error_msg, (uint32_t)error_value, (const char *)MBED_FILENAME, __LINE__ ) #define MBED_WARNING( error_status, error_msg ) mbed_warning( error_status, (const char *)error_msg, (uint32_t)0 , (const char *)MBED_FILENAME, __LINE__ ) #else //MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED #define MBED_WARNING1( error_status, error_msg, error_value ) mbed_warning( error_status, (const char *)error_msg, (uint32_t)error_value, NULL, 0 ) -#define MBED_WARNING( error_status, error_msg ) mbed_warning( error_status, (const char *)error_msg, (uint32_t)0, NULL, 0 ) -#endif +#define MBED_WARNING( error_status, error_msg ) mbed_warning( error_status, (const char *)error_msg, (uint32_t)0, NULL, 0 ) +#endif #endif /** @@ -173,13 +173,13 @@ typedef int mbed_error_status_t; * MBED_ERROR_INVALID_ARGUMENT if called with invalid error status/codes * * @code - * + * * MBED_ERROR( MBED_ERROR_MUTEX_LOCK_FAILED, "MyDriver: Can't lock driver Mutex" ) * MBED_ERROR1( MBED_ERROR_MUTEX_LOCK_FAILED, "MyDriver: Can't lock driver Mutex", &my_mutex ) * * @endcode * @note The macro calls mbed_error API with filename and line number info without caller explicitly passing them. - * Since this macro is a wrapper for mbed_error API callers should process the return value from this macro which is the return value from calling mbed_error API. + * Since this macro is a wrapper for mbed_error API callers should process the return value from this macro which is the return value from calling mbed_error API. * */ #ifdef NDEBUG @@ -192,7 +192,7 @@ typedef int mbed_error_status_t; #else //MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED #define MBED_ERROR1( error_status, error_msg, error_value ) mbed_error( error_status, (const char *)error_msg, (uint32_t)error_value, NULL, 0 ) #define MBED_ERROR( error_status, error_msg ) mbed_error( error_status, (const char *)error_msg, (uint32_t)0 , NULL, 0 ) -#endif +#endif #endif //Error Type definition @@ -201,19 +201,18 @@ typedef int mbed_error_status_t; * This enumeration defines the Error types supported. The value of these enum values will be encoded into mbed_error_status_t TYPE field.\n * See mbed_error_status_t description for more info.\n * MBED_ERROR_TYPE_SYSTEM - Used to indicate that the error status is of System defined Error type.\n - * MBED_ERROR_TYPE_CUSTOM - Used to indicate that the error status is of Custom defined Error type.\n - * MBED_ERROR_TYPE_POSIX - Used to indicate that the error status is of Posix error type.\n + * MBED_ERROR_TYPE_CUSTOM - Used to indicate that the error status is of Custom defined Error type.\n + * MBED_ERROR_TYPE_POSIX - Used to indicate that the error status is of Posix error type.\n * */ -typedef enum _mbed_error_type_t -{ +typedef enum _mbed_error_type_t { MBED_ERROR_TYPE_SYSTEM = 0, MBED_ERROR_TYPE_CUSTOM = 1, //2 is reserved //Use 3 for POSIX because we are mapping -1 to -255 to POSIX error codes //and thus we must use 3 to match the type bits in error status representation which are from 0xFFFFFFFF to 0xFFFFFF00 MBED_ERROR_TYPE_POSIX = 3 -} mbed_error_type_t; +} mbed_error_type_t; //Module type/id definitions /** mbed_module_type_t definition @@ -228,16 +227,16 @@ typedef enum _mbed_error_type_t * @code * Example: mbed_error_status_t i2c_driver_error = MBED_MAKE_ERROR( MBED_MODULE_DRIVER_I2C, MBED_ERROR_CONFIG_UNSUPPORTED ); * @endcode - * + * * @note * \n Below are the module code mappings:\n \verbatim - MBED_MODULE_APPLICATION 0 Application + MBED_MODULE_APPLICATION 0 Application MBED_MODULE_PLATFORM 1 Platform MODULE_KERNEL 2 RTX Kernel MBED_MODULE_NETWORK_STACK 3 Network stack MBED_MODULE_HAL 4 HAL - Hardware Abstraction Layer - MBED_MODULE_NETWORK_STACKMODULE_MEMORY_SUBSYSTEM 5 Memory Subsystem + MBED_MODULE_NETWORK_STACKMODULE_MEMORY_SUBSYSTEM 5 Memory Subsystem MBED_MODULE_FILESYSTEM 6 Filesystem MBED_MODULE_BLOCK_DEVICE 7 Block device MBED_MODULE_DRIVER 8 Driver @@ -254,11 +253,11 @@ typedef enum _mbed_error_type_t MODULE_DRIVER_PWM 19 PWM Driver MODULE_DRIVER_QSPI 20 QSPI Driver MODULE_DRIVER_USB 21 USB Driver - MODULE_TARGET_SDK 22 SDK - + MODULE_TARGET_SDK 22 SDK + MBED_MODULE_UNKNOWN 255 Unknown module \endverbatim - * + * */ typedef enum _mbed_module_type { MBED_MODULE_APPLICATION = 0, @@ -285,7 +284,7 @@ typedef enum _mbed_module_type { MBED_MODULE_DRIVER_USB, MBED_MODULE_TARGET_SDK, /* Add More entities here as required */ - + MBED_MODULE_UNKNOWN = 255, MBED_MODULE_MAX = MBED_MODULE_UNKNOWN } mbed_module_type_t; @@ -315,141 +314,141 @@ typedef enum _mbed_module_type { * ERROR_EPERM = -(MBED_POSIX_ERROR_BASE+EPERM)\n * Its effectively equivalent to:\n * ERROR_CODE_EPERM = 1\n - * ERROR_EPERM = -1\n + * ERROR_EPERM = -1\n * All Posix error codes currently supported by MbedOS(defined in mbed_retarget.h) are defined using the MBED_DEFINE_POSIX_ERROR macro.\n\n * Below are the Posic error codes and the description:\n * \verbatim - EPERM 1 Operation not permitted - ENOENT 2 No such file or directory - ESRCH 3 No such process - EINTR 4 Interrupted system call - EIO 5 I/O error - ENXIO 6 No such device or address - E2BIG 7 Argument list too long - ENOEXEC 8 Exec format error - EBADF 9 Bad file number - ECHILD 10 No child processes - EAGAIN 11 Try again - ENOMEM 12 Out of memory - EACCES 13 Permission denied - EFAULT 14 Bad address - ENOTBLK 15 Block device required - EBUSY 16 Device or resource busy - EEXIST 17 File exists - EXDEV 18 Cross-device link - ENODEV 19 No such device - ENOTDIR 20 Not a directory - EISDIR 21 Is a directory - EINVAL 22 Invalid argument - ENFILE 23 File table overflow - EMFILE 24 Too many open files - ENOTTY 25 Not a typewriter - ETXTBSY 26 Text file busy - EFBIG 27 File too large - ENOSPC 28 No space left on device - ESPIPE 29 Illegal seek - EROFS 30 Read-only file system - EMLINK 31 Too many links - EPIPE 32 Broken pipe - EDOM 33 Math argument out of domain of func - ERANGE 34 Math result not representable - EDEADLK 35 Resource deadlock would occur - ENAMETOOLONG 36 File name too long - ENOLCK 37 No record locks available - ENOSYS 38 Function not implemented - ENOTEMPTY 39 Directory not empty - ELOOP 40 Too many symbolic links encountered - EWOULDBLOCK EAGAIN Operation would block - ENOMSG 42 No message of desired type - EIDRM 43 Identifier removed - ECHRNG 44 Channel number out of range - EL2NSYNC 45 Level 2 not synchronized - EL3HLT 46 Level 3 halted - EL3RST 47 Level 3 reset - ELNRNG 48 Link number out of range - EUNATCH 49 Protocol driver not attached - ENOCSI 50 No CSI structure available - EL2HLT 51 Level 2 halted - EBADE 52 Invalid exchange - EBADR 53 Invalid request descriptor - EXFULL 54 Exchange full - ENOANO 55 No anode - EBADRQC 56 Invalid request code - EBADSLT 57 Invalid slot - EDEADLOCK EDEADLK Resource deadlock would occur - EBFONT 59 Bad font file format - ENOSTR 60 Device not a stream - ENODATA 61 No data available - ETIME 62 Timer expired - ENOSR 63 Out of streams resources - ENONET 64 Machine is not on the network - ENOPKG 65 Package not installed - EREMOTE 66 Object is remote - ENOLINK 67 Link has been severed - EADV 68 Advertise error - ESRMNT 69 Srmount error - ECOMM 70 Communication error on send - EPROTO 71 Protocol error - EMULTIHOP 72 Multihop attempted - EDOTDOT 73 RFS specific error - EBADMSG 74 Not a data message - EOVERFLOW 75 Value too large for defined data type - ENOTUNIQ 76 Name not unique on network - EBADFD 77 File descriptor in bad state - EREMCHG 78 Remote address changed - ELIBACC 79 Can not access a needed shared library - ELIBBAD 80 Accessing a corrupted shared library - ELIBSCN 81 .lib section in a.out corrupted - ELIBMAX 82 Attempting to link in too many shared libraries - ELIBEXEC 83 Cannot exec a shared library directly - EILSEQ 84 Illegal byte sequence - ERESTART 85 Interrupted system call should be restarted - ESTRPIPE 86 Streams pipe error - EUSERS 87 Too many users - ENOTSOCK 88 Socket operation on non-socket - EDESTADDRREQ 89 Destination address required - EMSGSIZE 90 Message too long - EPROTOTYPE 91 Protocol wrong type for socket - ENOPROTOOPT 92 Protocol not available - EPROTONOSUPPORT 93 Protocol not supported - ESOCKTNOSUPPORT 94 Socket type not supported - EOPNOTSUPP 95 Operation not supported on transport endpoint - EPFNOSUPPORT 96 Protocol family not supported - EAFNOSUPPORT 97 Address family not supported by protocol - EADDRINUSE 98 Address already in use - EADDRNOTAVAIL 99 Cannot assign requested address - ENETDOWN 100 Network is down - ENETUNREACH 101 Network is unreachable - ENETRESET 102 Network dropped connection because of reset - ECONNABORTED 103 Software caused connection abort - ECONNRESET 104 Connection reset by peer - ENOBUFS 105 No buffer space available - EISCONN 106 Transport endpoint is already connected - ENOTCONN 107 Transport endpoint is not connected - ESHUTDOWN 108 Cannot send after transport endpoint shutdown - ETOOMANYREFS 109 Too many references: cannot splice - ETIMEDOUT 110 Connection timed out - ECONNREFUSED 111 Connection refused - EHOSTDOWN 112 Host is down - EHOSTUNREACH 113 No route to host - EALREADY 114 Operation already in progress - EINPROGRESS 115 Operation now in progress - ESTALE 116 Stale NFS file handle - EUCLEAN 117 Structure needs cleaning - ENOTNAM 118 Not a XENIX named type file - ENAVAIL 119 No XENIX semaphores available - EISNAM 120 Is a named type file - EREMOTEIO 121 Remote I/O error - EDQUOT 122 Quota exceeded - ENOMEDIUM 123 No medium found - EMEDIUMTYPE 124 Wrong medium type - ECANCELED 125 Operation Canceled - ENOKEY 126 Required key not available - EKEYEXPIRED 127 Key has expired - EKEYREVOKED 128 Key has been revoked - EKEYREJECTED 129 Key was rejected by service - EOWNERDEAD 130 Owner died - ENOTRECOVERABLE 131 State not recoverable + EPERM 1 Operation not permitted + ENOENT 2 No such file or directory + ESRCH 3 No such process + EINTR 4 Interrupted system call + EIO 5 I/O error + ENXIO 6 No such device or address + E2BIG 7 Argument list too long + ENOEXEC 8 Exec format error + EBADF 9 Bad file number + ECHILD 10 No child processes + EAGAIN 11 Try again + ENOMEM 12 Out of memory + EACCES 13 Permission denied + EFAULT 14 Bad address + ENOTBLK 15 Block device required + EBUSY 16 Device or resource busy + EEXIST 17 File exists + EXDEV 18 Cross-device link + ENODEV 19 No such device + ENOTDIR 20 Not a directory + EISDIR 21 Is a directory + EINVAL 22 Invalid argument + ENFILE 23 File table overflow + EMFILE 24 Too many open files + ENOTTY 25 Not a typewriter + ETXTBSY 26 Text file busy + EFBIG 27 File too large + ENOSPC 28 No space left on device + ESPIPE 29 Illegal seek + EROFS 30 Read-only file system + EMLINK 31 Too many links + EPIPE 32 Broken pipe + EDOM 33 Math argument out of domain of func + ERANGE 34 Math result not representable + EDEADLK 35 Resource deadlock would occur + ENAMETOOLONG 36 File name too long + ENOLCK 37 No record locks available + ENOSYS 38 Function not implemented + ENOTEMPTY 39 Directory not empty + ELOOP 40 Too many symbolic links encountered + EWOULDBLOCK EAGAIN Operation would block + ENOMSG 42 No message of desired type + EIDRM 43 Identifier removed + ECHRNG 44 Channel number out of range + EL2NSYNC 45 Level 2 not synchronized + EL3HLT 46 Level 3 halted + EL3RST 47 Level 3 reset + ELNRNG 48 Link number out of range + EUNATCH 49 Protocol driver not attached + ENOCSI 50 No CSI structure available + EL2HLT 51 Level 2 halted + EBADE 52 Invalid exchange + EBADR 53 Invalid request descriptor + EXFULL 54 Exchange full + ENOANO 55 No anode + EBADRQC 56 Invalid request code + EBADSLT 57 Invalid slot + EDEADLOCK EDEADLK Resource deadlock would occur + EBFONT 59 Bad font file format + ENOSTR 60 Device not a stream + ENODATA 61 No data available + ETIME 62 Timer expired + ENOSR 63 Out of streams resources + ENONET 64 Machine is not on the network + ENOPKG 65 Package not installed + EREMOTE 66 Object is remote + ENOLINK 67 Link has been severed + EADV 68 Advertise error + ESRMNT 69 Srmount error + ECOMM 70 Communication error on send + EPROTO 71 Protocol error + EMULTIHOP 72 Multihop attempted + EDOTDOT 73 RFS specific error + EBADMSG 74 Not a data message + EOVERFLOW 75 Value too large for defined data type + ENOTUNIQ 76 Name not unique on network + EBADFD 77 File descriptor in bad state + EREMCHG 78 Remote address changed + ELIBACC 79 Can not access a needed shared library + ELIBBAD 80 Accessing a corrupted shared library + ELIBSCN 81 .lib section in a.out corrupted + ELIBMAX 82 Attempting to link in too many shared libraries + ELIBEXEC 83 Cannot exec a shared library directly + EILSEQ 84 Illegal byte sequence + ERESTART 85 Interrupted system call should be restarted + ESTRPIPE 86 Streams pipe error + EUSERS 87 Too many users + ENOTSOCK 88 Socket operation on non-socket + EDESTADDRREQ 89 Destination address required + EMSGSIZE 90 Message too long + EPROTOTYPE 91 Protocol wrong type for socket + ENOPROTOOPT 92 Protocol not available + EPROTONOSUPPORT 93 Protocol not supported + ESOCKTNOSUPPORT 94 Socket type not supported + EOPNOTSUPP 95 Operation not supported on transport endpoint + EPFNOSUPPORT 96 Protocol family not supported + EAFNOSUPPORT 97 Address family not supported by protocol + EADDRINUSE 98 Address already in use + EADDRNOTAVAIL 99 Cannot assign requested address + ENETDOWN 100 Network is down + ENETUNREACH 101 Network is unreachable + ENETRESET 102 Network dropped connection because of reset + ECONNABORTED 103 Software caused connection abort + ECONNRESET 104 Connection reset by peer + ENOBUFS 105 No buffer space available + EISCONN 106 Transport endpoint is already connected + ENOTCONN 107 Transport endpoint is not connected + ESHUTDOWN 108 Cannot send after transport endpoint shutdown + ETOOMANYREFS 109 Too many references: cannot splice + ETIMEDOUT 110 Connection timed out + ECONNREFUSED 111 Connection refused + EHOSTDOWN 112 Host is down + EHOSTUNREACH 113 No route to host + EALREADY 114 Operation already in progress + EINPROGRESS 115 Operation now in progress + ESTALE 116 Stale NFS file handle + EUCLEAN 117 Structure needs cleaning + ENOTNAM 118 Not a XENIX named type file + ENAVAIL 119 No XENIX semaphores available + EISNAM 120 Is a named type file + EREMOTEIO 121 Remote I/O error + EDQUOT 122 Quota exceeded + ENOMEDIUM 123 No medium found + EMEDIUMTYPE 124 Wrong medium type + ECANCELED 125 Operation Canceled + ENOKEY 126 Required key not available + EKEYEXPIRED 127 Key has expired + EKEYREVOKED 128 Key has been revoked + EKEYREJECTED 129 Key was rejected by service + EOWNERDEAD 130 Owner died + ENOTRECOVERABLE 131 State not recoverable \endverbatim * * @note @@ -459,75 +458,75 @@ typedef enum _mbed_module_type { * ERROR_INVALID_ARGUMENT = MAKE_MBED_ERROR(ERROR_TYPE_SYSTEM, MBED_MODULE_UNKNOWN, ERROR_CODE_INVALID_ARGUMENT)\n * Its effectively equivalent to:\n * ERROR_CODE_INVALID_ARGUMENT = 1\n - * ERROR_INVALID_ARGUMENT = 0x80FF0001\n (Note that MODULE field is set to MBED_MODULE_UNKNOWN) + * ERROR_INVALID_ARGUMENT = 0x80FF0001\n (Note that MODULE field is set to MBED_MODULE_UNKNOWN) * New System Error codes should be defined using MBED_DEFINE_SYSTEM_ERROR macro and must have an unique error code value\n * passed as the second argument in the MBED_DEFINE_SYSTEM_ERROR macro.\n\n * Below are the Mbed System error codes and the description: - * \verbatim - UNKNOWN 256 Unknown error - INVALID_ARGUMENT 257 Invalid Argument - INVALID_DATA 258 Invalid data - INVALID_FORMAT 259 Invalid format - INVALID_INDEX 260 Invalid Index - INVALID_SIZE 261 Inavlid Size - INVALID_OPERATION 262 Invalid Operation - NOT_FOUND 263 Not Found - ACCESS_DENIED 264 Access Denied - NOT_SUPPORTED 265 Not supported - BUFFER_FULL 266 Buffer Full - MEDIA_FULL 267 Media/Disk Full - ALREADY_IN_USE 268 Already in use - TIMEOUT 269 Timeout error - NOT_READY 270 Not Ready - FAILED_OPERATION 271 Requested Operation failed - OPERATION_PROHIBITED 272 Operation prohibited - OPERATION_ABORTED 273 Operation failed - WRITE_PROTECTED 274 Attempt to write to write-protected resource - NO_RESPONSE 275 No response - SEMAPHORE_LOCK_FAILED 276 Sempahore lock failed - MUTEX_LOCK_FAILED 277 Mutex lock failed - SEMAPHORE_UNLOCK_FAILED 278 Sempahore unlock failed - MUTEX_UNLOCK_FAILED 279 Mutex unlock failed - CRC_ERROR 280 CRC error or mismatch - OPEN_FAILED 281 Open failed - CLOSE_FAILED 282 Close failed - READ_FAILED 283 Read failed - WRITE_FAILED 284 Write failed - INITIALIZATION_FAILED 285 Initialization failed - BOOT_FAILURE 286 Boot failure - OUT_OF_MEMORY 287 Out of memory - OUT_OF_RESOURCES 288 Out of resources - ALLOC_FAILED 289 Alloc failed - FREE_FAILED 290 Free failed - OVERFLOW 291 Overflow error - UNDERFLOW 292 Underflow error - STACK_OVERFLOW 293 Stack overflow error - ISR_QUEUE_OVERFLOW 294 ISR queue overflow - TIMER_QUEUE_OVERFLOW 295 Timer Queue overflow - CLIB_SPACE_UNAVAILABLE 296 Standard library error - Space unavailable - CLIB_EXCEPTION 297 Standard library error - Exception - CLIB_MUTEX_INIT_FAILURE 298 Standard library error - Mutex Init failure - CREATE_FAILED 299 Create failed - DELETE_FAILED 300 Delete failed - THREAD_CREATE_FAILED 301 Thread Create failed - THREAD_DELETE_FAILED 302 Thread Delete failed - PROHIBITED_IN_ISR_CONTEXT 303 Operation Prohibited in ISR context - PINMAP_INVALID 304 Pinmap Invalid - RTOS_EVENT 305 Unknown Rtos Error - RTOS_THREAD_EVENT 306 Rtos Thread Error - RTOS_MUTEX_EVENT 307 Rtos Mutex Error - RTOS_SEMAPHORE_EVENT 308 Rtos Semaphore Error - RTOS_MEMORY_POOL_EVENT 309 Rtos Memory Pool Error - RTOS_TIMER_EVENT 310 Rtos Timer Error - RTOS_EVENT_FLAGS_EVENT 311 Rtos Event flags Error - RTOS_MESSAGE_QUEUE_EVENT 312 Rtos Message queue Error - DEVICE_BUSY 313 Device Busy - CONFIG_UNSUPPORTED 314 Configuration not supported - CONFIG_MISMATCH 315 Configuration mismatch - ALREADY_INITIALIZED 316 Already initialzied - HARDFAULT_EXCEPTION 317 HardFault exception - MEMMANAGE_EXCEPTION 318 MemManage exception - BUSFAULT_EXCEPTION 319 BusFault exception + * \verbatim + UNKNOWN 256 Unknown error + INVALID_ARGUMENT 257 Invalid Argument + INVALID_DATA 258 Invalid data + INVALID_FORMAT 259 Invalid format + INVALID_INDEX 260 Invalid Index + INVALID_SIZE 261 Inavlid Size + INVALID_OPERATION 262 Invalid Operation + NOT_FOUND 263 Not Found + ACCESS_DENIED 264 Access Denied + NOT_SUPPORTED 265 Not supported + BUFFER_FULL 266 Buffer Full + MEDIA_FULL 267 Media/Disk Full + ALREADY_IN_USE 268 Already in use + TIMEOUT 269 Timeout error + NOT_READY 270 Not Ready + FAILED_OPERATION 271 Requested Operation failed + OPERATION_PROHIBITED 272 Operation prohibited + OPERATION_ABORTED 273 Operation failed + WRITE_PROTECTED 274 Attempt to write to write-protected resource + NO_RESPONSE 275 No response + SEMAPHORE_LOCK_FAILED 276 Sempahore lock failed + MUTEX_LOCK_FAILED 277 Mutex lock failed + SEMAPHORE_UNLOCK_FAILED 278 Sempahore unlock failed + MUTEX_UNLOCK_FAILED 279 Mutex unlock failed + CRC_ERROR 280 CRC error or mismatch + OPEN_FAILED 281 Open failed + CLOSE_FAILED 282 Close failed + READ_FAILED 283 Read failed + WRITE_FAILED 284 Write failed + INITIALIZATION_FAILED 285 Initialization failed + BOOT_FAILURE 286 Boot failure + OUT_OF_MEMORY 287 Out of memory + OUT_OF_RESOURCES 288 Out of resources + ALLOC_FAILED 289 Alloc failed + FREE_FAILED 290 Free failed + OVERFLOW 291 Overflow error + UNDERFLOW 292 Underflow error + STACK_OVERFLOW 293 Stack overflow error + ISR_QUEUE_OVERFLOW 294 ISR queue overflow + TIMER_QUEUE_OVERFLOW 295 Timer Queue overflow + CLIB_SPACE_UNAVAILABLE 296 Standard library error - Space unavailable + CLIB_EXCEPTION 297 Standard library error - Exception + CLIB_MUTEX_INIT_FAILURE 298 Standard library error - Mutex Init failure + CREATE_FAILED 299 Create failed + DELETE_FAILED 300 Delete failed + THREAD_CREATE_FAILED 301 Thread Create failed + THREAD_DELETE_FAILED 302 Thread Delete failed + PROHIBITED_IN_ISR_CONTEXT 303 Operation Prohibited in ISR context + PINMAP_INVALID 304 Pinmap Invalid + RTOS_EVENT 305 Unknown Rtos Error + RTOS_THREAD_EVENT 306 Rtos Thread Error + RTOS_MUTEX_EVENT 307 Rtos Mutex Error + RTOS_SEMAPHORE_EVENT 308 Rtos Semaphore Error + RTOS_MEMORY_POOL_EVENT 309 Rtos Memory Pool Error + RTOS_TIMER_EVENT 310 Rtos Timer Error + RTOS_EVENT_FLAGS_EVENT 311 Rtos Event flags Error + RTOS_MESSAGE_QUEUE_EVENT 312 Rtos Message queue Error + DEVICE_BUSY 313 Device Busy + CONFIG_UNSUPPORTED 314 Configuration not supported + CONFIG_MISMATCH 315 Configuration mismatch + ALREADY_INITIALIZED 316 Already initialzied + HARDFAULT_EXCEPTION 317 HardFault exception + MEMMANAGE_EXCEPTION 318 MemManage exception + BUSFAULT_EXCEPTION 319 BusFault exception USAGEFAULT_EXCEPTION 320 UsageFault exception \endverbatim * @@ -542,23 +541,23 @@ typedef enum _mbed_module_type { * ERROR_MY_CUSTOM_ERROR = 0xA0FF1001\n (Note that MODULE field is set to MBED_MODULE_UNKNOWN) \n\n * * @note - * **Using error codes:** \n + * **Using error codes:** \n * Posix error codes may be used in modules/functions currently using Posix error codes and switching them to Mbed-OS error codes - * may cause interoperability issues. For example, some of the filesystem, network stack implementations may need to use - * Posix error codes in order to keep them compatible with other modules interfacing with them, and may continue to use Posix error codes. - * + * may cause interoperability issues. For example, some of the filesystem, network stack implementations may need to use + * Posix error codes in order to keep them compatible with other modules interfacing with them, and may continue to use Posix error codes. + * * In all other cases, like for any native development of Mbed-OS modules Mbed-OS error codes should be used. * This makes it easy to use Mbed-OS error reporting/logging infrastructure and makes debugging error scenarios * much more efficient. - * + * * @note * **Searching for error codes in mbed-os source tree:** \n * If you get an error report as below which you want to search for in mbed-os source tree, first take note of "Error Code" number. \n * For example, the below error report has an error code of \b 259. Find the error name associated with the error code and in this case its \b INVALID_FORMAT. \n - * Use that error name(\b INVALID_FORMAT) to search the source tree for code locations setting that specific error code. \n + * Use that error name(\b INVALID_FORMAT) to search the source tree for code locations setting that specific error code. \n * If the Error module reported is not 255(which indicates unknown module), you can also use that to narrow down to the specific component reporting the error. * See mbed_module_type_t enum above for module mapping. \n - * + * * \verbatim ++ MbedOS Error Info ++ Error Status: 0x80040103 @@ -571,221 +570,221 @@ typedef enum _mbed_module_type { -- MbedOS Error Info -- \endverbatim */ - + typedef enum _mbed_error_code { //Below are POSIX ERROR CODE definitions, which starts at MBED_POSIX_ERROR_BASE(=0) //POSIX ERROR CODE definitions starts at offset 0(MBED_POSIX_ERROR_BASE) to align them with actual Posix Error Code //defintions in mbed_retarget.h // Error Name Error Code - MBED_DEFINE_POSIX_ERROR( EPERM ,EPERM ), /* 1 Operation not permitted */ - MBED_DEFINE_POSIX_ERROR( ENOENT ,ENOENT ), /* 2 No such file or directory */ - MBED_DEFINE_POSIX_ERROR( ESRCH ,ESRCH ), /* 3 No such process */ - MBED_DEFINE_POSIX_ERROR( EINTR ,EINTR ), /* 4 Interrupted system call */ - MBED_DEFINE_POSIX_ERROR( EIO ,EIO ), /* 5 I/O error */ - MBED_DEFINE_POSIX_ERROR( ENXIO ,ENXIO ), /* 6 No such device or address */ - MBED_DEFINE_POSIX_ERROR( E2BIG ,E2BIG ), /* 7 Argument list too long */ - MBED_DEFINE_POSIX_ERROR( ENOEXEC ,ENOEXEC ), /* 8 Exec format error */ - MBED_DEFINE_POSIX_ERROR( EBADF ,EBADF ), /* 9 Bad file number */ - MBED_DEFINE_POSIX_ERROR( ECHILD ,ECHILD ), /* 10 No child processes */ - MBED_DEFINE_POSIX_ERROR( EAGAIN ,EAGAIN ), /* 11 Try again */ - MBED_DEFINE_POSIX_ERROR( ENOMEM ,ENOMEM ), /* 12 Out of memory */ - MBED_DEFINE_POSIX_ERROR( EACCES ,EACCES ), /* 13 Permission denied */ - MBED_DEFINE_POSIX_ERROR( EFAULT ,EFAULT ), /* 14 Bad address */ - MBED_DEFINE_POSIX_ERROR( ENOTBLK ,ENOTBLK ), /* 15 Block device required */ - MBED_DEFINE_POSIX_ERROR( EBUSY ,EBUSY ), /* 16 Device or resource busy */ - MBED_DEFINE_POSIX_ERROR( EEXIST ,EEXIST ), /* 17 File exists */ - MBED_DEFINE_POSIX_ERROR( EXDEV ,EXDEV ), /* 18 Cross-device link */ - MBED_DEFINE_POSIX_ERROR( ENODEV ,ENODEV ), /* 19 No such device */ - MBED_DEFINE_POSIX_ERROR( ENOTDIR ,ENOTDIR ), /* 20 Not a directory */ - MBED_DEFINE_POSIX_ERROR( EISDIR ,EISDIR ), /* 21 Is a directory */ - MBED_DEFINE_POSIX_ERROR( EINVAL ,EINVAL ), /* 22 Invalid argument */ - MBED_DEFINE_POSIX_ERROR( ENFILE ,ENFILE ), /* 23 File table overflow */ - MBED_DEFINE_POSIX_ERROR( EMFILE ,EMFILE ), /* 24 Too many open files */ - MBED_DEFINE_POSIX_ERROR( ENOTTY ,ENOTTY ), /* 25 Not a typewriter */ - MBED_DEFINE_POSIX_ERROR( ETXTBSY ,ETXTBSY ), /* 26 Text file busy */ - MBED_DEFINE_POSIX_ERROR( EFBIG ,EFBIG ), /* 27 File too large */ - MBED_DEFINE_POSIX_ERROR( ENOSPC ,ENOSPC ), /* 28 No space left on device */ - MBED_DEFINE_POSIX_ERROR( ESPIPE ,ESPIPE ), /* 29 Illegal seek */ - MBED_DEFINE_POSIX_ERROR( EROFS ,EROFS ), /* 30 Read-only file system */ - MBED_DEFINE_POSIX_ERROR( EMLINK ,EMLINK ), /* 31 Too many links */ - MBED_DEFINE_POSIX_ERROR( EPIPE ,EPIPE ), /* 32 Broken pipe */ - MBED_DEFINE_POSIX_ERROR( EDOM ,EDOM ), /* 33 Math argument out of domain of func */ - MBED_DEFINE_POSIX_ERROR( ERANGE ,ERANGE ), /* 34 Math result not representable */ - MBED_DEFINE_POSIX_ERROR( EDEADLK ,EDEADLK ), /* 35 Resource deadlock would occur */ - MBED_DEFINE_POSIX_ERROR( ENAMETOOLONG ,ENAMETOOLONG ), /* 36 File name too long */ - MBED_DEFINE_POSIX_ERROR( ENOLCK ,ENOLCK ), /* 37 No record locks available */ - MBED_DEFINE_POSIX_ERROR( ENOSYS ,ENOSYS ), /* 38 Function not implemented */ - MBED_DEFINE_POSIX_ERROR( ENOTEMPTY ,ENOTEMPTY ), /* 39 Directory not empty */ - MBED_DEFINE_POSIX_ERROR( ELOOP ,ELOOP ), /* 40 Too many symbolic links encountered */ - MBED_DEFINE_POSIX_ERROR( EWOULDBLOCK ,EAGAIN ), /* EAGAIN Operation would block */ - MBED_DEFINE_POSIX_ERROR( ENOMSG ,ENOMSG ), /* 42 No message of desired type */ - MBED_DEFINE_POSIX_ERROR( EIDRM ,EIDRM ), /* 43 Identifier removed */ - MBED_DEFINE_POSIX_ERROR( ECHRNG ,ECHRNG ), /* 44 Channel number out of range */ - MBED_DEFINE_POSIX_ERROR( EL2NSYNC ,EL2NSYNC ), /* 45 Level 2 not synchronized */ - MBED_DEFINE_POSIX_ERROR( EL3HLT ,EL3HLT ), /* 46 Level 3 halted */ - MBED_DEFINE_POSIX_ERROR( EL3RST ,EL3RST ), /* 47 Level 3 reset */ - MBED_DEFINE_POSIX_ERROR( ELNRNG ,ELNRNG ), /* 48 Link number out of range */ - MBED_DEFINE_POSIX_ERROR( EUNATCH ,EUNATCH ), /* 49 Protocol driver not attached */ - MBED_DEFINE_POSIX_ERROR( ENOCSI ,ENOCSI ), /* 50 No CSI structure available */ - MBED_DEFINE_POSIX_ERROR( EL2HLT ,EL2HLT ), /* 51 Level 2 halted */ - MBED_DEFINE_POSIX_ERROR( EBADE ,EBADE ), /* 52 Invalid exchange */ - MBED_DEFINE_POSIX_ERROR( EBADR ,EBADR ), /* 53 Invalid request descriptor */ - MBED_DEFINE_POSIX_ERROR( EXFULL ,EXFULL ), /* 54 Exchange full */ - MBED_DEFINE_POSIX_ERROR( ENOANO ,ENOANO ), /* 55 No anode */ - MBED_DEFINE_POSIX_ERROR( EBADRQC ,EBADRQC ), /* 56 Invalid request code */ - MBED_DEFINE_POSIX_ERROR( EBADSLT ,EBADSLT ), /* 57 Invalid slot */ - MBED_DEFINE_POSIX_ERROR( EDEADLOCK ,EDEADLK ), /* EDEADLK Resource deadlock would occur */ - MBED_DEFINE_POSIX_ERROR( EBFONT ,EBFONT ), /* 59 Bad font file format */ - MBED_DEFINE_POSIX_ERROR( ENOSTR ,ENOSTR ), /* 60 Device not a stream */ - MBED_DEFINE_POSIX_ERROR( ENODATA ,ENODATA ), /* 61 No data available */ - MBED_DEFINE_POSIX_ERROR( ETIME ,ETIME ), /* 62 Timer expired */ - MBED_DEFINE_POSIX_ERROR( ENOSR ,ENOSR ), /* 63 Out of streams resources */ - MBED_DEFINE_POSIX_ERROR( ENONET ,ENONET ), /* 64 Machine is not on the network */ - MBED_DEFINE_POSIX_ERROR( ENOPKG ,ENOPKG ), /* 65 Package not installed */ - MBED_DEFINE_POSIX_ERROR( EREMOTE ,EREMOTE ), /* 66 Object is remote */ - MBED_DEFINE_POSIX_ERROR( ENOLINK ,ENOLINK ), /* 67 Link has been severed */ - MBED_DEFINE_POSIX_ERROR( EADV ,EADV ), /* 68 Advertise error */ - MBED_DEFINE_POSIX_ERROR( ESRMNT ,ESRMNT ), /* 69 Srmount error */ - MBED_DEFINE_POSIX_ERROR( ECOMM ,ECOMM ), /* 70 Communication error on send */ - MBED_DEFINE_POSIX_ERROR( EPROTO ,EPROTO ), /* 71 Protocol error */ - MBED_DEFINE_POSIX_ERROR( EMULTIHOP ,EMULTIHOP ), /* 72 Multihop attempted */ - MBED_DEFINE_POSIX_ERROR( EDOTDOT ,EDOTDOT ), /* 73 RFS specific error */ - MBED_DEFINE_POSIX_ERROR( EBADMSG ,EBADMSG ), /* 74 Not a data message */ - MBED_DEFINE_POSIX_ERROR( EOVERFLOW ,EOVERFLOW ), /* 75 Value too large for defined data type */ - MBED_DEFINE_POSIX_ERROR( ENOTUNIQ ,ENOTUNIQ ), /* 76 Name not unique on network */ - MBED_DEFINE_POSIX_ERROR( EBADFD ,EBADFD ), /* 77 File descriptor in bad state */ - MBED_DEFINE_POSIX_ERROR( EREMCHG ,EREMCHG ), /* 78 Remote address changed */ - MBED_DEFINE_POSIX_ERROR( ELIBACC ,ELIBACC ), /* 79 Can not access a needed shared library */ - MBED_DEFINE_POSIX_ERROR( ELIBBAD ,ELIBBAD ), /* 80 Accessing a corrupted shared library */ - MBED_DEFINE_POSIX_ERROR( ELIBSCN ,ELIBSCN ), /* 81 .lib section in a.out corrupted */ - MBED_DEFINE_POSIX_ERROR( ELIBMAX ,ELIBMAX ), /* 82 Attempting to link in too many shared libraries */ - MBED_DEFINE_POSIX_ERROR( ELIBEXEC ,ELIBEXEC ), /* 83 Cannot exec a shared library directly */ - MBED_DEFINE_POSIX_ERROR( EILSEQ ,EILSEQ ), /* 84 Illegal byte sequence */ - MBED_DEFINE_POSIX_ERROR( ERESTART ,ERESTART ), /* 85 Interrupted system call should be restarted */ - MBED_DEFINE_POSIX_ERROR( ESTRPIPE ,ESTRPIPE ), /* 86 Streams pipe error */ - MBED_DEFINE_POSIX_ERROR( EUSERS ,EUSERS ), /* 87 Too many users */ - MBED_DEFINE_POSIX_ERROR( ENOTSOCK ,ENOTSOCK ), /* 88 Socket operation on non-socket */ - MBED_DEFINE_POSIX_ERROR( EDESTADDRREQ ,EDESTADDRREQ ), /* 89 Destination address required */ - MBED_DEFINE_POSIX_ERROR( EMSGSIZE ,EMSGSIZE ), /* 90 Message too long */ - MBED_DEFINE_POSIX_ERROR( EPROTOTYPE ,EPROTOTYPE ), /* 91 Protocol wrong type for socket */ - MBED_DEFINE_POSIX_ERROR( ENOPROTOOPT ,ENOPROTOOPT ), /* 92 Protocol not available */ - MBED_DEFINE_POSIX_ERROR( EPROTONOSUPPORT ,EPROTONOSUPPORT ), /* 93 Protocol not supported */ - MBED_DEFINE_POSIX_ERROR( ESOCKTNOSUPPORT ,ESOCKTNOSUPPORT ), /* 94 Socket type not supported */ - MBED_DEFINE_POSIX_ERROR( EOPNOTSUPP ,EOPNOTSUPP ), /* 95 Operation not supported on transport endpoint */ - MBED_DEFINE_POSIX_ERROR( EPFNOSUPPORT ,EPFNOSUPPORT ), /* 96 Protocol family not supported */ - MBED_DEFINE_POSIX_ERROR( EAFNOSUPPORT ,EAFNOSUPPORT ), /* 97 Address family not supported by protocol */ - MBED_DEFINE_POSIX_ERROR( EADDRINUSE ,EADDRINUSE ), /* 98 Address already in use */ - MBED_DEFINE_POSIX_ERROR( EADDRNOTAVAIL ,EADDRNOTAVAIL ), /* 99 Cannot assign requested address */ - MBED_DEFINE_POSIX_ERROR( ENETDOWN ,ENETDOWN ), /* 100 Network is down */ - MBED_DEFINE_POSIX_ERROR( ENETUNREACH ,ENETUNREACH ), /* 101 Network is unreachable */ - MBED_DEFINE_POSIX_ERROR( ENETRESET ,ENETRESET ), /* 102 Network dropped connection because of reset */ - MBED_DEFINE_POSIX_ERROR( ECONNABORTED ,ECONNABORTED ), /* 103 Software caused connection abort */ - MBED_DEFINE_POSIX_ERROR( ECONNRESET ,ECONNRESET ), /* 104 Connection reset by peer */ - MBED_DEFINE_POSIX_ERROR( ENOBUFS ,ENOBUFS ), /* 105 No buffer space available */ - MBED_DEFINE_POSIX_ERROR( EISCONN ,EISCONN ), /* 106 Transport endpoint is already connected */ - MBED_DEFINE_POSIX_ERROR( ENOTCONN ,ENOTCONN ), /* 107 Transport endpoint is not connected */ - MBED_DEFINE_POSIX_ERROR( ESHUTDOWN ,ESHUTDOWN ), /* 108 Cannot send after transport endpoint shutdown */ - MBED_DEFINE_POSIX_ERROR( ETOOMANYREFS ,ETOOMANYREFS ), /* 109 Too many references: cannot splice */ - MBED_DEFINE_POSIX_ERROR( ETIMEDOUT ,ETIMEDOUT ), /* 110 Connection timed out */ - MBED_DEFINE_POSIX_ERROR( ECONNREFUSED ,ECONNREFUSED ), /* 111 Connection refused */ - MBED_DEFINE_POSIX_ERROR( EHOSTDOWN ,EHOSTDOWN ), /* 112 Host is down */ - MBED_DEFINE_POSIX_ERROR( EHOSTUNREACH ,EHOSTUNREACH ), /* 113 No route to host */ - MBED_DEFINE_POSIX_ERROR( EALREADY ,EALREADY ), /* 114 Operation already in progress */ - MBED_DEFINE_POSIX_ERROR( EINPROGRESS ,EINPROGRESS ), /* 115 Operation now in progress */ - MBED_DEFINE_POSIX_ERROR( ESTALE ,ESTALE ), /* 116 Stale NFS file handle */ - MBED_DEFINE_POSIX_ERROR( EUCLEAN ,EUCLEAN ), /* 117 Structure needs cleaning */ - MBED_DEFINE_POSIX_ERROR( ENOTNAM ,ENOTNAM ), /* 118 Not a XENIX named type file */ - MBED_DEFINE_POSIX_ERROR( ENAVAIL ,ENAVAIL ), /* 119 No XENIX semaphores available */ - MBED_DEFINE_POSIX_ERROR( EISNAM ,EISNAM ), /* 120 Is a named type file */ - MBED_DEFINE_POSIX_ERROR( EREMOTEIO ,EREMOTEIO ), /* 121 Remote I/O error */ - MBED_DEFINE_POSIX_ERROR( EDQUOT ,EDQUOT ), /* 122 Quota exceeded */ - MBED_DEFINE_POSIX_ERROR( ENOMEDIUM ,ENOMEDIUM ), /* 123 No medium found */ - MBED_DEFINE_POSIX_ERROR( EMEDIUMTYPE ,EMEDIUMTYPE ), /* 124 Wrong medium type */ - MBED_DEFINE_POSIX_ERROR( ECANCELED ,ECANCELED ), /* 125 Operation Canceled */ - MBED_DEFINE_POSIX_ERROR( ENOKEY ,ENOKEY ), /* 126 Required key not available */ - MBED_DEFINE_POSIX_ERROR( EKEYEXPIRED ,EKEYEXPIRED ), /* 127 Key has expired */ - MBED_DEFINE_POSIX_ERROR( EKEYREVOKED ,EKEYREVOKED ), /* 128 Key has been revoked */ - MBED_DEFINE_POSIX_ERROR( EKEYREJECTED ,EKEYREJECTED ), /* 129 Key was rejected by service */ - MBED_DEFINE_POSIX_ERROR( EOWNERDEAD ,EOWNERDEAD ), /* 130 Owner died */ - MBED_DEFINE_POSIX_ERROR( ENOTRECOVERABLE ,ENOTRECOVERABLE ), /* 131 State not recoverable */ - + MBED_DEFINE_POSIX_ERROR(EPERM, EPERM), /* 1 Operation not permitted */ + MBED_DEFINE_POSIX_ERROR(ENOENT, ENOENT), /* 2 No such file or directory */ + MBED_DEFINE_POSIX_ERROR(ESRCH, ESRCH), /* 3 No such process */ + MBED_DEFINE_POSIX_ERROR(EINTR, EINTR), /* 4 Interrupted system call */ + MBED_DEFINE_POSIX_ERROR(EIO, EIO), /* 5 I/O error */ + MBED_DEFINE_POSIX_ERROR(ENXIO, ENXIO), /* 6 No such device or address */ + MBED_DEFINE_POSIX_ERROR(E2BIG, E2BIG), /* 7 Argument list too long */ + MBED_DEFINE_POSIX_ERROR(ENOEXEC, ENOEXEC), /* 8 Exec format error */ + MBED_DEFINE_POSIX_ERROR(EBADF, EBADF), /* 9 Bad file number */ + MBED_DEFINE_POSIX_ERROR(ECHILD, ECHILD), /* 10 No child processes */ + MBED_DEFINE_POSIX_ERROR(EAGAIN, EAGAIN), /* 11 Try again */ + MBED_DEFINE_POSIX_ERROR(ENOMEM, ENOMEM), /* 12 Out of memory */ + MBED_DEFINE_POSIX_ERROR(EACCES, EACCES), /* 13 Permission denied */ + MBED_DEFINE_POSIX_ERROR(EFAULT, EFAULT), /* 14 Bad address */ + MBED_DEFINE_POSIX_ERROR(ENOTBLK, ENOTBLK), /* 15 Block device required */ + MBED_DEFINE_POSIX_ERROR(EBUSY, EBUSY), /* 16 Device or resource busy */ + MBED_DEFINE_POSIX_ERROR(EEXIST, EEXIST), /* 17 File exists */ + MBED_DEFINE_POSIX_ERROR(EXDEV, EXDEV), /* 18 Cross-device link */ + MBED_DEFINE_POSIX_ERROR(ENODEV, ENODEV), /* 19 No such device */ + MBED_DEFINE_POSIX_ERROR(ENOTDIR, ENOTDIR), /* 20 Not a directory */ + MBED_DEFINE_POSIX_ERROR(EISDIR, EISDIR), /* 21 Is a directory */ + MBED_DEFINE_POSIX_ERROR(EINVAL, EINVAL), /* 22 Invalid argument */ + MBED_DEFINE_POSIX_ERROR(ENFILE, ENFILE), /* 23 File table overflow */ + MBED_DEFINE_POSIX_ERROR(EMFILE, EMFILE), /* 24 Too many open files */ + MBED_DEFINE_POSIX_ERROR(ENOTTY, ENOTTY), /* 25 Not a typewriter */ + MBED_DEFINE_POSIX_ERROR(ETXTBSY, ETXTBSY), /* 26 Text file busy */ + MBED_DEFINE_POSIX_ERROR(EFBIG, EFBIG), /* 27 File too large */ + MBED_DEFINE_POSIX_ERROR(ENOSPC, ENOSPC), /* 28 No space left on device */ + MBED_DEFINE_POSIX_ERROR(ESPIPE, ESPIPE), /* 29 Illegal seek */ + MBED_DEFINE_POSIX_ERROR(EROFS, EROFS), /* 30 Read-only file system */ + MBED_DEFINE_POSIX_ERROR(EMLINK, EMLINK), /* 31 Too many links */ + MBED_DEFINE_POSIX_ERROR(EPIPE, EPIPE), /* 32 Broken pipe */ + MBED_DEFINE_POSIX_ERROR(EDOM, EDOM), /* 33 Math argument out of domain of func */ + MBED_DEFINE_POSIX_ERROR(ERANGE, ERANGE), /* 34 Math result not representable */ + MBED_DEFINE_POSIX_ERROR(EDEADLK, EDEADLK), /* 35 Resource deadlock would occur */ + MBED_DEFINE_POSIX_ERROR(ENAMETOOLONG, ENAMETOOLONG), /* 36 File name too long */ + MBED_DEFINE_POSIX_ERROR(ENOLCK, ENOLCK), /* 37 No record locks available */ + MBED_DEFINE_POSIX_ERROR(ENOSYS, ENOSYS), /* 38 Function not implemented */ + MBED_DEFINE_POSIX_ERROR(ENOTEMPTY, ENOTEMPTY), /* 39 Directory not empty */ + MBED_DEFINE_POSIX_ERROR(ELOOP, ELOOP), /* 40 Too many symbolic links encountered */ + MBED_DEFINE_POSIX_ERROR(EWOULDBLOCK, EAGAIN), /* EAGAIN Operation would block */ + MBED_DEFINE_POSIX_ERROR(ENOMSG, ENOMSG), /* 42 No message of desired type */ + MBED_DEFINE_POSIX_ERROR(EIDRM, EIDRM), /* 43 Identifier removed */ + MBED_DEFINE_POSIX_ERROR(ECHRNG, ECHRNG), /* 44 Channel number out of range */ + MBED_DEFINE_POSIX_ERROR(EL2NSYNC, EL2NSYNC), /* 45 Level 2 not synchronized */ + MBED_DEFINE_POSIX_ERROR(EL3HLT, EL3HLT), /* 46 Level 3 halted */ + MBED_DEFINE_POSIX_ERROR(EL3RST, EL3RST), /* 47 Level 3 reset */ + MBED_DEFINE_POSIX_ERROR(ELNRNG, ELNRNG), /* 48 Link number out of range */ + MBED_DEFINE_POSIX_ERROR(EUNATCH, EUNATCH), /* 49 Protocol driver not attached */ + MBED_DEFINE_POSIX_ERROR(ENOCSI, ENOCSI), /* 50 No CSI structure available */ + MBED_DEFINE_POSIX_ERROR(EL2HLT, EL2HLT), /* 51 Level 2 halted */ + MBED_DEFINE_POSIX_ERROR(EBADE, EBADE), /* 52 Invalid exchange */ + MBED_DEFINE_POSIX_ERROR(EBADR, EBADR), /* 53 Invalid request descriptor */ + MBED_DEFINE_POSIX_ERROR(EXFULL, EXFULL), /* 54 Exchange full */ + MBED_DEFINE_POSIX_ERROR(ENOANO, ENOANO), /* 55 No anode */ + MBED_DEFINE_POSIX_ERROR(EBADRQC, EBADRQC), /* 56 Invalid request code */ + MBED_DEFINE_POSIX_ERROR(EBADSLT, EBADSLT), /* 57 Invalid slot */ + MBED_DEFINE_POSIX_ERROR(EDEADLOCK, EDEADLK), /* EDEADLK Resource deadlock would occur */ + MBED_DEFINE_POSIX_ERROR(EBFONT, EBFONT), /* 59 Bad font file format */ + MBED_DEFINE_POSIX_ERROR(ENOSTR, ENOSTR), /* 60 Device not a stream */ + MBED_DEFINE_POSIX_ERROR(ENODATA, ENODATA), /* 61 No data available */ + MBED_DEFINE_POSIX_ERROR(ETIME, ETIME), /* 62 Timer expired */ + MBED_DEFINE_POSIX_ERROR(ENOSR, ENOSR), /* 63 Out of streams resources */ + MBED_DEFINE_POSIX_ERROR(ENONET, ENONET), /* 64 Machine is not on the network */ + MBED_DEFINE_POSIX_ERROR(ENOPKG, ENOPKG), /* 65 Package not installed */ + MBED_DEFINE_POSIX_ERROR(EREMOTE, EREMOTE), /* 66 Object is remote */ + MBED_DEFINE_POSIX_ERROR(ENOLINK, ENOLINK), /* 67 Link has been severed */ + MBED_DEFINE_POSIX_ERROR(EADV, EADV), /* 68 Advertise error */ + MBED_DEFINE_POSIX_ERROR(ESRMNT, ESRMNT), /* 69 Srmount error */ + MBED_DEFINE_POSIX_ERROR(ECOMM, ECOMM), /* 70 Communication error on send */ + MBED_DEFINE_POSIX_ERROR(EPROTO, EPROTO), /* 71 Protocol error */ + MBED_DEFINE_POSIX_ERROR(EMULTIHOP, EMULTIHOP), /* 72 Multihop attempted */ + MBED_DEFINE_POSIX_ERROR(EDOTDOT, EDOTDOT), /* 73 RFS specific error */ + MBED_DEFINE_POSIX_ERROR(EBADMSG, EBADMSG), /* 74 Not a data message */ + MBED_DEFINE_POSIX_ERROR(EOVERFLOW, EOVERFLOW), /* 75 Value too large for defined data type */ + MBED_DEFINE_POSIX_ERROR(ENOTUNIQ, ENOTUNIQ), /* 76 Name not unique on network */ + MBED_DEFINE_POSIX_ERROR(EBADFD, EBADFD), /* 77 File descriptor in bad state */ + MBED_DEFINE_POSIX_ERROR(EREMCHG, EREMCHG), /* 78 Remote address changed */ + MBED_DEFINE_POSIX_ERROR(ELIBACC, ELIBACC), /* 79 Can not access a needed shared library */ + MBED_DEFINE_POSIX_ERROR(ELIBBAD, ELIBBAD), /* 80 Accessing a corrupted shared library */ + MBED_DEFINE_POSIX_ERROR(ELIBSCN, ELIBSCN), /* 81 .lib section in a.out corrupted */ + MBED_DEFINE_POSIX_ERROR(ELIBMAX, ELIBMAX), /* 82 Attempting to link in too many shared libraries */ + MBED_DEFINE_POSIX_ERROR(ELIBEXEC, ELIBEXEC), /* 83 Cannot exec a shared library directly */ + MBED_DEFINE_POSIX_ERROR(EILSEQ, EILSEQ), /* 84 Illegal byte sequence */ + MBED_DEFINE_POSIX_ERROR(ERESTART, ERESTART), /* 85 Interrupted system call should be restarted */ + MBED_DEFINE_POSIX_ERROR(ESTRPIPE, ESTRPIPE), /* 86 Streams pipe error */ + MBED_DEFINE_POSIX_ERROR(EUSERS, EUSERS), /* 87 Too many users */ + MBED_DEFINE_POSIX_ERROR(ENOTSOCK, ENOTSOCK), /* 88 Socket operation on non-socket */ + MBED_DEFINE_POSIX_ERROR(EDESTADDRREQ, EDESTADDRREQ), /* 89 Destination address required */ + MBED_DEFINE_POSIX_ERROR(EMSGSIZE, EMSGSIZE), /* 90 Message too long */ + MBED_DEFINE_POSIX_ERROR(EPROTOTYPE, EPROTOTYPE), /* 91 Protocol wrong type for socket */ + MBED_DEFINE_POSIX_ERROR(ENOPROTOOPT, ENOPROTOOPT), /* 92 Protocol not available */ + MBED_DEFINE_POSIX_ERROR(EPROTONOSUPPORT, EPROTONOSUPPORT), /* 93 Protocol not supported */ + MBED_DEFINE_POSIX_ERROR(ESOCKTNOSUPPORT, ESOCKTNOSUPPORT), /* 94 Socket type not supported */ + MBED_DEFINE_POSIX_ERROR(EOPNOTSUPP, EOPNOTSUPP), /* 95 Operation not supported on transport endpoint */ + MBED_DEFINE_POSIX_ERROR(EPFNOSUPPORT, EPFNOSUPPORT), /* 96 Protocol family not supported */ + MBED_DEFINE_POSIX_ERROR(EAFNOSUPPORT, EAFNOSUPPORT), /* 97 Address family not supported by protocol */ + MBED_DEFINE_POSIX_ERROR(EADDRINUSE, EADDRINUSE), /* 98 Address already in use */ + MBED_DEFINE_POSIX_ERROR(EADDRNOTAVAIL, EADDRNOTAVAIL), /* 99 Cannot assign requested address */ + MBED_DEFINE_POSIX_ERROR(ENETDOWN, ENETDOWN), /* 100 Network is down */ + MBED_DEFINE_POSIX_ERROR(ENETUNREACH, ENETUNREACH), /* 101 Network is unreachable */ + MBED_DEFINE_POSIX_ERROR(ENETRESET, ENETRESET), /* 102 Network dropped connection because of reset */ + MBED_DEFINE_POSIX_ERROR(ECONNABORTED, ECONNABORTED), /* 103 Software caused connection abort */ + MBED_DEFINE_POSIX_ERROR(ECONNRESET, ECONNRESET), /* 104 Connection reset by peer */ + MBED_DEFINE_POSIX_ERROR(ENOBUFS, ENOBUFS), /* 105 No buffer space available */ + MBED_DEFINE_POSIX_ERROR(EISCONN, EISCONN), /* 106 Transport endpoint is already connected */ + MBED_DEFINE_POSIX_ERROR(ENOTCONN, ENOTCONN), /* 107 Transport endpoint is not connected */ + MBED_DEFINE_POSIX_ERROR(ESHUTDOWN, ESHUTDOWN), /* 108 Cannot send after transport endpoint shutdown */ + MBED_DEFINE_POSIX_ERROR(ETOOMANYREFS, ETOOMANYREFS), /* 109 Too many references: cannot splice */ + MBED_DEFINE_POSIX_ERROR(ETIMEDOUT, ETIMEDOUT), /* 110 Connection timed out */ + MBED_DEFINE_POSIX_ERROR(ECONNREFUSED, ECONNREFUSED), /* 111 Connection refused */ + MBED_DEFINE_POSIX_ERROR(EHOSTDOWN, EHOSTDOWN), /* 112 Host is down */ + MBED_DEFINE_POSIX_ERROR(EHOSTUNREACH, EHOSTUNREACH), /* 113 No route to host */ + MBED_DEFINE_POSIX_ERROR(EALREADY, EALREADY), /* 114 Operation already in progress */ + MBED_DEFINE_POSIX_ERROR(EINPROGRESS, EINPROGRESS), /* 115 Operation now in progress */ + MBED_DEFINE_POSIX_ERROR(ESTALE, ESTALE), /* 116 Stale NFS file handle */ + MBED_DEFINE_POSIX_ERROR(EUCLEAN, EUCLEAN), /* 117 Structure needs cleaning */ + MBED_DEFINE_POSIX_ERROR(ENOTNAM, ENOTNAM), /* 118 Not a XENIX named type file */ + MBED_DEFINE_POSIX_ERROR(ENAVAIL, ENAVAIL), /* 119 No XENIX semaphores available */ + MBED_DEFINE_POSIX_ERROR(EISNAM, EISNAM), /* 120 Is a named type file */ + MBED_DEFINE_POSIX_ERROR(EREMOTEIO, EREMOTEIO), /* 121 Remote I/O error */ + MBED_DEFINE_POSIX_ERROR(EDQUOT, EDQUOT), /* 122 Quota exceeded */ + MBED_DEFINE_POSIX_ERROR(ENOMEDIUM, ENOMEDIUM), /* 123 No medium found */ + MBED_DEFINE_POSIX_ERROR(EMEDIUMTYPE, EMEDIUMTYPE), /* 124 Wrong medium type */ + MBED_DEFINE_POSIX_ERROR(ECANCELED, ECANCELED), /* 125 Operation Canceled */ + MBED_DEFINE_POSIX_ERROR(ENOKEY, ENOKEY), /* 126 Required key not available */ + MBED_DEFINE_POSIX_ERROR(EKEYEXPIRED, EKEYEXPIRED), /* 127 Key has expired */ + MBED_DEFINE_POSIX_ERROR(EKEYREVOKED, EKEYREVOKED), /* 128 Key has been revoked */ + MBED_DEFINE_POSIX_ERROR(EKEYREJECTED, EKEYREJECTED), /* 129 Key was rejected by service */ + MBED_DEFINE_POSIX_ERROR(EOWNERDEAD, EOWNERDEAD), /* 130 Owner died */ + MBED_DEFINE_POSIX_ERROR(ENOTRECOVERABLE, ENOTRECOVERABLE), /* 131 State not recoverable */ + //Below are MBED SYSTEM ERROR CODE definitions //MBED SYSTEM ERROR CODE definitions starts at offset MBED_SYSTEM_ERROR_BASE, see above. // Error Name Error Offset Error Code - MBED_DEFINE_SYSTEM_ERROR( UNKNOWN ,0 ), /* 256 Unknown error */ - MBED_DEFINE_SYSTEM_ERROR( INVALID_ARGUMENT ,1 ), /* 257 Invalid Argument */ - MBED_DEFINE_SYSTEM_ERROR( INVALID_DATA_DETECTED ,2 ), /* 258 Invalid data detected */ - MBED_DEFINE_SYSTEM_ERROR( INVALID_FORMAT ,3 ), /* 259 Invalid format */ - MBED_DEFINE_SYSTEM_ERROR( INVALID_INDEX ,4 ), /* 260 Invalid Index */ - MBED_DEFINE_SYSTEM_ERROR( INVALID_SIZE ,5 ), /* 261 Inavlid Size */ - MBED_DEFINE_SYSTEM_ERROR( INVALID_OPERATION ,6 ), /* 262 Invalid Operation */ - MBED_DEFINE_SYSTEM_ERROR( ITEM_NOT_FOUND ,7 ), /* 263 Item Not Found */ - MBED_DEFINE_SYSTEM_ERROR( ACCESS_DENIED ,8 ), /* 264 Access Denied */ - MBED_DEFINE_SYSTEM_ERROR( UNSUPPORTED ,9 ), /* 265 Unsupported */ - MBED_DEFINE_SYSTEM_ERROR( BUFFER_FULL ,10 ), /* 266 Buffer Full */ - MBED_DEFINE_SYSTEM_ERROR( MEDIA_FULL ,11 ), /* 267 Media/Disk Full */ - MBED_DEFINE_SYSTEM_ERROR( ALREADY_IN_USE ,12 ), /* 268 Already in use */ - MBED_DEFINE_SYSTEM_ERROR( TIME_OUT ,13 ), /* 269 Timeout error */ - MBED_DEFINE_SYSTEM_ERROR( NOT_READY ,14 ), /* 270 Not Ready */ - MBED_DEFINE_SYSTEM_ERROR( FAILED_OPERATION ,15 ), /* 271 Requested Operation failed */ - MBED_DEFINE_SYSTEM_ERROR( OPERATION_PROHIBITED ,16 ), /* 272 Operation prohibited */ - MBED_DEFINE_SYSTEM_ERROR( OPERATION_ABORTED ,17 ), /* 273 Operation failed */ - MBED_DEFINE_SYSTEM_ERROR( WRITE_PROTECTED ,18 ), /* 274 Attempt to write to write-protected resource */ - MBED_DEFINE_SYSTEM_ERROR( NO_RESPONSE ,19 ), /* 275 No response */ - MBED_DEFINE_SYSTEM_ERROR( SEMAPHORE_LOCK_FAILED ,20 ), /* 276 Sempahore lock failed */ - MBED_DEFINE_SYSTEM_ERROR( MUTEX_LOCK_FAILED ,21 ), /* 277 Mutex lock failed */ - MBED_DEFINE_SYSTEM_ERROR( SEMAPHORE_UNLOCK_FAILED ,22 ), /* 278 Sempahore unlock failed */ - MBED_DEFINE_SYSTEM_ERROR( MUTEX_UNLOCK_FAILED ,23 ), /* 279 Mutex unlock failed */ - MBED_DEFINE_SYSTEM_ERROR( CRC_ERROR ,24 ), /* 280 CRC error or mismatch */ - MBED_DEFINE_SYSTEM_ERROR( OPEN_FAILED ,25 ), /* 281 Open failed */ - MBED_DEFINE_SYSTEM_ERROR( CLOSE_FAILED ,26 ), /* 282 Close failed */ - MBED_DEFINE_SYSTEM_ERROR( READ_FAILED ,27 ), /* 283 Read failed */ - MBED_DEFINE_SYSTEM_ERROR( WRITE_FAILED ,28 ), /* 284 Write failed */ - MBED_DEFINE_SYSTEM_ERROR( INITIALIZATION_FAILED ,29 ), /* 285 Initialization failed */ - MBED_DEFINE_SYSTEM_ERROR( BOOT_FAILURE ,30 ), /* 286 Boot failure */ - MBED_DEFINE_SYSTEM_ERROR( OUT_OF_MEMORY ,31 ), /* 287 Out of memory */ - MBED_DEFINE_SYSTEM_ERROR( OUT_OF_RESOURCES ,32 ), /* 288 Out of resources */ - MBED_DEFINE_SYSTEM_ERROR( ALLOC_FAILED ,33 ), /* 289 Alloc failed */ - MBED_DEFINE_SYSTEM_ERROR( FREE_FAILED ,34 ), /* 290 Free failed */ - MBED_DEFINE_SYSTEM_ERROR( OVERFLOW ,35 ), /* 291 Overflow error */ - MBED_DEFINE_SYSTEM_ERROR( UNDERFLOW ,36 ), /* 292 Underflow error */ - MBED_DEFINE_SYSTEM_ERROR( STACK_OVERFLOW ,37 ), /* 293 Stack overflow error */ - MBED_DEFINE_SYSTEM_ERROR( ISR_QUEUE_OVERFLOW ,38 ), /* 294 ISR queue overflow */ - MBED_DEFINE_SYSTEM_ERROR( TIMER_QUEUE_OVERFLOW ,39 ), /* 295 Timer Queue overflow */ - MBED_DEFINE_SYSTEM_ERROR( CLIB_SPACE_UNAVAILABLE ,40 ), /* 296 Standard library error - Space unavailable */ - MBED_DEFINE_SYSTEM_ERROR( CLIB_EXCEPTION ,41 ), /* 297 Standard library error - Exception */ - MBED_DEFINE_SYSTEM_ERROR( CLIB_MUTEX_INIT_FAILURE ,42 ), /* 298 Standard library error - Mutex Init failure */ - MBED_DEFINE_SYSTEM_ERROR( CREATE_FAILED ,43 ), /* 299 Create failed */ - MBED_DEFINE_SYSTEM_ERROR( DELETE_FAILED ,44 ), /* 300 Delete failed */ - MBED_DEFINE_SYSTEM_ERROR( THREAD_CREATE_FAILED ,45 ), /* 301 Thread Create failed */ - MBED_DEFINE_SYSTEM_ERROR( THREAD_DELETE_FAILED ,46 ), /* 302 Thread Delete failed */ - MBED_DEFINE_SYSTEM_ERROR( PROHIBITED_IN_ISR_CONTEXT ,47 ), /* 303 Operation Prohibited in ISR context */ - MBED_DEFINE_SYSTEM_ERROR( PINMAP_INVALID ,48 ), /* 304 Pinmap Invalid */ - MBED_DEFINE_SYSTEM_ERROR( RTOS_EVENT ,49 ), /* 305 Unknown Rtos Error */ - MBED_DEFINE_SYSTEM_ERROR( RTOS_THREAD_EVENT ,50 ), /* 306 Rtos Thread Error */ - MBED_DEFINE_SYSTEM_ERROR( RTOS_MUTEX_EVENT ,51 ), /* 307 Rtos Mutex Error */ - MBED_DEFINE_SYSTEM_ERROR( RTOS_SEMAPHORE_EVENT ,52 ), /* 308 Rtos Semaphore Error */ - MBED_DEFINE_SYSTEM_ERROR( RTOS_MEMORY_POOL_EVENT ,53 ), /* 309 Rtos Memory Pool Error */ - MBED_DEFINE_SYSTEM_ERROR( RTOS_TIMER_EVENT ,54 ), /* 310 Rtos Timer Error */ - MBED_DEFINE_SYSTEM_ERROR( RTOS_EVENT_FLAGS_EVENT ,55 ), /* 311 Rtos Event flags Error */ - MBED_DEFINE_SYSTEM_ERROR( RTOS_MESSAGE_QUEUE_EVENT ,56 ), /* 312 Rtos Message queue Error */ - MBED_DEFINE_SYSTEM_ERROR( DEVICE_BUSY ,57 ), /* 313 Device Busy */ - MBED_DEFINE_SYSTEM_ERROR( CONFIG_UNSUPPORTED ,58 ), /* 314 Configuration not supported */ - MBED_DEFINE_SYSTEM_ERROR( CONFIG_MISMATCH ,59 ), /* 315 Configuration mismatch */ - MBED_DEFINE_SYSTEM_ERROR( ALREADY_INITIALIZED ,60 ), /* 316 Already initialzied */ - MBED_DEFINE_SYSTEM_ERROR( HARDFAULT_EXCEPTION ,61 ), /* 317 HardFault exception */ - MBED_DEFINE_SYSTEM_ERROR( MEMMANAGE_EXCEPTION ,62 ), /* 318 MemManage exception */ - MBED_DEFINE_SYSTEM_ERROR( BUSFAULT_EXCEPTION ,63 ), /* 319 BusFault exception */ - MBED_DEFINE_SYSTEM_ERROR( USAGEFAULT_EXCEPTION ,64 ), /* 320 UsageFault exception*/ - + MBED_DEFINE_SYSTEM_ERROR(UNKNOWN, 0), /* 256 Unknown error */ + MBED_DEFINE_SYSTEM_ERROR(INVALID_ARGUMENT, 1), /* 257 Invalid Argument */ + MBED_DEFINE_SYSTEM_ERROR(INVALID_DATA_DETECTED, 2), /* 258 Invalid data detected */ + MBED_DEFINE_SYSTEM_ERROR(INVALID_FORMAT, 3), /* 259 Invalid format */ + MBED_DEFINE_SYSTEM_ERROR(INVALID_INDEX, 4), /* 260 Invalid Index */ + MBED_DEFINE_SYSTEM_ERROR(INVALID_SIZE, 5), /* 261 Inavlid Size */ + MBED_DEFINE_SYSTEM_ERROR(INVALID_OPERATION, 6), /* 262 Invalid Operation */ + MBED_DEFINE_SYSTEM_ERROR(ITEM_NOT_FOUND, 7), /* 263 Item Not Found */ + MBED_DEFINE_SYSTEM_ERROR(ACCESS_DENIED, 8), /* 264 Access Denied */ + MBED_DEFINE_SYSTEM_ERROR(UNSUPPORTED, 9), /* 265 Unsupported */ + MBED_DEFINE_SYSTEM_ERROR(BUFFER_FULL, 10), /* 266 Buffer Full */ + MBED_DEFINE_SYSTEM_ERROR(MEDIA_FULL, 11), /* 267 Media/Disk Full */ + MBED_DEFINE_SYSTEM_ERROR(ALREADY_IN_USE, 12), /* 268 Already in use */ + MBED_DEFINE_SYSTEM_ERROR(TIME_OUT, 13), /* 269 Timeout error */ + MBED_DEFINE_SYSTEM_ERROR(NOT_READY, 14), /* 270 Not Ready */ + MBED_DEFINE_SYSTEM_ERROR(FAILED_OPERATION, 15), /* 271 Requested Operation failed */ + MBED_DEFINE_SYSTEM_ERROR(OPERATION_PROHIBITED, 16), /* 272 Operation prohibited */ + MBED_DEFINE_SYSTEM_ERROR(OPERATION_ABORTED, 17), /* 273 Operation failed */ + MBED_DEFINE_SYSTEM_ERROR(WRITE_PROTECTED, 18), /* 274 Attempt to write to write-protected resource */ + MBED_DEFINE_SYSTEM_ERROR(NO_RESPONSE, 19), /* 275 No response */ + MBED_DEFINE_SYSTEM_ERROR(SEMAPHORE_LOCK_FAILED, 20), /* 276 Sempahore lock failed */ + MBED_DEFINE_SYSTEM_ERROR(MUTEX_LOCK_FAILED, 21), /* 277 Mutex lock failed */ + MBED_DEFINE_SYSTEM_ERROR(SEMAPHORE_UNLOCK_FAILED, 22), /* 278 Sempahore unlock failed */ + MBED_DEFINE_SYSTEM_ERROR(MUTEX_UNLOCK_FAILED, 23), /* 279 Mutex unlock failed */ + MBED_DEFINE_SYSTEM_ERROR(CRC_ERROR, 24), /* 280 CRC error or mismatch */ + MBED_DEFINE_SYSTEM_ERROR(OPEN_FAILED, 25), /* 281 Open failed */ + MBED_DEFINE_SYSTEM_ERROR(CLOSE_FAILED, 26), /* 282 Close failed */ + MBED_DEFINE_SYSTEM_ERROR(READ_FAILED, 27), /* 283 Read failed */ + MBED_DEFINE_SYSTEM_ERROR(WRITE_FAILED, 28), /* 284 Write failed */ + MBED_DEFINE_SYSTEM_ERROR(INITIALIZATION_FAILED, 29), /* 285 Initialization failed */ + MBED_DEFINE_SYSTEM_ERROR(BOOT_FAILURE, 30), /* 286 Boot failure */ + MBED_DEFINE_SYSTEM_ERROR(OUT_OF_MEMORY, 31), /* 287 Out of memory */ + MBED_DEFINE_SYSTEM_ERROR(OUT_OF_RESOURCES, 32), /* 288 Out of resources */ + MBED_DEFINE_SYSTEM_ERROR(ALLOC_FAILED, 33), /* 289 Alloc failed */ + MBED_DEFINE_SYSTEM_ERROR(FREE_FAILED, 34), /* 290 Free failed */ + MBED_DEFINE_SYSTEM_ERROR(OVERFLOW, 35), /* 291 Overflow error */ + MBED_DEFINE_SYSTEM_ERROR(UNDERFLOW, 36), /* 292 Underflow error */ + MBED_DEFINE_SYSTEM_ERROR(STACK_OVERFLOW, 37), /* 293 Stack overflow error */ + MBED_DEFINE_SYSTEM_ERROR(ISR_QUEUE_OVERFLOW, 38), /* 294 ISR queue overflow */ + MBED_DEFINE_SYSTEM_ERROR(TIMER_QUEUE_OVERFLOW, 39), /* 295 Timer Queue overflow */ + MBED_DEFINE_SYSTEM_ERROR(CLIB_SPACE_UNAVAILABLE, 40), /* 296 Standard library error - Space unavailable */ + MBED_DEFINE_SYSTEM_ERROR(CLIB_EXCEPTION, 41), /* 297 Standard library error - Exception */ + MBED_DEFINE_SYSTEM_ERROR(CLIB_MUTEX_INIT_FAILURE, 42), /* 298 Standard library error - Mutex Init failure */ + MBED_DEFINE_SYSTEM_ERROR(CREATE_FAILED, 43), /* 299 Create failed */ + MBED_DEFINE_SYSTEM_ERROR(DELETE_FAILED, 44), /* 300 Delete failed */ + MBED_DEFINE_SYSTEM_ERROR(THREAD_CREATE_FAILED, 45), /* 301 Thread Create failed */ + MBED_DEFINE_SYSTEM_ERROR(THREAD_DELETE_FAILED, 46), /* 302 Thread Delete failed */ + MBED_DEFINE_SYSTEM_ERROR(PROHIBITED_IN_ISR_CONTEXT, 47), /* 303 Operation Prohibited in ISR context */ + MBED_DEFINE_SYSTEM_ERROR(PINMAP_INVALID, 48), /* 304 Pinmap Invalid */ + MBED_DEFINE_SYSTEM_ERROR(RTOS_EVENT, 49), /* 305 Unknown Rtos Error */ + MBED_DEFINE_SYSTEM_ERROR(RTOS_THREAD_EVENT, 50), /* 306 Rtos Thread Error */ + MBED_DEFINE_SYSTEM_ERROR(RTOS_MUTEX_EVENT, 51), /* 307 Rtos Mutex Error */ + MBED_DEFINE_SYSTEM_ERROR(RTOS_SEMAPHORE_EVENT, 52), /* 308 Rtos Semaphore Error */ + MBED_DEFINE_SYSTEM_ERROR(RTOS_MEMORY_POOL_EVENT, 53), /* 309 Rtos Memory Pool Error */ + MBED_DEFINE_SYSTEM_ERROR(RTOS_TIMER_EVENT, 54), /* 310 Rtos Timer Error */ + MBED_DEFINE_SYSTEM_ERROR(RTOS_EVENT_FLAGS_EVENT, 55), /* 311 Rtos Event flags Error */ + MBED_DEFINE_SYSTEM_ERROR(RTOS_MESSAGE_QUEUE_EVENT, 56), /* 312 Rtos Message queue Error */ + MBED_DEFINE_SYSTEM_ERROR(DEVICE_BUSY, 57), /* 313 Device Busy */ + MBED_DEFINE_SYSTEM_ERROR(CONFIG_UNSUPPORTED, 58), /* 314 Configuration not supported */ + MBED_DEFINE_SYSTEM_ERROR(CONFIG_MISMATCH, 59), /* 315 Configuration mismatch */ + MBED_DEFINE_SYSTEM_ERROR(ALREADY_INITIALIZED, 60), /* 316 Already initialzied */ + MBED_DEFINE_SYSTEM_ERROR(HARDFAULT_EXCEPTION, 61), /* 317 HardFault exception */ + MBED_DEFINE_SYSTEM_ERROR(MEMMANAGE_EXCEPTION, 62), /* 318 MemManage exception */ + MBED_DEFINE_SYSTEM_ERROR(BUSFAULT_EXCEPTION, 63), /* 319 BusFault exception */ + MBED_DEFINE_SYSTEM_ERROR(USAGEFAULT_EXCEPTION, 64), /* 320 UsageFault exception*/ + //Everytime you add a new system error code, you must update //Error documentation under Handbook to capture the info on //the new error status/codes - + //MBED CUSTOM ERROR CODE definitions starts at offset MBED_CUSTOM_ERROR_BASE, see above. /* Add More/Custom Error Codes here, See example below */ - //DEFINE_CUSTOM_ERROR( MY_CUSTOM_ERROR , 1 ), - + //DEFINE_CUSTOM_ERROR( MY_CUSTOM_ERROR , 1 ), + } mbed_error_code_t; /** mbed_error_ctx struct @@ -820,7 +819,7 @@ typedef struct _mbed_error_ctx { #ifdef MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN char error_filename[MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN]; uint32_t error_line_number; -#endif +#endif } mbed_error_ctx; /** To generate a fatal compile-time error, you can use the pre-processor #error directive. @@ -864,8 +863,8 @@ typedef struct _mbed_error_ctx { * * */ - -void error(const char* format, ...); + +void error(const char *format, ...); /** * Call this Macro to generate a mbed_error_status_t value for a System error @@ -873,7 +872,7 @@ void error(const char* format, ...); * @param error_code The mbed_error_code_t code to be used in generating the mbed_error_status_t. See mbed_error_code_t for error codes. * * @code - * + * * mbed_error_status_t driver_error = MBED_MAKE_SYSTEM_ERROR( MODULE_DRIVER_USB, MBED_ERROR_CODE_INITIALIZATION_FAILED ) * * @endcode @@ -888,7 +887,7 @@ void error(const char* format, ...); * @param error_code The mbed_error_code_t code to be used in generating the mbed_error_status_t. See mbed_error_code_t for error codes. * * @code - * + * * mbed_error_status_t custom_error = MBED_MAKE_CUSTOM_ERROR( MBED_MODULE_APPLICATION, 0xDEAD//16-bit custom error code ) * * @endcode @@ -903,7 +902,7 @@ void error(const char* format, ...); * @param error_code The mbed_error_code_t code to be used in generating the mbed_error_status_t. See mbed_error_code_t for error codes. * * @code - * + * * mbed_error_status_t new_error = MBED_MAKE_ERROR( MODULE_DRIVER_USB, MBED_ERROR_INITIALIZATION_FAILED ) * * @endcode @@ -932,10 +931,10 @@ typedef void (*mbed_error_hook_t)(const mbed_error_ctx *error_ctx); * @param filename Name of the source file originating the error( Most callers can pass __FILE__ here ). * @param line_number The line number of the source file originating the error( Most callers can pass __LINE__ here ) . * @return 0 or MBED_SUCCESS. - * MBED_ERROR_INVALID_ARGUMENT if called with invalid error status/codes + * MBED_ERROR_INVALID_ARGUMENT if called with invalid error status/codes * * @code - * + * * mbed_error( ERROR_OUT_OF_MEMORY, "Out of memory error", 0, __FILE__, __LINE__ ) * * @endcode @@ -967,17 +966,17 @@ int mbed_get_error_count(void); /** * Call this function to set a fatal system error and halt the system. This function will log the fatal error with the context info and prints the error report and halts the system. - * + * * @param error_status mbed_error_status_t status to be set(See mbed_error_status_t enum above for available error status values). * @param error_msg The error message to be printed out to STDIO/Serial. * @param error_value Value associated with the error status. This would depend on error code/error scenario. * @param filename Name of the source file originating the error( Most callers can pass __FILE__ here ). * @param line_number The line number of the source file originating the error( Most callers can pass __LINE__ here ) . * @return 0 or MBED_SUCCESS. - * MBED_ERROR_INVALID_ARGUMENT if called with invalid error status/codes + * MBED_ERROR_INVALID_ARGUMENT if called with invalid error status/codes * * @code - * + * * mbed_error( MBED_ERROR_PROHIBITED_OPERATION, "Prohibited operation tried", 0, __FILE__, __LINE__ ) * * @endcode @@ -987,7 +986,7 @@ int mbed_get_error_count(void); mbed_error_status_t mbed_error(mbed_error_status_t error_status, const char *error_msg, unsigned int error_value, const char *filename, int line_number); /** - * Registers an application defined error callback with the error handling system. + * Registers an application defined error callback with the error handling system. * This function will be called with error context info whenever system handles a mbed_error/mbed_warning call * NOTE: This function should be implemented for re-entrancy as multiple threads may invoke mbed_error which may cause error hook to be called. * @param custom_error_hook mbed_error_status_t status to be set(See mbed_error_status_t enum above for available error status values). @@ -995,7 +994,7 @@ mbed_error_status_t mbed_error(mbed_error_status_t error_status, const char *err * MBED_ERROR_INVALID_ARGUMENT in case of NULL for custom_error_hook * * @code - * + * * mbed_error_status_t my_custom_error_hook(mbed_error_status_t error_status, const mbed_error_ctx *error_ctx) { * //Do something with the error_status or error_ctx * } @@ -1052,7 +1051,7 @@ int mbed_get_error_hist_count(void); /** * Reads the error context information for a specific error from error history, specified by the index. - * + * * @param index index of the error context entry in the history to be retrieved.\n * The number of entries in the error history is configured during build and the max index depends on max depth of error history.\n * index = 0 points to the oldest entry in the history, and index = (max history depth - 1) points to the latest entry in the error history.\n @@ -1065,11 +1064,11 @@ mbed_error_status_t mbed_get_error_hist_info(int index, mbed_error_ctx *error_in /** * Saves the error history information to a file - * + * * @param path path to the file in the filesystem * @return 0 or MBED_ERROR_SUCCESS on success. * MBED_ERROR_WRITE_FAILED if writing to file failed - * MBED_ERROR_INVALID_ARGUMENT if path is not valid + * MBED_ERROR_INVALID_ARGUMENT if path is not valid * * @note Filesystem support is required in order for this function to work. * diff --git a/platform/mbed_error_hist.c b/platform/mbed_error_hist.c index 8472bf0472b..411ae097ca0 100644 --- a/platform/mbed_error_hist.c +++ b/platform/mbed_error_hist.c @@ -33,12 +33,12 @@ mbed_error_status_t mbed_error_hist_put(mbed_error_ctx *error_ctx) if (NULL == error_ctx) { return MBED_ERROR_INVALID_ARGUMENT; } - + core_util_critical_section_enter(); error_log_count++; memcpy(&mbed_error_ctx_log[error_log_count % MBED_CONF_PLATFORM_ERROR_HIST_SIZE], error_ctx, sizeof(mbed_error_ctx)); - core_util_critical_section_exit(); - + core_util_critical_section_exit(); + return MBED_SUCCESS; } @@ -48,15 +48,15 @@ mbed_error_status_t mbed_error_hist_get(int index, mbed_error_ctx *error_ctx) if (index >= MBED_CONF_PLATFORM_ERROR_HIST_SIZE) { return MBED_ERROR_INVALID_ARGUMENT; } - + core_util_critical_section_enter(); //calculate the index where we want to pick the ctx if (error_log_count >= MBED_CONF_PLATFORM_ERROR_HIST_SIZE) { index = (error_log_count + index + 1) % MBED_CONF_PLATFORM_ERROR_HIST_SIZE; } - core_util_critical_section_exit(); + core_util_critical_section_exit(); memcpy(error_ctx, &mbed_error_ctx_log[index % MBED_CONF_PLATFORM_ERROR_HIST_SIZE], sizeof(mbed_error_ctx)); - + return MBED_SUCCESS; } @@ -65,8 +65,8 @@ mbed_error_ctx *mbed_error_hist_get_entry(void) core_util_critical_section_enter(); error_log_count++; mbed_error_ctx *ctx = &mbed_error_ctx_log[error_log_count % MBED_CONF_PLATFORM_ERROR_HIST_SIZE]; - core_util_critical_section_exit(); - + core_util_critical_section_exit(); + return ctx; } @@ -77,22 +77,22 @@ mbed_error_status_t mbed_error_hist_get_last_error(mbed_error_ctx *error_ctx) } core_util_critical_section_enter(); memcpy(error_ctx, &mbed_error_ctx_log[error_log_count % MBED_CONF_PLATFORM_ERROR_HIST_SIZE], sizeof(mbed_error_ctx)); - core_util_critical_section_exit(); - + core_util_critical_section_exit(); + return MBED_SUCCESS; } int mbed_error_hist_get_count() { - return (error_log_count >= MBED_CONF_PLATFORM_ERROR_HIST_SIZE? MBED_CONF_PLATFORM_ERROR_HIST_SIZE:error_log_count+1); + return (error_log_count >= MBED_CONF_PLATFORM_ERROR_HIST_SIZE ? MBED_CONF_PLATFORM_ERROR_HIST_SIZE : error_log_count + 1); } mbed_error_status_t mbed_error_hist_reset() { core_util_critical_section_enter(); error_log_count = -1; - core_util_critical_section_exit(); - + core_util_critical_section_exit(); + return MBED_SUCCESS; } diff --git a/platform/mbed_error_hist.h b/platform/mbed_error_hist.h index 0ac7c99e27d..e83315bfec1 100644 --- a/platform/mbed_error_hist.h +++ b/platform/mbed_error_hist.h @@ -17,11 +17,11 @@ #define MBED_ERROR_HIST_H #ifndef MBED_CONF_PLATFORM_ERROR_HIST_SIZE - #define MBED_CONF_PLATFORM_ERROR_HIST_SIZE 4 +#define MBED_CONF_PLATFORM_ERROR_HIST_SIZE 4 #else - #if MBED_CONF_PLATFORM_ERROR_HIST_SIZE == 0 - #define MBED_CONF_PLATFORM_ERROR_HIST_SIZE 1 - #endif +#if MBED_CONF_PLATFORM_ERROR_HIST_SIZE == 0 +#define MBED_CONF_PLATFORM_ERROR_HIST_SIZE 1 +#endif #endif #ifdef __cplusplus @@ -29,24 +29,24 @@ extern "C" { #endif /* * Puts/Adds an error entry into the error history list - * + * * @param error_ctx pointer to the mbed_error_ctx struct with the error context * @return 0 or MBED_SUCCESS on success. * MBED_ERROR_WRITE_FAILED if writing to file failed - * MBED_ERROR_INVALID_ARGUMENT if path is not valid + * MBED_ERROR_INVALID_ARGUMENT if path is not valid * * */ mbed_error_status_t mbed_error_hist_put(mbed_error_ctx *error_ctx); - + /* * Reads the error entry from the error list with the specified index - * + * * @param index Index of the error context to be retrieved. It starts from 0 and 0 is the oldest. * @param error_ctx pointer to the mbed_error_ctx struct where the error context will be filled, this should be allocated by the caller * @return 0 or MBED_SUCCESS on success. * MBED_ERROR_WRITE_FAILED if writing to file failed - * MBED_ERROR_INVALID_ARGUMENT if path is not valid + * MBED_ERROR_INVALID_ARGUMENT if path is not valid * * */ @@ -55,8 +55,8 @@ mbed_error_status_t mbed_error_hist_get(int index, mbed_error_ctx *error_ctx); /* * Gets a reference to the next error entry in the error log where in the error ctx can be filled in. * Its like reserving the next error entry to fill in the error info - * - * @return Returns the pointer to the next error ctx entry + * + * @return Returns the pointer to the next error ctx entry * * */ @@ -64,11 +64,11 @@ mbed_error_ctx *mbed_error_hist_get_entry(void); /* * Reads the last(latest) error entry from the error history - * + * * @param error_ctx pointer to the mbed_error_ctx struct where the error context will be filled, this should be allocated by the caller * @return 0 or MBED_SUCCESS on success. * MBED_ERROR_WRITE_FAILED if writing to file failed - * MBED_ERROR_INVALID_ARGUMENT if path is not valid + * MBED_ERROR_INVALID_ARGUMENT if path is not valid * * */ @@ -76,8 +76,8 @@ mbed_error_status_t mbed_error_hist_get_last_error(mbed_error_ctx *error_ctx); /* * Returns the number of error entries in the error history list - * - * @return Number of entries in the history list + * + * @return Number of entries in the history list * * */ @@ -85,10 +85,10 @@ int mbed_error_hist_get_count(void); /* * Resets the error log by resetting the number of errors to 0 and clears all previous errors in the history list - * + * * @return 0 or MBED_SUCCESS on success. * MBED_ERROR_WRITE_FAILED if writing to file failed - * MBED_ERROR_INVALID_ARGUMENT if path is not valid + * MBED_ERROR_INVALID_ARGUMENT if path is not valid * * */ @@ -96,17 +96,17 @@ mbed_error_status_t mbed_error_hist_reset(void); /* * Saves the error log information to a file - * + * * @param path path to the file in the filesystem * @return 0 or MBED_SUCCESS on success. * MBED_ERROR_WRITE_FAILED if writing to file failed - * MBED_ERROR_INVALID_ARGUMENT if path is not valid + * MBED_ERROR_INVALID_ARGUMENT if path is not valid * * @note Filesystem support is required in order for this function to work. * */ -mbed_error_status_t mbed_save_error_hist(const char *path); - +mbed_error_status_t mbed_save_error_hist(const char *path); + #ifdef __cplusplus } #endif diff --git a/platform/mbed_interface.c b/platform/mbed_interface.c index 99c7c4891b1..b1a43697e9b 100644 --- a/platform/mbed_interface.c +++ b/platform/mbed_interface.c @@ -25,11 +25,13 @@ #if DEVICE_SEMIHOST // return true if a debugger is attached, indicating mbed interface is connected -int mbed_interface_connected(void) { +int mbed_interface_connected(void) +{ return semihost_connected(); } -int mbed_interface_reset(void) { +int mbed_interface_reset(void) +{ if (mbed_interface_connected()) { semihost_reset(); return 0; @@ -38,7 +40,8 @@ int mbed_interface_reset(void) { } } -WEAK int mbed_interface_uid(char *uid) { +WEAK int mbed_interface_uid(char *uid) +{ if (mbed_interface_connected()) { return semihost_uid(uid); // Returns 0 if successful, -1 on failure } else { @@ -47,11 +50,13 @@ WEAK int mbed_interface_uid(char *uid) { } } -int mbed_interface_disconnect(void) { +int mbed_interface_disconnect(void) +{ int res; if (mbed_interface_connected()) { - if ((res = semihost_disabledebug()) != 0) + if ((res = semihost_disabledebug()) != 0) { return res; + } while (mbed_interface_connected()); return 0; } else { @@ -59,11 +64,13 @@ int mbed_interface_disconnect(void) { } } -int mbed_interface_powerdown(void) { +int mbed_interface_powerdown(void) +{ int res; if (mbed_interface_connected()) { - if ((res = semihost_powerdown()) != 0) + if ((res = semihost_powerdown()) != 0) { return res; + } while (mbed_interface_connected()); return 0; } else { @@ -72,17 +79,20 @@ int mbed_interface_powerdown(void) { } MBED_DEPRECATED_SINCE("mbed-os-5.9", "This function shouldn't be used in new code." - "For system reset funcionality use system_reset()") -void mbed_reset(void) { + "For system reset funcionality use system_reset()") +void mbed_reset(void) +{ mbed_interface_reset(); } -WEAK int mbed_uid(char *uid) { +WEAK int mbed_uid(char *uid) +{ return mbed_interface_uid(uid); } #endif -WEAK void mbed_mac_address(char *mac) { +WEAK void mbed_mac_address(char *mac) +{ #if DEVICE_SEMIHOST char uid[DEVICE_ID_LENGTH + 1]; int i; @@ -93,7 +103,7 @@ WEAK void mbed_mac_address(char *mac) { #if defined(DEVICE_MAC_OFFSET) p += DEVICE_MAC_OFFSET; #endif - for (i=0; i<6; i++) { + for (i = 0; i < 6; i++) { int byte; sscanf(p, "%2x", &byte); mac[i] = byte; diff --git a/platform/mbed_interface.h b/platform/mbed_interface.h index 94baa34f775..48594916e8f 100644 --- a/platform/mbed_interface.h +++ b/platform/mbed_interface.h @@ -135,7 +135,7 @@ void mbed_die(void); * @endcode * */ -void mbed_error_printf(const char* format, ...); +void mbed_error_printf(const char *format, ...); /** Print out an error message. Similar to mbed_error_printf * but uses a va_list. @@ -146,7 +146,7 @@ void mbed_error_printf(const char* format, ...); * @param arg Variable arguments list * */ -void mbed_error_vfprintf(const char * format, va_list arg); +void mbed_error_vfprintf(const char *format, va_list arg); /** @}*/ #ifdef __cplusplus diff --git a/platform/mbed_mem_trace.cpp b/platform/mbed_mem_trace.cpp index 17326f78e57..7b7b3aa3234 100644 --- a/platform/mbed_mem_trace.cpp +++ b/platform/mbed_mem_trace.cpp @@ -41,7 +41,8 @@ static SingletonPtr mem_trace_mutex; * Public interface *****************************************************************************/ -void mbed_mem_trace_set_callback(mbed_mem_trace_cb_t cb) { +void mbed_mem_trace_set_callback(mbed_mem_trace_cb_t cb) +{ mem_trace_cb = cb; } @@ -57,7 +58,8 @@ void mbed_mem_trace_unlock() mem_trace_mutex->unlock(); } -void *mbed_mem_trace_malloc(void *res, size_t size, void *caller) { +void *mbed_mem_trace_malloc(void *res, size_t size, void *caller) +{ if (mem_trace_cb) { if (TRACE_FIRST_LOCK()) { mem_trace_cb(MBED_MEM_TRACE_MALLOC, res, caller, size); @@ -66,7 +68,8 @@ void *mbed_mem_trace_malloc(void *res, size_t size, void *caller) { return res; } -void *mbed_mem_trace_realloc(void *res, void *ptr, size_t size, void *caller) { +void *mbed_mem_trace_realloc(void *res, void *ptr, size_t size, void *caller) +{ if (mem_trace_cb) { if (TRACE_FIRST_LOCK()) { mem_trace_cb(MBED_MEM_TRACE_REALLOC, res, caller, ptr, size); @@ -75,7 +78,8 @@ void *mbed_mem_trace_realloc(void *res, void *ptr, size_t size, void *caller) { return res; } -void *mbed_mem_trace_calloc(void *res, size_t num, size_t size, void *caller) { +void *mbed_mem_trace_calloc(void *res, size_t num, size_t size, void *caller) +{ if (mem_trace_cb) { if (TRACE_FIRST_LOCK()) { mem_trace_cb(MBED_MEM_TRACE_CALLOC, res, caller, num, size); @@ -84,7 +88,8 @@ void *mbed_mem_trace_calloc(void *res, size_t num, size_t size, void *caller) { return res; } -void mbed_mem_trace_free(void *ptr, void *caller) { +void mbed_mem_trace_free(void *ptr, void *caller) +{ if (mem_trace_cb) { if (TRACE_FIRST_LOCK()) { mem_trace_cb(MBED_MEM_TRACE_FREE, NULL, caller, ptr); @@ -92,20 +97,21 @@ void mbed_mem_trace_free(void *ptr, void *caller) { } } -void mbed_mem_trace_default_callback(uint8_t op, void *res, void *caller, ...) { +void mbed_mem_trace_default_callback(uint8_t op, void *res, void *caller, ...) +{ va_list va; size_t temp_s1, temp_s2; void *temp_ptr; va_start(va, caller); - switch(op) { + switch (op) { case MBED_MEM_TRACE_MALLOC: temp_s1 = va_arg(va, size_t); printf(MBED_MEM_DEFAULT_TRACER_PREFIX "m:%p;%p-%u\n", res, caller, temp_s1); break; case MBED_MEM_TRACE_REALLOC: - temp_ptr = va_arg(va, void*); + temp_ptr = va_arg(va, void *); temp_s1 = va_arg(va, size_t); printf(MBED_MEM_DEFAULT_TRACER_PREFIX "r:%p;%p-%p;%u\n", res, caller, temp_ptr, temp_s1); break; @@ -117,7 +123,7 @@ void mbed_mem_trace_default_callback(uint8_t op, void *res, void *caller, ...) { break; case MBED_MEM_TRACE_FREE: - temp_ptr = va_arg(va, void*); + temp_ptr = va_arg(va, void *); printf(MBED_MEM_DEFAULT_TRACER_PREFIX "f:%p;%p-%p\n", res, caller, temp_ptr); break; diff --git a/platform/mbed_mem_trace.h b/platform/mbed_mem_trace.h index 6b604a08a7b..1fe2e99a905 100644 --- a/platform/mbed_mem_trace.h +++ b/platform/mbed_mem_trace.h @@ -63,7 +63,7 @@ enum { * - for calloc: cb(MBED_MEM_TRACE_CALLOC, res, caller, nmemb, size). * - for free: cb(MBED_MEM_TRACE_FREE, NULL, caller, ptr). */ -typedef void (*mbed_mem_trace_cb_t)(uint8_t op, void *res, void* caller, ...); +typedef void (*mbed_mem_trace_cb_t)(uint8_t op, void *res, void *caller, ...); /** * Set the callback used by the memory tracer (use NULL for disable tracing). diff --git a/platform/mbed_mktime.c b/platform/mbed_mktime.c index cb1280c9c21..68e3b9f62d6 100644 --- a/platform/mbed_mktime.c +++ b/platform/mbed_mktime.c @@ -20,7 +20,7 @@ #define SECONDS_BY_MINUTES 60 #define MINUTES_BY_HOUR 60 #define SECONDS_BY_HOUR (SECONDS_BY_MINUTES * MINUTES_BY_HOUR) -#define HOURS_BY_DAY 24 +#define HOURS_BY_DAY 24 #define SECONDS_BY_DAY (SECONDS_BY_HOUR * HOURS_BY_DAY) #define LAST_VALID_YEAR 206 @@ -29,48 +29,49 @@ #define EDGE_TIMESTAMP_4_YEAR_LEAP_YEAR_SUPPORT 3133695 // 6th of February 1970 at 06:28:15 /* - * 2 dimensional array containing the number of seconds elapsed before a given + * 2 dimensional array containing the number of seconds elapsed before a given * month. * The second index map to the month while the first map to the type of year: - * - 0: non leap year + * - 0: non leap year * - 1: leap year */ static const uint32_t seconds_before_month[2][12] = { { 0, 31 * SECONDS_BY_DAY, - (31 + 28) * SECONDS_BY_DAY, - (31 + 28 + 31) * SECONDS_BY_DAY, - (31 + 28 + 31 + 30) * SECONDS_BY_DAY, - (31 + 28 + 31 + 30 + 31) * SECONDS_BY_DAY, - (31 + 28 + 31 + 30 + 31 + 30) * SECONDS_BY_DAY, - (31 + 28 + 31 + 30 + 31 + 30 + 31) * SECONDS_BY_DAY, - (31 + 28 + 31 + 30 + 31 + 30 + 31 + 31) * SECONDS_BY_DAY, - (31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30) * SECONDS_BY_DAY, - (31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31) * SECONDS_BY_DAY, - (31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30) * SECONDS_BY_DAY, + (31 + 28) *SECONDS_BY_DAY, + (31 + 28 + 31) *SECONDS_BY_DAY, + (31 + 28 + 31 + 30) *SECONDS_BY_DAY, + (31 + 28 + 31 + 30 + 31) *SECONDS_BY_DAY, + (31 + 28 + 31 + 30 + 31 + 30) *SECONDS_BY_DAY, + (31 + 28 + 31 + 30 + 31 + 30 + 31) *SECONDS_BY_DAY, + (31 + 28 + 31 + 30 + 31 + 30 + 31 + 31) *SECONDS_BY_DAY, + (31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30) *SECONDS_BY_DAY, + (31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31) *SECONDS_BY_DAY, + (31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30) *SECONDS_BY_DAY, }, { 0, 31 * SECONDS_BY_DAY, - (31 + 29) * SECONDS_BY_DAY, - (31 + 29 + 31) * SECONDS_BY_DAY, - (31 + 29 + 31 + 30) * SECONDS_BY_DAY, - (31 + 29 + 31 + 30 + 31) * SECONDS_BY_DAY, - (31 + 29 + 31 + 30 + 31 + 30) * SECONDS_BY_DAY, - (31 + 29 + 31 + 30 + 31 + 30 + 31) * SECONDS_BY_DAY, - (31 + 29 + 31 + 30 + 31 + 30 + 31 + 31) * SECONDS_BY_DAY, - (31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30) * SECONDS_BY_DAY, - (31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31) * SECONDS_BY_DAY, - (31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30) * SECONDS_BY_DAY, + (31 + 29) *SECONDS_BY_DAY, + (31 + 29 + 31) *SECONDS_BY_DAY, + (31 + 29 + 31 + 30) *SECONDS_BY_DAY, + (31 + 29 + 31 + 30 + 31) *SECONDS_BY_DAY, + (31 + 29 + 31 + 30 + 31 + 30) *SECONDS_BY_DAY, + (31 + 29 + 31 + 30 + 31 + 30 + 31) *SECONDS_BY_DAY, + (31 + 29 + 31 + 30 + 31 + 30 + 31 + 31) *SECONDS_BY_DAY, + (31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30) *SECONDS_BY_DAY, + (31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31) *SECONDS_BY_DAY, + (31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30) *SECONDS_BY_DAY, } }; -bool _rtc_is_leap_year(int year, rtc_leap_year_support_t leap_year_support) { - /* - * since in practice, the value manipulated by this algorithm lie in the +bool _rtc_is_leap_year(int year, rtc_leap_year_support_t leap_year_support) +{ + /* + * since in practice, the value manipulated by this algorithm lie in the * range: [70 : 206] the algorithm can be reduced to: year % 4 with exception for 200 (year 2100 is not leap year). - * The algorithm valid over the full range of value is: + * The algorithm valid over the full range of value is: year = 1900 + year; if (year % 4) { @@ -82,7 +83,7 @@ bool _rtc_is_leap_year(int year, rtc_leap_year_support_t leap_year_support) { } return true; - */ + */ if (leap_year_support == RTC_FULL_LEAP_YEAR_SUPPORT && year == 200) { return false; // 2100 is not a leap year } @@ -90,7 +91,8 @@ bool _rtc_is_leap_year(int year, rtc_leap_year_support_t leap_year_support) { return (year) % 4 ? false : true; } -bool _rtc_maketime(const struct tm* time, time_t * seconds, rtc_leap_year_support_t leap_year_support) { +bool _rtc_maketime(const struct tm *time, time_t *seconds, rtc_leap_year_support_t leap_year_support) +{ if (seconds == NULL || time == NULL) { return false; } @@ -111,12 +113,12 @@ bool _rtc_maketime(const struct tm* time, time_t * seconds, rtc_leap_year_suppor /* Check if we are within valid range. */ if (time->tm_year == LAST_VALID_YEAR) { if ((leap_year_support == RTC_FULL_LEAP_YEAR_SUPPORT && result > EDGE_TIMESTAMP_FULL_LEAP_YEAR_SUPPORT) || - (leap_year_support == RTC_4_YEAR_LEAP_YEAR_SUPPORT && result > EDGE_TIMESTAMP_4_YEAR_LEAP_YEAR_SUPPORT)) { - return false; + (leap_year_support == RTC_4_YEAR_LEAP_YEAR_SUPPORT && result > EDGE_TIMESTAMP_4_YEAR_LEAP_YEAR_SUPPORT)) { + return false; } } - if (time->tm_year > 70) { + if (time->tm_year > 70) { /* Valid in the range [70:206]. */ uint32_t count_of_leap_days = ((time->tm_year - 1) / 4) - (70 / 4); if (leap_year_support == RTC_FULL_LEAP_YEAR_SUPPORT) { @@ -133,7 +135,8 @@ bool _rtc_maketime(const struct tm* time, time_t * seconds, rtc_leap_year_suppor return true; } -bool _rtc_localtime(time_t timestamp, struct tm* time_info, rtc_leap_year_support_t leap_year_support) { +bool _rtc_localtime(time_t timestamp, struct tm *time_info, rtc_leap_year_support_t leap_year_support) +{ if (time_info == NULL) { return false; } @@ -154,7 +157,7 @@ bool _rtc_localtime(time_t timestamp, struct tm* time_info, rtc_leap_year_suppor /* Years start at 70. */ time_info->tm_year = 70; - while (true) { + while (true) { if (_rtc_is_leap_year(time_info->tm_year, leap_year_support) && seconds >= 366) { ++time_info->tm_year; seconds -= 366; diff --git a/platform/mbed_mktime.h b/platform/mbed_mktime.h index f877512b9d2..eed21a9fc3f 100644 --- a/platform/mbed_mktime.h +++ b/platform/mbed_mktime.h @@ -90,7 +90,7 @@ bool _rtc_is_leap_year(int year, rtc_leap_year_support_t leap_year_support); * @note Full and partial leap years support. * @note For use by the HAL only */ -bool _rtc_maketime(const struct tm* time, time_t * seconds, rtc_leap_year_support_t leap_year_support); +bool _rtc_maketime(const struct tm *time, time_t *seconds, rtc_leap_year_support_t leap_year_support); /* Convert a given time in seconds since epoch into calendar time. * @@ -118,7 +118,7 @@ bool _rtc_maketime(const struct tm* time, time_t * seconds, rtc_leap_year_suppor * @note For use by the HAL only. * @note Full and partial leap years support. */ -bool _rtc_localtime(time_t timestamp, struct tm* time_info, rtc_leap_year_support_t leap_year_support); +bool _rtc_localtime(time_t timestamp, struct tm *time_info, rtc_leap_year_support_t leap_year_support); /** @}*/ diff --git a/platform/mbed_power_mgmt.h b/platform/mbed_power_mgmt.h index 9fa7552ab0b..5d30348dcea 100644 --- a/platform/mbed_power_mgmt.h +++ b/platform/mbed_power_mgmt.h @@ -170,7 +170,7 @@ static inline void sleep(void) /** Send the microcontroller to deep sleep * * @deprecated - * Do not use this function. Applications should use sleep() API which puts the system in deepsleep mode if supported. + * Do not use this function. Applications should use sleep() API which puts the system in deepsleep mode if supported. * * @note This function can be a noop if not implemented by the platform. * @note This function will be a noop in debug mode (debug build profile when MBED_DEBUG is defined) @@ -206,7 +206,7 @@ static inline void system_reset(void) { NVIC_SystemReset(); } - + /** Provides the time spent in sleep mode since boot. * * @return Time spent in sleep diff --git a/platform/mbed_retarget.cpp b/platform/mbed_retarget.cpp index 1b14fd84e57..461375938d6 100644 --- a/platform/mbed_retarget.cpp +++ b/platform/mbed_retarget.cpp @@ -111,10 +111,11 @@ static SingletonPtr filehandle_mutex; namespace mbed { void mbed_set_unbuffered_stream(std::FILE *_file); -void remove_filehandle(FileHandle *file) { +void remove_filehandle(FileHandle *file) +{ filehandle_mutex->lock(); /* Remove all open filehandles for this */ - for (unsigned int fh_i = 0; fh_i < sizeof(filehandles)/sizeof(*filehandles); fh_i++) { + for (unsigned int fh_i = 0; fh_i < sizeof(filehandles) / sizeof(*filehandles); fh_i++) { if (filehandles[fh_i] == file) { filehandles[fh_i] = NULL; } @@ -137,23 +138,30 @@ class DirectSerial : public FileHandle { DirectSerial(PinName tx, PinName rx, int baud); virtual ssize_t write(const void *buffer, size_t size); virtual ssize_t read(void *buffer, size_t size); - virtual off_t seek(off_t offset, int whence = SEEK_SET) { + virtual off_t seek(off_t offset, int whence = SEEK_SET) + { return -ESPIPE; } - virtual off_t size() { + virtual off_t size() + { return -EINVAL; } - virtual int isatty() { + virtual int isatty() + { return true; } - virtual int close() { + virtual int close() + { return 0; } virtual short poll(short events) const; }; -DirectSerial::DirectSerial(PinName tx, PinName rx, int baud) { - if (stdio_uart_inited) return; +DirectSerial::DirectSerial(PinName tx, PinName rx, int baud) +{ + if (stdio_uart_inited) { + return; + } serial_init(&stdio_uart, tx, rx); serial_baud(&stdio_uart, baud); #if CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTS @@ -165,7 +173,8 @@ DirectSerial::DirectSerial(PinName tx, PinName rx, int baud) { #endif } -ssize_t DirectSerial::write(const void *buffer, size_t size) { +ssize_t DirectSerial::write(const void *buffer, size_t size) +{ const unsigned char *buf = static_cast(buffer); for (size_t i = 0; i < size; i++) { serial_putc(&stdio_uart, buf[i]); @@ -173,7 +182,8 @@ ssize_t DirectSerial::write(const void *buffer, size_t size) { return size; } -ssize_t DirectSerial::read(void *buffer, size_t size) { +ssize_t DirectSerial::read(void *buffer, size_t size) +{ unsigned char *buf = static_cast(buffer); if (size == 0) { return 0; @@ -182,7 +192,8 @@ ssize_t DirectSerial::read(void *buffer, size_t size) { return 1; } -short DirectSerial::poll(short events) const { +short DirectSerial::poll(short events) const +{ short revents = 0; if ((events & POLLIN) && serial_readable(&stdio_uart)) { revents |= POLLIN; @@ -198,18 +209,32 @@ class Sink : public FileHandle { public: virtual ssize_t write(const void *buffer, size_t size); virtual ssize_t read(void *buffer, size_t size); - virtual off_t seek(off_t offset, int whence = SEEK_SET) { return ESPIPE; } - virtual off_t size() { return -EINVAL; } - virtual int isatty() { return true; } - virtual int close() { return 0; } + virtual off_t seek(off_t offset, int whence = SEEK_SET) + { + return ESPIPE; + } + virtual off_t size() + { + return -EINVAL; + } + virtual int isatty() + { + return true; + } + virtual int close() + { + return 0; + } }; -ssize_t Sink::write(const void *buffer, size_t size) { +ssize_t Sink::write(const void *buffer, size_t size) +{ // Just swallow the data - this is historical non-DEVICE_SERIAL behaviour return size; } -ssize_t Sink::read(void *buffer, size_t size) { +ssize_t Sink::read(void *buffer, size_t size) +{ // Produce 1 zero byte - historical behaviour returned 1 without touching // the buffer unsigned char *buf = static_cast(buffer); @@ -218,27 +243,27 @@ ssize_t Sink::read(void *buffer, size_t size) { } -MBED_WEAK FileHandle* mbed::mbed_target_override_console(int fd) +MBED_WEAK FileHandle *mbed::mbed_target_override_console(int fd) { return NULL; } -MBED_WEAK FileHandle* mbed::mbed_override_console(int fd) +MBED_WEAK FileHandle *mbed::mbed_override_console(int fd) { return NULL; } -static FileHandle* default_console() +static FileHandle *default_console() { #if DEVICE_SERIAL # if MBED_CONF_PLATFORM_STDIO_BUFFERED_SERIAL static UARTSerial console(STDIO_UART_TX, STDIO_UART_RX, MBED_CONF_PLATFORM_STDIO_BAUD_RATE); # if CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTS - console.set_flow_control(SerialBase::RTS, STDIO_UART_RTS, NC); + console.set_flow_control(SerialBase::RTS, STDIO_UART_RTS, NC); # elif CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_CTS - console.set_flow_control(SerialBase::CTS, NC, STDIO_UART_CTS); + console.set_flow_control(SerialBase::CTS, NC, STDIO_UART_CTS); # elif CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTSCTS - console.set_flow_control(SerialBase::RTSCTS, STDIO_UART_RTS, STDIO_UART_CTS); + console.set_flow_control(SerialBase::RTSCTS, STDIO_UART_RTS, STDIO_UART_CTS); # endif # else static DirectSerial console(STDIO_UART_TX, STDIO_UART_RX, MBED_CONF_PLATFORM_STDIO_BAUD_RATE); @@ -250,7 +275,8 @@ static FileHandle* default_console() } /* Locate the default console for stdout, stdin, stderr */ -static FileHandle* get_console(int fd) { +static FileHandle *get_console(int fd) +{ FileHandle *fh = mbed_override_console(fd); if (fh) { return fh; @@ -263,7 +289,8 @@ static FileHandle* get_console(int fd) { } /* Deal with the fact C library may not _open descriptors 0, 1, 2 - auto bind */ -static FileHandle* get_fhc(int fd) { +static FileHandle *get_fhc(int fd) +{ if (fd >= OPEN_MAX) { return NULL; } @@ -281,27 +308,29 @@ static FileHandle* get_fhc(int fd) { * @param error is a negative error code returned from an mbed function and * will be negated to store a positive error code in errno */ -static int handle_open_errors(int error, unsigned filehandle_idx) { +static int handle_open_errors(int error, unsigned filehandle_idx) +{ errno = -error; // Free file handle filehandles[filehandle_idx] = NULL; return -1; } -static inline int openflags_to_posix(int openflags) { +static inline int openflags_to_posix(int openflags) +{ int posix = openflags; #ifdef __ARMCC_VERSION if (openflags & OPEN_PLUS) { posix = O_RDWR; - } else if(openflags & OPEN_W) { + } else if (openflags & OPEN_W) { posix = O_WRONLY; - } else if(openflags & OPEN_A) { - posix = O_WRONLY|O_APPEND; + } else if (openflags & OPEN_A) { + posix = O_WRONLY | O_APPEND; } else { posix = O_RDONLY; } /* a, w, a+, w+ all create if file does not already exist */ - if (openflags & (OPEN_A|OPEN_W)) { + if (openflags & (OPEN_A | OPEN_W)) { posix |= O_CREAT; } /* w and w+ truncate */ @@ -310,26 +339,41 @@ static inline int openflags_to_posix(int openflags) { } #elif defined(__ICCARM__) switch (openflags & _LLIO_RDWRMASK) { - case _LLIO_RDONLY: posix = O_RDONLY; break; - case _LLIO_WRONLY: posix = O_WRONLY; break; - case _LLIO_RDWR : posix = O_RDWR ; break; + case _LLIO_RDONLY: + posix = O_RDONLY; + break; + case _LLIO_WRONLY: + posix = O_WRONLY; + break; + case _LLIO_RDWR : + posix = O_RDWR ; + break; + } + if (openflags & _LLIO_CREAT) { + posix |= O_CREAT; + } + if (openflags & _LLIO_APPEND) { + posix |= O_APPEND; + } + if (openflags & _LLIO_TRUNC) { + posix |= O_TRUNC; } - if (openflags & _LLIO_CREAT ) posix |= O_CREAT; - if (openflags & _LLIO_APPEND) posix |= O_APPEND; - if (openflags & _LLIO_TRUNC ) posix |= O_TRUNC; #elif defined(TOOLCHAIN_GCC) posix &= ~O_BINARY; #endif return posix; } -static int reserve_filehandle() { +static int reserve_filehandle() +{ // find the first empty slot in filehandles, after the slots reserved for stdin/stdout/stderr filehandle_mutex->lock(); int fh_i; for (fh_i = 3; fh_i < OPEN_MAX; fh_i++) { /* Take a next free filehandle slot available. */ - if (filehandles[fh_i] == NULL) break; + if (filehandles[fh_i] == NULL) { + break; + } } if (fh_i >= OPEN_MAX) { /* Too many file handles have been opened */ @@ -343,7 +387,8 @@ static int reserve_filehandle() { return fh_i; } -int mbed::bind_to_fd(FileHandle *fh) { +int mbed::bind_to_fd(FileHandle *fh) +{ int fildes = reserve_filehandle(); if (fildes < 0) { return fildes; @@ -356,7 +401,8 @@ int mbed::bind_to_fd(FileHandle *fh) { return fildes; } -static int unbind_from_fd(int fd, FileHandle *fh) { +static int unbind_from_fd(int fd, FileHandle *fh) +{ if (filehandles[fd] == fh) { filehandles[fd] = NULL; return 0; @@ -368,7 +414,7 @@ static int unbind_from_fd(int fd, FileHandle *fh) { #ifndef __IAR_SYSTEMS_ICC__ /* IAR provides fdopen itself */ -extern "C" std::FILE* fdopen(int fildes, const char *mode) +extern "C" std::FILE *fdopen(int fildes, const char *mode) { // This is to avoid scanf and the bloat it brings. char buf[1 + sizeof fildes]; /* @(integer) */ @@ -405,18 +451,19 @@ std::FILE *fdopen(FileHandle *fh, const char *mode) } } -/* @brief standard c library fopen() retargeting function. +/* @brief standard c library fopen() retargeting function. * * This function is invoked by the standard c library retargeting to handle fopen() * * @return * On success, a valid FILEHANDLE is returned. * On failure, -1 is returned and errno is set to an appropriate value e.g. - * ENOENT file not found (default errno setting) - * EMFILE the maximum number of open files was exceeded. + * ENOENT file not found (default errno setting) + * EMFILE the maximum number of open files was exceeded. * * */ -extern "C" FILEHANDLE PREFIX(_open)(const char *name, int openflags) { +extern "C" FILEHANDLE PREFIX(_open)(const char *name, int openflags) +{ #if defined(__MICROLIB) && (__ARMCC_VERSION>5030000) #if !defined(MBED_CONF_RTOS_PRESENT) // valid only for mbed 2 @@ -463,7 +510,8 @@ extern "C" FILEHANDLE PREFIX(_open)(const char *name, int openflags) { return open(name, openflags_to_posix(openflags)); } -extern "C" int open(const char *name, int oflag, ...) { +extern "C" int open(const char *name, int oflag, ...) +{ int fildes = reserve_filehandle(); if (fildes < 0) { return fildes; @@ -499,12 +547,14 @@ extern "C" int open(const char *name, int oflag, ...) { return fildes; } -extern "C" int PREFIX(_close)(FILEHANDLE fh) { +extern "C" int PREFIX(_close)(FILEHANDLE fh) +{ return close(fh); } -extern "C" int close(int fildes) { - FileHandle* fhc = get_fhc(fildes); +extern "C" int close(int fildes) +{ + FileHandle *fhc = get_fhc(fildes); filehandles[fildes] = NULL; if (fhc == NULL) { errno = EBADF; @@ -520,7 +570,8 @@ extern "C" int close(int fildes) { } } -static bool convert_crlf(int fd) { +static bool convert_crlf(int fd) +{ #if MBED_CONF_PLATFORM_STDIO_CONVERT_TTY_NEWLINES return isatty(fd); #elif MBED_CONF_PLATFORM_STDIO_CONVERT_NEWLINES @@ -531,9 +582,11 @@ static bool convert_crlf(int fd) { } #if defined(__ICCARM__) -extern "C" size_t __write (int fh, const unsigned char *buffer, size_t length) { +extern "C" size_t __write(int fh, const unsigned char *buffer, size_t length) +{ #else -extern "C" int PREFIX(_write)(FILEHANDLE fh, const unsigned char *buffer, unsigned int length, int mode) { +extern "C" int PREFIX(_write)(FILEHANDLE fh, const unsigned char *buffer, unsigned int length, int mode) +{ #endif #if defined(MBED_TRAP_ERRORS_ENABLED) && MBED_TRAP_ERRORS_ENABLED && defined(MBED_CONF_RTOS_PRESENT) @@ -610,9 +663,10 @@ extern "C" int PREFIX(_write)(FILEHANDLE fh, const unsigned char *buffer, unsign #endif } -extern "C" ssize_t write(int fildes, const void *buf, size_t length) { +extern "C" ssize_t write(int fildes, const void *buf, size_t length) +{ - FileHandle* fhc = get_fhc(fildes); + FileHandle *fhc = get_fhc(fildes); if (fhc == NULL) { errno = EBADF; return -1; @@ -628,20 +682,24 @@ extern "C" ssize_t write(int fildes, const void *buf, size_t length) { } #if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) -extern "C" void PREFIX(_exit)(int return_code) { - while(1) {} +extern "C" void PREFIX(_exit)(int return_code) +{ + while (1) {} } -extern "C" void _ttywrch(int ch) { +extern "C" void _ttywrch(int ch) +{ char c = ch; write(STDOUT_FILENO, &c, 1); } #endif #if defined(__ICCARM__) -extern "C" size_t __read (int fh, unsigned char *buffer, size_t length) { +extern "C" size_t __read(int fh, unsigned char *buffer, size_t length) +{ #else -extern "C" int PREFIX(_read)(FILEHANDLE fh, unsigned char *buffer, unsigned int length, int mode) { +extern "C" int PREFIX(_read)(FILEHANDLE fh, unsigned char *buffer, unsigned int length, int mode) +{ #endif #if defined(MBED_TRAP_ERRORS_ENABLED) && MBED_TRAP_ERRORS_ENABLED && defined(MBED_CONF_RTOS_PRESENT) @@ -668,7 +726,7 @@ extern "C" int PREFIX(_read)(FILEHANDLE fh, unsigned char *buffer, unsigned int return bytes_read; } if ((c == '\r' && stdio_in_prev[fh] != '\n') || - (c == '\n' && stdio_in_prev[fh] != '\r')) { + (c == '\n' && stdio_in_prev[fh] != '\r')) { stdio_in_prev[fh] = c; *buffer = '\n'; break; @@ -700,9 +758,10 @@ extern "C" int PREFIX(_read)(FILEHANDLE fh, unsigned char *buffer, unsigned int #endif } -extern "C" ssize_t read(int fildes, void *buf, size_t length) { +extern "C" ssize_t read(int fildes, void *buf, size_t length) +{ - FileHandle* fhc = get_fhc(fildes); + FileHandle *fhc = get_fhc(fildes); if (fhc == NULL) { errno = EBADF; return -1; @@ -727,8 +786,9 @@ extern "C" int _isatty(FILEHANDLE fh) return isatty(fh); } -extern "C" int isatty(int fildes) { - FileHandle* fhc = get_fhc(fildes); +extern "C" int isatty(int fildes) +{ + FileHandle *fhc = get_fhc(fildes); if (fhc == NULL) { errno = EBADF; return 0; @@ -765,8 +825,9 @@ int _lseek(FILEHANDLE fh, int offset, int whence) return off; } -extern "C" off_t lseek(int fildes, off_t offset, int whence) { - FileHandle* fhc = get_fhc(fildes); +extern "C" off_t lseek(int fildes, off_t offset, int whence) +{ + FileHandle *fhc = get_fhc(fildes); if (fhc == NULL) { errno = EBADF; return -1; @@ -781,13 +842,15 @@ extern "C" off_t lseek(int fildes, off_t offset, int whence) { } #ifdef __ARMCC_VERSION -extern "C" int PREFIX(_ensure)(FILEHANDLE fh) { +extern "C" int PREFIX(_ensure)(FILEHANDLE fh) +{ return fsync(fh); } #endif -extern "C" int fsync(int fildes) { - FileHandle* fhc = get_fhc(fildes); +extern "C" int fsync(int fildes) +{ + FileHandle *fhc = get_fhc(fildes); if (fhc == NULL) { errno = EBADF; return -1; @@ -803,8 +866,9 @@ extern "C" int fsync(int fildes) { } #ifdef __ARMCC_VERSION -extern "C" long PREFIX(_flen)(FILEHANDLE fh) { - FileHandle* fhc = get_fhc(fh); +extern "C" long PREFIX(_flen)(FILEHANDLE fh) +{ + FileHandle *fhc = get_fhc(fh); if (fhc == NULL) { errno = EBADF; return -1; @@ -837,7 +901,8 @@ extern "C" MBED_WEAK __value_in_regs struct __initial_stackheap _mbed_user_setup return r; } -extern "C" __value_in_regs struct __initial_stackheap __user_setup_stackheap(uint32_t R0, uint32_t R1, uint32_t R2, uint32_t R3) { +extern "C" __value_in_regs struct __initial_stackheap __user_setup_stackheap(uint32_t R0, uint32_t R1, uint32_t R2, uint32_t R3) +{ return _mbed_user_setup_stackheap(R0, R1, R2, R3); } @@ -845,13 +910,15 @@ extern "C" __value_in_regs struct __initial_stackheap __user_setup_stackheap(uin #if !defined(__ARMCC_VERSION) && !defined(__ICCARM__) -extern "C" int _fstat(int fh, struct stat *st) { +extern "C" int _fstat(int fh, struct stat *st) +{ return fstat(fh, st); } #endif -extern "C" int fstat(int fildes, struct stat *st) { - FileHandle* fhc = get_fhc(fildes); +extern "C" int fstat(int fildes, struct stat *st) +{ + FileHandle *fhc = get_fhc(fildes); if (fhc == NULL) { errno = EBADF; return -1; @@ -862,7 +929,8 @@ extern "C" int fstat(int fildes, struct stat *st) { return 0; } -extern "C" int fcntl(int fildes, int cmd, ...) { +extern "C" int fcntl(int fildes, int cmd, ...) +{ FileHandle *fhc = get_fhc(fildes); if (fhc == NULL) { errno = EBADF; @@ -919,7 +987,8 @@ extern "C" int poll(struct pollfd fds[], nfds_t nfds, int timeout) } namespace std { -extern "C" int remove(const char *path) { +extern "C" int remove(const char *path) +{ FilePath fp(path); FileSystemHandle *fs = fp.fileSystem(); if (fs == NULL) { @@ -936,7 +1005,8 @@ extern "C" int remove(const char *path) { } } -extern "C" int rename(const char *oldname, const char *newname) { +extern "C" int rename(const char *oldname, const char *newname) +{ FilePath fpOld(oldname); FilePath fpNew(newname); FileSystemHandle *fsOld = fpOld.fileSystem(); @@ -962,26 +1032,30 @@ extern "C" int rename(const char *oldname, const char *newname) { } } -extern "C" char *tmpnam(char *s) { +extern "C" char *tmpnam(char *s) +{ errno = EBADF; return NULL; } -extern "C" FILE *tmpfile() { +extern "C" FILE *tmpfile() +{ errno = EBADF; return NULL; } } // namespace std #ifdef __ARMCC_VERSION -extern "C" char *_sys_command_string(char *cmd, int len) { +extern "C" char *_sys_command_string(char *cmd, int len) +{ return NULL; } #endif -extern "C" DIR *opendir(const char *path) { +extern "C" DIR *opendir(const char *path) +{ FilePath fp(path); - FileSystemHandle* fs = fp.fileSystem(); + FileSystemHandle *fs = fp.fileSystem(); if (fs == NULL) { errno = ENODEV; return NULL; @@ -997,7 +1071,8 @@ extern "C" DIR *opendir(const char *path) { return dir; } -extern "C" struct dirent *readdir(DIR *dir) { +extern "C" struct dirent *readdir(DIR *dir) +{ static struct dirent ent; int err = dir->read(&ent); if (err < 1) { @@ -1010,7 +1085,8 @@ extern "C" struct dirent *readdir(DIR *dir) { return &ent; } -extern "C" int closedir(DIR *dir) { +extern "C" int closedir(DIR *dir) +{ int err = dir->close(); if (err < 0) { errno = -err; @@ -1020,19 +1096,23 @@ extern "C" int closedir(DIR *dir) { } } -extern "C" void rewinddir(DIR *dir) { +extern "C" void rewinddir(DIR *dir) +{ dir->rewind(); } -extern "C" off_t telldir(DIR *dir) { +extern "C" off_t telldir(DIR *dir) +{ return dir->tell(); } -extern "C" void seekdir(DIR *dir, off_t off) { +extern "C" void seekdir(DIR *dir, off_t off) +{ dir->seek(off); } -extern "C" int mkdir(const char *path, mode_t mode) { +extern "C" int mkdir(const char *path, mode_t mode) +{ FilePath fp(path); FileSystemHandle *fs = fp.fileSystem(); if (fs == NULL) { @@ -1049,7 +1129,8 @@ extern "C" int mkdir(const char *path, mode_t mode) { } } -extern "C" int stat(const char *path, struct stat *st) { +extern "C" int stat(const char *path, struct stat *st) +{ FilePath fp(path); FileSystemHandle *fs = fp.fileSystem(); if (fs == NULL) { @@ -1066,7 +1147,8 @@ extern "C" int stat(const char *path, struct stat *st) { } } -extern "C" int statvfs(const char *path, struct statvfs *buf) { +extern "C" int statvfs(const char *path, struct statvfs *buf) +{ FilePath fp(path); FileSystemHandle *fs = fp.fileSystem(); if (fs == NULL) { @@ -1087,12 +1169,14 @@ extern "C" int statvfs(const char *path, struct statvfs *buf) { /* prevents the exception handling name demangling code getting pulled in */ #include "mbed_error.h" namespace __gnu_cxx { - void __verbose_terminate_handler() { - MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_PLATFORM, MBED_ERROR_CODE_CLIB_EXCEPTION),"Exception", 0); - } +void __verbose_terminate_handler() +{ + MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_PLATFORM, MBED_ERROR_CODE_CLIB_EXCEPTION), "Exception", 0); +} } extern "C" WEAK void __cxa_pure_virtual(void); -extern "C" WEAK void __cxa_pure_virtual(void) { +extern "C" WEAK void __cxa_pure_virtual(void) +{ exit(1); } @@ -1120,31 +1204,33 @@ extern "C" int errno; // TARGET_NUMAKER_PFM_M453 targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/m451_retarget.c // TARGET_STM32L4 targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L4/l4_retarget.c extern "C" void *__wrap__sbrk(int incr); -extern "C" caddr_t _sbrk(int incr) { +extern "C" caddr_t _sbrk(int incr) +{ return (caddr_t) __wrap__sbrk(incr); } #else // Linker defined symbol used by _sbrk to indicate where heap should start. extern "C" uint32_t __end__; // Weak attribute allows user to override, e.g. to use external RAM for dynamic memory. -extern "C" WEAK caddr_t _sbrk(int incr) { - static unsigned char* heap = (unsigned char*)&__end__; - unsigned char* prev_heap = heap; - unsigned char* new_heap = heap + incr; +extern "C" WEAK caddr_t _sbrk(int incr) +{ + static unsigned char *heap = (unsigned char *)&__end__; + unsigned char *prev_heap = heap; + unsigned char *new_heap = heap + incr; #if defined(TARGET_CORTEX_A) - if (new_heap >= (unsigned char*)&__HeapLimit) { /* __HeapLimit is end of heap section */ + if (new_heap >= (unsigned char *)&__HeapLimit) { /* __HeapLimit is end of heap section */ #else - if (new_heap >= (unsigned char*)__get_MSP()) { + if (new_heap >= (unsigned char *)__get_MSP()) { #endif errno = ENOMEM; - return (caddr_t)-1; + return (caddr_t) -1; } // Additional heap checking if set if (mbed_heap_size && (new_heap >= mbed_heap_start + mbed_heap_size)) { errno = ENOMEM; - return (caddr_t)-1; + return (caddr_t) -1; } heap = new_heap; @@ -1154,10 +1240,12 @@ extern "C" WEAK caddr_t _sbrk(int incr) { #endif #if defined(TOOLCHAIN_GCC_ARM) || defined(TOOLCHAIN_GCC_CR) -extern "C" void _exit(int return_code) { +extern "C" void _exit(int return_code) +{ #else namespace std { -extern "C" void exit(int return_code) { +extern "C" void exit(int return_code) +{ #endif #if DEVICE_STDIO_MESSAGES @@ -1191,16 +1279,19 @@ extern "C" void exit(int return_code) { // More informations about this topic for ARMCC here: // http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/6449.html extern "C" { -int __aeabi_atexit(void *object, void (*dtor)(void* /*this*/), void *handle) { - return 1; -} + int __aeabi_atexit(void *object, void (*dtor)(void * /*this*/), void *handle) + { + return 1; + } -int __cxa_atexit(void (*dtor)(void* /*this*/), void *object, void *handle) { - return 1; -} + int __cxa_atexit(void (*dtor)(void * /*this*/), void *object, void *handle) + { + return 1; + } -void __cxa_finalize(void *handle) { -} + void __cxa_finalize(void *handle) + { + } } // end of extern "C" @@ -1216,25 +1307,27 @@ void __cxa_finalize(void *handle) { * * To overcome this limitation, exit and atexit are overriden here. */ -extern "C"{ +extern "C" { -/** - * @brief Retarget of exit for GCC. - * @details Unlike the standard version, this function doesn't call any function - * registered with atexit before calling _exit. - */ -void __wrap_exit(int return_code) { - _exit(return_code); -} + /** + * @brief Retarget of exit for GCC. + * @details Unlike the standard version, this function doesn't call any function + * registered with atexit before calling _exit. + */ + void __wrap_exit(int return_code) + { + _exit(return_code); + } -/** - * @brief Retarget atexit from GCC. - * @details This function will always fail and never register any handler to be - * called at exit. - */ -int __wrap_atexit(void (*func)()) { - return 1; -} + /** + * @brief Retarget atexit from GCC. + * @details This function will always fail and never register any handler to be + * called at exit. + */ + int __wrap_atexit(void (*func)()) + { + return 1; + } } @@ -1244,20 +1337,22 @@ int __wrap_atexit(void (*func)()) { namespace mbed { -void mbed_set_unbuffered_stream(std::FILE *_file) { +void mbed_set_unbuffered_stream(std::FILE *_file) +{ #if defined (__ICCARM__) char buf[2]; - std::setvbuf(_file,buf,_IONBF,NULL); + std::setvbuf(_file, buf, _IONBF, NULL); #else setbuf(_file, NULL); #endif } -int mbed_getc(std::FILE *_file){ +int mbed_getc(std::FILE *_file) +{ #if defined(__IAR_SYSTEMS_ICC__ ) && (__VER__ < 8000000) /*This is only valid for unbuffered streams*/ int res = std::fgetc(_file); - if (res>=0){ + if (res >= 0) { _file->_Mode = (unsigned short)(_file->_Mode & ~ 0x1000);/* Unset read mode */ _file->_Rend = _file->_Wend; _file->_Next = _file->_Wend; @@ -1268,18 +1363,19 @@ int mbed_getc(std::FILE *_file){ #endif } -char* mbed_gets(char*s, int size, std::FILE *_file){ +char *mbed_gets(char *s, int size, std::FILE *_file) +{ #if defined(__IAR_SYSTEMS_ICC__ ) && (__VER__ < 8000000) /*This is only valid for unbuffered streams*/ - char *str = fgets(s,size,_file); - if (str!=NULL){ + char *str = fgets(s, size, _file); + if (str != NULL) { _file->_Mode = (unsigned short)(_file->_Mode & ~ 0x1000);/* Unset read mode */ _file->_Rend = _file->_Wend; _file->_Next = _file->_Wend; } return str; #else - return std::fgets(s,size,_file); + return std::fgets(s, size, _file); #endif } @@ -1297,9 +1393,10 @@ extern "C" WEAK void __iar_file_Mtxlock(__iar_Rmtx *mutex) {} extern "C" WEAK void __iar_file_Mtxunlock(__iar_Rmtx *mutex) {} #if defined(__IAR_SYSTEMS_ICC__ ) && (__VER__ >= 8000000) #pragma section="__iar_tls$$DATA" -extern "C" WEAK void *__aeabi_read_tp (void) { - // Thread Local storage is not supported, using main thread memory for errno - return __section_begin("__iar_tls$$DATA"); +extern "C" WEAK void *__aeabi_read_tp(void) +{ + // Thread Local storage is not supported, using main thread memory for errno + return __section_begin("__iar_tls$$DATA"); } #endif #elif defined(__CC_ARM) @@ -1307,27 +1404,27 @@ extern "C" WEAK void *__aeabi_read_tp (void) { #elif defined (__GNUC__) struct _reent; // Stub out locks when an rtos is not present -extern "C" WEAK void __rtos_malloc_lock( struct _reent *_r ) {} -extern "C" WEAK void __rtos_malloc_unlock( struct _reent *_r ) {} -extern "C" WEAK void __rtos_env_lock( struct _reent *_r ) {} -extern "C" WEAK void __rtos_env_unlock( struct _reent *_r ) {} +extern "C" WEAK void __rtos_malloc_lock(struct _reent *_r) {} +extern "C" WEAK void __rtos_malloc_unlock(struct _reent *_r) {} +extern "C" WEAK void __rtos_env_lock(struct _reent *_r) {} +extern "C" WEAK void __rtos_env_unlock(struct _reent *_r) {} -extern "C" void __malloc_lock( struct _reent *_r ) +extern "C" void __malloc_lock(struct _reent *_r) { __rtos_malloc_lock(_r); } -extern "C" void __malloc_unlock( struct _reent *_r ) +extern "C" void __malloc_unlock(struct _reent *_r) { __rtos_malloc_unlock(_r); } -extern "C" void __env_lock( struct _reent *_r ) +extern "C" void __env_lock(struct _reent *_r) { __rtos_env_lock(_r); } -extern "C" void __env_unlock( struct _reent *_r ) +extern "C" void __env_unlock(struct _reent *_r) { __rtos_env_unlock(_r); } @@ -1380,10 +1477,10 @@ extern "C" void __cxa_guard_abort(int *guard_object_p) // provide the implementation for these. Note: this needs to use the wrappers // instead of malloc()/free() as the caller address would point to wrappers, // not the caller of "new" or "delete". -extern "C" void* malloc_wrapper(size_t size, const void* caller); -extern "C" void free_wrapper(void *ptr, const void* caller); - -void *operator new(std::size_t count) +extern "C" void *malloc_wrapper(size_t size, const void *caller); +extern "C" void free_wrapper(void *ptr, const void *caller); + +void *operator new (std::size_t count) { void *buffer = malloc_wrapper(count, MBED_CALLER_ADDR()); if (NULL == buffer) { @@ -1401,17 +1498,17 @@ void *operator new[](std::size_t count) return buffer; } -void *operator new(std::size_t count, const std::nothrow_t& tag) +void *operator new (std::size_t count, const std::nothrow_t &tag) { return malloc_wrapper(count, MBED_CALLER_ADDR()); } -void *operator new[](std::size_t count, const std::nothrow_t& tag) +void *operator new[](std::size_t count, const std::nothrow_t &tag) { return malloc_wrapper(count, MBED_CALLER_ADDR()); } -void operator delete(void *ptr) +void operator delete (void *ptr) { free_wrapper(ptr, MBED_CALLER_ADDR()); } @@ -1424,10 +1521,10 @@ void operator delete[](void *ptr) #include -extern "C" void* malloc_wrapper(struct _reent * r, size_t size, void * caller); -extern "C" void free_wrapper(struct _reent * r, void * ptr, void * caller); +extern "C" void *malloc_wrapper(struct _reent *r, size_t size, void *caller); +extern "C" void free_wrapper(struct _reent *r, void *ptr, void *caller); -void *operator new(std::size_t count) +void *operator new (std::size_t count) { void *buffer = malloc_wrapper(_REENT, count, MBED_CALLER_ADDR()); if (NULL == buffer) { @@ -1445,17 +1542,17 @@ void *operator new[](std::size_t count) return buffer; } -void *operator new(std::size_t count, const std::nothrow_t& tag) +void *operator new (std::size_t count, const std::nothrow_t &tag) { return malloc_wrapper(_REENT, count, MBED_CALLER_ADDR()); } -void *operator new[](std::size_t count, const std::nothrow_t& tag) +void *operator new[](std::size_t count, const std::nothrow_t &tag) { return malloc_wrapper(_REENT, count, MBED_CALLER_ADDR()); } -void operator delete(void *ptr) +void operator delete (void *ptr) { free_wrapper(_REENT, ptr, MBED_CALLER_ADDR()); } @@ -1467,7 +1564,7 @@ void operator delete[](void *ptr) #else -void *operator new(std::size_t count) +void *operator new (std::size_t count) { void *buffer = malloc(count); if (NULL == buffer) { @@ -1485,17 +1582,17 @@ void *operator new[](std::size_t count) return buffer; } -void *operator new(std::size_t count, const std::nothrow_t& tag) +void *operator new (std::size_t count, const std::nothrow_t &tag) { return malloc(count); } -void *operator new[](std::size_t count, const std::nothrow_t& tag) +void *operator new[](std::size_t count, const std::nothrow_t &tag) { return malloc(count); } -void operator delete(void *ptr) +void operator delete (void *ptr) { free(ptr); } @@ -1526,7 +1623,7 @@ extern "C" clock_t clock() } // temporary - Default to 1MHz at 32 bits if target does not have us_ticker_get_info -MBED_WEAK const ticker_info_t* us_ticker_get_info() +MBED_WEAK const ticker_info_t *us_ticker_get_info() { static const ticker_info_t info = { 1000000, @@ -1536,7 +1633,7 @@ MBED_WEAK const ticker_info_t* us_ticker_get_info() } // temporary - Default to 1MHz at 32 bits if target does not have lp_ticker_get_info -MBED_WEAK const ticker_info_t* lp_ticker_get_info() +MBED_WEAK const ticker_info_t *lp_ticker_get_info() { static const ticker_info_t info = { 1000000, diff --git a/platform/mbed_retarget.h b/platform/mbed_retarget.h index 31d9347b9ec..d61f3c8c653 100644 --- a/platform/mbed_retarget.h +++ b/platform/mbed_retarget.h @@ -108,7 +108,7 @@ class DirHandle; * @param fd file descriptor - STDIN_FILENO, STDOUT_FILENO or STDERR_FILENO * @return pointer to FileHandle to override normal stream otherwise NULL */ -FileHandle* mbed_target_override_console(int fd); +FileHandle *mbed_target_override_console(int fd); /** Applications may implement this to change stdin, stdout, stderr. * @@ -130,7 +130,7 @@ FileHandle* mbed_target_override_console(int fd); * @param fd file descriptor - STDIN_FILENO, STDOUT_FILENO or STDERR_FILENO * @return pointer to FileHandle to override normal stream otherwise NULL */ -FileHandle* mbed_override_console(int fd); +FileHandle *mbed_override_console(int fd); } @@ -483,7 +483,7 @@ struct statvfs { * consistency where structure may be different with different toolchains */ struct dirent { - char d_name[NAME_MAX+1]; ///< Name of file + char d_name[NAME_MAX + 1]; ///< Name of file uint8_t d_type; ///< Type of file }; @@ -515,9 +515,9 @@ extern "C" { int open(const char *path, int oflag, ...); #ifndef __IAR_SYSTEMS_ICC__ /* IAR provides fdopen itself */ #if __cplusplus - std::FILE* fdopen(int fildes, const char *mode); + std::FILE *fdopen(int fildes, const char *mode); #else - FILE* fdopen(int fildes, const char *mode); + FILE *fdopen(int fildes, const char *mode); #endif #endif ssize_t write(int fildes, const void *buf, size_t nbyte); @@ -531,12 +531,12 @@ extern "C" { int close(int fildes); int stat(const char *path, struct stat *st); int statvfs(const char *path, struct statvfs *buf); - DIR *opendir(const char*); + DIR *opendir(const char *); struct dirent *readdir(DIR *); - int closedir(DIR*); - void rewinddir(DIR*); - long telldir(DIR*); - void seekdir(DIR*, long); + int closedir(DIR *); + void rewinddir(DIR *); + long telldir(DIR *); + void seekdir(DIR *, long); int mkdir(const char *name, mode_t n); #if __cplusplus }; // extern "C" @@ -556,7 +556,7 @@ namespace mbed { * * @returns a pointer to FILE */ -std::FILE* fdopen(mbed::FileHandle *fh, const char *mode); +std::FILE *fdopen(mbed::FileHandle *fh, const char *mode); /** Bind an mbed FileHandle to a POSIX file descriptor * diff --git a/platform/mbed_rtc_time.cpp b/platform/mbed_rtc_time.cpp index f259513c59a..0646a46a0a1 100644 --- a/platform/mbed_rtc_time.cpp +++ b/platform/mbed_rtc_time.cpp @@ -87,8 +87,8 @@ time_t time(time_t *timer) set_time(0); } } - - time_t t = (time_t)-1; + + time_t t = (time_t) -1; if (_rtc_read != NULL) { t = _rtc_read(); } @@ -100,7 +100,8 @@ time_t time(time_t *timer) return t; } -void set_time(time_t t) { +void set_time(time_t t) +{ _mutex->lock(); if (_rtc_init != NULL) { _rtc_init(); @@ -111,7 +112,8 @@ void set_time(time_t t) { _mutex->unlock(); } -void attach_rtc(time_t (*read_rtc)(void), void (*write_rtc)(time_t), void (*init_rtc)(void), int (*isenabled_rtc)(void)) { +void attach_rtc(time_t (*read_rtc)(void), void (*write_rtc)(time_t), void (*init_rtc)(void), int (*isenabled_rtc)(void)) +{ _mutex->lock(); _rtc_read = read_rtc; _rtc_write = write_rtc; diff --git a/platform/mbed_sdk_boot.c b/platform/mbed_sdk_boot.c index 4799e2c5315..32658ef60c4 100644 --- a/platform/mbed_sdk_boot.c +++ b/platform/mbed_sdk_boot.c @@ -30,14 +30,14 @@ * mbed_main(), it is not meant for user code, but for the SDK itself to perform * initializations before main() is called. */ -MBED_WEAK void mbed_main(void) +MBED_WEAK void mbed_main(void) { } /* This function can be implemented by the target to perform higher level target initialization */ -MBED_WEAK void mbed_sdk_init(void) +MBED_WEAK void mbed_sdk_init(void) { } @@ -56,7 +56,7 @@ void mbed_copy_nvic(void) #if !defined(__CORTEX_M0) && !defined(__CORTEX_A9) #ifdef NVIC_RAM_VECTOR_ADDRESS uint32_t *old_vectors = (uint32_t *)SCB->VTOR; - uint32_t *vectors = (uint32_t*)NVIC_RAM_VECTOR_ADDRESS; + uint32_t *vectors = (uint32_t *)NVIC_RAM_VECTOR_ADDRESS; for (int i = 0; i < NVIC_NUM_VECTORS; i++) { vectors[i] = old_vectors[i]; } @@ -71,19 +71,19 @@ void mbed_copy_nvic(void) int $Super$$main(void); -int $Sub$$main(void) +int $Sub$$main(void) { mbed_main(); return $Super$$main(); } -void _platform_post_stackheap_init(void) +void _platform_post_stackheap_init(void) { mbed_copy_nvic(); mbed_sdk_init(); } -#elif defined (__GNUC__) +#elif defined (__GNUC__) extern int __real_main(void); @@ -95,7 +95,7 @@ void software_init_hook(void) } -int __wrap_main(void) +int __wrap_main(void) { mbed_main(); return __real_main(); @@ -105,8 +105,8 @@ int __wrap_main(void) int __low_level_init(void) { - mbed_copy_nvic(); - return 1; + mbed_copy_nvic(); + return 1; } #endif diff --git a/platform/mbed_semihost_api.c b/platform/mbed_semihost_api.c index 06c6777ab8d..f655862c3a0 100644 --- a/platform/mbed_semihost_api.c +++ b/platform/mbed_semihost_api.c @@ -44,7 +44,8 @@ #define USR_DISABLEDEBUG (RESERVED_FOR_USER_APPLICATIONS + 5) #if DEVICE_LOCALFILESYSTEM -FILEHANDLE semihost_open(const char* name, int openmode) { +FILEHANDLE semihost_open(const char *name, int openmode) +{ uint32_t args[3]; args[0] = (uint32_t)name; args[1] = (uint32_t)openmode; @@ -52,12 +53,16 @@ FILEHANDLE semihost_open(const char* name, int openmode) { return __semihost(SYS_OPEN, args); } -int semihost_close(FILEHANDLE fh) { +int semihost_close(FILEHANDLE fh) +{ return __semihost(SYS_CLOSE, &fh); } -int semihost_write(FILEHANDLE fh, const unsigned char* buffer, unsigned int length, int mode) { - if (length == 0) return 0; +int semihost_write(FILEHANDLE fh, const unsigned char *buffer, unsigned int length, int mode) +{ + if (length == 0) { + return 0; + } uint32_t args[3]; args[0] = (uint32_t)fh; @@ -66,7 +71,8 @@ int semihost_write(FILEHANDLE fh, const unsigned char* buffer, unsigned int leng return __semihost(SYS_WRITE, args); } -int semihost_read(FILEHANDLE fh, unsigned char* buffer, unsigned int length, int mode) { +int semihost_read(FILEHANDLE fh, unsigned char *buffer, unsigned int length, int mode) +{ uint32_t args[3]; args[0] = (uint32_t)fh; args[1] = (uint32_t)buffer; @@ -74,33 +80,39 @@ int semihost_read(FILEHANDLE fh, unsigned char* buffer, unsigned int length, int return __semihost(SYS_READ, args); } -int semihost_istty(FILEHANDLE fh) { +int semihost_istty(FILEHANDLE fh) +{ return __semihost(SYS_ISTTY, &fh); } -int semihost_seek(FILEHANDLE fh, long position) { +int semihost_seek(FILEHANDLE fh, long position) +{ uint32_t args[2]; args[0] = (uint32_t)fh; args[1] = (uint32_t)position; return __semihost(SYS_SEEK, args); } -int semihost_ensure(FILEHANDLE fh) { +int semihost_ensure(FILEHANDLE fh) +{ return __semihost(SYS_ENSURE, &fh); } -long semihost_flen(FILEHANDLE fh) { +long semihost_flen(FILEHANDLE fh) +{ return __semihost(SYS_FLEN, &fh); } -int semihost_remove(const char *name) { +int semihost_remove(const char *name) +{ uint32_t args[2]; args[0] = (uint32_t)name; args[1] = (uint32_t)strlen(name); return __semihost(SYS_REMOVE, args); } -int semihost_rename(const char *old_name, const char *new_name) { +int semihost_rename(const char *old_name, const char *new_name) +{ uint32_t args[4]; args[0] = (uint32_t)old_name; args[1] = (uint32_t)strlen(old_name); @@ -110,35 +122,41 @@ int semihost_rename(const char *old_name, const char *new_name) { } #endif -int semihost_exit(void) { +int semihost_exit(void) +{ uint32_t args[4]; return __semihost(SYS_EXIT, args); } -int semihost_uid(char *uid) { +int semihost_uid(char *uid) +{ uint32_t args[2]; args[0] = (uint32_t)uid; args[1] = DEVICE_ID_LENGTH + 1; return __semihost(USR_UID, &args); } -int semihost_reset(void) { +int semihost_reset(void) +{ // Does not normally return, however if used with older firmware versions // that do not support this call it will return -1. return __semihost(USR_RESET, NULL); } -int semihost_vbus(void) { +int semihost_vbus(void) +{ return __semihost(USR_VBUS, NULL); } -int semihost_powerdown(void) { +int semihost_powerdown(void) +{ return __semihost(USR_POWERDOWN, NULL); } #if DEVICE_DEBUG_AWARENESS -int semihost_connected(void) { +int semihost_connected(void) +{ return (CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk) ? 1 : 0; } @@ -146,12 +164,14 @@ int semihost_connected(void) { // These processors cannot know if the interface is connect, assume so: static int is_debugger_attached = 1; -int semihost_connected(void) { +int semihost_connected(void) +{ return is_debugger_attached; } #endif -int semihost_disabledebug(void) { +int semihost_disabledebug(void) +{ uint32_t args[1]; #if !(DEVICE_DEBUG_AWARENESS) is_debugger_attached = 0; diff --git a/platform/mbed_semihost_api.h b/platform/mbed_semihost_api.h index 611cce69c07..2f20c8cbb24 100644 --- a/platform/mbed_semihost_api.h +++ b/platform/mbed_semihost_api.h @@ -29,8 +29,9 @@ extern "C" { #if !defined(__CC_ARM) && !defined(__ARMCC_VERSION) #if defined(__ICCARM__) -static inline int __semihost(int reason, const void *arg) { - return __semihosting(reason, (void*)arg); +static inline int __semihost(int reason, const void *arg) +{ + return __semihosting(reason, (void *)arg); } #else @@ -44,17 +45,18 @@ static inline int __semihost(int reason, const void *arg) { # define AngelSWIAsm swi #endif -static inline int __semihost(int reason, const void *arg) { +static inline int __semihost(int reason, const void *arg) +{ int value; - asm volatile ( - "mov r0, %1" "\n\t" - "mov r1, %2" "\n\t" - AngelSWIInsn " %a3" "\n\t" - "mov %0, r0" - : "=r" (value) /* output operands */ - : "r" (reason), "r" (arg), "i" (AngelSWI) /* input operands */ - : "r0", "r1", "r2", "r3", "ip", "lr", "memory", "cc" /* list of clobbered registers */ + asm volatile( + "mov r0, %1" "\n\t" + "mov r1, %2" "\n\t" + AngelSWIInsn " %a3" "\n\t" + "mov %0, r0" + : "=r"(value) /* output operands */ + : "r"(reason), "r"(arg), "i"(AngelSWI) /* input operands */ + : "r0", "r1", "r2", "r3", "ip", "lr", "memory", "cc" /* list of clobbered registers */ ); return value; @@ -63,14 +65,14 @@ static inline int __semihost(int reason, const void *arg) { #endif #if DEVICE_LOCALFILESYSTEM -FILEHANDLE semihost_open(const char* name, int openmode); -int semihost_close (FILEHANDLE fh); -int semihost_read (FILEHANDLE fh, unsigned char* buffer, unsigned int length, int mode); -int semihost_write (FILEHANDLE fh, const unsigned char* buffer, unsigned int length, int mode); +FILEHANDLE semihost_open(const char *name, int openmode); +int semihost_close(FILEHANDLE fh); +int semihost_read(FILEHANDLE fh, unsigned char *buffer, unsigned int length, int mode); +int semihost_write(FILEHANDLE fh, const unsigned char *buffer, unsigned int length, int mode); int semihost_ensure(FILEHANDLE fh); -long semihost_flen (FILEHANDLE fh); -int semihost_seek (FILEHANDLE fh, long position); -int semihost_istty (FILEHANDLE fh); +long semihost_flen(FILEHANDLE fh); +int semihost_seek(FILEHANDLE fh, long position); +int semihost_istty(FILEHANDLE fh); int semihost_remove(const char *name); int semihost_rename(const char *old_name, const char *new_name); diff --git a/platform/mbed_toolchain.h b/platform/mbed_toolchain.h index c26ad9fda72..d5864295dac 100644 --- a/platform/mbed_toolchain.h +++ b/platform/mbed_toolchain.h @@ -396,7 +396,7 @@ #endif #ifndef FILEHANDLE - typedef int FILEHANDLE; +typedef int FILEHANDLE; #endif // Backwards compatibility diff --git a/platform/mbed_wait_api.h b/platform/mbed_wait_api.h index 10948c84ef5..3a458ac1551 100644 --- a/platform/mbed_wait_api.h +++ b/platform/mbed_wait_api.h @@ -5,7 +5,7 @@ * \defgroup platform_wait_api wait_api functions * @{ */ - + /* mbed Microcontroller Library * Copyright (c) 2006-2013 ARM Limited * @@ -53,10 +53,10 @@ extern "C" { * the accuracy of single precision floating point). * * @param s number of seconds to wait - * + * * @note - * If the RTOS is present, this function always spins to get the exact number of microseconds, - * which potentially affects power (such as preventing deep sleep) and multithread performance. + * If the RTOS is present, this function always spins to get the exact number of microseconds, + * which potentially affects power (such as preventing deep sleep) and multithread performance. * You can avoid it by using Thread::wait(). */ void wait(float s); @@ -64,10 +64,10 @@ void wait(float s); /** Waits a number of milliseconds. * * @param ms the whole number of milliseconds to wait - * + * * @note - * If the RTOS is present, this function always spins to get the exact number of microseconds, - * which potentially affects power (such as preventing deep sleep) and multithread performance. + * If the RTOS is present, this function always spins to get the exact number of microseconds, + * which potentially affects power (such as preventing deep sleep) and multithread performance. * You can avoid it by using Thread::wait(). */ void wait_ms(int ms); @@ -75,9 +75,9 @@ void wait_ms(int ms); /** Waits a number of microseconds. * * @param us the whole number of microseconds to wait - * + * * @note - * If the RTOS is present, this function always spins to get the exact number of microseconds, + * If the RTOS is present, this function always spins to get the exact number of microseconds, * which potentially affects power (such as preventing deep sleep) and multithread performance. */ void wait_us(int us); diff --git a/platform/mbed_wait_api_no_rtos.c b/platform/mbed_wait_api_no_rtos.c index a78dd8bc799..c29ba17217d 100644 --- a/platform/mbed_wait_api_no_rtos.c +++ b/platform/mbed_wait_api_no_rtos.c @@ -21,15 +21,18 @@ #include "platform/mbed_wait_api.h" #include "hal/us_ticker_api.h" -void wait(float s) { +void wait(float s) +{ wait_us(s * 1000000.0f); } -void wait_ms(int ms) { +void wait_ms(int ms) +{ wait_us(ms * 1000); } -void wait_us(int us) { +void wait_us(int us) +{ const ticker_data_t *const ticker = get_us_ticker_data(); uint32_t start = ticker_read(ticker); while ((ticker_read(ticker) - start) < (uint32_t)us); diff --git a/platform/mbed_wait_api_rtos.cpp b/platform/mbed_wait_api_rtos.cpp index 3c082f2fe69..b5359378400 100644 --- a/platform/mbed_wait_api_rtos.cpp +++ b/platform/mbed_wait_api_rtos.cpp @@ -24,15 +24,18 @@ #include "platform/mbed_critical.h" #include "platform/mbed_power_mgmt.h" -void wait(float s) { +void wait(float s) +{ wait_us(s * 1000000.0f); } -void wait_ms(int ms) { +void wait_ms(int ms) +{ wait_us(ms * 1000); } -void wait_us(int us) { +void wait_us(int us) +{ const ticker_data_t *const ticker = get_us_ticker_data(); uint32_t start = ticker_read(ticker); From 2a2f0fb73dcf909fc7dbe9f1d5480ab6aff5ed2b Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Thu, 28 Jun 2018 10:51:12 -0500 Subject: [PATCH 027/113] Use Component section for ARM compiler version --- tools/toolchains/arm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/toolchains/arm.py b/tools/toolchains/arm.py index 1a98ad320b9..70ac556226f 100644 --- a/tools/toolchains/arm.py +++ b/tools/toolchains/arm.py @@ -41,7 +41,7 @@ class ARM(mbedToolchain): SUPPORTED_CORES = ["Cortex-M0", "Cortex-M0+", "Cortex-M3", "Cortex-M4", "Cortex-M4F", "Cortex-M7", "Cortex-M7F", "Cortex-M7FD", "Cortex-A9"] ARMCC_RANGE = (LooseVersion("5.06"), LooseVersion("5.07")) - ARMCC_VERSION_RE = re.compile("Product: ARM Compiler (\d+\.\d+)") + ARMCC_VERSION_RE = re.compile("Component: ARM Compiler (\d+\.\d+)") @staticmethod def check_executable(): From 6675af391be4f9f4a963f26b6ed69e0998cd7f3b Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Thu, 28 Jun 2018 10:58:52 -0500 Subject: [PATCH 028/113] Add a test for MDK pro version detection --- tools/test/toolchains/api_test.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tools/test/toolchains/api_test.py b/tools/test/toolchains/api_test.py index 0e764eaf8ec..6fd9d6ff454 100644 --- a/tools/test/toolchains/api_test.py +++ b/tools/test/toolchains/api_test.py @@ -31,6 +31,13 @@ def test_arm_version_check(_run_cmd): toolchain.version_check() assert notifier.messages == [] _run_cmd.return_value = (""" + Product: MDK Professional 5.22 + Component: ARM Compiler 5.06 update 5 (build 528) + Tool: armcc [4d3621] + """, "", 0) + toolchain.version_check() + assert notifier.messages == [] + _run_cmd.return_value = (""" Product: ARM Compiler Component: ARM Compiler Tool: armcc [4d3621] From 15e3de9909a9c99f656e9af6c64f347177afc352 Mon Sep 17 00:00:00 2001 From: TomoYamanaka Date: Tue, 26 Jun 2018 19:17:59 +0900 Subject: [PATCH 029/113] Improve the process for Cortex-A9 in mbed_application I added the powerdown func by GIC in mbed_application because Cortex-A9 use GIC instead of NVIC. This process prevent unexpected interrupt when updating software by using bootloader. --- platform/mbed_application.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/platform/mbed_application.c b/platform/mbed_application.c index e94ef083b88..9953130bfd1 100644 --- a/platform/mbed_application.c +++ b/platform/mbed_application.c @@ -23,11 +23,33 @@ #if defined(__CORTEX_A9) +static void powerdown_gic(void); + void mbed_start_application(uintptr_t address) { + __disable_irq(); + powerdown_gic(); + __enable_irq(); ((void(*)())address)(); } +static void powerdown_gic() +{ + int i; + int j; + + for (i = 0; i < 32; i++) { + GICDistributor->ICENABLER[i] = 0xFFFFFFFF; + GICDistributor->ICPENDR[i] = 0xFFFFFFFF; + if (i < 4) { + GICDistributor->CPENDSGIR[i] = 0xFFFFFFFF; + } + for (j = 0; j < 8; j++) { + GICDistributor->IPRIORITYR[i*8+j] = 0x00000000; + } + } +} + #else static void powerdown_nvic(void); From 80bad763aaa3eb5e1738460431f618170a478758 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Mon, 2 Jul 2018 11:29:29 +0800 Subject: [PATCH 030/113] Fix memory leakage with MBR on exiting error path --- features/filesystem/bd/MBRBlockDevice.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/features/filesystem/bd/MBRBlockDevice.cpp b/features/filesystem/bd/MBRBlockDevice.cpp index e83e4fbf076..bcea66f69b2 100644 --- a/features/filesystem/bd/MBRBlockDevice.cpp +++ b/features/filesystem/bd/MBRBlockDevice.cpp @@ -242,6 +242,7 @@ int MBRBlockDevice::init() // Check that block addresses are valid if (!_bd->is_valid_erase(_offset, _size)) { + delete[] buffer; return BD_ERROR_INVALID_PARTITION; } From e61f62367cdac85413c55f9550a52e300aa159a9 Mon Sep 17 00:00:00 2001 From: Mahesh Mahadevan Date: Mon, 2 Jul 2018 15:16:57 -0500 Subject: [PATCH 031/113] LPC546XX: Fix UART mux setting in the LPCXpresso board Signed-off-by: Mahesh Mahadevan --- .../TARGET_LPC546XX/TARGET_LPCXpresso/PeripheralPins.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC546XX/TARGET_LPCXpresso/PeripheralPins.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC546XX/TARGET_LPCXpresso/PeripheralPins.c index 60f8246b942..99dc80db819 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC546XX/TARGET_LPCXpresso/PeripheralPins.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC546XX/TARGET_LPCXpresso/PeripheralPins.c @@ -65,13 +65,13 @@ const PinMap PinMap_I2C_SCL[] = { /************UART***************/ const PinMap PinMap_UART_TX[] = { {P0_30, UART_0, 1}, - {P3_27, UART_1, 1}, + {P3_27, UART_1, 3}, {NC , NC , 0} }; const PinMap PinMap_UART_RX[] = { {P0_29, UART_0, 1}, - {P3_26, UART_1, 1}, + {P3_26, UART_1, 3}, {NC , NC , 0} }; From 9b625d9344d9c6bd514d4b3bd3ce3793a1ea9f4b Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Wed, 20 Jun 2018 09:11:50 -0500 Subject: [PATCH 032/113] Persist config errors until validation occurs --- tools/config/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/config/__init__.py b/tools/config/__init__.py index ba86907b738..c2b1e4b42b5 100644 --- a/tools/config/__init__.py +++ b/tools/config/__init__.py @@ -727,7 +727,6 @@ def _process_config_and_overrides(self, data, params, unit_name, unit_kind): unit_name - the unit (library/application) that defines this parameter unit_kind - the kind of the unit ("library" or "application") """ - self.config_errors = [] _process_config_parameters(data.get("config", {}), params, unit_name, unit_kind) for label, overrides in data.get("target_overrides", {}).items(): From 052d7ddefff40faa1a936068f8ebb38d31eab1c0 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Thu, 21 Jun 2018 11:15:35 -0500 Subject: [PATCH 033/113] Make sure that there is always a config_errors member --- tools/config/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/config/__init__.py b/tools/config/__init__.py index c2b1e4b42b5..f06edfaa37c 100644 --- a/tools/config/__init__.py +++ b/tools/config/__init__.py @@ -414,6 +414,7 @@ def __init__(self, tgt, top_level_dirs=None, app_config=None): search for a configuration file). """ config_errors = [] + self.config_errors = [] self.app_config_location = app_config if self.app_config_location is None and top_level_dirs: self.app_config_location = self.find_app_config(top_level_dirs) From 3815813f9d023df275a97e735759ea081d425a19 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Thu, 21 Jun 2018 11:49:22 -0500 Subject: [PATCH 034/113] Skip invalid undefined errors --- tools/build_api.py | 22 +--------------------- tools/config/__init__.py | 37 +++++++++++++++++++++++-------------- 2 files changed, 24 insertions(+), 35 deletions(-) diff --git a/tools/build_api.py b/tools/build_api.py index 6f8f23425c6..af6a1470f1d 100644 --- a/tools/build_api.py +++ b/tools/build_api.py @@ -137,27 +137,7 @@ def get_config(src_paths, target, toolchain_name, app_config=None): app_config=app_config) # Scan src_path for config files - resources = toolchain.scan_resources(src_paths[0]) - for path in src_paths[1:]: - resources.add(toolchain.scan_resources(path)) - - # Update configuration files until added features creates no changes - prev_features = set() - while True: - # Update the configuration with any .json files found while scanning - toolchain.config.add_config_files(resources.json_files) - - # Add features while we find new ones - features = set(toolchain.config.get_features()) - if features == prev_features: - break - - for feature in features: - if feature in resources.features: - resources += resources.features[feature] - - prev_features = features - toolchain.config.validate_config() + scan_resources(src_paths, toolchain) if toolchain.config.has_regions: _ = list(toolchain.config.regions) diff --git a/tools/config/__init__.py b/tools/config/__init__.py index f06edfaa37c..819a156e3f4 100644 --- a/tools/config/__init__.py +++ b/tools/config/__init__.py @@ -53,6 +53,19 @@ class ConfigException(Exception): errors""" pass +class UndefinedParameter(ConfigException): + def __init__(self, param, name, kind, label): + self.param = param + self.name = name + self.kind = kind + self.label = label + + def __str__(self): + return "Attempt to override undefined parameter '{}' in '{}'".format( + self.param, + ConfigParameter.get_display_name(self.name, self.kind, self.label), + ) + class ConfigParameter(object): """This class keeps information about a single configuration parameter""" @@ -796,13 +809,8 @@ def _process_config_and_overrides(self, data, params, unit_name, unit_kind): continue else: self.config_errors.append( - ConfigException( - "Attempt to override undefined parameter" + - (" '%s' in '%s'" - % (full_name, - ConfigParameter.get_display_name(unit_name, - unit_kind, - label))))) + UndefinedParameter( + full_name, unit_name, unit_kind, label)) for cumulatives in self.cumulative_overrides.values(): cumulatives.update_target(self.target) @@ -850,10 +858,7 @@ def get_target_config_data(self): continue if (full_name not in params) or \ (params[full_name].defined_by[7:] not in rel_names): - raise ConfigException( - "Attempt to override undefined parameter '%s' in '%s'" - % (name, - ConfigParameter.get_display_name(tname, "target"))) + raise UndefinedParameter(name, tname, "target", "") # Otherwise update the value of the parameter params[full_name].set_value(val, tname, "target") return params @@ -989,8 +994,13 @@ def validate_config(self): Arguments: None """ - if self.config_errors: - raise self.config_errors[0] + params, _ = self.get_config_data() + for error in self.config_errors: + if (isinstance(error, UndefinedParameter) and + error.param in params): + continue + else: + raise error return True @@ -1010,7 +1020,6 @@ def load_resources(self, resources): """ # Update configuration files until added features creates no changes prev_features = set() - self.validate_config() while True: # Add/update the configuration with any .json files found while # scanning From 73d412e53e0de924749b8ec0727119194ec82a80 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Thu, 28 Jun 2018 10:36:18 -0500 Subject: [PATCH 035/113] Allow missing "bootloader_supported" key --- tools/config/__init__.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/tools/config/__init__.py b/tools/config/__init__.py index 819a156e3f4..8a38524ed4a 100644 --- a/tools/config/__init__.py +++ b/tools/config/__init__.py @@ -559,10 +559,8 @@ def sectors(self): return sectors raise ConfigException("No sector info available") - @property - def regions(self): - """Generate a list of regions from the config""" - if not self.target.bootloader_supported: + def _get_cmsis_part(self): + if not getattr(self.target, "bootloader_supported", False): raise ConfigException("Bootloader not supported on this target.") if not hasattr(self.target, "device_name"): raise ConfigException("Bootloader not supported on this target: " @@ -685,7 +683,7 @@ def _generate_bootloader_build(self, rom_start, rom_size): if start > rom_start + rom_size: raise ConfigException("Not enough memory on device to fit all " "application regions") - + @staticmethod def _find_sector(address, sectors): target_size = -1 @@ -698,13 +696,13 @@ def _find_sector(address, sectors): if (target_size < 0): raise ConfigException("No valid sector found") return target_start, target_size - + @staticmethod def _align_floor(address, sectors): target_start, target_size = Config._find_sector(address, sectors) sector_num = (address - target_start) // target_size return target_start + (sector_num * target_size) - + @staticmethod def _align_ceiling(address, sectors): target_start, target_size = Config._find_sector(address, sectors) From 601cae657b14cd39f9d7fded0613e5680601a31f Mon Sep 17 00:00:00 2001 From: Maciej Bocianski Date: Tue, 26 Jun 2018 19:54:52 +0200 Subject: [PATCH 036/113] add kernel ticker test --- .../kernel_tick_count/main.cpp | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 TESTS/mbedmicro-rtos-mbed/kernel_tick_count/main.cpp diff --git a/TESTS/mbedmicro-rtos-mbed/kernel_tick_count/main.cpp b/TESTS/mbedmicro-rtos-mbed/kernel_tick_count/main.cpp new file mode 100644 index 00000000000..9f5eb6eabe5 --- /dev/null +++ b/TESTS/mbedmicro-rtos-mbed/kernel_tick_count/main.cpp @@ -0,0 +1,119 @@ +/* mbed Microcontroller Library + * Copyright (c) 2018-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "greentea-client/test_env.h" +#include "utest/utest.h" +#include "unity/unity.h" + +#include "rtos/Kernel.h" +#include "mbed.h" + + +using utest::v1::Case; + +#define TEST_REPEAT_COUNT 1000 +#define NUM_WAIT_TICKS 1000 + +// all in [us] +#define ONE_SECOND 1000000 +#define SMALL_DELTA 1500 // 0.15% +#define BIG_DELTA 15000 // 1.5% + +/** Test if kernel ticker frequency is 1kHz + + Given a RTOS kernel ticker + When check it frequency + Then the the frequency is 1kHz + */ +void test_frequency() +{ + uint32_t freq = osKernelGetTickFreq(); + TEST_ASSERT_EQUAL_UINT32_MESSAGE(1000, freq, "Expected SysTick frequency is 1kHz"); +} + +/** Test if kernel ticker increments by one + + Given a RTOS kernel ticker + When perform subsequent calls of @a rtos::Kernel::get_ms_count + Then subsequent reads should not differ by more than one + */ +void test_increment(void) +{ + for (uint32_t i = 0; i < TEST_REPEAT_COUNT; i++) { + const uint64_t start = rtos::Kernel::get_ms_count(); + while (true) { + uint64_t diff = rtos::Kernel::get_ms_count() - start; + if (diff != 0) { + TEST_ASSERT_EQUAL_UINT64(1, diff); + break; + } + } + } +} + +/** Test if kernel ticker interval is 1ms + + Given a RTOS kernel ticker + When perform subsequent calls of @a rtos::Kernel::get_ms_count + Then the ticker interval should be 1ms + */ +void test_interval() +{ + uint64_t start, stop; + Timer timer; + + start = rtos::Kernel::get_ms_count(); + // wait for tick + do { + stop = rtos::Kernel::get_ms_count(); + } while ((stop - start) == 0); + timer.start(); + start = stop; + + // wait for NUM_WAIT_TICKS ticks + do { + stop = rtos::Kernel::get_ms_count(); + } while ((stop - start) != NUM_WAIT_TICKS); + timer.stop(); + TEST_ASSERT_EQUAL_UINT64(NUM_WAIT_TICKS, (stop - start)); + +#if defined(NO_SYSTICK) || defined(MBED_TICKLESS) + // On targets with NO_SYSTICK/MBED_TICKLESS enabled, systick is emulated by lp_ticker what makes it less accurate + // for more details https://os.mbed.com/docs/latest/reference/tickless.html + TEST_ASSERT_UINT64_WITHIN(BIG_DELTA, ONE_SECOND, timer.read_high_resolution_us()); +#else + TEST_ASSERT_UINT64_WITHIN(SMALL_DELTA, ONE_SECOND, timer.read_high_resolution_us()); +#endif +} + +// Test cases +Case cases[] = { + Case("Test kernel ticker frequency", test_frequency), + Case("Test if kernel ticker increments by one", test_increment), + Case("Test if kernel ticker interval is 1ms", test_interval) +}; + +utest::v1::status_t greentea_test_setup(const size_t number_of_cases) +{ + GREENTEA_SETUP(10, "timing_drift_auto"); + return utest::v1::greentea_test_setup_handler(number_of_cases); +} + +utest::v1::Specification specification(greentea_test_setup, cases); + +int main() +{ + return !utest::v1::Harness::run(specification); +} From 2d95dbf1707944fcfb16110232f6309ba79c3fd9 Mon Sep 17 00:00:00 2001 From: bcostm Date: Fri, 29 Jun 2018 15:46:59 +0200 Subject: [PATCH 037/113] DISCO_L496AG: change LED1 and LED2 pins --- .../TARGET_STM32L496xG/TARGET_DISCO_L496AG/PinNames.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/TARGET_DISCO_L496AG/PinNames.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/TARGET_DISCO_L496AG/PinNames.h index 371a5c249e1..7b41515f0b6 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/TARGET_DISCO_L496AG/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/TARGET_DISCO_L496AG/PinNames.h @@ -285,8 +285,8 @@ typedef enum { #endif // Generic signals - LED1 = PB_13, // Green LD2 on board - LED2 = LED1, + LED1 = PA_5, // Green LD3 on board + LED2 = PB_13, // Green LD2 on board --> Warning: the state is reverted (1=OFF and 0=ON) LED3 = LED1, LED4 = LED1, USER_BUTTON = PC_13, // Joystick Center From 8e7527117c3cfc9305fbe88ae33fee64495a0fee Mon Sep 17 00:00:00 2001 From: bcostm Date: Mon, 2 Jul 2018 10:27:23 +0200 Subject: [PATCH 038/113] DISCO_L496AG: update LEDs comments in PeripheralPins.c --- .../TARGET_DISCO_L496AG/PeripheralPins.c | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/TARGET_DISCO_L496AG/PeripheralPins.c b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/TARGET_DISCO_L496AG/PeripheralPins.c index 185aa4f699a..a8254ebd4de 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/TARGET_DISCO_L496AG/PeripheralPins.c +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/TARGET_DISCO_L496AG/PeripheralPins.c @@ -63,8 +63,8 @@ MBED_WEAK const PinMap PinMap_ADC[] = { {PA_3_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC2_IN8 // Connected to QSPI_CLK [MX25R6435FM2IL0_SCLK] {PA_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9 // Connected to STMOD_ADC {PA_4_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC2_IN9 // Connected to STMOD_ADC - {PA_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10 // Connected to ARD_D13 - {PA_5_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC2_IN10 // Connected to ARD_D13 + {PA_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10 // Connected to ARD_D13 // Connected to LED1 (LD3 on the board) + {PA_5_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC2_IN10 // Connected to ARD_D13 // Connected to LED1 (LD3 on the board) {PA_6, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11 // Connected to QSPI_BK1_IO3 [MX25R6435FM2IL0_SIO3] {PA_6_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC2_IN11 // Connected to QSPI_BK1_IO3 [MX25R6435FM2IL0_SIO3] {PA_7, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_IN12 // Connected to QSPI_BK1_IO2 [MX25R6435FM2IL0_SIO2] @@ -107,7 +107,7 @@ MBED_WEAK const PinMap PinMap_ADC_Internal[] = { MBED_WEAK const PinMap PinMap_DAC[] = { {PA_4, DAC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC1_OUT1 // Connected to STMOD_ADC - {PA_5, DAC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // DAC1_OUT2 // Connected to ARD_D13 + {PA_5, DAC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // DAC1_OUT2 // Connected to ARD_D13 // Connected to LED1 (LD3 on the board) {NC, NC, 0} }; @@ -141,7 +141,7 @@ MBED_WEAK const PinMap PinMap_I2C_SCL[] = { {PB_8, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, // Connected to I2C1_SCL {PB_10, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, // Connected to SAI1_SCK_A {PB_10_ALT0, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF3_I2C4)}, // Connected to SAI1_SCK_A - {PB_13, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, // Connected to LED1 + {PB_13, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, // Connected to LED2 (LD2 on the board) {PC_0, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, // Connected to ARD_A5 {PC_0_ALT0, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF2_I2C4)}, // Connected to ARD_A5 {PD_12, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C4)}, // Connected to PSRAM_A17 [A17_IS66WV51216EBLL] @@ -169,8 +169,8 @@ MBED_WEAK const PinMap PinMap_PWM[] = { {PA_3, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4 // Connected to QSPI_CLK [MX25R6435FM2IL0_SCLK] // {PA_3, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4 // Connected to QSPI_CLK [MX25R6435FM2IL0_SCLK] {PA_3_ALT0, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 2, 0)}, // TIM15_CH2 // Connected to QSPI_CLK [MX25R6435FM2IL0_SCLK] - {PA_5, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 // Connected to ARD_D13 - {PA_5_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N // Connected to ARD_D13 + {PA_5, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 // Connected to ARD_D13 // Connected to LED1 (LD3 on the board) + {PA_5_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N // Connected to ARD_D13 // Connected to LED1 (LD3 on the board) {PA_6, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 // Connected to QSPI_BK1_IO3 [MX25R6435FM2IL0_SIO3] {PA_6_ALT0, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM16, 1, 0)}, // TIM16_CH1 // Connected to QSPI_BK1_IO3 [MX25R6435FM2IL0_SIO3] {PA_7, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N // Connected to QSPI_BK1_IO2 [MX25R6435FM2IL0_SIO2] @@ -201,8 +201,8 @@ MBED_WEAK const PinMap PinMap_PWM[] = { {PB_9_ALT0, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM17, 1, 0)}, // TIM17_CH1 // Connected to ARD_D5 {PB_10, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 // Connected to SAI1_SCK_A {PB_11, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4 // Connected to QSPI_BK1_NCS [MX25R6435FM2IL0_CS] - {PB_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N // Connected to LED1 - {PB_13_ALT0, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 1)}, // TIM15_CH1N // Connected to LED1 + {PB_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N // Connected to LED2 (LD2 on the board) + {PB_13_ALT0, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 1)}, // TIM15_CH1N // Connected to LED2 (LD2 on the board) {PB_14, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N // Connected to I2C2_SDA [CS42L51_SDA] {PB_14_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N // Connected to I2C2_SDA [CS42L51_SDA] {PB_14_ALT1, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 0)}, // TIM15_CH1 // Connected to I2C2_SDA [CS42L51_SDA] @@ -322,8 +322,8 @@ MBED_WEAK const PinMap PinMap_UART_CTS[] = { {PB_4, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, {PB_5, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)}, // Connected to ARD_D11 {PB_7, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, // Connected to I2C1_SDA - {PB_13, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, // Connected to LED1 - {PB_13_ALT0, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_LPUART1)}, // Connected to LED1 + {PB_13, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, // Connected to LED2 (LD2 on the board) + {PB_13_ALT0, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_LPUART1)}, // Connected to LED2 (LD2 on the board) {PD_3, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, {PD_11, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, // Connected to PSRAM_A16 [A16_IS66WV51216EBLL] {PG_5, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_LPUART1)}, // Connected to PSRAM_A15 [A15_IS66WV51216EBLL] @@ -368,12 +368,12 @@ MBED_WEAK const PinMap PinMap_SPI_MISO[] = { MBED_WEAK const PinMap PinMap_SPI_SCLK[] = { {PA_1, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, // Connected to ARD_A4 - {PA_5, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, // Connected to ARD_D13 + {PA_5, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, // Connected to ARD_D13 // Connected to LED1 (LD3 on the board) {PA_9, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_SPI2)}, // Connected to USB_OTGFS_VBUS {PB_3, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, {PB_3_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, {PB_10, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, // Connected to SAI1_SCK_A - {PB_13, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, // Connected to LED1 + {PB_13, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, // Connected to LED2 (LD2 on the board) {PC_10, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, // Connected to uSD_D2 {PD_1, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, // Connected to D3 [D3_IS66WV51216EBLL] {PD_3, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_SPI2)}, @@ -416,7 +416,7 @@ MBED_WEAK const PinMap PinMap_CAN_TD[] = { {PA_12, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, // Connected to USB_OTGFS_DP {PB_6, CAN_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF8_CAN2)}, // Connected to USART1_TX {PB_9, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, // Connected to ARD_D5 - {PB_13, CAN_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_CAN2)}, // Connected to LED1 + {PB_13, CAN_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_CAN2)}, // Connected to LED2 (LD2 on the board) {PD_1, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, // Connected to D3 [D3_IS66WV51216EBLL] {PH_13, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, // Connected to ARD_D9 {NC, NC, 0} From 7057c250e44c2ccd20ba9febd415203448b3cb3e Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Fri, 29 Jun 2018 12:09:53 -0500 Subject: [PATCH 039/113] Summarize memory map when --stats-depth is 0 --- tools/memap.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/tools/memap.py b/tools/memap.py index 3e419e8eb73..eb7d2792f95 100644 --- a/tools/memap.py +++ b/tools/memap.py @@ -12,6 +12,7 @@ import json from argparse import ArgumentParser from copy import deepcopy +from collections import defaultdict from prettytable import PrettyTable from .utils import (argparse_filestring_type, argparse_lowercase_hyphen_type, @@ -54,7 +55,8 @@ def module_add(self, object_name, size, section): contents[section] += size return - new_module = {section: size} + new_module = defaultdict(int) + new_module[section] = size self.modules[object_name] = new_module def module_replace(self, old_object, new_object): @@ -519,7 +521,8 @@ def generate_output(self, export_format, depth, file_output=None): Returns: generated string for the 'table' format, otherwise None """ - self.reduce_depth(depth) + if depth is None or depth > 0: + self.reduce_depth(depth) self.compute_report() try: if file_output: @@ -625,10 +628,9 @@ def compute_report(self): for k in self.sections: self.subtotal[k] = 0 - for i in self.short_modules: + for mod in self.modules.values(): for k in self.sections: - self.short_modules[i].setdefault(k, 0) - self.subtotal[k] += self.short_modules[i][k] + self.subtotal[k] += mod[k] self.mem_summary = { 'static_ram': (self.subtotal['.data'] + self.subtotal['.bss']), @@ -636,13 +638,14 @@ def compute_report(self): } self.mem_report = [] - for i in sorted(self.short_modules): - self.mem_report.append({ - "module":i, - "size":{ - k: self.short_modules[i][k] for k in self.print_sections - } - }) + if self.short_modules: + for name, sizes in sorted(self.short_modules.items()): + self.mem_report.append({ + "module": name, + "size":{ + k: sizes.get(k, 0) for k in self.print_sections + } + }) self.mem_report.append({ 'summary': self.mem_summary From 9044dd8ffb003ae79e60fa774486895ff83540bd Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Tue, 3 Jul 2018 10:03:27 -0500 Subject: [PATCH 040/113] Use defaultdict in the other place --- tools/memap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/memap.py b/tools/memap.py index eb7d2792f95..29f613c7525 100644 --- a/tools/memap.py +++ b/tools/memap.py @@ -502,7 +502,7 @@ def reduce_depth(self, depth): if split_name[0] == '': split_name = split_name[1:] new_name = join(*split_name[:depth]) - self.short_modules.setdefault(new_name, {}) + self.short_modules.setdefault(new_name, defaultdict(int)) for section_idx, value in v.items(): self.short_modules[new_name].setdefault(section_idx, 0) self.short_modules[new_name][section_idx] += self.modules[module_name][section_idx] From 5e203432a13ad4a89ef66c18364398e04bfcf79b Mon Sep 17 00:00:00 2001 From: PHST Date: Mon, 2 Jul 2018 10:04:05 +0200 Subject: [PATCH 041/113] Make clock source changeable over mbed_app.json By adding the missing include the clock source for EFM32-Targets is changeable over mbed_app.json. --- targets/TARGET_Silicon_Labs/TARGET_EFM32/common/mbed_overrides.c | 1 + 1 file changed, 1 insertion(+) diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/common/mbed_overrides.c b/targets/TARGET_Silicon_Labs/TARGET_EFM32/common/mbed_overrides.c index c39707e7f09..f1c4754c217 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/common/mbed_overrides.c +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/common/mbed_overrides.c @@ -29,6 +29,7 @@ #include "device.h" #include "em_usart.h" #include "gpio_api.h" +#include "clocking.h" gpio_t bc_enable; From 3ddbbf973fa0ea685c8d5a9ea67648266af7e646 Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Mon, 2 Jul 2018 14:03:05 +0200 Subject: [PATCH 042/113] DISCO STM32L4 : Add TWO_RAM_REGIONS macro --- targets/targets.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/targets/targets.json b/targets/targets.json index 389eaf964f9..00852f21cfa 100755 --- a/targets/targets.json +++ b/targets/targets.json @@ -2028,7 +2028,7 @@ }, "supported_form_factors": ["ARDUINO"], "detect_code": ["0764"], - "macros_add": ["USBHOST_OTHER"], + "macros_add": ["USBHOST_OTHER", "TWO_RAM_REGIONS"], "device_has_add": ["ANALOGOUT", "CAN", "SERIAL_FC", "TRNG", "FLASH"], "release_versions": ["2", "5"], "device_name": "STM32L475VG", @@ -2050,7 +2050,7 @@ } }, "detect_code": ["0820"], - "macros_add": ["USBHOST_OTHER"], + "macros_add": ["USBHOST_OTHER", "TWO_RAM_REGIONS"], "device_has_add": ["ANALOGOUT", "CAN", "SERIAL_FC", "TRNG", "FLASH"], "release_versions": ["2", "5"], "device_name": "STM32L476VG", From 15456d90cb3923f1ea2ca2fd30c0f6129763989f Mon Sep 17 00:00:00 2001 From: Hasnain Virk Date: Mon, 2 Jul 2018 18:33:30 +0300 Subject: [PATCH 043/113] Bug fix for receive windows In rx_config(params) API we shouldn't check for radio state as radio may never get idle for a class C device. That check made sense only for class A. As the PHY layer have no conecpt of receive windows which is a MAC layer construct, we should remove the state check. The API will be changed later to void rx_config(params). In addition to that another bug is fixed in the open_rx2_windows() API. We should set the rx slot first before instantiating a test based on its value. --- features/lorawan/lorastack/mac/LoRaMac.cpp | 19 ++++++++----------- features/lorawan/lorastack/phy/LoRaPHY.cpp | 9 --------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/features/lorawan/lorastack/mac/LoRaMac.cpp b/features/lorawan/lorastack/mac/LoRaMac.cpp index b6f5edf2a8a..69ed9b0b4f0 100644 --- a/features/lorawan/lorastack/mac/LoRaMac.cpp +++ b/features/lorawan/lorastack/mac/LoRaMac.cpp @@ -869,8 +869,8 @@ void LoRaMac::open_rx1_window(void) _mcps_indication.rx_datarate = _params.rx_window1_config.datarate; _lora_phy.rx_config(&_params.rx_window1_config); - _lora_phy.setup_rx_window(_params.rx_window1_config.is_rx_continuous, - _params.sys_params.max_rx_win_time); + _lora_phy.rx_config(&_params.rx_window1_config); + _lora_phy.handle_receive(); tr_debug("Opening RX1 Window"); } @@ -885,8 +885,6 @@ void LoRaMac::open_rx2_window() _params.rx_window2_config.frequency = _params.sys_params.rx2_channel.frequency; _params.rx_window2_config.dl_dwell_time = _params.sys_params.downlink_dwell_time; _params.rx_window2_config.is_repeater_supported = _params.is_repeater_supported; - _params.rx_window2_config.rx_slot = _params.rx_window2_config.is_rx_continuous ? - RX_SLOT_WIN_CLASS_C : RX_SLOT_WIN_2; if (get_device_class() == CLASS_C) { _params.rx_window2_config.is_rx_continuous = true; @@ -894,15 +892,14 @@ void LoRaMac::open_rx2_window() _params.rx_window2_config.is_rx_continuous = false; } - _mcps_indication.rx_datarate = _params.rx_window2_config.datarate; - - if (_lora_phy.rx_config(&_params.rx_window2_config)) { + _params.rx_window2_config.rx_slot = _params.rx_window2_config.is_rx_continuous ? + RX_SLOT_WIN_CLASS_C : RX_SLOT_WIN_2; - _lora_phy.setup_rx_window(_params.rx_window2_config.is_rx_continuous, - _params.sys_params.max_rx_win_time); + _mcps_indication.rx_datarate = _params.rx_window2_config.datarate; - _params.rx_slot = _params.rx_window2_config.rx_slot; - } + _lora_phy.rx_config(&_params.rx_window2_config); + _lora_phy.handle_receive(); + _params.rx_slot = _params.rx_window2_config.rx_slot; tr_debug("Opening RX2 Window, Frequency = %u", _params.rx_window2_config.frequency); } diff --git a/features/lorawan/lorastack/phy/LoRaPHY.cpp b/features/lorawan/lorastack/phy/LoRaPHY.cpp index 61416a42a2a..f2c751c9fcc 100644 --- a/features/lorawan/lorastack/phy/LoRaPHY.cpp +++ b/features/lorawan/lorastack/phy/LoRaPHY.cpp @@ -817,15 +817,6 @@ bool LoRaPHY::rx_config(rx_config_params_t *rx_conf) uint8_t phy_dr = 0; uint32_t frequency = rx_conf->frequency; - _radio->lock(); - - if (_radio->get_status() != RF_IDLE) { - _radio->unlock(); - return false; - } - - _radio->unlock(); - if (rx_conf->rx_slot == RX_SLOT_WIN_1) { // Apply window 1 frequency frequency = phy_params.channels.channel_list[rx_conf->channel].frequency; From fcfb79175d62871bd38542b1a013df505a71cec3 Mon Sep 17 00:00:00 2001 From: Marcus Chang Date: Mon, 2 Jul 2018 11:13:50 -0700 Subject: [PATCH 044/113] Fix interrupt initialization for NRF52 series In some cases the UARTE interrupt would be enabled with pending interrupts. This commit ensures that interrupts are only enabled from a known state. --- .../TARGET_NRF5x/TARGET_NRF52/serial_api.c | 71 ++++++++----------- 1 file changed, 28 insertions(+), 43 deletions(-) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/serial_api.c b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/serial_api.c index 595f3e15e49..2d4de63d983 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/serial_api.c +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/serial_api.c @@ -429,7 +429,7 @@ static void nordic_nrf5_uart_swi_rx_1(void) static void nordic_nrf5_uart_event_handler_endtx(int instance) { /* Disable ENDTX event again. */ - nordic_nrf5_uart_register[instance]->INTEN &= ~NRF_UARTE_INT_ENDTX_MASK; + nrf_uarte_int_disable(nordic_nrf5_uart_register[instance], NRF_UARTE_INT_ENDTX_MASK); /* Release mutex. As the owner this call is safe. */ nordic_nrf5_uart_state[instance].tx_in_progress = 0; @@ -455,7 +455,7 @@ static void nordic_nrf5_uart_event_handler_endtx(int instance) static void nordic_nrf5_uart_event_handler_endtx_asynch(int instance) { /* Disable ENDTX interrupt. */ - nordic_nrf5_uart_register[instance]->INTEN &= ~NRF_UARTE_INT_ENDTX_MASK; + nrf_uarte_int_disable(nordic_nrf5_uart_register[instance], NRF_UARTE_INT_ENDTX_MASK); /* Set Tx done and reset Tx mode to be not asynchronous. */ nordic_nrf5_uart_state[instance].tx_in_progress = 0; @@ -753,29 +753,6 @@ static void nordic_nrf5_uart1_handler(void) * |___/ */ -/** - * @brief Enable UARTE interrupts. - * - * Translates instance to UARTE register. - * Set IRQ priority to highest to avoid Rx overflow. - * - * @param[in] instance The instance - */ -static void nordic_nrf5_uart_irq_enable(int instance) -{ - if (instance == 0) { - - nrf_drv_common_irq_enable(UARTE0_UART0_IRQn, APP_IRQ_PRIORITY_HIGHEST); - } - -#if UART1_ENABLED - else if (instance == 1) { - - nrf_drv_common_irq_enable(UARTE1_IRQn, APP_IRQ_PRIORITY_HIGHEST); - } -#endif -} - /** * @brief Configure UARTE based on serial object settings. * @@ -840,9 +817,9 @@ static void nordic_nrf5_uart_configure_object(serial_t *obj) static void nordic_nrf5_uart_configure_rx(int instance) { /* Disable interrupts during confiration. */ - nordic_nrf5_uart_register[instance]->INTEN &= ~(NRF_UARTE_INT_RXSTARTED_MASK | - NRF_UARTE_INT_ENDRX_MASK | - NRF_UARTE_INT_RXDRDY_MASK); + nrf_uarte_int_disable(nordic_nrf5_uart_register[instance], NRF_UARTE_INT_RXSTARTED_MASK | + NRF_UARTE_INT_ENDRX_MASK | + NRF_UARTE_INT_RXDRDY_MASK); /* Clear FIFO buffer. */ nrf_atfifo_clear(nordic_nrf5_uart_state[instance].fifo); @@ -867,9 +844,9 @@ static void nordic_nrf5_uart_configure_rx(int instance) nordic_nrf5_uart_state[instance].rx_asynch = false; /* Enable interrupts again. */ - nordic_nrf5_uart_register[instance]->INTEN |= (NRF_UARTE_INT_RXSTARTED_MASK | - NRF_UARTE_INT_ENDRX_MASK | - NRF_UARTE_INT_RXDRDY_MASK); + nrf_uarte_int_enable(nordic_nrf5_uart_register[instance], NRF_UARTE_INT_RXSTARTED_MASK | + NRF_UARTE_INT_ENDRX_MASK | + NRF_UARTE_INT_RXDRDY_MASK); } #if DEVICE_SERIAL_ASYNCH @@ -881,9 +858,9 @@ static void nordic_nrf5_uart_configure_rx(int instance) static void nordic_nrf5_uart_configure_rx_asynch(int instance) { /* Disable Rx related interrupts. */ - nordic_nrf5_uart_register[instance]->INTEN &= ~(NRF_UARTE_INT_RXSTARTED_MASK | - NRF_UARTE_INT_ENDRX_MASK | - NRF_UARTE_INT_RXDRDY_MASK); + nrf_uarte_int_disable(nordic_nrf5_uart_register[instance], NRF_UARTE_INT_RXSTARTED_MASK | + NRF_UARTE_INT_ENDRX_MASK | + NRF_UARTE_INT_RXDRDY_MASK); /* Clear Rx related events. */ nrf_uarte_event_clear(nordic_nrf5_uart_register[instance], NRF_UARTE_EVENT_RXSTARTED); @@ -897,7 +874,7 @@ static void nordic_nrf5_uart_configure_rx_asynch(int instance) nordic_nrf5_uart_state[instance].rx_asynch = true; /* Enable Rx interrupt. */ - nordic_nrf5_uart_register[instance]->INTEN |= NRF_UARTE_INT_ENDRX_MASK; + nrf_uarte_int_enable(nordic_nrf5_uart_register[instance], NRF_UARTE_INT_ENDRX_MASK); } #endif @@ -1004,7 +981,7 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) NRF_RTC_INT_COMPARE0_MASK | NRF_RTC_INT_COMPARE1_MASK); - /* Enable RTC2 IRQ. Priority is set to lowest so that the UARTE ISR can interrupt it. */ + /* Enable RTC2 IRQ. Priority is set to highest so that the UARTE ISR can't interrupt it. */ nrf_drv_common_irq_enable(RTC2_IRQn, APP_IRQ_PRIORITY_HIGHEST); /* Start RTC2. According to the datasheet the added power consumption is neglible so @@ -1032,9 +1009,13 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) /* Initialize owner to NULL. */ nordic_nrf5_uart_state[0].owner = NULL; - /* Enable interrupts for UARTE0. */ + /* Clear any old events and enable interrupts for UARTE0. */ + nrf_uarte_int_disable(nordic_nrf5_uart_register[0], NRF_UARTE_INT_RXSTARTED_MASK | + NRF_UARTE_INT_ENDRX_MASK | + NRF_UARTE_INT_RXDRDY_MASK); + NVIC_SetVector(UARTE0_UART0_IRQn, (uint32_t) nordic_nrf5_uart0_handler); - nordic_nrf5_uart_irq_enable(0); + nrf_drv_common_irq_enable(UARTE0_UART0_IRQn, APP_IRQ_PRIORITY_HIGHEST); #if UART1_ENABLED /* Initialize FIFO buffer for UARTE1. */ @@ -1044,9 +1025,13 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) /* Initialize owner to NULL. */ nordic_nrf5_uart_state[1].owner = NULL; - /* Enable interrupts for UARTE1. */ + /* Clear any old events and enable interrupts for UARTE1. */ + nrf_uarte_int_disable(nordic_nrf5_uart_register[1], NRF_UARTE_INT_RXSTARTED_MASK | + NRF_UARTE_INT_ENDRX_MASK | + NRF_UARTE_INT_RXDRDY_MASK); + NVIC_SetVector(UARTE1_IRQn, (uint32_t) nordic_nrf5_uart1_handler); - nordic_nrf5_uart_irq_enable(1); + nrf_drv_common_irq_enable(UARTE1_IRQn, APP_IRQ_PRIORITY_HIGHEST); #endif } @@ -1472,7 +1457,7 @@ void serial_putc(serial_t *obj, int character) /* Clear ENDTX event and enable interrupts. */ nrf_uarte_event_clear(nordic_nrf5_uart_register[instance], NRF_UARTE_EVENT_ENDTX); - nordic_nrf5_uart_register[instance]->INTEN |= NRF_UARTE_INT_ENDTX_MASK; + nrf_uarte_int_enable(nordic_nrf5_uart_register[instance], NRF_UARTE_INT_ENDTX_MASK); /* Trigger DMA transfer. */ nrf_uarte_task_trigger(nordic_nrf5_uart_register[instance], @@ -1632,7 +1617,7 @@ int serial_tx_asynch(serial_t *obj, const void *tx, size_t tx_length, uint8_t tx /* Clear Tx event and enable Tx interrupts. */ nrf_uarte_event_clear(nordic_nrf5_uart_register[instance], NRF_UARTE_EVENT_ENDTX); - nordic_nrf5_uart_register[instance]->INTEN |= NRF_UARTE_INT_ENDTX_MASK; + nrf_uarte_int_enable(nordic_nrf5_uart_register[instance], NRF_UARTE_INT_ENDTX_MASK); /* Set Tx DMA buffer. */ nrf_uarte_tx_buffer_set(nordic_nrf5_uart_register[obj->serial.instance], @@ -1771,7 +1756,7 @@ void serial_tx_abort_asynch(serial_t *obj) int instance = obj->serial.instance; /* Disable ENDTX interrupts. */ - nordic_nrf5_uart_register[instance]->INTEN &= ~NRF_UARTE_INT_ENDTX_MASK; + nrf_uarte_int_disable(nordic_nrf5_uart_register[instance], NRF_UARTE_INT_ENDTX_MASK); /* Clear ENDTX event. */ nrf_uarte_event_clear(nordic_nrf5_uart_register[instance], NRF_UARTE_EVENT_ENDTX); From 05e3986abec28318d4b0d376b538e193e105021c Mon Sep 17 00:00:00 2001 From: Marcus Chang Date: Mon, 2 Jul 2018 16:58:33 -0700 Subject: [PATCH 045/113] Fix target definition for NRF52 series * Removed RTC, NRF52840 doesn't support RTC API. * Reorganized DEVICE_HAS order for NRF52832. --- targets/targets.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/targets/targets.json b/targets/targets.json index 00852f21cfa..80868ebfd8a 100755 --- a/targets/targets.json +++ b/targets/targets.json @@ -3681,12 +3681,12 @@ "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", + "SLEEP", "SPI", "SPI_ASYNCH", "STCLK_OFF_DURING_SLEEP", "TRNG", - "USTICKER", - "SLEEP" + "USTICKER" ], "extra_labels": [ "NORDIC", @@ -3777,7 +3777,6 @@ "PORTINOUT", "PORTOUT", "PWMOUT", - "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", From 3d52ba49c5cc14cda17066a928797437cef52f5b Mon Sep 17 00:00:00 2001 From: Senthil Ramakrishnan Date: Tue, 3 Jul 2018 14:00:46 -0500 Subject: [PATCH 046/113] Fix wrong config binding --- platform/mbed_error.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/mbed_error.c b/platform/mbed_error.c index e1bebb2b157..269eebd48b5 100644 --- a/platform/mbed_error.c +++ b/platform/mbed_error.c @@ -133,7 +133,7 @@ static mbed_error_status_t handle_error(mbed_error_status_t error_status, unsign #endif //MBED_CONF_RTOS_PRESENT -#ifdef MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED +#if MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED //Capture filename/linenumber if provided //Index for tracking error_filename memset(¤t_error_ctx.error_filename, 0, MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN); From 79d3a0acdbaa36c1d48961b5700804c08bb42748 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=20Lepp=C3=A4nen?= Date: Fri, 29 Jun 2018 14:28:39 +0300 Subject: [PATCH 047/113] Modified Wiced drivers EMAC instance get Removed EMAC get_default_instance() since WLAN drivers are not default EMAC drivers. Moved EMAC static declaration inside get_instance(). --- .../libwiced_drivers.ar | Bin 2560578 -> 2555944 bytes .../libwiced_drivers.ar | Bin 2125844 -> 2118144 bytes .../libwiced_drivers.ar | Bin 2560704 -> 2556070 bytes .../libwiced_drivers.a | Bin 1156898 -> 1156104 bytes .../libwiced_drivers.a | Bin 930384 -> 929592 bytes .../libwiced_drivers.a | Bin 1156524 -> 1155730 bytes .../libwiced_drivers.a | Bin 2596270 -> 2593352 bytes .../libwiced_drivers.a | Bin 2151576 -> 2145224 bytes .../libwiced_drivers.a | Bin 2596882 -> 2593900 bytes .../wiced_interface/WicedInterface.h | 3 ++- 10 files changed, 2 insertions(+), 1 deletion(-) diff --git a/targets/TARGET_WICED/TOOLCHAIN_ARM/TARGET_MTB_ADV_WISE_1530/libwiced_drivers.ar b/targets/TARGET_WICED/TOOLCHAIN_ARM/TARGET_MTB_ADV_WISE_1530/libwiced_drivers.ar index 6831273943ea98ede32a9220f5a66a9d1d559ea5..a35d3bea929b7b7c6fa918b14bdb293c15616f9d 100644 GIT binary patch delta 74632 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 SE$b0|`+9mKJspVlEB^;vy1Ksr diff --git a/targets/TARGET_WICED/TOOLCHAIN_ARM/TARGET_MTB_MXCHIP_EMW3166/libwiced_drivers.ar b/targets/TARGET_WICED/TOOLCHAIN_ARM/TARGET_MTB_MXCHIP_EMW3166/libwiced_drivers.ar index e937e50252dd3e966372723dd2ff1698b5d939c1..b66788e1fa6a2ed04326fa85e6eb564974657778 100644 GIT binary patch delta 71270 zcmeFa3tUxI+CRSc=IjFp&Vj@Is(=z;qXdSA4LVv_ra)kLD@0Ha}EdI-(24JH#5J_hd=n) zexLPy)?Rz9b=Lh_(Y97zQ@vI$y}xK^!iX^b%XXC{-N%wtS@n;fJGUh1U-T6HD;$zv zxGw!KpQ8Wmi~sOFCFZ*HkDsD{!qSd4lJb9eoaAQdZ$8;+l9S_eI8k!Kqcb#je~Nk% z|Ezia8cFvrc#0eyQA6^jf9dn`2}!j*x0@yPzduF)C-Q&H=~uQ&-JY{PlK!7~oJSWW zO3tJI##5ajIsdz#qJQ@X{(<{N|Mn36eGe4<`=j{pdZ6e(@EiX<5B&e?_cvV2mK-0~ zr0OCG|8;+MwM(x5;Bj+GlDa*a&63;y>M3$~@i+C7+dugjlVYX6`RuEbjQ{LY^v_!S zH`p^h>>?HMfB#pHrCBol@1LUoo0tCu@8b9WXMOL!xI_Af&*^x{{hxe1hEJ6|iuk|( zhfk5mu@LG1;ZyWaecb%`VCmoU6#cs#{wLinatN7cP^I*rev1CnAMEkHqW^e^Z65G) zO_aP`(f$*{KfuM!lGnfbxtt++74d(6r-SCdZJIHQTn^jbIp>^ zKYFenmwfQ}CN=!6r|54f{xSc{xsvbSc>L}*O7>@UjpX+?pQ68~6gq#WQt7`v)3PQ1 zf5lVuuW;o5!i}PTNhtn@9tbEfOV+2zCP;w;n*Qfc*>Ne5pG)!o@CllVhp(ZAZk|Dk(De=9VhKQl`Ifv4y{@e#*w%w7Cc!Hk(t&zUoO z>5QD*-16&x^?bd?J8*-O>pl0BxyHQiwd1(ra&PSL*n3CB$Csb43~)*q9!q5-{i0tF z-x;X0w52(JEz|V}6&HDu<+O*spKQ)wI(t@5!R*`_&*Us!G;h(9O2%kkuS%k-e7(ex&$0aPnv+ z&cO&Pj>aWM{SXK3h3=Ne1jzS0Xiv}gz01Mqxxm-aFED!3$5UNHE!neOb@#@lJTNwC z#>7WcW;~WLW@5(3*yRba+F#g^q%PGXkB@~WPE%0MHrG8=Fijq3`SEtw=`zKSaq)N4 ze%plmhR2MEx1_5&RiQOQ%;DvYU%Atv#fC7=^m^l08$INE=-6Q=@A9d)&9Y1RyxURo zt=Z{NL79INDC&0I0@l!F2@6pDjpG-Hta(l}%)JyJ^`*KHb${l0=BD*P;r0H_N5TzlRvNp*B zlv~qj-6lCwshLOn8SCfKCya;Z(QU>n^Ju_NfY;~Ic*a}vXem&ZX!}p(DA|RMF~riB z3<=~}0vJsr7^YGVfVTZaHc~~293n5LL(H$C&lxt7yjhM?O6Swvo8?H;w)v9ef)qUg zPaqvBk%Q?9zgfIl4l&g@D1$YnQa_(QWSC2yWq{>0f?*@& z04To{pQtFqC$>S7N7A{UB9fYzy~ykpW`87Da~at97r-V!lE(-(o7rM!H?maAQawv& zSUSs62c)epK!_*@70psIOKB_>K!V@O%HgR@dJCX_x>}OGk- zY%O3clPcs;AANj5+QX@Fw0oBC5zBqA$lv!BG1SY77=vO-zA5L$DUHeW_Fc*VrD6u1 zze|aflSqwJqLkwcDJD{hRGJskWXAS|w3@MFA?*Vqdz^$d*@wPnh@gH^fJ7S0kVFd^ zGU-KzTsp!~K$jQ_$rKIe8y3;I9l@E)wNV zIu*kv89rH8F)d=c5p;`2AJS~+(^1WKzRk9Ll5OXc z`w+Hmr_-5k&ZjJLI6vV=z6gP*k0K{Y|BYM0O!Ry8`PQYd}0Z-~5v z&O@WNLbHr^hp7YQi8KVwCH3PUOVR;R>Me{_?4=&}FZ^})#ajzK<;*P0hp|eTK|gKS zxY!AkEIIcpzfk(xRK2OdLyzN^9q^)%9S$A)0DVNRaL$f65C!DPP{c`ecorbV5d$%E0OW(uqO^D}8J=$`zQhCa` zFFp6N^xR*ew9Br(wEC*zDod8(b_e>S-$o= zZnz%09NA`k-OrAZpt(o&R9QO+Tom0J2U%u#_`NFb1-D#tfr8C1R)m468%NCS91Nq`e zvLwl3oaiX69q$??59RSCbzh2oKRkq*3tLcR4-`s^(f<`*BOPN1O!8G#e9k;2dExo?p2 zHVX3))G>m+F~Kzy{eqp$CfeDxJlL8{SHY^8V6V}I@6l2pPa}T;rVQy=8wmBMHNS9j zcPz90b+HLUW5w`9vgPw%I4$gJoA@@14OdUwWoY0){sI;Wa51o4OY6ueXaxGCQ6)7~zq>EJBF-Kr+2^5-iT`d91 zn&TGWG(0vzq^bnV=O*1Gcm0%!V;83+5xReeE$tyXufBBF+tQin1Nyu_xp)Y`3m9N)nRXIZ}r8A__3Wlk)8=%zBqz~8Qm8O~W7sl%|DQJT( zlCH1U=_qM~F2az2J{qUe=<*A9!l-P6_U>B@bLj%Zaxy#z*hp~zW!o%z{5d!!L_lZ+X&9(IY`CK#j=#a+*FndSz5zVHA^)tHM7*h(oL3b zu@v&WE<~N0%cH_MYxD!v&N-4)OF0+Z2CDlpu2dr0&sEPm<{B{>H7o&z@e6*@mOIbu zKKJTtKKG{P^Mya?R+ufBH+6%<x$AVLReo7PlN^D#o9rIUe5 zN2XR@tN9qI5Df|S7DO>Ws}^Q4J7%$agl+~)$DZ}lBx|?Rm@P>O6h1&1s3zsuI;u)j zj&L%5CN}1X54J!o6=F8BmsPwDu~uW1%3M)xm}d(tw&E=-=FJgqwjr?>P}!`22>D6s zKLBHg8|O+=t8hAZo;8HtR2-<9m5zC|HBgO2i{?n6%7ZnR7&6Edq(&+21vESen1F0jg(XXt&#j%Vl^ z+tQJ5h#EzslTA7r9im218%uK`VMuB-t7213IyDxB3|2Kfrwdgom(%$W6=PW`CKr4p z?w6)erExjM^aB@`s&Q+XYh6yOnada4Y34eX(<$bf1UKdbjQWO9zyA1)`BClFGNuw~ zAye6cy1-N>9bu|oP;noE!We(38nrb|d=iXOxq`An;e49lPBYiIg6f#75?uI4;96Hu zCv(>Yw}iQl6_gqVZgjfIg$l#eFnDZdm>Q-2V3j0oqOw|yaJ;d>-hOlmSMBY`IG#Wc zP=?1*6$Zj&qa`O?J!k4GvwBmRW$p3AsCrtmTt$Aq+Fx&JU9RR1LThpi4}Tq-EJ>p| zb9+5F#y!ZDOdHy6=SrgdnL2-{qwQFD!Iq=5Zuh#|tR;BpPV zoxUF>QQj-ipF!IQ9zDQBBNIs<#QKAn{hJG=2{d<2MX;yj^2%@&v2YQ7GQ2VT=gC7ozYm16CT zP8*n4Dnvh*j(4g7r28J3w~&0lM~*9`kpQ(AeOeca`wm^=k`&tVJ?F9%TK!!hmbInO zd6?Bl(Z_v>#+Y;i)vq44Re~>$)7$I7*cY?(0Z#V~ji;QN!00!2>mPIJs{ngl1!$bN zs9^TeMLBsfXbxL`Fj0RlTn-Y6E~G$jRueJJW2Brw)PYHC9tSfPOK|m=+cg7p5u&yI zo`)Hr8c}`uU~sOaP);__lNp$pSeI$mxFFmb~QcF+? z>qKo;I$6|a$;E{F_qqbMjxr3fhB8Y*=p4fUJf_XXykIZk%?N~EPR(Y zO}t(WwbC|?-dv8?+o89^2 zFil0@Xf&$kL_98{*4{RUuEC<=EL2<%CyKf4D|2YnD$uv=G*8UI)0@2 z^bVtQ%q7^lxR1aMSq<+cuF|7c{m8o?tzu&d8+ot;zx+uiTAAR=Td6_Yu1FtAgIBW^ zu7^)NNsE{%WG3PxFjtT>H?;qf*4u9}<9uR-yd5Ub6lV={yCoGl34}`Fm3v z^Cu?KUzpEF!8wlPh2Ue)fj|5h?U>+-4l!o>8;`C|)mV1Ka8)h~ad@2~#ZJYB_GYBG{`G#!H7^7;-l z^54j@&QVJ7G}<*NI8v#YMq9?>&FX1%jm-_y=scT`Poq(H!+d5M#XRJU&LmgqsI3C% z*ai%aq1s*zTIIg`daJqVdp3M zO8;J1`oCK3Y_Qy}a5n2K#_i5$Ojx6LVIT6;Xmr7xw8pRepr`@f(LntnGMjZ!=N*V* zs0XFEwpiph$ZlFD87NQDR$P6A|NSYm2B~~BEv!KnNuw75N)wvNHAuc_E?)*x)j=#o zG{52;QC@#XM+p!x=`{TnWQ&bxL7QoatJ^?j+hnSH1uq?*Op7{wBIOgbyVX5PIXjt- zvhfPtVB@XHn`Di%L|T>OX;BZgB<1@@K7E<)_y8p9`{S!w)JRCB!h3t|-hVBGqk zz5MwMqBR2M)Z4{xAa0{FomYf>NVu!KW}7Ng>mXtZtQ;=Cj+TM;F&2cUhc?*aNqMb7 zyc_w3U0Y`tmEmu`xY{d9epA@#Z?V0m?&=czAMRoy7K^XGWskR`5UoGTsJHFn(Jpb+ zFS=NW)`*?iXmdg7Y!u&Ldc;n-9~IQPqZ}WH_9L9{u;f`~lX&Z>I<$#N?Kg#F{c$EA zv&Z4(E^*l}?X3P?7H_y9d1#X6ROE4+UU~C4#q2Uf>E5$3>StZzocB3FaB`R57k-@c zD|`4ZLoCLu1w47e{_<^zmEvj;rP&IP6b*z z*CfraGf&#=sn;M{Cv-QQ(xL#X!}vr*qz)t3O?_ zZ@R>lzq7NQUE;bnJFCB7cWfO*>nHTTw~L#)ME5_i2eqFCQn5(Z7x{fHmtWL=aYeZ# ze)(mWY{5~#v5U&G%R>9rWqW>J`bV~?6~LOLC6T39>?9;>3fc6fJwE)tviti5h--vr z{={+3iBkR(o!X8FY_}yOxm|o$xynvxVSr@)joh!t=jVYTHq!tc3N@i zH-f+X4IQn6cmB&3aOJcA5}NV11RfQr4*k}aH|1|dG~BjF!);+z`A*<6D}H6gtPYJ= zKk2ah`i`*qwiRPKg|9mW?f1QSVbk|EZ#n6)R^#JvL4CkU#&4kIBTdp0!~;4z32B?iMk;e!bqmQ_d@j02Qi&ix>)s@uN%zDbr)Lnx*<~SfCU%wY{0_R zBd;5H_0%PRT5OQ52J3st4RF_mrZ>RaR9erFO$Pu<)dc#i!GPTf6R4B1egZ|l z0X#f`QW={j&@#po6KEIXl?n7d5DoULZ@`r_@_iGqhDI`Mq}c$a6pP5-gx#uSdXup} zna(q|B$M6(Y)hsX#_P#683>Q9vfynq?PUm{lMK=HHA4dRI}8{{V;QE>LWa5YBExbz z!myDp0hH1da(@f1R;AEz#`+Y>Vr)vG4U8vJsE)BE1xt5W0*>6 zBYbuum0}v<;@MQ1%y=c0Rx{p8rF}qbNIwZ{2>90wqp9B!?cK2q%V{CQMtTvTY)hk~ zNAN~0U1D}LnT`UoX&6I3O$R93(rLp{xL%)5b&My{=`+T*bn0Zho=%bPz>NS(c?WOB z($fs%XeUE9y~i+@t^$;*iR9OWS868GC`Jt2&0%btNLzsL_!~{Ioj~Up5ZYt>{l_Tg z7+ZRbCIdmQ0*xfHSJP(DDb`-epl=wjXHfrN0&iu|LqPay;V(6}USwE9M;P!61C-K9 zB?k^JPy1*nNorHz|+Sy%R3p; z=skvfx(ZNAr;y)!uzO+(jbdz>LUS0;PN6M~ZByt?AdqX%)j% z+RKnlCjm70BZF~kvmr#;Hl6x69mNkX*xmAQF){puLaO0fKru3?kB-Y zH0&hUFq+OVn$|N+r2`Ce=~IT~bO)epn?aGM*u5E)%6N7LEn~bggLVPo(tD?1JB+R} zB#`gNfN?YuK$WNP!{vXBA1HFOf7l;+SkZ0T?g^*;?fkwXtLw&le^1I5Px_58V+ov6aX)oUG{6d zSTl=uG1kwb_ksB6Rj5s)b5S)|-8n6GUt_NC3^b(yaOf)lbMR;*Gx&OuxNgPd2M#pgnP3(i$=O;1u5 zb9u}e1=sc@)iKw|97Z(wqY~X|g>%MMP-a1eQOY?`nM`>JYBcR+s+K7qL1oibraGAN z6BHT;=RqZ(1BDG@a9*jJOIyz4lah1cg{@12y<}pdti?SYxV?sYpQ~)|hH$3Zv_q*XEJ?1$;834cy&= zYnn${%;hmRSa5CgsE)Zt=3<0%h_wrF&UgV-te_BUzXz4c)KEbo)|jeg3Nun1-H0`& zI+z+RD8$+yKqdbk6eiC!ug#||f50aznY&+bI56fsbM4F}3a)KF#aslJ_y=&KgmZ|s zi*T-lsnLQ$tTENf)B}P-tX%>%_#&tzK_S+dDrD**K_S+dYG!JjMk!Sb$o(=t8FC5S zc)>L-pe*L{m`fI1+XAX%u93M^;T&S^GMqDB29+i##M&Q0WimBUP>40AYMIIq6k?63 z4yGmx3bA$tRPrA|P1Pu+Dv!2Y!6z%3dt7i$d32t+cIGk#*Oo^yUxG`#0uF<{{JS95 zzJzlnOl1oSvBp#@Q!@pHSo;dp;4eYt3JS5tR3TGy1cg{*s+p;|8l_Y%B=quYgld;WQv7)m8fGe;JIHIS;trmMvLHuAM4sGi_VqJ}lSdL9JvSYSD&& zHHk-;c}~!u%oAL(GAo4!U?qogJ(b2YqU+n4=kKSj`#>qXeF9dIxX>|%0Q!<4nmm&M z2{eLX9OVGipfpJeqcOj58p!ouvg;t*rr0=bNs zynXR4%dgX2`_AlI(A(0db^D^_Or>kAL8(rr&e0wN(2f|i&o#iUu zZ=f2C`R3I;Xy;99UUs#Yh4+dz5yOWjXvec!&b{oqU$1{M^}f`hk7#>m>9*O;&60M| z)uXS3?42pl+me0TRp+6cz#&Qow*lyMJa2I0%_WBbR8KxSYBjj=J~i1Dd;tvtP}(*h zoyuK%Uo8bTOs18tZdkW7nfhbV!d6!|?Apk23Q;av7d70}7B!$BIK~Z*_)rQKEYNbc zR_W%3LmgSF+3#$m7B@FDn(!B3O%_RMj6(_KF&BW3=a2gT_Fe#_kSeTlHQCc>~|Zm}UeQ#A1$ z3eOOF`kWh1tDZ@_&Y?JLo=NXBw$G$%KvUu@Nt%na7J`ViBtxwMGsb~`O^1l^HKN0~Oxws|cbG{S7UfIOE7Hds4< zK%PR=nRzgukG9j=9F-T`y4oDts^iuLW1Y?w`>Twjr$Q*%qbQB(f34@x)>GlL8 z#`7Ii&SY|R3s!KN-1uZ;BpS_2l8sSYcPKilOg2XFoKfm3FKlLcLL}5cD&uV{o+(D| zrHx>SrW^oO;T`P&uR!AC-g#6Iv|(zd?Zt3xX{GBs6c=(yHHN9np?F+daIF7iI@V)5 zi;;%&$SCVYN-s?{cBORDx{iyto_G{*xtePHTGi*Kk61i2RZHoX{gaI5zC_+T6S;c&`lpsWe&2#ewebjQx@>Z_WS%q*>`S-3 zGu?Vy)&!Ua$11myscxKU0H!TYk26JKu=`tpQn8E%JYvG0jb${Rv0)i4Wjwx&b^uMy z%S0KD6o(|2J})d-IkSwuVk@o7$ZI_C;xf9Qv3(iMWW2eIHUUi?c$Jelzj_xP*^V=* zjr93=d^?2X38pB+;AgBBXw27MVU!Mz%;RyCO5p@k1ZA^S%~Jh%6FQ(1aHP^%mO3D9 zod6*s8B{b&1=wLoX_~~`a+Z!WSEWhJonVRg9ny78N&y#;3@(>BoaF+Exw$NruvE%Y z151ZlYGny0z2KauR7frJD z-GoEDS8(~mM=Iz)StUv2s@0bAJc^rWvUlT$a&wSIb_D)FPP6QtXqsl!Pa8gE>N7YX z9bI@)*!*gSDZH<+>79j*m!*Bb$?U7##0cm+rU9ml$o$t;Ng9DNU;=sOn1c;x(A28e ziiF*K9Az;rX+l|0ktNE4yR@d8q1tBT&XJ+PW+HCE8IIeHynoDa#%^4~+KYB0ca{t{ z?Z#u!^4f)CD1m(FbA||#e+h`EK@3Th&X7SX7;z>o?LEOn1EM1bXrayjt@5J-)8m`$>? zeE$PdWy(`vbM35l{X+rm1Zyg`v2X?T%9G|0B-m?Dxks9+9W-NU?V14Aj4FWUxP#_l zI=x=gY+=ns2hAfiW|rpKdDiIGTYW0B^Bi*s4S5>hk8t2q=-Ao-)N9NqIq;9-fF{^K z$$YK@pH6FY!S`Fn;c(zl`*1kc)1qY@4hPL75svkAlr_g4G*d)4)|2})91aJ~G!c&V zl*Jm|hOTftL7p6r1J7_c9Qf%X9Cw&ca^Po(aHK5fa5(TeA{;xJFLvN(iEwP7Ys)zt z4w~5_92;oV3J!;Z=1CEb4YY+d7acV7L^w9kdDiHj>k7vL5so1%IUElBLhJ9re3Apd z*!p`gpXrx~O1&&4r`)4W zT1x?QrAkdYeeqlO$nyLSzD&?Pg3Ob=T_~c{Ck!iY(y?ilvY99Vq0~&GPHeKJdS;G; zDR1h)(G2^Y!+13|@2o91-*KVp{my1>3QE0&F8NoY@BDjoqaPOgX$N6M$=YphIp>f( z#XwKOy;vz{(nZTzmYDPI$DQ>lPd&bL=)(@l^B0%}8v5ZMV_1#d(By*perP zZNkTRM9EEbr_d|P(1K(}YyOx3Hr_#zI^2Rv~29pB7x zlL-`YOf)i)v>F7~8!}=19z+Eb`6NH+5v8t~CP}-sv?_;F`hy-_-7M|&OsDwa)^$%U zD=hCn=yBakKlI6*$0jUsNTWqlJo<{zUYka%_jug8i__??6IgD7O=BlKq723bB5|U* z$CFK-A0XWhrV$K@l*5or&of}jDMKE8&QM75haOQ%$pX6jLl0bSW_M*ts3$HfTRDCz!(I1@s}at#kJC8JYo^6vvQ9 z(-;bAEkG&Bqy5e7pFCTr4yEA3d32lEMmsB~YV7!v>>WFsF4!H+cG%h7VCl<~_(%wO zoqf-k(7yCQFC4Xf%41xB{=R8( z%cd-M$ad~ma6E3``3t?WYVfqg-fONO!kxRi(H?#j=IUisT4s?x#~ew?F_>M7&oPG? z>X(QFJBc_0Q6(#iSN#rLY1ba z)X8*p8PF z9(2B+CoYXHAf>-2_6csHyBXUy(L}~8n`kBDtxdECh&1^@e@|YMe1jpH0z(0qL1b7? z^B8dI0KicC6OnA6ArjwW?I1zM!Oke z=>vw*bb}#{0wVy~G=?Fc<}o1V0ZQp+dON~1(p0tC8YB45bj_>sW^%m?nkEO$49$;9 z%Vv6!dF}9?r6CyNI;)(%r1yGYK_!tOn z#HVF9_J@k%&t;HjSMi4tA3t??+)#1xB^q~@*@HYY67(ydUhvF{WQT^+x|wKf_BEV( zX~U`dfM;%I_l8sJk156#%X^GSIc>-~Z)tNpO8ahF4cgQJntR%BX}L&*?m?8XZ(CM1X!yF&-Qs z2hFqMrS_lGYF2ePs8)#po%G-URd)rbNO%svkeLJIpjj(4_=Q-L>7ePS_=Q-L=%6VR8vH`6$#l?^3k`lDZw`=y=0)LwlD)LWn*-#aBB83?OXpeD=%Csz z0<@Q6d^kW3nwP{&?R#l8t2!K1JFUNv4+m&pSAc#dJcnP%mjmRW*)25qg;&#i~XJ)hi-E`>2jJtqz)3#Y^q`sFPJ44ypsz zU&x;W^m12#4hqlV7h+AKgXWOX;1^;|ri12np}{W{zyWg5ydgYL@-l4+@QTz|Lbb}d zJf?Gi97yM2S>5|fKCx7r>Iez+vR8bV2IgZ*M_3mPD($#W$dj>e%p(2RRN?G3kh z%ZeheCZm2*%EHGM59><07G<+nU&F1p_FgR!XT4eiyEWXfx;pSLIA9Xj#{mr6vPIE5 zMBBJvsIeQhH93dvMr}>b3A>Tk_*A4}di zZx^F-R_qq$Bhz+dct;wpWQe5g&6_a|w`?ZT?rFwRdy~9*_R=SN+vgJRwH5I=JzCp(Io0ysWbfBZ z`qY^drcRqGHa7fdws+s9yS+3WdRj8-z1IZr#)i*Mcn?6g^V<_hRCyHs0ib{$0Vvhk zwDbdSEc(u-9gH`#>6bvP=>C#z;hxJ60ZBB1A%k)NhFp}0v63VW)NZ9QR9MT@!fi!47NeZhQp4MA%ub zRH&uJ*M-J4dxsg4>uiu)B3q`DZhE6T8 zuL8|K>1}WR^U>`7PQw!tXmm&5AbF+*jsHf2e&)joPo~clIcwrs@4hWVy)_lYz_V-s8{@`pcNFt~;C2DtM~o1YK~*q`ED-FOCS z$S@xat=rktIZixjwu;#_8(V&(gGbg+GMR5D$6#ma8tOOP2WRyR^D&lJ+zH{c85iMV z0V)K6+`)5Md`_cw*+2(267_S~SQLoVuAO`AO%eC`bW7HOif!@9nM}*N`+R)$>cosG z52n)?v)fx#HOc5|nK8;IsBbK{cdn1}v=lz?(`4dPbVrfT0B*d@B%~^=+S5@9`9v7b zV$EF`Qn#me(uskW;PHU1C*8oZ|MG0C&vV)46J`iNyF~EZzQNTRE;N<-1Ut{^{e?~! zssWAT)IQke!^dyl0I1{8`!#l@SCrmkw)=FoY`FB*;libOx^X-xTApEfbGy%8z5c0* z3m=%X(1N|mC;F0SZ%v+q+kJGNe4fP6J1BX5Xwn^@D4b-XqcwMYBGgu-t^~??#o3#x z$j7YuAR*1AL$5dwq)I-xq}UZFjN(cOJ{_f<2|oV>2bSH?h(W;BTxbrTQfZVjd0(c zed)8erB6?V(q{R((+^}{ljZ9PzVGNPuci6!)5)lJ7x)Jo6qJ$tx1Lr_@{N+mYgd9D z#sB_W`ShMElYEV8d>YD3x^O$tn~alv&1w>kIWg0i?{Q^l21M(l#Xor@RTq2_-??6m6L%V0|wI= zhD4gjkW6I^ne-NbPMq?^K*YzsAy~_4XaN!MF^I$#?0Ox|QZ7q#St?;E?53BFYFm6G zl;b({NsBKojLV_hK+0!L#A#?Q=Fs@lzBtSTeLg-~B1Y^8v~>Yvh?i{rw_I`l*;^8uzI~ZWS$^`1^*^n2x|`ImfaO zTIaqAq+T|GBq|SY`sr_dJ)AJeZ27Od`~tmk2&U%<91EyJwQ!hjgyLAhJRe*`FP#%Z8=#9sT4%J|7WHOEXAuJTqYyjma8+GXW;zW#rh7MRx zV9VnC!}v_9Q=B3VN!Bx3#Bmr(2JTg6I@eBX=V26N@_87MhGIL-_Zlk|nY0VES`GR> zt)->>76<;1^ovw~gmS`q7i;E7zpmO%%P(=mZAX2Trd!?~>36fQM(b@gnyt0v@gqNP z%b%Y2BboBwHt8%If8uvtC*PwT9;^Ogg6)DHbw;u+bEtoUs9l!hO}a8azEIq^3~72J zjRcrVQ$+=2&=S42ie_6XZ7K7MG}J)FJz9fE;)he|JZSX<=vvYIDtJ_q8b$Lf78%o; zK=WSk^U~iNJ3RK@5oE5A19kU~unnhaJ$za3G9(5pAcY0(0u z8|p2H)(h1N(J8hD=@vw5eKXj@-;5>BBR%|i`SWZBGi_!Fpf?ys(>VZ@c=#L1Z1(3{ z>4%v8vG8>kO*Z@E3YuB8nh}?f>|;DUi%u~%&7yA@Pt2nJoT|<#I35p@qi|@=R5}6;23IdJ%q5c-AfJW-l+s+v^74wku9^%QcS`Nj^|y+ZAIldrgh3sDOehy%Am9ELBQp(|I5Gubmlg zl`8eKDaIE}q7N8ulPWEI=j8oY>JZG8`-#TxgHKuSyY->> z{Qd1~Qes8rJt9`@AD5FY;Q{_1^wr(Hs_rhkH!xVSm~;IrWXqn}{{8jJx8v#YNxnhU zy1?H>-HR$))~++uX_dEj$0RE3V!_#~Zu^)Cj(S<2hYWi>mFn{RvAPfiX#g^t8y-dE z!<*V^@R3SKDt(31;i;s|&jm+BxrU*k%g4W~gHg;{2T=GHX&>zfc=bl6yWZ8);ZRY~|5(fKppa8^9{fwN%I24EmI{xparMl?Nzt3AD8b zD3!7C04-x|KR~;Hu=d^(?Za0Y3dwgVpqNH7l+bK|Qc*`+mg1GlI(n0_x{l5>*4B~! zDPTh##V|J3(PYNsb+nqXqmK3gsbndZqnv#TXUrJs>!$*6n+Oxp1t3CbYymzLK?@o3 z=tTfEKLzy(Ru|GGCPE581UwC*goZuMJ~~KQPvZ-f2WbOi^+Bp*tUXAdF*Y2ePR7QA z6uAs|{2-+=HXo#AjAstgF2>e_^gfUp`2)9>1%xQ=2g&alXl@>)Q9$^3_A~HVB5ejx zIo!{{cKvd=+E7oYz?d5G%h%w?=L9g8 zZUmyYoJ;*yXbz2K!0*q1-=6{dY8XoB5m~J4^bWC znM3p$fOCjQ+^4S2RoI_>%)e!l0I?q%)Q(_y2a`APFSp_b! z5S-Y6fkC`gs}SEMOo@#bNFyhiYGrDk@NB=;AO^1jfi(o!%YevS$W$Ry3vJ#z!c;R; zi#1BAZXov}d@y7+xFy104V1-H9#djBg>tch>X>U}PVA$AzwQ*lHDeJdv3~;oN?8Lc zlc^QfNMxdx39(%Q{<_Lk2UDwT{u;R!RPq{7VuyrM{RVAWiw{;Zw^sP;4LZ+MJ5yp) zgmUo>idhFPaV6s{(6(Ln95^H>}^mkzDae=H8Ll5HE?_t!!=_uD6yM?<7+*r zOs2M55z-icU>k-0|W$p6;7F}PjzBl#i(Q*w_sJeW}KaNAMq)z_2Us*h4*(HOPf6W<8Y+A$uDHm0>>+z3(hoaMyw zwckal^=a15zc-z@9Kd&Me0~|#L_EoV48ZB_yk?Yc-0z1y>3@VanbMig&}dISn79-) zwVl)Bgw;O=M5q;-MjTlTjiH*&s1dxiB}i%mjMx`Yk3)i+GsJ*xtKG)#WDLQ!XNUpY z4m-^Qwx~KUU}35u#Jcvwn|Qnyb4GDrvM<3-6lW=Jp|#BX4E=xWU|7?a0rt^aUMGz` z2(h-4w_`2+z6zMv*Wv3`4QFJVk&2~dSYW&&`-|KXkPv9b=)s_bz$mp8-8@W(@f7zN zh<7NwCDfnV!c?Pr8ofQ-l*p^=-%1Fym$f3*B;0E&Y-26HBLdGE`U=}#R@jCsbkENM zRm;GVz)8-QW#xgJ++|e^>>sgDb*Ya$W-CF}4+Y88`u?(5C5Mao~A+%xI``S`aG(VW-qiMO! z?xz*9)Lb2i4%5Cs^gL$JhdVHIdwd3E?F&TbU1NECFw=6r0Gjcu>Db7tJ8u(M{7PDQqz?Wt;2Qq z+UD9C(kz>50{8S4-@UE)4pS^sZU%bFmN{Psexc*Z<=cS+)nb&^vdAy%AzB+WvVDY( z>NgqT}@~oiPcO>OA5t&ha`JFMO(^5CEu$?+W1{yh-yYV>3LBfY=?M6 z%%)97v&hn6ybPF*}Bva&N#2*5LC( z3AtLVmxxBKu}viDCWw_n%tWoRhQj9uMDPV5)^tAAHYw&!`E!HJ%Gt@ZZf;PdvMrPL z1JxERS%{^z)mX`Q1$vzN@-6BcKJH~6d=`tN(!=O9YqRG;i>q-!D>c(;$2?pbnLjT` zN5|&{MJQ*n++lB^-`4p-W>Xu##Pt9kR~mBKH&~T$26`AR*&8?zF6Yb-iZYC|o{BCi z3rukx0;|l;(rOCKyUC~-l#N+hMWJlVqB^cPYO-iPDh}E>KgdWfF9%|k6H8oG&{>wI zg4?7-U1ilw^La!g6kQz5_vY7IzY7TPiYx?x6+Q&ZS<87(+4{rBR z4ky!&sNexewnw6Zv2_x+I3+pzVZd8&R%$1cdvtK5+JK6|OuLh?0U={gUkM&N7F?(yIylU5krha^0op!brF}AW!oHz{-O*?shoLmy;gB{cID*$;j2i14 ziEhQtLBSYDeZ?6|0LEgA0?s|ri0EJ=T^Z{ff(eX~cf&^VAP@-;VXs3;m}*u_(7CZ5 z5pfQkmGG`zHfkqo80)UEn|BA>TUqhs{)6B^r~9y{lpzCS zD4{r2>IG3+v!lLrVP7auOs2dHO`d}W8-H1YOI%n}=%5KCd4DL@S2JJYzz0)0c=-hy zRRgbAI%xW7ZYk9-&=#nuc3-Gb4i#L(3v`~XH#%4kXH^s>yb>CsG`~QTUqSd9%4sza z{@MGA7QT}JQ|nf-Vw-~!O-pLvt$zE#hfr4#aq0{63&Eqpd65B?A44KtVn`y>tAGp| z#*j(V8FFboLmnMqD5Osris=r3^7e-sDYh2At0YRTMTi=~;Lv@1le1aiMA_I?t+`4yr7n>L7}# zgG#qeRKpxevqU7VszWd;YvJiRB6dzP(GFtkLHvaA)bAjIn?z#)RB`}bTh4q2y~unf z9bv%g2Y^zsjoj-I2O$UH+)CUhi8yH3Mp@uY$MNYFe3n05C{z{Osg70E+q-eSwHP^}TFGutWk5Z=1zpjszXH@DL+sHnCc-^W#0_&(a^R}aDG9ZYQyR6LD*4OH?W zP#Xo6L7SPXWNMS33g{eD?M#(ulv1&SVqS;)iLZg%BDjVfw3@jR=1K*3W(S>Ou9dkL z1b1@>^=|+-_;qj<8VA2EY``Z9nc6BSq(`Qjnc60(3^Kg|Dx?9_4nY;rbf)r{Lf@a` zx#A_Ndjsw_GPg@`4KGnAbH+EoRSE9QOO*O1xJ>5u2=3-fw2Qe~<}iA&5*H&~eG|Xy zVDhzSzw$_csiLwgi`9rj@G5DGB{Wja+$l+4Q_cl9@AA=|X57|@z-&X}CFImdG3nTAK$hLdK`X`K0p=A@*f z8|zdbGQA!8Y(J-Qu5;IAKfiJ9T9;VZeTQwxY#)*fz4CVGAS9Dtza4tc!~Dj&dgDWL zA7U574$Yun{UUU8(2y^$k8yq|{7~h9{=0`%v5Ft{p`qhwM`P$X^_2(09to#EHikYQ zW`0Aby{kTwoUhE6?sj>{d?frKuenFAm`D4>njfZ$BcazR?OJ~wE$mcWDC}x~ow@|x zNu)86eh+JA&rvYXSe*Zq=1u%Jn&fvvqdXtzK__Xn;UUlu<5@)W-U+==euQ?v6Y4z( zZ5gdi4v=I#7`T+;Vy8Uv;Mk-YV^hXFXyYHXoO>tq4TVOZGA*SwAL}Q}qiF3q|Hafa zS#R`N2Wt;_uPoNDS2yUMbK0nELAGz3tk0vWV@5Ci>S7QnRCUH9Wb0D5%hYmRS786| z6paqjG2cv0sjdYSyTiYfN*{A-wv75PG|!2ueiih>)(=9LQdo|6v*p^ypz{iMy@#fcw5cVJ9(uE;53uQr&?oQy0Z+|Bw9SI#*+cK8>APaYtB2mZhuNox*|(dy z2y5sy2f1t!e}3I8NRq#%53{LZ?(X4$9_GLv=Aa(tU`I2)FNHV~F!$?W?k_#x^@Bk_ zqKEnZ9_GXz=21P&qaDoredz%Qg3U=iJn)bf0}-s!{vPUK|B)W%2|dgyJN)sGnL?_+&{zq1`4(~gmius{~o~xXDy6F|W{)Zw&igcIN0;hZ@ z{Oj(3lN4;#XQ29Wl60)6oIu4J0VvR3NfR#Ne__TTsP#{nC)$isyynDX|1AtFJnUAm z)Lxdlo0T4BCt(&5h!+)|G|j;QCrOoFcXxD9mC78EFkAneP)v6BpsQ5TP4Cu2?-&;olz!OFf~kiC zCaGUHy?YNmeBVv)(L?VcePy(HpHqPudWY{zidj0*&4OnS2Rx;{-Sl2P^j^}sZhG$? zdT%MSo8Cuyy~rWTCB;XI>t?~XhXcNnv76qnhu%;6gPUUr{d?&BrRHw>0I8_^Zx|q1 zx>*S9;Xt6YwVOVuhdxMprkg&vhdx-!=%x=T>R};7itT2hUk`mh$)lUTe-C|6b7&8J zSPyeicn@Mg5A(nt=7=8VyLy--dzhnon4`O!ic5{i%yNA$2TLi&}p3C7I` z8G4=d1T>dcelGOolFlR{X zx|t_QbGw-*OR3$=Q>6HA=BZLpH#1g8bu&LMUFPl7{Kw^wEIlDL+X&5^DZSRsJYCw> z&738z?q;4L<#sb?OXItlbEMdA=9!Y8)vT3&vNTKT=xUO|L%GuLyP0Q8C%T#ENOk{T zSyuxcRdI#qy=0eUlMTB|vb!W<_k~1=G1h?msR2WbA^aua55^EeA`t=xM2m__O^_T# z4*pP)p)FE9YDEi_S`=)l?XmTU9_x|T(?ivIo<`_*XYSjbeawN(eBZru zXXd^;^XBcoeJ=wq6I(NIkGLlTFBhE|c!g-xSg*g9xJ6WFDD;X*23{$?8Akr1-3`S+ zttSR*#TzX5Dfu*ye46+n%M(go$8z01PQP`cJHtS|$3VT9kYS*~BX1B1mcu?e*yxda z@eE;;KDAFvdX|{!sW4NV6Zn~W(7+bzQ4AZ<{%R=j7#P}rU( zo-|@6Y}bifGvxK+%DxPR1`$FJ-4wQ0iG|n`(uipNh}b^yIF>-dw!(gK8)LczjUb|C zF{XY+u%!z!u2DEw9KlGa{&=^!*{AQkvO+HMs8MDBVLSkA6-%Ix4U*>Qa`5pe^T z+AV_(+?BYq#wqWMT55T*e<}nbK?H)9dQx#9&r-kq4-{CU4m`;lIB%jHAJopF{Dcs6 zWn>Shvm)|QmYQ6N5^Xn8Y^l|Q>eDC^rIwmIgdO0%K-d!1CHSdLV_w%=upEsB#&EaIimV>1QYp|9tbckGl5h1vW9ZlqZkj2umtWD5CQ1* z(DF(Z?*ox2w8U}b)BtP?8}1yW{2zL`AVUtzk%_8q`iq=;N%?BdZ|9sY3z4es7&UpvtbiB~M zsA|(Av@!e~VEa3L%CXPsmERuHE53b}UH?D5pxXapkNj81pnXQW+Wu0gLu&t9KlR%F zN~l9?|3`ngZ-0XipsAhHXupmMU$X)7J5tqKI=2J*nA)Fl$3A5~m-)}}tV&S!)k2VS z?5T_!8DGhG2IJ|Bn;2h(@srnW5OjF#t8l+NGv2{?7vtTG4>CT)_%P#l7$0T) z5#tk#2Nj0@&oD8>3OSg=)FA|@>JS24VayzbD;ZZa?xA|m@rV$V3jd5Tf>Yt=86!v) z-o>~N(W;0Sm_XDj{32sSufjiPypA!3-%AZ6nw5MH<9^0_86&ur{1=SZGTx_gAHKHG z3cq9pM7^r;5@P^`u`f^!;*Y}n8Dlmm{4!(A3WZ-`+{yR=W6TmI$8m!xT;5>1DB@LC zz_d~L*Nj^k|Auip<3o%wos>Sl2~r)zv{Lvr#+Y3SpJeO?H#!y)6XC+qIFLv-j!lSi z7gzAoTxO~Li(SquV3{TR9=0z$aA=ZKV#&`ZJImx&{oc0hhS7|zS9omN-h&^Tk}?71!SbhC4f-S3ypBk{Y7HGcW=;({^u3cuV5 zEZ1#HhU7afPTb0ppSCz-@nukOo-;Q5cbqB6Cw_7Z(r$U=iNaXXOCCBKxKKX5A-Av) znr4MKBsFq=u|1;b4Qw$@Q4>Vtl_=aU5qJ4%Xa za=<4aX>}ACNoj7z=yPB_E>F+MkEX3|l|Q&nTTSckVBJ!W?z3_w_aLpin{^W&-Tm@U z=h;2Py2VO2-Qhp_9ExldDE~hxWcto_$zrribv6oSXDI>$rUKJZ@0#VW*~> z{@N#BJFk@?pX^|-rU#mhI3fr7JOj;_Pu}2lAk9_M4R{7x>X&=D`{^!J_~n=9jlSA1 z6Wp&!sbe^S&0?>u5@JcEsVGo$?qyRg^zgD6e6n9Ond8kA;fDN2ljXrV(8@=xBNl-j4OQJP9N76eMqLeHme*PHq=8Z}Mq zHcVjSnKJPg=$R(=LocCC?DLp--!SooVd6QD3A$wEUi5oR95+l18Yb@Wm>5j;Lhf#J zLcx4oiO{Kw95710)dqK!f~u5d3*v>ef5E@i_p=uoAfY4DD8t9`uJFo*PJVC>b7Y`Q zPG1NE*MY)Yq~LG4W+B?>G*rsv7EqdE!JVt!=BJ@<1RJRfc&jGhvDfl89C{qFN_b|85SwyDW$mAV{jkz$N=e4 zP7PDu=g~W8G)!xkt2Z}85A7c|6!GCqO7Wr$MInwtuM%=Zdw^6*SS4>+oKpa4ALU$>OJGpt0aSLFCt(4b8gAR8c_3?iW*htdaCvt zO~j`yVYP&%>ntIBh$~3jhphjzIpFx#t>YzbYXzKR{b%CZ18`Kz0y=PEk zHFeaWDmC?qL0zb+69!eKsZ$1Zk*3ZVRJEq)n%MR0#hS`7sPAbiWKej1EV(dlP&Jxz z3~HRFDh+D9rfLl8QcX=UC_K%B%-0#zL`^jr)Fe&KGpNa$YBi`S@Jvk&QCB=+P&4GyyM~nnPl1Ya#hLQkSCS>coV(K#V75FBTe)$Uk|&ot$zY`mQE|S~ z2u?AmYc$ma>OD4nt)}9*ex|8HbMQJ%RT|XwY|Ee)uq}hSK~t>;)vBo;gSt^uYYnPR zQyUFxp{BMQRJ*2j8Pp<89W97Xpq6T?$)J{Ls@0(InjH#}9)nu0skH{RLQ@+J>K09HH>h4s?J}s9nmTAu ztK`UA(c)o)x>ZiMvr2N0x|BRNHk=He0CYG+Zj;Ea_`iGN-#t%?&J+IrQT!7k)f5QQe{$&b1BD+w=7kD6`{V6Zf)0n?blXvU zyYN%P&(;e1pW!IBPecyW3qR|z=cpjt4ug;={3l28eDWRk-kXkJBB3`%gSP9>^6uiur&4 z507GxW3|Hn!=v~oUEG`-F8pJT;(t`aKQY~6yC?JP?=1YYkK%v!1#i1v@jv~Edv3rh zAXxAUDCYnDgoES#+{a%nNR$8fBZv32T;U&bd{iKK+m7NMay$AA4;SuuY|RjS{@(F@ zo8W`P_o46~JBokI@b~pkk_6u$Is8Ut3fi$TPw@NE1K)o?Zd7gl{%yj4IP&#^|Icw0 z{~U?@57H?9S)Ss*cmtMa!v)(>+(U$bxaR-*(J)X5;N!a6-#r5JI)wjlv=tu`0^9C< z1P!<>^c;QK_6R@gQT%f!_+Lz~_{W|mq&ZmlCmhB9jEmfUjoc;6issCHbiso8ORJ23 z^L@SEJK*WCIWtmX$4*RmU`X`C^NZ%>%wLfGXkO8rh55^hvh(N7AN!c_`jM@dCFdb= zu|w}0dS4vnf8}M7MhxE~>7v9HuivN%(9^OR-hDmCjZH|OI(h7z`GKT_@hNkb%w05pUJ)gH;P)%qwB6g^Rs9o=9yT~G#@anWmnB+r zx@AeKO8witR9G$ES9Ruv;Mb!stnv`+sPqk;cU8+(v$(3N^J-*O=ruiE&eVm=qf-Q- zgu)K$`pHK$DvqYgS-QxomTT#xuXFOLGG8-`eW-L&V5GQ>Jg@lqSEYVumdul@=6)9; zg-)$n3y7XtwI7f>wd&+|5n^?fcs){Vuj+q2l2&!NJ6B~~4;9Z>J&s^)os*tYpZ3vL zHCzvsoTpWNcs+t@p7wDT{V4lIrx5BwgsR{h;dD_I)1K6aiqonV-H4DgrU}9dIxD&M zlRF*~ga@fRo)!B_xwC2I zvtoo~SwuS-Ll@D9j8Ti|FN_(BC~z$>YY~lM%w0r_fMNkvt`#H274#-UEu95Wb-Cz9 zKF^84Vk5;o2fdx91E_Hw^m6EQg4qGEE$cx}anvhx6>&_$BZA;82*R&$SZLjIVvywg z2u&y#BPbPd#Xy?19!b@gBb8bfg4IY-kI)4~GDX{+-$yY~*LqP;BiD)Hrg%GJsCr(~ zBeZrM&P%m3^;OS{-+=Q@;XEnp5t7#PQ$IojfMN-y;U>f~dYqvGH5Z_oK455|ZiZ$G z*Z^p!1OSy(;4zCf;AR_`)iCQ|*2e4#vy03^E5Up!z>=7aWLCf|hgmh4IFk0R7lWvU z)dQ@aXLYoynm0n#S3->g6XR7ii`8_frrgDXV79&8F^UmC-PTInXc@IKRMXcC4dl5I z&`cv3+9?|#pTNnNx!m-o+Kr-FJW5S0k1ZC2UDQ+=5a6}6Xvwm{OYX&BX3S8#vQ#%> z#0ZLiA*8=`VwD);V|X|_IWZ}f%hJQvdmF^>9cAgA+5?WV^nZ6*>MU71{vzhZNYN8% zbhy-4a?YZ;;Zg*0&$HoDq!gD=`w^7l^XVjGRz6900}JwL01z24?QTgaOc<)Ej-io0 zU}&aph7Jmd0Gyx%hV!(Lp^GX3Qq&T9D+0;IEuk+Mo zWlD3F;(z64wC)-qU2~Mfj&hiK=l5&kcGG3iI(UsV&RYteNRJW9;oPaTjgX7cv>{~Q zM*5oJ1bJ2iuFwboHI8v}rq~SuX1ab*XO=9Pw6+@ML0qOFgdzjpRaJT&WoITG+Yk^z zwGX&Ci+2&eDnq0dnbfBufD=#Kic+{blkz#(Ky@5!&ZHw8Y^QDn^|YSu8^#&fBE^nSI+>cSr?*MVoE%@CjxW#N znM={j6eLkcv!5>wu9KX_dDh5pq*5>OkkZRUhi*t_`BbVPxKZ{D*M8{r@%%1Q%;A0` z@{YLKSg}Ak?D2#xq=>E(k@G<{^61^_!9zmAL79XVAXyr3l$F1MMUV`xyE~)1oytiH%b$@!aXw0g|p!=O_mp?qHI#sUX3<>L ziohDB(^+;#$$_33&iEa(kTuKbEXP?v#@V_^3Z0|VQ|xSAI6hsbLqPMrl%btoVRPmm z4bF68wk{MOBUd391r#HkX}zjqkZH~7G+_?1a;TwEJ z#pIcV+-*cjqxLnc)%~1#OBOF)l8;*7uDYMCbG7J(4vSWEdRDr1UzRS~k<%UR@?P35 zM~xpMQOaDMi}l4lI-O)~*rz*T5I1m6?Cyo%m}i{lw5ueh*_WMQYVMoO7oCmRJw7xQD)V)<+uiP%m>X zbE2kK14EGaMj7>yayeA=V{+BY`AO2J(0ZdjLe89IYtj1BF{9qx)1nqVD0aspXx5pOBp}0kfPIk-?WYl(0e&@n4{wBr4^srA$4Y+zC2ipok;m5`o2=! z4BA+t$1vhtdJBkt<+CMv?n*b70%|FSp@pV1v{NZS3Y|y0OZ5>H`lMb@$4m7Xi=0Q- zpdfnKlln-?`n4Wodr#_vsf^hwW{u41nVn#E6l}{HkjpGZF$?}RSSqtbW-FNGyyJ@@ zRc4!5YiD+VwJv7opcylA)XX16VvBExl$%2X*5Fo<^Vi^(F&qk@)SG_J)UXDg7Y+0Q z>lnlU$n7|J7j=K>)lbfUSP=Hm*%ps}a$tcVlq=u70kI>v?@Rk<*DB`HLKino?FB2d zo_&EQ3pFwDcBJ+7onvsLLait&;o<(qT(!#MkzXE>E| z_#pb3R#D8qqpxgkPcrf@&>A)IG3c1CQ0d3F=v?IAJ&G#2Q>(WeiEb+e{;I+v%JzZy zxdQTJWO20-A-@kAOO-}F8VB2qp45bB@}~>=v6L1=myc|g3Ko&%D|4~d-xsMgP#Qx! zJr0nv9;KZyO1Y2Hha9Pby4hMy0e*l+N&rZ4kI^DOL`r&$HUg2vn~*6hDO6AA{N!+| zm;mPHFNaG>D`<#6q86;689)?ZrT$2$gkE82p-zSqbd})@g<0fCqxo^Q=);5jS|4Hz z)q+j$_=XsxwcuH{#%n0ExJnCl* zEhGj4I;cOx8A@a5qQ?OyVWsUx(MY?8V$#jQ;!653P>wK#+F1rstCuHR0)t?Qx3j{ymlFwZtN zd24J#Z3OCu4j)1tfu8-X9|g;&O^#B1-0j}Onw#)^hbPGYVowmYr(^yyc`=3R;5fGG zV2HEz%rZH%KYv%jiI!5gqh!Ai&ZqHexwnGDMF_{K!yS95X*;q`CJ~MLC$FUy}7k_I_cjm*V|GEr>1NTNQRAgff(fTcuzs zVWu>V8<;6g;|^v@)A$Ori}gq_bQc&mjVX!Q$d{lMFpFISt(sXmYc0&yuy&r=Db~y{ zgB@orj@iIna=!uFZ&Lm#{>+YLN@UKtQ5s>4nqe&>w= z-qyGVxx(>X?)Wb6rQhW!reh`g>q37oD*3?UIJLaxrni<{mP_>F4ic}*{bYSI*5Oe~ zWGcEUTa+mbtCW5)D!+>Iu8X!`MY-99E-zYkU-Uk8(QejE~u=+UM~pg%(aWhwCx# z2R>TdGktN1fphPTC5A}p`ZU^6V2Hq&6WUz^ej%*ounyy=2&TgY1}E`dHOf&$k>aM)=Y@s{IT0;6wFxC9 zPp834aR)6lbt%q13X54uTRsJ9b6`2N6ep+7pks(BXQJ7so-F4mEkNa|Vwd3-PSDt8 zNaP%3TOyZl#n^)wQtnJTvdj=670py0TwVe16Wc|?i;%)a8d`)Du0VECA5r3Fq(9ZL zbp`EZ>l$=G*j~U|)#~#o(iUb>#G|-DH*`w4tIrUq^iL=^SdJ+8V&DEKUTPQp1|T`l zr%O0NN}5l8kKrAhpiz%OPF+9?I9NvO5JcPd4Tg3)4KO;R7a<;PnUU0#;SVpGhiUL~ zLj>imFrcqvI`1nwe5ig&GmkjVn~k0R~GEbL+7 zKziU^beMzJIfxeAU1Bb|KaM1mS3)=!AO}lPxilM!F)mkasEwpfG`6IqT-wKSh9Xzj4!bR^Nmq8rgOT5`fV z;{O<)bIdk%G{SmsBP>L+7PlLwOV&?6H0*W}H!4Gq;#U~-kCYdnp`?DK%3pxCsUO3; z=&nyuNQ9@-xKB}b=%-LV;Pbehd#PC7jel#3AmOS?webkrPSR4Jm5btTGSn>(KG3H#ir_~fG7s^GY#znE=Z zdcxpkaJ14Kt+ZY{9D!C^ZJd)yCkPwq>_UHUYgVLFtv52I_zS0ga=|3dQc81eEBXU8triMjJ)N%D|Jm) z6}0MXZhJ>ZI&ll_^hhTj4wXj%PS7BRGc*+-S*FwKQBLT}M%LuUfCYz4mETK2Qr2`j z1{3Z19{o8MI{cU+gzNj!PLakI#E#*nY}BmyqK$S(#KmgJ!dup{aE|)f~RVP~{a+pHkiZZ=gMOTrEyIv$Su%QSnZ8 zm3vC3yG1u_sLi+NsC8?+(@aO@?x@^*b>;rrI;Q}=_5DhxPfg;}YX5iR3&`F3sr3cq z=Qqf+)+ths(Q0~euj1DmLxq3yixhvOdi0K0iW2_d6F<-j7;%)ckOW!kklX?4U*{BA z6@Nod>2*%wQtUKZS?7d4z@~d!RnaU$5go17%7gUR))6}kOyz?aa9mMB+uuJk@AEcoTZe4;uvMKGWP}UHp=co zw@|ItEwn|Ye}-7cjSj_?VkfB0t77m@&GF#~s7;;lqV_rRKB&#B;r@C~q4hG-Qkas~ z{V!<=di#DGirw8v60AmjF@veJ3ir8B0eSG-+KKya(ZPp$ z-h})ysCuTHf4Jwe@)w{rss~KrCS3n7M|xf}JF!3!y~uMjV5b7|kk+2JEWS_KY?ww( z3}3167>QdDGEf@B78N3>jzb3(kjK5>a|!uVP}|Qp_qW$ZDQqj0wZGTS zx=DqsZ0u03&Od6W_D8=1)OJgQKNf^$^{?+MP+OK;L`~apFBeo;MB?*GNP$I^riK{g zMW1TVd;wHV6}~2QY`peIzCr%^shh(?KI@5$RzpG!lyN7uYko+TtW5hCO*u(tS($N4 zJL@FHY=^Sov=-+Al`6{TJr5^-L7h;<1r)YJxoHLRsgOf|Q9yp|tQPw()XIj($nyoj zH3j6=f6}gald@rupFF3Xf!xH((l51F{S}F|d{QvrGDw>^K0$mpf8%d0Q( z%t@t0>GNkTogJV>)HKE=T;J96`lKygYTobD-IIvC8`M@J_W8@Lvq5b|(-_LG$6Xv$ zVE{F8Xom`3B)){u(<)q3A)nG%{6YbF+TVK8M_FIThH=!*@RkaLDPb2vJ5}(bN)DlO zn&GAjOX)0!zEWWZmA;J7F%`y8Cx;HIFo41u5Za-D?Dc)mrRAqJiXXj@<2**K3>OrT zXNzKwTg6H8dyq#QD;y$!$}opQ01#ee~Nz9XofFX!mBvtl(T5-g2%1F3g0;+z4a<8)jXqU8$IAJ z@;x{&bPvuuPceIN-ep*ABL{jHzE7p=zM5mKpjQwBUFDq&9ds2SnUksSUL$6@CesAQ z&}3T57?n)h7^9QvUBUzzn zC;e;2a4B>m4R{S_$4{imjHwf8C1ch^+6lz1eefF2M{ff|83i-~swsh?ffh0}Qzb(? zy~%Kb&N7@QV-w&C#Q=ERc19Df8~3^q?e!*OuoRj?yP-(YDfBU0POwG4AC~wO>boD7 zq!gL}q^JY1tYS+>3Tj9z#E8NMhOg!w2%SLJ`CsSO@=FU z79csNk;_4x0YCGDO4R8L9aPG2hF$?k&Xeh5#F0WL(>2Dp$<)^hOr1;_t#Em z-%`#qz74=H4WJG-XTFWUtf*=9aMXu=`B+C#LI zG3z1P2E?mYGqjNBVPoW$BS?DWVI(bN(A>j_9hX6C8RIi(Kaf@&!Jo>x!}wE4 z%^>Lr(pf?Mk01fK!7?<{;|wiS$8d%|07$}g`U|2;QPU~#9boEo8pD_|ofZL+MCCh( zT|#d%V8$y0CKR*)u=pB7GfiiJGZ(`NdWE5yI#uziDu%W4yU(Nvtw`LQNlO`{Gie)R zTqeECn2|{rfVi6HyT-_XvP_g2_%ME56od^xJq~9a8>#MHqc`Qei=W{PJ&UN4^DNr` zE~hw)PBJFVBI!L~>MR<-m^+Im1CjFM@8NgKZNsbD^PZ6xkoy1ve$8$Mtb^1B=%NIG zHC~y7HtDk*>4fyC?ZH1S#$vklJoqnlH3Red~q;f88fnJC1Y+j?F8Z#e1K>;shgpT0zTlA=F*rC5GiUd zEdo-;hq#ZL5BP5hb4l2OIVE2Jak}wCoL50H3=K4$0lz&!GGj8yhlqBfKAl8NvK)hSQguF_PXj)Jl*`g7)$4dZtz@a0rO(-E zjn075@sEtb&&8=g&zaUV3y3Rgjo@@24*$PI+(RFyTa@uv(OGOpWlNefpPW6 z9?}bF#_w_6YL-x?vupGM+Rf5=mM*Gyw}7s(6xRvql5%%hpp@Q$)XJExV%Es4p4kaz zN5Qsy404&JC}zQ(V5!U!nXO=!$E=pwCT8tmTx#*nJxnJ%aaqeBAYD^$?qM46F{E6U zuB$iqFs)>%nWdZRs{^IuA0svA<6zgBMKcTk16T&LWM(DIikLMpt6|o`tc}?fW*3=- zegfum94rY8z3f%)*8{15)f`r z7OUy3mN8q!tdUtgvlGmYf^GRD$YqwIm<4|dmdY%V*$QTP%xal!V%82OS=5Vkv3ibG z%L%A~wwqi?1OCXbk+onoW(7E{`6FUBv)V^h&#-!&Rp-yZt}}~f7JdROgIO}O5@tor z8kp5E>tNQ#>f+Z8-&UnWZRZ!T$o5$}ExD3TAoCYME_f)($4c zsTb*D^&G2~(@^iX-6U4VJjJh)wUKJf3UFF;3Nf2m9j&ToSUt|F^XFjKnME@TKMj__ zESXsevm#~<%xai*Fl%FWh1o@Bq5lfz^Ep@&n3SYmrGV8OR;yW^V7tpa+Wk4dO4gFq znC3HxssC5Rj02NWR5gp$bXLoltzy>5te)8kW=FxcoCUeeQWUe`GhnIA5}B=FmdC7? z*(PS~U{Z#9kuFxxv1<7O>I~aWE~Wuz`Bk!(sm81Tr!{90vzgV|s(Oai&(ih*<-(8fG2L+L&Eoc9B`=IWV6;fhB=Sx$0F4Sj}Ozn$<>0FzaB}#_S5Si_Aj52J<-&mINl1saGjrH3zDD zXu++v(^~ar-Rz|2=p!!bzW&~8-BU0 z)u=Hmz-i4lh}q2Q4plwF>Ty<`zXiL_ESg#PMX(HJ$;?Wa6)|gIR>Q1=SsNHyL}xFe zDbhv8Z;g@e!qQtWutB+uWL`=$zBNX;huWF;*zR>H?PgQFooT;F`5VPRLn^d4f@%Fm zv9CeiAPR9q6`%M~ZKBQlBOqqTaBWs9h&C~GIDP)DPk`dAD>+ZG9=T*Z=iohJU2o zj59yB^UYeDid7j&Y{tOp?#Z@+Q(xMZ=wi39gyJa~Gb~nJK*{YPt2EZ-l1`s7X~BFt zV;0|fdEa;!M<#V-(q5WL)nz5(H@QR`C7+3O={}FX_}bpQ9ZNn7lj+EImk6U7S%bS} zOw=?Reog4gbKe0u`j*W8)A5sOHe@*!@;gc%+mfa86sOQWR-c1|#Atm9vB*=;byB_uA-%~w_vuG+XQ@a5m_a^$f)ZsFpX$@{-}CNJ{X zzl+w)ZWq0W6gP46T-Uzhrp-^eM&kc_@&7}cKXJv54rX}!=-EH$9P&yO@|$nf+3!LW zA0kQ>UBjtda>b+qa}d^ld5Ct1t`WvW&0$DnkHhqb=n~60n#>MH7@ZjR~HuUo+SuRDhmtKSe>hudxsORE-2Y{tg5xv z>0C)?SUPM{`uO2W-nIVK$<^IaIXWuGUR^nEoa}nUnKxs|e+on3xiekeOzg3YhN<9% zTw|f^FT8?j`%L7q+BCJQbX68JBexwc@cEnR8Y;D6k@DJklV1~y#7Ab-t@z!bH`Dqc7e%?L0N?#1A+;tjE!e{ zq7&TkL(oN3$yIdx_kPYIe2E|#>&uQs-7Fgep{10x#ARt(mg1ln>E{1j*wUg2kRiDKc^eenEYe?)cMhzLRIH2~WASK@NHHivFk)Q?RlW#yhBDX3Fb-?$xH&1E$CHu!pHlPskm$G{$?M9u z^pKu;KlRpiiEjT_ma`w7vhY522~=eDKt~35Wbj^{!7pxht9F+XC(_gP$l&lZt4FRe zqsg4A?ykZ6?#NjP$8Q#~NS65}H#5A-!d`NVlp3ee=ZW6DL_#44JEkd{Y#@zR4t7mb zH`x##!X_Jjbm&}wrygI&f3<6*8}LmWtb7woeX&Ynr@Mc^kRikV)9g5$ciQojV`E}s zhG9;>XO#8EF1Pms4TX>A48`V`yzeU&pY(9GmcQ%P&ygt|nX>n0N_1|;n@j_vrCfX? zk23Yel4_NsOp&O3-vmhd<@CiUQ-tKRoLoi&!UL{bnnf>Zr3O&FYJb`)$&0!VBimPCtU z790;_DzoFPtzeeNS}n8iAZYE(4zbq7tcW$s7+geIqLSi4sg1>47Vo3ZnXbWbWm}nm zo9XbE;UYT5`aXh z;7MyZ*ujQ2W-TymNrZlpL!pV#eI5Wa2jGNMHjLz80UL6dWwD`_4LJjG*%me&U_&Dt zy4Y}l4d$^h=o9g}0-?u`g{~h2J&W~p=#AGbVxfjHs|A5vxWy!XM&08~{p}Wr|1yAAJWMLbrQ2qfF zRPj>+^~Ofzp}TSDDduS(EG%`vgq4uysQK$|UbIrO%pvzTOcBPY9##1~k>cjiY?hNW zxfEY5QpOzG$8xSFbAJfR#v5-St`InhPdo^!)t+iUnw-7hAnVs5B^yT z+>sa8sJVOv@dn1oi+fpZ&{W>P7V~+ZQ7*PJ9^Zc};C%^$Klg)%mHObVck) zELonSOAouF_|W7umgAnH(YcV5G`WuDjHhTl%ek7&+Zv7=bc#nlDkrZxx)+4w;nWmm)74MqW22G857%JX1tL>Uv z$|~M<9@O)i+Q};3HLK3g^xSw@F5mbwbSaPDwI&xrHpTS>@f;8Ha~P9)6l&%3GM=IJ zi}~g?*>fQ-g15dH7b(-!Y*z8s^Px6qY7?t?>#VkGs<;R$-a4!2H8qV@y!9neoy&S| zz7DEnDWm))?h$enqu%CTpb6g-(m{~j5amm}p-D__DU zbfMx@)g9!zrm{PT=th-TgvJ<*t}r#O;tev8&aygEQx$KJWQxH`GN#NP6={2^`%dOT zx?tA@HVt244=Rhzh}-F|PIvoHEM9kNM9;3W!E>w|JKfuy3`x^h#y;?fU0W;Uq$6XB zj*Qv6Gv={yk3Jqf852ETp0OU-*&u`V@yJjj`iVKuspCcI8R~dZj;8WnuSFS@lJ6A( zS7&i3PTiD2J2+TRX&gL|L6VJ}@T9E)y=9;Nhqp9htCqXTm<4J+9r&nK1Be_$_zQ zsJA^LjU|t$nQtr)*1~;a9gDR+BGqv}LL;4KwMA3AS?!=fhoGL(RNf^6$v(lVkY`Jl zcy|oRoJYqFd0^$p9vRvF9(6Kp9`!j4OT3+BkUFO}kMh})WoNlp`OqlHqa$o7v9n<5 zx~b-1G9B@VG}YSa_ff(W=(C_3TY7XV9e{3^4%*A=8BOhE6-$(}DlG1KfUtYeb7Nji zDerh-2Wm|&WI1{>@4?^xWqk}CZ?MsO`GiW80vf&`gYb2*y$)< z-oTK}x6qBpdvvvUIY*7@%SD>ZbH9280n(b{vmk&Un$IUlyb#r6?$LZ2^bA&t){cAhba&hnsvsNzl^kHMSaHUlj zWqo#rxuCxxKOt?zQu{vach{I5eb|mBUGHwvE&07!RQj-&dU*Dg@*brv9-imQ!Valmr*)2CJ8$axt}> zl=4VlPAQ(AC<)4YWTiX`FQ*+W$7-_D-bpN{ODv~rG8afvPC1SCf?TA@N{O_F)_LKI zn>1A^k?QF*s|PfdOC*$DgS??0*HkW$PSaw;$|LnYHjDKGcKSnVjj@;Y z<97OV>J+hg%?;Ks+vzi@b+LP}xSmq{aAlwMwuivo&LYo+ie(2|V(lz*u&fwrzV&p8 zE$McaY_;ZFPow?$IqWR+)aO{|&(C3}&sU%0H0uZK^oP~w7-Zq+u+tZ+&+!E7m+kaN z)aTeh$1MCDSh7m_yTWrUR-a=7^$FnTu(K>tpJM~%vnAcmQm8)120Fr)B0I}6+wT$R z87XgqKJZp=x!kge7gKCq;@(eA#0s;otJTMjK+oH&k6|&f(b3q!F(k@*HPACX&hXg6 z?DYFm?Ro_K(mfs3hok!F-POl?J3QxS{-AlCx`tA|Lt$A`CkSVdH{VqK8M1cL4#=hg zq+@JJwX-~;Sh8NEJ~#PM>@16w z8z`a0H~CTQ3`-P4EgfbZ*gc7{iliwpI%?|Xif`dg2( zT(N}K(@nNS+gTo0Eb;Z5Q@rpbc833>7_#a&?|`Ae&hP{q#FEY5df_?j^kPNFPa?w5 zXlE$3{Uoe+*y+DkPQXvXhAun9Q_7_=8E>$JYnxxX^&HPAme7}IHCv+XEYB*I_?PGy zTT<;T&ncFym#B}9pTy3xjxG4>TCC$ou`_H?4ERad&}e6sN;v^P2^+fX z44ajU3%h8ao*!k`tw$ln61t0SvL)KivQ@Ff@1hi$AH~k{ykg1PMLXD1U}xFR7S1R# zKZ>2<1;v10#lVkZXQ;FNDy(JE2G}wtB<>gzC^0HzHeVJCX zCECvNieia>nU1j~)z0#&V##`$`Z)8W*je_ng?|-ieiS>yYl;EC3L6^j3{AFQ#mJ9h zr@yY8fM10TU3P{yl#2@uw9n`jVK6sfcBhlFJdn7KZXmK8@E&jK!ZW#Ol#7=()UAB@ zS)}NpTbfP%#W~h(E?(1|b144fblBU=$=c%O)yL5_=I9#h)m>u+v%K0p zq&&4ZU&@$5voV%NHThofQ+~-U7~Um&7kfq0MHcd6J%Zs_a)X7DOT65w)?5#kEVd!F zD0N5;3+5_AYDwyl8vG!YA+=m}NNt5Oq$ZbPP%cf~Tj?_ltKCqC)js86H4A;TDU(-1s|BLR@#Gw4i4UX?Nx99%O24Hj5;JK9YCEvCtcmEP|6XwzmsHWr| z6^}naagC8O=h7vZ7HQ}RWyOY(Gp+l-^6FzS z%%3s;!68G{L9O-QB7(#5*x`8Gn;nni;=G-)RIci!W^$g4$(TApxC>e39;(~!62$B4 zugAJW3R+gwJkk#oVQ(DTCKffv|SM^$9eBJ8Kx~uC>)le z*514lg4K1Zx0fS7I$F}bx+VSU3*My`&X0qez58PJb6T@E?*Q;P!+EL$NS18+u-O|s zCS=oJ7_nVI;G38mT|x_^zy zG*k=mEFxo+X2bTTA;vf@$ZH)Kle8eOuRn5&t2trhsChrNx#x;Ja}lvu#}ze`PviXeOC~}^sx_mD- zGER9Kxonkfst05&-z%2W_NNiKMpM&Xa>LqX9zlBQdfF%4$SrKnzn+Ry?NJ)_j1M-4 zgLuZi8IHLjm~~<`^^@C?U9lM@XUvbDvCo*OQ7yWdVK)Et+$`&WGM|?Wh6fiNluRlOCeg-=IcIMQ*{Qblx$?xkPHMP|QXiSGHckIDM$5x(!}t%;+3>-FLWbE zCH5Ls8uk6;ap}C%gijK!LSb< zInR;vdTGv6*T65Y@r8@}Kumsk+qW-)XS=Sgh-iZ!j98BM$jS z(h3&xAW$u{O>8C$>|`7`mp%ki#yd#l z`e7v3^0qgYs5;^sE+u0h%p-`Cj(sqJ#!P%qVvI`|tT>5L2cNQLtAw4nm|Z-AlS5m; zjhPmn^|9t73z4KSssY$*^RPixb~CdK(Xw|LF@^25wx5- zUpIwQSZZLTe0_?xAN?v+;%lh;7f#`N3`L;_3h|NmT2ll4X=J3IS<>S(JJK&gZbJjR zok}|`-c$~qzq2F#BIP3Vd?isQ%codAMBlP}QIW$whCDFJ&rG#jCA}DjbxixodHA4? zqe3>d%+{Hu`b-`$lMbNMY%IF(+cJ5$OgfIy#botKH(QBVonNgMHl}Bvgs*G zgG416{(4&VgkQK(KS^yb7%3aQXht^#xtGjHB6pv4WMCP8quTE_a1sTsMu9LAQTEt< z8JtJ>kn&}K!l`n#pSG66Fl8+V_?rz^oJV|$tcGI0JlRnXJL=)ySr6xQ%h(L6@uZ8M zLO=2wLU}%ZIdo=;e~C5jm|snl_-pF^y``Vrmcnanb6t#KqJ&wxNI4x@#I`+T2NnJe z^<)m}?@el@d!@?rJJhH6-Y%i;S?=NFc?Fp^m$Dg7sgO!d9BNYmeQs9~LW`Ion$j4s z>^oQrzi)(p5v zX^MjJvJy3;U%7^|<2)I^!)fpoWhkNP3}sZx&`7T^bWtb66}k$LP%-zt?iV4Mb7%r1 zwm4bJ7?nfY7^8FOT}Etqa)B{EhrDk1MNs=qKP0c6yefgPIsl&}R&1 zNW6)n411dBY2Z!2aLIW-O}>d_Ec0n4khe6^Q$1Uv=F^8zOuVrPe;f_N5kTDsv9Mem zkD;?fJo>&l!ygM9fA1HJ{Y$XH@2~a2n;SrCSm^+X#dpl+Dj<(zyVvy?mZoVk3 ze1h3g(LZ>L4ultd#v&D-l0Q}k!6y-y*~6$XNamG6vRQ4>)K*sU?pQsesig^6POyta z9kvw}9=2`Wq|WEYx>#u}zm6&Avw0gQU(53B1%sE|+p|u*-G0B^x2lU)=XImA$@;C% z{{u(c%F(v!rEM#vh__}<^4}pIO!E&mh>vJJt7g%k>M~K9TW+oRVd16erZZfmQh+pa5AB9gO5Q^sGiL6gYaAKPxS5D` zipB$^;JvhTCafd((l#I(Xsv8LPG7UtZ6A4M!Wz7f?q?jhkLEIF?xVFpL~F`aF8mq8 zMJ(?PxJ>;S&=m}z=GhiB3T9b?CAZgT=PXMEInRM|oR#3$=r2&D@Yg7CHYfiYjbV&^ zjTSNHy+#{>)WB!7&9(&N=FiSXqE}e(nFFDmV&>ptn`k=2DJlifiENk;u=yf&vVNJa zGF+#yEIgIIktSpzdACMd%IMQb+kmEEyjpHt@f(hz%JPsPDZG&`aFl_KMEUmRT;CsLbr9 z3KrL}*vz7`qy(K|@i>dl3n3~~x+xlz!gC>JusEMQ`=cqlFcLTQl;^IhQ;G7I_E=F=3i4ZD1|SEn8D&xw)eM~-yfT5*wn$S zjoB4u7ny}F0rSZROJX*XSpl;gX4TBfnYA!G!0bGjsLZVR|C1<041l}_yGX4`km3hHEez&Szaq^8P%K<}lG7Zfew zHj!Oxh-WnEh7GsPqbRU0F0xqlj+T$3<ZW0Lp4*?k)b_MC#xevH{sg}-_RW{{X~zdvo|oTb==~0YhEKyjL=2L4CTIQ_=Rmf zZdvH)w{Y}Z^yYpGLLuNmpMPR;q2GiAcw0XW2^c1c&#FBbp?w3)T#NP%K>kAyMxxyi zP7=a5IP6bde>AvBV<*zS%79>>yoGaZ{Rwu}XA18_hW&`tMFeWCcl8T6ZFE$hj_R|Q zSDzl%*B=d->0~uO5m4qXE>}lW?}f*NT2;z#-*TS#1*)|Mr2>`z1d0vLF}flzL*1js zmA;=!eGbA=;ThCH>cEez!!V33r469i(3MAI?xji|ig{fDc{s*k)KMY%cc2Yw7Co>I zIk$*@vn~MZ^UtA6>jEP1;qJRWfY*r}#ZXW484l1ohC}oQLmQn2$VcH7?M$PprGBV= z2W<$5q`Zm%d?C!y1xxxYTD>74f)25g^P&^>tk0rjthiM|Nq>^Pwz8;CMF70Evef$a zE_I27oGi*`xk!_hnT~7da76$XjMP+Rrei&sDsl4%vglfRAY4jd-Ku+vdZJF4m4UQPR1*PIS;5v>)U2b|E0 zE7dA`)t`{j|4Iowe(<+nX(h)pWxN5kvp1DICF&`6rmGu9?&NdGQqd{2?*ZQkIUY^= zQ0l%a_mi?x=q4noAVu}$E`jM;yUN~(w*Fz&lly(N^=%$gL%+1oc3j8P{STT3h_%+r zF9S9^oF^Swu2*Ndj-i1A(3k0N-f~`_Wz8EFSZfiVr?7lOkP+*ADE}@~%p~@aM4qTo zE9Yt|WyJ?0Y&Oq`YSkUXO>w8h_`Bj&>4PSKW-nwv%V@L&Y-t>2m&!<)=P<6K&SW#( zJJJG`DOC5Tp(=ESCu1CSuM6;|6={KHDSj5Mg)SCQ6Qbb?pE1;uI2q7F{Q;6?Hcg(4 zbEDzm3!cM*%Bj}){8-MD&mCFS&nlCagc5|l8`GPM^Vg%fPR#b z9tf9*DS_C_nHjeNsDW7xYaPtE9Y9x@U4*9XwyL%S@X5ZItNbY2KBsr7Yb9Z~)g#Ubutof>Gj2(U7X>&YzL zXzP`!fg^Q}FAm2SN3Z?jaF(bbRrI(1xi0Wg$vU?_(8VA=t$cBayQp$E@_Hb3!`DDu zUln#OQg&Cm?vxLP^%V0e$^iW&n(->iiA_|BAie`$VW_80fbjr|Ff+;klR7iHjl%Xo zJ+7%dGa6m!g;3?oP!HT{9bnCbR+cy7W5?!I@NmJxC3EIJT2!%03n!^QdZ?mm%DSMc#|9QX;@ z`gj_K#KjK1Zz#2__Or;th77T-C?X!UF5J`SuLBGz3l|kVqHJ$rwFaN)bKT*b=g5e? zG$Y2&5Dk*`P~VUPxsqifEqyMeFFK<)KNrG%)`uCc)0Y6rr;^;uL*PSINy8WuD`_?m zo*_?_BUT&j1xT?Q=~KnJk!~{PZKQ~Gh_#6(t_#7+T^mB&sAL^Hvi8t+2&MxY)hc%n za;rCq6^L^MX46sV{JqS&FLka9VMnl0>v6^@JBz<+Ifu@5ST5RG0#wUobhN{A-OduE zSR{QF4c-s}XR)eV7sB^(1#YbhJ@2pt+gU;=p;ECNW6MB0OPHEmY!$lV@w_9eXdGks zCiKDMxzEvNJQErxhXJN!QfD;qQ$5jnI$NqY%*4*v|S<);n0gOy5F~^ws27h5K`>rqMvk z+Z^I1KA=8Ba5b%G?GS6@Rc&B3eGbhOTYc*eC#j~9)iih$Oo?_T?BaxT2=`eIOy}o3? zSjHB>0UFAHg_{}L=qZMyw3p!`eFBj5Tj}N&T*znZtqZNBvs>6Pax0|}OtCO^*zN(& znQYQ;qa85OscO8S)wbx{=n`uKw?ZpXwZv^Sx*FOl)}B9DT%++w+jh6-m-RPkpu_{Y=)@t6KQ;l+W58 z)+$sj@p(GJ+I7}8s#?zTSTGf62V?Tdqi<&z7~8lmvhOx0~-MX9!}F$|d@;E~LNs9C_>v zIqlEqvEBT}lZ|fUa>pUg_n}QW^xe*ob>p0poX0y)5VM4^gsjr6)+{kQA-goYHCvpk zAK#NO7au+U27TR?;506*sjlx`bpvZTsr!=dn@Brf3`vqx#)OUUOMiYbNVZNVv!Ooq`9&ZXZb;7nExrXHo7(5U9F7q>C^Y$xMx(^ufXwI?-8PffEy`+sp4k z3e|~v&j%2mv!q}dCn(|=OEJ4bB0V_?dwIMf8_|Fhl5spr*}Fo9-;MqgrR)PJ|2P43 zd}tbnC)43wA^t{m<_fW6Cnh{VX)lL-NgaCEGHaJ!EEB2X3%#4qYM94(uUunzN`6}Z zjIK;tkI|dFR6`zOif*){+L=8){lB8ry&*-)|EypKMQZ8v+eEdc=7KFzPDLE0h@$K8 z$EC1%Co#kNX=6y9j#}PwE24r={a`Wci>S+lIBv_#p_KZKlx6L6FywPl9-H^r;xwz+ z9P+B;>&($8?9GkB;*Yrs*8YjY55v-JVcl(E{cT}c_&w5d(bAJ|vm0&;I~6M@=(Q7^ zZj0co*l(44&bQf(w}oA93%lMHc2m;x(ymwRc3T9K62YKFFx_T%SM1oY!S>JnHoJ#n zkLWQA9=F-eirvy9l+rp0vPubpxa(%tf{r%%Mf&cJysNf&{!7CGm zg+H)Mx7j6Oj?KGtI?+VQj2G8V2Oz(8CEAXTmJnYXwM9HvQ)qJ76~b z!oms4@$5PDoMX@R?78%SV;|+%GZc=ZWsV@v5m1;%d5%5bv**)mg~J6-;AgIG1xC}? z9eaUo#~=s`Xon*xv<0vi(hZJ%jAtK13mp4c&pwu_9DCBT^B@e96gYyEC187sep6uA zu*kC)(NV`f&a;oBKXdHkhwXY2gyU(uBPbpgaK2$NUF+B2Ndzz-f&O6?4Z!}JD==>A-d9vGQCG<-Xuqc6r)3r~eV~%~2XP-pRIrdV|UP_M|yUrgOlzDTv>;d-ihrBgbCh*(+#@W3Tk=l@w^Z$sYxXJb{lVd-f?Fp6cN$4^Q)OwZW1i zsPS;EhwD82DG%3sc!q}?G#<*I!kM0+(Zfw1p5@`$9-iajxgNfX@o@eWUhN6yd3e5u z7kGG~hns0owu8K7NzfwCzKA}|m;6}}KyXPMcn_1n#n~P8i|Jp*&QmFX{hxu&xxuG^ z`6aA;DPsF^(VI(Kix;njzL60D^l-S5o^bF@G~nQy=_UuSrzH-)g{mEVD-}3+1HH!| zTgVa6M#{YD5M6Z4!MD*t2XCUs9NbO)4&F@HJNR~LcJLiE#lc%Lc%x%n9&UjidS`h5 z2z)1UHpEX|01Z{WQ-Zwo-+Iw^5dZx6|9Xc7X@zHNkD5 z6WGAHW2Tj!5qq|_FLmvia4Fp>f(k8I<_f}P)a(RU?%9`9f#bizv#+2JhHoiQz*UYN z*MFCwu$}%%9Qc}&zz)%^(Q5jc*tua6c$nhaJLoyF^F=j5Yd!l~+9!4-83;N(K_}e` z3r{QFxD{cCR1KWM`FO$ape?82e1hQTffwSuTJTQbE}Tyh+yeX{p9{_cehTLmy#8HjlrXmcIzd!v;RC?)fy=~yD=;ATiySYY))@2p zQxt|YP6$*KI6=ST6CB(HscE`>q1+z~9Nv|wXjK^J&glOq-Gpr^2D-(!!+m}Ny_4t-m& zsc|knB$z8uggxhSgEQ2qi98xDf>|2p(`i&~xXDJ-UkWyTSU{f>%r!2;9`Q!O-5QUf zX2I1OkELqCeE(a7E#DcGG>ET1Oq`c3QjHcA(J{fM#N+6zf=!0wX@_7_!(v+LU<^&c ze0y3Hme3p6aBzjpn3+h&8FT-e0F&t3A~3j=9&>OR-R0nNx>m4h@(QYQa3v)i9MN~3 zE+l#wcxdrWsWr#&GXH3N^zO{ds3MoN3V&0uKD>>TF&~T*(v)1#DPc;@ERH6Jzspgp zn=31d;*rYY$;jbXx$4**L4|s@ILgjU3G|2#zh!D2e#4{{crh8epDL;YJ;&M3g{`Ow z^mAIq5paHaK=qtX4u~I+=a&VvfYXWq%M8+Kfo@Iw?vuD1*^m1>{J`Xs;S9My^Q%lo z9EfXCF)7e95YYNJKZ0C%1fiU@X0T8E~dD!pexKTjoka9uZ z;?<4=Utr=g(M3)_G>b%BL$>o#_jyVGMAG{tl?_YX!-5}?^ox={DCurVub1>rPS+#w z79sj2<=b8yb$yag5A&tx3j)()d8R|ck4(>pSZ%q%!yM_^LDCH$Vqo$L5(Z{OWWq$CU+RW; z&r&lR{y?;ZQ>?l=0D6>YJEfOX3{8!n7mOjQF)pCJJUl~;RZYAo z0+1U2KrqIx#y=E{F|6?s!5GULquM${jA@O3BzU*r9}C79*Y>~04ATx6?3zG(X$+w8 zPXuG^YkW*F=77e3BN%f*lxV4wQXD1=T+Brl@rw0%c2{yHf$g0+55G< z<=ND*Z8QGeaziv#O)8IOmg^7KW;Ncid0<2L=G(h=^bTz3>DxZg)wgN$vYkg-%A=fI zwP|`u@sS6rqKC4NoSso~ES%IZoCn*sAE~N6mC;$we7d?Y zBdQrHL4tZ3_O5@rR?TaO_NK1LUTtiQDvrF-5FJS1+s~I?D82@7Td5oqtW%Z!l~w9{ zgURCL!sbPbTUwVcTfSmd`|6Iho$CH{*pY>{I;Xm3N7KVIIqJ2q=2r)=s>2MA=ctt> zVRf)c1#_b5!Jn&IB*lxY?H#xCAvE_W{iU*0k!N~Q9d0U27k9}u7>Pbk!lO~O;+J5l zX`bmaUT&S6PQ9INuF|nboeDBRI`uEOkaFk7H2xjPtU`SIb8L1}wf_MBC%)t6L^8V* zD!dE}-*QX!c@B8H!`vvHVuc;2SxugcI3@4n73Aws2dPf3C)=nl!CO7~NL~`J?L0pl zRr|SD(2MZSF;zR@nch=PA52K6ct3CF{eh;7kASo3K?G_vU)3uq4e@4lbkn=0QeB?3 zOr5_9mD=D1UZR?=2EEdw+YDXn(bsBPb$^sh;(Zm`^WTuAU8D}RyD&SQ`l&~+HS}M2 zbf=-$n!@%!Abr11otPJ;=lk?V6lWA96Get#`tWsI)ZzIfxc7^D=_k0~qq^Xp@uS`^ z?vy}B21_J>U>}AE+2t@NxeQ2 zeOzrtj}-YqPG+koc2rKdBKT<)EEqxlX101~U^v%CJvZt5EF+_G4|^sz*pn2m4A@7r0K zENp|U04#Poc)#7_%@KZG2MWsq7R*Ik5tN@!#0Nj#;JjJ=A^y1R{CB%#j@x~G?1wH} zXTE5$7vi85g7BNT^*Wad}LHdwA# zYuciSJDHDH9kf`jX^sOuKXjf~Afuxi6B{ppPE_BS7M2$70T zs6|aT)XNrCW2jRWRcoj-7FB1cvljI!L%n5D^@h4=Q8NtnzC|?{YS5x)8Y=7F;l^n+ zRDne`8EU*m%`#M(Ma?!;l|{`lRJ}#bHPjr7x{9eXJHxAusLc}1GgP}p%{Nr1MJ+JY zdW%|UsBVjDR`)HBO6T@kREss7@NCc-o&(U`FT<`?J-)cGwD5h)b(P6r(4yMaEeCQ- z3$w69@Hpj_Vzv7BXDUnc%5bi)v1(0wR9RRbLnuC@X0%78dCf7UTCanmJ%&)+U=-^? zo#wFW%dDv1HN0@$C^2G6o!2p92&bDRMog)u)rip>Lnv-Bid`|KcC%tn458Ry6#HXJ zz0Qh5F@&PaD2~RIn*7I5oQfe7n~dUYOsTD`xEMnyHXFrYOsNyBD8NH1-GETsVH9OC zrBWSG)W;Bt9;0ZEDb>Y__83BOmr<;bDRr0?y)lI1ZmlTXWl?>G+GA0lHPn8K>NnIO zi`r_aqZYNzP^TgO^r`+&5Ac^hg6~gUw%M-;>Q&_a@elAs zH^KIwx{ChEfbH}83jc|#=;sX7&uhK#FJ49es)wK1ebK-C#Dd=kV}HJ@=;sXV-w3Pd zXSL>Ee*k>{pYY`W{s7^hy#jvWBm8Su(LdqgjZcMue{cofHw*eJ_Wizs`|3Wbo6vd{>4pCXzl+*D&CmM) zj$0Q9KXn!Tl!O1UKJh1?@JAlt)jI!uk4iV+T5)enDlRWkOA9}wSf5EY-0LJb2G z2MwU?Z{;{K{nfxxEQtoyQ;ESkTFl3(@?@ynUpj-E%QtG#1i^?mJTPce~7Gdyl}{$h}rCmHhYn_oZ` z-NkS-|GIl=_MC+zKJ2X*Yi<&|>a>Lqd&la;nxQ^=ZAFZKj81!`$e?%J{6At(owg*! zqm6jO7^l-FJnG#`CuV=`9ZK=}z9DV71f3W?+^4rrOuphBPPQxFL2bFgIp}S6O zSY^;X&{N_oeVs=h@D=+dj2|&FW!9vL<7eGAIeF6Lq4CR-;+4Os-YKoBF;hoElb|T5 z>KC5R(Z-MM!C}hhO&U0$Pht|Br;MC3=GKw3CQZI|Xo54lQd%!L&nKGti&T8GCHkp? z?`-tc%VNT-mEUdg6_-=hm$E-iH;OiKGUXe^IB^>#EH=c6K~$0&87FR5Kn}W75LQ!- zQH+tF!Ox}2Ptk`Oyy0|}3g1!b8P8y{l_RVr)bOlFFkSQ%ZPJBl^n<79kgm-nhe>pZ zCK_+TeTLIL3n2qu}B+6Y&c{m|g%;Nj+ZxQOrap2&w*Fy8i{yLG@r{ejP*T*mHOtSMH_vn2*YX z%WLe_Mxi_4wSbA#9U$UqJ`+cn*uq3Q?PtQ458?t71!Ud{B8!Qnogg;QolI0Ru?B=( zd7mI$rG#`TM%+#f(8-Z&1>t!rNtXhG=g&bIxn$|$yZbD@86##1{avN5lAHAHpU_v$ zO={OW7riKU4KSuJx@Y$6Y&AC-_l9`2GdI!d2mk%K$ztcy04Xm4>FwM|DMo6VPsUM_ z12L}mD2bEb?F=Ebk|BwnV@RcA4C(YOLl#Aj1{BaphBcJWuz@x)?4UyomGl{a@1!HYxWuz7zRaOC7=P-1*J~m1AUnRFe8#h5jm`iK$1}#m zamWL1#}&->pxw+SX>2pIsdR(cOpQ&h2AfOcCxBh1v8Bwep{>kr(b#j$?x0J|?$g+W zLwK~>2WZ$tHcz8Vn7;4;t!Mh0MmK=Q6Mr%hUom7w>sOyZb}xMO9@INsiZec2BnT^g zsLu(hn;1?j)1{v7>QVVIL#RhT8sA{ z?7u%dbE0z8Lv-GicjLOC`)E(oTk@)BvF3blE^H?@O`Px_m*1LT=;0rRGr5#e5oDFQMGe zkPR~DQ4Y$;kh@AP`Sc8U(Ly!#2r7cU1W-Y}WT1csDOMapgBrl6Q8vSLTFa0}RSYZW zG{ZU)Paqlmuvieb8)?|s$Qa5vA@ww=rFvpN>S72Ek>XvcAj0|93F#GUXM^CszCpl^ z=?Nko>FH7HeDo%d8wNT*Ix<%FxI+-OaI@H-j@;~F6U(UKW{)_jE|b2$*~5W29Ubox zC#T#g2@g@lftmt*dOEEM9y#{T zXx34pS^5W3m;n)Ej`QQkJxctewR485|L`7+DDT@ z(Z7bHqbj6OAxr0}IXN_#;*U!r61>D1aVjNmV`d?zl#(01 z0io)gL{2BlpDwY?j0*~t2B;l3Vwv-kZ64cvJ5x&sN-g0u>jjTs=l6g0_|U`o{@*-? zdW*kT(@d1N!6tfA0=g_^GxA|qC+12jVMdID*c)A4KRDvL{vr57Pv{6uI2Gr z7K2Tyn@&qC1_u?-vl*z&Vu(czrUnivDi_2>CYF-jiZ0UCGzdWTPX-y}9!MyDl>Cu* zSLtdNJ!VA!SyqFA_FB=C9e~bB?g#Z#`auz%=wpa8Cu%Hrf}$>!0Tvy$%NcU00wB|D zR8*91P4O0L_A%&cDlof5TnGNe!g!(_V7kVDbO5W^Y~eKRTJf-wg5@4{oPSz;pXNtc2RiGBOI zhC)|3KRafaoIwkTZ%CX4PN||UnE*YpAgmg8JKAk8#L<5=A;UN*j z1%Rb=C&LO16#&-JP6o6Q0aX7!{I;Ycuxg6VkkM#FuSSOKFgK#ZgDV3)=v;wkSMx

Mec06m1VL7USw$ED0prz)^8?li*+ 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 delta 82625 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

1~ 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 ACjbBd delta 15598 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 WSaYA2cm=}KAX32EkP;9yVt|0*c>oph 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 TdE|Mge{G%1cH-68PI3PSSWT>V delta 15712 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

=`wNRpO8u4$O} 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%0Aka`u>yi2dLr2%dp#?PF0k_W776fACwW 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

xxkaG%a^n_-~P&EW9k#EAJ4#+N6bpwVa!a2m0 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 diff --git a/targets/TARGET_WICED/TOOLCHAIN_IAR/TARGET_MTB_USI_WM_BN_BM_22/libwiced_drivers.a b/targets/TARGET_WICED/TOOLCHAIN_IAR/TARGET_MTB_USI_WM_BN_BM_22/libwiced_drivers.a index 261091deae71b3e64f4736d50b9d910a3735d4cf..575ffd6f6285e78c521b43f37babb797b41b22f0 100644 GIT binary patch delta 93273 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 xll(K-JBwI08RH^*nmL1N-E{?e_{C^__^ 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 diff --git a/targets/TARGET_WICED/wiced_interface/WicedInterface.h b/targets/TARGET_WICED/wiced_interface/WicedInterface.h index 80d10b0d387..1cef8522744 100644 --- a/targets/TARGET_WICED/wiced_interface/WicedInterface.h +++ b/targets/TARGET_WICED/wiced_interface/WicedInterface.h @@ -20,6 +20,7 @@ #include "mbed.h" #include "EthernetInterface.h" #include "netsocket/OnboardNetworkStack.h" +#include "wiced_emac.h" /** WicedInterface class @@ -30,7 +31,7 @@ class WicedInterface : public WiFiInterface, public EMACInterface public: WicedInterface( - EMAC &emac = EMAC::get_default_instance(), + EMAC &emac = WICED_EMAC::get_instance(), OnboardNetworkStack &stack = OnboardNetworkStack::get_default_instance()); /** Start the interface From e9fb5e7a5e68f00cb06e1476840da5719cc11d60 Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Fri, 29 Jun 2018 12:27:38 +0300 Subject: [PATCH 048/113] Improve efficiency and formatting of ITM output SerialWireOutput was outputting 1 character per 32-bit write to the ITM stimulus port. This is inefficient, and causes processing problems with some viewers due to them receiving 3 NUL bytes between each desired character. Rework to allow us to be more efficient, and eliminate those NUL bytes: * Retain existing mbed_itm_send() and clarify it's a single 32-bit write. * Add new mbed_itm_send_block() that is appropriate for sending character data, and modify SerialWireOutput to use it. * Move "wait for FIFO ready" check to before the write, rather than after. One minor correction - FIFOREADY is a single bit of the register read. Don't interpret reserved bits. --- drivers/SerialWireOutput.h | 6 +--- hal/itm_api.h | 17 +++++++++- hal/mbed_itm_api.c | 63 +++++++++++++++++++++++++++++++++----- 3 files changed, 72 insertions(+), 14 deletions(-) diff --git a/drivers/SerialWireOutput.h b/drivers/SerialWireOutput.h index 154197cf378..ab3e38f3a19 100644 --- a/drivers/SerialWireOutput.h +++ b/drivers/SerialWireOutput.h @@ -33,12 +33,8 @@ class SerialWireOutput : public FileHandle { virtual ssize_t write(const void *buffer, size_t size) { - const unsigned char *buf = static_cast(buffer); + mbed_itm_send_block(ITM_PORT_SWO, buffer, size); - /* Send buffer one character at a time over the ITM SWO port */ - for (size_t i = 0; i < size; i++) { - mbed_itm_send(ITM_PORT_SWO, buf[i]); - } return size; } diff --git a/hal/itm_api.h b/hal/itm_api.h index cf824bfad45..38607789cee 100644 --- a/hal/itm_api.h +++ b/hal/itm_api.h @@ -22,6 +22,7 @@ #if defined(DEVICE_ITM) #include +#include #ifdef __cplusplus extern "C" { @@ -68,12 +69,26 @@ void mbed_itm_init(void); * @brief Send data over ITM stimulus port. * * @param[in] port The stimulus port to send data over. - * @param[in] data The data to send. + * @param[in] data The 32-bit data to send. + * + * The data is written as a single 32-bit write to the port. * * @return value of data sent. */ uint32_t mbed_itm_send(uint32_t port, uint32_t data); +/** + * @brief Send a block of data over ITM stimulus port. + * + * @param[in] port The stimulus port to send data over. + * @param[in] data The block of data to send. + * @param[in] len The number of bytes of data to send. + * + * The data is written using multiple appropriately-sized port accesses for + * efficient transfer. + */ +void mbed_itm_send_block(uint32_t port, const void *data, size_t len); + /**@}*/ #ifdef __cplusplus diff --git a/hal/mbed_itm_api.c b/hal/mbed_itm_api.c index 64c116a3f6c..17afe5e1562 100644 --- a/hal/mbed_itm_api.c +++ b/hal/mbed_itm_api.c @@ -21,6 +21,10 @@ #include +#ifndef ITM_STIM_FIFOREADY_Msk +#define ITM_STIM_FIFOREADY_Msk 1 +#endif + #define ITM_ENABLE_WRITE 0xC5ACCE55 #define SWO_NRZ 0x02 @@ -66,21 +70,64 @@ void mbed_itm_init(void) } } +static void itm_out8(uint32_t port, uint8_t data) +{ + /* Wait until port is available */ + while ((ITM->PORT[port].u32 & ITM_STIM_FIFOREADY_Msk) == 0) { + __NOP(); + } + + /* write data to port */ + ITM->PORT[port].u8 = data; +} + +static void itm_out32(uint32_t port, uint32_t data) +{ + /* Wait until port is available */ + while ((ITM->PORT[port].u32 & ITM_STIM_FIFOREADY_Msk) == 0) { + __NOP(); + } + + /* write data to port */ + ITM->PORT[port].u32 = data; +} + uint32_t mbed_itm_send(uint32_t port, uint32_t data) { /* Check if ITM and port is enabled */ if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ - ((ITM->TER & (1UL << port)) != 0UL)) { /* ITM Port enabled */ - /* write data to port */ - ITM->PORT[port].u32 = data; - - /* Wait until data has been clocked out */ - while (ITM->PORT[port].u32 == 0UL) { - __NOP(); - } + ((ITM->TER & (1UL << port)) != 0UL)) { /* ITM Port enabled */ + itm_out32(port, data); } return data; } +void mbed_itm_send_block(uint32_t port, const void *data, size_t len) +{ + const char *ptr = data; + + /* Check if ITM and port is enabled */ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & (1UL << port)) != 0UL)) { /* ITM Port enabled */ + /* Output single byte at a time until data is aligned */ + while ((((uintptr_t) ptr) & 3) && len != 0) { + itm_out8(port, *ptr++); + len--; + } + + /* Output bulk of data one word at a time */ + while (len >= 4) { + itm_out32(port, *(const uint32_t *) ptr); + ptr += 4; + len -= 4; + } + + /* Output any trailing bytes */ + while (len != 0) { + itm_out8(port, *ptr++); + len--; + } + } +} #endif // defined(DEVICE_ITM) From 94f52f68972b9b483d357fc65b7db37d1379454c Mon Sep 17 00:00:00 2001 From: Mahesh Mahadevan Date: Wed, 4 Jul 2018 11:53:47 -0500 Subject: [PATCH 049/113] MIMXRT1050_EVK: Fix the GPIO IRQ number assignements Use the GPIO_Combined IRQ array Signed-off-by: Mahesh Mahadevan --- .../TARGET_IMX/gpio_irq_api.c | 14 +++++++++++--- .../TARGET_MIMXRT1050/device/MIMXRT1052.h | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_IMX/gpio_irq_api.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_IMX/gpio_irq_api.c index 2e0ecd06c87..80f445cb9ad 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_IMX/gpio_irq_api.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_IMX/gpio_irq_api.c @@ -38,7 +38,7 @@ static gpio_irq_handler irq_handler; static GPIO_Type * const gpio_addrs[] = GPIO_BASE_PTRS; /* Array of PORT IRQ number. */ -static const IRQn_Type gpio_irqs[] = GPIO_IRQS; +static const IRQn_Type gpio_irqs[] = GPIO_COMBINED_IRQS; static void handle_interrupt_in(PortName port, int ch_base) { @@ -117,6 +117,8 @@ void gpio5_irq(void) int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32_t id) { + uint32_t int_index; + if (pin == NC) { return -1; } @@ -153,8 +155,14 @@ int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32 error("gpio_irq only supported on port A-E."); break; } - NVIC_SetVector(gpio_irqs[obj->port], vector); - NVIC_EnableIRQ(gpio_irqs[obj->port]); + + int_index = 2 * obj->port;; + if (obj->pin > 15) { + int_index -= 1; + } + + NVIC_SetVector(gpio_irqs[int_index], vector); + NVIC_EnableIRQ(gpio_irqs[int_index]); obj->ch = ch_base + obj->pin; channel_ids[obj->ch] = id; diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MIMXRT1050/device/MIMXRT1052.h b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MIMXRT1050/device/MIMXRT1052.h index 09e8044a630..0399bc70709 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MIMXRT1050/device/MIMXRT1052.h +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MIMXRT1050/device/MIMXRT1052.h @@ -12095,7 +12095,7 @@ typedef struct { #define GPIO_BASE_PTRS { (GPIO_Type *)0u, GPIO1, GPIO2, GPIO3, GPIO4, GPIO5 } /** Interrupt vectors for the GPIO peripheral type */ #define GPIO_IRQS { NotAvail_IRQn, GPIO1_INT0_IRQn, GPIO1_INT1_IRQn, GPIO1_INT2_IRQn, GPIO1_INT3_IRQn, GPIO1_INT4_IRQn, GPIO1_INT5_IRQn, GPIO1_INT6_IRQn, GPIO1_INT7_IRQn, NotAvail_IRQn, NotAvail_IRQn, NotAvail_IRQn, NotAvail_IRQn } -#define GPIO_COMBINED_IRQS { NotAvail_IRQn, GPIO1_Combined_16_31_IRQn, GPIO2_Combined_16_31_IRQn, GPIO2_Combined_0_15_IRQn, GPIO3_Combined_16_31_IRQn, GPIO3_Combined_0_15_IRQn, GPIO4_Combined_16_31_IRQn, GPIO4_Combined_0_15_IRQn, GPIO5_Combined_16_31_IRQn, GPIO5_Combined_0_15_IRQn } +#define GPIO_COMBINED_IRQS { NotAvail_IRQn, GPIO1_Combined_16_31_IRQn, GPIO1_Combined_0_15_IRQn, GPIO2_Combined_16_31_IRQn, GPIO2_Combined_0_15_IRQn, GPIO3_Combined_16_31_IRQn, GPIO3_Combined_0_15_IRQn, GPIO4_Combined_16_31_IRQn, GPIO4_Combined_0_15_IRQn, GPIO5_Combined_16_31_IRQn, GPIO5_Combined_0_15_IRQn } /*! * @} From 7940c196f2a48827cf896e9314c09c2462d0935e Mon Sep 17 00:00:00 2001 From: Mahesh Mahadevan Date: Wed, 4 Jul 2018 14:17:22 -0500 Subject: [PATCH 050/113] MIMXRT1050_EVK: Move clock enable after check of pin Enable clock could return an error if pin is NC Signed-off-by: Mahesh Mahadevan --- .../TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_IMX/gpio_api.c | 4 ++-- .../TARGET_MCUXpresso_MCUS/TARGET_IMX/gpio_irq_api.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_IMX/gpio_api.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_IMX/gpio_api.c index 03604ac6bb5..76e9624341f 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_IMX/gpio_api.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_IMX/gpio_api.c @@ -33,12 +33,12 @@ void gpio_init(gpio_t *obj, PinName pin) { clock_ip_name_t gpio_clocks[] = GPIO_CLOCKS; - CLOCK_EnableClock(gpio_clocks[pin >> GPIO_PORT_SHIFT]); - obj->pin = pin; if (pin == (PinName)NC) return; + CLOCK_EnableClock(gpio_clocks[pin >> GPIO_PORT_SHIFT]); + pin_function(pin, GPIO_MUX_PORT); } diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_IMX/gpio_irq_api.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_IMX/gpio_irq_api.c index 80f445cb9ad..0d87dc44f01 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_IMX/gpio_irq_api.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_IMX/gpio_irq_api.c @@ -156,7 +156,7 @@ int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32 break; } - int_index = 2 * obj->port;; + int_index = 2 * obj->port; if (obj->pin > 15) { int_index -= 1; } From 3986810b2d4240fc54dc108be7d469c97f2375c1 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Tue, 26 Jun 2018 15:15:27 +0800 Subject: [PATCH 051/113] Change PLL clock source to HIRC instead of HXT This change is to reduce delay of wake-up from power-down to pass Greentea test. Because HIRC's accuracy is worse than HXT's, we must switch back to HXT for e.g. USBD application. This can be done through setting NU_CLOCK_PLL to NU_HXT_PLL. --- .../mbed_overrides.c | 32 +++++++++++++++++-- targets/targets.json | 5 +++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_NANO100/TARGET_NUMAKER_PFM_NANO130/mbed_overrides.c b/targets/TARGET_NUVOTON/TARGET_NANO100/TARGET_NUMAKER_PFM_NANO130/mbed_overrides.c index f3778c22cde..c17d7022b5c 100644 --- a/targets/TARGET_NUVOTON/TARGET_NANO100/TARGET_NUMAKER_PFM_NANO130/mbed_overrides.c +++ b/targets/TARGET_NUVOTON/TARGET_NANO100/TARGET_NUMAKER_PFM_NANO130/mbed_overrides.c @@ -52,8 +52,36 @@ void mbed_sdk_init(void) /* Set HCLK source form HXT and HCLK source divide 1 */ CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HXT, CLK_HCLK_CLK_DIVIDER(1)); - /* Set HCLK frequency 42MHz */ - CLK_SetCoreClock(42000000); + /* Select HXT/HIRC to clock PLL + * + * Comparison between HXT/HIRC-clocked PLL: + * 1. Spare HXT on board if only HIRC is used. + * 2. HIRC has shorter stable time. + * 3. HXT has better accuracy. USBD requires HXT-clocked PLL. + * 4. HIRC has shorter wake-up time from power-down mode. + * Per test, wake-up time from power-down mode would take: + * T1. 1~13 ms (proportional to deep sleep time) with HXT-clocked PLL as HCLK clock source + * T2. <1 ms with HIRC-clocked PLL as HCLK clock source + * T1 will fail Greentea test which requires max 10 ms wake-up time. + * + * If we just call CLK_SetCoreClock(FREQ_42MHZ) to configure HCLK to 42 MHz, + * it will go T1 with HXT already enabled in front. So we manually configure + * it to choose HXT/HIRC-clocked PLL. + */ +#define NU_HXT_PLL 1 +#define NU_HIRC_PLL 2 + +#ifndef NU_CLOCK_PLL +#define NU_CLOCK_PLL NU_HIRC_PLL +#endif + +#if (NU_CLOCK_PLL == NU_HXT_PLL) + CLK_EnablePLL(CLK_PLLCTL_PLL_SRC_HXT, FREQ_42MHZ*2); + CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_PLL, CLK_HCLK_CLK_DIVIDER(2)); +#elif (NU_CLOCK_PLL == NU_HIRC_PLL) + CLK_EnablePLL(CLK_PLLCTL_PLL_SRC_HIRC, FREQ_42MHZ*2); + CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_PLL, CLK_HCLK_CLK_DIVIDER(2)); +#endif /* Update System Core Clock */ /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */ diff --git a/targets/targets.json b/targets/targets.json index 80868ebfd8a..8b0212c39ac 100755 --- a/targets/targets.json +++ b/targets/targets.json @@ -3959,6 +3959,11 @@ "gpio-irq-debounce-sample-rate": { "help": "Select GPIO IRQ debounce sample rate: GPIO_DBCLKSEL_1, GPIO_DBCLKSEL_2, GPIO_DBCLKSEL_4, ..., or GPIO_DBCLKSEL_32768", "value": "GPIO_DBCLKSEL_16" + }, + "clock-pll": { + "help": "Choose clock source to clock PLL: NU_HXT_PLL or NU_HIRC_PLL", + "macro_name": "NU_CLOCK_PLL", + "value": "NU_HIRC_PLL" } }, "inherits": ["Target"], From bd5489c24281762ba762cbc0c16cc4911c2e8ba5 Mon Sep 17 00:00:00 2001 From: Mahesh Mahadevan Date: Thu, 5 Jul 2018 17:23:07 -0500 Subject: [PATCH 052/113] MXRT1050: Ensure the pins are in input mode for analogin Signed-off-by: Mahesh Mahadevan --- .../TARGET_MCUXpresso_MCUS/TARGET_IMX/analogin_api.c | 6 ++++++ .../TARGET_MIMXRT1050/TARGET_EVK/PeripheralPins.c | 8 ++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_IMX/analogin_api.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_IMX/analogin_api.c index a92d38c6dde..c699b992a70 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_IMX/analogin_api.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_IMX/analogin_api.c @@ -20,6 +20,7 @@ #include "cmsis.h" #include "pinmap.h" +#include "gpio_api.h" #include "PeripheralNames.h" #include "fsl_adc.h" #include "PeripheralPins.h" @@ -34,6 +35,7 @@ void analogin_init(analogin_t *obj, PinName pin) uint32_t instance = obj->adc >> ADC_INSTANCE_SHIFT; adc_config_t adc_config; + gpio_t gpio; ADC_GetDefaultConfig(&adc_config); ADC_Init(adc_addrs[instance], &adc_config); @@ -41,6 +43,10 @@ void analogin_init(analogin_t *obj, PinName pin) ADC_EnableHardwareTrigger(adc_addrs[instance], false); #endif ADC_DoAutoCalibration(adc_addrs[instance]); + + /* Need to ensure the pin is in input mode */ + gpio_init(&gpio, pin); + gpio_dir(&gpio, PIN_INPUT); } uint16_t analogin_read_u16(analogin_t *obj) diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MIMXRT1050/TARGET_EVK/PeripheralPins.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MIMXRT1050/TARGET_EVK/PeripheralPins.c index 648f2b54b29..db5a02e4863 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MIMXRT1050/TARGET_EVK/PeripheralPins.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MIMXRT1050/TARGET_EVK/PeripheralPins.c @@ -23,8 +23,12 @@ const PinMap PinMap_RTC[] = { /************ADC***************/ const PinMap PinMap_ADC[] = { - {GPIO_AD_B1_11, ADC1_0, 0}, - {GPIO_AD_B1_04, ADC1_9, 0}, + {GPIO_AD_B1_10, ADC1_15, 5}, + {GPIO_AD_B1_11, ADC2_0, 5}, + {GPIO_AD_B1_04, ADC1_9, 5}, + {GPIO_AD_B1_05, ADC1_10, 5}, + {GPIO_AD_B1_01, ADC1_6, 5}, + {GPIO_AD_B1_00, ADC1_5, 5}, {NC , NC , 0} }; From a83f9d1eb4e2845273b538130579e00b58576957 Mon Sep 17 00:00:00 2001 From: Brendan McDonnell Date: Tue, 3 Jul 2018 17:03:35 -0400 Subject: [PATCH 053/113] FatFs 0.13b hotfix - fix readdir() never terminates when dir is full. http://elm-chan.org/fsw/ff/patches.html http://elm-chan.org/fsw/ff/ff13b_p1.diff https://github.com/ARMmbed/mbed-os/issues/5780 --- features/filesystem/fat/ChaN/ff.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/features/filesystem/fat/ChaN/ff.cpp b/features/filesystem/fat/ChaN/ff.cpp index cc04154a307..7e4561d8098 100644 --- a/features/filesystem/fat/ChaN/ff.cpp +++ b/features/filesystem/fat/ChaN/ff.cpp @@ -1740,7 +1740,8 @@ FRESULT dir_next ( /* FR_OK(0):succeeded, FR_NO_FILE:End of table, FR_DENIED:Cou ofs = dp->dptr + SZDIRE; /* Next entry */ - if (dp->sect == 0 || ofs >= (DWORD)((FF_FS_EXFAT && fs->fs_type == FS_EXFAT) ? MAX_DIR_EX : MAX_DIR)) return FR_NO_FILE; /* Report EOT when offset has reached max value */ + if (ofs >= (DWORD)((FF_FS_EXFAT && fs->fs_type == FS_EXFAT) ? MAX_DIR_EX : MAX_DIR)) dp->sect = 0; /* Disable it if the offset reached the max value */ + if (dp->sect == 0) return FR_NO_FILE; /* Report EOT if it has been disabled */ if (ofs % SS(fs) == 0) { /* Sector changed? */ dp->sect++; /* Next sector */ From e1e1eb220daf828b7af626fea0f369f961378cd8 Mon Sep 17 00:00:00 2001 From: bcostm Date: Wed, 27 Jun 2018 14:34:51 +0200 Subject: [PATCH 054/113] Use us_ticker_read while SDK is not ready --- targets/TARGET_STM/hal_tick_common.c | 12 +++++++++++- targets/TARGET_STM/mbed_overrides.c | 4 ++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/targets/TARGET_STM/hal_tick_common.c b/targets/TARGET_STM/hal_tick_common.c index b5f3aff9b3a..d9421729ba1 100644 --- a/targets/TARGET_STM/hal_tick_common.c +++ b/targets/TARGET_STM/hal_tick_common.c @@ -17,9 +17,19 @@ // Overwrite default HAL functions defined as "weak" +// This variable is set to 1 at the of mbed_sdk_init function. +// The ticker_read_us function must not be called until the mbed_sdk_init is terminated. +extern int mbed_sdk_inited; + uint32_t HAL_GetTick() { - return ticker_read_us(get_us_ticker_data()) / 1000; // 1 ms tick is required for ST HAL + // 1 ms tick is required for ST HAL driver + if (mbed_sdk_inited) { + return (ticker_read_us(get_us_ticker_data()) / 1000); + } + else { + return (us_ticker_read() / 1000); + } } void HAL_SuspendTick(void) diff --git a/targets/TARGET_STM/mbed_overrides.c b/targets/TARGET_STM/mbed_overrides.c index f2c1d711758..9f794ed3395 100644 --- a/targets/TARGET_STM/mbed_overrides.c +++ b/targets/TARGET_STM/mbed_overrides.c @@ -27,6 +27,8 @@ */ #include "cmsis.h" +int mbed_sdk_inited = 0; + // This function is called after RAM initialization and before main. void mbed_sdk_init() { @@ -51,4 +53,6 @@ void mbed_sdk_init() AHB/APBx prescalers and Flash settings */ SetSysClock(); SystemCoreClockUpdate(); + + mbed_sdk_inited = 1; } From 4218315b403f78de39faea10e09966074dec582e Mon Sep 17 00:00:00 2001 From: bcostm Date: Tue, 3 Jul 2018 10:41:54 +0200 Subject: [PATCH 055/113] HAL_GetTick returns elapsed time --- targets/TARGET_STM/hal_tick_16b.c | 6 ++++++ targets/TARGET_STM/hal_tick_common.c | 17 ++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/targets/TARGET_STM/hal_tick_16b.c b/targets/TARGET_STM/hal_tick_16b.c index 32d67c96b80..8b0a5784314 100644 --- a/targets/TARGET_STM/hal_tick_16b.c +++ b/targets/TARGET_STM/hal_tick_16b.c @@ -19,6 +19,8 @@ #if TIM_MST_16BIT extern TIM_HandleTypeDef TimMasterHandle; +extern uint32_t prev_time; +extern uint32_t elapsed_time; volatile uint32_t PreviousVal = 0; @@ -108,6 +110,10 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) TIM_MST_DBGMCU_FREEZE; #endif + // Used by HAL_GetTick() + prev_time = 0; + elapsed_time = 0; + return HAL_OK; } diff --git a/targets/TARGET_STM/hal_tick_common.c b/targets/TARGET_STM/hal_tick_common.c index d9421729ba1..b31ddc051d4 100644 --- a/targets/TARGET_STM/hal_tick_common.c +++ b/targets/TARGET_STM/hal_tick_common.c @@ -21,14 +21,25 @@ // The ticker_read_us function must not be called until the mbed_sdk_init is terminated. extern int mbed_sdk_inited; +// Variables also reset in HAL_InitTick() +uint32_t prev_time = 0; +uint32_t elapsed_time = 0; + +// 1 ms tick is required for ST HAL driver uint32_t HAL_GetTick() { - // 1 ms tick is required for ST HAL driver + uint32_t new_time; if (mbed_sdk_inited) { - return (ticker_read_us(get_us_ticker_data()) / 1000); + // Apply the latest time recorded just before the sdk is inited + new_time = ticker_read_us(get_us_ticker_data()) + prev_time; + prev_time = 0; // Use this time only once + return (new_time / 1000); } else { - return (us_ticker_read() / 1000); + new_time = us_ticker_read(); + elapsed_time += (new_time - prev_time) & 0xFFFF; // Only use the lower 16 bits + prev_time = new_time; + return (elapsed_time / 1000); } } From 37efec5ec5028a865f43c6f71a5d764b03884e2f Mon Sep 17 00:00:00 2001 From: bcostm Date: Wed, 4 Jul 2018 10:11:28 +0200 Subject: [PATCH 056/113] Re-enable IT CC1 after deepsleep --- targets/TARGET_STM/sleep.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/targets/TARGET_STM/sleep.c b/targets/TARGET_STM/sleep.c index 5769f3f13d5..eadd637a727 100644 --- a/targets/TARGET_STM/sleep.c +++ b/targets/TARGET_STM/sleep.c @@ -161,6 +161,7 @@ void hal_deepsleep(void) // Disable IRQs core_util_critical_section_enter(); + // Save the timer counter value in order to reprogram it after deepsleep uint32_t EnterTimeUS = us_ticker_read(); // Request to enter STOP mode with regulator in low power mode @@ -198,9 +199,12 @@ void hal_deepsleep(void) * deep sleep */ wait_loop(500); + // Reprogram the timer counter value saved before the deepsleep TIM_HandleTypeDef TimMasterHandle; TimMasterHandle.Instance = TIM_MST; __HAL_TIM_SET_COUNTER(&TimMasterHandle, EnterTimeUS); + __HAL_TIM_CLEAR_FLAG(&TimMasterHandle, TIM_FLAG_CC1); + __HAL_TIM_ENABLE_IT(&TimMasterHandle, TIM_IT_CC1); #if DEVICE_RTC /* Wait for RTC RSF bit synchro if RTC is configured */ From 5c498a55853d71780e1a4fab9fdf11abc2d97844 Mon Sep 17 00:00:00 2001 From: bcostm Date: Wed, 4 Jul 2018 16:43:21 +0200 Subject: [PATCH 057/113] Use elapsed time only for 16bit timer --- targets/TARGET_STM/hal_tick_common.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/targets/TARGET_STM/hal_tick_common.c b/targets/TARGET_STM/hal_tick_common.c index b31ddc051d4..5c5a85ea940 100644 --- a/targets/TARGET_STM/hal_tick_common.c +++ b/targets/TARGET_STM/hal_tick_common.c @@ -14,6 +14,7 @@ * limitations under the License. */ #include "hal/us_ticker_api.h" +#include "hal_tick.h" // Overwrite default HAL functions defined as "weak" @@ -21,13 +22,16 @@ // The ticker_read_us function must not be called until the mbed_sdk_init is terminated. extern int mbed_sdk_inited; +#if TIM_MST_16BIT // Variables also reset in HAL_InitTick() uint32_t prev_time = 0; uint32_t elapsed_time = 0; +#endif // 1 ms tick is required for ST HAL driver uint32_t HAL_GetTick() { +#if TIM_MST_16BIT uint32_t new_time; if (mbed_sdk_inited) { // Apply the latest time recorded just before the sdk is inited @@ -41,6 +45,14 @@ uint32_t HAL_GetTick() prev_time = new_time; return (elapsed_time / 1000); } +#else // 32-bit timer + if (mbed_sdk_inited) { + return (ticker_read_us(get_us_ticker_data()) / 1000); + } + else { + return (us_ticker_read() / 1000); + } +#endif } void HAL_SuspendTick(void) From 06c7c65457961feacf9c0c926c0cc64783145cdf Mon Sep 17 00:00:00 2001 From: bcostm Date: Wed, 4 Jul 2018 16:44:00 +0200 Subject: [PATCH 058/113] save/restore timer registers before/after deepsleep --- targets/TARGET_STM/sleep.c | 14 ++++++-------- targets/TARGET_STM/us_ticker.c | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/targets/TARGET_STM/sleep.c b/targets/TARGET_STM/sleep.c index eadd637a727..168b9c70bc1 100644 --- a/targets/TARGET_STM/sleep.c +++ b/targets/TARGET_STM/sleep.c @@ -36,6 +36,8 @@ #include "mbed_error.h" extern void rtc_synchronize(void); +extern void save_timer_ctx(void); +extern void restore_timer_ctx(void); /* Wait loop - assuming tick is 1 us */ static void wait_loop(uint32_t timeout) @@ -161,8 +163,7 @@ void hal_deepsleep(void) // Disable IRQs core_util_critical_section_enter(); - // Save the timer counter value in order to reprogram it after deepsleep - uint32_t EnterTimeUS = us_ticker_read(); + save_timer_ctx(); // Request to enter STOP mode with regulator in low power mode #if TARGET_STM32L4 @@ -187,6 +188,7 @@ void hal_deepsleep(void) #else /* TARGET_STM32L4 */ HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); #endif /* TARGET_STM32L4 */ + // Verify Clock Out of Deep Sleep ForceClockOutofDeepSleep(); @@ -199,12 +201,7 @@ void hal_deepsleep(void) * deep sleep */ wait_loop(500); - // Reprogram the timer counter value saved before the deepsleep - TIM_HandleTypeDef TimMasterHandle; - TimMasterHandle.Instance = TIM_MST; - __HAL_TIM_SET_COUNTER(&TimMasterHandle, EnterTimeUS); - __HAL_TIM_CLEAR_FLAG(&TimMasterHandle, TIM_FLAG_CC1); - __HAL_TIM_ENABLE_IT(&TimMasterHandle, TIM_IT_CC1); + restore_timer_ctx(); #if DEVICE_RTC /* Wait for RTC RSF bit synchro if RTC is configured */ @@ -216,6 +213,7 @@ void hal_deepsleep(void) rtc_synchronize(); } #endif + // Enable IRQs core_util_critical_section_exit(); } diff --git a/targets/TARGET_STM/us_ticker.c b/targets/TARGET_STM/us_ticker.c index db4a9e96ab4..ff1e777a8b2 100644 --- a/targets/TARGET_STM/us_ticker.c +++ b/targets/TARGET_STM/us_ticker.c @@ -78,3 +78,20 @@ void us_ticker_clear_interrupt(void) __HAL_TIM_CLEAR_FLAG(&TimMasterHandle, TIM_FLAG_CC1); } +uint32_t timer_cnt_reg; +uint32_t timer_ccr1_reg; +uint32_t timer_dier_reg; + +void save_timer_ctx(void) +{ + timer_cnt_reg = __HAL_TIM_GET_COUNTER(&TimMasterHandle); + timer_ccr1_reg = __HAL_TIM_GET_COMPARE(&TimMasterHandle, TIM_CHANNEL_1); + timer_dier_reg = TIM_MST->DIER; +} + +void restore_timer_ctx(void) +{ + __HAL_TIM_SET_COUNTER(&TimMasterHandle, timer_cnt_reg); + __HAL_TIM_SET_COMPARE(&TimMasterHandle, TIM_CHANNEL_1, timer_ccr1_reg); + TIM_MST->DIER = timer_dier_reg; +} From 221df6fffcc7c4938ca34a072ffafc40ea5f5870 Mon Sep 17 00:00:00 2001 From: Jens Alfke Date: Fri, 6 Jul 2018 10:10:22 -0700 Subject: [PATCH 059/113] Recognize ".cc" and ".hh" source file extensions ".cc" --> C++ source code ".hh" --> header This change allows existing source code with this naming convention (e.g. my company's) to be used in mbed.os projects. --- tools/toolchains/__init__.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tools/toolchains/__init__.py b/tools/toolchains/__init__.py index a6016166b15..e0172ef46a8 100644 --- a/tools/toolchains/__init__.py +++ b/tools/toolchains/__init__.py @@ -722,10 +722,10 @@ def _add_file(self, file_path, resources, base_path, exclude_paths=None): elif ext == '.c': resources.c_sources.append(file_path) - elif ext == '.cpp': + elif ext == '.cpp' or ext == '.cc': resources.cpp_sources.append(file_path) - elif ext == '.h' or ext == '.hpp': + elif ext == '.h' or ext == '.hpp' or ext == '.hh': resources.headers.append(file_path) elif ext == '.o': @@ -992,7 +992,9 @@ def compile_command(self, source, object, includes): _, ext = splitext(source) ext = ext.lower() - if ext == '.c' or ext == '.cpp': + source = abspath(source) if PRINT_COMPILER_OUTPUT_AS_LINK else source + + if ext == '.c' or ext == '.cpp' or ext == '.cc': base, _ = splitext(object) dep_path = base + '.d' try: @@ -1002,12 +1004,12 @@ def compile_command(self, source, object, includes): config_file = ([self.config.app_config_location] if self.config.app_config_location else []) deps.extend(config_file) - if ext == '.cpp' or self.COMPILE_C_AS_CPP: + if ext != '.c' or self.COMPILE_C_AS_CPP: deps.append(join(self.build_dir, self.PROFILE_FILE_NAME + "-cxx")) else: deps.append(join(self.build_dir, self.PROFILE_FILE_NAME + "-c")) if len(deps) == 0 or self.need_update(object, deps): - if ext == '.cpp' or self.COMPILE_C_AS_CPP: + if ext != '.c' or self.COMPILE_C_AS_CPP: return self.compile_cpp(source, object, includes) else: return self.compile_c(source, object, includes) From fb88ce019c85f7fe9dfb337d585b18f330efa247 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Tue, 3 Jul 2018 13:56:23 -0500 Subject: [PATCH 060/113] Move exporter alias handling into CLI --- tools/export/__init__.py | 2 -- tools/project.py | 22 ++++++++++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/tools/export/__init__.py b/tools/export/__init__.py index 88347157d9f..f0b46c45ce2 100644 --- a/tools/export/__init__.py +++ b/tools/export/__init__.py @@ -34,8 +34,6 @@ EXPORTERS = { u'uvision5': uvision.Uvision, - u'uvision': uvision.Uvision, - u'gcc_arm': makefile.GccArm, u'make_gcc_arm': makefile.GccArm, u'make_armc5': makefile.Armc5, u'make_armc6': makefile.Armc6, diff --git a/tools/project.py b/tools/project.py index 959bf1aa4fe..e6a5a4ce816 100644 --- a/tools/project.py +++ b/tools/project.py @@ -28,6 +28,19 @@ from tools.options import extract_profile, list_profiles, extract_mcus from tools.notifier.term import TerminalNotifier +EXPORTER_ALIASES = { + u'gcc_arm': u'make_gcc_arm', + u'uvision': u'uvision5', +} + + +def resolve_exporter_alias(ide): + if ide in EXPORTER_ALIASES: + return EXPORTER_ALIASES[ide] + else: + return ide + + def setup_project(ide, target, program=None, source_dir=None, build=None, export_path=None): """Generate a name, if not provided, and find dependencies @@ -109,7 +122,7 @@ def main(): targetnames = TARGET_NAMES targetnames.sort() - toolchainlist = list(EXPORTERS.keys()) + toolchainlist = list(EXPORTERS.keys() + EXPORTER_ALIASES.keys()) toolchainlist.sort() parser.add_argument("-m", "--mcu", @@ -256,10 +269,11 @@ def main(): if (options.program is None) and (not options.source_dir): args_error(parser, "one of -p, -n, or --source is required") - exporter, toolchain_name = get_exporter_toolchain(options.ide) + ide = resolve_exporter_alias(options.ide) + exporter, toolchain_name = get_exporter_toolchain(ide) mcu = extract_mcus(parser, options)[0] if not exporter.is_target_supported(mcu): - args_error(parser, "%s not supported by %s"%(mcu,options.ide)) + args_error(parser, "%s not supported by %s" % (mcu, ide)) profile = extract_profile(parser, options, toolchain_name, fallback="debug") if options.clean: for cls in EXPORTERS.values(): @@ -273,7 +287,7 @@ def main(): except (IOError, OSError): pass try: - export(mcu, options.ide, build=options.build, + export(mcu, ide, build=options.build, src=options.source_dir, macros=options.macros, project_id=options.program, zip_proj=zip_proj, build_profile=profile, app_config=options.app_config, From 4622694feb3070778232668c0e6420500b7e848a Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Tue, 3 Jul 2018 14:03:28 -0500 Subject: [PATCH 061/113] Reformat part of project.py --- tools/project.py | 305 +++++++++++++++++++++++++++++------------------ 1 file changed, 191 insertions(+), 114 deletions(-) diff --git a/tools/project.py b/tools/project.py index e6a5a4ce816..43c9c383c1b 100644 --- a/tools/project.py +++ b/tools/project.py @@ -16,11 +16,22 @@ from tools.paths import EXPORT_DIR, MBED_HAL, MBED_LIBRARIES, MBED_TARGETS_PATH from tools.settings import BUILD_DIR -from tools.export import EXPORTERS, mcu_ide_matrix, mcu_ide_list, export_project, get_exporter_toolchain +from tools.export import ( + EXPORTERS, + mcu_ide_matrix, + mcu_ide_list, + export_project, + get_exporter_toolchain, +) from tools.tests import TESTS, TEST_MAP from tools.tests import test_known, test_name_known, Test from tools.targets import TARGET_NAMES -from tools.utils import argparse_filestring_type, argparse_profile_filestring_type, argparse_many, args_error +from tools.utils import ( + argparse_filestring_type, + argparse_profile_filestring_type, + argparse_many, + args_error, +) from tools.utils import argparse_force_lowercase_type from tools.utils import argparse_force_uppercase_type from tools.utils import print_large_string @@ -41,7 +52,14 @@ def resolve_exporter_alias(ide): return ide -def setup_project(ide, target, program=None, source_dir=None, build=None, export_path=None): +def setup_project( + ide, + target, + program=None, + source_dir=None, + build=None, + export_path=None +): """Generate a name, if not provided, and find dependencies Positional arguments: @@ -75,7 +93,6 @@ def setup_project(ide, target, program=None, source_dir=None, build=None, export test.dependencies.append(MBED_HAL) test.dependencies.append(MBED_TARGETS_PATH) - src_paths = [test.source_dir] lib_paths = test.dependencies project_name = "_".join([test.id, ide, target]) @@ -104,15 +121,31 @@ def export(target, ide, build=None, src=None, macros=None, project_id=None, Returns an object of type Exporter (tools/exports/exporters.py) """ - project_dir, name, src, lib = setup_project(ide, target, program=project_id, - source_dir=src, build=build, export_path=export_path) + project_dir, name, src, lib = setup_project( + ide, + target, + program=project_id, + source_dir=src, + build=build, + export_path=export_path, + ) zip_name = name+".zip" if zip_proj else None - return export_project(src, project_dir, target, ide, name=name, - macros=macros, libraries_paths=lib, zip_proj=zip_name, - build_profile=build_profile, notify=notify, - app_config=app_config, ignore=ignore) + return export_project( + src, + project_dir, + target, + ide, + name=name, + macros=macros, + libraries_paths=lib, + zip_proj=zip_name, + build_profile=build_profile, + notify=notify, + app_config=app_config, + ignore=ignore + ) def main(): @@ -125,100 +158,139 @@ def main(): toolchainlist = list(EXPORTERS.keys() + EXPORTER_ALIASES.keys()) toolchainlist.sort() - parser.add_argument("-m", "--mcu", - metavar="MCU", - help="generate project for the given MCU ({})".format( - ', '.join(targetnames))) - - parser.add_argument("-i", - dest="ide", - type=argparse_force_lowercase_type( - toolchainlist, "toolchain"), - help="The target IDE: %s"% str(toolchainlist)) - - parser.add_argument("-c", "--clean", - action="store_true", - default=False, - help="clean the export directory") + parser.add_argument( + "-m", "--mcu", + metavar="MCU", + help="generate project for the given MCU ({})".format( + ', '.join(targetnames)) + ) + + parser.add_argument( + "-i", + dest="ide", + type=argparse_force_lowercase_type( + toolchainlist, "toolchain"), + help="The target IDE: %s" % str(toolchainlist) + ) + + parser.add_argument( + "-c", "--clean", + action="store_true", + default=False, + help="clean the export directory" + ) group = parser.add_mutually_exclusive_group(required=False) group.add_argument( "-p", type=test_known, dest="program", - help="The index of the desired test program: [0-%s]"% (len(TESTS)-1)) - - group.add_argument("-n", - type=test_name_known, - dest="program", - help="The name of the desired test program") - - parser.add_argument("-b", - dest="build", - default=False, - action="store_true", - help="use the mbed library build, instead of the sources") - - group.add_argument("-L", "--list-tests", - action="store_true", - dest="list_tests", - default=False, - help="list available programs in order and exit") - - group.add_argument("-S", "--list-matrix", - dest="supported_ides", - default=False, - const="matrix", - choices=["matrix", "ides"], - nargs="?", - help="displays supported matrix of MCUs and IDEs") - - parser.add_argument("-E", - action="store_true", - dest="supported_ides_html", - default=False, - help="writes tools/export/README.md") - - parser.add_argument("--build", - type=argparse_filestring_type, - dest="build_dir", - default=None, - help="Directory for the exported project files") - - parser.add_argument("--source", - action="append", - type=argparse_filestring_type, - dest="source_dir", - default=[], - help="The source (input) directory") - - parser.add_argument("-D", - action="append", - dest="macros", - help="Add a macro definition") - - parser.add_argument("--profile", dest="profile", action="append", - type=argparse_profile_filestring_type, - help="Build profile to use. Can be either path to json" \ - "file or one of the default one ({})".format(", ".join(list_profiles())), - default=[]) - - parser.add_argument("--update-packs", - dest="update_packs", - action="store_true", - default=False) - parser.add_argument("--app-config", - dest="app_config", - default=None) - - parser.add_argument("--ignore", dest="ignore", type=argparse_many(str), - default=None, help="Comma separated list of patterns to add to mbedignore (eg. ./main.cpp)") + help="The index of the desired test program: [0-%s]" % (len(TESTS) - 1) + ) + + group.add_argument( + "-n", + type=test_name_known, + dest="program", + help="The name of the desired test program" + ) + + parser.add_argument( + "-b", + dest="build", + default=False, + action="store_true", + help="use the mbed library build, instead of the sources" + ) + + group.add_argument( + "-L", "--list-tests", + action="store_true", + dest="list_tests", + default=False, + help="list available programs in order and exit" + ) + + group.add_argument( + "-S", "--list-matrix", + dest="supported_ides", + default=False, + const="matrix", + choices=["matrix", "ides"], + nargs="?", + help="displays supported matrix of MCUs and IDEs" + ) + + parser.add_argument( + "-E", + action="store_true", + dest="supported_ides_html", + default=False, + help="writes tools/export/README.md" + ) + + parser.add_argument( + "--build", + type=argparse_filestring_type, + dest="build_dir", + default=None, + help="Directory for the exported project files" + ) + + parser.add_argument( + "--source", + action="append", + type=argparse_filestring_type, + dest="source_dir", + default=[], + help="The source (input) directory" + ) + + parser.add_argument( + "-D", + action="append", + dest="macros", + help="Add a macro definition" + ) + + parser.add_argument( + "--profile", + dest="profile", + action="append", + type=argparse_profile_filestring_type, + help=("Build profile to use. Can be either path to json" + "file or one of the default one ({})".format( + ", ".join(list_profiles()))), + default=[] + ) + + parser.add_argument( + "--update-packs", + dest="update_packs", + action="store_true", + default=False + ) + + parser.add_argument( + "--app-config", + dest="app_config", + default=None + ) + + parser.add_argument( + "--ignore", + dest="ignore", + type=argparse_many(str), + default=None, + help=("Comma separated list of patterns to add to mbedignore " + "(eg. ./main.cpp)") + ) options = parser.parse_args() # Print available tests in order and exit if options.list_tests is True: - print('\n'.join([str(test) for test in sorted(TEST_MAP.values())])) + print('\n'.join(str(test) for test in sorted(TEST_MAP.values()))) sys.exit() # Only prints matrix of supported IDEs @@ -232,17 +304,11 @@ def main(): # Only prints matrix of supported IDEs if options.supported_ides_html: html = mcu_ide_matrix(verbose_html=True) - try: - with open("./export/README.md", "w") as readme: - readme.write("Exporter IDE/Platform Support\n") - readme.write("-----------------------------------\n") - readme.write("\n") - readme.write(html) - except IOError as exc: - print("I/O error({0}): {1}".format(exc.errno, exc.strerror)) - except: - print("Unexpected error:", sys.exc_info()[0]) - raise + with open("./export/README.md", "w") as readme: + readme.write("Exporter IDE/Platform Support\n") + readme.write("-----------------------------------\n") + readme.write("\n") + readme.write(html) exit(0) if options.update_packs: @@ -267,14 +333,17 @@ def main(): notify = TerminalNotifier() - if (options.program is None) and (not options.source_dir): - args_error(parser, "one of -p, -n, or --source is required") ide = resolve_exporter_alias(options.ide) exporter, toolchain_name = get_exporter_toolchain(ide) + profile = extract_profile(parser, options, toolchain_name, fallback="debug") mcu = extract_mcus(parser, options)[0] + if not exporter.is_target_supported(mcu): args_error(parser, "%s not supported by %s" % (mcu, ide)) - profile = extract_profile(parser, options, toolchain_name, fallback="debug") + + if (options.program is None) and (not options.source_dir): + args_error(parser, "one of -p, -n, or --source is required") + if options.clean: for cls in EXPORTERS.values(): try: @@ -287,14 +356,22 @@ def main(): except (IOError, OSError): pass try: - export(mcu, ide, build=options.build, - src=options.source_dir, macros=options.macros, - project_id=options.program, zip_proj=zip_proj, - build_profile=profile, app_config=options.app_config, - export_path=options.build_dir, notify=notify, - ignore=options.ignore) + export( + mcu, + ide, + build=options.build, + src=options.source_dir, + macros=options.macros, + project_id=options.program, + zip_proj=zip_proj, + build_profile=profile, + app_config=options.app_config, + export_path=options.build_dir, + notify=notify, + ignore=options.ignore + ) except NotSupportedException as exc: - print("[ERROR] %s" % str(exc)) + print("[Not Supported] %s" % str(exc)) if __name__ == "__main__": main() From e0d58754198caf84739e78743b01b595abd88192 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Fri, 6 Jul 2018 10:20:37 -0500 Subject: [PATCH 062/113] Simplify main function --- tools/project.py | 154 ++++++++++++++++++++++------------------------- 1 file changed, 72 insertions(+), 82 deletions(-) diff --git a/tools/project.py b/tools/project.py index 43c9c383c1b..9b30a1f819a 100644 --- a/tools/project.py +++ b/tools/project.py @@ -142,15 +142,27 @@ def export(target, ide, build=None, src=None, macros=None, project_id=None, libraries_paths=lib, zip_proj=zip_name, build_profile=build_profile, - notify=notify, + notify=TerminalNotifier(), app_config=app_config, ignore=ignore ) - -def main(): - """Entry point""" - # Parse Options +def clean(source_dir): + if exists(EXPORT_DIR): + rmtree(EXPORT_DIR) + for cls in EXPORTERS.values(): + try: + cls.clean(basename(abspath(source_dir[0]))) + except (NotImplementedError, IOError, OSError): + pass + for f in list(EXPORTERS.values())[0].CLEAN_FILES: + try: + remove(f) + except (IOError, OSError): + pass + + +def get_args(argv): parser = ArgumentParser() targetnames = TARGET_NAMES @@ -221,6 +233,13 @@ def main(): help="displays supported matrix of MCUs and IDEs" ) + group.add_argument( + "--update-packs", + dest="update_packs", + action="store_true", + default=False + ) + parser.add_argument( "-E", action="store_true", @@ -264,13 +283,6 @@ def main(): default=[] ) - parser.add_argument( - "--update-packs", - dest="update_packs", - action="store_true", - default=False - ) - parser.add_argument( "--app-config", dest="app_config", @@ -286,92 +298,70 @@ def main(): "(eg. ./main.cpp)") ) - options = parser.parse_args() + return parser.parse_args(argv), parser + + +def main(): + """Entry point""" + # Parse Options + options, parser = get_args(sys.argv) # Print available tests in order and exit - if options.list_tests is True: + if options.list_tests: print('\n'.join(str(test) for test in sorted(TEST_MAP.values()))) - sys.exit() - - # Only prints matrix of supported IDEs - if options.supported_ides: + elif options.supported_ides: if options.supported_ides == "matrix": print_large_string(mcu_ide_matrix()) elif options.supported_ides == "ides": print(mcu_ide_list()) - exit(0) - - # Only prints matrix of supported IDEs - if options.supported_ides_html: + elif options.supported_ides_html: html = mcu_ide_matrix(verbose_html=True) with open("./export/README.md", "w") as readme: readme.write("Exporter IDE/Platform Support\n") readme.write("-----------------------------------\n") readme.write("\n") readme.write(html) - exit(0) - - if options.update_packs: + elif options.update_packs: from tools.arm_pack_manager import Cache cache = Cache(True, True) cache.cache_everything() - - # Target - if not options.mcu: - args_error(parser, "argument -m/--mcu is required") - - # Toolchain - if not options.ide: - args_error(parser, "argument -i is required") - - # Clean Export Directory - if options.clean: - if exists(EXPORT_DIR): - rmtree(EXPORT_DIR) - - zip_proj = not bool(options.source_dir) - - notify = TerminalNotifier() - - ide = resolve_exporter_alias(options.ide) - exporter, toolchain_name = get_exporter_toolchain(ide) - profile = extract_profile(parser, options, toolchain_name, fallback="debug") - mcu = extract_mcus(parser, options)[0] - - if not exporter.is_target_supported(mcu): - args_error(parser, "%s not supported by %s" % (mcu, ide)) - - if (options.program is None) and (not options.source_dir): - args_error(parser, "one of -p, -n, or --source is required") - - if options.clean: - for cls in EXPORTERS.values(): - try: - cls.clean(basename(abspath(options.source_dir[0]))) - except (NotImplementedError, IOError, OSError): - pass - for f in list(EXPORTERS.values())[0].CLEAN_FILES: - try: - remove(f) - except (IOError, OSError): - pass - try: - export( - mcu, - ide, - build=options.build, - src=options.source_dir, - macros=options.macros, - project_id=options.program, - zip_proj=zip_proj, - build_profile=profile, - app_config=options.app_config, - export_path=options.build_dir, - notify=notify, - ignore=options.ignore - ) - except NotSupportedException as exc: - print("[Not Supported] %s" % str(exc)) + else: + # Check required arguments + if not options.mcu: + args_error(parser, "argument -m/--mcu is required") + if not options.ide: + args_error(parser, "argument -i is required") + if (options.program is None) and (not options.source_dir): + args_error(parser, "one of -p, -n, or --source is required") + + if options.clean: + clean(options.source_dir) + + ide = resolve_exporter_alias(options.ide) + exporter, toolchain_name = get_exporter_toolchain(ide) + profile = extract_profile(parser, options, toolchain_name, fallback="debug") + mcu = extract_mcus(parser, options)[0] + if not exporter.is_target_supported(mcu): + args_error(parser, "%s not supported by %s" % (mcu, ide)) + + try: + export( + mcu, + ide, + build=options.build, + src=options.source_dir, + macros=options.macros, + project_id=options.program, + zip_proj=not bool(options.source_dir), + build_profile=profile, + app_config=options.app_config, + export_path=options.build_dir, + ignore=options.ignore + ) + except NotSupportedException as exc: + args_error(parser, "%s not supported by %s" % (mcu, ide)) + print("[Not Supported] %s" % str(exc)) + exit(0) if __name__ == "__main__": main() From 95b9792bcd8b1676e3f6114b455fb864d7bc84ea Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Fri, 6 Jul 2018 10:22:37 -0500 Subject: [PATCH 063/113] Correct argv usage --- tools/project.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/project.py b/tools/project.py index 9b30a1f819a..e60c55cd04b 100644 --- a/tools/project.py +++ b/tools/project.py @@ -304,7 +304,7 @@ def get_args(argv): def main(): """Entry point""" # Parse Options - options, parser = get_args(sys.argv) + options, parser = get_args(sys.argv[1:]) # Print available tests in order and exit if options.list_tests: From 87450a261b9ef169d53e88e09b91cdf3e1f6b677 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Fri, 6 Jul 2018 10:28:13 -0500 Subject: [PATCH 064/113] Correct -E help --- tools/project.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/project.py b/tools/project.py index e60c55cd04b..87dba9d5b49 100644 --- a/tools/project.py +++ b/tools/project.py @@ -245,7 +245,7 @@ def get_args(argv): action="store_true", dest="supported_ides_html", default=False, - help="writes tools/export/README.md" + help="Generate a markdown version of the results of -S in README.md" ) parser.add_argument( @@ -316,7 +316,7 @@ def main(): print(mcu_ide_list()) elif options.supported_ides_html: html = mcu_ide_matrix(verbose_html=True) - with open("./export/README.md", "w") as readme: + with open("README.md", "w") as readme: readme.write("Exporter IDE/Platform Support\n") readme.write("-----------------------------------\n") readme.write("\n") From 9443ad5ca65a1855d9b7b3598a326fdba91a4a59 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Mon, 9 Jul 2018 09:49:55 -0500 Subject: [PATCH 065/113] Add aliases to example exporter options --- tools/test/examples/examples_lib.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/test/examples/examples_lib.py b/tools/test/examples/examples_lib.py index 9b064cadc74..f215d563801 100644 --- a/tools/test/examples/examples_lib.py +++ b/tools/test/examples/examples_lib.py @@ -17,10 +17,12 @@ from tools.build_api import get_mbed_official_release from tools.targets import TARGET_MAP from tools.export import EXPORTERS +from tools.project import EXPORTER_ALIASES from tools.toolchains import TOOLCHAINS SUPPORTED_TOOLCHAINS = list(TOOLCHAINS - set(u'uARM')) -SUPPORTED_IDES = [exp for exp in EXPORTERS.keys() if exp != "cmsis" and exp != "zip"] +SUPPORTED_IDES = [exp for exp in EXPORTERS.keys() + EXPORTER_ALIASES.keys() + if exp != "cmsis" and exp != "zip"] def print_list(lst): From 6cf3fcb5aeefec7da6c088b73f28dc4e5234347f Mon Sep 17 00:00:00 2001 From: Mirela Chirica Date: Thu, 28 Jun 2018 14:50:37 +0300 Subject: [PATCH 066/113] Cellular: Fix for ATHandler's read string and hexstring NULL termination --- features/cellular/framework/AT/ATHandler.cpp | 86 ++++++++++++++++---- features/cellular/framework/AT/ATHandler.h | 4 +- 2 files changed, 69 insertions(+), 21 deletions(-) diff --git a/features/cellular/framework/AT/ATHandler.cpp b/features/cellular/framework/AT/ATHandler.cpp index 5dbc8346096..eaba46dfdc3 100644 --- a/features/cellular/framework/AT/ATHandler.cpp +++ b/features/cellular/framework/AT/ATHandler.cpp @@ -454,31 +454,88 @@ ssize_t ATHandler::read_bytes(uint8_t *buf, size_t len) return read_len; } -ssize_t ATHandler::read(char *buf, size_t size, bool read_even_stop_tag, bool hex) +ssize_t ATHandler::read_string(char *buf, size_t size, bool read_even_stop_tag) { if (_last_err || !_stop_tag || (_stop_tag->found && read_even_stop_tag == false)) { return -1; } + consume_char('\"'); + + if (_last_err) { + return -1; + } + + size_t len = 0; + size_t match_pos = 0; + + for (; len < (size - 1 + match_pos); len++) { + int c = get_char(); + if (c == -1) { + set_error(NSAPI_ERROR_DEVICE_ERROR); + return -1; + } else if (c == _delimiter) { + buf[len] = '\0'; + break; + } else if (c == '\"') { + match_pos = 0; + len--; + continue; + } else if (_stop_tag->len && c == _stop_tag->tag[match_pos]) { + match_pos++; + if (match_pos == _stop_tag->len) { + _stop_tag->found = true; + // remove tag from string if it was matched + len -= (_stop_tag->len - 1); + buf[len] = '\0'; + break; + } + } else if (match_pos) { + match_pos = 0; + } + + buf[len] = c; + } + + if (len && (len == size - 1 + match_pos)) { + buf[len] = '\0'; + } + + return len; +} + +ssize_t ATHandler::read_hex_string(char *buf, size_t size) +{ + if (_last_err || !_stop_tag || _stop_tag->found) { + return -1; + } + size_t match_pos = 0; - size_t read_size = hex ? size * 2 : size; consume_char('\"'); + if (_last_err) { + return -1; + } + size_t read_idx = 0; size_t buf_idx = 0; char hexbuf[2]; - for (; read_idx < (read_size + match_pos); read_idx++) { + for (; read_idx < size * 2 + match_pos; read_idx++) { int c = get_char(); - buf_idx = hex ? read_idx / 2 : read_idx; + + if (match_pos) { + buf_idx++; + } else { + buf_idx = read_idx / 2; + } + if (c == -1) { - buf[buf_idx] = '\0'; set_error(NSAPI_ERROR_DEVICE_ERROR); return -1; } if (c == _delimiter) { - buf[buf_idx] = '\0'; break; } else if (c == '\"') { match_pos = 0; @@ -490,14 +547,13 @@ ssize_t ATHandler::read(char *buf, size_t size, bool read_even_stop_tag, bool he _stop_tag->found = true; // remove tag from string if it was matched buf_idx -= (_stop_tag->len - 1); - buf[buf_idx] = '\0'; break; } } else if (match_pos) { match_pos = 0; } - if (!hex) { + if (match_pos) { buf[buf_idx] = c; } else { hexbuf[read_idx % 2] = c; @@ -507,17 +563,11 @@ ssize_t ATHandler::read(char *buf, size_t size, bool read_even_stop_tag, bool he } } - return buf_idx; -} - -ssize_t ATHandler::read_string(char *buf, size_t size, bool read_even_stop_tag) -{ - return read(buf, size, read_even_stop_tag, false); -} + if (read_idx && (read_idx == size * 2 + match_pos)) { + buf_idx++; + } -ssize_t ATHandler::read_hex_string(char *buf, size_t size) -{ - return read(buf, size, false, true); + return buf_idx; } int32_t ATHandler::read_int() diff --git a/features/cellular/framework/AT/ATHandler.h b/features/cellular/framework/AT/ATHandler.h index 93e5053598e..6ae417a3d68 100644 --- a/features/cellular/framework/AT/ATHandler.h +++ b/features/cellular/framework/AT/ATHandler.h @@ -302,7 +302,7 @@ class ATHandler { * Stops on delimiter or stop tag. * * @param str output buffer for the read - * @param size maximum number of chars to output + * @param size maximum number of chars to output including NULL * @param read_even_stop_tag if true then try to read even if the stop tag was found previously * @return length of output string or -1 in case of read timeout before delimiter or stop tag is found */ @@ -512,8 +512,6 @@ class ATHandler { // check is urc is already added bool find_urc_handler(const char *prefix, mbed::Callback callback); - ssize_t read(char *buf, size_t size, bool read_even_stop_tag, bool hex); - // print contents of a buffer to trace log void debug_print(char *p, int len); }; From 78d962dc50d19e9c078ac9e9842d3481eb06fc24 Mon Sep 17 00:00:00 2001 From: Mirela Chirica Date: Thu, 28 Jun 2018 14:54:51 +0300 Subject: [PATCH 067/113] Cellular: More unit tests for ATHandler's read routines --- .../cellular/UNITTESTS/at/athandler/Makefile | 5 +- .../UNITTESTS/at/athandler/athandlertest.cpp | 5 + .../UNITTESTS/at/athandler/test_athandler.cpp | 291 +++++++++++++++--- .../UNITTESTS/at/athandler/test_athandler.h | 2 + .../UNITTESTS/stubs/FileHandle_stub.h | 7 +- 5 files changed, 269 insertions(+), 41 deletions(-) diff --git a/features/cellular/UNITTESTS/at/athandler/Makefile b/features/cellular/UNITTESTS/at/athandler/Makefile index 8fd405a01aa..6e2b33c35c2 100644 --- a/features/cellular/UNITTESTS/at/athandler/Makefile +++ b/features/cellular/UNITTESTS/at/athandler/Makefile @@ -4,7 +4,8 @@ COMPONENT_NAME = ATHandler_unit #This must be changed manually SRC_FILES = \ - ../../../framework/AT/ATHandler.cpp + ../../../framework/AT/ATHandler.cpp \ + ../../../framework/common/CellularUtil.cpp TEST_SRC_FILES = \ main.cpp \ @@ -13,7 +14,6 @@ TEST_SRC_FILES = \ ../../stubs/AT_CellularBase_stub.cpp \ ../../stubs/EventQueue_stub.cpp \ ../../stubs/FileHandle_stub.cpp \ - ../../stubs/CellularUtil_stub.cpp \ ../../stubs/us_ticker_stub.cpp \ ../../stubs/mbed_wait_api_stub.cpp \ ../../stubs/mbed_assert_stub.cpp \ @@ -22,6 +22,7 @@ TEST_SRC_FILES = \ ../../stubs/equeue_stub.cpp \ ../../stubs/Kernel.cpp \ ../../stubs/Thread_stub.cpp \ + ../../stubs/randLIB_stub.cpp include ../../MakefileWorker.mk diff --git a/features/cellular/UNITTESTS/at/athandler/athandlertest.cpp b/features/cellular/UNITTESTS/at/athandler/athandlertest.cpp index f1a5b75b276..6ca301477ea 100644 --- a/features/cellular/UNITTESTS/at/athandler/athandlertest.cpp +++ b/features/cellular/UNITTESTS/at/athandler/athandlertest.cpp @@ -177,6 +177,11 @@ TEST(ATHandler, test_ATHandler_read_string) unit->test_ATHandler_read_string(); } +TEST(ATHandler, test_ATHandler_read_hex_string) +{ + unit->test_ATHandler_read_hex_string(); +} + TEST(ATHandler, test_ATHandler_read_int) { unit->test_ATHandler_read_int(); diff --git a/features/cellular/UNITTESTS/at/athandler/test_athandler.cpp b/features/cellular/UNITTESTS/at/athandler/test_athandler.cpp index 6c4751fc0ce..8df92210177 100644 --- a/features/cellular/UNITTESTS/at/athandler/test_athandler.cpp +++ b/features/cellular/UNITTESTS/at/athandler/test_athandler.cpp @@ -469,97 +469,314 @@ void Test_ATHandler::test_ATHandler_read_bytes() { EventQueue que; FileHandle_stub fh1; + filehandle_stub_table = NULL; + filehandle_stub_table_pos = 0; ATHandler at(&fh1, que, 0, ","); uint8_t buf[5]; - CHECK(-1 == at.read_bytes(buf, 25)); - CHECK(-1 == at.read_bytes(buf, 5)); + // TEST EMPTY BUFFER + // Shouldn't read any byte since buffer is empty + CHECK(-1 == at.read_bytes(buf, 1)); + CHECK(NSAPI_ERROR_DEVICE_ERROR == at.get_last_error()); + // Return error due to error set to at handler by the above call on empty buffer + CHECK(-1 == at.read_bytes(buf, 1)); - char table[] = "ssssssssssssssssssssssssssssOK\r\n\0"; - filehandle_stub_table = table; + // TEST DATA IN BUFFER + at.clear_error(); + char table1[] = "1234512345678OK\r\n\0"; + filehandle_stub_table = table1; filehandle_stub_table_pos = 0; mbed_poll_stub::revents_value = POLLIN; - mbed_poll_stub::int_value = strlen(table); - + mbed_poll_stub::int_value = 1;; - at.clear_error(); + // Read 5 bytes CHECK(5 == at.read_bytes(buf, 5)); + CHECK(!memcmp(buf, table1, 5)); + // get_char triggered above should have filled in the whole reading buffer(fill_buffer()) + CHECK(filehandle_stub_table_pos == (strlen(table1) - 1)); + // Read another 8 bytes + CHECK(8 == at.read_bytes(buf, 8) && !memcmp(buf, table1 + 5, 8)); + // Reading more than the 4 bytes left -> ERROR + CHECK(-1 == at.read_bytes(buf, 5)); + CHECK(NSAPI_ERROR_DEVICE_ERROR == at.get_last_error()); } void Test_ATHandler::test_ATHandler_read_string() { EventQueue que; FileHandle_stub fh1; + filehandle_stub_table = NULL; + filehandle_stub_table_pos = 0; ATHandler at(&fh1, que, 0, ","); + // *** EMPTY *** at.clear_error(); - char table[] = "\"s,\"OK\r\n\0"; - filehandle_stub_table = table; + char table1[] = ""; + at.flush(); + filehandle_stub_table = table1; filehandle_stub_table_pos = 0; mbed_poll_stub::revents_value = POLLIN; - mbed_poll_stub::int_value = strlen(table); - - char buf[5]; - uint8_t buf2[5]; + mbed_poll_stub::int_value = 1; + char buf1[1]; + // No _stop_tag set without resp_start + CHECK(-1 == at.read_string(buf1, 1)); + at.clear_error(); + // Set _stop_tag to resp_stop(OKCRLF) at.resp_start(); - at.read_bytes(buf2, 5); - CHECK(-1 == at.read_string(buf, 15)); - at.flush(); + // Device error because buffer is empty + CHECK(NSAPI_ERROR_DEVICE_ERROR == at.get_last_error()); at.clear_error(); + // Device error because empty buffer and attempt to fill_buffer by consume_char('\"') + CHECK(-1 == at.read_string(buf1, 1)); - filehandle_stub_table = table; + // *** 1 BYTE *** + at.clear_error(); + char table2[] = "s\0"; + at.flush(); + filehandle_stub_table = table2; filehandle_stub_table_pos = 0; - + mbed_poll_stub::revents_value = POLLIN; + mbed_poll_stub::int_value = 1; + char buf2[1]; + // Set _stop_tag to resp_stop(OKCRLF) at.resp_start(); - at.read_bytes(buf2, 1); - CHECK(1 == at.read_string(buf, 5, true)); - at.flush(); + // Device error because no CRLF and no more data to read + CHECK(NSAPI_ERROR_DEVICE_ERROR == at.get_last_error()); at.clear_error(); + CHECK(0 == at.read_string(buf2, 1)); - char table2[] = "\"s\"OK\r\n\0"; - filehandle_stub_table = table2; + // *** CRLF *** + at.clear_error(); + char table3[] = "\r\ns\r\n\0"; + at.flush(); + filehandle_stub_table = table3; filehandle_stub_table_pos = 0; mbed_poll_stub::revents_value = POLLIN; - mbed_poll_stub::int_value = strlen(table2); + mbed_poll_stub::int_value = 1; + char buf3[1]; + // Set _stop_tag to resp_stop(OKCRLF) + at.resp_start(); + // OK because after CRLF matched there is more data to read ending in CRLF + CHECK(NSAPI_ERROR_OK == at.get_last_error()); + // To read 0 bytes from: s\r\n + CHECK(0 == at.read_string(buf3, 0 + 1/*for NULL*/)); + // To read 1 byte from: s\r\n -> read s + CHECK(1 == at.read_string(buf3, 1 + 1/*for NULL*/)); + // *** Reading more than available in buffer *** + at.clear_error(); + char table4[] = "\"s,\"OK\r\n\0"; + at.flush(); + filehandle_stub_table = table4; + filehandle_stub_table_pos = 0; + mbed_poll_stub::revents_value = POLLIN; + mbed_poll_stub::int_value = 1; + char buf4[7]; + uint8_t buf5[5]; + // NO prefix, NO OK, NO ERROR and NO URC match, CRLF found -> return so buffer could be read at.resp_start(); - at.read_bytes(buf2, 1); - CHECK(1 == at.read_string(buf, 5, true)); + // TO read 5 bytes from: "s,"OK\r\n -> read "s,"O + at.read_bytes(buf5, 5); + // K\r\n left to be read -> reading more than 3 + 1(for NULL) -> ERROR + CHECK(-1 == at.read_string(buf4, 4 + 1/*for NULL*/)); + CHECK(NSAPI_ERROR_DEVICE_ERROR == at.get_last_error()); + + // *** Encountering delimiter after reading 1 byte *** + at.clear_error(); at.flush(); + filehandle_stub_table = table4; + filehandle_stub_table_pos = 0; + // NO prefix, NO OK, NO ERROR and NO URC match, CRLF found -> return so buffer could be read + at.resp_start(); + // TO read 1 byte from: "s,"OK\r\n -> read " + at.read_bytes(buf5, 1); + // TO read max 4 from: s,"OK\r\n -> read s and stop on , + CHECK(1 == at.read_string(buf4, 4 + 1/*for NULL*/)); + + // *** Encountering delimiter as first char in buffer *** at.clear_error(); + at.flush(); + filehandle_stub_table = table4; + filehandle_stub_table_pos = 0; + // NO prefix, NO OK, NO ERROR and NO URC match, CRLF found -> return so buffer could be read + at.resp_start(); + // TO read 2 bytes from: "s,"OK\r\n -> read "s + at.read_bytes(buf5, 2); + // TO read max 4 bytes from: ,"OK\r\n -> stop on , + CHECK(0 == at.read_string(buf4, 4 + 1/*for NULL*/)); - char table3[] = "sss\rsss\0"; - filehandle_stub_table = table3; + // *** Read as much as buffer size is without encountering any delimiter " or OKCRLF *** + at.clear_error(); + char table5[] = "\"s\"OK\r\nabcd\0"; + at.flush(); + filehandle_stub_table = table5; filehandle_stub_table_pos = 0; mbed_poll_stub::revents_value = POLLIN; - mbed_poll_stub::int_value = strlen(table); + mbed_poll_stub::int_value = 1; + // NO prefix, NO OK, NO ERROR and NO URC match, CRLF found -> return so buffer could be read + at.resp_start(); + // TO read 1 byte from: "s"OK\r\n -> read " + at.read_bytes(buf5, 1); + // TO read max 1 byte from: s"OK\r\n -> read s + CHECK(1 == at.read_string(buf4, 1 + 1/*for NULL*/)); + + // *** Consume " and run into OKCRLF *** + // TO read max 1 byte from: "OK\r\n -> consume " and find stop tag OKCRLF + CHECK(0 == at.read_string(buf4, 1 + 1/*for NULL*/)); + + // *** Try to read after stop tag was found *** + // stop tag found do not read further + CHECK(-1 == at.read_string(buf4, 1 + 1/*for NULL*/)); + + // *** Try to read after stop tag was found when parameter allows it *** + // stop tag found but flag indicates to read despite stop_tag found + CHECK(4 == at.read_string(buf4, 4 + 1/*for NULL*/, true)); + + // *** Read as much as buffer size is without encountering any delimiter " or OKCRLF *** + at.clear_error(); + char table6[] = "sss\rsss\0"; + at.flush(); + filehandle_stub_table = table6; + filehandle_stub_table_pos = 0; + mbed_poll_stub::revents_value = POLLIN; + mbed_poll_stub::int_value = 1; + at.resp_start("s"); + // TO read from: ss\rsss -> read all 6 chars ss\rsss + CHECK(6 == at.read_string(buf4, 6 + 1/*for NULL*/)); + // *** Reading when buffer only has " *** + at.clear_error(); + char table7[] = "s\"\0"; + at.flush(); + filehandle_stub_table = table7; + filehandle_stub_table_pos = 0; + mbed_poll_stub::revents_value = POLLIN; + mbed_poll_stub::int_value = 1; at.resp_start("s"); - at.read_string(buf, 5, true); + // TO read from buffer having only " -> consume " -> trying to read when nothing in buffer + CHECK(-1 == at.read_string(buf4, 5)); + CHECK(NSAPI_ERROR_DEVICE_ERROR == at.get_last_error()); + + // *** Reading through partially matching stop tag *** + at.clear_error(); + char table8[] = "\"s\"OK\rabcd\r\n\0"; at.flush(); + filehandle_stub_table = table8; + filehandle_stub_table_pos = 0; + mbed_poll_stub::revents_value = POLLIN; + mbed_poll_stub::int_value = 1; + char buf8[9]; + // NO prefix, NO OK, NO ERROR and NO URC match, CRLF found -> return so buffer could be read + at.resp_start(); + // TO read from + CHECK(8 == at.read_string(buf8, 8 + 1/*for NULL*/)); + + // *** Reading through partially matching stop tag *** at.clear_error(); + char table9[] = "\"s\"Oabcd\r\n\0"; + at.flush(); + filehandle_stub_table = table9; + filehandle_stub_table_pos = 0; + mbed_poll_stub::revents_value = POLLIN; + mbed_poll_stub::int_value = 1; + char buf9[5]; - char table4[] = "\"s\"\0"; - filehandle_stub_table = table4; + // NO prefix, NO OK, NO ERROR and NO URC match, CRLF found -> return so buffer could be read + at.resp_start(); + // TO read from + CHECK(6 == at.read_string(buf9, 6 + 1/*for NULL*/)); + + // *** CRLF part of the string *** + at.clear_error(); + char table10[] = "\"s\"\r\nOK\r\n\0"; + at.flush(); + filehandle_stub_table = table10; filehandle_stub_table_pos = 0; mbed_poll_stub::revents_value = POLLIN; - mbed_poll_stub::int_value = strlen(table); + mbed_poll_stub::int_value = 1; + char buf10[10]; - at.resp_start("s"); - at.read_string(buf, 5, true); + // NO prefix, NO OK, NO ERROR and NO URC match, CRLF found -> return so buffer could be read + at.resp_start(); + // TO read from + CHECK(3 == at.read_string(buf10, 9 + 1/*for NULL*/)); +} +void Test_ATHandler::test_ATHandler_read_hex_string() +{ + EventQueue que; + FileHandle_stub fh1; filehandle_stub_table = NULL; filehandle_stub_table_pos = 0; - mbed_poll_stub::revents_value = POLLOUT; - mbed_poll_stub::int_value = 0; + + ATHandler at(&fh1, que, 0, ","); + + // *** Read up to delimiter, even length *** + at.clear_error(); + char table1[] = "68656C6C6F,"; + at.flush(); + filehandle_stub_table = table1; + filehandle_stub_table_pos = 0; + mbed_poll_stub::revents_value = POLLIN; + mbed_poll_stub::int_value = 1; + char buf1[10]; + // Set _stop_tag to resp_stop(OKCRLF) + at.resp_start(); + CHECK(5 == at.read_hex_string(buf1, 5)); + CHECK(!strncmp(buf1, "hello", 5)); + + // *** Read up to delimiter, odd length *** + at.clear_error(); + char table2[] = "68656C6C6F7,"; + at.flush(); + filehandle_stub_table = table2; + filehandle_stub_table_pos = 0; + mbed_poll_stub::revents_value = POLLIN; + mbed_poll_stub::int_value = 1; + char buf2[10]; + // Set _stop_tag to resp_stop(OKCRLF) + at.resp_start(); + CHECK(5 == at.read_hex_string(buf2, 6)); + CHECK(!strncmp(buf2, "hello", 5)); + + // *** Read with stop tag, even length *** + at.clear_error(); + char table3[] = "6865OK\r\n"; + at.flush(); + filehandle_stub_table = table3; + filehandle_stub_table_pos = 0; + mbed_poll_stub::revents_value = POLLIN; + mbed_poll_stub::int_value = 1; + char buf3[6]; + // Set _stop_tag to resp_stop(OKCRLF) + at.resp_start(); + CHECK(2 == at.read_hex_string(buf3, 2 + 1/*get to stop tag match*/)); + CHECK(!strncmp(buf3, "he", 2)); + at.resp_stop(); + + // *** Read with stop tag, odd length *** + at.clear_error(); + char table4[] = "686OK\r\n"; + at.flush(); + filehandle_stub_table = table4; + filehandle_stub_table_pos = 0; + mbed_poll_stub::revents_value = POLLIN; + mbed_poll_stub::int_value = 1; + char buf4[6]; + // Set _stop_tag to resp_stop(OKCRLF) + at.resp_start(); + CHECK(1 == at.read_hex_string(buf4, 2 + 1/*get to stop tag match*/)); + CHECK(!strncmp(buf4, "h", 1)); } void Test_ATHandler::test_ATHandler_read_int() { EventQueue que; FileHandle_stub fh1; + filehandle_stub_table = NULL; + filehandle_stub_table_pos = 0; ATHandler at(&fh1, que, 0, ","); diff --git a/features/cellular/UNITTESTS/at/athandler/test_athandler.h b/features/cellular/UNITTESTS/at/athandler/test_athandler.h index f17e40084be..a1ee7dba550 100644 --- a/features/cellular/UNITTESTS/at/athandler/test_athandler.h +++ b/features/cellular/UNITTESTS/at/athandler/test_athandler.h @@ -80,6 +80,8 @@ class Test_ATHandler void test_ATHandler_read_string(); + void test_ATHandler_read_hex_string(); + void test_ATHandler_read_int(); void test_ATHandler_resp_start(); diff --git a/features/cellular/UNITTESTS/stubs/FileHandle_stub.h b/features/cellular/UNITTESTS/stubs/FileHandle_stub.h index 2bc9eed541e..5972a9a89ee 100644 --- a/features/cellular/UNITTESTS/stubs/FileHandle_stub.h +++ b/features/cellular/UNITTESTS/stubs/FileHandle_stub.h @@ -36,10 +36,13 @@ class FileHandle_stub : public FileHandle virtual ssize_t read(void *buffer, size_t size){ if (filehandle_stub_table) { ssize_t ret = strlen(filehandle_stub_table) - filehandle_stub_table_pos; - if (size < ret) { + if (ret >= 0 && size < ret) { ret = size; } - memcpy(buffer, filehandle_stub_table, ret); + if (ret >= 0) { + memcpy(buffer, filehandle_stub_table, ret); + } + filehandle_stub_table_pos += ret; return ret; } From 8def9dc2367ce4d411fa45cc712de5f4723c60c4 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Tue, 10 Jul 2018 13:59:22 -0500 Subject: [PATCH 068/113] Correct string usage in version checking --- tools/toolchains/arm.py | 4 ++-- tools/toolchains/gcc.py | 4 ++-- tools/toolchains/iar.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/toolchains/arm.py b/tools/toolchains/arm.py index 70ac556226f..68a7eda0bfc 100644 --- a/tools/toolchains/arm.py +++ b/tools/toolchains/arm.py @@ -41,7 +41,7 @@ class ARM(mbedToolchain): SUPPORTED_CORES = ["Cortex-M0", "Cortex-M0+", "Cortex-M3", "Cortex-M4", "Cortex-M4F", "Cortex-M7", "Cortex-M7F", "Cortex-M7FD", "Cortex-A9"] ARMCC_RANGE = (LooseVersion("5.06"), LooseVersion("5.07")) - ARMCC_VERSION_RE = re.compile("Component: ARM Compiler (\d+\.\d+)") + ARMCC_VERSION_RE = re.compile(b"Component: ARM Compiler (\d+\.\d+)") @staticmethod def check_executable(): @@ -99,7 +99,7 @@ def version_check(self): msg = None min_ver, max_ver = self.ARMCC_RANGE match = self.ARMCC_VERSION_RE.search(stdout) - found_version = LooseVersion(match.group(1)) if match else None + found_version = LooseVersion(match.group(1).decode("utf-8")) if match else None min_ver, max_ver = self.ARMCC_RANGE if found_version and (found_version < min_ver or found_version >= max_ver): msg = ("Compiler version mismatch: Have {}; " diff --git a/tools/toolchains/gcc.py b/tools/toolchains/gcc.py index 9387917bce8..9a2a67c20b6 100644 --- a/tools/toolchains/gcc.py +++ b/tools/toolchains/gcc.py @@ -31,7 +31,7 @@ class GCC(mbedToolchain): DIAGNOSTIC_PATTERN = re.compile('((?P[^:]+):(?P\d+):)(?P\d+):? (?Pwarning|[eE]rror|fatal error): (?P.+)') GCC_RANGE = (LooseVersion("6.0.0"), LooseVersion("7.0.0")) - GCC_VERSION_RE = re.compile("\d+\.\d+\.\d+") + GCC_VERSION_RE = re.compile(b"\d+\.\d+\.\d+") def __init__(self, target, notify=None, macros=None, build_profile=None, build_dir=None): @@ -116,7 +116,7 @@ def version_check(self): stdout, _, retcode = run_cmd([self.cc[0], "--version"], redirect=True) msg = None match = self.GCC_VERSION_RE.search(stdout) - found_version = LooseVersion(match.group(0)) if match else None + found_version = LooseVersion(match.group(0).decode('utf-8')) if match else None min_ver, max_ver = self.GCC_RANGE if found_version and (found_version < min_ver or found_version >= max_ver): msg = ("Compiler version mismatch: Have {}; " diff --git a/tools/toolchains/iar.py b/tools/toolchains/iar.py index 92d9af82623..bf3712a76be 100644 --- a/tools/toolchains/iar.py +++ b/tools/toolchains/iar.py @@ -30,7 +30,7 @@ class IAR(mbedToolchain): DIAGNOSTIC_PATTERN = re.compile('"(?P[^"]+)",(?P[\d]+)\s+(?PWarning|Error|Fatal error)(?P.+)') INDEX_PATTERN = re.compile('(?P\s*)\^') - IAR_VERSION_RE = re.compile("IAR ANSI C/C\+\+ Compiler V(\d+\.\d+)") + IAR_VERSION_RE = re.compile(b"IAR ANSI C/C\+\+ Compiler V(\d+\.\d+)") IAR_VERSION = LooseVersion("7.80") @staticmethod @@ -99,7 +99,7 @@ def version_check(self): stdout, _, retcode = run_cmd([self.cc[0], "--version"], redirect=True) msg = None match = self.IAR_VERSION_RE.search(stdout) - found_version = match.group(1) if match else None + found_version = match.group(1).decode("utf-8") if match else None if found_version and LooseVersion(found_version) != self.IAR_VERSION: msg = "Compiler version mismatch: Have {}; expected {}".format( found_version, self.IAR_VERSION) From 2f52625d843fc2cf81b7f2a0006be04533c92918 Mon Sep 17 00:00:00 2001 From: Kimmo Vaisanen Date: Mon, 9 Jul 2018 14:44:41 +0300 Subject: [PATCH 069/113] Disable LSE for MTB_USI_WM_BN_BM_22 Current MTB_USI_WM_BN_BM_22 modules do not have OSC32_IN connected, so external xtal is not in use. --- targets/targets.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/targets/targets.json b/targets/targets.json index 8b0212c39ac..2a88256a1f2 100755 --- a/targets/targets.json +++ b/targets/targets.json @@ -1200,6 +1200,9 @@ } }, "MTB_USI_WM_BN_BM_22": { + "overrides": { + "lse_available": 0 + }, "inherits": ["USI_WM_BN_BM_22"] }, "MTB_ADV_WISE_1530": { From 455e24e6af9c99fb602869df2d08d6a4f46b2867 Mon Sep 17 00:00:00 2001 From: Senthil Ramakrishnan Date: Mon, 2 Jul 2018 15:42:58 -0500 Subject: [PATCH 070/113] Don't print error reports in release builds --- platform/mbed_error.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/platform/mbed_error.c b/platform/mbed_error.c index 269eebd48b5..dc9f6126063 100644 --- a/platform/mbed_error.c +++ b/platform/mbed_error.c @@ -78,7 +78,9 @@ WEAK void error(const char *format, ...) //Call handle_error/print_error_report permanently setting error_in_progress flag handle_error(MBED_ERROR_UNKNOWN, 0, NULL, 0); +#ifndef NDEBUG print_error_report(&last_error_ctx, "Fatal Run-time error"); +#endif error_in_progress = 1; #ifndef NDEBUG @@ -199,8 +201,10 @@ WEAK mbed_error_status_t mbed_error(mbed_error_status_t error_status, const char return MBED_ERROR_FAILED_OPERATION; } +#ifndef NDEBUG //On fatal errors print the error context/report print_error_report(&last_error_ctx, error_msg); +#endif mbed_halt_system(); return MBED_ERROR_FAILED_OPERATION; From e9eee4f14f156868b76cb9233a6b955bea33e0ff Mon Sep 17 00:00:00 2001 From: Senthil Ramakrishnan Date: Thu, 5 Jul 2018 11:50:49 -0500 Subject: [PATCH 071/113] Remove error reporting for release builds --- platform/mbed_error.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/platform/mbed_error.c b/platform/mbed_error.c index dc9f6126063..d0c8ec9b5f5 100644 --- a/platform/mbed_error.c +++ b/platform/mbed_error.c @@ -45,6 +45,11 @@ } \ } +#ifndef NDEBUG +#define ERROR_REPORT(ctx, error_msg) print_error_report(ctx, error_msg) +#else +#define ERROR_REPORT(ctx, error_msg) ((void) 0) +#endif static uint8_t error_in_progress = 0; static int error_count = 0; @@ -78,9 +83,7 @@ WEAK void error(const char *format, ...) //Call handle_error/print_error_report permanently setting error_in_progress flag handle_error(MBED_ERROR_UNKNOWN, 0, NULL, 0); -#ifndef NDEBUG - print_error_report(&last_error_ctx, "Fatal Run-time error"); -#endif + ERROR_REPORT(&last_error_ctx, "Fatal Run-time error"); error_in_progress = 1; #ifndef NDEBUG @@ -201,10 +204,8 @@ WEAK mbed_error_status_t mbed_error(mbed_error_status_t error_status, const char return MBED_ERROR_FAILED_OPERATION; } -#ifndef NDEBUG //On fatal errors print the error context/report - print_error_report(&last_error_ctx, error_msg); -#endif + ERROR_REPORT(&last_error_ctx, error_msg); mbed_halt_system(); return MBED_ERROR_FAILED_OPERATION; @@ -306,6 +307,7 @@ static void print_threads_info(osRtxThread_t *threads) } #endif +#ifndef NDEBUG static void print_error_report(mbed_error_ctx *ctx, const char *error_msg) { uint32_t error_code = MBED_GET_ERROR_CODE(ctx->error_status); @@ -390,6 +392,7 @@ static void print_error_report(mbed_error_ctx *ctx, const char *error_msg) mbed_error_printf("\n-- MbedOS Error Info --\n"); } +#endif //ifndef NDEBUG #if MBED_CONF_PLATFORM_ERROR_HIST_ENABLED //Retrieve the error context from error log at the specified index From eaa3d28b1adf73f2c3573c6c7ab0a8ae33285dbe Mon Sep 17 00:00:00 2001 From: Marcus Chang Date: Mon, 9 Jul 2018 12:44:09 -0700 Subject: [PATCH 072/113] Remove white space in config files for NRF52 series --- .../TARGET_MCU_NRF52832/config/sdk_config.h | 7280 ++++++++--------- .../TARGET_MCU_NRF52840/config/sdk_config.h | 7280 ++++++++--------- .../TARGET_NRF5x/TARGET_NRF52/mbed_lib.json | 228 +- 3 files changed, 7394 insertions(+), 7394 deletions(-) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/config/sdk_config.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/config/sdk_config.h index cf4a3c0805f..03f10d0fe97 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/config/sdk_config.h +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/config/sdk_config.h @@ -1,30 +1,30 @@ /** * Copyright (c) 2017 - 2017, Nordic Semiconductor ASA - * + * * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. - * + * * 2. Redistributions in binary form, except as embedded into a Nordic * Semiconductor ASA integrated circuit in a product or a software update for * such product, 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. Neither the name of Nordic Semiconductor ASA nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. - * + * * 4. This software, with or without modification, must only be used with a * Nordic Semiconductor ASA integrated circuit. - * + * * 5. Any software provided in binary form under this license must not be reverse * engineered, decompiled, modified and/or disassembled. - * + * * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -35,7 +35,7 @@ * 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. - * + * */ @@ -46,7 +46,7 @@ #ifdef USE_APP_CONFIG #include "app_config.h" #endif -// Board Support +// Board Support // Enable NRF Asserts when Mbed NDEBUG is not set #if !defined(NDEBUG) && !defined(DEBUG_NRF_USER) @@ -55,16 +55,16 @@ //========================================================== // BSP_BTN_BLE_ENABLED - bsp_btn_ble - Button Control for BLE - + #ifndef BSP_BTN_BLE_ENABLED #define BSP_BTN_BLE_ENABLED 0 #endif -// +// //========================================================== -// nRF_ANT +// nRF_ANT //========================================================== // ANTFS_ENABLED - ant_fs - ANT File Share module. @@ -72,96 +72,96 @@ #ifndef ANTFS_ENABLED #define ANTFS_ENABLED 0 #endif -// ANTFS_CONFIG_NETWORK_NUMBER - ANT-FS network number. +// ANTFS_CONFIG_NETWORK_NUMBER - ANT-FS network number. #ifndef ANTFS_CONFIG_NETWORK_NUMBER #define ANTFS_CONFIG_NETWORK_NUMBER 0 #endif -// ANTFS_CONFIG_CHANNEL_NUMBER - ANT-FS channel number. +// ANTFS_CONFIG_CHANNEL_NUMBER - ANT-FS channel number. #ifndef ANTFS_CONFIG_CHANNEL_NUMBER #define ANTFS_CONFIG_CHANNEL_NUMBER 0 #endif -// ANTFS_CONFIG_PAIRING_TIMEOUT - Pairing timeout - how long the UI will wait for a response to a pairing request before switching to the link layer, in seconds. +// ANTFS_CONFIG_PAIRING_TIMEOUT - Pairing timeout - how long the UI will wait for a response to a pairing request before switching to the link layer, in seconds. #ifndef ANTFS_CONFIG_PAIRING_TIMEOUT #define ANTFS_CONFIG_PAIRING_TIMEOUT 120 #endif -// ANTFS_CONFIG_LINK_COMMAND_TIMEOUT - Command timeout - how long the client will wait without receiving any commands before switching to the link layer, in seconds. +// ANTFS_CONFIG_LINK_COMMAND_TIMEOUT - Command timeout - how long the client will wait without receiving any commands before switching to the link layer, in seconds. #ifndef ANTFS_CONFIG_LINK_COMMAND_TIMEOUT #define ANTFS_CONFIG_LINK_COMMAND_TIMEOUT 10 #endif -// ANTFS_CONFIG_TRANS_TYPE - ANT-FS Transmission Type. +// ANTFS_CONFIG_TRANS_TYPE - ANT-FS Transmission Type. #ifndef ANTFS_CONFIG_TRANS_TYPE #define ANTFS_CONFIG_TRANS_TYPE 10 #endif -// ANTFS_CONFIG_DEVICE_TYPE - ANT device type for channel configuration. +// ANTFS_CONFIG_DEVICE_TYPE - ANT device type for channel configuration. #ifndef ANTFS_CONFIG_DEVICE_TYPE #define ANTFS_CONFIG_DEVICE_TYPE 1 #endif // ANTFS_CONFIG_BEACON_STATUS_PERIOD - ANT-FS Beacon Message Period. - -// <0=> 0.5 Hz -// <1=> 1 Hz -// <2=> 2 Hz -// <3=> 4 Hz -// <4=> 8 Hz + +// <0=> 0.5 Hz +// <1=> 1 Hz +// <2=> 2 Hz +// <3=> 4 Hz +// <4=> 8 Hz #ifndef ANTFS_CONFIG_BEACON_STATUS_PERIOD #define ANTFS_CONFIG_BEACON_STATUS_PERIOD 3 #endif // ANTFS_CONFIG_TRANSMIT_POWER - ANT Transmit Power. - -// <0=> Lowest ANT Tx power level setting. (-20dBm) -// <1=> ANT Tx power > Lvl 0. (-12dBm) -// <2=> ANT Tx power > Lvl 1. (-4dBm) -// <3=> ANT Tx power > Lvl 2. Default tx power level. (0dBm) -// <4=> ANT Tx power > Lvl 3. (+4dBm) -// <128=> Custom tx power selection + +// <0=> Lowest ANT Tx power level setting. (-20dBm) +// <1=> ANT Tx power > Lvl 0. (-12dBm) +// <2=> ANT Tx power > Lvl 1. (-4dBm) +// <3=> ANT Tx power > Lvl 2. Default tx power level. (0dBm) +// <4=> ANT Tx power > Lvl 3. (+4dBm) +// <128=> Custom tx power selection #ifndef ANTFS_CONFIG_TRANSMIT_POWER #define ANTFS_CONFIG_TRANSMIT_POWER 3 #endif -// ANTFS_CONFIG_CUSTOM_TRANSMIT_POWER - ANT Custom Transmit Power. +// ANTFS_CONFIG_CUSTOM_TRANSMIT_POWER - ANT Custom Transmit Power. #ifndef ANTFS_CONFIG_CUSTOM_TRANSMIT_POWER #define ANTFS_CONFIG_CUSTOM_TRANSMIT_POWER 0 #endif // ANTFS_CONFIG_AUTH_TYPE_PAIRING_ENABLED - Use pairing and key exchange authentication. - + #ifndef ANTFS_CONFIG_AUTH_TYPE_PAIRING_ENABLED #define ANTFS_CONFIG_AUTH_TYPE_PAIRING_ENABLED 0 #endif // ANTFS_CONFIG_AUTH_TYPE_PASSKEY_ENABLED - Use passkey authentication. - + #ifndef ANTFS_CONFIG_AUTH_TYPE_PASSKEY_ENABLED #define ANTFS_CONFIG_AUTH_TYPE_PASSKEY_ENABLED 0 #endif // ANTFS_CONFIG_AUTH_TYPE_PASSTHROUGH_ENABLED - Allow host to bypass authentication. - + #ifndef ANTFS_CONFIG_AUTH_TYPE_PASSTHROUGH_ENABLED #define ANTFS_CONFIG_AUTH_TYPE_PASSTHROUGH_ENABLED 0 #endif // ANTFS_CONFIG_UPLOAD_ENABLED - Support upload operation. - + #ifndef ANTFS_CONFIG_UPLOAD_ENABLED #define ANTFS_CONFIG_UPLOAD_ENABLED 0 #endif // ANTFS_CONFIG_DEBUG_LED_ENABLED - Enables LED debug in the module. - + #ifndef ANTFS_CONFIG_DEBUG_LED_ENABLED #define ANTFS_CONFIG_DEBUG_LED_ENABLED 0 @@ -180,28 +180,28 @@ #define ANT_BPWR_LOG_ENABLED 0 #endif // ANT_BPWR_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BPWR_LOG_LEVEL #define ANT_BPWR_LOG_LEVEL 3 #endif // ANT_BPWR_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BPWR_INFO_COLOR #define ANT_BPWR_INFO_COLOR 0 @@ -215,28 +215,28 @@ #define ANT_BPWR_COMMON_LOG_ENABLED 0 #endif // ANT_BPWR_COMMON_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BPWR_COMMON_LOG_LEVEL #define ANT_BPWR_COMMON_LOG_LEVEL 3 #endif // ANT_BPWR_COMMON_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BPWR_COMMON_INFO_COLOR #define ANT_BPWR_COMMON_INFO_COLOR 0 @@ -250,28 +250,28 @@ #define ANT_BPWR_PAGE_TORQUE_LOG_ENABLED 0 #endif // ANT_BPWR_PAGE_TORQUE_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BPWR_PAGE_TORQUE_LOG_LEVEL #define ANT_BPWR_PAGE_TORQUE_LOG_LEVEL 3 #endif // ANT_BPWR_PAGE_TORQUE_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BPWR_PAGE_TORQUE_INFO_COLOR #define ANT_BPWR_PAGE_TORQUE_INFO_COLOR 0 @@ -285,28 +285,28 @@ #define ANT_BPWR_PAGE_1_LOG_ENABLED 0 #endif // ANT_BPWR_PAGE_1_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BPWR_PAGE_1_LOG_LEVEL #define ANT_BPWR_PAGE_1_LOG_LEVEL 3 #endif // ANT_BPWR_PAGE_1_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BPWR_PAGE_1_INFO_COLOR #define ANT_BPWR_PAGE_1_INFO_COLOR 0 @@ -320,28 +320,28 @@ #define ANT_BPWR_PAGE_16_LOG_ENABLED 0 #endif // ANT_BPWR_PAGE_16_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BPWR_PAGE_16_LOG_LEVEL #define ANT_BPWR_PAGE_16_LOG_LEVEL 3 #endif // ANT_BPWR_PAGE_16_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BPWR_PAGE_16_INFO_COLOR #define ANT_BPWR_PAGE_16_INFO_COLOR 0 @@ -355,28 +355,28 @@ #define ANT_BPWR_PAGE_17_LOG_ENABLED 0 #endif // ANT_BPWR_PAGE_17_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BPWR_PAGE_17_LOG_LEVEL #define ANT_BPWR_PAGE_17_LOG_LEVEL 3 #endif // ANT_BPWR_PAGE_17_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BPWR_PAGE_17_INFO_COLOR #define ANT_BPWR_PAGE_17_INFO_COLOR 0 @@ -390,28 +390,28 @@ #define ANT_BPWR_PAGE_18_LOG_ENABLED 0 #endif // ANT_BPWR_PAGE_18_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BPWR_PAGE_18_LOG_LEVEL #define ANT_BPWR_PAGE_18_LOG_LEVEL 3 #endif // ANT_BPWR_PAGE_18_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BPWR_PAGE_18_INFO_COLOR #define ANT_BPWR_PAGE_18_INFO_COLOR 0 @@ -432,28 +432,28 @@ #define ANT_BSC_LOG_ENABLED 0 #endif // ANT_BSC_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BSC_LOG_LEVEL #define ANT_BSC_LOG_LEVEL 3 #endif // ANT_BSC_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BSC_INFO_COLOR #define ANT_BSC_INFO_COLOR 0 @@ -467,28 +467,28 @@ #define ANT_BSC_COMBINED_PAGE_0_LOG_ENABLED 0 #endif // ANT_BSC_COMBINED_PAGE_0_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BSC_COMBINED_PAGE_0_LOG_LEVEL #define ANT_BSC_COMBINED_PAGE_0_LOG_LEVEL 3 #endif // ANT_BSC_COMBINED_PAGE_0_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BSC_COMBINED_PAGE_0_INFO_COLOR #define ANT_BSC_COMBINED_PAGE_0_INFO_COLOR 0 @@ -502,28 +502,28 @@ #define ANT_BSC_PAGE_0_LOG_ENABLED 0 #endif // ANT_BSC_PAGE_0_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BSC_PAGE_0_LOG_LEVEL #define ANT_BSC_PAGE_0_LOG_LEVEL 3 #endif // ANT_BSC_PAGE_0_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BSC_PAGE_0_INFO_COLOR #define ANT_BSC_PAGE_0_INFO_COLOR 0 @@ -537,28 +537,28 @@ #define ANT_BSC_PAGE_1_LOG_ENABLED 0 #endif // ANT_BSC_PAGE_1_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BSC_PAGE_1_LOG_LEVEL #define ANT_BSC_PAGE_1_LOG_LEVEL 3 #endif // ANT_BSC_PAGE_1_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BSC_PAGE_1_INFO_COLOR #define ANT_BSC_PAGE_1_INFO_COLOR 0 @@ -572,28 +572,28 @@ #define ANT_BSC_PAGE_2_LOG_ENABLED 0 #endif // ANT_BSC_PAGE_2_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BSC_PAGE_2_LOG_LEVEL #define ANT_BSC_PAGE_2_LOG_LEVEL 3 #endif // ANT_BSC_PAGE_2_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BSC_PAGE_2_INFO_COLOR #define ANT_BSC_PAGE_2_INFO_COLOR 0 @@ -607,28 +607,28 @@ #define ANT_BSC_PAGE_3_LOG_ENABLED 0 #endif // ANT_BSC_PAGE_3_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BSC_PAGE_3_LOG_LEVEL #define ANT_BSC_PAGE_3_LOG_LEVEL 3 #endif // ANT_BSC_PAGE_3_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BSC_PAGE_3_INFO_COLOR #define ANT_BSC_PAGE_3_INFO_COLOR 0 @@ -642,28 +642,28 @@ #define ANT_BSC_PAGE_4_LOG_ENABLED 0 #endif // ANT_BSC_PAGE_4_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BSC_PAGE_4_LOG_LEVEL #define ANT_BSC_PAGE_4_LOG_LEVEL 3 #endif // ANT_BSC_PAGE_4_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BSC_PAGE_4_INFO_COLOR #define ANT_BSC_PAGE_4_INFO_COLOR 0 @@ -677,28 +677,28 @@ #define ANT_BSC_PAGE_5_LOG_ENABLED 0 #endif // ANT_BSC_PAGE_5_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BSC_PAGE_5_LOG_LEVEL #define ANT_BSC_PAGE_5_LOG_LEVEL 3 #endif // ANT_BSC_PAGE_5_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BSC_PAGE_5_INFO_COLOR #define ANT_BSC_PAGE_5_INFO_COLOR 0 @@ -709,7 +709,7 @@ // // ANT_CHANNEL_CONFIG_ENABLED - ant_channel_config - ANT common channel configuration - + #ifndef ANT_CHANNEL_CONFIG_ENABLED #define ANT_CHANNEL_CONFIG_ENABLED 0 @@ -726,28 +726,28 @@ #define ANT_COMMON_PAGE_70_LOG_ENABLED 0 #endif // ANT_COMMON_PAGE_70_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_COMMON_PAGE_70_LOG_LEVEL #define ANT_COMMON_PAGE_70_LOG_LEVEL 3 #endif // ANT_COMMON_PAGE_70_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_COMMON_PAGE_70_INFO_COLOR #define ANT_COMMON_PAGE_70_INFO_COLOR 0 @@ -768,28 +768,28 @@ #define ANT_COMMON_PAGE_80_LOG_ENABLED 0 #endif // ANT_COMMON_PAGE_80_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_COMMON_PAGE_80_LOG_LEVEL #define ANT_COMMON_PAGE_80_LOG_LEVEL 3 #endif // ANT_COMMON_PAGE_80_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_COMMON_PAGE_80_INFO_COLOR #define ANT_COMMON_PAGE_80_INFO_COLOR 0 @@ -810,28 +810,28 @@ #define ANT_COMMON_PAGE_81_LOG_ENABLED 0 #endif // ANT_COMMON_PAGE_81_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_COMMON_PAGE_81_LOG_LEVEL #define ANT_COMMON_PAGE_81_LOG_LEVEL 3 #endif // ANT_COMMON_PAGE_81_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_COMMON_PAGE_81_INFO_COLOR #define ANT_COMMON_PAGE_81_INFO_COLOR 0 @@ -842,7 +842,7 @@ // // ANT_ENCRYPT_CONFIG_ENABLED - ant_encrypt_config - Cryptographic ANT stack configuration - + #ifndef ANT_ENCRYPT_CONFIG_ENABLED #define ANT_ENCRYPT_CONFIG_ENABLED 0 @@ -859,28 +859,28 @@ #define ANT_HRM_LOG_ENABLED 0 #endif // ANT_HRM_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_HRM_LOG_LEVEL #define ANT_HRM_LOG_LEVEL 3 #endif // ANT_HRM_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_HRM_INFO_COLOR #define ANT_HRM_INFO_COLOR 0 @@ -894,28 +894,28 @@ #define ANT_HRM_PAGE_0_LOG_ENABLED 0 #endif // ANT_HRM_PAGE_0_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_HRM_PAGE_0_LOG_LEVEL #define ANT_HRM_PAGE_0_LOG_LEVEL 3 #endif // ANT_HRM_PAGE_0_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_HRM_PAGE_0_INFO_COLOR #define ANT_HRM_PAGE_0_INFO_COLOR 0 @@ -929,28 +929,28 @@ #define ANT_HRM_PAGE_1_LOG_ENABLED 0 #endif // ANT_HRM_PAGE_1_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_HRM_PAGE_1_LOG_LEVEL #define ANT_HRM_PAGE_1_LOG_LEVEL 3 #endif // ANT_HRM_PAGE_1_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_HRM_PAGE_1_INFO_COLOR #define ANT_HRM_PAGE_1_INFO_COLOR 0 @@ -964,28 +964,28 @@ #define ANT_HRM_PAGE_2_LOG_ENABLED 0 #endif // ANT_HRM_PAGE_2_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_HRM_PAGE_2_LOG_LEVEL #define ANT_HRM_PAGE_2_LOG_LEVEL 3 #endif // ANT_HRM_PAGE_2_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_HRM_PAGE_2_INFO_COLOR #define ANT_HRM_PAGE_2_INFO_COLOR 0 @@ -999,28 +999,28 @@ #define ANT_HRM_PAGE_3_LOG_ENABLED 0 #endif // ANT_HRM_PAGE_3_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_HRM_PAGE_3_LOG_LEVEL #define ANT_HRM_PAGE_3_LOG_LEVEL 3 #endif // ANT_HRM_PAGE_3_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_HRM_PAGE_3_INFO_COLOR #define ANT_HRM_PAGE_3_INFO_COLOR 0 @@ -1034,28 +1034,28 @@ #define ANT_HRM_PAGE_4_LOG_ENABLED 0 #endif // ANT_HRM_PAGE_4_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_HRM_PAGE_4_LOG_LEVEL #define ANT_HRM_PAGE_4_LOG_LEVEL 3 #endif // ANT_HRM_PAGE_4_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_HRM_PAGE_4_INFO_COLOR #define ANT_HRM_PAGE_4_INFO_COLOR 0 @@ -1066,14 +1066,14 @@ // // ANT_KEY_MANAGER_ENABLED - ant_key_manager - Software Component - + #ifndef ANT_KEY_MANAGER_ENABLED #define ANT_KEY_MANAGER_ENABLED 0 #endif // ANT_REQUEST_CONTROLLER_ENABLED - ant_request_controller - ANT+ request controller - + #ifndef ANT_REQUEST_CONTROLLER_ENABLED #define ANT_REQUEST_CONTROLLER_ENABLED 0 @@ -1090,28 +1090,28 @@ #define ANT_SDM_LOG_ENABLED 0 #endif // ANT_SDM_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_SDM_LOG_LEVEL #define ANT_SDM_LOG_LEVEL 3 #endif // ANT_SDM_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_SDM_INFO_COLOR #define ANT_SDM_INFO_COLOR 0 @@ -1126,14 +1126,14 @@ #ifndef ANT_SEARCH_CONFIG_ENABLED #define ANT_SEARCH_CONFIG_ENABLED 0 #endif -// ANT_DEFAULT_LOW_PRIORITY_TIMEOUT - Default low priority search time-out. <0-255> +// ANT_DEFAULT_LOW_PRIORITY_TIMEOUT - Default low priority search time-out. <0-255> #ifndef ANT_DEFAULT_LOW_PRIORITY_TIMEOUT #define ANT_DEFAULT_LOW_PRIORITY_TIMEOUT 2 #endif -// ANT_DEFAULT_HIGH_PRIORITY_TIMEOUT - Default high priority search time-out. <0-255> +// ANT_DEFAULT_HIGH_PRIORITY_TIMEOUT - Default high priority search time-out. <0-255> #ifndef ANT_DEFAULT_HIGH_PRIORITY_TIMEOUT @@ -1147,22 +1147,22 @@ #ifndef ANT_STACK_CONFIG_ENABLED #define ANT_STACK_CONFIG_ENABLED 0 #endif -// ANT_CONFIG_TOTAL_CHANNELS_ALLOCATED - Allocated ANT channels +// ANT_CONFIG_TOTAL_CHANNELS_ALLOCATED - Allocated ANT channels #ifndef ANT_CONFIG_TOTAL_CHANNELS_ALLOCATED #define ANT_CONFIG_TOTAL_CHANNELS_ALLOCATED 0 #endif -// ANT_CONFIG_ENCRYPTED_CHANNELS - Encrypted ANT channels +// ANT_CONFIG_ENCRYPTED_CHANNELS - Encrypted ANT channels #ifndef ANT_CONFIG_ENCRYPTED_CHANNELS #define ANT_CONFIG_ENCRYPTED_CHANNELS 0 #endif -// ANT_CONFIG_EVENT_QUEUE_SIZE - Event queue size +// ANT_CONFIG_EVENT_QUEUE_SIZE - Event queue size #ifndef ANT_CONFIG_EVENT_QUEUE_SIZE #define ANT_CONFIG_EVENT_QUEUE_SIZE 32 #endif -// ANT_CONFIG_BURST_QUEUE_SIZE - ANT burst queue size +// ANT_CONFIG_BURST_QUEUE_SIZE - ANT burst queue size #ifndef ANT_CONFIG_BURST_QUEUE_SIZE #define ANT_CONFIG_BURST_QUEUE_SIZE 128 #endif @@ -1174,35 +1174,35 @@ #ifndef ANT_STATE_INDICATOR_ENABLED #define ANT_STATE_INDICATOR_ENABLED 0 #endif -// ANT_STATE_INDICATOR_CONFIG_SHUTDOWN_HANDLER_PRIORITY - Shutdown observer priority. +// ANT_STATE_INDICATOR_CONFIG_SHUTDOWN_HANDLER_PRIORITY - Shutdown observer priority. #ifndef ANT_STATE_INDICATOR_CONFIG_SHUTDOWN_HANDLER_PRIORITY #define ANT_STATE_INDICATOR_CONFIG_SHUTDOWN_HANDLER_PRIORITY 1 #endif // -// +// //========================================================== -// nRF_BLE +// nRF_BLE //========================================================== // BLE_ADVERTISING_ENABLED - ble_advertising - Advertising module - + #ifndef BLE_ADVERTISING_ENABLED #define BLE_ADVERTISING_ENABLED 0 #endif // BLE_DTM_ENABLED - ble_dtm - Module for testing RF/PHY using DTM commands - + #ifndef BLE_DTM_ENABLED #define BLE_DTM_ENABLED 0 #endif // BLE_RACP_ENABLED - ble_racp - Record Access Control Point library - + #ifndef BLE_RACP_ENABLED #define BLE_RACP_ENABLED 0 @@ -1213,14 +1213,14 @@ #ifndef NRF_BLE_CONN_PARAMS_ENABLED #define NRF_BLE_CONN_PARAMS_ENABLED 0 #endif -// NRF_BLE_CONN_PARAMS_MAX_SLAVE_LATENCY_DEVIATION - The largest acceptable deviation in slave latency. +// NRF_BLE_CONN_PARAMS_MAX_SLAVE_LATENCY_DEVIATION - The largest acceptable deviation in slave latency. // The largest deviation (+ or -) from the requested slave latency that will not be renegotiated. #ifndef NRF_BLE_CONN_PARAMS_MAX_SLAVE_LATENCY_DEVIATION #define NRF_BLE_CONN_PARAMS_MAX_SLAVE_LATENCY_DEVIATION 499 #endif -// NRF_BLE_CONN_PARAMS_MAX_SUPERVISION_TIMEOUT_DEVIATION - The largest acceptable deviation (in 10 ms units) in supervision timeout. +// NRF_BLE_CONN_PARAMS_MAX_SUPERVISION_TIMEOUT_DEVIATION - The largest acceptable deviation (in 10 ms units) in supervision timeout. // The largest deviation (+ or -, in 10 ms units) from the requested supervision timeout that will not be renegotiated. #ifndef NRF_BLE_CONN_PARAMS_MAX_SUPERVISION_TIMEOUT_DEVIATION @@ -1230,7 +1230,7 @@ // // NRF_BLE_QWR_ENABLED - nrf_ble_qwr - Queued writes support module (prepare/execute write) - + #ifndef NRF_BLE_QWR_ENABLED #define NRF_BLE_QWR_ENABLED 0 @@ -1241,14 +1241,14 @@ #ifndef PEER_MANAGER_ENABLED #define PEER_MANAGER_ENABLED 0 #endif -// PM_MAX_REGISTRANTS +// PM_MAX_REGISTRANTS // Number of event handlers that can be registered. #ifndef PM_MAX_REGISTRANTS #define PM_MAX_REGISTRANTS 3 #endif -// PM_FLASH_BUFFERS +// PM_FLASH_BUFFERS // Number of internal buffers for flash operations. // Decrease this value to lower RAM usage. @@ -1258,170 +1258,170 @@ // -// +// //========================================================== -// nRF_BLE_Services +// nRF_BLE_Services //========================================================== // BLE_ANCS_C_ENABLED - ble_ancs_c - Apple Notification Service Client - + #ifndef BLE_ANCS_C_ENABLED #define BLE_ANCS_C_ENABLED 0 #endif // BLE_ANS_C_ENABLED - ble_ans_c - Alert Notification Service Client - + #ifndef BLE_ANS_C_ENABLED #define BLE_ANS_C_ENABLED 0 #endif // BLE_BAS_C_ENABLED - ble_bas_c - Battery Service Client - + #ifndef BLE_BAS_C_ENABLED #define BLE_BAS_C_ENABLED 0 #endif // BLE_BAS_ENABLED - ble_bas - Battery Service - + #ifndef BLE_BAS_ENABLED #define BLE_BAS_ENABLED 0 #endif // BLE_CSCS_ENABLED - ble_cscs - Cycling Speed and Cadence Service - + #ifndef BLE_CSCS_ENABLED #define BLE_CSCS_ENABLED 0 #endif // BLE_CTS_C_ENABLED - ble_cts_c - Current Time Service Client - + #ifndef BLE_CTS_C_ENABLED #define BLE_CTS_C_ENABLED 0 #endif // BLE_DIS_ENABLED - ble_dis - Device Information Service - + #ifndef BLE_DIS_ENABLED #define BLE_DIS_ENABLED 0 #endif // BLE_GLS_ENABLED - ble_gls - Glucose Service - + #ifndef BLE_GLS_ENABLED #define BLE_GLS_ENABLED 0 #endif // BLE_HIDS_ENABLED - ble_hids - Human Interface Device Service - + #ifndef BLE_HIDS_ENABLED #define BLE_HIDS_ENABLED 0 #endif // BLE_HRS_C_ENABLED - ble_hrs_c - Heart Rate Service Client - + #ifndef BLE_HRS_C_ENABLED #define BLE_HRS_C_ENABLED 0 #endif // BLE_HRS_ENABLED - ble_hrs - Heart Rate Service - + #ifndef BLE_HRS_ENABLED #define BLE_HRS_ENABLED 0 #endif // BLE_HTS_ENABLED - ble_hts - Health Thermometer Service - + #ifndef BLE_HTS_ENABLED #define BLE_HTS_ENABLED 0 #endif // BLE_IAS_C_ENABLED - ble_ias_c - Immediate Alert Service Client - + #ifndef BLE_IAS_C_ENABLED #define BLE_IAS_C_ENABLED 0 #endif // BLE_IAS_ENABLED - ble_ias - Immediate Alert Service - + #ifndef BLE_IAS_ENABLED #define BLE_IAS_ENABLED 0 #endif // BLE_LBS_C_ENABLED - ble_lbs_c - Nordic LED Button Service Client - + #ifndef BLE_LBS_C_ENABLED #define BLE_LBS_C_ENABLED 0 #endif // BLE_LBS_ENABLED - ble_lbs - LED Button Service - + #ifndef BLE_LBS_ENABLED #define BLE_LBS_ENABLED 0 #endif // BLE_LLS_ENABLED - ble_lls - Link Loss Service - + #ifndef BLE_LLS_ENABLED #define BLE_LLS_ENABLED 0 #endif // BLE_NUS_C_ENABLED - ble_nus_c - Nordic UART Central Service - + #ifndef BLE_NUS_C_ENABLED #define BLE_NUS_C_ENABLED 0 #endif // BLE_NUS_ENABLED - ble_nus - Nordic UART Service - + #ifndef BLE_NUS_ENABLED #define BLE_NUS_ENABLED 0 #endif // BLE_RSCS_C_ENABLED - ble_rscs_c - Running Speed and Cadence Client - + #ifndef BLE_RSCS_C_ENABLED #define BLE_RSCS_C_ENABLED 0 #endif // BLE_RSCS_ENABLED - ble_rscs - Running Speed and Cadence Service - + #ifndef BLE_RSCS_ENABLED #define BLE_RSCS_ENABLED 0 #endif // BLE_TPS_ENABLED - ble_tps - TX Power Service - + #ifndef BLE_TPS_ENABLED #define BLE_TPS_ENABLED 0 #endif -// +// //========================================================== -// nRF_Core +// nRF_Core //========================================================== // NRF_MPU_ENABLED - nrf_mpu - Module for MPU @@ -1430,7 +1430,7 @@ #define NRF_MPU_ENABLED 0 #endif // NRF_MPU_CLI_CMDS - Enable CLI commands specific to the module - + #ifndef NRF_MPU_CLI_CMDS #define NRF_MPU_CLI_CMDS 1 @@ -1444,15 +1444,15 @@ #define NRF_STACK_GUARD_ENABLED 0 #endif // NRF_STACK_GUARD_CONFIG_SIZE - Size of stack guard - -// <5=> 32 bytes -// <6=> 64 bytes -// <7=> 128 bytes -// <8=> 256 bytes -// <9=> 512 bytes -// <10=> 1024 bytes -// <11=> 2048 bytes -// <12=> 4096 bytes + +// <5=> 32 bytes +// <6=> 64 bytes +// <7=> 128 bytes +// <8=> 256 bytes +// <9=> 512 bytes +// <10=> 1024 bytes +// <11=> 2048 bytes +// <12=> 4096 bytes #ifndef NRF_STACK_GUARD_CONFIG_SIZE #define NRF_STACK_GUARD_CONFIG_SIZE 7 @@ -1460,10 +1460,10 @@ // -// +// //========================================================== -// nRF_Crypto +// nRF_Crypto //========================================================== // NRF_CRYPTO_ENABLED - nrf_crypto - Cryptography library @@ -1472,7 +1472,7 @@ #define NRF_CRYPTO_ENABLED 0 #endif // NRF_CRYPTO_BACKEND_CC310_LIB - Enable the ARM Cryptocell CC310 backend - + // The hardware-accelerated cryptography backend is available only on nRF52840. @@ -1488,7 +1488,7 @@ #define NRF_CRYPTO_BACKEND_MICRO_ECC 0 #endif // NRF_CRYPTO_BACKEND_MICRO_ECC_SHA256 - Enable SHA256 - + // Enable SHA256 cryptographic hash functionality. // Enable this setting if you need SHA256 support, for example to verify signatures. @@ -1498,7 +1498,7 @@ #endif // NRF_CRYPTO_BACKEND_MICRO_ECC_RNG - Enable random number generator - + // Enable random number generation. // Enable this setting if you need to generate cryptographic keys. @@ -1512,36 +1512,36 @@ // -// +// //========================================================== -// nRF_DFU +// nRF_DFU //========================================================== // ble_dfu - Device Firmware Update //========================================================== // BLE_DFU_ENABLED - Enable DFU Service. - + #ifndef BLE_DFU_ENABLED #define BLE_DFU_ENABLED 0 #endif // NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS - Buttonless DFU supports bonds. - + #ifndef NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS #define NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS 0 #endif -// +// //========================================================== -// +// //========================================================== -// nRF_Drivers +// nRF_Drivers //========================================================== // APP_USBD_ENABLED - app_usbd - USB Device library @@ -1549,7 +1549,7 @@ #ifndef APP_USBD_ENABLED #define APP_USBD_ENABLED 0 #endif -// APP_USBD_VID - Vendor ID <0x0000-0xFFFF> +// APP_USBD_VID - Vendor ID <0x0000-0xFFFF> // Vendor ID ordered from USB IF: http://www.usb.org/developers/vendor/ @@ -1558,7 +1558,7 @@ #define APP_USBD_VID 0 #endif -// APP_USBD_PID - Product ID <0x0000-0xFFFF> +// APP_USBD_PID - Product ID <0x0000-0xFFFF> // Selected Product ID @@ -1567,7 +1567,7 @@ #define APP_USBD_PID 0 #endif -// APP_USBD_DEVICE_VER_MAJOR - Device version, major part <0-99> +// APP_USBD_DEVICE_VER_MAJOR - Device version, major part <0-99> // Device version, will be converted automatically to BCD notation. Use just decimal values. @@ -1576,7 +1576,7 @@ #define APP_USBD_DEVICE_VER_MAJOR 1 #endif -// APP_USBD_DEVICE_VER_MINOR - Device version, minor part <0-99> +// APP_USBD_DEVICE_VER_MINOR - Device version, minor part <0-99> // Device version, will be converted automatically to BCD notation. Use just decimal values. @@ -1595,7 +1595,7 @@ #ifndef APP_USBD_EVENT_QUEUE_ENABLE #define APP_USBD_EVENT_QUEUE_ENABLE 1 #endif -// APP_USBD_EVENT_QUEUE_SIZE - The size of event queue <16-64> +// APP_USBD_EVENT_QUEUE_SIZE - The size of event queue <16-64> // The size of the queue for the events that would be processed in the main loop. @@ -1612,44 +1612,44 @@ #define APP_USBD_CONFIG_LOG_ENABLED 0 #endif // APP_USBD_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef APP_USBD_CONFIG_LOG_LEVEL #define APP_USBD_CONFIG_LOG_LEVEL 3 #endif // APP_USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef APP_USBD_CONFIG_INFO_COLOR #define APP_USBD_CONFIG_INFO_COLOR 0 #endif // APP_USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef APP_USBD_CONFIG_DEBUG_COLOR #define APP_USBD_CONFIG_DEBUG_COLOR 0 @@ -1665,35 +1665,35 @@ #define CLOCK_ENABLED 0 #endif // CLOCK_CONFIG_XTAL_FREQ - HF XTAL Frequency - -// <0=> Default (64 MHz) + +// <0=> Default (64 MHz) #ifndef CLOCK_CONFIG_XTAL_FREQ #define CLOCK_CONFIG_XTAL_FREQ 0 #endif // CLOCK_CONFIG_LF_SRC - LF Clock Source - -// <0=> RC -// <1=> XTAL -// <2=> Synth + +// <0=> RC +// <1=> XTAL +// <2=> Synth #ifndef CLOCK_CONFIG_LF_SRC #define CLOCK_CONFIG_LF_SRC 1 #endif // CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef CLOCK_CONFIG_IRQ_PRIORITY #define CLOCK_CONFIG_IRQ_PRIORITY 7 @@ -1707,83 +1707,83 @@ #define COMP_ENABLED 0 #endif // COMP_CONFIG_REF - Reference voltage - -// <0=> Internal 1.2V -// <1=> Internal 1.8V -// <2=> Internal 2.4V -// <4=> VDD -// <7=> ARef + +// <0=> Internal 1.2V +// <1=> Internal 1.8V +// <2=> Internal 2.4V +// <4=> VDD +// <7=> ARef #ifndef COMP_CONFIG_REF #define COMP_CONFIG_REF 1 #endif // COMP_CONFIG_MAIN_MODE - Main mode - -// <0=> Single ended -// <1=> Differential + +// <0=> Single ended +// <1=> Differential #ifndef COMP_CONFIG_MAIN_MODE #define COMP_CONFIG_MAIN_MODE 0 #endif // COMP_CONFIG_SPEED_MODE - Speed mode - -// <0=> Low power -// <1=> Normal -// <2=> High speed + +// <0=> Low power +// <1=> Normal +// <2=> High speed #ifndef COMP_CONFIG_SPEED_MODE #define COMP_CONFIG_SPEED_MODE 2 #endif // COMP_CONFIG_HYST - Hystheresis - -// <0=> No -// <1=> 50mV + +// <0=> No +// <1=> 50mV #ifndef COMP_CONFIG_HYST #define COMP_CONFIG_HYST 0 #endif // COMP_CONFIG_ISOURCE - Current Source - -// <0=> Off -// <1=> 2.5 uA -// <2=> 5 uA -// <3=> 10 uA + +// <0=> Off +// <1=> 2.5 uA +// <2=> 5 uA +// <3=> 10 uA #ifndef COMP_CONFIG_ISOURCE #define COMP_CONFIG_ISOURCE 0 #endif // COMP_CONFIG_INPUT - Analog input - -// <0=> 0 -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 + +// <0=> 0 +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef COMP_CONFIG_INPUT #define COMP_CONFIG_INPUT 0 #endif // COMP_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef COMP_CONFIG_IRQ_PRIORITY #define COMP_CONFIG_IRQ_PRIORITY 7 @@ -1792,7 +1792,7 @@ // // EGU_ENABLED - nrf_drv_swi - SWI(EGU) peripheral driver - + #ifndef EGU_ENABLED #define EGU_ENABLED 0 @@ -1803,23 +1803,23 @@ #ifndef GPIOTE_ENABLED #define GPIOTE_ENABLED 1 #endif -// GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS - Number of lower power input pins +// GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS - Number of lower power input pins #ifndef GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS #define GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS 4 #endif // GPIOTE_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef GPIOTE_CONFIG_IRQ_PRIORITY #define GPIOTE_CONFIG_IRQ_PRIORITY 7 @@ -1832,33 +1832,33 @@ #ifndef I2S_ENABLED #define I2S_ENABLED 0 #endif -// I2S_CONFIG_SCK_PIN - SCK pin <0-31> +// I2S_CONFIG_SCK_PIN - SCK pin <0-31> #ifndef I2S_CONFIG_SCK_PIN #define I2S_CONFIG_SCK_PIN 31 #endif -// I2S_CONFIG_LRCK_PIN - LRCK pin <1-31> +// I2S_CONFIG_LRCK_PIN - LRCK pin <1-31> #ifndef I2S_CONFIG_LRCK_PIN #define I2S_CONFIG_LRCK_PIN 30 #endif -// I2S_CONFIG_MCK_PIN - MCK pin +// I2S_CONFIG_MCK_PIN - MCK pin #ifndef I2S_CONFIG_MCK_PIN #define I2S_CONFIG_MCK_PIN 255 #endif -// I2S_CONFIG_SDOUT_PIN - SDOUT pin <0-31> +// I2S_CONFIG_SDOUT_PIN - SDOUT pin <0-31> #ifndef I2S_CONFIG_SDOUT_PIN #define I2S_CONFIG_SDOUT_PIN 29 #endif -// I2S_CONFIG_SDIN_PIN - SDIN pin <0-31> +// I2S_CONFIG_SDIN_PIN - SDIN pin <0-31> #ifndef I2S_CONFIG_SDIN_PIN @@ -1866,106 +1866,106 @@ #endif // I2S_CONFIG_MASTER - Mode - -// <0=> Master -// <1=> Slave + +// <0=> Master +// <1=> Slave #ifndef I2S_CONFIG_MASTER #define I2S_CONFIG_MASTER 0 #endif // I2S_CONFIG_FORMAT - Format - -// <0=> I2S -// <1=> Aligned + +// <0=> I2S +// <1=> Aligned #ifndef I2S_CONFIG_FORMAT #define I2S_CONFIG_FORMAT 0 #endif // I2S_CONFIG_ALIGN - Alignment - -// <0=> Left -// <1=> Right + +// <0=> Left +// <1=> Right #ifndef I2S_CONFIG_ALIGN #define I2S_CONFIG_ALIGN 0 #endif // I2S_CONFIG_SWIDTH - Sample width (bits) - -// <0=> 8 -// <1=> 16 -// <2=> 24 + +// <0=> 8 +// <1=> 16 +// <2=> 24 #ifndef I2S_CONFIG_SWIDTH #define I2S_CONFIG_SWIDTH 1 #endif // I2S_CONFIG_CHANNELS - Channels - -// <0=> Stereo -// <1=> Left -// <2=> Right + +// <0=> Stereo +// <1=> Left +// <2=> Right #ifndef I2S_CONFIG_CHANNELS #define I2S_CONFIG_CHANNELS 1 #endif // I2S_CONFIG_MCK_SETUP - MCK behavior - -// <0=> Disabled -// <2147483648=> 32MHz/2 -// <1342177280=> 32MHz/3 -// <1073741824=> 32MHz/4 -// <805306368=> 32MHz/5 -// <671088640=> 32MHz/6 -// <536870912=> 32MHz/8 -// <402653184=> 32MHz/10 -// <369098752=> 32MHz/11 -// <285212672=> 32MHz/15 -// <268435456=> 32MHz/16 -// <201326592=> 32MHz/21 -// <184549376=> 32MHz/23 -// <142606336=> 32MHz/30 -// <138412032=> 32MHz/31 -// <134217728=> 32MHz/32 -// <100663296=> 32MHz/42 -// <68157440=> 32MHz/63 -// <34340864=> 32MHz/125 + +// <0=> Disabled +// <2147483648=> 32MHz/2 +// <1342177280=> 32MHz/3 +// <1073741824=> 32MHz/4 +// <805306368=> 32MHz/5 +// <671088640=> 32MHz/6 +// <536870912=> 32MHz/8 +// <402653184=> 32MHz/10 +// <369098752=> 32MHz/11 +// <285212672=> 32MHz/15 +// <268435456=> 32MHz/16 +// <201326592=> 32MHz/21 +// <184549376=> 32MHz/23 +// <142606336=> 32MHz/30 +// <138412032=> 32MHz/31 +// <134217728=> 32MHz/32 +// <100663296=> 32MHz/42 +// <68157440=> 32MHz/63 +// <34340864=> 32MHz/125 #ifndef I2S_CONFIG_MCK_SETUP #define I2S_CONFIG_MCK_SETUP 536870912 #endif // I2S_CONFIG_RATIO - MCK/LRCK ratio - -// <0=> 32x -// <1=> 48x -// <2=> 64x -// <3=> 96x -// <4=> 128x -// <5=> 192x -// <6=> 256x -// <7=> 384x -// <8=> 512x + +// <0=> 32x +// <1=> 48x +// <2=> 64x +// <3=> 96x +// <4=> 128x +// <5=> 192x +// <6=> 256x +// <7=> 384x +// <8=> 512x #ifndef I2S_CONFIG_RATIO #define I2S_CONFIG_RATIO 2000 #endif // I2S_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef I2S_CONFIG_IRQ_PRIORITY #define I2S_CONFIG_IRQ_PRIORITY 7 @@ -1979,73 +1979,73 @@ #define LPCOMP_ENABLED 0 #endif // LPCOMP_CONFIG_REFERENCE - Reference voltage - -// <0=> Supply 1/8 -// <1=> Supply 2/8 -// <2=> Supply 3/8 -// <3=> Supply 4/8 -// <4=> Supply 5/8 -// <5=> Supply 6/8 -// <6=> Supply 7/8 -// <8=> Supply 1/16 (nRF52) -// <9=> Supply 3/16 (nRF52) -// <10=> Supply 5/16 (nRF52) -// <11=> Supply 7/16 (nRF52) -// <12=> Supply 9/16 (nRF52) -// <13=> Supply 11/16 (nRF52) -// <14=> Supply 13/16 (nRF52) -// <15=> Supply 15/16 (nRF52) -// <7=> External Ref 0 -// <65543=> External Ref 1 + +// <0=> Supply 1/8 +// <1=> Supply 2/8 +// <2=> Supply 3/8 +// <3=> Supply 4/8 +// <4=> Supply 5/8 +// <5=> Supply 6/8 +// <6=> Supply 7/8 +// <8=> Supply 1/16 (nRF52) +// <9=> Supply 3/16 (nRF52) +// <10=> Supply 5/16 (nRF52) +// <11=> Supply 7/16 (nRF52) +// <12=> Supply 9/16 (nRF52) +// <13=> Supply 11/16 (nRF52) +// <14=> Supply 13/16 (nRF52) +// <15=> Supply 15/16 (nRF52) +// <7=> External Ref 0 +// <65543=> External Ref 1 #ifndef LPCOMP_CONFIG_REFERENCE #define LPCOMP_CONFIG_REFERENCE 3 #endif // LPCOMP_CONFIG_DETECTION - Detection - -// <0=> Crossing -// <1=> Up -// <2=> Down + +// <0=> Crossing +// <1=> Up +// <2=> Down #ifndef LPCOMP_CONFIG_DETECTION #define LPCOMP_CONFIG_DETECTION 2 #endif // LPCOMP_CONFIG_INPUT - Analog input - -// <0=> 0 -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 + +// <0=> 0 +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef LPCOMP_CONFIG_INPUT #define LPCOMP_CONFIG_INPUT 0 #endif // LPCOMP_CONFIG_HYST - Hysteresis - + #ifndef LPCOMP_CONFIG_HYST #define LPCOMP_CONFIG_HYST 0 #endif // LPCOMP_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef LPCOMP_CONFIG_IRQ_PRIORITY #define LPCOMP_CONFIG_IRQ_PRIORITY 7 @@ -2059,45 +2059,45 @@ #define PDM_ENABLED 0 #endif // PDM_CONFIG_MODE - Mode - -// <0=> Stereo -// <1=> Mono + +// <0=> Stereo +// <1=> Mono #ifndef PDM_CONFIG_MODE #define PDM_CONFIG_MODE 1 #endif // PDM_CONFIG_EDGE - Edge - -// <0=> Left falling -// <1=> Left rising + +// <0=> Left falling +// <1=> Left rising #ifndef PDM_CONFIG_EDGE #define PDM_CONFIG_EDGE 0 #endif // PDM_CONFIG_CLOCK_FREQ - Clock frequency - -// <134217728=> 1000k -// <138412032=> 1032k (default) -// <142606336=> 1067k + +// <134217728=> 1000k +// <138412032=> 1032k (default) +// <142606336=> 1067k #ifndef PDM_CONFIG_CLOCK_FREQ #define PDM_CONFIG_CLOCK_FREQ 138412032 #endif // PDM_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef PDM_CONFIG_IRQ_PRIORITY #define PDM_CONFIG_IRQ_PRIORITY 7 @@ -2106,7 +2106,7 @@ // // PERIPHERAL_RESOURCE_SHARING_ENABLED - nrf_drv_common - Peripheral drivers common module - + #ifndef PERIPHERAL_RESOURCE_SHARING_ENABLED #define PERIPHERAL_RESOURCE_SHARING_ENABLED 1 @@ -2118,24 +2118,24 @@ #define POWER_ENABLED 0 #endif // POWER_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef POWER_CONFIG_IRQ_PRIORITY #define POWER_CONFIG_IRQ_PRIORITY 7 #endif // POWER_CONFIG_DEFAULT_DCDCEN - The default configuration of main DCDC regulator - + // This settings means only that components for DCDC regulator are installed and it can be enabled. @@ -2144,7 +2144,7 @@ #endif // POWER_CONFIG_DEFAULT_DCDCENHV - The default configuration of High Voltage DCDC regulator - + // This settings means only that components for DCDC regulator are installed and it can be enabled. @@ -2155,7 +2155,7 @@ // // PPI_ENABLED - nrf_drv_ppi - PPI peripheral driver - + #ifndef PPI_ENABLED #define PPI_ENABLED 0 @@ -2166,28 +2166,28 @@ #ifndef PWM_ENABLED #define PWM_ENABLED 1 #endif -// PWM_DEFAULT_CONFIG_OUT0_PIN - Out0 pin <0-31> +// PWM_DEFAULT_CONFIG_OUT0_PIN - Out0 pin <0-31> #ifndef PWM_DEFAULT_CONFIG_OUT0_PIN #define PWM_DEFAULT_CONFIG_OUT0_PIN 31 #endif -// PWM_DEFAULT_CONFIG_OUT1_PIN - Out1 pin <0-31> +// PWM_DEFAULT_CONFIG_OUT1_PIN - Out1 pin <0-31> #ifndef PWM_DEFAULT_CONFIG_OUT1_PIN #define PWM_DEFAULT_CONFIG_OUT1_PIN 31 #endif -// PWM_DEFAULT_CONFIG_OUT2_PIN - Out2 pin <0-31> +// PWM_DEFAULT_CONFIG_OUT2_PIN - Out2 pin <0-31> #ifndef PWM_DEFAULT_CONFIG_OUT2_PIN #define PWM_DEFAULT_CONFIG_OUT2_PIN 31 #endif -// PWM_DEFAULT_CONFIG_OUT3_PIN - Out3 pin <0-31> +// PWM_DEFAULT_CONFIG_OUT3_PIN - Out3 pin <0-31> #ifndef PWM_DEFAULT_CONFIG_OUT3_PIN @@ -2195,94 +2195,94 @@ #endif // PWM_DEFAULT_CONFIG_BASE_CLOCK - Base clock - -// <0=> 16 MHz -// <1=> 8 MHz -// <2=> 4 MHz -// <3=> 2 MHz -// <4=> 1 MHz -// <5=> 500 kHz -// <6=> 250 kHz -// <7=> 125 kHz + +// <0=> 16 MHz +// <1=> 8 MHz +// <2=> 4 MHz +// <3=> 2 MHz +// <4=> 1 MHz +// <5=> 500 kHz +// <6=> 250 kHz +// <7=> 125 kHz #ifndef PWM_DEFAULT_CONFIG_BASE_CLOCK #define PWM_DEFAULT_CONFIG_BASE_CLOCK 4 #endif // PWM_DEFAULT_CONFIG_COUNT_MODE - Count mode - -// <0=> Up -// <1=> Up and Down + +// <0=> Up +// <1=> Up and Down #ifndef PWM_DEFAULT_CONFIG_COUNT_MODE #define PWM_DEFAULT_CONFIG_COUNT_MODE 0 #endif -// PWM_DEFAULT_CONFIG_TOP_VALUE - Top value +// PWM_DEFAULT_CONFIG_TOP_VALUE - Top value #ifndef PWM_DEFAULT_CONFIG_TOP_VALUE #define PWM_DEFAULT_CONFIG_TOP_VALUE 1000 #endif // PWM_DEFAULT_CONFIG_LOAD_MODE - Load mode - -// <0=> Common -// <1=> Grouped -// <2=> Individual -// <3=> Waveform + +// <0=> Common +// <1=> Grouped +// <2=> Individual +// <3=> Waveform #ifndef PWM_DEFAULT_CONFIG_LOAD_MODE #define PWM_DEFAULT_CONFIG_LOAD_MODE 0 #endif // PWM_DEFAULT_CONFIG_STEP_MODE - Step mode - -// <0=> Auto -// <1=> Triggered + +// <0=> Auto +// <1=> Triggered #ifndef PWM_DEFAULT_CONFIG_STEP_MODE #define PWM_DEFAULT_CONFIG_STEP_MODE 0 #endif // PWM_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef PWM_DEFAULT_CONFIG_IRQ_PRIORITY #define PWM_DEFAULT_CONFIG_IRQ_PRIORITY 7 #endif // PWM0_ENABLED - Enable PWM0 instance - + #ifndef PWM0_ENABLED #define PWM0_ENABLED 1 #endif // PWM1_ENABLED - Enable PWM1 instance - + #ifndef PWM1_ENABLED #define PWM1_ENABLED 1 #endif // PWM2_ENABLED - Enable PWM2 instance - + #ifndef PWM2_ENABLED #define PWM2_ENABLED 1 #endif // PWM3_ENABLED - Enable PWM3 instance - + #ifndef PWM3_ENABLED #define PWM3_ENABLED 0 @@ -2296,96 +2296,96 @@ #define QDEC_ENABLED 0 #endif // QDEC_CONFIG_REPORTPER - Report period - -// <0=> 10 Samples -// <1=> 40 Samples -// <2=> 80 Samples -// <3=> 120 Samples -// <4=> 160 Samples -// <5=> 200 Samples -// <6=> 240 Samples -// <7=> 280 Samples + +// <0=> 10 Samples +// <1=> 40 Samples +// <2=> 80 Samples +// <3=> 120 Samples +// <4=> 160 Samples +// <5=> 200 Samples +// <6=> 240 Samples +// <7=> 280 Samples #ifndef QDEC_CONFIG_REPORTPER #define QDEC_CONFIG_REPORTPER 0 #endif // QDEC_CONFIG_SAMPLEPER - Sample period - -// <0=> 128 us -// <1=> 256 us -// <2=> 512 us -// <3=> 1024 us -// <4=> 2048 us -// <5=> 4096 us -// <6=> 8192 us -// <7=> 16384 us + +// <0=> 128 us +// <1=> 256 us +// <2=> 512 us +// <3=> 1024 us +// <4=> 2048 us +// <5=> 4096 us +// <6=> 8192 us +// <7=> 16384 us #ifndef QDEC_CONFIG_SAMPLEPER #define QDEC_CONFIG_SAMPLEPER 7 #endif -// QDEC_CONFIG_PIO_A - A pin <0-31> +// QDEC_CONFIG_PIO_A - A pin <0-31> #ifndef QDEC_CONFIG_PIO_A #define QDEC_CONFIG_PIO_A 31 #endif -// QDEC_CONFIG_PIO_B - B pin <0-31> +// QDEC_CONFIG_PIO_B - B pin <0-31> #ifndef QDEC_CONFIG_PIO_B #define QDEC_CONFIG_PIO_B 31 #endif -// QDEC_CONFIG_PIO_LED - LED pin <0-31> +// QDEC_CONFIG_PIO_LED - LED pin <0-31> #ifndef QDEC_CONFIG_PIO_LED #define QDEC_CONFIG_PIO_LED 31 #endif -// QDEC_CONFIG_LEDPRE - LED pre +// QDEC_CONFIG_LEDPRE - LED pre #ifndef QDEC_CONFIG_LEDPRE #define QDEC_CONFIG_LEDPRE 511 #endif // QDEC_CONFIG_LEDPOL - LED polarity - -// <0=> Active low -// <1=> Active high + +// <0=> Active low +// <1=> Active high #ifndef QDEC_CONFIG_LEDPOL #define QDEC_CONFIG_LEDPOL 1 #endif // QDEC_CONFIG_DBFEN - Debouncing enable - + #ifndef QDEC_CONFIG_DBFEN #define QDEC_CONFIG_DBFEN 0 #endif // QDEC_CONFIG_SAMPLE_INTEN - Sample ready interrupt enable - + #ifndef QDEC_CONFIG_SAMPLE_INTEN #define QDEC_CONFIG_SAMPLE_INTEN 0 #endif // QDEC_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef QDEC_CONFIG_IRQ_PRIORITY #define QDEC_CONFIG_IRQ_PRIORITY 7 @@ -2399,29 +2399,29 @@ #define RNG_ENABLED 1 #endif // RNG_CONFIG_ERROR_CORRECTION - Error correction - + #ifndef RNG_CONFIG_ERROR_CORRECTION #define RNG_CONFIG_ERROR_CORRECTION 1 #endif -// RNG_CONFIG_POOL_SIZE - Pool size +// RNG_CONFIG_POOL_SIZE - Pool size #ifndef RNG_CONFIG_POOL_SIZE #define RNG_CONFIG_POOL_SIZE 64 #endif // RNG_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef RNG_CONFIG_IRQ_PRIORITY #define RNG_CONFIG_IRQ_PRIORITY 7 @@ -2434,7 +2434,7 @@ #ifndef RTC_ENABLED #define RTC_ENABLED 0 #endif -// RTC_DEFAULT_CONFIG_FREQUENCY - Frequency <16-32768> +// RTC_DEFAULT_CONFIG_FREQUENCY - Frequency <16-32768> #ifndef RTC_DEFAULT_CONFIG_FREQUENCY @@ -2442,51 +2442,51 @@ #endif // RTC_DEFAULT_CONFIG_RELIABLE - Ensures safe compare event triggering - + #ifndef RTC_DEFAULT_CONFIG_RELIABLE #define RTC_DEFAULT_CONFIG_RELIABLE 0 #endif // RTC_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef RTC_DEFAULT_CONFIG_IRQ_PRIORITY #define RTC_DEFAULT_CONFIG_IRQ_PRIORITY 7 #endif // RTC0_ENABLED - Enable RTC0 instance - + #ifndef RTC0_ENABLED #define RTC0_ENABLED 0 #endif // RTC1_ENABLED - Enable RTC1 instance - + #ifndef RTC1_ENABLED #define RTC1_ENABLED 0 #endif // RTC2_ENABLED - Enable RTC2 instance - + #ifndef RTC2_ENABLED #define RTC2_ENABLED 0 #endif -// NRF_MAXIMUM_LATENCY_US - Maximum possible time[us] in highest priority interrupt +// NRF_MAXIMUM_LATENCY_US - Maximum possible time[us] in highest priority interrupt #ifndef NRF_MAXIMUM_LATENCY_US #define NRF_MAXIMUM_LATENCY_US 2000 #endif @@ -2499,51 +2499,51 @@ #define SAADC_ENABLED 1 #endif // SAADC_CONFIG_RESOLUTION - Resolution - -// <0=> 8 bit -// <1=> 10 bit -// <2=> 12 bit -// <3=> 14 bit + +// <0=> 8 bit +// <1=> 10 bit +// <2=> 12 bit +// <3=> 14 bit #ifndef SAADC_CONFIG_RESOLUTION #define SAADC_CONFIG_RESOLUTION 2 #endif // SAADC_CONFIG_OVERSAMPLE - Sample period - -// <0=> Disabled -// <1=> 2x -// <2=> 4x -// <3=> 8x -// <4=> 16x -// <5=> 32x -// <6=> 64x -// <7=> 128x -// <8=> 256x + +// <0=> Disabled +// <1=> 2x +// <2=> 4x +// <3=> 8x +// <4=> 16x +// <5=> 32x +// <6=> 64x +// <7=> 128x +// <8=> 256x #ifndef SAADC_CONFIG_OVERSAMPLE #define SAADC_CONFIG_OVERSAMPLE 0 #endif // SAADC_CONFIG_LP_MODE - Enabling low power mode - + #ifndef SAADC_CONFIG_LP_MODE #define SAADC_CONFIG_LP_MODE 0 #endif // SAADC_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef SAADC_CONFIG_IRQ_PRIORITY #define SAADC_CONFIG_IRQ_PRIORITY 7 @@ -2557,50 +2557,50 @@ #define SPIS_ENABLED 1 #endif // SPIS_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef SPIS_DEFAULT_CONFIG_IRQ_PRIORITY #define SPIS_DEFAULT_CONFIG_IRQ_PRIORITY 7 #endif // SPIS_DEFAULT_MODE - Mode - -// <0=> MODE_0 -// <1=> MODE_1 -// <2=> MODE_2 -// <3=> MODE_3 + +// <0=> MODE_0 +// <1=> MODE_1 +// <2=> MODE_2 +// <3=> MODE_3 #ifndef SPIS_DEFAULT_MODE #define SPIS_DEFAULT_MODE 0 #endif // SPIS_DEFAULT_BIT_ORDER - SPIS default bit order - -// <0=> MSB first -// <1=> LSB first + +// <0=> MSB first +// <1=> LSB first #ifndef SPIS_DEFAULT_BIT_ORDER #define SPIS_DEFAULT_BIT_ORDER 0 #endif -// SPIS_DEFAULT_DEF - SPIS default DEF character <0-255> +// SPIS_DEFAULT_DEF - SPIS default DEF character <0-255> #ifndef SPIS_DEFAULT_DEF #define SPIS_DEFAULT_DEF 255 #endif -// SPIS_DEFAULT_ORC - SPIS default ORC character <0-255> +// SPIS_DEFAULT_ORC - SPIS default ORC character <0-255> #ifndef SPIS_DEFAULT_ORC @@ -2608,21 +2608,21 @@ #endif // SPIS0_ENABLED - Enable SPIS0 instance - + #ifndef SPIS0_ENABLED #define SPIS0_ENABLED 1 #endif // SPIS1_ENABLED - Enable SPIS1 instance - + #ifndef SPIS1_ENABLED #define SPIS1_ENABLED 0 #endif // SPIS2_ENABLED - Enable SPIS2 instance - + #ifndef SPIS2_ENABLED #define SPIS2_ENABLED 0 @@ -2636,27 +2636,27 @@ #define SPI_ENABLED 1 #endif // SPI_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef SPI_DEFAULT_CONFIG_IRQ_PRIORITY #define SPI_DEFAULT_CONFIG_IRQ_PRIORITY 7 #endif // NRF_SPI_DRV_MISO_PULLUP_CFG - MISO PIN pull-up configuration. - -// <0=> NRF_GPIO_PIN_NOPULL -// <1=> NRF_GPIO_PIN_PULLDOWN -// <3=> NRF_GPIO_PIN_PULLUP + +// <0=> NRF_GPIO_PIN_NOPULL +// <1=> NRF_GPIO_PIN_PULLDOWN +// <3=> NRF_GPIO_PIN_PULLUP #ifndef NRF_SPI_DRV_MISO_PULLUP_CFG #define NRF_SPI_DRV_MISO_PULLUP_CFG 1 @@ -2668,21 +2668,21 @@ #define SPI0_ENABLED 1 #endif // SPI0_USE_EASY_DMA - Use EasyDMA - + #ifndef SPI0_USE_EASY_DMA #define SPI0_USE_EASY_DMA 0 #endif // SPI0_DEFAULT_FREQUENCY - SPI frequency - -// <33554432=> 125 kHz -// <67108864=> 250 kHz -// <134217728=> 500 kHz -// <268435456=> 1 MHz -// <536870912=> 2 MHz -// <1073741824=> 4 MHz -// <2147483648=> 8 MHz + +// <33554432=> 125 kHz +// <67108864=> 250 kHz +// <134217728=> 500 kHz +// <268435456=> 1 MHz +// <536870912=> 2 MHz +// <1073741824=> 4 MHz +// <2147483648=> 8 MHz #ifndef SPI0_DEFAULT_FREQUENCY #define SPI0_DEFAULT_FREQUENCY 1073741824 @@ -2696,21 +2696,21 @@ #define SPI1_ENABLED 1 #endif // SPI1_USE_EASY_DMA - Use EasyDMA - + #ifndef SPI1_USE_EASY_DMA #define SPI1_USE_EASY_DMA 0 #endif // SPI1_DEFAULT_FREQUENCY - SPI frequency - -// <33554432=> 125 kHz -// <67108864=> 250 kHz -// <134217728=> 500 kHz -// <268435456=> 1 MHz -// <536870912=> 2 MHz -// <1073741824=> 4 MHz -// <2147483648=> 8 MHz + +// <33554432=> 125 kHz +// <67108864=> 250 kHz +// <134217728=> 500 kHz +// <268435456=> 1 MHz +// <536870912=> 2 MHz +// <1073741824=> 4 MHz +// <2147483648=> 8 MHz #ifndef SPI1_DEFAULT_FREQUENCY #define SPI1_DEFAULT_FREQUENCY 1073741824 @@ -2724,21 +2724,21 @@ #define SPI2_ENABLED 1 #endif // SPI2_USE_EASY_DMA - Use EasyDMA - + #ifndef SPI2_USE_EASY_DMA #define SPI2_USE_EASY_DMA 0 #endif // SPI2_DEFAULT_FREQUENCY - SPI frequency - -// <33554432=> 125 kHz -// <67108864=> 250 kHz -// <134217728=> 500 kHz -// <268435456=> 1 MHz -// <536870912=> 2 MHz -// <1073741824=> 4 MHz -// <2147483648=> 8 MHz + +// <33554432=> 125 kHz +// <67108864=> 250 kHz +// <134217728=> 500 kHz +// <268435456=> 1 MHz +// <536870912=> 2 MHz +// <1073741824=> 4 MHz +// <2147483648=> 8 MHz #ifndef SPI2_DEFAULT_FREQUENCY #define SPI2_DEFAULT_FREQUENCY 1073741824 @@ -2754,89 +2754,89 @@ #define TIMER_ENABLED 0 #endif // TIMER_DEFAULT_CONFIG_FREQUENCY - Timer frequency if in Timer mode - -// <0=> 16 MHz -// <1=> 8 MHz -// <2=> 4 MHz -// <3=> 2 MHz -// <4=> 1 MHz -// <5=> 500 kHz -// <6=> 250 kHz -// <7=> 125 kHz -// <8=> 62.5 kHz -// <9=> 31.25 kHz + +// <0=> 16 MHz +// <1=> 8 MHz +// <2=> 4 MHz +// <3=> 2 MHz +// <4=> 1 MHz +// <5=> 500 kHz +// <6=> 250 kHz +// <7=> 125 kHz +// <8=> 62.5 kHz +// <9=> 31.25 kHz #ifndef TIMER_DEFAULT_CONFIG_FREQUENCY #define TIMER_DEFAULT_CONFIG_FREQUENCY 0 #endif // TIMER_DEFAULT_CONFIG_MODE - Timer mode or operation - -// <0=> Timer -// <1=> Counter + +// <0=> Timer +// <1=> Counter #ifndef TIMER_DEFAULT_CONFIG_MODE #define TIMER_DEFAULT_CONFIG_MODE 0 #endif // TIMER_DEFAULT_CONFIG_BIT_WIDTH - Timer counter bit width - -// <0=> 16 bit -// <1=> 8 bit -// <2=> 24 bit -// <3=> 32 bit + +// <0=> 16 bit +// <1=> 8 bit +// <2=> 24 bit +// <3=> 32 bit #ifndef TIMER_DEFAULT_CONFIG_BIT_WIDTH #define TIMER_DEFAULT_CONFIG_BIT_WIDTH 0 #endif // TIMER_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef TIMER_DEFAULT_CONFIG_IRQ_PRIORITY #define TIMER_DEFAULT_CONFIG_IRQ_PRIORITY 7 #endif // TIMER0_ENABLED - Enable TIMER0 instance - + #ifndef TIMER0_ENABLED #define TIMER0_ENABLED 0 #endif // TIMER1_ENABLED - Enable TIMER1 instance - + #ifndef TIMER1_ENABLED #define TIMER1_ENABLED 0 #endif // TIMER2_ENABLED - Enable TIMER2 instance - + #ifndef TIMER2_ENABLED #define TIMER2_ENABLED 0 #endif // TIMER3_ENABLED - Enable TIMER3 instance - + #ifndef TIMER3_ENABLED #define TIMER3_ENABLED 0 #endif // TIMER4_ENABLED - Enable TIMER4 instance - + #ifndef TIMER4_ENABLED #define TIMER4_ENABLED 0 @@ -2849,69 +2849,69 @@ #ifndef TWIS_ENABLED #define TWIS_ENABLED 0 #endif -// TWIS_DEFAULT_CONFIG_ADDR0 - Address0 +// TWIS_DEFAULT_CONFIG_ADDR0 - Address0 #ifndef TWIS_DEFAULT_CONFIG_ADDR0 #define TWIS_DEFAULT_CONFIG_ADDR0 0 #endif -// TWIS_DEFAULT_CONFIG_ADDR1 - Address1 +// TWIS_DEFAULT_CONFIG_ADDR1 - Address1 #ifndef TWIS_DEFAULT_CONFIG_ADDR1 #define TWIS_DEFAULT_CONFIG_ADDR1 0 #endif // TWIS_DEFAULT_CONFIG_SCL_PULL - SCL pin pull configuration - -// <0=> Disabled -// <1=> Pull down -// <3=> Pull up + +// <0=> Disabled +// <1=> Pull down +// <3=> Pull up #ifndef TWIS_DEFAULT_CONFIG_SCL_PULL #define TWIS_DEFAULT_CONFIG_SCL_PULL 0 #endif // TWIS_DEFAULT_CONFIG_SDA_PULL - SDA pin pull configuration - -// <0=> Disabled -// <1=> Pull down -// <3=> Pull up + +// <0=> Disabled +// <1=> Pull down +// <3=> Pull up #ifndef TWIS_DEFAULT_CONFIG_SDA_PULL #define TWIS_DEFAULT_CONFIG_SDA_PULL 0 #endif // TWIS_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef TWIS_DEFAULT_CONFIG_IRQ_PRIORITY #define TWIS_DEFAULT_CONFIG_IRQ_PRIORITY 7 #endif // TWIS0_ENABLED - Enable TWIS0 instance - + #ifndef TWIS0_ENABLED #define TWIS0_ENABLED 0 #endif // TWIS1_ENABLED - Enable TWIS1 instance - + #ifndef TWIS1_ENABLED #define TWIS1_ENABLED 0 #endif // TWIS_ASSUME_INIT_AFTER_RESET_ONLY - Assume that any instance would be initialized only once - + // Optimization flag. Registers used by TWIS are shared by other peripherals. Normally, during initialization driver tries to clear all registers to known state before doing the initialization itself. This gives initialization safe procedure, no matter when it would be called. If you activate TWIS only once and do never uninitialize it - set this flag to 1 what gives more optimal code. @@ -2920,7 +2920,7 @@ #endif // TWIS_NO_SYNC_MODE - Remove support for synchronous mode - + // Synchronous mode would be used in specific situations. And it uses some additional code and data memory to safely process state machine by polling it in status functions. If this functionality is not required it may be disabled to free some resources. @@ -2936,41 +2936,41 @@ #define TWI_ENABLED 1 #endif // TWI_DEFAULT_CONFIG_FREQUENCY - Frequency - -// <26738688=> 100k -// <67108864=> 250k -// <104857600=> 400k + +// <26738688=> 100k +// <67108864=> 250k +// <104857600=> 400k #ifndef TWI_DEFAULT_CONFIG_FREQUENCY #define TWI_DEFAULT_CONFIG_FREQUENCY 26738688 #endif // TWI_DEFAULT_CONFIG_CLR_BUS_INIT - Enables bus clearing procedure during init - + #ifndef TWI_DEFAULT_CONFIG_CLR_BUS_INIT #define TWI_DEFAULT_CONFIG_CLR_BUS_INIT 0 #endif // TWI_DEFAULT_CONFIG_HOLD_BUS_UNINIT - Enables bus holding after uninit - + #ifndef TWI_DEFAULT_CONFIG_HOLD_BUS_UNINIT #define TWI_DEFAULT_CONFIG_HOLD_BUS_UNINIT 0 #endif // TWI_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef TWI_DEFAULT_CONFIG_IRQ_PRIORITY #define TWI_DEFAULT_CONFIG_IRQ_PRIORITY 7 @@ -2982,7 +2982,7 @@ #define TWI0_ENABLED 1 #endif // TWI0_USE_EASY_DMA - Use EasyDMA (if present) - + #ifndef TWI0_USE_EASY_DMA #define TWI0_USE_EASY_DMA 0 @@ -2996,7 +2996,7 @@ #define TWI1_ENABLED 1 #endif // TWI1_USE_EASY_DMA - Use EasyDMA (if present) - + #ifndef TWI1_USE_EASY_DMA #define TWI1_USE_EASY_DMA 0 @@ -3012,72 +3012,72 @@ #define UART_ENABLED 1 #endif // UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control - -// <0=> Disabled -// <1=> Enabled + +// <0=> Disabled +// <1=> Enabled #ifndef UART_DEFAULT_CONFIG_HWFC #define UART_DEFAULT_CONFIG_HWFC 1 #endif // UART_DEFAULT_CONFIG_PARITY - Parity - -// <0=> Excluded -// <14=> Included + +// <0=> Excluded +// <14=> Included #ifndef UART_DEFAULT_CONFIG_PARITY #define UART_DEFAULT_CONFIG_PARITY 0 #endif // UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate - -// <323584=> 1200 baud -// <643072=> 2400 baud -// <1290240=> 4800 baud -// <2576384=> 9600 baud -// <3862528=> 14400 baud -// <5152768=> 19200 baud -// <7716864=> 28800 baud -// <10289152=> 38400 baud -// <15400960=> 57600 baud -// <20615168=> 76800 baud -// <30801920=> 115200 baud -// <61865984=> 230400 baud -// <67108864=> 250000 baud -// <121634816=> 460800 baud -// <251658240=> 921600 baud -// <268435456=> 1000000 baud + +// <323584=> 1200 baud +// <643072=> 2400 baud +// <1290240=> 4800 baud +// <2576384=> 9600 baud +// <3862528=> 14400 baud +// <5152768=> 19200 baud +// <7716864=> 28800 baud +// <10289152=> 38400 baud +// <15400960=> 57600 baud +// <20615168=> 76800 baud +// <30801920=> 115200 baud +// <61865984=> 230400 baud +// <67108864=> 250000 baud +// <121634816=> 460800 baud +// <251658240=> 921600 baud +// <268435456=> 1000000 baud #ifndef UART_DEFAULT_CONFIG_BAUDRATE #define UART_DEFAULT_CONFIG_BAUDRATE 2576384 #endif // UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef UART_DEFAULT_CONFIG_IRQ_PRIORITY #define UART_DEFAULT_CONFIG_IRQ_PRIORITY 7 #endif // UART_EASY_DMA_SUPPORT - Driver supporting EasyDMA - + #ifndef UART_EASY_DMA_SUPPORT #define UART_EASY_DMA_SUPPORT 1 #endif // UART_LEGACY_SUPPORT - Driver supporting Legacy mode - + #ifndef UART_LEGACY_SUPPORT #define UART_LEGACY_SUPPORT 1 @@ -3089,7 +3089,7 @@ #define UART0_ENABLED 1 #endif // UART0_CONFIG_USE_EASY_DMA - Default setting for using EasyDMA - + #ifndef UART0_CONFIG_USE_EASY_DMA #define UART0_CONFIG_USE_EASY_DMA 1 @@ -3103,7 +3103,7 @@ #define UART1_ENABLED 0 #endif // UART1_CONFIG_USE_EASY_DMA - Default setting for using EasyDMA - + #ifndef UART1_CONFIG_USE_EASY_DMA #define UART1_CONFIG_USE_EASY_DMA 1 @@ -3119,26 +3119,26 @@ #define USBD_ENABLED 0 #endif // USBD_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef USBD_CONFIG_IRQ_PRIORITY #define USBD_CONFIG_IRQ_PRIORITY 7 #endif // NRF_DRV_USBD_DMASCHEDULER_MODE - USBD SMA scheduler working scheme - -// <0=> Prioritized access -// <1=> Round Robin + +// <0=> Prioritized access +// <1=> Round Robin #ifndef NRF_DRV_USBD_DMASCHEDULER_MODE #define NRF_DRV_USBD_DMASCHEDULER_MODE 0 @@ -3152,17 +3152,17 @@ #define WDT_ENABLED 0 #endif // WDT_CONFIG_BEHAVIOUR - WDT behavior in CPU SLEEP or HALT mode - -// <1=> Run in SLEEP, Pause in HALT -// <8=> Pause in SLEEP, Run in HALT -// <9=> Run in SLEEP and HALT -// <0=> Pause in SLEEP and HALT + +// <1=> Run in SLEEP, Pause in HALT +// <8=> Pause in SLEEP, Run in HALT +// <9=> Run in SLEEP and HALT +// <0=> Pause in SLEEP and HALT #ifndef WDT_CONFIG_BEHAVIOUR #define WDT_CONFIG_BEHAVIOUR 1 #endif -// WDT_CONFIG_RELOAD_VALUE - Reload value <15-4294967295> +// WDT_CONFIG_RELOAD_VALUE - Reload value <15-4294967295> #ifndef WDT_CONFIG_RELOAD_VALUE @@ -3170,17 +3170,17 @@ #endif // WDT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef WDT_CONFIG_IRQ_PRIORITY #define WDT_CONFIG_IRQ_PRIORITY 7 @@ -3188,21 +3188,21 @@ // -// +// //========================================================== -// nRF_Libraries +// nRF_Libraries //========================================================== // APP_GPIOTE_ENABLED - app_gpiote - GPIOTE events dispatcher - + #ifndef APP_GPIOTE_ENABLED #define APP_GPIOTE_ENABLED 0 #endif // APP_PWM_ENABLED - app_pwm - PWM functionality - + #ifndef APP_PWM_ENABLED #define APP_PWM_ENABLED 0 @@ -3214,14 +3214,14 @@ #define APP_SCHEDULER_ENABLED 0 #endif // APP_SCHEDULER_WITH_PAUSE - Enabling pause feature - + #ifndef APP_SCHEDULER_WITH_PAUSE #define APP_SCHEDULER_WITH_PAUSE 0 #endif // APP_SCHEDULER_WITH_PROFILER - Enabling scheduler profiling - + #ifndef APP_SCHEDULER_WITH_PROFILER #define APP_SCHEDULER_WITH_PROFILER 0 @@ -3235,36 +3235,36 @@ #define APP_TIMER_ENABLED 0 #endif // APP_TIMER_CONFIG_RTC_FREQUENCY - Configure RTC prescaler. - -// <0=> 32768 Hz -// <1=> 16384 Hz -// <3=> 8192 Hz -// <7=> 4096 Hz -// <15=> 2048 Hz -// <31=> 1024 Hz + +// <0=> 32768 Hz +// <1=> 16384 Hz +// <3=> 8192 Hz +// <7=> 4096 Hz +// <15=> 2048 Hz +// <31=> 1024 Hz #ifndef APP_TIMER_CONFIG_RTC_FREQUENCY #define APP_TIMER_CONFIG_RTC_FREQUENCY 0 #endif // APP_TIMER_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef APP_TIMER_CONFIG_IRQ_PRIORITY #define APP_TIMER_CONFIG_IRQ_PRIORITY 7 #endif -// APP_TIMER_CONFIG_OP_QUEUE_SIZE - Capacity of timer requests queue. +// APP_TIMER_CONFIG_OP_QUEUE_SIZE - Capacity of timer requests queue. // Size of the queue depends on how many timers are used // in the system, how often timers are started and overall // system latency. If queue size is too small app_timer calls @@ -3275,21 +3275,21 @@ #endif // APP_TIMER_CONFIG_USE_SCHEDULER - Enable scheduling app_timer events to app_scheduler - + #ifndef APP_TIMER_CONFIG_USE_SCHEDULER #define APP_TIMER_CONFIG_USE_SCHEDULER 0 #endif // APP_TIMER_WITH_PROFILER - Enable app_timer profiling - + #ifndef APP_TIMER_WITH_PROFILER #define APP_TIMER_WITH_PROFILER 0 #endif // APP_TIMER_KEEPS_RTC_ACTIVE - Enable RTC always on - + // If option is enabled RTC is kept running even if there is no active timers. // This option can be used when app_timer is used for timestamping. @@ -3299,9 +3299,9 @@ #endif // APP_TIMER_CONFIG_SWI_NUMBER - Configure SWI instance used. - -// <0=> 0 -// <1=> 1 + +// <0=> 0 +// <1=> 1 #ifndef APP_TIMER_CONFIG_SWI_NUMBER #define APP_TIMER_CONFIG_SWI_NUMBER 0 @@ -3310,7 +3310,7 @@ // // NRF_TWI_MNGR_ENABLED - nrf_twi_mngr - TWI transaction manager - + #ifndef NRF_TWI_MNGR_ENABLED #define NRF_TWI_MNGR_ENABLED 0 @@ -3322,8 +3322,8 @@ #define APP_UART_ENABLED 0 #endif // APP_UART_DRIVER_INSTANCE - UART instance used - -// <0=> 0 + +// <0=> 0 #ifndef APP_UART_DRIVER_INSTANCE #define APP_UART_DRIVER_INSTANCE 0 @@ -3332,77 +3332,77 @@ // // APP_USBD_CLASS_AUDIO_ENABLED - app_usbd_audio - USB AUDIO class - + #ifndef APP_USBD_CLASS_AUDIO_ENABLED #define APP_USBD_CLASS_AUDIO_ENABLED 0 #endif // APP_USBD_CLASS_CDC_ACM_ENABLED - app_usbd_cdc_acm - USB CDC ACM class - + #ifndef APP_USBD_CLASS_CDC_ACM_ENABLED #define APP_USBD_CLASS_CDC_ACM_ENABLED 0 #endif // APP_USBD_CLASS_HID_ENABLED - app_usbd_hid - USB HID class - + #ifndef APP_USBD_CLASS_HID_ENABLED #define APP_USBD_CLASS_HID_ENABLED 0 #endif // APP_USBD_HID_GENERIC_ENABLED - app_usbd_hid_generic - USB HID generic - + #ifndef APP_USBD_HID_GENERIC_ENABLED #define APP_USBD_HID_GENERIC_ENABLED 0 #endif // APP_USBD_HID_KBD_ENABLED - app_usbd_hid_kbd - USB HID keyboard - + #ifndef APP_USBD_HID_KBD_ENABLED #define APP_USBD_HID_KBD_ENABLED 0 #endif // APP_USBD_HID_MOUSE_ENABLED - app_usbd_hid_mouse - USB HID mouse - + #ifndef APP_USBD_HID_MOUSE_ENABLED #define APP_USBD_HID_MOUSE_ENABLED 0 #endif // APP_USBD_MSC_ENABLED - app_usbd_msc - USB MSC class - + #ifndef APP_USBD_MSC_ENABLED #define APP_USBD_MSC_ENABLED 0 #endif // BUTTON_ENABLED - app_button - buttons handling module - + #ifndef BUTTON_ENABLED #define BUTTON_ENABLED 0 #endif // CRC16_ENABLED - crc16 - CRC16 calculation routines - + #ifndef CRC16_ENABLED #define CRC16_ENABLED 0 #endif // CRC32_ENABLED - crc32 - CRC32 calculation routines - + #ifndef CRC32_ENABLED #define CRC32_ENABLED 0 #endif // ECC_ENABLED - ecc - Elliptic Curve Cryptography Library - + #ifndef ECC_ENABLED #define ECC_ENABLED 0 @@ -3417,7 +3417,7 @@ // Configure the number of virtual pages to use and their size. //========================================================== -// FDS_VIRTUAL_PAGES - Number of virtual flash pages to use. +// FDS_VIRTUAL_PAGES - Number of virtual flash pages to use. // One of the virtual pages is reserved by the system for garbage collection. // Therefore, the minimum is two virtual pages: one page to store data and one page to be used by the system for garbage collection. // The total amount of flash memory that is used by FDS amounts to @ref FDS_VIRTUAL_PAGES * @ref FDS_VIRTUAL_PAGE_SIZE * 4 bytes. @@ -3427,19 +3427,19 @@ #endif // FDS_VIRTUAL_PAGE_SIZE - The size of a virtual flash page. - + // Expressed in number of 4-byte words. // By default, a virtual page is the same size as a physical page. // The size of a virtual page must be a multiple of the size of a physical page. -// <1024=> 1024 -// <2048=> 2048 +// <1024=> 1024 +// <2048=> 2048 #ifndef FDS_VIRTUAL_PAGE_SIZE #define FDS_VIRTUAL_PAGE_SIZE 1024 #endif -// +// //========================================================== // Backend - Backend configuration @@ -3447,31 +3447,31 @@ // Configure which nrf_fstorage backend is used by FDS to write to flash. //========================================================== // FDS_BACKEND - FDS flash backend. - + // NRF_FSTORAGE_SD uses the nrf_fstorage_sd backend implementation using the SoftDevice API. Use this if you have a SoftDevice present. // NRF_FSTORAGE_NVMC uses the nrf_fstorage_nvmc implementation. Use this setting if you don't use the SoftDevice. -// <1=> NRF_FSTORAGE_NVMC -// <2=> NRF_FSTORAGE_SD +// <1=> NRF_FSTORAGE_NVMC +// <2=> NRF_FSTORAGE_SD #ifndef FDS_BACKEND #define FDS_BACKEND 1 #endif -// +// //========================================================== // Queue - Queue settings //========================================================== -// FDS_OP_QUEUE_SIZE - Size of the internal queue. +// FDS_OP_QUEUE_SIZE - Size of the internal queue. // Increase this value if you frequently get synchronous FDS_ERR_NO_SPACE_IN_QUEUES errors. #ifndef FDS_OP_QUEUE_SIZE #define FDS_OP_QUEUE_SIZE 4 #endif -// +// //========================================================== // CRC - CRC functionality @@ -3487,12 +3487,12 @@ #define FDS_CRC_CHECK_ON_READ 0 #endif // FDS_CRC_CHECK_ON_WRITE - Perform a CRC check on newly written records. - + // Perform a CRC check on newly written records. // This setting can be used to make sure that the record data was not altered while being written to flash. -// <1=> Enabled -// <0=> Disabled +// <1=> Enabled +// <0=> Disabled #ifndef FDS_CRC_CHECK_ON_WRITE #define FDS_CRC_CHECK_ON_WRITE 0 @@ -3500,18 +3500,18 @@ // -// +// //========================================================== // Users - Number of users //========================================================== -// FDS_MAX_USERS - Maximum number of callbacks that can be registered. +// FDS_MAX_USERS - Maximum number of callbacks that can be registered. #ifndef FDS_MAX_USERS #define FDS_MAX_USERS 4 #endif -// +// //========================================================== // @@ -3522,7 +3522,7 @@ #define HARDFAULT_HANDLER_ENABLED 0 #endif // HARDFAULT_HANDLER_GDB_PSP_BACKTRACE - Bypass the GDB problem with multiple stack pointers backtrace - + // There is a known bug in GDB which causes it to incorrectly backtrace the code // when multiple stack pointers are used (main and process stack pointers). @@ -3543,17 +3543,17 @@ #ifndef HCI_MEM_POOL_ENABLED #define HCI_MEM_POOL_ENABLED 0 #endif -// HCI_TX_BUF_SIZE - TX buffer size in bytes. +// HCI_TX_BUF_SIZE - TX buffer size in bytes. #ifndef HCI_TX_BUF_SIZE #define HCI_TX_BUF_SIZE 600 #endif -// HCI_RX_BUF_SIZE - RX buffer size in bytes. +// HCI_RX_BUF_SIZE - RX buffer size in bytes. #ifndef HCI_RX_BUF_SIZE #define HCI_RX_BUF_SIZE 600 #endif -// HCI_RX_BUF_QUEUE_SIZE - RX buffer queue size. +// HCI_RX_BUF_QUEUE_SIZE - RX buffer queue size. #ifndef HCI_RX_BUF_QUEUE_SIZE #define HCI_RX_BUF_QUEUE_SIZE 4 #endif @@ -3566,53 +3566,53 @@ #define HCI_SLIP_ENABLED 0 #endif // HCI_UART_BAUDRATE - Default Baudrate - -// <323584=> 1200 baud -// <643072=> 2400 baud -// <1290240=> 4800 baud -// <2576384=> 9600 baud -// <3862528=> 14400 baud -// <5152768=> 19200 baud -// <7716864=> 28800 baud -// <10289152=> 38400 baud -// <15400960=> 57600 baud -// <20615168=> 76800 baud -// <30801920=> 115200 baud -// <61865984=> 230400 baud -// <67108864=> 250000 baud -// <121634816=> 460800 baud -// <251658240=> 921600 baud -// <268435456=> 1000000 baud + +// <323584=> 1200 baud +// <643072=> 2400 baud +// <1290240=> 4800 baud +// <2576384=> 9600 baud +// <3862528=> 14400 baud +// <5152768=> 19200 baud +// <7716864=> 28800 baud +// <10289152=> 38400 baud +// <15400960=> 57600 baud +// <20615168=> 76800 baud +// <30801920=> 115200 baud +// <61865984=> 230400 baud +// <67108864=> 250000 baud +// <121634816=> 460800 baud +// <251658240=> 921600 baud +// <268435456=> 1000000 baud #ifndef HCI_UART_BAUDRATE #define HCI_UART_BAUDRATE 30801920 #endif // HCI_UART_FLOW_CONTROL - Hardware Flow Control - -// <0=> Disabled -// <1=> Enabled + +// <0=> Disabled +// <1=> Enabled #ifndef HCI_UART_FLOW_CONTROL #define HCI_UART_FLOW_CONTROL 0 #endif -// HCI_UART_RX_PIN - UART RX pin +// HCI_UART_RX_PIN - UART RX pin #ifndef HCI_UART_RX_PIN #define HCI_UART_RX_PIN 8 #endif -// HCI_UART_TX_PIN - UART TX pin +// HCI_UART_TX_PIN - UART TX pin #ifndef HCI_UART_TX_PIN #define HCI_UART_TX_PIN 6 #endif -// HCI_UART_RTS_PIN - UART RTS pin +// HCI_UART_RTS_PIN - UART RTS pin #ifndef HCI_UART_RTS_PIN #define HCI_UART_RTS_PIN 5 #endif -// HCI_UART_CTS_PIN - UART CTS pin +// HCI_UART_CTS_PIN - UART CTS pin #ifndef HCI_UART_CTS_PIN #define HCI_UART_CTS_PIN 7 #endif @@ -3624,7 +3624,7 @@ #ifndef HCI_TRANSPORT_ENABLED #define HCI_TRANSPORT_ENABLED 0 #endif -// HCI_MAX_PACKET_SIZE_IN_BITS - Maximum size of a single application packet in bits. +// HCI_MAX_PACKET_SIZE_IN_BITS - Maximum size of a single application packet in bits. #ifndef HCI_MAX_PACKET_SIZE_IN_BITS #define HCI_MAX_PACKET_SIZE_IN_BITS 8000 #endif @@ -3632,14 +3632,14 @@ // // LED_SOFTBLINK_ENABLED - led_softblink - led_softblink module - + #ifndef LED_SOFTBLINK_ENABLED #define LED_SOFTBLINK_ENABLED 0 #endif // LOW_POWER_PWM_ENABLED - low_power_pwm - low_power_pwm module - + #ifndef LOW_POWER_PWM_ENABLED #define LOW_POWER_PWM_ENABLED 0 @@ -3650,98 +3650,98 @@ #ifndef MEM_MANAGER_ENABLED #define MEM_MANAGER_ENABLED 0 #endif -// MEMORY_MANAGER_SMALL_BLOCK_COUNT - Size of each memory blocks identified as 'small' block. <0-255> +// MEMORY_MANAGER_SMALL_BLOCK_COUNT - Size of each memory blocks identified as 'small' block. <0-255> #ifndef MEMORY_MANAGER_SMALL_BLOCK_COUNT #define MEMORY_MANAGER_SMALL_BLOCK_COUNT 1 #endif -// MEMORY_MANAGER_SMALL_BLOCK_SIZE - Size of each memory blocks identified as 'small' block. +// MEMORY_MANAGER_SMALL_BLOCK_SIZE - Size of each memory blocks identified as 'small' block. // Size of each memory blocks identified as 'small' block. Memory block are recommended to be word-sized. #ifndef MEMORY_MANAGER_SMALL_BLOCK_SIZE #define MEMORY_MANAGER_SMALL_BLOCK_SIZE 32 #endif -// MEMORY_MANAGER_MEDIUM_BLOCK_COUNT - Size of each memory blocks identified as 'medium' block. <0-255> +// MEMORY_MANAGER_MEDIUM_BLOCK_COUNT - Size of each memory blocks identified as 'medium' block. <0-255> #ifndef MEMORY_MANAGER_MEDIUM_BLOCK_COUNT #define MEMORY_MANAGER_MEDIUM_BLOCK_COUNT 0 #endif -// MEMORY_MANAGER_MEDIUM_BLOCK_SIZE - Size of each memory blocks identified as 'medium' block. +// MEMORY_MANAGER_MEDIUM_BLOCK_SIZE - Size of each memory blocks identified as 'medium' block. // Size of each memory blocks identified as 'medium' block. Memory block are recommended to be word-sized. #ifndef MEMORY_MANAGER_MEDIUM_BLOCK_SIZE #define MEMORY_MANAGER_MEDIUM_BLOCK_SIZE 256 #endif -// MEMORY_MANAGER_LARGE_BLOCK_COUNT - Size of each memory blocks identified as 'large' block. <0-255> +// MEMORY_MANAGER_LARGE_BLOCK_COUNT - Size of each memory blocks identified as 'large' block. <0-255> #ifndef MEMORY_MANAGER_LARGE_BLOCK_COUNT #define MEMORY_MANAGER_LARGE_BLOCK_COUNT 0 #endif -// MEMORY_MANAGER_LARGE_BLOCK_SIZE - Size of each memory blocks identified as 'large' block. +// MEMORY_MANAGER_LARGE_BLOCK_SIZE - Size of each memory blocks identified as 'large' block. // Size of each memory blocks identified as 'large' block. Memory block are recommended to be word-sized. #ifndef MEMORY_MANAGER_LARGE_BLOCK_SIZE #define MEMORY_MANAGER_LARGE_BLOCK_SIZE 256 #endif -// MEMORY_MANAGER_XLARGE_BLOCK_COUNT - Size of each memory blocks identified as 'extra large' block. <0-255> +// MEMORY_MANAGER_XLARGE_BLOCK_COUNT - Size of each memory blocks identified as 'extra large' block. <0-255> #ifndef MEMORY_MANAGER_XLARGE_BLOCK_COUNT #define MEMORY_MANAGER_XLARGE_BLOCK_COUNT 0 #endif -// MEMORY_MANAGER_XLARGE_BLOCK_SIZE - Size of each memory blocks identified as 'extra large' block. +// MEMORY_MANAGER_XLARGE_BLOCK_SIZE - Size of each memory blocks identified as 'extra large' block. // Size of each memory blocks identified as 'extra large' block. Memory block are recommended to be word-sized. #ifndef MEMORY_MANAGER_XLARGE_BLOCK_SIZE #define MEMORY_MANAGER_XLARGE_BLOCK_SIZE 1320 #endif -// MEMORY_MANAGER_XXLARGE_BLOCK_COUNT - Size of each memory blocks identified as 'extra extra large' block. <0-255> +// MEMORY_MANAGER_XXLARGE_BLOCK_COUNT - Size of each memory blocks identified as 'extra extra large' block. <0-255> #ifndef MEMORY_MANAGER_XXLARGE_BLOCK_COUNT #define MEMORY_MANAGER_XXLARGE_BLOCK_COUNT 0 #endif -// MEMORY_MANAGER_XXLARGE_BLOCK_SIZE - Size of each memory blocks identified as 'extra extra large' block. +// MEMORY_MANAGER_XXLARGE_BLOCK_SIZE - Size of each memory blocks identified as 'extra extra large' block. // Size of each memory blocks identified as 'extra extra large' block. Memory block are recommended to be word-sized. #ifndef MEMORY_MANAGER_XXLARGE_BLOCK_SIZE #define MEMORY_MANAGER_XXLARGE_BLOCK_SIZE 3444 #endif -// MEMORY_MANAGER_XSMALL_BLOCK_COUNT - Size of each memory blocks identified as 'extra small' block. <0-255> +// MEMORY_MANAGER_XSMALL_BLOCK_COUNT - Size of each memory blocks identified as 'extra small' block. <0-255> #ifndef MEMORY_MANAGER_XSMALL_BLOCK_COUNT #define MEMORY_MANAGER_XSMALL_BLOCK_COUNT 0 #endif -// MEMORY_MANAGER_XSMALL_BLOCK_SIZE - Size of each memory blocks identified as 'extra small' block. +// MEMORY_MANAGER_XSMALL_BLOCK_SIZE - Size of each memory blocks identified as 'extra small' block. // Size of each memory blocks identified as 'extra large' block. Memory block are recommended to be word-sized. #ifndef MEMORY_MANAGER_XSMALL_BLOCK_SIZE #define MEMORY_MANAGER_XSMALL_BLOCK_SIZE 64 #endif -// MEMORY_MANAGER_XXSMALL_BLOCK_COUNT - Size of each memory blocks identified as 'extra extra small' block. <0-255> +// MEMORY_MANAGER_XXSMALL_BLOCK_COUNT - Size of each memory blocks identified as 'extra extra small' block. <0-255> #ifndef MEMORY_MANAGER_XXSMALL_BLOCK_COUNT #define MEMORY_MANAGER_XXSMALL_BLOCK_COUNT 0 #endif -// MEMORY_MANAGER_XXSMALL_BLOCK_SIZE - Size of each memory blocks identified as 'extra extra small' block. +// MEMORY_MANAGER_XXSMALL_BLOCK_SIZE - Size of each memory blocks identified as 'extra extra small' block. // Size of each memory blocks identified as 'extra extra small' block. Memory block are recommended to be word-sized. #ifndef MEMORY_MANAGER_XXSMALL_BLOCK_SIZE @@ -3749,7 +3749,7 @@ #endif // MEM_MANAGER_DISABLE_API_PARAM_CHECK - Disable API parameter checks in the module. - + #ifndef MEM_MANAGER_DISABLE_API_PARAM_CHECK #define MEM_MANAGER_DISABLE_API_PARAM_CHECK 0 @@ -3767,14 +3767,14 @@ #ifndef NRF_BALLOC_CONFIG_DEBUG_ENABLED #define NRF_BALLOC_CONFIG_DEBUG_ENABLED 0 #endif -// NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS - Number of words used as head guard. <0-255> +// NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS - Number of words used as head guard. <0-255> #ifndef NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS #define NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS 1 #endif -// NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS - Number of words used as tail guard. <0-255> +// NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS - Number of words used as tail guard. <0-255> #ifndef NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS @@ -3782,21 +3782,21 @@ #endif // NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED - Enables basic checks in this module. - + #ifndef NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED #define NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED 0 #endif // NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED - Enables double memory free check in this module. - + #ifndef NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED #define NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED 0 #endif // NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED - Enables free memory corruption check in this module. - + #ifndef NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED #define NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED 0 @@ -3811,32 +3811,32 @@ #ifndef NRF_CSENSE_ENABLED #define NRF_CSENSE_ENABLED 0 #endif -// NRF_CSENSE_PAD_HYSTERESIS - Minimum value of change required to determine that a pad was touched. +// NRF_CSENSE_PAD_HYSTERESIS - Minimum value of change required to determine that a pad was touched. #ifndef NRF_CSENSE_PAD_HYSTERESIS #define NRF_CSENSE_PAD_HYSTERESIS 15 #endif -// NRF_CSENSE_PAD_DEVIATION - Minimum value measured on a pad required to take it into account while calculating the step. +// NRF_CSENSE_PAD_DEVIATION - Minimum value measured on a pad required to take it into account while calculating the step. #ifndef NRF_CSENSE_PAD_DEVIATION #define NRF_CSENSE_PAD_DEVIATION 70 #endif -// NRF_CSENSE_MIN_PAD_VALUE - Minimum normalized value on a pad required to take its value into account. +// NRF_CSENSE_MIN_PAD_VALUE - Minimum normalized value on a pad required to take its value into account. #ifndef NRF_CSENSE_MIN_PAD_VALUE #define NRF_CSENSE_MIN_PAD_VALUE 20 #endif -// NRF_CSENSE_MAX_PADS_NUMBER - Maximum number of pads used for one instance. +// NRF_CSENSE_MAX_PADS_NUMBER - Maximum number of pads used for one instance. #ifndef NRF_CSENSE_MAX_PADS_NUMBER #define NRF_CSENSE_MAX_PADS_NUMBER 20 #endif -// NRF_CSENSE_MAX_VALUE - Maximum normalized value obtained from measurement. +// NRF_CSENSE_MAX_VALUE - Maximum normalized value obtained from measurement. #ifndef NRF_CSENSE_MAX_VALUE #define NRF_CSENSE_MAX_VALUE 1000 #endif -// NRF_CSENSE_OUTPUT_PIN - Output pin used by the low-level module. +// NRF_CSENSE_OUTPUT_PIN - Output pin used by the low-level module. // This is used when capacitive sensor does not use COMP. #ifndef NRF_CSENSE_OUTPUT_PIN @@ -3857,17 +3857,17 @@ #ifndef USE_COMP #define USE_COMP 0 #endif -// TIMER0_FOR_CSENSE - First TIMER instance used by the driver (not used on nRF51). +// TIMER0_FOR_CSENSE - First TIMER instance used by the driver (not used on nRF51). #ifndef TIMER0_FOR_CSENSE #define TIMER0_FOR_CSENSE 1 #endif -// TIMER1_FOR_CSENSE - Second TIMER instance used by the driver (not used on nRF51). +// TIMER1_FOR_CSENSE - Second TIMER instance used by the driver (not used on nRF51). #ifndef TIMER1_FOR_CSENSE #define TIMER1_FOR_CSENSE 2 #endif -// MEASUREMENT_PERIOD - Single measurement period. +// MEASUREMENT_PERIOD - Single measurement period. // Time of a single measurement can be calculated as // T = (1/2)*MEASUREMENT_PERIOD*(1/f_OSC) where f_OSC = I_SOURCE / (2C*(VUP-VDOWN) ). // I_SOURCE, VUP, and VDOWN are values used to initialize COMP and C is the capacitance of the used pad. @@ -3881,7 +3881,7 @@ // // NRF_FPRINTF_ENABLED - nrf_fprintf - fprintf function. - + #ifndef NRF_FPRINTF_ENABLED #define NRF_FPRINTF_ENABLED 0 @@ -3896,14 +3896,14 @@ // Configuration options for the fstorage implementation using the SoftDevice. //========================================================== -// NRF_FSTORAGE_SD_QUEUE_SIZE - Size of the internal queue of operations. +// NRF_FSTORAGE_SD_QUEUE_SIZE - Size of the internal queue of operations. // Increase this value if API calls frequently return the error @ref NRF_ERROR_NO_MEM. #ifndef NRF_FSTORAGE_SD_QUEUE_SIZE #define NRF_FSTORAGE_SD_QUEUE_SIZE 4 #endif -// NRF_FSTORAGE_SD_MAX_RETRIES - Maximum number of attempts at executing an operation when the SoftDevice is busy. +// NRF_FSTORAGE_SD_MAX_RETRIES - Maximum number of attempts at executing an operation when the SoftDevice is busy. // Increase this value if events frequently return the @ref NRF_ERROR_TIMEOUT error. // The SoftDevice might fail to schedule flash access due to high BLE activity. @@ -3911,7 +3911,7 @@ #define NRF_FSTORAGE_SD_MAX_RETRIES 8 #endif -// NRF_FSTORAGE_SD_MAX_WRITE_SIZE - Maximum number of bytes to be written to flash in a single operation. +// NRF_FSTORAGE_SD_MAX_WRITE_SIZE - Maximum number of bytes to be written to flash in a single operation. // This value must be a multiple of four. // Lowering this value can increase the chances of the SoftDevice being able to execute flash operations in between radio activity. // This value is bound by the maximum number of bytes that can be written to flash in a single call to @ref sd_flash_write. @@ -3921,13 +3921,13 @@ #define NRF_FSTORAGE_SD_MAX_WRITE_SIZE 4096 #endif -// +// //========================================================== // // NRF_MEMOBJ_ENABLED - nrf_memobj - Linked memory allocator module - + #ifndef NRF_MEMOBJ_ENABLED #define NRF_MEMOBJ_ENABLED 0 @@ -3946,56 +3946,56 @@ #define NRF_PWR_MGMT_CONFIG_DEBUG_PIN_ENABLED 0 #endif // NRF_PWR_MGMT_SLEEP_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef NRF_PWR_MGMT_SLEEP_DEBUG_PIN #define NRF_PWR_MGMT_SLEEP_DEBUG_PIN 31 @@ -4004,7 +4004,7 @@ // // NRF_PWR_MGMT_CONFIG_CPU_USAGE_MONITOR_ENABLED - Enables CPU usage monitor. - + // Module will trace percentage of CPU usage in one second intervals. @@ -4017,7 +4017,7 @@ #ifndef NRF_PWR_MGMT_CONFIG_STANDBY_TIMEOUT_ENABLED #define NRF_PWR_MGMT_CONFIG_STANDBY_TIMEOUT_ENABLED 0 #endif -// NRF_PWR_MGMT_CONFIG_STANDBY_TIMEOUT_S - Standby timeout (in seconds). +// NRF_PWR_MGMT_CONFIG_STANDBY_TIMEOUT_S - Standby timeout (in seconds). // Shutdown procedure will begin no earlier than after this number of seconds. #ifndef NRF_PWR_MGMT_CONFIG_STANDBY_TIMEOUT_S @@ -4027,27 +4027,27 @@ // // NRF_PWR_MGMT_CONFIG_FPU_SUPPORT_ENABLED - Enables FPU event cleaning. - + #ifndef NRF_PWR_MGMT_CONFIG_FPU_SUPPORT_ENABLED #define NRF_PWR_MGMT_CONFIG_FPU_SUPPORT_ENABLED 1 #endif // NRF_PWR_MGMT_CONFIG_AUTO_SHUTDOWN_RETRY - Blocked shutdown procedure will be retried every second. - + #ifndef NRF_PWR_MGMT_CONFIG_AUTO_SHUTDOWN_RETRY #define NRF_PWR_MGMT_CONFIG_AUTO_SHUTDOWN_RETRY 0 #endif // NRF_PWR_MGMT_CONFIG_USE_SCHEDULER - Module will use @ref app_scheduler. - + #ifndef NRF_PWR_MGMT_CONFIG_USE_SCHEDULER #define NRF_PWR_MGMT_CONFIG_USE_SCHEDULER 0 #endif -// NRF_PWR_MGMT_CONFIG_HANDLER_PRIORITY_COUNT - The number of priorities for module handlers. +// NRF_PWR_MGMT_CONFIG_HANDLER_PRIORITY_COUNT - The number of priorities for module handlers. // The number of stages of the shutdown process. #ifndef NRF_PWR_MGMT_CONFIG_HANDLER_PRIORITY_COUNT @@ -4057,28 +4057,28 @@ // // NRF_QUEUE_ENABLED - nrf_queue - Queue module - + #ifndef NRF_QUEUE_ENABLED #define NRF_QUEUE_ENABLED 1 #endif // NRF_SECTION_ITER_ENABLED - nrf_section_iter - Section iterator - + #ifndef NRF_SECTION_ITER_ENABLED #define NRF_SECTION_ITER_ENABLED 1 #endif // NRF_STRERROR_ENABLED - nrf_strerror - Library for converting error code to string. - + #ifndef NRF_STRERROR_ENABLED #define NRF_STRERROR_ENABLED 0 #endif // SLIP_ENABLED - slip - SLIP encoding and decoding - + #ifndef SLIP_ENABLED #define SLIP_ENABLED 0 @@ -4090,37 +4090,37 @@ #define TASK_MANAGER_ENABLED 0 #endif // TASK_MANAGER_CLI_CMDS - Enable CLI commands specific to the module - + #ifndef TASK_MANAGER_CLI_CMDS #define TASK_MANAGER_CLI_CMDS 1 #endif -// TASK_MANAGER_CONFIG_MAX_TASKS - Maximum number of tasks which can be created +// TASK_MANAGER_CONFIG_MAX_TASKS - Maximum number of tasks which can be created #ifndef TASK_MANAGER_CONFIG_MAX_TASKS #define TASK_MANAGER_CONFIG_MAX_TASKS 2 #endif -// TASK_MANAGER_CONFIG_STACK_SIZE - Stack size for every task (power of 2) +// TASK_MANAGER_CONFIG_STACK_SIZE - Stack size for every task (power of 2) #ifndef TASK_MANAGER_CONFIG_STACK_SIZE #define TASK_MANAGER_CONFIG_STACK_SIZE 1024 #endif // TASK_MANAGER_CONFIG_STACK_PROFILER_ENABLED - Enable stack profiling. - + #ifndef TASK_MANAGER_CONFIG_STACK_PROFILER_ENABLED #define TASK_MANAGER_CONFIG_STACK_PROFILER_ENABLED 1 #endif // TASK_MANAGER_CONFIG_STACK_GUARD - Configures stack guard. - -// <0=> Disabled -// <4=> 32 bytes -// <5=> 64 bytes -// <6=> 128 bytes -// <7=> 256 bytes -// <8=> 512 bytes + +// <0=> Disabled +// <4=> 32 bytes +// <5=> 64 bytes +// <6=> 128 bytes +// <7=> 256 bytes +// <8=> 512 bytes #ifndef TASK_MANAGER_CONFIG_STACK_GUARD #define TASK_MANAGER_CONFIG_STACK_GUARD 7 @@ -4132,30 +4132,30 @@ //========================================================== // NRF_CLI_ENABLED - Enable/disable CLI module. - + #ifndef NRF_CLI_ENABLED #define NRF_CLI_ENABLED 0 #endif -// NRF_CLI_ARGC_MAX - Maximum number of parameters passed to command handler. +// NRF_CLI_ARGC_MAX - Maximum number of parameters passed to command handler. #ifndef NRF_CLI_ARGC_MAX #define NRF_CLI_ARGC_MAX 12 #endif // NRF_CLI_BUILD_IN_CMDS_ENABLED - CLI build in commands. - + #ifndef NRF_CLI_BUILD_IN_CMDS_ENABLED #define NRF_CLI_BUILD_IN_CMDS_ENABLED 1 #endif -// NRF_CLI_CMD_BUFF_SIZE - Maximum buffer size for single command. +// NRF_CLI_CMD_BUFF_SIZE - Maximum buffer size for single command. #ifndef NRF_CLI_CMD_BUFF_SIZE #define NRF_CLI_CMD_BUFF_SIZE 128 #endif -// NRF_CLI_PRINTF_BUFF_SIZE - Maximum print buffer size. +// NRF_CLI_PRINTF_BUFF_SIZE - Maximum print buffer size. #ifndef NRF_CLI_PRINTF_BUFF_SIZE #define NRF_CLI_PRINTF_BUFF_SIZE 23 #endif @@ -4165,12 +4165,12 @@ #ifndef NRF_CLI_HISTORY_ENABLED #define NRF_CLI_HISTORY_ENABLED 1 #endif -// NRF_CLI_HISTORY_ELEMENT_SIZE - Size of one memory object reserved for CLI history +// NRF_CLI_HISTORY_ELEMENT_SIZE - Size of one memory object reserved for CLI history #ifndef NRF_CLI_HISTORY_ELEMENT_SIZE #define NRF_CLI_HISTORY_ELEMENT_SIZE 32 #endif -// NRF_CLI_HISTORY_ELEMENT_COUNT - Number of history memory objects +// NRF_CLI_HISTORY_ELEMENT_COUNT - Number of history memory objects #ifndef NRF_CLI_HISTORY_ELEMENT_COUNT #define NRF_CLI_HISTORY_ELEMENT_COUNT 8 #endif @@ -4178,51 +4178,51 @@ // // NRF_CLI_VT100_COLORS_ENABLED - CLI VT100 colors. - + #ifndef NRF_CLI_VT100_COLORS_ENABLED #define NRF_CLI_VT100_COLORS_ENABLED 1 #endif // NRF_CLI_LOG_BACKEND - Enable logger backend interface. - + #ifndef NRF_CLI_LOG_BACKEND #define NRF_CLI_LOG_BACKEND 1 #endif // NRF_CLI_USES_TASK_MANAGER_ENABLED - Enable CLI to use task_manager - + #ifndef NRF_CLI_USES_TASK_MANAGER_ENABLED #define NRF_CLI_USES_TASK_MANAGER_ENABLED 0 #endif -// +// //========================================================== // nrf_cli_rtt - RTT command line interface transport. //========================================================== // NRF_CLI_RTT_ENABLED - Enable/disable CLI RTT module. - + #ifndef NRF_CLI_RTT_ENABLED #define NRF_CLI_RTT_ENABLED 0 #endif -// NRF_CLI_RTT_TERMINAL_ID - RTT terminal ID for CLI. +// NRF_CLI_RTT_TERMINAL_ID - RTT terminal ID for CLI. #ifndef NRF_CLI_RTT_TERMINAL_ID #define NRF_CLI_RTT_TERMINAL_ID 0 #endif -// +// //========================================================== -// +// //========================================================== -// nRF_Log +// nRF_Log //========================================================== // NRF_LOG_BACKEND_RTT_ENABLED - nrf_log_backend_rtt - Log RTT backend @@ -4230,7 +4230,7 @@ #ifndef NRF_LOG_BACKEND_RTT_ENABLED #define NRF_LOG_BACKEND_RTT_ENABLED 0 #endif -// NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. +// NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. // Size of the buffer is a trade-off between RAM usage and processing. // if buffer is smaller then strings will often be fragmented. // It is recommended to use size which will fit typical log and only the @@ -4247,35 +4247,35 @@ #ifndef NRF_LOG_BACKEND_UART_ENABLED #define NRF_LOG_BACKEND_UART_ENABLED 0 #endif -// NRF_LOG_BACKEND_UART_TX_PIN - UART TX pin +// NRF_LOG_BACKEND_UART_TX_PIN - UART TX pin #ifndef NRF_LOG_BACKEND_UART_TX_PIN #define NRF_LOG_BACKEND_UART_TX_PIN 6 #endif // NRF_LOG_BACKEND_UART_BAUDRATE - Default Baudrate - -// <323584=> 1200 baud -// <643072=> 2400 baud -// <1290240=> 4800 baud -// <2576384=> 9600 baud -// <3862528=> 14400 baud -// <5152768=> 19200 baud -// <7716864=> 28800 baud -// <10289152=> 38400 baud -// <15400960=> 57600 baud -// <20615168=> 76800 baud -// <30801920=> 115200 baud -// <61865984=> 230400 baud -// <67108864=> 250000 baud -// <121634816=> 460800 baud -// <251658240=> 921600 baud -// <268435456=> 1000000 baud + +// <323584=> 1200 baud +// <643072=> 2400 baud +// <1290240=> 4800 baud +// <2576384=> 9600 baud +// <3862528=> 14400 baud +// <5152768=> 19200 baud +// <7716864=> 28800 baud +// <10289152=> 38400 baud +// <15400960=> 57600 baud +// <20615168=> 76800 baud +// <30801920=> 115200 baud +// <61865984=> 230400 baud +// <67108864=> 250000 baud +// <121634816=> 460800 baud +// <251658240=> 921600 baud +// <268435456=> 1000000 baud #ifndef NRF_LOG_BACKEND_UART_BAUDRATE #define NRF_LOG_BACKEND_UART_BAUDRATE 30801920 #endif -// NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. +// NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. // Size of the buffer is a trade-off between RAM usage and processing. // if buffer is smaller then strings will often be fragmented. // It is recommended to use size which will fit typical log and only the @@ -4302,48 +4302,48 @@ #define NRF_LOG_USES_COLORS 0 #endif // NRF_LOG_COLOR_DEFAULT - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_LOG_COLOR_DEFAULT #define NRF_LOG_COLOR_DEFAULT 0 #endif // NRF_LOG_ERROR_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_LOG_ERROR_COLOR #define NRF_LOG_ERROR_COLOR 0 #endif // NRF_LOG_WARNING_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_LOG_WARNING_COLOR #define NRF_LOG_WARNING_COLOR 0 @@ -4352,19 +4352,19 @@ // // NRF_LOG_DEFAULT_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_LOG_DEFAULT_LEVEL #define NRF_LOG_DEFAULT_LEVEL 3 #endif // NRF_LOG_DEFERRED - Enable deffered logger. - + // Log data is buffered and can be processed in idle. @@ -4373,27 +4373,27 @@ #endif // NRF_LOG_BUFSIZE - Size of the buffer for storing logs (in bytes). - + // Must be power of 2 and multiple of 4. // If NRF_LOG_DEFERRED = 0 then buffer size can be reduced to minimum. -// <128=> 128 -// <256=> 256 -// <512=> 512 -// <1024=> 1024 -// <2048=> 2048 -// <4096=> 4096 -// <8192=> 8192 -// <16384=> 16384 +// <128=> 128 +// <256=> 256 +// <512=> 512 +// <1024=> 1024 +// <2048=> 2048 +// <4096=> 4096 +// <8192=> 8192 +// <16384=> 16384 #ifndef NRF_LOG_BUFSIZE #define NRF_LOG_BUFSIZE 1024 #endif // NRF_LOG_ALLOW_OVERFLOW - Configures behavior when circular buffer is full. - -// If set then oldest logs are overwritten. Otherwise a + +// If set then oldest logs are overwritten. Otherwise a // marker is injected informing about overflow. #ifndef NRF_LOG_ALLOW_OVERFLOW @@ -4401,7 +4401,7 @@ #endif // NRF_LOG_USES_TIMESTAMP - Enable timestamping - + // Function for getting the timestamp is provided by the user @@ -4410,14 +4410,14 @@ #endif // NRF_LOG_FILTERS_ENABLED - Enable dynamic filtering of logs. - + #ifndef NRF_LOG_FILTERS_ENABLED #define NRF_LOG_FILTERS_ENABLED 1 #endif // NRF_LOG_CLI_CMDS - Enable CLI commands for the module. - + #ifndef NRF_LOG_CLI_CMDS #define NRF_LOG_CLI_CMDS 1 @@ -4426,7 +4426,7 @@ // Log message pool - Configuration of log message pool //========================================================== -// NRF_LOG_MSGPOOL_ELEMENT_SIZE - Size of a single element in the pool of memory objects. +// NRF_LOG_MSGPOOL_ELEMENT_SIZE - Size of a single element in the pool of memory objects. // If a small value is set, then performance of logs processing // is degraded because data is fragmented. Bigger value impacts // RAM memory utilization. The size is set to fit a message with @@ -4436,7 +4436,7 @@ #define NRF_LOG_MSGPOOL_ELEMENT_SIZE 20 #endif -// NRF_LOG_MSGPOOL_ELEMENT_COUNT - Number of elements in the pool of memory objects +// NRF_LOG_MSGPOOL_ELEMENT_COUNT - Number of elements in the pool of memory objects // If a small value is set, then it may lead to a deadlock // in certain cases if backend has high latency and holds // multiple messages for long time. Bigger value impacts @@ -4446,15 +4446,15 @@ #define NRF_LOG_MSGPOOL_ELEMENT_COUNT 8 #endif -// +// //========================================================== // -// nrf_log module configuration +// nrf_log module configuration //========================================================== -// nrf_log in nRF_Core +// nrf_log in nRF_Core //========================================================== // NRF_MPU_CONFIG_LOG_ENABLED - Enables logging in the module. @@ -4463,44 +4463,44 @@ #define NRF_MPU_CONFIG_LOG_ENABLED 0 #endif // NRF_MPU_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_MPU_CONFIG_LOG_LEVEL #define NRF_MPU_CONFIG_LOG_LEVEL 3 #endif // NRF_MPU_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_MPU_CONFIG_INFO_COLOR #define NRF_MPU_CONFIG_INFO_COLOR 0 #endif // NRF_MPU_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_MPU_CONFIG_DEBUG_COLOR #define NRF_MPU_CONFIG_DEBUG_COLOR 0 @@ -4514,44 +4514,44 @@ #define NRF_STACK_GUARD_CONFIG_LOG_ENABLED 0 #endif // NRF_STACK_GUARD_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_STACK_GUARD_CONFIG_LOG_LEVEL #define NRF_STACK_GUARD_CONFIG_LOG_LEVEL 3 #endif // NRF_STACK_GUARD_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_STACK_GUARD_CONFIG_INFO_COLOR #define NRF_STACK_GUARD_CONFIG_INFO_COLOR 0 #endif // NRF_STACK_GUARD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_STACK_GUARD_CONFIG_DEBUG_COLOR #define NRF_STACK_GUARD_CONFIG_DEBUG_COLOR 0 @@ -4565,44 +4565,44 @@ #define TASK_MANAGER_CONFIG_LOG_ENABLED 0 #endif // TASK_MANAGER_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef TASK_MANAGER_CONFIG_LOG_LEVEL #define TASK_MANAGER_CONFIG_LOG_LEVEL 3 #endif // TASK_MANAGER_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef TASK_MANAGER_CONFIG_INFO_COLOR #define TASK_MANAGER_CONFIG_INFO_COLOR 0 #endif // TASK_MANAGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef TASK_MANAGER_CONFIG_DEBUG_COLOR #define TASK_MANAGER_CONFIG_DEBUG_COLOR 0 @@ -4610,10 +4610,10 @@ // -// +// //========================================================== -// nrf_log in nRF_Drivers +// nrf_log in nRF_Drivers //========================================================== // CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. @@ -4622,44 +4622,44 @@ #define CLOCK_CONFIG_LOG_ENABLED 0 #endif // CLOCK_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef CLOCK_CONFIG_LOG_LEVEL #define CLOCK_CONFIG_LOG_LEVEL 3 #endif // CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef CLOCK_CONFIG_INFO_COLOR #define CLOCK_CONFIG_INFO_COLOR 0 #endif // CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef CLOCK_CONFIG_DEBUG_COLOR #define CLOCK_CONFIG_DEBUG_COLOR 0 @@ -4673,44 +4673,44 @@ #define COMMON_CONFIG_LOG_ENABLED 0 #endif // COMMON_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef COMMON_CONFIG_LOG_LEVEL #define COMMON_CONFIG_LOG_LEVEL 3 #endif // COMMON_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef COMMON_CONFIG_INFO_COLOR #define COMMON_CONFIG_INFO_COLOR 0 #endif // COMMON_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef COMMON_CONFIG_DEBUG_COLOR #define COMMON_CONFIG_DEBUG_COLOR 0 @@ -4724,44 +4724,44 @@ #define COMP_CONFIG_LOG_ENABLED 0 #endif // COMP_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef COMP_CONFIG_LOG_LEVEL #define COMP_CONFIG_LOG_LEVEL 3 #endif // COMP_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef COMP_CONFIG_INFO_COLOR #define COMP_CONFIG_INFO_COLOR 0 #endif // COMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef COMP_CONFIG_DEBUG_COLOR #define COMP_CONFIG_DEBUG_COLOR 0 @@ -4775,44 +4775,44 @@ #define GPIOTE_CONFIG_LOG_ENABLED 0 #endif // GPIOTE_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef GPIOTE_CONFIG_LOG_LEVEL #define GPIOTE_CONFIG_LOG_LEVEL 3 #endif // GPIOTE_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef GPIOTE_CONFIG_INFO_COLOR #define GPIOTE_CONFIG_INFO_COLOR 0 #endif // GPIOTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef GPIOTE_CONFIG_DEBUG_COLOR #define GPIOTE_CONFIG_DEBUG_COLOR 0 @@ -4826,44 +4826,44 @@ #define I2S_CONFIG_LOG_ENABLED 0 #endif // I2S_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef I2S_CONFIG_LOG_LEVEL #define I2S_CONFIG_LOG_LEVEL 3 #endif // I2S_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef I2S_CONFIG_INFO_COLOR #define I2S_CONFIG_INFO_COLOR 0 #endif // I2S_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef I2S_CONFIG_DEBUG_COLOR #define I2S_CONFIG_DEBUG_COLOR 0 @@ -4877,44 +4877,44 @@ #define LPCOMP_CONFIG_LOG_ENABLED 0 #endif // LPCOMP_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef LPCOMP_CONFIG_LOG_LEVEL #define LPCOMP_CONFIG_LOG_LEVEL 3 #endif // LPCOMP_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef LPCOMP_CONFIG_INFO_COLOR #define LPCOMP_CONFIG_INFO_COLOR 0 #endif // LPCOMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef LPCOMP_CONFIG_DEBUG_COLOR #define LPCOMP_CONFIG_DEBUG_COLOR 0 @@ -4928,44 +4928,44 @@ #define PDM_CONFIG_LOG_ENABLED 0 #endif // PDM_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef PDM_CONFIG_LOG_LEVEL #define PDM_CONFIG_LOG_LEVEL 3 #endif // PDM_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef PDM_CONFIG_INFO_COLOR #define PDM_CONFIG_INFO_COLOR 0 #endif // PDM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef PDM_CONFIG_DEBUG_COLOR #define PDM_CONFIG_DEBUG_COLOR 0 @@ -4979,44 +4979,44 @@ #define PPI_CONFIG_LOG_ENABLED 0 #endif // PPI_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef PPI_CONFIG_LOG_LEVEL #define PPI_CONFIG_LOG_LEVEL 3 #endif // PPI_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef PPI_CONFIG_INFO_COLOR #define PPI_CONFIG_INFO_COLOR 0 #endif // PPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef PPI_CONFIG_DEBUG_COLOR #define PPI_CONFIG_DEBUG_COLOR 0 @@ -5030,44 +5030,44 @@ #define PWM_CONFIG_LOG_ENABLED 0 #endif // PWM_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef PWM_CONFIG_LOG_LEVEL #define PWM_CONFIG_LOG_LEVEL 3 #endif // PWM_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef PWM_CONFIG_INFO_COLOR #define PWM_CONFIG_INFO_COLOR 0 #endif // PWM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef PWM_CONFIG_DEBUG_COLOR #define PWM_CONFIG_DEBUG_COLOR 0 @@ -5081,44 +5081,44 @@ #define QDEC_CONFIG_LOG_ENABLED 0 #endif // QDEC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef QDEC_CONFIG_LOG_LEVEL #define QDEC_CONFIG_LOG_LEVEL 3 #endif // QDEC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef QDEC_CONFIG_INFO_COLOR #define QDEC_CONFIG_INFO_COLOR 0 #endif // QDEC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef QDEC_CONFIG_DEBUG_COLOR #define QDEC_CONFIG_DEBUG_COLOR 0 @@ -5132,51 +5132,51 @@ #define RNG_CONFIG_LOG_ENABLED 0 #endif // RNG_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef RNG_CONFIG_LOG_LEVEL #define RNG_CONFIG_LOG_LEVEL 3 #endif // RNG_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef RNG_CONFIG_INFO_COLOR #define RNG_CONFIG_INFO_COLOR 0 #endif // RNG_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef RNG_CONFIG_DEBUG_COLOR #define RNG_CONFIG_DEBUG_COLOR 0 #endif // RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED - Enables logging of random numbers. - + #ifndef RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED #define RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED 0 @@ -5190,44 +5190,44 @@ #define RTC_CONFIG_LOG_ENABLED 0 #endif // RTC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef RTC_CONFIG_LOG_LEVEL #define RTC_CONFIG_LOG_LEVEL 3 #endif // RTC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef RTC_CONFIG_INFO_COLOR #define RTC_CONFIG_INFO_COLOR 0 #endif // RTC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef RTC_CONFIG_DEBUG_COLOR #define RTC_CONFIG_DEBUG_COLOR 0 @@ -5241,44 +5241,44 @@ #define SAADC_CONFIG_LOG_ENABLED 0 #endif // SAADC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef SAADC_CONFIG_LOG_LEVEL #define SAADC_CONFIG_LOG_LEVEL 3 #endif // SAADC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef SAADC_CONFIG_INFO_COLOR #define SAADC_CONFIG_INFO_COLOR 0 #endif // SAADC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef SAADC_CONFIG_DEBUG_COLOR #define SAADC_CONFIG_DEBUG_COLOR 0 @@ -5292,44 +5292,44 @@ #define SPIS_CONFIG_LOG_ENABLED 0 #endif // SPIS_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef SPIS_CONFIG_LOG_LEVEL #define SPIS_CONFIG_LOG_LEVEL 3 #endif // SPIS_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef SPIS_CONFIG_INFO_COLOR #define SPIS_CONFIG_INFO_COLOR 0 #endif // SPIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef SPIS_CONFIG_DEBUG_COLOR #define SPIS_CONFIG_DEBUG_COLOR 0 @@ -5343,44 +5343,44 @@ #define SPI_CONFIG_LOG_ENABLED 0 #endif // SPI_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef SPI_CONFIG_LOG_LEVEL #define SPI_CONFIG_LOG_LEVEL 3 #endif // SPI_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef SPI_CONFIG_INFO_COLOR #define SPI_CONFIG_INFO_COLOR 0 #endif // SPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef SPI_CONFIG_DEBUG_COLOR #define SPI_CONFIG_DEBUG_COLOR 0 @@ -5394,44 +5394,44 @@ #define SWI_CONFIG_LOG_ENABLED 0 #endif // SWI_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef SWI_CONFIG_LOG_LEVEL #define SWI_CONFIG_LOG_LEVEL 3 #endif // SWI_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef SWI_CONFIG_INFO_COLOR #define SWI_CONFIG_INFO_COLOR 0 #endif // SWI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef SWI_CONFIG_DEBUG_COLOR #define SWI_CONFIG_DEBUG_COLOR 0 @@ -5445,44 +5445,44 @@ #define TIMER_CONFIG_LOG_ENABLED 0 #endif // TIMER_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef TIMER_CONFIG_LOG_LEVEL #define TIMER_CONFIG_LOG_LEVEL 3 #endif // TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef TIMER_CONFIG_INFO_COLOR #define TIMER_CONFIG_INFO_COLOR 0 #endif // TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef TIMER_CONFIG_DEBUG_COLOR #define TIMER_CONFIG_DEBUG_COLOR 0 @@ -5496,44 +5496,44 @@ #define TWIS_CONFIG_LOG_ENABLED 0 #endif // TWIS_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef TWIS_CONFIG_LOG_LEVEL #define TWIS_CONFIG_LOG_LEVEL 3 #endif // TWIS_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef TWIS_CONFIG_INFO_COLOR #define TWIS_CONFIG_INFO_COLOR 0 #endif // TWIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef TWIS_CONFIG_DEBUG_COLOR #define TWIS_CONFIG_DEBUG_COLOR 0 @@ -5547,44 +5547,44 @@ #define TWI_CONFIG_LOG_ENABLED 0 #endif // TWI_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef TWI_CONFIG_LOG_LEVEL #define TWI_CONFIG_LOG_LEVEL 3 #endif // TWI_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef TWI_CONFIG_INFO_COLOR #define TWI_CONFIG_INFO_COLOR 0 #endif // TWI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef TWI_CONFIG_DEBUG_COLOR #define TWI_CONFIG_DEBUG_COLOR 0 @@ -5598,44 +5598,44 @@ #define UART_CONFIG_LOG_ENABLED 0 #endif // UART_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef UART_CONFIG_LOG_LEVEL #define UART_CONFIG_LOG_LEVEL 3 #endif // UART_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef UART_CONFIG_INFO_COLOR #define UART_CONFIG_INFO_COLOR 0 #endif // UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef UART_CONFIG_DEBUG_COLOR #define UART_CONFIG_DEBUG_COLOR 0 @@ -5649,44 +5649,44 @@ #define USBD_CONFIG_LOG_ENABLED 0 #endif // USBD_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef USBD_CONFIG_LOG_LEVEL #define USBD_CONFIG_LOG_LEVEL 3 #endif // USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef USBD_CONFIG_INFO_COLOR #define USBD_CONFIG_INFO_COLOR 0 #endif // USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef USBD_CONFIG_DEBUG_COLOR #define USBD_CONFIG_DEBUG_COLOR 0 @@ -5700,44 +5700,44 @@ #define WDT_CONFIG_LOG_ENABLED 0 #endif // WDT_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef WDT_CONFIG_LOG_LEVEL #define WDT_CONFIG_LOG_LEVEL 3 #endif // WDT_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef WDT_CONFIG_INFO_COLOR #define WDT_CONFIG_INFO_COLOR 0 #endif // WDT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef WDT_CONFIG_DEBUG_COLOR #define WDT_CONFIG_DEBUG_COLOR 0 @@ -5745,10 +5745,10 @@ // -// +// //========================================================== -// nrf_log in nRF_Libraries +// nrf_log in nRF_Libraries //========================================================== // APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED - Enables logging in the module. @@ -5757,44 +5757,44 @@ #define APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED 0 #endif // APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL #define APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL 3 #endif // APP_USBD_CDC_ACM_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef APP_USBD_CDC_ACM_CONFIG_INFO_COLOR #define APP_USBD_CDC_ACM_CONFIG_INFO_COLOR 0 #endif // APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR #define APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR 0 @@ -5808,44 +5808,44 @@ #define APP_USBD_MSC_CONFIG_LOG_ENABLED 0 #endif // APP_USBD_MSC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef APP_USBD_MSC_CONFIG_LOG_LEVEL #define APP_USBD_MSC_CONFIG_LOG_LEVEL 3 #endif // APP_USBD_MSC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef APP_USBD_MSC_CONFIG_INFO_COLOR #define APP_USBD_MSC_CONFIG_INFO_COLOR 0 #endif // APP_USBD_MSC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef APP_USBD_MSC_CONFIG_DEBUG_COLOR #define APP_USBD_MSC_CONFIG_DEBUG_COLOR 0 @@ -5854,7 +5854,7 @@ // // MEM_MANAGER_ENABLE_LOGS - Enable debug trace in the module. - + #ifndef MEM_MANAGER_ENABLE_LOGS #define MEM_MANAGER_ENABLE_LOGS 0 @@ -5866,44 +5866,44 @@ #define NRF_BALLOC_CONFIG_LOG_ENABLED 0 #endif // NRF_BALLOC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_BALLOC_CONFIG_LOG_LEVEL #define NRF_BALLOC_CONFIG_LOG_LEVEL 3 #endif // NRF_BALLOC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_BALLOC_CONFIG_INFO_COLOR #define NRF_BALLOC_CONFIG_INFO_COLOR 0 #endif // NRF_BALLOC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_BALLOC_CONFIG_DEBUG_COLOR #define NRF_BALLOC_CONFIG_DEBUG_COLOR 0 @@ -5917,44 +5917,44 @@ #define NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED 0 #endif // NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL #define NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL 3 #endif // NRF_CLI_BLE_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_CLI_BLE_UART_CONFIG_INFO_COLOR #define NRF_CLI_BLE_UART_CONFIG_INFO_COLOR 0 #endif // NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR #define NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR 0 @@ -5968,44 +5968,44 @@ #define NRF_CLI_UART_CONFIG_LOG_ENABLED 0 #endif // NRF_CLI_UART_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_CLI_UART_CONFIG_LOG_LEVEL #define NRF_CLI_UART_CONFIG_LOG_LEVEL 3 #endif // NRF_CLI_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_CLI_UART_CONFIG_INFO_COLOR #define NRF_CLI_UART_CONFIG_INFO_COLOR 0 #endif // NRF_CLI_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_CLI_UART_CONFIG_DEBUG_COLOR #define NRF_CLI_UART_CONFIG_DEBUG_COLOR 0 @@ -6019,44 +6019,44 @@ #define NRF_MEMOBJ_CONFIG_LOG_ENABLED 0 #endif // NRF_MEMOBJ_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_MEMOBJ_CONFIG_LOG_LEVEL #define NRF_MEMOBJ_CONFIG_LOG_LEVEL 3 #endif // NRF_MEMOBJ_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_MEMOBJ_CONFIG_INFO_COLOR #define NRF_MEMOBJ_CONFIG_INFO_COLOR 0 #endif // NRF_MEMOBJ_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_MEMOBJ_CONFIG_DEBUG_COLOR #define NRF_MEMOBJ_CONFIG_DEBUG_COLOR 0 @@ -6070,44 +6070,44 @@ #define NRF_PWR_MGMT_CONFIG_LOG_ENABLED 0 #endif // NRF_PWR_MGMT_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_PWR_MGMT_CONFIG_LOG_LEVEL #define NRF_PWR_MGMT_CONFIG_LOG_LEVEL 3 #endif // NRF_PWR_MGMT_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_PWR_MGMT_CONFIG_INFO_COLOR #define NRF_PWR_MGMT_CONFIG_INFO_COLOR 0 #endif // NRF_PWR_MGMT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_PWR_MGMT_CONFIG_DEBUG_COLOR #define NRF_PWR_MGMT_CONFIG_DEBUG_COLOR 0 @@ -6121,44 +6121,44 @@ #define NRF_SDH_ANT_LOG_ENABLED 1 #endif // NRF_SDH_ANT_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_SDH_ANT_LOG_LEVEL #define NRF_SDH_ANT_LOG_LEVEL 3 #endif // NRF_SDH_ANT_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_SDH_ANT_INFO_COLOR #define NRF_SDH_ANT_INFO_COLOR 0 #endif // NRF_SDH_ANT_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_SDH_ANT_DEBUG_COLOR #define NRF_SDH_ANT_DEBUG_COLOR 0 @@ -6172,44 +6172,44 @@ #define NRF_SDH_BLE_LOG_ENABLED 1 #endif // NRF_SDH_BLE_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_SDH_BLE_LOG_LEVEL #define NRF_SDH_BLE_LOG_LEVEL 3 #endif // NRF_SDH_BLE_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_SDH_BLE_INFO_COLOR #define NRF_SDH_BLE_INFO_COLOR 0 #endif // NRF_SDH_BLE_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_SDH_BLE_DEBUG_COLOR #define NRF_SDH_BLE_DEBUG_COLOR 0 @@ -6223,44 +6223,44 @@ #define NRF_SDH_LOG_ENABLED 1 #endif // NRF_SDH_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_SDH_LOG_LEVEL #define NRF_SDH_LOG_LEVEL 3 #endif // NRF_SDH_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_SDH_INFO_COLOR #define NRF_SDH_INFO_COLOR 0 #endif // NRF_SDH_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_SDH_DEBUG_COLOR #define NRF_SDH_DEBUG_COLOR 0 @@ -6274,44 +6274,44 @@ #define NRF_SDH_SOC_LOG_ENABLED 1 #endif // NRF_SDH_SOC_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_SDH_SOC_LOG_LEVEL #define NRF_SDH_SOC_LOG_LEVEL 3 #endif // NRF_SDH_SOC_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_SDH_SOC_INFO_COLOR #define NRF_SDH_SOC_INFO_COLOR 0 #endif // NRF_SDH_SOC_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_SDH_SOC_DEBUG_COLOR #define NRF_SDH_SOC_DEBUG_COLOR 0 @@ -6319,19 +6319,19 @@ // -// +// //========================================================== -// +// //========================================================== -// +// //========================================================== -// +// //========================================================== -// nRF_NFC +// nRF_NFC //========================================================== // NFC_BLE_OOB_ADVDATA_ENABLED - nfc_ble_oob_advdata - Encoding the advertising data and/or scan response data which is specific for OOB pairing @@ -6340,9 +6340,9 @@ #define NFC_BLE_OOB_ADVDATA_ENABLED 0 #endif // ADVANCED_ADVDATA_SUPPORT - Non-mandatory AD types for BLE OOB pairing are encoded inside the NDEF message (e.g. service UUIDs) - -// <1=> Enabled -// <0=> Disabled + +// <1=> Enabled +// <0=> Disabled #ifndef ADVANCED_ADVDATA_SUPPORT #define ADVANCED_ADVDATA_SUPPORT 0 @@ -6361,44 +6361,44 @@ #define NFC_BLE_PAIR_LIB_LOG_ENABLED 0 #endif // NFC_BLE_PAIR_LIB_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NFC_BLE_PAIR_LIB_LOG_LEVEL #define NFC_BLE_PAIR_LIB_LOG_LEVEL 3 #endif // NFC_BLE_PAIR_LIB_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NFC_BLE_PAIR_LIB_INFO_COLOR #define NFC_BLE_PAIR_LIB_INFO_COLOR 0 #endif // NFC_BLE_PAIR_LIB_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NFC_BLE_PAIR_LIB_DEBUG_COLOR #define NFC_BLE_PAIR_LIB_DEBUG_COLOR 0 @@ -6417,84 +6417,84 @@ #define BLE_NFC_SEC_PARAM_BOND 1 #endif // BLE_NFC_SEC_PARAM_KDIST_OWN_ENC - Enables Long Term Key and Master Identification distribution by device. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_OWN_ENC #define BLE_NFC_SEC_PARAM_KDIST_OWN_ENC 1 #endif // BLE_NFC_SEC_PARAM_KDIST_OWN_ID - Enables Identity Resolving Key and Identity Address Information distribution by device. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_OWN_ID #define BLE_NFC_SEC_PARAM_KDIST_OWN_ID 1 #endif // BLE_NFC_SEC_PARAM_KDIST_PEER_ENC - Enables Long Term Key and Master Identification distribution by peer. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_PEER_ENC #define BLE_NFC_SEC_PARAM_KDIST_PEER_ENC 1 #endif // BLE_NFC_SEC_PARAM_KDIST_PEER_ID - Enables Identity Resolving Key and Identity Address Information distribution by peer. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_PEER_ID #define BLE_NFC_SEC_PARAM_KDIST_PEER_ID 1 #endif // BLE_NFC_SEC_PARAM_KDIST_OWN_ENC - Enables Long Term Key and Master Identification distribution by device. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_OWN_ENC #define BLE_NFC_SEC_PARAM_KDIST_OWN_ENC 1 #endif // BLE_NFC_SEC_PARAM_KDIST_OWN_ID - Enables Identity Resolving Key and Identity Address Information distribution by device. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_OWN_ID #define BLE_NFC_SEC_PARAM_KDIST_OWN_ID 1 #endif // BLE_NFC_SEC_PARAM_KDIST_PEER_ENC - Enables Long Term Key and Master Identification distribution by peer. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_PEER_ENC #define BLE_NFC_SEC_PARAM_KDIST_PEER_ENC 1 #endif // BLE_NFC_SEC_PARAM_KDIST_PEER_ID - Enables Identity Resolving Key and Identity Address Information distribution by peer. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_PEER_ID #define BLE_NFC_SEC_PARAM_KDIST_PEER_ID 1 #endif // BLE_NFC_SEC_PARAM_KDIST_OWN_ENC - Enables Long Term Key and Master Identification distribution by device. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_OWN_ENC #define BLE_NFC_SEC_PARAM_KDIST_OWN_ENC 1 #endif // BLE_NFC_SEC_PARAM_KDIST_OWN_ID - Enables Identity Resolving Key and Identity Address Information distribution by device. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_OWN_ID #define BLE_NFC_SEC_PARAM_KDIST_OWN_ID 1 #endif // BLE_NFC_SEC_PARAM_KDIST_PEER_ENC - Enables Long Term Key and Master Identification distribution by peer. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_PEER_ENC #define BLE_NFC_SEC_PARAM_KDIST_PEER_ENC 1 #endif // BLE_NFC_SEC_PARAM_KDIST_PEER_ID - Enables Identity Resolving Key and Identity Address Information distribution by peer. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_PEER_ID #define BLE_NFC_SEC_PARAM_KDIST_PEER_ID 1 @@ -6503,40 +6503,40 @@ // // BLE_NFC_SEC_PARAM_MIN_KEY_SIZE - Minimal size of a security key. - -// <7=> 7 -// <8=> 8 -// <9=> 9 -// <10=> 10 -// <11=> 11 -// <12=> 12 -// <13=> 13 -// <14=> 14 -// <15=> 15 -// <16=> 16 + +// <7=> 7 +// <8=> 8 +// <9=> 9 +// <10=> 10 +// <11=> 11 +// <12=> 12 +// <13=> 13 +// <14=> 14 +// <15=> 15 +// <16=> 16 #ifndef BLE_NFC_SEC_PARAM_MIN_KEY_SIZE #define BLE_NFC_SEC_PARAM_MIN_KEY_SIZE 7 #endif // BLE_NFC_SEC_PARAM_MAX_KEY_SIZE - Maximal size of a security key. - -// <7=> 7 -// <8=> 8 -// <9=> 9 -// <10=> 10 -// <11=> 11 -// <12=> 12 -// <13=> 13 -// <14=> 14 -// <15=> 15 -// <16=> 16 + +// <7=> 7 +// <8=> 8 +// <9=> 9 +// <10=> 10 +// <11=> 11 +// <12=> 12 +// <13=> 13 +// <14=> 14 +// <15=> 15 +// <16=> 16 #ifndef BLE_NFC_SEC_PARAM_MAX_KEY_SIZE #define BLE_NFC_SEC_PARAM_MAX_KEY_SIZE 16 #endif -// +// //========================================================== // @@ -6547,9 +6547,9 @@ #define NFC_NDEF_MSG_ENABLED 0 #endif // NFC_NDEF_MSG_TAG_TYPE - NFC Tag Type - -// <2=> Type 2 Tag -// <4=> Type 4 Tag + +// <2=> Type 2 Tag +// <4=> Type 4 Tag #ifndef NFC_NDEF_MSG_TAG_TYPE #define NFC_NDEF_MSG_TAG_TYPE 2 @@ -6568,28 +6568,28 @@ #define NFC_NDEF_MSG_PARSER_LOG_ENABLED 0 #endif // NFC_NDEF_MSG_PARSER_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NFC_NDEF_MSG_PARSER_LOG_LEVEL #define NFC_NDEF_MSG_PARSER_LOG_LEVEL 3 #endif // NFC_NDEF_MSG_PARSER_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NFC_NDEF_MSG_PARSER_INFO_COLOR #define NFC_NDEF_MSG_PARSER_INFO_COLOR 0 @@ -6610,28 +6610,28 @@ #define NFC_NDEF_RECORD_PARSER_LOG_ENABLED 0 #endif // NFC_NDEF_RECORD_PARSER_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NFC_NDEF_RECORD_PARSER_LOG_LEVEL #define NFC_NDEF_RECORD_PARSER_LOG_LEVEL 3 #endif // NFC_NDEF_RECORD_PARSER_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NFC_NDEF_RECORD_PARSER_INFO_COLOR #define NFC_NDEF_RECORD_PARSER_INFO_COLOR 0 @@ -6647,17 +6647,17 @@ #define NFC_T2T_HAL_ENABLED 0 #endif // NFCT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef NFCT_CONFIG_IRQ_PRIORITY #define NFCT_CONFIG_IRQ_PRIORITY 7 @@ -6669,88 +6669,88 @@ #define HAL_NFC_CONFIG_LOG_ENABLED 0 #endif // HAL_NFC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef HAL_NFC_CONFIG_LOG_LEVEL #define HAL_NFC_CONFIG_LOG_LEVEL 3 #endif // HAL_NFC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef HAL_NFC_CONFIG_INFO_COLOR #define HAL_NFC_CONFIG_INFO_COLOR 0 #endif // HAL_NFC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef HAL_NFC_CONFIG_DEBUG_COLOR #define HAL_NFC_CONFIG_DEBUG_COLOR 0 #endif // HAL_NFC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef HAL_NFC_CONFIG_LOG_LEVEL #define HAL_NFC_CONFIG_LOG_LEVEL 3 #endif // HAL_NFC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef HAL_NFC_CONFIG_INFO_COLOR #define HAL_NFC_CONFIG_INFO_COLOR 0 #endif // HAL_NFC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef HAL_NFC_CONFIG_DEBUG_COLOR #define HAL_NFC_CONFIG_DEBUG_COLOR 0 @@ -6764,560 +6764,560 @@ #define HAL_NFC_CONFIG_DEBUG_PIN_ENABLED 0 #endif // HAL_NFC_HCLOCK_ON_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_HCLOCK_ON_DEBUG_PIN #define HAL_NFC_HCLOCK_ON_DEBUG_PIN 11 #endif // HAL_NFC_HCLOCK_OFF_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_HCLOCK_OFF_DEBUG_PIN #define HAL_NFC_HCLOCK_OFF_DEBUG_PIN 12 #endif // HAL_NFC_NFC_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_NFC_EVENT_DEBUG_PIN #define HAL_NFC_NFC_EVENT_DEBUG_PIN 24 #endif // HAL_NFC_DETECT_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_DETECT_EVENT_DEBUG_PIN #define HAL_NFC_DETECT_EVENT_DEBUG_PIN 25 #endif // HAL_NFC_TIMER4_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_TIMER4_EVENT_DEBUG_PIN #define HAL_NFC_TIMER4_EVENT_DEBUG_PIN 28 #endif // HAL_NFC_HCLOCK_ON_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_HCLOCK_ON_DEBUG_PIN #define HAL_NFC_HCLOCK_ON_DEBUG_PIN 31 #endif // HAL_NFC_HCLOCK_OFF_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_HCLOCK_OFF_DEBUG_PIN #define HAL_NFC_HCLOCK_OFF_DEBUG_PIN 31 #endif // HAL_NFC_NFC_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_NFC_EVENT_DEBUG_PIN #define HAL_NFC_NFC_EVENT_DEBUG_PIN 31 #endif // HAL_NFC_DETECT_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_DETECT_EVENT_DEBUG_PIN #define HAL_NFC_DETECT_EVENT_DEBUG_PIN 31 #endif // HAL_NFC_TIMER4_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_TIMER4_EVENT_DEBUG_PIN #define HAL_NFC_TIMER4_EVENT_DEBUG_PIN 31 @@ -7333,17 +7333,17 @@ #define NFC_T4T_HAL_ENABLED 0 #endif // NFCT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef NFCT_CONFIG_IRQ_PRIORITY #define NFCT_CONFIG_IRQ_PRIORITY 7 @@ -7355,88 +7355,88 @@ #define HAL_NFC_CONFIG_LOG_ENABLED 0 #endif // HAL_NFC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef HAL_NFC_CONFIG_LOG_LEVEL #define HAL_NFC_CONFIG_LOG_LEVEL 3 #endif // HAL_NFC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef HAL_NFC_CONFIG_INFO_COLOR #define HAL_NFC_CONFIG_INFO_COLOR 0 #endif // HAL_NFC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef HAL_NFC_CONFIG_DEBUG_COLOR #define HAL_NFC_CONFIG_DEBUG_COLOR 0 #endif // HAL_NFC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef HAL_NFC_CONFIG_LOG_LEVEL #define HAL_NFC_CONFIG_LOG_LEVEL 3 #endif // HAL_NFC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef HAL_NFC_CONFIG_INFO_COLOR #define HAL_NFC_CONFIG_INFO_COLOR 0 #endif // HAL_NFC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef HAL_NFC_CONFIG_DEBUG_COLOR #define HAL_NFC_CONFIG_DEBUG_COLOR 0 @@ -7450,560 +7450,560 @@ #define HAL_NFC_CONFIG_DEBUG_PIN_ENABLED 0 #endif // HAL_NFC_HCLOCK_ON_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_HCLOCK_ON_DEBUG_PIN #define HAL_NFC_HCLOCK_ON_DEBUG_PIN 31 #endif // HAL_NFC_HCLOCK_OFF_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_HCLOCK_OFF_DEBUG_PIN #define HAL_NFC_HCLOCK_OFF_DEBUG_PIN 31 #endif // HAL_NFC_NFC_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_NFC_EVENT_DEBUG_PIN #define HAL_NFC_NFC_EVENT_DEBUG_PIN 31 #endif // HAL_NFC_DETECT_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_DETECT_EVENT_DEBUG_PIN #define HAL_NFC_DETECT_EVENT_DEBUG_PIN 31 #endif // HAL_NFC_TIMER4_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_TIMER4_EVENT_DEBUG_PIN #define HAL_NFC_TIMER4_EVENT_DEBUG_PIN 31 #endif // HAL_NFC_HCLOCK_ON_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_HCLOCK_ON_DEBUG_PIN #define HAL_NFC_HCLOCK_ON_DEBUG_PIN 31 #endif // HAL_NFC_HCLOCK_OFF_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_HCLOCK_OFF_DEBUG_PIN #define HAL_NFC_HCLOCK_OFF_DEBUG_PIN 31 #endif // HAL_NFC_NFC_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_NFC_EVENT_DEBUG_PIN #define HAL_NFC_NFC_EVENT_DEBUG_PIN 31 #endif // HAL_NFC_DETECT_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_DETECT_EVENT_DEBUG_PIN #define HAL_NFC_DETECT_EVENT_DEBUG_PIN 31 #endif // HAL_NFC_TIMER4_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_TIMER4_EVENT_DEBUG_PIN #define HAL_NFC_TIMER4_EVENT_DEBUG_PIN 31 @@ -8013,16 +8013,16 @@ // -// +// //========================================================== -// nRF_Segger_RTT +// nRF_Segger_RTT //========================================================== // segger_rtt - SEGGER RTT //========================================================== -// SEGGER_RTT_CONFIG_BUFFER_SIZE_UP - Size of upstream buffer. +// SEGGER_RTT_CONFIG_BUFFER_SIZE_UP - Size of upstream buffer. // Note that either @ref NRF_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE // or this value is actually used. It depends on which one is bigger. @@ -8030,43 +8030,43 @@ #define SEGGER_RTT_CONFIG_BUFFER_SIZE_UP 512 #endif -// SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS - Size of upstream buffer. +// SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS - Size of upstream buffer. #ifndef SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS #define SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS 2 #endif -// SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN - Size of upstream buffer. +// SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN - Size of upstream buffer. #ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN #define SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN 16 #endif -// SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS - Size of upstream buffer. +// SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS - Size of upstream buffer. #ifndef SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS #define SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS 2 #endif // SEGGER_RTT_CONFIG_DEFAULT_MODE - RTT behavior if the buffer is full. - + // The following modes are supported: // - SKIP - Do not block, output nothing. // - TRIM - Do not block, output as much as fits. // - BLOCK - Wait until there is space in the buffer. -// <0=> SKIP -// <1=> TRIM -// <2=> BLOCK_IF_FIFO_FULL +// <0=> SKIP +// <1=> TRIM +// <2=> BLOCK_IF_FIFO_FULL #ifndef SEGGER_RTT_CONFIG_DEFAULT_MODE #define SEGGER_RTT_CONFIG_DEFAULT_MODE 0 #endif -// +// //========================================================== -// +// //========================================================== -// nRF_SoftDevice +// nRF_SoftDevice //========================================================== // NRF_SDH_ANT_ENABLED - nrf_sdh_ant - SoftDevice ANT event handler @@ -8074,42 +8074,42 @@ #ifndef NRF_SDH_ANT_ENABLED #define NRF_SDH_ANT_ENABLED 0 #endif -// ANT Channels +// ANT Channels //========================================================== -// NRF_SDH_ANT_TOTAL_CHANNELS_ALLOCATED - Allocated ANT channels. +// NRF_SDH_ANT_TOTAL_CHANNELS_ALLOCATED - Allocated ANT channels. #ifndef NRF_SDH_ANT_TOTAL_CHANNELS_ALLOCATED #define NRF_SDH_ANT_TOTAL_CHANNELS_ALLOCATED 0 #endif -// NRF_SDH_ANT_ENCRYPTED_CHANNELS - Encrypted ANT channels. +// NRF_SDH_ANT_ENCRYPTED_CHANNELS - Encrypted ANT channels. #ifndef NRF_SDH_ANT_ENCRYPTED_CHANNELS #define NRF_SDH_ANT_ENCRYPTED_CHANNELS 0 #endif -// +// //========================================================== -// ANT Queues +// ANT Queues //========================================================== -// NRF_SDH_ANT_EVENT_QUEUE_SIZE - Event queue size. +// NRF_SDH_ANT_EVENT_QUEUE_SIZE - Event queue size. #ifndef NRF_SDH_ANT_EVENT_QUEUE_SIZE #define NRF_SDH_ANT_EVENT_QUEUE_SIZE 32 #endif -// NRF_SDH_ANT_BURST_QUEUE_SIZE - ANT burst queue size. +// NRF_SDH_ANT_BURST_QUEUE_SIZE - ANT burst queue size. #ifndef NRF_SDH_ANT_BURST_QUEUE_SIZE #define NRF_SDH_ANT_BURST_QUEUE_SIZE 128 #endif -// +// //========================================================== // ANT Observers - Observers and priority levels //========================================================== -// NRF_SDH_ANT_OBSERVER_PRIO_LEVELS - Total number of priority levels for ANT observers. +// NRF_SDH_ANT_OBSERVER_PRIO_LEVELS - Total number of priority levels for ANT observers. // This setting configures the number of priority levels available for the ANT event handlers. // The priority level of a handler determines the order in which it receives events, with respect to other handlers. @@ -8120,59 +8120,59 @@ // ANT Observers priorities - Invididual priorities //========================================================== -// ANT_BPWR_ANT_OBSERVER_PRIO +// ANT_BPWR_ANT_OBSERVER_PRIO // Priority with which ANT events are dispatched to the Bicycle Power Profile. #ifndef ANT_BPWR_ANT_OBSERVER_PRIO #define ANT_BPWR_ANT_OBSERVER_PRIO 1 #endif -// ANT_BSC_ANT_OBSERVER_PRIO +// ANT_BSC_ANT_OBSERVER_PRIO // Priority with which ANT events are dispatched to the Bicycle Speed and Cadence Profile. #ifndef ANT_BSC_ANT_OBSERVER_PRIO #define ANT_BSC_ANT_OBSERVER_PRIO 1 #endif -// ANT_ENCRYPT_ANT_OBSERVER_PRIO +// ANT_ENCRYPT_ANT_OBSERVER_PRIO // Priority with which ANT events are dispatched to the Cryptographic ANT stack configuration module. #ifndef ANT_ENCRYPT_ANT_OBSERVER_PRIO #define ANT_ENCRYPT_ANT_OBSERVER_PRIO 1 #endif -// ANT_HRM_ANT_OBSERVER_PRIO +// ANT_HRM_ANT_OBSERVER_PRIO // Priority with which ANT events are dispatched to the Heart Rate Monitor. #ifndef ANT_HRM_ANT_OBSERVER_PRIO #define ANT_HRM_ANT_OBSERVER_PRIO 1 #endif -// ANT_SDM_ANT_OBSERVER_PRIO +// ANT_SDM_ANT_OBSERVER_PRIO // Priority with which ANT events are dispatched to the Stride Based Speed and Distance Monitor Profile. #ifndef ANT_SDM_ANT_OBSERVER_PRIO #define ANT_SDM_ANT_OBSERVER_PRIO 1 #endif -// ANT_STATE_INDICATOR_ANT_OBSERVER_PRIO +// ANT_STATE_INDICATOR_ANT_OBSERVER_PRIO // Priority with which ANT events are dispatched to the ANT state indicator module. #ifndef ANT_STATE_INDICATOR_ANT_OBSERVER_PRIO #define ANT_STATE_INDICATOR_ANT_OBSERVER_PRIO 1 #endif -// BSP_BTN_ANT_OBSERVER_PRIO +// BSP_BTN_ANT_OBSERVER_PRIO // Priority with which ANT events are dispatched to the Button Control module. #ifndef BSP_BTN_ANT_OBSERVER_PRIO #define BSP_BTN_ANT_OBSERVER_PRIO 1 #endif -// +// //========================================================== -// +// //========================================================== @@ -8188,55 +8188,55 @@ // These values are not used directly by the SoftDevice handler but the application or other libraries might depend on them. // Keep them up-to-date with the desired configuration. //========================================================== -// NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. +// NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. #ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT #define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 0 #endif -// NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. +// NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. #ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT #define NRF_SDH_BLE_CENTRAL_LINK_COUNT 0 #endif -// NRF_SDH_BLE_TOTAL_LINK_COUNT - Maximum number of total concurrent connections using the default configuration. +// NRF_SDH_BLE_TOTAL_LINK_COUNT - Maximum number of total concurrent connections using the default configuration. #ifndef NRF_SDH_BLE_TOTAL_LINK_COUNT #define NRF_SDH_BLE_TOTAL_LINK_COUNT 1 #endif -// NRF_SDH_BLE_GAP_EVENT_LENGTH - The time set aside for this connection on every connection interval in 1.25 ms units. +// NRF_SDH_BLE_GAP_EVENT_LENGTH - The time set aside for this connection on every connection interval in 1.25 ms units. #ifndef NRF_SDH_BLE_GAP_EVENT_LENGTH #define NRF_SDH_BLE_GAP_EVENT_LENGTH 3 #endif -// NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size. +// NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size. #ifndef NRF_SDH_BLE_GATT_MAX_MTU_SIZE #define NRF_SDH_BLE_GATT_MAX_MTU_SIZE 23 #endif -// NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE - Attribute Table size in bytes. The size must be a multiple of 4. +// NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE - Attribute Table size in bytes. The size must be a multiple of 4. #ifndef NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE #define NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE 1408 #endif -// NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs. +// NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs. #ifndef NRF_SDH_BLE_VS_UUID_COUNT #define NRF_SDH_BLE_VS_UUID_COUNT 0 #endif // NRF_SDH_BLE_SERVICE_CHANGED - Include the Service Changed characteristic in the Attribute Table. - + #ifndef NRF_SDH_BLE_SERVICE_CHANGED #define NRF_SDH_BLE_SERVICE_CHANGED 0 #endif -// +// //========================================================== // BLE Observers - Observers and priority levels //========================================================== -// NRF_SDH_BLE_OBSERVER_PRIO_LEVELS - Total number of priority levels for BLE observers. +// NRF_SDH_BLE_OBSERVER_PRIO_LEVELS - Total number of priority levels for BLE observers. // This setting configures the number of priority levels available for BLE event handlers. // The priority level of a handler determines the order in which it receives events, with respect to other handlers. @@ -8247,276 +8247,276 @@ // BLE Observers priorities - Invididual priorities //========================================================== -// BLE_ADV_BLE_OBSERVER_PRIO +// BLE_ADV_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Advertising module. #ifndef BLE_ADV_BLE_OBSERVER_PRIO #define BLE_ADV_BLE_OBSERVER_PRIO 2 #endif -// BLE_ANCS_C_BLE_OBSERVER_PRIO +// BLE_ANCS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Apple Notification Service Client. #ifndef BLE_ANCS_C_BLE_OBSERVER_PRIO #define BLE_ANCS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_ANS_C_BLE_OBSERVER_PRIO +// BLE_ANS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Alert Notification Service Client. #ifndef BLE_ANS_C_BLE_OBSERVER_PRIO #define BLE_ANS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_BAS_BLE_OBSERVER_PRIO +// BLE_BAS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Battery Service. #ifndef BLE_BAS_BLE_OBSERVER_PRIO #define BLE_BAS_BLE_OBSERVER_PRIO 2 #endif -// BLE_BAS_C_BLE_OBSERVER_PRIO +// BLE_BAS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Battery Service Client. #ifndef BLE_BAS_C_BLE_OBSERVER_PRIO #define BLE_BAS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_BPS_BLE_OBSERVER_PRIO +// BLE_BPS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Blood Pressure Service. #ifndef BLE_BPS_BLE_OBSERVER_PRIO #define BLE_BPS_BLE_OBSERVER_PRIO 2 #endif -// BLE_CONN_PARAMS_BLE_OBSERVER_PRIO +// BLE_CONN_PARAMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Connection parameters module. #ifndef BLE_CONN_PARAMS_BLE_OBSERVER_PRIO #define BLE_CONN_PARAMS_BLE_OBSERVER_PRIO 2 #endif -// BLE_CONN_STATE_BLE_OBSERVER_PRIO +// BLE_CONN_STATE_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Connection State module. #ifndef BLE_CONN_STATE_BLE_OBSERVER_PRIO #define BLE_CONN_STATE_BLE_OBSERVER_PRIO 0 #endif -// BLE_CSCS_BLE_OBSERVER_PRIO +// BLE_CSCS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Cycling Speed and Cadence Service. #ifndef BLE_CSCS_BLE_OBSERVER_PRIO #define BLE_CSCS_BLE_OBSERVER_PRIO 2 #endif -// BLE_CTS_C_BLE_OBSERVER_PRIO +// BLE_CTS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Current Time Service Client. #ifndef BLE_CTS_C_BLE_OBSERVER_PRIO #define BLE_CTS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_DB_DISC_BLE_OBSERVER_PRIO +// BLE_DB_DISC_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Database Discovery module. #ifndef BLE_DB_DISC_BLE_OBSERVER_PRIO #define BLE_DB_DISC_BLE_OBSERVER_PRIO 1 #endif -// BLE_DFU_BLE_OBSERVER_PRIO +// BLE_DFU_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the DFU Service. #ifndef BLE_DFU_BLE_OBSERVER_PRIO #define BLE_DFU_BLE_OBSERVER_PRIO 2 #endif -// BLE_GLS_BLE_OBSERVER_PRIO +// BLE_GLS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Glucose Service. #ifndef BLE_GLS_BLE_OBSERVER_PRIO #define BLE_GLS_BLE_OBSERVER_PRIO 2 #endif -// BLE_HIDS_BLE_OBSERVER_PRIO +// BLE_HIDS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Human Interface Device Service. #ifndef BLE_HIDS_BLE_OBSERVER_PRIO #define BLE_HIDS_BLE_OBSERVER_PRIO 2 #endif -// BLE_HRS_BLE_OBSERVER_PRIO +// BLE_HRS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Heart Rate Service. #ifndef BLE_HRS_BLE_OBSERVER_PRIO #define BLE_HRS_BLE_OBSERVER_PRIO 2 #endif -// BLE_HRS_C_BLE_OBSERVER_PRIO +// BLE_HRS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Heart Rate Service Client. #ifndef BLE_HRS_C_BLE_OBSERVER_PRIO #define BLE_HRS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_HTS_BLE_OBSERVER_PRIO +// BLE_HTS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Health Thermometer Service. #ifndef BLE_HTS_BLE_OBSERVER_PRIO #define BLE_HTS_BLE_OBSERVER_PRIO 2 #endif -// BLE_IAS_BLE_OBSERVER_PRIO +// BLE_IAS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Immediate Alert Service. #ifndef BLE_IAS_BLE_OBSERVER_PRIO #define BLE_IAS_BLE_OBSERVER_PRIO 2 #endif -// BLE_IAS_C_BLE_OBSERVER_PRIO +// BLE_IAS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Immediate Alert Service Client. #ifndef BLE_IAS_C_BLE_OBSERVER_PRIO #define BLE_IAS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_LBS_BLE_OBSERVER_PRIO +// BLE_LBS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the LED Button Service. #ifndef BLE_LBS_BLE_OBSERVER_PRIO #define BLE_LBS_BLE_OBSERVER_PRIO 2 #endif -// BLE_LBS_C_BLE_OBSERVER_PRIO +// BLE_LBS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the LED Button Service Client. #ifndef BLE_LBS_C_BLE_OBSERVER_PRIO #define BLE_LBS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_LLS_BLE_OBSERVER_PRIO +// BLE_LLS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Link Loss Service. #ifndef BLE_LLS_BLE_OBSERVER_PRIO #define BLE_LLS_BLE_OBSERVER_PRIO 2 #endif -// BLE_LNS_BLE_OBSERVER_PRIO +// BLE_LNS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Location Navigation Service. #ifndef BLE_LNS_BLE_OBSERVER_PRIO #define BLE_LNS_BLE_OBSERVER_PRIO 2 #endif -// BLE_NUS_BLE_OBSERVER_PRIO +// BLE_NUS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the UART Service. #ifndef BLE_NUS_BLE_OBSERVER_PRIO #define BLE_NUS_BLE_OBSERVER_PRIO 2 #endif -// BLE_NUS_C_BLE_OBSERVER_PRIO +// BLE_NUS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the UART Central Service. #ifndef BLE_NUS_C_BLE_OBSERVER_PRIO #define BLE_NUS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_OTS_BLE_OBSERVER_PRIO +// BLE_OTS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Object transfer service. #ifndef BLE_OTS_BLE_OBSERVER_PRIO #define BLE_OTS_BLE_OBSERVER_PRIO 2 #endif -// BLE_OTS_C_BLE_OBSERVER_PRIO +// BLE_OTS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Object transfer service client. #ifndef BLE_OTS_C_BLE_OBSERVER_PRIO #define BLE_OTS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_RSCS_BLE_OBSERVER_PRIO +// BLE_RSCS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Running Speed and Cadence Service. #ifndef BLE_RSCS_BLE_OBSERVER_PRIO #define BLE_RSCS_BLE_OBSERVER_PRIO 2 #endif -// BLE_RSCS_C_BLE_OBSERVER_PRIO +// BLE_RSCS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Running Speed and Cadence Client. #ifndef BLE_RSCS_C_BLE_OBSERVER_PRIO #define BLE_RSCS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_TPS_BLE_OBSERVER_PRIO +// BLE_TPS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the TX Power Service. #ifndef BLE_TPS_BLE_OBSERVER_PRIO #define BLE_TPS_BLE_OBSERVER_PRIO 2 #endif -// BSP_BTN_BLE_OBSERVER_PRIO +// BSP_BTN_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Button Control module. #ifndef BSP_BTN_BLE_OBSERVER_PRIO #define BSP_BTN_BLE_OBSERVER_PRIO 1 #endif -// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the NFC pairing library. #ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO #define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 #endif -// NRF_BLE_BMS_BLE_OBSERVER_PRIO +// NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. #ifndef NRF_BLE_BMS_BLE_OBSERVER_PRIO #define NRF_BLE_BMS_BLE_OBSERVER_PRIO 2 #endif -// NRF_BLE_CGMS_BLE_OBSERVER_PRIO +// NRF_BLE_CGMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Contiuon Glucose Monitoring Service. #ifndef NRF_BLE_CGMS_BLE_OBSERVER_PRIO #define NRF_BLE_CGMS_BLE_OBSERVER_PRIO 2 #endif -// NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO +// NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the GATT Service Client. #ifndef NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO #define NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO 2 #endif -// NRF_BLE_GATT_BLE_OBSERVER_PRIO +// NRF_BLE_GATT_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the GATT module. #ifndef NRF_BLE_GATT_BLE_OBSERVER_PRIO #define NRF_BLE_GATT_BLE_OBSERVER_PRIO 2 #endif -// NRF_BLE_QWR_BLE_OBSERVER_PRIO +// NRF_BLE_QWR_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Queued writes module. #ifndef NRF_BLE_QWR_BLE_OBSERVER_PRIO #define NRF_BLE_QWR_BLE_OBSERVER_PRIO 2 #endif -// PM_BLE_OBSERVER_PRIO +// PM_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Peer Manager module. #ifndef PM_BLE_OBSERVER_PRIO #define PM_BLE_OBSERVER_PRIO 2 #endif -// +// //========================================================== -// +// //========================================================== @@ -8527,46 +8527,46 @@ #ifndef NRF_SDH_ENABLED #define NRF_SDH_ENABLED 1 #endif -// Dispatch model +// Dispatch model // This setting configures how Stack events are dispatched to the application. //========================================================== // NRF_SDH_DISPATCH_MODEL - + // NRF_SDH_DISPATCH_MODEL_INTERRUPT: SoftDevice events are passed to the application from the interrupt context. // NRF_SDH_DISPATCH_MODEL_APPSH: SoftDevice events are scheduled using @ref app_scheduler. // NRF_SDH_DISPATCH_MODEL_POLLING: SoftDevice events are to be fetched manually. -// <0=> NRF_SDH_DISPATCH_MODEL_INTERRUPT -// <1=> NRF_SDH_DISPATCH_MODEL_APPSH -// <2=> NRF_SDH_DISPATCH_MODEL_POLLING +// <0=> NRF_SDH_DISPATCH_MODEL_INTERRUPT +// <1=> NRF_SDH_DISPATCH_MODEL_APPSH +// <2=> NRF_SDH_DISPATCH_MODEL_POLLING #ifndef NRF_SDH_DISPATCH_MODEL #define NRF_SDH_DISPATCH_MODEL 0 #endif -// +// //========================================================== // Clock - SoftDevice clock configuration //========================================================== // NRF_SDH_CLOCK_LF_SRC - SoftDevice clock source. - -// <0=> NRF_CLOCK_LF_SRC_RC -// <1=> NRF_CLOCK_LF_SRC_XTAL -// <2=> NRF_CLOCK_LF_SRC_SYNTH + +// <0=> NRF_CLOCK_LF_SRC_RC +// <1=> NRF_CLOCK_LF_SRC_XTAL +// <2=> NRF_CLOCK_LF_SRC_SYNTH #ifndef NRF_SDH_CLOCK_LF_SRC #define NRF_SDH_CLOCK_LF_SRC 1 #endif -// NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. +// NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. #ifndef NRF_SDH_CLOCK_LF_RC_CTIV #define NRF_SDH_CLOCK_LF_RC_CTIV 0 #endif -// NRF_SDH_CLOCK_LF_RC_TEMP_CTIV - SoftDevice calibration timer interval under constant temperature. +// NRF_SDH_CLOCK_LF_RC_TEMP_CTIV - SoftDevice calibration timer interval under constant temperature. // How often (in number of calibration intervals) the RC oscillator shall be calibrated // if the temperature has not changed. @@ -8575,27 +8575,27 @@ #endif // NRF_SDH_CLOCK_LF_XTAL_ACCURACY - External crystal clock accuracy used in the LL to compute timing windows. - -// <0=> NRF_CLOCK_LF_XTAL_ACCURACY_250_PPM -// <1=> NRF_CLOCK_LF_XTAL_ACCURACY_500_PPM -// <2=> NRF_CLOCK_LF_XTAL_ACCURACY_150_PPM -// <3=> NRF_CLOCK_LF_XTAL_ACCURACY_100_PPM -// <4=> NRF_CLOCK_LF_XTAL_ACCURACY_75_PPM -// <5=> NRF_CLOCK_LF_XTAL_ACCURACY_50_PPM -// <6=> NRF_CLOCK_LF_XTAL_ACCURACY_30_PPM -// <7=> NRF_CLOCK_LF_XTAL_ACCURACY_20_PPM + +// <0=> NRF_CLOCK_LF_XTAL_ACCURACY_250_PPM +// <1=> NRF_CLOCK_LF_XTAL_ACCURACY_500_PPM +// <2=> NRF_CLOCK_LF_XTAL_ACCURACY_150_PPM +// <3=> NRF_CLOCK_LF_XTAL_ACCURACY_100_PPM +// <4=> NRF_CLOCK_LF_XTAL_ACCURACY_75_PPM +// <5=> NRF_CLOCK_LF_XTAL_ACCURACY_50_PPM +// <6=> NRF_CLOCK_LF_XTAL_ACCURACY_30_PPM +// <7=> NRF_CLOCK_LF_XTAL_ACCURACY_20_PPM #ifndef NRF_SDH_CLOCK_LF_XTAL_ACCURACY #define NRF_SDH_CLOCK_LF_XTAL_ACCURACY 7 #endif -// +// //========================================================== // SDH Observers - Observers and priority levels //========================================================== -// NRF_SDH_REQ_OBSERVER_PRIO_LEVELS - Total number of priority levels for request observers. +// NRF_SDH_REQ_OBSERVER_PRIO_LEVELS - Total number of priority levels for request observers. // This setting configures the number of priority levels available for the SoftDevice request event handlers. // The priority level of a handler determines the order in which it receives events, with respect to other handlers. @@ -8603,7 +8603,7 @@ #define NRF_SDH_REQ_OBSERVER_PRIO_LEVELS 2 #endif -// NRF_SDH_STATE_OBSERVER_PRIO_LEVELS - Total number of priority levels for state observers. +// NRF_SDH_STATE_OBSERVER_PRIO_LEVELS - Total number of priority levels for state observers. // This setting configures the number of priority levels available for the SoftDevice state event handlers. // The priority level of a handler determines the order in which it receives events, with respect to other handlers. @@ -8611,7 +8611,7 @@ #define NRF_SDH_STATE_OBSERVER_PRIO_LEVELS 2 #endif -// NRF_SDH_STACK_OBSERVER_PRIO_LEVELS - Total number of priority levels for stack event observers. +// NRF_SDH_STACK_OBSERVER_PRIO_LEVELS - Total number of priority levels for stack event observers. // This setting configures the number of priority levels available for the SoftDevice stack event handlers (ANT, BLE, SoC). // The priority level of a handler determines the order in which it receives events, with respect to other handlers. @@ -8623,34 +8623,34 @@ // State Observers priorities - Invididual priorities //========================================================== -// CLOCK_CONFIG_STATE_OBSERVER_PRIO +// CLOCK_CONFIG_STATE_OBSERVER_PRIO // Priority with which state events are dispatched to the Clock driver. #ifndef CLOCK_CONFIG_STATE_OBSERVER_PRIO #define CLOCK_CONFIG_STATE_OBSERVER_PRIO 0 #endif -// POWER_CONFIG_STATE_OBSERVER_PRIO +// POWER_CONFIG_STATE_OBSERVER_PRIO // Priority with which state events are dispatched to the Power driver. #ifndef POWER_CONFIG_STATE_OBSERVER_PRIO #define POWER_CONFIG_STATE_OBSERVER_PRIO 0 #endif -// RNG_CONFIG_STATE_OBSERVER_PRIO +// RNG_CONFIG_STATE_OBSERVER_PRIO // Priority with which state events are dispatched to this module. #ifndef RNG_CONFIG_STATE_OBSERVER_PRIO #define RNG_CONFIG_STATE_OBSERVER_PRIO 0 #endif -// +// //========================================================== // Stack Event Observers priorities - Invididual priorities //========================================================== -// NRF_SDH_ANT_STACK_OBSERVER_PRIO +// NRF_SDH_ANT_STACK_OBSERVER_PRIO // This setting configures the priority with which ANT events are processed with respect to other events coming from the stack. // Modify this setting if you need to have ANT events dispatched before or after other stack events, such as BLE or SoC. // Zero is the highest priority. @@ -8659,7 +8659,7 @@ #define NRF_SDH_ANT_STACK_OBSERVER_PRIO 0 #endif -// NRF_SDH_BLE_STACK_OBSERVER_PRIO +// NRF_SDH_BLE_STACK_OBSERVER_PRIO // This setting configures the priority with which BLE events are processed with respect to other events coming from the stack. // Modify this setting if you need to have BLE events dispatched before or after other stack events, such as ANT or SoC. // Zero is the highest priority. @@ -8668,7 +8668,7 @@ #define NRF_SDH_BLE_STACK_OBSERVER_PRIO 0 #endif -// NRF_SDH_SOC_STACK_OBSERVER_PRIO +// NRF_SDH_SOC_STACK_OBSERVER_PRIO // This setting configures the priority with which SoC events are processed with respect to other events coming from the stack. // Modify this setting if you need to have SoC events dispatched before or after other stack events, such as ANT or BLE. // Zero is the highest priority. @@ -8677,10 +8677,10 @@ #define NRF_SDH_SOC_STACK_OBSERVER_PRIO 0 #endif -// +// //========================================================== -// +// //========================================================== @@ -8694,7 +8694,7 @@ // SoC Observers - Observers and priority levels //========================================================== -// NRF_SDH_SOC_OBSERVER_PRIO_LEVELS - Total number of priority levels for SoC observers. +// NRF_SDH_SOC_OBSERVER_PRIO_LEVELS - Total number of priority levels for SoC observers. // This setting configures the number of priority levels available for the SoC event handlers. // The priority level of a handler determines the order in which it receives events, with respect to other handlers. @@ -8705,44 +8705,44 @@ // SoC Observers priorities - Invididual priorities //========================================================== -// BLE_ADV_SOC_OBSERVER_PRIO +// BLE_ADV_SOC_OBSERVER_PRIO // Priority with which SoC events are dispatched to the Advertising module. #ifndef BLE_ADV_SOC_OBSERVER_PRIO #define BLE_ADV_SOC_OBSERVER_PRIO 1 #endif -// BLE_DFU_SOC_OBSERVER_PRIO +// BLE_DFU_SOC_OBSERVER_PRIO // Priority with which BLE events are dispatched to the DFU Service. #ifndef BLE_DFU_SOC_OBSERVER_PRIO #define BLE_DFU_SOC_OBSERVER_PRIO 1 #endif -// CLOCK_CONFIG_SOC_OBSERVER_PRIO +// CLOCK_CONFIG_SOC_OBSERVER_PRIO // Priority with which SoC events are dispatched to the Clock driver. #ifndef CLOCK_CONFIG_SOC_OBSERVER_PRIO #define CLOCK_CONFIG_SOC_OBSERVER_PRIO 0 #endif -// POWER_CONFIG_SOC_OBSERVER_PRIO +// POWER_CONFIG_SOC_OBSERVER_PRIO // Priority with which SoC events are dispatched to the Power driver. #ifndef POWER_CONFIG_SOC_OBSERVER_PRIO #define POWER_CONFIG_SOC_OBSERVER_PRIO 0 #endif -// +// //========================================================== -// +// //========================================================== // -// +// //========================================================== // <<< end of configuration section >>> diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52840/config/sdk_config.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52840/config/sdk_config.h index 834e1991563..f401e4deeb7 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52840/config/sdk_config.h +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52840/config/sdk_config.h @@ -1,30 +1,30 @@ /** * Copyright (c) 2017 - 2017, Nordic Semiconductor ASA - * + * * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. - * + * * 2. Redistributions in binary form, except as embedded into a Nordic * Semiconductor ASA integrated circuit in a product or a software update for * such product, 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. Neither the name of Nordic Semiconductor ASA nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. - * + * * 4. This software, with or without modification, must only be used with a * Nordic Semiconductor ASA integrated circuit. - * + * * 5. Any software provided in binary form under this license must not be reverse * engineered, decompiled, modified and/or disassembled. - * + * * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -35,7 +35,7 @@ * 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. - * + * */ @@ -46,7 +46,7 @@ #ifdef USE_APP_CONFIG #include "app_config.h" #endif -// Board Support +// Board Support // Enable NRF Asserts when Mbed NDEBUG is not set #if !defined(NDEBUG) && !defined(DEBUG_NRF_USER) @@ -55,16 +55,16 @@ //========================================================== // BSP_BTN_BLE_ENABLED - bsp_btn_ble - Button Control for BLE - + #ifndef BSP_BTN_BLE_ENABLED #define BSP_BTN_BLE_ENABLED 0 #endif -// +// //========================================================== -// nRF_ANT +// nRF_ANT //========================================================== // ANTFS_ENABLED - ant_fs - ANT File Share module. @@ -72,96 +72,96 @@ #ifndef ANTFS_ENABLED #define ANTFS_ENABLED 0 #endif -// ANTFS_CONFIG_NETWORK_NUMBER - ANT-FS network number. +// ANTFS_CONFIG_NETWORK_NUMBER - ANT-FS network number. #ifndef ANTFS_CONFIG_NETWORK_NUMBER #define ANTFS_CONFIG_NETWORK_NUMBER 0 #endif -// ANTFS_CONFIG_CHANNEL_NUMBER - ANT-FS channel number. +// ANTFS_CONFIG_CHANNEL_NUMBER - ANT-FS channel number. #ifndef ANTFS_CONFIG_CHANNEL_NUMBER #define ANTFS_CONFIG_CHANNEL_NUMBER 0 #endif -// ANTFS_CONFIG_PAIRING_TIMEOUT - Pairing timeout - how long the UI will wait for a response to a pairing request before switching to the link layer, in seconds. +// ANTFS_CONFIG_PAIRING_TIMEOUT - Pairing timeout - how long the UI will wait for a response to a pairing request before switching to the link layer, in seconds. #ifndef ANTFS_CONFIG_PAIRING_TIMEOUT #define ANTFS_CONFIG_PAIRING_TIMEOUT 120 #endif -// ANTFS_CONFIG_LINK_COMMAND_TIMEOUT - Command timeout - how long the client will wait without receiving any commands before switching to the link layer, in seconds. +// ANTFS_CONFIG_LINK_COMMAND_TIMEOUT - Command timeout - how long the client will wait without receiving any commands before switching to the link layer, in seconds. #ifndef ANTFS_CONFIG_LINK_COMMAND_TIMEOUT #define ANTFS_CONFIG_LINK_COMMAND_TIMEOUT 10 #endif -// ANTFS_CONFIG_TRANS_TYPE - ANT-FS Transmission Type. +// ANTFS_CONFIG_TRANS_TYPE - ANT-FS Transmission Type. #ifndef ANTFS_CONFIG_TRANS_TYPE #define ANTFS_CONFIG_TRANS_TYPE 10 #endif -// ANTFS_CONFIG_DEVICE_TYPE - ANT device type for channel configuration. +// ANTFS_CONFIG_DEVICE_TYPE - ANT device type for channel configuration. #ifndef ANTFS_CONFIG_DEVICE_TYPE #define ANTFS_CONFIG_DEVICE_TYPE 1 #endif // ANTFS_CONFIG_BEACON_STATUS_PERIOD - ANT-FS Beacon Message Period. - -// <0=> 0.5 Hz -// <1=> 1 Hz -// <2=> 2 Hz -// <3=> 4 Hz -// <4=> 8 Hz + +// <0=> 0.5 Hz +// <1=> 1 Hz +// <2=> 2 Hz +// <3=> 4 Hz +// <4=> 8 Hz #ifndef ANTFS_CONFIG_BEACON_STATUS_PERIOD #define ANTFS_CONFIG_BEACON_STATUS_PERIOD 3 #endif // ANTFS_CONFIG_TRANSMIT_POWER - ANT Transmit Power. - -// <0=> Lowest ANT Tx power level setting. (-20dBm) -// <1=> ANT Tx power > Lvl 0. (-12dBm) -// <2=> ANT Tx power > Lvl 1. (-4dBm) -// <3=> ANT Tx power > Lvl 2. Default tx power level. (0dBm) -// <4=> ANT Tx power > Lvl 3. (+4dBm) -// <128=> Custom tx power selection + +// <0=> Lowest ANT Tx power level setting. (-20dBm) +// <1=> ANT Tx power > Lvl 0. (-12dBm) +// <2=> ANT Tx power > Lvl 1. (-4dBm) +// <3=> ANT Tx power > Lvl 2. Default tx power level. (0dBm) +// <4=> ANT Tx power > Lvl 3. (+4dBm) +// <128=> Custom tx power selection #ifndef ANTFS_CONFIG_TRANSMIT_POWER #define ANTFS_CONFIG_TRANSMIT_POWER 3 #endif -// ANTFS_CONFIG_CUSTOM_TRANSMIT_POWER - ANT Custom Transmit Power. +// ANTFS_CONFIG_CUSTOM_TRANSMIT_POWER - ANT Custom Transmit Power. #ifndef ANTFS_CONFIG_CUSTOM_TRANSMIT_POWER #define ANTFS_CONFIG_CUSTOM_TRANSMIT_POWER 0 #endif // ANTFS_CONFIG_AUTH_TYPE_PAIRING_ENABLED - Use pairing and key exchange authentication. - + #ifndef ANTFS_CONFIG_AUTH_TYPE_PAIRING_ENABLED #define ANTFS_CONFIG_AUTH_TYPE_PAIRING_ENABLED 0 #endif // ANTFS_CONFIG_AUTH_TYPE_PASSKEY_ENABLED - Use passkey authentication. - + #ifndef ANTFS_CONFIG_AUTH_TYPE_PASSKEY_ENABLED #define ANTFS_CONFIG_AUTH_TYPE_PASSKEY_ENABLED 0 #endif // ANTFS_CONFIG_AUTH_TYPE_PASSTHROUGH_ENABLED - Allow host to bypass authentication. - + #ifndef ANTFS_CONFIG_AUTH_TYPE_PASSTHROUGH_ENABLED #define ANTFS_CONFIG_AUTH_TYPE_PASSTHROUGH_ENABLED 0 #endif // ANTFS_CONFIG_UPLOAD_ENABLED - Support upload operation. - + #ifndef ANTFS_CONFIG_UPLOAD_ENABLED #define ANTFS_CONFIG_UPLOAD_ENABLED 0 #endif // ANTFS_CONFIG_DEBUG_LED_ENABLED - Enables LED debug in the module. - + #ifndef ANTFS_CONFIG_DEBUG_LED_ENABLED #define ANTFS_CONFIG_DEBUG_LED_ENABLED 0 @@ -180,28 +180,28 @@ #define ANT_BPWR_LOG_ENABLED 0 #endif // ANT_BPWR_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BPWR_LOG_LEVEL #define ANT_BPWR_LOG_LEVEL 3 #endif // ANT_BPWR_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BPWR_INFO_COLOR #define ANT_BPWR_INFO_COLOR 0 @@ -215,28 +215,28 @@ #define ANT_BPWR_COMMON_LOG_ENABLED 0 #endif // ANT_BPWR_COMMON_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BPWR_COMMON_LOG_LEVEL #define ANT_BPWR_COMMON_LOG_LEVEL 3 #endif // ANT_BPWR_COMMON_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BPWR_COMMON_INFO_COLOR #define ANT_BPWR_COMMON_INFO_COLOR 0 @@ -250,28 +250,28 @@ #define ANT_BPWR_PAGE_TORQUE_LOG_ENABLED 0 #endif // ANT_BPWR_PAGE_TORQUE_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BPWR_PAGE_TORQUE_LOG_LEVEL #define ANT_BPWR_PAGE_TORQUE_LOG_LEVEL 3 #endif // ANT_BPWR_PAGE_TORQUE_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BPWR_PAGE_TORQUE_INFO_COLOR #define ANT_BPWR_PAGE_TORQUE_INFO_COLOR 0 @@ -285,28 +285,28 @@ #define ANT_BPWR_PAGE_1_LOG_ENABLED 0 #endif // ANT_BPWR_PAGE_1_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BPWR_PAGE_1_LOG_LEVEL #define ANT_BPWR_PAGE_1_LOG_LEVEL 3 #endif // ANT_BPWR_PAGE_1_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BPWR_PAGE_1_INFO_COLOR #define ANT_BPWR_PAGE_1_INFO_COLOR 0 @@ -320,28 +320,28 @@ #define ANT_BPWR_PAGE_16_LOG_ENABLED 0 #endif // ANT_BPWR_PAGE_16_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BPWR_PAGE_16_LOG_LEVEL #define ANT_BPWR_PAGE_16_LOG_LEVEL 3 #endif // ANT_BPWR_PAGE_16_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BPWR_PAGE_16_INFO_COLOR #define ANT_BPWR_PAGE_16_INFO_COLOR 0 @@ -355,28 +355,28 @@ #define ANT_BPWR_PAGE_17_LOG_ENABLED 0 #endif // ANT_BPWR_PAGE_17_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BPWR_PAGE_17_LOG_LEVEL #define ANT_BPWR_PAGE_17_LOG_LEVEL 3 #endif // ANT_BPWR_PAGE_17_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BPWR_PAGE_17_INFO_COLOR #define ANT_BPWR_PAGE_17_INFO_COLOR 0 @@ -390,28 +390,28 @@ #define ANT_BPWR_PAGE_18_LOG_ENABLED 0 #endif // ANT_BPWR_PAGE_18_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BPWR_PAGE_18_LOG_LEVEL #define ANT_BPWR_PAGE_18_LOG_LEVEL 3 #endif // ANT_BPWR_PAGE_18_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BPWR_PAGE_18_INFO_COLOR #define ANT_BPWR_PAGE_18_INFO_COLOR 0 @@ -432,28 +432,28 @@ #define ANT_BSC_LOG_ENABLED 0 #endif // ANT_BSC_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BSC_LOG_LEVEL #define ANT_BSC_LOG_LEVEL 3 #endif // ANT_BSC_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BSC_INFO_COLOR #define ANT_BSC_INFO_COLOR 0 @@ -467,28 +467,28 @@ #define ANT_BSC_COMBINED_PAGE_0_LOG_ENABLED 0 #endif // ANT_BSC_COMBINED_PAGE_0_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BSC_COMBINED_PAGE_0_LOG_LEVEL #define ANT_BSC_COMBINED_PAGE_0_LOG_LEVEL 3 #endif // ANT_BSC_COMBINED_PAGE_0_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BSC_COMBINED_PAGE_0_INFO_COLOR #define ANT_BSC_COMBINED_PAGE_0_INFO_COLOR 0 @@ -502,28 +502,28 @@ #define ANT_BSC_PAGE_0_LOG_ENABLED 0 #endif // ANT_BSC_PAGE_0_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BSC_PAGE_0_LOG_LEVEL #define ANT_BSC_PAGE_0_LOG_LEVEL 3 #endif // ANT_BSC_PAGE_0_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BSC_PAGE_0_INFO_COLOR #define ANT_BSC_PAGE_0_INFO_COLOR 0 @@ -537,28 +537,28 @@ #define ANT_BSC_PAGE_1_LOG_ENABLED 0 #endif // ANT_BSC_PAGE_1_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BSC_PAGE_1_LOG_LEVEL #define ANT_BSC_PAGE_1_LOG_LEVEL 3 #endif // ANT_BSC_PAGE_1_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BSC_PAGE_1_INFO_COLOR #define ANT_BSC_PAGE_1_INFO_COLOR 0 @@ -572,28 +572,28 @@ #define ANT_BSC_PAGE_2_LOG_ENABLED 0 #endif // ANT_BSC_PAGE_2_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BSC_PAGE_2_LOG_LEVEL #define ANT_BSC_PAGE_2_LOG_LEVEL 3 #endif // ANT_BSC_PAGE_2_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BSC_PAGE_2_INFO_COLOR #define ANT_BSC_PAGE_2_INFO_COLOR 0 @@ -607,28 +607,28 @@ #define ANT_BSC_PAGE_3_LOG_ENABLED 0 #endif // ANT_BSC_PAGE_3_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BSC_PAGE_3_LOG_LEVEL #define ANT_BSC_PAGE_3_LOG_LEVEL 3 #endif // ANT_BSC_PAGE_3_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BSC_PAGE_3_INFO_COLOR #define ANT_BSC_PAGE_3_INFO_COLOR 0 @@ -642,28 +642,28 @@ #define ANT_BSC_PAGE_4_LOG_ENABLED 0 #endif // ANT_BSC_PAGE_4_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BSC_PAGE_4_LOG_LEVEL #define ANT_BSC_PAGE_4_LOG_LEVEL 3 #endif // ANT_BSC_PAGE_4_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BSC_PAGE_4_INFO_COLOR #define ANT_BSC_PAGE_4_INFO_COLOR 0 @@ -677,28 +677,28 @@ #define ANT_BSC_PAGE_5_LOG_ENABLED 0 #endif // ANT_BSC_PAGE_5_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_BSC_PAGE_5_LOG_LEVEL #define ANT_BSC_PAGE_5_LOG_LEVEL 3 #endif // ANT_BSC_PAGE_5_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_BSC_PAGE_5_INFO_COLOR #define ANT_BSC_PAGE_5_INFO_COLOR 0 @@ -709,7 +709,7 @@ // // ANT_CHANNEL_CONFIG_ENABLED - ant_channel_config - ANT common channel configuration - + #ifndef ANT_CHANNEL_CONFIG_ENABLED #define ANT_CHANNEL_CONFIG_ENABLED 0 @@ -726,28 +726,28 @@ #define ANT_COMMON_PAGE_70_LOG_ENABLED 0 #endif // ANT_COMMON_PAGE_70_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_COMMON_PAGE_70_LOG_LEVEL #define ANT_COMMON_PAGE_70_LOG_LEVEL 3 #endif // ANT_COMMON_PAGE_70_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_COMMON_PAGE_70_INFO_COLOR #define ANT_COMMON_PAGE_70_INFO_COLOR 0 @@ -768,28 +768,28 @@ #define ANT_COMMON_PAGE_80_LOG_ENABLED 0 #endif // ANT_COMMON_PAGE_80_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_COMMON_PAGE_80_LOG_LEVEL #define ANT_COMMON_PAGE_80_LOG_LEVEL 3 #endif // ANT_COMMON_PAGE_80_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_COMMON_PAGE_80_INFO_COLOR #define ANT_COMMON_PAGE_80_INFO_COLOR 0 @@ -810,28 +810,28 @@ #define ANT_COMMON_PAGE_81_LOG_ENABLED 0 #endif // ANT_COMMON_PAGE_81_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_COMMON_PAGE_81_LOG_LEVEL #define ANT_COMMON_PAGE_81_LOG_LEVEL 3 #endif // ANT_COMMON_PAGE_81_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_COMMON_PAGE_81_INFO_COLOR #define ANT_COMMON_PAGE_81_INFO_COLOR 0 @@ -842,7 +842,7 @@ // // ANT_ENCRYPT_CONFIG_ENABLED - ant_encrypt_config - Cryptographic ANT stack configuration - + #ifndef ANT_ENCRYPT_CONFIG_ENABLED #define ANT_ENCRYPT_CONFIG_ENABLED 0 @@ -859,28 +859,28 @@ #define ANT_HRM_LOG_ENABLED 0 #endif // ANT_HRM_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_HRM_LOG_LEVEL #define ANT_HRM_LOG_LEVEL 3 #endif // ANT_HRM_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_HRM_INFO_COLOR #define ANT_HRM_INFO_COLOR 0 @@ -894,28 +894,28 @@ #define ANT_HRM_PAGE_0_LOG_ENABLED 0 #endif // ANT_HRM_PAGE_0_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_HRM_PAGE_0_LOG_LEVEL #define ANT_HRM_PAGE_0_LOG_LEVEL 3 #endif // ANT_HRM_PAGE_0_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_HRM_PAGE_0_INFO_COLOR #define ANT_HRM_PAGE_0_INFO_COLOR 0 @@ -929,28 +929,28 @@ #define ANT_HRM_PAGE_1_LOG_ENABLED 0 #endif // ANT_HRM_PAGE_1_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_HRM_PAGE_1_LOG_LEVEL #define ANT_HRM_PAGE_1_LOG_LEVEL 3 #endif // ANT_HRM_PAGE_1_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_HRM_PAGE_1_INFO_COLOR #define ANT_HRM_PAGE_1_INFO_COLOR 0 @@ -964,28 +964,28 @@ #define ANT_HRM_PAGE_2_LOG_ENABLED 0 #endif // ANT_HRM_PAGE_2_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_HRM_PAGE_2_LOG_LEVEL #define ANT_HRM_PAGE_2_LOG_LEVEL 3 #endif // ANT_HRM_PAGE_2_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_HRM_PAGE_2_INFO_COLOR #define ANT_HRM_PAGE_2_INFO_COLOR 0 @@ -999,28 +999,28 @@ #define ANT_HRM_PAGE_3_LOG_ENABLED 0 #endif // ANT_HRM_PAGE_3_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_HRM_PAGE_3_LOG_LEVEL #define ANT_HRM_PAGE_3_LOG_LEVEL 3 #endif // ANT_HRM_PAGE_3_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_HRM_PAGE_3_INFO_COLOR #define ANT_HRM_PAGE_3_INFO_COLOR 0 @@ -1034,28 +1034,28 @@ #define ANT_HRM_PAGE_4_LOG_ENABLED 0 #endif // ANT_HRM_PAGE_4_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_HRM_PAGE_4_LOG_LEVEL #define ANT_HRM_PAGE_4_LOG_LEVEL 3 #endif // ANT_HRM_PAGE_4_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_HRM_PAGE_4_INFO_COLOR #define ANT_HRM_PAGE_4_INFO_COLOR 0 @@ -1066,14 +1066,14 @@ // // ANT_KEY_MANAGER_ENABLED - ant_key_manager - Software Component - + #ifndef ANT_KEY_MANAGER_ENABLED #define ANT_KEY_MANAGER_ENABLED 0 #endif // ANT_REQUEST_CONTROLLER_ENABLED - ant_request_controller - ANT+ request controller - + #ifndef ANT_REQUEST_CONTROLLER_ENABLED #define ANT_REQUEST_CONTROLLER_ENABLED 0 @@ -1090,28 +1090,28 @@ #define ANT_SDM_LOG_ENABLED 0 #endif // ANT_SDM_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef ANT_SDM_LOG_LEVEL #define ANT_SDM_LOG_LEVEL 3 #endif // ANT_SDM_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef ANT_SDM_INFO_COLOR #define ANT_SDM_INFO_COLOR 0 @@ -1126,14 +1126,14 @@ #ifndef ANT_SEARCH_CONFIG_ENABLED #define ANT_SEARCH_CONFIG_ENABLED 0 #endif -// ANT_DEFAULT_LOW_PRIORITY_TIMEOUT - Default low priority search time-out. <0-255> +// ANT_DEFAULT_LOW_PRIORITY_TIMEOUT - Default low priority search time-out. <0-255> #ifndef ANT_DEFAULT_LOW_PRIORITY_TIMEOUT #define ANT_DEFAULT_LOW_PRIORITY_TIMEOUT 2 #endif -// ANT_DEFAULT_HIGH_PRIORITY_TIMEOUT - Default high priority search time-out. <0-255> +// ANT_DEFAULT_HIGH_PRIORITY_TIMEOUT - Default high priority search time-out. <0-255> #ifndef ANT_DEFAULT_HIGH_PRIORITY_TIMEOUT @@ -1147,22 +1147,22 @@ #ifndef ANT_STACK_CONFIG_ENABLED #define ANT_STACK_CONFIG_ENABLED 0 #endif -// ANT_CONFIG_TOTAL_CHANNELS_ALLOCATED - Allocated ANT channels +// ANT_CONFIG_TOTAL_CHANNELS_ALLOCATED - Allocated ANT channels #ifndef ANT_CONFIG_TOTAL_CHANNELS_ALLOCATED #define ANT_CONFIG_TOTAL_CHANNELS_ALLOCATED 0 #endif -// ANT_CONFIG_ENCRYPTED_CHANNELS - Encrypted ANT channels +// ANT_CONFIG_ENCRYPTED_CHANNELS - Encrypted ANT channels #ifndef ANT_CONFIG_ENCRYPTED_CHANNELS #define ANT_CONFIG_ENCRYPTED_CHANNELS 0 #endif -// ANT_CONFIG_EVENT_QUEUE_SIZE - Event queue size +// ANT_CONFIG_EVENT_QUEUE_SIZE - Event queue size #ifndef ANT_CONFIG_EVENT_QUEUE_SIZE #define ANT_CONFIG_EVENT_QUEUE_SIZE 32 #endif -// ANT_CONFIG_BURST_QUEUE_SIZE - ANT burst queue size +// ANT_CONFIG_BURST_QUEUE_SIZE - ANT burst queue size #ifndef ANT_CONFIG_BURST_QUEUE_SIZE #define ANT_CONFIG_BURST_QUEUE_SIZE 128 #endif @@ -1174,35 +1174,35 @@ #ifndef ANT_STATE_INDICATOR_ENABLED #define ANT_STATE_INDICATOR_ENABLED 0 #endif -// ANT_STATE_INDICATOR_CONFIG_SHUTDOWN_HANDLER_PRIORITY - Shutdown observer priority. +// ANT_STATE_INDICATOR_CONFIG_SHUTDOWN_HANDLER_PRIORITY - Shutdown observer priority. #ifndef ANT_STATE_INDICATOR_CONFIG_SHUTDOWN_HANDLER_PRIORITY #define ANT_STATE_INDICATOR_CONFIG_SHUTDOWN_HANDLER_PRIORITY 1 #endif // -// +// //========================================================== -// nRF_BLE +// nRF_BLE //========================================================== // BLE_ADVERTISING_ENABLED - ble_advertising - Advertising module - + #ifndef BLE_ADVERTISING_ENABLED #define BLE_ADVERTISING_ENABLED 0 #endif // BLE_DTM_ENABLED - ble_dtm - Module for testing RF/PHY using DTM commands - + #ifndef BLE_DTM_ENABLED #define BLE_DTM_ENABLED 0 #endif // BLE_RACP_ENABLED - ble_racp - Record Access Control Point library - + #ifndef BLE_RACP_ENABLED #define BLE_RACP_ENABLED 0 @@ -1213,14 +1213,14 @@ #ifndef NRF_BLE_CONN_PARAMS_ENABLED #define NRF_BLE_CONN_PARAMS_ENABLED 0 #endif -// NRF_BLE_CONN_PARAMS_MAX_SLAVE_LATENCY_DEVIATION - The largest acceptable deviation in slave latency. +// NRF_BLE_CONN_PARAMS_MAX_SLAVE_LATENCY_DEVIATION - The largest acceptable deviation in slave latency. // The largest deviation (+ or -) from the requested slave latency that will not be renegotiated. #ifndef NRF_BLE_CONN_PARAMS_MAX_SLAVE_LATENCY_DEVIATION #define NRF_BLE_CONN_PARAMS_MAX_SLAVE_LATENCY_DEVIATION 499 #endif -// NRF_BLE_CONN_PARAMS_MAX_SUPERVISION_TIMEOUT_DEVIATION - The largest acceptable deviation (in 10 ms units) in supervision timeout. +// NRF_BLE_CONN_PARAMS_MAX_SUPERVISION_TIMEOUT_DEVIATION - The largest acceptable deviation (in 10 ms units) in supervision timeout. // The largest deviation (+ or -, in 10 ms units) from the requested supervision timeout that will not be renegotiated. #ifndef NRF_BLE_CONN_PARAMS_MAX_SUPERVISION_TIMEOUT_DEVIATION @@ -1230,7 +1230,7 @@ // // NRF_BLE_QWR_ENABLED - nrf_ble_qwr - Queued writes support module (prepare/execute write) - + #ifndef NRF_BLE_QWR_ENABLED #define NRF_BLE_QWR_ENABLED 0 @@ -1241,14 +1241,14 @@ #ifndef PEER_MANAGER_ENABLED #define PEER_MANAGER_ENABLED 0 #endif -// PM_MAX_REGISTRANTS +// PM_MAX_REGISTRANTS // Number of event handlers that can be registered. #ifndef PM_MAX_REGISTRANTS #define PM_MAX_REGISTRANTS 3 #endif -// PM_FLASH_BUFFERS +// PM_FLASH_BUFFERS // Number of internal buffers for flash operations. // Decrease this value to lower RAM usage. @@ -1258,170 +1258,170 @@ // -// +// //========================================================== -// nRF_BLE_Services +// nRF_BLE_Services //========================================================== // BLE_ANCS_C_ENABLED - ble_ancs_c - Apple Notification Service Client - + #ifndef BLE_ANCS_C_ENABLED #define BLE_ANCS_C_ENABLED 0 #endif // BLE_ANS_C_ENABLED - ble_ans_c - Alert Notification Service Client - + #ifndef BLE_ANS_C_ENABLED #define BLE_ANS_C_ENABLED 0 #endif // BLE_BAS_C_ENABLED - ble_bas_c - Battery Service Client - + #ifndef BLE_BAS_C_ENABLED #define BLE_BAS_C_ENABLED 0 #endif // BLE_BAS_ENABLED - ble_bas - Battery Service - + #ifndef BLE_BAS_ENABLED #define BLE_BAS_ENABLED 0 #endif // BLE_CSCS_ENABLED - ble_cscs - Cycling Speed and Cadence Service - + #ifndef BLE_CSCS_ENABLED #define BLE_CSCS_ENABLED 0 #endif // BLE_CTS_C_ENABLED - ble_cts_c - Current Time Service Client - + #ifndef BLE_CTS_C_ENABLED #define BLE_CTS_C_ENABLED 0 #endif // BLE_DIS_ENABLED - ble_dis - Device Information Service - + #ifndef BLE_DIS_ENABLED #define BLE_DIS_ENABLED 0 #endif // BLE_GLS_ENABLED - ble_gls - Glucose Service - + #ifndef BLE_GLS_ENABLED #define BLE_GLS_ENABLED 0 #endif // BLE_HIDS_ENABLED - ble_hids - Human Interface Device Service - + #ifndef BLE_HIDS_ENABLED #define BLE_HIDS_ENABLED 0 #endif // BLE_HRS_C_ENABLED - ble_hrs_c - Heart Rate Service Client - + #ifndef BLE_HRS_C_ENABLED #define BLE_HRS_C_ENABLED 0 #endif // BLE_HRS_ENABLED - ble_hrs - Heart Rate Service - + #ifndef BLE_HRS_ENABLED #define BLE_HRS_ENABLED 0 #endif // BLE_HTS_ENABLED - ble_hts - Health Thermometer Service - + #ifndef BLE_HTS_ENABLED #define BLE_HTS_ENABLED 0 #endif // BLE_IAS_C_ENABLED - ble_ias_c - Immediate Alert Service Client - + #ifndef BLE_IAS_C_ENABLED #define BLE_IAS_C_ENABLED 0 #endif // BLE_IAS_ENABLED - ble_ias - Immediate Alert Service - + #ifndef BLE_IAS_ENABLED #define BLE_IAS_ENABLED 0 #endif // BLE_LBS_C_ENABLED - ble_lbs_c - Nordic LED Button Service Client - + #ifndef BLE_LBS_C_ENABLED #define BLE_LBS_C_ENABLED 0 #endif // BLE_LBS_ENABLED - ble_lbs - LED Button Service - + #ifndef BLE_LBS_ENABLED #define BLE_LBS_ENABLED 0 #endif // BLE_LLS_ENABLED - ble_lls - Link Loss Service - + #ifndef BLE_LLS_ENABLED #define BLE_LLS_ENABLED 0 #endif // BLE_NUS_C_ENABLED - ble_nus_c - Nordic UART Central Service - + #ifndef BLE_NUS_C_ENABLED #define BLE_NUS_C_ENABLED 0 #endif // BLE_NUS_ENABLED - ble_nus - Nordic UART Service - + #ifndef BLE_NUS_ENABLED #define BLE_NUS_ENABLED 0 #endif // BLE_RSCS_C_ENABLED - ble_rscs_c - Running Speed and Cadence Client - + #ifndef BLE_RSCS_C_ENABLED #define BLE_RSCS_C_ENABLED 0 #endif // BLE_RSCS_ENABLED - ble_rscs - Running Speed and Cadence Service - + #ifndef BLE_RSCS_ENABLED #define BLE_RSCS_ENABLED 0 #endif // BLE_TPS_ENABLED - ble_tps - TX Power Service - + #ifndef BLE_TPS_ENABLED #define BLE_TPS_ENABLED 0 #endif -// +// //========================================================== -// nRF_Core +// nRF_Core //========================================================== // NRF_MPU_ENABLED - nrf_mpu - Module for MPU @@ -1430,7 +1430,7 @@ #define NRF_MPU_ENABLED 0 #endif // NRF_MPU_CLI_CMDS - Enable CLI commands specific to the module - + #ifndef NRF_MPU_CLI_CMDS #define NRF_MPU_CLI_CMDS 1 @@ -1444,15 +1444,15 @@ #define NRF_STACK_GUARD_ENABLED 0 #endif // NRF_STACK_GUARD_CONFIG_SIZE - Size of stack guard - -// <5=> 32 bytes -// <6=> 64 bytes -// <7=> 128 bytes -// <8=> 256 bytes -// <9=> 512 bytes -// <10=> 1024 bytes -// <11=> 2048 bytes -// <12=> 4096 bytes + +// <5=> 32 bytes +// <6=> 64 bytes +// <7=> 128 bytes +// <8=> 256 bytes +// <9=> 512 bytes +// <10=> 1024 bytes +// <11=> 2048 bytes +// <12=> 4096 bytes #ifndef NRF_STACK_GUARD_CONFIG_SIZE #define NRF_STACK_GUARD_CONFIG_SIZE 7 @@ -1460,10 +1460,10 @@ // -// +// //========================================================== -// nRF_Crypto +// nRF_Crypto //========================================================== // NRF_CRYPTO_ENABLED - nrf_crypto - Cryptography library @@ -1472,7 +1472,7 @@ #define NRF_CRYPTO_ENABLED 0 #endif // NRF_CRYPTO_BACKEND_CC310_LIB - Enable the ARM Cryptocell CC310 backend - + // The hardware-accelerated cryptography backend is available only on nRF52840. @@ -1488,7 +1488,7 @@ #define NRF_CRYPTO_BACKEND_MICRO_ECC 0 #endif // NRF_CRYPTO_BACKEND_MICRO_ECC_SHA256 - Enable SHA256 - + // Enable SHA256 cryptographic hash functionality. // Enable this setting if you need SHA256 support, for example to verify signatures. @@ -1498,7 +1498,7 @@ #endif // NRF_CRYPTO_BACKEND_MICRO_ECC_RNG - Enable random number generator - + // Enable random number generation. // Enable this setting if you need to generate cryptographic keys. @@ -1512,36 +1512,36 @@ // -// +// //========================================================== -// nRF_DFU +// nRF_DFU //========================================================== // ble_dfu - Device Firmware Update //========================================================== // BLE_DFU_ENABLED - Enable DFU Service. - + #ifndef BLE_DFU_ENABLED #define BLE_DFU_ENABLED 0 #endif // NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS - Buttonless DFU supports bonds. - + #ifndef NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS #define NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS 0 #endif -// +// //========================================================== -// +// //========================================================== -// nRF_Drivers +// nRF_Drivers //========================================================== // APP_USBD_ENABLED - app_usbd - USB Device library @@ -1549,7 +1549,7 @@ #ifndef APP_USBD_ENABLED #define APP_USBD_ENABLED 0 #endif -// APP_USBD_VID - Vendor ID <0x0000-0xFFFF> +// APP_USBD_VID - Vendor ID <0x0000-0xFFFF> // Vendor ID ordered from USB IF: http://www.usb.org/developers/vendor/ @@ -1558,7 +1558,7 @@ #define APP_USBD_VID 0 #endif -// APP_USBD_PID - Product ID <0x0000-0xFFFF> +// APP_USBD_PID - Product ID <0x0000-0xFFFF> // Selected Product ID @@ -1567,7 +1567,7 @@ #define APP_USBD_PID 0 #endif -// APP_USBD_DEVICE_VER_MAJOR - Device version, major part <0-99> +// APP_USBD_DEVICE_VER_MAJOR - Device version, major part <0-99> // Device version, will be converted automatically to BCD notation. Use just decimal values. @@ -1576,7 +1576,7 @@ #define APP_USBD_DEVICE_VER_MAJOR 1 #endif -// APP_USBD_DEVICE_VER_MINOR - Device version, minor part <0-99> +// APP_USBD_DEVICE_VER_MINOR - Device version, minor part <0-99> // Device version, will be converted automatically to BCD notation. Use just decimal values. @@ -1595,7 +1595,7 @@ #ifndef APP_USBD_EVENT_QUEUE_ENABLE #define APP_USBD_EVENT_QUEUE_ENABLE 1 #endif -// APP_USBD_EVENT_QUEUE_SIZE - The size of event queue <16-64> +// APP_USBD_EVENT_QUEUE_SIZE - The size of event queue <16-64> // The size of the queue for the events that would be processed in the main loop. @@ -1612,44 +1612,44 @@ #define APP_USBD_CONFIG_LOG_ENABLED 0 #endif // APP_USBD_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef APP_USBD_CONFIG_LOG_LEVEL #define APP_USBD_CONFIG_LOG_LEVEL 3 #endif // APP_USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef APP_USBD_CONFIG_INFO_COLOR #define APP_USBD_CONFIG_INFO_COLOR 0 #endif // APP_USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef APP_USBD_CONFIG_DEBUG_COLOR #define APP_USBD_CONFIG_DEBUG_COLOR 0 @@ -1665,35 +1665,35 @@ #define CLOCK_ENABLED 0 #endif // CLOCK_CONFIG_XTAL_FREQ - HF XTAL Frequency - -// <0=> Default (64 MHz) + +// <0=> Default (64 MHz) #ifndef CLOCK_CONFIG_XTAL_FREQ #define CLOCK_CONFIG_XTAL_FREQ 0 #endif // CLOCK_CONFIG_LF_SRC - LF Clock Source - -// <0=> RC -// <1=> XTAL -// <2=> Synth + +// <0=> RC +// <1=> XTAL +// <2=> Synth #ifndef CLOCK_CONFIG_LF_SRC #define CLOCK_CONFIG_LF_SRC 1 #endif // CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef CLOCK_CONFIG_IRQ_PRIORITY #define CLOCK_CONFIG_IRQ_PRIORITY 7 @@ -1707,83 +1707,83 @@ #define COMP_ENABLED 0 #endif // COMP_CONFIG_REF - Reference voltage - -// <0=> Internal 1.2V -// <1=> Internal 1.8V -// <2=> Internal 2.4V -// <4=> VDD -// <7=> ARef + +// <0=> Internal 1.2V +// <1=> Internal 1.8V +// <2=> Internal 2.4V +// <4=> VDD +// <7=> ARef #ifndef COMP_CONFIG_REF #define COMP_CONFIG_REF 1 #endif // COMP_CONFIG_MAIN_MODE - Main mode - -// <0=> Single ended -// <1=> Differential + +// <0=> Single ended +// <1=> Differential #ifndef COMP_CONFIG_MAIN_MODE #define COMP_CONFIG_MAIN_MODE 0 #endif // COMP_CONFIG_SPEED_MODE - Speed mode - -// <0=> Low power -// <1=> Normal -// <2=> High speed + +// <0=> Low power +// <1=> Normal +// <2=> High speed #ifndef COMP_CONFIG_SPEED_MODE #define COMP_CONFIG_SPEED_MODE 2 #endif // COMP_CONFIG_HYST - Hystheresis - -// <0=> No -// <1=> 50mV + +// <0=> No +// <1=> 50mV #ifndef COMP_CONFIG_HYST #define COMP_CONFIG_HYST 0 #endif // COMP_CONFIG_ISOURCE - Current Source - -// <0=> Off -// <1=> 2.5 uA -// <2=> 5 uA -// <3=> 10 uA + +// <0=> Off +// <1=> 2.5 uA +// <2=> 5 uA +// <3=> 10 uA #ifndef COMP_CONFIG_ISOURCE #define COMP_CONFIG_ISOURCE 0 #endif // COMP_CONFIG_INPUT - Analog input - -// <0=> 0 -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 + +// <0=> 0 +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef COMP_CONFIG_INPUT #define COMP_CONFIG_INPUT 0 #endif // COMP_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef COMP_CONFIG_IRQ_PRIORITY #define COMP_CONFIG_IRQ_PRIORITY 7 @@ -1792,7 +1792,7 @@ // // EGU_ENABLED - nrf_drv_swi - SWI(EGU) peripheral driver - + #ifndef EGU_ENABLED #define EGU_ENABLED 0 @@ -1803,23 +1803,23 @@ #ifndef GPIOTE_ENABLED #define GPIOTE_ENABLED 1 #endif -// GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS - Number of lower power input pins +// GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS - Number of lower power input pins #ifndef GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS #define GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS 4 #endif // GPIOTE_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef GPIOTE_CONFIG_IRQ_PRIORITY #define GPIOTE_CONFIG_IRQ_PRIORITY 7 @@ -1832,33 +1832,33 @@ #ifndef I2S_ENABLED #define I2S_ENABLED 0 #endif -// I2S_CONFIG_SCK_PIN - SCK pin <0-31> +// I2S_CONFIG_SCK_PIN - SCK pin <0-31> #ifndef I2S_CONFIG_SCK_PIN #define I2S_CONFIG_SCK_PIN 31 #endif -// I2S_CONFIG_LRCK_PIN - LRCK pin <1-31> +// I2S_CONFIG_LRCK_PIN - LRCK pin <1-31> #ifndef I2S_CONFIG_LRCK_PIN #define I2S_CONFIG_LRCK_PIN 30 #endif -// I2S_CONFIG_MCK_PIN - MCK pin +// I2S_CONFIG_MCK_PIN - MCK pin #ifndef I2S_CONFIG_MCK_PIN #define I2S_CONFIG_MCK_PIN 255 #endif -// I2S_CONFIG_SDOUT_PIN - SDOUT pin <0-31> +// I2S_CONFIG_SDOUT_PIN - SDOUT pin <0-31> #ifndef I2S_CONFIG_SDOUT_PIN #define I2S_CONFIG_SDOUT_PIN 29 #endif -// I2S_CONFIG_SDIN_PIN - SDIN pin <0-31> +// I2S_CONFIG_SDIN_PIN - SDIN pin <0-31> #ifndef I2S_CONFIG_SDIN_PIN @@ -1866,106 +1866,106 @@ #endif // I2S_CONFIG_MASTER - Mode - -// <0=> Master -// <1=> Slave + +// <0=> Master +// <1=> Slave #ifndef I2S_CONFIG_MASTER #define I2S_CONFIG_MASTER 0 #endif // I2S_CONFIG_FORMAT - Format - -// <0=> I2S -// <1=> Aligned + +// <0=> I2S +// <1=> Aligned #ifndef I2S_CONFIG_FORMAT #define I2S_CONFIG_FORMAT 0 #endif // I2S_CONFIG_ALIGN - Alignment - -// <0=> Left -// <1=> Right + +// <0=> Left +// <1=> Right #ifndef I2S_CONFIG_ALIGN #define I2S_CONFIG_ALIGN 0 #endif // I2S_CONFIG_SWIDTH - Sample width (bits) - -// <0=> 8 -// <1=> 16 -// <2=> 24 + +// <0=> 8 +// <1=> 16 +// <2=> 24 #ifndef I2S_CONFIG_SWIDTH #define I2S_CONFIG_SWIDTH 1 #endif // I2S_CONFIG_CHANNELS - Channels - -// <0=> Stereo -// <1=> Left -// <2=> Right + +// <0=> Stereo +// <1=> Left +// <2=> Right #ifndef I2S_CONFIG_CHANNELS #define I2S_CONFIG_CHANNELS 1 #endif // I2S_CONFIG_MCK_SETUP - MCK behavior - -// <0=> Disabled -// <2147483648=> 32MHz/2 -// <1342177280=> 32MHz/3 -// <1073741824=> 32MHz/4 -// <805306368=> 32MHz/5 -// <671088640=> 32MHz/6 -// <536870912=> 32MHz/8 -// <402653184=> 32MHz/10 -// <369098752=> 32MHz/11 -// <285212672=> 32MHz/15 -// <268435456=> 32MHz/16 -// <201326592=> 32MHz/21 -// <184549376=> 32MHz/23 -// <142606336=> 32MHz/30 -// <138412032=> 32MHz/31 -// <134217728=> 32MHz/32 -// <100663296=> 32MHz/42 -// <68157440=> 32MHz/63 -// <34340864=> 32MHz/125 + +// <0=> Disabled +// <2147483648=> 32MHz/2 +// <1342177280=> 32MHz/3 +// <1073741824=> 32MHz/4 +// <805306368=> 32MHz/5 +// <671088640=> 32MHz/6 +// <536870912=> 32MHz/8 +// <402653184=> 32MHz/10 +// <369098752=> 32MHz/11 +// <285212672=> 32MHz/15 +// <268435456=> 32MHz/16 +// <201326592=> 32MHz/21 +// <184549376=> 32MHz/23 +// <142606336=> 32MHz/30 +// <138412032=> 32MHz/31 +// <134217728=> 32MHz/32 +// <100663296=> 32MHz/42 +// <68157440=> 32MHz/63 +// <34340864=> 32MHz/125 #ifndef I2S_CONFIG_MCK_SETUP #define I2S_CONFIG_MCK_SETUP 536870912 #endif // I2S_CONFIG_RATIO - MCK/LRCK ratio - -// <0=> 32x -// <1=> 48x -// <2=> 64x -// <3=> 96x -// <4=> 128x -// <5=> 192x -// <6=> 256x -// <7=> 384x -// <8=> 512x + +// <0=> 32x +// <1=> 48x +// <2=> 64x +// <3=> 96x +// <4=> 128x +// <5=> 192x +// <6=> 256x +// <7=> 384x +// <8=> 512x #ifndef I2S_CONFIG_RATIO #define I2S_CONFIG_RATIO 2000 #endif // I2S_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef I2S_CONFIG_IRQ_PRIORITY #define I2S_CONFIG_IRQ_PRIORITY 7 @@ -1979,73 +1979,73 @@ #define LPCOMP_ENABLED 0 #endif // LPCOMP_CONFIG_REFERENCE - Reference voltage - -// <0=> Supply 1/8 -// <1=> Supply 2/8 -// <2=> Supply 3/8 -// <3=> Supply 4/8 -// <4=> Supply 5/8 -// <5=> Supply 6/8 -// <6=> Supply 7/8 -// <8=> Supply 1/16 (nRF52) -// <9=> Supply 3/16 (nRF52) -// <10=> Supply 5/16 (nRF52) -// <11=> Supply 7/16 (nRF52) -// <12=> Supply 9/16 (nRF52) -// <13=> Supply 11/16 (nRF52) -// <14=> Supply 13/16 (nRF52) -// <15=> Supply 15/16 (nRF52) -// <7=> External Ref 0 -// <65543=> External Ref 1 + +// <0=> Supply 1/8 +// <1=> Supply 2/8 +// <2=> Supply 3/8 +// <3=> Supply 4/8 +// <4=> Supply 5/8 +// <5=> Supply 6/8 +// <6=> Supply 7/8 +// <8=> Supply 1/16 (nRF52) +// <9=> Supply 3/16 (nRF52) +// <10=> Supply 5/16 (nRF52) +// <11=> Supply 7/16 (nRF52) +// <12=> Supply 9/16 (nRF52) +// <13=> Supply 11/16 (nRF52) +// <14=> Supply 13/16 (nRF52) +// <15=> Supply 15/16 (nRF52) +// <7=> External Ref 0 +// <65543=> External Ref 1 #ifndef LPCOMP_CONFIG_REFERENCE #define LPCOMP_CONFIG_REFERENCE 3 #endif // LPCOMP_CONFIG_DETECTION - Detection - -// <0=> Crossing -// <1=> Up -// <2=> Down + +// <0=> Crossing +// <1=> Up +// <2=> Down #ifndef LPCOMP_CONFIG_DETECTION #define LPCOMP_CONFIG_DETECTION 2 #endif // LPCOMP_CONFIG_INPUT - Analog input - -// <0=> 0 -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 + +// <0=> 0 +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef LPCOMP_CONFIG_INPUT #define LPCOMP_CONFIG_INPUT 0 #endif // LPCOMP_CONFIG_HYST - Hysteresis - + #ifndef LPCOMP_CONFIG_HYST #define LPCOMP_CONFIG_HYST 0 #endif // LPCOMP_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef LPCOMP_CONFIG_IRQ_PRIORITY #define LPCOMP_CONFIG_IRQ_PRIORITY 7 @@ -2059,45 +2059,45 @@ #define PDM_ENABLED 0 #endif // PDM_CONFIG_MODE - Mode - -// <0=> Stereo -// <1=> Mono + +// <0=> Stereo +// <1=> Mono #ifndef PDM_CONFIG_MODE #define PDM_CONFIG_MODE 1 #endif // PDM_CONFIG_EDGE - Edge - -// <0=> Left falling -// <1=> Left rising + +// <0=> Left falling +// <1=> Left rising #ifndef PDM_CONFIG_EDGE #define PDM_CONFIG_EDGE 0 #endif // PDM_CONFIG_CLOCK_FREQ - Clock frequency - -// <134217728=> 1000k -// <138412032=> 1032k (default) -// <142606336=> 1067k + +// <134217728=> 1000k +// <138412032=> 1032k (default) +// <142606336=> 1067k #ifndef PDM_CONFIG_CLOCK_FREQ #define PDM_CONFIG_CLOCK_FREQ 138412032 #endif // PDM_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef PDM_CONFIG_IRQ_PRIORITY #define PDM_CONFIG_IRQ_PRIORITY 7 @@ -2106,7 +2106,7 @@ // // PERIPHERAL_RESOURCE_SHARING_ENABLED - nrf_drv_common - Peripheral drivers common module - + #ifndef PERIPHERAL_RESOURCE_SHARING_ENABLED #define PERIPHERAL_RESOURCE_SHARING_ENABLED 1 @@ -2118,24 +2118,24 @@ #define POWER_ENABLED 0 #endif // POWER_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef POWER_CONFIG_IRQ_PRIORITY #define POWER_CONFIG_IRQ_PRIORITY 7 #endif // POWER_CONFIG_DEFAULT_DCDCEN - The default configuration of main DCDC regulator - + // This settings means only that components for DCDC regulator are installed and it can be enabled. @@ -2144,7 +2144,7 @@ #endif // POWER_CONFIG_DEFAULT_DCDCENHV - The default configuration of High Voltage DCDC regulator - + // This settings means only that components for DCDC regulator are installed and it can be enabled. @@ -2155,7 +2155,7 @@ // // PPI_ENABLED - nrf_drv_ppi - PPI peripheral driver - + #ifndef PPI_ENABLED #define PPI_ENABLED 0 @@ -2166,28 +2166,28 @@ #ifndef PWM_ENABLED #define PWM_ENABLED 1 #endif -// PWM_DEFAULT_CONFIG_OUT0_PIN - Out0 pin <0-31> +// PWM_DEFAULT_CONFIG_OUT0_PIN - Out0 pin <0-31> #ifndef PWM_DEFAULT_CONFIG_OUT0_PIN #define PWM_DEFAULT_CONFIG_OUT0_PIN 31 #endif -// PWM_DEFAULT_CONFIG_OUT1_PIN - Out1 pin <0-31> +// PWM_DEFAULT_CONFIG_OUT1_PIN - Out1 pin <0-31> #ifndef PWM_DEFAULT_CONFIG_OUT1_PIN #define PWM_DEFAULT_CONFIG_OUT1_PIN 31 #endif -// PWM_DEFAULT_CONFIG_OUT2_PIN - Out2 pin <0-31> +// PWM_DEFAULT_CONFIG_OUT2_PIN - Out2 pin <0-31> #ifndef PWM_DEFAULT_CONFIG_OUT2_PIN #define PWM_DEFAULT_CONFIG_OUT2_PIN 31 #endif -// PWM_DEFAULT_CONFIG_OUT3_PIN - Out3 pin <0-31> +// PWM_DEFAULT_CONFIG_OUT3_PIN - Out3 pin <0-31> #ifndef PWM_DEFAULT_CONFIG_OUT3_PIN @@ -2195,94 +2195,94 @@ #endif // PWM_DEFAULT_CONFIG_BASE_CLOCK - Base clock - -// <0=> 16 MHz -// <1=> 8 MHz -// <2=> 4 MHz -// <3=> 2 MHz -// <4=> 1 MHz -// <5=> 500 kHz -// <6=> 250 kHz -// <7=> 125 kHz + +// <0=> 16 MHz +// <1=> 8 MHz +// <2=> 4 MHz +// <3=> 2 MHz +// <4=> 1 MHz +// <5=> 500 kHz +// <6=> 250 kHz +// <7=> 125 kHz #ifndef PWM_DEFAULT_CONFIG_BASE_CLOCK #define PWM_DEFAULT_CONFIG_BASE_CLOCK 4 #endif // PWM_DEFAULT_CONFIG_COUNT_MODE - Count mode - -// <0=> Up -// <1=> Up and Down + +// <0=> Up +// <1=> Up and Down #ifndef PWM_DEFAULT_CONFIG_COUNT_MODE #define PWM_DEFAULT_CONFIG_COUNT_MODE 0 #endif -// PWM_DEFAULT_CONFIG_TOP_VALUE - Top value +// PWM_DEFAULT_CONFIG_TOP_VALUE - Top value #ifndef PWM_DEFAULT_CONFIG_TOP_VALUE #define PWM_DEFAULT_CONFIG_TOP_VALUE 1000 #endif // PWM_DEFAULT_CONFIG_LOAD_MODE - Load mode - -// <0=> Common -// <1=> Grouped -// <2=> Individual -// <3=> Waveform + +// <0=> Common +// <1=> Grouped +// <2=> Individual +// <3=> Waveform #ifndef PWM_DEFAULT_CONFIG_LOAD_MODE #define PWM_DEFAULT_CONFIG_LOAD_MODE 0 #endif // PWM_DEFAULT_CONFIG_STEP_MODE - Step mode - -// <0=> Auto -// <1=> Triggered + +// <0=> Auto +// <1=> Triggered #ifndef PWM_DEFAULT_CONFIG_STEP_MODE #define PWM_DEFAULT_CONFIG_STEP_MODE 0 #endif // PWM_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef PWM_DEFAULT_CONFIG_IRQ_PRIORITY #define PWM_DEFAULT_CONFIG_IRQ_PRIORITY 7 #endif // PWM0_ENABLED - Enable PWM0 instance - + #ifndef PWM0_ENABLED #define PWM0_ENABLED 1 #endif // PWM1_ENABLED - Enable PWM1 instance - + #ifndef PWM1_ENABLED #define PWM1_ENABLED 1 #endif // PWM2_ENABLED - Enable PWM2 instance - + #ifndef PWM2_ENABLED #define PWM2_ENABLED 1 #endif // PWM3_ENABLED - Enable PWM3 instance - + #ifndef PWM3_ENABLED #define PWM3_ENABLED 1 @@ -2296,96 +2296,96 @@ #define QDEC_ENABLED 0 #endif // QDEC_CONFIG_REPORTPER - Report period - -// <0=> 10 Samples -// <1=> 40 Samples -// <2=> 80 Samples -// <3=> 120 Samples -// <4=> 160 Samples -// <5=> 200 Samples -// <6=> 240 Samples -// <7=> 280 Samples + +// <0=> 10 Samples +// <1=> 40 Samples +// <2=> 80 Samples +// <3=> 120 Samples +// <4=> 160 Samples +// <5=> 200 Samples +// <6=> 240 Samples +// <7=> 280 Samples #ifndef QDEC_CONFIG_REPORTPER #define QDEC_CONFIG_REPORTPER 0 #endif // QDEC_CONFIG_SAMPLEPER - Sample period - -// <0=> 128 us -// <1=> 256 us -// <2=> 512 us -// <3=> 1024 us -// <4=> 2048 us -// <5=> 4096 us -// <6=> 8192 us -// <7=> 16384 us + +// <0=> 128 us +// <1=> 256 us +// <2=> 512 us +// <3=> 1024 us +// <4=> 2048 us +// <5=> 4096 us +// <6=> 8192 us +// <7=> 16384 us #ifndef QDEC_CONFIG_SAMPLEPER #define QDEC_CONFIG_SAMPLEPER 7 #endif -// QDEC_CONFIG_PIO_A - A pin <0-31> +// QDEC_CONFIG_PIO_A - A pin <0-31> #ifndef QDEC_CONFIG_PIO_A #define QDEC_CONFIG_PIO_A 31 #endif -// QDEC_CONFIG_PIO_B - B pin <0-31> +// QDEC_CONFIG_PIO_B - B pin <0-31> #ifndef QDEC_CONFIG_PIO_B #define QDEC_CONFIG_PIO_B 31 #endif -// QDEC_CONFIG_PIO_LED - LED pin <0-31> +// QDEC_CONFIG_PIO_LED - LED pin <0-31> #ifndef QDEC_CONFIG_PIO_LED #define QDEC_CONFIG_PIO_LED 31 #endif -// QDEC_CONFIG_LEDPRE - LED pre +// QDEC_CONFIG_LEDPRE - LED pre #ifndef QDEC_CONFIG_LEDPRE #define QDEC_CONFIG_LEDPRE 511 #endif // QDEC_CONFIG_LEDPOL - LED polarity - -// <0=> Active low -// <1=> Active high + +// <0=> Active low +// <1=> Active high #ifndef QDEC_CONFIG_LEDPOL #define QDEC_CONFIG_LEDPOL 1 #endif // QDEC_CONFIG_DBFEN - Debouncing enable - + #ifndef QDEC_CONFIG_DBFEN #define QDEC_CONFIG_DBFEN 0 #endif // QDEC_CONFIG_SAMPLE_INTEN - Sample ready interrupt enable - + #ifndef QDEC_CONFIG_SAMPLE_INTEN #define QDEC_CONFIG_SAMPLE_INTEN 0 #endif // QDEC_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef QDEC_CONFIG_IRQ_PRIORITY #define QDEC_CONFIG_IRQ_PRIORITY 7 @@ -2399,29 +2399,29 @@ #define RNG_ENABLED 1 #endif // RNG_CONFIG_ERROR_CORRECTION - Error correction - + #ifndef RNG_CONFIG_ERROR_CORRECTION #define RNG_CONFIG_ERROR_CORRECTION 1 #endif -// RNG_CONFIG_POOL_SIZE - Pool size +// RNG_CONFIG_POOL_SIZE - Pool size #ifndef RNG_CONFIG_POOL_SIZE #define RNG_CONFIG_POOL_SIZE 32 #endif // RNG_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef RNG_CONFIG_IRQ_PRIORITY #define RNG_CONFIG_IRQ_PRIORITY 7 @@ -2434,7 +2434,7 @@ #ifndef RTC_ENABLED #define RTC_ENABLED 0 #endif -// RTC_DEFAULT_CONFIG_FREQUENCY - Frequency <16-32768> +// RTC_DEFAULT_CONFIG_FREQUENCY - Frequency <16-32768> #ifndef RTC_DEFAULT_CONFIG_FREQUENCY @@ -2442,51 +2442,51 @@ #endif // RTC_DEFAULT_CONFIG_RELIABLE - Ensures safe compare event triggering - + #ifndef RTC_DEFAULT_CONFIG_RELIABLE #define RTC_DEFAULT_CONFIG_RELIABLE 0 #endif // RTC_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef RTC_DEFAULT_CONFIG_IRQ_PRIORITY #define RTC_DEFAULT_CONFIG_IRQ_PRIORITY 7 #endif // RTC0_ENABLED - Enable RTC0 instance - + #ifndef RTC0_ENABLED #define RTC0_ENABLED 0 #endif // RTC1_ENABLED - Enable RTC1 instance - + #ifndef RTC1_ENABLED #define RTC1_ENABLED 0 #endif // RTC2_ENABLED - Enable RTC2 instance - + #ifndef RTC2_ENABLED #define RTC2_ENABLED 0 #endif -// NRF_MAXIMUM_LATENCY_US - Maximum possible time[us] in highest priority interrupt +// NRF_MAXIMUM_LATENCY_US - Maximum possible time[us] in highest priority interrupt #ifndef NRF_MAXIMUM_LATENCY_US #define NRF_MAXIMUM_LATENCY_US 2000 #endif @@ -2499,51 +2499,51 @@ #define SAADC_ENABLED 1 #endif // SAADC_CONFIG_RESOLUTION - Resolution - -// <0=> 8 bit -// <1=> 10 bit -// <2=> 12 bit -// <3=> 14 bit + +// <0=> 8 bit +// <1=> 10 bit +// <2=> 12 bit +// <3=> 14 bit #ifndef SAADC_CONFIG_RESOLUTION #define SAADC_CONFIG_RESOLUTION 2 #endif // SAADC_CONFIG_OVERSAMPLE - Sample period - -// <0=> Disabled -// <1=> 2x -// <2=> 4x -// <3=> 8x -// <4=> 16x -// <5=> 32x -// <6=> 64x -// <7=> 128x -// <8=> 256x + +// <0=> Disabled +// <1=> 2x +// <2=> 4x +// <3=> 8x +// <4=> 16x +// <5=> 32x +// <6=> 64x +// <7=> 128x +// <8=> 256x #ifndef SAADC_CONFIG_OVERSAMPLE #define SAADC_CONFIG_OVERSAMPLE 0 #endif // SAADC_CONFIG_LP_MODE - Enabling low power mode - + #ifndef SAADC_CONFIG_LP_MODE #define SAADC_CONFIG_LP_MODE 0 #endif // SAADC_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef SAADC_CONFIG_IRQ_PRIORITY #define SAADC_CONFIG_IRQ_PRIORITY 7 @@ -2557,50 +2557,50 @@ #define SPIS_ENABLED 1 #endif // SPIS_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef SPIS_DEFAULT_CONFIG_IRQ_PRIORITY #define SPIS_DEFAULT_CONFIG_IRQ_PRIORITY 7 #endif // SPIS_DEFAULT_MODE - Mode - -// <0=> MODE_0 -// <1=> MODE_1 -// <2=> MODE_2 -// <3=> MODE_3 + +// <0=> MODE_0 +// <1=> MODE_1 +// <2=> MODE_2 +// <3=> MODE_3 #ifndef SPIS_DEFAULT_MODE #define SPIS_DEFAULT_MODE 0 #endif // SPIS_DEFAULT_BIT_ORDER - SPIS default bit order - -// <0=> MSB first -// <1=> LSB first + +// <0=> MSB first +// <1=> LSB first #ifndef SPIS_DEFAULT_BIT_ORDER #define SPIS_DEFAULT_BIT_ORDER 0 #endif -// SPIS_DEFAULT_DEF - SPIS default DEF character <0-255> +// SPIS_DEFAULT_DEF - SPIS default DEF character <0-255> #ifndef SPIS_DEFAULT_DEF #define SPIS_DEFAULT_DEF 255 #endif -// SPIS_DEFAULT_ORC - SPIS default ORC character <0-255> +// SPIS_DEFAULT_ORC - SPIS default ORC character <0-255> #ifndef SPIS_DEFAULT_ORC @@ -2608,21 +2608,21 @@ #endif // SPIS0_ENABLED - Enable SPIS0 instance - + #ifndef SPIS0_ENABLED #define SPIS0_ENABLED 1 #endif // SPIS1_ENABLED - Enable SPIS1 instance - + #ifndef SPIS1_ENABLED #define SPIS1_ENABLED 0 #endif // SPIS2_ENABLED - Enable SPIS2 instance - + #ifndef SPIS2_ENABLED #define SPIS2_ENABLED 0 @@ -2636,27 +2636,27 @@ #define SPI_ENABLED 1 #endif // SPI_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef SPI_DEFAULT_CONFIG_IRQ_PRIORITY #define SPI_DEFAULT_CONFIG_IRQ_PRIORITY 7 #endif // NRF_SPI_DRV_MISO_PULLUP_CFG - MISO PIN pull-up configuration. - -// <0=> NRF_GPIO_PIN_NOPULL -// <1=> NRF_GPIO_PIN_PULLDOWN -// <3=> NRF_GPIO_PIN_PULLUP + +// <0=> NRF_GPIO_PIN_NOPULL +// <1=> NRF_GPIO_PIN_PULLDOWN +// <3=> NRF_GPIO_PIN_PULLUP #ifndef NRF_SPI_DRV_MISO_PULLUP_CFG #define NRF_SPI_DRV_MISO_PULLUP_CFG 1 @@ -2668,21 +2668,21 @@ #define SPI0_ENABLED 1 #endif // SPI0_USE_EASY_DMA - Use EasyDMA - + #ifndef SPI0_USE_EASY_DMA #define SPI0_USE_EASY_DMA 0 #endif // SPI0_DEFAULT_FREQUENCY - SPI frequency - -// <33554432=> 125 kHz -// <67108864=> 250 kHz -// <134217728=> 500 kHz -// <268435456=> 1 MHz -// <536870912=> 2 MHz -// <1073741824=> 4 MHz -// <2147483648=> 8 MHz + +// <33554432=> 125 kHz +// <67108864=> 250 kHz +// <134217728=> 500 kHz +// <268435456=> 1 MHz +// <536870912=> 2 MHz +// <1073741824=> 4 MHz +// <2147483648=> 8 MHz #ifndef SPI0_DEFAULT_FREQUENCY #define SPI0_DEFAULT_FREQUENCY 1073741824 @@ -2696,21 +2696,21 @@ #define SPI1_ENABLED 1 #endif // SPI1_USE_EASY_DMA - Use EasyDMA - + #ifndef SPI1_USE_EASY_DMA #define SPI1_USE_EASY_DMA 0 #endif // SPI1_DEFAULT_FREQUENCY - SPI frequency - -// <33554432=> 125 kHz -// <67108864=> 250 kHz -// <134217728=> 500 kHz -// <268435456=> 1 MHz -// <536870912=> 2 MHz -// <1073741824=> 4 MHz -// <2147483648=> 8 MHz + +// <33554432=> 125 kHz +// <67108864=> 250 kHz +// <134217728=> 500 kHz +// <268435456=> 1 MHz +// <536870912=> 2 MHz +// <1073741824=> 4 MHz +// <2147483648=> 8 MHz #ifndef SPI1_DEFAULT_FREQUENCY #define SPI1_DEFAULT_FREQUENCY 1073741824 @@ -2724,21 +2724,21 @@ #define SPI2_ENABLED 1 #endif // SPI2_USE_EASY_DMA - Use EasyDMA - + #ifndef SPI2_USE_EASY_DMA #define SPI2_USE_EASY_DMA 0 #endif // SPI2_DEFAULT_FREQUENCY - SPI frequency - -// <33554432=> 125 kHz -// <67108864=> 250 kHz -// <134217728=> 500 kHz -// <268435456=> 1 MHz -// <536870912=> 2 MHz -// <1073741824=> 4 MHz -// <2147483648=> 8 MHz + +// <33554432=> 125 kHz +// <67108864=> 250 kHz +// <134217728=> 500 kHz +// <268435456=> 1 MHz +// <536870912=> 2 MHz +// <1073741824=> 4 MHz +// <2147483648=> 8 MHz #ifndef SPI2_DEFAULT_FREQUENCY #define SPI2_DEFAULT_FREQUENCY 1073741824 @@ -2754,89 +2754,89 @@ #define TIMER_ENABLED 0 #endif // TIMER_DEFAULT_CONFIG_FREQUENCY - Timer frequency if in Timer mode - -// <0=> 16 MHz -// <1=> 8 MHz -// <2=> 4 MHz -// <3=> 2 MHz -// <4=> 1 MHz -// <5=> 500 kHz -// <6=> 250 kHz -// <7=> 125 kHz -// <8=> 62.5 kHz -// <9=> 31.25 kHz + +// <0=> 16 MHz +// <1=> 8 MHz +// <2=> 4 MHz +// <3=> 2 MHz +// <4=> 1 MHz +// <5=> 500 kHz +// <6=> 250 kHz +// <7=> 125 kHz +// <8=> 62.5 kHz +// <9=> 31.25 kHz #ifndef TIMER_DEFAULT_CONFIG_FREQUENCY #define TIMER_DEFAULT_CONFIG_FREQUENCY 0 #endif // TIMER_DEFAULT_CONFIG_MODE - Timer mode or operation - -// <0=> Timer -// <1=> Counter + +// <0=> Timer +// <1=> Counter #ifndef TIMER_DEFAULT_CONFIG_MODE #define TIMER_DEFAULT_CONFIG_MODE 0 #endif // TIMER_DEFAULT_CONFIG_BIT_WIDTH - Timer counter bit width - -// <0=> 16 bit -// <1=> 8 bit -// <2=> 24 bit -// <3=> 32 bit + +// <0=> 16 bit +// <1=> 8 bit +// <2=> 24 bit +// <3=> 32 bit #ifndef TIMER_DEFAULT_CONFIG_BIT_WIDTH #define TIMER_DEFAULT_CONFIG_BIT_WIDTH 0 #endif // TIMER_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef TIMER_DEFAULT_CONFIG_IRQ_PRIORITY #define TIMER_DEFAULT_CONFIG_IRQ_PRIORITY 7 #endif // TIMER0_ENABLED - Enable TIMER0 instance - + #ifndef TIMER0_ENABLED #define TIMER0_ENABLED 0 #endif // TIMER1_ENABLED - Enable TIMER1 instance - + #ifndef TIMER1_ENABLED #define TIMER1_ENABLED 0 #endif // TIMER2_ENABLED - Enable TIMER2 instance - + #ifndef TIMER2_ENABLED #define TIMER2_ENABLED 0 #endif // TIMER3_ENABLED - Enable TIMER3 instance - + #ifndef TIMER3_ENABLED #define TIMER3_ENABLED 0 #endif // TIMER4_ENABLED - Enable TIMER4 instance - + #ifndef TIMER4_ENABLED #define TIMER4_ENABLED 0 @@ -2849,69 +2849,69 @@ #ifndef TWIS_ENABLED #define TWIS_ENABLED 0 #endif -// TWIS_DEFAULT_CONFIG_ADDR0 - Address0 +// TWIS_DEFAULT_CONFIG_ADDR0 - Address0 #ifndef TWIS_DEFAULT_CONFIG_ADDR0 #define TWIS_DEFAULT_CONFIG_ADDR0 0 #endif -// TWIS_DEFAULT_CONFIG_ADDR1 - Address1 +// TWIS_DEFAULT_CONFIG_ADDR1 - Address1 #ifndef TWIS_DEFAULT_CONFIG_ADDR1 #define TWIS_DEFAULT_CONFIG_ADDR1 0 #endif // TWIS_DEFAULT_CONFIG_SCL_PULL - SCL pin pull configuration - -// <0=> Disabled -// <1=> Pull down -// <3=> Pull up + +// <0=> Disabled +// <1=> Pull down +// <3=> Pull up #ifndef TWIS_DEFAULT_CONFIG_SCL_PULL #define TWIS_DEFAULT_CONFIG_SCL_PULL 0 #endif // TWIS_DEFAULT_CONFIG_SDA_PULL - SDA pin pull configuration - -// <0=> Disabled -// <1=> Pull down -// <3=> Pull up + +// <0=> Disabled +// <1=> Pull down +// <3=> Pull up #ifndef TWIS_DEFAULT_CONFIG_SDA_PULL #define TWIS_DEFAULT_CONFIG_SDA_PULL 0 #endif // TWIS_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef TWIS_DEFAULT_CONFIG_IRQ_PRIORITY #define TWIS_DEFAULT_CONFIG_IRQ_PRIORITY 7 #endif // TWIS0_ENABLED - Enable TWIS0 instance - + #ifndef TWIS0_ENABLED #define TWIS0_ENABLED 0 #endif // TWIS1_ENABLED - Enable TWIS1 instance - + #ifndef TWIS1_ENABLED #define TWIS1_ENABLED 0 #endif // TWIS_ASSUME_INIT_AFTER_RESET_ONLY - Assume that any instance would be initialized only once - + // Optimization flag. Registers used by TWIS are shared by other peripherals. Normally, during initialization driver tries to clear all registers to known state before doing the initialization itself. This gives initialization safe procedure, no matter when it would be called. If you activate TWIS only once and do never uninitialize it - set this flag to 1 what gives more optimal code. @@ -2920,7 +2920,7 @@ #endif // TWIS_NO_SYNC_MODE - Remove support for synchronous mode - + // Synchronous mode would be used in specific situations. And it uses some additional code and data memory to safely process state machine by polling it in status functions. If this functionality is not required it may be disabled to free some resources. @@ -2936,41 +2936,41 @@ #define TWI_ENABLED 1 #endif // TWI_DEFAULT_CONFIG_FREQUENCY - Frequency - -// <26738688=> 100k -// <67108864=> 250k -// <104857600=> 400k + +// <26738688=> 100k +// <67108864=> 250k +// <104857600=> 400k #ifndef TWI_DEFAULT_CONFIG_FREQUENCY #define TWI_DEFAULT_CONFIG_FREQUENCY 26738688 #endif // TWI_DEFAULT_CONFIG_CLR_BUS_INIT - Enables bus clearing procedure during init - + #ifndef TWI_DEFAULT_CONFIG_CLR_BUS_INIT #define TWI_DEFAULT_CONFIG_CLR_BUS_INIT 0 #endif // TWI_DEFAULT_CONFIG_HOLD_BUS_UNINIT - Enables bus holding after uninit - + #ifndef TWI_DEFAULT_CONFIG_HOLD_BUS_UNINIT #define TWI_DEFAULT_CONFIG_HOLD_BUS_UNINIT 0 #endif // TWI_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef TWI_DEFAULT_CONFIG_IRQ_PRIORITY #define TWI_DEFAULT_CONFIG_IRQ_PRIORITY 7 @@ -2982,7 +2982,7 @@ #define TWI0_ENABLED 1 #endif // TWI0_USE_EASY_DMA - Use EasyDMA (if present) - + #ifndef TWI0_USE_EASY_DMA #define TWI0_USE_EASY_DMA 0 @@ -2996,7 +2996,7 @@ #define TWI1_ENABLED 1 #endif // TWI1_USE_EASY_DMA - Use EasyDMA (if present) - + #ifndef TWI1_USE_EASY_DMA #define TWI1_USE_EASY_DMA 0 @@ -3012,72 +3012,72 @@ #define UART_ENABLED 1 #endif // UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control - -// <0=> Disabled -// <1=> Enabled + +// <0=> Disabled +// <1=> Enabled #ifndef UART_DEFAULT_CONFIG_HWFC #define UART_DEFAULT_CONFIG_HWFC 1 #endif // UART_DEFAULT_CONFIG_PARITY - Parity - -// <0=> Excluded -// <14=> Included + +// <0=> Excluded +// <14=> Included #ifndef UART_DEFAULT_CONFIG_PARITY #define UART_DEFAULT_CONFIG_PARITY 0 #endif // UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate - -// <323584=> 1200 baud -// <643072=> 2400 baud -// <1290240=> 4800 baud -// <2576384=> 9600 baud -// <3862528=> 14400 baud -// <5152768=> 19200 baud -// <7716864=> 28800 baud -// <10289152=> 38400 baud -// <15400960=> 57600 baud -// <20615168=> 76800 baud -// <30801920=> 115200 baud -// <61865984=> 230400 baud -// <67108864=> 250000 baud -// <121634816=> 460800 baud -// <251658240=> 921600 baud -// <268435456=> 1000000 baud + +// <323584=> 1200 baud +// <643072=> 2400 baud +// <1290240=> 4800 baud +// <2576384=> 9600 baud +// <3862528=> 14400 baud +// <5152768=> 19200 baud +// <7716864=> 28800 baud +// <10289152=> 38400 baud +// <15400960=> 57600 baud +// <20615168=> 76800 baud +// <30801920=> 115200 baud +// <61865984=> 230400 baud +// <67108864=> 250000 baud +// <121634816=> 460800 baud +// <251658240=> 921600 baud +// <268435456=> 1000000 baud #ifndef UART_DEFAULT_CONFIG_BAUDRATE #define UART_DEFAULT_CONFIG_BAUDRATE 2576384 #endif // UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef UART_DEFAULT_CONFIG_IRQ_PRIORITY #define UART_DEFAULT_CONFIG_IRQ_PRIORITY 7 #endif // UART_EASY_DMA_SUPPORT - Driver supporting EasyDMA - + #ifndef UART_EASY_DMA_SUPPORT #define UART_EASY_DMA_SUPPORT 1 #endif // UART_LEGACY_SUPPORT - Driver supporting Legacy mode - + #ifndef UART_LEGACY_SUPPORT #define UART_LEGACY_SUPPORT 1 @@ -3089,7 +3089,7 @@ #define UART0_ENABLED 1 #endif // UART0_CONFIG_USE_EASY_DMA - Default setting for using EasyDMA - + #ifndef UART0_CONFIG_USE_EASY_DMA #define UART0_CONFIG_USE_EASY_DMA 1 @@ -3103,7 +3103,7 @@ #define UART1_ENABLED 1 #endif // UART1_CONFIG_USE_EASY_DMA - Default setting for using EasyDMA - + #ifndef UART1_CONFIG_USE_EASY_DMA #define UART1_CONFIG_USE_EASY_DMA 1 @@ -3119,26 +3119,26 @@ #define USBD_ENABLED 0 #endif // USBD_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef USBD_CONFIG_IRQ_PRIORITY #define USBD_CONFIG_IRQ_PRIORITY 7 #endif // NRF_DRV_USBD_DMASCHEDULER_MODE - USBD SMA scheduler working scheme - -// <0=> Prioritized access -// <1=> Round Robin + +// <0=> Prioritized access +// <1=> Round Robin #ifndef NRF_DRV_USBD_DMASCHEDULER_MODE #define NRF_DRV_USBD_DMASCHEDULER_MODE 0 @@ -3152,17 +3152,17 @@ #define WDT_ENABLED 0 #endif // WDT_CONFIG_BEHAVIOUR - WDT behavior in CPU SLEEP or HALT mode - -// <1=> Run in SLEEP, Pause in HALT -// <8=> Pause in SLEEP, Run in HALT -// <9=> Run in SLEEP and HALT -// <0=> Pause in SLEEP and HALT + +// <1=> Run in SLEEP, Pause in HALT +// <8=> Pause in SLEEP, Run in HALT +// <9=> Run in SLEEP and HALT +// <0=> Pause in SLEEP and HALT #ifndef WDT_CONFIG_BEHAVIOUR #define WDT_CONFIG_BEHAVIOUR 1 #endif -// WDT_CONFIG_RELOAD_VALUE - Reload value <15-4294967295> +// WDT_CONFIG_RELOAD_VALUE - Reload value <15-4294967295> #ifndef WDT_CONFIG_RELOAD_VALUE @@ -3170,17 +3170,17 @@ #endif // WDT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef WDT_CONFIG_IRQ_PRIORITY #define WDT_CONFIG_IRQ_PRIORITY 7 @@ -3188,21 +3188,21 @@ // -// +// //========================================================== -// nRF_Libraries +// nRF_Libraries //========================================================== // APP_GPIOTE_ENABLED - app_gpiote - GPIOTE events dispatcher - + #ifndef APP_GPIOTE_ENABLED #define APP_GPIOTE_ENABLED 0 #endif // APP_PWM_ENABLED - app_pwm - PWM functionality - + #ifndef APP_PWM_ENABLED #define APP_PWM_ENABLED 0 @@ -3214,14 +3214,14 @@ #define APP_SCHEDULER_ENABLED 0 #endif // APP_SCHEDULER_WITH_PAUSE - Enabling pause feature - + #ifndef APP_SCHEDULER_WITH_PAUSE #define APP_SCHEDULER_WITH_PAUSE 0 #endif // APP_SCHEDULER_WITH_PROFILER - Enabling scheduler profiling - + #ifndef APP_SCHEDULER_WITH_PROFILER #define APP_SCHEDULER_WITH_PROFILER 0 @@ -3235,36 +3235,36 @@ #define APP_TIMER_ENABLED 0 #endif // APP_TIMER_CONFIG_RTC_FREQUENCY - Configure RTC prescaler. - -// <0=> 32768 Hz -// <1=> 16384 Hz -// <3=> 8192 Hz -// <7=> 4096 Hz -// <15=> 2048 Hz -// <31=> 1024 Hz + +// <0=> 32768 Hz +// <1=> 16384 Hz +// <3=> 8192 Hz +// <7=> 4096 Hz +// <15=> 2048 Hz +// <31=> 1024 Hz #ifndef APP_TIMER_CONFIG_RTC_FREQUENCY #define APP_TIMER_CONFIG_RTC_FREQUENCY 0 #endif // APP_TIMER_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef APP_TIMER_CONFIG_IRQ_PRIORITY #define APP_TIMER_CONFIG_IRQ_PRIORITY 7 #endif -// APP_TIMER_CONFIG_OP_QUEUE_SIZE - Capacity of timer requests queue. +// APP_TIMER_CONFIG_OP_QUEUE_SIZE - Capacity of timer requests queue. // Size of the queue depends on how many timers are used // in the system, how often timers are started and overall // system latency. If queue size is too small app_timer calls @@ -3275,21 +3275,21 @@ #endif // APP_TIMER_CONFIG_USE_SCHEDULER - Enable scheduling app_timer events to app_scheduler - + #ifndef APP_TIMER_CONFIG_USE_SCHEDULER #define APP_TIMER_CONFIG_USE_SCHEDULER 0 #endif // APP_TIMER_WITH_PROFILER - Enable app_timer profiling - + #ifndef APP_TIMER_WITH_PROFILER #define APP_TIMER_WITH_PROFILER 0 #endif // APP_TIMER_KEEPS_RTC_ACTIVE - Enable RTC always on - + // If option is enabled RTC is kept running even if there is no active timers. // This option can be used when app_timer is used for timestamping. @@ -3299,9 +3299,9 @@ #endif // APP_TIMER_CONFIG_SWI_NUMBER - Configure SWI instance used. - -// <0=> 0 -// <1=> 1 + +// <0=> 0 +// <1=> 1 #ifndef APP_TIMER_CONFIG_SWI_NUMBER #define APP_TIMER_CONFIG_SWI_NUMBER 0 @@ -3310,7 +3310,7 @@ // // NRF_TWI_MNGR_ENABLED - nrf_twi_mngr - TWI transaction manager - + #ifndef NRF_TWI_MNGR_ENABLED #define NRF_TWI_MNGR_ENABLED 0 @@ -3322,8 +3322,8 @@ #define APP_UART_ENABLED 0 #endif // APP_UART_DRIVER_INSTANCE - UART instance used - -// <0=> 0 + +// <0=> 0 #ifndef APP_UART_DRIVER_INSTANCE #define APP_UART_DRIVER_INSTANCE 0 @@ -3332,77 +3332,77 @@ // // APP_USBD_CLASS_AUDIO_ENABLED - app_usbd_audio - USB AUDIO class - + #ifndef APP_USBD_CLASS_AUDIO_ENABLED #define APP_USBD_CLASS_AUDIO_ENABLED 0 #endif // APP_USBD_CLASS_CDC_ACM_ENABLED - app_usbd_cdc_acm - USB CDC ACM class - + #ifndef APP_USBD_CLASS_CDC_ACM_ENABLED #define APP_USBD_CLASS_CDC_ACM_ENABLED 0 #endif // APP_USBD_CLASS_HID_ENABLED - app_usbd_hid - USB HID class - + #ifndef APP_USBD_CLASS_HID_ENABLED #define APP_USBD_CLASS_HID_ENABLED 0 #endif // APP_USBD_HID_GENERIC_ENABLED - app_usbd_hid_generic - USB HID generic - + #ifndef APP_USBD_HID_GENERIC_ENABLED #define APP_USBD_HID_GENERIC_ENABLED 0 #endif // APP_USBD_HID_KBD_ENABLED - app_usbd_hid_kbd - USB HID keyboard - + #ifndef APP_USBD_HID_KBD_ENABLED #define APP_USBD_HID_KBD_ENABLED 0 #endif // APP_USBD_HID_MOUSE_ENABLED - app_usbd_hid_mouse - USB HID mouse - + #ifndef APP_USBD_HID_MOUSE_ENABLED #define APP_USBD_HID_MOUSE_ENABLED 0 #endif // APP_USBD_MSC_ENABLED - app_usbd_msc - USB MSC class - + #ifndef APP_USBD_MSC_ENABLED #define APP_USBD_MSC_ENABLED 0 #endif // BUTTON_ENABLED - app_button - buttons handling module - + #ifndef BUTTON_ENABLED #define BUTTON_ENABLED 0 #endif // CRC16_ENABLED - crc16 - CRC16 calculation routines - + #ifndef CRC16_ENABLED #define CRC16_ENABLED 0 #endif // CRC32_ENABLED - crc32 - CRC32 calculation routines - + #ifndef CRC32_ENABLED #define CRC32_ENABLED 0 #endif // ECC_ENABLED - ecc - Elliptic Curve Cryptography Library - + #ifndef ECC_ENABLED #define ECC_ENABLED 0 @@ -3417,7 +3417,7 @@ // Configure the number of virtual pages to use and their size. //========================================================== -// FDS_VIRTUAL_PAGES - Number of virtual flash pages to use. +// FDS_VIRTUAL_PAGES - Number of virtual flash pages to use. // One of the virtual pages is reserved by the system for garbage collection. // Therefore, the minimum is two virtual pages: one page to store data and one page to be used by the system for garbage collection. // The total amount of flash memory that is used by FDS amounts to @ref FDS_VIRTUAL_PAGES * @ref FDS_VIRTUAL_PAGE_SIZE * 4 bytes. @@ -3427,19 +3427,19 @@ #endif // FDS_VIRTUAL_PAGE_SIZE - The size of a virtual flash page. - + // Expressed in number of 4-byte words. // By default, a virtual page is the same size as a physical page. // The size of a virtual page must be a multiple of the size of a physical page. -// <1024=> 1024 -// <2048=> 2048 +// <1024=> 1024 +// <2048=> 2048 #ifndef FDS_VIRTUAL_PAGE_SIZE #define FDS_VIRTUAL_PAGE_SIZE 1024 #endif -// +// //========================================================== // Backend - Backend configuration @@ -3447,31 +3447,31 @@ // Configure which nrf_fstorage backend is used by FDS to write to flash. //========================================================== // FDS_BACKEND - FDS flash backend. - + // NRF_FSTORAGE_SD uses the nrf_fstorage_sd backend implementation using the SoftDevice API. Use this if you have a SoftDevice present. // NRF_FSTORAGE_NVMC uses the nrf_fstorage_nvmc implementation. Use this setting if you don't use the SoftDevice. -// <1=> NRF_FSTORAGE_NVMC -// <2=> NRF_FSTORAGE_SD +// <1=> NRF_FSTORAGE_NVMC +// <2=> NRF_FSTORAGE_SD #ifndef FDS_BACKEND #define FDS_BACKEND 1 #endif -// +// //========================================================== // Queue - Queue settings //========================================================== -// FDS_OP_QUEUE_SIZE - Size of the internal queue. +// FDS_OP_QUEUE_SIZE - Size of the internal queue. // Increase this value if you frequently get synchronous FDS_ERR_NO_SPACE_IN_QUEUES errors. #ifndef FDS_OP_QUEUE_SIZE #define FDS_OP_QUEUE_SIZE 4 #endif -// +// //========================================================== // CRC - CRC functionality @@ -3487,12 +3487,12 @@ #define FDS_CRC_CHECK_ON_READ 0 #endif // FDS_CRC_CHECK_ON_WRITE - Perform a CRC check on newly written records. - + // Perform a CRC check on newly written records. // This setting can be used to make sure that the record data was not altered while being written to flash. -// <1=> Enabled -// <0=> Disabled +// <1=> Enabled +// <0=> Disabled #ifndef FDS_CRC_CHECK_ON_WRITE #define FDS_CRC_CHECK_ON_WRITE 0 @@ -3500,18 +3500,18 @@ // -// +// //========================================================== // Users - Number of users //========================================================== -// FDS_MAX_USERS - Maximum number of callbacks that can be registered. +// FDS_MAX_USERS - Maximum number of callbacks that can be registered. #ifndef FDS_MAX_USERS #define FDS_MAX_USERS 4 #endif -// +// //========================================================== // @@ -3522,7 +3522,7 @@ #define HARDFAULT_HANDLER_ENABLED 0 #endif // HARDFAULT_HANDLER_GDB_PSP_BACKTRACE - Bypass the GDB problem with multiple stack pointers backtrace - + // There is a known bug in GDB which causes it to incorrectly backtrace the code // when multiple stack pointers are used (main and process stack pointers). @@ -3543,17 +3543,17 @@ #ifndef HCI_MEM_POOL_ENABLED #define HCI_MEM_POOL_ENABLED 0 #endif -// HCI_TX_BUF_SIZE - TX buffer size in bytes. +// HCI_TX_BUF_SIZE - TX buffer size in bytes. #ifndef HCI_TX_BUF_SIZE #define HCI_TX_BUF_SIZE 600 #endif -// HCI_RX_BUF_SIZE - RX buffer size in bytes. +// HCI_RX_BUF_SIZE - RX buffer size in bytes. #ifndef HCI_RX_BUF_SIZE #define HCI_RX_BUF_SIZE 600 #endif -// HCI_RX_BUF_QUEUE_SIZE - RX buffer queue size. +// HCI_RX_BUF_QUEUE_SIZE - RX buffer queue size. #ifndef HCI_RX_BUF_QUEUE_SIZE #define HCI_RX_BUF_QUEUE_SIZE 4 #endif @@ -3566,53 +3566,53 @@ #define HCI_SLIP_ENABLED 0 #endif // HCI_UART_BAUDRATE - Default Baudrate - -// <323584=> 1200 baud -// <643072=> 2400 baud -// <1290240=> 4800 baud -// <2576384=> 9600 baud -// <3862528=> 14400 baud -// <5152768=> 19200 baud -// <7716864=> 28800 baud -// <10289152=> 38400 baud -// <15400960=> 57600 baud -// <20615168=> 76800 baud -// <30801920=> 115200 baud -// <61865984=> 230400 baud -// <67108864=> 250000 baud -// <121634816=> 460800 baud -// <251658240=> 921600 baud -// <268435456=> 1000000 baud + +// <323584=> 1200 baud +// <643072=> 2400 baud +// <1290240=> 4800 baud +// <2576384=> 9600 baud +// <3862528=> 14400 baud +// <5152768=> 19200 baud +// <7716864=> 28800 baud +// <10289152=> 38400 baud +// <15400960=> 57600 baud +// <20615168=> 76800 baud +// <30801920=> 115200 baud +// <61865984=> 230400 baud +// <67108864=> 250000 baud +// <121634816=> 460800 baud +// <251658240=> 921600 baud +// <268435456=> 1000000 baud #ifndef HCI_UART_BAUDRATE #define HCI_UART_BAUDRATE 30801920 #endif // HCI_UART_FLOW_CONTROL - Hardware Flow Control - -// <0=> Disabled -// <1=> Enabled + +// <0=> Disabled +// <1=> Enabled #ifndef HCI_UART_FLOW_CONTROL #define HCI_UART_FLOW_CONTROL 0 #endif -// HCI_UART_RX_PIN - UART RX pin +// HCI_UART_RX_PIN - UART RX pin #ifndef HCI_UART_RX_PIN #define HCI_UART_RX_PIN 8 #endif -// HCI_UART_TX_PIN - UART TX pin +// HCI_UART_TX_PIN - UART TX pin #ifndef HCI_UART_TX_PIN #define HCI_UART_TX_PIN 6 #endif -// HCI_UART_RTS_PIN - UART RTS pin +// HCI_UART_RTS_PIN - UART RTS pin #ifndef HCI_UART_RTS_PIN #define HCI_UART_RTS_PIN 5 #endif -// HCI_UART_CTS_PIN - UART CTS pin +// HCI_UART_CTS_PIN - UART CTS pin #ifndef HCI_UART_CTS_PIN #define HCI_UART_CTS_PIN 7 #endif @@ -3624,7 +3624,7 @@ #ifndef HCI_TRANSPORT_ENABLED #define HCI_TRANSPORT_ENABLED 0 #endif -// HCI_MAX_PACKET_SIZE_IN_BITS - Maximum size of a single application packet in bits. +// HCI_MAX_PACKET_SIZE_IN_BITS - Maximum size of a single application packet in bits. #ifndef HCI_MAX_PACKET_SIZE_IN_BITS #define HCI_MAX_PACKET_SIZE_IN_BITS 8000 #endif @@ -3632,14 +3632,14 @@ // // LED_SOFTBLINK_ENABLED - led_softblink - led_softblink module - + #ifndef LED_SOFTBLINK_ENABLED #define LED_SOFTBLINK_ENABLED 0 #endif // LOW_POWER_PWM_ENABLED - low_power_pwm - low_power_pwm module - + #ifndef LOW_POWER_PWM_ENABLED #define LOW_POWER_PWM_ENABLED 0 @@ -3650,98 +3650,98 @@ #ifndef MEM_MANAGER_ENABLED #define MEM_MANAGER_ENABLED 0 #endif -// MEMORY_MANAGER_SMALL_BLOCK_COUNT - Size of each memory blocks identified as 'small' block. <0-255> +// MEMORY_MANAGER_SMALL_BLOCK_COUNT - Size of each memory blocks identified as 'small' block. <0-255> #ifndef MEMORY_MANAGER_SMALL_BLOCK_COUNT #define MEMORY_MANAGER_SMALL_BLOCK_COUNT 1 #endif -// MEMORY_MANAGER_SMALL_BLOCK_SIZE - Size of each memory blocks identified as 'small' block. +// MEMORY_MANAGER_SMALL_BLOCK_SIZE - Size of each memory blocks identified as 'small' block. // Size of each memory blocks identified as 'small' block. Memory block are recommended to be word-sized. #ifndef MEMORY_MANAGER_SMALL_BLOCK_SIZE #define MEMORY_MANAGER_SMALL_BLOCK_SIZE 32 #endif -// MEMORY_MANAGER_MEDIUM_BLOCK_COUNT - Size of each memory blocks identified as 'medium' block. <0-255> +// MEMORY_MANAGER_MEDIUM_BLOCK_COUNT - Size of each memory blocks identified as 'medium' block. <0-255> #ifndef MEMORY_MANAGER_MEDIUM_BLOCK_COUNT #define MEMORY_MANAGER_MEDIUM_BLOCK_COUNT 0 #endif -// MEMORY_MANAGER_MEDIUM_BLOCK_SIZE - Size of each memory blocks identified as 'medium' block. +// MEMORY_MANAGER_MEDIUM_BLOCK_SIZE - Size of each memory blocks identified as 'medium' block. // Size of each memory blocks identified as 'medium' block. Memory block are recommended to be word-sized. #ifndef MEMORY_MANAGER_MEDIUM_BLOCK_SIZE #define MEMORY_MANAGER_MEDIUM_BLOCK_SIZE 256 #endif -// MEMORY_MANAGER_LARGE_BLOCK_COUNT - Size of each memory blocks identified as 'large' block. <0-255> +// MEMORY_MANAGER_LARGE_BLOCK_COUNT - Size of each memory blocks identified as 'large' block. <0-255> #ifndef MEMORY_MANAGER_LARGE_BLOCK_COUNT #define MEMORY_MANAGER_LARGE_BLOCK_COUNT 0 #endif -// MEMORY_MANAGER_LARGE_BLOCK_SIZE - Size of each memory blocks identified as 'large' block. +// MEMORY_MANAGER_LARGE_BLOCK_SIZE - Size of each memory blocks identified as 'large' block. // Size of each memory blocks identified as 'large' block. Memory block are recommended to be word-sized. #ifndef MEMORY_MANAGER_LARGE_BLOCK_SIZE #define MEMORY_MANAGER_LARGE_BLOCK_SIZE 256 #endif -// MEMORY_MANAGER_XLARGE_BLOCK_COUNT - Size of each memory blocks identified as 'extra large' block. <0-255> +// MEMORY_MANAGER_XLARGE_BLOCK_COUNT - Size of each memory blocks identified as 'extra large' block. <0-255> #ifndef MEMORY_MANAGER_XLARGE_BLOCK_COUNT #define MEMORY_MANAGER_XLARGE_BLOCK_COUNT 0 #endif -// MEMORY_MANAGER_XLARGE_BLOCK_SIZE - Size of each memory blocks identified as 'extra large' block. +// MEMORY_MANAGER_XLARGE_BLOCK_SIZE - Size of each memory blocks identified as 'extra large' block. // Size of each memory blocks identified as 'extra large' block. Memory block are recommended to be word-sized. #ifndef MEMORY_MANAGER_XLARGE_BLOCK_SIZE #define MEMORY_MANAGER_XLARGE_BLOCK_SIZE 1320 #endif -// MEMORY_MANAGER_XXLARGE_BLOCK_COUNT - Size of each memory blocks identified as 'extra extra large' block. <0-255> +// MEMORY_MANAGER_XXLARGE_BLOCK_COUNT - Size of each memory blocks identified as 'extra extra large' block. <0-255> #ifndef MEMORY_MANAGER_XXLARGE_BLOCK_COUNT #define MEMORY_MANAGER_XXLARGE_BLOCK_COUNT 0 #endif -// MEMORY_MANAGER_XXLARGE_BLOCK_SIZE - Size of each memory blocks identified as 'extra extra large' block. +// MEMORY_MANAGER_XXLARGE_BLOCK_SIZE - Size of each memory blocks identified as 'extra extra large' block. // Size of each memory blocks identified as 'extra extra large' block. Memory block are recommended to be word-sized. #ifndef MEMORY_MANAGER_XXLARGE_BLOCK_SIZE #define MEMORY_MANAGER_XXLARGE_BLOCK_SIZE 3444 #endif -// MEMORY_MANAGER_XSMALL_BLOCK_COUNT - Size of each memory blocks identified as 'extra small' block. <0-255> +// MEMORY_MANAGER_XSMALL_BLOCK_COUNT - Size of each memory blocks identified as 'extra small' block. <0-255> #ifndef MEMORY_MANAGER_XSMALL_BLOCK_COUNT #define MEMORY_MANAGER_XSMALL_BLOCK_COUNT 0 #endif -// MEMORY_MANAGER_XSMALL_BLOCK_SIZE - Size of each memory blocks identified as 'extra small' block. +// MEMORY_MANAGER_XSMALL_BLOCK_SIZE - Size of each memory blocks identified as 'extra small' block. // Size of each memory blocks identified as 'extra large' block. Memory block are recommended to be word-sized. #ifndef MEMORY_MANAGER_XSMALL_BLOCK_SIZE #define MEMORY_MANAGER_XSMALL_BLOCK_SIZE 64 #endif -// MEMORY_MANAGER_XXSMALL_BLOCK_COUNT - Size of each memory blocks identified as 'extra extra small' block. <0-255> +// MEMORY_MANAGER_XXSMALL_BLOCK_COUNT - Size of each memory blocks identified as 'extra extra small' block. <0-255> #ifndef MEMORY_MANAGER_XXSMALL_BLOCK_COUNT #define MEMORY_MANAGER_XXSMALL_BLOCK_COUNT 0 #endif -// MEMORY_MANAGER_XXSMALL_BLOCK_SIZE - Size of each memory blocks identified as 'extra extra small' block. +// MEMORY_MANAGER_XXSMALL_BLOCK_SIZE - Size of each memory blocks identified as 'extra extra small' block. // Size of each memory blocks identified as 'extra extra small' block. Memory block are recommended to be word-sized. #ifndef MEMORY_MANAGER_XXSMALL_BLOCK_SIZE @@ -3749,7 +3749,7 @@ #endif // MEM_MANAGER_DISABLE_API_PARAM_CHECK - Disable API parameter checks in the module. - + #ifndef MEM_MANAGER_DISABLE_API_PARAM_CHECK #define MEM_MANAGER_DISABLE_API_PARAM_CHECK 0 @@ -3767,14 +3767,14 @@ #ifndef NRF_BALLOC_CONFIG_DEBUG_ENABLED #define NRF_BALLOC_CONFIG_DEBUG_ENABLED 0 #endif -// NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS - Number of words used as head guard. <0-255> +// NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS - Number of words used as head guard. <0-255> #ifndef NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS #define NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS 1 #endif -// NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS - Number of words used as tail guard. <0-255> +// NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS - Number of words used as tail guard. <0-255> #ifndef NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS @@ -3782,21 +3782,21 @@ #endif // NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED - Enables basic checks in this module. - + #ifndef NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED #define NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED 0 #endif // NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED - Enables double memory free check in this module. - + #ifndef NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED #define NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED 0 #endif // NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED - Enables free memory corruption check in this module. - + #ifndef NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED #define NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED 0 @@ -3811,32 +3811,32 @@ #ifndef NRF_CSENSE_ENABLED #define NRF_CSENSE_ENABLED 0 #endif -// NRF_CSENSE_PAD_HYSTERESIS - Minimum value of change required to determine that a pad was touched. +// NRF_CSENSE_PAD_HYSTERESIS - Minimum value of change required to determine that a pad was touched. #ifndef NRF_CSENSE_PAD_HYSTERESIS #define NRF_CSENSE_PAD_HYSTERESIS 15 #endif -// NRF_CSENSE_PAD_DEVIATION - Minimum value measured on a pad required to take it into account while calculating the step. +// NRF_CSENSE_PAD_DEVIATION - Minimum value measured on a pad required to take it into account while calculating the step. #ifndef NRF_CSENSE_PAD_DEVIATION #define NRF_CSENSE_PAD_DEVIATION 70 #endif -// NRF_CSENSE_MIN_PAD_VALUE - Minimum normalized value on a pad required to take its value into account. +// NRF_CSENSE_MIN_PAD_VALUE - Minimum normalized value on a pad required to take its value into account. #ifndef NRF_CSENSE_MIN_PAD_VALUE #define NRF_CSENSE_MIN_PAD_VALUE 20 #endif -// NRF_CSENSE_MAX_PADS_NUMBER - Maximum number of pads used for one instance. +// NRF_CSENSE_MAX_PADS_NUMBER - Maximum number of pads used for one instance. #ifndef NRF_CSENSE_MAX_PADS_NUMBER #define NRF_CSENSE_MAX_PADS_NUMBER 20 #endif -// NRF_CSENSE_MAX_VALUE - Maximum normalized value obtained from measurement. +// NRF_CSENSE_MAX_VALUE - Maximum normalized value obtained from measurement. #ifndef NRF_CSENSE_MAX_VALUE #define NRF_CSENSE_MAX_VALUE 1000 #endif -// NRF_CSENSE_OUTPUT_PIN - Output pin used by the low-level module. +// NRF_CSENSE_OUTPUT_PIN - Output pin used by the low-level module. // This is used when capacitive sensor does not use COMP. #ifndef NRF_CSENSE_OUTPUT_PIN @@ -3857,17 +3857,17 @@ #ifndef USE_COMP #define USE_COMP 0 #endif -// TIMER0_FOR_CSENSE - First TIMER instance used by the driver (not used on nRF51). +// TIMER0_FOR_CSENSE - First TIMER instance used by the driver (not used on nRF51). #ifndef TIMER0_FOR_CSENSE #define TIMER0_FOR_CSENSE 1 #endif -// TIMER1_FOR_CSENSE - Second TIMER instance used by the driver (not used on nRF51). +// TIMER1_FOR_CSENSE - Second TIMER instance used by the driver (not used on nRF51). #ifndef TIMER1_FOR_CSENSE #define TIMER1_FOR_CSENSE 2 #endif -// MEASUREMENT_PERIOD - Single measurement period. +// MEASUREMENT_PERIOD - Single measurement period. // Time of a single measurement can be calculated as // T = (1/2)*MEASUREMENT_PERIOD*(1/f_OSC) where f_OSC = I_SOURCE / (2C*(VUP-VDOWN) ). // I_SOURCE, VUP, and VDOWN are values used to initialize COMP and C is the capacitance of the used pad. @@ -3881,7 +3881,7 @@ // // NRF_FPRINTF_ENABLED - nrf_fprintf - fprintf function. - + #ifndef NRF_FPRINTF_ENABLED #define NRF_FPRINTF_ENABLED 0 @@ -3896,14 +3896,14 @@ // Configuration options for the fstorage implementation using the SoftDevice. //========================================================== -// NRF_FSTORAGE_SD_QUEUE_SIZE - Size of the internal queue of operations. +// NRF_FSTORAGE_SD_QUEUE_SIZE - Size of the internal queue of operations. // Increase this value if API calls frequently return the error @ref NRF_ERROR_NO_MEM. #ifndef NRF_FSTORAGE_SD_QUEUE_SIZE #define NRF_FSTORAGE_SD_QUEUE_SIZE 4 #endif -// NRF_FSTORAGE_SD_MAX_RETRIES - Maximum number of attempts at executing an operation when the SoftDevice is busy. +// NRF_FSTORAGE_SD_MAX_RETRIES - Maximum number of attempts at executing an operation when the SoftDevice is busy. // Increase this value if events frequently return the @ref NRF_ERROR_TIMEOUT error. // The SoftDevice might fail to schedule flash access due to high BLE activity. @@ -3911,7 +3911,7 @@ #define NRF_FSTORAGE_SD_MAX_RETRIES 8 #endif -// NRF_FSTORAGE_SD_MAX_WRITE_SIZE - Maximum number of bytes to be written to flash in a single operation. +// NRF_FSTORAGE_SD_MAX_WRITE_SIZE - Maximum number of bytes to be written to flash in a single operation. // This value must be a multiple of four. // Lowering this value can increase the chances of the SoftDevice being able to execute flash operations in between radio activity. // This value is bound by the maximum number of bytes that can be written to flash in a single call to @ref sd_flash_write. @@ -3921,13 +3921,13 @@ #define NRF_FSTORAGE_SD_MAX_WRITE_SIZE 4096 #endif -// +// //========================================================== // // NRF_MEMOBJ_ENABLED - nrf_memobj - Linked memory allocator module - + #ifndef NRF_MEMOBJ_ENABLED #define NRF_MEMOBJ_ENABLED 0 @@ -3946,56 +3946,56 @@ #define NRF_PWR_MGMT_CONFIG_DEBUG_PIN_ENABLED 0 #endif // NRF_PWR_MGMT_SLEEP_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef NRF_PWR_MGMT_SLEEP_DEBUG_PIN #define NRF_PWR_MGMT_SLEEP_DEBUG_PIN 31 @@ -4004,7 +4004,7 @@ // // NRF_PWR_MGMT_CONFIG_CPU_USAGE_MONITOR_ENABLED - Enables CPU usage monitor. - + // Module will trace percentage of CPU usage in one second intervals. @@ -4017,7 +4017,7 @@ #ifndef NRF_PWR_MGMT_CONFIG_STANDBY_TIMEOUT_ENABLED #define NRF_PWR_MGMT_CONFIG_STANDBY_TIMEOUT_ENABLED 0 #endif -// NRF_PWR_MGMT_CONFIG_STANDBY_TIMEOUT_S - Standby timeout (in seconds). +// NRF_PWR_MGMT_CONFIG_STANDBY_TIMEOUT_S - Standby timeout (in seconds). // Shutdown procedure will begin no earlier than after this number of seconds. #ifndef NRF_PWR_MGMT_CONFIG_STANDBY_TIMEOUT_S @@ -4027,27 +4027,27 @@ // // NRF_PWR_MGMT_CONFIG_FPU_SUPPORT_ENABLED - Enables FPU event cleaning. - + #ifndef NRF_PWR_MGMT_CONFIG_FPU_SUPPORT_ENABLED #define NRF_PWR_MGMT_CONFIG_FPU_SUPPORT_ENABLED 1 #endif // NRF_PWR_MGMT_CONFIG_AUTO_SHUTDOWN_RETRY - Blocked shutdown procedure will be retried every second. - + #ifndef NRF_PWR_MGMT_CONFIG_AUTO_SHUTDOWN_RETRY #define NRF_PWR_MGMT_CONFIG_AUTO_SHUTDOWN_RETRY 0 #endif // NRF_PWR_MGMT_CONFIG_USE_SCHEDULER - Module will use @ref app_scheduler. - + #ifndef NRF_PWR_MGMT_CONFIG_USE_SCHEDULER #define NRF_PWR_MGMT_CONFIG_USE_SCHEDULER 0 #endif -// NRF_PWR_MGMT_CONFIG_HANDLER_PRIORITY_COUNT - The number of priorities for module handlers. +// NRF_PWR_MGMT_CONFIG_HANDLER_PRIORITY_COUNT - The number of priorities for module handlers. // The number of stages of the shutdown process. #ifndef NRF_PWR_MGMT_CONFIG_HANDLER_PRIORITY_COUNT @@ -4057,28 +4057,28 @@ // // NRF_QUEUE_ENABLED - nrf_queue - Queue module - + #ifndef NRF_QUEUE_ENABLED #define NRF_QUEUE_ENABLED 1 #endif // NRF_SECTION_ITER_ENABLED - nrf_section_iter - Section iterator - + #ifndef NRF_SECTION_ITER_ENABLED #define NRF_SECTION_ITER_ENABLED 1 #endif // NRF_STRERROR_ENABLED - nrf_strerror - Library for converting error code to string. - + #ifndef NRF_STRERROR_ENABLED #define NRF_STRERROR_ENABLED 0 #endif // SLIP_ENABLED - slip - SLIP encoding and decoding - + #ifndef SLIP_ENABLED #define SLIP_ENABLED 0 @@ -4090,37 +4090,37 @@ #define TASK_MANAGER_ENABLED 0 #endif // TASK_MANAGER_CLI_CMDS - Enable CLI commands specific to the module - + #ifndef TASK_MANAGER_CLI_CMDS #define TASK_MANAGER_CLI_CMDS 1 #endif -// TASK_MANAGER_CONFIG_MAX_TASKS - Maximum number of tasks which can be created +// TASK_MANAGER_CONFIG_MAX_TASKS - Maximum number of tasks which can be created #ifndef TASK_MANAGER_CONFIG_MAX_TASKS #define TASK_MANAGER_CONFIG_MAX_TASKS 2 #endif -// TASK_MANAGER_CONFIG_STACK_SIZE - Stack size for every task (power of 2) +// TASK_MANAGER_CONFIG_STACK_SIZE - Stack size for every task (power of 2) #ifndef TASK_MANAGER_CONFIG_STACK_SIZE #define TASK_MANAGER_CONFIG_STACK_SIZE 1024 #endif // TASK_MANAGER_CONFIG_STACK_PROFILER_ENABLED - Enable stack profiling. - + #ifndef TASK_MANAGER_CONFIG_STACK_PROFILER_ENABLED #define TASK_MANAGER_CONFIG_STACK_PROFILER_ENABLED 1 #endif // TASK_MANAGER_CONFIG_STACK_GUARD - Configures stack guard. - -// <0=> Disabled -// <4=> 32 bytes -// <5=> 64 bytes -// <6=> 128 bytes -// <7=> 256 bytes -// <8=> 512 bytes + +// <0=> Disabled +// <4=> 32 bytes +// <5=> 64 bytes +// <6=> 128 bytes +// <7=> 256 bytes +// <8=> 512 bytes #ifndef TASK_MANAGER_CONFIG_STACK_GUARD #define TASK_MANAGER_CONFIG_STACK_GUARD 7 @@ -4132,30 +4132,30 @@ //========================================================== // NRF_CLI_ENABLED - Enable/disable CLI module. - + #ifndef NRF_CLI_ENABLED #define NRF_CLI_ENABLED 0 #endif -// NRF_CLI_ARGC_MAX - Maximum number of parameters passed to command handler. +// NRF_CLI_ARGC_MAX - Maximum number of parameters passed to command handler. #ifndef NRF_CLI_ARGC_MAX #define NRF_CLI_ARGC_MAX 12 #endif // NRF_CLI_BUILD_IN_CMDS_ENABLED - CLI build in commands. - + #ifndef NRF_CLI_BUILD_IN_CMDS_ENABLED #define NRF_CLI_BUILD_IN_CMDS_ENABLED 1 #endif -// NRF_CLI_CMD_BUFF_SIZE - Maximum buffer size for single command. +// NRF_CLI_CMD_BUFF_SIZE - Maximum buffer size for single command. #ifndef NRF_CLI_CMD_BUFF_SIZE #define NRF_CLI_CMD_BUFF_SIZE 128 #endif -// NRF_CLI_PRINTF_BUFF_SIZE - Maximum print buffer size. +// NRF_CLI_PRINTF_BUFF_SIZE - Maximum print buffer size. #ifndef NRF_CLI_PRINTF_BUFF_SIZE #define NRF_CLI_PRINTF_BUFF_SIZE 23 #endif @@ -4165,12 +4165,12 @@ #ifndef NRF_CLI_HISTORY_ENABLED #define NRF_CLI_HISTORY_ENABLED 1 #endif -// NRF_CLI_HISTORY_ELEMENT_SIZE - Size of one memory object reserved for CLI history +// NRF_CLI_HISTORY_ELEMENT_SIZE - Size of one memory object reserved for CLI history #ifndef NRF_CLI_HISTORY_ELEMENT_SIZE #define NRF_CLI_HISTORY_ELEMENT_SIZE 32 #endif -// NRF_CLI_HISTORY_ELEMENT_COUNT - Number of history memory objects +// NRF_CLI_HISTORY_ELEMENT_COUNT - Number of history memory objects #ifndef NRF_CLI_HISTORY_ELEMENT_COUNT #define NRF_CLI_HISTORY_ELEMENT_COUNT 8 #endif @@ -4178,51 +4178,51 @@ // // NRF_CLI_VT100_COLORS_ENABLED - CLI VT100 colors. - + #ifndef NRF_CLI_VT100_COLORS_ENABLED #define NRF_CLI_VT100_COLORS_ENABLED 1 #endif // NRF_CLI_LOG_BACKEND - Enable logger backend interface. - + #ifndef NRF_CLI_LOG_BACKEND #define NRF_CLI_LOG_BACKEND 1 #endif // NRF_CLI_USES_TASK_MANAGER_ENABLED - Enable CLI to use task_manager - + #ifndef NRF_CLI_USES_TASK_MANAGER_ENABLED #define NRF_CLI_USES_TASK_MANAGER_ENABLED 0 #endif -// +// //========================================================== // nrf_cli_rtt - RTT command line interface transport. //========================================================== // NRF_CLI_RTT_ENABLED - Enable/disable CLI RTT module. - + #ifndef NRF_CLI_RTT_ENABLED #define NRF_CLI_RTT_ENABLED 0 #endif -// NRF_CLI_RTT_TERMINAL_ID - RTT terminal ID for CLI. +// NRF_CLI_RTT_TERMINAL_ID - RTT terminal ID for CLI. #ifndef NRF_CLI_RTT_TERMINAL_ID #define NRF_CLI_RTT_TERMINAL_ID 0 #endif -// +// //========================================================== -// +// //========================================================== -// nRF_Log +// nRF_Log //========================================================== // NRF_LOG_BACKEND_RTT_ENABLED - nrf_log_backend_rtt - Log RTT backend @@ -4230,7 +4230,7 @@ #ifndef NRF_LOG_BACKEND_RTT_ENABLED #define NRF_LOG_BACKEND_RTT_ENABLED 0 #endif -// NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. +// NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. // Size of the buffer is a trade-off between RAM usage and processing. // if buffer is smaller then strings will often be fragmented. // It is recommended to use size which will fit typical log and only the @@ -4247,35 +4247,35 @@ #ifndef NRF_LOG_BACKEND_UART_ENABLED #define NRF_LOG_BACKEND_UART_ENABLED 0 #endif -// NRF_LOG_BACKEND_UART_TX_PIN - UART TX pin +// NRF_LOG_BACKEND_UART_TX_PIN - UART TX pin #ifndef NRF_LOG_BACKEND_UART_TX_PIN #define NRF_LOG_BACKEND_UART_TX_PIN 6 #endif // NRF_LOG_BACKEND_UART_BAUDRATE - Default Baudrate - -// <323584=> 1200 baud -// <643072=> 2400 baud -// <1290240=> 4800 baud -// <2576384=> 9600 baud -// <3862528=> 14400 baud -// <5152768=> 19200 baud -// <7716864=> 28800 baud -// <10289152=> 38400 baud -// <15400960=> 57600 baud -// <20615168=> 76800 baud -// <30801920=> 115200 baud -// <61865984=> 230400 baud -// <67108864=> 250000 baud -// <121634816=> 460800 baud -// <251658240=> 921600 baud -// <268435456=> 1000000 baud + +// <323584=> 1200 baud +// <643072=> 2400 baud +// <1290240=> 4800 baud +// <2576384=> 9600 baud +// <3862528=> 14400 baud +// <5152768=> 19200 baud +// <7716864=> 28800 baud +// <10289152=> 38400 baud +// <15400960=> 57600 baud +// <20615168=> 76800 baud +// <30801920=> 115200 baud +// <61865984=> 230400 baud +// <67108864=> 250000 baud +// <121634816=> 460800 baud +// <251658240=> 921600 baud +// <268435456=> 1000000 baud #ifndef NRF_LOG_BACKEND_UART_BAUDRATE #define NRF_LOG_BACKEND_UART_BAUDRATE 30801920 #endif -// NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. +// NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. // Size of the buffer is a trade-off between RAM usage and processing. // if buffer is smaller then strings will often be fragmented. // It is recommended to use size which will fit typical log and only the @@ -4301,48 +4301,48 @@ #define NRF_LOG_USES_COLORS 0 #endif // NRF_LOG_COLOR_DEFAULT - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_LOG_COLOR_DEFAULT #define NRF_LOG_COLOR_DEFAULT 0 #endif // NRF_LOG_ERROR_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_LOG_ERROR_COLOR #define NRF_LOG_ERROR_COLOR 0 #endif // NRF_LOG_WARNING_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_LOG_WARNING_COLOR #define NRF_LOG_WARNING_COLOR 0 @@ -4351,19 +4351,19 @@ // // NRF_LOG_DEFAULT_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_LOG_DEFAULT_LEVEL #define NRF_LOG_DEFAULT_LEVEL 3 #endif // NRF_LOG_DEFERRED - Enable deffered logger. - + // Log data is buffered and can be processed in idle. @@ -4372,27 +4372,27 @@ #endif // NRF_LOG_BUFSIZE - Size of the buffer for storing logs (in bytes). - + // Must be power of 2 and multiple of 4. // If NRF_LOG_DEFERRED = 0 then buffer size can be reduced to minimum. -// <128=> 128 -// <256=> 256 -// <512=> 512 -// <1024=> 1024 -// <2048=> 2048 -// <4096=> 4096 -// <8192=> 8192 -// <16384=> 16384 +// <128=> 128 +// <256=> 256 +// <512=> 512 +// <1024=> 1024 +// <2048=> 2048 +// <4096=> 4096 +// <8192=> 8192 +// <16384=> 16384 #ifndef NRF_LOG_BUFSIZE #define NRF_LOG_BUFSIZE 1024 #endif // NRF_LOG_ALLOW_OVERFLOW - Configures behavior when circular buffer is full. - -// If set then oldest logs are overwritten. Otherwise a + +// If set then oldest logs are overwritten. Otherwise a // marker is injected informing about overflow. #ifndef NRF_LOG_ALLOW_OVERFLOW @@ -4400,7 +4400,7 @@ #endif // NRF_LOG_USES_TIMESTAMP - Enable timestamping - + // Function for getting the timestamp is provided by the user @@ -4409,14 +4409,14 @@ #endif // NRF_LOG_FILTERS_ENABLED - Enable dynamic filtering of logs. - + #ifndef NRF_LOG_FILTERS_ENABLED #define NRF_LOG_FILTERS_ENABLED 1 #endif // NRF_LOG_CLI_CMDS - Enable CLI commands for the module. - + #ifndef NRF_LOG_CLI_CMDS #define NRF_LOG_CLI_CMDS 1 @@ -4425,7 +4425,7 @@ // Log message pool - Configuration of log message pool //========================================================== -// NRF_LOG_MSGPOOL_ELEMENT_SIZE - Size of a single element in the pool of memory objects. +// NRF_LOG_MSGPOOL_ELEMENT_SIZE - Size of a single element in the pool of memory objects. // If a small value is set, then performance of logs processing // is degraded because data is fragmented. Bigger value impacts // RAM memory utilization. The size is set to fit a message with @@ -4435,7 +4435,7 @@ #define NRF_LOG_MSGPOOL_ELEMENT_SIZE 20 #endif -// NRF_LOG_MSGPOOL_ELEMENT_COUNT - Number of elements in the pool of memory objects +// NRF_LOG_MSGPOOL_ELEMENT_COUNT - Number of elements in the pool of memory objects // If a small value is set, then it may lead to a deadlock // in certain cases if backend has high latency and holds // multiple messages for long time. Bigger value impacts @@ -4445,15 +4445,15 @@ #define NRF_LOG_MSGPOOL_ELEMENT_COUNT 8 #endif -// +// //========================================================== // -// nrf_log module configuration +// nrf_log module configuration //========================================================== -// nrf_log in nRF_Core +// nrf_log in nRF_Core //========================================================== // NRF_MPU_CONFIG_LOG_ENABLED - Enables logging in the module. @@ -4462,44 +4462,44 @@ #define NRF_MPU_CONFIG_LOG_ENABLED 0 #endif // NRF_MPU_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_MPU_CONFIG_LOG_LEVEL #define NRF_MPU_CONFIG_LOG_LEVEL 3 #endif // NRF_MPU_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_MPU_CONFIG_INFO_COLOR #define NRF_MPU_CONFIG_INFO_COLOR 0 #endif // NRF_MPU_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_MPU_CONFIG_DEBUG_COLOR #define NRF_MPU_CONFIG_DEBUG_COLOR 0 @@ -4513,44 +4513,44 @@ #define NRF_STACK_GUARD_CONFIG_LOG_ENABLED 0 #endif // NRF_STACK_GUARD_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_STACK_GUARD_CONFIG_LOG_LEVEL #define NRF_STACK_GUARD_CONFIG_LOG_LEVEL 3 #endif // NRF_STACK_GUARD_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_STACK_GUARD_CONFIG_INFO_COLOR #define NRF_STACK_GUARD_CONFIG_INFO_COLOR 0 #endif // NRF_STACK_GUARD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_STACK_GUARD_CONFIG_DEBUG_COLOR #define NRF_STACK_GUARD_CONFIG_DEBUG_COLOR 0 @@ -4564,44 +4564,44 @@ #define TASK_MANAGER_CONFIG_LOG_ENABLED 0 #endif // TASK_MANAGER_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef TASK_MANAGER_CONFIG_LOG_LEVEL #define TASK_MANAGER_CONFIG_LOG_LEVEL 3 #endif // TASK_MANAGER_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef TASK_MANAGER_CONFIG_INFO_COLOR #define TASK_MANAGER_CONFIG_INFO_COLOR 0 #endif // TASK_MANAGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef TASK_MANAGER_CONFIG_DEBUG_COLOR #define TASK_MANAGER_CONFIG_DEBUG_COLOR 0 @@ -4609,10 +4609,10 @@ // -// +// //========================================================== -// nrf_log in nRF_Drivers +// nrf_log in nRF_Drivers //========================================================== // CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. @@ -4621,44 +4621,44 @@ #define CLOCK_CONFIG_LOG_ENABLED 0 #endif // CLOCK_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef CLOCK_CONFIG_LOG_LEVEL #define CLOCK_CONFIG_LOG_LEVEL 3 #endif // CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef CLOCK_CONFIG_INFO_COLOR #define CLOCK_CONFIG_INFO_COLOR 0 #endif // CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef CLOCK_CONFIG_DEBUG_COLOR #define CLOCK_CONFIG_DEBUG_COLOR 0 @@ -4672,44 +4672,44 @@ #define COMMON_CONFIG_LOG_ENABLED 0 #endif // COMMON_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef COMMON_CONFIG_LOG_LEVEL #define COMMON_CONFIG_LOG_LEVEL 3 #endif // COMMON_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef COMMON_CONFIG_INFO_COLOR #define COMMON_CONFIG_INFO_COLOR 0 #endif // COMMON_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef COMMON_CONFIG_DEBUG_COLOR #define COMMON_CONFIG_DEBUG_COLOR 0 @@ -4723,44 +4723,44 @@ #define COMP_CONFIG_LOG_ENABLED 0 #endif // COMP_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef COMP_CONFIG_LOG_LEVEL #define COMP_CONFIG_LOG_LEVEL 3 #endif // COMP_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef COMP_CONFIG_INFO_COLOR #define COMP_CONFIG_INFO_COLOR 0 #endif // COMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef COMP_CONFIG_DEBUG_COLOR #define COMP_CONFIG_DEBUG_COLOR 0 @@ -4774,44 +4774,44 @@ #define GPIOTE_CONFIG_LOG_ENABLED 0 #endif // GPIOTE_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef GPIOTE_CONFIG_LOG_LEVEL #define GPIOTE_CONFIG_LOG_LEVEL 3 #endif // GPIOTE_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef GPIOTE_CONFIG_INFO_COLOR #define GPIOTE_CONFIG_INFO_COLOR 0 #endif // GPIOTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef GPIOTE_CONFIG_DEBUG_COLOR #define GPIOTE_CONFIG_DEBUG_COLOR 0 @@ -4825,44 +4825,44 @@ #define I2S_CONFIG_LOG_ENABLED 0 #endif // I2S_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef I2S_CONFIG_LOG_LEVEL #define I2S_CONFIG_LOG_LEVEL 3 #endif // I2S_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef I2S_CONFIG_INFO_COLOR #define I2S_CONFIG_INFO_COLOR 0 #endif // I2S_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef I2S_CONFIG_DEBUG_COLOR #define I2S_CONFIG_DEBUG_COLOR 0 @@ -4876,44 +4876,44 @@ #define LPCOMP_CONFIG_LOG_ENABLED 0 #endif // LPCOMP_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef LPCOMP_CONFIG_LOG_LEVEL #define LPCOMP_CONFIG_LOG_LEVEL 3 #endif // LPCOMP_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef LPCOMP_CONFIG_INFO_COLOR #define LPCOMP_CONFIG_INFO_COLOR 0 #endif // LPCOMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef LPCOMP_CONFIG_DEBUG_COLOR #define LPCOMP_CONFIG_DEBUG_COLOR 0 @@ -4927,44 +4927,44 @@ #define PDM_CONFIG_LOG_ENABLED 0 #endif // PDM_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef PDM_CONFIG_LOG_LEVEL #define PDM_CONFIG_LOG_LEVEL 3 #endif // PDM_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef PDM_CONFIG_INFO_COLOR #define PDM_CONFIG_INFO_COLOR 0 #endif // PDM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef PDM_CONFIG_DEBUG_COLOR #define PDM_CONFIG_DEBUG_COLOR 0 @@ -4978,44 +4978,44 @@ #define PPI_CONFIG_LOG_ENABLED 0 #endif // PPI_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef PPI_CONFIG_LOG_LEVEL #define PPI_CONFIG_LOG_LEVEL 3 #endif // PPI_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef PPI_CONFIG_INFO_COLOR #define PPI_CONFIG_INFO_COLOR 0 #endif // PPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef PPI_CONFIG_DEBUG_COLOR #define PPI_CONFIG_DEBUG_COLOR 0 @@ -5029,44 +5029,44 @@ #define PWM_CONFIG_LOG_ENABLED 0 #endif // PWM_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef PWM_CONFIG_LOG_LEVEL #define PWM_CONFIG_LOG_LEVEL 3 #endif // PWM_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef PWM_CONFIG_INFO_COLOR #define PWM_CONFIG_INFO_COLOR 0 #endif // PWM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef PWM_CONFIG_DEBUG_COLOR #define PWM_CONFIG_DEBUG_COLOR 0 @@ -5080,44 +5080,44 @@ #define QDEC_CONFIG_LOG_ENABLED 0 #endif // QDEC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef QDEC_CONFIG_LOG_LEVEL #define QDEC_CONFIG_LOG_LEVEL 3 #endif // QDEC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef QDEC_CONFIG_INFO_COLOR #define QDEC_CONFIG_INFO_COLOR 0 #endif // QDEC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef QDEC_CONFIG_DEBUG_COLOR #define QDEC_CONFIG_DEBUG_COLOR 0 @@ -5131,51 +5131,51 @@ #define RNG_CONFIG_LOG_ENABLED 0 #endif // RNG_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef RNG_CONFIG_LOG_LEVEL #define RNG_CONFIG_LOG_LEVEL 3 #endif // RNG_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef RNG_CONFIG_INFO_COLOR #define RNG_CONFIG_INFO_COLOR 0 #endif // RNG_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef RNG_CONFIG_DEBUG_COLOR #define RNG_CONFIG_DEBUG_COLOR 0 #endif // RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED - Enables logging of random numbers. - + #ifndef RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED #define RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED 0 @@ -5189,44 +5189,44 @@ #define RTC_CONFIG_LOG_ENABLED 0 #endif // RTC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef RTC_CONFIG_LOG_LEVEL #define RTC_CONFIG_LOG_LEVEL 3 #endif // RTC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef RTC_CONFIG_INFO_COLOR #define RTC_CONFIG_INFO_COLOR 0 #endif // RTC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef RTC_CONFIG_DEBUG_COLOR #define RTC_CONFIG_DEBUG_COLOR 0 @@ -5240,44 +5240,44 @@ #define SAADC_CONFIG_LOG_ENABLED 0 #endif // SAADC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef SAADC_CONFIG_LOG_LEVEL #define SAADC_CONFIG_LOG_LEVEL 3 #endif // SAADC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef SAADC_CONFIG_INFO_COLOR #define SAADC_CONFIG_INFO_COLOR 0 #endif // SAADC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef SAADC_CONFIG_DEBUG_COLOR #define SAADC_CONFIG_DEBUG_COLOR 0 @@ -5291,44 +5291,44 @@ #define SPIS_CONFIG_LOG_ENABLED 0 #endif // SPIS_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef SPIS_CONFIG_LOG_LEVEL #define SPIS_CONFIG_LOG_LEVEL 3 #endif // SPIS_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef SPIS_CONFIG_INFO_COLOR #define SPIS_CONFIG_INFO_COLOR 0 #endif // SPIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef SPIS_CONFIG_DEBUG_COLOR #define SPIS_CONFIG_DEBUG_COLOR 0 @@ -5342,44 +5342,44 @@ #define SPI_CONFIG_LOG_ENABLED 0 #endif // SPI_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef SPI_CONFIG_LOG_LEVEL #define SPI_CONFIG_LOG_LEVEL 3 #endif // SPI_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef SPI_CONFIG_INFO_COLOR #define SPI_CONFIG_INFO_COLOR 0 #endif // SPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef SPI_CONFIG_DEBUG_COLOR #define SPI_CONFIG_DEBUG_COLOR 0 @@ -5393,44 +5393,44 @@ #define SWI_CONFIG_LOG_ENABLED 0 #endif // SWI_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef SWI_CONFIG_LOG_LEVEL #define SWI_CONFIG_LOG_LEVEL 3 #endif // SWI_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef SWI_CONFIG_INFO_COLOR #define SWI_CONFIG_INFO_COLOR 0 #endif // SWI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef SWI_CONFIG_DEBUG_COLOR #define SWI_CONFIG_DEBUG_COLOR 0 @@ -5444,44 +5444,44 @@ #define TIMER_CONFIG_LOG_ENABLED 0 #endif // TIMER_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef TIMER_CONFIG_LOG_LEVEL #define TIMER_CONFIG_LOG_LEVEL 3 #endif // TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef TIMER_CONFIG_INFO_COLOR #define TIMER_CONFIG_INFO_COLOR 0 #endif // TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef TIMER_CONFIG_DEBUG_COLOR #define TIMER_CONFIG_DEBUG_COLOR 0 @@ -5495,44 +5495,44 @@ #define TWIS_CONFIG_LOG_ENABLED 0 #endif // TWIS_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef TWIS_CONFIG_LOG_LEVEL #define TWIS_CONFIG_LOG_LEVEL 3 #endif // TWIS_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef TWIS_CONFIG_INFO_COLOR #define TWIS_CONFIG_INFO_COLOR 0 #endif // TWIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef TWIS_CONFIG_DEBUG_COLOR #define TWIS_CONFIG_DEBUG_COLOR 0 @@ -5546,44 +5546,44 @@ #define TWI_CONFIG_LOG_ENABLED 0 #endif // TWI_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef TWI_CONFIG_LOG_LEVEL #define TWI_CONFIG_LOG_LEVEL 3 #endif // TWI_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef TWI_CONFIG_INFO_COLOR #define TWI_CONFIG_INFO_COLOR 0 #endif // TWI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef TWI_CONFIG_DEBUG_COLOR #define TWI_CONFIG_DEBUG_COLOR 0 @@ -5597,44 +5597,44 @@ #define UART_CONFIG_LOG_ENABLED 0 #endif // UART_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef UART_CONFIG_LOG_LEVEL #define UART_CONFIG_LOG_LEVEL 3 #endif // UART_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef UART_CONFIG_INFO_COLOR #define UART_CONFIG_INFO_COLOR 0 #endif // UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef UART_CONFIG_DEBUG_COLOR #define UART_CONFIG_DEBUG_COLOR 0 @@ -5648,44 +5648,44 @@ #define USBD_CONFIG_LOG_ENABLED 0 #endif // USBD_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef USBD_CONFIG_LOG_LEVEL #define USBD_CONFIG_LOG_LEVEL 3 #endif // USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef USBD_CONFIG_INFO_COLOR #define USBD_CONFIG_INFO_COLOR 0 #endif // USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef USBD_CONFIG_DEBUG_COLOR #define USBD_CONFIG_DEBUG_COLOR 0 @@ -5699,44 +5699,44 @@ #define WDT_CONFIG_LOG_ENABLED 0 #endif // WDT_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef WDT_CONFIG_LOG_LEVEL #define WDT_CONFIG_LOG_LEVEL 3 #endif // WDT_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef WDT_CONFIG_INFO_COLOR #define WDT_CONFIG_INFO_COLOR 0 #endif // WDT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef WDT_CONFIG_DEBUG_COLOR #define WDT_CONFIG_DEBUG_COLOR 0 @@ -5744,10 +5744,10 @@ // -// +// //========================================================== -// nrf_log in nRF_Libraries +// nrf_log in nRF_Libraries //========================================================== // APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED - Enables logging in the module. @@ -5756,44 +5756,44 @@ #define APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED 0 #endif // APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL #define APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL 3 #endif // APP_USBD_CDC_ACM_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef APP_USBD_CDC_ACM_CONFIG_INFO_COLOR #define APP_USBD_CDC_ACM_CONFIG_INFO_COLOR 0 #endif // APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR #define APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR 0 @@ -5807,44 +5807,44 @@ #define APP_USBD_MSC_CONFIG_LOG_ENABLED 0 #endif // APP_USBD_MSC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef APP_USBD_MSC_CONFIG_LOG_LEVEL #define APP_USBD_MSC_CONFIG_LOG_LEVEL 3 #endif // APP_USBD_MSC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef APP_USBD_MSC_CONFIG_INFO_COLOR #define APP_USBD_MSC_CONFIG_INFO_COLOR 0 #endif // APP_USBD_MSC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef APP_USBD_MSC_CONFIG_DEBUG_COLOR #define APP_USBD_MSC_CONFIG_DEBUG_COLOR 0 @@ -5853,7 +5853,7 @@ // // MEM_MANAGER_ENABLE_LOGS - Enable debug trace in the module. - + #ifndef MEM_MANAGER_ENABLE_LOGS #define MEM_MANAGER_ENABLE_LOGS 0 @@ -5865,44 +5865,44 @@ #define NRF_BALLOC_CONFIG_LOG_ENABLED 0 #endif // NRF_BALLOC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_BALLOC_CONFIG_LOG_LEVEL #define NRF_BALLOC_CONFIG_LOG_LEVEL 3 #endif // NRF_BALLOC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_BALLOC_CONFIG_INFO_COLOR #define NRF_BALLOC_CONFIG_INFO_COLOR 0 #endif // NRF_BALLOC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_BALLOC_CONFIG_DEBUG_COLOR #define NRF_BALLOC_CONFIG_DEBUG_COLOR 0 @@ -5916,44 +5916,44 @@ #define NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED 0 #endif // NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL #define NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL 3 #endif // NRF_CLI_BLE_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_CLI_BLE_UART_CONFIG_INFO_COLOR #define NRF_CLI_BLE_UART_CONFIG_INFO_COLOR 0 #endif // NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR #define NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR 0 @@ -5967,44 +5967,44 @@ #define NRF_CLI_UART_CONFIG_LOG_ENABLED 0 #endif // NRF_CLI_UART_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_CLI_UART_CONFIG_LOG_LEVEL #define NRF_CLI_UART_CONFIG_LOG_LEVEL 3 #endif // NRF_CLI_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_CLI_UART_CONFIG_INFO_COLOR #define NRF_CLI_UART_CONFIG_INFO_COLOR 0 #endif // NRF_CLI_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_CLI_UART_CONFIG_DEBUG_COLOR #define NRF_CLI_UART_CONFIG_DEBUG_COLOR 0 @@ -6018,44 +6018,44 @@ #define NRF_MEMOBJ_CONFIG_LOG_ENABLED 0 #endif // NRF_MEMOBJ_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_MEMOBJ_CONFIG_LOG_LEVEL #define NRF_MEMOBJ_CONFIG_LOG_LEVEL 3 #endif // NRF_MEMOBJ_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_MEMOBJ_CONFIG_INFO_COLOR #define NRF_MEMOBJ_CONFIG_INFO_COLOR 0 #endif // NRF_MEMOBJ_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_MEMOBJ_CONFIG_DEBUG_COLOR #define NRF_MEMOBJ_CONFIG_DEBUG_COLOR 0 @@ -6069,44 +6069,44 @@ #define NRF_PWR_MGMT_CONFIG_LOG_ENABLED 0 #endif // NRF_PWR_MGMT_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_PWR_MGMT_CONFIG_LOG_LEVEL #define NRF_PWR_MGMT_CONFIG_LOG_LEVEL 3 #endif // NRF_PWR_MGMT_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_PWR_MGMT_CONFIG_INFO_COLOR #define NRF_PWR_MGMT_CONFIG_INFO_COLOR 0 #endif // NRF_PWR_MGMT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_PWR_MGMT_CONFIG_DEBUG_COLOR #define NRF_PWR_MGMT_CONFIG_DEBUG_COLOR 0 @@ -6120,44 +6120,44 @@ #define NRF_SDH_ANT_LOG_ENABLED 1 #endif // NRF_SDH_ANT_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_SDH_ANT_LOG_LEVEL #define NRF_SDH_ANT_LOG_LEVEL 3 #endif // NRF_SDH_ANT_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_SDH_ANT_INFO_COLOR #define NRF_SDH_ANT_INFO_COLOR 0 #endif // NRF_SDH_ANT_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_SDH_ANT_DEBUG_COLOR #define NRF_SDH_ANT_DEBUG_COLOR 0 @@ -6171,44 +6171,44 @@ #define NRF_SDH_BLE_LOG_ENABLED 1 #endif // NRF_SDH_BLE_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_SDH_BLE_LOG_LEVEL #define NRF_SDH_BLE_LOG_LEVEL 3 #endif // NRF_SDH_BLE_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_SDH_BLE_INFO_COLOR #define NRF_SDH_BLE_INFO_COLOR 0 #endif // NRF_SDH_BLE_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_SDH_BLE_DEBUG_COLOR #define NRF_SDH_BLE_DEBUG_COLOR 0 @@ -6222,44 +6222,44 @@ #define NRF_SDH_LOG_ENABLED 1 #endif // NRF_SDH_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_SDH_LOG_LEVEL #define NRF_SDH_LOG_LEVEL 3 #endif // NRF_SDH_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_SDH_INFO_COLOR #define NRF_SDH_INFO_COLOR 0 #endif // NRF_SDH_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_SDH_DEBUG_COLOR #define NRF_SDH_DEBUG_COLOR 0 @@ -6273,44 +6273,44 @@ #define NRF_SDH_SOC_LOG_ENABLED 1 #endif // NRF_SDH_SOC_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NRF_SDH_SOC_LOG_LEVEL #define NRF_SDH_SOC_LOG_LEVEL 3 #endif // NRF_SDH_SOC_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_SDH_SOC_INFO_COLOR #define NRF_SDH_SOC_INFO_COLOR 0 #endif // NRF_SDH_SOC_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NRF_SDH_SOC_DEBUG_COLOR #define NRF_SDH_SOC_DEBUG_COLOR 0 @@ -6318,19 +6318,19 @@ // -// +// //========================================================== -// +// //========================================================== -// +// //========================================================== -// +// //========================================================== -// nRF_NFC +// nRF_NFC //========================================================== // NFC_BLE_OOB_ADVDATA_ENABLED - nfc_ble_oob_advdata - Encoding the advertising data and/or scan response data which is specific for OOB pairing @@ -6339,9 +6339,9 @@ #define NFC_BLE_OOB_ADVDATA_ENABLED 0 #endif // ADVANCED_ADVDATA_SUPPORT - Non-mandatory AD types for BLE OOB pairing are encoded inside the NDEF message (e.g. service UUIDs) - -// <1=> Enabled -// <0=> Disabled + +// <1=> Enabled +// <0=> Disabled #ifndef ADVANCED_ADVDATA_SUPPORT #define ADVANCED_ADVDATA_SUPPORT 0 @@ -6360,44 +6360,44 @@ #define NFC_BLE_PAIR_LIB_LOG_ENABLED 0 #endif // NFC_BLE_PAIR_LIB_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NFC_BLE_PAIR_LIB_LOG_LEVEL #define NFC_BLE_PAIR_LIB_LOG_LEVEL 3 #endif // NFC_BLE_PAIR_LIB_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NFC_BLE_PAIR_LIB_INFO_COLOR #define NFC_BLE_PAIR_LIB_INFO_COLOR 0 #endif // NFC_BLE_PAIR_LIB_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NFC_BLE_PAIR_LIB_DEBUG_COLOR #define NFC_BLE_PAIR_LIB_DEBUG_COLOR 0 @@ -6416,84 +6416,84 @@ #define BLE_NFC_SEC_PARAM_BOND 1 #endif // BLE_NFC_SEC_PARAM_KDIST_OWN_ENC - Enables Long Term Key and Master Identification distribution by device. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_OWN_ENC #define BLE_NFC_SEC_PARAM_KDIST_OWN_ENC 1 #endif // BLE_NFC_SEC_PARAM_KDIST_OWN_ID - Enables Identity Resolving Key and Identity Address Information distribution by device. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_OWN_ID #define BLE_NFC_SEC_PARAM_KDIST_OWN_ID 1 #endif // BLE_NFC_SEC_PARAM_KDIST_PEER_ENC - Enables Long Term Key and Master Identification distribution by peer. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_PEER_ENC #define BLE_NFC_SEC_PARAM_KDIST_PEER_ENC 1 #endif // BLE_NFC_SEC_PARAM_KDIST_PEER_ID - Enables Identity Resolving Key and Identity Address Information distribution by peer. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_PEER_ID #define BLE_NFC_SEC_PARAM_KDIST_PEER_ID 1 #endif // BLE_NFC_SEC_PARAM_KDIST_OWN_ENC - Enables Long Term Key and Master Identification distribution by device. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_OWN_ENC #define BLE_NFC_SEC_PARAM_KDIST_OWN_ENC 1 #endif // BLE_NFC_SEC_PARAM_KDIST_OWN_ID - Enables Identity Resolving Key and Identity Address Information distribution by device. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_OWN_ID #define BLE_NFC_SEC_PARAM_KDIST_OWN_ID 1 #endif // BLE_NFC_SEC_PARAM_KDIST_PEER_ENC - Enables Long Term Key and Master Identification distribution by peer. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_PEER_ENC #define BLE_NFC_SEC_PARAM_KDIST_PEER_ENC 1 #endif // BLE_NFC_SEC_PARAM_KDIST_PEER_ID - Enables Identity Resolving Key and Identity Address Information distribution by peer. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_PEER_ID #define BLE_NFC_SEC_PARAM_KDIST_PEER_ID 1 #endif // BLE_NFC_SEC_PARAM_KDIST_OWN_ENC - Enables Long Term Key and Master Identification distribution by device. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_OWN_ENC #define BLE_NFC_SEC_PARAM_KDIST_OWN_ENC 1 #endif // BLE_NFC_SEC_PARAM_KDIST_OWN_ID - Enables Identity Resolving Key and Identity Address Information distribution by device. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_OWN_ID #define BLE_NFC_SEC_PARAM_KDIST_OWN_ID 1 #endif // BLE_NFC_SEC_PARAM_KDIST_PEER_ENC - Enables Long Term Key and Master Identification distribution by peer. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_PEER_ENC #define BLE_NFC_SEC_PARAM_KDIST_PEER_ENC 1 #endif // BLE_NFC_SEC_PARAM_KDIST_PEER_ID - Enables Identity Resolving Key and Identity Address Information distribution by peer. - + #ifndef BLE_NFC_SEC_PARAM_KDIST_PEER_ID #define BLE_NFC_SEC_PARAM_KDIST_PEER_ID 1 @@ -6502,40 +6502,40 @@ // // BLE_NFC_SEC_PARAM_MIN_KEY_SIZE - Minimal size of a security key. - -// <7=> 7 -// <8=> 8 -// <9=> 9 -// <10=> 10 -// <11=> 11 -// <12=> 12 -// <13=> 13 -// <14=> 14 -// <15=> 15 -// <16=> 16 + +// <7=> 7 +// <8=> 8 +// <9=> 9 +// <10=> 10 +// <11=> 11 +// <12=> 12 +// <13=> 13 +// <14=> 14 +// <15=> 15 +// <16=> 16 #ifndef BLE_NFC_SEC_PARAM_MIN_KEY_SIZE #define BLE_NFC_SEC_PARAM_MIN_KEY_SIZE 7 #endif // BLE_NFC_SEC_PARAM_MAX_KEY_SIZE - Maximal size of a security key. - -// <7=> 7 -// <8=> 8 -// <9=> 9 -// <10=> 10 -// <11=> 11 -// <12=> 12 -// <13=> 13 -// <14=> 14 -// <15=> 15 -// <16=> 16 + +// <7=> 7 +// <8=> 8 +// <9=> 9 +// <10=> 10 +// <11=> 11 +// <12=> 12 +// <13=> 13 +// <14=> 14 +// <15=> 15 +// <16=> 16 #ifndef BLE_NFC_SEC_PARAM_MAX_KEY_SIZE #define BLE_NFC_SEC_PARAM_MAX_KEY_SIZE 16 #endif -// +// //========================================================== // @@ -6546,9 +6546,9 @@ #define NFC_NDEF_MSG_ENABLED 0 #endif // NFC_NDEF_MSG_TAG_TYPE - NFC Tag Type - -// <2=> Type 2 Tag -// <4=> Type 4 Tag + +// <2=> Type 2 Tag +// <4=> Type 4 Tag #ifndef NFC_NDEF_MSG_TAG_TYPE #define NFC_NDEF_MSG_TAG_TYPE 2 @@ -6567,28 +6567,28 @@ #define NFC_NDEF_MSG_PARSER_LOG_ENABLED 0 #endif // NFC_NDEF_MSG_PARSER_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NFC_NDEF_MSG_PARSER_LOG_LEVEL #define NFC_NDEF_MSG_PARSER_LOG_LEVEL 3 #endif // NFC_NDEF_MSG_PARSER_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NFC_NDEF_MSG_PARSER_INFO_COLOR #define NFC_NDEF_MSG_PARSER_INFO_COLOR 0 @@ -6609,28 +6609,28 @@ #define NFC_NDEF_RECORD_PARSER_LOG_ENABLED 0 #endif // NFC_NDEF_RECORD_PARSER_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef NFC_NDEF_RECORD_PARSER_LOG_LEVEL #define NFC_NDEF_RECORD_PARSER_LOG_LEVEL 3 #endif // NFC_NDEF_RECORD_PARSER_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef NFC_NDEF_RECORD_PARSER_INFO_COLOR #define NFC_NDEF_RECORD_PARSER_INFO_COLOR 0 @@ -6646,17 +6646,17 @@ #define NFC_T2T_HAL_ENABLED 0 #endif // NFCT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef NFCT_CONFIG_IRQ_PRIORITY #define NFCT_CONFIG_IRQ_PRIORITY 7 @@ -6668,88 +6668,88 @@ #define HAL_NFC_CONFIG_LOG_ENABLED 0 #endif // HAL_NFC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef HAL_NFC_CONFIG_LOG_LEVEL #define HAL_NFC_CONFIG_LOG_LEVEL 3 #endif // HAL_NFC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef HAL_NFC_CONFIG_INFO_COLOR #define HAL_NFC_CONFIG_INFO_COLOR 0 #endif // HAL_NFC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef HAL_NFC_CONFIG_DEBUG_COLOR #define HAL_NFC_CONFIG_DEBUG_COLOR 0 #endif // HAL_NFC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef HAL_NFC_CONFIG_LOG_LEVEL #define HAL_NFC_CONFIG_LOG_LEVEL 3 #endif // HAL_NFC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef HAL_NFC_CONFIG_INFO_COLOR #define HAL_NFC_CONFIG_INFO_COLOR 0 #endif // HAL_NFC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef HAL_NFC_CONFIG_DEBUG_COLOR #define HAL_NFC_CONFIG_DEBUG_COLOR 0 @@ -6763,560 +6763,560 @@ #define HAL_NFC_CONFIG_DEBUG_PIN_ENABLED 0 #endif // HAL_NFC_HCLOCK_ON_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_HCLOCK_ON_DEBUG_PIN #define HAL_NFC_HCLOCK_ON_DEBUG_PIN 11 #endif // HAL_NFC_HCLOCK_OFF_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_HCLOCK_OFF_DEBUG_PIN #define HAL_NFC_HCLOCK_OFF_DEBUG_PIN 12 #endif // HAL_NFC_NFC_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_NFC_EVENT_DEBUG_PIN #define HAL_NFC_NFC_EVENT_DEBUG_PIN 24 #endif // HAL_NFC_DETECT_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_DETECT_EVENT_DEBUG_PIN #define HAL_NFC_DETECT_EVENT_DEBUG_PIN 25 #endif // HAL_NFC_TIMER4_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_TIMER4_EVENT_DEBUG_PIN #define HAL_NFC_TIMER4_EVENT_DEBUG_PIN 28 #endif // HAL_NFC_HCLOCK_ON_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_HCLOCK_ON_DEBUG_PIN #define HAL_NFC_HCLOCK_ON_DEBUG_PIN 31 #endif // HAL_NFC_HCLOCK_OFF_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_HCLOCK_OFF_DEBUG_PIN #define HAL_NFC_HCLOCK_OFF_DEBUG_PIN 31 #endif // HAL_NFC_NFC_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_NFC_EVENT_DEBUG_PIN #define HAL_NFC_NFC_EVENT_DEBUG_PIN 31 #endif // HAL_NFC_DETECT_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_DETECT_EVENT_DEBUG_PIN #define HAL_NFC_DETECT_EVENT_DEBUG_PIN 31 #endif // HAL_NFC_TIMER4_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_TIMER4_EVENT_DEBUG_PIN #define HAL_NFC_TIMER4_EVENT_DEBUG_PIN 31 @@ -7332,17 +7332,17 @@ #define NFC_T4T_HAL_ENABLED 0 #endif // NFCT_CONFIG_IRQ_PRIORITY - Interrupt priority - + // Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 #ifndef NFCT_CONFIG_IRQ_PRIORITY #define NFCT_CONFIG_IRQ_PRIORITY 7 @@ -7354,88 +7354,88 @@ #define HAL_NFC_CONFIG_LOG_ENABLED 0 #endif // HAL_NFC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef HAL_NFC_CONFIG_LOG_LEVEL #define HAL_NFC_CONFIG_LOG_LEVEL 3 #endif // HAL_NFC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef HAL_NFC_CONFIG_INFO_COLOR #define HAL_NFC_CONFIG_INFO_COLOR 0 #endif // HAL_NFC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef HAL_NFC_CONFIG_DEBUG_COLOR #define HAL_NFC_CONFIG_DEBUG_COLOR 0 #endif // HAL_NFC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug #ifndef HAL_NFC_CONFIG_LOG_LEVEL #define HAL_NFC_CONFIG_LOG_LEVEL 3 #endif // HAL_NFC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef HAL_NFC_CONFIG_INFO_COLOR #define HAL_NFC_CONFIG_INFO_COLOR 0 #endif // HAL_NFC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White #ifndef HAL_NFC_CONFIG_DEBUG_COLOR #define HAL_NFC_CONFIG_DEBUG_COLOR 0 @@ -7449,560 +7449,560 @@ #define HAL_NFC_CONFIG_DEBUG_PIN_ENABLED 0 #endif // HAL_NFC_HCLOCK_ON_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_HCLOCK_ON_DEBUG_PIN #define HAL_NFC_HCLOCK_ON_DEBUG_PIN 31 #endif // HAL_NFC_HCLOCK_OFF_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_HCLOCK_OFF_DEBUG_PIN #define HAL_NFC_HCLOCK_OFF_DEBUG_PIN 31 #endif // HAL_NFC_NFC_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_NFC_EVENT_DEBUG_PIN #define HAL_NFC_NFC_EVENT_DEBUG_PIN 31 #endif // HAL_NFC_DETECT_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_DETECT_EVENT_DEBUG_PIN #define HAL_NFC_DETECT_EVENT_DEBUG_PIN 31 #endif // HAL_NFC_TIMER4_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_TIMER4_EVENT_DEBUG_PIN #define HAL_NFC_TIMER4_EVENT_DEBUG_PIN 31 #endif // HAL_NFC_HCLOCK_ON_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_HCLOCK_ON_DEBUG_PIN #define HAL_NFC_HCLOCK_ON_DEBUG_PIN 31 #endif // HAL_NFC_HCLOCK_OFF_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_HCLOCK_OFF_DEBUG_PIN #define HAL_NFC_HCLOCK_OFF_DEBUG_PIN 31 #endif // HAL_NFC_NFC_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_NFC_EVENT_DEBUG_PIN #define HAL_NFC_NFC_EVENT_DEBUG_PIN 31 #endif // HAL_NFC_DETECT_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_DETECT_EVENT_DEBUG_PIN #define HAL_NFC_DETECT_EVENT_DEBUG_PIN 31 #endif // HAL_NFC_TIMER4_EVENT_DEBUG_PIN - Pin number - -// <0=> 0 (P0.0) -// <1=> 1 (P0.1) -// <2=> 2 (P0.2) -// <3=> 3 (P0.3) -// <4=> 4 (P0.4) -// <5=> 5 (P0.5) -// <6=> 6 (P0.6) -// <7=> 7 (P0.7) -// <8=> 8 (P0.8) -// <9=> 9 (P0.9) -// <10=> 10 (P0.10) -// <11=> 11 (P0.11) -// <12=> 12 (P0.12) -// <13=> 13 (P0.13) -// <14=> 14 (P0.14) -// <15=> 15 (P0.15) -// <16=> 16 (P0.16) -// <17=> 17 (P0.17) -// <18=> 18 (P0.18) -// <19=> 19 (P0.19) -// <20=> 20 (P0.20) -// <21=> 21 (P0.21) -// <22=> 22 (P0.22) -// <23=> 23 (P0.23) -// <24=> 24 (P0.24) -// <25=> 25 (P0.25) -// <26=> 26 (P0.26) -// <27=> 27 (P0.27) -// <28=> 28 (P0.28) -// <29=> 29 (P0.29) -// <30=> 30 (P0.30) -// <31=> 31 (P0.31) -// <32=> 32 (P1.0) -// <33=> 33 (P1.1) -// <34=> 34 (P1.2) -// <35=> 35 (P1.3) -// <36=> 36 (P1.4) -// <37=> 37 (P1.5) -// <38=> 38 (P1.6) -// <39=> 39 (P1.7) -// <40=> 40 (P1.8) -// <41=> 41 (P1.9) -// <42=> 42 (P1.10) -// <43=> 43 (P1.11) -// <44=> 44 (P1.12) -// <45=> 45 (P1.13) -// <46=> 46 (P1.14) -// <47=> 47 (P1.15) -// <4294967295=> Not connected + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected #ifndef HAL_NFC_TIMER4_EVENT_DEBUG_PIN #define HAL_NFC_TIMER4_EVENT_DEBUG_PIN 31 @@ -8012,16 +8012,16 @@ // -// +// //========================================================== -// nRF_Segger_RTT +// nRF_Segger_RTT //========================================================== // segger_rtt - SEGGER RTT //========================================================== -// SEGGER_RTT_CONFIG_BUFFER_SIZE_UP - Size of upstream buffer. +// SEGGER_RTT_CONFIG_BUFFER_SIZE_UP - Size of upstream buffer. // Note that either @ref NRF_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE // or this value is actually used. It depends on which one is bigger. @@ -8029,43 +8029,43 @@ #define SEGGER_RTT_CONFIG_BUFFER_SIZE_UP 512 #endif -// SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS - Size of upstream buffer. +// SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS - Size of upstream buffer. #ifndef SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS #define SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS 2 #endif -// SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN - Size of upstream buffer. +// SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN - Size of upstream buffer. #ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN #define SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN 16 #endif -// SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS - Size of upstream buffer. +// SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS - Size of upstream buffer. #ifndef SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS #define SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS 2 #endif // SEGGER_RTT_CONFIG_DEFAULT_MODE - RTT behavior if the buffer is full. - + // The following modes are supported: // - SKIP - Do not block, output nothing. // - TRIM - Do not block, output as much as fits. // - BLOCK - Wait until there is space in the buffer. -// <0=> SKIP -// <1=> TRIM -// <2=> BLOCK_IF_FIFO_FULL +// <0=> SKIP +// <1=> TRIM +// <2=> BLOCK_IF_FIFO_FULL #ifndef SEGGER_RTT_CONFIG_DEFAULT_MODE #define SEGGER_RTT_CONFIG_DEFAULT_MODE 0 #endif -// +// //========================================================== -// +// //========================================================== -// nRF_SoftDevice +// nRF_SoftDevice //========================================================== // NRF_SDH_ANT_ENABLED - nrf_sdh_ant - SoftDevice ANT event handler @@ -8073,42 +8073,42 @@ #ifndef NRF_SDH_ANT_ENABLED #define NRF_SDH_ANT_ENABLED 0 #endif -// ANT Channels +// ANT Channels //========================================================== -// NRF_SDH_ANT_TOTAL_CHANNELS_ALLOCATED - Allocated ANT channels. +// NRF_SDH_ANT_TOTAL_CHANNELS_ALLOCATED - Allocated ANT channels. #ifndef NRF_SDH_ANT_TOTAL_CHANNELS_ALLOCATED #define NRF_SDH_ANT_TOTAL_CHANNELS_ALLOCATED 0 #endif -// NRF_SDH_ANT_ENCRYPTED_CHANNELS - Encrypted ANT channels. +// NRF_SDH_ANT_ENCRYPTED_CHANNELS - Encrypted ANT channels. #ifndef NRF_SDH_ANT_ENCRYPTED_CHANNELS #define NRF_SDH_ANT_ENCRYPTED_CHANNELS 0 #endif -// +// //========================================================== -// ANT Queues +// ANT Queues //========================================================== -// NRF_SDH_ANT_EVENT_QUEUE_SIZE - Event queue size. +// NRF_SDH_ANT_EVENT_QUEUE_SIZE - Event queue size. #ifndef NRF_SDH_ANT_EVENT_QUEUE_SIZE #define NRF_SDH_ANT_EVENT_QUEUE_SIZE 32 #endif -// NRF_SDH_ANT_BURST_QUEUE_SIZE - ANT burst queue size. +// NRF_SDH_ANT_BURST_QUEUE_SIZE - ANT burst queue size. #ifndef NRF_SDH_ANT_BURST_QUEUE_SIZE #define NRF_SDH_ANT_BURST_QUEUE_SIZE 128 #endif -// +// //========================================================== // ANT Observers - Observers and priority levels //========================================================== -// NRF_SDH_ANT_OBSERVER_PRIO_LEVELS - Total number of priority levels for ANT observers. +// NRF_SDH_ANT_OBSERVER_PRIO_LEVELS - Total number of priority levels for ANT observers. // This setting configures the number of priority levels available for the ANT event handlers. // The priority level of a handler determines the order in which it receives events, with respect to other handlers. @@ -8119,59 +8119,59 @@ // ANT Observers priorities - Invididual priorities //========================================================== -// ANT_BPWR_ANT_OBSERVER_PRIO +// ANT_BPWR_ANT_OBSERVER_PRIO // Priority with which ANT events are dispatched to the Bicycle Power Profile. #ifndef ANT_BPWR_ANT_OBSERVER_PRIO #define ANT_BPWR_ANT_OBSERVER_PRIO 1 #endif -// ANT_BSC_ANT_OBSERVER_PRIO +// ANT_BSC_ANT_OBSERVER_PRIO // Priority with which ANT events are dispatched to the Bicycle Speed and Cadence Profile. #ifndef ANT_BSC_ANT_OBSERVER_PRIO #define ANT_BSC_ANT_OBSERVER_PRIO 1 #endif -// ANT_ENCRYPT_ANT_OBSERVER_PRIO +// ANT_ENCRYPT_ANT_OBSERVER_PRIO // Priority with which ANT events are dispatched to the Cryptographic ANT stack configuration module. #ifndef ANT_ENCRYPT_ANT_OBSERVER_PRIO #define ANT_ENCRYPT_ANT_OBSERVER_PRIO 1 #endif -// ANT_HRM_ANT_OBSERVER_PRIO +// ANT_HRM_ANT_OBSERVER_PRIO // Priority with which ANT events are dispatched to the Heart Rate Monitor. #ifndef ANT_HRM_ANT_OBSERVER_PRIO #define ANT_HRM_ANT_OBSERVER_PRIO 1 #endif -// ANT_SDM_ANT_OBSERVER_PRIO +// ANT_SDM_ANT_OBSERVER_PRIO // Priority with which ANT events are dispatched to the Stride Based Speed and Distance Monitor Profile. #ifndef ANT_SDM_ANT_OBSERVER_PRIO #define ANT_SDM_ANT_OBSERVER_PRIO 1 #endif -// ANT_STATE_INDICATOR_ANT_OBSERVER_PRIO +// ANT_STATE_INDICATOR_ANT_OBSERVER_PRIO // Priority with which ANT events are dispatched to the ANT state indicator module. #ifndef ANT_STATE_INDICATOR_ANT_OBSERVER_PRIO #define ANT_STATE_INDICATOR_ANT_OBSERVER_PRIO 1 #endif -// BSP_BTN_ANT_OBSERVER_PRIO +// BSP_BTN_ANT_OBSERVER_PRIO // Priority with which ANT events are dispatched to the Button Control module. #ifndef BSP_BTN_ANT_OBSERVER_PRIO #define BSP_BTN_ANT_OBSERVER_PRIO 1 #endif -// +// //========================================================== -// +// //========================================================== @@ -8187,55 +8187,55 @@ // These values are not used directly by the SoftDevice handler but the application or other libraries might depend on them. // Keep them up-to-date with the desired configuration. //========================================================== -// NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. +// NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. #ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT #define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 0 #endif -// NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. +// NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. #ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT #define NRF_SDH_BLE_CENTRAL_LINK_COUNT 0 #endif -// NRF_SDH_BLE_TOTAL_LINK_COUNT - Maximum number of total concurrent connections using the default configuration. +// NRF_SDH_BLE_TOTAL_LINK_COUNT - Maximum number of total concurrent connections using the default configuration. #ifndef NRF_SDH_BLE_TOTAL_LINK_COUNT #define NRF_SDH_BLE_TOTAL_LINK_COUNT 1 #endif -// NRF_SDH_BLE_GAP_EVENT_LENGTH - The time set aside for this connection on every connection interval in 1.25 ms units. +// NRF_SDH_BLE_GAP_EVENT_LENGTH - The time set aside for this connection on every connection interval in 1.25 ms units. #ifndef NRF_SDH_BLE_GAP_EVENT_LENGTH #define NRF_SDH_BLE_GAP_EVENT_LENGTH 3 #endif -// NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size. +// NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size. #ifndef NRF_SDH_BLE_GATT_MAX_MTU_SIZE #define NRF_SDH_BLE_GATT_MAX_MTU_SIZE 23 #endif -// NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE - Attribute Table size in bytes. The size must be a multiple of 4. +// NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE - Attribute Table size in bytes. The size must be a multiple of 4. #ifndef NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE #define NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE 1408 #endif -// NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs. +// NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs. #ifndef NRF_SDH_BLE_VS_UUID_COUNT #define NRF_SDH_BLE_VS_UUID_COUNT 0 #endif // NRF_SDH_BLE_SERVICE_CHANGED - Include the Service Changed characteristic in the Attribute Table. - + #ifndef NRF_SDH_BLE_SERVICE_CHANGED #define NRF_SDH_BLE_SERVICE_CHANGED 0 #endif -// +// //========================================================== // BLE Observers - Observers and priority levels //========================================================== -// NRF_SDH_BLE_OBSERVER_PRIO_LEVELS - Total number of priority levels for BLE observers. +// NRF_SDH_BLE_OBSERVER_PRIO_LEVELS - Total number of priority levels for BLE observers. // This setting configures the number of priority levels available for BLE event handlers. // The priority level of a handler determines the order in which it receives events, with respect to other handlers. @@ -8246,276 +8246,276 @@ // BLE Observers priorities - Invididual priorities //========================================================== -// BLE_ADV_BLE_OBSERVER_PRIO +// BLE_ADV_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Advertising module. #ifndef BLE_ADV_BLE_OBSERVER_PRIO #define BLE_ADV_BLE_OBSERVER_PRIO 2 #endif -// BLE_ANCS_C_BLE_OBSERVER_PRIO +// BLE_ANCS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Apple Notification Service Client. #ifndef BLE_ANCS_C_BLE_OBSERVER_PRIO #define BLE_ANCS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_ANS_C_BLE_OBSERVER_PRIO +// BLE_ANS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Alert Notification Service Client. #ifndef BLE_ANS_C_BLE_OBSERVER_PRIO #define BLE_ANS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_BAS_BLE_OBSERVER_PRIO +// BLE_BAS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Battery Service. #ifndef BLE_BAS_BLE_OBSERVER_PRIO #define BLE_BAS_BLE_OBSERVER_PRIO 2 #endif -// BLE_BAS_C_BLE_OBSERVER_PRIO +// BLE_BAS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Battery Service Client. #ifndef BLE_BAS_C_BLE_OBSERVER_PRIO #define BLE_BAS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_BPS_BLE_OBSERVER_PRIO +// BLE_BPS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Blood Pressure Service. #ifndef BLE_BPS_BLE_OBSERVER_PRIO #define BLE_BPS_BLE_OBSERVER_PRIO 2 #endif -// BLE_CONN_PARAMS_BLE_OBSERVER_PRIO +// BLE_CONN_PARAMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Connection parameters module. #ifndef BLE_CONN_PARAMS_BLE_OBSERVER_PRIO #define BLE_CONN_PARAMS_BLE_OBSERVER_PRIO 2 #endif -// BLE_CONN_STATE_BLE_OBSERVER_PRIO +// BLE_CONN_STATE_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Connection State module. #ifndef BLE_CONN_STATE_BLE_OBSERVER_PRIO #define BLE_CONN_STATE_BLE_OBSERVER_PRIO 0 #endif -// BLE_CSCS_BLE_OBSERVER_PRIO +// BLE_CSCS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Cycling Speed and Cadence Service. #ifndef BLE_CSCS_BLE_OBSERVER_PRIO #define BLE_CSCS_BLE_OBSERVER_PRIO 2 #endif -// BLE_CTS_C_BLE_OBSERVER_PRIO +// BLE_CTS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Current Time Service Client. #ifndef BLE_CTS_C_BLE_OBSERVER_PRIO #define BLE_CTS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_DB_DISC_BLE_OBSERVER_PRIO +// BLE_DB_DISC_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Database Discovery module. #ifndef BLE_DB_DISC_BLE_OBSERVER_PRIO #define BLE_DB_DISC_BLE_OBSERVER_PRIO 1 #endif -// BLE_DFU_BLE_OBSERVER_PRIO +// BLE_DFU_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the DFU Service. #ifndef BLE_DFU_BLE_OBSERVER_PRIO #define BLE_DFU_BLE_OBSERVER_PRIO 2 #endif -// BLE_GLS_BLE_OBSERVER_PRIO +// BLE_GLS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Glucose Service. #ifndef BLE_GLS_BLE_OBSERVER_PRIO #define BLE_GLS_BLE_OBSERVER_PRIO 2 #endif -// BLE_HIDS_BLE_OBSERVER_PRIO +// BLE_HIDS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Human Interface Device Service. #ifndef BLE_HIDS_BLE_OBSERVER_PRIO #define BLE_HIDS_BLE_OBSERVER_PRIO 2 #endif -// BLE_HRS_BLE_OBSERVER_PRIO +// BLE_HRS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Heart Rate Service. #ifndef BLE_HRS_BLE_OBSERVER_PRIO #define BLE_HRS_BLE_OBSERVER_PRIO 2 #endif -// BLE_HRS_C_BLE_OBSERVER_PRIO +// BLE_HRS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Heart Rate Service Client. #ifndef BLE_HRS_C_BLE_OBSERVER_PRIO #define BLE_HRS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_HTS_BLE_OBSERVER_PRIO +// BLE_HTS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Health Thermometer Service. #ifndef BLE_HTS_BLE_OBSERVER_PRIO #define BLE_HTS_BLE_OBSERVER_PRIO 2 #endif -// BLE_IAS_BLE_OBSERVER_PRIO +// BLE_IAS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Immediate Alert Service. #ifndef BLE_IAS_BLE_OBSERVER_PRIO #define BLE_IAS_BLE_OBSERVER_PRIO 2 #endif -// BLE_IAS_C_BLE_OBSERVER_PRIO +// BLE_IAS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Immediate Alert Service Client. #ifndef BLE_IAS_C_BLE_OBSERVER_PRIO #define BLE_IAS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_LBS_BLE_OBSERVER_PRIO +// BLE_LBS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the LED Button Service. #ifndef BLE_LBS_BLE_OBSERVER_PRIO #define BLE_LBS_BLE_OBSERVER_PRIO 2 #endif -// BLE_LBS_C_BLE_OBSERVER_PRIO +// BLE_LBS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the LED Button Service Client. #ifndef BLE_LBS_C_BLE_OBSERVER_PRIO #define BLE_LBS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_LLS_BLE_OBSERVER_PRIO +// BLE_LLS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Link Loss Service. #ifndef BLE_LLS_BLE_OBSERVER_PRIO #define BLE_LLS_BLE_OBSERVER_PRIO 2 #endif -// BLE_LNS_BLE_OBSERVER_PRIO +// BLE_LNS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Location Navigation Service. #ifndef BLE_LNS_BLE_OBSERVER_PRIO #define BLE_LNS_BLE_OBSERVER_PRIO 2 #endif -// BLE_NUS_BLE_OBSERVER_PRIO +// BLE_NUS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the UART Service. #ifndef BLE_NUS_BLE_OBSERVER_PRIO #define BLE_NUS_BLE_OBSERVER_PRIO 2 #endif -// BLE_NUS_C_BLE_OBSERVER_PRIO +// BLE_NUS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the UART Central Service. #ifndef BLE_NUS_C_BLE_OBSERVER_PRIO #define BLE_NUS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_OTS_BLE_OBSERVER_PRIO +// BLE_OTS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Object transfer service. #ifndef BLE_OTS_BLE_OBSERVER_PRIO #define BLE_OTS_BLE_OBSERVER_PRIO 2 #endif -// BLE_OTS_C_BLE_OBSERVER_PRIO +// BLE_OTS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Object transfer service client. #ifndef BLE_OTS_C_BLE_OBSERVER_PRIO #define BLE_OTS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_RSCS_BLE_OBSERVER_PRIO +// BLE_RSCS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Running Speed and Cadence Service. #ifndef BLE_RSCS_BLE_OBSERVER_PRIO #define BLE_RSCS_BLE_OBSERVER_PRIO 2 #endif -// BLE_RSCS_C_BLE_OBSERVER_PRIO +// BLE_RSCS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Running Speed and Cadence Client. #ifndef BLE_RSCS_C_BLE_OBSERVER_PRIO #define BLE_RSCS_C_BLE_OBSERVER_PRIO 2 #endif -// BLE_TPS_BLE_OBSERVER_PRIO +// BLE_TPS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the TX Power Service. #ifndef BLE_TPS_BLE_OBSERVER_PRIO #define BLE_TPS_BLE_OBSERVER_PRIO 2 #endif -// BSP_BTN_BLE_OBSERVER_PRIO +// BSP_BTN_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Button Control module. #ifndef BSP_BTN_BLE_OBSERVER_PRIO #define BSP_BTN_BLE_OBSERVER_PRIO 1 #endif -// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the NFC pairing library. #ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO #define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 #endif -// NRF_BLE_BMS_BLE_OBSERVER_PRIO +// NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. #ifndef NRF_BLE_BMS_BLE_OBSERVER_PRIO #define NRF_BLE_BMS_BLE_OBSERVER_PRIO 2 #endif -// NRF_BLE_CGMS_BLE_OBSERVER_PRIO +// NRF_BLE_CGMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Contiuon Glucose Monitoring Service. #ifndef NRF_BLE_CGMS_BLE_OBSERVER_PRIO #define NRF_BLE_CGMS_BLE_OBSERVER_PRIO 2 #endif -// NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO +// NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the GATT Service Client. #ifndef NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO #define NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO 2 #endif -// NRF_BLE_GATT_BLE_OBSERVER_PRIO +// NRF_BLE_GATT_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the GATT module. #ifndef NRF_BLE_GATT_BLE_OBSERVER_PRIO #define NRF_BLE_GATT_BLE_OBSERVER_PRIO 2 #endif -// NRF_BLE_QWR_BLE_OBSERVER_PRIO +// NRF_BLE_QWR_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Queued writes module. #ifndef NRF_BLE_QWR_BLE_OBSERVER_PRIO #define NRF_BLE_QWR_BLE_OBSERVER_PRIO 2 #endif -// PM_BLE_OBSERVER_PRIO +// PM_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Peer Manager module. #ifndef PM_BLE_OBSERVER_PRIO #define PM_BLE_OBSERVER_PRIO 2 #endif -// +// //========================================================== -// +// //========================================================== @@ -8526,46 +8526,46 @@ #ifndef NRF_SDH_ENABLED #define NRF_SDH_ENABLED 1 #endif -// Dispatch model +// Dispatch model // This setting configures how Stack events are dispatched to the application. //========================================================== // NRF_SDH_DISPATCH_MODEL - + // NRF_SDH_DISPATCH_MODEL_INTERRUPT: SoftDevice events are passed to the application from the interrupt context. // NRF_SDH_DISPATCH_MODEL_APPSH: SoftDevice events are scheduled using @ref app_scheduler. // NRF_SDH_DISPATCH_MODEL_POLLING: SoftDevice events are to be fetched manually. -// <0=> NRF_SDH_DISPATCH_MODEL_INTERRUPT -// <1=> NRF_SDH_DISPATCH_MODEL_APPSH -// <2=> NRF_SDH_DISPATCH_MODEL_POLLING +// <0=> NRF_SDH_DISPATCH_MODEL_INTERRUPT +// <1=> NRF_SDH_DISPATCH_MODEL_APPSH +// <2=> NRF_SDH_DISPATCH_MODEL_POLLING #ifndef NRF_SDH_DISPATCH_MODEL #define NRF_SDH_DISPATCH_MODEL 0 #endif -// +// //========================================================== // Clock - SoftDevice clock configuration //========================================================== // NRF_SDH_CLOCK_LF_SRC - SoftDevice clock source. - -// <0=> NRF_CLOCK_LF_SRC_RC -// <1=> NRF_CLOCK_LF_SRC_XTAL -// <2=> NRF_CLOCK_LF_SRC_SYNTH + +// <0=> NRF_CLOCK_LF_SRC_RC +// <1=> NRF_CLOCK_LF_SRC_XTAL +// <2=> NRF_CLOCK_LF_SRC_SYNTH #ifndef NRF_SDH_CLOCK_LF_SRC #define NRF_SDH_CLOCK_LF_SRC 1 #endif -// NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. +// NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. #ifndef NRF_SDH_CLOCK_LF_RC_CTIV #define NRF_SDH_CLOCK_LF_RC_CTIV 0 #endif -// NRF_SDH_CLOCK_LF_RC_TEMP_CTIV - SoftDevice calibration timer interval under constant temperature. +// NRF_SDH_CLOCK_LF_RC_TEMP_CTIV - SoftDevice calibration timer interval under constant temperature. // How often (in number of calibration intervals) the RC oscillator shall be calibrated // if the temperature has not changed. @@ -8574,27 +8574,27 @@ #endif // NRF_SDH_CLOCK_LF_XTAL_ACCURACY - External crystal clock accuracy used in the LL to compute timing windows. - -// <0=> NRF_CLOCK_LF_XTAL_ACCURACY_250_PPM -// <1=> NRF_CLOCK_LF_XTAL_ACCURACY_500_PPM -// <2=> NRF_CLOCK_LF_XTAL_ACCURACY_150_PPM -// <3=> NRF_CLOCK_LF_XTAL_ACCURACY_100_PPM -// <4=> NRF_CLOCK_LF_XTAL_ACCURACY_75_PPM -// <5=> NRF_CLOCK_LF_XTAL_ACCURACY_50_PPM -// <6=> NRF_CLOCK_LF_XTAL_ACCURACY_30_PPM -// <7=> NRF_CLOCK_LF_XTAL_ACCURACY_20_PPM + +// <0=> NRF_CLOCK_LF_XTAL_ACCURACY_250_PPM +// <1=> NRF_CLOCK_LF_XTAL_ACCURACY_500_PPM +// <2=> NRF_CLOCK_LF_XTAL_ACCURACY_150_PPM +// <3=> NRF_CLOCK_LF_XTAL_ACCURACY_100_PPM +// <4=> NRF_CLOCK_LF_XTAL_ACCURACY_75_PPM +// <5=> NRF_CLOCK_LF_XTAL_ACCURACY_50_PPM +// <6=> NRF_CLOCK_LF_XTAL_ACCURACY_30_PPM +// <7=> NRF_CLOCK_LF_XTAL_ACCURACY_20_PPM #ifndef NRF_SDH_CLOCK_LF_XTAL_ACCURACY #define NRF_SDH_CLOCK_LF_XTAL_ACCURACY 7 #endif -// +// //========================================================== // SDH Observers - Observers and priority levels //========================================================== -// NRF_SDH_REQ_OBSERVER_PRIO_LEVELS - Total number of priority levels for request observers. +// NRF_SDH_REQ_OBSERVER_PRIO_LEVELS - Total number of priority levels for request observers. // This setting configures the number of priority levels available for the SoftDevice request event handlers. // The priority level of a handler determines the order in which it receives events, with respect to other handlers. @@ -8602,7 +8602,7 @@ #define NRF_SDH_REQ_OBSERVER_PRIO_LEVELS 2 #endif -// NRF_SDH_STATE_OBSERVER_PRIO_LEVELS - Total number of priority levels for state observers. +// NRF_SDH_STATE_OBSERVER_PRIO_LEVELS - Total number of priority levels for state observers. // This setting configures the number of priority levels available for the SoftDevice state event handlers. // The priority level of a handler determines the order in which it receives events, with respect to other handlers. @@ -8610,7 +8610,7 @@ #define NRF_SDH_STATE_OBSERVER_PRIO_LEVELS 2 #endif -// NRF_SDH_STACK_OBSERVER_PRIO_LEVELS - Total number of priority levels for stack event observers. +// NRF_SDH_STACK_OBSERVER_PRIO_LEVELS - Total number of priority levels for stack event observers. // This setting configures the number of priority levels available for the SoftDevice stack event handlers (ANT, BLE, SoC). // The priority level of a handler determines the order in which it receives events, with respect to other handlers. @@ -8622,34 +8622,34 @@ // State Observers priorities - Invididual priorities //========================================================== -// CLOCK_CONFIG_STATE_OBSERVER_PRIO +// CLOCK_CONFIG_STATE_OBSERVER_PRIO // Priority with which state events are dispatched to the Clock driver. #ifndef CLOCK_CONFIG_STATE_OBSERVER_PRIO #define CLOCK_CONFIG_STATE_OBSERVER_PRIO 0 #endif -// POWER_CONFIG_STATE_OBSERVER_PRIO +// POWER_CONFIG_STATE_OBSERVER_PRIO // Priority with which state events are dispatched to the Power driver. #ifndef POWER_CONFIG_STATE_OBSERVER_PRIO #define POWER_CONFIG_STATE_OBSERVER_PRIO 0 #endif -// RNG_CONFIG_STATE_OBSERVER_PRIO +// RNG_CONFIG_STATE_OBSERVER_PRIO // Priority with which state events are dispatched to this module. #ifndef RNG_CONFIG_STATE_OBSERVER_PRIO #define RNG_CONFIG_STATE_OBSERVER_PRIO 0 #endif -// +// //========================================================== // Stack Event Observers priorities - Invididual priorities //========================================================== -// NRF_SDH_ANT_STACK_OBSERVER_PRIO +// NRF_SDH_ANT_STACK_OBSERVER_PRIO // This setting configures the priority with which ANT events are processed with respect to other events coming from the stack. // Modify this setting if you need to have ANT events dispatched before or after other stack events, such as BLE or SoC. // Zero is the highest priority. @@ -8658,7 +8658,7 @@ #define NRF_SDH_ANT_STACK_OBSERVER_PRIO 0 #endif -// NRF_SDH_BLE_STACK_OBSERVER_PRIO +// NRF_SDH_BLE_STACK_OBSERVER_PRIO // This setting configures the priority with which BLE events are processed with respect to other events coming from the stack. // Modify this setting if you need to have BLE events dispatched before or after other stack events, such as ANT or SoC. // Zero is the highest priority. @@ -8667,7 +8667,7 @@ #define NRF_SDH_BLE_STACK_OBSERVER_PRIO 0 #endif -// NRF_SDH_SOC_STACK_OBSERVER_PRIO +// NRF_SDH_SOC_STACK_OBSERVER_PRIO // This setting configures the priority with which SoC events are processed with respect to other events coming from the stack. // Modify this setting if you need to have SoC events dispatched before or after other stack events, such as ANT or BLE. // Zero is the highest priority. @@ -8676,10 +8676,10 @@ #define NRF_SDH_SOC_STACK_OBSERVER_PRIO 0 #endif -// +// //========================================================== -// +// //========================================================== @@ -8693,7 +8693,7 @@ // SoC Observers - Observers and priority levels //========================================================== -// NRF_SDH_SOC_OBSERVER_PRIO_LEVELS - Total number of priority levels for SoC observers. +// NRF_SDH_SOC_OBSERVER_PRIO_LEVELS - Total number of priority levels for SoC observers. // This setting configures the number of priority levels available for the SoC event handlers. // The priority level of a handler determines the order in which it receives events, with respect to other handlers. @@ -8704,44 +8704,44 @@ // SoC Observers priorities - Invididual priorities //========================================================== -// BLE_ADV_SOC_OBSERVER_PRIO +// BLE_ADV_SOC_OBSERVER_PRIO // Priority with which SoC events are dispatched to the Advertising module. #ifndef BLE_ADV_SOC_OBSERVER_PRIO #define BLE_ADV_SOC_OBSERVER_PRIO 1 #endif -// BLE_DFU_SOC_OBSERVER_PRIO +// BLE_DFU_SOC_OBSERVER_PRIO // Priority with which BLE events are dispatched to the DFU Service. #ifndef BLE_DFU_SOC_OBSERVER_PRIO #define BLE_DFU_SOC_OBSERVER_PRIO 1 #endif -// CLOCK_CONFIG_SOC_OBSERVER_PRIO +// CLOCK_CONFIG_SOC_OBSERVER_PRIO // Priority with which SoC events are dispatched to the Clock driver. #ifndef CLOCK_CONFIG_SOC_OBSERVER_PRIO #define CLOCK_CONFIG_SOC_OBSERVER_PRIO 0 #endif -// POWER_CONFIG_SOC_OBSERVER_PRIO +// POWER_CONFIG_SOC_OBSERVER_PRIO // Priority with which SoC events are dispatched to the Power driver. #ifndef POWER_CONFIG_SOC_OBSERVER_PRIO #define POWER_CONFIG_SOC_OBSERVER_PRIO 0 #endif -// +// //========================================================== -// +// //========================================================== // -// +// //========================================================== // <<< end of configuration section >>> diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/mbed_lib.json b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/mbed_lib.json index d8b12f59b58..7272b1cf3e2 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/mbed_lib.json +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/mbed_lib.json @@ -21,20 +21,20 @@ "target_overrides": { "DELTA_DFBM_NQ620": { "target.macros_add": [ - "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", - "NRF52_PAN_12", - "NRF52_PAN_15", - "NRF52_PAN_20", - "NRF52_PAN_30", - "NRF52_PAN_31", - "NRF52_PAN_36", - "NRF52_PAN_51", - "NRF52_PAN_53", - "NRF52_PAN_54", - "NRF52_PAN_55", - "NRF52_PAN_58", - "NRF52_PAN_62", + "CONFIG_GPIO_AS_PINRESET", + "SWI_DISABLE0", + "NRF52_PAN_12", + "NRF52_PAN_15", + "NRF52_PAN_20", + "NRF52_PAN_30", + "NRF52_PAN_31", + "NRF52_PAN_36", + "NRF52_PAN_51", + "NRF52_PAN_53", + "NRF52_PAN_54", + "NRF52_PAN_55", + "NRF52_PAN_58", + "NRF52_PAN_62", "NRF52_PAN_63", "NRF52_PAN_64" ], @@ -44,20 +44,20 @@ }, "MTB_LAIRD_BL652": { "target.macros_add": [ - "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", - "NRF52_PAN_12", - "NRF52_PAN_15", - "NRF52_PAN_20", - "NRF52_PAN_30", - "NRF52_PAN_31", - "NRF52_PAN_36", - "NRF52_PAN_51", - "NRF52_PAN_53", - "NRF52_PAN_54", - "NRF52_PAN_55", - "NRF52_PAN_58", - "NRF52_PAN_62", + "CONFIG_GPIO_AS_PINRESET", + "SWI_DISABLE0", + "NRF52_PAN_12", + "NRF52_PAN_15", + "NRF52_PAN_20", + "NRF52_PAN_30", + "NRF52_PAN_31", + "NRF52_PAN_36", + "NRF52_PAN_51", + "NRF52_PAN_53", + "NRF52_PAN_54", + "NRF52_PAN_55", + "NRF52_PAN_58", + "NRF52_PAN_62", "NRF52_PAN_63", "NRF52_PAN_64" ], @@ -66,40 +66,40 @@ }, "MTB_UBLOX_NINA_B1": { "target.macros_add": [ - "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", - "NRF52_PAN_12", - "NRF52_PAN_15", - "NRF52_PAN_20", - "NRF52_PAN_30", - "NRF52_PAN_31", - "NRF52_PAN_36", - "NRF52_PAN_51", - "NRF52_PAN_53", - "NRF52_PAN_54", - "NRF52_PAN_55", - "NRF52_PAN_58", - "NRF52_PAN_62", + "CONFIG_GPIO_AS_PINRESET", + "SWI_DISABLE0", + "NRF52_PAN_12", + "NRF52_PAN_15", + "NRF52_PAN_20", + "NRF52_PAN_30", + "NRF52_PAN_31", + "NRF52_PAN_36", + "NRF52_PAN_51", + "NRF52_PAN_53", + "NRF52_PAN_54", + "NRF52_PAN_55", + "NRF52_PAN_58", + "NRF52_PAN_62", "NRF52_PAN_63", "NRF52_PAN_64" ] }, "NRF52_DK": { "target.macros_add": [ - "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", - "NRF52_PAN_12", - "NRF52_PAN_15", - "NRF52_PAN_20", - "NRF52_PAN_30", - "NRF52_PAN_31", - "NRF52_PAN_36", - "NRF52_PAN_51", - "NRF52_PAN_53", - "NRF52_PAN_54", - "NRF52_PAN_55", - "NRF52_PAN_58", - "NRF52_PAN_62", + "CONFIG_GPIO_AS_PINRESET", + "SWI_DISABLE0", + "NRF52_PAN_12", + "NRF52_PAN_15", + "NRF52_PAN_20", + "NRF52_PAN_30", + "NRF52_PAN_31", + "NRF52_PAN_36", + "NRF52_PAN_51", + "NRF52_PAN_53", + "NRF52_PAN_54", + "NRF52_PAN_55", + "NRF52_PAN_58", + "NRF52_PAN_62", "NRF52_PAN_63", "NRF52_PAN_64" ], @@ -107,60 +107,60 @@ }, "RBLAB_BLENANO2": { "target.macros_add": [ - "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", - "NRF52_PAN_12", - "NRF52_PAN_15", - "NRF52_PAN_20", - "NRF52_PAN_30", - "NRF52_PAN_31", - "NRF52_PAN_36", - "NRF52_PAN_51", - "NRF52_PAN_53", - "NRF52_PAN_54", - "NRF52_PAN_55", - "NRF52_PAN_58", - "NRF52_PAN_62", + "CONFIG_GPIO_AS_PINRESET", + "SWI_DISABLE0", + "NRF52_PAN_12", + "NRF52_PAN_15", + "NRF52_PAN_20", + "NRF52_PAN_30", + "NRF52_PAN_31", + "NRF52_PAN_36", + "NRF52_PAN_51", + "NRF52_PAN_53", + "NRF52_PAN_54", + "NRF52_PAN_55", + "NRF52_PAN_58", + "NRF52_PAN_62", "NRF52_PAN_63", "NRF52_PAN_64" ] }, "UBLOX_EVA_NINA": { "target.macros_add": [ - "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", - "NRF52_PAN_12", - "NRF52_PAN_15", - "NRF52_PAN_20", - "NRF52_PAN_30", - "NRF52_PAN_31", - "NRF52_PAN_36", - "NRF52_PAN_51", - "NRF52_PAN_53", - "NRF52_PAN_54", - "NRF52_PAN_55", - "NRF52_PAN_58", - "NRF52_PAN_62", + "CONFIG_GPIO_AS_PINRESET", + "SWI_DISABLE0", + "NRF52_PAN_12", + "NRF52_PAN_15", + "NRF52_PAN_20", + "NRF52_PAN_30", + "NRF52_PAN_31", + "NRF52_PAN_36", + "NRF52_PAN_51", + "NRF52_PAN_53", + "NRF52_PAN_54", + "NRF52_PAN_55", + "NRF52_PAN_58", + "NRF52_PAN_62", "NRF52_PAN_63", "NRF52_PAN_64" ] }, "UBLOX_EVK_NINA_B1": { "target.macros_add": [ - "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", - "NRF52_PAN_12", - "NRF52_PAN_15", - "NRF52_PAN_20", - "NRF52_PAN_30", - "NRF52_PAN_31", - "NRF52_PAN_36", - "NRF52_PAN_51", - "NRF52_PAN_53", - "NRF52_PAN_54", - "NRF52_PAN_55", - "NRF52_PAN_58", - "NRF52_PAN_62", + "CONFIG_GPIO_AS_PINRESET", + "SWI_DISABLE0", + "NRF52_PAN_12", + "NRF52_PAN_15", + "NRF52_PAN_20", + "NRF52_PAN_30", + "NRF52_PAN_31", + "NRF52_PAN_36", + "NRF52_PAN_51", + "NRF52_PAN_53", + "NRF52_PAN_54", + "NRF52_PAN_55", + "NRF52_PAN_58", + "NRF52_PAN_62", "NRF52_PAN_63", "NRF52_PAN_64" ], @@ -168,20 +168,20 @@ }, "VBLUNO52": { "target.macros_add": [ - "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", - "NRF52_PAN_12", - "NRF52_PAN_15", - "NRF52_PAN_20", - "NRF52_PAN_30", - "NRF52_PAN_31", - "NRF52_PAN_36", - "NRF52_PAN_51", - "NRF52_PAN_53", - "NRF52_PAN_54", - "NRF52_PAN_55", - "NRF52_PAN_58", - "NRF52_PAN_62", + "CONFIG_GPIO_AS_PINRESET", + "SWI_DISABLE0", + "NRF52_PAN_12", + "NRF52_PAN_15", + "NRF52_PAN_20", + "NRF52_PAN_30", + "NRF52_PAN_31", + "NRF52_PAN_36", + "NRF52_PAN_51", + "NRF52_PAN_53", + "NRF52_PAN_54", + "NRF52_PAN_55", + "NRF52_PAN_58", + "NRF52_PAN_62", "NRF52_PAN_63", "NRF52_PAN_64" ], @@ -189,8 +189,8 @@ }, "NRF52840_DK": { "target.macros_add": [ - "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", + "CONFIG_GPIO_AS_PINRESET", + "SWI_DISABLE0", "NRF52_ERRATA_20" ], "target.console-uart-flow-control": "RTSCTS" From 40e7ab47d03315d69be47a88b5cb02f1b4adb7d6 Mon Sep 17 00:00:00 2001 From: Marcus Chang Date: Mon, 9 Jul 2018 12:49:38 -0700 Subject: [PATCH 073/113] Fix inconsistent SWI configuration in NRF52 series All SWI channels except SWI0 is being used by the SoftDevice and not only SWI1. --- .../TARGET_MCU_NRF52832/config/sdk_config.h | 2 +- .../TARGET_MCU_NRF52840/config/sdk_config.h | 2 +- .../TARGET_SOFTDEVICE_S132_FULL/mbed_lib.json | 6 +++++- .../TARGET_SOFTDEVICE_S132_OTA/mbed_lib.json | 12 +++++------- .../TARGET_SOFTDEVICE_S140_FULL/mbed_lib.json | 6 +++++- .../TARGET_SOFTDEVICE_S140_OTA/mbed_lib.json | 12 +++++------- 6 files changed, 22 insertions(+), 18 deletions(-) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/config/sdk_config.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/config/sdk_config.h index 03f10d0fe97..451c125b35d 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/config/sdk_config.h +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/config/sdk_config.h @@ -1795,7 +1795,7 @@ #ifndef EGU_ENABLED -#define EGU_ENABLED 0 +#define EGU_ENABLED 1 #endif // GPIOTE_ENABLED - nrf_drv_gpiote - GPIOTE peripheral driver diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52840/config/sdk_config.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52840/config/sdk_config.h index f401e4deeb7..201402a18e2 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52840/config/sdk_config.h +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52840/config/sdk_config.h @@ -1795,7 +1795,7 @@ #ifndef EGU_ENABLED -#define EGU_ENABLED 0 +#define EGU_ENABLED 1 #endif // GPIOTE_ENABLED - nrf_drv_gpiote - GPIOTE peripheral driver diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S132_FULL/mbed_lib.json b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S132_FULL/mbed_lib.json index 33fed4b63ac..6fdffbe1481 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S132_FULL/mbed_lib.json +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S132_FULL/mbed_lib.json @@ -28,7 +28,11 @@ "NRF_SDH_BLE_STACK_OBSERVER_PRIO=0", "NRF_SDH_SOC_STACK_OBSERVER_PRIO=0", "FDS_BACKEND=2", - "SWI_DISABLE1=1" + "SWI_DISABLE1", + "SWI_DISABLE2", + "SWI_DISABLE3", + "SWI_DISABLE4", + "SWI_DISABLE5" ], "target_overrides": { "*": { diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S132_OTA/mbed_lib.json b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S132_OTA/mbed_lib.json index 158c66c33f3..6fdffbe1481 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S132_OTA/mbed_lib.json +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S132_OTA/mbed_lib.json @@ -12,13 +12,7 @@ "NRF_SDH_ENABLED=1", "NRF_SDH_BLE_ENABLED=1", "PEER_MANAGER_ENABLED=1", - "NRF_SDH_BLE_PERIPHERAL_LINK_COUNT=3", - "NRF_SDH_BLE_CENTRAL_LINK_COUNT=1", - "NRF_SDH_BLE_TOTAL_LINK_COUNT=4", - "NRF_SDH_BLE_SERVICE_CHANGED=1", "NRF_SDH_BLE_GATT_MAX_MTU_SIZE=23", - "NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE=0x600", - "NRF_SDH_BLE_VS_UUID_COUNT=4", "NRF_SDH_BLE_OBSERVER_PRIO_LEVELS=4", "NRF_SDH_BLE_GAP_EVENT_LENGTH=3", "BLE_ADV_BLE_OBSERVER_PRIO=1", @@ -34,7 +28,11 @@ "NRF_SDH_BLE_STACK_OBSERVER_PRIO=0", "NRF_SDH_SOC_STACK_OBSERVER_PRIO=0", "FDS_BACKEND=2", - "SWI_DISABLE1=1" + "SWI_DISABLE1", + "SWI_DISABLE2", + "SWI_DISABLE3", + "SWI_DISABLE4", + "SWI_DISABLE5" ], "target_overrides": { "*": { diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S140_FULL/mbed_lib.json b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S140_FULL/mbed_lib.json index 6d07cdb4584..0d1c8845108 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S140_FULL/mbed_lib.json +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S140_FULL/mbed_lib.json @@ -28,7 +28,11 @@ "NRF_SDH_BLE_STACK_OBSERVER_PRIO=0", "NRF_SDH_SOC_STACK_OBSERVER_PRIO=0", "FDS_BACKEND=2", - "SWI_DISABLE1=1" + "SWI_DISABLE1", + "SWI_DISABLE2", + "SWI_DISABLE3", + "SWI_DISABLE4", + "SWI_DISABLE5" ], "target_overrides": { "*": { diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S140_OTA/mbed_lib.json b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S140_OTA/mbed_lib.json index 838a47704b6..0d1c8845108 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S140_OTA/mbed_lib.json +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S140_OTA/mbed_lib.json @@ -12,13 +12,7 @@ "NRF_SDH_ENABLED=1", "NRF_SDH_BLE_ENABLED=1", "PEER_MANAGER_ENABLED=1", - "NRF_SDH_BLE_PERIPHERAL_LINK_COUNT=3", - "NRF_SDH_BLE_CENTRAL_LINK_COUNT=1", - "NRF_SDH_BLE_TOTAL_LINK_COUNT=4", - "NRF_SDH_BLE_SERVICE_CHANGED=1", "NRF_SDH_BLE_GATT_MAX_MTU_SIZE=23", - "NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE=0x600", - "NRF_SDH_BLE_VS_UUID_COUNT=4", "NRF_SDH_BLE_OBSERVER_PRIO_LEVELS=4", "NRF_SDH_BLE_GAP_EVENT_LENGTH=3", "BLE_ADV_BLE_OBSERVER_PRIO=1", @@ -34,7 +28,11 @@ "NRF_SDH_BLE_STACK_OBSERVER_PRIO=0", "NRF_SDH_SOC_STACK_OBSERVER_PRIO=0", "FDS_BACKEND=2", - "SWI_DISABLE1=1" + "SWI_DISABLE1", + "SWI_DISABLE2", + "SWI_DISABLE3", + "SWI_DISABLE4", + "SWI_DISABLE5" ], "target_overrides": { "*": { From 1aaf346c6a12cac962487859b45395f0570f2f92 Mon Sep 17 00:00:00 2001 From: Marcus Chang Date: Mon, 9 Jul 2018 12:51:58 -0700 Subject: [PATCH 074/113] Change NRF52 series UART to only use one SWI channel This fixes conflicts with the SoftDevice. --- targets/TARGET_NORDIC/TARGET_NRF5x/README.md | 7 +- .../TARGET_NRF5x/TARGET_NRF52/mbed_lib.json | 12 +- .../TARGET_NRF5x/TARGET_NRF52/serial_api.c | 105 ++++++++++-------- 3 files changed, 64 insertions(+), 60 deletions(-) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/README.md b/targets/TARGET_NORDIC/TARGET_NRF5x/README.md index 7dd4c278552..fb2f9cc8407 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/README.md +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/README.md @@ -143,9 +143,9 @@ The table must be placed in a C compilation file. Because each DMA buffer must be at least 5 bytes deep, each buffer is automatically flushed after a certain idle period to ensure low latency and correctness. This idle timeout is implemented using 2 of the 4 channels on RTC instance 2. This leaves RTC0 for the SoftDevice and RTC1 for Mbed tickers. -#### SWI2, SWI3, SWI4, and SWI5 +#### SWI0 -To minimize the time spend in the highest priority interrupt handler all callbacks to the user provided IRQ handlers are deferred through Software Interrupts running at lowest priority. SWI 2-5 are reserved by the serial implementation. +To minimize the time spend in the highest priority interrupt handler all callbacks to the user provided IRQ handlers are deferred through Software Interrupts running at lowest priority. SWI0 is reserved by the serial implementation. #### Asserts @@ -156,13 +156,14 @@ The SDK file `mbed-os/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/librari The assert handler is defined in mbed-os/features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_NRF5x/source/btle/btle.cpp : assert_nrf_callback() which forwards assert failures to thye mbed error() handler. - #### Limitations * The UARTE hardware only supports 8-bit, None/Even parity, and 1 stop bit. * The asynchronous read and write implementation currently only support 255 byte transfers. * The EasyDMA hardware can only read from RAM, which means all Tx buffers must reside in RAM. If a Tx buffer residing in flash is passed to the asynchronous write function, the function will try to copy the Tx buffer to a temporary internal buffer and transmit the data from there. * It is not possible to do an asynchronous write from flash and receive non-asynchronously at the same time since the non-asynchronous receive buffer is being used as the temporary transmission buffer. + * The driver will flush the DMA buffer after a configurable timeout. During this process the UART will be halted and therefor unable to receive data. Hardware flow control should be enabled to avoid missing any data during this window. + ## SoftDevice diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/mbed_lib.json b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/mbed_lib.json index 7272b1cf3e2..22e54bacbaf 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/mbed_lib.json +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/mbed_lib.json @@ -18,11 +18,13 @@ "value": 8 } }, + "macros": [ + "SWI_DISABLE0" + ], "target_overrides": { "DELTA_DFBM_NQ620": { "target.macros_add": [ "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", "NRF52_PAN_12", "NRF52_PAN_15", "NRF52_PAN_20", @@ -45,7 +47,6 @@ "MTB_LAIRD_BL652": { "target.macros_add": [ "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", "NRF52_PAN_12", "NRF52_PAN_15", "NRF52_PAN_20", @@ -67,7 +68,6 @@ "MTB_UBLOX_NINA_B1": { "target.macros_add": [ "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", "NRF52_PAN_12", "NRF52_PAN_15", "NRF52_PAN_20", @@ -87,7 +87,6 @@ "NRF52_DK": { "target.macros_add": [ "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", "NRF52_PAN_12", "NRF52_PAN_15", "NRF52_PAN_20", @@ -108,7 +107,6 @@ "RBLAB_BLENANO2": { "target.macros_add": [ "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", "NRF52_PAN_12", "NRF52_PAN_15", "NRF52_PAN_20", @@ -128,7 +126,6 @@ "UBLOX_EVA_NINA": { "target.macros_add": [ "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", "NRF52_PAN_12", "NRF52_PAN_15", "NRF52_PAN_20", @@ -148,7 +145,6 @@ "UBLOX_EVK_NINA_B1": { "target.macros_add": [ "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", "NRF52_PAN_12", "NRF52_PAN_15", "NRF52_PAN_20", @@ -169,7 +165,6 @@ "VBLUNO52": { "target.macros_add": [ "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", "NRF52_PAN_12", "NRF52_PAN_15", "NRF52_PAN_20", @@ -190,7 +185,6 @@ "NRF52840_DK": { "target.macros_add": [ "CONFIG_GPIO_AS_PINRESET", - "SWI_DISABLE0", "NRF52_ERRATA_20" ], "target.console-uart-flow-control": "RTSCTS" diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/serial_api.c b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/serial_api.c index 2d4de63d983..7f7c968cbb3 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/serial_api.c +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/serial_api.c @@ -122,14 +122,6 @@ */ #define RTC_FREQUENCY 32768 -/** - * SWI IRQ numbers - */ -#define UARTE0_SWI_TX_IRQ SWI2_EGU2_IRQn -#define UARTE0_SWI_RX_IRQ SWI3_EGU3_IRQn -#define UARTE1_SWI_TX_IRQ SWI4_EGU4_IRQn -#define UARTE1_SWI_RX_IRQ SWI5_EGU5_IRQn - /*** * _______ _ __ * |__ __| | | / _| @@ -238,6 +230,14 @@ NRF_ATFIFO_DEF(nordic_nrf5_uart_fifo_0, uint8_t, UART0_FIFO_BUFFER_SIZE); NRF_ATFIFO_DEF(nordic_nrf5_uart_fifo_1, uint8_t, UART1_FIFO_BUFFER_SIZE); #endif +/** + * SWI IRQ mask. + */ +static uint8_t nordic_nrf5_uart_swi_mask_tx_0 = 0; +static uint8_t nordic_nrf5_uart_swi_mask_rx_0 = 0; +static uint8_t nordic_nrf5_uart_swi_mask_tx_1 = 0; +static uint8_t nordic_nrf5_uart_swi_mask_rx_1 = 0; + /** * Global variables expected by mbed_retarget.cpp for STDOUT. */ @@ -411,16 +411,6 @@ static void nordic_nrf5_uart_callback_handler(uint32_t instance) } } -static void nordic_nrf5_uart_swi_rx_0(void) -{ - nordic_nrf5_uart_callback_handler(0); -} - -static void nordic_nrf5_uart_swi_rx_1(void) -{ - nordic_nrf5_uart_callback_handler(1); -} - /** * @brief SWI interrupt handler for when the Tx buffer has been transmitted. * @@ -477,33 +467,55 @@ static void nordic_nrf5_uart_event_handler_endtx_asynch(int instance) } #endif -static void nordic_nrf5_uart_swi_tx_0(void) +static void nordic_nrf5_uart_swi0(void) { + if (nordic_nrf5_uart_swi_mask_tx_0) { + + nordic_nrf5_uart_swi_mask_tx_0 = 0; + #if DEVICE_SERIAL_ASYNCH - if (nordic_nrf5_uart_state[0].tx_asynch) { + if (nordic_nrf5_uart_state[0].tx_asynch) { - nordic_nrf5_uart_event_handler_endtx_asynch(0); - } else + nordic_nrf5_uart_event_handler_endtx_asynch(0); + } else #endif - { - nordic_nrf5_uart_event_handler_endtx(0); + { + nordic_nrf5_uart_event_handler_endtx(0); + } } -} + + if (nordic_nrf5_uart_swi_mask_rx_0) { + + nordic_nrf5_uart_swi_mask_rx_0 = 0; + + nordic_nrf5_uart_callback_handler(0); + } + #if UART1_ENABLED -static void nordic_nrf5_uart_swi_tx_1(void) -{ + if (nordic_nrf5_uart_swi_mask_tx_1) { + + nordic_nrf5_uart_swi_mask_tx_1 = 0; + #if DEVICE_SERIAL_ASYNCH - if (nordic_nrf5_uart_state[1].tx_asynch) { + if (nordic_nrf5_uart_state[1].tx_asynch) { - nordic_nrf5_uart_event_handler_endtx_asynch(1); - } else + nordic_nrf5_uart_event_handler_endtx_asynch(1); + } else #endif - { - nordic_nrf5_uart_event_handler_endtx(1); + { + nordic_nrf5_uart_event_handler_endtx(1); + } + } + + if (nordic_nrf5_uart_swi_mask_rx_1) { + + nordic_nrf5_uart_swi_mask_rx_1 = 0; + + nordic_nrf5_uart_callback_handler(1); } -} #endif +} /** * @brief Trigger Tx SWI. @@ -514,12 +526,14 @@ static void nordic_swi_tx_trigger(int instance) { if (instance == 0) { - NVIC_SetPendingIRQ(UARTE0_SWI_TX_IRQ); + nordic_nrf5_uart_swi_mask_tx_0 = 1; + NVIC_SetPendingIRQ(SWI0_EGU0_IRQn); } #if UART1_ENABLED else if (instance == 1) { - NVIC_SetPendingIRQ(UARTE1_SWI_TX_IRQ); + nordic_nrf5_uart_swi_mask_tx_1 = 1; + NVIC_SetPendingIRQ(SWI0_EGU0_IRQn); } #endif } @@ -533,12 +547,16 @@ static void nordic_swi_rx_trigger(int instance) { if (instance == 0) { - NVIC_SetPendingIRQ(UARTE0_SWI_RX_IRQ); + nordic_nrf5_uart_swi_mask_rx_0 = 1; + NVIC_SetPendingIRQ(SWI0_EGU0_IRQn); } +#if UART1_ENABLED else if (instance == 1) { - NVIC_SetPendingIRQ(UARTE1_SWI_RX_IRQ); + nordic_nrf5_uart_swi_mask_rx_1 = 1; + NVIC_SetPendingIRQ(SWI0_EGU0_IRQn); } +#endif } /*** @@ -990,17 +1008,8 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) nrf_rtc_task_trigger(NRF_RTC2, NRF_RTC_TASK_START); /* Enable interrupts for SWI. */ - NVIC_SetVector(UARTE0_SWI_TX_IRQ, (uint32_t) nordic_nrf5_uart_swi_tx_0); - NVIC_SetVector(UARTE0_SWI_RX_IRQ, (uint32_t) nordic_nrf5_uart_swi_rx_0); - nrf_drv_common_irq_enable(UARTE0_SWI_TX_IRQ, APP_IRQ_PRIORITY_LOWEST); - nrf_drv_common_irq_enable(UARTE0_SWI_RX_IRQ, APP_IRQ_PRIORITY_LOWEST); - -#if UART1_ENABLED - NVIC_SetVector(UARTE1_SWI_TX_IRQ, (uint32_t) nordic_nrf5_uart_swi_tx_1); - NVIC_SetVector(UARTE1_SWI_RX_IRQ, (uint32_t) nordic_nrf5_uart_swi_rx_1); - nrf_drv_common_irq_enable(UARTE1_SWI_TX_IRQ, APP_IRQ_PRIORITY_LOWEST); - nrf_drv_common_irq_enable(UARTE1_SWI_RX_IRQ, APP_IRQ_PRIORITY_LOWEST); -#endif + NVIC_SetVector(SWI0_EGU0_IRQn, (uint32_t) nordic_nrf5_uart_swi0); + nrf_drv_common_irq_enable(SWI0_EGU0_IRQn, APP_IRQ_PRIORITY_LOWEST); /* Initialize FIFO buffer for UARTE0. */ NRF_ATFIFO_INIT(nordic_nrf5_uart_fifo_0); From f39a3d75bb99800d1fe7f802f073c33a3700e47c Mon Sep 17 00:00:00 2001 From: Karl Zhang Date: Wed, 18 Apr 2018 09:29:43 +0800 Subject: [PATCH 075/113] Flash API: Enable Flash api on CM3DS Implement flash_api.c for CM3DS on MPS2+. Because MPS2+ board has no physical flash chip, the implementation emulates flash over SRAM. --- .../TARGET_CM3DS_MPS2/flash_api.c | 103 ++++++++++++++++++ .../TARGET_CM3DS_MPS2/objects.h | 5 + targets/targets.json | 2 +- 3 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/flash_api.c diff --git a/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/flash_api.c b/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/flash_api.c new file mode 100644 index 00000000000..2a96377aeb5 --- /dev/null +++ b/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/flash_api.c @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2017-2018 ARM Limited + * + * Licensed under the Apache License Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing software + * distributed under the License is distributed on an "AS IS" BASIS + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "device.h" +#include "flash_api.h" +#include "memory_zones.h" + +/* CM3DS is deployed on MPS2 board with an FPGA image (AN511). + * It doesn't have physical flash memory,the implementation emulates + * flash over SRAM. + */ +#define FLASH_PAGE_SIZE 256 +#define FLASH_OFS_START ZBT_SSRAM1_START +#define FLASH_SECTOR_SIZE 0x1000 +#define FLASH_OFS_END (FLASH_OFS_START + FLASH_SIZE) + +int32_t flash_init(flash_t *obj) +{ + (void)obj; + + return 0; +} + +int32_t flash_free(flash_t *obj) +{ + (void)obj; + + return 0; +} + +int32_t flash_erase_sector(flash_t *obj, uint32_t address) +{ + (void)obj; + + memset((void *)address, 0xff, FLASH_SECTOR_SIZE); + + return 0; +} + +int32_t flash_read(flash_t *obj, uint32_t address, + uint8_t *data, uint32_t size) +{ + (void)obj; + + memcpy(data, (void *)address, size); + + return 0; +} + +int32_t flash_program_page(flash_t *obj, uint32_t address, + const uint8_t *data, uint32_t size) +{ + (void)obj; + + memcpy((void *)address, data, size); + + return 0; +} + +uint32_t flash_get_sector_size(const flash_t *obj, uint32_t address) +{ + (void)obj; + + if (address < FLASH_OFS_START || address >= FLASH_OFS_END) { + return MBED_FLASH_INVALID_SIZE; + } + + return FLASH_SECTOR_SIZE; +} + +uint32_t flash_get_page_size(const flash_t *obj) +{ + (void)obj; + + return FLASH_PAGE_SIZE; +} + +uint32_t flash_get_start_address(const flash_t *obj) +{ + (void)obj; + + return FLASH_OFS_START; +} + +uint32_t flash_get_size(const flash_t *obj) +{ + (void)obj; + + return FLASH_SIZE; +} diff --git a/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/objects.h b/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/objects.h index 64e08a8ebbd..9cf7f7fbed3 100644 --- a/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/objects.h +++ b/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/objects.h @@ -70,6 +70,11 @@ struct analogin_s { uint16_t ctrl_register; /* Control bits with the channel identifier */ }; +/* This structure is not used by the HAL implementation. */ +struct flash_s { + uint8_t not_used; +}; + /* This TRNG structure is not used by the HAL implementation. */ struct trng_s { uint8_t not_used; diff --git a/targets/targets.json b/targets/targets.json index 2a88256a1f2..692c193d0fd 100755 --- a/targets/targets.json +++ b/targets/targets.json @@ -2826,7 +2826,7 @@ "extra_labels": ["ARM_SSG", "CM3DS_MPS2"], "OUTPUT_EXT": "elf", "macros": ["CMSDK_CM3DS"], - "device_has": ["ANALOGIN", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SPI", "TRNG"], + "device_has": ["ANALOGIN", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SPI", "TRNG", "FLASH"], "release_versions": ["2", "5"], "copy_method": "mps2", "reset_method": "reboot.txt" From 3489934de21065990e927f2cb40799414a772b33 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Mon, 9 Jul 2018 10:31:11 -0500 Subject: [PATCH 076/113] Partial revert of "CMSIS/RTX: Adapt Mbed OS to CMSIS/RTX device support scheme" --- tools/profiles/debug.json | 10 +++++----- tools/profiles/develop.json | 10 +++++----- tools/profiles/release.json | 10 +++++----- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/tools/profiles/debug.json b/tools/profiles/debug.json index 18006169677..11799e1f817 100644 --- a/tools/profiles/debug.json +++ b/tools/profiles/debug.json @@ -6,7 +6,7 @@ "-ffunction-sections", "-fdata-sections", "-funsigned-char", "-MMD", "-fno-delete-null-pointer-checks", "-fomit-frame-pointer", "-O0", "-g3", "-DMBED_DEBUG", - "-DMBED_TRAP_ERRORS_ENABLED=1", "-D_RTE_"], + "-DMBED_TRAP_ERRORS_ENABLED=1"], "asm": ["-x", "assembler-with-cpp"], "c": ["-std=gnu99"], "cxx": ["-std=gnu++98", "-fno-rtti", "-Wvla"], @@ -19,7 +19,7 @@ "common": ["-c", "--target=arm-arm-none-eabi", "-mthumb", "-g", "-O0", "-Wno-armcc-pragma-push-pop", "-Wno-armcc-pragma-anon-unions", "-DMULADDC_CANNOT_USE_R7", "-fdata-sections", - "-fno-exceptions", "-MMD", "-D_LIBCPP_EXTERN_TEMPLATE(...)=", "-D_RTE_"], + "-fno-exceptions", "-MMD", "-D_LIBCPP_EXTERN_TEMPLATE(...)="], "asm": [], "c": ["-D__ASSERT_MSG", "-std=gnu99"], "cxx": ["-fno-rtti", "-std=gnu++98"], @@ -30,7 +30,7 @@ "common": ["-c", "--gnu", "-Otime", "--split_sections", "--apcs=interwork", "--brief_diagnostics", "--restrict", "--multibyte_chars", "-O0", "-g", "-DMBED_DEBUG", - "-DMBED_TRAP_ERRORS_ENABLED=1", "-D_RTE_"], + "-DMBED_TRAP_ERRORS_ENABLED=1"], "asm": [], "c": ["--md", "--no_depend_system_headers", "--c99", "-D__ASSERT_MSG"], "cxx": ["--cpp", "--no_rtti", "--no_vla"], @@ -41,7 +41,7 @@ "--apcs=interwork", "--brief_diagnostics", "--restrict", "--multibyte_chars", "-O0", "-D__MICROLIB", "-g", "--library_type=microlib", "-DMBED_RTOS_SINGLE_THREAD", "-DMBED_DEBUG", - "-DMBED_TRAP_ERRORS_ENABLED=1", "-D_RTE_"], + "-DMBED_TRAP_ERRORS_ENABLED=1"], "asm": [], "c": ["--md", "--no_depend_system_headers", "--c99", "-D__ASSERT_MSG"], "cxx": ["--cpp", "--no_rtti", "--no_vla"], @@ -51,7 +51,7 @@ "common": [ "--no_wrap_diagnostics", "-e", "--diag_suppress=Pa050,Pa084,Pa093,Pa082", "-On", "-r", "-DMBED_DEBUG", - "-DMBED_TRAP_ERRORS_ENABLED=1", "--enable_restrict", "-D_RTE_"], + "-DMBED_TRAP_ERRORS_ENABLED=1", "--enable_restrict"], "asm": [], "c": ["--vla", "--diag_suppress=Pe546"], "cxx": ["--guard_calls", "--no_static_destruction"], diff --git a/tools/profiles/develop.json b/tools/profiles/develop.json index ed325060183..d791f55d154 100644 --- a/tools/profiles/develop.json +++ b/tools/profiles/develop.json @@ -5,7 +5,7 @@ "-fmessage-length=0", "-fno-exceptions", "-fno-builtin", "-ffunction-sections", "-fdata-sections", "-funsigned-char", "-MMD", "-fno-delete-null-pointer-checks", - "-fomit-frame-pointer", "-Os", "-g1", "-D_RTE_"], + "-fomit-frame-pointer", "-Os", "-g1"], "asm": ["-x", "assembler-with-cpp"], "c": ["-std=gnu99"], "cxx": ["-std=gnu++98", "-fno-rtti", "-Wvla"], @@ -18,7 +18,7 @@ "common": ["-c", "--target=arm-arm-none-eabi", "-mthumb", "-Os", "-Wno-armcc-pragma-push-pop", "-Wno-armcc-pragma-anon-unions", "-DMULADDC_CANNOT_USE_R7", "-fdata-sections", - "-fno-exceptions", "-MMD", "-D_LIBCPP_EXTERN_TEMPLATE(...)=", "-D_RTE_"], + "-fno-exceptions", "-MMD", "-D_LIBCPP_EXTERN_TEMPLATE(...)="], "asm": [], "c": ["-D__ASSERT_MSG", "-std=gnu99"], "cxx": ["-fno-rtti", "-std=gnu++98"], @@ -27,7 +27,7 @@ "ARM": { "common": ["-c", "--gnu", "-Otime", "--split_sections", "--apcs=interwork", "--brief_diagnostics", "--restrict", - "--multibyte_chars", "-O3", "-D_RTE_"], + "--multibyte_chars", "-O3"], "asm": [], "c": ["--md", "--no_depend_system_headers", "--c99", "-D__ASSERT_MSG"], "cxx": ["--cpp", "--no_rtti", "--no_vla"], @@ -37,7 +37,7 @@ "common": ["-c", "--gnu", "-Otime", "--split_sections", "--apcs=interwork", "--brief_diagnostics", "--restrict", "--multibyte_chars", "-O3", "-D__MICROLIB", - "--library_type=microlib", "-DMBED_RTOS_SINGLE_THREAD", "-D_RTE_"], + "--library_type=microlib", "-DMBED_RTOS_SINGLE_THREAD"], "asm": [], "c": ["--md", "--no_depend_system_headers", "--c99", "-D__ASSERT_MSG"], "cxx": ["--cpp", "--no_rtti", "--no_vla"], @@ -46,7 +46,7 @@ "IAR": { "common": [ "--no_wrap_diagnostics", "-e", - "--diag_suppress=Pa050,Pa084,Pa093,Pa082", "-Oh", "--enable_restrict", "-D_RTE_"], + "--diag_suppress=Pa050,Pa084,Pa093,Pa082", "-Oh", "--enable_restrict"], "asm": [], "c": ["--vla", "--diag_suppress=Pe546"], "cxx": ["--guard_calls", "--no_static_destruction"], diff --git a/tools/profiles/release.json b/tools/profiles/release.json index 4fe6f8cd6b8..75186d08f1a 100644 --- a/tools/profiles/release.json +++ b/tools/profiles/release.json @@ -5,7 +5,7 @@ "-fmessage-length=0", "-fno-exceptions", "-fno-builtin", "-ffunction-sections", "-fdata-sections", "-funsigned-char", "-MMD", "-fno-delete-null-pointer-checks", - "-fomit-frame-pointer", "-Os", "-DNDEBUG", "-g1", "-D_RTE_"], + "-fomit-frame-pointer", "-Os", "-DNDEBUG", "-g1"], "asm": ["-x", "assembler-with-cpp"], "c": ["-std=gnu99"], "cxx": ["-std=gnu++98", "-fno-rtti", "-Wvla"], @@ -18,7 +18,7 @@ "common": ["-c", "--target=arm-arm-none-eabi", "-mthumb", "-Oz", "-Wno-armcc-pragma-push-pop", "-Wno-armcc-pragma-anon-unions", "-DMULADDC_CANNOT_USE_R7", "-fdata-sections", - "-fno-exceptions", "-MMD", "-D_LIBCPP_EXTERN_TEMPLATE(...)=", "-D_RTE_"], + "-fno-exceptions", "-MMD", "-D_LIBCPP_EXTERN_TEMPLATE(...)="], "asm": [], "c": ["-D__ASSERT_MSG", "-std=gnu99"], "cxx": ["-fno-rtti", "-std=gnu++98"], @@ -28,7 +28,7 @@ "ARM": { "common": ["-c", "--gnu", "-Ospace", "--split_sections", "--apcs=interwork", "--brief_diagnostics", "--restrict", - "--multibyte_chars", "-O3", "-DNDEBUG", "-D_RTE_"], + "--multibyte_chars", "-O3", "-DNDEBUG"], "asm": [], "c": ["--md", "--no_depend_system_headers", "--c99", "-D__ASSERT_MSG"], "cxx": ["--cpp", "--no_rtti", "--no_vla"], @@ -38,7 +38,7 @@ "common": ["-c", "--gnu", "-Ospace", "--split_sections", "--apcs=interwork", "--brief_diagnostics", "--restrict", "--multibyte_chars", "-O3", "-D__MICROLIB", - "--library_type=microlib", "-DMBED_RTOS_SINGLE_THREAD", "-DNDEBUG", "-D_RTE_"], + "--library_type=microlib", "-DMBED_RTOS_SINGLE_THREAD", "-DNDEBUG"], "asm": [], "c": ["--md", "--no_depend_system_headers", "--c99", "-D__ASSERT_MSG"], "cxx": ["--cpp", "--no_rtti", "--no_vla"], @@ -47,7 +47,7 @@ "IAR": { "common": [ "--no_wrap_diagnostics", "-e", - "--diag_suppress=Pa050,Pa084,Pa093,Pa082", "-Ohz", "-DNDEBUG", "--enable_restrict", "-D_RTE_"], + "--diag_suppress=Pa050,Pa084,Pa093,Pa082", "-Ohz", "-DNDEBUG", "--enable_restrict"], "asm": [], "c": ["--vla", "--diag_suppress=Pe546"], "cxx": ["--guard_calls", "--no_static_destruction"], From a084a884f7907ccac3be00d8818e67e0cdda6d1d Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Mon, 9 Jul 2018 10:36:39 -0500 Subject: [PATCH 077/113] Add _RTX_ define where it's needed and used --- rtos/mbed_lib.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rtos/mbed_lib.json b/rtos/mbed_lib.json index c0d9e20bdc8..f0a46677596 100644 --- a/rtos/mbed_lib.json +++ b/rtos/mbed_lib.json @@ -2,5 +2,6 @@ "name": "rtos", "config": { "present": 1 - } + }, + "macros": ["_RTE_"] } From 24d55f57884c5a6718c2c465d9e9d66253f7c2bf Mon Sep 17 00:00:00 2001 From: bcostm Date: Wed, 20 Jun 2018 13:40:28 +0200 Subject: [PATCH 078/113] stm32 ticker: rename files and move functions - rename hal_tick_common.c in hal_tick_overrides.c - move 16 and 32bits timer functions in us_ticker.c --- targets/TARGET_STM/hal_tick_16b.c | 120 ------------ targets/TARGET_STM/hal_tick_32b.c | 107 ----------- ...hal_tick_common.c => hal_tick_overrides.c} | 0 targets/TARGET_STM/us_ticker.c | 172 +++++++++++++++++- 4 files changed, 170 insertions(+), 229 deletions(-) delete mode 100644 targets/TARGET_STM/hal_tick_16b.c delete mode 100644 targets/TARGET_STM/hal_tick_32b.c rename targets/TARGET_STM/{hal_tick_common.c => hal_tick_overrides.c} (100%) diff --git a/targets/TARGET_STM/hal_tick_16b.c b/targets/TARGET_STM/hal_tick_16b.c deleted file mode 100644 index 8b0a5784314..00000000000 --- a/targets/TARGET_STM/hal_tick_16b.c +++ /dev/null @@ -1,120 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2016 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "hal_tick.h" - -// A 16-bit timer is used -#if TIM_MST_16BIT - -extern TIM_HandleTypeDef TimMasterHandle; -extern uint32_t prev_time; -extern uint32_t elapsed_time; - -volatile uint32_t PreviousVal = 0; - -void us_ticker_irq_handler(void); - -#if defined(TARGET_STM32F0) -void timer_update_irq_handler(void) -{ -#else -void timer_irq_handler(void) -{ -#endif - TimMasterHandle.Instance = TIM_MST; - -#if defined(TARGET_STM32F0) -} // end timer_update_irq_handler function - -// Channel 1 used for mbed timeout -void timer_oc_irq_handler(void) -{ - TimMasterHandle.Instance = TIM_MST; -#endif - - // Channel 1 for mbed timeout - if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) { - if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) { - __HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1); - us_ticker_irq_handler(); - } - } -} - -// Overwrite the default ST HAL function (defined as "weak") in order to configure an HW timer -// used for mbed timeouts only (not used for the Systick configuration). -// Additional notes: -// - The default ST HAL_InitTick function initializes the Systick to 1 ms and this is not correct for mbed -// as the mbed Systick as to be configured to 1 us instead. -// - Furthermore the Systick is configured by mbed RTOS directly. -HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) -{ - // Enable timer clock - TIM_MST_RCC; - - // Reset timer - TIM_MST_RESET_ON; - TIM_MST_RESET_OFF; - - // Update the SystemCoreClock variable - SystemCoreClockUpdate(); - - // Configure time base - TimMasterHandle.Instance = TIM_MST; - TimMasterHandle.Init.Period = 0xFFFF; - TimMasterHandle.Init.Prescaler = (uint32_t)(SystemCoreClock / 1000000) - 1; // 1 us tick - TimMasterHandle.Init.ClockDivision = 0; - TimMasterHandle.Init.CounterMode = TIM_COUNTERMODE_UP; -#if !defined(TARGET_STM32L0) && !defined(TARGET_STM32L1) - TimMasterHandle.Init.RepetitionCounter = 0; -#endif -#ifdef TIM_AUTORELOAD_PRELOAD_DISABLE - TimMasterHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; -#endif - HAL_TIM_Base_Init(&TimMasterHandle); - - // Configure output compare channel 1 for mbed timeout (enabled later when used) - HAL_TIM_OC_Start(&TimMasterHandle, TIM_CHANNEL_1); - - // Output compare channel 1 interrupt for mbed timeout -#if defined(TARGET_STM32F0) - NVIC_SetVector(TIM_MST_UP_IRQ, (uint32_t)timer_update_irq_handler); - NVIC_EnableIRQ(TIM_MST_UP_IRQ); - NVIC_SetPriority(TIM_MST_UP_IRQ, 0); - NVIC_SetVector(TIM_MST_OC_IRQ, (uint32_t)timer_oc_irq_handler); - NVIC_EnableIRQ(TIM_MST_OC_IRQ); - NVIC_SetPriority(TIM_MST_OC_IRQ, 1); -#else - NVIC_SetVector(TIM_MST_IRQ, (uint32_t)timer_irq_handler); - NVIC_EnableIRQ(TIM_MST_IRQ); -#endif - - // Enable timer - HAL_TIM_Base_Start(&TimMasterHandle); - - // Freeze timer on stop/breakpoint - // Define the FREEZE_TIMER_ON_DEBUG macro in mbed_app.json for example -#if !defined(NDEBUG) && defined(FREEZE_TIMER_ON_DEBUG) && defined(TIM_MST_DBGMCU_FREEZE) - TIM_MST_DBGMCU_FREEZE; -#endif - - // Used by HAL_GetTick() - prev_time = 0; - elapsed_time = 0; - - return HAL_OK; -} - -#endif // TIM_MST_16BIT diff --git a/targets/TARGET_STM/hal_tick_32b.c b/targets/TARGET_STM/hal_tick_32b.c deleted file mode 100644 index d056268c2e9..00000000000 --- a/targets/TARGET_STM/hal_tick_32b.c +++ /dev/null @@ -1,107 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2016 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "hal_tick.h" - -// A 32-bit timer is used -#if !TIM_MST_16BIT - -extern TIM_HandleTypeDef TimMasterHandle; - -volatile uint32_t PreviousVal = 0; - -void us_ticker_irq_handler(void); - -void timer_irq_handler(void) -{ - // Channel 1 for mbed timeout - if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) { - if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) { - __HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1); - us_ticker_irq_handler(); - } - } -} - -// Overwrite the default ST HAL function (defined as "weak") in order to configure an HW timer -// used for mbed timeouts only (not used for the Systick configuration). -// Additional notes: -// - The default ST HAL_InitTick function initializes the Systick to 1 ms and this is not correct for mbed -// as the mbed Systick as to be configured to 1 us instead. -// - Furthermore the Systick is configured by mbed RTOS directly. -HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) -{ - RCC_ClkInitTypeDef RCC_ClkInitStruct; - uint32_t PclkFreq; - - // Get clock configuration - // Note: PclkFreq contains here the Latency (not used after) - HAL_RCC_GetClockConfig(&RCC_ClkInitStruct, &PclkFreq); - - // Get timer clock value -#if TIM_MST_PCLK == 1 - PclkFreq = HAL_RCC_GetPCLK1Freq(); -#else - PclkFreq = HAL_RCC_GetPCLK2Freq(); -#endif - - // Enable timer clock - TIM_MST_RCC; - - // Reset timer - TIM_MST_RESET_ON; - TIM_MST_RESET_OFF; - - // Configure time base - TimMasterHandle.Instance = TIM_MST; - TimMasterHandle.Init.Period = 0xFFFFFFFF; - - // TIMxCLK = PCLKx when the APB prescaler = 1 else TIMxCLK = 2 * PCLKx -#if TIM_MST_PCLK == 1 - if (RCC_ClkInitStruct.APB1CLKDivider == RCC_HCLK_DIV1) { -#else - if (RCC_ClkInitStruct.APB2CLKDivider == RCC_HCLK_DIV1) { -#endif - TimMasterHandle.Init.Prescaler = (uint16_t)((PclkFreq) / 1000000) - 1; // 1 us tick - } else { - TimMasterHandle.Init.Prescaler = (uint16_t)((PclkFreq * 2) / 1000000) - 1; // 1 us tick - } - - TimMasterHandle.Init.ClockDivision = 0; - TimMasterHandle.Init.CounterMode = TIM_COUNTERMODE_UP; -#if !TARGET_STM32L1 - TimMasterHandle.Init.RepetitionCounter = 0; -#endif -#ifdef TIM_AUTORELOAD_PRELOAD_DISABLE - TimMasterHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; -#endif - HAL_TIM_OC_Init(&TimMasterHandle); - - NVIC_SetVector(TIM_MST_IRQ, (uint32_t)timer_irq_handler); - NVIC_EnableIRQ(TIM_MST_IRQ); - - // Channel 1 for mbed timeout - HAL_TIM_OC_Start(&TimMasterHandle, TIM_CHANNEL_1); - - // Freeze timer on stop/breakpoint - // Define the FREEZE_TIMER_ON_DEBUG macro in mbed_app.json for example -#if !defined(NDEBUG) && defined(FREEZE_TIMER_ON_DEBUG) && defined(TIM_MST_DBGMCU_FREEZE) - TIM_MST_DBGMCU_FREEZE; -#endif - - return HAL_OK; -} - -#endif // !TIM_MST_16BIT diff --git a/targets/TARGET_STM/hal_tick_common.c b/targets/TARGET_STM/hal_tick_overrides.c similarity index 100% rename from targets/TARGET_STM/hal_tick_common.c rename to targets/TARGET_STM/hal_tick_overrides.c diff --git a/targets/TARGET_STM/us_ticker.c b/targets/TARGET_STM/us_ticker.c index ff1e777a8b2..c31f4ea501a 100644 --- a/targets/TARGET_STM/us_ticker.c +++ b/targets/TARGET_STM/us_ticker.c @@ -18,8 +18,10 @@ #include "PeripheralNames.h" #include "hal_tick.h" +// ************************************ 16-bit timer ************************************ #if TIM_MST_16BIT #define TIMER_TICKER_BIT_WIDTH 16 +// ************************************ 32-bit timer ************************************ #else #define TIMER_TICKER_BIT_WIDTH 32 #endif @@ -35,10 +37,176 @@ const ticker_info_t *us_ticker_get_info() return &info; } +volatile uint32_t PreviousVal = 0; + +void us_ticker_irq_handler(void); + +// ************************************ 16-bit timer ************************************ +#if TIM_MST_16BIT + +#if defined(TARGET_STM32F0) +void timer_update_irq_handler(void) { +#else +void timer_irq_handler(void) +{ +#endif + TimMasterHandle.Instance = TIM_MST; + +#if defined(TARGET_STM32F0) +} // end timer_update_irq_handler function + +// Channel 1 used for mbed timeout +void timer_oc_irq_handler(void) +{ + TimMasterHandle.Instance = TIM_MST; +#endif + + // Channel 1 for mbed timeout + if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) { + if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) { + __HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1); + us_ticker_irq_handler(); + } + } +} + +// ************************************ 32-bit timer ************************************ +#else + +void timer_irq_handler(void) +{ + // Channel 1 for mbed timeout + if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) { + if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) { + __HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1); + us_ticker_irq_handler(); + } + } +} + +#endif // 16-bit/32-bit timer + void us_ticker_init(void) { - /* NOTE: assuming that HAL tick has already been initialized! */ + +// ************************************ 16-bit timer ************************************ +#if TIM_MST_16BIT + // Enable timer clock + TIM_MST_RCC; + + // Reset timer + TIM_MST_RESET_ON; + TIM_MST_RESET_OFF; + + // Update the SystemCoreClock variable + SystemCoreClockUpdate(); + + // Configure time base + TimMasterHandle.Instance = TIM_MST; + TimMasterHandle.Init.Period = 0xFFFF; + TimMasterHandle.Init.Prescaler = (uint32_t)(SystemCoreClock / 1000000) - 1; // 1 us tick + TimMasterHandle.Init.ClockDivision = 0; + TimMasterHandle.Init.CounterMode = TIM_COUNTERMODE_UP; +#if !defined(TARGET_STM32L0) && !defined(TARGET_STM32L1) + TimMasterHandle.Init.RepetitionCounter = 0; +#endif +#ifdef TIM_AUTORELOAD_PRELOAD_DISABLE + TimMasterHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; +#endif + HAL_TIM_Base_Init(&TimMasterHandle); + + // Configure output compare channel 1 for mbed timeout (enabled later when used) + HAL_TIM_OC_Start(&TimMasterHandle, TIM_CHANNEL_1); + + // Output compare channel 1 interrupt for mbed timeout +#if defined(TARGET_STM32F0) + NVIC_SetVector(TIM_MST_UP_IRQ, (uint32_t)timer_update_irq_handler); + NVIC_EnableIRQ(TIM_MST_UP_IRQ); + NVIC_SetPriority(TIM_MST_UP_IRQ, 0); + NVIC_SetVector(TIM_MST_OC_IRQ, (uint32_t)timer_oc_irq_handler); + NVIC_EnableIRQ(TIM_MST_OC_IRQ); + NVIC_SetPriority(TIM_MST_OC_IRQ, 1); +#else + NVIC_SetVector(TIM_MST_IRQ, (uint32_t)timer_irq_handler); + NVIC_EnableIRQ(TIM_MST_IRQ); +#endif + + // Enable timer + HAL_TIM_Base_Start(&TimMasterHandle); + + // Freeze timer on stop/breakpoint + // Define the FREEZE_TIMER_ON_DEBUG macro in mbed_app.json for example +#if !defined(NDEBUG) && defined(FREEZE_TIMER_ON_DEBUG) && defined(TIM_MST_DBGMCU_FREEZE) + TIM_MST_DBGMCU_FREEZE; +#endif + + __HAL_TIM_DISABLE_IT(&TimMasterHandle, TIM_IT_CC1); + +// ************************************ 32-bit timer ************************************ +#else + + RCC_ClkInitTypeDef RCC_ClkInitStruct; + uint32_t PclkFreq; + + // Get clock configuration + // Note: PclkFreq contains here the Latency (not used after) + HAL_RCC_GetClockConfig(&RCC_ClkInitStruct, &PclkFreq); + + // Get timer clock value +#if TIM_MST_PCLK == 1 + PclkFreq = HAL_RCC_GetPCLK1Freq(); +#else + PclkFreq = HAL_RCC_GetPCLK2Freq(); +#endif + + // Enable timer clock + TIM_MST_RCC; + + // Reset timer + TIM_MST_RESET_ON; + TIM_MST_RESET_OFF; + + // Configure time base + TimMasterHandle.Instance = TIM_MST; + TimMasterHandle.Init.Period = 0xFFFFFFFF; + + // TIMxCLK = PCLKx when the APB prescaler = 1 else TIMxCLK = 2 * PCLKx +#if TIM_MST_PCLK == 1 + if (RCC_ClkInitStruct.APB1CLKDivider == RCC_HCLK_DIV1) { +#else + if (RCC_ClkInitStruct.APB2CLKDivider == RCC_HCLK_DIV1) { +#endif + TimMasterHandle.Init.Prescaler = (uint16_t)((PclkFreq) / 1000000) - 1; // 1 us tick + } else { + TimMasterHandle.Init.Prescaler = (uint16_t)((PclkFreq * 2) / 1000000) - 1; // 1 us tick + } + + TimMasterHandle.Init.ClockDivision = 0; + TimMasterHandle.Init.CounterMode = TIM_COUNTERMODE_UP; +#if !TARGET_STM32L1 + TimMasterHandle.Init.RepetitionCounter = 0; +#endif +#ifdef TIM_AUTORELOAD_PRELOAD_DISABLE + TimMasterHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; +#endif + HAL_TIM_OC_Init(&TimMasterHandle); + + NVIC_SetVector(TIM_MST_IRQ, (uint32_t)timer_irq_handler); + NVIC_EnableIRQ(TIM_MST_IRQ); + + // Channel 1 for mbed timeout + HAL_TIM_OC_Start(&TimMasterHandle, TIM_CHANNEL_1); + + // Freeze timer on stop/breakpoint + // Define the FREEZE_TIMER_ON_DEBUG macro in mbed_app.json for example +#if !defined(NDEBUG) && defined(FREEZE_TIMER_ON_DEBUG) && defined(TIM_MST_DBGMCU_FREEZE) + TIM_MST_DBGMCU_FREEZE; +#endif + __HAL_TIM_DISABLE_IT(&TimMasterHandle, TIM_IT_CC1); + +#endif // 16-bit/32-bit timer + } uint32_t us_ticker_read() @@ -94,4 +262,4 @@ void restore_timer_ctx(void) __HAL_TIM_SET_COUNTER(&TimMasterHandle, timer_cnt_reg); __HAL_TIM_SET_COMPARE(&TimMasterHandle, TIM_CHANNEL_1, timer_ccr1_reg); TIM_MST->DIER = timer_dier_reg; -} +} \ No newline at end of file From d0592eef87b70c7a8677763e485a929129a78866 Mon Sep 17 00:00:00 2001 From: bcostm Date: Wed, 20 Jun 2018 14:50:20 +0200 Subject: [PATCH 079/113] stm32 ticker: rename macro and update ST HAL Tick functions - rename TIM_MST_16BIT in TIM_MST_BIT_WIDTH in order to use it directly in ticker info structure - change HAL_InitTick() and HAL_GetTick() --- .../TARGET_DISCO_F051R8/device/hal_tick.h | 2 +- .../TARGET_NUCLEO_F030R8/device/hal_tick.h | 2 +- .../TARGET_NUCLEO_F031K6/device/hal_tick.h | 2 +- .../TARGET_NUCLEO_F042K6/device/hal_tick.h | 2 +- .../TARGET_NUCLEO_F070RB/device/hal_tick.h | 2 +- .../TARGET_NUCLEO_F072RB/device/hal_tick.h | 2 +- .../TARGET_NUCLEO_F091RC/device/hal_tick.h | 2 +- .../TARGET_BLUEPILL_F103C8/device/hal_tick.h | 2 +- .../TARGET_DISCO_F100RB/device/hal_tick.h | 2 +- .../TARGET_NUCLEO_F103RB/device/hal_tick.h | 2 +- .../TARGET_NUCLEO_F207ZG/device/hal_tick.h | 2 +- .../TARGET_STM32F302x8/device/hal_tick.h | 2 +- .../TARGET_STM32F303x8/device/hal_tick.h | 2 +- .../TARGET_STM32F303xC/device/hal_tick.h | 2 +- .../TARGET_STM32F303xE/device/hal_tick.h | 2 +- .../TARGET_STM32F334x8/device/hal_tick.h | 2 +- .../device/hal_tick.h | 2 +- .../device/hal_tick.h | 2 +- .../TARGET_MTS_MDOT_F405RG/device/hal_tick.h | 2 +- .../TARGET_MTS_MDOT_F411RE/device/hal_tick.h | 2 +- .../TARGET_STM32F401xC/device/hal_tick.h | 2 +- .../TARGET_STM32F401xE/device/hal_tick.h | 2 +- .../TARGET_STM32F407xG/device/hal_tick.h | 2 +- .../TARGET_STM32F410xB/device/hal_tick.h | 2 +- .../TARGET_STM32F411xE/device/hal_tick.h | 2 +- .../TARGET_STM32F412xG/device/hal_tick.h | 2 +- .../TARGET_STM32F413xH/device/hal_tick.h | 2 +- .../TARGET_STM32F429xI/device/hal_tick.h | 2 +- .../TARGET_STM32F437xG/device/hal_tick.h | 2 +- .../TARGET_STM32F439xI/device/hal_tick.h | 2 +- .../TARGET_STM32F446xE/device/hal_tick.h | 2 +- .../TARGET_STM32F469xI/device/hal_tick.h | 2 +- .../TARGET_STM32F746xG/device/hal_tick.h | 2 +- .../TARGET_STM32F756xG/device/hal_tick.h | 2 +- .../TARGET_STM32F767xI/device/hal_tick.h | 2 +- .../TARGET_STM32F769xI/device/hal_tick.h | 2 +- .../TARGET_NUCLEO_L011K4/device/hal_tick.h | 2 +- .../TARGET_NUCLEO_L031K6/device/hal_tick.h | 2 +- .../TARGET_NUCLEO_L073RZ/device/hal_tick.h | 2 +- .../TARGET_STM32L053x8/device/hal_tick.h | 2 +- .../TARGET_STM32L072xZ/device/hal_tick.h | 2 +- .../TARGET_STM32L0x2xZ/device/hal_tick.h | 2 +- .../TARGET_MOTE_L152RC/device/hal_tick.h | 2 +- .../TARGET_MTB_MTS_XDOT/device/hal_tick.h | 2 +- .../TARGET_MTB_RAK811/device/hal_tick.h | 2 +- .../TARGET_NUCLEO_L152RE/device/hal_tick.h | 2 +- .../TARGET_NZ32_SC151/device/hal_tick.h | 2 +- .../TARGET_XDOT_L151CC/device/hal_tick.h | 2 +- .../TARGET_STM32L432xC/device/hal_tick.h | 2 +- .../TARGET_STM32L433xC/device/hal_tick.h | 2 +- .../TARGET_STM32L443xC/device/hal_tick.h | 2 +- .../TARGET_STM32L475xG/device/hal_tick.h | 2 +- .../TARGET_STM32L476xG/device/hal_tick.h | 2 +- .../TARGET_STM32L486xG/device/hal_tick.h | 2 +- .../TARGET_STM32L496xG/device/hal_tick.h | 2 +- targets/TARGET_STM/hal_tick_overrides.c | 39 +++---------------- targets/TARGET_STM/us_ticker.c | 28 ++++--------- 57 files changed, 68 insertions(+), 109 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/device/hal_tick.h index 06a4fce8ecd..1e23fdddbcb 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/device/hal_tick.h @@ -52,7 +52,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM1_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM1_RELEASE_RESET() -#define TIM_MST_16BIT 1 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 16 // 16 or 32 #define TIM_MST_PCLK 2 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/device/hal_tick.h index 06a4fce8ecd..1e23fdddbcb 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/device/hal_tick.h @@ -52,7 +52,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM1_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM1_RELEASE_RESET() -#define TIM_MST_16BIT 1 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 16 // 16 or 32 #define TIM_MST_PCLK 2 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/device/hal_tick.h index a140fe2cdd1..b438dc1a826 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/device/hal_tick.h @@ -51,7 +51,7 @@ extern "C" { #define TIM_MST_RESET_ON __HAL_RCC_TIM2_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM2_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/device/hal_tick.h index 7e0ce365fda..b24bd114013 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/device/hal_tick.h @@ -51,7 +51,7 @@ extern "C" { #define TIM_MST_RESET_ON __HAL_RCC_TIM2_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM2_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/hal_tick.h index 06a4fce8ecd..1e23fdddbcb 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/hal_tick.h @@ -52,7 +52,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM1_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM1_RELEASE_RESET() -#define TIM_MST_16BIT 1 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 16 // 16 or 32 #define TIM_MST_PCLK 2 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/device/hal_tick.h index bc4d8b732fc..e056e9141a0 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM2_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM2_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device/hal_tick.h index bc4d8b732fc..e056e9141a0 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM2_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM2_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/device/hal_tick.h index 572b63e8126..52376e86bdd 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM4_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM4_RELEASE_RESET() -#define TIM_MST_16BIT 1 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 16 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/device/hal_tick.h index 572b63e8126..52376e86bdd 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM4_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM4_RELEASE_RESET() -#define TIM_MST_16BIT 1 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 16 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/hal_tick.h index 572b63e8126..52376e86bdd 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM4_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM4_RELEASE_RESET() -#define TIM_MST_16BIT 1 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 16 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/hal_tick.h index d6aefa0d666..fa7d9f9f0e1 100644 --- a/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/hal_tick.h @@ -51,7 +51,7 @@ extern "C" { #define TIM_MST_RESET_ON __TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/device/hal_tick.h index f3771b2820a..962bc2e017f 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM2_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM2_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/device/hal_tick.h index f3771b2820a..962bc2e017f 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM2_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM2_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/device/hal_tick.h index f3771b2820a..962bc2e017f 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM2_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM2_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/device/hal_tick.h index f3771b2820a..962bc2e017f 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM2_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM2_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/device/hal_tick.h index f3771b2820a..962bc2e017f 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM2_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM2_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/hal_tick.h index 93306fe86b9..aeb3b483f43 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/device/hal_tick.h index 93306fe86b9..aeb3b483f43 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/device/hal_tick.h index 93306fe86b9..aeb3b483f43 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/device/hal_tick.h index 93306fe86b9..aeb3b483f43 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/device/hal_tick.h index 93306fe86b9..aeb3b483f43 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/hal_tick.h index 93306fe86b9..aeb3b483f43 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/hal_tick.h index 93306fe86b9..aeb3b483f43 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/device/hal_tick.h index 93306fe86b9..aeb3b483f43 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/device/hal_tick.h index 93306fe86b9..aeb3b483f43 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/device/hal_tick.h index 93306fe86b9..aeb3b483f43 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/device/hal_tick.h index a76334d826c..04bbeb200e6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/hal_tick.h index 93306fe86b9..aeb3b483f43 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/device/hal_tick.h index 93306fe86b9..aeb3b483f43 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/hal_tick.h index 93306fe86b9..aeb3b483f43 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/device/hal_tick.h index 22209f948ac..915ba244af2 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/device/hal_tick.h index d63594eb82e..b06c66b56a8 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM2_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM2_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/hal_tick.h index b7eb8382ef7..9c3587becdf 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/device/hal_tick.h index b7eb8382ef7..9c3587becdf 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/hal_tick.h index b7eb8382ef7..9c3587becdf 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/device/hal_tick.h index b7eb8382ef7..9c3587becdf 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/device/hal_tick.h index 9de683c3bd5..1cadfffcce9 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __TIM21_FORCE_RESET() #define TIM_MST_RESET_OFF __TIM21_RELEASE_RESET() -#define TIM_MST_16BIT 1 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 16 // 16 or 32 #define TIM_MST_PCLK 2 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/device/hal_tick.h index 9de683c3bd5..1cadfffcce9 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __TIM21_FORCE_RESET() #define TIM_MST_RESET_OFF __TIM21_RELEASE_RESET() -#define TIM_MST_16BIT 1 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 16 // 16 or 32 #define TIM_MST_PCLK 2 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/device/hal_tick.h index 9de683c3bd5..1cadfffcce9 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __TIM21_FORCE_RESET() #define TIM_MST_RESET_OFF __TIM21_RELEASE_RESET() -#define TIM_MST_16BIT 1 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 16 // 16 or 32 #define TIM_MST_PCLK 2 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/device/hal_tick.h index 9de683c3bd5..1cadfffcce9 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __TIM21_FORCE_RESET() #define TIM_MST_RESET_OFF __TIM21_RELEASE_RESET() -#define TIM_MST_16BIT 1 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 16 // 16 or 32 #define TIM_MST_PCLK 2 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L072xZ/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L072xZ/device/hal_tick.h index cce8982ac7e..9fe3ef0d2f7 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L072xZ/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L072xZ/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __TIM21_FORCE_RESET() #define TIM_MST_RESET_OFF __TIM21_RELEASE_RESET() -#define TIM_MST_16BIT 1 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 16 // 16 or 32 #define TIM_MST_PCLK 2 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L0x2xZ/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L0x2xZ/device/hal_tick.h index 9de683c3bd5..1cadfffcce9 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L0x2xZ/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L0x2xZ/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __TIM21_FORCE_RESET() #define TIM_MST_RESET_OFF __TIM21_RELEASE_RESET() -#define TIM_MST_16BIT 1 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 16 // 16 or 32 #define TIM_MST_PCLK 2 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/device/hal_tick.h index a060c43f5e3..a1a4de41c14 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_MTS_XDOT/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_MTS_XDOT/device/hal_tick.h index 39b37212f21..a2cc1672b0d 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_MTS_XDOT/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_MTS_XDOT/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_RAK811/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_RAK811/device/hal_tick.h index 4f915df8dff..0e870cc9448 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_RAK811/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_RAK811/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __TIM4_FORCE_RESET() #define TIM_MST_RESET_OFF __TIM4_RELEASE_RESET() -#define TIM_MST_16BIT 1 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 16 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/device/hal_tick.h index a060c43f5e3..a1a4de41c14 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/device/hal_tick.h index 39b37212f21..a2cc1672b0d 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/device/hal_tick.h index 39b37212f21..a2cc1672b0d 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/hal_tick.h index 9fcdd8db16e..d7b053cbdde 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM2_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM2_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/hal_tick.h index 9fcdd8db16e..d7b053cbdde 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM2_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM2_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L443xC/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L443xC/device/hal_tick.h index 9fcdd8db16e..d7b053cbdde 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L443xC/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L443xC/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM2_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM2_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/hal_tick.h index a63c215500a..928a6bd30b4 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/hal_tick.h index bf6dab14404..6a4876fce97 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/hal_tick.h index bf6dab14404..6a4876fce97 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/hal_tick.h @@ -51,7 +51,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/hal_tick.h index 1e6dfe339a8..64ee6624619 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/hal_tick.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/hal_tick.h @@ -50,7 +50,7 @@ #define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() #define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() -#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer +#define TIM_MST_BIT_WIDTH 32 // 16 or 32 #define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) diff --git a/targets/TARGET_STM/hal_tick_overrides.c b/targets/TARGET_STM/hal_tick_overrides.c index 5c5a85ea940..21565980792 100644 --- a/targets/TARGET_STM/hal_tick_overrides.c +++ b/targets/TARGET_STM/hal_tick_overrides.c @@ -14,45 +14,18 @@ * limitations under the License. */ #include "hal/us_ticker_api.h" -#include "hal_tick.h" // Overwrite default HAL functions defined as "weak" -// This variable is set to 1 at the of mbed_sdk_init function. -// The ticker_read_us function must not be called until the mbed_sdk_init is terminated. -extern int mbed_sdk_inited; - -#if TIM_MST_16BIT -// Variables also reset in HAL_InitTick() -uint32_t prev_time = 0; -uint32_t elapsed_time = 0; -#endif +HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) +{ + us_ticker_init(); + return HAL_OK; +} -// 1 ms tick is required for ST HAL driver uint32_t HAL_GetTick() { -#if TIM_MST_16BIT - uint32_t new_time; - if (mbed_sdk_inited) { - // Apply the latest time recorded just before the sdk is inited - new_time = ticker_read_us(get_us_ticker_data()) + prev_time; - prev_time = 0; // Use this time only once - return (new_time / 1000); - } - else { - new_time = us_ticker_read(); - elapsed_time += (new_time - prev_time) & 0xFFFF; // Only use the lower 16 bits - prev_time = new_time; - return (elapsed_time / 1000); - } -#else // 32-bit timer - if (mbed_sdk_inited) { - return (ticker_read_us(get_us_ticker_data()) / 1000); - } - else { - return (us_ticker_read() / 1000); - } -#endif + return ticker_read_us(get_us_ticker_data()) / 1000; // 1 ms tick is required for ST HAL_Delay function } void HAL_SuspendTick(void) diff --git a/targets/TARGET_STM/us_ticker.c b/targets/TARGET_STM/us_ticker.c index c31f4ea501a..0e33256590e 100644 --- a/targets/TARGET_STM/us_ticker.c +++ b/targets/TARGET_STM/us_ticker.c @@ -18,34 +18,25 @@ #include "PeripheralNames.h" #include "hal_tick.h" -// ************************************ 16-bit timer ************************************ -#if TIM_MST_16BIT -#define TIMER_TICKER_BIT_WIDTH 16 -// ************************************ 32-bit timer ************************************ -#else -#define TIMER_TICKER_BIT_WIDTH 32 -#endif - TIM_HandleTypeDef TimMasterHandle; const ticker_info_t *us_ticker_get_info() { static const ticker_info_t info = { 1000000, - TIMER_TICKER_BIT_WIDTH + TIM_MST_BIT_WIDTH }; return &info; } -volatile uint32_t PreviousVal = 0; - void us_ticker_irq_handler(void); // ************************************ 16-bit timer ************************************ -#if TIM_MST_16BIT +#if TIM_MST_BIT_WIDTH == 16 #if defined(TARGET_STM32F0) -void timer_update_irq_handler(void) { +void timer_update_irq_handler(void) +{ #else void timer_irq_handler(void) { @@ -55,13 +46,10 @@ void timer_irq_handler(void) #if defined(TARGET_STM32F0) } // end timer_update_irq_handler function -// Channel 1 used for mbed timeout void timer_oc_irq_handler(void) { TimMasterHandle.Instance = TIM_MST; #endif - - // Channel 1 for mbed timeout if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) { if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) { __HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1); @@ -75,7 +63,7 @@ void timer_oc_irq_handler(void) void timer_irq_handler(void) { - // Channel 1 for mbed timeout + TimMasterHandle.Instance = TIM_MST; if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) { if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) { __HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1); @@ -90,7 +78,7 @@ void us_ticker_init(void) { // ************************************ 16-bit timer ************************************ -#if TIM_MST_16BIT +#if TIM_MST_BIT_WIDTH == 16 // Enable timer clock TIM_MST_RCC; @@ -102,7 +90,7 @@ void us_ticker_init(void) SystemCoreClockUpdate(); // Configure time base - TimMasterHandle.Instance = TIM_MST; + TimMasterHandle.Instance = TIM_MST; TimMasterHandle.Init.Period = 0xFFFF; TimMasterHandle.Init.Prescaler = (uint32_t)(SystemCoreClock / 1000000) - 1; // 1 us tick TimMasterHandle.Init.ClockDivision = 0; @@ -230,11 +218,9 @@ void us_ticker_fire_interrupt(void) { __HAL_TIM_CLEAR_FLAG(&TimMasterHandle, TIM_FLAG_CC1); LL_TIM_GenerateEvent_CC1(TimMasterHandle.Instance); - // Enable IT __HAL_TIM_ENABLE_IT(&TimMasterHandle, TIM_IT_CC1); } -/* NOTE: must be called with interrupts disabled! */ void us_ticker_disable_interrupt(void) { __HAL_TIM_DISABLE_IT(&TimMasterHandle, TIM_IT_CC1); From a43b8a8818d1881b06eb1034990d88d23bddbc7b Mon Sep 17 00:00:00 2001 From: bcostm Date: Wed, 20 Jun 2018 14:58:57 +0200 Subject: [PATCH 080/113] stm32 ticker: rename hal_tick.h in us_ticker_data.h --- .../TARGET_DISCO_F051R8/device/{hal_tick.h => us_ticker_data.h} | 0 .../device/{hal_tick.h => us_ticker_data.h} | 0 .../device/{hal_tick.h => us_ticker_data.h} | 0 .../device/{hal_tick.h => us_ticker_data.h} | 0 .../device/{hal_tick.h => us_ticker_data.h} | 0 .../device/{hal_tick.h => us_ticker_data.h} | 0 .../device/{hal_tick.h => us_ticker_data.h} | 0 .../device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_DISCO_F100RB/device/{hal_tick.h => us_ticker_data.h} | 0 .../device/{hal_tick.h => us_ticker_data.h} | 0 .../device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F302x8/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F303x8/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F303xC/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F303xE/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F334x8/device/{hal_tick.h => us_ticker_data.h} | 0 .../device/{hal_tick.h => us_ticker_data.h} | 0 .../device/{hal_tick.h => us_ticker_data.h} | 0 .../device/{hal_tick.h => us_ticker_data.h} | 0 .../device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F401xC/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F401xE/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F407xG/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F410xB/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F411xE/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F412xG/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F413xH/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F429xI/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F437xG/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F439xI/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F446xE/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F469xI/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F746xG/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F756xG/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F767xI/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32F769xI/device/{hal_tick.h => us_ticker_data.h} | 0 .../device/{hal_tick.h => us_ticker_data.h} | 0 .../device/{hal_tick.h => us_ticker_data.h} | 0 .../device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32L053x8/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32L072xZ/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32L0x2xZ/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_MOTE_L152RC/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_MTB_MTS_XDOT/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_MTB_RAK811/device/{hal_tick.h => us_ticker_data.h} | 0 .../device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_NZ32_SC151/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_XDOT_L151CC/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32L432xC/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32L433xC/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32L443xC/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32L475xG/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32L476xG/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32L486xG/device/{hal_tick.h => us_ticker_data.h} | 0 .../TARGET_STM32L496xG/device/{hal_tick.h => us_ticker_data.h} | 0 targets/TARGET_STM/sleep.c | 2 +- targets/TARGET_STM/us_ticker.c | 2 +- 57 files changed, 2 insertions(+), 2 deletions(-) rename targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L072xZ/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L0x2xZ/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_MTS_XDOT/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_RAK811/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L443xC/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/{hal_tick.h => us_ticker_data.h} (100%) rename targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/{hal_tick.h => us_ticker_data.h} (100%) diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L072xZ/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L072xZ/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L072xZ/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L072xZ/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L0x2xZ/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L0x2xZ/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L0x2xZ/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L0x2xZ/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_MTS_XDOT/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_MTS_XDOT/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_MTS_XDOT/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_MTS_XDOT/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_RAK811/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_RAK811/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_RAK811/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_RAK811/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L443xC/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L443xC/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L443xC/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L443xC/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/us_ticker_data.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/us_ticker_data.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/us_ticker_data.h diff --git a/targets/TARGET_STM/sleep.c b/targets/TARGET_STM/sleep.c index 168b9c70bc1..69c84dd042e 100644 --- a/targets/TARGET_STM/sleep.c +++ b/targets/TARGET_STM/sleep.c @@ -31,7 +31,7 @@ #include "sleep_api.h" #include "us_ticker_api.h" -#include "hal_tick.h" +#include "us_ticker_data.h" #include "mbed_critical.h" #include "mbed_error.h" diff --git a/targets/TARGET_STM/us_ticker.c b/targets/TARGET_STM/us_ticker.c index 0e33256590e..6f934e4bcd6 100644 --- a/targets/TARGET_STM/us_ticker.c +++ b/targets/TARGET_STM/us_ticker.c @@ -16,7 +16,7 @@ #include #include "us_ticker_api.h" #include "PeripheralNames.h" -#include "hal_tick.h" +#include "us_ticker_data.h" TIM_HandleTypeDef TimMasterHandle; From fcb9ac47ab0ee4aafab52a5df72167cadbd69dc4 Mon Sep 17 00:00:00 2001 From: bcostm Date: Wed, 20 Jun 2018 15:53:50 +0200 Subject: [PATCH 081/113] stm32 ticker: change license --- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../TARGET_MTB_RAK811/device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../TARGET_NZ32_SC151/device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- .../device/us_ticker_data.h | 50 ++++++------------- 55 files changed, 825 insertions(+), 1925 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/device/us_ticker_data.h index 1e23fdddbcb..102b3e6195b 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -63,4 +44,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/device/us_ticker_data.h index 1e23fdddbcb..102b3e6195b 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -63,4 +44,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/device/us_ticker_data.h index b438dc1a826..6d2ccadec79 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ extern "C" { #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/device/us_ticker_data.h index b24bd114013..c9d8977e9d0 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ extern "C" { #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/us_ticker_data.h index 1e23fdddbcb..102b3e6195b 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -63,4 +44,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/device/us_ticker_data.h index e056e9141a0..689d49dd416 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device/us_ticker_data.h index e056e9141a0..689d49dd416 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/device/us_ticker_data.h index 52376e86bdd..393e1491945 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2016 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/device/us_ticker_data.h index 52376e86bdd..393e1491945 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2016 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/us_ticker_data.h index 52376e86bdd..393e1491945 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2016 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/us_ticker_data.h index fa7d9f9f0e1..0c8af273533 100644 --- a/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ extern "C" { #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/device/us_ticker_data.h index 962bc2e017f..2d061d369b7 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/device/us_ticker_data.h index 962bc2e017f..2d061d369b7 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/device/us_ticker_data.h index 962bc2e017f..2d061d369b7 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/device/us_ticker_data.h index 962bc2e017f..2d061d369b7 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/device/us_ticker_data.h index 962bc2e017f..2d061d369b7 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/us_ticker_data.h index aeb3b483f43..28858269cd9 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/device/us_ticker_data.h index aeb3b483f43..28858269cd9 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/device/us_ticker_data.h index aeb3b483f43..28858269cd9 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/device/us_ticker_data.h index aeb3b483f43..28858269cd9 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/device/us_ticker_data.h index aeb3b483f43..28858269cd9 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/us_ticker_data.h index aeb3b483f43..28858269cd9 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/us_ticker_data.h index aeb3b483f43..28858269cd9 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/device/us_ticker_data.h index aeb3b483f43..28858269cd9 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/device/us_ticker_data.h index aeb3b483f43..28858269cd9 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/device/us_ticker_data.h index aeb3b483f43..28858269cd9 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/device/us_ticker_data.h index 04bbeb200e6..28858269cd9 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2017 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/us_ticker_data.h index aeb3b483f43..28858269cd9 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/device/us_ticker_data.h index aeb3b483f43..28858269cd9 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/us_ticker_data.h index aeb3b483f43..28858269cd9 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/device/us_ticker_data.h index 915ba244af2..28858269cd9 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/device/us_ticker_data.h index b06c66b56a8..bf707f4b2a8 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/us_ticker_data.h index 9c3587becdf..461c2fb37ac 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2016 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -64,4 +45,3 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority); #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/device/us_ticker_data.h index 9c3587becdf..461c2fb37ac 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2016 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -64,4 +45,3 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority); #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/us_ticker_data.h index 9c3587becdf..461c2fb37ac 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2016 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -64,4 +45,3 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority); #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/device/us_ticker_data.h index 9c3587becdf..461c2fb37ac 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2016 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -64,4 +45,3 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority); #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/device/us_ticker_data.h index 1cadfffcce9..30b49b58f7b 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/device/us_ticker_data.h index 1cadfffcce9..30b49b58f7b 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/device/us_ticker_data.h index 1cadfffcce9..30b49b58f7b 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/device/us_ticker_data.h index 1cadfffcce9..30b49b58f7b 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L072xZ/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L072xZ/device/us_ticker_data.h index 9fe3ef0d2f7..30b49b58f7b 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L072xZ/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L072xZ/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2017 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L0x2xZ/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L0x2xZ/device/us_ticker_data.h index 1cadfffcce9..30b49b58f7b 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L0x2xZ/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L0x2xZ/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/device/us_ticker_data.h index a1a4de41c14..4c45476b080 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_MTS_XDOT/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_MTS_XDOT/device/us_ticker_data.h index a2cc1672b0d..4c45476b080 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_MTS_XDOT/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_MTS_XDOT/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_RAK811/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_RAK811/device/us_ticker_data.h index 0e870cc9448..d201dcfdb99 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_RAK811/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_RAK811/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/device/us_ticker_data.h index a1a4de41c14..4c45476b080 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2014 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/device/us_ticker_data.h index a2cc1672b0d..4c45476b080 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/device/us_ticker_data.h index a2cc1672b0d..4c45476b080 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/us_ticker_data.h index d7b053cbdde..79b62d02e8d 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/us_ticker_data.h index d7b053cbdde..79b62d02e8d 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L443xC/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L443xC/device/us_ticker_data.h index d7b053cbdde..79b62d02e8d 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L443xC/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L443xC/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/us_ticker_data.h index 928a6bd30b4..3b310b3877f 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2017 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/us_ticker_data.h index 6a4876fce97..3b310b3877f 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/us_ticker_data.h index 6a4876fce97..3b310b3877f 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -62,4 +43,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/us_ticker_data.h index 64ee6624619..9468db09a4e 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/us_ticker_data.h @@ -1,37 +1,18 @@ -/** - ****************************************************************************** - * @file hal_tick.h - * @author MCD Application Team - * @brief Initialization of HAL tick - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 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. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. - * - ****************************************************************************** - */ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __HAL_TICK_H #define __HAL_TICK_H @@ -61,4 +42,3 @@ #endif // __HAL_TICK_H -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ From f1869a6fc492abf02ea056c9e4913c2ac167f25a Mon Sep 17 00:00:00 2001 From: bcostm Date: Wed, 20 Jun 2018 15:59:14 +0200 Subject: [PATCH 082/113] stm32 ticker: typo corrections --- .../TARGET_DISCO_F051R8/device/us_ticker_data.h | 6 +++--- .../TARGET_NUCLEO_F030R8/device/us_ticker_data.h | 6 +++--- .../TARGET_NUCLEO_F031K6/device/us_ticker_data.h | 6 +++--- .../TARGET_NUCLEO_F042K6/device/us_ticker_data.h | 6 +++--- .../TARGET_NUCLEO_F070RB/device/us_ticker_data.h | 6 +++--- .../TARGET_NUCLEO_F072RB/device/us_ticker_data.h | 6 +++--- .../TARGET_NUCLEO_F091RC/device/us_ticker_data.h | 6 +++--- .../TARGET_BLUEPILL_F103C8/device/us_ticker_data.h | 6 +++--- .../TARGET_DISCO_F100RB/device/us_ticker_data.h | 6 +++--- .../TARGET_NUCLEO_F103RB/device/us_ticker_data.h | 6 +++--- .../TARGET_NUCLEO_F207ZG/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F302x8/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F303x8/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F303xC/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F303xE/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F334x8/device/us_ticker_data.h | 6 +++--- .../TARGET_MTB_MTS_DRAGONFLY/device/us_ticker_data.h | 6 +++--- .../TARGET_MTS_DRAGONFLY_F411RE/device/us_ticker_data.h | 6 +++--- .../TARGET_MTS_MDOT_F405RG/device/us_ticker_data.h | 6 +++--- .../TARGET_MTS_MDOT_F411RE/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F401xC/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F401xE/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F407xG/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F410xB/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F411xE/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F412xG/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F413xH/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F429xI/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F437xG/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F439xI/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F446xE/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F469xI/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F746xG/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F756xG/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F767xI/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32F769xI/device/us_ticker_data.h | 6 +++--- .../TARGET_NUCLEO_L011K4/device/us_ticker_data.h | 6 +++--- .../TARGET_NUCLEO_L031K6/device/us_ticker_data.h | 6 +++--- .../TARGET_NUCLEO_L073RZ/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32L053x8/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32L072xZ/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32L0x2xZ/device/us_ticker_data.h | 6 +++--- .../TARGET_MOTE_L152RC/device/us_ticker_data.h | 6 +++--- .../TARGET_MTB_MTS_XDOT/device/us_ticker_data.h | 6 +++--- .../TARGET_MTB_RAK811/device/us_ticker_data.h | 6 +++--- .../TARGET_NUCLEO_L152RE/device/us_ticker_data.h | 6 +++--- .../TARGET_NZ32_SC151/device/us_ticker_data.h | 6 +++--- .../TARGET_XDOT_L151CC/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32L432xC/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32L433xC/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32L443xC/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32L475xG/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32L476xG/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32L486xG/device/us_ticker_data.h | 6 +++--- .../TARGET_STM32L496xG/device/us_ticker_data.h | 6 +++--- 55 files changed, 165 insertions(+), 165 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/device/us_ticker_data.h index 102b3e6195b..4fc73ab4b89 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -42,5 +42,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/device/us_ticker_data.h index 102b3e6195b..4fc73ab4b89 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -42,5 +42,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/device/us_ticker_data.h index 6d2ccadec79..48cc56a2288 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ extern "C" { } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/device/us_ticker_data.h index c9d8977e9d0..8277c334f9b 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ extern "C" { } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/us_ticker_data.h index 102b3e6195b..4fc73ab4b89 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -42,5 +42,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/device/us_ticker_data.h index 689d49dd416..360a5c5e9cb 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device/us_ticker_data.h index 689d49dd416..360a5c5e9cb 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/device/us_ticker_data.h index 393e1491945..3bfb085eafe 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/device/us_ticker_data.h index 393e1491945..3bfb085eafe 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/us_ticker_data.h index 393e1491945..3bfb085eafe 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/us_ticker_data.h index 0c8af273533..be9f0158908 100644 --- a/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ extern "C" { } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/device/us_ticker_data.h index 2d061d369b7..f727b6655fa 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/device/us_ticker_data.h index 2d061d369b7..f727b6655fa 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/device/us_ticker_data.h index 2d061d369b7..f727b6655fa 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/device/us_ticker_data.h index 2d061d369b7..f727b6655fa 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/device/us_ticker_data.h index 2d061d369b7..f727b6655fa 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/us_ticker_data.h index 28858269cd9..112319524f6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/device/us_ticker_data.h index 28858269cd9..112319524f6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/device/us_ticker_data.h index 28858269cd9..112319524f6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/device/us_ticker_data.h index 28858269cd9..112319524f6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/device/us_ticker_data.h index 28858269cd9..112319524f6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/us_ticker_data.h index 28858269cd9..112319524f6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/us_ticker_data.h index 28858269cd9..112319524f6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/device/us_ticker_data.h index 28858269cd9..112319524f6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/device/us_ticker_data.h index 28858269cd9..112319524f6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/device/us_ticker_data.h index 28858269cd9..112319524f6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/device/us_ticker_data.h index 28858269cd9..112319524f6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/us_ticker_data.h index 28858269cd9..112319524f6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/device/us_ticker_data.h index 28858269cd9..112319524f6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/us_ticker_data.h index 28858269cd9..112319524f6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/device/us_ticker_data.h index 28858269cd9..112319524f6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/device/us_ticker_data.h index bf707f4b2a8..5db56d2174a 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/us_ticker_data.h index 461c2fb37ac..65e46d485d9 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -43,5 +43,5 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority); } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/device/us_ticker_data.h index 461c2fb37ac..65e46d485d9 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -43,5 +43,5 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority); } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/us_ticker_data.h index 461c2fb37ac..65e46d485d9 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -43,5 +43,5 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority); } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/device/us_ticker_data.h index 461c2fb37ac..65e46d485d9 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -43,5 +43,5 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority); } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/device/us_ticker_data.h index 30b49b58f7b..1ae9b883759 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/device/us_ticker_data.h index 30b49b58f7b..1ae9b883759 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/device/us_ticker_data.h index 30b49b58f7b..1ae9b883759 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/device/us_ticker_data.h index 30b49b58f7b..1ae9b883759 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L072xZ/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L072xZ/device/us_ticker_data.h index 30b49b58f7b..1ae9b883759 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L072xZ/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L072xZ/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L0x2xZ/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L0x2xZ/device/us_ticker_data.h index 30b49b58f7b..1ae9b883759 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L0x2xZ/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L0x2xZ/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/device/us_ticker_data.h index 4c45476b080..b32bd97db96 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_MTS_XDOT/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_MTS_XDOT/device/us_ticker_data.h index 4c45476b080..b32bd97db96 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_MTS_XDOT/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_MTS_XDOT/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_RAK811/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_RAK811/device/us_ticker_data.h index d201dcfdb99..1480b81f7a4 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_RAK811/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MTB_RAK811/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/device/us_ticker_data.h index 4c45476b080..b32bd97db96 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/device/us_ticker_data.h index 4c45476b080..b32bd97db96 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/device/us_ticker_data.h index 4c45476b080..b32bd97db96 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/us_ticker_data.h index 79b62d02e8d..cf4de8b5bb8 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/us_ticker_data.h index 79b62d02e8d..cf4de8b5bb8 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L443xC/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L443xC/device/us_ticker_data.h index 79b62d02e8d..cf4de8b5bb8 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L443xC/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L443xC/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/us_ticker_data.h index 3b310b3877f..93a3a31c0f0 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/us_ticker_data.h index 3b310b3877f..93a3a31c0f0 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/us_ticker_data.h index 3b310b3877f..93a3a31c0f0 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -41,5 +41,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/us_ticker_data.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/us_ticker_data.h index 9468db09a4e..833e724d812 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/us_ticker_data.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/us_ticker_data.h @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HAL_TICK_H -#define __HAL_TICK_H +#ifndef __US_TICKER_DATA_H +#define __US_TICKER_DATA_H #ifdef __cplusplus extern "C" { @@ -40,5 +40,5 @@ } #endif -#endif // __HAL_TICK_H +#endif // __US_TICKER_DATA_H From 9de2bfe5fe95e44b96b5b649c92280c1b4e1ecd6 Mon Sep 17 00:00:00 2001 From: bcostm Date: Tue, 26 Jun 2018 12:48:50 +0200 Subject: [PATCH 083/113] stm32 ticker: corrections in order to pass tests --- targets/TARGET_STM/hal_tick_overrides.c | 2 +- targets/TARGET_STM/us_ticker.c | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/targets/TARGET_STM/hal_tick_overrides.c b/targets/TARGET_STM/hal_tick_overrides.c index 21565980792..d5aac77fdf4 100644 --- a/targets/TARGET_STM/hal_tick_overrides.c +++ b/targets/TARGET_STM/hal_tick_overrides.c @@ -25,7 +25,7 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) uint32_t HAL_GetTick() { - return ticker_read_us(get_us_ticker_data()) / 1000; // 1 ms tick is required for ST HAL_Delay function + return 0; } void HAL_SuspendTick(void) diff --git a/targets/TARGET_STM/us_ticker.c b/targets/TARGET_STM/us_ticker.c index 6f934e4bcd6..3aef2a0a9e1 100644 --- a/targets/TARGET_STM/us_ticker.c +++ b/targets/TARGET_STM/us_ticker.c @@ -20,6 +20,8 @@ TIM_HandleTypeDef TimMasterHandle; +bool us_ticker_initialized = false; + const ticker_info_t *us_ticker_get_info() { static const ticker_info_t info = { @@ -53,7 +55,7 @@ void timer_oc_irq_handler(void) if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) { if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) { __HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1); - us_ticker_irq_handler(); + us_ticker_irq_handler(); } } } @@ -76,6 +78,11 @@ void timer_irq_handler(void) void us_ticker_init(void) { + if (us_ticker_initialized) { + __HAL_TIM_DISABLE_IT(&TimMasterHandle, TIM_IT_CC1); + __HAL_TIM_CLEAR_FLAG(&TimMasterHandle, TIM_FLAG_CC1); + return; + } // ************************************ 16-bit timer ************************************ #if TIM_MST_BIT_WIDTH == 16 @@ -195,6 +202,8 @@ void us_ticker_init(void) #endif // 16-bit/32-bit timer + us_ticker_initialized = true; + } uint32_t us_ticker_read() From 09c631eed0d71351945881e7c613c6e93b2741d9 Mon Sep 17 00:00:00 2001 From: bcostm Date: Tue, 10 Jul 2018 13:21:42 +0200 Subject: [PATCH 084/113] stm32 ticker: change th eplace where timer init in done, fix overflow issue with 16-bit timer - Move back the 16/32bit timer initialization in HAL_InitTick() and not in us_ticker_init() - Use ticker_read_us() and us_ticker_read() in HAL_GetTick() to fix potential overflow issue with the 16bit timer ==> These corrections allow timer, rtc, sleep, tick tests to PASS --- targets/TARGET_STM/hal_tick_overrides.c | 46 ++++++++++++++-- targets/TARGET_STM/us_ticker.c | 70 ++++++++++++------------- 2 files changed, 77 insertions(+), 39 deletions(-) diff --git a/targets/TARGET_STM/hal_tick_overrides.c b/targets/TARGET_STM/hal_tick_overrides.c index d5aac77fdf4..af0f1347c2e 100644 --- a/targets/TARGET_STM/hal_tick_overrides.c +++ b/targets/TARGET_STM/hal_tick_overrides.c @@ -1,5 +1,5 @@ /* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited + * Copyright (c) 2006-2018 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,18 +14,58 @@ * limitations under the License. */ #include "hal/us_ticker_api.h" +#include "us_ticker_data.h" + +// This variable is set to 1 at the of mbed_sdk_init function. +// The ticker_read_us function must not be called until the mbed_sdk_init is terminated. +extern int mbed_sdk_inited; + +// Defined in us_ticker.c +void init_16bit_timer(void); +void init_32bit_timer(void); + +#if TIM_MST_BIT_WIDTH == 16 +// Variables also reset in us_ticker_init() +uint32_t prev_time = 0; +uint32_t elapsed_time = 0; +#endif // Overwrite default HAL functions defined as "weak" HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) { - us_ticker_init(); +#if TIM_MST_BIT_WIDTH == 16 + init_16bit_timer(); +#else + init_32bit_timer(); +#endif return HAL_OK; } uint32_t HAL_GetTick() { - return 0; +#if TIM_MST_BIT_WIDTH == 16 + uint32_t new_time; + if (mbed_sdk_inited) { + // Apply the latest time recorded just before the sdk is inited + new_time = ticker_read_us(get_us_ticker_data()) + prev_time; + prev_time = 0; // Use this time only once + return (new_time / 1000); + } + else { + new_time = us_ticker_read(); + elapsed_time += (new_time - prev_time) & 0xFFFF; // Only use the lower 16 bits + prev_time = new_time; + return (elapsed_time / 1000); + } +#else // 32-bit timer + if (mbed_sdk_inited) { + return (ticker_read_us(get_us_ticker_data()) / 1000); + } + else { + return (us_ticker_read() / 1000); + } +#endif } void HAL_SuspendTick(void) diff --git a/targets/TARGET_STM/us_ticker.c b/targets/TARGET_STM/us_ticker.c index 3aef2a0a9e1..a04f70527d6 100644 --- a/targets/TARGET_STM/us_ticker.c +++ b/targets/TARGET_STM/us_ticker.c @@ -1,5 +1,5 @@ /* mbed Microcontroller Library - * Copyright (c) 2006-2016 ARM Limited + * Copyright (c) 2006-2018 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,7 +20,9 @@ TIM_HandleTypeDef TimMasterHandle; -bool us_ticker_initialized = false; +uint32_t timer_cnt_reg; +uint32_t timer_ccr1_reg; +uint32_t timer_dier_reg; const ticker_info_t *us_ticker_get_info() { @@ -36,6 +38,9 @@ void us_ticker_irq_handler(void); // ************************************ 16-bit timer ************************************ #if TIM_MST_BIT_WIDTH == 16 +extern uint32_t prev_time; +extern uint32_t elapsed_time; + #if defined(TARGET_STM32F0) void timer_update_irq_handler(void) { @@ -60,32 +65,8 @@ void timer_oc_irq_handler(void) } } -// ************************************ 32-bit timer ************************************ -#else - -void timer_irq_handler(void) +void init_16bit_timer(void) { - TimMasterHandle.Instance = TIM_MST; - if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) { - if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) { - __HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1); - us_ticker_irq_handler(); - } - } -} - -#endif // 16-bit/32-bit timer - -void us_ticker_init(void) -{ - if (us_ticker_initialized) { - __HAL_TIM_DISABLE_IT(&TimMasterHandle, TIM_IT_CC1); - __HAL_TIM_CLEAR_FLAG(&TimMasterHandle, TIM_FLAG_CC1); - return; - } - -// ************************************ 16-bit timer ************************************ -#if TIM_MST_BIT_WIDTH == 16 // Enable timer clock TIM_MST_RCC; @@ -137,9 +118,27 @@ void us_ticker_init(void) __HAL_TIM_DISABLE_IT(&TimMasterHandle, TIM_IT_CC1); + // Used by HAL_GetTick() + prev_time = 0; + elapsed_time = 0; +} + // ************************************ 32-bit timer ************************************ #else +void timer_irq_handler(void) +{ + TimMasterHandle.Instance = TIM_MST; + if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) { + if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) { + __HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1); + us_ticker_irq_handler(); + } + } +} + +void init_32bit_timer(void) +{ RCC_ClkInitTypeDef RCC_ClkInitStruct; uint32_t PclkFreq; @@ -162,8 +161,8 @@ void us_ticker_init(void) TIM_MST_RESET_OFF; // Configure time base - TimMasterHandle.Instance = TIM_MST; - TimMasterHandle.Init.Period = 0xFFFFFFFF; + TimMasterHandle.Instance = TIM_MST; + TimMasterHandle.Init.Period = 0xFFFFFFFF; // TIMxCLK = PCLKx when the APB prescaler = 1 else TIMxCLK = 2 * PCLKx #if TIM_MST_PCLK == 1 @@ -199,11 +198,14 @@ void us_ticker_init(void) #endif __HAL_TIM_DISABLE_IT(&TimMasterHandle, TIM_IT_CC1); +} #endif // 16-bit/32-bit timer - us_ticker_initialized = true; - +void us_ticker_init(void) +{ + // Timer is already initialized in HAL_InitTick() + __HAL_TIM_DISABLE_IT(&TimMasterHandle, TIM_IT_CC1); } uint32_t us_ticker_read() @@ -241,10 +243,6 @@ void us_ticker_clear_interrupt(void) __HAL_TIM_CLEAR_FLAG(&TimMasterHandle, TIM_FLAG_CC1); } -uint32_t timer_cnt_reg; -uint32_t timer_ccr1_reg; -uint32_t timer_dier_reg; - void save_timer_ctx(void) { timer_cnt_reg = __HAL_TIM_GET_COUNTER(&TimMasterHandle); @@ -257,4 +255,4 @@ void restore_timer_ctx(void) __HAL_TIM_SET_COUNTER(&TimMasterHandle, timer_cnt_reg); __HAL_TIM_SET_COMPARE(&TimMasterHandle, TIM_CHANNEL_1, timer_ccr1_reg); TIM_MST->DIER = timer_dier_reg; -} \ No newline at end of file +} From 10a32dbf95060cc772922a24a200d9210990a1db Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Fri, 29 Jun 2018 14:03:32 +0200 Subject: [PATCH 085/113] STM32 RTC : bypass shadow registers - RTC_SSR for the subseconds - RTC_TR for the time - RTC_DR for the date These registers were accessed through shadow registers which are synchronized with PCLK1 (APB1 clock). They are now accessed directly in order to avoid waiting for the synchronization duration. --- targets/TARGET_STM/rtc_api.c | 179 +++++++++++++++++++++-------------- targets/TARGET_STM/sleep.c | 12 --- 2 files changed, 108 insertions(+), 83 deletions(-) diff --git a/targets/TARGET_STM/rtc_api.c b/targets/TARGET_STM/rtc_api.c index d048add6966..7a0e99a1e30 100644 --- a/targets/TARGET_STM/rtc_api.c +++ b/targets/TARGET_STM/rtc_api.c @@ -33,6 +33,14 @@ #include "rtc_api_hal.h" #include "mbed_mktime.h" #include "mbed_error.h" +#include "mbed_critical.h" + +#if DEVICE_LPTICKER && !MBED_CONF_TARGET_LPTICKER_LPTIM +volatile uint32_t LP_continuous_time = 0; +volatile uint32_t LP_last_RTC_time = 0; +#endif + +static int RTC_inited = 0; static RTC_HandleTypeDef RtcHandle; @@ -41,18 +49,15 @@ void rtc_init(void) RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if (RTC_inited) { + return; + } + RTC_inited = 1; + // Enable access to Backup domain __HAL_RCC_PWR_CLK_ENABLE(); HAL_PWR_EnableBkUpAccess(); -#if DEVICE_LPTICKER - if ((rtc_isenabled()) && ((RTC->PRER & RTC_PRER_PREDIV_S) == PREDIV_S_VALUE)) { -#else /* DEVICE_LPTICKER */ - if (rtc_isenabled()) { -#endif /* DEVICE_LPTICKER */ - return; - } - #if MBED_CONF_TARGET_LSE_AVAILABLE RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; // Mandatory, otherwise the PLL is reconfigured! @@ -114,48 +119,20 @@ void rtc_init(void) error("RTC initialization failed"); } - rtc_synchronize(); // Wait for RSF - - if (!rtc_isenabled()) { - rtc_write(0); +#if !(TARGET_STM32F1) && !(TARGET_STM32F2) + /* STM32F1 : there are no shadow registers */ + /* STM32F2 : shadow registers can not be bypassed */ + if (HAL_RTCEx_EnableBypassShadow(&RtcHandle) != HAL_OK) { + error("EnableBypassShadow error"); } +#endif /* TARGET_STM32F1 || TARGET_STM32F2 */ } void rtc_free(void) { - // Disable access to Backup domain - HAL_PWR_DisableBkUpAccess(); + /* RTC clock can not be reset */ } -/* - ST RTC_DateTypeDef structure - WeekDay 1=monday, 2=tuesday, ..., 7=sunday - Month 0x1=january, 0x2=february, ..., 0x12=december - Date day of the month 1-31 - Year year 0-99 - - ST RTC_TimeTypeDef structure - Hours 0-12 if the RTC_HourFormat_12 is selected during init - 0-23 if the RTC_HourFormat_24 is selected during init - Minutes 0-59 - Seconds 0-59 - TimeFormat RTC_HOURFORMAT12_AM/RTC_HOURFORMAT12_PM - SubSeconds time unit range between [0-1] Second with [1 Sec / SecondFraction +1] granularity - SecondFraction range or granularity of Sub Second register content corresponding to Synchronous pre-scaler factor value (PREDIV_S) - DayLightSaving RTC_DAYLIGHTSAVING_SUB1H/RTC_DAYLIGHTSAVING_ADD1H/RTC_DAYLIGHTSAVING_NONE - StoreOperation RTC_STOREOPERATION_RESET/RTC_STOREOPERATION_SET - - struct tm - tm_sec seconds after the minute 0-61 - tm_min minutes after the hour 0-59 - tm_hour hours since midnight 0-23 - tm_mday day of the month 1-31 - tm_mon months since January 0-11 - tm_year years since 1900 - tm_wday days since Sunday 0-6 - tm_yday days since January 1 0-365 - tm_isdst Daylight Saving Time flag -*/ /* Information about STM32F0, STM32F2, STM32F3, STM32F4, STM32F7, STM32L0, STM32L1, STM32L4: @@ -172,7 +149,7 @@ Information about STM32F1: For date, there is no specific register, only a software structure. It is then not a problem to not use shifts. */ - +#if TARGET_STM32F1 time_t rtc_read(void) { RTC_DateTypeDef dateStruct = {0}; @@ -186,7 +163,6 @@ time_t rtc_read(void) HAL_RTC_GetTime(&RtcHandle, &timeStruct, RTC_FORMAT_BIN); HAL_RTC_GetDate(&RtcHandle, &dateStruct, RTC_FORMAT_BIN); -#if TARGET_STM32F1 /* date information is null before first write procedure */ /* set 01/01/1970 as default values */ if (dateStruct.Year == 0) { @@ -194,7 +170,6 @@ time_t rtc_read(void) dateStruct.Month = 1 ; dateStruct.Date = 1 ; } -#endif // Setup a tm structure based on the RTC /* tm_wday information is ignored by _rtc_maketime */ @@ -215,11 +190,57 @@ time_t rtc_read(void) return t; } +#else /* TARGET_STM32F1 */ + +time_t rtc_read(void) +{ + struct tm timeinfo; + + /* Since the shadow registers are bypassed we have to read the time twice and compare them until both times are the same */ + uint32_t Read_time = RTC->TR & RTC_TR_RESERVED_MASK; + uint32_t Read_date = RTC->DR & RTC_DR_RESERVED_MASK; + + while ((Read_time != (RTC->TR & RTC_TR_RESERVED_MASK)) || (Read_date != (RTC->DR & RTC_DR_RESERVED_MASK))) { + Read_time = RTC->TR & RTC_TR_RESERVED_MASK; + Read_date = RTC->DR & RTC_DR_RESERVED_MASK; + } + + /* Setup a tm structure based on the RTC + struct tm : + tm_sec seconds after the minute 0-61 + tm_min minutes after the hour 0-59 + tm_hour hours since midnight 0-23 + tm_mday day of the month 1-31 + tm_mon months since January 0-11 + tm_year years since 1900 + tm_yday information is ignored by _rtc_maketime + tm_wday information is ignored by _rtc_maketime + tm_isdst information is ignored by _rtc_maketime + */ + timeinfo.tm_mday = RTC_Bcd2ToByte((uint8_t)(Read_date & (RTC_DR_DT | RTC_DR_DU))); + timeinfo.tm_mon = RTC_Bcd2ToByte((uint8_t)((Read_date & (RTC_DR_MT | RTC_DR_MU)) >> 8)) - 1; + timeinfo.tm_year = RTC_Bcd2ToByte((uint8_t)((Read_date & (RTC_DR_YT | RTC_DR_YU)) >> 16)) + 68; + timeinfo.tm_hour = RTC_Bcd2ToByte((uint8_t)((Read_time & (RTC_TR_HT | RTC_TR_HU)) >> 16)); + timeinfo.tm_min = RTC_Bcd2ToByte((uint8_t)((Read_time & (RTC_TR_MNT | RTC_TR_MNU)) >> 8)); + timeinfo.tm_sec = RTC_Bcd2ToByte((uint8_t)((Read_time & (RTC_TR_ST | RTC_TR_SU)) >> 0)); + + // Convert to timestamp + time_t t; + if (_rtc_maketime(&timeinfo, &t, RTC_4_YEAR_LEAP_YEAR_SUPPORT) == false) { + return 0; + } + + return t; +} + +#endif /* TARGET_STM32F1 */ + void rtc_write(time_t t) { RTC_DateTypeDef dateStruct = {0}; RTC_TimeTypeDef timeStruct = {0}; + core_util_critical_section_enter(); RtcHandle.Instance = RTC; // Convert the time into a tm @@ -247,6 +268,17 @@ void rtc_write(time_t t) timeStruct.StoreOperation = RTC_STOREOPERATION_RESET; #endif /* TARGET_STM32F1 */ +#if DEVICE_LPTICKER && !MBED_CONF_TARGET_LPTICKER_LPTIM + /* Need to update LP_continuous_time value before new RTC time */ + uint32_t current_lp_time = rtc_read_lp(); + + /* LP_last_RTC_time value is updated with the new RTC time */ + LP_last_RTC_time = timeStruct.Seconds + timeStruct.Minutes * 60 + timeStruct.Hours * 60 * 60; + + /* Save current SSR */ + uint32_t Read_SubSeconds = (uint32_t)(RTC->SSR); +#endif /* DEVICE_LPTICKER && !MBED_CONF_TARGET_LPTICKER_LPTIM */ + // Change the RTC current date/time if (HAL_RTC_SetDate(&RtcHandle, &dateStruct, RTC_FORMAT_BIN) != HAL_OK) { error("HAL_RTC_SetDate error\n"); @@ -254,24 +286,24 @@ void rtc_write(time_t t) if (HAL_RTC_SetTime(&RtcHandle, &timeStruct, RTC_FORMAT_BIN) != HAL_OK) { error("HAL_RTC_SetTime error\n"); } + +#if DEVICE_LPTICKER && !MBED_CONF_TARGET_LPTICKER_LPTIM + while (Read_SubSeconds != (RTC->SSR)) { + } +#endif /* DEVICE_LPTICKER && !MBED_CONF_TARGET_LPTICKER_LPTIM */ + + core_util_critical_section_exit(); } int rtc_isenabled(void) { #if !(TARGET_STM32F1) - return (((RTC->ISR & RTC_ISR_INITS) == RTC_ISR_INITS) && ((RTC->ISR & RTC_ISR_RSF) == RTC_ISR_RSF)); + return ((RTC->ISR & RTC_ISR_INITS) == RTC_ISR_INITS); #else /* TARGET_STM32F1 */ return ((RTC->CRL & RTC_CRL_RSF) == RTC_CRL_RSF); #endif /* TARGET_STM32F1 */ } -void rtc_synchronize(void) -{ - RtcHandle.Instance = RTC; - if (HAL_RTC_WaitForSynchro(&RtcHandle) != HAL_OK) { - error("rtc_synchronize error\n"); - } -} #if DEVICE_LPTICKER && !MBED_CONF_TARGET_LPTICKER_LPTIM @@ -279,8 +311,6 @@ static void RTC_IRQHandler(void); static void (*irq_handler)(void); volatile uint8_t lp_Fired = 0; -volatile uint32_t LP_continuous_time = 0; -volatile uint32_t LP_last_RTC_time = 0; static void RTC_IRQHandler(void) { @@ -311,31 +341,34 @@ static void RTC_IRQHandler(void) uint32_t rtc_read_lp(void) { - RTC_TimeTypeDef timeStruct = {0}; - RTC_DateTypeDef dateStruct = {0}; - - RtcHandle.Instance = RTC; - HAL_RTC_GetTime(&RtcHandle, &timeStruct, RTC_FORMAT_BIN); + struct tm timeinfo; - /* Reading RTC current time locks the values in calendar shadow registers until Current date is read - to ensure consistency between the time and date values */ - HAL_RTC_GetDate(&RtcHandle, &dateStruct, RTC_FORMAT_BIN); + /* Since the shadow registers are bypassed we have to read the time twice and compare them until both times are the same */ + /* We don't have to read date as we bypass shadow registers */ + uint32_t Read_SecondFraction = (uint32_t)(RTC->PRER & RTC_PRER_PREDIV_S); + uint32_t Read_time = (uint32_t)(RTC->TR & RTC_TR_RESERVED_MASK); + uint32_t Read_SubSeconds = (uint32_t)(RTC->SSR); - if (timeStruct.SubSeconds > timeStruct.SecondFraction) { - /* SS can be larger than PREDIV_S only after a shift operation. In that case, the correct - time/date is one second less than as indicated by RTC_TR/RTC_DR. */ - timeStruct.Seconds -= 1; + while ((Read_time != (RTC->TR & RTC_TR_RESERVED_MASK)) || (Read_SubSeconds != (RTC->SSR))) { + Read_time = (uint32_t)(RTC->TR & RTC_TR_RESERVED_MASK); + Read_SubSeconds = (uint32_t)(RTC->SSR); } - uint32_t RTC_time_s = timeStruct.Seconds + timeStruct.Minutes * 60 + timeStruct.Hours * 60 * 60; // Max 0x0001-517F => * 8191 + 8191 = 0x2A2E-AE80 + + timeinfo.tm_hour = RTC_Bcd2ToByte((uint8_t)((Read_time & (RTC_TR_HT | RTC_TR_HU)) >> 16)); + timeinfo.tm_min = RTC_Bcd2ToByte((uint8_t)((Read_time & (RTC_TR_MNT | RTC_TR_MNU)) >> 8)); + timeinfo.tm_sec = RTC_Bcd2ToByte((uint8_t)((Read_time & (RTC_TR_ST | RTC_TR_SU)) >> 0)); + + uint32_t RTC_time_s = timeinfo.tm_sec + timeinfo.tm_min * 60 + timeinfo.tm_hour * 60 * 60; // Max 0x0001-517F => * 8191 + 8191 = 0x2A2E-AE80 if (LP_last_RTC_time <= RTC_time_s) { LP_continuous_time += (RTC_time_s - LP_last_RTC_time); } else { + /* Add 24h */ LP_continuous_time += (24 * 60 * 60 + RTC_time_s - LP_last_RTC_time); } LP_last_RTC_time = RTC_time_s; - return LP_continuous_time * PREDIV_S_VALUE + timeStruct.SecondFraction - timeStruct.SubSeconds; + return LP_continuous_time * PREDIV_S_VALUE + Read_SecondFraction - Read_SubSeconds; } void rtc_set_wake_up_timer(timestamp_t timestamp) @@ -377,7 +410,11 @@ void rtc_fire_interrupt(void) void rtc_deactivate_wake_up_timer(void) { RtcHandle.Instance = RTC; - HAL_RTCEx_DeactivateWakeUpTimer(&RtcHandle); + __HAL_RTC_WRITEPROTECTION_DISABLE(&RtcHandle); + __HAL_RTC_WAKEUPTIMER_DISABLE(&RtcHandle); + __HAL_RTC_WAKEUPTIMER_DISABLE_IT(&RtcHandle, RTC_IT_WUT); + __HAL_RTC_WRITEPROTECTION_ENABLE(&RtcHandle); + NVIC_DisableIRQ(RTC_WKUP_IRQn); } #endif /* DEVICE_LPTICKER && !MBED_CONF_TARGET_LPTICKER_LPTIM */ diff --git a/targets/TARGET_STM/sleep.c b/targets/TARGET_STM/sleep.c index 69c84dd042e..866a46aff81 100644 --- a/targets/TARGET_STM/sleep.c +++ b/targets/TARGET_STM/sleep.c @@ -35,7 +35,6 @@ #include "mbed_critical.h" #include "mbed_error.h" -extern void rtc_synchronize(void); extern void save_timer_ctx(void); extern void restore_timer_ctx(void); @@ -203,17 +202,6 @@ void hal_deepsleep(void) restore_timer_ctx(); -#if DEVICE_RTC - /* Wait for RTC RSF bit synchro if RTC is configured */ -#if (TARGET_STM32F2) || (TARGET_STM32F4) || (TARGET_STM32F7) - if (READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL)) { -#else /* (TARGET_STM32F2) || (TARGET_STM32F4) || (TARGET_STM32F7) */ - if (__HAL_RCC_GET_RTC_SOURCE()) { -#endif /* (TARGET_STM32F2) || (TARGET_STM32F4) || (TARGET_STM32F7) */ - rtc_synchronize(); - } -#endif - // Enable IRQs core_util_critical_section_exit(); } From e4a55af09c25daab23b52a09dee94a73055e0221 Mon Sep 17 00:00:00 2001 From: Marcus Chang Date: Wed, 11 Jul 2018 17:19:18 -0700 Subject: [PATCH 086/113] Allow STDIO pins to be NC in NRF52 series Prevent ASSERT from triggering when one of the STDIO pins is not connected. --- .../TARGET_NRF5x/TARGET_NRF52/serial_api.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/serial_api.c b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/serial_api.c index 7f7c968cbb3..ab3b33f2905 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/serial_api.c +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/serial_api.c @@ -789,9 +789,16 @@ static void nordic_nrf5_uart_configure_object(serial_t *obj) #endif /* Configure Tx and Rx pins. */ - nrf_gpio_pin_set(uart_object->tx); - nrf_gpio_cfg_output(uart_object->tx); - nrf_gpio_cfg_input(uart_object->rx, NRF_GPIO_PIN_NOPULL); + if (uart_object->tx != NRF_UART_PSEL_DISCONNECTED) { + + nrf_gpio_pin_set(uart_object->tx); + nrf_gpio_cfg_output(uart_object->tx); + } + + if (uart_object->rx != NRF_UART_PSEL_DISCONNECTED) { + + nrf_gpio_cfg_input(uart_object->rx, NRF_GPIO_PIN_NOPULL); + } nrf_uarte_txrx_pins_set(nordic_nrf5_uart_register[uart_object->instance], uart_object->tx, From 0096da3085aec94cb0e2e9b762aef31c7069d6ec Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Mon, 4 Jun 2018 17:25:14 +0300 Subject: [PATCH 087/113] Add option to make Nanostack use global event queue --- .../mbed_lib.json | 7 +- .../ns_event_loop.c | 43 ++------ .../ns_event_loop_mbed.cpp | 97 +++++++++++++++++++ .../ns_event_loop_mutex.c | 68 +++++++++++++ .../ns_event_loop_mutex.h | 31 ++++++ 5 files changed, 207 insertions(+), 39 deletions(-) create mode 100644 features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop_mbed.cpp create mode 100644 features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop_mutex.c create mode 100644 features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop_mutex.h diff --git a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/mbed_lib.json b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/mbed_lib.json index 091fa46ae63..86e1c91c8c6 100644 --- a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/mbed_lib.json +++ b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/mbed_lib.json @@ -12,11 +12,14 @@ "critical-section-usable-from-interrupt": { "help": "Make critical section API usable from interrupt context. Else a mutex is used as locking primitive. Consult arm_hal_interrupt.c for possible side effects on interrupt latency.", "value": false - } - , + }, "event-loop-dispatch-from-application": { "help": "Application is responsible of message dispatch loop. Else launch a separate thread for event-loop.", "value": false + }, + "event-loop-use-mbed-events": { + "help": "Use Mbed OS global event queue for Nanostack event loop, rather than our own thread.", + "value": false } } } diff --git a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.c b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.c index 5883fe623ec..7b2332c21a2 100644 --- a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.c +++ b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.c @@ -2,7 +2,7 @@ * Copyright (c) 2016 ARM Limited, All Rights Reserved */ -#include +#include "mbed_assert.h" #include "cmsis.h" #include "cmsis_os2.h" #include "mbed_rtos_storage.h" @@ -10,10 +10,12 @@ #include "eventOS_scheduler.h" +#include "ns_event_loop_mutex.h" #include "ns_event_loop.h" #define TRACE_GROUP "evlp" +#if !MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_USE_MBED_EVENTS #if MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_DISPATCH_FROM_APPLICATION @@ -50,40 +52,6 @@ static const osThreadAttr_t event_thread_attr = { static osThreadId_t event_thread_id; #endif -static mbed_rtos_storage_mutex_t event_mutex; -static const osMutexAttr_t event_mutex_attr = { - .name = "nanostack_event_mutex", - .attr_bits = osMutexRecursive | osMutexPrioInherit | osMutexRobust, - .cb_mem = &event_mutex, - .cb_size = sizeof event_mutex, -}; -static osMutexId_t event_mutex_id; -static osThreadId_t event_mutex_owner_id = NULL; -static uint32_t owner_count = 0; - -void eventOS_scheduler_mutex_wait(void) -{ - osMutexAcquire(event_mutex_id, osWaitForever); - if (0 == owner_count) { - event_mutex_owner_id = osThreadGetId(); - } - owner_count++; -} - -void eventOS_scheduler_mutex_release(void) -{ - owner_count--; - if (0 == owner_count) { - event_mutex_owner_id = NULL; - } - osMutexRelease(event_mutex_id); -} - -uint8_t eventOS_scheduler_mutex_is_owner(void) -{ - return osThreadGetId() == event_mutex_owner_id ? 1 : 0; -} - void eventOS_scheduler_signal(void) { // XXX why does signal set lock if called with irqs disabled? @@ -124,8 +92,7 @@ static void event_loop_thread(void *arg) // if it is not ran in a separate thread. void ns_event_loop_init(void) { - event_mutex_id = osMutexNew(&event_mutex_attr); - MBED_ASSERT(event_mutex_id != NULL); + ns_event_loop_mutex_init(); // If a separate event loop thread is not used, the signaling // happens via event flags instead of thread flags. This allows one to @@ -148,3 +115,5 @@ void ns_event_loop_thread_start(void) { } #endif + +#endif // !MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_USE_MBED_EVENTS diff --git a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop_mbed.cpp b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop_mbed.cpp new file mode 100644 index 00000000000..6953cb660d4 --- /dev/null +++ b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop_mbed.cpp @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2018 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "mbed_assert.h" +#include "platform/arm_hal_interrupt.h" +#include "cmsis.h" +#include "cmsis_os2.h" +#include "mbed_rtos_storage.h" +#include "ns_trace.h" + +#include "eventOS_scheduler.h" + +#include "mbed_error.h" +#include "mbed_shared_queues.h" +#include "events/Event.h" +#include "ns_event_loop_mutex.h" +#include "ns_event_loop.h" + +#define TRACE_GROUP "evlp" + +#if MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_USE_MBED_EVENTS + +using events::EventQueue; +using events::Event; + +static Event *event; +static volatile int event_pending; +static volatile bool started; + +void eventOS_scheduler_signal(void) +{ + platform_enter_critical(); + if (started && event_pending == 0) { + event_pending = event->post(); + MBED_ASSERT(event_pending != 0); + } + platform_exit_critical(); +} + +void eventOS_scheduler_idle(void) +{ + error("Shouldn't be called"); +} + +static void do_dispatch_with_mutex_held() +{ + platform_enter_critical(); + event_pending = 0; + platform_exit_critical(); + + /* Process only 1 Nanostack event at a time, to try to be nice to + * others on the global queue. + */ + eventOS_scheduler_mutex_wait(); + bool dispatched = eventOS_scheduler_dispatch_event(); + eventOS_scheduler_mutex_release(); + + /* Go round again if (potentially) more */ + if (dispatched) { + eventOS_scheduler_signal(); + } +} + +void ns_event_loop_init(void) +{ + ns_event_loop_mutex_init(); +} + +void ns_event_loop_thread_create(void) +{ + EventQueue *equeue = mbed::mbed_event_queue(); + MBED_ASSERT(equeue != NULL); + + event = new Event(equeue, do_dispatch_with_mutex_held); + MBED_ASSERT(event != NULL); +} + +void ns_event_loop_thread_start(void) +{ + started = true; + eventOS_scheduler_signal(); +} + +#endif // MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_USE_MBED_EVENTS diff --git a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop_mutex.c b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop_mutex.c new file mode 100644 index 00000000000..f4d91236fa2 --- /dev/null +++ b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop_mutex.c @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2018 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "mbed_assert.h" +#include "cmsis.h" +#include "cmsis_os2.h" +#include "mbed_rtos_storage.h" +#include "ns_trace.h" + +#include "eventOS_scheduler.h" + +#include "ns_event_loop_mutex.h" + +#define TRACE_GROUP "evlm" + +static mbed_rtos_storage_mutex_t event_mutex; +static const osMutexAttr_t event_mutex_attr = { + .name = "nanostack_event_mutex", + .attr_bits = osMutexRecursive | osMutexPrioInherit | osMutexRobust, + .cb_mem = &event_mutex, + .cb_size = sizeof event_mutex, +}; +static osMutexId_t event_mutex_id; +static osThreadId_t event_mutex_owner_id = NULL; +static uint32_t owner_count = 0; + +void eventOS_scheduler_mutex_wait(void) +{ + osMutexAcquire(event_mutex_id, osWaitForever); + if (0 == owner_count) { + event_mutex_owner_id = osThreadGetId(); + } + owner_count++; +} + +void eventOS_scheduler_mutex_release(void) +{ + owner_count--; + if (0 == owner_count) { + event_mutex_owner_id = NULL; + } + osMutexRelease(event_mutex_id); +} + +uint8_t eventOS_scheduler_mutex_is_owner(void) +{ + return osThreadGetId() == event_mutex_owner_id ? 1 : 0; +} + +void ns_event_loop_mutex_init(void) +{ + event_mutex_id = osMutexNew(&event_mutex_attr); + MBED_ASSERT(event_mutex_id != NULL); +} + diff --git a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop_mutex.h b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop_mutex.h new file mode 100644 index 00000000000..ce3ac9beb6f --- /dev/null +++ b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop_mutex.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2018 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** \internal Initialise the scheduler mutex + * + * Initialises the mutex used by the implementation of + * eventOS_scheduler_mutex_wait(). Must be called before scheduler is used. + */ +void ns_event_loop_mutex_init(void); + +#ifdef __cplusplus +} +#endif + From 138edffe204ea8b66f97ec7e8a185d7a782e4153 Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Mon, 2 Jul 2018 13:47:29 +0300 Subject: [PATCH 088/113] Add Apache licenses to ns_hal files --- .../arm_hal_interrupt.c | 14 +++++++++++++- .../arm_hal_interrupt_private.h | 14 +++++++++++++- .../arm_hal_timer.cpp | 14 +++++++++++++- .../nanostack-hal-mbed-cmsis-rtos/ns_event_loop.c | 14 +++++++++++++- .../nanostack-hal-mbed-cmsis-rtos/ns_event_loop.h | 14 +++++++++++++- .../nanostack-hal-mbed-cmsis-rtos/ns_hal_init.c | 14 +++++++++++++- .../nanostack-hal-mbed-cmsis-rtos/ns_hal_init.h | 14 +++++++++++++- 7 files changed, 91 insertions(+), 7 deletions(-) diff --git a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_interrupt.c b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_interrupt.c index fa13de658d0..21c352996c4 100644 --- a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_interrupt.c +++ b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_interrupt.c @@ -1,5 +1,17 @@ /* - * Copyright (c) 2016 ARM Limited, All Rights Reserved + * Copyright (c) 2016-2018 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ #include "arm_hal_interrupt.h" diff --git a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_interrupt_private.h b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_interrupt_private.h index 4ef518b7c8d..586e2e96049 100644 --- a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_interrupt_private.h +++ b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_interrupt_private.h @@ -1,5 +1,17 @@ /* - * Copyright (c) 2016 ARM Limited, All Rights Reserved + * Copyright (c) 2016-2018 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ #ifndef ARM_HAL_INTERRUPT_PRIVATE_H_ diff --git a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_timer.cpp b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_timer.cpp index a6255c9d9f4..d5191f66bf5 100644 --- a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_timer.cpp +++ b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_timer.cpp @@ -1,5 +1,17 @@ /* - * Copyright (c) 2016 ARM Limited, All Rights Reserved + * Copyright (c) 2016-2018 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ // Include before mbed.h to properly get UINT*_C() diff --git a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.c b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.c index 7b2332c21a2..35e0c3e25dd 100644 --- a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.c +++ b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.c @@ -1,5 +1,17 @@ /* - * Copyright (c) 2016 ARM Limited, All Rights Reserved + * Copyright (c) 2016-2018 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ #include "mbed_assert.h" diff --git a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.h b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.h index a22ca7c752a..8dc55bd7378 100644 --- a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.h +++ b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.h @@ -1,5 +1,17 @@ /* - * Copyright (c) 2016 ARM Limited, All Rights Reserved + * Copyright (c) 2016-2018 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ #ifdef __cplusplus diff --git a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_hal_init.c b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_hal_init.c index 54838c28bfa..566472a0dc8 100644 --- a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_hal_init.c +++ b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_hal_init.c @@ -1,5 +1,17 @@ /* - * Copyright (c) 2016 ARM Limited, All Rights Reserved + * Copyright (c) 2016-2018 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ #include "ns_types.h" diff --git a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_hal_init.h b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_hal_init.h index 38425e117ee..10991ce4c70 100644 --- a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_hal_init.h +++ b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_hal_init.h @@ -1,5 +1,17 @@ /* - * Copyright (c) 2016 ARM Limited, All Rights Reserved + * Copyright (c) 2016-2018 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ #ifndef NS_HAL_INIT_H_ From 6cc1d643f6128e28d79918986bd3279a5ef97eb7 Mon Sep 17 00:00:00 2001 From: Marcus Chang Date: Wed, 11 Jul 2018 15:48:51 -0700 Subject: [PATCH 089/113] Fix linker script for NRF52840/IAR Add missing noinit section. --- .../TARGET_MCU_NRF52832/device/TOOLCHAIN_IAR/nRF52832.icf | 2 +- .../TARGET_MCU_NRF52840/device/TOOLCHAIN_IAR/nRF52840.icf | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/device/TOOLCHAIN_IAR/nRF52832.icf b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/device/TOOLCHAIN_IAR/nRF52832.icf index fd96dc69528..2131ab241ac 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/device/TOOLCHAIN_IAR/nRF52832.icf +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/device/TOOLCHAIN_IAR/nRF52832.icf @@ -55,7 +55,7 @@ define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; initialize by copy { readwrite }; do not initialize { section .noinit }; -place at address mem:__ICFEDIT_region_RAM_NVIC_start__ { section .noinit }; +place in RAM_region { section .noinit }; keep { section .intvec }; place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52840/device/TOOLCHAIN_IAR/nRF52840.icf b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52840/device/TOOLCHAIN_IAR/nRF52840.icf index 95819fe1df3..522e1f5a33b 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52840/device/TOOLCHAIN_IAR/nRF52840.icf +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52840/device/TOOLCHAIN_IAR/nRF52840.icf @@ -54,8 +54,11 @@ define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; initialize by copy { readwrite }; +do not initialize { section .nvictable }; +place at address mem:__ICFEDIT_region_RAM_NVIC_start__ { section .nvictable }; + do not initialize { section .noinit }; -place at address mem:__ICFEDIT_region_RAM_NVIC_start__ { section .noinit }; +place in RAM_region { section .noinit }; keep { section .intvec }; place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; From 7b83af72e26cac596a696c430c53cae4a8d01053 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Thu, 12 Jul 2018 10:27:14 -0500 Subject: [PATCH 090/113] Ensure that files generated have a directory --- tools/export/exporters.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/export/exporters.py b/tools/export/exporters.py index 8524334a60b..ee900ed8eca 100644 --- a/tools/export/exporters.py +++ b/tools/export/exporters.py @@ -9,6 +9,7 @@ import copy from tools.targets import TARGET_MAP +from tools.utils import mkdir class TargetNotSupportedException(Exception): @@ -139,6 +140,7 @@ def gen_file(self, template_file, data, target_file, **kwargs): """Generates a project file from a template using jinja""" target_text = self._gen_file_inner(template_file, data, target_file, **kwargs) target_path = self.gen_file_dest(target_file) + mkdir(dirname(target_path)) logging.debug("Generating: %s", target_path) open(target_path, "w").write(target_text) self.generated_files += [target_path] From 1595948fb0d9df33e6c6050b13971d604c3ce9f4 Mon Sep 17 00:00:00 2001 From: Mirela Chirica Date: Thu, 12 Jul 2018 10:12:15 +0300 Subject: [PATCH 091/113] Cellular: HSI set to be source clock for WISE_1570 --- targets/targets.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/targets/targets.json b/targets/targets.json index 692c193d0fd..24db3ad4c08 100755 --- a/targets/targets.json +++ b/targets/targets.json @@ -1723,10 +1723,11 @@ "config": { "clock_source": { "help": "Mask value : USE_PLL_HSE_EXTC (need HW patch) | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI | USE_PLL_MSI", - "value": "USE_PLL_HSE_XTAL", + "value": "USE_PLL_HSI", "macro_name": "CLOCK_SOURCE" } }, + "overrides": {"lpuart_clock_source": "USE_LPUART_CLK_HSI"}, "detect_code": ["0460"], "macros_add": ["MBEDTLS_CONFIG_HW_SUPPORT", "WISE_1570", "TWO_RAM_REGIONS"], "device_has_add": ["ANALOGOUT", "CRC", "SERIAL_ASYNCH", "SERIAL_FC", "TRNG", "FLASH"], From 2c150860df02a8d80cd2e189cfa3dcc3ba5edf8f Mon Sep 17 00:00:00 2001 From: Przemyslaw Stekiel Date: Wed, 11 Jul 2018 11:44:27 +0200 Subject: [PATCH 092/113] tests-mbed_drivers-lp_timer: change delay method The test sometimes fails on NRF51_DK (test case: "Test: LowPowerTimer - time measurement 1 ms.") in morph tests. The test verifies if LowPowerTimer class correctly counts elapsed time. Sometimes we got measured ~1600 us for delay 1000 us (delta 550 us). The delay is performed using `wait_us()` function which for delays greater than or equal to 1 ms (our case) calls `Thread::wait((uint32_t)ms);`. This causes rescheduling and potentially can put board into sleep (deep sleep mode is disabled by `wait_us()`). For our test purposes we don't need rescheduling/sleep since this actions takes extra time and have influence on the time measurement accuracy. The solution is to implement function for delay which is based on busy loop and uses us ticker. It has been verified that this solves the problem. With this fix when measurement of 1 ms is repeated 1000 times we got usually measured time equal to ~1080 us, and sometimes ~1300us (checked that this is caused by systick interrupt handling). Since this is test for drivers layer and the results are acceptable I decided to not disabling systick in the test). --- TESTS/mbed_drivers/lp_timer/main.cpp | 38 ++++++++++++++++++---------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/TESTS/mbed_drivers/lp_timer/main.cpp b/TESTS/mbed_drivers/lp_timer/main.cpp index cadf3f41c7d..56d37fd8d5d 100644 --- a/TESTS/mbed_drivers/lp_timer/main.cpp +++ b/TESTS/mbed_drivers/lp_timer/main.cpp @@ -55,6 +55,18 @@ extern uint32_t SystemCoreClock; #define DELTA_MS(delay_ms) (1 + ((delay_ms) * US_PER_MSEC / 20 / US_PER_MSEC)) #define DELTA_S(delay_ms) (0.000500f + (((float)(delay_ms)) / MSEC_PER_SEC / 20)) +void busy_wait_us(int us) +{ + const ticker_data_t *const ticker = get_us_ticker_data(); + uint32_t start = ticker_read(ticker); + while ((ticker_read(ticker) - start) < (uint32_t)us); +} + +void busy_wait_ms(int ms) +{ + busy_wait_us(ms * US_PER_MSEC); +} + /* This test verifies if low power timer is stopped after * creation. * @@ -74,7 +86,7 @@ void test_lptimer_creation() /* Wait 10 ms. * After that operation timer read routines should still return 0. */ - wait_ms(10); + busy_wait_ms(10); /* Check results. */ TEST_ASSERT_EQUAL_FLOAT(0, lp_timer.read()); @@ -102,7 +114,7 @@ void test_lptimer_time_accumulation() lp_timer.start(); /* Wait 10 ms. */ - wait_ms(10); + busy_wait_ms(10); /* Stop the timer. */ lp_timer.stop(); @@ -116,7 +128,7 @@ void test_lptimer_time_accumulation() /* Wait 50 ms - this is done to show that time elapsed when * the timer is stopped does not have influence on the * timer counted time. */ - wait_ms(50); + busy_wait_ms(50); /* ------ */ @@ -124,7 +136,7 @@ void test_lptimer_time_accumulation() lp_timer.start(); /* Wait 20 ms. */ - wait_ms(20); + busy_wait_ms(20); /* Stop the timer. */ lp_timer.stop(); @@ -145,7 +157,7 @@ void test_lptimer_time_accumulation() lp_timer.start(); /* Wait 30 ms. */ - wait_ms(30); + busy_wait_ms(30); /* Stop the timer. */ lp_timer.stop(); @@ -159,7 +171,7 @@ void test_lptimer_time_accumulation() /* Wait 50 ms - this is done to show that time elapsed when * the timer is stopped does not have influence on the * timer time. */ - wait_ms(50); + busy_wait_ms(50); /* ------ */ @@ -167,7 +179,7 @@ void test_lptimer_time_accumulation() lp_timer.start(); /* Wait 1 sec. */ - wait_ms(1000); + busy_wait_ms(1000); /* Stop the timer. */ lp_timer.stop(); @@ -196,7 +208,7 @@ void test_lptimer_reset() lp_timer.start(); /* Wait 10 ms. */ - wait_ms(10); + busy_wait_ms(10); /* Stop the timer. */ lp_timer.stop(); @@ -214,7 +226,7 @@ void test_lptimer_reset() lp_timer.start(); /* Wait 20 ms. */ - wait_ms(20); + busy_wait_ms(20); /* Stop the timer. */ lp_timer.stop(); @@ -241,13 +253,13 @@ void test_lptimer_start_started_timer() lp_timer.start(); /* Wait 10 ms. */ - wait_ms(10); + busy_wait_ms(10); /* Now start timer again. */ lp_timer.start(); /* Wait 20 ms. */ - wait_ms(20); + busy_wait_ms(20); /* Stop the timer. */ lp_timer.stop(); @@ -274,7 +286,7 @@ void test_lptimer_float_operator() lp_timer.start(); /* Wait 10 ms. */ - wait_ms(10); + busy_wait_ms(10); /* Stop the timer. */ lp_timer.stop(); @@ -302,7 +314,7 @@ void test_lptimer_time_measurement() lp_timer.start(); /* Wait us. */ - wait_us(wait_val_us); + busy_wait_us(wait_val_us); /* Stop the timer. */ lp_timer.stop(); From 4b78a7c6f06637148052d450c5d2fb38dc865d52 Mon Sep 17 00:00:00 2001 From: Hasnain Virk Date: Tue, 10 Jul 2018 13:44:09 +0300 Subject: [PATCH 093/113] FRMPayload size validity It was pointed out in #7432 and #7232 that the stack was comparing frame payload size with the allowed payload size in a wrong manner in shcedule_tx(). We must strip the overhead from the frame before comparison. We did have a similar check in prepare_ongoing_tx() API which would correctly analyse the situation but a check was needed in schedule_tx() as well. The reason is that the schedule_tx() API can be called automatically by the stack if the user intiated requested was not promptly entertained because of duty cycle restriction. Now, the datarate can change here (for CONFIRMED messages if the ack was not received after retries max out). That's why a test for validity was needed. We now perform a comparison using _ongoing_tx_message structure which contains the actual FRMPayload size. For proprietary type of messages only MHDR and Port field is used so we shouldn't add MAC commands and other overhead into them. In order to have consistent frame overhead, we have opted to always include Port field in the frame. --- features/lorawan/lorastack/mac/LoRaMac.cpp | 96 +++++++++++++--------- features/lorawan/lorastack/mac/LoRaMac.h | 29 ++++--- 2 files changed, 75 insertions(+), 50 deletions(-) diff --git a/features/lorawan/lorastack/mac/LoRaMac.cpp b/features/lorawan/lorastack/mac/LoRaMac.cpp index 69ed9b0b4f0..be19338f744 100644 --- a/features/lorawan/lorastack/mac/LoRaMac.cpp +++ b/features/lorawan/lorastack/mac/LoRaMac.cpp @@ -1034,6 +1034,7 @@ lorawan_status_t LoRaMac::schedule_tx() { channel_selection_params_t next_channel; lorawan_time_t backoff_time = 0; + uint8_t fopts_len = 0; if (_params.sys_params.max_duty_cycle == 255) { return LORAWAN_STATUS_DEVICE_OFF; @@ -1091,9 +1092,25 @@ lorawan_status_t LoRaMac::schedule_tx() _params.rx_window2_delay = _params.sys_params.join_accept_delay2 + _params.rx_window2_config.window_offset; } else { - if (validate_payload_length(_params.tx_buffer_len, + + // if the outgoing message is a proprietary message, it doesn't include any + // standard message formatting except port and MHDR. + if (_ongoing_tx_msg.type == MCPS_PROPRIETARY) { + fopts_len = 0; + } else { + fopts_len = _mac_commands.get_mac_cmd_length() + _mac_commands.get_repeat_commands_length(); + } + + // A check was performed for validity of FRMPayload in ::prepare_ongoing_tx() API. + // However, owing to the asynch nature of the send() API, we should check the + // validity again, as datarate may have changed since we last attempted to transmit. + if (validate_payload_length(_ongoing_tx_msg.f_buffer_size, _params.sys_params.channel_data_rate, - _mac_commands.get_mac_cmd_length()) == false) { + fopts_len) == false) { + tr_error("Allowed FRMPayload = %d, FRMPayload = %d, MAC commands pending = %d", + _lora_phy->get_max_payload(_params.sys_params.channel_data_rate, + _params.is_repeater_supported), + _ongoing_tx_msg.f_buffer_size, fopts_len); return LORAWAN_STATUS_LENGTH_ERROR; } _params.rx_window1_delay = _params.sys_params.recv_delay1 @@ -1216,27 +1233,9 @@ int16_t LoRaMac::prepare_ongoing_tx(const uint8_t port, uint8_t num_retries) { _ongoing_tx_msg.port = port; - - uint8_t max_possible_size = get_max_possible_tx_size(length); - - if (max_possible_size > MBED_CONF_LORA_TX_MAX_SIZE) { - max_possible_size = MBED_CONF_LORA_TX_MAX_SIZE; - } - - if (max_possible_size < length) { - tr_info("Cannot transmit %d bytes. Possible TX Size is %d bytes", - length, max_possible_size); - - _ongoing_tx_msg.pending_size = length - max_possible_size; - _ongoing_tx_msg.f_buffer_size = max_possible_size; - memcpy(_ongoing_tx_msg.f_buffer, data, _ongoing_tx_msg.f_buffer_size); - } else { - _ongoing_tx_msg.f_buffer_size = length; - _ongoing_tx_msg.pending_size = 0; - if (length > 0) { - memcpy(_ongoing_tx_msg.f_buffer, data, length); - } - } + uint8_t max_possible_size = 0; + uint8_t fopts_len = _mac_commands.get_mac_cmd_length() + + _mac_commands.get_repeat_commands_length(); // Handles unconfirmed messages if (flags & MSG_UNCONFIRMED_FLAG) { @@ -1257,6 +1256,30 @@ int16_t LoRaMac::prepare_ongoing_tx(const uint8_t port, _ongoing_tx_msg.type = MCPS_PROPRIETARY; _ongoing_tx_msg.fport = port; _ongoing_tx_msg.nb_trials = 1; + // a proprietary frame only includes an MHDR field which contains MTYPE field. + // Everything else is at the discretion of the implementer + fopts_len = 0; + } + + max_possible_size = get_max_possible_tx_size(fopts_len); + + if (max_possible_size > MBED_CONF_LORA_TX_MAX_SIZE) { + max_possible_size = MBED_CONF_LORA_TX_MAX_SIZE; + } + + if (max_possible_size < length) { + tr_info("Cannot transmit %d bytes. Possible TX Size is %d bytes", + length, max_possible_size); + + _ongoing_tx_msg.pending_size = length - max_possible_size; + _ongoing_tx_msg.f_buffer_size = max_possible_size; + memcpy(_ongoing_tx_msg.f_buffer, data, _ongoing_tx_msg.f_buffer_size); + } else { + _ongoing_tx_msg.f_buffer_size = length; + _ongoing_tx_msg.pending_size = 0; + if (length > 0) { + memcpy(_ongoing_tx_msg.f_buffer, data, length); + } } tr_info("RTS = %u bytes, PEND = %u, Port: %u", @@ -1567,8 +1590,10 @@ lorawan_status_t LoRaMac::prepare_frame(loramac_mhdr_t *machdr, _mac_commands.parse_mac_commands_to_repeat(); + // We always add Port Field. Spec leaves it optional. + _params.tx_buffer[pkt_header_len++] = frame_port; + if ((payload != NULL) && (_params.tx_buffer_len > 0)) { - _params.tx_buffer[pkt_header_len++] = frame_port; uint8_t *key = _params.keys.app_skey; uint32_t key_length = sizeof(_params.keys.app_skey) * 8; @@ -1759,12 +1784,10 @@ void LoRaMac::disconnect() reset_mcps_indication(); } -uint8_t LoRaMac::get_max_possible_tx_size(uint8_t size) +uint8_t LoRaMac::get_max_possible_tx_size(uint8_t fopts_len) { uint8_t max_possible_payload_size = 0; - uint8_t current_payload_size = 0; - uint8_t fopt_len = _mac_commands.get_mac_cmd_length() - + _mac_commands.get_repeat_commands_length(); + uint8_t allowed_frm_payload_size = 0; if (_params.sys_params.adr_on) { _lora_phy.get_next_ADR(false, _params.sys_params.channel_data_rate, @@ -1772,22 +1795,19 @@ uint8_t LoRaMac::get_max_possible_tx_size(uint8_t size) _params.adr_ack_counter); } - current_payload_size = _lora_phy.get_max_payload(_params.sys_params.channel_data_rate, _params.is_repeater_supported); + allowed_frm_payload_size = _lora_phy->get_max_payload(_params.sys_params.channel_data_rate, + _params.is_repeater_supported); - if (current_payload_size >= fopt_len) { - max_possible_payload_size = current_payload_size - fopt_len; + if (allowed_frm_payload_size >= fopts_len) { + max_possible_payload_size = allowed_frm_payload_size - fopts_len; } else { - max_possible_payload_size = current_payload_size; - fopt_len = 0; + max_possible_payload_size = allowed_frm_payload_size; + fopts_len = 0; _mac_commands.clear_command_buffer(); _mac_commands.clear_repeat_buffer(); } - if (validate_payload_length(size, _params.sys_params.channel_data_rate, - fopt_len) == false) { - return max_possible_payload_size; - } - return current_payload_size; + return max_possible_payload_size; } bool LoRaMac::nwk_joined() diff --git a/features/lorawan/lorastack/mac/LoRaMac.h b/features/lorawan/lorastack/mac/LoRaMac.h index 915cb5ce163..4b4698068e6 100644 --- a/features/lorawan/lorastack/mac/LoRaMac.h +++ b/features/lorawan/lorastack/mac/LoRaMac.h @@ -94,18 +94,18 @@ class LoRaMac { void disconnect(void); /** - * @brief Queries the LoRaMAC whether it is possible to send the next frame with - * a given payload size. The LoRaMAC takes the scheduled MAC commands into - * account and returns corresponding value. + * @brief Queries the LoRaMAC the maximum possible FRMPayload size to send. + * The LoRaMAC takes the scheduled MAC commands into account and returns + * corresponding value. * - * @param size [in] The size of the applicable payload to be sent next. + * @param fopts_len [in] Number of mac commands in the queue pending. * * @return Size of the biggest packet that can be sent. * Please note that if the size of the MAC commands in the queue do * not fit into the payload size on the related datarate, the LoRaMAC will * omit the MAC commands. */ - uint8_t get_max_possible_tx_size(uint8_t size); + uint8_t get_max_possible_tx_size(uint8_t fopts_len); /** * @brief nwk_joined Checks if device has joined to network @@ -324,13 +324,18 @@ class LoRaMac { /** * @brief prepare_ongoing_tx This will prepare (and override) ongoing_tx_msg. - * @param port The application port number. - * @param data A pointer to the data being sent. The ownership of the - * buffer is not transferred. - * @param length The size of data in bytes. - * @param flags A flag used to determine what type of - * message is being sent. - * @param num_retries Number of retries for a confirmed type message + * @param port The application port number. + * + * @param data A pointer to the data being sent. The ownership of the + * buffer is not transferred. + * + * @param length The size of data in bytes. + * + * @param flags A flag used to determine what type of + * message is being sent. + * + * @param num_retries Number of retries for a confirmed type message + * * @return The number of bytes prepared for sending. */ int16_t prepare_ongoing_tx(const uint8_t port, const uint8_t *data, From 656c1ca660cc045f1018b17c9e8767148110a0ac Mon Sep 17 00:00:00 2001 From: Hasnain Virk Date: Thu, 12 Jul 2018 12:14:25 +0300 Subject: [PATCH 094/113] Correcting unit for timeout timeout unit should be ms not micro second. --- features/lorawan/LoRaRadio.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/lorawan/LoRaRadio.h b/features/lorawan/LoRaRadio.h index c586d59fc7a..51b9dd10aca 100644 --- a/features/lorawan/LoRaRadio.h +++ b/features/lorawan/LoRaRadio.h @@ -281,7 +281,7 @@ class LoRaRadio * @param iq_inverted Inverts IQ signals (LoRa only) * FSK : N/A (set to 0). * LoRa: [0: not inverted, 1: inverted] - * @param timeout The transmission timeout [us]. + * @param timeout The transmission timeout [ms]. */ virtual void set_tx_config(radio_modems_t modem, int8_t power, uint32_t fdev, uint32_t bandwidth, uint32_t datarate, From b47356f07c10b664d0058ef2120c9933c9360960 Mon Sep 17 00:00:00 2001 From: Ari Parkkila Date: Mon, 25 Jun 2018 14:05:12 +0300 Subject: [PATCH 095/113] Cellular: Removed max_packet_size --- .../at/at_cellularstack/test_at_cellularstack.cpp | 6 ------ features/cellular/framework/AT/AT_CellularStack.cpp | 5 +---- features/cellular/framework/AT/AT_CellularStack.h | 5 ----- .../QUECTEL/BC95/QUECTEL_BC95_CellularStack.cpp | 11 +++-------- .../targets/QUECTEL/BC95/QUECTEL_BC95_CellularStack.h | 3 --- .../QUECTEL/BG96/QUECTEL_BG96_CellularStack.cpp | 5 ----- .../targets/QUECTEL/BG96/QUECTEL_BG96_CellularStack.h | 3 --- 7 files changed, 4 insertions(+), 34 deletions(-) diff --git a/features/cellular/UNITTESTS/at/at_cellularstack/test_at_cellularstack.cpp b/features/cellular/UNITTESTS/at/at_cellularstack/test_at_cellularstack.cpp index 331dde5027d..a489faf474c 100644 --- a/features/cellular/UNITTESTS/at/at_cellularstack/test_at_cellularstack.cpp +++ b/features/cellular/UNITTESTS/at/at_cellularstack/test_at_cellularstack.cpp @@ -34,7 +34,6 @@ class MyStack : public AT_CellularStack { bool bool_value; bool max_sock_value; nsapi_error_t create_error; - int max_packet_size; CellularSocket socket; MyStack(ATHandler &atr, int cid, nsapi_ip_stack_t typ) : AT_CellularStack(atr, cid, typ) @@ -42,13 +41,10 @@ class MyStack : public AT_CellularStack { bool_value = false; max_sock_value = 0; create_error = NSAPI_ERROR_OK; - max_packet_size = 0; } virtual int get_max_socket_count(){return max_sock_value;} - virtual int get_max_packet_size(){return max_packet_size;} - virtual bool is_protocol_supported(nsapi_protocol_t protocol){return bool_value;} virtual nsapi_error_t socket_close_impl(int sock_id){return NSAPI_ERROR_OK;} @@ -266,7 +262,6 @@ void Test_AT_CellularStack::test_AT_CellularStack_socket_sendto() CHECK(NSAPI_ERROR_CONNECTION_LOST == st.socket_sendto(sock, addr, "addr", 4)); st.create_error = NSAPI_ERROR_OK; - st.max_packet_size = 6; CHECK(NSAPI_ERROR_OK == st.socket_sendto(sock, addr, "addr", 4)); } @@ -301,7 +296,6 @@ void Test_AT_CellularStack::test_AT_CellularStack_socket_recvfrom() CHECK(NSAPI_ERROR_CONNECTION_LOST == st.socket_recvfrom(sock, &addr, table, 4)); st.create_error = NSAPI_ERROR_OK; - st.max_packet_size = 6; CHECK(NSAPI_ERROR_OK == st.socket_recvfrom(sock, &addr, table, 4)); } diff --git a/features/cellular/framework/AT/AT_CellularStack.cpp b/features/cellular/framework/AT/AT_CellularStack.cpp index df9753fa0a1..df6f1c9348e 100644 --- a/features/cellular/framework/AT/AT_CellularStack.cpp +++ b/features/cellular/framework/AT/AT_CellularStack.cpp @@ -257,11 +257,8 @@ nsapi_size_or_error_t AT_CellularStack::socket_sendto(nsapi_socket_t handle, con } } - unsigned max_packet_size = get_max_packet_size(); - /* Check parameters */ - if (addr.get_ip_version() == NSAPI_UNSPEC || - size > max_packet_size) { + if (addr.get_ip_version() == NSAPI_UNSPEC) { return NSAPI_ERROR_DEVICE_ERROR; } diff --git a/features/cellular/framework/AT/AT_CellularStack.h b/features/cellular/framework/AT/AT_CellularStack.h index 04682f26031..5f3cf5e1d31 100644 --- a/features/cellular/framework/AT/AT_CellularStack.h +++ b/features/cellular/framework/AT/AT_CellularStack.h @@ -105,11 +105,6 @@ class AT_CellularStack : public NetworkStack, public AT_CellularBase */ virtual int get_max_socket_count() = 0; - /** - * Gets maximum packet size - */ - virtual int get_max_packet_size() = 0; - /** * Checks if modem supports the given protocol * diff --git a/features/cellular/framework/targets/QUECTEL/BC95/QUECTEL_BC95_CellularStack.cpp b/features/cellular/framework/targets/QUECTEL/BC95/QUECTEL_BC95_CellularStack.cpp index ccdcb05a10e..b8c3bcc13ca 100644 --- a/features/cellular/framework/targets/QUECTEL/BC95/QUECTEL_BC95_CellularStack.cpp +++ b/features/cellular/framework/targets/QUECTEL/BC95/QUECTEL_BC95_CellularStack.cpp @@ -61,11 +61,6 @@ int QUECTEL_BC95_CellularStack::get_max_socket_count() return BC95_SOCKET_MAX; } -int QUECTEL_BC95_CellularStack::get_max_packet_size() -{ - return BC95_MAX_PACKET_SIZE; -} - bool QUECTEL_BC95_CellularStack::is_protocol_supported(nsapi_protocol_t protocol) { return (protocol == NSAPI_UDP); @@ -146,7 +141,7 @@ nsapi_size_or_error_t QUECTEL_BC95_CellularStack::socket_sendto_impl(CellularSoc { int sent_len = 0; - char *hexstr = new char[BC95_MAX_PACKET_SIZE*2+1]; + char *hexstr = new char[size*2+1]; int hexlen = char_str_to_hex_str((const char*)data, size, hexstr); // NULL terminated for write_string hexstr[hexlen] = 0; @@ -154,7 +149,7 @@ nsapi_size_or_error_t QUECTEL_BC95_CellularStack::socket_sendto_impl(CellularSoc _at.write_int(socket->id); _at.write_string(address.get_ip_address(), false); _at.write_int(address.get_port()); - _at.write_int(size <= BC95_MAX_PACKET_SIZE ? size : BC95_MAX_PACKET_SIZE); + _at.write_int(size); _at.write_string(hexstr, false); _at.cmd_stop(); _at.resp_start(); @@ -181,7 +176,7 @@ nsapi_size_or_error_t QUECTEL_BC95_CellularStack::socket_recvfrom_impl(CellularS _at.cmd_start("AT+NSORF="); _at.write_int(socket->id); - _at.write_int(size <= BC95_MAX_PACKET_SIZE ? size : BC95_MAX_PACKET_SIZE); + _at.write_int(size); _at.cmd_stop(); _at.resp_start(); // receiving socket id diff --git a/features/cellular/framework/targets/QUECTEL/BC95/QUECTEL_BC95_CellularStack.h b/features/cellular/framework/targets/QUECTEL/BC95/QUECTEL_BC95_CellularStack.h index 616240b41da..91dc7499a93 100644 --- a/features/cellular/framework/targets/QUECTEL/BC95/QUECTEL_BC95_CellularStack.h +++ b/features/cellular/framework/targets/QUECTEL/BC95/QUECTEL_BC95_CellularStack.h @@ -21,7 +21,6 @@ #include "AT_CellularStack.h" #define BC95_SOCKET_MAX 7 -#define BC95_MAX_PACKET_SIZE 1358 namespace mbed { @@ -42,8 +41,6 @@ class QUECTEL_BC95_CellularStack : public AT_CellularStack virtual int get_max_socket_count(); - virtual int get_max_packet_size(); - virtual bool is_protocol_supported(nsapi_protocol_t protocol); virtual nsapi_error_t socket_close_impl(int sock_id); diff --git a/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96_CellularStack.cpp b/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96_CellularStack.cpp index 12120bb59c3..deb03b55e85 100644 --- a/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96_CellularStack.cpp +++ b/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96_CellularStack.cpp @@ -64,11 +64,6 @@ int QUECTEL_BG96_CellularStack::get_max_socket_count() return BG96_SOCKET_MAX; } -int QUECTEL_BG96_CellularStack::get_max_packet_size() -{ - return BG96_MAX_PACKET_SIZE; -} - bool QUECTEL_BG96_CellularStack::is_protocol_supported(nsapi_protocol_t protocol) { return (protocol == NSAPI_UDP); diff --git a/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96_CellularStack.h b/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96_CellularStack.h index af243ccfab7..1553e00153c 100644 --- a/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96_CellularStack.h +++ b/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96_CellularStack.h @@ -23,7 +23,6 @@ namespace mbed { #define BG96_SOCKET_MAX 12 -#define BG96_MAX_PACKET_SIZE 1460 #define BG96_CREATE_SOCKET_TIMEOUT 150000 //150 seconds class QUECTEL_BG96_CellularStack : public AT_CellularStack @@ -43,8 +42,6 @@ class QUECTEL_BG96_CellularStack : public AT_CellularStack virtual int get_max_socket_count(); - virtual int get_max_packet_size(); - virtual bool is_protocol_supported(nsapi_protocol_t protocol); virtual nsapi_error_t socket_close_impl(int sock_id); From 1ba18427b17a7c075e47f367a1dabb7b9180d240 Mon Sep 17 00:00:00 2001 From: Mirela Chirica Date: Wed, 11 Jul 2018 13:45:00 +0300 Subject: [PATCH 096/113] Cellular: Fix socket_send unit test --- .../UNITTESTS/at/at_cellularstack/test_at_cellularstack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/cellular/UNITTESTS/at/at_cellularstack/test_at_cellularstack.cpp b/features/cellular/UNITTESTS/at/at_cellularstack/test_at_cellularstack.cpp index a489faf474c..973b3fdd081 100644 --- a/features/cellular/UNITTESTS/at/at_cellularstack/test_at_cellularstack.cpp +++ b/features/cellular/UNITTESTS/at/at_cellularstack/test_at_cellularstack.cpp @@ -239,7 +239,7 @@ void Test_AT_CellularStack::test_AT_CellularStack_socket_send() nsapi_socket_t sock = &st.socket; st.socket_open(&sock, NSAPI_TCP); st.socket_connect(sock, addr); - CHECK(NSAPI_ERROR_DEVICE_ERROR == st.socket_send(sock, "addr", 4)); + CHECK(NSAPI_ERROR_OK == st.socket_send(sock, "addr", 4)); } void Test_AT_CellularStack::test_AT_CellularStack_socket_sendto() From be63f96dd719d93d0633b23424bff1434f78beb5 Mon Sep 17 00:00:00 2001 From: Deepika Date: Fri, 6 Jul 2018 11:27:08 -0500 Subject: [PATCH 097/113] Separate version header file to get version updates in Mbed OS --- mbed.h | 17 +--------- platform/mbed_version.h | 71 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 16 deletions(-) create mode 100644 platform/mbed_version.h diff --git a/mbed.h b/mbed.h index 84f276b6d85..a1553b7d840 100644 --- a/mbed.h +++ b/mbed.h @@ -16,23 +16,8 @@ #ifndef MBED_H #define MBED_H -#define MBED_LIBRARY_VERSION 163 +#include "platform/mbed_version.h" -#if MBED_CONF_RTOS_PRESENT -// RTOS present, this is valid only for mbed OS 5 -#define MBED_MAJOR_VERSION 5 -#define MBED_MINOR_VERSION 9 -#define MBED_PATCH_VERSION 2 - -#else -// mbed 2 -#define MBED_MAJOR_VERSION 2 -#define MBED_MINOR_VERSION 0 -#define MBED_PATCH_VERSION MBED_LIBRARY_VERSION -#endif - -#define MBED_ENCODE_VERSION(major, minor, patch) ((major)*10000 + (minor)*100 + (patch)) -#define MBED_VERSION MBED_ENCODE_VERSION(MBED_MAJOR_VERSION, MBED_MINOR_VERSION, MBED_PATCH_VERSION) #if MBED_CONF_RTOS_PRESENT #include "rtos/rtos.h" #endif diff --git a/platform/mbed_version.h b/platform/mbed_version.h new file mode 100644 index 00000000000..650f5396a76 --- /dev/null +++ b/platform/mbed_version.h @@ -0,0 +1,71 @@ + +/** \addtogroup platform */ +/** @{*/ +/** + * \defgroup platform_version Version macros + * @{ + */ +/* mbed Microcontroller Library + * Copyright (c) 2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBED_VERSION_H +#define MBED_VERSION_H + +/** MBED_MAJOR_VERSION + * Mbed OS major version + * + * @note 99 is default value for development version (master branch) + */ +#define MBED_MAJOR_VERSION 99 + +/** MBED_MINOR_VERSION + * Mbed OS minor version + * + * @note 99 is default value for development version (master branch) + */ +#define MBED_MINOR_VERSION 99 + +/** MBED_PATCH_VERSION + * Mbed OS patch version + * + * @note 99 is default value for development version (master branch) + */ +#define MBED_PATCH_VERSION 99 + +#define MBED_ENCODE_VERSION(major, minor, patch) ((major)*10000 + (minor)*100 + (patch)) + +/** MBED_VERSION + * Mbed OS 5 version (MMmmpp - M(Major); m(minor); p(patch)) + * + * @note 999999 is default value for development version (master branch) + */ +#define MBED_VERSION MBED_ENCODE_VERSION(MBED_MAJOR_VERSION, MBED_MINOR_VERSION, MBED_PATCH_VERSION) + +/** MBED_VERSION_CHECK + * Macro can be used to check minimum Mbed OS version required for feature/library. If current version + * is less than required, it will assert. + * + * @note: Version of master branch will be 999999 as default, hence no assert/warning is provided for + * master branch code + */ +#define MBED_VERSION_CHECK(major, minor, patch) do { \ + MBED_STATIC_ASSERT((MBED_VERSION >= MBED_ENCODE_VERSION((major),(minor),(patch))), "Incompatible mbed-os version detected!!"); \ + } while(0) + +#endif + +/** @}*/ +/** @}*/ From b45643018cd42297638b722ed6c60e6bedfb8656 Mon Sep 17 00:00:00 2001 From: Martin Kojtal Date: Tue, 10 Jul 2018 12:23:34 +0100 Subject: [PATCH 098/113] Raytac: target removal No files to build - should not be in targets Reverts part of the https://github.com/ARMmbed/mbed-os/pull/6178 --- targets/targets.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/targets/targets.json b/targets/targets.json index 24db3ad4c08..6cf7cea477c 100755 --- a/targets/targets.json +++ b/targets/targets.json @@ -3634,6 +3634,12 @@ }, "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE"] }, + "MCU_NRF51_16K_UNIFIED_S130": { + "inherits": ["MCU_NRF51_UNIFIED"], + "extra_labels_add": ["MCU_NORDIC_16K", "MCU_NRF51_16K_S130", "MCU_NRF51_16K"], + "macros_add": ["TARGET_MCU_NORDIC_16K", "TARGET_MCU_NRF51_16K_S130", "TARGET_MCU_NRF51_16K"], + "public": false + }, "MCU_NRF51_32K_UNIFIED": { "inherits": ["MCU_NRF51_UNIFIED"], "extra_labels_add": ["MCU_NORDIC_32K", "MCU_NRF51_32K"], From 2d4270ac7bdce5057810279068beb138a0d4141f Mon Sep 17 00:00:00 2001 From: Hasnain Virk Date: Fri, 6 Jul 2018 13:11:52 +0300 Subject: [PATCH 099/113] LoRaWAN: Handling re-joining when already Joined This is a remedy for the issue #7230. While the device is joining, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned. However, if the device is already joined, we will return LORAWAN_STATUS_ALREADY_CONNECTED. --- features/lorawan/LoRaWANStack.cpp | 10 +++++++++- features/lorawan/lorastack/mac/LoRaMac.cpp | 6 ++++-- features/lorawan/lorawan_types.h | 9 +++++---- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/features/lorawan/LoRaWANStack.cpp b/features/lorawan/LoRaWANStack.cpp index 9e5bb1698ae..8c431f75c82 100644 --- a/features/lorawan/LoRaWANStack.cpp +++ b/features/lorawan/LoRaWANStack.cpp @@ -155,6 +155,10 @@ lorawan_status_t LoRaWANStack::connect() return LORAWAN_STATUS_NOT_INITIALIZED; } + if (_loramac.nwk_joined()) { + return LORAWAN_STATUS_ALREADY_CONNECTED; + } + lorawan_status_t status = _loramac.prepare_join(NULL, MBED_CONF_LORA_OVER_THE_AIR_ACTIVATION); if (LORAWAN_STATUS_OK != status) { @@ -170,6 +174,10 @@ lorawan_status_t LoRaWANStack::connect(const lorawan_connect_t &connect) return LORAWAN_STATUS_NOT_INITIALIZED; } + if (_loramac.nwk_joined()) { + return LORAWAN_STATUS_ALREADY_CONNECTED; + } + if (!(connect.connect_type == LORAWAN_CONNECTION_OTAA) && !(connect.connect_type == LORAWAN_CONNECTION_ABP)) { return LORAWAN_STATUS_PARAMETER_INVALID; @@ -1170,7 +1178,7 @@ void LoRaWANStack::process_connecting_state(lorawan_status_t &op_status) if (_ctrl_flags & CONNECTED_FLAG) { tr_debug("Already connected"); - op_status = LORAWAN_STATUS_OK; + op_status = LORAWAN_STATUS_ALREADY_CONNECTED; return; } diff --git a/features/lorawan/lorastack/mac/LoRaMac.cpp b/features/lorawan/lorastack/mac/LoRaMac.cpp index be19338f744..2d5231b6c0f 100644 --- a/features/lorawan/lorastack/mac/LoRaMac.cpp +++ b/features/lorawan/lorastack/mac/LoRaMac.cpp @@ -814,9 +814,11 @@ lorawan_status_t LoRaMac::send_join_request() status = prepare_frame(&mac_hdr, &fctrl, 0, NULL, 0); if (status == LORAWAN_STATUS_OK) { - status = schedule_tx(); + if (schedule_tx() == LORAWAN_STATUS_OK) { + status = LORAWAN_STATUS_CONNECT_IN_PROGRESS; + } } else { - tr_error("Retransmission: error %d", status); + tr_error("Couldn't send a JoinRequest: error %d", status); } return status; diff --git a/features/lorawan/lorawan_types.h b/features/lorawan/lorawan_types.h index c6171d78ce3..72fb199fdd8 100644 --- a/features/lorawan/lorawan_types.h +++ b/features/lorawan/lorawan_types.h @@ -98,10 +98,11 @@ typedef enum lorawan_status { #if defined(LORAWAN_COMPLIANCE_TEST) LORAWAN_STATUS_COMPLIANCE_TEST_ON = -1019, /**< Compliance test - is on-going */ #endif - LORAWAN_STATUS_DUTYCYCLE_RESTRICTED = -1020, - LORAWAN_STATUS_NO_CHANNEL_FOUND = -1021, - LORAWAN_STATUS_NO_FREE_CHANNEL_FOUND = -1022, - LORAWAN_STATUS_METADATA_NOT_AVAILABLE = -1023 + LORAWAN_STATUS_DUTYCYCLE_RESTRICTED = -1020, /**< Transmission will continue after duty cycle backoff*/ + LORAWAN_STATUS_NO_CHANNEL_FOUND = -1021, /**< None of the channels is enabled at the moment*/ + LORAWAN_STATUS_NO_FREE_CHANNEL_FOUND = -1022, /**< None of the enabled channels is ready for another TX (duty cycle limited)*/ + LORAWAN_STATUS_METADATA_NOT_AVAILABLE = -1023, /**< Meta-data after an RX or TX is stale*/ + LORAWAN_STATUS_ALREADY_CONNECTED = -1024 /**< The device has already joined a network*/ } lorawan_status_t; /** The lorawan_connect_otaa structure. From d1a759b0a35ab945699ff966601b23a7bf6f41cb Mon Sep 17 00:00:00 2001 From: Hasnain Virk Date: Mon, 9 Jul 2018 12:57:54 +0300 Subject: [PATCH 100/113] Updating docs API documentation is updated to clear how the connection related return codes will work from now on. --- features/lorawan/LoRaWANBase.h | 21 ++++++-- features/lorawan/LoRaWANInterface.h | 22 +++++--- features/lorawan/LoRaWANStack.h | 81 ++++++----------------------- 3 files changed, 49 insertions(+), 75 deletions(-) diff --git a/features/lorawan/LoRaWANBase.h b/features/lorawan/LoRaWANBase.h index 36a1ee5979b..6d9afcd2ac6 100644 --- a/features/lorawan/LoRaWANBase.h +++ b/features/lorawan/LoRaWANBase.h @@ -41,8 +41,14 @@ class LoRaWANBase { * Connect by Over The Air Activation or Activation By Personalization. * The connection type is selected at the setup. * - * @return LORAWAN_STATUS_OK on success, a negative error code on - * failure. + * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by + * a 'CONNECTED' event. Otherwise a negative error code. + * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. + * + * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned followed by + * a 'CONNECTED' event when the JoinAccept is received. Otherwise a negative error code + * is returned. Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no + * event follows. */ virtual lorawan_status_t connect() = 0; @@ -53,8 +59,15 @@ class LoRaWANBase { * You need to define the parameters in the main application. * * @param connect Options how end-device will connect to gateway - * @return LORAWAN_STATUS_OK on success, negative error code - * on failure + * + * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by + * a 'CONNECTED' event. Otherwise a negative error code. + * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. + * + * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned followed by + * a 'CONNECTED' event when the JoinAccept is received. Otherwise a negative error code + * is returned. Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no + * event follows. */ virtual lorawan_status_t connect(const lorawan_connect_t &connect) = 0; diff --git a/features/lorawan/LoRaWANInterface.h b/features/lorawan/LoRaWANInterface.h index 34e5e3a3ef8..5526ff83ff7 100644 --- a/features/lorawan/LoRaWANInterface.h +++ b/features/lorawan/LoRaWANInterface.h @@ -61,7 +61,6 @@ class LoRaWANInterface: public LoRaWANBase { * all user-configured channels except the Join/Default channels. A CF-List can * configure a maximum of five channels other than the default channels. * - * In case of ABP, the CONNECTED event is posted before the call to `connect()` returns. * To configure more channels, we recommend that you use the `set_channel_plan()` API after the connection. * By default, the PHY layers configure only the mandatory Join channels. The retransmission back-off restrictions * on these channels are severe and you may experience long delays or even failures in the confirmed traffic. @@ -80,8 +79,14 @@ class LoRaWANInterface: public LoRaWANBase { * is important, at least for ABP. That's why we try to restore frame counters from * session information after a disconnection. * - * @return LORAWAN_STATUS_OK or LORAWAN_STATUS_CONNECT_IN_PROGRESS - * on success, or a negative error code on failure. + * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by + * a 'CONNECTED' event. Otherwise a negative error code. + * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. + * + * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned followed by + * a 'CONNECTED' event when the JoinAccept is received. Otherwise a negative error code + * is returned. Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no + * event follows. */ virtual lorawan_status_t connect(); @@ -97,7 +102,6 @@ class LoRaWANInterface: public LoRaWANBase { * all user-configured channels except the Join/Default channels. A CF-List can * configure a maximum of five channels other than the default channels. * - * In case of ABP, the CONNECTED event is posted before the call to `connect()` returns. * To configure more channels, we recommend that you use the `set_channel_plan()` API after the connection. * By default, the PHY layers configure only the mandatory Join * channels. The retransmission back-off restrictions on these channels @@ -120,8 +124,14 @@ class LoRaWANInterface: public LoRaWANBase { * * @param connect Options for an end device connection to the gateway. * - * @return LORAWAN_STATUS_OK or LORAWAN_STATUS_CONNECT_IN_PROGRESS, - * a negative error code on failure. + * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by + * a 'CONNECTED' event. Otherwise a negative error code. + * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. + * + * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned followed by + * a 'CONNECTED' event when the JoinAccept is received. Otherwise a negative error code + * is returned. Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no + * event follows. */ virtual lorawan_status_t connect(const lorawan_connect_t &connect); diff --git a/features/lorawan/LoRaWANStack.h b/features/lorawan/LoRaWANStack.h index 21e85d752be..93414a1904d 100644 --- a/features/lorawan/LoRaWANStack.h +++ b/features/lorawan/LoRaWANStack.h @@ -84,78 +84,29 @@ class LoRaWANStack: private mbed::NonCopyable { /** Connect OTAA or ABP using Mbed-OS config system * - * Connect by Over The Air Activation or Activation By Personalization. - * You need to configure the connection properly via the Mbed OS configuration - * system. - * - * When connecting via OTAA, the return code for success (LORAWAN_STATUS_CONNECT_IN_PROGRESS) is negative. - * However, this is not a real error. It tells you that the connection is in progress and you will - * be notified of the completion via an event. By default, after the Join Accept message - * is received, base stations may provide the node with a CF-List that replaces - * all user-configured channels except the Join/Default channels. A CF-List can - * configure a maximum of five channels other than the default channels. - * - * In case of ABP, the CONNECTED event is posted before the call to `connect()` returns. - * To configure more channels, we recommend that you use the `set_channel_plan()` API after the connection. - * By default, the PHY layers configure only the mandatory Join channels. The retransmission back-off restrictions - * on these channels are severe and you may experience long delays or even failures in the confirmed traffic. - * If you add more channels, the aggregated duty cycle becomes much more relaxed as compared to the Join (default) channels only. - * - * **NOTES ON RECONNECTION:** - * Currently, the Mbed OS LoRaWAN implementation does not support non-volatile - * memory storage. Therefore, the state and frame counters cannot be restored after - * a power cycle. However, if you use the `disconnect()` API to shut down the LoRaWAN - * protocol, the state and frame counters are saved. Connecting again would try to - * restore the previous session. According to the LoRaWAN 1.0.2 specification, the frame counters are always reset - * to zero for OTAA and a new Join request lets the network server know - * that the counters need a reset. The same is said about the ABP but there - * is no way to convey this information to the network server. For a network - * server, an ABP device is always connected. That's why storing the frame counters - * is important, at least for ABP. That's why we try to restore frame counters from - * session information after a disconnection. - * - * @return LORAWAN_STATUS_OK or LORAWAN_STATUS_CONNECT_IN_PROGRESS - * on success, or a negative error code on failure. + * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by + * a 'CONNECTED' event. Otherwise a negative error code. + * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. + * + * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned followed by + * a 'CONNECTED' event when the JoinAccept is received. Otherwise a negative error code + * is returned. Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no + * event follows. */ lorawan_status_t connect(); /** Connect OTAA or ABP with parameters - * - * All connection parameters are chosen by the user and provided in the - * data structure passed down. - * - * When connecting via OTAA, the return code for success (LORAWAN_STATUS_CONNECT_IN_PROGRESS) is negative. - * However, this is not a real error. It tells you that connection is in progress and you will - * be notified of completion via an event. By default, after Join Accept message - * is received, base stations may provide the node with a CF-List which replaces - * all user-configured channels except the Join/Default channels. A CF-List can - * configure a maximum of five channels other than the default channels. - * - * In case of ABP, the CONNECTED event is posted before the call to `connect()` returns. - * To configure more channels, we recommend that you use the `set_channel_plan()` API after the connection. - * By default, the PHY layers configure only the mandatory Join - * channels. The retransmission back-off restrictions on these channels - * are severe and you may experience long delays or even - * failures in the confirmed traffic. If you add more channels, the aggregated duty - * cycle becomes much more relaxed as compared to the Join (default) channels only. - * - * **NOTES ON RECONNECTION:** - * Currently, the Mbed OS LoRaWAN implementation does not support non-volatile - * memory storage. Therefore, the state and frame counters cannot be restored after - * a power cycle. However, if you use the `disconnect()` API to shut down the LoRaWAN - * protocol, the state and frame counters are saved. Connecting again would try to - * restore the previous session. According to the LoRaWAN 1.0.2 specification, the frame counters are always reset - * to zero for OTAA and a new Join request lets the network server know - * that the counters need a reset. The same is said about the ABP but there - * is no way to convey this information to the network server. For a network - * server, an ABP device is always connected. That's why storing the frame counters - * is important, at least for ABP. That's why we try to restore frame counters from - * session information after a disconnection. * * @param connect Options for an end device connection to the gateway. * - * @return LORAWAN_STATUS_OK or LORAWAN_STATUS_CONNECT_IN_PROGRESS, - * a negative error code on failure. + * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by + * a 'CONNECTED' event. Otherwise a negative error code. + * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. + * + * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned followed by + * a 'CONNECTED' event when the JoinAccept is received. Otherwise a negative error code + * is returned. Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no + * event follows. */ lorawan_status_t connect(const lorawan_connect_t &connect); From b9333c6d95661ada6071c9bbe1b7fc1a4842ae51 Mon Sep 17 00:00:00 2001 From: Hasnain Virk Date: Tue, 10 Jul 2018 13:31:50 +0300 Subject: [PATCH 101/113] Streamlining connect() API with posix like retcodes For ABP: First call to connect() or connect(params) will return LORAWAN_STATUS_OK and a CONNECTED event will be sent. Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED (posix EISCONN) and no event is generated. FOR OTAA: First call to connect() or connect(params) will return LORAWAN_STATUS_CONNECT_IN_PROGRESS and a CONNECTED event will be sent whenever the JoinAccept is received. If the application calls connect again before receiving the CONNECTED event, LORAWAN_STATUS_BUSY will be returned. After the CONNECTED event is dispatched, any subsequent call to connect() or connect(params) API will be returned with LORWAN_STATUS_ALREADY_CONNECTED. No new parameters are accepted after the first call. The application must disconnect before making a connect() call with new parameters. --- features/lorawan/LoRaWANBase.h | 30 +++++++++++++-------------- features/lorawan/LoRaWANInterface.h | 30 +++++++++++++-------------- features/lorawan/LoRaWANStack.cpp | 32 ++++++++++++++++------------- features/lorawan/LoRaWANStack.h | 28 ++++++++++++------------- 4 files changed, 62 insertions(+), 58 deletions(-) diff --git a/features/lorawan/LoRaWANBase.h b/features/lorawan/LoRaWANBase.h index 6d9afcd2ac6..959f43d6dd9 100644 --- a/features/lorawan/LoRaWANBase.h +++ b/features/lorawan/LoRaWANBase.h @@ -41,14 +41,14 @@ class LoRaWANBase { * Connect by Over The Air Activation or Activation By Personalization. * The connection type is selected at the setup. * - * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by - * a 'CONNECTED' event. Otherwise a negative error code. - * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. - * - * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned followed by - * a 'CONNECTED' event when the JoinAccept is received. Otherwise a negative error code - * is returned. Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no - * event follows. + * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by + * a 'CONNECTED' event. Otherwise a negative error code is returned. + * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. + * + * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned for the first call. + * Any subsequent call will return either LORAWAN_STATUS_BUSY (if the previous request for connection + * is still underway) or LORAWAN_STATUS_ALREADY_CONNECTED (if a network was already joined successfully). + * A 'CONNECTED' event is sent to the application when the JoinAccept is received. */ virtual lorawan_status_t connect() = 0; @@ -60,14 +60,14 @@ class LoRaWANBase { * * @param connect Options how end-device will connect to gateway * - * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by - * a 'CONNECTED' event. Otherwise a negative error code. - * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. + * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by + * a 'CONNECTED' event. Otherwise a negative error code is returned. + * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. * - * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned followed by - * a 'CONNECTED' event when the JoinAccept is received. Otherwise a negative error code - * is returned. Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no - * event follows. + * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned for the first call. + * Any subsequent call will return either LORAWAN_STATUS_BUSY (if the previous request for connection + * is still underway) or LORAWAN_STATUS_ALREADY_CONNECTED (if a network was already joined successfully). + * A 'CONNECTED' event is sent to the application when the JoinAccept is received. */ virtual lorawan_status_t connect(const lorawan_connect_t &connect) = 0; diff --git a/features/lorawan/LoRaWANInterface.h b/features/lorawan/LoRaWANInterface.h index 5526ff83ff7..2b6984531eb 100644 --- a/features/lorawan/LoRaWANInterface.h +++ b/features/lorawan/LoRaWANInterface.h @@ -79,14 +79,14 @@ class LoRaWANInterface: public LoRaWANBase { * is important, at least for ABP. That's why we try to restore frame counters from * session information after a disconnection. * - * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by - * a 'CONNECTED' event. Otherwise a negative error code. - * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. - * - * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned followed by - * a 'CONNECTED' event when the JoinAccept is received. Otherwise a negative error code - * is returned. Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no - * event follows. + * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by + * a 'CONNECTED' event. Otherwise a negative error code is returned. + * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. + * + * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned for the first call. + * Any subsequent call will return either LORAWAN_STATUS_BUSY (if the previous request for connection + * is still underway) or LORAWAN_STATUS_ALREADY_CONNECTED (if a network was already joined successfully). + * A 'CONNECTED' event is sent to the application when the JoinAccept is received. */ virtual lorawan_status_t connect(); @@ -124,14 +124,14 @@ class LoRaWANInterface: public LoRaWANBase { * * @param connect Options for an end device connection to the gateway. * - * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by - * a 'CONNECTED' event. Otherwise a negative error code. - * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. + * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by + * a 'CONNECTED' event. Otherwise a negative error code is returned. + * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. * - * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned followed by - * a 'CONNECTED' event when the JoinAccept is received. Otherwise a negative error code - * is returned. Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no - * event follows. + * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned for the first call. + * Any subsequent call will return either LORAWAN_STATUS_BUSY (if the previous request for connection + * is still underway) or LORAWAN_STATUS_ALREADY_CONNECTED (if a network was already joined successfully). + * A 'CONNECTED' event is sent to the application when the JoinAccept is received. */ virtual lorawan_status_t connect(const lorawan_connect_t &connect); diff --git a/features/lorawan/LoRaWANStack.cpp b/features/lorawan/LoRaWANStack.cpp index 8c431f75c82..bda8454c45c 100644 --- a/features/lorawan/LoRaWANStack.cpp +++ b/features/lorawan/LoRaWANStack.cpp @@ -44,6 +44,7 @@ SPDX-License-Identifier: BSD-3-Clause #define CONNECTED_FLAG 0x00000004 #define USING_OTAA_FLAG 0x00000008 #define TX_DONE_FLAG 0x00000010 +#define CONN_IN_PROGRESS_FLAG 0x00000020 using namespace mbed; using namespace events; @@ -155,7 +156,11 @@ lorawan_status_t LoRaWANStack::connect() return LORAWAN_STATUS_NOT_INITIALIZED; } - if (_loramac.nwk_joined()) { + if (_ctrl_flags & CONN_IN_PROGRESS_FLAG) { + return LORAWAN_STATUS_BUSY; + } + + if (_ctrl_flags & CONNECTED_FLAG) { return LORAWAN_STATUS_ALREADY_CONNECTED; } @@ -174,7 +179,11 @@ lorawan_status_t LoRaWANStack::connect(const lorawan_connect_t &connect) return LORAWAN_STATUS_NOT_INITIALIZED; } - if (_loramac.nwk_joined()) { + if (_ctrl_flags & CONN_IN_PROGRESS_FLAG) { + return LORAWAN_STATUS_BUSY; + } + + if (_ctrl_flags & CONNECTED_FLAG) { return LORAWAN_STATUS_ALREADY_CONNECTED; } @@ -832,6 +841,8 @@ int LoRaWANStack::convert_to_msg_flag(const mcps_type_t type) lorawan_status_t LoRaWANStack::handle_connect(bool is_otaa) { + _ctrl_flags |= CONN_IN_PROGRESS_FLAG; + if (is_otaa) { tr_debug("Initiating OTAA"); @@ -1157,30 +1168,23 @@ void LoRaWANStack::process_joining_state(lorawan_status_t &op_status) void LoRaWANStack::process_connected_state() { + _ctrl_flags |= CONNECTED_FLAG; + _ctrl_flags &= ~CONN_IN_PROGRESS_FLAG; + if (_ctrl_flags & USING_OTAA_FLAG) { tr_debug("OTAA Connection OK!"); } _lw_session.active = true; send_event_to_application(CONNECTED); - _ctrl_flags |= CONNECTED_FLAG; _device_current_state = DEVICE_STATE_IDLE; } void LoRaWANStack::process_connecting_state(lorawan_status_t &op_status) { - if (_device_current_state != DEVICE_STATE_IDLE - && _device_current_state != DEVICE_STATE_SHUTDOWN) { - op_status = LORAWAN_STATUS_BUSY; - return; - } - - if (_ctrl_flags & CONNECTED_FLAG) { - tr_debug("Already connected"); - op_status = LORAWAN_STATUS_ALREADY_CONNECTED; - return; - } + MBED_ASSERT(_device_current_state == DEVICE_STATE_IDLE || + _device_current_state == DEVICE_STATE_SHUTDOWN); _device_current_state = DEVICE_STATE_CONNECTING; diff --git a/features/lorawan/LoRaWANStack.h b/features/lorawan/LoRaWANStack.h index 93414a1904d..d32d6688584 100644 --- a/features/lorawan/LoRaWANStack.h +++ b/features/lorawan/LoRaWANStack.h @@ -84,14 +84,14 @@ class LoRaWANStack: private mbed::NonCopyable { /** Connect OTAA or ABP using Mbed-OS config system * - * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by - * a 'CONNECTED' event. Otherwise a negative error code. - * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. + * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by + * a 'CONNECTED' event. Otherwise a negative error code is returned. + * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. * - * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned followed by - * a 'CONNECTED' event when the JoinAccept is received. Otherwise a negative error code - * is returned. Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no - * event follows. + * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned for the first call. + * Any subsequent call will return either LORAWAN_STATUS_BUSY (if the previous request for connection + * is still underway) or LORAWAN_STATUS_ALREADY_CONNECTED (if a network was already joined successfully). + * A 'CONNECTED' event is sent to the application when the JoinAccept is received. */ lorawan_status_t connect(); @@ -99,14 +99,14 @@ class LoRaWANStack: private mbed::NonCopyable { * * @param connect Options for an end device connection to the gateway. * - * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by - * a 'CONNECTED' event. Otherwise a negative error code. - * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. + * @return For ABP: If everything goes well, LORAWAN_STATUS_OK is returned for first call followed by + * a 'CONNECTED' event. Otherwise a negative error code is returned. + * Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no event follows. * - * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned followed by - * a 'CONNECTED' event when the JoinAccept is received. Otherwise a negative error code - * is returned. Any subsequent call will return LORAWAN_STATUS_ALREADY_CONNECTED and no - * event follows. + * For OTAA: When a JoinRequest is sent, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned for the first call. + * Any subsequent call will return either LORAWAN_STATUS_BUSY (if the previous request for connection + * is still underway) or LORAWAN_STATUS_ALREADY_CONNECTED (if a network was already joined successfully). + * A 'CONNECTED' event is sent to the application when the JoinAccept is received. */ lorawan_status_t connect(const lorawan_connect_t &connect); From aafb636b89fdb02db24c02fe1d0d0a8223a82a43 Mon Sep 17 00:00:00 2001 From: Naveen Kaje Date: Thu, 12 Jul 2018 12:03:25 -0500 Subject: [PATCH 102/113] Fix linker script for NRF52840/ARM --- .../TARGET_MCU_NRF52840/device/TOOLCHAIN_ARM_STD/nRF52840.sct | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52840/device/TOOLCHAIN_ARM_STD/nRF52840.sct b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52840/device/TOOLCHAIN_ARM_STD/nRF52840.sct index 8aaa8a42bac..5c61eecdfcb 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52840/device/TOOLCHAIN_ARM_STD/nRF52840.sct +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52840/device/TOOLCHAIN_ARM_STD/nRF52840.sct @@ -30,7 +30,7 @@ LR_IROM1 MBED_APP_START MBED_APP_SIZE { .ANY (+RO) } RW_IRAM0 MBED_RAM0_START UNINIT MBED_RAM0_SIZE { ;no init section - *(*noinit) + *(*nvictable) } RW_IRAM1 MBED_RAM1_START MBED_RAM1_SIZE { .ANY (+RW +ZI) From d897239afe588eeed8af5e3b0e36d2be233909af Mon Sep 17 00:00:00 2001 From: Naveen Kaje Date: Thu, 12 Jul 2018 12:05:47 -0500 Subject: [PATCH 103/113] NRF52832 linker script: formatting fix --- .../TARGET_MCU_NRF52832/device/TOOLCHAIN_ARM_STD/nRF52832.sct | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/device/TOOLCHAIN_ARM_STD/nRF52832.sct b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/device/TOOLCHAIN_ARM_STD/nRF52832.sct index db643cd9903..569e7c86eab 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/device/TOOLCHAIN_ARM_STD/nRF52832.sct +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/device/TOOLCHAIN_ARM_STD/nRF52832.sct @@ -26,8 +26,8 @@ LR_IROM1 MBED_APP_START MBED_APP_SIZE { ER_IROM1 MBED_APP_START MBED_APP_SIZE { *.o (RESET, +First) - *(InRoot$$Sections) - .ANY (+RO) + *(InRoot$$Sections) + .ANY (+RO) } RW_IRAM0 MBED_RAM0_START UNINIT MBED_RAM0_SIZE { ;no init section From bd23fa5b5afa2e36d33de01eb4623269eb88b499 Mon Sep 17 00:00:00 2001 From: Przemyslaw Stekiel Date: Thu, 12 Jul 2018 13:15:19 +0200 Subject: [PATCH 104/113] tests-mbed_hal-lp_ticker: change implementation of the delay before deep-sleep. Serial buffer must be flushed before entering deep sleep mode. In the test this is done by the additional delay which is implemented on the busy loop which decrements given value down to 0 (`void wait_cycles(volatile unsigned int cycles)`). This solution is not appropriate since it is very target specific and the cycles value has been already increased few times. Additionally very big number of loop cycles which is suitable for fast targets may take much longer on slower boards and results in test timeout. It has been verified that 20ms is sufficient delay for the green-tea transmission. In this test we cannot simply use `wait_ms(20)` since this potentially may put board to sleep and wake up using lp ticker. The test re-initialzies the lp ticker(disables ticker interrupt) and this operation may break the schedule and time tracing by the upper layer. But we can use us ticker which is not affected by this test. The solution is to add a delay routine based on busy loop and us ticker only. This way are able to wait exactly 20 ms. --- TESTS/mbed_hal/lp_ticker/main.cpp | 36 +++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/TESTS/mbed_hal/lp_ticker/main.cpp b/TESTS/mbed_hal/lp_ticker/main.cpp index 8c40e9c6677..92aa4c04770 100644 --- a/TESTS/mbed_hal/lp_ticker/main.cpp +++ b/TESTS/mbed_hal/lp_ticker/main.cpp @@ -29,6 +29,8 @@ using namespace utest::v1; volatile int intFlag = 0; +#define US_PER_MS 1000 + #define TICKER_GLITCH_TEST_TICKS 1000 #define TICKER_INT_VAL 500 @@ -36,6 +38,29 @@ volatile int intFlag = 0; #define LP_TICKER_OV_LIMIT 4000 +/* Flush serial buffer before deep sleep + * + * Since deepsleep() may shut down the UART peripheral, we wait for some time + * to allow for hardware serial buffers to completely flush. + * + * Take NUMAKER_PFM_NUC472 as an example: + * Its UART peripheral has 16-byte Tx FIFO. With baud rate set to 9600, flush + * Tx FIFO would take: 16 * 8 * 1000 / 9600 = 13.3 (ms). So set wait time to + * 20ms here for safe. + * + * This should be replaced with a better function that checks if the + * hardware buffers are empty. However, such an API does not exist now, + * so we'll use the busy_wait_ms() function for now. + */ +#define SERIAL_FLUSH_TIME_MS 20 + +void busy_wait_ms(int ms) +{ + const ticker_data_t *const ticker = get_us_ticker_data(); + uint32_t start = ticker_read(ticker); + while ((ticker_read(ticker) - start) < (uint32_t)(ms * US_PER_MS)); +} + /* Since according to the ticker requirements min acceptable counter size is * - 12 bits for low power timer - max count = 4095, * then all test cases must be executed in this time windows. @@ -72,11 +97,6 @@ void ticker_event_handler_stub(const ticker_data_t * const ticker) lp_ticker_disable_interrupt(); } -void wait_cycles(volatile unsigned int cycles) -{ - while (cycles--); -} - /* Test that the ticker has the correct frequency and number of bits. */ void lp_ticker_info_test() { @@ -97,8 +117,10 @@ void lp_ticker_deepsleep_test() lp_ticker_init(); - /* Wait for green tea UART transmission before entering deep-sleep mode. */ - wait_cycles(400000); + /* Give some time Green Tea to finish UART transmission before entering + * deep-sleep mode. + */ + busy_wait_ms(SERIAL_FLUSH_TIME_MS); overflow_protect(); From 1acc82350a09b537a9c38b6fc02812fe5d2a41e6 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Wed, 11 Jul 2018 11:44:50 -0500 Subject: [PATCH 105/113] Fix Python3 bug with `mbed export -S` --- tools/project.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/project.py b/tools/project.py index 87dba9d5b49..b9f9e3f63fd 100644 --- a/tools/project.py +++ b/tools/project.py @@ -167,7 +167,7 @@ def get_args(argv): targetnames = TARGET_NAMES targetnames.sort() - toolchainlist = list(EXPORTERS.keys() + EXPORTER_ALIASES.keys()) + toolchainlist = list(EXPORTERS.keys()) + list(EXPORTER_ALIASES.keys()) toolchainlist.sort() parser.add_argument( From 443120dbd778e9be651a7a1443fbd526b588f474 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Thu, 12 Jul 2018 10:08:06 -0500 Subject: [PATCH 106/113] Correct cmse lib creation for the make_gcc_arm --- tools/toolchains/gcc.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tools/toolchains/gcc.py b/tools/toolchains/gcc.py index 9a2a67c20b6..cbc86c7008d 100644 --- a/tools/toolchains/gcc.py +++ b/tools/toolchains/gcc.py @@ -91,6 +91,10 @@ def __init__(self, target, notify=None, macros=None, build_profile=None, target.core.startswith("Cortex-M33")) and not target.core.endswith("-NS")): self.cpu.append("-mcmse") + self.flags["ld"].extend([ + "-Wl,--cmse-implib", + "-Wl,--out-implib=%s" % join(build_dir, "cmse_lib.o") + ]) elif target.core == "Cortex-M23-NS" or target.core == "Cortex-M33-NS": self.flags["ld"].append("-D__DOMAIN_NS=1") @@ -233,11 +237,6 @@ def link(self, output, objects, libraries, lib_dirs, mem_map): # Build linker command map_file = splitext(output)[0] + ".map" cmd = self.ld + ["-o", output, "-Wl,-Map=%s" % map_file] + objects + ["-Wl,--start-group"] + libs + ["-Wl,--end-group"] - # Create Secure library - if self.target.core == "Cortex-M23" or self.target.core == "Cortex-M33": - secure_file = join(dirname(output), "cmse_lib.o") - cmd.extend(["-Wl,--cmse-implib"]) - cmd.extend(["-Wl,--out-implib=%s" % secure_file]) if mem_map: cmd.extend(['-T', mem_map]) From 99a87473ddf63a8cbc240cec42d1580d4e4f0577 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Thu, 12 Jul 2018 13:11:57 -0500 Subject: [PATCH 107/113] Drop quotes from command line make --- tools/export/makefile/__init__.py | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/tools/export/makefile/__init__.py b/tools/export/makefile/__init__.py index 22ffcc80234..2c94022285f 100644 --- a/tools/export/makefile/__init__.py +++ b/tools/export/makefile/__init__.py @@ -87,17 +87,14 @@ def generate(self): if (basename(dirname(dirname(self.export_dir))) == "projectfiles") else [".."]), - 'cc_cmd': " ".join(["\'" + part + "\'" for part - in ([basename(self.toolchain.cc[0])] + - self.toolchain.cc[1:])]), - 'cppc_cmd': " ".join(["\'" + part + "\'" for part - in ([basename(self.toolchain.cppc[0])] + - self.toolchain.cppc[1:])]), - 'asm_cmd': " ".join(["\'" + part + "\'" for part - in ([basename(self.toolchain.asm[0])] + - self.toolchain.asm[1:])]), - 'ld_cmd': "\'" + basename(self.toolchain.ld[0]) + "\'", - 'elf2bin_cmd': "\'" + basename(self.toolchain.elf2bin) + "\'", + 'cc_cmd': " ".join([basename(self.toolchain.cc[0])] + + self.toolchain.cc[1:]), + 'cppc_cmd': " ".join([basename(self.toolchain.cppc[0])] + + self.toolchain.cppc[1:]), + 'asm_cmd': " ".join([basename(self.toolchain.asm[0])] + + self.toolchain.asm[1:]), + 'ld_cmd': basename(self.toolchain.ld[0]), + 'elf2bin_cmd': basename(self.toolchain.elf2bin), 'link_script_ext': self.toolchain.LINKER_EXT, 'link_script_option': self.LINK_SCRIPT_OPTION, 'user_library_flag': self.USER_LIBRARY_FLAG, @@ -105,10 +102,11 @@ def generate(self): } if hasattr(self.toolchain, "preproc"): - ctx['pp_cmd'] = " ".join(["\'" + part + "\'" for part - in ([basename(self.toolchain.preproc[0])] + - self.toolchain.preproc[1:] + - self.toolchain.ld[1:])]) + ctx['pp_cmd'] = " ".join( + [basename(self.toolchain.preproc[0])] + + self.toolchain.preproc[1:] + + self.toolchain.ld[1:] + ) else: ctx['pp_cmd'] = None From 33edfc27682629c4ea24b29cd1ccc477b9be93f1 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Wed, 11 Jul 2018 09:42:16 -0500 Subject: [PATCH 108/113] Tools: Correct release version "parsing" for py3 --- tools/build_api.py | 37 ++++++++++--------------------------- 1 file changed, 10 insertions(+), 27 deletions(-) diff --git a/tools/build_api.py b/tools/build_api.py index af6a1470f1d..17b7698f59d 100644 --- a/tools/build_api.py +++ b/tools/build_api.py @@ -1119,19 +1119,18 @@ def get_unique_supported_toolchains(release_targets=None): return unique_supported_toolchains + +def _lowercase_release_version(release_version): + try: + return release_version.lower() + except AttributeError: + return 'all' + def mcu_toolchain_list(release_version='5'): """ Shows list of toolchains """ - - if isinstance(release_version, basestring): - # Force release_version to lowercase if it is a string - release_version = release_version.lower() - else: - # Otherwise default to printing all known targets and toolchains - release_version = 'all' - - + release_version = _lowercase_release_version(release_version) version_release_targets = {} version_release_target_names = {} @@ -1156,15 +1155,7 @@ def mcu_target_list(release_version='5'): """ Shows target list """ - - if isinstance(release_version, basestring): - # Force release_version to lowercase if it is a string - release_version = release_version.lower() - else: - # Otherwise default to printing all known targets and toolchains - release_version = 'all' - - + release_version = _lowercase_release_version(release_version) version_release_targets = {} version_release_target_names = {} @@ -1200,15 +1191,7 @@ def mcu_toolchain_matrix(verbose_html=False, platform_filter=None, """ # Only use it in this function so building works without extra modules from prettytable import PrettyTable - - if isinstance(release_version, basestring): - # Force release_version to lowercase if it is a string - release_version = release_version.lower() - else: - # Otherwise default to printing all known targets and toolchains - release_version = 'all' - - + release_version = _lowercase_release_version(release_version) version_release_targets = {} version_release_target_names = {} From 95c1e789f7ae93e13e4ae2cdb96a34c2e8c1e782 Mon Sep 17 00:00:00 2001 From: Deepika Date: Fri, 6 Jul 2018 11:29:56 -0500 Subject: [PATCH 109/113] Update stats to fetch Mbed OS version info --- TESTS/mbed_platform/stats_sys/main.cpp | 1 + platform/mbed_stats.c | 2 ++ platform/mbed_stats.h | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/TESTS/mbed_platform/stats_sys/main.cpp b/TESTS/mbed_platform/stats_sys/main.cpp index a9949d67dbd..9cbd898e562 100644 --- a/TESTS/mbed_platform/stats_sys/main.cpp +++ b/TESTS/mbed_platform/stats_sys/main.cpp @@ -32,6 +32,7 @@ void test_sys_info() mbed_stats_sys_t stats; mbed_stats_sys_get(&stats); + TEST_ASSERT_NOT_EQUAL(0, stats.os_version); #if defined(__CORTEX_M) TEST_ASSERT_NOT_EQUAL(0, stats.cpu_id); #endif diff --git a/platform/mbed_stats.c b/platform/mbed_stats.c index 6886ed30d20..11d870b7d10 100644 --- a/platform/mbed_stats.c +++ b/platform/mbed_stats.c @@ -1,6 +1,7 @@ #include "mbed_assert.h" #include "mbed_stats.h" #include "mbed_power_mgmt.h" +#include "mbed_version.h" #include #include @@ -123,6 +124,7 @@ void mbed_stats_sys_get(mbed_stats_sys_t *stats) memset(stats, 0, sizeof(mbed_stats_sys_t)); #if defined(MBED_SYS_STATS_ENABLED) + stats->os_version = MBED_VERSION; #if defined(__CORTEX_M) stats->cpu_id = SCB->CPUID; #endif diff --git a/platform/mbed_stats.h b/platform/mbed_stats.h index 5eaef3cadc8..4532041379c 100644 --- a/platform/mbed_stats.h +++ b/platform/mbed_stats.h @@ -6,7 +6,7 @@ * @{ */ /* mbed Microcontroller Library - * Copyright (c) 2016-2016 ARM Limited + * Copyright (c) 2016-2018 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 5ea924617bf9a41a739a26984fa968566a9f1c86 Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Thu, 12 Jul 2018 17:34:16 +0200 Subject: [PATCH 110/113] STM32 LPTICKER with LPTIM minor update Code cleaning (L0 Cube update, comment precision) --- targets/TARGET_STM/lp_ticker.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/targets/TARGET_STM/lp_ticker.c b/targets/TARGET_STM/lp_ticker.c index b5601fd0304..702ea878d6b 100644 --- a/targets/TARGET_STM/lp_ticker.c +++ b/targets/TARGET_STM/lp_ticker.c @@ -60,18 +60,11 @@ static void (*irq_handler)(void); void lp_ticker_init(void) { - NVIC_DisableIRQ(LPTIM1_IRQn); - /* Check if LPTIM is already configured */ -#if (TARGET_STM32L0) - if (READ_BIT(RCC->APB1ENR, RCC_APB1ENR_LPTIM1EN) != RESET) { - return; - } -#else if (__HAL_RCC_LPTIM1_IS_CLK_ENABLED()) { + lp_ticker_disable_interrupt(); return; } -#endif RCC_PeriphCLKInitTypeDef RCC_PeriphCLKInitStruct = {0}; RCC_OscInitTypeDef RCC_OscInitStruct = {0}; @@ -153,6 +146,7 @@ void lp_ticker_init(void) __HAL_LPTIM_ENABLE_IT(&LptimHandle, LPTIM_IT_CMPM); HAL_LPTIM_Counter_Start(&LptimHandle, 0xFFFF); + /* Need to write a compare value in order to get LPTIM_FLAG_CMPOK in set_interrupt */ __HAL_LPTIM_COMPARE_SET(&LptimHandle, 0); } @@ -201,7 +195,7 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) irq_handler = (void (*)(void))lp_ticker_irq_handler; /* CMPOK is set by hardware to inform application that the APB bus write operation to the LPTIM_CMP register has been successfully completed */ - /* Any successive write before respectively the ARROK flag or the CMPOK flag be set, will lead to unpredictable results */ + /* Any successive write before the CMPOK flag be set, will lead to unpredictable results */ while (__HAL_LPTIM_GET_FLAG(&LptimHandle, LPTIM_FLAG_CMPOK) == RESET) { } @@ -221,8 +215,11 @@ void lp_ticker_fire_interrupt(void) void lp_ticker_disable_interrupt(void) { - LptimHandle.Instance = LPTIM1; NVIC_DisableIRQ(LPTIM1_IRQn); + LptimHandle.Instance = LPTIM1; + /* Waiting last write operation completion */ + while (__HAL_LPTIM_GET_FLAG(&LptimHandle, LPTIM_FLAG_CMPOK) == RESET) { + } } void lp_ticker_clear_interrupt(void) From c249ee4d7a810ce4de391bdd8a418a05d8ff7eeb Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Mon, 9 Jul 2018 09:44:55 -0500 Subject: [PATCH 111/113] Skip target lookup in test builds. This should allow custom targets to be transferred to each process when building in parallel --- tools/test_api.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/test_api.py b/tools/test_api.py index 8f46cdac90c..5b569f2f379 100644 --- a/tools/test_api.py +++ b/tools/test_api.py @@ -2225,7 +2225,11 @@ def build_tests(tests, base_source_paths, build_path, target, toolchain_name, execution_directory = "." base_path = norm_relative_path(build_path, execution_directory) - target_name = target.name if isinstance(target, Target) else target + if isinstance(target, Target): + target_name + else: + target_name = target + target = TARGET_MAP[target_name] cfg, _, _ = get_config(base_source_paths, target_name, toolchain_name, app_config=app_config) baud_rate = 9600 @@ -2255,7 +2259,7 @@ def build_tests(tests, base_source_paths, build_path, target, toolchain_name, bin_file = None test_case_folder_name = os.path.basename(test_paths[0]) - args = (src_paths, test_build_path, target, toolchain_name) + args = (src_paths, test_build_path, deepcopy(target), toolchain_name) kwargs = { 'jobs': 1, 'clean': clean, From 1f3b947e98eab9899e7757f7429b9dd0bda7a599 Mon Sep 17 00:00:00 2001 From: bcostm Date: Thu, 12 Jul 2018 15:51:29 +0200 Subject: [PATCH 112/113] stm32 lpuart: enable lse and hsi if not done --- targets/TARGET_STM/serial_api.c | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/targets/TARGET_STM/serial_api.c b/targets/TARGET_STM/serial_api.c index 4a092784e17..d245a58cf65 100644 --- a/targets/TARGET_STM/serial_api.c +++ b/targets/TARGET_STM/serial_api.c @@ -379,11 +379,22 @@ void serial_baud(serial_t *obj, int baudrate) RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPUART1; #if ((MBED_CONF_TARGET_LPUART_CLOCK_SOURCE) & USE_LPUART_CLK_LSE) - if (baudrate <= 9600 && __HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY)) { - PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_LSE; - HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); - if (init_uart(obj) == HAL_OK) { - return; + if (baudrate <= 9600) { + // Enable LSE in case it is not already done + if (!__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY)) { + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE; + RCC_OscInitStruct.HSIState = RCC_LSE_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_OFF; + HAL_RCC_OscConfig(&RCC_OscInitStruct); + } + // Keep it to verify if HAL_RCC_OscConfig didn't exit with a timeout + if (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY)) { + PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_LSE; + HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); + if (init_uart(obj) == HAL_OK) { + return; + } } } #endif @@ -395,6 +406,16 @@ void serial_baud(serial_t *obj, int baudrate) } #endif #if ((MBED_CONF_TARGET_LPUART_CLOCK_SOURCE) & USE_LPUART_CLK_HSI) + // Enable HSI in case it is not already done + if (!__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY)) { + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_OFF; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + HAL_RCC_OscConfig(&RCC_OscInitStruct); + } + // Keep it to verify if HAL_RCC_OscConfig didn't exit with a timeout if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY)) { PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_HSI; HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); From 5c9a41299302e04ef2b33b4d7cf3a7a5d1d69bba Mon Sep 17 00:00:00 2001 From: Cruz Monrreal II Date: Fri, 13 Jul 2018 14:09:10 -0500 Subject: [PATCH 113/113] Update Mbed version block --- platform/mbed_version.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platform/mbed_version.h b/platform/mbed_version.h index 650f5396a76..24cc608b7d1 100644 --- a/platform/mbed_version.h +++ b/platform/mbed_version.h @@ -29,21 +29,21 @@ * * @note 99 is default value for development version (master branch) */ -#define MBED_MAJOR_VERSION 99 +#define MBED_MAJOR_VERSION 5 /** MBED_MINOR_VERSION * Mbed OS minor version * * @note 99 is default value for development version (master branch) */ -#define MBED_MINOR_VERSION 99 +#define MBED_MINOR_VERSION 9 /** MBED_PATCH_VERSION * Mbed OS patch version * * @note 99 is default value for development version (master branch) */ -#define MBED_PATCH_VERSION 99 +#define MBED_PATCH_VERSION 3 #define MBED_ENCODE_VERSION(major, minor, patch) ((major)*10000 + (minor)*100 + (patch))