X-Git-Url: https://git.kernelconcepts.de/?p=metawatch.git;a=blobdiff_plain;f=mw_main.c;h=c08b2d307320a30233d5a2fac050acf06a591466;hp=4e871b43d8617af5682c5cd8ded56d8840ba3050;hb=d1e0ca32db6e93af4ad6c1b7a8019f084bc04dcd;hpb=36bbcbe1824acc18b9bc48426de62d862283dfc0 diff --git a/mw_main.c b/mw_main.c index 4e871b4..c08b2d3 100644 --- a/mw_main.c +++ b/mw_main.c @@ -34,6 +34,8 @@ #include "crc16ccitt.h" #include "mw_utility.h" +#include "bt_helper.h" + typedef struct { GMainLoop *mloop; mwdevice_t mwdevice; @@ -439,120 +441,6 @@ int feed_menu(mwdata_t *mdata) return 0; } -int open_socket(bdaddr_t *bdaddr, uint8_t channel) -{ - struct sockaddr_rc addr; - int sk, opt; - //int f; - - sk = socket(PF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM); - if (sk < 0) { - fprintf(stderr, "Can't create socket: %s (%d)\n", - strerror(errno), errno); - return -1; - } - -/* - f = 1; - if (setsockopt(sk, SOL_BLUETOOTH, BT_FLUSHABLE, &f, sizeof(f)) < 0) { - fprintf(stderr, "Can't set flushable: %s (%d)\n", - strerror(errno), errno); - return -1; - } -*/ - memset(&addr, 0, sizeof(addr)); - addr.rc_family = AF_BLUETOOTH; - bacpy(&addr.rc_bdaddr, BDADDR_ANY); - - if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) { - fprintf(stderr, "Can't bind socket: %s (%d)\n", - strerror(errno), errno); - close(sk); - return -1; - } - - /* Set link mode */ - opt = 0; - opt |= RFCOMM_LM_MASTER; - opt |= RFCOMM_LM_AUTH; -/* - opt |= RFCOMM_LM_ENCRYPT; - opt |= RFCOMM_LM_SECURE; -*/ - if (opt && setsockopt(sk, SOL_RFCOMM, RFCOMM_LM, &opt, sizeof(opt)) < 0) { - fprintf(stderr, "Can't set RFCOMM link mode: %s (%d)", - strerror(errno), errno); - close(sk); - return -1; - } - - memset(&addr, 0, sizeof(addr)); - addr.rc_family = AF_BLUETOOTH; - bacpy(&addr.rc_bdaddr, bdaddr); - addr.rc_channel = channel; - - if (connect(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) { - fprintf(stderr, "Can't connect: %s (%d)\n", - strerror(errno), errno); - close(sk); - return -1; - } - - return sk; -} - -void baswap(bdaddr_t *dst, const bdaddr_t *src) -{ - register unsigned char *d = (unsigned char *) dst; - register const unsigned char *s = (const unsigned char *) src; - register int i; - - for (i = 0; i < 6; i++) - d[i] = s[5-i]; -} - -int bachk(const char *str) -{ - if (!str) - return -1; - - if (strlen(str) != 17) - return -1; - - while (*str) { - if (!isxdigit(*str++)) - return -1; - - if (!isxdigit(*str++)) - return -1; - - if (*str == 0) - break; - - if (*str++ != ':') - return -1; - } - - return 0; -} - -int str2ba(const char *str, bdaddr_t *ba) -{ - bdaddr_t b; - int i; - - if (bachk(str) < 0) { - memset(ba, 0, sizeof(*ba)); - return -1; - } - - for (i = 0; i < 6; i++, str += 3) - b.b[i] = strtol(str, NULL, 16); - - baswap(ba, &b); - - return 0; -} gboolean handle_mw_io(GIOChannel *mw_io, GIOCondition condition, gpointer udata) {