//--------------------------------------------------------------
// interne Funktion
//--------------------------------------------------------------
void P_Touch_Reset(void)
{
  UB_I2C3_WriteByte(STMPE811_I2C_ADDR, IOE_REG_SYS_CTRL1, 0x02);

  UB_I2C3_Delay(STMPE811_DELAY);

  UB_I2C3_WriteByte(STMPE811_I2C_ADDR, IOE_REG_SYS_CTRL1, 0x00);
}
//--------------------------------------------------------------
// interne Funktion
//--------------------------------------------------------------
void P_Touch_Config(void)
{
  P_Touch_FnctCmd(IOE_TP_FCT, ENABLE);
  UB_I2C3_WriteByte(STMPE811_I2C_ADDR, IOE_REG_ADC_CTRL1, 0x49);
  UB_I2C3_Delay(STMPE811_DELAY);
  UB_I2C3_WriteByte(STMPE811_I2C_ADDR, IOE_REG_ADC_CTRL2, 0x01);
  P_Touch_IOAFConfig((uint8_t)TOUCH_IO_ALL, DISABLE);
  UB_I2C3_WriteByte(STMPE811_I2C_ADDR, IOE_REG_TP_CFG, 0x9A);
  UB_I2C3_WriteByte(STMPE811_I2C_ADDR, IOE_REG_FIFO_TH, 0x01);
  UB_I2C3_WriteByte(STMPE811_I2C_ADDR, IOE_REG_FIFO_STA, 0x01);
  UB_I2C3_WriteByte(STMPE811_I2C_ADDR, IOE_REG_FIFO_STA, 0x00);
  UB_I2C3_WriteByte(STMPE811_I2C_ADDR, IOE_REG_TP_FRACT_XYZ, 0x01);
  UB_I2C3_WriteByte(STMPE811_I2C_ADDR, IOE_REG_TP_I_DRIVE, 0x01);
  UB_I2C3_WriteByte(STMPE811_I2C_ADDR, IOE_REG_TP_CTRL, 0x03);
  UB_I2C3_WriteByte(STMPE811_I2C_ADDR, IOE_REG_INT_STA, 0xFF);

  Touch_Data.status = TOUCH_RELEASED;
  Touch_Data.xp = 0;
  Touch_Data.yp = 0;
}
//--------------------------------------------------------------
// auslesen vom Touch-Status und der Touch-Koordinaten
// Return_wert :
//  -> ERROR   , wenn Touch nicht gefunden wurde
//  -> SUCCESS , wenn Touch OK
//
// Touch_Data.status : [TOUCH_PRESSED, TOUCH_RELEASED]
// Touch_Data.xp     : [0...239]
// Touch_Data.yp     : [0...319] 
//--------------------------------------------------------------
ErrorStatus UB_Touch_Read(void)
{
  uint32_t xDiff, yDiff , x , y;
  static uint32_t _x = 0, _y = 0;
  int16_t i2c_wert;
  
  i2c_wert=UB_I2C3_ReadByte(STMPE811_I2C_ADDR, IOE_REG_TP_CTRL);
  if(i2c_wert<0) return(ERROR);
  
  if((i2c_wert&0x80)==0) {
    Touch_Data.status = TOUCH_RELEASED;
  }
  else {
    Touch_Data.status = TOUCH_PRESSED;
  }

  if(Touch_Data.status==TOUCH_PRESSED) {
    x = P_Touch_Read_X();
    y = P_Touch_Read_Y();
    xDiff = x > _x? (x - _x): (_x - x);
    yDiff = y > _y? (y - _y): (_y - y);
    if (xDiff + yDiff > 5)
    {
      _x = x;
      _y = y;
    }
  }
  
  Touch_Data.xp = _x;
  Touch_Data.yp = _y;
  
  UB_I2C3_WriteByte(STMPE811_I2C_ADDR, IOE_REG_FIFO_STA, 0x01);
  UB_I2C3_WriteByte(STMPE811_I2C_ADDR, IOE_REG_FIFO_STA, 0x00);

  return(SUCCESS);
}
Beispiel #4
0
int8_t BH1750_Command(uint8_t cmd) {
    /* Check if NULL */
    assert_param(cmd);
    cmdstatus = UB_I2C3_WriteByte(0x23<<1,0x00,cmd,1);
    /* Print Initialization Error ID */
#ifdef DEBUG
    if(cmdstatus < 0) {
        sprintf(bufbh,"Command 0x%04x", cmd);
        UB_Font_DrawString(10,40,bufbh,&Arial_11x18,RGB_COL_RED,RGB_COL_BLACK);
        sprintf(bufbh,"Returned %d", cmdstatus);
        UB_Font_DrawString(10,60,bufbh,&Arial_11x18,RGB_COL_RED,RGB_COL_BLACK);
        return cmdstatus;
    }
#endif
    return cmdstatus;
}
//--------------------------------------------------------------
// interne Funktion
// return : 0=ok, >0 = error
//--------------------------------------------------------------
uint8_t P_Touch_IOAFConfig(uint8_t IO_Pin, FunctionalState NewState)
{
  uint8_t tmp = 0;
  int16_t i2c_wert;

  i2c_wert=UB_I2C3_ReadByte(STMPE811_I2C_ADDR, IOE_REG_GPIO_AF);
  if(i2c_wert<0) return(1);

  tmp = i2c_wert;

  if (NewState != DISABLE) {
    tmp |= (uint8_t)IO_Pin;
  }
  else {
    tmp &= ~(uint8_t)IO_Pin;
  }

  UB_I2C3_WriteByte(STMPE811_I2C_ADDR, IOE_REG_GPIO_AF, tmp);

  return(0);
}
//--------------------------------------------------------------
// interne Funktion
// return : 0=ok, >0 = error
//--------------------------------------------------------------
uint8_t P_Touch_FnctCmd(uint8_t Fct, FunctionalState NewState)
{
  uint8_t tmp = 0;
  int16_t i2c_wert;

  i2c_wert=UB_I2C3_ReadByte(STMPE811_I2C_ADDR, IOE_REG_SYS_CTRL2);
  if(i2c_wert<0) return(1);

  tmp = (uint8_t)(i2c_wert);

  if (NewState != DISABLE) {
    tmp &= ~(uint8_t)Fct;
  }
  else {
    tmp |= (uint8_t)Fct;
  }
  
  UB_I2C3_WriteByte(STMPE811_I2C_ADDR, IOE_REG_SYS_CTRL2, tmp);
  
  return(0);
}