El 11/02/14 16:06, ☎ escribió:
Shouldn't this be in libosmocore?

Yes sorry, i have forgot to put it. Thanks Max


11.02.2014 15:44, Alvaro Neira пишет:
From: Álvaro Neira Ayuso <[email protected]>

This patch provide two new functions for reading and writing
from the serial interface. I think this two functions makes it
easy reading and writing from the serial interface.

Signed-off-by: Alvaro Neira Ayuso <[email protected]>
---
  include/osmocom/core/serial.h |    4 ++++
  src/serial.c                  |   33 +++++++++++++++++++++++++++++++++
  2 files changed, 37 insertions(+)

diff --git a/include/osmocom/core/serial.h b/include/osmocom/core/serial.h
index 1640a6d..056010b 100644
--- a/include/osmocom/core/serial.h
+++ b/include/osmocom/core/serial.h
@@ -33,10 +33,14 @@

  #include <termios.h>

+struct msgb;
+
  int osmo_serial_init(const char *dev, speed_t baudrate);
  int osmo_serial_set_baudrate(int fd, speed_t baudrate);
  int osmo_serial_set_custom_baudrate(int fd, int baudrate);
  int osmo_serial_clear_custom_baudrate(int fd);
+int osmo_serial_write(int fd, struct msgb *msg);
+int osmo_serial_read(int fd, struct msgb *msg, int numbytes);

  /*! @} */

diff --git a/src/serial.c b/src/serial.c
index 66ee756..818426a 100644
--- a/src/serial.c
+++ b/src/serial.c
@@ -43,6 +43,7 @@
  #endif

  #include <osmocom/core/serial.h>
+#include <osmocom/core/msgb.h>


  #if 0
@@ -226,4 +227,36 @@ osmo_serial_clear_custom_baudrate(int fd)
        return 0;
  }

+int
+osmo_serial_read(int fd, struct msgb *msg, int numbytes)
+{
+       int rc, bread = 0;
+
+       while (bread < numbytes) {
+               rc = read(fd, msg->tail, numbytes - bread);
+               if (rc < 0) {
+                       msgb_free(msg);
+                       return -1;
+               }
+               bread += rc;
+               msgb_put(msg, rc);
+       }
+
+       return bread;
+}
+
+int
+osmo_serial_write(int fd, struct msgb *msg)
+{
+       int bwritten = 0, ret = 0;
+
+       bwritten = write(fd, msg->data, msg->len);
+       if (bwritten < 0 || bwritten < msg->len) {
+               msgb_free(msg);
+               ret = -1;
+       }
+
+       return ret;
+}
+
  /*! @} */






Reply via email to