Richard Parker / EALCD
Committer:
richardparker
Date:
Sun Mar 28 20:15:15 2010 +0000
Revision:
2:2b860e764545
Parent:
1:f04bcaea1d60

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
richardparker 0:839ecbf5cb2a 1 // Copyright 2010 Richard Parker
richardparker 0:839ecbf5cb2a 2
richardparker 0:839ecbf5cb2a 3 #ifndef MBED_EATOUCH_H
richardparker 0:839ecbf5cb2a 4 #define MBED_EATOUCH_H
richardparker 0:839ecbf5cb2a 5
richardparker 0:839ecbf5cb2a 6 #include "mbed.h"
richardparker 0:839ecbf5cb2a 7
richardparker 0:839ecbf5cb2a 8 class EALCD;
richardparker 0:839ecbf5cb2a 9
richardparker 0:839ecbf5cb2a 10 /**
richardparker 0:839ecbf5cb2a 11 * Class to handle the touch screen on the LCD board.
richardparker 0:839ecbf5cb2a 12 * @author Richard Parker
richardparker 0:839ecbf5cb2a 13 */
richardparker 0:839ecbf5cb2a 14 class EATouch
richardparker 0:839ecbf5cb2a 15 {
richardparker 0:839ecbf5cb2a 16 public:
richardparker 0:839ecbf5cb2a 17 struct matrix {
richardparker 0:839ecbf5cb2a 18 short xOffset;
richardparker 0:839ecbf5cb2a 19 float xScale;
richardparker 0:839ecbf5cb2a 20 short yOffset;
richardparker 0:839ecbf5cb2a 21 float yScale;
richardparker 0:839ecbf5cb2a 22 };
richardparker 0:839ecbf5cb2a 23
richardparker 0:839ecbf5cb2a 24 EATouch(EALCD& lcd);
richardparker 0:839ecbf5cb2a 25
richardparker 0:839ecbf5cb2a 26 ~EATouch();
richardparker 0:839ecbf5cb2a 27
richardparker 0:839ecbf5cb2a 28 /**
richardparker 0:839ecbf5cb2a 29 * Start the calibration routine.
richardparker 0:839ecbf5cb2a 30 * Calibration is a 3 point process to set up internal conversion measurements.
richardparker 0:839ecbf5cb2a 31 * @return bool The status as to whether calibration was successful or whether timed
richardparker 0:839ecbf5cb2a 32 * out etc.
richardparker 0:839ecbf5cb2a 33 */
richardparker 0:839ecbf5cb2a 34 bool calibrate();
richardparker 0:839ecbf5cb2a 35
richardparker 0:839ecbf5cb2a 36 /**
richardparker 0:839ecbf5cb2a 37 * Set the threshold value to register a press after.
richardparker 0:839ecbf5cb2a 38 * @param threshold The value over which the value read is considered a press.
richardparker 0:839ecbf5cb2a 39 */
richardparker 0:839ecbf5cb2a 40 inline void setThreshold(unsigned short threshold) { _threshold = threshold; }
richardparker 0:839ecbf5cb2a 41
richardparker 0:839ecbf5cb2a 42
richardparker 0:839ecbf5cb2a 43 inline unsigned short threshold() { return _threshold; }
richardparker 0:839ecbf5cb2a 44
richardparker 0:839ecbf5cb2a 45 /**
richardparker 0:839ecbf5cb2a 46 * Check for a press.
richardparker 0:839ecbf5cb2a 47 * @param x The x value of the touch in pixels (converted using calibration settings).
richardparker 0:839ecbf5cb2a 48 * @param y The y value of the touch in pixels (converted using calibration settings).
richardparker 0:839ecbf5cb2a 49 * @param pressed Boolean describing if a touch is detected. If pressed is false then x
richardparker 0:839ecbf5cb2a 50 * and y are undefined.
richardparker 0:839ecbf5cb2a 51 */
richardparker 1:f04bcaea1d60 52 void touch(short& x, short& y, bool& pressed);
richardparker 2:2b860e764545 53
richardparker 2:2b860e764545 54 bool save();
richardparker 2:2b860e764545 55
richardparker 2:2b860e764545 56 bool load();
richardparker 0:839ecbf5cb2a 57
richardparker 0:839ecbf5cb2a 58 private:
richardparker 0:839ecbf5cb2a 59 EALCD& _lcd;
richardparker 0:839ecbf5cb2a 60
richardparker 0:839ecbf5cb2a 61 EATouch::matrix _cal_matrix;
richardparker 0:839ecbf5cb2a 62
richardparker 2:2b860e764545 63 void _raw(short& x, short& y, bool& pressed);
richardparker 2:2b860e764545 64
richardparker 0:839ecbf5cb2a 65 /**
richardparker 0:839ecbf5cb2a 66 * Value to hold the threshold which is used to decided if pressed or not.
richardparker 0:839ecbf5cb2a 67 */
richardparker 0:839ecbf5cb2a 68 unsigned int _threshold;
richardparker 2:2b860e764545 69
richardparker 0:839ecbf5cb2a 70 /**
richardparker 0:839ecbf5cb2a 71 * Take in x and y values from touch panel and convert to pixel position.
richardparker 0:839ecbf5cb2a 72 * Uses the calibration values taht are set using the calibrate() function.
richardparker 0:839ecbf5cb2a 73 * @param iX Input x value.
richardparker 0:839ecbf5cb2a 74 * @param iY Input y value.
richardparker 0:839ecbf5cb2a 75 * @param oX Output x value.
richardparker 0:839ecbf5cb2a 76 * @param oY Output y value.
richardparker 0:839ecbf5cb2a 77 */
richardparker 1:f04bcaea1d60 78 void _convert( short iX,
richardparker 1:f04bcaea1d60 79 short iY,
richardparker 1:f04bcaea1d60 80 short& oX,
richardparker 1:f04bcaea1d60 81 short& oY);
richardparker 0:839ecbf5cb2a 82
richardparker 1:f04bcaea1d60 83 bool _captureCalibrationPoint( short iX,
richardparker 1:f04bcaea1d60 84 short iY,
richardparker 1:f04bcaea1d60 85 short& oX,
richardparker 1:f04bcaea1d60 86 short& oY);
richardparker 0:839ecbf5cb2a 87
richardparker 0:839ecbf5cb2a 88 };
richardparker 0:839ecbf5cb2a 89
richardparker 0:839ecbf5cb2a 90 #endif