36 lines
1.2 KiB
C
36 lines
1.2 KiB
C
|
|
#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;
|
||
|
|
}
|