From: Denys Dmytriyenko <[email protected]>

Signed-off-by: Denys Dmytriyenko <[email protected]>
---
 ...01-Add-option-to-enable-internal-loopback.patch | 80 ++++++++++++++++++++++
 .../0002-Restore-original-loopback-config.patch    | 48 +++++++++++++
 .../serialcheck/serialcheck_1.0.0.bb               | 19 +++++
 3 files changed, 147 insertions(+)
 create mode 100644 
meta-oe/recipes-devtools/serialcheck/serialcheck/0001-Add-option-to-enable-internal-loopback.patch
 create mode 100644 
meta-oe/recipes-devtools/serialcheck/serialcheck/0002-Restore-original-loopback-config.patch
 create mode 100644 meta-oe/recipes-devtools/serialcheck/serialcheck_1.0.0.bb

diff --git 
a/meta-oe/recipes-devtools/serialcheck/serialcheck/0001-Add-option-to-enable-internal-loopback.patch
 
b/meta-oe/recipes-devtools/serialcheck/serialcheck/0001-Add-option-to-enable-internal-loopback.patch
new file mode 100644
index 0000000..fc387d7
--- /dev/null
+++ 
b/meta-oe/recipes-devtools/serialcheck/serialcheck/0001-Add-option-to-enable-internal-loopback.patch
@@ -0,0 +1,80 @@
+From 059d5512e840fe68e2bb37add6c9208fa9c34d15 Mon Sep 17 00:00:00 2001
+From: Sekhar Nori <[email protected]>
+Date: Tue, 24 Feb 2015 22:16:37 +0530
+Subject: [PATCH 1/2] Add option to enable internal loopback
+
+---
+ serialcheck.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/serialcheck.c b/serialcheck.c
+index 4f5b747..4100c37 100644
+--- a/serialcheck.c
++++ b/serialcheck.c
+@@ -12,6 +12,8 @@
+ #include <sys/ioctl.h>
+ #include <linux/serial.h>
+
++#define TIOCM_LOOP    0x8000
++
+ #define __same_type(a, b)     __builtin_types_compatible_p(typeof(a), 
typeof(b))
+ #define BUILD_BUG_ON_ZERO(e)  (sizeof(struct { int:-!!(e); }))
+ #define __must_be_array(a)    BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
+@@ -40,6 +42,7 @@ struct g_opt {
+       unsigned char hflow;
+       unsigned char do_termios;
+       unsigned char *cmp_buff;
++      unsigned char loopback;
+ };
+
+ /* name, key, arg, flags, doc, group */
+@@ -51,6 +54,7 @@ static struct argp_option options[] = {
+       {"mode",        'm', "M",    0, "transfer mode (d = duplex, t = send r 
= receive)", 0},
+       {"loops",       'l', "NUM",  0, "loops to perform (0 => wait fot 
CTRL-C", 0},
+       {"no-termios",  'n', NULL,   0, "No termios change (baud rate etc. 
remains unchanged)", 0},
++      {"loopback",    'k', NULL,   0, "loopback mode", 0},
+       {NULL, 0, NULL, 0, NULL, 0}
+ };
+
+@@ -67,6 +71,7 @@ static error_t parse_opt(int key, char *arg, struct 
argp_state *state)
+               go->baudrate = 115200;
+               go->loops = UINT_MAX;
+               go->do_termios = 1;
++              go->loopback = 0;
+               break;
+       case ARGP_KEY_ARG:
+               ret =  ARGP_ERR_UNKNOWN;
+@@ -113,6 +118,9 @@ static error_t parse_opt(int key, char *arg, struct 
argp_state *state)
+               } else
+                       go->loops = num;
+               break;
++      case 'k':
++              go->loopback = 1;
++              break;
+       default:
+               ret = ARGP_ERR_UNKNOWN;
+       }
+@@ -487,6 +495,21 @@ int main(int argc, char *argv[])
+                       die("tcflush failed: %m\n");
+       }
+
++      if (opts.loopback) {
++              unsigned int mcr;
++
++              ret = ioctl(fd, TIOCMGET, &mcr);
++              if (ret < 0)
++                      die("mcr get failed: %m\n");
++
++              mcr |= TIOCM_LOOP;
++
++              ret = ioctl(fd, TIOCMSET, &mcr);
++              if (ret < 0)
++                      die ("mcr set failed: %m\n");
++
++      }
++
+       ret = fcntl(fd, F_SETFL, 0);
+       if (ret)
+               printf("Failed to remove nonblock mode\n");
+--
+1.9.1
diff --git 
a/meta-oe/recipes-devtools/serialcheck/serialcheck/0002-Restore-original-loopback-config.patch
 
b/meta-oe/recipes-devtools/serialcheck/serialcheck/0002-Restore-original-loopback-config.patch
new file mode 100644
index 0000000..a2ac6d0
--- /dev/null
+++ 
b/meta-oe/recipes-devtools/serialcheck/serialcheck/0002-Restore-original-loopback-config.patch
@@ -0,0 +1,48 @@
+From a6e5813d2f8402bf3a311c8bcda02623bfb76882 Mon Sep 17 00:00:00 2001
+From: Carlos Hernandez <[email protected]>
+Date: Tue, 24 Feb 2015 16:00:34 -0500
+Subject: [PATCH 2/2] Restore original loopback config
+
+If loopback option is enabled. Disable it at the end of the test.
+
+Signed-off-by: Carlos Hernandez <[email protected]>
+---
+ serialcheck.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/serialcheck.c b/serialcheck.c
+index 4100c37..06470f7 100644
+--- a/serialcheck.c
++++ b/serialcheck.c
+@@ -427,6 +427,7 @@ int main(int argc, char *argv[])
+       unsigned char *data;
+       unsigned int open_mode;
+       off_t data_len;
++      unsigned int mcr;
+
+       argp_parse(&argp, argc, argv, 0, NULL, &opts);
+       if (!opts.file_trans)
+@@ -496,8 +497,6 @@ int main(int argc, char *argv[])
+       }
+
+       if (opts.loopback) {
+-              unsigned int mcr;
+-
+               ret = ioctl(fd, TIOCMGET, &mcr);
+               if (ret < 0)
+                       die("mcr get failed: %m\n");
+@@ -535,6 +534,12 @@ int main(int argc, char *argv[])
+       ret = tcsetattr(fd, TCSAFLUSH, &old_term);
+       if (ret)
+               printf("tcsetattr() of old ones failed: %m\n");
++      if (opts.loopback) {
++              mcr &= ~(TIOCM_LOOP);
++              ret = ioctl(fd, TIOCMSET, &mcr);
++      }
++      if (ret)
++              printf("disabling loopback failed: %m\n");
+
+       close(fd);
+       return status;
+--
+1.9.1
diff --git a/meta-oe/recipes-devtools/serialcheck/serialcheck_1.0.0.bb 
b/meta-oe/recipes-devtools/serialcheck/serialcheck_1.0.0.bb
new file mode 100644
index 0000000..6154241
--- /dev/null
+++ b/meta-oe/recipes-devtools/serialcheck/serialcheck_1.0.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Application to verify operation of serial ports"
+HOMEPAGE = "git://git.breakpoint.cc/bigeasy/serialcheck.git"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "git://git.breakpoint.cc/bigeasy/serialcheck.git \
+            file://0001-Add-option-to-enable-internal-loopback.patch \
+            file://0002-Restore-original-loopback-config.patch"
+
+SRCREV = "63854a2d0c0129efab132ec328a75279e013fb84"
+
+S = "${WORKDIR}/git"
+
+CFLAGS_prepend = "-Wall -Wextra -Wno-sign-compare -Wno-pointer-sign "
+
+do_install() {
+    install -d ${D}${bindir}
+    install ${S}/serialcheck ${D}${bindir}/serialcheck
+}
-- 
2.2.0

-- 
_______________________________________________
Openembedded-devel mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-devel

Reply via email to