Ginput and structure changes
GINPUT Touch including drivers GTIMER fixes GEVENT fixes GWIN button completion Structure changes to better seperate sections of a sub-systemremotes/origin_old/ugfx_release_2.6
parent
6cc2bc280c
commit
8275c8820f
|
@ -33,12 +33,15 @@
|
|||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "gdisp_emulation.c"
|
||||
#include "lld/gdisp/emulation.c"
|
||||
|
||||
#if defined(BOARD_OLIMEX_STM32_LCD)
|
||||
#if defined(GDISP_USE_CUSTOM_BOARD) && GDISP_USE_CUSTOM_BOARD
|
||||
/* Include the user supplied board definitions */
|
||||
#include "gdisp_lld_board.h"
|
||||
#elif defined(BOARD_OLIMEX_STM32_LCD)
|
||||
#include "gdisp_lld_board_olimex_stm32_lcd.h"
|
||||
#else
|
||||
#include "gdisp_lld_board_example.h"
|
||||
#include "gdisp_lld_board.h"
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "gdisp_emulation.c"
|
||||
#include "lld/gdisp/emulation.c"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local definitions. */
|
||||
|
@ -73,7 +73,10 @@
|
|||
/* Driver local functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if defined(BOARD_OLIMEX_SAM7_EX256)
|
||||
#if defined(GDISP_USE_CUSTOM_BOARD) && GDISP_USE_CUSTOM_BOARD
|
||||
/* Include the user supplied board definitions */
|
||||
#include "gdisp_lld_board.h"
|
||||
#elif defined(BOARD_OLIMEX_SAM7_EX256)
|
||||
#include "gdisp_lld_board_olimexsam7ex256.h"
|
||||
#else
|
||||
/* Include the user supplied board definitions */
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "gdisp_emulation.c"
|
||||
#include "lld/gdisp/emulation.c"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local definitions. */
|
||||
|
@ -56,7 +56,10 @@
|
|||
/* Driver local definitions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if defined(BOARD_OLIMEX_STM32_E407)
|
||||
#if defined(GDISP_USE_CUSTOM_BOARD) && GDISP_USE_CUSTOM_BOARD
|
||||
/* Include the user supplied board definitions */
|
||||
#include "gdisp_lld_board.h"
|
||||
#elif defined(BOARD_OLIMEX_STM32_E407)
|
||||
#include "gdisp_lld_board_olimex_e407.h"
|
||||
#else
|
||||
#include "gdisp_lld_board.h"
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "gdisp_emulation.c"
|
||||
#include "lld/gdisp/emulation.c"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local definitions. */
|
||||
|
@ -53,7 +53,10 @@
|
|||
/* Driver local functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if defined(BOARD_FIREBULL_STM32_F103)
|
||||
#if defined(GDISP_USE_CUSTOM_BOARD) && GDISP_USE_CUSTOM_BOARD
|
||||
/* Include the user supplied board definitions */
|
||||
#include "gdisp_lld_board.h"
|
||||
#elif defined(BOARD_FIREBULL_STM32_F103)
|
||||
#include "gdisp_lld_board_firebullstm32f103.h"
|
||||
#else
|
||||
/* Include the user supplied board definitions */
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "gdisp_emulation.c"
|
||||
#include "lld/gdisp/emulation.c"
|
||||
|
||||
/* All the board specific code should go in these include file so the driver
|
||||
* can be ported to another board just by creating a suitable file.
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "gdisp_emulation.c"
|
||||
#include "lld/gdisp/emulation.c"
|
||||
|
||||
/* ---- Required Routines ---- */
|
||||
/*
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
#define GDISP_LLD_NO_STRUCT
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "gdisp_emulation.c"
|
||||
#include "lld/gdisp/emulation.c"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local definitions. */
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
# List the required driver.
|
||||
GFXSRC += $(GFXLIB)/drivers/gdisp/Win32/gdisp_lld.c
|
||||
|
||||
# Required include directories
|
||||
GFXINC += $(GFXLIB)/drivers/gdisp/Win32
|
|
@ -0,0 +1,5 @@
|
|||
# List the required driver.
|
||||
GFXSRC += $(GFXLIB)/drivers/ginput/toggle/Pal/ginput_lld_toggle.c
|
||||
|
||||
# Required include directories
|
||||
GFXINC += $(GFXLIB)/drivers/ginput/toggle/Pal
|
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/ginput/togglePal/ginput_lld_toggle.c
|
||||
* @brief GINPUT Toggle low level driver source for the ChibiOS PAL hardware.
|
||||
*
|
||||
* @addtogroup GINPUT_TOGGLE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
#if (GFX_USE_GINPUT && GINPUT_NEED_TOGGLE) /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
// Declare the static members in the following include file
|
||||
#define GINPUT_TOGGLE_DECLARE_CONFIG
|
||||
|
||||
#include "lld/ginput/toggle.h"
|
||||
|
||||
/**
|
||||
* @brief Initialise the port.
|
||||
*
|
||||
* @param[in] ptc A pointer to one of the entries in GInputToggleConfigTable
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void ginput_lld_toggle_init(const GToggleConfig *ptc) {
|
||||
palSetGroupMode(((IOBus *)ptc->id)->portid, ptc->mask, 0, ptc->mode);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the bits from the port.
|
||||
*
|
||||
* @param[in] ptc A pointer to one of the entries in GInputToggleConfigTable
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
unsigned ginput_lld_toggle_getbits(const GToggleConfig *ptc) {
|
||||
return palReadBus((IOBus *)ptc->id);
|
||||
}
|
||||
|
||||
#endif /* GFX_USE_GINPUT && GINPUT_NEED_TOGGLE */
|
||||
/** @} */
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/ginput/togglePal/ginput_lld_toggle_board_example.h
|
||||
* @brief GINPUT Toggle low level driver source for the ChibiOS PAL hardware on the example board.
|
||||
*
|
||||
* @addtogroup GINPUT_TOGGLE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_TOGGLE_BOARD_H
|
||||
#define _GDISP_LLD_TOGGLE_BOARD_H
|
||||
|
||||
#ifndef _GINPUT_LLD_TOGGLE_CONFIG_H
|
||||
// Visible in ginput.h
|
||||
|
||||
#define GINPUT_TOGGLE_SW1 0 // Switch 1
|
||||
#define GINPUT_TOGGLE_SW2 1 // Switch 2
|
||||
#define GINPUT_TOGGLE_UP 2 // Joystick Up
|
||||
#define GINPUT_TOGGLE_DOWN 3 // Joystick Down
|
||||
#define GINPUT_TOGGLE_LEFT 4 // Joystick Left
|
||||
#define GINPUT_TOGGLE_RIGHT 5 // Joystick Right
|
||||
#define GINPUT_TOGGLE_CENTER 6 // Joystick Center
|
||||
|
||||
#elif !defined(GINPUT_TOGGLE_DECLARE_CONFIG)
|
||||
// Visible in ginput_lld.h
|
||||
|
||||
#define GINPUT_TOGGLE_NUM_PORTS 7 // The total number of toggle inputs
|
||||
|
||||
#else
|
||||
// Visible in ginput_lld_toggle.c
|
||||
|
||||
GToggleConfig GInputToggleConfigTable[] = {
|
||||
{AT91C_BASE_PIOB, // Switch 1 and Switch 2
|
||||
PIOB_SW1_MASK|PIOB_SW2_MASK,
|
||||
PIOB_SW1_MASK|PIOB_SW2_MASK,
|
||||
PAL_MODE_INPUT},
|
||||
{AT91C_BASE_PIOA, // B1..4 Joystick
|
||||
PIOA_B1_MASK|PIOA_B2_MASK|PIOA_B3_MASK|PIOA_B4_MASK|PIOA_B5_MASK,
|
||||
PIOA_B1_MASK|PIOA_B2_MASK|PIOA_B3_MASK|PIOA_B4_MASK|PIOA_B5_MASK,
|
||||
PAL_MODE_INPUT},
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _GDISP_LLD_TOGGLE_BOARD_H */
|
||||
/** @} */
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/ginput/togglePal/ginput_lld_toggle_board_olimexsam7ex256.h
|
||||
* @brief GINPUT Toggle low level driver source for the ChibiOS PAL hardware on the Olimex SAM7EX256 board.
|
||||
*
|
||||
* @addtogroup GINPUT_TOGGLE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_TOGGLE_BOARD_H
|
||||
#define _GDISP_LLD_TOGGLE_BOARD_H
|
||||
|
||||
#define GINPUT_TOGGLE_NUM_PORTS 7 // The total number of toggle inputs
|
||||
#define GINPUT_TOGGLE_CONFIG_ENTRIES 2 // The total number of GToggleConfig entries
|
||||
|
||||
#define GINPUT_TOGGLE_SW1 0 // Switch 1
|
||||
#define GINPUT_TOGGLE_SW2 1 // Switch 2
|
||||
#define GINPUT_TOGGLE_UP 2 // Joystick Up
|
||||
#define GINPUT_TOGGLE_DOWN 3 // Joystick Down
|
||||
#define GINPUT_TOGGLE_LEFT 4 // Joystick Left
|
||||
#define GINPUT_TOGGLE_RIGHT 5 // Joystick Right
|
||||
#define GINPUT_TOGGLE_CENTER 6 // Joystick Center
|
||||
|
||||
#ifdef GINPUT_TOGGLE_DECLARE_CONFIG
|
||||
// Visible in ginput_lld_toggle.c
|
||||
|
||||
const GToggleConfig GInputToggleConfigTable[GINPUT_TOGGLE_CONFIG_ENTRIES] = {
|
||||
{AT91C_BASE_PIOB, // Switch 1 and Switch 2
|
||||
PIOB_SW1_MASK|PIOB_SW2_MASK,
|
||||
PIOB_SW1_MASK|PIOB_SW2_MASK,
|
||||
PAL_MODE_INPUT},
|
||||
{AT91C_BASE_PIOA, // B1..4 Joystick
|
||||
PIOA_B1_MASK|PIOA_B2_MASK|PIOA_B3_MASK|PIOA_B4_MASK|PIOA_B5_MASK,
|
||||
PIOA_B1_MASK|PIOA_B2_MASK|PIOA_B3_MASK|PIOA_B4_MASK|PIOA_B5_MASK,
|
||||
PAL_MODE_INPUT},
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _GDISP_LLD_TOGGLE_BOARD_H */
|
||||
/** @} */
|
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/ginput/togglePal/ginput_lld_toggle_config.h
|
||||
* @brief GINPUT Toggle Driver configuration header.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GINPUT_LLD_TOGGLE_CONFIG_H
|
||||
#define _GINPUT_LLD_TOGGLE_CONFIG_H
|
||||
|
||||
#if GFX_USE_GINPUT && GINPUT_NEED_TOGGLE
|
||||
|
||||
#if defined(BOARD_OLIMEX_SAM7_EX256)
|
||||
#include "ginput_lld_toggle_board_olimexsam7ex256.h"
|
||||
#else
|
||||
/* Include the user supplied board definitions */
|
||||
#include "ginput_lld_toggle_board.h"
|
||||
#endif
|
||||
|
||||
#endif /* GFX_USE_GDISP && GINPUT_NEED_TOGGLE */
|
||||
|
||||
#endif /* _GINPUT_LLD_TOGGLE_CONFIG_H */
|
||||
/** @} */
|
|
@ -0,0 +1,13 @@
|
|||
To use this driver:
|
||||
|
||||
1. Add in your halconf.h:
|
||||
a) #define GFX_USE_GINPUT TRUE
|
||||
#define GINPUT_NEED_TOGGLE TRUE
|
||||
d) If you are not using a known board then create a ginput_lld_toggle_board.h file
|
||||
and ensure it is on your include path.
|
||||
Use the ginput_lld_toggle_board_example.h file as a basis.
|
||||
Currently known boards are:
|
||||
Olimex SAM7-EX256
|
||||
|
||||
2. To your makefile add the following lines:
|
||||
include $(GFXLIB)/drivers/ginput/togglePal/ginput_lld.mk
|
|
@ -0,0 +1,5 @@
|
|||
# List the required driver.
|
||||
GFXSRC += $(GFXLIB)/drivers/ginput/touch/ADS7843/ginput_lld_mouse.c
|
||||
|
||||
# Required include directories
|
||||
GFXINC += $(GFXLIB)/drivers/ginput/touch/ADS7843
|
|
@ -0,0 +1,139 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/ginput/touch/ADS7843/ginput_lld_mouse.c
|
||||
* @brief GINPUT Touch low level driver source for the ADS7843.
|
||||
*
|
||||
* @addtogroup GINPUT_MOUSE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
#if (GFX_USE_GINPUT && GINPUT_NEED_MOUSE) /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
#include "lld/ginput/mouse.h"
|
||||
|
||||
#if defined(GINPUT_MOUSE_USE_CUSTOM_BOARD) && GINPUT_MOUSE_USE_CUSTOM_BOARD
|
||||
/* Include the user supplied board definitions */
|
||||
#include "ginput_lld_mouse_board.h"
|
||||
//#elif defined(BOARD_OLIMEX_SAM7_EX256)
|
||||
// #include "ginput_lld_mouse_board_olimexsam7ex256.h"
|
||||
#else
|
||||
#include "ginput_lld_mouse_board.h"
|
||||
#endif
|
||||
|
||||
static uint16_t sampleBuf[7];
|
||||
static coord_t lastx, lasty;
|
||||
|
||||
/**
|
||||
* @brief 7-point median filtering code for touch samples
|
||||
*
|
||||
* @note This is an internally used routine only.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static void filter(void) {
|
||||
uint16_t temp;
|
||||
int i,j;
|
||||
|
||||
for(i = 0; i < 4; i++) {
|
||||
for(j = i; j < 7; j++) {
|
||||
if(sampleBuf[i] > sampleBuf[j]) {
|
||||
/* Swap the values */
|
||||
temp = sampleBuf[i];
|
||||
sampleBuf[i] = sampleBuf[j];
|
||||
sampleBuf[j] = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Initialise the mouse/touch.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void ginput_lld_mouse_init(void) {
|
||||
init_board();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read the mouse/touch position.
|
||||
*
|
||||
* @param[in] pt A pointer to the structure to fill
|
||||
*
|
||||
* @note For drivers that don't support returning a position
|
||||
* when the touch is up (most touch devices), it should
|
||||
* return the previous position with the new Z value.
|
||||
* The z value is the pressure for those touch devices
|
||||
* that support it (-100 to 100 where > 0 is touched)
|
||||
* or, 0 or 100 for those drivers that don't.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void ginput_lld_mouse_get_reading(MouseReading *pt) {
|
||||
// If touch-off return the previous results
|
||||
if (!getpin_pressed()) {
|
||||
pt->x = lastx;
|
||||
pt->y = lasty;
|
||||
pt->z = 0;
|
||||
pt->buttons = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
// Read the port to get the touch settings
|
||||
aquire_bus();
|
||||
|
||||
/* Get the X value
|
||||
* Discard the first conversion - very noisy and keep the ADC on hereafter
|
||||
* till we are done with the sampling. Note that PENIRQ is disabled while reading.
|
||||
* Finally switch on PENIRQ once again - perform a dummy read.
|
||||
* Once we have the readings, find the medium using our filter function
|
||||
*/
|
||||
read_value(0xD1);
|
||||
for(i = 0; i < 7; i++)
|
||||
sampleBuf[i] = read_value(0xD1);
|
||||
read_value(0xD0);
|
||||
filter();
|
||||
lastx = (coord_t)sampleBuf[3];
|
||||
|
||||
/* Get the Y value using the same process as above */
|
||||
read_value(0x91);
|
||||
for(i = 0; i < 7; i++)
|
||||
sampleBuf[i] = read_value(0x91);
|
||||
read_value(0x90);
|
||||
filter();
|
||||
lasty = (coord_t)sampleBuf[3];
|
||||
|
||||
// Release the bus
|
||||
release_bus();
|
||||
|
||||
// Return the results
|
||||
pt->x = lastx;
|
||||
pt->y = lasty;
|
||||
pt->z = 100;
|
||||
pt->buttons = GINPUT_TOUCH_PRESSED;
|
||||
}
|
||||
|
||||
#endif /* GFX_USE_GINPUT && GINPUT_NEED_MOUSE */
|
||||
/** @} */
|
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/ginput/touch/ADS7843/ginput_lld_mouse_board_example.h
|
||||
* @brief GINPUT Touch low level driver source for the ADS7843 on the example board.
|
||||
*
|
||||
* @addtogroup GINPUT_MOUSE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GINPUT_LLD_MOUSE_BOARD_H
|
||||
#define _GINPUT_LLD_MOUSE_BOARD_H
|
||||
|
||||
/**
|
||||
* @brief Initialise the board for the touch.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void init_board(void) {
|
||||
/* Code here */
|
||||
#error "ginputADS7843: You must supply a definition for init_board for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check whether the surface is currently touched
|
||||
* @return TRUE if the surface is currently touched
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline bool_t getpin_pressed(void) {
|
||||
/* Code here */
|
||||
#error "ginputADS7843: You must supply a definition for getpin_pressed for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Aquire the bus ready for readings
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void aquire_bus(void) {
|
||||
/* Code here */
|
||||
#error "ginputADS7843: You must supply a definition for aquire_bus for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Release the bus after readings
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void release_bus(void) {
|
||||
/* Code here */
|
||||
#error "ginputADS7843: You must supply a definition for release_bus for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read a value from touch controller
|
||||
* @return The value read from the controller
|
||||
*
|
||||
* params[in] port The controller port to read.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline uint16_t read_value(uint16_t port) {
|
||||
/* Code here */
|
||||
#error "ginputADS7843: You must supply a definition for read_value for your board"
|
||||
}
|
||||
|
||||
#endif /* _GINPUT_LLD_MOUSE_BOARD_H */
|
||||
/** @} */
|
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/ginput/touch/ADS7843/ginput_lld_mouse_board_unknown.h
|
||||
* @brief GINPUT Touch low level driver source for the ADS7843 on some unknown board.
|
||||
*
|
||||
* @addtogroup GINPUT_MOUSE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GINPUT_LLD_MOUSE_BOARD_H
|
||||
#define _GINPUT_LLD_MOUSE_BOARD_H
|
||||
|
||||
/**
|
||||
* @brief Initialise the board for the touch.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void init_board(void) {
|
||||
spiStart(TOUCH_SPIDriver, TOUCH_SPIConfig);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check whether the surface is currently touched
|
||||
* @return TRUE if the surface is currently touched
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline bool_t getpin_pressed(void) {
|
||||
return !palReadPad(TOUCH_PressedPort, TOUCH_PressedPin);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Aquire the bus ready for readings
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void aquire_bus(void) {
|
||||
#if defined(SPI_USE_MUTUAL_EXCLUSION)
|
||||
spiAcquireBus(TOUCH_SPIDriver);
|
||||
#endif
|
||||
|
||||
GINPUT_TOUCH_SPI_PROLOGUE();
|
||||
palClearPad(TOUCH_SPIConfig->ssport, TOUCH_SPIConfig->sspad);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Release the bus after readings
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void release_bus(void) {
|
||||
palSetPad(TOUCH_SPIConfig->ssport, TOUCH_SPIConfig->sspad);
|
||||
GINPUT_TOUCH_SPI_EPILOGUE();
|
||||
|
||||
#if defined(SPI_USE_MUTUAL_EXCLUSION)
|
||||
spiReleaseBus(tsDriver->spip);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read a value from touch controller
|
||||
* @return The value read from the controller
|
||||
*
|
||||
* params[in] port The controller port to read.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline uint16_t read_value(uint16_t port) {
|
||||
static uint8_t txbuf[3] = {0};
|
||||
static uint8_t rxbuf[3] = {0};
|
||||
|
||||
txbuf[0] = cmd;
|
||||
spiExchange(TOUCH_SPIDriver, 3, txbuf, rxbuf);
|
||||
return (rxbuf[1] << 5) | (rxbuf[2] >> 3);
|
||||
}
|
||||
|
||||
#endif /* _GINPUT_LLD_MOUSE_BOARD_H */
|
||||
/** @} */
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file drivers/ginput/touch/ADS7843/ginput_lld_mouse_config.h
|
||||
* @brief GINPUT LLD header file for mouse/touch driver.
|
||||
*
|
||||
* @addtogroup GINPUT_LLD_MOUSE
|
||||
* @{
|
||||
*/
|
||||
#ifndef _LLD_GINPUT_MOUSE_CONFIG_H
|
||||
#define _LLD_GINPUT_MOUSE_CONFIG_H
|
||||
|
||||
#define GINPUT_MOUSE_EVENT_TYPE GEVENT_TOUCH
|
||||
#define GINPUT_MOUSE_NEED_CALIBRATION TRUE
|
||||
#define GINPUT_MOUSE_LLD_CALIBRATION_LOADSAVE FALSE
|
||||
#define GINPUT_MOUSE_MAX_CALIBRATION_ERROR 2
|
||||
#define GINPUT_MOUSE_READ_CYCLES 4
|
||||
#define GINPUT_MOUSE_POLL_PERIOD 100
|
||||
#define GINPUT_MOUSE_MAX_CLICK_JITTER 2
|
||||
#define GINPUT_MOUSE_MAX_MOVE_JITTER 2
|
||||
#define GINPUT_MOUSE_CLICK_TIME 700
|
||||
|
||||
#endif /* _LLD_GINPUT_MOUSE_CONFIG_H */
|
||||
/** @} */
|
|
@ -0,0 +1,9 @@
|
|||
To use this driver:
|
||||
|
||||
1. Add in your halconf.h:
|
||||
a) #define GFX_USE_GINPUT TRUE
|
||||
b) #define GINPUT_NEED_MOUSE TRUE
|
||||
|
||||
2. To your makefile add the following lines:
|
||||
include $(GFXLIB)/drivers/ginput/touch/ADS7843/ginput_lld.mk
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# List the required driver.
|
||||
GFXSRC += $(GFXLIB)/drivers/ginput/touch/MCU/ginput_lld_mouse.c
|
||||
|
||||
# Required include directories
|
||||
GFXINC += $(GFXLIB)/drivers/ginput/touch/MCU
|
|
@ -0,0 +1,136 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/ginput/touch/MCU/ginput_lld_mouse.c
|
||||
* @brief GINPUT Touch low level driver source for the MCU.
|
||||
*
|
||||
* @addtogroup GINPUT_MOUSE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
#if (GFX_USE_GINPUT && GINPUT_NEED_MOUSE) /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
#include "lld/ginput/touch.h"
|
||||
|
||||
#if defined(GINPUT_MOUSE_USE_CUSTOM_BOARD) && GINPUT_MOUSE_USE_CUSTOM_BOARD
|
||||
/* Include the user supplied board definitions */
|
||||
#include "ginput_lld_mouse_board.h"
|
||||
//#elif defined(BOARD_OLIMEX_SAM7_EX256)
|
||||
// #include "ginput_lld_mouse_board_olimexsam7ex256.h"
|
||||
#else
|
||||
#include "ginput_lld_mouse_board.h"
|
||||
#endif
|
||||
|
||||
static uint16_t sampleBuf[7];
|
||||
static coord_t lastx, lasty;
|
||||
|
||||
/**
|
||||
* @brief 7-point median filtering code for touchscreen samples
|
||||
*
|
||||
* @note This is an internally used routine only.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static void filter(void) {
|
||||
uint16_t temp;
|
||||
int i,j;
|
||||
|
||||
for(i = 0; i < 4; i++) {
|
||||
for(j = i; j < 7; j++) {
|
||||
if(sampleBuf[i] > sampleBuf[j]) {
|
||||
/* Swap the values */
|
||||
temp = sampleBuf[i];
|
||||
sampleBuf[i] = sampleBuf[j];
|
||||
sampleBuf[j] = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Initialise the mouse/touch.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void ginput_lld_mouse_init(void) {
|
||||
init_board();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read the mouse/touch position.
|
||||
*
|
||||
* @param[in] pt A pointer to the structure to fill
|
||||
*
|
||||
* @note For drivers that don't support returning a position
|
||||
* when the touch is up (most touch devices), it should
|
||||
* return the previous position with the new Z value.
|
||||
* The z value is the pressure for those touch devices
|
||||
* that support it (-100 to 100 where > 0 is touched)
|
||||
* or, 0 or 100 for those drivers that don't.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void ginput_lld_mouse_get_reading(MouseReading *pt) {
|
||||
// If touch-off return the previous results
|
||||
if (!getpin_pressed()) {
|
||||
pt->x = lastx;
|
||||
pt->y = lasty;
|
||||
pt->z = 0;
|
||||
pt->buttons = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
// Read the port to get the touch settings
|
||||
aquire_bus();
|
||||
|
||||
/* Get the X value
|
||||
* Discard the first conversion - very noisy and keep the ADC on hereafter
|
||||
* till we are done with the sampling.
|
||||
* Once we have the readings, find the medium using our filter function
|
||||
*/
|
||||
read_x_value();
|
||||
for(i = 0; i < 7; i++)
|
||||
sampleBuf[i] = read_x_value();
|
||||
filter();
|
||||
lastx = (coord_t)sampleBuf[3];
|
||||
|
||||
/* Get the Y value using the same process as above */
|
||||
read_y_value();
|
||||
for(i = 0; i < 7; i++)
|
||||
sampleBuf[i] = read_y_value();
|
||||
filter();
|
||||
lasty = (coord_t)sampleBuf[3];
|
||||
|
||||
// Release the bus
|
||||
release_bus();
|
||||
|
||||
// Return the results
|
||||
pt->x = lastx;
|
||||
pt->y = lasty;
|
||||
pt->z = 100;
|
||||
pt->buttons = GINPUT_TOUCH_PRESSED;
|
||||
}
|
||||
|
||||
#endif /* GFX_USE_GINPUT && GINPUT_NEED_MOUSE */
|
||||
/** @} */
|
|
@ -0,0 +1,96 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/ginput/touch/MCU/ginput_lld_mouse_board_example.h
|
||||
* @brief GINPUT Touch low level driver source for the MCU on the example board.
|
||||
*
|
||||
* @addtogroup GINPUT_MOUSE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GINPUT_LLD_MOUSE_BOARD_H
|
||||
#define _GINPUT_LLD_MOUSE_BOARD_H
|
||||
|
||||
/**
|
||||
* @brief Initialise the board for the touch.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void init_board(void) {
|
||||
/* Code here */
|
||||
#error "ginputMCU: You must supply a definition for init_board for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check whether the surface is currently touched
|
||||
* @return TRUE if the surface is currently touched
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline bool_t getpin_pressed(void) {
|
||||
/* Code here */
|
||||
#error "ginputMCU: You must supply a definition for getpin_pressed for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Aquire the bus ready for readings
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void aquire_bus(void) {
|
||||
/* Code here */
|
||||
#error "ginputMCU: You must supply a definition for aquire_bus for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Release the bus after readings
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void release_bus(void) {
|
||||
/* Code here */
|
||||
#error "ginputMCU: You must supply a definition for release_bus for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read an x value from touch controller
|
||||
* @return The value read from the controller
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline uint16_t read_x_value(void) {
|
||||
/* Code here */
|
||||
#error "ginputMCU: You must supply a definition for read_x_value for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read an y value from touch controller
|
||||
* @return The value read from the controller
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline uint16_t read_y_value(void) {
|
||||
/* Code here */
|
||||
#error "ginputMCU: You must supply a definition for read_y_value for your board"
|
||||
}
|
||||
|
||||
#endif /* _GINPUT_LLD_MOUSE_BOARD_H */
|
||||
/** @} */
|
|
@ -0,0 +1,174 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/ginput/touch/MCU/ginput_lld_mouse_board_unknown.h
|
||||
* @brief GINPUT Touch low level driver source for the MCU on some unknown board.
|
||||
*
|
||||
* @addtogroup GINPUT_MOUSE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GINPUT_LLD_MOUSE_BOARD_H
|
||||
#define _GINPUT_LLD_MOUSE_BOARD_H
|
||||
|
||||
#define ADC_NUM_CHANNELS 2
|
||||
#define ADC_BUF_DEPTH 1
|
||||
|
||||
static const ADCConversionGroup adc_y_config = {
|
||||
FALSE,
|
||||
ADC_NUM_CHANNELS,
|
||||
NULL,
|
||||
NULL,
|
||||
0, 0,
|
||||
0, 0,
|
||||
ADC_SQR1_NUM_CH(ADC_NUM_CHANNELS),
|
||||
0,
|
||||
ADC_SQR3_SQ2_N(ADC_CHANNEL_IN12) | ADC_SQR3_SQ1_N(ADC_CHANNEL_IN13)
|
||||
};
|
||||
|
||||
static const ADCConversionGroup adc_x_config = {
|
||||
FALSE,
|
||||
ADC_NUM_CHANNELS,
|
||||
NULL,
|
||||
NULL,
|
||||
0, 0,
|
||||
0, 0,
|
||||
ADC_SQR1_NUM_CH(ADC_NUM_CHANNELS),
|
||||
0,
|
||||
ADC_SQR3_SQ2_N(ADC_CHANNEL_IN10) | ADC_SQR3_SQ1_N(ADC_CHANNEL_IN11)
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Initialise the board for the mouse/touch.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void init_board(void) {
|
||||
/* Code here */
|
||||
#error "ginputMCU: You must supply a definition for init_board for your board
|
||||
|
||||
adcStart(ts->adc_driver, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check whether the surface is currently touched
|
||||
* @return TRUE if the surface is currently touched
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline bool_t getpin_pressed(void) {
|
||||
/* Code here */
|
||||
#error "ginputMCU: You must supply a definition for getpin_pressed for your board"
|
||||
palSetPadMode(ts->yd_port, ts->yd_pin, PAL_MODE_INPUT_PULLDOWN);
|
||||
palSetPadMode(ts->yu_port, ts->yu_pin, PAL_MODE_INPUT);
|
||||
palSetPadMode(ts->xl_port, ts->xl_pin, PAL_MODE_INPUT);
|
||||
palSetPadMode(ts->xr_port, ts->xr_pin, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
palSetPad(ts->xr_port, ts->xr_pin);
|
||||
|
||||
return palReadPad(ts->yd_port, ts->yd_pin);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Aquire the bus ready for readings
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void aquire_bus(void) {
|
||||
/* Code here */
|
||||
#error "ginputMCU: You must supply a definition for aquire_bus for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Release the bus after readings
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void release_bus(void) {
|
||||
/* Code here */
|
||||
#error "ginputMCU: You must supply a definition for release_bus for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read an x value from touch controller
|
||||
* @return The value read from the controller
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline uint16_t read_x_value(void) {
|
||||
/* Code here */
|
||||
#error "ginputMCU: You must supply a definition for read_x_value for your board"
|
||||
uint16_t val1, val2;
|
||||
adcsample_t samples[ADC_NUM_CHANNELS * ADC_BUF_DEPTH];
|
||||
|
||||
palSetPadMode(ts->yd_port, ts->yd_pin, PAL_MODE_INPUT_ANALOG);
|
||||
palSetPadMode(ts->yu_port, ts->yu_pin, PAL_MODE_INPUT_ANALOG);
|
||||
palSetPadMode(ts->xl_port, ts->xl_pin, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
palSetPadMode(ts->xr_port, ts->xr_pin, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
|
||||
palSetPad(ts->xl_port, ts->xl_pin);
|
||||
palClearPad(ts->xr_port, ts->xr_pin);
|
||||
chThdSleepMilliseconds(1);
|
||||
adcConvert(ts->adc_driver, &adc_x_config, samples, ADC_BUF_DEPTH);
|
||||
val1 = ((samples[0] + samples[1])/2);
|
||||
|
||||
palClearPad(ts->xl_port, ts->xl_pin);
|
||||
palSetPad(ts->xr_port, ts->xr_pin);
|
||||
chThdSleepMilliseconds(1);
|
||||
adcConvert(ts->adc_driver, &adc_x_config, samples, ADC_BUF_DEPTH);
|
||||
val2 = ((samples[0] + samples[1])/2);
|
||||
|
||||
return ((val1+((1<<12)-val2))/4);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read an y value from touch controller
|
||||
* @return The value read from the controller
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline uint16_t read_y_value(void) {
|
||||
/* Code here */
|
||||
#error "ginputMCU: You must supply a definition for read_y_value for your board"
|
||||
uint16_t val1, val2;
|
||||
adcsample_t samples[ADC_NUM_CHANNELS * ADC_BUF_DEPTH];
|
||||
|
||||
palSetPadMode(ts->xl_port, ts->xl_pin, PAL_MODE_INPUT_ANALOG);
|
||||
palSetPadMode(ts->xr_port, ts->xr_pin, PAL_MODE_INPUT_ANALOG);
|
||||
palSetPadMode(ts->yd_port, ts->yd_pin, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
palSetPadMode(ts->yu_port, ts->yu_pin, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
|
||||
palSetPad(ts->yu_port, ts->yu_pin);
|
||||
palClearPad(ts->yd_port, ts->yd_pin);
|
||||
chThdSleepMilliseconds(1);
|
||||
adcConvert(ts->adc_driver, &adc_y_config, samples, ADC_BUF_DEPTH);
|
||||
val1 = ((samples[0] + samples[1])/2);
|
||||
|
||||
palClearPad(ts->yu_port, ts->yu_pin);
|
||||
palSetPad(ts->yd_port, ts->yd_pin);
|
||||
chThdSleepMilliseconds(1);
|
||||
adcConvert(ts->adc_driver, &adc_y_config, samples, ADC_BUF_DEPTH);
|
||||
val2 = ((samples[0] + samples[1])/2);
|
||||
|
||||
return ((val1+((1<<12)-val2))/4);
|
||||
}
|
||||
|
||||
#endif /* _GINPUT_LLD_MOUSE_BOARD_H */
|
||||
/** @} */
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file drivers/ginput/touch/MCU/ginput_lld_mouse_config.h
|
||||
* @brief GINPUT LLD header file for touch driver.
|
||||
*
|
||||
* @addtogroup GINPUT_LLD_MOUSE
|
||||
* @{
|
||||
*/
|
||||
#ifndef _LLD_GINPUT_MOUSE_CONFIG_H
|
||||
#define _LLD_GINPUT_MOUSE_CONFIG_H
|
||||
|
||||
#define GINPUT_MOUSE_EVENT_TYPE GEVENT_TOUCH
|
||||
#define GINPUT_MOUSE_NEED_CALIBRATION TRUE
|
||||
#define GINPUT_MOUSE_LLD_CALIBRATION_LOADSAVE FALSE
|
||||
#define GINPUT_MOUSE_MAX_CALIBRATION_ERROR 2
|
||||
#define GINPUT_MOUSE_READ_CYCLES 4
|
||||
#define GINPUT_MOUSE_POLL_PERIOD 100
|
||||
#define GINPUT_MOUSE_MAX_CLICK_JITTER 2
|
||||
#define GINPUT_MOUSE_MAX_MOVE_JITTER 2
|
||||
#define GINPUT_MOUSE_CLICK_TIME 700
|
||||
|
||||
#endif /* _LLD_GINPUT_MOUSE_CONFIG_H */
|
||||
/** @} */
|
|
@ -0,0 +1,9 @@
|
|||
To use this driver:
|
||||
|
||||
1. Add in your halconf.h:
|
||||
a) #define GFX_USE_GINPUT TRUE
|
||||
b) #define GINPUT_NEED_MOUSE TRUE
|
||||
|
||||
2. To your makefile add the following lines:
|
||||
include $(GFXLIB)/drivers/ginput/touch/MCU/ginput_lld.mk
|
||||
|
|
@ -29,12 +29,14 @@
|
|||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "touchscreen.h"
|
||||
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include mouse support code */
|
||||
#include "lld/ginput/mouse.h"
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "gdisp_emulation.c"
|
||||
#include "lld/gdisp/emulation.c"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
@ -60,7 +62,7 @@ static HBITMAP dcBitmap = NULL;
|
|||
static HBITMAP dcOldBitmap;
|
||||
static volatile bool_t isReady = FALSE;
|
||||
static coord_t mousex, mousey;
|
||||
static bool_t mousedn;
|
||||
static uint16_t mousebuttons;
|
||||
|
||||
static LRESULT myWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
|
@ -70,28 +72,34 @@ static LRESULT myWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
|||
switch (Msg) {
|
||||
case WM_CREATE:
|
||||
break;
|
||||
#if GINPUT_NEED_MOUSE
|
||||
case WM_LBUTTONDOWN:
|
||||
mousedn = TRUE;
|
||||
mousex = (coord_t)LOWORD(lParam);
|
||||
mousey = (coord_t)HIWORD(lParam);
|
||||
break;
|
||||
mousebuttons = 0x0001;
|
||||
goto mousemove;
|
||||
case WM_LBUTTONUP:
|
||||
mousedn = FALSE;
|
||||
mousex = (coord_t)LOWORD(lParam);
|
||||
mousey = (coord_t)HIWORD(lParam);
|
||||
break;
|
||||
case WM_MOUSEMOVE:
|
||||
mousex = (coord_t)LOWORD(lParam);
|
||||
mousey = (coord_t)HIWORD(lParam);
|
||||
break;
|
||||
case WM_LBUTTONDBLCLK:
|
||||
mousebuttons &= ~0x0001;
|
||||
goto mousemove;
|
||||
case WM_MBUTTONDOWN:
|
||||
mousebuttons = 0x0004;
|
||||
goto mousemove;
|
||||
case WM_MBUTTONUP:
|
||||
case WM_MBUTTONDBLCLK:
|
||||
mousebuttons &= ~0x0004;
|
||||
goto mousemove;
|
||||
case WM_RBUTTONDOWN:
|
||||
mousebuttons = 0x0002;
|
||||
goto mousemove;
|
||||
case WM_RBUTTONUP:
|
||||
case WM_RBUTTONDBLCLK:
|
||||
mousebuttons &= ~0x0002;
|
||||
goto mousemove;
|
||||
case WM_MOUSEMOVE:
|
||||
mousemove:
|
||||
mousex = (coord_t)LOWORD(lParam);
|
||||
mousey = (coord_t)HIWORD(lParam);
|
||||
#if GINPUT_MOUSE_POLL_PERIOD == TIME_INFINITE
|
||||
ginputMouseWakeup();
|
||||
#endif
|
||||
break;
|
||||
#endif
|
||||
case WM_SYSKEYDOWN:
|
||||
case WM_KEYDOWN:
|
||||
case WM_SYSKEYUP:
|
||||
|
@ -882,70 +890,20 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) {
|
|||
}
|
||||
#endif
|
||||
|
||||
#if GFX_USE_TOUCHSCREEN /*|| defined(__DOXYGEN__)*/
|
||||
#if GINPUT_NEED_MOUSE
|
||||
|
||||
void ts_store_calibration_lld(struct cal_t *cal) {
|
||||
(void) cal;
|
||||
// Just ignore the calibration data - we implicitly know the calibration
|
||||
#include "lld/ginput/mouse.h"
|
||||
|
||||
void ginput_lld_mouse_init(void) {}
|
||||
|
||||
void ginput_lld_mouse_get_reading(MouseReading *pt) {
|
||||
pt->x = mousex;
|
||||
pt->y = mousey;
|
||||
pt->z = (mousebuttons & 0x0001) ? 100 : 0;
|
||||
pt->buttons = mousebuttons; // We auto-magicaly know that the mousebutton bits match the MouseReading bits.
|
||||
}
|
||||
|
||||
struct cal_t *ts_restore_calibration_lld(void) {
|
||||
static struct cal_t cal = { 1.0, 0.0, 0.0, 0.0, 1.0, 0.0 };
|
||||
// Our x,y is always already calibrated.
|
||||
return &cal;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Low level touchscreen driver initialization.
|
||||
*
|
||||
* @param[in] ts The touchscreen driver
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void ts_lld_init(const TouchscreenDriver *ts) {
|
||||
(void) ts;
|
||||
// Just ignore everything
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Reads out the X direction.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint16_t ts_lld_read_x(void) {
|
||||
return mousex;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Reads out the Y direction.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint16_t ts_lld_read_y(void) {
|
||||
return mousey;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Reads out the Z direction.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint16_t ts_lld_read_z(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief for checking if touchpad is pressed or not.
|
||||
*
|
||||
* @return 1 if pressed / 0 if not pressed
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint8_t ts_lld_pressed(void) {
|
||||
return (uint8_t)mousedn;
|
||||
}
|
||||
|
||||
#endif /* GFX_USE_TOUCHSCREEN */
|
||||
#endif /* GINPUT_NEED_MOUSE */
|
||||
|
||||
#endif /* GFX_USE_GDISP */
|
||||
/** @} */
|
|
@ -0,0 +1,5 @@
|
|||
# List the required driver.
|
||||
GFXSRC += $(GFXLIB)/drivers/multiple/Win32/gdisp_lld.c
|
||||
|
||||
# Required include directories
|
||||
GFXINC += $(GFXLIB)/drivers/multiple/Win32
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file drivers/gdisp/Win32 |