--- /root/files/fbsd/current/src/usr.sbin/spi/spi.c 2024-02-01 03:03:50.862992000 +0200 +++ spi.c 2025-12-13 20:04:26.728878000 +0200 @@ -40,6 +40,7 @@ #include #include #include +#include #define DEFAULT_DEVICE_NAME "/dev/spigen0.0" @@ -146,6 +147,8 @@ " -A uses ASCII for input/output as 2-digit hex values\n" " -b Override output format as binary (only valid with '-A')\n" " -v verbose output\n" + " -S constantly stream from stdin to bus\n" + " -t when streaming, print time after each operation\n" " -h prints this message\n" "\n" "NOTE: setting the mode and/or speed is 'sticky'. Subsequent transactions\n" @@ -158,11 +161,13 @@ main(int argc, char *argv[], char *envp[] __unused) { struct spi_options opt; - int err, ch, hdev, finfo, fdir; + int err, ch, hdev, finfo, stream, ts, fdir; char *pstr; char dev_name[PATH_MAX * 2 + 5]; finfo = 0; + stream = 0; + ts = 0; fdir = DIR_NONE; hdev = -1; @@ -180,7 +185,7 @@ opt.ncmd = 0; opt.pcmd = NULL; - while (!err && (ch = getopt(argc, argv, "f:d:m:s:c:C:AbLvih")) != -1) { + while (!err && (ch = getopt(argc, argv, "f:d:m:s:c:C:AbLviSth")) != -1) { switch (ch) { case 'd': if (optarg[0] == 'r') { @@ -275,6 +280,14 @@ finfo = 1; break; + case 'S': + stream = 1; + break; + + case 't': + ts = 1; + break; + default: err = 1; /* FALLTHROUGH */ @@ -358,14 +371,31 @@ /* do data transfer */ - if (fdir == DIR_READ) { - err = perform_read(hdev, &opt); + if (stream) { + while (1) { + if (fdir == DIR_READ) { + err = perform_read(hdev, &opt); + } + else if (fdir == DIR_WRITE) { + err = perform_write(hdev, &opt); + } + else if (fdir == DIR_READWRITE) { + err = perform_readwrite(hdev, &opt); + } + if (ts) + fprintf(stdout, "%u\n", (unsigned)time(NULL)); + } } - else if (fdir == DIR_WRITE) { - err = perform_write(hdev, &opt); - } - else if (fdir == DIR_READWRITE) { - err = perform_readwrite(hdev, &opt); + else { + if (fdir == DIR_READ) { + err = perform_read(hdev, &opt); + } + else if (fdir == DIR_WRITE) { + err = perform_write(hdev, &opt); + } + else if (fdir == DIR_READWRITE) { + err = perform_readwrite(hdev, &opt); + } } the_end: