@@ -224,6 +224,75 @@ static void can_shell_print_capabilities(const struct shell *sh, can_mode_t cap)
224
224
}
225
225
}
226
226
227
+ static int cmd_can_show (const struct shell * sh , size_t argc , char * * argv )
228
+ {
229
+ const struct device * dev = device_get_binding (argv [1 ]);
230
+ struct can_bus_err_cnt err_cnt ;
231
+ enum can_state state ;
232
+ uint32_t max_bitrate = 0 ;
233
+ int max_std_filters = 0 ;
234
+ int max_ext_filters = 0 ;
235
+ uint32_t core_clock ;
236
+ can_mode_t cap ;
237
+ int err ;
238
+
239
+ if (!device_is_ready (dev )) {
240
+ shell_error (sh , "device %s not ready" , argv [1 ]);
241
+ return - ENODEV ;
242
+ }
243
+
244
+ err = can_get_core_clock (dev , & core_clock );
245
+ if (err != 0 ) {
246
+ shell_error (sh , "failed to get CAN core clock (err %d)" , err );
247
+ return err ;
248
+ }
249
+
250
+ err = can_get_max_bitrate (dev , & max_bitrate );
251
+ if (err != 0 && err != - ENOSYS ) {
252
+ shell_error (sh , "failed to get maximum bitrate (err %d)" , err );
253
+ return err ;
254
+ }
255
+
256
+ max_std_filters = can_get_max_filters (dev , CAN_STANDARD_IDENTIFIER );
257
+ if (max_std_filters < 0 && max_std_filters != - ENOSYS ) {
258
+ shell_error (sh , "failed to get maximum standard (11-bit) filters (err %d)" , err );
259
+ return err ;
260
+ }
261
+
262
+ max_ext_filters = can_get_max_filters (dev , CAN_EXTENDED_IDENTIFIER );
263
+ if (max_ext_filters < 0 && max_ext_filters != - ENOSYS ) {
264
+ shell_error (sh , "failed to get maximum extended (29-bit) filters (err %d)" , err );
265
+ return err ;
266
+ }
267
+
268
+ err = can_get_capabilities (dev , & cap );
269
+ if (err != 0 ) {
270
+ shell_error (sh , "failed to get CAN controller capabilities (err %d)" , err );
271
+ return err ;
272
+ }
273
+
274
+ err = can_get_state (dev , & state , & err_cnt );
275
+ if (err != 0 ) {
276
+ shell_error (sh , "failed to get CAN controller state (%d)" , err );
277
+ return err ;
278
+ }
279
+
280
+ shell_print (sh , "core clock: %d Hz" , core_clock );
281
+ shell_print (sh , "max bitrate: %d bps" , max_bitrate );
282
+ shell_print (sh , "max std filters: %d" , max_std_filters );
283
+ shell_print (sh , "max ext filters: %d" , max_ext_filters );
284
+
285
+ shell_fprintf (sh , SHELL_NORMAL , "capabilities: normal " );
286
+ can_shell_print_capabilities (sh , cap );
287
+ shell_fprintf (sh , SHELL_NORMAL , "\n" );
288
+
289
+ shell_print (sh , "state: %s" , can_shell_state_to_string (state ));
290
+ shell_print (sh , "rx errors: %d" , err_cnt .rx_err_cnt );
291
+ shell_print (sh , "tx errors: %d" , err_cnt .tx_err_cnt );
292
+
293
+ return 0 ;
294
+ }
295
+
227
296
static int cmd_can_bitrate_set (const struct shell * sh , size_t argc , char * * argv )
228
297
{
229
298
const struct device * dev = device_get_binding (argv [1 ]);
@@ -739,6 +808,10 @@ SHELL_STATIC_SUBCMD_SET_CREATE(sub_can_filter_cmds,
739
808
);
740
809
741
810
SHELL_STATIC_SUBCMD_SET_CREATE (sub_can_cmds ,
811
+ SHELL_CMD_ARG (show , & dsub_can_device_name ,
812
+ "Show CAN controller information\n"
813
+ "Usage: can show <device>" ,
814
+ cmd_can_show , 2 , 0 ),
742
815
SHELL_CMD_ARG (bitrate , & dsub_can_device_name ,
743
816
"Set CAN controller bitrate and optional sample point\n"
744
817
"Usage: can bitrate <device> <bitrate> [sample point]" ,
0 commit comments