TouchADS7843::Event TouchADS7843::Task(void) { Event e; bool oldPen = _rawPen; _rawPen = !gpio_get(GPIOC, BIT13); if (oldPen == 0 && _rawPen == 0) _pen = None; if (oldPen == 0 && _rawPen == 1) _pen = Press; if (oldPen == 1 && _rawPen == 1) _pen = Hold; if (oldPen == 1 && _rawPen == 0) _pen = Release; if (_pen == Press || _pen == Hold) { _rawX = _getPos(0); _rawY = _getPos(1); //calculate adjusted X/Y _x = 320 - (_rawX - _offsetX) / _scaleX; _y = (_rawY - _offsetY) / _scaleY; if (_x > 30000) _x = 0; if (_x > 319) _x = 319; if (_y > 30000) _y = 0; if (_y > 239) _y = 239; } e.X = _x; e.Y = _y; e.Pen = _pen; return e; }
/* Retrieving element level and offset in level (with checking is element in current heap) function */ int GetPos( Heap *heap, void *elem, int *level, long *n ) { long offset = (elem - heap->data) / heap->size; if (offset >= 0 && offset <= _getLevelOffset(heap->base, heap->maxLevel + 1)) { _getPos(heap->base, offset, level, n); return 0; } else return -1; } /* End of 'GetPos' function */