int main() { char c; init_uart(); lcd_init(); lcd_enable(); ts_init(); ts_calibrate(); printf("can update program with serial port\n\r"); while (1) { printf("[w] write the nand flash\n\r"); printf("[r] read the nand flash\n\r"); printf("[e] erase the nand flash\n\r"); printf("[g] get file, and write to nand flash 0 block\n\r"); printf("[x] get file to ddr(0x52000000), run it\n\r"); printf("[t] test lcd\n\r"); printf("[s] test touch screem\n\r"); do { c = getc(); if (c == '\n' || c == '\r') { printf("\n\r"); } else { putc(c); } } while (c == '\n' || c == '\r'); switch (c) { case 'w': case 'W': { nand_write_test(); break; } case 'r': case 'R': { nand_read_test(); break; } case 'e': case 'E': { nand_erase_test(); break; } case 'g': case 'G': { update_program(); break; } case 'x': case 'X': { run_program(); break; } case 't': case 'T': { lcd_test(); break; } case 's': case 'S': { ts_test(); break; } } } return 0; }
int main(int argc, const char *argv[]) { tm_cmd_t ipc_cmd; char i; int fd, opt_idx, c, max_pnl=PNL_NUM; char *short_opts = "p:sa:n:e:f:chvC:T:b:i:"; pid_t pid; if(argc == 1) tm_test_usage(); memset((char*)&ipc_cmd, 0, sizeof(tm_cmd_t)); while ((c = getopt_long(argc, (char* const*)argv, short_opts, long_opts, &opt_idx)) != -1) { switch(c) { case 'C': memcpy(client_name, optarg, strlen(optarg)); break; case 'T': memcpy(target_name, optarg, strlen(optarg)); break; case 'b': ttm.arg.bind.set=1; memcpy(bind_buf, optarg, strlen(optarg)); break; case 'a': ttm.arg.ap.set = 1; memcpy(ap_buf, optarg, strlen(optarg)); break; case 'n': ttm.set_pnl_num = 1; ttm.pnl_num = optarg[0] - '0'; break; case 'e': ttm.arg.evt.set = 1; memcpy(evt_buf, optarg, strlen(optarg)); break; case 'f': ttm.arg.fb.set = 1; memcpy(fb_buf, optarg, strlen(optarg)); break; case 'i': ttm.arg.pnl_evt.set = 1; memcpy(pnl_evt_buf, optarg, strlen(optarg)); break; case 'c': ttm.calibrate = 1; break; case 'p': ttm.pnl_arg = optarg[0] - '0'; break; case 's': ttm.split = 1; break; case 'h': tm_test_usage(); break; case 'v': tm_test_version(); break; default: break; } } parse_options(); #if TEST_DEBUG show_args_for_debug(); #endif if(ttm.calibrate) { tm_calibrate(); return 0; } if(ttm.set_pnl_num) max_pnl = ttm.pnl_num; if(ttm.pnl_arg < 0 || ttm.pnl_arg > max_pnl) { printf("set panel error\n"); tm_test_usage(); } if(!ttm.arg.ap.set) { printf("no set ap\n"); return 0; } signal(SIGSEGV, sig); signal(SIGINT, sig); signal(SIGTERM, sig); ttm.mode = ttm.arg.ap.num - 1; set_ttm(); set_button_num(ttm.arg.ap.num + 3); set_comment(); // set fb position for (i = 0; i < max_pnl; i++) { printf("panel %d pan : %s\n",i,ttm.fb[(int)i].pan); printf("panel %d fb : %s\n",i,ttm.fb[(int)i].dev); printf("panel %d evt : %s\n",i,ttm.evt[(int)i].dev); if((fd=open(ttm.fb[(int)i].pan, O_RDWR))>=0) { if (write(fd, "0,0", 3)<0) { dbg_log("write pan error, pan : %s",ttm.fb[(int)i].pan); } close(fd); } else { printf("open pan error\n"); } #if 1 pid = fork(); if (pid == -1) { printf("fork %d error \n", i); } else if (pid == 0) { ts_test(&ttm.fb[(int)i], &ttm.evt[(int)i]); _exit(0); } #endif } if(open_ipc()) return 0; // ipc_cmd.general.hdr=0xd0; // ipc_cmd.len=1; // ttm.wait_ver=1; // send_ipc(&ipc_cmd); // // while(ttm.wait_ver) // sleep(1); // set ap display for (i = 0; i < 3; i++) { if(ttm.mode == MONO_AP) { ipc_cmd.stretch.hdr=0xa1; ipc_cmd.stretch.panel=i; ipc_cmd.stretch.ap=ttm.arg.ap.data[0]; ipc_cmd.len=3; send_ipc(&ipc_cmd); } else { ipc_cmd.clear.hdr=0xa2; ipc_cmd.clear.panel=i; ipc_cmd.len=2; send_ipc(&ipc_cmd); for(int j=0; j<ttm.arg.ap.num; j++) { ipc_cmd.append.hdr=0xa0; ipc_cmd.append.panel=i; ipc_cmd.append.ap=ttm.arg.ap.data[j]; set_pnl_append_cmd(&ipc_cmd.append, j); set_ap_append_cmd(&ipc_cmd.append, j); ipc_cmd.len=11; send_ipc(&ipc_cmd); } } } if(g_ipc.server) { lst_close_channel(g_ipc.server); g_ipc.server = NULL; } return 0; }