Repository for import to local machine
Dependencies: DMBasicGUI DMSupport
Diff: GasCalibrationPageHandler.h
- Revision:
- 1:a5258871b33d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GasCalibrationPageHandler.h Thu Jul 20 08:42:29 2017 +0000 @@ -0,0 +1,87 @@ +#ifndef GASCALIBRATIONPAGEHANDLER_H +#define GASCALIBRATIONPAGEHANDLER_H + +#include "mbed.h" +#include "DMBoard.h" + +#include "USBHostGC.h" + +#include "GuiLib.h" + +/* + A struct to relate the index of an easyGUI touch area on the 'GasCalibrationPage', + with the easyGUI variable and our own internal variable to which it corresponds +*/ +typedef struct structGasCalibrationEasyGUITouchAreaAndVariables { + int touchAreaIndex; + GuiConst_TEXT * easyGUIVariablePtr; + unsigned int maxValue; + GuiConst_INTCOLOR * easyGUIBackgroundColorVariablePtr; + char variableName[41]; +} GasCalibrationEasyGUITouchAreaAndVariables; + + +/* + This class handles user interaction with the easyGUI "GasCalibrationPage", + as well as storing the values in QSPI memory. + + Note that this class is a singleton - we do not need or want there to be more than one instance of it + (we do not want multiple values for the carrier gas selection, etc, and nor will we show + more than one easyGUI 'GasCalibrationPage' to the user at the same time). +*/ +class GasCalibrationPageHandler { +public: + /** + * Static method to create (if necessary) and retrieve the single GasCalibrationPageHandler instance + */ + static GasCalibrationPageHandler * GetInstance(USBDeviceConnected* newUsbDevice, USBHostGC* newUsbHostGC); + + bool TouchAreaIsOnCalibrationPage(int touchAreaIndex); + + bool DealWithTouch(int touchAreaIndex); + + void DisplayingEasyGUIPage(bool updateEasyGUIVariables); + +private: + enum {CARRIER_GAS_HELIUM = 0, CARRIER_GAS_HYDROGEN = 1, CARRIER_GAS_NITROGEN = 2}; + + static GasCalibrationPageHandler * theGasCalibrationPageHandlerInstance; + + static const GuiConst_INTCOLOR inactiveFieldBackgroundColour; + static const GuiConst_INTCOLOR activeFieldBackgroundColour; + + USBDeviceConnected* usbDevice; + USBHostGC* usbHostGC; + + int indexOfValueCurrentlyBeingEdited; + + // singleton class -> constructor is private + GasCalibrationPageHandler(USBDeviceConnected* newUsbDevice, USBHostGC* newUsbHostGC); + ~GasCalibrationPageHandler(); + + void SaveCarrierGasSelectionToQSPISettings(void); + void ReadCarrierGasSelectionFromQSPISettings(void); + + void UpdateEasyGUIPage(void); + + void GetCurrentCalibrationFromGC(void); + void SetCurrentCalibrationInGC(void); + + bool GetCalibrationDACAndFlowValuesFromGC(int carrierGasSelection, int valueIndex, char *bufferForDACValue, char *bufferForFlowValue); + bool SetCalibrationDACAndFlowValuesInGC(int carrierGasSelection, int valueIndex, char *bufferForDACValue, char *bufferForFlowValue); + + bool ConstructGasCalibrationGCCommand(bool wantSetCommand, int carrierGasSelection, int valueIndex, bool wantDACCommand, char *commandBuffer); + void CopyBufferDigitsToCommand(char *commandBuffer, char *digitsBuffer); + + enum { COUNT_OF_VARIABLES_FOR_TOUCH_AREAS = 12 }; + GasCalibrationEasyGUITouchAreaAndVariables variablesForTouchArea[COUNT_OF_VARIABLES_FOR_TOUCH_AREAS]; + + void SetAllFieldBackgroundColoursToInactive(void); + + int GetIndexOfValueToEditForTouchArea(int touchAreaIndex); + + void CopyCommandResponseToBufferWithoutLeadingZeroes(char *commandResponse, char *buffer); +}; + +#endif // GASCALIBRATIONPAGEHANDLER_H +