修复ft6x46内存泄漏问题
authorSnickerSun <snickersun@163.com>
Fri, 31 May 2024 15:14:34 +0000 (23:14 +0800)
committerSnickerSun <snickersun@163.com>
Fri, 31 May 2024 15:14:34 +0000 (23:14 +0800)
code/sdk/drivers/peripheral/touch/ft6x46_touch/ft6x46_ctrl.c
code/sdk/drivers/peripheral/touch/ft6x46_touch/ft6x46_ctrl.h

index 5bdfe1f..f6a42fd 100644 (file)
@@ -24,6 +24,8 @@ bool g_host_dev_init_flag = TD_FALSE;
 ft6x46_ctrl_attr g_ctrl_attr;
 touch_callback g_ft6x46_callback = NULL;
 
+static uint8_t g_tp_recv_buf[FT6X46_INPUT_SIZE] = {0};
+
 static void ft6x46_gpio_isr_handle(pin_t pin, uintptr_t param)
 {
     unused(pin);
@@ -98,7 +100,7 @@ ext_errno tp_i2c_data_read(uint8_t reg_addr, uint8_t *data_buf, uint32_t data_le
     errcode_t ret;
     uint32_t retry;
     i2c_data_t data;
-    //uint8_t tp_reg_addr[FT6X46_REG_BYTE_LEN];
+
 
     ret = tp_i2c_rd_wr_param_check(data_buf, data_len);
     if (ret != 0) {
@@ -106,13 +108,14 @@ ext_errno tp_i2c_data_read(uint8_t reg_addr, uint8_t *data_buf, uint32_t data_le
         return ret;
     }
 
-    memset_s(data_buf, data_len, 0, data_len);
-    //tp_reg_addr[FT6X46_I2C_SEND_INDEX0] = reg_addr & 0xff;
-    //tp_reg_addr[FT6X46_I2C_SEND_INDEX1] = (reg_addr >> OFFSET_8_BITS) & 0xff;
-
-    data.send_buf = &reg_addr;
+    if (memset_s(g_tp_recv_buf, data_len, 0, data_len) != EOK) {
+        tp_err("tp read buff set fail! ret=0x%x", ret);
+        return EXT_ERR_FAILURE;
+    }
+       
+    data.send_buf =  &reg_addr;
     data.send_len = FT6X46_CMD_SEND_LEN;
-    data.receive_buf = data_buf;
+    data.receive_buf = g_tp_recv_buf;
     data.receive_len = data_len;
 
     for (retry = 0; retry < FT6X46_I2C_TIME_MAX; retry++) {
@@ -125,7 +128,11 @@ ext_errno tp_i2c_data_read(uint8_t reg_addr, uint8_t *data_buf, uint32_t data_le
         tp_err("tp data read fail! ret=0x%x", ret);
         return ret;
     }
-
+    ret = (uint32_t)memcpy_s(data_buf, data_len, g_tp_recv_buf, data_len);
+    if (ret != EOK) {
+        tp_err("tp data buf content copy fail! ret=0x%x", ret);
+        return ret;
+    }
     return EXT_ERR_SUCCESS;
 }
 
@@ -226,6 +233,7 @@ ext_errno tp_i2c_data_write(uint8_t reg_addr, uint8_t *data_buf, uint16_t data_l
     ret = (uint32_t)memcpy_s(write_data + sizeof(uint8_t), send_len - sizeof(uint8_t), data_buf, data_len);
     if (ret != EOK) {
         tp_err("tp send_buf content copy fail! ret=0x%x", ret);
+               osal_kfree(write_data);
         return ret;
     }
 
@@ -242,10 +250,11 @@ ext_errno tp_i2c_data_write(uint8_t reg_addr, uint8_t *data_buf, uint16_t data_l
     }
     if (ret != EXT_ERR_SUCCESS) {
         tp_err("tp data write fail! ret=0x%x", ret);
+               osal_kfree(write_data);
         return ret;
     }
 
-    tp_mem_free(write_data);
+    osal_kfree(write_data);
     return EXT_ERR_SUCCESS;
 }
 
@@ -275,6 +284,7 @@ ext_errno tp_ft6x46_i2c_data_write(uint8_t reg_addr, uint8_t *data_buf, uint16_t
     ret = (uint32_t)memcpy_s(write_data + sizeof(uint8_t), send_len - sizeof(uint8_t), data_buf, data_len);
     if (ret != EOK) {
         tp_err("tp send_buf content copy fail! ret=0x%x", ret);
+               osal_kfree(write_data);
         return ret;
     }
 
@@ -291,11 +301,11 @@ ext_errno tp_ft6x46_i2c_data_write(uint8_t reg_addr, uint8_t *data_buf, uint16_t
     }
     if (ret != EXT_ERR_SUCCESS) {
         tp_err("tp data write fail! ret=0x%x", ret);
-               tp_mem_free(write_data);
+               osal_kfree(write_data);
         return ret;
     }
 
-    tp_mem_free(write_data);
+    osal_kfree(write_data);
     return EXT_ERR_SUCCESS;
 }
 
index ac23c5f..24ef8f4 100644 (file)
@@ -30,6 +30,7 @@
 
 #define FT6X46_REG_DATA_LEN       2
 #define FT6X46_I2C_TIME_MAX       3
+#define FT6X46_INPUT_SIZE         156
 
 #define FT6X46_I2C_SEND_INDEX0    0
 #define FT6X46_I2C_SEND_INDEX1    1