Пример #1
0
/******************************************************************************
 **函数名称: 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;
}
Пример #2
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;
  }
}