GT-CP Communication on Linux
Introduction
This describes USB communication methods for the GT-CP modules using Linux:
USB Information
GT800X480A-C903PA/GT480X272A-C903PA
- Vendor ID: 0x0EDA
- Product ID: 0x1200
- EP IN Address: 0x81
- EP OUT Address: 0x02
- Device and Interface Class: 0xFF (vendor-specific)
Endpoint | Type | Maximum Packet Size |
---|---|---|
Endpoint 0 | Control | 64 bytes |
Endpoint 1 | Bulk IN | Full speed: 64 bytes, High speed: 512 bytes |
Endpoint 2 | Bulk OUT | Full speed: 64 bytes, High speed: 512 bytes |
This device has a single configuration with a single interface and two endpoints for data transfer.
libusb.h – USB Communication Library
For USB communication, we have used libusb.h. This is an open source library that lets users communicate with generic USB devices from user-space.
Website: https://libusb.info/
Installation: sudo apt-get install libusb-1.0-0-dev
This library can be used to open the GT-CP device and perform bulk transfers to send display commands and read responses back from the module.
The following functions are used to establish a test connection with a GT-CP module:
- libusb_init(NULL);
- This function initializes libusb with the default context.
- libusb_open_device_with_vid_pid(NULL, 0x0EDA, 0x1200);
- This function opens a device with a specific vendor and product ID. This example will establish a connection with a GT-CP module with the default context.
- This function returns the libusb_device_handle, which, for this example, we will call devh.
- libusb_claim_interface(devh, 0);
- This function claims the desired interface to communicate with. When communicating with the GT-CP module, we need to claim interface 0.
The libusb_bulk_transfer() function is used to write and read data to and from the GT-CP module using libusb.h:
- To write a byte of data, use the module’s EP OUT address (0x02).
- libusb_bulk_transfer(devh, 0x02, data_byte, 1, &actual_length, timeout);
- timeout = 0
- libusb_bulk_transfer(devh, 0x02, data_byte, 1, &actual_length, timeout);
- To read a byte of data, use the module’s EP IN address (0x81).
- libusb_bulk_transfer(devh, 0x81, read_data_array, number_bytes_to_read, &actual_length, timeout);
- timeout = 1000
- libusb_bulk_transfer(devh, 0x81, read_data_array, number_bytes_to_read, &actual_length, timeout);
The following functions are used to close and release a fully established USB connection to a GT-CP module using libusb.h:
- libusb_release_interface(devh, 0);
- This function releases the interface that was previously claimed.
- libusb_close(devh);
- This function closes the specified device handle.
- libusb_exit(NULL);
- This function will deinitialize libusb.
Example Program Using libusb.h
The example program (GTCP_test.c) sends an initialize command and a simple “Hello World!” to a GT-CP display. This program utilizes “GUTFT_USB_LIB.c” (as a libusb wrapper) and “GUTFT.c” (as a display command library). The command functions found in “GUTFT.c” directly relate to the commands found in the GT-CP software specification (s-gt-c9xxpa-soft_e04.pdf).
- Download: Libusb.h Communication Library Example
Run “make” before executing the program with “sudo ./GTCP_test”.
“Hello World!” should appear on the connected display:
NOTE: GT-CP = GUTFT. GUTFT was the name of the first version of the GT-CP module family.
Generic USB Driver
When connected to a Linux PC, a GT-CP module does not automatically get assigned to a USB driver.
To attach a generic USB driver to the GT-CP module, use: modprobe usbserial vendor=0x0EDA product=0x1200
Once a generic USB driver is attached, the GT-CP module is not associated with a device path like /dev/ttyUSB0. You can check your exact device path with the dmesg terminal command after plugging the module into your Linux PC. Look for the “generic converter now attached to ttyUSBX” message.
NOTE: A generic USB driver is intended for evaluation purposes only.
Example Program Using Generic USB Driver
The example program (GTCP_genericUSB.c) sends an initialize command and then falls into an infinite touch read loop that indicates touch on the module with a white box. This program opens in “/dev/ttyUSBX” and reads/writes data to/from the device path.
- Download: Generic USB Driver Example
The device path may need to be changed in “GTCP_genericUSB.c” to match the path established with your GT-CP module.
#define GTCP_MODULE “/dev/ttyUSBX”
Run “make” before executing the program with:
- “sudo ./GTCP_genericUSB GT800X480A-C903PA” when using a GT800X480A-C903PA
- “sudo ./GTCP_genericUSB GT480X272A-C903PA” when using a GT480X272A-C903PA
The touch demo should start on your connected display. Touch the screen to “draw” on the display.