From 457c6293505e37da59a8af0338dd8688ba8acf13 Mon Sep 17 00:00:00 2001 From: laforge Date: Mon, 23 Oct 2006 21:55:39 +0000 Subject: first working revision of gsmd, libgsmd and libgsmd-tool git-svn-id: http://svn.openmoko.org/trunk/src/target/gsm@115 99fdad57-331a-0410-800a-d7fa5415bdb3 --- src/util/atcmd.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/util/atcmd.c (limited to 'src/util/atcmd.c') diff --git a/src/util/atcmd.c b/src/util/atcmd.c new file mode 100644 index 0000000..6cf9aa7 --- /dev/null +++ b/src/util/atcmd.c @@ -0,0 +1,66 @@ +#include +#include +#include +#include + +#include + +#define STDIN_BUF_SIZE 1024 + +/* this is the handler for receiving passthrough responses */ +static int pt_msghandler(struct lgsm_handle *lh, struct gsmd_msg_hdr *gmh) +{ + char *payload = (char *)gmh + sizeof(*gmh); + printf("RSTR=`%s'\n", payload); +} + +int atcmd_main(struct lgsm_handle *lgsmh) +{ + int rc; + char buf[STDIN_BUF_SIZE+1]; + char rbuf[STDIN_BUF_SIZE+1]; + int rlen = sizeof(rbuf); + fd_set readset; + + lgsm_register_handler(lgsmh, GSMD_MSG_PASSTHROUGH, &pt_msghandler); + + FD_ZERO(&readset); + + while (1) { + fd_set readset; + int gsm_fd = lgsm_fd(lgsmh); + FD_SET(0, &readset); + FD_SET(gsm_fd, &readset); + + rc = select(gsm_fd+1, &readset, NULL, NULL, NULL); + if (rc <= 0) + break; + if (FD_ISSET(gsm_fd, &readset)) { + /* we've received something on the gsmd socket, pass it + * on to the library */ + rc = read(gsm_fd, buf, sizeof(buf)); + if (rc <= 0) { + printf("ERROR reding from gsm_fd\n"); + break; + } + rc = lgsm_handle_packet(lgsmh, buf, rc); + } + if (FD_ISSET(0, &readset)) { + /* we've received something on stdin. send it as passthrough + * to gsmd */ + rc = fscanf(stdin, "%s", buf); + if (rc == EOF) { + printf("EOF\n"); + return -1; + } + if (rc <= 0) { + printf("NULL\n"); + continue; + } + printf("STR=`%s'\n", buf); + } + /* this is a synchronous call for a passthrough command */ + lgsm_passthrough(lgsmh, buf, rbuf, &rlen); + printf("RSTR=`%s'\n", rbuf); + } +} -- cgit v1.2.3