summaryrefslogtreecommitdiff
path: root/NxWidgets/nxwm/include
diff options
context:
space:
mode:
Diffstat (limited to 'NxWidgets/nxwm/include')
-rw-r--r--NxWidgets/nxwm/include/ccalibration.hxx244
-rw-r--r--NxWidgets/nxwm/include/cstartwindow.hxx2
-rw-r--r--NxWidgets/nxwm/include/ctaskbar.hxx2
-rw-r--r--NxWidgets/nxwm/include/ctouchscreen.hxx106
-rw-r--r--NxWidgets/nxwm/include/nxwmconfig.hxx23
-rw-r--r--NxWidgets/nxwm/include/nxwmglyphs.hxx1
6 files changed, 376 insertions, 2 deletions
diff --git a/NxWidgets/nxwm/include/ccalibration.hxx b/NxWidgets/nxwm/include/ccalibration.hxx
new file mode 100644
index 000000000..9ca5b7589
--- /dev/null
+++ b/NxWidgets/nxwm/include/ccalibration.hxx
@@ -0,0 +1,244 @@
+/****************************************************************************
+ * NxWidgets/nxwm/include/ccalibration.hxx
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX, NxWidgets, nor the names of its contributors
+ * me be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __INCLUDE_CCALIBRATION_HXX
+#define __INCLUDE_CCALIBRATION_HXX
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/nx/nxglib.h>
+
+#include <fixedmath.h>
+
+#include "cnxstring.hxx"
+#include "cwidgeteventhandler.hxx"
+#include "cwidgetcontrol.hxx"
+
+#include "iapplication.hxx"
+#include "cfullscreenwindow.hxx"
+#include "ctouchscreen.hxx"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+/**
+ * Calibration indices
+ */
+
+#define CALIB_UPPER_LEFT_INDEX 0
+#define CALIB_UPPER_RIGHT_INDEX 1
+#define CALIB_LOWER_RIGHT_INDEX 2
+#define CALIB_LOWER_LEFT_INDEX 3
+
+#define CALIB_DATA_POINTS 4
+
+/****************************************************************************
+ * Implementation Classes
+ ****************************************************************************/
+
+namespace NxWM
+{
+ /**
+ * Touchscreen calibration data
+ */
+
+ struct SCalibrationData
+ {
+ b16_t xSlope; // X conversion: xSlope*(x) + xOffset
+ b16_t xOffset;
+ b16_t ySlope; // Y conversion: ySlope*(y) + yOffset
+ b16_t yOffset;
+ };
+
+ /**
+ * The CCalibration class provides the the calibration window and obtains
+ * callibration data.
+ */
+
+ class CCalibration : public IApplication, private NXWidgets::CWidgetEventHandler
+ {
+ private:
+ /**
+ * Identifies the current display state
+ */
+
+ enum ECalibState
+ {
+ CALIB_NOT_STARTED = 0, /**< Constructed, but not yet started */
+ CALIB_UPPER_LEFT, /**< Touch point is in the upper left corner */
+ CALIB_UPPER_RIGHT, /**< Touch point is in the upper right corner */
+ CALIB_LOWER_RIGHT, /**< Touch point is in the lower left corner */
+ CALIB_LOWER_LEFT, /**< Touch point is in the lower right corner */
+ CALIB_COMPLETE /**< Calibration is complete */
+ };
+
+ /**
+ * Characterizes one calibration screen
+ */
+
+ struct SCalibScreenInfo
+ {
+ struct nxgl_point_s pos; /**< The position of the touch point */
+ nxgl_mxpixel_t lineColor; /**< The color of the cross-hair lines */
+ nxgl_mxpixel_t circleFillColor; /**< The color of the circle */
+ };
+
+ /**
+ * CCalibration state data
+ */
+
+ CFullScreenWindow *m_window; /**< The window for the calibration display */
+ CTouchscreen *m_touchscreen; /**< The touchscreen device */
+ enum ECalibState m_state; /**< Current calibration display state */
+ struct SCalibScreenInfo m_screenInfo; /**< Describes the current calibration display */
+ struct nxgl_point_s m_touchPos; /**< This is the last touch position */
+ bool m_stop; /**< True: We have been asked to stop the calibration */
+ bool m_touched; /**< True: The screen is touched */
+ sem_t m_waitSem; /**< Supports wait for calibration data */
+ struct nxgl_point_s m_calibData[CALIB_DATA_POINTS];
+
+ /**
+ * Accept raw touchscreen input.
+ *
+ * @param sample Touchscreen input sample
+ */
+
+ void touchscreenInput(struct touch_sample_s &sample);
+
+ /**
+ * This is the calibration state machine. It is called initially and then
+ * as new touchscreen data is received.
+ */
+
+ void stateMachine(void);
+
+ /**
+ * Handle a mouse button click event.
+ *
+ * @param e The event data.
+ */
+
+ void handleClickEvent(const NXWidgets::CWidgetEventArgs &e);
+
+ /**
+ * Presents the next calibration screen
+ */
+
+ void showCalibration(void);
+
+ public:
+
+ /**
+ * CCalibration Constructor
+ *
+ * @param window. The window to use for the calibration display
+ * @param touchscreen. An instance of the class that wraps the touchscreen device.
+ */
+
+ CCalibration(CFullScreenWindow *window, CTouchscreen *touchscreen);
+
+ /**
+ * CCalibration Destructor
+ */
+
+ ~CCalibration(void);
+
+ /**
+ * Each implementation of IApplication must provide a method to recover
+ * the contained IApplicationWindow instance.
+ */
+
+ IApplicationWindow *getWindow(void) const;
+
+ /**
+ * Get the icon associated with the application
+ *
+ * @return An instance if IBitmap that may be used to rend the
+ * application's icon. This is an new IBitmap instance that must
+ * be deleted by the caller when it is no long needed.
+ */
+
+ NXWidgets::IBitmap *getIcon(void);
+
+ /**
+ * Get the name string associated with the application
+ *
+ * @return A copy if CNxString that contains the name of the application.
+ */
+
+ NXWidgets::CNxString getName(void);
+
+ /**
+ * Start the application (perhaps in the minimized state).
+ *
+ * @return True if the application was successfully started.
+ */
+
+ bool run(void);
+
+ /**
+ * Stop the application.
+ */
+
+ void stop(void);
+
+ /**
+ * The application window is hidden (either it is minimized or it is
+ * maximized, but not at the top of the hierarchy
+ */
+
+ void hide(void);
+
+ /**
+ * Redraw the entire window. The application has been maximized or
+ * otherwise moved to the top of the hierarchy. This method is called from
+ * CTaskbar when the application window must be displayed
+ */
+
+ void redraw(void);
+
+ /**
+ * Wait for calibration data to be received.
+ *
+ * @return True if the calibration data was successfully obtained.
+ */
+
+ bool waitCalibrationData(struct SCalibrationData &data);
+ };
+}
+
+#endif // __INCLUDE_CCALIBRATION_HXX
diff --git a/NxWidgets/nxwm/include/cstartwindow.hxx b/NxWidgets/nxwm/include/cstartwindow.hxx
index 12f15566b..226fbdf03 100644
--- a/NxWidgets/nxwm/include/cstartwindow.hxx
+++ b/NxWidgets/nxwm/include/cstartwindow.hxx
@@ -209,7 +209,7 @@ namespace NxWM
* used during automated testing of NxWM.
*/
-#ifdef CONFIG_NXWM_UNITTEST
+#if defined(CONFIG_NXWM_UNITTEST) && !defined(CONFIG_NXWM_TOUCHSCREEN)
inline void clickIcon(int index)
{
if (index < m_slots.size())
diff --git a/NxWidgets/nxwm/include/ctaskbar.hxx b/NxWidgets/nxwm/include/ctaskbar.hxx
index 7043ef3a1..69595163c 100644
--- a/NxWidgets/nxwm/include/ctaskbar.hxx
+++ b/NxWidgets/nxwm/include/ctaskbar.hxx
@@ -390,7 +390,7 @@ namespace NxWM
* used during automated testing of NxWM.
*/
-#ifdef CONFIG_NXWM_UNITTEST
+#if defined(CONFIG_NXWM_UNITTEST) && !defined(CONFIG_NXWM_TOUCHSCREEN)
inline void clickIcon(int index)
{
if (index < m_slots.size())
diff --git a/NxWidgets/nxwm/include/ctouchscreen.hxx b/NxWidgets/nxwm/include/ctouchscreen.hxx
new file mode 100644
index 000000000..31c61623b
--- /dev/null
+++ b/NxWidgets/nxwm/include/ctouchscreen.hxx
@@ -0,0 +1,106 @@
+/****************************************************************************
+ * NxWidgets/nxwm/include/ctouchscreen.hxx
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX, NxWidgets, nor the names of its contributors
+ * me be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __INCLUDE_CTOUCHSCREEN_HXX
+#define __INCLUDE_CTOUCHSCREEN_HXX
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/nx/nxglib.h>
+
+#include <semaphore.h>
+#include <nuttx/input/touchscreen.h>
+
+#include "cwidgeteventhandler.hxx"
+#include "iapplication.hxx"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Implementation Classes
+ ****************************************************************************/
+
+namespace NxWM
+{
+ /**
+ * The CTouchscreen class provides the the calibration window and obtains
+ * callibration data.
+ */
+
+ class CTouchscreen : public IApplication, private NXWidgets::CWidgetEventHandler
+ {
+ private:
+ int m_touchFd; /**< File descriptor of the opened touchscreen device */
+ sem_t m_waitSem; /**< Semaphore the supports waits for touchscreen data */
+
+ public:
+
+ /**
+ * CTouchscreen Constructor
+ */
+
+ CTouchscreen(void);
+
+ /**
+ * CTouchscreen Destructor
+ */
+
+ ~CTouchscreen(void);
+
+ /**
+ * Initialize the touchscreen device. Initialization is separate from
+ * object instantiation so that failures can be reported.
+ *
+ * @return True if the touchscreen device was correctly initialized
+ */
+
+ bool open(void);
+
+ /**
+ * Capture raw driver data.
+ *
+ *
+ * @return True if the raw touchscreen data was sucessfully obtained
+ */
+
+ bool waitRawTouchData(struct touch_sample_s &touch);
+ };
+}
+
+#endif // __INCLUDE_CTOUCHSCREEN_HXX
diff --git a/NxWidgets/nxwm/include/nxwmconfig.hxx b/NxWidgets/nxwm/include/nxwmconfig.hxx
index 15d0cdad7..4e08b0481 100644
--- a/NxWidgets/nxwm/include/nxwmconfig.hxx
+++ b/NxWidgets/nxwm/include/nxwmconfig.hxx
@@ -321,6 +321,29 @@
# define CONFIG_NXWM_NXCONSOLE_ICON NxWM::g_cmdBitmap
#endif
+/* Touchscreen device *******************************************************/
+
+#ifndef CONFIG_NXWM_TOUCHSCREEN_DEVPATH
+# define CONFIG_NXWM_TOUCHSCREEN_DEVPATH "/dev/input0"
+#endif
+
+/* Calibration display ******************************************************/
+
+#ifndef CONFIG_NXWM_CALIBRATION_BACKGROUNDCOLOR
+# define CONFIG_NXWM_CALIBRATION_BACKGROUNDCOLOR CONFIG_NXWM_DEFAULT_BACKGROUNDCOLOR
+#endif
+
+#ifndef CONFIG_NXWM_CALIBRATION_LINECOLOR
+# define CONFIG_NXWM_CALIBRATION_LINECOLOR MKRGB(0, 0, 128)
+#endif
+
+#ifndef CONFIG_NXWM_CALIBRATION_CIRCLECOLOR
+# define CONFIG_NXWM_CALIBRATION_CIRCLECOLOR MKRGB(255, 255, 255)
+#endif
+
+#ifndef CONFIG_NXWM_CALIBRATION_ICON
+# define CONFIG_NXWM_CALIBRATION_ICON NxWM::g_calibrationBitmap
+#endif
/****************************************************************************
* Global Function Prototypes
****************************************************************************/
diff --git a/NxWidgets/nxwm/include/nxwmglyphs.hxx b/NxWidgets/nxwm/include/nxwmglyphs.hxx
index 6a850179c..64f9a5262 100644
--- a/NxWidgets/nxwm/include/nxwmglyphs.hxx
+++ b/NxWidgets/nxwm/include/nxwmglyphs.hxx
@@ -57,6 +57,7 @@
namespace NxWM
{
+ extern const struct NXWidgets::SRlePaletteBitmap g_calibrationBitmap;
extern const struct NXWidgets::SRlePaletteBitmap g_cmdBitmap;
extern const struct NXWidgets::SRlePaletteBitmap g_minimizeBitmap;
extern const struct NXWidgets::SRlePaletteBitmap g_nshBitmap;