From f024e4e23e2ec83805f422b0ee075222982b965f Mon Sep 17 00:00:00 2001
From: "michael.divia" <michael.divia@etu.hesge.ch>
Date: Fri, 7 Jun 2024 10:02:56 +0200
Subject: [PATCH] Touch Screen Working

---
 .cproject           | 40 ++++++++++++-------------
 src/Labo_Keyboard.c | 15 +++++++---
 src/touch.c         | 72 +++++++++++++++++++++++++++++++++++++++++++++
 src/touch.h         | 20 +++++++++++++
 4 files changed, 123 insertions(+), 24 deletions(-)
 create mode 100644 src/touch.c
 create mode 100644 src/touch.h

diff --git a/.cproject b/.cproject
index 66731b9..6b399a5 100644
--- a/.cproject
+++ b/.cproject
@@ -23,7 +23,7 @@
 							<tool id="com.crt.advproject.cpp.exe.debug.1161736663" name="MCU C++ Compiler" superClass="com.crt.advproject.cpp.exe.debug">
 								<option id="com.crt.advproject.cpp.hdrlib.678266389" name="Library headers" superClass="com.crt.advproject.cpp.hdrlib" useByScannerDiscovery="false"/>
 								<option id="com.crt.advproject.cpp.fpu.13202551" name="Floating point" superClass="com.crt.advproject.cpp.fpu" useByScannerDiscovery="true"/>
-								<option id="gnu.cpp.compiler.option.preprocessor.def.310449329" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false"/>
+								<option id="gnu.cpp.compiler.option.preprocessor.def.310449329" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false"/>
 							</tool>
 							<tool id="com.crt.advproject.gcc.exe.debug.1331006025" name="MCU C Compiler" superClass="com.crt.advproject.gcc.exe.debug">
 								<option id="com.crt.advproject.gcc.thumb.327103022" name="Thumb mode" superClass="com.crt.advproject.gcc.thumb" useByScannerDiscovery="false" value="true" valueType="boolean"/>
@@ -40,11 +40,11 @@
 								<option id="gnu.c.compiler.option.optimization.flags.1816103936" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" useByScannerDiscovery="false" value="-fno-common" valueType="string"/>
 								<option id="com.crt.advproject.gcc.hdrlib.1233635811" name="Library headers" superClass="com.crt.advproject.gcc.hdrlib" useByScannerDiscovery="false" value="Redlib" valueType="enumerated"/>
 								<option id="com.crt.advproject.gcc.fpu.1350464088" name="Floating point" superClass="com.crt.advproject.gcc.fpu" useByScannerDiscovery="true"/>
-								<option id="com.crt.advproject.gcc.specs.1483065204" superClass="com.crt.advproject.gcc.specs" useByScannerDiscovery="false" value="com.crt.advproject.gcc.specs.codered" valueType="enumerated"/>
-								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.495808465" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
+								<option id="com.crt.advproject.gcc.specs.1483065204" name="Specs" superClass="com.crt.advproject.gcc.specs" useByScannerDiscovery="false" value="com.crt.advproject.gcc.specs.codered" valueType="enumerated"/>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.495808465" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/CMSIS_CORE_LPC17xx/inc}&quot;"/>
 								</option>
-								<option id="com.crt.advproject.gcc.exe.debug.option.optimization.level.2000074488" superClass="com.crt.advproject.gcc.exe.debug.option.optimization.level" useByScannerDiscovery="true"/>
+								<option id="com.crt.advproject.gcc.exe.debug.option.optimization.level.2000074488" name="Optimization Level" superClass="com.crt.advproject.gcc.exe.debug.option.optimization.level" useByScannerDiscovery="true"/>
 								<inputType id="com.crt.advproject.compiler.input.1058785932" superClass="com.crt.advproject.compiler.input"/>
 							</tool>
 							<tool id="com.crt.advproject.gas.exe.debug.1410871385" name="MCU Assembler" superClass="com.crt.advproject.gas.exe.debug">
@@ -53,8 +53,8 @@
 								<option id="gnu.both.asm.option.flags.crt.231436674" name="Assembler flags" superClass="gnu.both.asm.option.flags.crt" value="-c -x assembler-with-cpp -DDEBUG -D__CODE_RED -DCORE_M3 -D__USE_CMSIS=CMSIS_CORE_LPC17xx -D__LPC17XX__ -D__REDLIB__" valueType="string"/>
 								<option id="com.crt.advproject.gas.hdrlib.125352232" name="Library headers" superClass="com.crt.advproject.gas.hdrlib" value="Redlib" valueType="enumerated"/>
 								<option id="com.crt.advproject.gas.fpu.1375562808" name="Floating point" superClass="com.crt.advproject.gas.fpu"/>
-								<option id="com.crt.advproject.gas.specs.1003653227" superClass="com.crt.advproject.gas.specs" value="com.crt.advproject.gas.specs.codered" valueType="enumerated"/>
-								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.7746426" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
+								<option id="com.crt.advproject.gas.specs.1003653227" name="Specs" superClass="com.crt.advproject.gas.specs" value="com.crt.advproject.gas.specs.codered" valueType="enumerated"/>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.7746426" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/CMSIS_CORE_LPC17xx/inc}&quot;"/>
 								</option>
 								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1391121765" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
@@ -83,16 +83,16 @@
 									<listOptionValue builtIn="false" value="--gc-sections"/>
 									<listOptionValue builtIn="false" value="-print-memory-usage"/>
 								</option>
-								<option id="com.crt.advproject.link.gcc.hdrlib.1760099707" name="Library" superClass="com.crt.advproject.link.gcc.hdrlib" value="com.crt.advproject.gcc.link.hdrlib.codered.none" valueType="enumerated"/>
+								<option id="com.crt.advproject.link.gcc.hdrlib.1760099707" name="Library" superClass="com.crt.advproject.link.gcc.hdrlib" value="com.crt.advproject.gcc.link.hdrlib.codered.semihost" valueType="enumerated"/>
 								<option id="com.crt.advproject.link.fpu.475700601" name="Floating point" superClass="com.crt.advproject.link.fpu"/>
 								<option id="com.crt.advproject.link.gcc.multicore.master.1625029294" name="Multicore master" superClass="com.crt.advproject.link.gcc.multicore.master"/>
-								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.link.option.libs.1468852738" superClass="gnu.c.link.option.libs" valueType="libs">
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.link.option.libs.1468852738" name="Libraries (-l)" superClass="gnu.c.link.option.libs" valueType="libs">
 									<listOptionValue builtIn="false" value="CMSIS_CORE_LPC17xx"/>
 								</option>
-								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.link.option.paths.1795555647" superClass="gnu.c.link.option.paths" valueType="libPaths">
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.link.option.paths.1795555647" name="Library search path (-L)" superClass="gnu.c.link.option.paths" valueType="libPaths">
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/CMSIS_CORE_LPC17xx/Debug}&quot;"/>
 								</option>
-								<option id="com.crt.advproject.link.crpenable.2056618516" superClass="com.crt.advproject.link.crpenable" value="true" valueType="boolean"/>
+								<option id="com.crt.advproject.link.crpenable.2056618516" name="Enable automatic placement of Code Read Protection field in image" superClass="com.crt.advproject.link.crpenable" value="true" valueType="boolean"/>
 								<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.111018516" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
 									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
 									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
@@ -141,9 +141,9 @@
 								</option>
 								<option id="gnu.c.compiler.option.misc.other.459010815" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections" valueType="string"/>
 								<option id="gnu.c.compiler.option.optimization.flags.2123484550" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" useByScannerDiscovery="false" value="-fno-common" valueType="string"/>
-								<option id="com.crt.advproject.gcc.hdrlib.1035408900" superClass="com.crt.advproject.gcc.hdrlib" useByScannerDiscovery="false" value="Redlib" valueType="enumerated"/>
-								<option id="com.crt.advproject.gcc.specs.2122165542" superClass="com.crt.advproject.gcc.specs" useByScannerDiscovery="false" value="com.crt.advproject.gcc.specs.codered" valueType="enumerated"/>
-								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.1909001652" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
+								<option id="com.crt.advproject.gcc.hdrlib.1035408900" name="Library headers" superClass="com.crt.advproject.gcc.hdrlib" useByScannerDiscovery="false" value="Redlib" valueType="enumerated"/>
+								<option id="com.crt.advproject.gcc.specs.2122165542" name="Specs" superClass="com.crt.advproject.gcc.specs" useByScannerDiscovery="false" value="com.crt.advproject.gcc.specs.codered" valueType="enumerated"/>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.1909001652" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/CMSIS_CORE_LPC17xx/inc}&quot;"/>
 								</option>
 								<inputType id="com.crt.advproject.compiler.input.657861116" superClass="com.crt.advproject.compiler.input"/>
@@ -152,9 +152,9 @@
 								<option id="com.crt.advproject.gas.thumb.8052322" name="Thumb mode" superClass="com.crt.advproject.gas.thumb" value="true" valueType="boolean"/>
 								<option id="com.crt.advproject.gas.arch.1627140913" name="Architecture" superClass="com.crt.advproject.gas.arch" value="com.crt.advproject.gas.target.cm3" valueType="enumerated"/>
 								<option id="gnu.both.asm.option.flags.crt.323389192" name="Assembler flags" superClass="gnu.both.asm.option.flags.crt" value="-c -x assembler-with-cpp -DNDEBUG -D__CODE_RED -DCORE_M3 -D__USE_CMSIS=CMSIS_CORE_LPC17xx -D__LPC17XX__ -D__REDLIB__" valueType="string"/>
-								<option id="com.crt.advproject.gas.hdrlib.780335802" superClass="com.crt.advproject.gas.hdrlib" value="Redlib" valueType="enumerated"/>
-								<option id="com.crt.advproject.gas.specs.1946253947" superClass="com.crt.advproject.gas.specs" value="com.crt.advproject.gas.specs.codered" valueType="enumerated"/>
-								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.1473592508" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
+								<option id="com.crt.advproject.gas.hdrlib.780335802" name="Library headers" superClass="com.crt.advproject.gas.hdrlib" value="Redlib" valueType="enumerated"/>
+								<option id="com.crt.advproject.gas.specs.1946253947" name="Specs" superClass="com.crt.advproject.gas.specs" value="com.crt.advproject.gas.specs.codered" valueType="enumerated"/>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.1473592508" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/CMSIS_CORE_LPC17xx/inc}&quot;"/>
 								</option>
 								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1477970645" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
@@ -180,14 +180,14 @@
 									<listOptionValue builtIn="false" value="--gc-sections"/>
 									<listOptionValue builtIn="false" value="-print-memory-usage"/>
 								</option>
-								<option id="com.crt.advproject.link.gcc.hdrlib.575405103" name="Library" superClass="com.crt.advproject.link.gcc.hdrlib" value="com.crt.advproject.gcc.link.hdrlib.codered.none" valueType="enumerated"/>
-								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.link.option.libs.1752739164" superClass="gnu.c.link.option.libs" valueType="libs">
+								<option id="com.crt.advproject.link.gcc.hdrlib.575405103" name="Library" superClass="com.crt.advproject.link.gcc.hdrlib" value="com.crt.advproject.gcc.link.hdrlib.codered.semihost" valueType="enumerated"/>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.link.option.libs.1752739164" name="Libraries (-l)" superClass="gnu.c.link.option.libs" valueType="libs">
 									<listOptionValue builtIn="false" value="CMSIS_CORE_LPC17xx"/>
 								</option>
-								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.link.option.paths.1892982033" superClass="gnu.c.link.option.paths" valueType="libPaths">
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.link.option.paths.1892982033" name="Library search path (-L)" superClass="gnu.c.link.option.paths" valueType="libPaths">
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/CMSIS_CORE_LPC17xx/Release}&quot;"/>
 								</option>
-								<option id="com.crt.advproject.link.crpenable.623706927" superClass="com.crt.advproject.link.crpenable" value="true" valueType="boolean"/>
+								<option id="com.crt.advproject.link.crpenable.623706927" name="Enable automatic placement of Code Read Protection field in image" superClass="com.crt.advproject.link.crpenable" value="true" valueType="boolean"/>
 								<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.675476394" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
 									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
 									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
diff --git a/src/Labo_Keyboard.c b/src/Labo_Keyboard.c
index 76f8fba..7ba8c8b 100644
--- a/src/Labo_Keyboard.c
+++ b/src/Labo_Keyboard.c
@@ -20,12 +20,15 @@
 #include "input.h"
 #include "lcd.h"
 #include "i2c.h"
+#include "touch.h"
 
 #define KEY_SIZE 50
 #define KEY_SHIFT 20
 
 #define SHIFT_WIDTH (KEY_SHIFT*3)
 
+extern int screenTouch;
+
 int main_master()
 {
 	uart_send_string("I'm the Master !\r\n", 18);
@@ -81,9 +84,13 @@ int main_master()
 	square(255, 255, 255, 239-(KEY_SIZE*4), 0, SHIFT_WIDTH, 1);
 	/*#######################################################*/
 
-	while(1)
+	while(true)
 	{
-
+		if(screenTouch)
+		{
+			touch_get_values();
+			screenTouch=0;
+		}
 	}
 
 	return 0;
@@ -115,8 +122,8 @@ int main(void)
 	// Init I2C
 	i2c_init();
 
-	//uint8_t addr_data[1] = {0x00};
-	//i2c_write_bytes(0x38 << 1, 0xA4, 1, addr_data);
+	// Init Touch screen
+	touch_init();
 
 	// Set switch 0 as input
 	LPC_GPIO2->FIODIR &= ~(1);
diff --git a/src/touch.c b/src/touch.c
new file mode 100644
index 0000000..a01e0c6
--- /dev/null
+++ b/src/touch.c
@@ -0,0 +1,72 @@
+/*
+ * touch.c
+ *
+ *  Created on: 7 juin 2024
+ *      Author: padi
+ */
+
+#include "touch.h"
+
+volatile int screenTouch;
+
+void touch_init()
+{
+	// GPIO pin mode
+	LPC_PINCON->PINSEL4 &= ~(0b11 << 11);
+
+	// Clock
+	LPC_I2C0->I2SCLH = 125;
+	LPC_I2C0->I2SCLL = 125;
+
+	// Interrupt
+	LPC_GPIOINT->IO2IntEnF |= 0b1 << 11; // enable falling p02.11
+	LPC_GPIOINT->IO2IntEnR |= 0b1 << 11; // enable rising p02.11
+	NVIC_EnableIRQ(EINT3_IRQn);
+
+	// WHO_AM_I
+	/*uint8_t trans_1[1];
+	i2c_read_bytes(0x38, 0x0F, 1, trans_1);
+
+	char buf[10];
+	int size = snprintf(buf, sizeof(buf), "WHO AM I = %x", trans_1[0]);
+	uart_send_string(buf, size);
+	*/
+
+	uint8_t trans_2[1];
+
+	trans_2[0] = 0b00;
+
+	i2c_write_bytes(0x38, 0xA4, 1, trans_2);
+
+	uart_send_string("Touch Screen Initialized !\n\r", 28);
+}
+
+void touch_get_values()
+{
+	uint8_t value_xl[1] = {0};
+	uint8_t value_yh[1] = {0};
+	uint8_t value_yl[1] = {0};
+
+	i2c_read_bytes(0x38, 0x04, 1, value_xl);
+	i2c_read_bytes(0x38, 0x05, 1, value_yh);
+	i2c_read_bytes(0x38, 0x06, 1, value_yl);
+
+	uint16_t value_y = value_yl[0] | ((value_yh[0] & 0b111) << 8);
+
+	printf("%d / %d \n",value_xl[0], value_y);
+}
+
+void EINT3_IRQHandler(void)
+{
+	if (LPC_GPIOINT->IO2IntStatF & (0b1 << 11))
+	{
+		screenTouch = 1;
+		LPC_GPIOINT->IO2IntClr |= (0b1 << 11);
+	}
+
+	if (LPC_GPIOINT->IO2IntStatR & (0b1 << 11))
+	{
+		screenTouch = 0;
+		LPC_GPIOINT->IO2IntClr |= (0b1 << 11);
+	}
+}
diff --git a/src/touch.h b/src/touch.h
new file mode 100644
index 0000000..c8c6af5
--- /dev/null
+++ b/src/touch.h
@@ -0,0 +1,20 @@
+/*
+ * touch.h
+ *
+ *  Created on: 7 juin 2024
+ *      Author: padi
+ */
+
+#ifndef TOUCH_H_
+#define TOUCH_H_
+
+#include <stdio.h>
+
+#include "LPC17xx.h"
+#include "i2c.h"
+#include "uart.h"
+
+void touch_init();
+void touch_get_values();
+
+#endif /* TOUCH_H_ */
-- 
GitLab