diff --git a/examples/Makefile b/examples/Makefile index f7cf7bd3eee106819ea1061152651ee3544aa75f..08d173a827158c8d9069c2f6cf8fae704810b673 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -3,7 +3,7 @@ # `wildcard ./*/` works in both linux and linux/wine, while `wildcard */` enumerates nothing under wine SUBDIRS = $(sort $(dir $(wildcard ./*/))) -SUBDIRS:=$(filter-out ./ ./CC3200/ ./ESP8266_RTOS/ ./MSP432/ ./NXP_K64/ ./PIC32/ ./STM32F4_CC3100/ ./mbed/ ./nRF52/, $(SUBDIRS)) +SUBDIRS:=$(filter-out ./ ./CC3200/ ./ESP8266_RTOS/ ./MSP432/ ./NXP_K64/ ./PIC32/ ./STM32F4_CC3100/ ./mbed/ ./nRF51/ ./nRF52/, $(SUBDIRS)) ifeq ($(OS), Windows_NT) SUBDIRS:=$(filter-out ./load_balancer/ ./netcat/ ./raspberry_pi_mjpeg_led/ ./captive_dns_server/, $(SUBDIRS)) diff --git a/examples/nRF51/http/bleconfig.c b/examples/nRF51/http/bleconfig.c new file mode 100644 index 0000000000000000000000000000000000000000..d706aeda01ad725df3395af9f057f05f146bdf5d --- /dev/null +++ b/examples/nRF51/http/bleconfig.c @@ -0,0 +1,569 @@ +/* Copyright (c) 2013 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + +/* clang-format off */ + +/** @file + * + * @defgroup iot_sdk_tcp_server main.c + * @{ + * @ingroup iot_sdk_app_lwip + * @brief This file contains the source code for LwIP TCP Server sample application. + * + */ + +#include <stdbool.h> +#include <stdint.h> +#include "boards.h" +#include "app_timer_appsh.h" +#include "app_scheduler.h" +#include "app_button.h" +#include "nordic_common.h" +#include "softdevice_handler_appsh.h" +#include "ble_advdata.h" +#include "ble_srv_common.h" +#include "ble_ipsp.h" +#include "ble_6lowpan.h" +#include "mem_manager.h" +#include "app_trace.h" +#include "lwip/init.h" +#include "lwip/inet6.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" +#include "lwip/netif.h" +/*lint -save -e607 */ +#include "lwip/tcp.h" +/*lint -restore */ +#include "lwip/timers.h" +#include "nrf_platform_port.h" +#include "app_util_platform.h" + +#define DEVICE_NAME "LwIPTCPServer" /**< Device name used in BLE undirected advertisement. */ + +#define APP_TIMER_PRESCALER NRF51_DRIVER_TIMER_PRESCALER /**< Value of the RTC1 PRESCALER register. */ +#define APP_TIMER_MAX_TIMERS 1 /**< Maximum number of simultaneously created timers. */ +#define APP_TIMER_OP_QUEUE_SIZE 1 +#define LWIP_SYS_TIMER_INTERVAL APP_TIMER_TICKS(250, APP_TIMER_PRESCALER) /**< Interval for timer used as trigger to send. */ + +#define SCHED_MAX_EVENT_DATA_SIZE 128 /**< Maximum size of scheduler events. */ +#define SCHED_QUEUE_SIZE 12 /**< Maximum number of events in the scheduler queue. */ + +#define ADVERTISING_LED BSP_LED_0_MASK /**< Is on when device is advertising. */ +#define CONNECTED_LED BSP_LED_1_MASK /**< Is on when device is connected. */ +#define TCP_CONNECTED_LED BSP_LED_2_MASK /**< Is on when device is connected. */ +#define DISPLAY_LED_0 BSP_LED_0_MASK /**< LED used for displaying mod 4 of data payload received on UDP port. */ +#define DISPLAY_LED_1 BSP_LED_1_MASK /**< LED used for displaying mod 4 of data payload received on UDP port. */ +#define DISPLAY_LED_2 BSP_LED_2_MASK /**< LED used for displaying mod 4 of data payload received on UDP port. */ +#define DISPLAY_LED_3 BSP_LED_3_MASK /**< LED used for displaying mod 4 of data payload received on UDP port. */ +#define ALL_APP_LED (BSP_LED_0_MASK | BSP_LED_1_MASK | \ + BSP_LED_2_MASK | BSP_LED_3_MASK) /**< Define used for simultaneous operation of all application LEDs. */ + +#define APP_ADV_TIMEOUT 0 /**< Time for which the device must be advertising in non-connectable mode (in seconds). 0 disables timeout. */ +#define APP_ADV_ADV_INTERVAL MSEC_TO_UNITS(100, UNIT_0_625_MS) /**< The advertising interval. This value can vary between 100ms to 10.24s). */ + +#define DEAD_BEEF 0xDEADBEEF /**< Value used as error code on stack dump, can be used to identify stack location on stack unwind. */ + +#define APPL_LOG app_trace_log /**< Macro for logging application messages on UART, in case ENABLE_DEBUG_LOG_SUPPORT is not defined, no logging occurs. */ +#define APPL_DUMP app_trace_dump /**< Macro for dumping application data on UART, in case ENABLE_DEBUG_LOG_SUPPORT is not defined, no logging occurs. */ + +#define TCP_SERVER_PORT 9000 /**< TCP server listen port number. */ +#define TCP_DATA_SIZE 8 /**< UDP Data size sent on remote. */ + +typedef enum +{ + TCP_STATE_IDLE, + TCP_STATE_REQUEST_CONNECTION, + TCP_STATE_CONNECTED, + TCP_STATE_DATA_TX_IN_PROGRESS, + TCP_STATE_DISCONNECTED +}tcp_state_t; + +eui64_t eui64_local_iid; /**< Local EUI64 value that is used as the IID for*/ +static ble_gap_adv_params_t m_adv_params; /**< Parameters to be passed to the stack when starting advertising. */ +static app_timer_id_t m_sys_timer_id; /**< System Timer used to service LwIP timers periodically. */ +static struct tcp_pcb * mp_tcp_port; /**< TCP Port to listen on. */ +static tcp_state_t m_tcp_state; /**< TCP State information. */ + + + + +/**@brief Function for error handling, which is called when an error has occurred. + * + * @warning This handler is an example only and does not fit a final product. You need to analyse + * how your product is supposed to react in case of error. + * + * @param[in] error_code Error code supplied to the handler. + * @param[in] line_num Line number where the handler is called. + * @param[in] p_file_name Pointer to the file name. + */ +void app_error_handler(uint32_t error_code, uint32_t line_num, const uint8_t * p_file_name) +{ + //Halt the application and notify of error using the LEDs. + APPL_LOG("[** ASSERT **]: Error 0x%08lX, Line %ld, File %s\r\n",error_code, line_num, p_file_name); + LEDS_ON(ALL_APP_LED); + for(;;) + { + } + + // @note: In case on assert, it is desired to only recover and reset, uncomment the line below. + //NVIC_SystemReset(); +} + + +/**@brief Callback function for asserts in the SoftDevice. + * + * @details This function will be called in case of an assert in the SoftDevice. + * + * @warning This handler is an example only and does not fit a final product. You need to analyse + * how your product is supposed to react in case of Assert. + * @warning On assert from the SoftDevice, the system can only recover on reset. + * + * @param[in] line_num Line number of the failing ASSERT call. + * @param[in] file_name File name of the failing ASSERT call. + */ +void assert_nrf_callback(uint16_t line_num, const uint8_t * p_file_name) +{ + app_error_handler(DEAD_BEEF, line_num, p_file_name); +} + + +/**@brief Function for the LEDs initialization. + * + * @details Initializes all LEDs used by this application. + */ +static void leds_init(void) +{ + // Configure application LED pins. + LEDS_CONFIGURE(ALL_APP_LED); + + // Turn off all LED on initialization. + LEDS_OFF(ALL_APP_LED); +} + + +/**@brief Function for initializing the Advertising functionality. + * + * @details Encodes the required advertising data and passes it to the stack. + * Also builds a structure to be passed to the stack when starting advertising. + */ +static void advertising_init(void) +{ + uint32_t err_code; + ble_advdata_t advdata; + uint8_t flags = BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED; + ble_gap_conn_sec_mode_t sec_mode; + ble_gap_addr_t my_addr; + + BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode); + + err_code = sd_ble_gap_device_name_set(&sec_mode, + (const uint8_t *)DEVICE_NAME, + strlen(DEVICE_NAME)); + APP_ERROR_CHECK(err_code); + + err_code = sd_ble_gap_address_get(&my_addr); + APP_ERROR_CHECK(err_code); + + my_addr.addr[5] = 0x00; + my_addr.addr_type = BLE_GAP_ADDR_TYPE_PUBLIC; + + err_code = sd_ble_gap_address_set(&my_addr); + APP_ERROR_CHECK(err_code); + + IPV6_EUI64_CREATE_FROM_EUI48(eui64_local_iid.identifier, + my_addr.addr, + my_addr.addr_type); + + ble_uuid_t adv_uuids[] = + { + {BLE_UUID_IPSP_SERVICE, BLE_UUID_TYPE_BLE} + }; + + //Build and set advertising data. + memset(&advdata, 0, sizeof(advdata)); + + advdata.name_type = BLE_ADVDATA_FULL_NAME; + advdata.flags = flags; + advdata.uuids_complete.uuid_cnt = sizeof(adv_uuids) / sizeof(adv_uuids[0]); + advdata.uuids_complete.p_uuids = adv_uuids; + + err_code = ble_advdata_set(&advdata, NULL); + APP_ERROR_CHECK(err_code); + + //Initialize advertising parameters (used when starting advertising). + memset(&m_adv_params, 0, sizeof(m_adv_params)); + + m_adv_params.type = BLE_GAP_ADV_TYPE_ADV_IND; + m_adv_params.p_peer_addr = NULL; // Undirected advertisement. + m_adv_params.fp = BLE_GAP_ADV_FP_ANY; + m_adv_params.interval = APP_ADV_ADV_INTERVAL; + m_adv_params.timeout = APP_ADV_TIMEOUT; +} + + +/**@brief Function for starting advertising. +*/ +static void advertising_start(void) +{ + uint32_t err_code; + + err_code = sd_ble_gap_adv_start(&m_adv_params); + APP_ERROR_CHECK(err_code); + + LEDS_ON(ADVERTISING_LED); +} + + +/**@brief Function for handling the Application's BLE Stack events. + * + * @param[in] p_ble_evt Bluetooth stack event. + */ +static void on_ble_evt(ble_evt_t * p_ble_evt) +{ + switch (p_ble_evt->header.evt_id) + { + case BLE_GAP_EVT_CONNECTED: + APPL_LOG ("[APPL]: Connected.\r\n"); + break; + case BLE_GAP_EVT_DISCONNECTED: + APPL_LOG ("[APPL]: Disconnected.\r\n"); + advertising_start(); + break; + default: + break; + } +} + + +/**@brief Function for dispatching a BLE stack event to all modules with a BLE stack event handler. + * + * @details This function is called from the BLE Stack event interrupt handler after a BLE stack + * event has been received. + * + * @param[in] p_ble_evt Bluetooth stack event. + */ +static void ble_evt_dispatch(ble_evt_t * p_ble_evt) +{ + ble_ipsp_evt_handler(p_ble_evt); + on_ble_evt(p_ble_evt); +} + + +/**@brief Function for initializing the BLE stack. + * + * @details Initializes the SoftDevice and the BLE event interrupt. + */ +static void ble_stack_init(void) +{ + uint32_t err_code; + + // Initialize the SoftDevice handler module. + SOFTDEVICE_HANDLER_APPSH_INIT(NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, true); + + // Register with the SoftDevice handler module for BLE events. + err_code = softdevice_ble_evt_handler_set(ble_evt_dispatch); + APP_ERROR_CHECK(err_code); +} + + +/**@brief Function for the Event Scheduler initialization. +*/ +static void scheduler_init(void) +{ + APP_SCHED_INIT(SCHED_MAX_EVENT_DATA_SIZE, SCHED_QUEUE_SIZE); +} + + +/**@brief Function to TCP port. + * + * @details Function to close the TCP port and reset any information on the port. + */ +static void tcp_port_close(struct tcp_pcb * p_pcb) +{ + m_tcp_state = TCP_STATE_REQUEST_CONNECTION; + + //Reset all information set on and/or callback registered for the port. + tcp_arg(p_pcb, NULL); + tcp_sent(p_pcb, NULL); + tcp_recv(p_pcb, NULL); + tcp_err(p_pcb, NULL); + tcp_poll(p_pcb, NULL, 0); + + UNUSED_VARIABLE(tcp_close(p_pcb)); + + LEDS_OFF((DISPLAY_LED_0 | DISPLAY_LED_1 | DISPLAY_LED_2 | DISPLAY_LED_3)); + LEDS_ON(CONNECTED_LED); +} + + +/**@brief TCP Port Write complete callback. + * + * @details Calbback registered to be notified of the write complete event on the TCP port. + * In case write complete is notified with 'zero' length, port is closed. + * + * @param[in] p_arg Receive argument set on the port. + * @param[in] p_pcb PCB identifier of the port. + * @param[in] len Length of data written successfully. + * + * @retval ERR_OK. + */ +static err_t tcp_write_complete(void * p_arg, + struct tcp_pcb * p_pcb, + u16_t len) +{ + UNUSED_PARAMETER(p_arg); + UNUSED_PARAMETER(p_pcb); + + if (len != 0) + { + //Write complete, reset the state to connected from transmit pending. + m_tcp_state = TCP_STATE_CONNECTED; + } + else + { + //Something is not right on the port, close the port. + tcp_port_close(mp_tcp_port); + } + return ERR_OK; +} + + +/**@brief Send test data on the port. + * + * @details Sends TCP data in Request of size 8 in format described in description above. + * + * @param[in] p_pcb PCB identifier of the port. + */ +static void tcp_send_data(struct tcp_pcb * p_pcb, uint32_t sequence_number) +{ + err_t err = ERR_OK; + + if (m_tcp_state != TCP_STATE_DATA_TX_IN_PROGRESS) + { + //Register callback to get notification of data reception is complete. + tcp_sent(p_pcb, tcp_write_complete); + uint8_t tcp_data[TCP_DATA_SIZE]; + + tcp_data[0] = (uint8_t )((sequence_number >> 24) & 0x000000FF); + tcp_data[1] = (uint8_t )((sequence_number >> 16) & 0x000000FF); + tcp_data[2] = (uint8_t )((sequence_number >> 8) & 0x000000FF); + tcp_data[3] = (uint8_t )(sequence_number & 0x000000FF); + + tcp_data[4] = 'P'; + tcp_data[5] = 'o'; + tcp_data[6] = 'n'; + tcp_data[7] = 'g'; + + //Enqueue data for transmission. + err = tcp_write(p_pcb, tcp_data, TCP_DATA_SIZE, 1); + + if (err != ERR_OK) + { + APPL_LOG ("[APPL]: Failed to send TCP packet, reason %d\r\n", err); + } + else + { + m_tcp_state = TCP_STATE_DATA_TX_IN_PROGRESS; + } + } + else + { + //Wait for tx to be complete. + } +} + + +/**@brief Callback registered for receiving data on the TCP Port. + * + * @param[in] p_arg Receive argument set on the TCP port. + * @param[in] p_pcb TCP PCB on which data is received. + * @param[in] p_buffer Buffer with received data. + * @param[in] err Event result indicating error associated with the receive, + * if any, else ERR_OK. + */ +err_t tcp_recv_data_handler(void * p_arg, + struct tcp_pcb * p_pcb, + struct pbuf * p_buffer, + err_t err) +{ + APPL_LOG ("[APPL]: >> TCP Data.\r\n"); + + //Check event result before proceeding. + if (err == ERR_OK) + { + uint8_t *p_data = p_buffer->payload; + + if (p_buffer->len == TCP_DATA_SIZE) + { + uint32_t sequence_number = 0; + + sequence_number = ((p_data[0] << 24) & 0xFF000000); + sequence_number |= ((p_data[1] << 16) & 0x00FF0000); + sequence_number |= ((p_data[2] << 8) & 0x0000FF00); + sequence_number |= (p_data[3] & 0x000000FF); + + LEDS_OFF(ALL_APP_LED); + + if (sequence_number & 0x00000001) + { + LEDS_ON(DISPLAY_LED_0); + } + if (sequence_number & 0x00000002) + { + LEDS_ON(DISPLAY_LED_1); + } + if (sequence_number & 0x00000004) + { + LEDS_ON(DISPLAY_LED_2); + } + if (sequence_number & 0x00000008) + { + LEDS_ON(DISPLAY_LED_3); + } + + //Send Response + tcp_send_data(p_pcb, sequence_number); + } + else + { + APPL_LOG ("[APPL]: TCP data received in incorrect format.\r\n"); + } + // All is good with the data received, process it. + tcp_recved(p_pcb, p_buffer->tot_len); + UNUSED_VARIABLE(pbuf_free(p_buffer)); + } + else + { + //Free the buffer in case its not NULL. + if (p_buffer != NULL) + { + UNUSED_VARIABLE(pbuf_free(p_buffer)); + } + + //Something is not right with the port, close the port. + tcp_port_close(mp_tcp_port); + } + + return ERR_OK; +} + + + + + +/**@brief Function for initializing IP stack. + * + * @details Initialize the IP Stack and its driver. + */ +static void ip_stack_init(void) +{ + uint32_t err_code = nrf51_sdk_mem_init(); + APP_ERROR_CHECK(err_code); + + //Initialize LwIP stack. + lwip_init(); + + //Initialize LwIP stack driver. + err_code = nrf51_driver_init(); + APP_ERROR_CHECK(err_code); +} + + +/**@brief Timer callback used for periodic servicing of LwIP protocol timers. + * + * @details Timer callback used for periodic servicing of LwIP protocol timers. + * + * @param[in] p_context Pointer used for passing context. No context used in this application. + */ +static void system_timer_callback(void * p_context) +{ + UNUSED_VARIABLE(p_context); + sys_check_timeouts(); +} + + +/**@brief Function for the Timer initialization. + * + * @details Initializes the timer module. This creates and starts application timers. + */ +static void timers_init(void) +{ + uint32_t err_code; + + // Initialize timer module. + APP_TIMER_APPSH_INIT(APP_TIMER_PRESCALER, APP_TIMER_MAX_TIMERS, APP_TIMER_OP_QUEUE_SIZE, true); + + // Create timers. + err_code = app_timer_create(&m_sys_timer_id, + APP_TIMER_MODE_REPEATED, + system_timer_callback); + APP_ERROR_CHECK(err_code); +} + + +/**@brief Function to handle interface up event. */ +void nrf51_driver_interface_up(void) +{ + uint32_t err_code; + + APPL_LOG ("[APPL]: IPv6 interface up.\r\n"); + + sys_check_timeouts(); + + m_tcp_state = TCP_STATE_REQUEST_CONNECTION; + + err_code = app_timer_start(m_sys_timer_id, LWIP_SYS_TIMER_INTERVAL, NULL); + APP_ERROR_CHECK(err_code); + + LEDS_OFF(ADVERTISING_LED); + LEDS_ON(CONNECTED_LED); +} + + +/**@brief Function to handle interface down event. */ +void nrf51_driver_interface_down(void) +{ + uint32_t err_code; + + APPL_LOG ("[APPL]: IPv6 interface down.\r\n"); + + err_code = app_timer_stop(m_sys_timer_id); + APP_ERROR_CHECK(err_code); + + LEDS_OFF((DISPLAY_LED_0 | DISPLAY_LED_1 | DISPLAY_LED_2 | DISPLAY_LED_3)); + LEDS_ON(ADVERTISING_LED); + + m_tcp_state = TCP_STATE_DISCONNECTED; +} + +void bleconfig_init(void) { + //Initialize. + app_trace_init(); + leds_init(); + timers_init(); + ble_stack_init(); + advertising_init(); + ip_stack_init (); + scheduler_init(); + + APPL_LOG ("\r\n"); + APPL_LOG ("[APPL]: Init done.\r\n"); + + //Start execution. + advertising_start(); +} + +void bleconfig_poll(void) { + //Execute event schedule. + app_sched_execute(); +} + diff --git a/examples/nRF51/http/bleconfig.h b/examples/nRF51/http/bleconfig.h new file mode 100644 index 0000000000000000000000000000000000000000..512224fc91da22582d81669dd583ff997d82866d --- /dev/null +++ b/examples/nRF51/http/bleconfig.h @@ -0,0 +1,8 @@ +/* + * Copyright (c) 2014-2016 Cesanta Software Limited + * All rights reserved + */ + +void bleconfig_init(void); +void bleconfig_poll(void); + diff --git a/examples/nRF51/http/boards/pca10028/arm5_no_packs/iot_lwip_tcp_server_pca10028.uvguix b/examples/nRF51/http/boards/pca10028/arm5_no_packs/iot_lwip_tcp_server_pca10028.uvguix new file mode 100644 index 0000000000000000000000000000000000000000..cf8cc03c074e501ccdd523321e5b753f268c4d09 --- /dev/null +++ b/examples/nRF51/http/boards/pca10028/arm5_no_packs/iot_lwip_tcp_server_pca10028.uvguix @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<ProjectGui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_guix.xsd"> + + <SchemaVersion>-5.1</SchemaVersion> + + <Header>### uVision Project, (C) Keil Software</Header> + + <ViewPool/> + + <MDIGroups> + <Orientation>1</Orientation> + <ActiveMDIGroup>0</ActiveMDIGroup> + <MDIGroup> + <Size>100</Size> + <ActiveTab>0</ActiveTab> + <Doc> + <Name>..\..\..\..\..\..\..\components\softdevice\s1xx_iot\doc\s1xx-iot-prototype2_licence_agreement.txt</Name> + <ColumnNumber>0</ColumnNumber> + <TopLine>1</TopLine> + <CurrentLine>1</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + </MDIGroup> + </MDIGroups> + +</ProjectGui> \ No newline at end of file diff --git a/examples/nRF51/http/boards/pca10028/arm5_no_packs/iot_lwip_tcp_server_pca10028.uvoptx b/examples/nRF51/http/boards/pca10028/arm5_no_packs/iot_lwip_tcp_server_pca10028.uvoptx new file mode 100644 index 0000000000000000000000000000000000000000..88f4442ed9bf412512a6baa453e33a41732692b3 --- /dev/null +++ b/examples/nRF51/http/boards/pca10028/arm5_no_packs/iot_lwip_tcp_server_pca10028.uvoptx @@ -0,0 +1,665 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd"> + + <SchemaVersion>1.0</SchemaVersion> + + <Header>### uVision Project, (C) Keil Software</Header> + + <Extensions> + <cExt>*.c</cExt> + <aExt>*.s*; *.src; *.a*</aExt> + <oExt>*.obj</oExt> + <lExt>*.lib</lExt> + <tExt>*.txt; *.h; *.inc</tExt> + <pExt>*.plm</pExt> + <CppX>*.cpp</CppX> + </Extensions> + + <DaveTm> + <dwLowDateTime>0</dwLowDateTime> + <dwHighDateTime>0</dwHighDateTime> + </DaveTm> + + <Target> + <TargetName>nrf51422_xxac_s1xx_iot</TargetName> + <ToolsetNumber>0x4</ToolsetNumber> + <ToolsetName>ARM-ADS</ToolsetName> + <TargetOption> + <CLKADS>16000000</CLKADS> + <OPTTT> + <gFlags>1</gFlags> + <BeepAtEnd>1</BeepAtEnd> + <RunSim>0</RunSim> + <RunTarget>1</RunTarget> + </OPTTT> + <OPTHX> + <HexSelection>1</HexSelection> + <FlashByte>65535</FlashByte> + <HexRangeLowAddress>0</HexRangeLowAddress> + <HexRangeHighAddress>0</HexRangeHighAddress> + <HexOffset>0</HexOffset> + </OPTHX> + <OPTLEX> + <PageWidth>79</PageWidth> + <PageLength>66</PageLength> + <TabStop>8</TabStop> + <ListingPath>.\_build\</ListingPath> + </OPTLEX> + <ListingPage> + <CreateCListing>1</CreateCListing> + <CreateAListing>1</CreateAListing> + <CreateLListing>1</CreateLListing> + <CreateIListing>0</CreateIListing> + <AsmCond>1</AsmCond> + <AsmSymb>1</AsmSymb> + <AsmXref>0</AsmXref> + <CCond>1</CCond> + <CCode>0</CCode> + <CListInc>0</CListInc> + <CSymb>0</CSymb> + <LinkerCodeListing>0</LinkerCodeListing> + </ListingPage> + <OPTXL> + <LMap>1</LMap> + <LComments>1</LComments> + <LGenerateSymbols>1</LGenerateSymbols> + <LLibSym>1</LLibSym> + <LLines>1</LLines> + <LLocSym>1</LLocSym> + <LPubSym>1</LPubSym> + <LXref>0</LXref> + <LExpSel>0</LExpSel> + </OPTXL> + <OPTFL> + <tvExp>1</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <IsCurrentTarget>1</IsCurrentTarget> + </OPTFL> + <CpuCode>5</CpuCode> + <DebugOpt> + <uSim>0</uSim> + <uTrg>1</uTrg> + <sLdApp>1</sLdApp> + <sGomain>1</sGomain> + <sRbreak>1</sRbreak> + <sRwatch>1</sRwatch> + <sRmem>1</sRmem> + <sRfunc>1</sRfunc> + <sRbox>1</sRbox> + <tLdApp>1</tLdApp> + <tGomain>1</tGomain> + <tRbreak>1</tRbreak> + <tRwatch>1</tRwatch> + <tRmem>1</tRmem> + <tRfunc>0</tRfunc> + <tRbox>1</tRbox> + <tRtrace>0</tRtrace> + <sRSysVw>1</sRSysVw> + <tRSysVw>1</tRSysVw> + <sRunDeb>0</sRunDeb> + <sLrtime>0</sLrtime> + <nTsel>6</nTsel> + <sDll></sDll> + <sDllPa></sDllPa> + <sDlgDll></sDlgDll> + <sDlgPa></sDlgPa> + <sIfile></sIfile> + <tDll></tDll> + <tDllPa></tDllPa> + <tDlgDll></tDlgDll> + <tDlgPa></tDlgPa> + <tIfile></tIfile> + <pMon>Segger\JL2CM3.dll</pMon> + </DebugOpt> + <TargetDriverDllRegistry> + <SetRegEntry> + <Number>0</Number> + <Key>JL2CM3</Key> + <Name>-U408001579 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC2000 -FN1 -FF0nrf51xxx.flm -FS00 -FL0200000 -FP0($$Device:nRF51822_xxAA$Flash\nrf51xxx.flm)</Name> + </SetRegEntry> + <SetRegEntry> + <Number>0</Number> + <Key>UL2CM3</Key> + <Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0nrf51xxx -FS00 -FL0200000 -FP0($$Device:nRF51822_xxAA$Flash\nrf51xxx.flm))</Name> + </SetRegEntry> + </TargetDriverDllRegistry> + <Breakpoint/> + <Tracepoint> + <THDelay>0</THDelay> + </Tracepoint> + <DebugFlag> + <trace>0</trace> + <periodic>0</periodic> + <aLwin>0</aLwin> + <aCover>0</aCover> + <aSer1>0</aSer1> + <aSer2>0</aSer2> + <aPa>0</aPa> + <viewmode>0</viewmode> + <vrSel>0</vrSel> + <aSym>0</aSym> + <aTbox>0</aTbox> + <AscS1>0</AscS1> + <AscS2>0</AscS2> + <AscS3>0</AscS3> + <aSer3>0</aSer3> + <eProf>0</eProf> + <aLa>0</aLa> + <aPa1>0</aPa1> + <AscS4>0</AscS4> + <aSer4>0</aSer4> + <StkLoc>0</StkLoc> + <TrcWin>0</TrcWin> + <newCpu>0</newCpu> + <uProt>0</uProt> + </DebugFlag> + <LintExecutable></LintExecutable> + <LintConfigFile></LintConfigFile> + </TargetOption> + </Target> + + <Group> + <GroupName>Application</GroupName> + <tvExp>1</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <cbSel>0</cbSel> + <RteFlg>0</RteFlg> + <File> + <GroupNumber>1</GroupNumber> + <FileNumber>1</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\main.c</PathWithFileName> + <FilenameWithoutPath>main.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>1</GroupNumber> + <FileNumber>2</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\bleconfig.c</PathWithFileName> + <FilenameWithoutPath>bleconfig.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>1</GroupNumber> + <FileNumber>3</FileNumber> + <FileType>5</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\bleconfig.h</PathWithFileName> + <FilenameWithoutPath>bleconfig.h</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>1</GroupNumber> + <FileNumber>4</FileNumber> + <FileType>5</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\myboard.h</PathWithFileName> + <FilenameWithoutPath>myboard.h</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + </Group> + + <Group> + <GroupName>Documentation</GroupName> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <cbSel>0</cbSel> + <RteFlg>0</RteFlg> + <File> + <GroupNumber>2</GroupNumber> + <FileNumber>5</FileNumber> + <FileType>5</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\Abstract.txt</PathWithFileName> + <FilenameWithoutPath>Abstract.txt</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>2</GroupNumber> + <FileNumber>6</FileNumber> + <FileType>5</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\license.txt</PathWithFileName> + <FilenameWithoutPath>license.txt</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + </Group> + + <Group> + <GroupName>Third Parties</GroupName> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <cbSel>0</cbSel> + <RteFlg>0</RteFlg> + <File> + <GroupNumber>3</GroupNumber> + <FileNumber>7</FileNumber> + <FileType>4</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\external\lwip\lib\liblwip.lib</PathWithFileName> + <FilenameWithoutPath>liblwip.lib</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>3</GroupNumber> + <FileNumber>8</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\external\lwip\src\port\nrf_platform_port.c</PathWithFileName> + <FilenameWithoutPath>nrf_platform_port.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + </Group> + + <Group> + <GroupName>nRF_BLE</GroupName> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <cbSel>0</cbSel> + <RteFlg>0</RteFlg> + <File> + <GroupNumber>4</GroupNumber> + <FileNumber>9</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\ble\common\ble_advdata.c</PathWithFileName> + <FilenameWithoutPath>ble_advdata.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>4</GroupNumber> + <FileNumber>10</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\ble\common\ble_srv_common.c</PathWithFileName> + <FilenameWithoutPath>ble_srv_common.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + </Group> + + <Group> + <GroupName>nRF_Drivers</GroupName> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <cbSel>0</cbSel> + <RteFlg>0</RteFlg> + <File> + <GroupNumber>5</GroupNumber> + <FileNumber>11</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\drivers_nrf\uart\app_uart_fifo.c</PathWithFileName> + <FilenameWithoutPath>app_uart_fifo.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>5</GroupNumber> + <FileNumber>12</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\drivers_nrf\hal\nrf_delay.c</PathWithFileName> + <FilenameWithoutPath>nrf_delay.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>5</GroupNumber> + <FileNumber>13</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\drivers_nrf\common\nrf_drv_common.c</PathWithFileName> + <FilenameWithoutPath>nrf_drv_common.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>5</GroupNumber> + <FileNumber>14</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\drivers_nrf\gpiote\nrf_drv_gpiote.c</PathWithFileName> + <FilenameWithoutPath>nrf_drv_gpiote.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + </Group> + + <Group> + <GroupName>nRF_IoT</GroupName> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <cbSel>0</cbSel> + <RteFlg>0</RteFlg> + <File> + <GroupNumber>6</GroupNumber> + <FileNumber>15</FileNumber> + <FileType>4</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\iot\ble_6lowpan\lib\ble_6lowpan.lib</PathWithFileName> + <FilenameWithoutPath>ble_6lowpan.lib</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>6</GroupNumber> + <FileNumber>16</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\iot\context_manager\iot_context_manager.c</PathWithFileName> + <FilenameWithoutPath>iot_context_manager.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + </Group> + + <Group> + <GroupName>nRF_Libraries</GroupName> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <cbSel>0</cbSel> + <RteFlg>0</RteFlg> + <File> + <GroupNumber>7</GroupNumber> + <FileNumber>17</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\libraries\button\app_button.c</PathWithFileName> + <FilenameWithoutPath>app_button.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>7</GroupNumber> + <FileNumber>18</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\libraries\util\app_error.c</PathWithFileName> + <FilenameWithoutPath>app_error.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>7</GroupNumber> + <FileNumber>19</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\libraries\fifo\app_fifo.c</PathWithFileName> + <FilenameWithoutPath>app_fifo.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>7</GroupNumber> + <FileNumber>20</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\libraries\scheduler\app_scheduler.c</PathWithFileName> + <FilenameWithoutPath>app_scheduler.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>7</GroupNumber> + <FileNumber>21</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\libraries\timer\app_timer.c</PathWithFileName> + <FilenameWithoutPath>app_timer.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>7</GroupNumber> + <FileNumber>22</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\libraries\timer\app_timer_appsh.c</PathWithFileName> + <FilenameWithoutPath>app_timer_appsh.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>7</GroupNumber> + <FileNumber>23</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\libraries\trace\app_trace.c</PathWithFileName> + <FilenameWithoutPath>app_trace.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>7</GroupNumber> + <FileNumber>24</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\libraries\mem_manager\mem_manager.c</PathWithFileName> + <FilenameWithoutPath>mem_manager.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>7</GroupNumber> + <FileNumber>25</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\libraries\util\nrf_assert.c</PathWithFileName> + <FilenameWithoutPath>nrf_assert.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>7</GroupNumber> + <FileNumber>26</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\libraries\uart\retarget.c</PathWithFileName> + <FilenameWithoutPath>retarget.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + </Group> + + <Group> + <GroupName>nRF_SoftDevice</GroupName> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <cbSel>0</cbSel> + <RteFlg>0</RteFlg> + <File> + <GroupNumber>8</GroupNumber> + <FileNumber>27</FileNumber> + <FileType>5</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\softdevice\s1xx_iot\doc\s1xx-iot-prototype2_licence_agreement.txt</PathWithFileName> + <FilenameWithoutPath>s1xx-iot-prototype2_licence_agreement.txt</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>8</GroupNumber> + <FileNumber>28</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\softdevice\common\softdevice_handler\softdevice_handler.c</PathWithFileName> + <FilenameWithoutPath>softdevice_handler.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>8</GroupNumber> + <FileNumber>29</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\nrf51_iot_sdk\components\softdevice\common\softdevice_handler\softdevice_handler_appsh.c</PathWithFileName> + <FilenameWithoutPath>softdevice_handler_appsh.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + </Group> + + <Group> + <GroupName>Mongoose</GroupName> + <tvExp>1</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <cbSel>0</cbSel> + <RteFlg>0</RteFlg> + <File> + <GroupNumber>9</GroupNumber> + <FileNumber>30</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\..\..\..\..\..\mongoose.c</PathWithFileName> + <FilenameWithoutPath>mongoose.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + </Group> + + <Group> + <GroupName>::CMSIS</GroupName> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <cbSel>0</cbSel> + <RteFlg>1</RteFlg> + </Group> + + <Group> + <GroupName>::Device</GroupName> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <cbSel>0</cbSel> + <RteFlg>1</RteFlg> + <File> + <GroupNumber>11</GroupNumber> + <FileNumber>31</FileNumber> + <FileType>2</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>RTE\Device\nRF51422_xxAC\arm_startup_nrf51.s</PathWithFileName> + <FilenameWithoutPath>arm_startup_nrf51.s</FilenameWithoutPath> + <RteFlg>1</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>11</GroupNumber> + <FileNumber>32</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>RTE\Device\nRF51422_xxAC\system_nrf51.c</PathWithFileName> + <FilenameWithoutPath>system_nrf51.c</FilenameWithoutPath> + <RteFlg>1</RteFlg> + <bShared>0</bShared> + </File> + </Group> + +</ProjectOpt> diff --git a/examples/nRF51/http/boards/pca10028/arm5_no_packs/iot_lwip_tcp_server_pca10028.uvprojx b/examples/nRF51/http/boards/pca10028/arm5_no_packs/iot_lwip_tcp_server_pca10028.uvprojx new file mode 100644 index 0000000000000000000000000000000000000000..053c86595ba80def045983ea4060ad2c552a781c --- /dev/null +++ b/examples/nRF51/http/boards/pca10028/arm5_no_packs/iot_lwip_tcp_server_pca10028.uvprojx @@ -0,0 +1,676 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd"> + + <SchemaVersion>2.1</SchemaVersion> + + <Header>### uVision Project, (C) Keil Software</Header> + + <Targets> + <Target> + <TargetName>nrf51422_xxac_s1xx_iot</TargetName> + <ToolsetNumber>0x4</ToolsetNumber> + <ToolsetName>ARM-ADS</ToolsetName> + <TargetOption> + <TargetCommonOption> + <Device>nRF51422_xxAC</Device> + <Vendor>Nordic Semiconductor</Vendor> + <PackID>NordicSemiconductor.nRF_DeviceFamilyPack.8.0.5</PackID> + <PackURL>http://developer.nordicsemi.com/nRF51_SDK/pieces/nRF_DeviceFamilyPack/</PackURL> + <Cpu>IROM(0x00000000,0x40000) IRAM(0x20000000,0x8000) CPUTYPE("Cortex-M0") CLOCK(16000000) ELITTLE</Cpu> + <FlashUtilSpec></FlashUtilSpec> + <StartupFile></StartupFile> + <FlashDriverDll>UL2CM3(-UM0049BUE -O4175 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0nRF5Prog -FS00 -FL08000)</FlashDriverDll> + <DeviceId>0</DeviceId> + <RegisterFile>core.h</RegisterFile> + <MemoryEnv></MemoryEnv> + <Cmp></Cmp> + <Asm></Asm> + <Linker></Linker> + <OHString></OHString> + <InfinionOptionDll></InfinionOptionDll> + <SLE66CMisc></SLE66CMisc> + <SLE66AMisc></SLE66AMisc> + <SLE66LinkerMisc></SLE66LinkerMisc> + <SFDFile>..\..\..\..\..\..\..\SVD\nrf51.xml</SFDFile> + <bCustSvd>0</bCustSvd> + <UseEnv>0</UseEnv> + <BinPath></BinPath> + <IncludePath></IncludePath> + <LibPath></LibPath> + <RegisterFilePath></RegisterFilePath> + <DBRegisterFilePath></DBRegisterFilePath> + <TargetStatus> + <Error>0</Error> + <ExitCodeStop>0</ExitCodeStop> + <ButtonStop>0</ButtonStop> + <NotGenerated>0</NotGenerated> + <InvalidFlash>1</InvalidFlash> + </TargetStatus> + <OutputDirectory>.\_build\</OutputDirectory> + <OutputName>nrf51422_xxac_s1xx_iot</OutputName> + <CreateExecutable>1</CreateExecutable> + <CreateLib>0</CreateLib> + <CreateHexFile>1</CreateHexFile> + <DebugInformation>1</DebugInformation> + <BrowseInformation>1</BrowseInformation> + <ListingPath>.\_build\</ListingPath> + <HexFormatSelection>1</HexFormatSelection> + <Merge32K>0</Merge32K> + <CreateBatchFile>0</CreateBatchFile> + <BeforeCompile> + <RunUserProg1>0</RunUserProg1> + <RunUserProg2>0</RunUserProg2> + <UserProg1Name></UserProg1Name> + <UserProg2Name></UserProg2Name> + <UserProg1Dos16Mode>0</UserProg1Dos16Mode> + <UserProg2Dos16Mode>0</UserProg2Dos16Mode> + <nStopU1X>0</nStopU1X> + <nStopU2X>0</nStopU2X> + </BeforeCompile> + <BeforeMake> + <RunUserProg1>0</RunUserProg1> + <RunUserProg2>0</RunUserProg2> + <UserProg1Name></UserProg1Name> + <UserProg2Name></UserProg2Name> + <UserProg1Dos16Mode>0</UserProg1Dos16Mode> + <UserProg2Dos16Mode>0</UserProg2Dos16Mode> + <nStopB1X>0</nStopB1X> + <nStopB2X>0</nStopB2X> + </BeforeMake> + <AfterMake> + <RunUserProg1>0</RunUserProg1> + <RunUserProg2>0</RunUserProg2> + <UserProg1Name></UserProg1Name> + <UserProg2Name></UserProg2Name> + <UserProg1Dos16Mode>0</UserProg1Dos16Mode> + <UserProg2Dos16Mode>0</UserProg2Dos16Mode> + </AfterMake> + <SelectedForBatchBuild>0</SelectedForBatchBuild> + <SVCSIdString></SVCSIdString> + </TargetCommonOption> + <CommonProperty> + <UseCPPCompiler>0</UseCPPCompiler> + <RVCTCodeConst>0</RVCTCodeConst> + <RVCTZI>0</RVCTZI> + <RVCTOtherData>0</RVCTOtherData> + <ModuleSelection>0</ModuleSelection> + <IncludeInBuild>1</IncludeInBuild> + <AlwaysBuild>0</AlwaysBuild> + <GenerateAssemblyFile>0</GenerateAssemblyFile> + <AssembleAssemblyFile>0</AssembleAssemblyFile> + <PublicsOnly>0</PublicsOnly> + <StopOnExitCode>3</StopOnExitCode> + <CustomArgument></CustomArgument> + <IncludeLibraryModules></IncludeLibraryModules> + <ComprImg>1</ComprImg> + </CommonProperty> + <DllOption> + <SimDllName></SimDllName> + <SimDllArguments></SimDllArguments> + <SimDlgDll></SimDlgDll> + <SimDlgDllArguments></SimDlgDllArguments> + <TargetDllName>SARMCM3.DLL</TargetDllName> + <TargetDllArguments></TargetDllArguments> + <TargetDlgDll>TARMCM1.DLL</TargetDlgDll> + <TargetDlgDllArguments>-pCM0</TargetDlgDllArguments> + </DllOption> + <DebugOption> + <OPTHX> + <HexSelection>1</HexSelection> + <HexRangeLowAddress>0</HexRangeLowAddress> + <HexRangeHighAddress>0</HexRangeHighAddress> + <HexOffset>0</HexOffset> + <Oh166RecLen>16</Oh166RecLen> + </OPTHX> + <Simulator> + <UseSimulator>0</UseSimulator> + <LoadApplicationAtStartup>1</LoadApplicationAtStartup> + <RunToMain>1</RunToMain> + <RestoreBreakpoints>1</RestoreBreakpoints> + <RestoreWatchpoints>1</RestoreWatchpoints> + <RestoreMemoryDisplay>1</RestoreMemoryDisplay> + <RestoreFunctions>1</RestoreFunctions> + <RestoreToolbox>1</RestoreToolbox> + <LimitSpeedToRealTime>0</LimitSpeedToRealTime> + <RestoreSysVw>1</RestoreSysVw> + </Simulator> + <Target> + <UseTarget>1</UseTarget> + <LoadApplicationAtStartup>1</LoadApplicationAtStartup> + <RunToMain>1</RunToMain> + <RestoreBreakpoints>1</RestoreBreakpoints> + <RestoreWatchpoints>1</RestoreWatchpoints> + <RestoreMemoryDisplay>1</RestoreMemoryDisplay> + <RestoreFunctions>0</RestoreFunctions> + <RestoreToolbox>1</RestoreToolbox> + <RestoreTracepoints>0</RestoreTracepoints> + <RestoreSysVw>1</RestoreSysVw> + </Target> + <RunDebugAfterBuild>0</RunDebugAfterBuild> + <TargetSelection>6</TargetSelection> + <SimDlls> + <CpuDll></CpuDll> + <CpuDllArguments></CpuDllArguments> + <PeripheralDll></PeripheralDll> + <PeripheralDllArguments></PeripheralDllArguments> + <InitializationFile></InitializationFile> + </SimDlls> + <TargetDlls> + <CpuDll></CpuDll> + <CpuDllArguments></CpuDllArguments> + <PeripheralDll></PeripheralDll> + <PeripheralDllArguments></PeripheralDllArguments> + <InitializationFile></InitializationFile> + <Driver>Segger\JL2CM3.dll</Driver> + </TargetDlls> + </DebugOption> + <Utilities> + <Flash1> + <UseTargetDll>1</UseTargetDll> + <UseExternalTool>0</UseExternalTool> + <RunIndependent>0</RunIndependent> + <UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging> + <Capability>1</Capability> + <DriverSelection>4099</DriverSelection> + </Flash1> + <bUseTDR>1</bUseTDR> + <Flash2>Segger\JL2CM3.dll</Flash2> + <Flash3></Flash3> + <Flash4></Flash4> + <pFcarmOut></pFcarmOut> + <pFcarmGrp></pFcarmGrp> + <pFcArmRoot></pFcArmRoot> + <FcArmLst>0</FcArmLst> + </Utilities> + <TargetArmAds> + <ArmAdsMisc> + <GenerateListings>0</GenerateListings> + <asHll>1</asHll> + <asAsm>1</asAsm> + <asMacX>1</asMacX> + <asSyms>1</asSyms> + <asFals>1</asFals> + <asDbgD>1</asDbgD> + <asForm>1</asForm> + <ldLst>0</ldLst> + <ldmm>1</ldmm> + <ldXref>1</ldXref> + <BigEnd>0</BigEnd> + <AdsALst>1</AdsALst> + <AdsACrf>1</AdsACrf> + <AdsANop>0</AdsANop> + <AdsANot>0</AdsANot> + <AdsLLst>1</AdsLLst> + <AdsLmap>1</AdsLmap> + <AdsLcgr>1</AdsLcgr> + <AdsLsym>1</AdsLsym> + <AdsLszi>1</AdsLszi> + <AdsLtoi>1</AdsLtoi> + <AdsLsun>1</AdsLsun> + <AdsLven>1</AdsLven> + <AdsLsxf>1</AdsLsxf> + <RvctClst>0</RvctClst> + <GenPPlst>0</GenPPlst> + <AdsCpuType>"Cortex-M0"</AdsCpuType> + <RvctDeviceName></RvctDeviceName> + <mOS>0</mOS> + <uocRom>0</uocRom> + <uocRam>0</uocRam> + <hadIROM>1</hadIROM> + <hadIRAM>1</hadIRAM> + <hadXRAM>0</hadXRAM> + <uocXRam>0</uocXRam> + <RvdsVP>0</RvdsVP> + <hadIRAM2>0</hadIRAM2> + <hadIROM2>0</hadIROM2> + <StupSel>8</StupSel> + <useUlib>1</useUlib> + <EndSel>0</EndSel> + <uLtcg>0</uLtcg> + <RoSelD>3</RoSelD> + <RwSelD>5</RwSelD> + <CodeSel>0</CodeSel> + <OptFeed>0</OptFeed> + <NoZi1>0</NoZi1> + <NoZi2>0</NoZi2> + <NoZi3>0</NoZi3> + <NoZi4>0</NoZi4> + <NoZi5>0</NoZi5> + <Ro1Chk>0</Ro1Chk> + <Ro2Chk>0</Ro2Chk> + <Ro3Chk>0</Ro3Chk> + <Ir1Chk>1</Ir1Chk> + <Ir2Chk>0</Ir2Chk> + <Ra1Chk>0</Ra1Chk> + <Ra2Chk>0</Ra2Chk> + <Ra3Chk>0</Ra3Chk> + <Im1Chk>1</Im1Chk> + <Im2Chk>0</Im2Chk> + <OnChipMemories> + <Ocm1> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm1> + <Ocm2> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm2> + <Ocm3> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm3> + <Ocm4> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm4> + <Ocm5> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm5> + <Ocm6> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm6> + <IRAM> + <Type>0</Type> + <StartAddress>0x20000000</StartAddress> + <Size>0x8000</Size> + </IRAM> + <IROM> + <Type>1</Type> + <StartAddress>0x0</StartAddress> + <Size>0x40000</Size> + </IROM> + <XRAM> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </XRAM> + <OCR_RVCT1> + <Type>1</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </OCR_RVCT1> + <OCR_RVCT2> + <Type>1</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </OCR_RVCT2> + <OCR_RVCT3> + <Type>1</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </OCR_RVCT3> + <OCR_RVCT4> + <Type>1</Type> + <StartAddress>0x18000</StartAddress> + <Size>0x28000</Size> + </OCR_RVCT4> + <OCR_RVCT5> + <Type>1</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </OCR_RVCT5> + <OCR_RVCT6> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </OCR_RVCT6> + <OCR_RVCT7> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </OCR_RVCT7> + <OCR_RVCT8> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </OCR_RVCT8> + <OCR_RVCT9> + <Type>0</Type> + <StartAddress>0x20002000</StartAddress> + <Size>0x6000</Size> + </OCR_RVCT9> + <OCR_RVCT10> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </OCR_RVCT10> + </OnChipMemories> + <RvctStartVector></RvctStartVector> + </ArmAdsMisc> + <Cads> + <interw>1</interw> + <Optim>4</Optim> + <oTime>0</oTime> + <SplitLS>0</SplitLS> + <OneElfS>1</OneElfS> + <Strict>0</Strict> + <EnumInt>0</EnumInt> + <PlainCh>0</PlainCh> + <Ropi>0</Ropi> + <Rwpi>0</Rwpi> + <wLevel>0</wLevel> + <uThumb>0</uThumb> + <uSurpInc>0</uSurpInc> + <uC99>0</uC99> + <useXO>0</useXO> + <VariousControls> + <MiscControls>--c99</MiscControls> + <Define>__HEAP_SIZE=1024 BOARD_PCA10028 BLE_STACK_SUPPORT_REQD S110 BSP_DEFINES_ONLY NRF51 SOFTDEVICE_PRESENT SWI_DISABLE0 MG_DISABLE_HTTP_DIGEST_AUTH MG_DISABLE_MD5 MG_DISABLE_HTTP_KEEP_ALIVE MG_ENABLE_HTTP_SSI=0 MG_ENABLE_HTTP_STREAMING_MULTIPART MG_NO_BSD_SOCKETS CS_PLATFORM=CS_P_NRF51 CS_ENABLE_STDIO</Define> + <Undefine></Undefine> + <IncludePath>..\..\..\config;..\..\..;..\..\..\..\nrf51_iot_sdk\examples\bsp;..\..\..\..\nrf51_iot_sdk\components\softdevice\s1xx_iot\headers;..\..\..\..\nrf51_iot_sdk\components\ble\common;..\..\..\..\nrf51_iot_sdk\components\drivers_nrf\uart;..\..\..\..\nrf51_iot_sdk\components\libraries\timer;..\..\..\..\nrf51_iot_sdk\components\softdevice\common\softdevice_handler;..\..\..\..\nrf51_iot_sdk\components\libraries\scheduler;..\..\..\..\nrf51_iot_sdk\components\libraries\button;..\..\..\..\nrf51_iot_sdk\external\lwip\src\include;..\..\..\..\nrf51_iot_sdk\external\lwip\src\include\netif;..\..\..\..\nrf51_iot_sdk\external\lwip\src\port;..\..\..\..\nrf51_iot_sdk\external\lwip\src\port\arch;..\..\..\..\nrf51_iot_sdk\components\iot\ble_6lowpan;..\..\..\..\nrf51_iot_sdk\components\device;..\..\..\..\nrf51_iot_sdk\components\toolchain;..\..\..\..\nrf51_iot_sdk\components\libraries\util;..\..\..\..\nrf51_iot_sdk\components\libraries\fifo;..\..\..\..\nrf51_iot_sdk\components\drivers_nrf\gpiote;..\..\..\..\nrf51_iot_sdk\components\drivers_nrf\config;..\..\..\..\nrf51_iot_sdk\components\drivers_nrf\common;..\..\..\..\nrf51_iot_sdk\components\drivers_nrf\hal;..\..\..\..\nrf51_iot_sdk\components\libraries\mem_manager;..\..\..\..\nrf51_iot_sdk\components\iot\include;..\..\..\..\nrf51_iot_sdk\components\iot\context_manager;..\..\..\..\nrf51_iot_sdk\components\iot\ble_ipsp;..\..\..\..\nrf51_iot_sdk\components\libraries\trace;..\..\..\..\..\..</IncludePath> + </VariousControls> + </Cads> + <Aads> + <interw>1</interw> + <Ropi>0</Ropi> + <Rwpi>0</Rwpi> + <thumb>0</thumb> + <SplitLS>0</SplitLS> + <SwStkChk>0</SwStkChk> + <NoWarn>0</NoWarn> + <uSurpInc>0</uSurpInc> + <useXO>0</useXO> + <VariousControls> + <MiscControls></MiscControls> + <Define> __HEAP_SIZE=1024 BOARD_PCA10028 BLE_STACK_SUPPORT_REQD S110 BSP_DEFINES_ONLY NRF51 SOFTDEVICE_PRESENT SWI_DISABLE0</Define> + <Undefine></Undefine> + <IncludePath></IncludePath> + </VariousControls> + </Aads> + <LDads> + <umfTarg>1</umfTarg> + <Ropi>0</Ropi> + <Rwpi>0</Rwpi> + <noStLib>0</noStLib> + <RepFail>1</RepFail> + <useFile>0</useFile> + <TextAddressRange>0x00000000</TextAddressRange> + <DataAddressRange>0x00000000</DataAddressRange> + <pXoBase></pXoBase> + <ScatterFile></ScatterFile> + <IncludeLibs></IncludeLibs> + <IncludeLibsPath></IncludeLibsPath> + <Misc></Misc> + <LinkerInputFile></LinkerInputFile> + <DisabledWarnings></DisabledWarnings> + </LDads> + </TargetArmAds> + </TargetOption> + <Groups> + <Group> + <GroupName>Application</GroupName> + <Files> + <File> + <FileName>main.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\main.c</FilePath> + </File> + <File> + <FileName>bleconfig.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\bleconfig.c</FilePath> + </File> + <File> + <FileName>bleconfig.h</FileName> + <FileType>5</FileType> + <FilePath>..\..\..\bleconfig.h</FilePath> + </File> + <File> + <FileName>myboard.h</FileName> + <FileType>5</FileType> + <FilePath>..\..\..\myboard.h</FilePath> + </File> + </Files> + </Group> + <Group> + <GroupName>Documentation</GroupName> + <Files> + <File> + <FileName>Abstract.txt</FileName> + <FileType>5</FileType> + <FilePath>..\..\..\Abstract.txt</FilePath> + </File> + <File> + <FileName>license.txt</FileName> + <FileType>5</FileType> + <FilePath>..\..\..\license.txt</FilePath> + </File> + </Files> + </Group> + <Group> + <GroupName>Third Parties</GroupName> + <Files> + <File> + <FileName>liblwip.lib</FileName> + <FileType>4</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\external\lwip\lib\liblwip.lib</FilePath> + </File> + <File> + <FileName>nrf_platform_port.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\external\lwip\src\port\nrf_platform_port.c</FilePath> + </File> + </Files> + </Group> + <Group> + <GroupName>nRF_BLE</GroupName> + <Files> + <File> + <FileName>ble_advdata.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\ble\common\ble_advdata.c</FilePath> + </File> + <File> + <FileName>ble_srv_common.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\ble\common\ble_srv_common.c</FilePath> + </File> + </Files> + </Group> + <Group> + <GroupName>nRF_Drivers</GroupName> + <Files> + <File> + <FileName>app_uart_fifo.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\drivers_nrf\uart\app_uart_fifo.c</FilePath> + </File> + <File> + <FileName>nrf_delay.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\drivers_nrf\hal\nrf_delay.c</FilePath> + </File> + <File> + <FileName>nrf_drv_common.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\drivers_nrf\common\nrf_drv_common.c</FilePath> + </File> + <File> + <FileName>nrf_drv_gpiote.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\drivers_nrf\gpiote\nrf_drv_gpiote.c</FilePath> + </File> + </Files> + </Group> + <Group> + <GroupName>nRF_IoT</GroupName> + <Files> + <File> + <FileName>ble_6lowpan.lib</FileName> + <FileType>4</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\iot\ble_6lowpan\lib\ble_6lowpan.lib</FilePath> + </File> + <File> + <FileName>iot_context_manager.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\iot\context_manager\iot_context_manager.c</FilePath> + </File> + </Files> + </Group> + <Group> + <GroupName>nRF_Libraries</GroupName> + <Files> + <File> + <FileName>app_button.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\libraries\button\app_button.c</FilePath> + </File> + <File> + <FileName>app_error.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\libraries\util\app_error.c</FilePath> + </File> + <File> + <FileName>app_fifo.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\libraries\fifo\app_fifo.c</FilePath> + </File> + <File> + <FileName>app_scheduler.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\libraries\scheduler\app_scheduler.c</FilePath> + </File> + <File> + <FileName>app_timer.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\libraries\timer\app_timer.c</FilePath> + </File> + <File> + <FileName>app_timer_appsh.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\libraries\timer\app_timer_appsh.c</FilePath> + </File> + <File> + <FileName>app_trace.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\libraries\trace\app_trace.c</FilePath> + </File> + <File> + <FileName>mem_manager.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\libraries\mem_manager\mem_manager.c</FilePath> + </File> + <File> + <FileName>nrf_assert.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\libraries\util\nrf_assert.c</FilePath> + </File> + <File> + <FileName>retarget.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\libraries\uart\retarget.c</FilePath> + </File> + </Files> + </Group> + <Group> + <GroupName>nRF_SoftDevice</GroupName> + <Files> + <File> + <FileName>s1xx-iot-prototype2_licence_agreement.txt</FileName> + <FileType>5</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\softdevice\s1xx_iot\doc\s1xx-iot-prototype2_licence_agreement.txt</FilePath> + </File> + <File> + <FileName>softdevice_handler.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\softdevice\common\softdevice_handler\softdevice_handler.c</FilePath> + </File> + <File> + <FileName>softdevice_handler_appsh.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\nrf51_iot_sdk\components\softdevice\common\softdevice_handler\softdevice_handler_appsh.c</FilePath> + </File> + </Files> + </Group> + <Group> + <GroupName>Mongoose</GroupName> + <Files> + <File> + <FileName>mongoose.c</FileName> + <FileType>1</FileType> + <FilePath>..\..\..\..\..\..\mongoose.c</FilePath> + </File> + </Files> + </Group> + <Group> + <GroupName>::CMSIS</GroupName> + </Group> + <Group> + <GroupName>::Device</GroupName> + <Files> + <File> + <FileName>arm_startup_nrf51.s</FileName> + <FileType>2</FileType> + <FilePath>RTE\Device\nRF51422_xxAC\arm_startup_nrf51.s</FilePath> + </File> + <File> + <FileName>system_nrf51.c</FileName> + <FileType>1</FileType> + <FilePath>RTE\Device\nRF51422_xxAC\system_nrf51.c</FilePath> + </File> + </Files> + </Group> + </Groups> + </Target> + </Targets> + + <RTE> + <packages> + <filter> + <targetInfos/> + </filter> + <package name="CMSIS" schemaVersion="1.2" url="http://www.keil.com/pack/" vendor="ARM" version="4.2.0"> + <targetInfos> + <targetInfo name="nrf51422_xxac_s1xx_iot"/> + </targetInfos> + </package> + <package name="nRF_DeviceFamilyPack" schemaVersion="1.0" url="http://developer.nordicsemi.com/nRF51_SDK/pieces/nRF_DeviceFamilyPack/" vendor="NordicSemiconductor" version="7.2.1"> + <targetInfos> + <targetInfo name="nrf51422_xxac_s1xx_iot"/> + </targetInfos> + </package> + </packages> + <apis/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="3.40.0" condition="CMSIS Core"> + <package name="CMSIS" schemaVersion="1.2" url="http://www.keil.com/pack/" vendor="ARM" version="4.2.0"/> + <targetInfos> + <targetInfo name="nrf51422_xxac_s1xx_iot"/> + </targetInfos> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="NordicSemiconductor" Cversion="7.2.1" condition="nRF51 Series CMSIS Device"> + <package name="nRF_DeviceFamilyPack" schemaVersion="1.0" url="http://developer.nordicsemi.com/nRF51_SDK/pieces/nRF_DeviceFamilyPack/" vendor="NordicSemiconductor" version="7.2.1"/> + <targetInfos> + <targetInfo name="nrf51422_xxac_s1xx_iot"/> + </targetInfos> + </component> + </components> + <files> + <file attr="config" category="source" condition="ARM Compiler" name="Device\Source\arm\arm_startup_nrf51.s"> + <instance index="0">RTE\Device\nRF51422_xxAC\arm_startup_nrf51.s</instance> + <component Cclass="Device" Cgroup="Startup" Cvendor="NordicSemiconductor" Cversion="8.0.5" condition="nRF51 Series CMSIS Device"/> + <package license="License\license.txt" name="nRF_DeviceFamilyPack" schemaVersion="1.3" url="http://developer.nordicsemi.com/nRF51_SDK/pieces/nRF_DeviceFamilyPack/" vendor="NordicSemiconductor" version="8.0.5"/> + <targetInfos> + <targetInfo name="nrf51422_xxac_s1xx_iot"/> + </targetInfos> + </file> + <file attr="config" category="source" name="Device\Source\system_nrf51.c"> + <instance index="0">RTE\Device\nRF51422_xxAC\system_nrf51.c</instance> + <component Cclass="Device" Cgroup="Startup" Cvendor="NordicSemiconductor" Cversion="8.0.5" condition="nRF51 Series CMSIS Device"/> + <package license="License\license.txt" name="nRF_DeviceFamilyPack" schemaVersion="1.3" url="http://developer.nordicsemi.com/nRF51_SDK/pieces/nRF_DeviceFamilyPack/" vendor="NordicSemiconductor" version="8.0.5"/> + <targetInfos> + <targetInfo name="nrf51422_xxac_s1xx_iot"/> + </targetInfos> + </file> + </files> + </RTE> + +</Project> diff --git a/examples/nRF51/http/boards/pca10028/armgcc/Makefile b/examples/nRF51/http/boards/pca10028/armgcc/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..99f461b5116084c844f24fa9ca63fe2cb8cfa6b0 --- /dev/null +++ b/examples/nRF51/http/boards/pca10028/armgcc/Makefile @@ -0,0 +1,236 @@ +PROJECT_NAME := iot_lwip_tcp_server_pca10028 + +export OUTPUT_FILENAME +#MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) +MAKEFILE_NAME := $(MAKEFILE_LIST) +MAKEFILE_DIR := $(dir $(MAKEFILE_NAME) ) + +TEMPLATE_PATH = ../../../../nrf51_iot_sdk/components/toolchain/gcc +ifeq ($(OS),Windows_NT) +include $(TEMPLATE_PATH)/Makefile.windows +else +include $(TEMPLATE_PATH)/Makefile.posix +endif + +MK := mkdir +RM := rm -rf + +#echo suspend +ifeq ("$(VERBOSE)","1") +NO_ECHO := +else +NO_ECHO := @ +endif + +# Toolchain commands +CC := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-gcc" +AS := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-as" +AR := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ar" -r +LD := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ld" +NM := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-nm" +OBJDUMP := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objdump" +OBJCOPY := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objcopy" +SIZE := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-size" + +#function for removing duplicates in a list +remduplicates = $(strip $(if $1,$(firstword $1) $(call remduplicates,$(filter-out $(firstword $1),$1)))) + +#source common to all targets +C_SOURCE_FILES += \ +../../../../nrf51_iot_sdk/components/libraries/button/app_button.c \ +../../../../nrf51_iot_sdk/components/libraries/util/app_error.c \ +../../../../nrf51_iot_sdk/components/libraries/fifo/app_fifo.c \ +../../../../nrf51_iot_sdk/components/libraries/scheduler/app_scheduler.c \ +../../../../nrf51_iot_sdk/components/libraries/timer/app_timer.c \ +../../../../nrf51_iot_sdk/components/libraries/timer/app_timer_appsh.c \ +../../../../nrf51_iot_sdk/components/libraries/trace/app_trace.c \ +../../../../nrf51_iot_sdk/components/libraries/mem_manager/mem_manager.c \ +../../../../nrf51_iot_sdk/components/libraries/util/nrf_assert.c \ +../../../../nrf51_iot_sdk/components/libraries/uart/retarget.c \ +../../../../nrf51_iot_sdk/external/lwip/src/port/nrf_platform_port.c \ +../../../../nrf51_iot_sdk/components/drivers_nrf/uart/app_uart_fifo.c \ +../../../../nrf51_iot_sdk/components/drivers_nrf/hal/nrf_delay.c \ +../../../../nrf51_iot_sdk/components/drivers_nrf/common/nrf_drv_common.c \ +../../../../nrf51_iot_sdk/components/drivers_nrf/gpiote/nrf_drv_gpiote.c \ +../../../main.c \ +../../../../nrf51_iot_sdk/components/ble/common/ble_advdata.c \ +../../../../nrf51_iot_sdk/components/ble/common/ble_srv_common.c \ +../../../../nrf51_iot_sdk/components/iot/context_manager/iot_context_manager.c \ +../../../../nrf51_iot_sdk/components/toolchain/system_nrf51.c \ +../../../../nrf51_iot_sdk/components/softdevice/common/softdevice_handler/softdevice_handler.c \ +../../../../nrf51_iot_sdk/components/softdevice/common/softdevice_handler/softdevice_handler_appsh.c \ + +#assembly files common to all targets +ASM_SOURCE_FILES = ../../../../nrf51_iot_sdk/components/toolchain/gcc/gcc_startup_nrf51.s + +#assembly files common to all targets +LIBS = ../../../../nrf51_iot_sdk/external/lwip/lib/liblwip.a +LIBS += ../../../../nrf51_iot_sdk/components/iot/ble_6lowpan/lib/ble_6lowpan.a + +#includes common to all targets +INC_PATHS = -I../../../config +INC_PATHS += -I../../../../nrf51_iot_sdk/components/softdevice/s1xx_iot/headers +INC_PATHS += -I../../../../nrf51_iot_sdk/components/drivers_nrf/common +INC_PATHS += -I../../../../nrf51_iot_sdk/components/softdevice/common/softdevice_handler +INC_PATHS += -I../../../../nrf51_iot_sdk/external/lwip/src/include +INC_PATHS += -I../../../../nrf51_iot_sdk/components/iot/ble_6lowpan +INC_PATHS += -I../../../../nrf51_iot_sdk/components/drivers_nrf/hal +INC_PATHS += -I../../../../nrf51_iot_sdk/components/ble/common +INC_PATHS += -I../../../../nrf51_iot_sdk/external/lwip/src/port +INC_PATHS += -I../../../../nrf51_iot_sdk/components/libraries/fifo +INC_PATHS += -I../../../../nrf51_iot_sdk/components/libraries/trace +INC_PATHS += -I../../../../nrf51_iot_sdk/components/device +INC_PATHS += -I../../../../nrf51_iot_sdk/components/drivers_nrf/config +INC_PATHS += -I../../../../nrf51_iot_sdk/components/libraries/mem_manager +INC_PATHS += -I../../../../nrf51_iot_sdk/components/drivers_nrf/uart +INC_PATHS += -I../../../../nrf51_iot_sdk/components/iot/ble_ipsp +INC_PATHS += -I../../../../nrf51_iot_sdk/components/libraries/scheduler +INC_PATHS += -I../../../../nrf51_iot_sdk/external/lwip/src/include/netif +INC_PATHS += -I../../../../nrf51_iot_sdk/components/iot/include +INC_PATHS += -I../../.. +INC_PATHS += -I../../../../nrf51_iot_sdk/components/iot/context_manager +INC_PATHS += -I../../../../nrf51_iot_sdk/components/toolchain/gcc +INC_PATHS += -I../../../../nrf51_iot_sdk/components/drivers_nrf/gpiote +INC_PATHS += -I../../../../nrf51_iot_sdk/components/libraries/timer +INC_PATHS += -I../../../../nrf51_iot_sdk/external/lwip/src/port/arch +INC_PATHS += -I../../../../nrf51_iot_sdk/components/libraries/button +INC_PATHS += -I../../../../nrf51_iot_sdk/components/libraries/util +INC_PATHS += -I../../../../nrf51_iot_sdk/examples/bsp +INC_PATHS += -I../../../../nrf51_iot_sdk/components/toolchain + +OBJECT_DIRECTORY = _build +LISTING_DIRECTORY = $(OBJECT_DIRECTORY) +OUTPUT_BINARY_DIRECTORY = $(OBJECT_DIRECTORY) + +# Sorting removes duplicates +BUILD_DIRECTORIES := $(sort $(OBJECT_DIRECTORY) $(OUTPUT_BINARY_DIRECTORY) $(LISTING_DIRECTORY) ) + +#flags common to all targets +CFLAGS = -D__HEAP_SIZE=512 +CFLAGS += -DSWI_DISABLE0 +CFLAGS += -DBOARD_PCA10028 +CFLAGS += -DSOFTDEVICE_PRESENT +CFLAGS += -DNRF51 +CFLAGS += -DS110 +CFLAGS += -DBLE_STACK_SUPPORT_REQD +CFLAGS += -DBSP_DEFINES_ONLY +CFLAGS += -mcpu=cortex-m0 +CFLAGS += -mthumb -mabi=aapcs --std=gnu99 +CFLAGS += -Wall -Werror -O3 +CFLAGS += -mfloat-abi=soft +# keep every function in separate section. This will allow linker to dump unused functions +CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing +CFLAGS += -fno-builtin --short-enums + +# keep every function in separate section. This will allow linker to dump unused functions +LDFLAGS += -Xlinker -Map=$(LISTING_DIRECTORY)/$(OUTPUT_FILENAME).map +LDFLAGS += -mthumb -mabi=aapcs -L $(TEMPLATE_PATH) -T$(LINKER_SCRIPT) +LDFLAGS += -mcpu=cortex-m0 +# let linker to dump unused sections +LDFLAGS += -Wl,--gc-sections +# use newlib in nano version +LDFLAGS += --specs=nano.specs -lc -lnosys + +# Assembler flags +ASMFLAGS += -x assembler-with-cpp +ASMFLAGS += -D__HEAP_SIZE=512 +ASMFLAGS += -DSWI_DISABLE0 +ASMFLAGS += -DBOARD_PCA10028 +ASMFLAGS += -DSOFTDEVICE_PRESENT +ASMFLAGS += -DNRF51 +ASMFLAGS += -DS110 +ASMFLAGS += -DBLE_STACK_SUPPORT_REQD +ASMFLAGS += -DBSP_DEFINES_ONLY +#default target - first one defined +default: clean nrf51422_xxac_s1xx_iot + +#building all targets +all: clean + $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e cleanobj + $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e nrf51422_xxac_s1xx_iot + +#target for printing all targets +help: + @echo following targets are available: + @echo nrf51422_xxac_s1xx_iot + + +C_SOURCE_FILE_NAMES = $(notdir $(C_SOURCE_FILES)) +C_PATHS = $(call remduplicates, $(dir $(C_SOURCE_FILES) ) ) +C_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(C_SOURCE_FILE_NAMES:.c=.o) ) + +ASM_SOURCE_FILE_NAMES = $(notdir $(ASM_SOURCE_FILES)) +ASM_PATHS = $(call remduplicates, $(dir $(ASM_SOURCE_FILES) )) +ASM_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(ASM_SOURCE_FILE_NAMES:.s=.o) ) + +vpath %.c $(C_PATHS) +vpath %.s $(ASM_PATHS) + +OBJECTS = $(C_OBJECTS) $(ASM_OBJECTS) + +nrf51422_xxac_s1xx_iot: OUTPUT_FILENAME := nrf51422_xxac_s1xx_iot +nrf51422_xxac_s1xx_iot: LINKER_SCRIPT=iot_lwip_tcp_server_gcc_nrf51.ld +nrf51422_xxac_s1xx_iot: $(BUILD_DIRECTORIES) $(OBJECTS) + @echo Linking target: $(OUTPUT_FILENAME).out + $(NO_ECHO)$(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out + $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e finalize + +## Create build directories +$(BUILD_DIRECTORIES): + echo $(MAKEFILE_NAME) + $(MK) $@ + +# Create objects from C SRC files +$(OBJECT_DIRECTORY)/%.o: %.c + @echo Compiling file: $(notdir $<) + $(NO_ECHO)$(CC) $(CFLAGS) $(INC_PATHS) -c -o $@ $< + +# Assemble files +$(OBJECT_DIRECTORY)/%.o: %.s + @echo Compiling file: $(notdir $<) + $(NO_ECHO)$(CC) $(ASMFLAGS) $(INC_PATHS) -c -o $@ $< + + +# Link +$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out: $(BUILD_DIRECTORIES) $(OBJECTS) + @echo Linking target: $(OUTPUT_FILENAME).out + $(NO_ECHO)$(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out + + +## Create binary .bin file from the .out file +$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out + @echo Preparing: $(OUTPUT_FILENAME).bin + $(NO_ECHO)$(OBJCOPY) -O binary $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin + +## Create binary .hex file from the .out file +$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out + @echo Preparing: $(OUTPUT_FILENAME).hex + $(NO_ECHO)$(OBJCOPY) -O ihex $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex + +finalize: genbin genhex echosize + +genbin: + @echo Preparing: $(OUTPUT_FILENAME).bin + $(NO_ECHO)$(OBJCOPY) -O binary $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin + +## Create binary .hex file from the .out file +genhex: + @echo Preparing: $(OUTPUT_FILENAME).hex + $(NO_ECHO)$(OBJCOPY) -O ihex $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex + +echosize: + -@echo "" + $(NO_ECHO)$(SIZE) $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out + -@echo "" + +clean: + $(RM) $(BUILD_DIRECTORIES) + +cleanobj: + $(RM) $(BUILD_DIRECTORIES)/*.o + +flash: $(MAKECMDGOALS) + @echo Flashing: $(OUTPUT_BINARY_DIRECTORY)/$<.hex + nrfjprog --reset --program $(OUTPUT_BINARY_DIRECTORY)/$<.hex + +## Flash softdevice diff --git a/examples/nRF51/http/boards/pca10028/armgcc/iot_lwip_tcp_server_gcc_nrf51.ld b/examples/nRF51/http/boards/pca10028/armgcc/iot_lwip_tcp_server_gcc_nrf51.ld new file mode 100644 index 0000000000000000000000000000000000000000..854c2d32b240ec37d204cce609312e53d4ddc5a9 --- /dev/null +++ b/examples/nRF51/http/boards/pca10028/armgcc/iot_lwip_tcp_server_gcc_nrf51.ld @@ -0,0 +1,12 @@ +/* Linker script to configure memory regions. */ + +SEARCH_DIR(.) +GROUP(-lgcc -lc -lnosys) + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x18000, LENGTH = 0x28000 + RAM (rwx) : ORIGIN = 0x20002000, LENGTH = 0x6000 +} + +INCLUDE "gcc_nrf51_common.ld" \ No newline at end of file diff --git a/examples/nRF51/http/config/nrf_drv_config.h b/examples/nRF51/http/config/nrf_drv_config.h new file mode 100644 index 0000000000000000000000000000000000000000..ca1c3bcc858c7b3a5c5173177c301399b2e8c9c4 --- /dev/null +++ b/examples/nRF51/http/config/nrf_drv_config.h @@ -0,0 +1,139 @@ +/* Copyright (c) 2015 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + +/* clang-format off */ + +#ifndef NRF_DRV_CONFIG_H +#define NRF_DRV_CONFIG_H + +/* CLOCK */ +#define CLOCK_CONFIG_XTAL_FREQ NRF_CLOCK_XTALFREQ_16MHz +#define CLOCK_CONFIG_LF_SRC NRF_CLOCK_LF_SRC_Xtal +#define CLOCK_CONFIG_LF_RC_CAL_INTERVAL RC_2000MS_CALIBRATION_INTERVAL +#define CLOCK_CONFIG_IRQ_PRIORITY APP_IRQ_PRIORITY_LOW + +/* GPIOTE */ +#define GPIOTE_ENABLED 1 + +#if (GPIOTE_ENABLED == 1) +#define GPIOTE_CONFIG_USE_SWI_EGU false +#define GPIOTE_CONFIG_IRQ_PRIORITY APP_IRQ_PRIORITY_HIGH +#define GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS 6 +#endif + +/* TIMER */ +#define TIMER0_ENABLED 0 + +#if (TIMER0_ENABLED == 1) +#define TIMER0_CONFIG_FREQUENCY NRF_TIMER_FREQ_16MHz +#define TIMER0_CONFIG_MODE TIMER_MODE_MODE_Timer +#define TIMER0_CONFIG_BIT_WIDTH TIMER_BITMODE_BITMODE_32Bit +#define TIMER0_CONFIG_IRQ_PRIORITY APP_IRQ_PRIORITY_LOW + +#define TIMER0_INSTANCE_INDEX 0 +#endif + +#define TIMER1_ENABLED 0 + +#if (TIMER1_ENABLED == 1) +#define TIMER1_CONFIG_FREQUENCY NRF_TIMER_FREQ_16MHz +#define TIMER1_CONFIG_MODE TIMER_MODE_MODE_Timer +#define TIMER1_CONFIG_BIT_WIDTH TIMER_BITMODE_BITMODE_16Bit +#define TIMER1_CONFIG_IRQ_PRIORITY APP_IRQ_PRIORITY_LOW + +#define TIMER1_INSTANCE_INDEX (TIMER0_ENABLED) +#endif + +#define TIMER2_ENABLED 0 + +#if (TIMER2_ENABLED == 1) +#define TIMER2_CONFIG_FREQUENCY NRF_TIMER_FREQ_16MHz +#define TIMER2_CONFIG_MODE TIMER_MODE_MODE_Timer +#define TIMER2_CONFIG_BIT_WIDTH TIMER_BITMODE_BITMODE_16Bit +#define TIMER2_CONFIG_IRQ_PRIORITY APP_IRQ_PRIORITY_LOW + +#define TIMER2_INSTANCE_INDEX (TIMER1_ENABLED+TIMER0_ENABLED) +#endif + +#define TIMER_COUNT (TIMER0_ENABLED + TIMER1_ENABLED + TIMER2_ENABLED) + +/* RTC */ +#define RTC0_ENABLED 0 + +#if (RTC0_ENABLED == 1) +#define RTC0_CONFIG_FREQUENCY 32678 +#define RTC0_CONFIG_IRQ_PRIORITY APP_IRQ_PRIORITY_LOW +#define RTC0_CONFIG_RELIABLE false + +#define RTC0_INSTANCE_INDEX 0 +#endif + +#define RTC1_ENABLED 0 + +#if (RTC1_ENABLED == 1) +#define RTC1_CONFIG_FREQUENCY 32768 +#define RTC1_CONFIG_IRQ_PRIORITY APP_IRQ_PRIORITY_LOW +#define RTC1_CONFIG_RELIABLE false + +#define RTC1_INSTANCE_INDEX (RTC0_ENABLED) +#endif + +#define RTC_COUNT (RTC0_ENABLED+RTC1_ENABLED) + +#define NRF_MAXIMUM_LATENCY_US 2000 + +/* RNG */ +#define RNG_ENABLED 0 + +#if (RNG_ENABLED == 1) +#define RNG_CONFIG_ERROR_CORRECTION true +#define RNG_CONFIG_POOL_SIZE 8 +#define RNG_CONFIG_IRQ_PRIORITY APP_IRQ_PRIORITY_LOW +#endif + + +/* QDEC */ +#define QDEC_ENABLED 0 + +#if (QDEC_ENABLED == 1) +#define QDEC_CONFIG_REPORTPER NRF_QDEC_REPORTPER_10 +#define QDEC_CONFIG_SAMPLEPER NRF_QDEC_SAMPLEPER_16384us +#define QDEC_CONFIG_PIO_A 1 +#define QDEC_CONFIG_PIO_B 2 +#define QDEC_CONFIG_PIO_LED 3 +#define QDEC_CONFIG_LEDPRE 511 +#define QDEC_CONFIG_LEDPOL NRF_QDEC_LEPOL_ACTIVE_HIGH +#define QDEC_CONFIG_IRQ_PRIORITY APP_IRQ_PRIORITY_LOW +#define QDEC_CONFIG_DBFEN false +#define QDEC_CONFIG_SAMPLE_INTEN false +#endif + +/* LPCOMP */ +#define LPCOMP_ENABLED 0 + +#if (LPCOMP_ENABLED == 1) +#define LPCOMP_CONFIG_REFERENCE NRF_LPCOMP_REF_SUPPLY_FOUR_EIGHT +#define LPCOMP_CONFIG_DETECTION NRF_LPCOMP_DETECT_DOWN +#define LPCOMP_CONFIG_IRQ_PRIORITY APP_IRQ_PRIORITY_LOW +#define LPCOMP_CONFIG_INPUT NRF_LPCOMP_INPUT_0 +#endif + +/* WDT */ +#define WDT_ENABLED 0 + +#if (WDT_ENABLED == 1) +#define WDT_CONFIG_BEHAVIOUR NRF_WDT_BEHAVIOUR_RUN_SLEEP +#define WDT_CONFIG_RELOAD_VALUE 2000 +#define WDT_CONFIG_IRQ_PRIORITY APP_IRQ_PRIORITY_HIGH +#endif + +#endif // NRF_DRV_CONFIG_H diff --git a/examples/nRF51/http/main.c b/examples/nRF51/http/main.c new file mode 100644 index 0000000000000000000000000000000000000000..545475352d571bf67c5610468fd17bec738e3e32 --- /dev/null +++ b/examples/nRF51/http/main.c @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2014-2016 Cesanta Software Limited + * All rights reserved + */ + +#include "bleconfig.h" +#include "myboard.h" + +#include "mongoose.h" + +/* + * This is a callback invoked by Mongoose to signal that a poll is needed soon. + * Since we're in a tight polling loop anyway (see below), we don't need to do anything. + */ +void mg_lwip_mgr_schedule_poll(struct mg_mgr *mgr) { +} + + +// Define an event handler function +void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { + if (ev == MG_EV_POLL) return; + /* printf("ev %d\r\n", ev); */ + switch (ev) { + case MG_EV_ACCEPT: { + char addr[32]; + mg_sock_addr_to_str(&nc->sa, addr, sizeof(addr), + MG_SOCK_STRINGIFY_IP | MG_SOCK_STRINGIFY_PORT); + printf("%p: Connection from %s\r\n", nc, addr); + break; + } + case MG_EV_HTTP_REQUEST: { + struct http_message *hm = (struct http_message *) ev_data; + char addr[32]; + mg_sock_addr_to_str(&nc->sa, addr, sizeof(addr), + MG_SOCK_STRINGIFY_IP | MG_SOCK_STRINGIFY_PORT); + printf("%p: %.*s %.*s\r\n", nc, (int) hm->method.len, hm->method.p, + (int) hm->uri.len, hm->uri.p); + mg_send_response_line(nc, 200, + "Content-Type: text/html\r\n" + "Connection: close"); + mg_printf(nc, + "\r\n<h1>Hello, %s!</h1>\r\n" + "You asked for %.*s\r\n", + addr, (int) hm->uri.len, hm->uri.p); + nc->flags |= MG_F_SEND_AND_CLOSE; + LEDS_INVERT(LED_THREE); + break; + } + case MG_EV_CLOSE: { + printf("%p: Connection closed\r\n", nc); + break; + } + } +} + + +/** + * @brief Function for application main entry. + */ +int main(void) +{ + + cs_log_set_file(stdout); + + bleconfig_init(); + + { + struct mg_mgr mgr; + + mg_mgr_init(&mgr, NULL); // Initialize event manager object + + // Note that many connections can be added to a single event manager + // Connections can be created at any point, e.g. in event handler function + const char *err; + struct mg_bind_opts opts; + struct mg_connection *nc = NULL; + memset(&opts, 0x00, sizeof(opts)); + opts.error_string = &err; + nc = mg_bind_opt(&mgr, "80", ev_handler, opts); // Create listening connection and add it to the event manager + if (nc == NULL) { + printf("Failed to create listener: %s\n", err); + return 1; + } + mg_set_protocol_http_websocket(nc); + + for (;;) { // Start infinite event loop + bleconfig_poll(); + mg_mgr_poll(&mgr, 0); + } + } + +} diff --git a/examples/nRF51/http/myboard.h b/examples/nRF51/http/myboard.h new file mode 100644 index 0000000000000000000000000000000000000000..56db397658026f1742e7b1d07481e690e72ca867 --- /dev/null +++ b/examples/nRF51/http/myboard.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2014-2016 Cesanta Software Limited + * All rights reserved + */ + +/* clang-format off */ + +#include "boards.h" + +#define LED_ONE BSP_LED_0_MASK /**< Is on when device is advertising. */ +#define LED_TWO BSP_LED_1_MASK /**< Is on when device is connected. */ +#define LED_THREE BSP_LED_2_MASK +#define LED_FOUR BSP_LED_3_MASK +#define TCP_CONNECTED_LED BSP_LED_2_MASK /**< Is on when a TCP connection is established. */ +#define DISPLAY_LED_0 BSP_LED_0_MASK /**< LED used for displaying mod 4 of data payload received on UDP port. */ +#define DISPLAY_LED_1 BSP_LED_1_MASK /**< LED used for displaying mod 4 of data payload received on UDP port. */ +#define DISPLAY_LED_2 BSP_LED_2_MASK /**< LED used for displaying mod 4 of data payload received on UDP port. */ +#define DISPLAY_LED_3 BSP_LED_3_MASK /**< LED used for displaying mod 4 of data payload received on UDP port. */ +#define ALL_APP_LED (BSP_LED_0_MASK | BSP_LED_1_MASK | \ + BSP_LED_2_MASK | BSP_LED_3_MASK) /**< Define used for simultaneous operation of all application LEDs. */ + diff --git a/examples/nRF51/http/sdk_config.h b/examples/nRF51/http/sdk_config.h new file mode 100644 index 0000000000000000000000000000000000000000..db0d5ad1141ae5f066554737297be324c04c504b --- /dev/null +++ b/examples/nRF51/http/sdk_config.h @@ -0,0 +1,204 @@ +/* Copyright (c) 2013 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + +/* clang-format off */ + +#ifndef SDK_CONFIG_H__ +#define SDK_CONFIG_H__ + +/** + * @defgroup sdk_config SDK Configuration + * @{ + * @ingroup sdk_common + * @{ + * @details All parameters that allow configuring/tuning the SDK based on application/ use case + * are defined here. + */ + + +/** + * @defgroup mem_manager_config Memory Manager Configuration + * @{ + * @addtogroup sdk_config + * @{ + * @details This section defines configuration of memory manager module. + */ + +/** + * @brief Maximum memory blocks identified as 'small' blocks. + * + * @details Maximum memory blocks identified as 'small' blocks. + * Minimum value : 0 (Setting to 0 disables all 'small' blocks) + * Maximum value : 255 + * Dependencies : None. + */ +#define MEMORY_MANAGER_SMALL_BLOCK_COUNT 8 + +/** + * @brief Size of each memory blocks identified as 'small' block. + * + * @details Size of each memory blocks identified as 'small' block. + * Memory block are recommended to be word-sized. + * Minimum value : 32 + * Maximum value : A value less than the next pool size. If only small pool is used, this + * can be any value based on availability of RAM. + * Dependencies : MEMORY_MANAGER_SMALL_BLOCK_COUNT is non-zero. + */ +#define MEMORY_MANAGER_SMALL_BLOCK_SIZE 128 + +/** + * @brief Maximum memory blocks identified as 'medium' blocks. + * + * @details Maximum memory blocks identified as 'medium' blocks. + * Minimum value : 0 (Setting to 0 disables all 'medium' blocks) + * Maximum value : 255 + * Dependencies : None. + */ +#define MEMORY_MANAGER_MEDIUM_BLOCK_COUNT 4 + +/** + * @brief Size of each memory blocks identified as 'medium' block. + * + * @details Size of each memory blocks identified as 'medium' block. + * Memory block are recommended to be word-sized. + * Minimum value : A value greater than the small pool size if defined, else 32. + * Maximum value : A value less than the next pool size. If only medium pool is used, this + * can be any value based on availability of RAM. + * Dependencies : MEMORY_MANAGER_MEDIUM_BLOCK_COUNT is non-zero. + */ +#define MEMORY_MANAGER_MEDIUM_BLOCK_SIZE 256 + +/** + * @brief Maximum memory blocks identified as 'medium' blocks. + * + * @details Maximum memory blocks identified as 'medium' blocks. + * Minimum value : 0 (Setting to 0 disables all 'large' blocks) + * Maximum value : 255 + * Dependencies : None. + */ +#define MEMORY_MANAGER_LARGE_BLOCK_COUNT 3 + +/** + * @brief Size of each memory blocks identified as 'medium' block. + * + * @details Size of each memory blocks identified as 'medium' block. + * Memory block are recommended to be word-sized. + * Minimum value : A value greater than the small &/ medium pool size if defined, else 32. + * Maximum value : Any value based on availability of RAM. + * Dependencies : MEMORY_MANAGER_MEDIUM_BLOCK_COUNT is non-zero. + */ +#define MEMORY_MANAGER_LARGE_BLOCK_SIZE 1024 + +/** + * @brief Disable debug trace in the module. + * + * @details Set this define to 1 to enable debug trace in the module, else set to 0. + * Possible values : 0 or 1. + * Dependencies : ENABLE_DEBUG_LOG_SUPPORT. If this flag is not defined, no + * trace is observed even if this define is set to 1. + */ +#define MEM_MANAGER_DISABLE_LOGS 1 + +/** + * @brief Disables API parameter checks in the module. + * + * @details Set this define to 1 to disable checks on API parameters in the module. + * API parameter checks are added to ensure right parameters are passed to the + * module. These checks are useful during development phase but be redundant + * once application is developed. Disabling this can result in some code saving. + * Possible values : 0 or 1. + * Dependencies : None. + */ +#define MEM_MANAGER_DISABLE_API_PARAM_CHECK 0 +/** @} */ +/** @} */ + + +/** + * @defgroup iot_context_manager Context Manager Configurations. + * @{ + * @addtogroup iot_config + * @{ + * @details This section defines configuration of Context Manager. + */ + +/** + * @brief Disable debug trace in the module. + * + * @details Set this define to 1 to enable debug trace in the module, else set to 0. + * Possible values : 0 or 1. + * Dependencies : ENABLE_DEBUG_LOG_SUPPORT. If this flag is not defined, no + * trace is observed even if this define is set to 1. + */ +#define IOT_CONTEXT_MANAGER_DISABLE_LOGS 1 + +/** + * @brief Disables API parameter checks in the module. + * + * @details Set this define to 1 to disable checks on API parameters in the module. + * API parameter checks are added to ensure right parameters are passed to the + * module. These checks are useful during development phase but be redundant + * once application is developed. Disabling this can result in some code saving. + * Possible values : 0 or 1. + * Dependencies : None. + */ +#define IOT_CONTEXT_MANAGER_DISABLE_API_PARAM_CHECK 0 + +/** + * @brief Maximum number of supported context identifiers. + * + * @details Maximum value of 16 is preferable to correct decompression. + * Minimum value : 1 + * Maximum value : 16 + * Dependencies : None. + */ +#define IOT_CONTEXT_MANAGER_MAX_CONTEXTS 16 + +/** + * @brief Maximum number of supported context's table. + * + * @details If value is equal to BLE_IPSP_MAX_CHANNELS then all interface will have + * its own table which is preferable. + * Minimum value : 1 + * Maximum value : BLE_IPSP_MAX_CHANNELS + * Dependencies : None. + */ +#define IOT_CONTEXT_MANAGER_MAX_TABLES 1 +/** @} */ +/** @} */ + + +/** + * @defgroup lwip_nrf51_driver nRF51 lwIP driver + * @{ + * @addtogroup iot_config + * @{ + * @details This section defines configuration of nRF51 lwIP driver. + */ + +/** + * @brief Disable debug trace in the module. + * + * @details Set this define to 1 to enable debug trace in the module, else set to 0. + * Possible values : 0 or 1. + * Dependencies : ENABLE_DEBUG_LOG_SUPPORT. If this flag is not defined, no + * trace is observed even if this define is set to 1. + */ +#define NRF51_LWIP_DRIVER_DISABLE_LOGS 1 + +/** @} */ +/** @} */ + +/** @} */ +/** @} */ + +#endif // SDK_CONFIG_H__ diff --git a/mongoose.c b/mongoose.c index 9a311930a67d73d853887034c5bb495b5f42510a..477e8edf75776f44d0ad34b035f48a7addd756e1 100644 --- a/mongoose.c +++ b/mongoose.c @@ -10243,7 +10243,7 @@ int gettimeofday(struct timeval *tp, void *tzp) { * All rights reserved */ -#if CS_PLATFORM == CS_P_NRF52 && defined(__ARMCC_VERSION) +#if (CS_PLATFORM == CS_P_NRF51 || CS_PLATFORM == CS_P_NRF52) && defined(__ARMCC_VERSION) int gettimeofday(struct timeval *tp, void *tzp) { /* TODO */ tp->tv_sec = 0; diff --git a/mongoose.h b/mongoose.h index 08b6b90b91fd9edc76d907206c7fd6adb2b58b17..387ed14524469b4036d308f140f9ff664e68b233 100644 --- a/mongoose.h +++ b/mongoose.h @@ -53,6 +53,7 @@ #define CS_P_NXP_KINETIS 9 #define CS_P_NRF52 10 #define CS_P_PIC32_HARMONY 11 +#define CS_P_NRF51 12 /* If not specified explicitly, we guess platform by defines. */ #ifndef CS_PLATFORM @@ -834,6 +835,46 @@ int inet_pton(int af, const char *src, void *dst); #endif /* CS_PLATFORM == CS_P_MBED */ #endif /* CS_COMMON_PLATFORMS_PLATFORM_MBED_H_ */ #ifdef MG_MODULE_LINES +#line 1 "common/platforms/platform_nrf51.h" +#endif +/* + * Copyright (c) 2014-2016 Cesanta Software Limited + * All rights reserved + */ +#ifndef CS_COMMON_PLATFORMS_PLATFORM_NRF51_H_ +#define CS_COMMON_PLATFORMS_PLATFORM_NRF51_H_ +#if CS_PLATFORM == CS_P_NRF51 + +#include <assert.h> +#include <ctype.h> +#include <inttypes.h> +#include <stdint.h> +#include <string.h> +#include <time.h> + +#define to64(x) strtoll(x, NULL, 10) + +#define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL +#define MG_ENABLE_IPV6 1 + +/* + * For ARM C Compiler, make lwip to export `struct timeval`; for other + * compilers, suppress it. + */ +#if !defined(__ARMCC_VERSION) +# define LWIP_TIMEVAL_PRIVATE 0 +#else +struct timeval; +int gettimeofday(struct timeval *tp, void *tzp); +#endif + +#define INT64_FMT PRId64 +#define SIZE_T_FMT "u" + + +#endif /* CS_PLATFORM == CS_P_NRF51 */ +#endif /* CS_COMMON_PLATFORMS_PLATFORM_NRF51_H_ */ +#ifdef MG_MODULE_LINES #line 1 "common/platforms/platform_nrf52.h" #endif /*