From 339bc3889c8af9bf181e30d0e98207293ca5f857 Mon Sep 17 00:00:00 2001
From: Rahix <rahix@rahix.de>
Date: Thu, 4 Jul 2019 15:21:35 +0200
Subject: [PATCH] feat(epicardium): Reset board when pressing power button

Signed-off-by: Rahix <rahix@rahix.de>
---
 epicardium/main.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/epicardium/main.c b/epicardium/main.c
index 929fdb67..b2bd12e5 100644
--- a/epicardium/main.c
+++ b/epicardium/main.c
@@ -1,10 +1,12 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#include "max32665.h"
 #include "uart.h"
 #include "cdcacm.h"
 
 #include "card10.h"
+#include "pmic.h"
 #include "leds.h"
 #include "api/dispatcher.h"
 #include "serial.h"
@@ -35,14 +37,23 @@ void vApiDispatcher(void*pvParameters)
 	}
 }
 
+static void pmic_button(bool falling)
+{
+	if (falling) {
+		MXC_GCR->rstr0 = MXC_F_GCR_RSTR0_SYSTEM;
+	}
+}
+
 int main(void)
 {
 	card10_init();
 	card10_diag();
 
+	pmic_set_button_callback(pmic_button);
+
 	cdcacm_init();
 
-	printf("Initializing tasks ...\n");
+	printf("=> Initializing tasks ...\n");
 
 	/* Serial */
 	if (xTaskCreate(
@@ -69,12 +80,13 @@ int main(void)
 		abort();
 	}
 
-	printf("Initializing dispatcher ...\n");
+	printf("=> Initializing dispatcher ...\n");
 	api_dispatcher_init();
 
-	printf("Staring core1 payload ...\n");
+	printf("=> Starting core1 payload ...\n");
 	core1_start();
 
+	printf("=> Starting FreeRTOS ...\n");
 	vTaskStartScheduler();
 	printf("ERROR: FreeRTOS did not start due to unknown error!\n");
 }
-- 
GitLab