summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libgsmd/libgsmd.h3
-rw-r--r--src/gsmd/gsmd.c6
-rw-r--r--src/libgsmd/libgsmd.c39
3 files changed, 41 insertions, 7 deletions
diff --git a/include/libgsmd/libgsmd.h b/include/libgsmd/libgsmd.h
index 579f13d..7673a68 100644
--- a/include/libgsmd/libgsmd.h
+++ b/include/libgsmd/libgsmd.h
@@ -34,6 +34,9 @@ extern struct lgsm_handle *lgsm_init(void);
/* Terminate usage of libgsmd */
extern int lgsm_exit(struct lgsm_handle *lh);
+/* Obtain file descriptor (e.g. for select-loop under app control) */
+extern int lgsm_fd(struct lgsm_handle *lh);
+
/* Refer to GSM 04.08 [8] subclause 10.5.4.7 */
enum lgsm_addr_type {
LGSM_ATYPE_ISDN_UNKN = 161,
diff --git a/src/gsmd/gsmd.c b/src/gsmd/gsmd.c
index ea44a73..b77e54e 100644
--- a/src/gsmd/gsmd.c
+++ b/src/gsmd/gsmd.c
@@ -34,6 +34,12 @@ static int gsmd_test(struct gsmd *gsmd)
return atcmd_submit(gsmd, cmd);
}
+static int gsmd_initsettings(struct gsmd *gsmd)
+{
+ struct gsmd_atcmd *cmd;
+ //cmd = atcmd_fill("ATV1;+CRC=1;+CREG=2;+CLIP=1;+COLP=1", 255, &f
+}
+
struct bdrt {
int bps;
u_int32_t b;
diff --git a/src/libgsmd/libgsmd.c b/src/libgsmd/libgsmd.c
index e514617..7eb2701 100644
--- a/src/libgsmd/libgsmd.c
+++ b/src/libgsmd/libgsmd.c
@@ -3,6 +3,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
+#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
@@ -12,6 +13,29 @@
#include "lgsm_internals.h"
+static int lgsm_get_packet(struct lgsm_handle *lh)
+{
+ static char buf[GSMD_MSGSIZE_MAX];
+ struct gsmd_msg_hdr *hdr = (struct gsmd_msg_hdr *) buf;
+ int rc = read(lh->fd, buf, sizeof(buf));
+ if (rc <= 0)
+ return rc;
+
+ if (hdr->version != GSMD_PROTO_VERSION)
+ return -EINVAL;
+
+ switch (hdr->msg_type) {
+ case GSMD_MSG_PASSTHROUGH:
+
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+
static int lgsm_open_backend(struct lgsm_handle *lh, const char *device)
{
int rc;
@@ -33,16 +57,17 @@ static int lgsm_open_backend(struct lgsm_handle *lh, const char *device)
lh->fd = -1;
return rc;
}
- } else {
- /* use direct access to device node ([virtual] tty device) */
- lh->fd = open(device, O_RDWR);
- if (lh->fd < 0)
- return lh->fd;
- }
-
+ } else
+ return -EINVAL;
+
return 0;
}
+int lgsm_fd(struct lgsm_handle *lh)
+{
+ return lh->fd;
+}
+
struct lgsm_handle *lgsm_init(const char *device)
{
struct lgsm_handle *lh = malloc(sizeof(*lh));
personal git repositories of Harald Welte. Your mileage may vary