Files
TAIXIN/sdk/lib/touch/hyn_i2c.c

36 lines
1.2 KiB
C
Raw Permalink Normal View History

#include "lib/touch/hyn_core.h"
#include "app_iic/app_iic.h"
int hyn_wr_reg(struct hyn_ts_data *ts_data, uint32_t reg_addr, uint32_t reg_len, uint8_t *rbuf, uint32_t rlen)
{
uint8_t tmpbuf[80] = {0};
uint32_t iic_dev = ts_data->app_iic_num;
int ret = 0;
tmpbuf[0] = reg_len;
tmpbuf[1] = rlen;
tmpbuf[2] = ts_data->iic_addr;
// os_printf("hyn_wr_reg: ts_data->iic_addr:%x addr=0x%08X, len=%d, rbuf:0x%08x rbufrlen=%d\n",ts_data->iic_addr, reg_addr, reg_len, rbuf, rlen);
for(uint32_t i = 0; i < reg_len; i++) {
tmpbuf[3 + i] = (reg_addr >> (8 * (reg_len - 1 - i))) & 0xFF;
// os_printf("reg_addr[%d]: 0x%02X\n", i, tmpbuf[3 + i]);
}
if(rlen > 0 && rbuf != NULL) {
while(ret != 1){
ret = wake_up_iic_queue(iic_dev,tmpbuf,0,0,ts_data->iic_trx_buff);
}
while(iic_devid_finish(iic_dev) != 1){
os_sleep_ms(1);
}
os_memcpy(rbuf, ts_data->iic_trx_buff, rlen);
} else {
while(ret != 1){
ret = wake_up_iic_queue(iic_dev,tmpbuf,0,1,(uint8_t*)NULL);
}
while(iic_devid_finish(iic_dev) != 1){
os_sleep_ms(1);
}
}
return RET_OK;
}