comparison rvinterf/tmsh/bsimcmd.c @ 816:b3724fe6c581

fc-tmsh bsim commands implemented
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 14 May 2021 17:16:43 +0000
parents
children
comparison
equal deleted inserted replaced
815:bc1e150f5bd9 816:b3724fe6c581
1 /*
2 * In this module we are going to implement FreeCalypso BSIM
3 * (battery simulation mode) commands.
4 */
5
6 #include <sys/types.h>
7 #include <stdio.h>
8 #include <string.h>
9 #include <strings.h>
10 #include <stdlib.h>
11 #include "limits.h"
12 #include "localtypes.h"
13 #include "etm.h"
14 #include "bsim_etm_cmd.h"
15 #include "exitcodes.h"
16
17 cmd_bsim_query(argc, argv)
18 char **argv;
19 {
20 u_char cmdpkt[4];
21
22 cmdpkt[1] = ETM_BSIM;
23 cmdpkt[2] = BSIM_CMD_QUERY;
24 send_etm_cmd(cmdpkt, 2);
25 return(0);
26 }
27
28 cmd_bsim_disch(argc, argv)
29 char **argv;
30 {
31 u_char cmdpkt[5];
32
33 cmdpkt[1] = ETM_BSIM;
34 cmdpkt[2] = BSIM_CMD_DISCHARGE;
35 cmdpkt[3] = strtoul(argv[1], 0, 0);
36 send_etm_cmd(cmdpkt, 3);
37 return(0);
38 }
39
40 cmd_bsim_start(argc, argv)
41 char **argv;
42 {
43 u_char cmdpkt[4];
44
45 cmdpkt[1] = ETM_BSIM;
46 cmdpkt[2] = BSIM_CMD_CHG_START;
47 send_etm_cmd(cmdpkt, 2);
48 return(0);
49 }
50
51 cmd_bsim_start_enable(argc, argv)
52 char **argv;
53 {
54 u_char cmdpkt[5];
55
56 cmdpkt[1] = ETM_BSIM;
57 cmdpkt[2] = BSIM_CMD_START_ENABLE;
58 cmdpkt[3] = strtoul(argv[1], 0, 0);
59 send_etm_cmd(cmdpkt, 3);
60 return(0);
61 }
62
63 cmd_bsim_ci2cv(argc, argv)
64 char **argv;
65 {
66 u_char cmdpkt[4];
67
68 cmdpkt[1] = ETM_BSIM;
69 cmdpkt[2] = BSIM_CMD_CHG_CI2CV;
70 send_etm_cmd(cmdpkt, 2);
71 return(0);
72 }
73
74 cmd_bsim_complete(argc, argv)
75 char **argv;
76 {
77 u_char cmdpkt[4];
78
79 cmdpkt[1] = ETM_BSIM;
80 cmdpkt[2] = BSIM_CMD_CHG_COMPLETE;
81 send_etm_cmd(cmdpkt, 2);
82 return(0);
83 }
84
85 cmd_bsim_ichg(argc, argv)
86 char **argv;
87 {
88 u_char cmdpkt[6];
89 unsigned ichg;
90
91 ichg = strtoul(argv[1], 0, 0);
92 cmdpkt[1] = ETM_BSIM;
93 cmdpkt[2] = BSIM_CMD_SET_ICHG;
94 cmdpkt[3] = ichg;
95 cmdpkt[4] = ichg >> 8;
96 send_etm_cmd(cmdpkt, 4);
97 return(0);
98 }
99
100 static struct cmdtab {
101 char *cmd;
102 int minargs;
103 int maxargs;
104 int (*func)();
105 } bsim_cmds[] = {
106 {"ci2cv", 0, 0, cmd_bsim_ci2cv},
107 {"complete", 0, 0, cmd_bsim_complete},
108 {"disch", 1, 1, cmd_bsim_disch},
109 {"ichg", 1, 1, cmd_bsim_ichg},
110 {"query", 0, 0, cmd_bsim_query},
111 {"start", 0, 0, cmd_bsim_start},
112 {"start-enable", 1, 1, cmd_bsim_start_enable},
113 {0, 0, 0, 0}
114 };
115
116 cmd_bsim(argc, argv)
117 char **argv;
118 {
119 struct cmdtab *tp;
120 int extargs;
121
122 for (tp = bsim_cmds; tp->cmd; tp++)
123 if (!strcmp(tp->cmd, argv[1]))
124 break;
125 if (!tp->func) {
126 printf("error: no such bsim command\n");
127 return(ERROR_USAGE);
128 }
129 extargs = argc - 2;
130 if (extargs > tp->maxargs) {
131 printf("error: too many arguments\n");
132 return(ERROR_USAGE);
133 }
134 if (extargs < tp->minargs) {
135 printf("error: too few arguments\n");
136 return(ERROR_USAGE);
137 }
138 return tp->func(argc - 1, argv + 1);
139 }