Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: DM_HttpServer DM_USBHost
Dependents: lpc4088_displaymodule_emwin lpc4088_displaymodule_demo_sphere sampleGUI sampleEmptyGUI ... more
Fork of DMSupport by
Revision 33:8a0a99d54bf8, committed 2015-02-19
- Comitter:
- embeddedartists
- Date:
- Thu Feb 19 14:41:14 2015 +0100
- Parent:
- 32:fa8d2c7da38d
- Child:
- 34:fc366bab393f
- Commit message:
- - Added special treatement of touch controller for multitouch
- Corrected button pin name (wrong after switching to LPC4088_DM as target
- Fixed bug in QSPIFileSystem that prevented opening the root folder
Changed in this revision
--- a/DMBoard.cpp Thu Feb 19 12:23:04 2015 +0000
+++ b/DMBoard.cpp Thu Feb 19 14:41:14 2015 +0100
@@ -76,7 +76,7 @@
_qspifs("qspi"),
#endif
_buzzer(P1_5),
- _button(p23),
+ _button(P2_10),
_led1(LED1),
_led2(LED2),
_led3(LED3),
--- a/Display/BiosTouch.cpp Thu Feb 19 12:23:04 2015 +0000
+++ b/Display/BiosTouch.cpp Thu Feb 19 14:41:14 2015 +0100
@@ -123,40 +123,64 @@
mbed_die();
}
memset(_latest, 0, _points*sizeof(touch_coordinate_t));
- while(true) {
- osEvent evt = _mailbox.get(osWaitForever);
- if (evt.status == osEventMail) {
- touch_mail_t* mail = (touch_mail_t*)evt.value.p;
- memcpy(_latest, mail->touch, mail->num * sizeof(touch_coordinate_t));
- _mailbox.free(mail);
- _dbgRemoved++;
- //if (_points == 1) {
- // log->printf("{%3d,%3d,%d} at %u/%u, with %u lost\n",
- // _latest[0].x,
- // _latest[0].y,
- // _latest[0].z,
- // _dbgRemoved, _dbgAdded,
- // _lostData);
- //} else {
- // log->printf("{%d,%d,%d,%d,%d} at %u/%u, with %u lost\n",
- // _latest[0].z,
- // _latest[1].z,
- // _latest[2].z,
- // _latest[3].z,
- // _latest[4].z,
- // _dbgRemoved, _dbgAdded,
- // _lostData);
- //}
- } else {
- log->printf("got non-mail event: 0x%x\n", evt.status);
- continue;
+ if (_points > 1) {
+ // multitouch - inject end event if missing
+ uint32_t maxDelay = osWaitForever;
+ while(true) {
+ osEvent evt = _mailbox.get(maxDelay);
+ if (evt.status == osEventMail) {
+ touch_mail_t* mail = (touch_mail_t*)evt.value.p;
+ memcpy(_latest, mail->touch, mail->num * sizeof(touch_coordinate_t));
+ _mailbox.free(mail);
+ _dbgRemoved++;
+ maxDelay = 25; // wait up to 25ms for next event before injecting a "pen up" event
+ } else if (evt.status == osEventTimeout) {
+ int numNonZero = 0;
+ for (int i = 0; i < _points; i++) {
+ if (_latest[i].z > 0) {
+ numNonZero++;
+ }
+ _latest[i].z = 0;
+ }
+ maxDelay = osWaitForever;
+ if (numNonZero == 0) {
+ // last event was a pen-up event so no need to inject one
+ //log->printf("skip penup\n");
+ continue;
+ }
+ //log->printf("inject penup\n");
+ } else {
+ log->printf("got non-mail event: 0x%x\n", evt.status);
+ continue;
+ }
+ _mutex.lock();
+ FunctionPointer* fp = _listener;
+ _mutex.unlock();
+
+ if (fp != NULL) {
+ fp->call();
+ }
}
- _mutex.lock();
- FunctionPointer* fp = _listener;
- _mutex.unlock();
-
- if (fp != NULL) {
- fp->call();
+ } else {
+ // normal singe-touch
+ while(true) {
+ osEvent evt = _mailbox.get(osWaitForever);
+ if (evt.status == osEventMail) {
+ touch_mail_t* mail = (touch_mail_t*)evt.value.p;
+ memcpy(_latest, mail->touch, mail->num * sizeof(touch_coordinate_t));
+ _mailbox.free(mail);
+ _dbgRemoved++;
+ } else {
+ log->printf("got non-mail event: 0x%x\n", evt.status);
+ continue;
+ }
+ _mutex.lock();
+ FunctionPointer* fp = _listener;
+ _mutex.unlock();
+
+ if (fp != NULL) {
+ fp->call();
+ }
}
}
}
--- a/FileSystems/QSPIFileSystem.cpp Thu Feb 19 12:23:04 2015 +0000
+++ b/FileSystems/QSPIFileSystem.cpp Thu Feb 19 14:41:14 2015 +0100
@@ -1405,6 +1405,11 @@
DirHandle *QSPIFileSystem::opendir(const char *name)
{
if (isformatted()) {
+ if (*name == '\0') {
+ // opendir("/qspi/") will result in a call to this function with name=""
+ return QSPIDirHandle::openDir(name);
+ }
+
FileHandle* fh = open(name, O_RDONLY);
if (fh != NULL) {
// Attempting to open a file as a dir
