|
|
@@ -12,73 +12,56 @@ static inline int tp_i2c_init(luat_tp_config_t* luat_tp_config){
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static inline int tp_i2c_write_reg8(luat_tp_config_t* luat_tp_config, uint8_t reg, void* buff, size_t len){
|
|
|
- uint8_t data_reg[len+1];
|
|
|
- data_reg[0] = reg;
|
|
|
- memcpy(data_reg+1, buff, len);
|
|
|
+static inline int tp_i2c_write_reg(luat_tp_config_t* luat_tp_config, uint8_t* reg, size_t reg_len, void* data, size_t data_len){
|
|
|
+ size_t len = reg_len+data_len;
|
|
|
+ uint8_t data_reg[len];
|
|
|
+ for (size_t i = 0; i < reg_len; i++){
|
|
|
+ data_reg[i] = reg[reg_len-i-1];
|
|
|
+ }
|
|
|
+ memcpy(data_reg+reg_len, data, data_len);
|
|
|
if (luat_tp_config->soft_i2c != NULL){
|
|
|
- return i2c_soft_send(luat_tp_config->soft_i2c, luat_tp_config->address, (char *)data_reg, len+1, 1);
|
|
|
+ return i2c_soft_send(luat_tp_config->soft_i2c, luat_tp_config->address, (char *)data_reg, len, 1);
|
|
|
}else{
|
|
|
- return luat_i2c_send(luat_tp_config->i2c_id, luat_tp_config->address, data_reg, len+1, 1);
|
|
|
+ return luat_i2c_send(luat_tp_config->i2c_id, luat_tp_config->address, data_reg, len, 1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static inline int tp_i2c_read_reg8(luat_tp_config_t* luat_tp_config, uint8_t reg, void* buff, size_t len, uint8_t stop){
|
|
|
+static inline int tp_i2c_read_reg(luat_tp_config_t* luat_tp_config, uint8_t* reg, size_t reg_len, void* data, size_t data_len, uint8_t stop){
|
|
|
+ uint8_t data_reg[reg_len];
|
|
|
+ for (size_t i = 0; i < reg_len; i++){
|
|
|
+ data_reg[i] = reg[reg_len-i-1];
|
|
|
+ }
|
|
|
if (luat_tp_config->soft_i2c != NULL){
|
|
|
- i2c_soft_send(luat_tp_config->soft_i2c, luat_tp_config->address, (char *)®, 1, stop);
|
|
|
- return i2c_soft_recv(luat_tp_config->soft_i2c, luat_tp_config->address, buff, len);
|
|
|
+ i2c_soft_send(luat_tp_config->soft_i2c, luat_tp_config->address, (char *)data_reg, reg_len, stop);
|
|
|
+ return i2c_soft_recv(luat_tp_config->soft_i2c, luat_tp_config->address, data, data_len);
|
|
|
}else{
|
|
|
- luat_i2c_send(luat_tp_config->i2c_id, luat_tp_config->address, (char *)®, 1, stop);
|
|
|
- return luat_i2c_recv(luat_tp_config->i2c_id, luat_tp_config->address, buff, len);
|
|
|
+ luat_i2c_send(luat_tp_config->i2c_id, luat_tp_config->address, (char *)data_reg, reg_len, stop);
|
|
|
+ return luat_i2c_recv(luat_tp_config->i2c_id, luat_tp_config->address, data, data_len);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static inline int tp_i2c_write_reg8(luat_tp_config_t* luat_tp_config, uint8_t reg, void* buff, size_t len){
|
|
|
+ return tp_i2c_write_reg(luat_tp_config, ®, sizeof(uint8_t), buff, len);
|
|
|
+}
|
|
|
+
|
|
|
+static inline int tp_i2c_read_reg8(luat_tp_config_t* luat_tp_config, uint8_t reg, void* buff, size_t len, uint8_t stop){
|
|
|
+ return tp_i2c_read_reg(luat_tp_config, ®, sizeof(uint8_t), buff, len, stop);
|
|
|
+}
|
|
|
+
|
|
|
static inline int tp_i2c_write_reg16(luat_tp_config_t* luat_tp_config, uint16_t reg, void* buff, size_t len){
|
|
|
- uint8_t data_reg[len+2];
|
|
|
- data_reg[0] = (reg>>8)&0xff;
|
|
|
- data_reg[1] = (reg&0xff);
|
|
|
- memcpy(data_reg+2, buff, len);
|
|
|
- if (luat_tp_config->soft_i2c != NULL){
|
|
|
- return i2c_soft_send(luat_tp_config->soft_i2c, luat_tp_config->address, (char *)data_reg, len+2, 1);
|
|
|
- }else{
|
|
|
- return luat_i2c_send(luat_tp_config->i2c_id, luat_tp_config->address, data_reg, len+2, 1);
|
|
|
- }
|
|
|
+ return tp_i2c_write_reg(luat_tp_config, ®, sizeof(uint16_t), buff, len);
|
|
|
}
|
|
|
|
|
|
static inline int tp_i2c_read_reg16(luat_tp_config_t* luat_tp_config, uint16_t reg, void* buff, size_t len, uint8_t stop){
|
|
|
- uint8_t data_reg[sizeof(uint16_t)] = {reg>>8, reg&0xff};
|
|
|
- if (luat_tp_config->soft_i2c != NULL){
|
|
|
- i2c_soft_send(luat_tp_config->soft_i2c, luat_tp_config->address, (char *)data_reg, sizeof(uint16_t), stop);
|
|
|
- return i2c_soft_recv(luat_tp_config->soft_i2c, luat_tp_config->address, buff, len);
|
|
|
- }else{
|
|
|
- luat_i2c_send(luat_tp_config->i2c_id, luat_tp_config->address, data_reg, sizeof(uint16_t), stop);
|
|
|
- return luat_i2c_recv(luat_tp_config->i2c_id, luat_tp_config->address, buff, len);
|
|
|
- }
|
|
|
+ return tp_i2c_read_reg(luat_tp_config, ®, sizeof(uint16_t), buff, len, stop);
|
|
|
}
|
|
|
|
|
|
static inline int tp_i2c_write_reg32(luat_tp_config_t* luat_tp_config, uint32_t reg, void* buff, size_t len){
|
|
|
- uint8_t data_reg[len+sizeof(uint32_t)];
|
|
|
- data_reg[0] = (reg>>24)&0xff;
|
|
|
- data_reg[1] = (reg>>16)&0xff;
|
|
|
- data_reg[2] = (reg>>8)&0xff;
|
|
|
- data_reg[3] = (reg&0xff);
|
|
|
- memcpy(data_reg+sizeof(uint32_t), buff, len);
|
|
|
- if (luat_tp_config->soft_i2c != NULL){
|
|
|
- return i2c_soft_send(luat_tp_config->soft_i2c, luat_tp_config->address, (char *)data_reg, len+sizeof(uint32_t), 1);
|
|
|
- }else{
|
|
|
- return luat_i2c_send(luat_tp_config->i2c_id, luat_tp_config->address, data_reg, len+sizeof(uint32_t), 1);
|
|
|
- }
|
|
|
+ return tp_i2c_write_reg(luat_tp_config, ®, sizeof(uint32_t), buff, len);
|
|
|
}
|
|
|
|
|
|
static inline int tp_i2c_read_reg32(luat_tp_config_t* luat_tp_config, uint32_t reg, void* buff, size_t len, uint8_t stop){
|
|
|
- uint8_t data_reg[sizeof(uint32_t)] = {(reg>>24)&0xff, (reg>>16)&0xff, (reg>>8)&0xff, reg&0xff};
|
|
|
- if (luat_tp_config->soft_i2c != NULL){
|
|
|
- i2c_soft_send(luat_tp_config->soft_i2c, luat_tp_config->address, (char *)data_reg, sizeof(uint32_t), stop);
|
|
|
- return i2c_soft_recv(luat_tp_config->soft_i2c, luat_tp_config->address, buff, len);
|
|
|
- }else{
|
|
|
- luat_i2c_send(luat_tp_config->i2c_id, luat_tp_config->address, data_reg, sizeof(uint32_t), stop);
|
|
|
- return luat_i2c_recv(luat_tp_config->i2c_id, luat_tp_config->address, buff, len);
|
|
|
- }
|
|
|
+ return tp_i2c_read_reg(luat_tp_config, ®, sizeof(uint32_t), buff, len, stop);
|
|
|
}
|
|
|
|
|
|
|