Initial commit
This commit is contained in:
23
src/BlinkApp/BlinkApp.cpp
Normal file
23
src/BlinkApp/BlinkApp.cpp
Normal file
@@ -0,0 +1,23 @@
|
||||
#include "BlinkApp.h"
|
||||
#include <FreeRTOS.h>
|
||||
#include <task.h>
|
||||
#include <libraries/log/nrf_log.h>
|
||||
#include <boards.h>
|
||||
|
||||
using namespace Pinetime::Applications;
|
||||
|
||||
void BlinkApp::Start() {
|
||||
if (pdPASS != xTaskCreate(BlinkApp::Process, "BlinkApp", 256, this, 0, &taskHandle))
|
||||
APP_ERROR_HANDLER(NRF_ERROR_NO_MEM);
|
||||
}
|
||||
|
||||
void BlinkApp::Process(void *instance) {
|
||||
auto* app = static_cast<BlinkApp*>(instance);
|
||||
|
||||
NRF_LOG_INFO("BlinkApp task started!");
|
||||
while (1) {
|
||||
NRF_LOG_INFO("BlinkApp task running!");
|
||||
bsp_board_led_invert(0);
|
||||
vTaskDelay(1000);
|
||||
}
|
||||
}
|
15
src/BlinkApp/BlinkApp.h
Normal file
15
src/BlinkApp/BlinkApp.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#pragma once
|
||||
#include <FreeRTOS.h>
|
||||
#include <task.h>
|
||||
|
||||
namespace Pinetime {
|
||||
namespace Applications {
|
||||
class BlinkApp {
|
||||
public:
|
||||
void Start();
|
||||
private:
|
||||
TaskHandle_t taskHandle;
|
||||
static void Process(void* instance);
|
||||
};
|
||||
}
|
||||
}
|
42
src/CMakeLists.txt
Normal file
42
src/CMakeLists.txt
Normal file
@@ -0,0 +1,42 @@
|
||||
cmake_minimum_required(VERSION 3.12)
|
||||
|
||||
project(pinetime-app C CXX ASM)
|
||||
|
||||
# define some variables just for this example to determine file locations
|
||||
set(NRF_PROJECT_NAME pinetime-app)
|
||||
set(NRF_BOARD pca10040)
|
||||
#set(NRF_SOFTDEVICE s132)
|
||||
|
||||
nRF5x_toolchainSetup()
|
||||
nRF5x_setup()
|
||||
|
||||
#nRF5x_addAppScheduler()
|
||||
#nRF5x_addAppFIFO()
|
||||
#nRF5x_addAppTimer()
|
||||
#nRF5x_addAppUART()
|
||||
nRF5x_addAppButton()
|
||||
nRF5x_addBSP(FALSE FALSE FALSE)
|
||||
nRF5x_addAppGpiote()
|
||||
#nRF5x_addBLEGATT()
|
||||
#
|
||||
#nRF5x_addBLEService(ble_lbs)
|
||||
|
||||
add_definitions(-DCONFIG_GPIO_AS_PINRESET)
|
||||
add_definitions(-DDEBUG)
|
||||
|
||||
|
||||
include_directories(.)
|
||||
|
||||
list(APPEND SOURCE_FILES
|
||||
Logging/NrfLogger.cpp
|
||||
BlinkApp/BlinkApp.cpp
|
||||
main.cpp
|
||||
)
|
||||
|
||||
set(INCLUDE_FILES
|
||||
Logging/Logger.h
|
||||
Logging/NrfLogger.h
|
||||
BlinkApp/BlinkApp.h
|
||||
)
|
||||
|
||||
nRF5x_addExecutable(pinetime-app "${SOURCE_FILES}")
|
207
src/FreeRTOSConfig.h
Normal file
207
src/FreeRTOSConfig.h
Normal file
@@ -0,0 +1,207 @@
|
||||
/*
|
||||
* FreeRTOS Kernel V10.0.0
|
||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software. If you wish to use our Amazon
|
||||
* FreeRTOS name, please do so in a fair use way that does not cause confusion.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* http://www.FreeRTOS.org
|
||||
* http://aws.amazon.com/freertos
|
||||
*
|
||||
* 1 tab == 4 spaces!
|
||||
*/
|
||||
|
||||
|
||||
#ifndef FREERTOS_CONFIG_H
|
||||
#define FREERTOS_CONFIG_H
|
||||
|
||||
#ifdef SOFTDEVICE_PRESENT
|
||||
#include "nrf_soc.h"
|
||||
#endif
|
||||
#include "app_util_platform.h"
|
||||
|
||||
/*-----------------------------------------------------------
|
||||
* Possible configurations for system timer
|
||||
*/
|
||||
#define FREERTOS_USE_RTC 0 /**< Use real time clock for the system */
|
||||
#define FREERTOS_USE_SYSTICK 1 /**< Use SysTick timer for system */
|
||||
|
||||
/*-----------------------------------------------------------
|
||||
* Application specific definitions.
|
||||
*
|
||||
* These definitions should be adjusted for your particular hardware and
|
||||
* application requirements.
|
||||
*
|
||||
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
|
||||
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
|
||||
*
|
||||
* See http://www.freertos.org/a00110.html.
|
||||
*----------------------------------------------------------*/
|
||||
|
||||
#define configTICK_SOURCE FREERTOS_USE_RTC
|
||||
|
||||
#define configUSE_PREEMPTION 1
|
||||
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
|
||||
#define configUSE_TICKLESS_IDLE 1
|
||||
#define configUSE_TICKLESS_IDLE_SIMPLE_DEBUG 1 /* See into vPortSuppressTicksAndSleep source code for explanation */
|
||||
#define configCPU_CLOCK_HZ ( SystemCoreClock )
|
||||
#define configTICK_RATE_HZ 1024
|
||||
#define configMAX_PRIORITIES ( 3 )
|
||||
#define configMINIMAL_STACK_SIZE ( 60 )
|
||||
#define configTOTAL_HEAP_SIZE ( 24000 )
|
||||
#define configMAX_TASK_NAME_LEN ( 4 )
|
||||
#define configUSE_16_BIT_TICKS 0
|
||||
#define configIDLE_SHOULD_YIELD 1
|
||||
#define configUSE_MUTEXES 1
|
||||
#define configUSE_RECURSIVE_MUTEXES 1
|
||||
#define configUSE_COUNTING_SEMAPHORES 1
|
||||
#define configUSE_ALTERNATIVE_API 0 /* Deprecated! */
|
||||
#define configQUEUE_REGISTRY_SIZE 2
|
||||
#define configUSE_QUEUE_SETS 0
|
||||
#define configUSE_TIME_SLICING 0
|
||||
#define configUSE_NEWLIB_REENTRANT 0
|
||||
#define configENABLE_BACKWARD_COMPATIBILITY 1
|
||||
|
||||
/* Hook function related definitions. */
|
||||
#define configUSE_IDLE_HOOK 1
|
||||
#define configUSE_TICK_HOOK 0
|
||||
#define configCHECK_FOR_STACK_OVERFLOW 2
|
||||
#define configUSE_MALLOC_FAILED_HOOK 0
|
||||
|
||||
/* Run time and task stats gathering related definitions. */
|
||||
#define configGENERATE_RUN_TIME_STATS 0
|
||||
#define configUSE_TRACE_FACILITY 0
|
||||
#define configUSE_STATS_FORMATTING_FUNCTIONS 0
|
||||
|
||||
/* Co-routine definitions. */
|
||||
#define configUSE_CO_ROUTINES 0
|
||||
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
|
||||
|
||||
/* Software timer definitions. */
|
||||
#define configUSE_TIMERS 1
|
||||
#define configTIMER_TASK_PRIORITY ( 0 )
|
||||
#define configTIMER_QUEUE_LENGTH 32
|
||||
#define configTIMER_TASK_STACK_DEPTH ( 120 )
|
||||
|
||||
/* Tickless Idle configuration. */
|
||||
#define configEXPECTED_IDLE_TIME_BEFORE_SLEEP 2
|
||||
|
||||
/* Tickless idle/low power functionality. */
|
||||
|
||||
|
||||
/* Define to trap errors during development. */
|
||||
#if defined(DEBUG_NRF) || defined(DEBUG_NRF_USER)
|
||||
#define configASSERT( x ) ASSERT(x)
|
||||
#endif
|
||||
|
||||
/* FreeRTOS MPU specific definitions. */
|
||||
#define configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS 1
|
||||
|
||||
/* Optional functions - most linkers will remove unused functions anyway. */
|
||||
#define INCLUDE_vTaskPrioritySet 1
|
||||
#define INCLUDE_uxTaskPriorityGet 1
|
||||
#define INCLUDE_vTaskDelete 1
|
||||
#define INCLUDE_vTaskSuspend 1
|
||||
#define INCLUDE_xResumeFromISR 1
|
||||
#define INCLUDE_vTaskDelayUntil 1
|
||||
#define INCLUDE_vTaskDelay 1
|
||||
#define INCLUDE_xTaskGetSchedulerState 1
|
||||
#define INCLUDE_xTaskGetCurrentTaskHandle 1
|
||||
#define INCLUDE_uxTaskGetStackHighWaterMark 1
|
||||
#define INCLUDE_xTaskGetIdleTaskHandle 1
|
||||
#define INCLUDE_xTimerGetTimerDaemonTaskHandle 1
|
||||
#define INCLUDE_pcTaskGetTaskName 1
|
||||
#define INCLUDE_eTaskGetState 1
|
||||
#define INCLUDE_xEventGroupSetBitFromISR 1
|
||||
#define INCLUDE_xTimerPendFunctionCall 1
|
||||
|
||||
/* The lowest interrupt priority that can be used in a call to a "set priority"
|
||||
function. */
|
||||
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 0xf
|
||||
|
||||
/* The highest interrupt priority that can be used by any interrupt service
|
||||
routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL
|
||||
INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER
|
||||
PRIORITY THAN THIS! (higher priorities are lower numeric values. */
|
||||
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY _PRIO_APP_HIGH
|
||||
|
||||
|
||||
/* Interrupt priorities used by the kernel port layer itself. These are generic
|
||||
to all Cortex-M ports, and do not rely on any particular library functions. */
|
||||
#define configKERNEL_INTERRUPT_PRIORITY configLIBRARY_LOWEST_INTERRUPT_PRIORITY
|
||||
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
|
||||
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
|
||||
#define configMAX_SYSCALL_INTERRUPT_PRIORITY configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY
|
||||
|
||||
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
|
||||
standard names - or at least those used in the unmodified vector table. */
|
||||
|
||||
#define vPortSVCHandler SVC_Handler
|
||||
#define xPortPendSVHandler PendSV_Handler
|
||||
|
||||
|
||||
/*-----------------------------------------------------------
|
||||
* Settings that are generated automatically
|
||||
* basing on the settings above
|
||||
*/
|
||||
#if (configTICK_SOURCE == FREERTOS_USE_SYSTICK)
|
||||
// do not define configSYSTICK_CLOCK_HZ for SysTick to be configured automatically
|
||||
// to CPU clock source
|
||||
#define xPortSysTickHandler SysTick_Handler
|
||||
#elif (configTICK_SOURCE == FREERTOS_USE_RTC)
|
||||
#define configSYSTICK_CLOCK_HZ ( 32768UL )
|
||||
#define xPortSysTickHandler RTC1_IRQHandler
|
||||
#else
|
||||
#error Unsupported configTICK_SOURCE value
|
||||
#endif
|
||||
|
||||
/* Code below should be only used by the compiler, and not the assembler. */
|
||||
#if !(defined(__ASSEMBLY__) || defined(__ASSEMBLER__))
|
||||
#include "nrf.h"
|
||||
#include "nrf_assert.h"
|
||||
|
||||
/* This part of definitions may be problematic in assembly - it uses definitions from files that are not assembly compatible. */
|
||||
/* Cortex-M specific definitions. */
|
||||
#ifdef __NVIC_PRIO_BITS
|
||||
/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */
|
||||
#define configPRIO_BITS __NVIC_PRIO_BITS
|
||||
#else
|
||||
#error "This port requires __NVIC_PRIO_BITS to be defined"
|
||||
#endif
|
||||
|
||||
/* Access to current system core clock is required only if we are ticking the system by systimer */
|
||||
#if (configTICK_SOURCE == FREERTOS_USE_SYSTICK)
|
||||
#include <stdint.h>
|
||||
extern uint32_t SystemCoreClock;
|
||||
#endif
|
||||
#endif /* !assembler */
|
||||
|
||||
/** Implementation note: Use this with caution and set this to 1 ONLY for debugging
|
||||
* ----------------------------------------------------------
|
||||
* Set the value of configUSE_DISABLE_TICK_AUTO_CORRECTION_DEBUG to below for enabling or disabling RTOS tick auto correction:
|
||||
* 0. This is default. If the RTC tick interrupt is masked for more than 1 tick by higher priority interrupts, then most likely
|
||||
* one or more RTC ticks are lost. The tick interrupt inside RTOS will detect this and make a correction needed. This is needed
|
||||
* for the RTOS internal timers to be more accurate.
|
||||
* 1. The auto correction for RTOS tick is disabled even though few RTC tick interrupts were lost. This feature is desirable when debugging
|
||||
* the RTOS application and stepping though the code. After stepping when the application is continued in debug mode, the auto-corrections of
|
||||
* RTOS tick might cause asserts. Setting configUSE_DISABLE_TICK_AUTO_CORRECTION_DEBUG to 1 will make RTC and RTOS go out of sync but could be
|
||||
* convenient for debugging.
|
||||
*/
|
||||
#define configUSE_DISABLE_TICK_AUTO_CORRECTION_DEBUG 0
|
||||
|
||||
#endif /* FREERTOS_CONFIG_H */
|
13
src/Logging/DummyLogger.h
Normal file
13
src/Logging/DummyLogger.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
#include "Logger.h"
|
||||
|
||||
namespace Pinetime {
|
||||
namespace Logging{
|
||||
class DummyLogger : public Logger {
|
||||
public:
|
||||
void Init() override {}
|
||||
void Resume() override {}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
11
src/Logging/Logger.h
Normal file
11
src/Logging/Logger.h
Normal file
@@ -0,0 +1,11 @@
|
||||
#pragma once
|
||||
|
||||
namespace Pinetime {
|
||||
namespace Logging {
|
||||
class Logger {
|
||||
public:
|
||||
virtual void Init() = 0;
|
||||
virtual void Resume() = 0;
|
||||
};
|
||||
}
|
||||
}
|
32
src/Logging/NrfLogger.cpp
Normal file
32
src/Logging/NrfLogger.cpp
Normal file
@@ -0,0 +1,32 @@
|
||||
#include <libraries/log/nrf_log_ctrl.h>
|
||||
#include <libraries/log/nrf_log_default_backends.h>
|
||||
#include <FreeRTOS.h>
|
||||
#include <task.h>
|
||||
#include <libraries/log/nrf_log.h>
|
||||
#include "NrfLogger.h"
|
||||
|
||||
using namespace Pinetime::Logging;
|
||||
|
||||
void NrfLogger::Init() {
|
||||
auto result = NRF_LOG_INIT(nullptr);
|
||||
APP_ERROR_CHECK(result);
|
||||
|
||||
NRF_LOG_DEFAULT_BACKENDS_INIT();
|
||||
|
||||
if (pdPASS != xTaskCreate(NrfLogger::Process, "LOGGER", 512, nullptr, 0, &m_logger_thread))
|
||||
APP_ERROR_HANDLER(NRF_ERROR_NO_MEM);
|
||||
}
|
||||
|
||||
void NrfLogger::Process(void*) {
|
||||
NRF_LOG_INFO("Logger task started!");
|
||||
while (1) {
|
||||
NRF_LOG_FLUSH();
|
||||
vTaskSuspend(nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
void NrfLogger::Resume() {
|
||||
vTaskResume(m_logger_thread);
|
||||
}
|
||||
|
||||
|
17
src/Logging/NrfLogger.h
Normal file
17
src/Logging/NrfLogger.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#pragma once
|
||||
#include "Logger.h"
|
||||
|
||||
namespace Pinetime {
|
||||
namespace Logging{
|
||||
class NrfLogger : public Logger {
|
||||
public:
|
||||
void Init() override;
|
||||
void Resume() override;
|
||||
|
||||
private:
|
||||
static void Process(void*);
|
||||
TaskHandle_t m_logger_thread;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
76
src/main.cpp
Normal file
76
src/main.cpp
Normal file
@@ -0,0 +1,76 @@
|
||||
#include <FreeRTOS.h>
|
||||
#include <task.h>
|
||||
#include <libraries/log/nrf_log.h>
|
||||
#include <BlinkApp/BlinkApp.h>
|
||||
#include <boards.h>
|
||||
#include <libraries/bsp/bsp.h>
|
||||
#include <legacy/nrf_drv_clock.h>
|
||||
#include <libraries/timer/app_timer.h>
|
||||
#include <libraries/gpiote/app_gpiote.h>
|
||||
|
||||
|
||||
#if NRF_LOG_ENABLED
|
||||
#include "Logging/NrfLogger.h"
|
||||
Pinetime::Logging::NrfLogger logger;
|
||||
#else
|
||||
#include "Logging/DummyLogger.h"
|
||||
Pinetime::Logging::DummyLogger logger;
|
||||
#endif
|
||||
|
||||
Pinetime::Applications::BlinkApp blinkApp;
|
||||
TaskHandle_t systemThread;
|
||||
|
||||
|
||||
extern "C" {
|
||||
void vApplicationIdleHook() {
|
||||
logger.Resume();
|
||||
}
|
||||
|
||||
void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed portCHAR *pcTaskName ) {
|
||||
bsp_board_led_on(3);
|
||||
}
|
||||
}
|
||||
|
||||
static void bsp_event_handler(bsp_event_t event)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case BSP_EVENT_KEY_0:
|
||||
NRF_LOG_INFO("Button pressed");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SystemTask(void *) {
|
||||
APP_GPIOTE_INIT(2);
|
||||
app_timer_init();
|
||||
|
||||
bsp_board_init(BSP_INIT_LEDS|BSP_INIT_BUTTONS);
|
||||
bsp_init(BSP_INIT_LEDS | BSP_INIT_BUTTONS, bsp_event_handler);
|
||||
|
||||
blinkApp.Start();
|
||||
|
||||
while (1) {
|
||||
vTaskSuspend(nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
logger.Init();
|
||||
nrf_drv_clock_init();
|
||||
|
||||
if (pdPASS != xTaskCreate(SystemTask, "MAIN", 256, nullptr, 0, &systemThread))
|
||||
APP_ERROR_HANDLER(NRF_ERROR_NO_MEM);
|
||||
|
||||
vTaskStartScheduler();
|
||||
|
||||
for (;;) {
|
||||
APP_ERROR_HANDLER(NRF_ERROR_FORBIDDEN);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
12938
src/sdk_config.h
Normal file
12938
src/sdk_config.h
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user