static int parse_args(int argc, char* argv[]) { int opt, ret = 0; while ((opt = getopt(argc, argv, "ni:h:d:s:g:")) != -1) { switch (opt) { case 'i': _ifname = optarg; break; case 'n': _is_pdump_file = 0; /* output to stderr */ break; case 'h': _remote_host = optarg; break; case 'd': _eoj_code.cgc = parse_uchar(optarg); _eoj_code.clc = parse_uchar(optarg + 2); _eoj_code.inc = parse_uchar(optarg + 4); break; case 'g': _get_prop[_get_prop_len].epc = (unsigned char)strtoul(optarg, NULL, 16); _get_prop_len++; break; case 's': _set_prop[_set_prop_len].epc = (unsigned char)strtoul(optarg, NULL, 16); _set_prop[_set_prop_len].data = argv[optind++]; _set_prop_len++; break; default: /* '?' */ usage(argv[0]); break; } } if (!_remote_host || (0 == _get_prop_len && 0 == _set_prop_len)) { usage(argv[0]); } _esv_code = _select_esv(); #if 0 { int i; errlog("%s,%s,%x,%x,%x\n", _ifname, _remote_host, _eoj_code.cgc, _eoj_code.clc, _eoj_code.inc); for (i = 0; i < _set_prop_len; i++) { errlog("SET:%d: %x=%s\n", i, _set_prop[i].epc, _set_prop[i].data); } for (i = 0; i < _get_prop_len; i++) { errlog("GET:%d: %x\n", i, _get_prop[i].epc); } exit(0); } #endif return ret; }
static int parse_rawdata(char *data, unsigned char *rawdata, unsigned char* rawdata_len) { int i, len = strlen(data); char *str = data; *rawdata_len = 0; for (i = 0, str = data; i < len; i += 2, str += 2) { *rawdata = parse_uchar(str); rawdata += 1; *rawdata_len += 1; } return (int)*rawdata_len; }
static int proc_args(int argc, char *argv[]) { unsigned short base_addr; unsigned long bits, stop, parity, rate; unsigned char tx; int i, stringc = 1; char **strings; char *temp; /* check the function to test: if the first characters match, accept it */ if (argc == 1) { print_usage(argv); return 1; } else if (strncmp(argv[1], "conf", strlen("conf")) == 0) { if (argc != 3) { printf("VBE: wrong no of arguments for conf() \n"); return 1; } if ((base_addr = parse_ushort(argv[2], 16)) == USHRT_MAX) return 1; printf("lab7:: conf(%d)\n", base_addr); ser_test_conf(base_addr); return 0; } else if (strncmp(argv[1], "set", strlen("set")) == 0) { if (argc != 7) { printf("lab7: wrong no of arguments for set() \n"); return 1; } if ((base_addr = parse_ushort(argv[2], 10)) == USHRT_MAX) return 1; if ((bits = parse_ulong(argv[3], 10)) == ULONG_MAX) return 1; if ((stop = parse_ulong(argv[4], 10)) == ULONG_MAX) return 1; if(strncmp(argv[5],"even",strlen("even")) == 0) parity = 2; else if(strncmp(argv[5], "odd",strlen("odd")) == 0) parity = 1; else if(strncmp(argv[5],"none",strlen("none")) == 0) parity = 0; if((rate = parse_ulong(argv[6],10)) == ULONG_MAX) return 1; printf("lab7::set(%d, %d, %d, %d, %d)\n", base_addr, bits, stop, parity, rate); return ser_test_set(base_addr, bits, stop, parity, rate); } else if (strncmp(argv[1], "com", strlen("com")) == 0) { if (argc != 8) { printf("lab7::wrong num of args for com() \n"); return 1; } if (base_addr = parse_ushort(argv[2], 10) == USHRT_MAX) return 1; if ((tx = parse_uchar(argv[3],10)) == UCHAR_MAX) return 1; if((bits = parse_ulong(argv[4],10)) == ULONG_MAX) return 1; if((stop = parse_ulong(argv[5],10)) == ULONG_MAX) return 1; if((rate = parse_ulong(argv[7],10)) == ULONG_MAX) return 1; if(strncmp(argv[6],"even",strlen("even")) == 0) parity = 2; else if(strncmp(argv[6], "odd",strlen("odd")) == 0) parity = 1; else if(strncmp(argv[6],"none",strlen("none")) == 0) parity = 0; /*strings = (char **)malloc(0); for(i = 8; i < argc; i++){ strings = realloc(strings,stringc * sizeof(char*)); strings[stringc - 1] =(char *) malloc(sizeof(argv[i])); strings[stringc - 1] = argv[i]; printf("%s ", strings[stringc - 1]); stringc++; }*/ printf("lab7::set(%d, %d, %d, %d, %d, %d)\n", base_addr, tx, bits, stop, parity, rate, stringc); return ser_test_poll(1, tx, bits, stop, parity, rate); } else { printf("lab7: non valid function \"%s\" to test\n", argv[1]); return 1; } }