31
31
32
32
#include <shell/shell.h>
33
33
#include <console/console.h>
34
+ #include <streamer/streamer.h>
34
35
35
36
#include "panmaster/panmaster.h"
36
37
#include "panmaster_priv.h"
37
38
#include "imgmgr/imgmgr.h"
38
39
#include <bootutil/image.h>
39
40
40
- static int panmaster_cli_cmd (int argc , char * * argv );
41
+ static int panmaster_cli_cmd (const struct shell_cmd * cmd , int argc , char * * argv , struct streamer * streamer );
41
42
42
43
#if MYNEWT_VAL (SHELL_CMD_HELP )
43
44
const struct shell_param cmd_pm_param [] = {
@@ -58,15 +59,7 @@ const struct shell_cmd_help cmd_pm_help = {
58
59
};
59
60
#endif
60
61
61
-
62
- static struct shell_cmd shell_panmaster_cmd = {
63
- .sc_cmd = "panm" ,
64
- .sc_cmd_func = panmaster_cli_cmd ,
65
- #if MYNEWT_VAL (SHELL_CMD_HELP )
66
- .help = & cmd_pm_help
67
- #endif
68
- };
69
-
62
+ static struct shell_cmd shell_panmaster_cmd = SHELL_CMD_EXT ("panm" , panmaster_cli_cmd , & cmd_pm_help );
70
63
71
64
static void
72
65
list_nodes_load_cb (struct panmaster_node * node , void * cb_arg )
@@ -82,7 +75,7 @@ list_nodes_load_cb(struct panmaster_node *node, void *cb_arg)
82
75
83
76
#define LIST_NODES_BLK_NNODES (32)
84
77
static void
85
- list_nodes_blk ()
78
+ list_nodes_blk (struct streamer * streamer )
86
79
{
87
80
int i ,j ;
88
81
struct panmaster_node_idx * node_idx ;
@@ -94,7 +87,7 @@ list_nodes_blk()
94
87
lne .nodes = (struct panmaster_node * )malloc (lne_nodes_sz );
95
88
96
89
if (!lne .nodes ) {
97
- console_printf ( "err:mem\n" );
90
+ streamer_printf ( streamer , "err:mem\n" );
98
91
return ;
99
92
}
100
93
@@ -104,7 +97,7 @@ list_nodes_blk()
104
97
105
98
panmaster_node_idx (& node_idx , & num_nodes );
106
99
os_gettimeofday (& utctime , & timezone );
107
- console_printf ( "#idx, addr, role, slot, p, lease, euid, flags, date-added, fw-ver\n" );
100
+ streamer_printf ( streamer , "#idx, addr, role, slot, p, lease, euid, flags, date-added, fw-ver\n" );
108
101
for (i = 0 ;i < num_nodes ;i += LIST_NODES_BLK_NNODES ) {
109
102
lne .index_off = i ;
110
103
lne .index_max = i + LIST_NODES_BLK_NNODES ;
@@ -117,39 +110,39 @@ list_nodes_blk()
117
110
continue ;
118
111
}
119
112
120
- console_printf ( "%4d, " , i + j );
121
- console_printf ( "%4x, " , lne .nodes [j ].addr );
113
+ streamer_printf ( streamer , "%4d, " , i + j );
114
+ streamer_printf ( streamer , "%4x, " , lne .nodes [j ].addr );
122
115
int slot_id = node_idx [lne .nodes [j ].index ].slot_id ;
123
116
if (lne .nodes [j ].has_perm_slot ) {
124
117
slot_id = lne .nodes [j ].slot_id ;
125
118
}
126
- console_printf ( "%4X, " , lne .nodes [j ].role );
119
+ streamer_printf ( streamer , "%4X, " , lne .nodes [j ].role );
127
120
if (slot_id != 0xffff ) {
128
- console_printf ( "%4d, " , slot_id );
121
+ streamer_printf ( streamer , "%4d, " , slot_id );
129
122
} else {
130
- console_printf ( " , " );
123
+ streamer_printf ( streamer , " , " );
131
124
}
132
- console_printf ( "%s, " , (lne .nodes [j ].has_perm_slot )?"p" :" " );
125
+ streamer_printf ( streamer , "%s, " , (lne .nodes [j ].has_perm_slot )?"p" :" " );
133
126
134
127
if (node_idx [lne .nodes [j ].index ].lease_ends ) {
135
128
os_get_uptime (& tv );
136
129
int32_t le_ms = node_idx [lne .nodes [j ].index ].lease_ends ;
137
130
int32_t now_ms = tv .tv_sec * 1000 + tv .tv_usec /1000 ;
138
131
le_ms = le_ms - now_ms ;
139
132
if (le_ms < 0 ) le_ms = 0 ;
140
- console_printf ( "%4ld.%ld, " , le_ms /1000 , (le_ms - 1000 * (le_ms /1000 ))/100 );
133
+ streamer_printf ( streamer , "%4ld.%ld, " , le_ms /1000 , (le_ms - 1000 * (le_ms /1000 ))/100 );
141
134
} else {
142
- console_printf ( " , " );
135
+ streamer_printf ( streamer , " , " );
143
136
}
144
137
145
- console_printf ( "%016llX, " , lne .nodes [j ].euid );
146
- console_printf ( "%5X, " , lne .nodes [j ].flags );
138
+ streamer_printf ( streamer , "%016llX, " , lne .nodes [j ].euid );
139
+ streamer_printf ( streamer , "%5X, " , lne .nodes [j ].flags );
147
140
148
141
utctime .tv_sec = lne .nodes [j ].first_seen_utc ;
149
142
utctime .tv_usec = 0 ;
150
143
datetime_format (& utctime , & timezone , buf , sizeof (buf ));
151
144
buf [19 ]= '\0' ;
152
- console_printf ( "%s, " , buf );
145
+ streamer_printf ( streamer , "%s, " , buf );
153
146
struct image_version fw_ver = {
154
147
.iv_major = lne .nodes [j ].fw_ver .iv_major ,
155
148
.iv_minor = lne .nodes [j ].fw_ver .iv_minor ,
@@ -158,8 +151,8 @@ list_nodes_blk()
158
151
};
159
152
imgr_ver_str (& fw_ver , ver_str );
160
153
161
- console_printf ( "%s" , ver_str );
162
- console_printf ( "\n" );
154
+ streamer_printf ( streamer , "%s" , ver_str );
155
+ streamer_printf ( streamer , "\n" );
163
156
}
164
157
}
165
158
free (lne .nodes );
@@ -169,7 +162,8 @@ static void
169
162
dump_cb (struct panmaster_node * n , void * cb_arg )
170
163
{
171
164
char ver_str [32 ];
172
- console_printf ("%3d %04x %016llx %x %x %d %d " , n -> index , n -> addr , n -> euid ,
165
+ struct streamer * streamer = (struct streamer * )cb_arg ;
166
+ streamer_printf (streamer , "%3d %04x %016llx %x %x %d %d " , n -> index , n -> addr , n -> euid ,
173
167
n -> flags , n -> role , n -> has_perm_slot , n -> slot_id );
174
168
175
169
struct image_version fw_ver = {
@@ -179,19 +173,19 @@ dump_cb(struct panmaster_node *n, void *cb_arg)
179
173
.iv_build_num = n -> fw_ver .iv_build_num ,
180
174
};
181
175
imgr_ver_str (& fw_ver , ver_str );
182
- console_printf ( "%s\n" , ver_str );
176
+ streamer_printf ( streamer , "%s\n" , ver_str );
183
177
184
178
}
185
179
186
180
static void
187
- dump (void )
181
+ dump (struct streamer * streamer )
188
182
{
189
- console_printf ( "# index addr euid flags role pslot slot_id fw-ver\n" );
190
- panmaster_load (dump_cb , 0 );
183
+ streamer_printf ( streamer , "# index addr euid flags role pslot slot_id fw-ver\n" );
184
+ panmaster_load (dump_cb , streamer );
191
185
}
192
186
193
187
static int
194
- panmaster_cli_cmd (int argc , char * * argv )
188
+ panmaster_cli_cmd (const struct shell_cmd * cmd , int argc , char * * argv , struct streamer * streamer )
195
189
{
196
190
int rc ;
197
191
int slot_id , role ;
@@ -200,14 +194,14 @@ panmaster_cli_cmd(int argc, char **argv)
200
194
struct panmaster_node * node ;
201
195
202
196
if (argc < 2 ) {
203
- console_printf ( "Too few args\n" );
197
+ streamer_printf ( streamer , "Too few args\n" );
204
198
return 0 ;
205
199
}
206
200
if (!strcmp (argv [1 ], "list" )) {
207
- list_nodes_blk ();
201
+ list_nodes_blk (streamer );
208
202
} else if (!strcmp (argv [1 ], "add" )) {
209
203
if (argc < 3 ) {
210
- console_printf ( "euid needed\n" );
204
+ streamer_printf ( streamer , "euid needed\n" );
211
205
return 0 ;
212
206
}
213
207
euid = strtoll (argv [2 ], NULL , 16 );
@@ -223,21 +217,21 @@ panmaster_cli_cmd(int argc, char **argv)
223
217
rc = panmaster_idx_find_node (euid , 0 , & node );
224
218
panmaster_postprocess ();
225
219
if (!rc ) {
226
- console_printf ( "Added node euid: 0x%llX, addr 0x%X\n" ,
220
+ streamer_printf ( streamer , "Added node euid: 0x%llX, addr 0x%X\n" ,
227
221
euid , node -> addr );
228
222
} else {
229
- console_printf ( "Add node err\n" );
223
+ streamer_printf ( streamer , "Add node err\n" );
230
224
}
231
225
} else if (!strcmp (argv [1 ], "del" )) {
232
226
if (argc < 3 ) {
233
- console_printf ( "euid needed\n" );
227
+ streamer_printf ( streamer , "euid needed\n" );
234
228
return 0 ;
235
229
}
236
230
euid = strtoll (argv [2 ], NULL , 16 );
237
231
panmaster_delete_node (euid );
238
232
} else if (!strcmp (argv [1 ], "pslot" )) {
239
233
if (argc < 4 ) {
240
- console_printf ( "euid+slot_id needed\n" );
234
+ streamer_printf ( streamer , "euid+slot_id needed\n" );
241
235
return 0 ;
242
236
}
243
237
euid = strtoll (argv [2 ], NULL , 16 );
@@ -248,23 +242,23 @@ panmaster_cli_cmd(int argc, char **argv)
248
242
249
243
rc = panmaster_idx_find_node (euid , 0 , & node );
250
244
if (!rc ) {
251
- console_printf ( "0x%llX: pslot -> " , euid );
245
+ streamer_printf ( streamer , "0x%llX: pslot -> " , euid );
252
246
if (slot_id > -1 ) {
253
247
node -> slot_id = slot_id ;
254
248
node -> has_perm_slot = 1 ;
255
- console_printf ( "%d\n " , slot_id );
249
+ streamer_printf ( streamer , "%d\n " , slot_id );
256
250
} else {
257
251
node -> slot_id = 0 ;
258
252
node -> has_perm_slot = 0 ;
259
- console_printf ( "<removed>\n" );
253
+ streamer_printf ( streamer , "<removed>\n" );
260
254
}
261
255
panmaster_save_node (node );
262
256
} else {
263
- console_printf ( "err\n" );
257
+ streamer_printf ( streamer , "err\n" );
264
258
}
265
259
} else if (!strcmp (argv [1 ], "role" )) {
266
260
if (argc < 4 ) {
267
- console_printf ( "euid+role needed\n" );
261
+ streamer_printf ( streamer , "euid+role needed\n" );
268
262
return 0 ;
269
263
}
270
264
euid = strtoll (argv [2 ], NULL , 16 );
@@ -275,11 +269,11 @@ panmaster_cli_cmd(int argc, char **argv)
275
269
276
270
rc = panmaster_idx_find_node (euid , 0 , & node );
277
271
if (!rc ) {
278
- console_printf ( "0x%llX: role -> %d\n " , euid , role );
272
+ streamer_printf ( streamer , "0x%llX: role -> %d\n " , euid , role );
279
273
node -> role = role ;
280
274
panmaster_save_node (node );
281
275
} else {
282
- console_printf ( "err\n" );
276
+ streamer_printf ( streamer , "err\n" );
283
277
}
284
278
} else if (!strcmp (argv [1 ], "clear" )) {
285
279
panmaster_clear_list ();
@@ -288,9 +282,9 @@ panmaster_cli_cmd(int argc, char **argv)
288
282
} else if (!strcmp (argv [1 ], "sort" )) {
289
283
panmaster_sort ();
290
284
} else if (!strcmp (argv [1 ], "dump" )) {
291
- dump ();
285
+ dump (streamer );
292
286
} else {
293
- console_printf ( "Unknown cmd\n" );
287
+ streamer_printf ( streamer , "Unknown cmd\n" );
294
288
}
295
289
return 0 ;
296
290
}
0 commit comments