TEST

Dependencies:   max32630fthr Adafruit_FeatherOLED USBDevice

Utilities/WatchInterface.h

Committer:
gmehmet
Date:
2019-04-10
Revision:
1:f60eafbf009a
Child:
3:2fe2ff1ca0dc

File content as of revision 1:f60eafbf009a:

/*
 * WatchInterface.h
 *
 *  Created on: Aug 28, 2018
 *      Author: Gokhan.Bektas
 */

#define BATTERY_GAUGE_COUNT 50
#define BATTERY_CRITICAL_LEVEL 5




#ifndef UTILITIES_WATCHINTERFACE_H_
#define UTILITIES_WATCHINTERFACE_H_
#include "mbed.h"
#include "LS013B7DH03.h"
#include "version.h"
#include "BLE_ICARUS.h"

#include "MAX20303.h"


    #define DISPLAYMODE_TIME	 		    0
    #define DISPLAYMODE_PPG		 		    1
#ifdef ENABLE_SPO2
    #define DISPLAYMODE_SPO2_ONESHOT	    2
    #define DISPLAYMODE_SPO2_CONTINUOUS	    3
#else
	#define DISPLAYMODE_TEMP                4
#endif
    #define DISPLAYMODE_INFO	 		    5
    #define DISPLAYMODE_ECG		 		    6
    #define	DISPLAYMODE_TETHERED 		    7
    #define DISPLAYMODE_TETHERED_USB 	    8
    #define DISPLAYMODE_LOGO	 		    9
    #define DISPLAYMODE_RECORDING		    10
    #define DISPLAYMODE_RECORDING_STOP	    11
    #define DISPLAYMODE_AFTERBOOT		    12


typedef enum {

	BUTTONEVENT_NONE,
	BUTTONEVENT_UP_PRE,
	BUTTONEVENT_DOWN_PRE,
	BUTTONEVENT_UP,
	BUTTONEVENT_DOWN

} Button_Event;

class WatchInterface
{
public:


	typedef enum {
		/** No activity, or very light activity. */
		ACTD_REST_ACTIVITY = 0,
		/** Non-rhythmic activities that cannot be classified in the other categories. */
		ACTD_OTHER_ACTIVITY = 1,
		/** Walking activity. */
		ACTD_WALK_ACTIVITY = 2,
		/** Running activity. */
		ACTD_RUN_ACTIVITY = 3,
		/** Biking activity. */
		ACTD_BIKE_ACTIVITY = 4,
		/** Rhythmic activities that cannot be classified in the other categories. */
		ACTD_OTHER_RYTHMIC_ACTIVITY = 5,
	} actd_ActivityClass_te;


	typedef enum {
		BUTTON_PRESSED  = 1,
		BUTTON_RELEASED = 0

	} ButtonStatus;


	typedef enum {
		BUTTON_POWER = 0,
		BUTTON_UP    = 1,
		BUTTON_DOWN  = 2

	} hspButton;


	/** Create an Watch Interface controller
	 *
	 *  @param buttonUp    PinName UP button
	 *  @param buttonDown  PinName DOWN button
	 *  @param buttonPower PinName POWER button
	 */
	WatchInterface(PinName buttonUp, PinName buttonDown, PinName buttonPower, PinName displayCS, PinName displayEXTCOM, PinName displayDISP, SPI* displaySPI);

	void updateDisplay(int batteryLevelToBeScaled);
	void execute(void);
	void displayOff(bool off);
	void DisplayStatus();
	void DisplayModeUpdated();

	static void refreshCallback(void);

	unsigned char connection_indicator;

	ButtonStatus			getButtonStatus(hspButton button);

	uint16_t 	 			heartRate;
	uint16_t 	 			heartRateConfidence;
	volatile bool 			BLE_Interface_Exists, BLE_Interface_Exists_old;
	volatile bool			USB_Interface_Exists, USB_Interface_Exists_old;
	volatile bool			USB_Interface_MSD;
	volatile bool			recording, recording_old;

	bool					recordingStopFlag;

	volatile bool 			modeUpdated;

	unsigned char			batteryLevel;

	volatile Button_Event 	buttonEvent_down;
	volatile Button_Event 	buttonEvent_up;

	unsigned char 			displayMode;
	unsigned char 			displayMode_old;
	bool					isDisplayOff;

	volatile bool			BLEWasActive;
	volatile bool			USBWasActive;

	bool					ecg_enabled;
	bool					ppg_enabled;

	bool					bootComplete;

	uint16_t				last_good_hr;
	uint16_t 				instant_hr;
	uint16_t 				instant_hr_conf;
	uint8_t 				instant_hr_activityClass;
	float					instant_temp_celsius;

	char 					m_mac_addr_[6];

	MAX20303*				m_max20303_;



protected:

private:



	//Ticker 		m_watchInterface_ticker_;

	InterruptIn btnUp;
	InterruptIn btnDown;
	DigitalIn   btnPower;
	DigitalOut 	dispCS;
	PinName		dispEXTCOM;
	DigitalOut  dispDISP;

	PwmOut		DisplayPWM;

	Timer		interfaceTimer;

	volatile int	buttonTimer;

	void		isr_buttonup();
	void		isr_buttondown();

	bool		display_BLEMode_Active;
	bool		display_USBMode_Active;

	silabs::LS013B7DH03 display;

	unsigned char ppg_lcd_count; //a variable used to print "MEASURING" while the ppg settling

	static  bool 			refreshed;

	static const uint16_t kHeartRateUpperLimit = 240;
	static const uint16_t kHeartRateLowerLimit = 40;
	static const uint16_t ConfThresLevelRest = 50;
	static const uint16_t ConfThresLevelOther = 10;


};


#endif