diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2010-01-30 07:44:13 -0800 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2010-01-30 07:45:24 -0800 |
commit | 16f477653dd82fbfcc30d599bf74984e2404a1f4 (patch) | |
tree | ee4958c826872b19f8abf0eb1d9930f059789751 /plugins/ste.c | |
parent | 3e46541dd42b970b51cd9468f008d14c95ae3c1d (diff) | |
download | ofono-16f477653dd82fbfcc30d599bf74984e2404a1f4.tar.bz2 |
Add support for using old CAIF subsystem with character devices
Diffstat (limited to 'plugins/ste.c')
-rw-r--r-- | plugins/ste.c | 51 |
1 files changed, 33 insertions, 18 deletions
diff --git a/plugins/ste.c b/plugins/ste.c index 34550c86..5605b76b 100644 --- a/plugins/ste.c +++ b/plugins/ste.c @@ -25,6 +25,8 @@ #endif #include <errno.h> +#include <stdio.h> +#include <fcntl.h> #include <stdlib.h> #include <string.h> #include <unistd.h> @@ -110,29 +112,42 @@ static int ste_enable(struct ofono_modem *modem) struct ste_data *data = ofono_modem_get_data(modem); GIOChannel *channel; GAtSyntax *syntax; - int fd, err; - struct sockaddr_caif addr; + const char *device; + int fd; DBG("%p", modem); - /* Create a CAIF socket for AT Service */ - fd = socket(AF_CAIF, SOCK_SEQPACKET, CAIFPROTO_AT); - if (fd < 0) { - ofono_error("Failed to create CAIF socket for AT"); - return -EIO; + device = ofono_modem_get_string(modem, "Device"); + if (!device) { + struct sockaddr_caif addr; + int err; + + /* Create a CAIF socket for AT Service */ + fd = socket(AF_CAIF, SOCK_SEQPACKET, CAIFPROTO_AT); + if (fd < 0) { + ofono_error("Failed to create CAIF socket for AT"); + return -EIO; + } + + memset(&addr, 0, sizeof(addr)); + addr.family = AF_CAIF; + addr.u.at.type = CAIF_ATTYPE_PLAIN; + + /* Connect to the AT Service at the modem */ + err = connect(fd, (struct sockaddr *) &addr, sizeof(addr)); + if (err < 0) { + ofono_error("Failed to connect CAIF socket for AT"); + close(fd); + return err; + } + } else { + fd = open(device, O_RDWR); + if (fd < 0) { + ofono_error("Failed to open device %s", device); + return -EIO; + } } - memset(&addr, 0, sizeof(addr)); - addr.family = AF_CAIF; - addr.u.at.type = CAIF_ATTYPE_PLAIN; - - /* Connect to the AT Service at the modem */ - err = connect(fd, (struct sockaddr *) &addr, sizeof(addr)); - if (err < 0) { - ofono_error("Failed to connect CAIF socket for AT"); - close(fd); - return err; - } channel = g_io_channel_unix_new(fd); if (!channel) { close(fd); |