serial_debugger/hardware/_controller/src/guislice/GUIslice_th.cpp

120 lines
2.8 KiB
C++

// Abstract touch handler (TH) class
// This is the abstract base class for creating specific touch handlers
// The touch handler performs the adaption in between the GUIslice framework and any touch driver
// The touch handler used is specified in the main program by calling gslc_InitTouchHandler(&touchHandler);
/// \file GUIslice_th.cpp
#include "GUIslice_th.h"
///////////////////////////////////////////////////
// Point x,y,z Class for usage in the touch handler
THPoint::THPoint(void) {
x = y = z = 0;
}
THPoint::THPoint(uint16_t x0, uint16_t y0, uint16_t z0) {
x = x0;
y = y0;
z = z0;
}
bool THPoint::operator==(THPoint p1) {
return ((p1.x == x) && (p1.y == y) && (p1.z == z));
}
bool THPoint::operator!=(THPoint p1) {
return ((p1.x != x) || (p1.y != y) || (p1.z != z));
}
///////////////////////////////////////////////////
// Abstract TouchHandler - you have to inherit this
void TouchHandler::setSize(uint16_t _disp_xSize, uint16_t _disp_ySize)
{
disp_xSize = _disp_xSize;
disp_ySize = _disp_ySize;
}
void TouchHandler::setCalibration(uint16_t _ts_xMin, uint16_t _ts_xMax, uint16_t _ts_yMin, uint16_t _ts_yMax)
{
ts_xMin = _ts_xMin;
ts_xMax = _ts_xMax;
ts_yMin = _ts_yMin;
ts_yMax = _ts_yMax;
}
void TouchHandler::setSwapFlip(bool _swapXY,bool _flipX,bool _flipY)
{
swapXY = _swapXY;
flipX = _flipX;
flipY = _flipY;
}
THPoint TouchHandler::scale(THPoint pIn)
{
THPoint pOut;
pOut.x = map(pIn.x, ts_xMin,ts_xMax, 0,disp_xSize);
pOut.y = map(pIn.y, ts_yMin,ts_yMax, 0,disp_ySize);
pOut.z = pIn.z;
pOut.x = constrain(pOut.x,0,disp_xSize-1);
pOut.y = constrain(pOut.y,0,disp_ySize-1);
pOut.z = constrain(pOut.z,0,4095);
if (swapXY)
{
uint16_t x = pOut.x;
pOut.x = pOut.y;
pOut.y = x;
}
if (flipX)
pOut.x = ( (!swapXY) ? disp_xSize-1 : disp_ySize-1 ) - pOut.x;
if (flipY)
pOut.y = ( (!swapXY) ? disp_ySize-1 : disp_xSize-1 ) - pOut.y;
//Serial.print("disp_xSize= ");Serial.println(disp_xSize);
return pOut;
}
// overwrite this with your code to add initialisation of the touch driver used
void TouchHandler::begin(void) {
return;
}
// overwrite this with your code to return the scaled touch coordinates
THPoint TouchHandler::getPoint(void) {
return THPoint();
}
/////////////////////////////////
// init and set the touch handler
// Pointer to touch handler used by GUIslice
TouchHandler *pTouchHandler = NULL; // NULL => no handler is available
// Init and set the touch hander
void gslc_InitTouchHandler(TouchHandler *pTH) {
//begin
pTH->begin();
//set the touch handler to be used by GUIslice_drv_...
pTouchHandler = pTH;
}
// Get the touch handler
TouchHandler* gslc_getTouchHandler(void)
{
return pTouchHandler;
}