summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NxWidgets/ChangeLog.txt4
-rw-r--r--NxWidgets/Kconfig10
-rw-r--r--NxWidgets/UnitTests/nxwm/nxwm_main.cxx119
-rw-r--r--apps/ChangeLog.txt5
-rw-r--r--apps/NxWidgets/Kconfig16
-rw-r--r--apps/include/platform/configdata.h164
-rw-r--r--apps/platform/Kconfig11
7 files changed, 295 insertions, 34 deletions
diff --git a/NxWidgets/ChangeLog.txt b/NxWidgets/ChangeLog.txt
index 05ae84939..cbdecf6f7 100644
--- a/NxWidgets/ChangeLog.txt
+++ b/NxWidgets/ChangeLog.txt
@@ -400,3 +400,7 @@
vary with y position (and vice versa) (2013-10-17).
1.10 2013-xx-xx Gregory Nutt <gnutt@nuttx.org>
+
+* Kconfig and UnitTests/nxwm: Add logic to enable saving a recovering
+ touchscreen calibration data. This depends upon having platform-dependent
+ support for storate of configuration data (2013-10-30).
diff --git a/NxWidgets/Kconfig b/NxWidgets/Kconfig
index ef512a5e5..ae71bf997 100644
--- a/NxWidgets/Kconfig
+++ b/NxWidgets/Kconfig
@@ -741,6 +741,16 @@ config NXWM_TOUCHSCREEN_LISTENERSTACK
---help---
Touchscreen listener thread stack size. Default 1024
+config NXWM_TOUSCHCREEN_CONFIGDATA
+ bool "Touchscreen configuration data"
+ default n
+ depends on PLATFORM_CONFIGDATA
+ ---help---
+ If the architecture supports retention of configuration data, then
+ you may select this option to save touchscreen configuration data.
+ Otherwise, the touchscreen calibration must be performed each time
+ that you boot the system.
+
endif # NXWM_TOUCHSCREEN
endmenu # NxWM Touchscreen Configuration
diff --git a/NxWidgets/UnitTests/nxwm/nxwm_main.cxx b/NxWidgets/UnitTests/nxwm/nxwm_main.cxx
index 26ab1b2d3..62b19bb23 100644
--- a/NxWidgets/UnitTests/nxwm/nxwm_main.cxx
+++ b/NxWidgets/UnitTests/nxwm/nxwm_main.cxx
@@ -44,13 +44,17 @@
#include <cstdlib>
#include <cunistd>
+#ifdef CONFIG_NXWM_TOUCHCREEN_CONFIGDATA
+# include <arch/platform/configdata.h>
+#endif
+
#include "ctaskbar.hxx"
#include "cstartwindow.hxx"
#include "cnxconsole.hxx"
#include "chexcalculator.hxx"
#ifdef CONFIG_NXWM_MEDIAPLAYER
-#include "cmediaplayer.hxx"
+# include "cmediaplayer.hxx"
#endif
#ifdef CONFIG_NXWM_TOUCHSCREEN
@@ -95,6 +99,7 @@ struct SNxWmTest
#ifdef CONFIG_NXWM_TOUCHSCREEN
NxWM::CTouchscreen *touchscreen; // The touchscreen
struct NxWM::SCalibrationData calibData; // Calibration data
+ bool calibrated; // True: Touchscreen has been calibrated
#endif
#ifdef CONFIG_NXWIDGET_MEMMONITOR
unsigned int mmInitial; // Initial memory usage
@@ -491,17 +496,46 @@ static bool createCalibration(void)
}
showTestCaseMemory("createCalibration: After creating CCalibration");
- // Call CTaskBar::startApplication to start the Calibration application. Nothing
- // will be displayed because the window manager has not yet been started.
+#ifdef CONFIG_NXWM_TOUCHCREEN_CONFIGDATA
+ // Check if we have previously stored calibration data
- printf("createCalibration: Start the calibration application\n");
- if (!g_nxwmtest.taskbar->startApplication(calibration, false))
+ int ret = platform_getconfig(CONFIGDATA_TSCALIBRATION, 0,
+ (FAR uint8_t *)&g_nxwmtest.calibData,
+ sizeof(struct NxWM::SCalibrationData));
+ if (ret == OK)
{
- printf("createCalibration ERROR: Failed to start the calibration application\n");
- delete calibration;
- return false;
+ // We successfully got the calibration data from the platform-specific
+ // logic. This might fail if (1) calibration data was never saved, or
+ // (2) if some failure occurred while trying to obtain the configuration
+ // data. In either event, the appropriate thing to do is to perform
+ // the calibration.
+
+ // Provide the calibration data to the touchscreen thread
+
+ g_nxwmtest.touchscreen->setCalibrationData(g_nxwmtest.calibData);
+ g_nxwmtest.touchscreen->setEnabled(true);
+ g_nxwmtest.calibrated = true;
}
- showTestCaseMemory("createCalibration: After starting the start window application");
+ else
+#endif
+ {
+ // Call CTaskBar::startApplication to start the Calibration application.
+ // Nothing will be displayed because the window manager has not yet been
+ // started.
+
+ printf("createCalibration: Start the calibration application\n");
+ g_nxwmtest.calibrated = false;
+
+ if (!g_nxwmtest.taskbar->startApplication(calibration, false))
+ {
+ printf("createCalibration ERROR: Failed to start the calibration application\n");
+ delete calibration;
+ return false;
+ }
+
+ showTestCaseMemory("createCalibration: After starting the start window application");
+ }
+
return true;
}
#endif
@@ -727,27 +761,54 @@ int nxwm_main(int argc, char *argv[])
}
#ifdef CONFIG_NXWM_TOUCHSCREEN
- // Since we started the touchscreen calibration program maximized, it will run
- // immediately when we start the window manager. There is no positive handshake
- // to know whenthe touchscreen has been calibrated. If we really want to know,
- // we have to poll
-
- printf("nxwm_main: Waiting for touchscreen calibration\n");
- while (!g_nxwmtest.touchscreen->isCalibrated())
- {
- std::sleep(2);
+#ifdef CONFIG_NXWM_TOUCHCREEN_CONFIGDATA
+ // There are two possibilies: (1) We started the calibration earlier and now
+ // need to obtain the calibration data from the calibration process, or (2)
+ // We have already obtained stored calibration data in which case, the calibration
+ // process never ran.
+
+ if (!g_nxwmtest.calibrated)
+#endif
+ {
+ // Since we started the touchscreen calibration program maximized, it will
+ // run immediately when we start the window manager. There is no positive
+ // handshake to know whenthe touchscreen has been calibrated. If we really
+ // want to know, we have to poll
+
+ printf("nxwm_main: Waiting for touchscreen calibration\n");
+ while (!g_nxwmtest.touchscreen->isCalibrated())
+ {
+ std::sleep(2);
+ }
+
+ // This is how we would then recover the calibration data. After the
+ // calibration application creates the calibration data, it hands it to
+ // the touchscreen driver. After the touchscreen driver gets it, it will
+ // report isCalibrated() == true and then we can read the calibration data
+ // from the touchscreen driver.
+
+ printf("nxwm_main: Getting calibration data from the touchscreen\n");
+ if (!g_nxwmtest.touchscreen->getCalibrationData(g_nxwmtest.calibData))
+ {
+ printf("nxwm_main: ERROR: Failed to get calibration data from the touchscreen\n");
+ }
+ else
+ {
+#ifdef CONFIG_NXWM_TOUCHCREEN_CONFIGDATA
+ // Save the new calibration data so that we do not have to do this
+ // again the next time we start up.
+
+ int ret = platform_setconfig(CONFIGDATA_TSCALIBRATION, 0,
+ (FAR const uint8_t *)&g_nxwmtest.calibData,
+ sizeof(struct NxWM::SCalibrationData));
+ if (ret != 0)
+ {
+ printf("nxwm_main: ERROR: Failed to save calibration data\n");
+ }
+#endif
+ g_nxwmtest.calibrated = true;
+ }
}
-
- // This is how we would then recover the calibration data. After the calibration
- // application creates the calibration data, it hands it to the touchscreen driver
- // After the touchscreen driver gets it, it will report isCalibrated() == true
- // and then we can read the calibration data from the touchscreen driver.
-
- printf("nxwm_main: Getting calibration data from the touchscreen\n");
- if (!g_nxwmtest.touchscreen->getCalibrationData(g_nxwmtest.calibData))
- {
- printf("nxwm_main: ERROR: Failed to get calibration data from the touchscreen\n");
- }
#endif
// Wait a little bit for the display to stabilize. Then simulate pressing of
diff --git a/apps/ChangeLog.txt b/apps/ChangeLog.txt
index a75cd6cb1..b12b3e8f4 100644
--- a/apps/ChangeLog.txt
+++ b/apps/ChangeLog.txt
@@ -709,5 +709,6 @@
* apps/platform: A new home for board-specific application code
(2013-10-30).
-
-
+ * apps/include/platform/configdata.h: Define an interface that can be
+ used to manage platform-specific storage of configuration data
+ (2013-10-30).
diff --git a/apps/NxWidgets/Kconfig b/apps/NxWidgets/Kconfig
index 7c7b0b8d4..ae71bf997 100644
--- a/apps/NxWidgets/Kconfig
+++ b/apps/NxWidgets/Kconfig
@@ -567,15 +567,15 @@ config NXWM_CUSTOM_STARTWINDOW_ICON
bool "Custom Start Window Icon"
default n
---help---
- Select to override the default Start Window Icon: NxWM::g_playBitmap
+ Select to override the default Start Window Icon: NxWM::g_playBitmap24x24
if NXWM_CUSTOM_STARTWINDOW_ICON
config NXWM_STARTWINDOW_ICON
string "StartWindow Icon"
- default "NxWM::g_playBitmap"
+ default "NxWM::g_playBitmap24x24"
---help---
- The glyph to use as the start window icon. Default: NxWM::g_playBitmap
+ The glyph to use as the start window icon. Default: NxWM::g_playBitmap24x24
endif # NXWM_CUSTOM_STARTWINDOW_ICON
@@ -741,6 +741,16 @@ config NXWM_TOUCHSCREEN_LISTENERSTACK
---help---
Touchscreen listener thread stack size. Default 1024
+config NXWM_TOUSCHCREEN_CONFIGDATA
+ bool "Touchscreen configuration data"
+ default n
+ depends on PLATFORM_CONFIGDATA
+ ---help---
+ If the architecture supports retention of configuration data, then
+ you may select this option to save touchscreen configuration data.
+ Otherwise, the touchscreen calibration must be performed each time
+ that you boot the system.
+
endif # NXWM_TOUCHSCREEN
endmenu # NxWM Touchscreen Configuration
diff --git a/apps/include/platform/configdata.h b/apps/include/platform/configdata.h
new file mode 100644
index 000000000..956464445
--- /dev/null
+++ b/apps/include/platform/configdata.h
@@ -0,0 +1,164 @@
+/****************************************************************************
+ * apps/include/platform/configdata.h
+ *
+ * Copyright (C) 2013 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 nor the names of its contributors may 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 __APPS_INCLUDE_PLATFORM_CONFIGDATA_H
+#define __APPS_INCLUDE_PLATFORM_CONFIGDATA_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+
+#ifdef CONFIG_PLATFORM_CONFIGDATA
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+/* This enumeration identifies classes of configuration data */
+
+enum config_data_e
+{
+ /* Product identification */
+
+ CONFIGDATA_SERIALNUMBER = 0, /* Product serial number */
+
+ /* Prduct networking configuration */
+
+ CONFIGDATA_MACADDRESS, /* Assigned MAC address */
+ CONFIGDATA_IPADDRESS, /* Configured IP address */
+ CONFIGDATA_NETMASK, /* Configured network mask */
+ CONFIGDATA_DIPADDR, /* Configured default router address */
+
+ /* GUI configuration */
+
+ CONFIGDATA_TSCALIBRATION, /* Measured touchscreen calibration data */
+ CONFIGDATA_OTHER /* Other configuration data */
+};
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#els
+
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: platform_setconfig
+ *
+ * Description:
+ * Save platform-specific configuration data
+ *
+ * Input Parameter:
+ * id - Defines the class of configuration data
+ * instance - Defines which instance of configuration data. For example,
+ * if a board has two networks, then there would be two MAC
+ * addresses: instance 0 and instance 1
+ * configdata - The new configuration data to be saved
+ * datalen - The size of the configuration data in bytes.
+ *
+ * Returned Value:
+ * This is an end-user function, so it follows the normal convention:
+ * Returns the OK (zero) on success. On failure, it.returns -1 (ERROR) and
+ * sets errno appropriately.
+ *
+ * Values for the errno would include:
+ *
+ * EINVAL - The configdata point is invalid
+ * ENOSYS - The request ID/instance is not supported on this platform
+ *
+ * Other errors may be returned from lower level drivers on failure to
+ * write to the underlying media (if applicable)
+ *
+ ****************************************************************************/
+
+int platform_setconfig(enum config_data_e id, int instance,
+ FAR const uint8_t *configdata, size_t datalen);
+
+/****************************************************************************
+ * Name: platform_getconfig
+ *
+ * Description:
+ * Get platform-specific configuration data
+ *
+ * Input Parameter:
+ * id - Defines the class of configuration data
+ * instance - Defines which instance of configuration data. For example,
+ * if a board has two networks, then there would be two MAC
+ * addresses: instance 0 and instance 1
+ * configdata - The user provided location to return the configuration data
+ * datalen - The expected size of the configuration data to be returned.
+ *
+ * Returned Value:
+ * This is an end-user function, so it follows the normal convention:
+ * Returns the OK (zero) on success. On failure, it.returns -1 (ERROR) and
+ * sets errno appropriately.
+ *
+ * Values for the errno would include:
+ *
+ * EINVAL - The configdata point is invalid
+ * ENOSYS - The request ID/instance is not supported on this platform
+ *
+ * Other errors may be returned from lower level drivers on failure to
+ * read from the underlying media (if applicable)
+ *
+ ****************************************************************************/
+
+int platform_getconfig(enum config_data_e id, int instance,
+ FAR uint8_t *configdata, size_t datalen);
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* CONFIG_PLATFORM_CONFIGDATA */
+#endif /* __APPS_INCLUDE_PLATFORM_CONFIGDATA_H */
diff --git a/apps/platform/Kconfig b/apps/platform/Kconfig
index d0cfd0f97..9df459c8a 100644
--- a/apps/platform/Kconfig
+++ b/apps/platform/Kconfig
@@ -3,4 +3,15 @@
# see misc/tools/kconfig-language.txt.
#
+config PLATFORM_CONFIGDATA
+ bool "Platform configuration data"
+ default n
+ ---help---
+ Set this option if the platform retention of configuration data.
+ This storage mechanism is platform dependent and must be implemented
+ in the platform specific directory under apps/platform/. The
+ storage mechanism is not visible to applications so underlying non-
+ volatile storage can be used: A file, EEPROM, hardcoded values in
+ FLASH, etc.
+
source "$APPSDIR/platform/mikroe-stm32f4/Kconfig"