diff Discovery/Src/demo.c @ 38:5f11787b4f42

include in ostc4 repository
author heinrichsweikamp
date Sat, 28 Apr 2018 11:52:34 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Discovery/Src/demo.c	Sat Apr 28 11:52:34 2018 +0200
@@ -0,0 +1,429 @@
+/**
+  ******************************************************************************
+	* @copyright	heinrichs weikamp gmbh
+  * @file    		demo.c
+  * @author  		heinrichs weikamp gmbh
+	* @date    		26-Nov-2015
+  * @version 		0.1
+  * @since	 		26-Nov-2015
+  * @brief   		f�r die Messe und die Vitrine
+	* @bug
+	* @warning
+  @verbatim
+  ==============================================================================
+	
+
+	==============================================================================
+  @endverbatim
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2015 heinrichs weikamp</center></h2>
+  *
+  ******************************************************************************
+  */
+
+#include "demo.h"
+#include "base.h" // for BUTTON_BACK, ...
+#include "data_exchange_main.h" // for time_elapsed_ms()
+#include "settings.h"
+#include "ostc.h"
+
+#ifndef DEMOMODE
+
+/* Exported functions --------------------------------------------------------*/
+
+uint8_t demoGetCommand(void) { return 0; }
+uint8_t demoModeActive(void) { return 0; }
+void demoSendCommand(uint8_t action) { return; }
+
+
+#else
+
+/* Private variables with external access ------------------------------------*/
+
+uint8_t demoModeActiveStatus = 1;
+uint32_t systickDemoMode;
+
+uint16_t demoModeActual = 0;
+
+#define BUTTON_BACK (BUTTON_BACK_PIN | 0x80)
+#define BUTTON_NEXT (BUTTON_NEXT_PIN | 0x80)
+#define BUTTON_ENTER (BUTTON_ENTER_PIN | 0x80)
+
+/* Private typedef -----------------------------------------------------------*/
+
+#define MAXCOMMANDS 200
+
+#ifdef SHOWCCRMODE
+const uint8_t commandlist[MAXCOMMANDS][3] = 
+{
+/* Button, deci-seconds to wait */
+
+	// start for both
+	{0, 40},
+	// start OC, activate CC
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_ENTER, 0},
+	{BUTTON_ENTER, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_ENTER, 0}, // Change to CC
+	{BUTTON_ENTER, 0}, // Leave Edit
+	{BUTTON_BACK, 0}, 	// Cursor
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_BACK, 0},
+	{0, 0},
+	{0, 0},
+	{0, 0},
+	{0, 0},
+	{0, 0},
+	{0, 0},
+	// start CC @ 20, set cursor to Sim  Menu
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_BACK, 50},
+	{0, 0},
+	// re-loop @ 30
+	{0, 3},
+	// Logbook
+	{BUTTON_BACK, 	0},
+	{BUTTON_ENTER, 20},
+	{BUTTON_NEXT, 	20},
+	{BUTTON_BACK, 	0},
+	{BUTTON_BACK, 	0},
+	{BUTTON_BACK, 	0},
+	// surface screen
+	{0, 2},
+	// menu
+	{BUTTON_NEXT, 	0},
+	{BUTTON_NEXT, 	0},
+	{BUTTON_NEXT, 	0},
+	{BUTTON_NEXT, 	0},
+	{BUTTON_NEXT, 	0},
+	{BUTTON_NEXT, 	0},
+	{BUTTON_NEXT, 	0},
+	{BUTTON_NEXT, 	0},
+	{BUTTON_NEXT, 	0},
+	{BUTTON_ENTER, 30},
+	{BUTTON_ENTER, 0},
+	// simulator
+	{0, 10},
+	{BUTTON_ENTER, 10},
+	{BUTTON_ENTER, 10},
+	{BUTTON_ENTER, 10},
+	{BUTTON_ENTER, 10},
+	{BUTTON_ENTER, 10},
+	
+	{BUTTON_NEXT, 	0},
+	{BUTTON_NEXT, 	0},
+	{BUTTON_ENTER, 0},
+	{BUTTON_ENTER, 0},
+	// the end, repeat from start
+	{255, 0}
+};
+#else // OC Mode Demo
+const uint8_t commandlist[MAXCOMMANDS][2] = 
+{
+/* Button, seconds to wait */
+
+	// start for both
+	{0, 50}, // wait IS IMPORTANT
+	// start CC, activate OC
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_ENTER, 0},
+	{BUTTON_ENTER, 0},
+	{BUTTON_ENTER, 0},
+	{BUTTON_ENTER, 0},
+	{BUTTON_BACK, 0},	// Leave Cursor Mode
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0}, // OC
+	{BUTTON_BACK, 0},
+	{0, 0},
+	{0, 0},
+	{0, 0},
+	{0, 0},
+	// start OC @ line 20
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0},
+	{BUTTON_NEXT, 0}, // OC -> SIM
+	{BUTTON_BACK, 0}, // Exit Menu
+	{0, 0},
+	{0, 0},
+	{0, 0},
+	// re-loop @ 30
+	{0, 10},
+	// Logbook
+	{BUTTON_BACK, 	4},
+	{BUTTON_NEXT, 	0},
+	{BUTTON_NEXT, 	10},
+	{BUTTON_ENTER, 20},
+	{BUTTON_NEXT, 	20},
+	{BUTTON_NEXT, 	20},
+	{BUTTON_BACK, 	0},
+	{BUTTON_BACK, 	5},
+	{BUTTON_BACK, 	0}, // Exit Logbook Mode
+	// surface screen
+	{0, 10},
+	{BUTTON_ENTER, 10},
+	{BUTTON_ENTER, 10},
+
+	// menu
+	// activate Configure Deco Gas
+	{BUTTON_NEXT, 	0}, // Start Menu
+	{BUTTON_NEXT, 	2}, // SIM -> OC
+	{BUTTON_ENTER, 2},
+	{BUTTON_NEXT, 	1},
+	{BUTTON_ENTER, 0},
+	{BUTTON_ENTER, 0},
+	// Mix 30 -> 90
+	{BUTTON_NEXT, 	0},
+	{BUTTON_NEXT, 	0},
+	{BUTTON_NEXT, 	0},
+	{BUTTON_NEXT, 	0},
+	{BUTTON_NEXT, 	0},
+	{BUTTON_NEXT, 	0},
+	{BUTTON_ENTER, 0},
+	// Mix 90 -> 99
+	{BUTTON_BACK, 	0},
+	{BUTTON_ENTER, 0},
+	{BUTTON_ENTER, 0},
+	{BUTTON_ENTER, 5},
+	// First -> Deco
+	{BUTTON_NEXT, 	2},
+	{BUTTON_ENTER, 2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_ENTER, 2},
+	{BUTTON_ENTER, 10},
+	{BUTTON_BACK, 	0},
+	{BUTTON_BACK, 	30},
+/*
+	// OC -> SIM
+	{BUTTON_NEXT, 	2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_NEXT, 	1},
+	{BUTTON_ENTER, 10},
+*/
+	// SYS2 Layout
+	{BUTTON_NEXT, 	2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_ENTER,  2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_ENTER,  2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_ENTER,  2},
+	{BUTTON_BACK, 	2},
+	{BUTTON_BACK, 	10},
+	// SYS2 -> SIM
+	{BUTTON_NEXT, 	2},
+	{BUTTON_ENTER, 10},
+	// simulator
+	{BUTTON_ENTER, 40}, // Start Simulator
+	{BUTTON_ENTER, 10},
+	{BUTTON_ENTER, 10},
+	{BUTTON_ENTER, 10},
+	{BUTTON_ENTER, 10},
+	{BUTTON_ENTER, 10},
+	{BUTTON_ENTER, 10},
+	{BUTTON_ENTER, 90},
+	
+	{BUTTON_NEXT, 	5}, // Quit
+	{BUTTON_NEXT, 	5},
+	{BUTTON_ENTER,  5},
+	{BUTTON_ENTER, 50},
+	// surface screen
+	{0, 10},
+	// Logbook
+	{BUTTON_BACK, 20},
+	{BUTTON_ENTER, 20},
+	{BUTTON_NEXT, 	20},
+	{BUTTON_NEXT, 	20},
+	{BUTTON_BACK, 	0},
+	{BUTTON_BACK, 	5},
+	{BUTTON_BACK, 	0}, // Exit Logbook Mode
+	// surface screen
+	{0, 10},
+	// activate Configure Deco Gas, go to Gas 2
+	{BUTTON_NEXT, 	0}, // Start Menu
+	{BUTTON_NEXT, 	2}, // SIM -> OC
+	{BUTTON_ENTER, 2},
+	{BUTTON_NEXT, 	1},
+	{BUTTON_ENTER, 0},
+	{BUTTON_ENTER, 0},
+	// Mix Decogas 99 -> EAN30 First
+	{BUTTON_BACK, 	0},
+	{BUTTON_BACK, 	0},
+	{BUTTON_BACK, 	0},
+	{BUTTON_BACK, 	0},
+	{BUTTON_BACK, 	0},
+	{BUTTON_BACK, 	0},
+	{BUTTON_ENTER, 0},
+	{BUTTON_NEXT, 	0},
+	{BUTTON_ENTER, 0},
+	{BUTTON_ENTER, 0},
+	{BUTTON_ENTER, 2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_ENTER, 5},
+	{BUTTON_ENTER, 5},
+	{BUTTON_ENTER, 10}, // Now EAN 30 First
+	{BUTTON_BACK, 	0}, // Exit Edit Mode
+	{BUTTON_BACK, 	30}, // Exit Cursor Mode
+/*
+	// OC -> SIM
+	{BUTTON_NEXT, 	2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_NEXT, 	1},
+	{BUTTON_ENTER, 10},
+*/	
+	// SYS2 Layout
+	{BUTTON_NEXT, 	2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_ENTER,  2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_ENTER,  2},
+	{BUTTON_NEXT, 	2},
+	{BUTTON_ENTER,  2},
+	{BUTTON_BACK, 	2},
+	{BUTTON_BACK, 	10},
+	// SYS -> SIM
+	{BUTTON_NEXT, 	2},
+	{BUTTON_ENTER, 10},
+	// simulator
+	{BUTTON_ENTER, 40}, // Start Simulator
+	{BUTTON_ENTER, 5},
+	{BUTTON_ENTER, 10},
+	{BUTTON_ENTER, 10},
+	{BUTTON_ENTER, 10},
+	{BUTTON_ENTER, 10},
+	{BUTTON_ENTER, 10},
+	{BUTTON_ENTER, 90},
+	{BUTTON_NEXT, 	5}, // Menu?
+	{BUTTON_NEXT, 	5}, // Quit?
+	{BUTTON_ENTER, 10},
+	{BUTTON_ENTER, 50},
+	// the end, repeat from start
+	{255, 0}
+};
+#endif
+
+
+/* Exported functions --------------------------------------------------------*/
+
+uint8_t demoModeActive(void)
+{
+	return demoModeActiveStatus;
+}
+
+uint8_t demoGetCommand(void)
+{
+	if(!demoModeActiveStatus)
+		return 0;
+	
+	uint32_t milliSecondsSinceLast;
+	uint32_t systick_now;
+
+
+	systick_now = HAL_GetTick();
+	milliSecondsSinceLast = time_elapsed_ms(systickDemoMode, systick_now);
+
+	#ifdef SHOWCCRMODE
+	if((demoModeActual == 1) && (settingsGetPointer()->dive_mode == DIVEMODE_CCR))
+		demoModeActual = 20;
+	#else
+	if((demoModeActual == 1) && (settingsGetPointer()->dive_mode == DIVEMODE_OC))
+		demoModeActual = 20;
+	#endif
+	
+	if(demoModeActual > MAXCOMMANDS - 2)
+		demoModeActual = 30;
+	
+
+	uint32_t actualDelay = ((commandlist[demoModeActual][1]) * 100) + 15;
+	
+	if(milliSecondsSinceLast < actualDelay)
+		return 0;
+	
+	systickDemoMode = systick_now;
+	
+	if(commandlist[demoModeActual][0] == 255)
+		demoModeActual = 30;
+	else
+		demoModeActual++;
+	
+	return commandlist[demoModeActual][0];
+}
+
+
+void demoSendCommand(uint8_t action)
+{
+	demoModeActiveStatus = 0;
+	
+}
+
+void demoConfigureSettings(void)
+{
+	settingsGetPointer()->gas[1].oxygen_percentage = 21;
+	settingsGetPointer()->gas[1].helium_percentage = 0;
+	settingsGetPointer()->gas[1].depth_meter = 0;
+	settingsGetPointer()->gas[1].note.ub.first = 0;
+	settingsGetPointer()->gas[1].note.ub.active = 0;
+	settingsGetPointer()->gas[1].note.ub.deco = 0;
+	settingsGetPointer()->gas[1].note.ub.travel = 0;
+
+	settingsGetPointer()->gas[2].oxygen_percentage = 30;
+	settingsGetPointer()->gas[2].helium_percentage = 0;
+	settingsGetPointer()->gas[2].depth_meter = 0;
+	settingsGetPointer()->gas[2].note.ub.first = 1;
+	settingsGetPointer()->gas[2].note.ub.active = 1;
+	settingsGetPointer()->gas[2].note.ub.deco = 0;
+	settingsGetPointer()->gas[2].note.ub.travel = 0;
+	
+	settingsGetPointer()->ButtonResponsiveness[0] = 90;
+	settingsGetPointer()->ButtonResponsiveness[1] = 90;
+	settingsGetPointer()->ButtonResponsiveness[2] = 90;
+	settingsGetPointer()->ButtonResponsiveness[3] = 90;
+}
+
+/* Includes ------------------------------------------------------------------*/
+
+/* Private function prototypes -----------------------------------------------*/
+
+/* Private variables with external access ------------------------------------*/
+
+/* Exported functions --------------------------------------------------------*/
+
+/* Private functions ---------------------------------------------------------*/
+
+
+#endif // DEMO
+
+
+/************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/