this repository aim to make the official ST DISCO F746NG demo from STM32Cube_FW_F7_V1.2.0 working on mbed.
Dependencies: BSP_DISCO_F746NG_patch mbed-rtos mbed
patch/inc/GUITDRV_ADS7846.h
- Committer:
- NirT
- Date:
- 2015-11-02
- Revision:
- 0:c00e6c923941
File content as of revision 0:c00e6c923941:
/********************************************************************* * SEGGER Microcontroller GmbH & Co. KG * * Solutions for real time microcontroller applications * ********************************************************************** * * * (c) 1996 - 2015 SEGGER Microcontroller GmbH & Co. KG * * * * Internet: www.segger.com Support: support@segger.com * * * ********************************************************************** ** emWin V5.28 - Graphical user interface for embedded applications ** All Intellectual Property rights in the Software belongs to SEGGER. emWin is protected by international copyright laws. Knowledge of the source code may not be used to write a similar product. This file may only be used in accordance with the following terms: The software has been licensed to STMicroelectronics International N.V. a Dutch company with a Swiss branch and its headquarters in Plan- les-Ouates, Geneva, 39 Chemin du Champ des Filles, Switzerland for the purposes of creating libraries for ARM Cortex-M-based 32-bit microcon_ troller products commercialized by Licensee only, sublicensed and dis_ tributed under the terms and conditions of the End User License Agree_ ment supplied by STMicroelectronics International N.V. Full source code is available at: www.segger.com We appreciate your understanding and fairness. ---------------------------------------------------------------------- File : GUITDRV_ADS7846.h Purpose : Touch screen driver include ---------------------------------------------------------------------- Notes ===== (1) The driver needs some function pointer to be filled correctly to be able to communicate with the external peripheral correctly. The correct assignment of these function pointers is checked during driver configuration. (2) The driver needs some configuration variables filled in to be able to calculate the logical screen coordinates from the physical AD values. A description of the typical paramaters that have to be known by the driver is listed below: - Orientation: Orientation of the touch screen if not the same as the physical orientation. A or-combination of the defines GUI_SWAP_XY, GUI_MIRROR_X and GUI_MIRROR_Y can be used. - xLog0 : Logical pixel value of horizontal reference point 0. Typically 0. - xLog1 : Logical pixel value of horizontal reference point 1. Typically horizontal screen resolution -1. - xPhys0 : Physical AD value of horizontal reference point 0. - xPhys1 : Physical AD value of horizontal reference point 1. - yLog0 : Logical pixel value of vertical reference point 0. Typically 0. - yLog1 : Logical pixel value of vertical reference point 1. Typically vertical screen resolution -1. - yPhys0 : Physical AD value of vertical reference point 0. - yPhys1 : Physical AD value of vertical reference point 1. (3) If the PENIRQ line of the touch controller is connected to a port of the target hardware a touch event can be detected by the driver. Upon polling the driver's exec routine the driver can check if a touch event is ready to be sampled by checking the PENIRQ line. Without PENIRQ line the driver will always try to sample a touch event even if no touch happened which will consume time even if not necessary. Without PENIRQ it is the responsibility of the user's pfGetResult() routine to return 0xFFFF if the measured AD value is out of bounds. If both, the PENIRQ and the touch pressure recognition are enabled first the PENIRQ will signal that there is a touch event. Afterwards the touch pressure measurement is used to confirm that this was a valid touch and the touch had enough pressure to deliver good measurements. (4) The touch pressure measurement is activated by setting a value for PressureMin and PressureMax . To calculate the correct touch pressure the resistance of the X-plate has to be known. This can be set via PlateResistanceX [Ohm]. A touch event that we have measured with a pressure within these thresholds is confirmed as valid touch event with good measurment samples. If both, the PENIRQ and the touch pressure recognition are enabled first the PENIRQ will signal that there is a touch event. Afterwards the touch pressure measurement is used to confirm that this was a valid touch and the touch had enough pressure to deliver good measurements. If no PENIRQ line is connected this measurement takes place everytime the touch event is polled regardless if there is a touch event or not as the driver will only know for sure after calculating the touch pressure. Setting the value for PlateResistanceX to 0 is invalid. The driver will internally use a value of 1 instead. */ #ifndef GUITDRV_ADS7846_H /* Make sure we only include it once */ #define GUITDRV_ADS7846_H #include "GUI_Type.h" #if defined(__cplusplus) extern "C" { /* Make sure we have C-declarations in C++ programs */ #endif /********************************************************************* * * Types * ********************************************************************** */ typedef struct { // // Function pointer (1) // void (* pfSendCmd) (U8 Data); // Sends a 8-bit command to the peripheral U16 (* pfGetResult) (void); // Retrieves the result of the AD conversion. 4 dummy bytes have to be shifted out to the left. char (* pfGetBusy) (void); // Retrieves the status of the busy line. 0: Not busy; 1: Busy void (* pfSetCS) (char OnOff); // Set chip select line. OnOff == 1 means peripheral selected // // Configuration (2) // unsigned Orientation; int xLog0; int xLog1; int xPhys0; int xPhys1; int yLog0; int yLog1; int yPhys0; int yPhys1; // // Optional, touch recognition via PENIRQ line (3) // char (* pfGetPENIRQ) (void); // Retrieves the status of the PENIRQ line to detect a touch event. // // Optional, touch recognition via touch pressure measurement (4) // int PressureMin; // Minimum pressure threshold. A measured pressure below this value means we do not have a valid touch event. int PressureMax; // Maximum pressure threshold. A measured pressure above this value means we do not have a valid touch event. int PlateResistanceX; // Resistance of the X-plate of the touch screen. This value is needed for calculation of the touch pressure. } GUITDRV_ADS7846_CONFIG; typedef struct { int xPhys; // Last measured x value int yPhys; // Last measured y value int z1Phys; // Last measured z1 value int z2Phys; // Last measured z2 value int PENIRQ; // Last sampled PENIRQ state if PENIRQ callback has been set int Pressure; // Last measured touch pressure if touch pressure measurement is enabled } GUITDRV_ADS7846_LAST_VAL; /********************************************************************* * * Prototypes * ********************************************************************** */ void GUITDRV_ADS7846_Config (GUITDRV_ADS7846_CONFIG * pConfig); char GUITDRV_ADS7846_Exec (void); void GUITDRV_ADS7846_GetLastVal(GUITDRV_ADS7846_LAST_VAL * p); #if defined(__cplusplus) } /* Make sure we have C-declarations in C++ programs */ #endif #endif /* GUITDRV_ADS7846_H */ /*************************** End of file ****************************/