changeset 371:fca370f847f8 MotionDetection

Added parameter for number of sectors to be defined
author ideenmodellierer
date Mon, 19 Aug 2019 17:39:47 +0200
parents 77cdfbdaca8c
children 75eedde05ff6
files Discovery/Inc/motion.h Discovery/Src/base.c Discovery/Src/motion.c
diffstat 3 files changed, 29 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/Discovery/Inc/motion.h	Tue Aug 13 21:13:54 2019 +0200
+++ b/Discovery/Inc/motion.h	Mon Aug 19 17:39:47 2019 +0200
@@ -10,6 +10,7 @@
 
 
 /* exported data types */
+#define CUSTOMER_DEFINED_VIEWS	(100u)	/* value will cause the function to detect the numer of selected views */
 
 typedef enum
 {
@@ -39,7 +40,7 @@
 } SSector;
 
 void InitMotionDetection(void);
-void DefinePitchSectors(float centerAngle);
+void DefinePitchSectors(float centerAngle, uint8_t numOfSectors);
 detectionState_t detectPitch(float currentPitch);
 detectionState_t detectSectorButtonEvent(float curPitch);
 
--- a/Discovery/Src/base.c	Tue Aug 13 21:13:54 2019 +0200
+++ b/Discovery/Src/base.c	Mon Aug 19 17:39:47 2019 +0200
@@ -904,7 +904,7 @@
 							tHome_change_customview_button_pressed(action);
 							if((settingsGetPointer()->MotionDetection == MOTION_DETECT_SECTOR) && (action == ACTION_BUTTON_ENTER))  /* Button pressed while sector detection is active => calibrate to current pitch value */
 							{
-								DefinePitchSectors(stateRealGetPointer()->lifeData.compass_pitch);
+								DefinePitchSectors(stateRealGetPointer()->lifeData.compass_pitch,CUSTOMER_DEFINED_VIEWS);
 							}
 						}
 						else if (status.page == PageSurface)
--- a/Discovery/Src/motion.c	Tue Aug 13 21:13:54 2019 +0200
+++ b/Discovery/Src/motion.c	Mon Aug 19 17:39:47 2019 +0200
@@ -11,6 +11,7 @@
 #include "motion.h"
 #include "data_central.h"
 #include "t7.h"
+#include "settings.h"
 
 #define	STABLE_STATE_COUNT			2	/* number of count to declare a state as stable (at the moment based on 100ms) */
 #define STABLE_STATE_TIMEOUT		5	/* Detection shall be aborted if a movement state is stable for more than 500ms */
@@ -24,6 +25,7 @@
 #define SECTOR_BORDER				400.0	/* Define a value which is out of limit to avoid not wanted key events */
 #define SECTOR_FILTER				10		/* Define speed for calculated angle to follow real value */
 
+#define SECTOR_MAX					10		/* maximum number of sectors */
 
 static detectionState_t detectionState = DETECT_NOTHING;
 
@@ -61,11 +63,22 @@
 	return sector;
 }
 
-void DefinePitchSectors(float centerPitch)
+void DefinePitchSectors(float centerPitch,uint8_t numOfSectors)
 {
 	uint8_t index;
 
-	sectorCount =  t7_GetEnabled_customviews();
+	if(numOfSectors == CUSTOMER_DEFINED_VIEWS)
+	{
+		sectorCount =  t7_GetEnabled_customviews();
+		if(sectorCount > 5)
+		{
+			sectorCount = 5;	/* more views are hard to manually control */
+		}
+	}
+	else
+	{
+		sectorCount = numOfSectors;
+	}
 	sectorSize = SECTOR_WINDOW / sectorCount;
 
 	PitchSector[0].upperlimit = centerPitch + (SECTOR_WINDOW / 2);
@@ -91,7 +104,17 @@
 	curSector = 0;
 	sectorSize = 0;
 	sectorCount = 0;
-	DefinePitchSectors(0);
+
+	switch(settingsGetPointer()->MotionDetection)
+	{
+		case MOTION_DETECT_SECTOR: DefinePitchSectors(0,CUSTOMER_DEFINED_VIEWS);
+			break;
+		case MOTION_DETECT_MOVE: DefinePitchSectors(0,SECTOR_MAX);
+			break;
+		default:
+			break;
+	}
+
 }
 
 /* Map the current pitch value to a sector and create button event in case the sector is left */