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); |