#include "crc16ccitt.h"
#include "mw_utility.h"
+#include "bt_helper.h"
+
typedef struct {
GMainLoop *mloop;
mwdevice_t mwdevice;
}
if (strncmp(cmdline, "srtc", 4) == 0) {
fprintf(stderr, "Setting RTC from system time...");
- mw_set_rtc(&mwdata->mwdevice, MW_RTC_CLOCK_24HR, MW_RTC_DATE_DDMM);
+ mw_set_rtc(&mwdata->mwdevice, MW_RTC_CLOCK_12HR, MW_RTC_DATE_MMDD);
fprintf(stderr, "OK\n");
}
if (strncmp(cmdline, "grtc", 4) == 0) {
bitmap_read(&mwdata->mwdevice);
}
if (strncmp(cmdline, "tnote", 5) == 0) {
- test_notification(&mwdata->mwdevice);
+ // test_notification(&mwdata->mwdevice);
+ mw_do_notification(&mwdata->mwdevice, "TestNotification", "This is a pretty long text that needs to be broken and torn", 1);
}
if (strncmp(cmdline, "tapp", 4) == 0) {
test_application(&mwdata->mwdevice);
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)
{
mwdata_t *mdata = (mwdata_t *)udata;
int rcvd;
- rcvd = read(mdata->mwdevice.mw_fd, mdata->rcvbuf+mdata->rcvbuf_pos, 64);
+ rcvd = read(mdata->mwdevice.mw_fd, mdata->rcvbuf, 64);
#ifdef DEBUG
fprintf(stderr, "read %d bytes:\n", rcvd);
#endif
#ifdef DEBUG
dump_frame(mdata->rcvbuf, rcvd);
#endif
- decode_frame(&mdata->mwdevice, mdata->rcvbuf, rcvd);
- mdata->rcvbuf_pos = 0;
+ mw_feed_msg_buffer(&mdata->mwdevice, mdata->rcvbuf, rcvd);
}
return TRUE;
memset(mdata.cmdline, 0, 128);
mdata.cmdline_pos = 0;
+ mw_init(&mdata.mwdevice, mw_fd);
+
g_main_loop_run (mdata.mloop);
fsync(mw_fd);