From: Nils Faerber Date: Fri, 5 Aug 2011 20:15:09 +0000 (+0200) Subject: Info string inquiry extension X-Git-Url: https://git.kernelconcepts.de/?p=metawatch.git;a=commitdiff_plain;h=ebb651f825a056f204a2fb36184d5f07a25df079;ds=sidebyside Info string inquiry extension --- diff --git a/metawatch.c b/metawatch.c index dd3af80..f4ad1d1 100644 --- a/metawatch.c +++ b/metawatch.c @@ -226,7 +226,7 @@ void mw_get_real_time_clock_response(int mw_fd, unsigned char *rtcrsp, int len) unsigned char clk1224, date_fmt; if (len != 10) { - fprintf(stderr, "get real time clock response too short %d != 10\n", len); + fprintf(stderr, "get real time clock response length wrong %d != 10\n", len); return; } @@ -298,6 +298,7 @@ int decode_frame(int mw_fd, unsigned char *buf, int len) unsigned char msgtype; unsigned char msgopt; unsigned char *msgdata; + unsigned char msgdatalen; /* check frame */ crc = *(unsigned short *)(buf+len-2); @@ -322,6 +323,7 @@ int decode_frame(int mw_fd, unsigned char *buf, int len) msgtype = buf[2]; msgopt = buf[3]; msgdata = (buf+4); + msgdatalen = msglen - 4 - 2; switch (msgtype) { case MW_GET_DEVICE_TYPE_RSP: @@ -352,19 +354,19 @@ int decode_frame(int mw_fd, unsigned char *buf, int len) fprintf(stderr, "Got info string '%s'\n", msgdata); break; case MW_GET_REAL_TIME_CLOCK_RSP: - mw_get_real_time_clock_response(mw_fd, msgdata, len-2); + mw_get_real_time_clock_response(mw_fd, msgdata, msgdatalen); break; case MW_READ_BATTERY_VOLTAGE_RSP: - mw_get_battery_voltage_response(mw_fd, msgdata, len-2); + mw_get_battery_voltage_response(mw_fd, msgdata, msgdatalen); break; case MW_READ_LIGHT_SENSOR_RSP: - mw_read_light_sensor_response(mw_fd, msgdata, len-2); + mw_read_light_sensor_response(mw_fd, msgdata, msgdatalen); break; case MW_LOW_BATTERY_WARNING_MSG: fprintf(stderr, "Watch battery low, please connect charger\n"); break; case MW_READ_BUTTON_CONFIG_RSP: - mw_read_button_config_response(mw_fd, msgdata, len-2); + mw_read_button_config_response(mw_fd, msgdata, msgdatalen); break; case MW_BUTTON_EVENT_MESSAGE: fprintf(stderr, "Button event message\n"); @@ -373,7 +375,7 @@ int decode_frame(int mw_fd, unsigned char *buf, int len) fprintf(stderr, "Watch battery extremely low - radio will turn off\n"); break; case MW_STATUS_CHANGE_EVENT: - mw_status_change_event(mw_fd, msgopt, msgdata, len-2); + mw_status_change_event(mw_fd, msgopt, msgdata, msgdatalen); break; default: fprintf(stderr, "Unkown msgtype 0x%02x\n", msgtype); diff --git a/mw_main.c b/mw_main.c index 24a25e5..4b2dd76 100644 --- a/mw_main.c +++ b/mw_main.c @@ -273,7 +273,12 @@ void process_cmd(char *cmdline, int clinep, int mw_fd) mw_send_frame(mw_fd, MW_GET_REAL_TIME_CLOCK, 0, NULL, 0); } if (strncmp(cmdline, "gistr", 5) == 0) { - mw_send_frame(mw_fd, MW_GET_INFORMATION_STRING, 0, NULL, 0); + intopt = cmdline[6]-0x30; + if (intopt>=0 && intopt <=3) + mdata[0] = intopt; + else + mdata[0] = 0; + mw_send_frame(mw_fd, MW_GET_INFORMATION_STRING, 0, mdata, 1); } if (strncmp(cmdline, "gdtype", 6) == 0) { mw_send_frame(mw_fd, MW_GET_DEVICE_TYPE, 0, NULL, 0);