#include void ESPMegaDisplay::recieveSerialCommand(){ // Read the serial buffer if available while(displayAdapter->available()) { rx_buffer[rx_buffer_index] = displayAdapter->read(); rx_buffer_index++; // Check for overflow if(rx_buffer_index>=256){ rx_buffer_index = 0; } this-> processSerialCommand(); } } void ESPMegaDisplay::processSerialCommand(){ // Check if the rx buffer ended with stop bytes (0xFF 0xFF 0xFF) if(rx_buffer_index<3) return; if(rx_buffer[rx_buffer_index-1]!=0xFF) return; if(rx_buffer[rx_buffer_index-2]!=0xFF) return; if(rx_buffer[rx_buffer_index-3]!=0xFF) return; // The rx buffer ended with stop bytes // Check if the rx buffer is a push payload // The payload type is the first byte of the payload // 0x00 is invalid instruction // 0x01 is success // 0x65 is a touch event // 0x66 is a page report event if(rx_buffer[0]==0x65){ processTouchPayload(); } else if(rx_buffer[0]==0x66){ processPageReportPayload(); } } void ESPMegaDisplay::processTouchPayload() { if (rx_buffer_index != 4) return; // The second byte of the payload is the page number uint8_t page = rx_buffer[1]; // The third byte of the payload is the component id uint8_t component = rx_buffer[2]; // The fourth byte of the payload is the event uint8_t event = rx_buffer[3]; // 0x01 is press, 0x00 is release } void ESPMegaDisplay::processPageReportPayload() { // The second byte of the payload is the page number this->currentPage = rx_buffer[1]; if(pageChangeCallback!=NULL){ pageChangeCallback(this->currentPage); } rx_buffer_index = 0; }