[PATCH 5/5] i2c tool : port to RTEMS
Vijay Kumar Banerjee
vijaykumar9597 at gmail.com
Sat Jun 1 19:20:14 UTC 2019
---
freebsd/usr.sbin/i2c/i2c.c | 35 +++++++++++++++++++
libbsd.py | 2 ++
rtemsbsd/include/machine/rtems-bsd-commands.h | 2 ++
rtemsbsd/include/rtems/netcmds-config.h | 2 ++
rtemsbsd/rtems/rtems-bsd-shell-i2c.c | 35 +++++++++++++++++++
5 files changed, 76 insertions(+)
create mode 100644 rtemsbsd/rtems/rtems-bsd-shell-i2c.c
diff --git a/freebsd/usr.sbin/i2c/i2c.c b/freebsd/usr.sbin/i2c/i2c.c
index 084682a1..840f78f6 100644
--- a/freebsd/usr.sbin/i2c/i2c.c
+++ b/freebsd/usr.sbin/i2c/i2c.c
@@ -28,6 +28,13 @@
* SUCH DAMAGE.
*/
+#ifdef __rtems__
+#define __need_getopt_newlib
+#include <getopt.h>
+#include <machine/rtems-bsd-program.h>
+#include <machine/rtems-bsd-commands.h>
+#endif /* __rtems__ */
+
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
@@ -560,6 +567,24 @@ err2:
return (1);
}
+#ifdef __rtems__
+static int main(int argc, char *argv[]);
+
+int
+rtems_bsd_command_i2c(int argc, char *argv[])
+{
+ int exit_code;
+ void *data_begin;
+ size_t data_size;
+
+ rtems_bsd_program_lock();
+ exit_code = rtems_bsd_program_call_main("i2c", main, argc, argv);
+ rtems_bsd_program_unlock();
+
+ return exit_code;
+}
+#endif /* __rtems__ */
+
int
main(int argc, char** argv)
{
@@ -568,6 +593,16 @@ main(int argc, char** argv)
char *dev, *skip_addr, *i2c_buf;
int error, chunk_size, i, j, ch;
+#ifdef __rtems__
+ struct getopt_data getopt_data;
+ memset(&getopt_data, 0, sizeof(getopt_data));
+#define optind getopt_data.optind
+#define optarg getopt_data.optarg
+#define opterr getopt_data.opterr
+#define optopt getopt_data.optopt
+#define getopt(argc, argv, opt) getopt_r(argc, argv, "+" opt, &getopt_data)
+#endif /* __rtems__ */
+
errno = 0;
error = 0;
diff --git a/libbsd.py b/libbsd.py
index 6e8ff987..c4b6f5eb 100644
--- a/libbsd.py
+++ b/libbsd.py
@@ -176,6 +176,7 @@ class rtems(builder.Module):
'rtems/rtems-bsd-rc-conf.c',
'rtems/rtems-bsd-set-if-input.c',
'rtems/rtems-bsd-shell-arp.c',
+ 'rtems/rtems-bsd-shell-i2c.c',
'rtems/rtems-bsd-shell-ifconfig.c',
'rtems/rtems-bsd-shell-netstat.c',
'rtems/rtems-bsd-shell-pfctl.c',
@@ -2990,6 +2991,7 @@ class user_space(builder.Module):
'usr.bin/netstat/unix.c',
'usr.bin/vmstat/vmstat.c',
'usr.sbin/arp/arp.c',
+ 'usr.sbin/i2c/i2c.c',
],
mm.generator['source'](['-DINET'])
)
diff --git a/rtemsbsd/include/machine/rtems-bsd-commands.h b/rtemsbsd/include/machine/rtems-bsd-commands.h
index 1b022902..f5f2955a 100644
--- a/rtemsbsd/include/machine/rtems-bsd-commands.h
+++ b/rtemsbsd/include/machine/rtems-bsd-commands.h
@@ -54,6 +54,8 @@ int rtems_bsd_command_netstat(int argc, char **argv);
int rtems_bsd_command_pfctl(int argc, char **argv);
+int rtems_bsd_command_i2c(int argc, char **argv);
+
int rtems_bsd_command_ping(int argc, char **argv);
int rtems_bsd_command_ping6(int argc, char **argv);
diff --git a/rtemsbsd/include/rtems/netcmds-config.h b/rtemsbsd/include/rtems/netcmds-config.h
index f8dcdcdc..4d72a4fa 100644
--- a/rtemsbsd/include/rtems/netcmds-config.h
+++ b/rtemsbsd/include/rtems/netcmds-config.h
@@ -26,6 +26,8 @@ extern rtems_shell_cmd_t rtems_shell_ARP_Command;
extern rtems_shell_cmd_t rtems_shell_PFCTL_Command;
+extern rtems_shell_cmd_t rtems_shell_I2C_Command;
+
extern rtems_shell_cmd_t rtems_shell_PING_Command;
extern rtems_shell_cmd_t rtems_shell_PING6_Command;
diff --git a/rtemsbsd/rtems/rtems-bsd-shell-i2c.c b/rtemsbsd/rtems/rtems-bsd-shell-i2c.c
new file mode 100644
index 00000000..2e1da406
--- /dev/null
+++ b/rtemsbsd/rtems/rtems-bsd-shell-i2c.c
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2019 Vijay Kumar Banerjee <vijaykumar9597 at gmail.com.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <rtems/netcmds-config.h>
+#include <machine/rtems-bsd-commands.h>
+
+rtems_shell_cmd_t rtems_shell_I2C_Command = {
+ .name = "i2c",
+ .usage = "i2c [args]",
+ .topic = "i2c",
+ .command = rtems_bsd_command_i2c
+};
--
2.20.1
More information about the devel
mailing list