//-------------------------------------------------------------- // 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); }
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); }