tools/main.cpp
changeset 948 1cfab7161491
parent 938 5b936e8e39fa
child 949 e424c0074c67
equal deleted inserted replaced
947:6ca9c5fb56d5 948:1cfab7161491
    15 /*****************************************************************************/
    15 /*****************************************************************************/
    16 
    16 
    17 #define DEFAULT_MASTER 0
    17 #define DEFAULT_MASTER 0
    18 #define DEFAULT_COMMAND "slaves"
    18 #define DEFAULT_COMMAND "slaves"
    19 #define DEFAULT_SLAVEPOSITION -1
    19 #define DEFAULT_SLAVEPOSITION -1
       
    20 #define DEFAULT_DOMAININDEX -1
    20 
    21 
    21 static unsigned int masterIndex = DEFAULT_MASTER;
    22 static unsigned int masterIndex = DEFAULT_MASTER;
    22 static int slavePosition = DEFAULT_SLAVEPOSITION;
    23 static int slavePosition = DEFAULT_SLAVEPOSITION;
       
    24 static int domainIndex = DEFAULT_DOMAININDEX;
    23 static string command = DEFAULT_COMMAND;
    25 static string command = DEFAULT_COMMAND;
    24 
    26 
    25 /*****************************************************************************/
    27 /*****************************************************************************/
    26 
    28 
    27 void printUsage()
    29 void printUsage()
    28 {
    30 {
    29     cerr
    31     cerr
    30         << "Usage: ethercat <COMMAND> [OPTIONS]" << endl
    32         << "Usage: ethercat <COMMAND> [OPTIONS]" << endl
    31 		<< "Commands:" << endl
    33 		<< "Commands:" << endl
       
    34         << "  domain             Show domain information." << endl
    32         << "  list (ls, slaves)  List all slaves (former 'lsec')." << endl
    35         << "  list (ls, slaves)  List all slaves (former 'lsec')." << endl
    33         << "  pdos               List Pdo mapping of given slaves." << endl
    36         << "  pdos               List Pdo mapping of given slaves." << endl
    34         << "  xml                Generate slave information xml." << endl
    37         << "  xml                Generate slave information xml." << endl
    35 		<< "Global options:" << endl
    38 		<< "Global options:" << endl
    36         << "  --master  -m <master>  Index of the master to use. Default: "
    39         << "  --master  -m <master>  Index of the master to use. Default: "
    37 		<< DEFAULT_MASTER	<< endl
    40 		<< DEFAULT_MASTER	<< endl
    38         << "  --slave   -s <slave>   Positive numerical ring position,"
    41         << "  --slave   -s <index>   Positive numerical ring position,"
    39         << endl
    42         << endl
    40         << "                         or 'all' for all slaves. Default: 'all'."
    43         << "                         or 'all' for all slaves. Default: 'all'."
    41         << endl
    44         << endl
       
    45         << "  --domain  -d <index>   Positive numerical index,"
       
    46         << endl
       
    47         << "                         or 'all' for all domains. Default: "
       
    48 		<< "'all'." << endl
    42         << "  --help    -h           Show this help." << endl;
    49         << "  --help    -h           Show this help." << endl;
    43 }
    50 }
    44 
    51 
    45 /*****************************************************************************/
    52 /*****************************************************************************/
    46 
    53 
    51 
    58 
    52     static struct option longOptions[] = {
    59     static struct option longOptions[] = {
    53         //name,    has_arg,           flag, val
    60         //name,    has_arg,           flag, val
    54         {"master", required_argument, NULL, 'm'},
    61         {"master", required_argument, NULL, 'm'},
    55         {"slave",  required_argument, NULL, 's'},
    62         {"slave",  required_argument, NULL, 's'},
       
    63         {"domain", required_argument, NULL, 'd'},
    56         {"help",   no_argument,       NULL, 'h'},
    64         {"help",   no_argument,       NULL, 'h'},
    57         {}
    65         {}
    58     };
    66     };
    59 
    67 
    60     do {
    68     do {
    61         c = getopt_long(argc, argv, "m:s:h", longOptions, &optionIndex);
    69         c = getopt_long(argc, argv, "m:s:d:h", longOptions, &optionIndex);
    62 
    70 
    63         switch (c) {
    71         switch (c) {
    64             case 'm':
    72             case 'm':
    65                 number = strtoul(optarg, &remainder, 0);
    73                 number = strtoul(optarg, &remainder, 0);
    66                 if (remainder == optarg || *remainder || number < 0) {
    74                 if (remainder == optarg || *remainder || number < 0) {
    82                             << optarg << "!" << endl;
    90                             << optarg << "!" << endl;
    83                         printUsage();
    91                         printUsage();
    84                         exit(1);
    92                         exit(1);
    85                     }
    93                     }
    86                     slavePosition = number;
    94                     slavePosition = number;
       
    95                 }
       
    96                 break;
       
    97 
       
    98             case 'd':
       
    99                 if (!strcmp(optarg, "all")) {
       
   100                     domainIndex = -1;
       
   101                 } else {
       
   102                     number = strtoul(optarg, &remainder, 0);
       
   103                     if (remainder == optarg || *remainder || number < 0) {
       
   104                         cerr << "Invalid domain index "
       
   105 							<< optarg << "!" << endl;
       
   106                         printUsage();
       
   107                         exit(1);
       
   108                     }
       
   109                     domainIndex = number;
    87                 }
   110                 }
    88                 break;
   111                 break;
    89 
   112 
    90             case 'h':
   113             case 'h':
    91             case '?':
   114             case '?':
   118 	getOptions(argc, argv);
   141 	getOptions(argc, argv);
   119 
   142 
   120     try {
   143     try {
   121         master.open(masterIndex);
   144         master.open(masterIndex);
   122 
   145 
   123         if (command == "list" || command == "ls" || command == "slaves") {
   146         if (command == "domain") {
       
   147             master.showDomains(domainIndex);
       
   148 		} else if (command == "list" || command == "ls" || command == "slaves") {
   124             master.listSlaves();
   149             master.listSlaves();
   125         } else if (command == "pdos") {
   150         } else if (command == "pdos") {
   126             master.listPdos(slavePosition);
   151             master.listPdos(slavePosition);
   127         } else if (command == "xml") {
   152         } else if (command == "xml") {
   128             master.generateXml(slavePosition);
   153             master.generateXml(slavePosition);