summaryrefslogtreecommitdiffstats
path: root/plugins/ste.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2010-01-30 07:44:13 -0800
committerMarcel Holtmann <marcel@holtmann.org>2010-01-30 07:45:24 -0800
commit16f477653dd82fbfcc30d599bf74984e2404a1f4 (patch)
treeee4958c826872b19f8abf0eb1d9930f059789751 /plugins/ste.c
parent3e46541dd42b970b51cd9468f008d14c95ae3c1d (diff)
downloadofono-16f477653dd82fbfcc30d599bf74984e2404a1f4.tar.bz2
Add support for using old CAIF subsystem with character devices
Diffstat (limited to 'plugins/ste.c')
-rw-r--r--plugins/ste.c51
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);