#include <stdio.h>
#include <stdlib.h>
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+
#define STRINGIFY(val) #val
#define TOSTRING(val) STRINGIFY(val)
printf("\n");
}
+void can_str2frame(const char *str, struct can_frame *cf)
+{
+ char *extra;
+ unsigned char *d = cf->data;
+ int ret = sscanf(str,
+ "%x#%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx%ms",
+ &cf->can_id,
+ d+0, d+1, d+2, d+3, d+4, d+5, d+6, d+7, &extra);
+ if (ret < 1) {
+ fprintf(stderr, "Error parsing CAN frame '%s'\n", str);
+ exit(1);
+ }
+ if (ret > 9) {
+ fprintf(stderr, "Error: Extra input '%s'\n", extra);
+ exit(1);
+ }
+ cf->can_dlc = ret - 1;
+}
+
+char *cansend_parse_args(int argc, char *argv[], int *count, struct can_frame *cf_array, size_t max_count)
+{
+ int i;
+ if (argc < 3) {
+ fprintf(stderr, "Usage: %s <CAN interface> <CAN frame>...\n", argv[0]);
+ fprintf(stderr, " CAN frame is ID#DATA, e.g. 123#4567\n");
+ exit(1);
+ }
+
+ for (i = 0; i < MIN(argc - 2, max_count); i++)
+ can_str2frame(argv[i + 2], &cf_array[i]);
+ *count = argc - 2;
+ return argv[1];
+}
#endif