2021-06-09 12:10:12 +02:00
|
|
|
//
|
|
|
|
// Library for controlling Electronic Assembly eDIPTFT displays
|
|
|
|
//
|
|
|
|
// Copyright (c) 2013 Stefan Gofferje. All rights reserved.
|
|
|
|
//
|
|
|
|
// This library is free software; you can redistribute it and/or
|
|
|
|
// modify it under the terms of the GNU Lesser General Public
|
|
|
|
// License as published by the Free Software Foundation; either
|
|
|
|
// version 2.1 of the License, or (at your option) any later
|
|
|
|
// version.
|
|
|
|
//
|
|
|
|
// This library is distributed in the hope that it will be
|
|
|
|
// useful, but WITHOUT ANY WARRANTY; without even the implied
|
|
|
|
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
|
|
// PURPOSE. See the GNU Lesser General Public License for more
|
|
|
|
// details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU Lesser General
|
|
|
|
// Public License along with this library; if not, write to the
|
|
|
|
// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
|
|
|
// Boston, MA 02110-1301 USA
|
|
|
|
//
|
|
|
|
|
|
|
|
#include "EDIPTFT.h"
|
|
|
|
#include "Arduino.h"
|
|
|
|
#define DEBUG false
|
|
|
|
|
2021-07-18 18:27:47 +02:00
|
|
|
EDIPTFT::EDIPTFT(boolean smallprotocol, boolean disconnected)
|
|
|
|
: _smallprotocol{smallprotocol}, disconnected{disconnected} {}
|
2021-06-09 12:10:12 +02:00
|
|
|
|
|
|
|
void EDIPTFT::begin(long baud) { SERIAL_DEV.begin(baud); }
|
|
|
|
|
|
|
|
void EDIPTFT::sendByte(char data) { SERIAL_DEV.write(data); }
|
|
|
|
|
|
|
|
char EDIPTFT::readByte() { return SERIAL_DEV.read(); }
|
|
|
|
|
|
|
|
void EDIPTFT::waitBytesAvailable() {
|
|
|
|
const uint32_t t_start = millis();
|
|
|
|
char loop = 0;
|
|
|
|
while (loop == 0) {
|
|
|
|
if (bytesAvailable() != 0) {
|
|
|
|
loop = 1;
|
|
|
|
}
|
|
|
|
if (t_start + 100 < millis()) {
|
|
|
|
// Serial.println("Error: waited to long!");
|
|
|
|
loop = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
char EDIPTFT::waitandreadByte() {
|
|
|
|
waitBytesAvailable();
|
|
|
|
char result = readByte();
|
|
|
|
return (result);
|
|
|
|
}
|
|
|
|
|
|
|
|
unsigned char EDIPTFT::bytesAvailable() {
|
|
|
|
return SERIAL_DEV.available();
|
|
|
|
//ÄNDERN
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::sendData(char* data, char len) {
|
2022-03-13 20:30:14 +01:00
|
|
|
|
2021-06-09 12:10:12 +02:00
|
|
|
/*for(int i=0; i < len; i++) {
|
|
|
|
Serial.print(data[i]);
|
|
|
|
}
|
|
|
|
Serial.print('\n');
|
|
|
|
Serial.println(len);*/
|
2022-03-13 20:30:14 +01:00
|
|
|
|
2021-06-09 12:10:12 +02:00
|
|
|
if (DEBUG) {
|
|
|
|
unsigned char i;
|
|
|
|
for (i = 0; i < len; i++) {
|
|
|
|
// Serial.print(byte(data[i]), HEX);
|
|
|
|
SERIAL_DEV.print(byte(data[i]), HEX);
|
|
|
|
SERIAL_DEV.print(" ");
|
|
|
|
}
|
|
|
|
SERIAL_DEV.println();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (_smallprotocol) {
|
|
|
|
sendSmall(data, len);
|
|
|
|
} else {
|
|
|
|
unsigned char i;
|
|
|
|
for (i = 0; i < len; i++) {
|
|
|
|
sendByte(data[i]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::sendSmall(char* data, char len) {
|
2021-07-18 18:27:47 +02:00
|
|
|
if (disconnected) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2021-06-09 12:10:12 +02:00
|
|
|
unsigned char i, bcc;
|
|
|
|
char ok = 0;
|
|
|
|
const uint32_t t_start = millis();
|
|
|
|
|
|
|
|
while (ok == 0) {
|
|
|
|
sendByte(0x11);
|
|
|
|
bcc = 0x11;
|
|
|
|
|
|
|
|
sendByte(len);
|
|
|
|
bcc = bcc + len;
|
|
|
|
|
|
|
|
for (i = 0; i < len; i++) {
|
|
|
|
sendByte(data[i]);
|
|
|
|
bcc = bcc + data[i];
|
|
|
|
}
|
|
|
|
sendByte(bcc);
|
|
|
|
waitBytesAvailable();
|
|
|
|
if (bytesAvailable() > 0) {
|
|
|
|
char x = readByte();
|
|
|
|
// Serial.print(uint16_t(x));
|
|
|
|
if (x == ACK)
|
|
|
|
ok = 1;
|
|
|
|
else {
|
|
|
|
ok = 0;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
delay(200);
|
|
|
|
ok = 0;
|
|
|
|
}
|
2021-07-18 18:27:47 +02:00
|
|
|
if (t_start + 1000 < millis()) {
|
|
|
|
ok = 1;
|
|
|
|
disconnected = true;
|
|
|
|
}
|
2021-06-09 12:10:12 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::sendSmallDC2(char* data, char len) {
|
|
|
|
unsigned char i, bcc;
|
|
|
|
char ok = 0;
|
|
|
|
|
|
|
|
while (ok == 0) {
|
|
|
|
|
|
|
|
sendByte(0x12);
|
|
|
|
bcc = 0x12;
|
|
|
|
|
|
|
|
for (i = 0; i < len; i++) {
|
|
|
|
sendByte(data[i]);
|
|
|
|
bcc = bcc + data[i];
|
|
|
|
}
|
|
|
|
sendByte(bcc);
|
|
|
|
waitBytesAvailable(); // delay(6); im 17er
|
|
|
|
if (bytesAvailable() > 0) {
|
|
|
|
if (readByte() == ACK)
|
|
|
|
ok = 1;
|
|
|
|
else
|
|
|
|
ok = 0;
|
|
|
|
} else {
|
|
|
|
delay(200);
|
|
|
|
ok = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::smallProtoSelect(char address) {
|
|
|
|
char command[] = {0x03, 'A', 'S', address};
|
|
|
|
sendSmallDC2(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::smallProtoDeselect(char address) {
|
|
|
|
char command[] = {0x03, 'A', 'D', address};
|
|
|
|
sendSmallDC2(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
unsigned char EDIPTFT::datainBuffer() {
|
|
|
|
unsigned char result;
|
|
|
|
char command[] = {0x01, 'I'};
|
|
|
|
sendSmallDC2(command, sizeof(command));
|
|
|
|
waitandreadByte();
|
|
|
|
waitandreadByte();
|
|
|
|
result = waitandreadByte();
|
|
|
|
waitandreadByte();
|
|
|
|
waitandreadByte();
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
int EDIPTFT::readBuffer(char* data) { // return void
|
|
|
|
unsigned char len, i; // char in 17er
|
|
|
|
char command[] = {0x01, 'S'};
|
|
|
|
sendSmallDC2(command, sizeof(command));
|
|
|
|
waitandreadByte();
|
|
|
|
len = waitandreadByte();
|
|
|
|
char result[len];
|
|
|
|
for (i = 0; i < len; i++) {
|
|
|
|
result[i] = waitandreadByte();
|
|
|
|
}
|
|
|
|
memcpy(data, result, len);
|
|
|
|
waitandreadByte();
|
|
|
|
return len; // zeile nicht vorhanden
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::clear() { // vgl 17er
|
|
|
|
this->deleteDisplay();
|
|
|
|
this->removeTouchArea(0, 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::deleteDisplay() {
|
|
|
|
char command[] = {27, 'D', 'L'};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::invert() {
|
|
|
|
char command[] = {27, 'D', 'I'};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::setDisplayColor(char fg, char bg) {
|
|
|
|
char command[] = {27, 'F', 'D', fg, bg};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::fillDisplayColor(char bg) {
|
|
|
|
char command[] = {27, 'D', 'F', bg};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::terminalOn(boolean on) {
|
|
|
|
if (on) {
|
|
|
|
char command[] = {27, 'T', 'E'};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
} else {
|
|
|
|
char command[] = {27, 'T', 'A'};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::loadImage(int x1, int y1, int nr) {
|
|
|
|
char command[] = {
|
|
|
|
27,
|
|
|
|
'U',
|
|
|
|
'I',
|
|
|
|
#if COORD_SIZE == 1
|
|
|
|
(char)x1,
|
|
|
|
(char)y1,
|
|
|
|
#else
|
|
|
|
lowByte(x1),
|
|
|
|
highByte(x1),
|
|
|
|
lowByte(y1),
|
|
|
|
highByte(y1),
|
|
|
|
#endif
|
|
|
|
nr
|
|
|
|
};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::cursorOn(boolean on) {
|
|
|
|
if (on) {
|
|
|
|
char command[] = {27, 'T', 'C', 1};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
} else {
|
|
|
|
char command[] = {27, 'T', 'C', 0};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::setCursor(char col, char row) {
|
|
|
|
char command[] = {27, 'T', 'P', col, row};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::displayLight(char no) {
|
|
|
|
char command[] = {27, 'Y', 'H', no};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::defineBargraph(char dir, char no, int x1, int y1, int x2, int y2,
|
|
|
|
byte sv, byte ev, char type, char mst) {
|
|
|
|
char command[] = {
|
|
|
|
27,
|
|
|
|
'B',
|
|
|
|
dir,
|
|
|
|
no,
|
|
|
|
#if COORD_SIZE == 1
|
|
|
|
x1,
|
|
|
|
y1,
|
|
|
|
x2,
|
|
|
|
y2,
|
|
|
|
#else
|
|
|
|
lowByte(x1),
|
|
|
|
highByte(x1),
|
|
|
|
lowByte(y1),
|
|
|
|
highByte(y1),
|
|
|
|
lowByte(x2),
|
|
|
|
highByte(x2),
|
|
|
|
lowByte(y2),
|
|
|
|
highByte(y2),
|
|
|
|
#endif
|
|
|
|
char(sv),
|
|
|
|
char(ev),
|
|
|
|
type,
|
|
|
|
mst
|
|
|
|
};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
// mst fehlt 17
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::updateBargraph(char no, char val) {
|
|
|
|
char command[] = {27, 'B', 'A', no, val};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::setBargraphColor(char no, char fg, char bg, char fr) {
|
|
|
|
char command[] = {27, 'F', 'B', no, fg, bg, fr};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::linkBargraphLight(char no) {
|
|
|
|
char command[] = {27, 'Y', 'B', no};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::makeBargraphTouch(char no) {
|
|
|
|
char command[] = {27, 'A', 'B', no};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::deleteBargraph(char no, char n1) {
|
|
|
|
char command[] = {27, 'B', 'D', no, n1};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::defineInstrument(char no, int x1, int y1, char image, char angle,
|
|
|
|
char sv, char ev) {
|
|
|
|
char command[] = {
|
|
|
|
27,
|
|
|
|
'I',
|
|
|
|
'P',
|
|
|
|
no,
|
|
|
|
#if COORD_SIZE == 1
|
|
|
|
x1,
|
|
|
|
y1,
|
|
|
|
#else
|
|
|
|
lowByte(x1),
|
|
|
|
highByte(x1),
|
|
|
|
lowByte(y1),
|
|
|
|
highByte(y1),
|
|
|
|
#endif
|
|
|
|
image,
|
|
|
|
angle,
|
|
|
|
sv,
|
|
|
|
ev
|
|
|
|
};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::updateInstrument(char no, char val) {
|
|
|
|
char command[] = {27, 'I', 'A', no, val};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::redrawInstrument(char no) {
|
|
|
|
char command[] = {27, 'I', 'N', no};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::deleteInstrument(char no, char n1, char n2) {
|
|
|
|
char command[] = {27, 'B', 'D', no, n1, n2};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::setLineColor(char fg, char bg) {
|
|
|
|
char command[] = {27, 'F', 'G', fg, bg};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::setLineThick(char x, char y) {
|
|
|
|
char command[] = {27, 'G', 'Z', x, y};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::setTextColor(char fg, char bg) {
|
|
|
|
char command[] = {27, 'F', 'Z', fg, bg};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::setTextFont(char font) {
|
|
|
|
char command[] = {27, 'Z', 'F', font};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::setTextSize(int xsize, int ysize) {
|
|
|
|
char command[] = {27, 'Z', 'Z', xsize, ysize};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::setTextAngle(char angle) {
|
|
|
|
// 0 = 0°, 1 = 90°, 2 = 180°, 3 = 270°
|
|
|
|
char command[] = {27, 'Z', 'W', angle};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::drawText(uint16_t x1, uint16_t y1, char justification,
|
|
|
|
const char* text) {
|
|
|
|
// nicht const 17//
|
|
|
|
byte len = strlen(text);
|
|
|
|
byte i;
|
|
|
|
char helper[3 + 4 + len + 1];
|
|
|
|
helper[0] = 27; // esc
|
|
|
|
helper[1] = 'Z';
|
|
|
|
helper[2] = justification;
|
|
|
|
helper[3] = x1 & 0xFF;
|
|
|
|
helper[4] = (x1 >> 8) & 0xFF;
|
|
|
|
helper[5] = y1 & 0xFF;
|
|
|
|
helper[6] = (y1 >> 8) & 0xFF;
|
|
|
|
for (i = 0; i <= len; i++) {
|
|
|
|
helper[i + 7] = text[i];
|
|
|
|
}
|
2022-03-13 20:30:14 +01:00
|
|
|
|
2021-06-09 12:10:12 +02:00
|
|
|
sendData(helper, sizeof(helper));
|
|
|
|
}
|
|
|
|
|
2022-03-13 18:17:41 +01:00
|
|
|
void EDIPTFT::drawTextInRect(int x1, int y1, int x2, int y2, uint8_t align,
|
|
|
|
const char* text) {
|
|
|
|
int len_text = strlen(text);
|
|
|
|
int len = 3 + 8 + 1 + len_text + 1;
|
|
|
|
char data[len] = {27, 'Z', 'B', lowByte(x1),
|
|
|
|
highByte(x1), lowByte(y1), highByte(y1), lowByte(x2),
|
|
|
|
highByte(x2), lowByte(y2), highByte(y2), align};
|
|
|
|
for (int i = 0; i < len_text; i++) {
|
|
|
|
data[3 + 8 + 1 + i] = text[i];
|
|
|
|
}
|
|
|
|
data[len - 1] = 0;
|
|
|
|
|
|
|
|
sendData(data, len);
|
|
|
|
}
|
|
|
|
|
2021-06-09 12:10:12 +02:00
|
|
|
void EDIPTFT::drawLine(int x1, int y1, int x2, int y2) {
|
|
|
|
char command[] = {
|
|
|
|
27,
|
|
|
|
'G',
|
|
|
|
'D',
|
|
|
|
#if COORD_SIZE == 1
|
|
|
|
x1,
|
|
|
|
y1,
|
|
|
|
x2,
|
|
|
|
y2
|
|
|
|
#else
|
|
|
|
lowByte(x1),
|
|
|
|
highByte(x1),
|
|
|
|
lowByte(y1),
|
|
|
|
highByte(y1),
|
|
|
|
lowByte(x2),
|
|
|
|
highByte(x2),
|
|
|
|
lowByte(y2),
|
|
|
|
highByte(y2)
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::drawRect(int x1, int y1, int x2, int y2) {
|
|
|
|
char command[] = {
|
|
|
|
27,
|
|
|
|
'G',
|
|
|
|
'R',
|
|
|
|
#if COORD_SIZE == 1
|
|
|
|
x1,
|
|
|
|
y1,
|
|
|
|
x2,
|
|
|
|
y2
|
|
|
|
#else
|
|
|
|
lowByte(x1),
|
|
|
|
highByte(x1),
|
|
|
|
lowByte(y1),
|
|
|
|
highByte(y1),
|
|
|
|
lowByte(x2),
|
|
|
|
highByte(x2),
|
|
|
|
lowByte(y2),
|
|
|
|
highByte(y2)
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::drawRectf(int x1, int y1, int x2, int y2, char color) {
|
|
|
|
char command[] = {
|
|
|
|
27,
|
|
|
|
'R',
|
|
|
|
'F',
|
|
|
|
#if COORD_SIZE == 1
|
|
|
|
x1,
|
|
|
|
y1,
|
|
|
|
x2,
|
|
|
|
y2,
|
|
|
|
#else
|
|
|
|
lowByte(x1),
|
|
|
|
highByte(x1),
|
|
|
|
lowByte(y1),
|
|
|
|
highByte(y1),
|
|
|
|
lowByte(x2),
|
|
|
|
highByte(x2),
|
|
|
|
lowByte(y2),
|
|
|
|
highByte(y2),
|
|
|
|
#endif
|
|
|
|
color
|
|
|
|
};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
2022-03-13 18:17:41 +01:00
|
|
|
void EDIPTFT::clearRect(int x1, int y1, int x2, int y2) {
|
|
|
|
Serial.print("Clearing ");
|
|
|
|
Serial.print(x1);
|
|
|
|
Serial.print(", ");
|
|
|
|
Serial.print(y1);
|
|
|
|
Serial.print(", ");
|
|
|
|
Serial.print(x2);
|
|
|
|
Serial.print(", ");
|
|
|
|
Serial.println(y2);
|
|
|
|
char command[] = {
|
|
|
|
27,
|
|
|
|
'R',
|
|
|
|
'L',
|
|
|
|
#if COORD_SIZE == 1
|
|
|
|
x1,
|
|
|
|
y1,
|
|
|
|
x2,
|
|
|
|
y2
|
|
|
|
#else
|
|
|
|
lowByte(x1),
|
|
|
|
highByte(x1),
|
|
|
|
lowByte(y1),
|
|
|
|
highByte(y1),
|
|
|
|
lowByte(x2),
|
|
|
|
highByte(x2),
|
|
|
|
lowByte(y2),
|
|
|
|
highByte(y2),
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
2021-06-09 12:10:12 +02:00
|
|
|
void EDIPTFT::defineTouchKey(int x1, int y1, int x2, int y2, char down, char up,
|
|
|
|
const char* text) { // text nicht const 17
|
|
|
|
byte len = strlen(text);
|
|
|
|
byte i;
|
|
|
|
char helper[len + 6 + 4 * COORD_SIZE]; // len+13 17
|
|
|
|
char command[] = {
|
|
|
|
27,
|
|
|
|
'A',
|
|
|
|
'T',
|
|
|
|
#if COORD_SIZE == 1
|
|
|
|
x1,
|
|
|
|
y1,
|
|
|
|
x2,
|
|
|
|
y2,
|
|
|
|
#else
|
|
|
|
lowByte(x1),
|
|
|
|
highByte(x1),
|
|
|
|
lowByte(y1),
|
|
|
|
highByte(y1),
|
|
|
|
lowByte(x2),
|
|
|
|
highByte(x2),
|
|
|
|
lowByte(y2),
|
|
|
|
highByte(y2),
|
|
|
|
#endif
|
|
|
|
down,
|
|
|
|
up
|
|
|
|
};
|
|
|
|
for (i = 0; i < (5 + 4 * COORD_SIZE); i++)
|
|
|
|
helper[i] = command[i]; // i<=12 17
|
|
|
|
for (i = 0; i <= len + 1; i++)
|
|
|
|
helper[i + 5 + 4 * COORD_SIZE] = text[i]; // i<=len 17
|
|
|
|
sendData(helper, sizeof(helper)); // size len+14 17
|
|
|
|
}
|
2022-03-13 20:30:14 +01:00
|
|
|
|
2021-06-09 12:10:12 +02:00
|
|
|
void EDIPTFT::defineTouchSwitch(int x1, int y1, int x2, int y2, char down,
|
|
|
|
char up, const char* text) { // const nicht 17
|
|
|
|
byte len = strlen(text);
|
|
|
|
byte i;
|
|
|
|
char helper[len + 6 + 4 * COORD_SIZE]; // len+13 17
|
|
|
|
char command[] = {
|
|
|
|
27,
|
|
|
|
'A',
|
|
|
|
'K',
|
|
|
|
#if COORD_SIZE == 1
|
|
|
|
x1,
|
|
|
|
y1,
|
|
|
|
x2,
|
|
|
|
y2,
|
|
|
|
#else
|
|
|
|
lowByte(x1),
|
|
|
|
highByte(x1),
|
|
|
|
lowByte(y1),
|
|
|
|
highByte(y1),
|
|
|
|
lowByte(x2),
|
|
|
|
highByte(x2),
|
|
|
|
lowByte(y2),
|
|
|
|
highByte(y2),
|
|
|
|
#endif
|
|
|
|
down,
|
|
|
|
up
|
|
|
|
};
|
|
|
|
for (i = 0; i < 5 + 4 * COORD_SIZE; i++)
|
|
|
|
helper[i] = command[i];
|
|
|
|
for (i = 0; i <= len; i++)
|
|
|
|
helper[i + 5 + 4 * COORD_SIZE] = text[i];
|
|
|
|
sendData(helper, sizeof(helper)); // size len+14
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::defineTouchSwitch(int x, int y, int img, char downcode,
|
|
|
|
char upcode, const char* text) {
|
|
|
|
byte len = strlen(text);
|
|
|
|
byte i;
|
|
|
|
byte n = 6 + 2 * COORD_SIZE;
|
|
|
|
char helper[len + n + 1];
|
|
|
|
char command[] = {
|
|
|
|
27,
|
|
|
|
'A',
|
|
|
|
'J',
|
|
|
|
#if COORD_SIZE == 1
|
|
|
|
x,
|
|
|
|
y,
|
|
|
|
#else
|
|
|
|
lowByte(x),
|
|
|
|
highByte(x),
|
|
|
|
lowByte(y),
|
|
|
|
highByte(y),
|
|
|
|
#endif
|
|
|
|
img,
|
|
|
|
downcode,
|
|
|
|
upcode
|
|
|
|
};
|
|
|
|
for (i = 0; i < n; i++)
|
|
|
|
helper[i] = command[i];
|
|
|
|
for (i = 0; i <= len; i++)
|
|
|
|
helper[i + n] = text[i];
|
|
|
|
sendData(helper, sizeof(helper));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::setTouchSwitch(char code, char value) {
|
|
|
|
char command[] = {27, 'A', 'P', code, value};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::setTouchkeyColors(char n1, char n2, char n3, char s1, char s2,
|
|
|
|
char s3) {
|
|
|
|
char command[] = {27, 'F', 'E', n1, n2, n3, s1, s2, s3};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::setTouchkeyFont(char font) {
|
|
|
|
char command[] = {27, 'A', 'F', font};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::setTouchkeyLabelColors(char nf, char sf) {
|
|
|
|
char command[] = {27, 'F', 'A', nf, sf};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::setTouchGroup(char group) {
|
|
|
|
char command[] = {27, 'A', 'R', group};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::removeTouchArea(char code, char n1) {
|
|
|
|
char command[] = {27, 'A', 'L', code, n1};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::callMacro(uint nr) {
|
|
|
|
char command[] = {27, 'M', 'N', nr};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::callTouchMacro(uint nr) {
|
|
|
|
char command[] = {27, 'M', 'T', nr};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::callMenuMacro(uint nr) {
|
|
|
|
char command[] = {27, 'M', 'M', nr};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::defineTouchMenu(int x1, int y1, int x2, int y2, char downcode,
|
|
|
|
char upcode, char mnucode, const char* text) {
|
|
|
|
byte len = strlen(text);
|
|
|
|
byte n = 6 + 4 * COORD_SIZE;
|
|
|
|
char helper[len + n + 1];
|
2022-03-13 20:30:14 +01:00
|
|
|
|
2021-06-09 12:10:12 +02:00
|
|
|
char command[] = {
|
|
|
|
27,
|
|
|
|
'A',
|
|
|
|
'M',
|
|
|
|
#if COORD_SIZE == 1
|
|
|
|
x1,
|
|
|
|
y1,
|
|
|
|
x2,
|
|
|
|
y2,
|
|
|
|
#else
|
|
|
|
lowByte(x1),
|
|
|
|
highByte(x1),
|
|
|
|
lowByte(y1),
|
|
|
|
highByte(y1),
|
|
|
|
lowByte(x2),
|
|
|
|
highByte(x2),
|
|
|
|
lowByte(y2),
|
|
|
|
highByte(y2),
|
|
|
|
#endif
|
|
|
|
downcode,
|
|
|
|
upcode,
|
|
|
|
mnucode
|
|
|
|
};
|
|
|
|
for (int i = 0; i < n; i++)
|
|
|
|
helper[i] = command[i];
|
|
|
|
for (int i = 0; i <= len; i++)
|
|
|
|
helper[i + n] = text[i];
|
|
|
|
sendData(helper, sizeof(helper));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::openTouchMenu() {
|
|
|
|
char command[] = {27, 'N', 'T', 2};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::setMenuFont(char font) {
|
|
|
|
char command[] = {27, 'N', 'F', font};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|
|
|
|
|
|
|
|
void EDIPTFT::setTouchMenuAutomation(bool val) {
|
|
|
|
char n1 = val ? 1 : 0;
|
|
|
|
char command[] = {27, 'N', 'T', n1};
|
|
|
|
sendData(command, sizeof(command));
|
|
|
|
}
|