[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