From 94746037915f29dbf516a99c57dc6f703a302458 Mon Sep 17 00:00:00 2001 From: Ganesh Ramachandran Date: Tue, 25 Sep 2018 12:51:08 +0530 Subject: [PATCH 01/19] Added usticker feature --- .../TARGET_TOSHIBA/TARGET_TMPM46B/us_ticker.c | 95 ++++++++----------- targets/targets.json | 2 +- 2 files changed, 38 insertions(+), 59 deletions(-) diff --git a/targets/TARGET_TOSHIBA/TARGET_TMPM46B/us_ticker.c b/targets/TARGET_TOSHIBA/TARGET_TMPM46B/us_ticker.c index c1b4982f8b..2407fa7724 100644 --- a/targets/TARGET_TOSHIBA/TARGET_TMPM46B/us_ticker.c +++ b/targets/TARGET_TOSHIBA/TARGET_TMPM46B/us_ticker.c @@ -1,5 +1,5 @@ /* mbed Microcontroller Library - * (C)Copyright TOSHIBA ELECTRONIC DEVICES & STORAGE CORPORATION 2017 All rights reserved + * (C)Copyright TOSHIBA ELECTRONIC DEVICES & STORAGE CORPORATION 2018 All rights reserved * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,14 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include #include "us_ticker_api.h" #include "tmpm46b_tmrb.h" -#define TMR16A_100US 0xFFFF -#define TMRB_CLK_DIV 0x3 +#define MAX_TICK_16_BIT 0xFFFF +#define TMRB_CLK_DIV 0x3 -static uint8_t us_ticker_inited = 0; // Is ticker initialized yet? -static volatile uint32_t us_ticker = 0; // timer counter +static bool us_ticker_inited = false; // Is ticker initialized yet? const ticker_info_t* us_ticker_get_info() { @@ -35,34 +35,32 @@ const ticker_info_t* us_ticker_get_info() void us_ticker_init(void) { TMRB_InitTypeDef m_tmrb0; - TMRB_FFOutputTypeDef FFStruct; if (us_ticker_inited) { + us_ticker_disable_interrupt(); return; } - us_ticker_inited = 1; + us_ticker_inited = true; + + // TSB_TB0 using free-run + m_tmrb0.Mode = TMRB_INTERVAL_TIMER; + m_tmrb0.ClkDiv = TMRB_CLK_DIV; + m_tmrb0.UpCntCtrl = TMRB_FREE_RUN; + m_tmrb0.TrailingTiming = MAX_TICK_16_BIT; + m_tmrb0.LeadingTiming = MAX_TICK_16_BIT; // Enable channel 0 TMRB_Enable(TSB_TB0); // Stops and clear count operation TMRB_SetRunState(TSB_TB0, TMRB_STOP); - // Disable to TBxFF0 reverse trigger - FFStruct.FlipflopCtrl = TMRB_FLIPFLOP_CLEAR; - FFStruct.FlipflopReverseTrg =TMRB_DISABLE_FLIPFLOP; - TMRB_SetFlipFlop(TSB_TB0, &FFStruct); - - // TSB_TB0 using free-run - m_tmrb0.Mode = TMRB_INTERVAL_TIMER; - m_tmrb0.ClkDiv = TMRB_CLK_DIV; - m_tmrb0.UpCntCtrl = TMRB_AUTO_CLEAR; - m_tmrb0.TrailingTiming = TMR16A_100US; - m_tmrb0.LeadingTiming = TMR16A_100US; + // Mask All interrupts + TMRB_SetINTMask(TSB_TB0, TMRB_MASK_MATCH_LEADING_INT | TMRB_MASK_MATCH_TRAILING_INT | TMRB_MASK_OVERFLOW_INT); TMRB_Init(TSB_TB0, &m_tmrb0); - // Enable TMRB when system is in idle mode TMRB_SetIdleMode(TSB_TB0, ENABLE); // Starts TSB_TB0 TMRB_SetRunState(TSB_TB0, TMRB_RUN); + NVIC_SetVector(INTTB0_IRQn, (uint32_t)us_ticker_irq_handler); } uint32_t us_ticker_read(void) @@ -80,59 +78,40 @@ uint32_t us_ticker_read(void) void us_ticker_set_interrupt(timestamp_t timestamp) { - TMRB_InitTypeDef m_tmrb1; - TMRB_FFOutputTypeDef FFStruct; - - const uint32_t now_ticks = us_ticker_read(); - uint32_t delta_ticks = - timestamp >= now_ticks ? timestamp - now_ticks : (uint32_t)((uint64_t) timestamp + 0xFFFF - now_ticks); - - if (delta_ticks == 0) { - /* The requested delay is less than the minimum resolution of this counter. */ - delta_ticks = 1; - } - - // Ticker interrupt handle - TMRB_Enable(TSB_TB1); - TMRB_SetRunState(TSB_TB1, TMRB_STOP); - NVIC_SetVector(INTTB1_IRQn, (uint32_t)us_ticker_irq_handler); - NVIC_EnableIRQ(INTTB1_IRQn); - - // Split delta for preventing the Multiply overflowing - FFStruct.FlipflopCtrl = TMRB_FLIPFLOP_CLEAR; - FFStruct.FlipflopReverseTrg = TMRB_DISABLE_FLIPFLOP; - TMRB_SetFlipFlop(TSB_TB1, &FFStruct); - - // TSB_TB0 using free-run - m_tmrb1.Mode = TMRB_INTERVAL_TIMER; - m_tmrb1.ClkDiv = TMRB_CLK_DIV; - m_tmrb1.UpCntCtrl = TMRB_AUTO_CLEAR; - m_tmrb1.TrailingTiming = delta_ticks; - m_tmrb1.LeadingTiming = delta_ticks; - TMRB_Init(TSB_TB1, &m_tmrb1); - TMRB_SetINTMask(TSB_TB1,TMRB_MASK_OVERFLOW_INT | TMRB_MASK_MATCH_LEADING_INT); - // Enable TMRB when system is in idle mode - TMRB_SetIdleMode(TSB_TB1, ENABLE); - TMRB_SetRunState(TSB_TB1, TMRB_RUN); + NVIC_DisableIRQ(INTTB0_IRQn); + NVIC_ClearPendingIRQ(INTTB0_IRQn); + TMRB_ChangeTrailingTiming(TSB_TB0, timestamp); + // Mask all Interrupts except trailing edge interrupt + TMRB_SetINTMask(TSB_TB0, TMRB_MASK_MATCH_LEADING_INT | TMRB_MASK_OVERFLOW_INT); + NVIC_EnableIRQ(INTTB0_IRQn); } void us_ticker_fire_interrupt(void) { - NVIC_SetPendingIRQ(INTTB1_IRQn); + NVIC_SetPendingIRQ(INTTB0_IRQn); + NVIC_EnableIRQ(INTTB0_IRQn); } void us_ticker_disable_interrupt(void) { - // Also disable interrupts by NVIC - NVIC_DisableIRQ(INTTB1_IRQn); + // Mask All interrupts + TMRB_SetINTMask(TSB_TB0, TMRB_MASK_MATCH_LEADING_INT | TMRB_MASK_MATCH_TRAILING_INT | TMRB_MASK_OVERFLOW_INT); + // Also clear and disable interrupts by NVIC + NVIC_ClearPendingIRQ(INTTB0_IRQn); + NVIC_DisableIRQ(INTTB0_IRQn); } void us_ticker_clear_interrupt(void) { - // No flag to clear + NVIC_ClearPendingIRQ(INTTB0_IRQn); } void us_ticker_free(void) { - + TMRB_SetINTMask(TSB_TB0, TMRB_MASK_MATCH_LEADING_INT | TMRB_MASK_MATCH_TRAILING_INT | TMRB_MASK_OVERFLOW_INT); + NVIC_ClearPendingIRQ(INTTB0_IRQn); + NVIC_DisableIRQ(INTTB0_IRQn); + TMRB_SetRunState(TSB_TB0, TMRB_STOP); + TMRB_Disable(TSB_TB0); + us_ticker_inited = false; } diff --git a/targets/targets.json b/targets/targets.json index 53e9678d39..0ee5fd00c8 100755 --- a/targets/targets.json +++ b/targets/targets.json @@ -4416,7 +4416,7 @@ "extra_labels": ["TOSHIBA"], "macros": ["__TMPM46B__"], "supported_toolchains": ["GCC_ARM", "ARM", "IAR"], - "device_has": ["ANALOGIN", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_FC", "SPI", "I2C", "STDIO_MESSAGES", "TRNG", "FLASH", "SLEEP"], + "device_has": ["USTICKER", "ANALOGIN", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_FC", "SPI", "I2C", "STDIO_MESSAGES", "TRNG", "FLASH", "SLEEP"], "device_name": "TMPM46BF10FG", "detect_code": ["7013"], "release_versions": ["5"], From c68e7c61edda604457bc72df76b49f7963d2b827 Mon Sep 17 00:00:00 2001 From: Eman869 <35017606+Eman869@users.noreply.github.com> Date: Thu, 27 Sep 2018 19:12:42 +0800 Subject: [PATCH 02/19] Check LPUART clock source in STOP mode Check LPUART clock source before enable it in STOP mode, only LSE could be enabled in STOP mode. --- targets/TARGET_STM/serial_api.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/targets/TARGET_STM/serial_api.c b/targets/TARGET_STM/serial_api.c index 37c848664e..3dbd1e26c4 100644 --- a/targets/TARGET_STM/serial_api.c +++ b/targets/TARGET_STM/serial_api.c @@ -536,7 +536,9 @@ HAL_StatusTypeDef init_uart(serial_t *obj) #if defined(LPUART1_BASE) if (huart->Instance == LPUART1) { if (obj_s->baudrate <= 9600) { +#if ((MBED_CONF_TARGET_LPUART_CLOCK_SOURCE) & USE_LPUART_CLK_LSE) HAL_UARTEx_EnableClockStopMode(huart); +#endif HAL_UARTEx_EnableStopMode(huart); } else { HAL_UARTEx_DisableClockStopMode(huart); From d8b7b3a24aff000597512a2016e4799edfe182c7 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Thu, 27 Sep 2018 10:33:33 -0500 Subject: [PATCH 03/19] Tools, memap: Silence warnings that we handled correctly ### Description Memap will create a bunch of warnings about "Unknown object name" when parsing a map file created for the RZ_A1H and the GR_Peach. Theses warnings are sperious; the information in these sections does not belong to an object file. This PR silences these warnings. Fixes #6258 ### Pull request type [x] Fix [ ] Refactor [ ] Target update [ ] Functionality change [ ] Breaking change --- tools/memap.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/memap.py b/tools/memap.py index 00c5aa36f5..3a1d134dc7 100644 --- a/tools/memap.py +++ b/tools/memap.py @@ -142,7 +142,10 @@ class _GccParser(_Parser): return join('[lib]', test_re_obj_name.group(2), test_re_obj_name.group(3)) else: - print("Unknown object name found in GCC map file: %s" % line) + if (not line.startswith("LONG") and + not line.startswith("linker stubs")): + print("Unknown object name found in GCC map file: %s" + % line) return '[misc]' def parse_section(self, line): From 9c2686fda64c6f94268c60f96fb37afb1ea335d8 Mon Sep 17 00:00:00 2001 From: mudassar-ublox Date: Mon, 8 Oct 2018 12:24:40 +0500 Subject: [PATCH 04/19] error handling for socket create --- .../UBLOX/AT/UBLOX_AT_CellularStack.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/features/cellular/framework/targets/UBLOX/AT/UBLOX_AT_CellularStack.cpp b/features/cellular/framework/targets/UBLOX/AT/UBLOX_AT_CellularStack.cpp index e35c49046c..fb9b188c80 100644 --- a/features/cellular/framework/targets/UBLOX/AT/UBLOX_AT_CellularStack.cpp +++ b/features/cellular/framework/targets/UBLOX/AT/UBLOX_AT_CellularStack.cpp @@ -119,7 +119,6 @@ bool UBLOX_AT_CellularStack::is_protocol_supported(nsapi_protocol_t protocol) nsapi_error_t UBLOX_AT_CellularStack::create_socket_impl(CellularSocket *socket) { int sock_id = 0; - bool socketOpenWorking = false; _at.lock(); if (socket->proto == NSAPI_UDP) { @@ -137,12 +136,12 @@ nsapi_error_t UBLOX_AT_CellularStack::create_socket_impl(CellularSocket *socket) sock_id = _at.read_int(); _at.resp_stop(); } // Unsupported protocol is checked in "is_protocol_supported" function - _at.unlock(); - socketOpenWorking = (_at.get_last_error() == NSAPI_ERROR_OK); - if (!socketOpenWorking) { + if ((_at.get_last_error() != NSAPI_ERROR_OK) || (sock_id == -1)) { + _at.unlock(); return NSAPI_ERROR_NO_SOCKET; } + _at.unlock(); // Check for duplicate socket id delivered by modem for (int i = 0; i < UBLOX_MAX_SOCKET; i++) { @@ -162,8 +161,15 @@ nsapi_error_t UBLOX_AT_CellularStack::socket_connect(nsapi_socket_t handle, cons { CellularSocket *socket = (CellularSocket *)handle; - if (!socket->created) { - create_socket_impl(socket); + if (socket) { + if (!socket->created) { + nsapi_error_t err = create_socket_impl(socket); + if(err != NSAPI_ERROR_OK) { + return err; + } + } + } else { + return NSAPI_ERROR_DEVICE_ERROR; } _at.lock(); From 66463238677e824832f3b44ff750f1593721f0cd Mon Sep 17 00:00:00 2001 From: Deepika Date: Wed, 5 Sep 2018 16:25:04 -0500 Subject: [PATCH 05/19] Alignment of 8 is not required for additional header malloc guarantees aligned memory. If we add an alignment here, we are adding additonal unused 4 bytes. Each allocator has its own 4/8 byte header (GGC / ARM have 4 bytes). So if user request for 8 bytes of memory stats will add 8 + allocator 8. However if we remove the alignment in stats header, allocator will consider add 4 bytes to 12 byte request and zero padding. It will be beneficial to leave the padding to allocator. --- platform/mbed_alloc_wrappers.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/platform/mbed_alloc_wrappers.cpp b/platform/mbed_alloc_wrappers.cpp index 3b4caf077a..66bc1f150d 100644 --- a/platform/mbed_alloc_wrappers.cpp +++ b/platform/mbed_alloc_wrappers.cpp @@ -40,10 +40,8 @@ are active, the second one (MBED_MEM_TRACING_ENABLED) will trace the first one's /* Implementation of the runtime max heap usage checker */ /******************************************************************************/ -/* Size must be a multiple of 8 to keep alignment */ typedef struct { uint32_t size; - uint32_t pad; } alloc_info_t; #ifdef MBED_HEAP_STATS_ENABLED From 0e758796f66d14f2f06dc1ceaf353c1921fd87ba Mon Sep 17 00:00:00 2001 From: deepikabhavnani Date: Mon, 10 Sep 2018 10:36:43 -0500 Subject: [PATCH 06/19] Signature to track memory allocations by wrapper functions. Compilers allocate some section of memory without using wrapper function, which is later freed when wrappers were initialized. Since the allocated memory didn;t contain wrapper header the pointer got corrupt when calling to free. This implementation of signature addition during malloc and signature check during free helps in freeing the memory allocated by wrapper functions properly and also the internal memory allocated by compilers (without malloc wrappers). --- platform/mbed_alloc_wrappers.cpp | 40 +++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/platform/mbed_alloc_wrappers.cpp b/platform/mbed_alloc_wrappers.cpp index 66bc1f150d..3777118180 100644 --- a/platform/mbed_alloc_wrappers.cpp +++ b/platform/mbed_alloc_wrappers.cpp @@ -42,9 +42,12 @@ are active, the second one (MBED_MEM_TRACING_ENABLED) will trace the first one's typedef struct { uint32_t size; + uint32_t signature; } alloc_info_t; #ifdef MBED_HEAP_STATS_ENABLED +#define MBED_HEAP_STATS_SIGNATURE (0xdeadbeef) + static SingletonPtr malloc_stats_mutex; static mbed_stats_heap_t heap_stats = {0, 0, 0, 0, 0, 0, 0}; @@ -104,6 +107,7 @@ extern "C" void *malloc_wrapper(struct _reent *r, size_t size, void *caller) 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; + alloc_info->signature = MBED_HEAP_STATS_SIGNATURE; ptr = (void *)(alloc_info + 1); heap_stats.current_size += size; heap_stats.total_size += size; @@ -184,13 +188,18 @@ extern "C" void free_wrapper(struct _reent *r, void *ptr, void *caller) alloc_info_t *alloc_info = NULL; if (ptr != NULL) { alloc_info = ((alloc_info_t *)ptr) - 1; - size_t user_size = alloc_info->size; - size_t alloc_size = MALLOC_HEAP_TOTAL_SIZE(MALLOC_HEADER_PTR(alloc_info)); - heap_stats.current_size -= user_size; - heap_stats.alloc_cnt -= 1; - heap_stats.overhead_size -= (alloc_size - user_size); + if (MBED_HEAP_STATS_SIGNATURE == alloc_info->signature) { + size_t user_size = alloc_info->size; + size_t alloc_size = MALLOC_HEAP_TOTAL_SIZE(MALLOC_HEADER_PTR(alloc_info)); + alloc_info->signature = 0x0; + heap_stats.current_size -= user_size; + heap_stats.alloc_cnt -= 1; + heap_stats.overhead_size -= (alloc_size - user_size); + __real__free_r(r, (void *)alloc_info); + } else { + __real__free_r(r, ptr); + } } - __real__free_r(r, (void *)alloc_info); malloc_stats_mutex->unlock(); #else // #ifdef MBED_HEAP_STATS_ENABLED @@ -231,7 +240,6 @@ extern "C" void *__wrap__memalign_r(struct _reent *r, size_t alignment, size_t b } - /******************************************************************************/ /* ARMCC / IAR memory allocation wrappers */ /******************************************************************************/ @@ -286,6 +294,7 @@ extern "C" void *malloc_wrapper(size_t size, void *caller) alloc_info_t *alloc_info = (alloc_info_t *)SUPER_MALLOC(size + sizeof(alloc_info_t)); if (alloc_info != NULL) { alloc_info->size = size; + alloc_info->signature = MBED_HEAP_STATS_SIGNATURE; ptr = (void *)(alloc_info + 1); heap_stats.current_size += size; heap_stats.total_size += size; @@ -384,13 +393,18 @@ extern "C" void free_wrapper(void *ptr, void *caller) alloc_info_t *alloc_info = NULL; if (ptr != NULL) { alloc_info = ((alloc_info_t *)ptr) - 1; - size_t user_size = alloc_info->size; - size_t alloc_size = MALLOC_HEAP_TOTAL_SIZE(MALLOC_HEADER_PTR(alloc_info)); - heap_stats.current_size -= user_size; - heap_stats.alloc_cnt -= 1; - heap_stats.overhead_size -= (alloc_size - user_size); + if (MBED_HEAP_STATS_SIGNATURE == alloc_info->signature) { + size_t user_size = alloc_info->size; + size_t alloc_size = MALLOC_HEAP_TOTAL_SIZE(MALLOC_HEADER_PTR(alloc_info)); + alloc_info->signature = 0x0; + heap_stats.current_size -= user_size; + heap_stats.alloc_cnt -= 1; + heap_stats.overhead_size -= (alloc_size - user_size); + SUPER_FREE((void *)alloc_info); + } else { + SUPER_FREE(ptr); + } } - SUPER_FREE((void *)alloc_info); malloc_stats_mutex->unlock(); #else // #ifdef MBED_HEAP_STATS_ENABLED From 470f9bc37560976c38468eaa6aa086357d4702db Mon Sep 17 00:00:00 2001 From: TomoYamanaka Date: Thu, 11 Oct 2018 20:51:20 +0900 Subject: [PATCH 07/19] Improve frequency setting proc of Renesas SPI driver If the specified frequency exceeds the upper limit and lower limit at SPI driver, an error is output, but this does not match policy with other renesas drivers. Thus I revises the processing as follows. - If "hz" is maximum over, it is rounded by the maximum value. - If "hz" is minimum under, it is rounded by the minimum value. --- targets/TARGET_RENESAS/TARGET_RZ_A1XX/spi_api.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/spi_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/spi_api.c index fd3db3716f..256d69c6a4 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/spi_api.c +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/spi_api.c @@ -149,9 +149,11 @@ void spi_frequency(spi_t *obj, int hz) { hz_min = pclk_base / 2 / 256 / 8; hz_max = pclk_base / 2; - if (((uint32_t)hz < hz_min) || ((uint32_t)hz > hz_max)) { - error("Couldn't setup requested SPI frequency"); - return; + if ((uint32_t)hz < hz_min) { + hz = hz_min; + } + if ((uint32_t)hz > hz_max) { + hz = hz_max; } div = (pclk_base / hz / 2); From 922cc2b8a77e8f9a34011c959f36f824be27a7ef Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Thu, 11 Oct 2018 18:01:24 +0200 Subject: [PATCH 08/19] DISCO_F413ZH : set default Wifi module SPI state to inactive --- .../TARGET_DISCO_F413ZH/system_clock.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/system_clock.c b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/system_clock.c index 2016fd274d..6d8d3ee044 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/system_clock.c +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/system_clock.c @@ -97,6 +97,17 @@ void SystemInit(void) SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ #endif + /* In DISCO_F413ZH board, Arduino connector and Wifi embeded module are sharing the same SPI pins */ + /* We need to set the default SPI SS pin for the Wifi module to the inactive state i.e. 1 */ + /* See board User Manual: WIFI_SPI_CS = PG_11*/ + __HAL_RCC_GPIOG_CLK_ENABLE(); + GPIO_InitTypeDef GPIO_InitStruct; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FAST; + GPIO_InitStruct.Pin = GPIO_PIN_11; + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + HAL_GPIO_WritePin(GPIOG, GPIO_PIN_11, GPIO_PIN_SET); } From 3385e0ef7be232033535ebf1ead2ad1571cd0bb6 Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Thu, 11 Oct 2018 18:32:43 +0200 Subject: [PATCH 09/19] DISCO_F413ZH : explicit WIFI pins name --- .../TARGET_DISCO_F413ZH/PeripheralPins.c | 4 ++-- .../TARGET_STM32F413xH/TARGET_DISCO_F413ZH/PinNames.h | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/PeripheralPins.c b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/PeripheralPins.c index 1f1b0edb2b..4cb8f81aff 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/PeripheralPins.c +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/PeripheralPins.c @@ -359,8 +359,8 @@ MBED_WEAK const PinMap PinMap_SPI_SSEL[] = { {PA_4, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, // Connected to ARD_D8 {PA_4_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, // Connected to ARD_D8 {PA_11, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, // Connected to USB_OTG_FS_DM - {PA_15, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, // Connected to ARD_D10 - {PA_15_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, // Connected to ARD_D10 + {PA_15_ALT0, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, // Connected to ARD_D10 + {PA_15, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, // Connected to ARD_D10 {PB_1, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI5)}, // Connected to ARD_A4 {PB_9, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, // Connected to CODEC_WS [WM8994ECS_LRCLK1] {PB_12, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, // Connected to ARD_D13 // Connected to WIFI module // Connected to LD5 diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/PinNames.h index c66237598e..527a97b083 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/PinNames.h @@ -311,6 +311,15 @@ typedef enum { QSPI_FLASH1_SCK = PB_2, QSPI_FLASH1_CSN = PG_6, + /**** WIFI ISM43362 pins ****/ + ISM43362_WIFI_MISO = PB_4, + ISM43362_WIFI_MOSI = PB_5, + ISM43362_WIFI_SCLK = PB_12, + ISM43362_WIFI_NSS = PG_11, + ISM43362_WIFI_RESET = PH_1, + ISM43362_WIFI_DATAREADY = PG_12, + ISM43362_WIFI_WAKEUP = PB_15, + // Not connected NC = (int)0xFFFFFFFF } PinName; From f0a92f63f533c1e8722dd864f65b8713a921599d Mon Sep 17 00:00:00 2001 From: Brian Esquilona Date: Fri, 12 Oct 2018 11:17:03 -0500 Subject: [PATCH 10/19] Added bootloader bin license and config for DISCO_L475VG_IOT01A --- .../TARGET_DISCO_L475VG_IOT01A/LICENSE | 49 ++++++++++++++++++ .../mbed-bootloader-internal_dfb7cc.bin | Bin 0 -> 34784 bytes .../TARGET_DISCO_L475VG_IOT01A/mbed_lib.json | 10 ++++ 3 files changed, 59 insertions(+) create mode 100644 features/FEATURE_BOOTLOADER/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/LICENSE create mode 100644 features/FEATURE_BOOTLOADER/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/mbed-bootloader-internal_dfb7cc.bin create mode 100644 features/FEATURE_BOOTLOADER/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/mbed_lib.json diff --git a/features/FEATURE_BOOTLOADER/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/LICENSE b/features/FEATURE_BOOTLOADER/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/LICENSE new file mode 100644 index 0000000000..591ac29615 --- /dev/null +++ b/features/FEATURE_BOOTLOADER/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/LICENSE @@ -0,0 +1,49 @@ +Permissive Binary License + +Version 1.0, September 2015 + +Redistribution. Redistribution and use in binary form, without +modification, are permitted provided that the following conditions are +met: + +1) Redistributions must reproduce the above copyright notice and the + following disclaimer in the documentation and/or other materials + provided with the distribution. + +2) Unless to the extent explicitly permitted by law, no reverse + engineering, decompilation, or disassembly of this software is + permitted. + +3) Redistribution as part of a software development kit must include the + accompanying file named "DEPENDENCIES" and any dependencies listed in + that file. + +4) Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +Limited patent license. The copyright holders (and contributors) grant a +worldwide, non-exclusive, no-charge, royalty-free patent license to +make, have made, use, offer to sell, sell, import, and otherwise +transfer this software, where such license applies only to those patent +claims licensable by the copyright holders (and contributors) that are +necessarily infringed by this software. This patent license shall not +apply to any combinations that include this software. No hardware is +licensed hereunder. + +If you institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the software +itself infringes your patent(s), then your rights granted under this +license shall terminate as of the date such litigation is filed. + +DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS." 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 +HOLDERS 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. \ No newline at end of file diff --git a/features/FEATURE_BOOTLOADER/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/mbed-bootloader-internal_dfb7cc.bin b/features/FEATURE_BOOTLOADER/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/mbed-bootloader-internal_dfb7cc.bin new file mode 100644 index 0000000000000000000000000000000000000000..00fd19b5a7f5262d08b80e66fae77b3ba4a7b774 GIT binary patch literal 34784 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

jjZ*`G+w*Q|x-pMDWfd*4GD|?Gul=+0 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

8=EKtu#^F%{X&=f^^oN0DhU^>I?X!vl78B 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 literal 0 HcmV?d00001 diff --git a/features/FEATURE_BOOTLOADER/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/mbed_lib.json b/features/FEATURE_BOOTLOADER/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/mbed_lib.json new file mode 100644 index 0000000000..99c40b0898 --- /dev/null +++ b/features/FEATURE_BOOTLOADER/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/mbed_lib.json @@ -0,0 +1,10 @@ +{ + "name": "bootloader_DISCO_L475VG_IOT01A", + "target_overrides": { + "*": { + "target.app_offset": "0x9800", + "target.header_offset": "0x9000", + "target.bootloader_img": "mbed-bootloader-internal_dfb7cc.bin" + } + } +} From acabbebdb4e582d7628c35c7c0867ee9d7b3c83a Mon Sep 17 00:00:00 2001 From: Naveen Kaje Date: Fri, 12 Oct 2018 12:06:39 -0500 Subject: [PATCH 11/19] I2C.h: Remove protected attributes from appearing on docs site --- drivers/I2C.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/I2C.h b/drivers/I2C.h index c031d65b59..330f1746ef 100644 --- a/drivers/I2C.h +++ b/drivers/I2C.h @@ -193,6 +193,7 @@ protected: bool _deep_sleep_locked; #endif +#if !defined(DOXYGEN_ONLY) protected: void aquire(); @@ -202,6 +203,7 @@ protected: static SingletonPtr _mutex; PinName _sda; PinName _scl; +#endif private: /** Recover I2C bus, when stuck with SDA low From 1c74c30aeea453496ce2cfa378ae5c33edf884af Mon Sep 17 00:00:00 2001 From: Kevin Gilbert Date: Fri, 12 Oct 2018 13:38:40 -0500 Subject: [PATCH 12/19] Remove protected class from EventQueue Doxy --- events/EventQueue.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/events/EventQueue.h b/events/EventQueue.h index b06b595fa7..7214966365 100644 --- a/events/EventQueue.h +++ b/events/EventQueue.h @@ -2803,6 +2803,7 @@ public: #endif protected: + #if !defined(DOXYGEN_ONLY) template friend class Event; struct equeue _equeue; @@ -3379,6 +3380,7 @@ protected: f(c0, c1, c2, c3, c4, a0, a1, a2, a3, a4); } }; + #endif //!defined(DOXYGEN_ONLY) }; } From 19c91081c677ae7beb3670572446152ad5395600 Mon Sep 17 00:00:00 2001 From: Naveen Kaje Date: Fri, 12 Oct 2018 13:44:41 -0500 Subject: [PATCH 13/19] I2C.h: Update documentation, example and formatting Change the example to a more elaborate implementation. Fix formatting and update documentation. --- drivers/I2C.h | 43 +++++++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/drivers/I2C.h b/drivers/I2C.h index 330f1746ef..b9df4f864a 100644 --- a/drivers/I2C.h +++ b/drivers/I2C.h @@ -41,16 +41,32 @@ namespace mbed { * * Example: * @code - * // Read from I2C slave at address 0x62 - * + * Read temperature from LM75BD * #include "mbed.h" - * - * I2C i2c(p28, p27); + * I2C i2c(I2C_SDA , I2C_SCL); + * const int addr7bit = 0x48; // 7 bit I2C address + * const int addr8bit = 0x48 << 1; // 8bit I2C address, 0x90 * * int main() { - * int address = 0x62; - * char data[2]; - * i2c.read(address, data, 2); + * char cmd[2]; + * while (1) { + * cmd[0] = 0x01; + * cmd[1] = 0x00; + * + * // read and write takes the 8 bit version of the address. + * // set up configuration register (at 0x01) + * i2c.write(addr8bit, cmd, 2); + * + * wait(0.5); + * + * // read temperature register + * cmd[0] = 0x00; + * i2c.write(addr8bit, cmd, 1); + * i2c.read( addr8bit, cmd, 2); + * + * float tmp = (float((cmd[0]<<8)|cmd[1]) / 256.0); + * printf("Temp = %.2f\n", tmp); + * } * } * @endcode * @ingroup drivers @@ -92,10 +108,11 @@ public: * @param data Pointer to the byte-array to read data in to * @param length Number of bytes to read * @param repeated Repeated start, true - don't send stop at end + * default value is false. * * @returns * 0 on success (ack), - * non-0 on failure (nack) + * non-zero on failure (nack) */ int read(int address, char *data, int length, bool repeated = false); @@ -117,10 +134,11 @@ public: * @param data Pointer to the byte-array data to send * @param length Number of bytes to send * @param repeated Repeated start, true - do not send stop at end + * default value is false. * * @returns * 0 on success (ack), - * non-0 on failure (nack) + * non-zero on failure (nack) */ int write(int address, const char *data, int length, bool repeated = false); @@ -137,7 +155,6 @@ public: /** Creates a start condition on the I2C bus */ - void start(void); /** Creates a stop condition on the I2C bus @@ -171,7 +188,9 @@ public: * @param event The logical OR of events to modify * @param callback The event callback function * @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 + * default value is false. + * + * @returns 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); @@ -212,7 +231,7 @@ private: * @param sda I2C data line pin * @param scl I2C clock line pin * - * @returns: + * @returns * '0' - Successfully recovered * 'I2C_ERROR_BUS_BUSY' - In case of failure * From a9dbd728f62f54e8ffa0810c91aa22de2110197e Mon Sep 17 00:00:00 2001 From: Kevin Gilbert Date: Fri, 12 Oct 2018 13:52:23 -0500 Subject: [PATCH 14/19] wich->which --- platform/mbed_rtc_time.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/mbed_rtc_time.h b/platform/mbed_rtc_time.h index ee3e7ec7a1..65fad42600 100644 --- a/platform/mbed_rtc_time.h +++ b/platform/mbed_rtc_time.h @@ -85,7 +85,7 @@ void set_time(time_t t); * @param read_rtc pointer to function which returns current UNIX timestamp * @param write_rtc pointer to function which sets current UNIX timestamp, can be NULL * @param init_rtc pointer to funtion which initializes RTC, can be NULL - * @param isenabled_rtc pointer to function wich returns if the rtc is enabled, can be NULL + * @param isenabled_rtc pointer to function which returns if the rtc is enabled, can be NULL */ void attach_rtc(time_t (*read_rtc)(void), void (*write_rtc)(time_t), void (*init_rtc)(void), int (*isenabled_rtc)(void)); From 00186e6f14e888ba9b34aeae9dbbbe047e1aeaa5 Mon Sep 17 00:00:00 2001 From: Amanda Butler Date: Fri, 12 Oct 2018 14:50:52 -0500 Subject: [PATCH 15/19] Copy edit mbed_rtc_time.h Copy edit existing text for U.S. spelling and consistent capitalization. --- platform/mbed_rtc_time.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/mbed_rtc_time.h b/platform/mbed_rtc_time.h index 65fad42600..835fff7956 100644 --- a/platform/mbed_rtc_time.h +++ b/platform/mbed_rtc_time.h @@ -59,7 +59,7 @@ extern "C" { /** Set the current time * - * Initialises and sets the time of the microcontroller Real-Time Clock (RTC) + * Initializes and sets the time of the microcontroller Real-Time Clock (RTC) * to the time represented by the number of seconds since January 1, 1970 * (the UNIX timestamp). * @@ -85,7 +85,7 @@ void set_time(time_t t); * @param read_rtc pointer to function which returns current UNIX timestamp * @param write_rtc pointer to function which sets current UNIX timestamp, can be NULL * @param init_rtc pointer to funtion which initializes RTC, can be NULL - * @param isenabled_rtc pointer to function which returns if the rtc is enabled, can be NULL + * @param isenabled_rtc pointer to function which returns if the RTC is enabled, can be NULL */ void attach_rtc(time_t (*read_rtc)(void), void (*write_rtc)(time_t), void (*init_rtc)(void), int (*isenabled_rtc)(void)); From 19472ff1543be5446d1441e6c55021b79fbcb630 Mon Sep 17 00:00:00 2001 From: Amanda Butler Date: Fri, 12 Oct 2018 14:56:01 -0500 Subject: [PATCH 16/19] Copy edit I2C.h Edit existing text. --- drivers/I2C.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/I2C.h b/drivers/I2C.h index b9df4f864a..db3b505ae3 100644 --- a/drivers/I2C.h +++ b/drivers/I2C.h @@ -44,8 +44,8 @@ namespace mbed { * Read temperature from LM75BD * #include "mbed.h" * I2C i2c(I2C_SDA , I2C_SCL); - * const int addr7bit = 0x48; // 7 bit I2C address - * const int addr8bit = 0x48 << 1; // 8bit I2C address, 0x90 + * const int addr7bit = 0x48; // 7-bit I2C address + * const int addr8bit = 0x48 << 1; // 8-bit I2C address, 0x90 * * int main() { * char cmd[2]; @@ -53,7 +53,7 @@ namespace mbed { * cmd[0] = 0x01; * cmd[1] = 0x00; * - * // read and write takes the 8 bit version of the address. + * // read and write takes the 8-bit version of the address. * // set up configuration register (at 0x01) * i2c.write(addr8bit, cmd, 2); * @@ -112,7 +112,7 @@ public: * * @returns * 0 on success (ack), - * non-zero on failure (nack) + * nonzero on failure (nack) */ int read(int address, char *data, int length, bool repeated = false); @@ -138,7 +138,7 @@ public: * * @returns * 0 on success (ack), - * non-zero on failure (nack) + * nonzero on failure (nack) */ int write(int address, const char *data, int length, bool repeated = false); @@ -176,14 +176,14 @@ public: #if DEVICE_I2C_ASYNCH - /** Start non-blocking I2C transfer. + /** Start nonblocking 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 - * @param rx_buffer The RX buffer which is used for received data + * @param rx_buffer The RX buffer, which is used for received data * @param rx_length The length of RX buffer in bytes * @param event The logical OR of events to modify * @param callback The event callback function @@ -194,7 +194,7 @@ public: */ 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 + /** Abort the ongoing I2C transfer */ void abort_transfer(); From e51169e3c8ca3c21c2dc2418638e0c56f28b4cf1 Mon Sep 17 00:00:00 2001 From: kegilbert Date: Fri, 12 Oct 2018 14:53:14 -0500 Subject: [PATCH 17/19] Remove protected members from doxy in Analog/Digital classes - Add example snippets to Analog/Digital read/write overrides --- drivers/AnalogIn.h | 3 ++- drivers/AnalogOut.h | 3 ++- drivers/DigitalIn.h | 7 +++++++ drivers/DigitalInOut.h | 19 ++++++++++++++++++- drivers/DigitalOut.h | 15 ++++++++++++++- 5 files changed, 43 insertions(+), 4 deletions(-) diff --git a/drivers/AnalogIn.h b/drivers/AnalogIn.h index c9ccfa25a1..f634fa5ee0 100644 --- a/drivers/AnalogIn.h +++ b/drivers/AnalogIn.h @@ -114,7 +114,7 @@ public: } protected: - + #if !defined(DOXYGEN_ONLY) virtual void lock() { _mutex->lock(); @@ -127,6 +127,7 @@ protected: analogin_t _adc; static SingletonPtr _mutex; + #endif //!defined(DOXYGEN_ONLY) }; } // namespace mbed diff --git a/drivers/AnalogOut.h b/drivers/AnalogOut.h index 3945c580c4..2f49fef8bc 100644 --- a/drivers/AnalogOut.h +++ b/drivers/AnalogOut.h @@ -141,7 +141,7 @@ public: } protected: - + #if !defined(DOXYGEN_ONLY) virtual void lock() { _mutex.lock(); @@ -154,6 +154,7 @@ protected: dac_t _dac; PlatformMutex _mutex; + #endif //!defined(DOXYGEN_ONLY) }; } // namespace mbed diff --git a/drivers/DigitalIn.h b/drivers/DigitalIn.h index 1a2af01fa3..a5679b1225 100644 --- a/drivers/DigitalIn.h +++ b/drivers/DigitalIn.h @@ -108,6 +108,11 @@ public: /** An operator shorthand for read() * \sa DigitalIn::read() + * @code + * DigitalIn button(BUTTON1); + * DigitalOut led(LED1); + * led = button; // Equivalent to led.write(button.read()) + * @endcode */ operator int() { @@ -116,7 +121,9 @@ public: } protected: + #if !defined(DOXYGEN_ONLY) gpio_t gpio; + #endif //!defined(DOXYGEN_ONLY) }; } // namespace mbed diff --git a/drivers/DigitalInOut.h b/drivers/DigitalInOut.h index a11fcad2c0..74a5747f20 100644 --- a/drivers/DigitalInOut.h +++ b/drivers/DigitalInOut.h @@ -121,6 +121,13 @@ public: /** A shorthand for write() * \sa DigitalInOut::write() + * @code + * DigitalInOut inout(PIN); + * DigitalIn button(BUTTON1); + * inout.output(); + * + * inout = button; // Equivalent to inout.write(button.read()) + * @endcode */ DigitalInOut &operator= (int value) { @@ -129,7 +136,8 @@ public: return *this; } - /** A shorthand for write() + /**A shorthand for write() using the assignment operator which copies the + * state from the DigitalInOut argument. * \sa DigitalInOut::write() */ DigitalInOut &operator= (DigitalInOut &rhs) @@ -142,6 +150,13 @@ public: /** A shorthand for read() * \sa DigitalInOut::read() + * @code + * DigitalInOut inout(PIN); + * DigitalOut led(LED1); + * + * inout.input(); + * led = inout; // Equivalent to led.write(inout.read()) + * @endcode */ operator int() { @@ -150,7 +165,9 @@ public: } protected: + #if !defined(DOXYGEN_ONLY) gpio_t gpio; + #endif //!defined(DOXYGEN_ONLY) }; } // namespace mbed diff --git a/drivers/DigitalOut.h b/drivers/DigitalOut.h index fb6d1be6c2..5758c2658c 100644 --- a/drivers/DigitalOut.h +++ b/drivers/DigitalOut.h @@ -104,6 +104,11 @@ public: /** A shorthand for write() * \sa DigitalOut::write() + * @code + * DigitalIn button(BUTTON1); + * DigitalOut led(LED1); + * led = button; // Equivalent to led.write(button.read()) + * @endcode */ DigitalOut &operator= (int value) { @@ -112,7 +117,8 @@ public: return *this; } - /** A shorthand for write() + /** A shorthand for write() using the assignment operator which copies the + * state from the DigitalOut argument. * \sa DigitalOut::write() */ DigitalOut &operator= (DigitalOut &rhs) @@ -125,6 +131,11 @@ public: /** A shorthand for read() * \sa DigitalOut::read() + * @code + * DigitalIn button(BUTTON1); + * DigitalOut led(LED1); + * led = button; // Equivalent to led.write(button.read()) + * @endcode */ operator int() { @@ -133,7 +144,9 @@ public: } protected: + #if !defined(DOXYGEN_ONLY) gpio_t gpio; + #endif //!defined(DOXYGEN_ONLY) }; } // namespace mbed From 92108858f5d7332dad3a8dd09659aafee3a7f855 Mon Sep 17 00:00:00 2001 From: deepikabhavnani Date: Fri, 12 Oct 2018 17:09:31 -0500 Subject: [PATCH 18/19] Doc changes and rephrasing --- platform/ATCmdParser.h | 43 ++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/platform/ATCmdParser.h b/platform/ATCmdParser.h index 40adea9c84..22fe132a2a 100644 --- a/platform/ATCmdParser.h +++ b/platform/ATCmdParser.h @@ -82,11 +82,11 @@ public: /** * Constructor * - * @param fh A FileHandle to a digital interface to use for AT commands - * @param output_delimiter end of command line termination - * @param buffer_size size of internal buffer for transaction - * @param timeout timeout of the connection - * @param debug turns on/off debug output for AT commands + * @param fh A FileHandle to the digital interface, used for AT commands + * @param output_delimiter End of command line termination + * @param buffer_size Size of internal buffer for transaction + * @param timeout Timeout of the connection + * @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) @@ -114,7 +114,8 @@ public: /** * Allows timeout to be changed between commands * - * @param timeout timeout of the connection + * @param timeout ATCmdParser API's (read/write/send/recv ..etc) throw an + * error if no response is received in `timeout` duration */ void set_timeout(int timeout) { @@ -128,7 +129,9 @@ public: * Please use set_timeout(int) API only from now on. * Allows timeout to be changed between commands * - * @param timeout timeout of the connection + * @param timeout ATCmdParser API's (read/write/send/recv ..etc) throw an + * error if no response is received in `timeout` duration + * */ MBED_DEPRECATED_SINCE("mbed-os-5.5.0", "Replaced with set_timeout for consistency") void setTimeout(int timeout) @@ -139,7 +142,7 @@ public: /** * Sets string of characters to use as line delimiters * - * @param output_delimiter string of characters to use as line delimiters + * @param output_delimiter String of characters to use as line delimiters */ void set_delimiter(const char *output_delimiter) { @@ -165,7 +168,7 @@ public: /** * Allows traces from modem to be turned on or off * - * @param on set as 1 to turn on traces and vice versa. + * @param on Set as 1 to turn on traces and vice versa. */ void debug_on(uint8_t on) { @@ -178,7 +181,7 @@ public: * * Allows traces from modem to be turned on or off * - * @param on set as 1 to turn on traces and vice versa. + * @param on Set as 1 to turn on traces and vice versa. */ MBED_DEPRECATED_SINCE("mbed-os-5.5.0", "Replaced with debug_on for consistency") void debugOn(uint8_t on) @@ -237,8 +240,8 @@ public: /** * Write an array of bytes to the underlying stream * - * @param data the array of bytes to write - * @param size number of bytes to write + * @param data The array of bytes to write + * @param size Number of bytes to write * @return number of bytes written or -1 on failure */ int write(const char *data, int size); @@ -246,8 +249,8 @@ public: /** * Read an array of bytes from the underlying stream * - * @param data the destination for the read bytes - * @param size number of bytes to read + * @param data The buffer for filling the read bytes + * @param size Number of bytes to read * @return number of bytes read or -1 on failure */ int read(char *data, int size); @@ -256,8 +259,8 @@ public: * Direct printf to underlying stream * @see printf * - * @param format format string to pass to printf - * @param ... arguments to printf + * @param format Format string to pass to printf + * @param ... Variable arguments to printf * @return number of bytes written or -1 on failure */ int printf(const char *format, ...) MBED_PRINTF_METHOD(1, 2); @@ -268,8 +271,8 @@ public: * Direct scanf on underlying stream * @see scanf * - * @param format format string to pass to scanf - * @param ... arguments to scanf + * @param format Format string to pass to scanf + * @param ... Variable arguments to scanf * @return number of bytes read or -1 on failure */ int scanf(const char *format, ...) MBED_SCANF_METHOD(1, 2); @@ -279,8 +282,8 @@ public: /** * Attach a callback for out-of-band data * - * @param prefix string on when to initiate callback - * @param func callback to call when string is read + * @param prefix String on when to initiate callback + * @param func Callback to call when string is read * @note out-of-band data is only processed during a scanf call */ void oob(const char *prefix, mbed::Callback func); From 5b2230430094f5d5de8416b11bb646582dab844b Mon Sep 17 00:00:00 2001 From: Amanda Butler Date: Fri, 12 Oct 2018 17:16:09 -0500 Subject: [PATCH 19/19] Edit ATCmdParser.md Make minor grammar and spelling edits. --- platform/ATCmdParser.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/platform/ATCmdParser.h b/platform/ATCmdParser.h index 22fe132a2a..272773073b 100644 --- a/platform/ATCmdParser.h +++ b/platform/ATCmdParser.h @@ -83,7 +83,7 @@ public: * Constructor * * @param fh A FileHandle to the digital interface, used for AT commands - * @param output_delimiter End of command line termination + * @param output_delimiter End of command-line termination * @param buffer_size Size of internal buffer for transaction * @param timeout Timeout of the connection * @param debug Turns on/off debug output for AT commands @@ -114,7 +114,7 @@ public: /** * Allows timeout to be changed between commands * - * @param timeout ATCmdParser API's (read/write/send/recv ..etc) throw an + * @param timeout ATCmdParser APIs (read/write/send/recv ..etc) throw an * error if no response is received in `timeout` duration */ void set_timeout(int timeout) @@ -123,13 +123,13 @@ public: } /** - * For backwards compatibility. + * For backward compatibility. * @deprecated Do not use this function. This function has been replaced with set_timeout for consistency. * * Please use set_timeout(int) API only from now on. * Allows timeout to be changed between commands * - * @param timeout ATCmdParser API's (read/write/send/recv ..etc) throw an + * @param timeout ATCmdParser APIs (read/write/send/recv ..etc) throw an * error if no response is received in `timeout` duration * */ @@ -176,7 +176,7 @@ public: } /** - * For backwards compatibility. + * For backward compatibility. * @deprecated Do not use this function. This function has been replaced with debug_on for consistency. * * Allows traces from modem to be turned on or off @@ -296,7 +296,7 @@ public: /** * Abort current recv * - * Can be called from oob handler to interrupt the current + * Can be called from out-of-band handler to interrupt the current * recv operation. */ void abort(); @@ -307,7 +307,7 @@ public: * Process out-of-band data in the receive buffer. This function * returns immediately if there is no data to process. * - * @return true if oob data processed, false otherwise + * @return true if out-of-band data processed, false otherwise */ bool process_oob(void); };