source for demo Book And Plug

Dependencies:   APA102

Dependents:   BookAndPlug

LedCtrl.h

Committer:
vrou44
Date:
2018-05-14
Revision:
0:5648c217e527

File content as of revision 0:5648c217e527:

/*
 * LedCtrl.h
 *
 *  Created on: 26 mars 2018
 *      Author: hd01073
 */

#ifndef LEDCTRL_H_
#define LEDCTRL_H_

#include "mbed.h"
#include "mbed_events.h"

#define nbTypOfActivities 6
#define NB_LED_STR1 22
#define NB_LED_STR2 46

class LedCtrl
{
public:
	static LedCtrl *singleInstP ;
	static LedCtrl &getInst(void) {
		if (!singleInstP) singleInstP = new LedCtrl() ;
				return *singleInstP ;
	};

	static void delInst(void) {
		if (singleInstP) {
			delete singleInstP ;
			singleInstP = 0 ;
		}
	} ;

	enum Evt {
		activityChangeRequired
	};

	enum Activity {
		undefinedActivity = -1,
		noActivity = 0 ,
		signalingTermIdle = 1 ,
		signalingTermSelected = 2 ,
		signalingPlugSelected = 3 ,
		signalingCharging = 4 ,
		signalingChargeSuspended = 5
	};

	void init(void) ;
	static void signalEvent(Evt evt) ;

public:
	static Activity currentActivity ;
	static Activity requiredActivity ;
//	unsigned int *frameB1 ;
//	unsigned int *frameB2 ;

private :
	LedCtrl(void) ;
	~LedCtrl() ;

	static void instanceFeedFsm(Evt evt)
	{
		singleInstP->feedFsm(evt) ;
	} ;
	void feedFsm(Evt evt) ;
	static void expirationDelayHdlr(void) ;
	static void refreshDelayHdlr(void) ;

private:
	int delayRequestId ;
	struct ActivityCtxt {				// generic context for activity
		virtual void start(void) = 0 ;
		virtual void keepAlive(void) = 0 ;
		LedCtrl &ledCtrl ;
		unsigned char lightIntensity ;
		int nbRefresh ;						// work around hardware isssue : first repaint may not work
		bool increaseIntensB ;
		ActivityCtxt(LedCtrl &_ledCtrl) :
			ledCtrl(_ledCtrl),
			lightIntensity(0),
			nbRefresh(0),
			increaseIntensB(false)
		{
		} ;
		virtual ~ActivityCtxt()
		{
		} ;
	};
	ActivityCtxt *currentActivityCtxtP ;

	struct NoActivityCtxt :
		public ActivityCtxt {		// specific context
		NoActivityCtxt (LedCtrl &_ledCtrl) ;
		virtual ~NoActivityCtxt() {} ;
		virtual void start(void) ;
		virtual void keepAlive(void) ;
	}  ;

	struct SignalingTermIdleCtxt :
		public ActivityCtxt {		// specific context
		SignalingTermIdleCtxt (LedCtrl &_ledCtrl) ;
		virtual ~SignalingTermIdleCtxt() {} ;
		virtual void start(void) ;
		virtual void keepAlive(void) ;
	} ;

	struct SignalingTermSelectedCtxt :
		public ActivityCtxt {
		SignalingTermSelectedCtxt(LedCtrl &_ledCtrl) ;
		virtual ~SignalingTermSelectedCtxt()  {} ;
		virtual void start(void) ;
		virtual void keepAlive(void) ;

	} ;

	struct SignalingPlugSelectedCtxt :
		public ActivityCtxt {
		SignalingPlugSelectedCtxt(LedCtrl &_ledCtrl) ;
		virtual ~SignalingPlugSelectedCtxt()  {} ;
		virtual void start(void) ;
		virtual void keepAlive(void) ;
	} ;

	struct SignalingChargingCtxt :
		public ActivityCtxt {
		int startIdxStr1 ;
		int startIdxStr2 ;
		SignalingChargingCtxt(LedCtrl &_ledCtrl) ;
		virtual ~SignalingChargingCtxt()  {} ;
		virtual void start(void) ;
		virtual void keepAlive(void) ;
	} ;

	struct SignalingChargeSuspendedCtxt :
		public ActivityCtxt {
		SignalingChargeSuspendedCtxt(LedCtrl &_ledCtrl) ;
		virtual ~SignalingChargeSuspendedCtxt()  {} ;
		virtual void start(void) ;
		virtual void keepAlive(void) ;
	} ;

	NoActivityCtxt noActivityCtxt ;
	SignalingTermIdleCtxt signalingTermIdleCtxt ;
	SignalingTermSelectedCtxt signalingTermSelectedCtxt ;
	SignalingPlugSelectedCtxt signalingPlugSelectedCtxt ;
	SignalingChargingCtxt signalingChargingCtxt ;
	SignalingChargeSuspendedCtxt signalingChargeSuspendedCtxt ;

	ActivityCtxt *ctxtAP[nbTypOfActivities] ;
};


#endif /* LEDCTRL_H_ */