mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-25 20:26:41 +00:00
Fix touch resolution for Sunton 8048S043C
This commit is contained in:
parent
de91d0d610
commit
ed9ece22a4
116
src/drv/touch/touch_driver_gt911.cpp
Normal file
116
src/drv/touch/touch_driver_gt911.cpp
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
/* MIT License - Copyright (c) 2019-2023 Francis Van Roie
|
||||||
|
For full license information read the LICENSE file in the project folder */
|
||||||
|
|
||||||
|
#if defined(ARDUINO) && (TOUCH_DRIVER == 0x0911)
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include "ArduinoLog.h"
|
||||||
|
#include "hasp_conf.h"
|
||||||
|
#include "touch_driver_gt911.h"
|
||||||
|
|
||||||
|
#include <Wire.h>
|
||||||
|
#include "Goodix.h"
|
||||||
|
|
||||||
|
#include "touch_driver.h" // base class
|
||||||
|
#include "touch_helper.h" // i2c scanner
|
||||||
|
|
||||||
|
#include "../../hasp/hasp.h" // for hasp_sleep_state
|
||||||
|
extern uint8_t hasp_sleep_state;
|
||||||
|
|
||||||
|
static Goodix touch = Goodix();
|
||||||
|
// static int8_t GT911_num_touches;
|
||||||
|
// static GTPoint* GT911_points;
|
||||||
|
|
||||||
|
// Store touch points into global variable
|
||||||
|
IRAM_ATTR void GT911_setXY(int8_t contacts, GTPoint* points)
|
||||||
|
{
|
||||||
|
// GT911_num_touches = contacts;
|
||||||
|
// GT911_points = points;
|
||||||
|
|
||||||
|
// LOG_VERBOSE(TAG_GUI, F("Contacts: %d"), contacts);
|
||||||
|
// for(int i = 0; i < contacts; i++) {
|
||||||
|
// LOG_VERBOSE(TAG_GUI, F("C%d: #%d %d,%d s:%d"), i, points[i].trackId, points[i].x, points[i].y,
|
||||||
|
// points[i].area); yield();
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
// IRAM_ATTR bool touch_read(lv_indev_drv_t* indev_driver, lv_indev_data_t* data)
|
||||||
|
// {
|
||||||
|
// // LOG_VERBOSE(TAG_GUI, F("Contacts: %d"), GT911_num_touches);
|
||||||
|
// static GTPoint points[5];
|
||||||
|
|
||||||
|
// if(touch.readInput((uint8_t*)&points) > 0) {
|
||||||
|
|
||||||
|
// if(hasp_sleep_state != HASP_SLEEP_OFF) hasp_update_sleep_state(); // update Idle
|
||||||
|
|
||||||
|
// data->point.x = points[0].x;
|
||||||
|
// data->point.y = points[0].y;
|
||||||
|
// data->state = LV_INDEV_STATE_PR;
|
||||||
|
|
||||||
|
// } else {
|
||||||
|
// data->state = LV_INDEV_STATE_REL;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// touch.loop(); // reset IRQ
|
||||||
|
|
||||||
|
// /*Return `false` because we are not buffering and no more data to read*/
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
|
||||||
|
namespace dev {
|
||||||
|
|
||||||
|
IRAM_ATTR bool TouchGt911::read(lv_indev_drv_t* indev_driver, lv_indev_data_t* data)
|
||||||
|
{
|
||||||
|
// LOG_VERBOSE(TAG_GUI, F("Contacts: %d"), GT911_num_touches);
|
||||||
|
static GTPoint points[5];
|
||||||
|
|
||||||
|
if(touch.readInput((uint8_t*)&points) > 0) {
|
||||||
|
|
||||||
|
if(hasp_sleep_state != HASP_SLEEP_OFF) hasp_update_sleep_state(); // update Idle
|
||||||
|
|
||||||
|
#ifdef TOUCH_WIDTH
|
||||||
|
data->point.x = map(points[0].x, 0, TOUCH_WIDTH - 1, 0, TFT_WIDTH - 1);
|
||||||
|
#else
|
||||||
|
data->point.x = points[0].x;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef TOUCH_HEIGHT
|
||||||
|
data->point.y = map(points[0].y, 0, TOUCH_HEIGHT - 1, 0, TFT_HEIGHT - 1);
|
||||||
|
#else
|
||||||
|
data->point.y = points[0].y;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
data->state = LV_INDEV_STATE_PR;
|
||||||
|
hasp_set_sleep_offset(0); // Reset the offset
|
||||||
|
|
||||||
|
} else {
|
||||||
|
data->state = LV_INDEV_STATE_REL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// touch.loop(); // reset IRQ (now in readInput)
|
||||||
|
|
||||||
|
/*Return `false` because we are not buffering and no more data to read*/
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TouchGt911::init(int w, int h)
|
||||||
|
{
|
||||||
|
Wire.begin(TOUCH_SDA, TOUCH_SCL, (uint32_t)I2C_TOUCH_FREQUENCY);
|
||||||
|
touch.setHandler(GT911_setXY);
|
||||||
|
|
||||||
|
if(touch.begin(TOUCH_IRQ, TOUCH_RST, I2C_TOUCH_ADDRESS)) {
|
||||||
|
GTInfo* info = touch.readInfo();
|
||||||
|
LOG_INFO(TAG_DRVR, "GT911 %s (%dx%d)", D_SERVICE_STARTED, info->xResolution, info->yResolution);
|
||||||
|
// uint8_t len = touch.fwResolution(480, 272);
|
||||||
|
} else {
|
||||||
|
LOG_WARNING(TAG_DRVR, "GT911 %s", D_SERVICE_START_FAILED);
|
||||||
|
}
|
||||||
|
|
||||||
|
Wire.begin(TOUCH_SDA, TOUCH_SCL, (uint32_t)I2C_TOUCH_FREQUENCY);
|
||||||
|
touch_scan(Wire); // The address could change during begin, so scan afterwards
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace dev
|
||||||
|
|
||||||
|
dev::TouchGt911 haspTouch;
|
||||||
|
|
||||||
|
#endif // ARDUINO
|
@ -5,112 +5,15 @@
|
|||||||
#define HASP_GT911_TOUCH_DRIVER_H
|
#define HASP_GT911_TOUCH_DRIVER_H
|
||||||
|
|
||||||
#ifdef ARDUINO
|
#ifdef ARDUINO
|
||||||
#include <Arduino.h>
|
#include "lvgl.h"
|
||||||
#include "ArduinoLog.h"
|
#include "touch_driver.h"
|
||||||
#include "hasp_conf.h"
|
|
||||||
|
|
||||||
#include <Wire.h>
|
|
||||||
#include "Goodix.h"
|
|
||||||
|
|
||||||
#include "touch_driver.h" // base class
|
|
||||||
#include "touch_helper.h" // i2c scanner
|
|
||||||
|
|
||||||
#include "../../hasp/hasp.h" // for hasp_sleep_state
|
|
||||||
extern uint8_t hasp_sleep_state;
|
|
||||||
|
|
||||||
static Goodix touch = Goodix();
|
|
||||||
// static int8_t GT911_num_touches;
|
|
||||||
// static GTPoint* GT911_points;
|
|
||||||
|
|
||||||
// Store touch points into global variable
|
|
||||||
IRAM_ATTR void GT911_setXY(int8_t contacts, GTPoint* points)
|
|
||||||
{
|
|
||||||
// GT911_num_touches = contacts;
|
|
||||||
// GT911_points = points;
|
|
||||||
|
|
||||||
// LOG_VERBOSE(TAG_GUI, F("Contacts: %d"), contacts);
|
|
||||||
// for(int i = 0; i < contacts; i++) {
|
|
||||||
// LOG_VERBOSE(TAG_GUI, F("C%d: #%d %d,%d s:%d"), i, points[i].trackId, points[i].x, points[i].y,
|
|
||||||
// points[i].area); yield();
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
// IRAM_ATTR bool touch_read(lv_indev_drv_t* indev_driver, lv_indev_data_t* data)
|
|
||||||
// {
|
|
||||||
// // LOG_VERBOSE(TAG_GUI, F("Contacts: %d"), GT911_num_touches);
|
|
||||||
// static GTPoint points[5];
|
|
||||||
|
|
||||||
// if(touch.readInput((uint8_t*)&points) > 0) {
|
|
||||||
|
|
||||||
// if(hasp_sleep_state != HASP_SLEEP_OFF) hasp_update_sleep_state(); // update Idle
|
|
||||||
|
|
||||||
// data->point.x = points[0].x;
|
|
||||||
// data->point.y = points[0].y;
|
|
||||||
// data->state = LV_INDEV_STATE_PR;
|
|
||||||
|
|
||||||
// } else {
|
|
||||||
// data->state = LV_INDEV_STATE_REL;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// touch.loop(); // reset IRQ
|
|
||||||
|
|
||||||
// /*Return `false` because we are not buffering and no more data to read*/
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
namespace dev {
|
namespace dev {
|
||||||
|
|
||||||
class TouchGt911 : public BaseTouch {
|
class TouchGt911 : public BaseTouch {
|
||||||
public:
|
public:
|
||||||
IRAM_ATTR bool read(lv_indev_drv_t* indev_driver, lv_indev_data_t* data)
|
IRAM_ATTR bool read(lv_indev_drv_t* indev_driver, lv_indev_data_t* data);
|
||||||
{
|
void init(int w, int h);
|
||||||
// LOG_VERBOSE(TAG_GUI, F("Contacts: %d"), GT911_num_touches);
|
|
||||||
static GTPoint points[5];
|
|
||||||
|
|
||||||
if(touch.readInput((uint8_t*)&points) > 0) {
|
|
||||||
|
|
||||||
if(hasp_sleep_state != HASP_SLEEP_OFF) hasp_update_sleep_state(); // update Idle
|
|
||||||
|
|
||||||
#ifdef TOUCH_WIDTH
|
|
||||||
data->point.x = map(points[0].x, 0, TOUCH_WIDTH - 1, 0, TFT_WIDTH - 1);
|
|
||||||
#else
|
|
||||||
data->point.x = points[0].x;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef TOUCH_HEIGHT
|
|
||||||
data->point.y = map(points[0].y, 0, TOUCH_HEIGHT - 1, 0, TFT_HEIGHT - 1);
|
|
||||||
#else
|
|
||||||
data->point.y = points[0].y;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
data->state = LV_INDEV_STATE_PR;
|
|
||||||
hasp_set_sleep_offset(0); // Reset the offset
|
|
||||||
|
|
||||||
} else {
|
|
||||||
data->state = LV_INDEV_STATE_REL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// touch.loop(); // reset IRQ (now in readInput)
|
|
||||||
|
|
||||||
/*Return `false` because we are not buffering and no more data to read*/
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void init(int w, int h)
|
|
||||||
{
|
|
||||||
Wire.begin(TOUCH_SDA, TOUCH_SCL, (uint32_t)I2C_TOUCH_FREQUENCY);
|
|
||||||
touch.setHandler(GT911_setXY);
|
|
||||||
|
|
||||||
if(touch.begin(TOUCH_IRQ, TOUCH_RST, I2C_TOUCH_ADDRESS)) {
|
|
||||||
LOG_INFO(TAG_DRVR, F("GT911 " D_SERVICE_STARTED));
|
|
||||||
} else {
|
|
||||||
LOG_WARNING(TAG_DRVR, F("GT911 " D_SERVICE_START_FAILED));
|
|
||||||
}
|
|
||||||
|
|
||||||
Wire.begin(TOUCH_SDA, TOUCH_SCL, (uint32_t)I2C_TOUCH_FREQUENCY);
|
|
||||||
touch_scan(Wire); // The address could change during begin, so scan afterwards
|
|
||||||
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace dev
|
} // namespace dev
|
||||||
|
@ -141,8 +141,8 @@ build_flags =
|
|||||||
-D TFT_PREFER_SPEED=14000000
|
-D TFT_PREFER_SPEED=14000000
|
||||||
-D TFT_AUTO_FLUSH=1
|
-D TFT_AUTO_FLUSH=1
|
||||||
; Touch Setttings
|
; Touch Setttings
|
||||||
;-D TOUCH_WIDTH=480
|
-D TOUCH_WIDTH=480
|
||||||
;-D TOUCH_HEIGHT=272
|
-D TOUCH_HEIGHT=272
|
||||||
-D TOUCH_DRIVER=0x911
|
-D TOUCH_DRIVER=0x911
|
||||||
-D TOUCH_SCL=20
|
-D TOUCH_SCL=20
|
||||||
-D TOUCH_SDA=19
|
-D TOUCH_SDA=19
|
||||||
|
Loading…
x
Reference in New Issue
Block a user