/****************************************************************************** **函数名称: main **功 能: 监控主程序 **输入参数: NONE **输出参数: NONE **返 回: 0:成功 !0:失败 **实现描述: ** 1. 初始化菜单环境 ** 2. 加载子菜单 ** 3. 启动菜单功能 **注意事项: **作 者: # Qifeng.zou # 2014.12.27 # ******************************************************************************/ int main(int argc, char *argv[]) { mon_opt_t opt; mon_cntx_t *ctx; memset(&opt, 0, sizeof(opt)); umask(0); mem_ref_init(); set_fd_limit(65535); signal(SIGPIPE, SIG_IGN); /* > 解析输入参数 */ if (mon_getopt(argc, argv, &opt)) { return mon_usage(argv[0]); } /* > 初始化全局信息 */ ctx = mon_init(opt.conf_path); if (NULL == ctx) { fprintf(stderr, "Initialize monitor failed!\n"); return -1; } /* > 启动菜单模块 */ if (menu_run(ctx->menu)) { fprintf(stderr, "Startup menu failed!\n"); return -1; } return 0; }
// mon_decodecmd() static void mon_decodecmd() { char* s; int adr; int len; int val; char fname[32]; switch (rxbuf[0]) { case 'h': // help if (rxbuf[1]==0 || rxbuf[1]=='\n' || rxbuf[1]=='\r') { mon_usage(); } else mon_illcmd(); break; case 'r': // reboot if (rxbuf[1]==0 || rxbuf[1]=='\n' || rxbuf[1]=='\r') { RST_system(); } else mon_illcmd(); break; case 'e': // exit mon if (rxbuf[1]==0 || rxbuf[1]=='\n' || rxbuf[1]=='\r') { rxwp = rxrp = txwp = txrp = txln = 0; mon_step = 0; mon_en = 0; } else mon_illcmd(); break; case 'c': // ctrl read/write if (rxbuf[1] == 'w') { // write if ((s = next_word(rxbuf)) == NULL) { mon_illcmd(); break;} scani(s, &adr); adr = adr&0xfffffffc; if ( (s = next_word(s)) == NULL ) { mon_illcmd(); break;} scani(s, &val); write32(adr, val); rxwp = 0; } else if (rxbuf[1] == 'r') { // read if ((s = next_word(rxbuf)) == NULL) { mon_illcmd(); break;} scani(s, &adr); adr = adr&0xfffffffc; val = read32(adr); sprintf(stbuf, "0x%8x = 0x%8x (b%32b)\r\n", adr, val, val); txbuf_puts(stbuf); rxwp = 0; } else mon_illcmd(); break; case 'a': // amiga read/write if (rxbuf[1] == 'w') { // write if ((s = next_word(rxbuf)) == NULL) { mon_illcmd(); break;} scani(s, &adr); adr = adr&0xfffffffc; if ( (s = next_word(s)) == NULL ) { mon_illcmd(); break;} scani(s, &val); EnableOsd(); rstval = rstval | SPI_CPU_HLT; SPI(rstval); DisableOsd(); MEM_UPLOAD_INIT(adr); MEM_WRITE16(val); MEM_UPLOAD_FINI(); EnableOsd(); rstval = rstval & ~SPI_CPU_HLT; SPI(rstval); DisableOsd(); rxwp = 0; } else if (rxbuf[1] == 'r') { // read printf("Amiga mem read currently unimplemented.\r"); rxwp = 0; } else mon_illcmd(); break; case 'u': // file upload if ((s = next_word(rxbuf)) == NULL) { mon_illcmd(); break;} //scani(s, fname); printf("File upload currently unimplemented.\r"); rxwp = 0; break; } }