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;
}
Exemplo n.º 2
0
/* 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 */