Loading files
c02386ffcThis file is pinned to the selected release. Download the original to open it in your design tool.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.11.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Metal Detector: C:/Users/Viktor/Desktop/labaratorni/Projects/Metal_Detector/software/Program/Display/Src/xpt2046.c File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">Metal Detector
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()"> </span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.11.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
$(function(){initNavTree('xpt2046_8c.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#define-members">Macros</a> |
<a href="#func-members">Functions</a> |
<a href="#var-members">Variables</a> </div>
<div class="headertitle"><div class="title">xpt2046.c File Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Implementation file for XPT2046 touch screen controller driver.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include "<a class="el" href="xpt2046_8h_source.html">xpt2046.h</a>"</code><br />
<code>#include "<a class="el" href="ili9341_8h_source.html">ili9341.h</a>"</code><br />
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:a61d199b20435e3a885bf7b4e45cc08c0" id="r_a61d199b20435e3a885bf7b4e45cc08c0"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="#a61d199b20435e3a885bf7b4e45cc08c0">CMD_X_READ</a>   0b10010000</td></tr>
<tr class="separator:a61d199b20435e3a885bf7b4e45cc08c0"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ae49c99f40c390bbe538d64d8a6e6503e" id="r_ae49c99f40c390bbe538d64d8a6e6503e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="#ae49c99f40c390bbe538d64d8a6e6503e">CMD_Y_READ</a>   0b11010000</td></tr>
<tr class="separator:ae49c99f40c390bbe538d64d8a6e6503e"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:acaacc815231a38d17c6af1b52fffa268" id="r_acaacc815231a38d17c6af1b52fffa268"><td class="memItemLeft" align="right" valign="top">static uint8_t </td><td class="memItemRight" valign="bottom"><a class="el" href="#acaacc815231a38d17c6af1b52fffa268">transmit_receive_byte</a> (uint8_t data)</td></tr>
<tr class="memdesc:acaacc815231a38d17c6af1b52fffa268"><td class="mdescLeft"> </td><td class="mdescRight">Transmits and receives a byte via SPI. <br /></td></tr>
<tr class="separator:acaacc815231a38d17c6af1b52fffa268"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aeef3132c783ee89e52fc3c9880376c95" id="r_aeef3132c783ee89e52fc3c9880376c95"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="#aeef3132c783ee89e52fc3c9880376c95">manage_cs</a> (uint8_t state)</td></tr>
<tr class="memdesc:aeef3132c783ee89e52fc3c9880376c95"><td class="mdescLeft"> </td><td class="mdescRight">Manages the chip select (CS) pin state. <br /></td></tr>
<tr class="separator:aeef3132c783ee89e52fc3c9880376c95"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a0fb12d27ec69ca5b2aee4891f7ff4d0b" id="r_a0fb12d27ec69ca5b2aee4891f7ff4d0b"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="#a0fb12d27ec69ca5b2aee4891f7ff4d0b">draw_target</a> (uint32_t x, uint32_t y, uint16_t color)</td></tr>
<tr class="memdesc:a0fb12d27ec69ca5b2aee4891f7ff4d0b"><td class="mdescLeft"> </td><td class="mdescRight">Draws a target on the screen at the specified coordinates. <br /></td></tr>
<tr class="separator:a0fb12d27ec69ca5b2aee4891f7ff4d0b"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a5f374117557ebc91972f731193b0c53b" id="r_a5f374117557ebc91972f731193b0c53b"><td class="memItemLeft" align="right" valign="top">uint8_t </td><td class="memItemRight" valign="bottom"><a class="el" href="#a5f374117557ebc91972f731193b0c53b">XPT2046_ReadIRQPin</a> (void)</td></tr>
<tr class="memdesc:a5f374117557ebc91972f731193b0c53b"><td class="mdescLeft"> </td><td class="mdescRight">Reads the IRQ pin state of the XPT2046. <br /></td></tr>
<tr class="separator:a5f374117557ebc91972f731193b0c53b"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ac3f82a653bbc5e8ad1af2c8cba0e9f43" id="r_ac3f82a653bbc5e8ad1af2c8cba0e9f43"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#ac3f82a653bbc5e8ad1af2c8cba0e9f43">XPT2046_ReadData</a> (<a class="el" href="struct_x_p_t2046_handle__t.html">XPT2046Handle_t</a> *handle)</td></tr>
<tr class="memdesc:ac3f82a653bbc5e8ad1af2c8cba0e9f43"><td class="mdescLeft"> </td><td class="mdescRight">Reads calibrated touch coordinates from the XPT2046. <br /></td></tr>
<tr class="separator:ac3f82a653bbc5e8ad1af2c8cba0e9f43"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a5c86cd53f45aca61018d10e6fdec8077" id="r_a5c86cd53f45aca61018d10e6fdec8077"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#a5c86cd53f45aca61018d10e6fdec8077">XPT2046_ReadRawData</a> (uint16_t *x, uint16_t *y)</td></tr>
<tr class="memdesc:a5c86cd53f45aca61018d10e6fdec8077"><td class="mdescLeft"> </td><td class="mdescRight">Reads raw touch data from the XPT2046. <br /></td></tr>
<tr class="separator:a5c86cd53f45aca61018d10e6fdec8077"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ac982f8f04f1232de350116b105acdf89" id="r_ac982f8f04f1232de350116b105acdf89"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#ac982f8f04f1232de350116b105acdf89">XPT2046_IRQHandler</a> (<a class="el" href="struct_x_p_t2046_handle__t.html">XPT2046Handle_t</a> *handle)</td></tr>
<tr class="memdesc:ac982f8f04f1232de350116b105acdf89"><td class="mdescLeft"> </td><td class="mdescRight">Handles touch interrupt for the XPT2046. <br /></td></tr>
<tr class="separator:ac982f8f04f1232de350116b105acdf89"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a6ae5fadfb1212ddadaed359d1d4e2148" id="r_a6ae5fadfb1212ddadaed359d1d4e2148"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#a6ae5fadfb1212ddadaed359d1d4e2148">XPT2046_Calibrate</a> (<a class="el" href="struct_x_p_t2046_handle__t.html">XPT2046Handle_t</a> *handle)</td></tr>
<tr class="memdesc:a6ae5fadfb1212ddadaed359d1d4e2148"><td class="mdescLeft"> </td><td class="mdescRight">Calibrates the XPT2046 touch controller. <br /></td></tr>
<tr class="separator:a6ae5fadfb1212ddadaed359d1d4e2148"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a3ab96b82f46cba442ee66f22e49df612" id="r_a3ab96b82f46cba442ee66f22e49df612"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#a3ab96b82f46cba442ee66f22e49df612">XPT2046_SetCalibrationValues</a> (<a class="el" href="struct_x_p_t2046_handle__t.html">XPT2046Handle_t</a> *handle, <a class="el" href="struct_x_p_t2046_calibration_values__t.html">XPT2046CalibrationValues_t</a> *x_calib, <a class="el" href="struct_x_p_t2046_calibration_values__t.html">XPT2046CalibrationValues_t</a> *y_calib)</td></tr>
<tr class="memdesc:a3ab96b82f46cba442ee66f22e49df612"><td class="mdescLeft"> </td><td class="mdescRight">Sets the calibration values for the XPT2046 touch controller. <br /></td></tr>
<tr class="separator:a3ab96b82f46cba442ee66f22e49df612"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a7c2a75a4ad227a15aff7bb9942890f20" id="r_a7c2a75a4ad227a15aff7bb9942890f20"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#a7c2a75a4ad227a15aff7bb9942890f20">XPT2046_GetCalibrationValues</a> (<a class="el" href="struct_x_p_t2046_handle__t.html">XPT2046Handle_t</a> *handle, <a class="el" href="struct_x_p_t2046_calibration_values__t.html">XPT2046CalibrationValues_t</a> *x_calib, <a class="el" href="struct_x_p_t2046_calibration_values__t.html">XPT2046CalibrationValues_t</a> *y_calib)</td></tr>
<tr class="memdesc:a7c2a75a4ad227a15aff7bb9942890f20"><td class="mdescLeft"> </td><td class="mdescRight">Gets the calibration values from the XPT2046 touch controller. <br /></td></tr>
<tr class="separator:a7c2a75a4ad227a15aff7bb9942890f20"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:adbbbd9b1e4356685c4a58cb0b9919690" id="r_adbbbd9b1e4356685c4a58cb0b9919690"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#adbbbd9b1e4356685c4a58cb0b9919690">XPT2046_Test</a> (<a class="el" href="struct_x_p_t2046_handle__t.html">XPT2046Handle_t</a> *handle)</td></tr>
<tr class="memdesc:adbbbd9b1e4356685c4a58cb0b9919690"><td class="mdescLeft"> </td><td class="mdescRight">Tests the XPT2046 touch controller. <br /></td></tr>
<tr class="separator:adbbbd9b1e4356685c4a58cb0b9919690"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:af9aace1b44b73111e15aa39f06f43456" id="r_af9aace1b44b73111e15aa39f06f43456"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="#af9aace1b44b73111e15aa39f06f43456">__attribute__</a> ((weak))</td></tr>
<tr class="memdesc:af9aace1b44b73111e15aa39f06f43456"><td class="mdescLeft"> </td><td class="mdescRight">Weak callback function for the XPT2046 touch controller. <br /></td></tr>
<tr class="separator:af9aace1b44b73111e15aa39f06f43456"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:ab7bb0ab5c787b9b92c57aec4b3b84e9c" id="r_ab7bb0ab5c787b9b92c57aec4b3b84e9c"><td class="memItemLeft" align="right" valign="top">SPI_HandleTypeDef * </td><td class="memItemRight" valign="bottom"><a class="el" href="#ab7bb0ab5c787b9b92c57aec4b3b84e9c">xpt2046_spi</a></td></tr>
<tr class="separator:ab7bb0ab5c787b9b92c57aec4b3b84e9c"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a1d186503d0aa2ea897501123f3720819" id="r_a1d186503d0aa2ea897501123f3720819"><td class="memItemLeft" align="right" valign="top"><a id="a1d186503d0aa2ea897501123f3720819" name="a1d186503d0aa2ea897501123f3720819"></a>
static const float </td><td class="memItemRight" valign="bottom"><b>XPT2046_VER_COEF</b> = (float)<a class="el" href="xpt2046_8h.html#a2fc3b5377626483de59425cd8a02b994">XPT2046_VER_RES</a> / 4096</td></tr>
<tr class="separator:a1d186503d0aa2ea897501123f3720819"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a1613d1d01e3be8e4b76f7306482393a7" id="r_a1613d1d01e3be8e4b76f7306482393a7"><td class="memItemLeft" align="right" valign="top"><a id="a1613d1d01e3be8e4b76f7306482393a7" name="a1613d1d01e3be8e4b76f7306482393a7"></a>
static const float </td><td class="memItemRight" valign="bottom"><b>XPT2046_HOR_COEF</b> = (float)<a class="el" href="xpt2046_8h.html#aea98118d1e469f0fbfdfba294cff3605">XPT2046_HOR_RES</a> / 4096</td></tr>
<tr class="separator:a1613d1d01e3be8e4b76f7306482393a7"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Implementation file for XPT2046 touch screen controller driver. </p>
<p>This file contains the implementation of the XPT2046 touch screen controller driver. It includes functions for reading touch coordinates, handling interrupts, calibrating the touch screen, and performing basic tests. The calibration procedure is implemented based on Texas Instruments' application note SLYT277 "Calibration in touch-screen systems".</p>
<dl class="section see"><dt>See also</dt><dd><a href="https://www.ti.com/lit/an/slyt277/slyt277.pdf">https://www.ti.com/lit/an/slyt277/slyt277.pdf</a> for calibration details. </dd></dl>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a id="a61d199b20435e3a885bf7b4e45cc08c0" name="a61d199b20435e3a885bf7b4e45cc08c0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a61d199b20435e3a885bf7b4e45cc08c0">◆ </a></span>CMD_X_READ</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define CMD_X_READ   0b10010000</td>
</tr>
</table>
</div><div class="memdoc">
<p>Command for reading X position </p>
</div>
</div>
<a id="ae49c99f40c390bbe538d64d8a6e6503e" name="ae49c99f40c390bbe538d64d8a6e6503e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae49c99f40c390bbe538d64d8a6e6503e">◆ </a></span>CMD_Y_READ</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define CMD_Y_READ   0b11010000</td>
</tr>
</table>
</div><div class="memdoc">
<p>Command for reading Y position </p>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="af9aace1b44b73111e15aa39f06f43456" name="af9aace1b44b73111e15aa39f06f43456"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af9aace1b44b73111e15aa39f06f43456">◆ </a></span>__attribute__()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">__attribute__ </td>
<td>(</td>
<td class="paramtype">(weak)</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Weak callback function for the XPT2046 touch controller. </p>
<p>This function is a weakly defined callback that can be overridden by the user. It is called when a touch event is processed.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">handle</td><td>Pointer to the XPT2046 handle structure. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a0fb12d27ec69ca5b2aee4891f7ff4d0b" name="a0fb12d27ec69ca5b2aee4891f7ff4d0b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0fb12d27ec69ca5b2aee4891f7ff4d0b">◆ </a></span>draw_target()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void draw_target </td>
<td>(</td>
<td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>x</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>y</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t</td> <td class="paramname"><span class="paramname"><em>color</em></span> )</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Draws a target on the screen at the specified coordinates. </p>
<p>This function draws a small target at the specified (x, y) coordinates on the screen with the given color.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">x</td><td>X coordinate of the target. </td></tr>
<tr><td class="paramname">y</td><td>Y coordinate of the target. </td></tr>
<tr><td class="paramname">color</td><td>Color of the target. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="aeef3132c783ee89e52fc3c9880376c95" name="aeef3132c783ee89e52fc3c9880376c95"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeef3132c783ee89e52fc3c9880376c95">◆ </a></span>manage_cs()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void manage_cs </td>
<td>(</td>
<td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>state</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Manages the chip select (CS) pin state. </p>
<p>This function sets the state of the CS pin to either low (active) or high (inactive).</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">state</td><td>Desired state of the CS pin (GPIO_PIN_RESET or GPIO_PIN_SET). </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="acaacc815231a38d17c6af1b52fffa268" name="acaacc815231a38d17c6af1b52fffa268"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acaacc815231a38d17c6af1b52fffa268">◆ </a></span>transmit_receive_byte()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static uint8_t transmit_receive_byte </td>
<td>(</td>
<td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>data</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Transmits and receives a byte via SPI. </p>
<p>This function transmits a byte of data via SPI and receives a byte of data in response.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">data</td><td>Byte of data to be transmitted. </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">uint8_t</td><td>Byte of data received in response. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a6ae5fadfb1212ddadaed359d1d4e2148" name="a6ae5fadfb1212ddadaed359d1d4e2148"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ae5fadfb1212ddadaed359d1d4e2148">◆ </a></span>XPT2046_Calibrate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void XPT2046_Calibrate </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_x_p_t2046_handle__t.html">XPT2046Handle_t</a> *</td> <td class="paramname"><span class="paramname"><em>handle</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Calibrates the XPT2046 touch controller. </p>
<p>This function performs calibration of the XPT2046 touch controller using three reference points on the screen. The calibration process is based on the method described in the TI application note SLYT277.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">handle</td><td>Pointer to the XPT2046 handle structure. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a7c2a75a4ad227a15aff7bb9942890f20" name="a7c2a75a4ad227a15aff7bb9942890f20"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7c2a75a4ad227a15aff7bb9942890f20">◆ </a></span>XPT2046_GetCalibrationValues()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void XPT2046_GetCalibrationValues </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_x_p_t2046_handle__t.html">XPT2046Handle_t</a> *</td> <td class="paramname"><span class="paramname"><em>handle</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="struct_x_p_t2046_calibration_values__t.html">XPT2046CalibrationValues_t</a> *</td> <td class="paramname"><span class="paramname"><em>x_calib</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="struct_x_p_t2046_calibration_values__t.html">XPT2046CalibrationValues_t</a> *</td> <td class="paramname"><span class="paramname"><em>y_calib</em></span> )</td>
</tr>
</table>
</div><div class="memdoc">
<p>Gets the calibration values from the XPT2046 touch controller. </p>
<p>This function retrieves the current calibration values from the XPT2046 touch controller.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">handle</td><td>Pointer to the XPT2046 handle structure. </td></tr>
<tr><td class="paramname">x_calib</td><td>Pointer to store the calibration values for the X axis. </td></tr>
<tr><td class="paramname">y_calib</td><td>Pointer to store the calibration values for the Y axis. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ac982f8f04f1232de350116b105acdf89" name="ac982f8f04f1232de350116b105acdf89"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac982f8f04f1232de350116b105acdf89">◆ </a></span>XPT2046_IRQHandler()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void XPT2046_IRQHandler </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_x_p_t2046_handle__t.html">XPT2046Handle_t</a> *</td> <td class="paramname"><span class="paramname"><em>handle</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Handles touch interrupt for the XPT2046. </p>
<p>This function is the interrupt handler for the XPT2046 touch controller. It reads the touch data and updates the touch state.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">handle</td><td>Pointer to the XPT2046 handle structure. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ac3f82a653bbc5e8ad1af2c8cba0e9f43" name="ac3f82a653bbc5e8ad1af2c8cba0e9f43"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac3f82a653bbc5e8ad1af2c8cba0e9f43">◆ </a></span>XPT2046_ReadData()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void XPT2046_ReadData </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_x_p_t2046_handle__t.html">XPT2046Handle_t</a> *</td> <td class="paramname"><span class="paramname"><em>handle</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads calibrated touch coordinates from the XPT2046. </p>
<p>This function reads raw touch data from the XPT2046 and applies calibration coefficients to convert them to screen coordinates.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">handle</td><td>Pointer to the XPT2046 handle structure. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a5f374117557ebc91972f731193b0c53b" name="a5f374117557ebc91972f731193b0c53b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5f374117557ebc91972f731193b0c53b">◆ </a></span>XPT2046_ReadIRQPin()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint8_t XPT2046_ReadIRQPin </td>
<td>(</td>
<td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads the IRQ pin state of the XPT2046. </p>
<p>This function reads the state of the IRQ pin of the XPT2046 touch controller.</p>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">uint8_t</td><td>1 if the pin is high, 0 if the pin is low. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a5c86cd53f45aca61018d10e6fdec8077" name="a5c86cd53f45aca61018d10e6fdec8077"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5c86cd53f45aca61018d10e6fdec8077">◆ </a></span>XPT2046_ReadRawData()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void XPT2046_ReadRawData </td>
<td>(</td>
<td class="paramtype">uint16_t *</td> <td class="paramname"><span class="paramname"><em>x</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t *</td> <td class="paramname"><span class="paramname"><em>y</em></span> )</td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads raw touch data from the XPT2046. </p>
<p>This function reads the raw touch data from the XPT2046 touch controller by sending appropriate commands via SPI and processing the received data. It implements a simple averaging filter to improve the touch data quality.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">x</td><td>Pointer to store the raw x-coordinate. </td></tr>
<tr><td class="paramname">y</td><td>Pointer to store the raw y-coordinate. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a3ab96b82f46cba442ee66f22e49df612" name="a3ab96b82f46cba442ee66f22e49df612"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3ab96b82f46cba442ee66f22e49df612">◆ </a></span>XPT2046_SetCalibrationValues()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void XPT2046_SetCalibrationValues </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_x_p_t2046_handle__t.html">XPT2046Handle_t</a> *</td> <td class="paramname"><span class="paramname"><em>handle</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="struct_x_p_t2046_calibration_values__t.html">XPT2046CalibrationValues_t</a> *</td> <td class="paramname"><span class="paramname"><em>x_calib</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="struct_x_p_t2046_calibration_values__t.html">XPT2046CalibrationValues_t</a> *</td> <td class="paramname"><span class="paramname"><em>y_calib</em></span> )</td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets the calibration values for the XPT2046 touch controller. </p>
<p>This function updates the calibration values for the XPT2046 touch controller.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">handle</td><td>Pointer to the XPT2046 handle structure. </td></tr>
<tr><td class="paramname">x_calib</td><td>Pointer to the calibration values for the X axis. </td></tr>
<tr><td class="paramname">y_calib</td><td>Pointer to the calibration values for the Y axis. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="adbbbd9b1e4356685c4a58cb0b9919690" name="adbbbd9b1e4356685c4a58cb0b9919690"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adbbbd9b1e4356685c4a58cb0b9919690">◆ </a></span>XPT2046_Test()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void XPT2046_Test </td>
<td>(</td>
<td class="paramtype"><a class="el" href="struct_x_p_t2046_handle__t.html">XPT2046Handle_t</a> *</td> <td class="paramname"><span class="paramname"><em>handle</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Tests the XPT2046 touch controller. </p>
<p>This function tests the XPT2046 touch controller by reading the touch coordinates and drawing a target on the screen at the touch location.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">handle</td><td>Pointer to the XPT2046 handle structure. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<h2 class="groupheader">Variable Documentation</h2>
<a id="ab7bb0ab5c787b9b92c57aec4b3b84e9c" name="ab7bb0ab5c787b9b92c57aec4b3b84e9c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab7bb0ab5c787b9b92c57aec4b3b84e9c">◆ </a></span>xpt2046_spi</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">SPI_HandleTypeDef* xpt2046_spi</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">extern</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>SPI handle for the XPT2046 touch screen </p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_24817a301ba3256d5cc3ff5fb28dbe0b.html">Display</a></li><li class="navelem"><a class="el" href="dir_bd0f8823100e88f56087202c553e40bd.html">Src</a></li><li class="navelem"><a class="el" href="xpt2046_8c.html">xpt2046.c</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.11.0 </li>
</ul>
</div>
</body>
</html>