FreeCalypso > hg > ice1-trau-tester
annotate libutil/stdin_handler.c @ 37:26c9535df39e
rm abis subdir: moved to e1-fake-trau repository
The present code repository is meant to contain code for talking
to a TRAU DUT, hence the name ice1-trau-tester. The different and
separate function of talking to an E1 BTS (Abis instead of Ater,
and in the opposite role) was never in scope for this project, but
that code got added here in a haste when the InSite BTS arrived
while the TRAU bring-up was still blocked. Now that we have our
Nokia TCSM2 system working and are doing TRAU experiments, let's
keep the code clean.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 29 Aug 2024 19:02:02 +0000 |
parents | 2ce0ed560a34 |
children |
rev | line source |
---|---|
4
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * Stdin handler function: gets called from Osmocom select loop for stdin, |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * does line read and initial parsing into arguments, then calls |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * program-supplied handler. |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 */ |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <ctype.h> |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <stdint.h> |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <stdbool.h> |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <stdio.h> |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <stdlib.h> |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include <unistd.h> |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include <osmocom/core/select.h> |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 #include "stdin_handler.h" |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 #define MAX_ARGS 16 |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 int stdin_select_cb(struct osmo_fd *ofd, unsigned int what) |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 { |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 stdin_dispatch_t dispatch_func = ofd->data; |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 char buf[256], *argv[MAX_ARGS+1], *cp; |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 int argc; |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 fgets(buf, sizeof buf, stdin); |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 argc = 0; |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 for (cp = buf; ; ) { |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 while (isspace(*cp)) |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 cp++; |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 if (*cp == '\0' || *cp == '#') |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 break; |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 if (argc >= MAX_ARGS) { |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 printf("error: input command exceeds MAX_ARGS\n"); |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 return 0; |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 } |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 argv[argc] = cp; |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 while (*cp && !isspace(*cp)) |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 cp++; |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 if (*cp) |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 *cp++ = '\0'; |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 argc++; |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 } |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 if (!argc) |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 return 0; |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 argv[argc] = NULL; |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 dispatch_func(argc, argv); |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 return 0; |
2ce0ed560a34
libutil: implement stdin handler
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 } |