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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }