Advanced Distributed Systems module at HSLU
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

129 lines
3.1 KiB

/*
* application.c
*
* Created on: 22.09.2022
* Author: jonas
*/
#include "fsl_debug_console.h"
#include "platform.h"
#include "application.h"
#include "McuWait.h"
#include "McuLED.h"
#include "McuLog.h"
#include "debounce.h"
#define APP_DEBUG
/* blue led pins */
#define LED_BLUE_GPIO GPIOC
#define LED_BLUE_PORT PORTC
#define LED_BLUE_PIN 2U
/* vars */
static McuLED_Handle_t LED_blue;
static McuGPIO_Handle_t GPIO_PowerRaspi;
static McuGPIO_Handle_t GPIO_RaspiShutdownIndicator;
static uint32_t taskParameter1 = 5;
static TaskHandle_t appTaskHandle = NULL;
static QueueHandle_t eventQueueHandle = NULL;
/* function declaration */
/* Application initialization */
void App_Init(void){
/* configure blue LED */
McuLED_Config_t config;
McuLED_GetDefaultConfig(&config);
config.isLowActive = true;
config.isOnInit = false;
config.hw.gpio = LED_BLUE_GPIO;
config.hw.port = LED_BLUE_PORT;
config.hw.pin = LED_BLUE_PIN;
LED_blue = McuLED_InitLed(&config);
/* configure gpio raspi power off GPIO (GP_0)*/
McuGPIO_Config_t config_gp0;
McuGPIO_GetDefaultConfig(&config_gp0);
config_gp0.hw.gpio = GPIOA;
config_gp0.hw.port = PORTA;
config_gp0.hw.pin = 1U;
config_gp0.isInput = false; // Output
config_gp0.isHighOnInit = true; // active low
config_gp0.hw.pull = McuGPIO_PULL_DISABLE; // disable pull
GPIO_PowerRaspi = McuGPIO_InitGPIO(&config_gp0);
/* configure gpio raspi shutdown indicator (GP_1) */
McuGPIO_Config_t config_gp1;
McuGPIO_GetDefaultConfig(&config_gp1);
config_gp1.hw.gpio = GPIOA;
config_gp1.hw.port = PORTA;
config_gp1.hw.pin = 2U;
config_gp1.isInput = true; // input
config_gp1.hw.pull = McuGPIO_PULL_DISABLE; // disable pull
GPIO_RaspiShutdownIndicator = McuGPIO_InitGPIO(&config_gp1);
// get the event queue handle from debounce
eventQueueHandle = Debounce_GetEventQueueHandle();
}
/* App Task */
static void App_Task(void* pv){
McuLog_info("Application Task starting");
while(1){
Debounce_event_e event = Event_None;
// get event data from queue if it can be reached
if(eventQueueHandle != NULL)
{
// ignore errors, since it is very well possible that the queue is empty
xQueueReceive(eventQueueHandle, &event, pdMS_TO_TICKS(20));
}
// turn off raspberry pi if requested by button press
if(event == Button_Up_Pressed){
McuGPIO_SetLow(GPIO_PowerRaspi);
vTaskDelay(pdMS_TO_TICKS(1000));
McuGPIO_SetHigh(GPIO_PowerRaspi);
}
// turn on led if the power off indicator is on (Raspi is shut down)
if(McuGPIO_IsHigh(GPIO_RaspiShutdownIndicator)){
McuLED_On(LED_blue);
}else{
McuLED_Off(LED_blue);
}
vTaskDelay(pdMS_TO_TICKS(100));
}
}
/* Application run */
void App_Run(void){
BaseType_t res;
res = xTaskCreate( App_Task,
"appTask",
900/sizeof(StackType_t),
&taskParameter1,
tskIDLE_PRIORITY,
&appTaskHandle);
if(res != pdPASS) // task creation not successful?
{
PRINTF("Task creation of app task failed");
for(;;) {} // Endless loop
}
vTaskStartScheduler();
}
/* Application de-initialization */
void App_Deinit(void){
}