1 | struct someStuff_t {
|
2 | int SDM120reg;
|
3 | int debug;
|
4 | char serial[20];
|
5 | };
|
6 |
|
7 | int main(int argc, char *argv[])
|
8 | {
|
9 | ...
|
10 | ...
|
11 | ...
|
12 |
|
13 | struct someStuff_t someStuff;
|
14 |
|
15 | // Step1: Extract the selected register and serial interface
|
16 | // Example:
|
17 | // readSDM120 -d 1 -s /dev/ttyS0 -r 30013
|
18 | // DEBUG Mode 1, svalue = /dev/ttyS0, rvalue => SDM120_POWER
|
19 |
|
20 | if (argc == 1) {
|
21 | printf ("Use with command line options (-h for help).\n");
|
22 | return (0);
|
23 | }
|
24 |
|
25 | evaluate_main (argc, argv, &someStuff); // someStuff wird mit den ausgewerteten Kommandozeilen-Argumenten gefüllt
|
26 | ...
|
27 | ...
|
28 | ...
|
29 | }
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 | int evaluate_main (int eval_argc, char **eval_argv, struct someStuff_t *stuff)
|
36 | {
|
37 |
|
38 | int dflag = 0; //debug
|
39 | int sflag = 0; //serial interface
|
40 | int rflag = 0; //register flag
|
41 | char *svalue = NULL; //serial interface as string
|
42 | char *rvalue = NULL; //register value as string
|
43 | char *dvalue = NULL; //debug mode as string : 1 or 2
|
44 | int base = 10;
|
45 | char *endptr;
|
46 | int index;
|
47 | int c;
|
48 | opterr = 0;
|
49 |
|
50 | /* Get data from SDM120 Modbus device
|
51 | Parameter:
|
52 | -d debug mode
|
53 | -s serial
|
54 | -r Input register (3x range) start address of the slave device. Always 'address' and 'address+1' are fetched
|
55 | as IEEE-754 float is stored in 2x16 bit registers
|
56 |
|
57 | example: fetch current from SDM120 via /dev/ttyS0
|
58 | SDM120 -d -s /dev/ttyS0 -r 30007
|
59 | */
|
60 |
|
61 | while ((c = getopt (eval_argc, eval_argv, "d:hs:r:")) != -1)
|
62 | switch (c)
|
63 | {
|
64 | case 'h':
|
65 | //Help
|
66 | printf("SDM120 readout.\n");
|
67 | printf("Use with option:\n");
|
68 | printf(" -h This help here\n");
|
69 | printf(" -d Debug mode, 1: read single input register, 2: read all input registers\n");
|
70 | printf(" -s Serial interface: /dev/ttyS0, /dev/ttyACM0...\n");
|
71 | printf(" -r Register to be read: 30001, 30006, 30343...\n");
|
72 | printf("Example: SDM120 -d 1 -s /dev/ttyS0 -r 30001\n\n");
|
73 | printf("\n");
|
74 | exit ();
|
75 |
|
76 | case 'd':
|
77 | printf ("DEBUG mode\n");
|
78 | dvalue = optarg;
|
79 | stuff->debug = strtol(dvalue, &endptr, base);
|
80 | if (stuff->debug == 1) dflag = 1;
|
81 | break;
|
82 |
|
83 | case 's':
|
84 | sflag = 1;
|
85 | // svalue = optarg;
|
86 | strcpy (stuff->serial, optarg);
|
87 | break;
|
88 |
|
89 | case 'r':
|
90 | // rvalue = optarg;
|
91 | // val =
|
92 | //stuff->SDM120reg = strtol(rvalue, &endptr, base);
|
93 | stuff->SDM120reg = strtol(optarg, &endptr, base);
|
94 | rflag = 1;
|
95 | break;
|
96 |
|
97 | case '?':
|
98 | if ((optopt == 'r') || (optopt == 's')||(optopt == 'd'))
|
99 | fprintf (stderr, "Option -%c requires an argument.\n", optopt);
|
100 | else if (isprint (optopt))
|
101 | fprintf (stderr, "Unknown option `-%c'.\n", optopt);
|
102 | else
|
103 | fprintf (stderr,
|
104 | "Unknown option character `\\x%x'.\n",
|
105 | optopt);
|
106 | return 1;
|
107 | default:
|
108 | abort ();
|
109 | }
|
110 |
|
111 | if (stuff->debug == 1) printf ("Local: dflag = %d, sflag = %d rflag = %d, svalue = %s, rvalue = %s\n",
|
112 | dflag, sflag, rflag, svalue, rvalue);
|
113 |
|
114 | for (index = optind; index < eval_argc; index++)
|
115 | printf ("ERROR (ignored): Non-option argument %s\n", eval_argv[index]);
|
116 |
|
117 | return 0;
|
118 |
|
119 | }
|