#include #include "cola_init.h" #include "cola_device.h" #include "cola_os.h" #include "fml_touch.h" #include "shell.h" static cola_device_t *g_pDevTouch = NULL; void fml_touch_init(void) { g_pDevTouch = cola_device_find("touch"); if(g_pDevTouch) cola_device_open(g_pDevTouch, 0); } int fml_touch_iic_write(uint8_t devAddr,uint8_t *buf,int len) { int ret = 0; cola_device_ctrl(g_pDevTouch, devAddr, NULL); ret = cola_device_write(g_pDevTouch, 0x00, buf, len); return ret; } int fml_touch_iic_read(uint8_t devAddr,uint8_t reg,uint8_t *buf,int len) { int ret = 0; cola_device_ctrl(g_pDevTouch, devAddr, NULL); ret = cola_device_write(g_pDevTouch, 0x00, ®, 1); if(ret == 1) ret = cola_device_read(g_pDevTouch, 0x00, buf, len); return ret; } void fml_touch_iic_read_page_reg(uint32_t address,uint8_t *buf,int len) { uint8_t pArray[5]; uint8_t readValue = 0x00; pArray[0] = (address)&0xFF; pArray[1] = (address>>8)&0xFF; pArray[2] = (address>>16)&0xFF; pArray[3] = (address>>24)&0xFF; pArray[4] = 0x08;//setting cola_device_ctrl(g_pDevTouch, SLAVE_ADDR_TP, NULL); cola_device_write(g_pDevTouch,0,pArray,sizeof(pArray)); cola_device_ctrl(g_pDevTouch, SLAVE_ADDR_TP, NULL); cola_device_read(g_pDevTouch,0,buf,len); } void fml_touch_read_version_info(void) { uint8_t buf[4]; int len = sizeof(buf); unsigned long address = 0x200056a0; fml_touch_iic_read_page_reg(address,buf,len);//0x200056a0 logWrite("read tp version[0x%08X]:",address); for (int i = 0; i < len; i++) { logWrite("%02X ", buf[i]); } logWrite("\r\n"); } static unsigned long string_to_number(const char *str) { if (!str || *str == '\0') return -1; unsigned long result = 0; char *end_ptr; int base = 10; if (str[0] == '0' && tolower(str[1]) == 'x') { base = 16; } result = strtoul(str, &end_ptr, base); return result; } int touch_test(int argc, char *argv[]) { if (argc < 2) { logWrite("para length must greater than 2\r\n"); return 0; } int i=0; uint8_t buf[10]; unsigned long address = string_to_number(argv[1]); int len = string_to_number(argv[2]); if(len > sizeof(buf)) len = sizeof(buf); fml_touch_iic_read_page_reg(address,buf,len);//0x200056a0 logWrite("read address[0x%08X]:",address); for (i = 0; i < len; i++) { logWrite("%02X ", buf[i]); } logWrite("\r\n"); return 0; } SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), touch_test, touch_test, touch_test,touch_test);