Loading tools/spi/spidev_test.c +47 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <getopt.h> #include <fcntl.h> #include <sys/ioctl.h> #include <sys/stat.h> #include <linux/types.h> #include <linux/spi/spidev.h> Loading @@ -33,6 +34,7 @@ static void pabort(const char *s) static const char *device = "/dev/spidev1.1"; static uint32_t mode; static uint8_t bits = 8; static char *input_file; static uint32_t speed = 500000; static uint16_t delay; static int verbose; Loading Loading @@ -144,6 +146,7 @@ static void print_usage(const char *prog) " -s --speed max speed (Hz)\n" " -d --delay delay (usec)\n" " -b --bpw bits per word \n" " -i --input input data from a file (e.g. \"test.bin\")\n" " -l --loop loopback\n" " -H --cpha clock phase\n" " -O --cpol clock polarity\n" Loading @@ -167,6 +170,7 @@ static void parse_opts(int argc, char *argv[]) { "speed", 1, 0, 's' }, { "delay", 1, 0, 'd' }, { "bpw", 1, 0, 'b' }, { "input", 1, 0, 'i' }, { "loop", 0, 0, 'l' }, { "cpha", 0, 0, 'H' }, { "cpol", 0, 0, 'O' }, Loading @@ -182,7 +186,8 @@ static void parse_opts(int argc, char *argv[]) }; int c; c = getopt_long(argc, argv, "D:s:d:b:lHOLC3NR24p:v", lopts, NULL); c = getopt_long(argc, argv, "D:s:d:b:i:lHOLC3NR24p:v", lopts, NULL); if (c == -1) break; Loading @@ -200,6 +205,9 @@ static void parse_opts(int argc, char *argv[]) case 'b': bits = atoi(optarg); break; case 'i': input_file = optarg; break; case 'l': mode |= SPI_LOOP; break; Loading Loading @@ -269,6 +277,39 @@ static void transfer_escaped_string(int fd, char *str) free(tx); } static void transfer_file(int fd, char *filename) { ssize_t bytes; struct stat sb; int tx_fd; uint8_t *tx; uint8_t *rx; if (stat(filename, &sb) == -1) pabort("can't stat input file"); tx_fd = open(filename, O_RDONLY); if (fd < 0) pabort("can't open input file"); tx = malloc(sb.st_size); if (!tx) pabort("can't allocate tx buffer"); rx = malloc(sb.st_size); if (!rx) pabort("can't allocate rx buffer"); bytes = read(tx_fd, tx, sb.st_size); if (bytes != sb.st_size) pabort("failed to read input file"); transfer(fd, tx, rx, sb.st_size); free(rx); free(tx); close(tx_fd); } int main(int argc, char *argv[]) { int ret = 0; Loading Loading @@ -317,8 +358,13 @@ int main(int argc, char *argv[]) printf("bits per word: %d\n", bits); printf("max speed: %d Hz (%d KHz)\n", speed, speed/1000); if (input_tx && input_file) pabort("only one of -p and --input may be selected"); if (input_tx) transfer_escaped_string(fd, input_tx); else if (input_file) transfer_file(fd, input_file); else transfer(fd, default_tx, default_rx, sizeof(default_tx)); Loading Loading
tools/spi/spidev_test.c +47 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <getopt.h> #include <fcntl.h> #include <sys/ioctl.h> #include <sys/stat.h> #include <linux/types.h> #include <linux/spi/spidev.h> Loading @@ -33,6 +34,7 @@ static void pabort(const char *s) static const char *device = "/dev/spidev1.1"; static uint32_t mode; static uint8_t bits = 8; static char *input_file; static uint32_t speed = 500000; static uint16_t delay; static int verbose; Loading Loading @@ -144,6 +146,7 @@ static void print_usage(const char *prog) " -s --speed max speed (Hz)\n" " -d --delay delay (usec)\n" " -b --bpw bits per word \n" " -i --input input data from a file (e.g. \"test.bin\")\n" " -l --loop loopback\n" " -H --cpha clock phase\n" " -O --cpol clock polarity\n" Loading @@ -167,6 +170,7 @@ static void parse_opts(int argc, char *argv[]) { "speed", 1, 0, 's' }, { "delay", 1, 0, 'd' }, { "bpw", 1, 0, 'b' }, { "input", 1, 0, 'i' }, { "loop", 0, 0, 'l' }, { "cpha", 0, 0, 'H' }, { "cpol", 0, 0, 'O' }, Loading @@ -182,7 +186,8 @@ static void parse_opts(int argc, char *argv[]) }; int c; c = getopt_long(argc, argv, "D:s:d:b:lHOLC3NR24p:v", lopts, NULL); c = getopt_long(argc, argv, "D:s:d:b:i:lHOLC3NR24p:v", lopts, NULL); if (c == -1) break; Loading @@ -200,6 +205,9 @@ static void parse_opts(int argc, char *argv[]) case 'b': bits = atoi(optarg); break; case 'i': input_file = optarg; break; case 'l': mode |= SPI_LOOP; break; Loading Loading @@ -269,6 +277,39 @@ static void transfer_escaped_string(int fd, char *str) free(tx); } static void transfer_file(int fd, char *filename) { ssize_t bytes; struct stat sb; int tx_fd; uint8_t *tx; uint8_t *rx; if (stat(filename, &sb) == -1) pabort("can't stat input file"); tx_fd = open(filename, O_RDONLY); if (fd < 0) pabort("can't open input file"); tx = malloc(sb.st_size); if (!tx) pabort("can't allocate tx buffer"); rx = malloc(sb.st_size); if (!rx) pabort("can't allocate rx buffer"); bytes = read(tx_fd, tx, sb.st_size); if (bytes != sb.st_size) pabort("failed to read input file"); transfer(fd, tx, rx, sb.st_size); free(rx); free(tx); close(tx_fd); } int main(int argc, char *argv[]) { int ret = 0; Loading Loading @@ -317,8 +358,13 @@ int main(int argc, char *argv[]) printf("bits per word: %d\n", bits); printf("max speed: %d Hz (%d KHz)\n", speed, speed/1000); if (input_tx && input_file) pabort("only one of -p and --input may be selected"); if (input_tx) transfer_escaped_string(fd, input_tx); else if (input_file) transfer_file(fd, input_file); else transfer(fd, default_tx, default_rx, sizeof(default_tx)); Loading