The following community resources provide excellent starting points for writing custom drivers:
int X = ( (regs[0x8012] & 0x0F) << 8 ) | regs[0x8011]; int Y = ( (regs[0x8014] & 0x0F) << 8 ) | regs[0x8013];
This register is used to trigger specific device states. Common commands include: 0x00 : Read coordinate status. 0x05 : Enter to save power. 0x06/0x07 : Enter/Exit Charge mode for enhanced sensitivity. Configuration Registers (0x8047+) gt911 register map
You forgot to write 0x00 back to 0x814E at the end of your read function.
This register is used to send operational commands to the GT911. Common commands include: Read coordinates status. 0x05: Screen off mode. 0x06/0x07 : Enter/Exit Charge mode for enhanced sensitivity
sometimes used for firmware/product ID; implementations vary — read product ID to confirm.
The byte written to memory address 0x4100 shifts the operational state of the GT911 power management unit and digital signal processor: Common commands include: Read coordinates status
By adjusting the "Large Area Touch" thresholds in the configuration block, one can program the GT911 to ignore a resting palm while still tracking a fingertip.