Преглед изворни кода

Merge branch 'master' of https://gitee.com/openLuat/LuatOS

alienwalker пре 3 година
родитељ
комит
74229c3e74
2 измењених фајлова са 18 додато и 16 уклоњено
  1. 11 10
      components/mlx90640-library/MLX90640_I2C_Driver.c
  2. 7 6
      luat/modules/luat_lib_i2c.c

+ 11 - 10
components/mlx90640-library/MLX90640_I2C_Driver.c

@@ -21,7 +21,7 @@
 extern uint8_t mlx90640_i2c_id;
 extern uint8_t mlx90640_i2c_speed;
 
-void MLX90640_I2CInit()
+void MLX90640_I2CInit(void)
 {   
     luat_i2c_setup(mlx90640_i2c_id, mlx90640_i2c_speed, NULL);
 }
@@ -31,25 +31,26 @@ int MLX90640_I2CRead(uint8_t slaveAddr, uint16_t startAddress, uint16_t nMemAddr
     int ret = 0;  
     int cnt = 0;
     int i = 0;
-    char i2cData[1664] = {0}; // TODO 改成malloc
+    char* i2cData = NULL;
     uint16_t *p;
     p = data;
     char cmd[2] = {0,0};
-    
     cmd[0] = startAddress >> 8;
     cmd[1] = startAddress & 0x00FF;
-    
-    ret = luat_i2c_send(mlx90640_i2c_id, slaveAddr, cmd, 2,0);
-    if (ret != 0)return -1;
-    
-    ret = luat_i2c_recv(mlx90640_i2c_id, slaveAddr, i2cData, 2*nMemAddressRead);
-    if (ret != 0)return -1;
+
+    i2cData = (char *)luat_heap_malloc(2*nMemAddressRead);
+    ret = luat_i2c_transfer(mlx90640_i2c_id, slaveAddr, cmd, 2, i2cData, 2*nMemAddressRead);
+
+    if (ret != 0){
+        luat_heap_free(i2cData);
+        return -1;
+    }
     for(cnt=0; cnt < nMemAddressRead; cnt++)
     {
         i = cnt << 1;
         *p++ = (uint16_t)i2cData[i]*256 + (uint16_t)i2cData[i+1];
     }
-    
+    luat_heap_free(i2cData);
     return 0;   
 } 
 

+ 7 - 6
luat/modules/luat_lib_i2c.c

@@ -652,13 +652,14 @@ static int l_i2c_readSHT30(lua_State *L)
 
 int LUAT_WEAK luat_i2c_transfer(int id, int addr, uint8_t *reg, size_t reg_len, uint8_t *buff, size_t len)
 {
-    luat_i2c_send(id, addr, reg, reg_len, 0);
-    luat_i2c_recv(id, addr, buff, len);
-	return -1;
+    int result;
+    result = luat_i2c_send(id, addr, reg, reg_len, 0);
+    if (result != 0) return-1;
+    return luat_i2c_recv(id, addr, buff, len);
 }
-/*
-i2c通用传输,包括发送N字节,发送N字节+接收N字节,接收N字节三种功能,在发送转接收过程中发送reStart信号
-解决类似mlx90614必须带restart信号,但是又不能用i2c.send来控制的,比如air105
+
+/**
+i2c通用传输,包括发送N字节,发送N字节+接收N字节,接收N字节三种功能,在发送转接收过程中发送reStart信号,解决类似mlx90614必须带restart信号,但是又不能用i2c.send来控制的,比如air105
 @api i2c.transfer(id, addr, txBuff, rxBuff, rxLen)
 @int 设备id, 例如i2c1的id为1, i2c2的id为2
 @int I2C子设备的地址, 7位地址