========================== Touchscreen Device Drivers ========================== NuttX supports a two-part touchscreen driver architecture. #. An "upper half", generic driver that provides the common touchscreen interface to application level code, and #. A "lower half", platform-specific driver that implements the low-level touchscreen controls to implement the touchscreen functionality. Files supporting the touchscreen controller (TSC) driver can be found in the following locations: - **Interface Definition**. The header files for NuttX touchscreen drivers reside in the ``include/nuttx/include/input`` directory. The interface between the touchscreen controller "upper half" and "lower half" drivers are *not* common, but vary from controller-to-controller. Because of this, each touchscreen driver has its own unique header file that describes the "upper half"/"lower half" interface in that directory. The application level interface to each touchscreen driver, on the other hand, *is* the same for each touchscreen driver and is described ``include/nuttx/include/input/touchscreen.h``. The touchscreen driver uses a standard character driver framework but read operations return specially formatted data. - **"Upper Half" Driver**. The controller-specific, "upper half" touchscreen drivers reside in the directory ``drivers/input``. - **"Lower Half" Drivers**. Platform-specific touchscreen drivers reside in either: (1) The ``arch//src/`` directory for the processor architectures that have build in touchscreen controllers or (2) the ``boards////src/`` directory for boards that use an external touchscreen controller chip. Application Programming Interface ================================= The first thing to be done in order to use the touchscreen driver from an application is to include the correct header filer. It contains the Application Programming Interface to the driver. To do so, include .. code-block:: c #include Touchscreen driver is registered as a POSIX character device file into ``/dev`` namespace. It is necessary to open the device to get a file descriptor for further operations. This can be done with standard POSIX ``open()`` call. The driver is accessed through ``read``, ``write``, ``poll`` and ``ioctl`` interface, Following ``ioctl`` commands are available: * :c:macro:`TSIOC_GRAB` .. c:macro:: TSIOC_GRAB This command let the current handle has the device grabbed. When a handle grabs a device it becomes sole recipient for all touchscreen events coming from the device. An argument is an ``int32_t`` variable to enable or disable the grab.