#include <metawatch.h>
#include <crc16ccitt.h>
#include <mw_utility.h>
+#include <bt_helper.h>
typedef struct {
// GMainLoop *mloop;
gtk_progress_bar_set_text(batbar, batstr);
}
+void on_notify_ok_clicked (GtkButton *button, gpointer user_data)
+{
+ mwdata_t *mdata = (mwdata_t *)user_data;
+ GtkWidget *notify_win;
+ GtkTextView *tview;
+ GtkTextBuffer *tbuf;
+ GtkTextIter siter, eiter;
+ gchar *text;
+
+ tview = GTK_TEXT_VIEW (gtk_builder_get_object (mdata->builder, "notify_textview"));
+ tbuf = gtk_text_view_get_buffer(tview);
+ gtk_text_buffer_get_start_iter(tbuf, &siter);
+ gtk_text_buffer_get_end_iter(tbuf, &eiter);
+
+ text = gtk_text_buffer_get_text(tbuf, &siter, &eiter, FALSE);
+
+ mw_do_notification(&mdata->mwdevice, "Notification", text, 2);
+
+ notify_win = GTK_WIDGET (gtk_builder_get_object (mdata->builder, "notify_win"));
+ gtk_widget_hide (notify_win);
+}
+
+void on_notify_cancel_clicked (GtkButton *button, gpointer user_data)
+{
+ mwdata_t *mdata = (mwdata_t *)user_data;
+ GtkWidget *notify_win;
+
+ notify_win = GTK_WIDGET (gtk_builder_get_object (mdata->builder, "notify_win"));
+ gtk_widget_hide (notify_win);
+}
+
+
void on_rtc_button_clicked (GtkButton *button, gpointer user_data)
{
mwdata_t *mdata = (mwdata_t *)user_data;
void on_notify_button_clicked (GtkButton *button, gpointer user_data)
{
mwdata_t *mdata = (mwdata_t *)user_data;
+ GtkWidget *notify_win;
+ notify_win = GTK_WIDGET (gtk_builder_get_object (mdata->builder, "notify_win"));
+ gtk_widget_show (notify_win);
}
void bitmap_read(mwdevice_t *mwdevice, char *filename)
free(bmapbuf);
}
+void on_vibrate_button_clicked (GtkButton *button, gpointer user_data)
+{
+ mwdata_t *mdata = (mwdata_t *)user_data;
+}
+
+void on_set_hands_clicked (GtkButton *button, gpointer user_data)
+{
+ mwdata_t *mdata = (mwdata_t *)user_data;
+ time_t mtime;
+ struct tm mtm;
+ unsigned short hour;
+
+ mtime = time(NULL);
+ localtime_r(&mtime, &mtm);
+
+ hour = (unsigned char) mtm.tm_hour;
+ if (hour > 12)
+ hour -= 12;
+
+ mw_advance_watch_hands(&mdata->mwdevice, hour, (unsigned char) mtm.tm_min, (unsigned char) mtm.tm_sec);
+}
+
void on_bitmap_button_clicked (GtkButton *button, gpointer user_data)
{
mwdata_t *mdata = (mwdata_t *)user_data;
gtk_widget_destroy(dialog);
}
+void setup_watchtype_gui(mwdata_t *mdata)
+{
+ GtkWidget *w;
+
+ if (mdata->mwdevice.devtype == MW_DEVICE_TYPE_DIGITAL || mdata->mwdevice.devtype == MW_DEVICE_TYPE_DEVB_DIGI) {
+ w = GTK_WIDGET (gtk_builder_get_object (mdata->builder, "set_hands"));
+ gtk_widget_hide(w);
+ }
+ if (mdata->mwdevice.devtype == MW_DEVICE_TYPE_ANA_DIGI || mdata->mwdevice.devtype == MW_DEVICE_TYPE_DEVB_ANA_DIGI) {
+ w = GTK_WIDGET (gtk_builder_get_object (mdata->builder, "F_button_label"));
+ gtk_widget_hide(w);
+ w = GTK_WIDGET (gtk_builder_get_object (mdata->builder, "E_button_label"));
+ gtk_widget_hide(w);
+ w = GTK_WIDGET (gtk_builder_get_object (mdata->builder, "D_button_label"));
+ gtk_widget_hide(w);
+ }
+}
+
+void mw_get_device_type_response_cb(mwdevice_t *mwdevice, unsigned char devtype, void *user_data)
+{
+ mwdata_t *mdata = (mwdata_t *)user_data;
+
+ setup_watchtype_gui(mdata);
+}
+
void mw_get_real_time_clock_response_cb(mwdevice_t *mwdevice, struct tm *mw_tm, void *user_data)
{
mwdata_t *mdata = (mwdata_t *)user_data;
gtk_button_set_label(rtc_button, label_str);
}
-int open_socket(bdaddr_t *bdaddr, uint8_t channel)
-{
- struct sockaddr_rc addr;
- int sk, opt;
-
- 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;
int processed;
- rcvd = read(mdata->mwdevice.mw_fd, mdata->rcvbuf+mdata->rcvbuf_pos, 64);
+ rcvd = read(mdata->mwdevice.mw_fd, mdata->rcvbuf/*+mdata->rcvbuf_pos*/, 64);
#ifdef DEBUG
fprintf(stderr, "read %d bytes:\n", rcvd);
#endif
}
-
-int
-main (int argc, char *argv[])
+int main (int argc, char *argv[])
{
GtkBuilder *builder;
GtkWidget *window;
mw_init(&mdata.mwdevice, mw_fd);
+ mw_set_get_device_type_response_cb(&mdata.mwdevice, mw_get_device_type_response_cb, &mdata);
mw_set_get_real_time_clock_response_cb(&mdata.mwdevice, mw_get_real_time_clock_response_cb, &mdata);
mw_set_get_battery_voltage_response_cb(&mdata.mwdevice, mw_get_battery_voltage_response_cb, &mdata);
mdata.bat_timeout_id = g_timeout_add_seconds(10, battery_level_get_timeout, &mdata);
+ // setup_watchtype_gui(&mdata);
gtk_main ();
return 0;
}
+