Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | /*
* Copyright (c) 2021 Antmicro <www.antmicro.com>
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <sys/printk.h>
#include <shell/shell.h>
#include <version.h>
#include <stdlib.h>
#include <drivers/fpga.h>
static int parse_common_args(const struct shell *sh, char **argv,
const struct device **dev)
{
*dev = device_get_binding(argv[1]);
if (!*dev) {
shell_error(sh, "FPGA device %s not found", argv[1]);
return -ENODEV;
}
return 0;
}
static int cmd_on(const struct shell *sh, size_t argc, char **argv)
{
const struct device *dev;
int err;
err = parse_common_args(sh, argv, &dev);
if (err < 0) {
return err;
}
shell_print(sh, "%s: turning on", dev->name);
err = fpga_on(dev);
if (err) {
shell_error(sh, "Error: %d", err);
}
return err;
}
static int cmd_off(const struct shell *sh, size_t argc, char **argv)
{
const struct device *dev;
int err;
err = parse_common_args(sh, argv, &dev);
if (err < 0) {
return err;
}
shell_print(sh, "%s: turning off", dev->name);
err = fpga_off(dev);
if (err) {
shell_error(sh, "Error: %d", err);
}
return err;
}
static int cmd_reset(const struct shell *sh, size_t argc, char **argv)
{
const struct device *dev;
int err;
err = parse_common_args(sh, argv, &dev);
if (err < 0) {
return err;
}
shell_print(sh, "%s: resetting FPGA", dev->name);
err = fpga_reset(dev);
if (err) {
shell_error(sh, "Error: %d", err);
}
return err;
}
static int cmd_load(const struct shell *sh, size_t argc, char **argv)
{
const struct device *dev;
int err;
err = parse_common_args(sh, argv, &dev);
if (err < 0) {
return err;
}
shell_print(sh, "%s: loading bitstream", dev->name);
fpga_load(dev, (uint32_t *)strtol(argv[2], NULL, 0),
(uint32_t)atoi(argv[3]));
return err;
}
static int cmd_get_status(const struct shell *sh, size_t argc, char **argv)
{
const struct device *dev;
int err;
err = parse_common_args(sh, argv, &dev);
if (err < 0) {
return err;
}
shell_print(sh, "%s status: %d", dev->name, fpga_get_status(dev));
return err;
}
static int cmd_get_info(const struct shell *sh, size_t argc, char **argv)
{
const struct device *dev;
int err;
err = parse_common_args(sh, argv, &dev);
if (err < 0) {
return err;
}
shell_print(sh, "%s", fpga_get_info(dev));
return err;
}
SHELL_STATIC_SUBCMD_SET_CREATE(
sub_fpga, SHELL_CMD_ARG(off, NULL, "<device>", cmd_off, 2, 0),
SHELL_CMD_ARG(on, NULL, "<device>", cmd_on, 2, 0),
SHELL_CMD_ARG(reset, NULL, "<device>", cmd_reset, 2, 0),
SHELL_CMD_ARG(load, NULL, "<device> <address> <size in bytes>",
cmd_load, 4, 0),
SHELL_CMD_ARG(get_status, NULL, "<device>", cmd_get_status, 2, 0),
SHELL_CMD_ARG(get_info, NULL, "<device>", cmd_get_info, 2, 0),
SHELL_SUBCMD_SET_END);
SHELL_CMD_REGISTER(fpga, &sub_fpga, "FPGA commands", NULL);
|