diff --git a/Makefile b/Makefile index 22a7c9e..e758fa4 100644 --- a/Makefile +++ b/Makefile @@ -11,13 +11,15 @@ LIBDIR=$(PREFIX)/lib MANDIR=$(PREFIX)/man INCDIR=$(PREFIX)/include +PORT = /dev/ttyUSB1 + CC = gcc -#CFLAGS = -Wall -g -DBINDIR=\"$(BINDIR)\" -CFLAGS = -O2 -DBINDIR=\"$(BINDIR)\" +CPPFLAGS = -DBINDIR=\"$(BINDIR)\" -DPORT=\"$(PORT)\" +#CFLAGS = -g -Wall -fPIC ${CPPFLAGS} +CFLAGS = -O2 -fPIC ${CPPFLAGS} -PORT = /dev/ttyS0 -ENGINES = svgablink serblink +ENGINES = serblink RANLIB = echo #RANLIB = ranlib @@ -74,12 +76,12 @@ parse.c: dataread.l dl_read_save.c y.tab.h mv lex.yy.c $@ depend: parse.c dl_read_save.c - makedepend -f- -o.o $(CFLAGS) $(SRC) $(SVGASRC) $(SERSRC) > depend + makedepend -f- -o.o $(CPPFLAGS) $(SRC) $(SVGASRC) $(SERSRC) > depend @echo "Dependencies have been made, re-run make to build" @false serblink.o: $(SERSRC) - $(CC) -c $(CFLAGS) -DPORT=\"$(PORT)\" $(SERSRC) + $(CC) $(CFLAGS) -o $@ -c $(SERSRC) serblink: $(SEROBJ) rm -f $@ @@ -90,19 +92,19 @@ svgablink: $(SVGAOBJ) $(CC) $(CFLAGS) -o $@ $(SVGAOBJ) -lvga settime.o: settime.c - $(CC) $(CFLAGS) -I. -c settime.c + $(CC) $(CFLAGS) -I. -c -o $@ settime.c setwatch.o: setwatch.c - $(CC) $(CFLAGS) -I. -c setwatch.c + $(CC) $(CFLAGS) -I. -c -o $@ setwatch.c settime: settime.o libdatalink.a - $(CC) $(CFLAGS) -o $@ settime.o -L. -ldatalink + $(CC) $(CFLAGS) -o $@ settime.o libdatalink.a setwatch: setwatch.o libdatalink.a - $(CC) $(CFLAGS) -o $@ setwatch.o -L. -ldatalink + $(CC) $(CFLAGS) -o $@ setwatch.o libdatalink.a cvt: cvt.o - $(CC) $(CFLAGS) -o $@ + $(CC) $(CFLAGS) -o $@ -c $@.o install: all mkdir -p $(BINDIR) $(MANDIR)/man1 diff --git a/dl_send_data.c b/dl_send_data.c index 3dfa12e..b3ac3ec 100644 --- a/dl_send_data.c +++ b/dl_send_data.c @@ -27,10 +27,15 @@ #include #include #include +#include #include "datalink.h" #include "datalink_private.h" +#if 0 #define MAX_PCKT 38 +#else +#define MAX_PCKT 32 +#endif #define TIME_70 0x30 #define DSTART_70 0x60 @@ -60,7 +65,7 @@ static unsigned char dstart[] = { 5, 0x93, 0, 0, 0 }; static unsigned char dinfo[] = { 20, 0x90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -static unsigned char dspace[] = { 4, 0x91, 0, 0 }; +static unsigned char dspace[] = { 3, 0x91, 0 }; static unsigned char dend[] = { 5, 0x92, 0, 0, 0 }; static unsigned char blank_alarm[] = { 18, 0x50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 @@ -94,11 +99,19 @@ int _write_data(int fd, unsigned char *buf, unsigned char *data, int size, memcpy(buf, dspace, *dspace); +#if 1 + buf[0] = 0x3; +#endif + if (wi->dl_device == DATALINK_70) buf[1] = DATA_70; +#if 0 buf[2] = type; buf[3] = (*pnum)++; +#else + buf[2] = (*pnum)++; +#endif } if (!size) @@ -119,7 +132,11 @@ int dl_send_data(WatchInfoPtr wi, int type) char * template="/datalink_XXXXXX"; unsigned char buf[64]; unsigned char data[64]; +#if 0 unsigned short addr = 0x0236; +#else + unsigned short addr = 0x000e; +#endif char *protocol; AppointmentPtr ap; ToDoPtr tp; @@ -135,7 +152,9 @@ int dl_send_data(WatchInfoPtr wi, int type) int status; int ret=0; int p; + struct termios tios; +#if 0 if (type == BLINK_FILE) { strcpy(fname, "DEBUGOUTPUT"); @@ -172,6 +191,33 @@ int dl_send_data(WatchInfoPtr wi, int type) return ((*dl_error_proc) (buf)); } } +#else + if (getenv("TIMEX_PORT")) { + strcpy(fname, getenv("TIMEX_PORT")); + } else { + strcpy(fname, PORT); + } + + if ((ofd = open(fname, O_WRONLY)) == -1) { + sprintf(buf, "Can't open %s for writing.", fname); + return ((*dl_error_proc) (buf)); + } + + if (tcgetattr(ofd, &tios) < 0) + { + return ((*dl_error_proc) ("tcgetattr failed")); + } + + cfmakeraw(&tios); + cfsetspeed(&tios, B115200); /* It's usb so baudrate doesn't matter */ + + if (tcsetattr(ofd, TCSANOW, &tios) < 0) + { + return ((*dl_error_proc) ("tcsetattr failed")); + } + + write(ofd, "Timex", 5); +#endif memcpy(buf, start1, *start1); @@ -213,6 +259,10 @@ int dl_send_data(WatchInfoPtr wi, int type) for (i = 0; i < dl_download_data.num_times; i++) { memcpy(buf, time, *time); +#if 1 + buf[0] = 0xd; +#endif + p = 2; if (wi->dl_device == DATALINK_IRONMAN) { @@ -242,6 +292,7 @@ int dl_send_data(WatchInfoPtr wi, int type) buf[p++] = dl_download_data.times[i].month; buf[p++] = dl_download_data.times[i].day; buf[p++] = dl_download_data.times[i].year; +#if 0 buf[p++] = dl_pack_char(dl_download_data. times[i].label[0]); @@ -252,6 +303,11 @@ int dl_send_data(WatchInfoPtr wi, int type) dl_pack_char(dl_download_data. times[i].label[2]); buf[p++] = dl_download_data.times[i].dow - 1; +#else + buf[p++] = dl_download_data.times[i].dow; + buf[p++] = dl_download_data.times[i].seconds; + buf[p++] = dl_download_data.times[i].hour_fmt; +#endif } if (wi->dl_device == DATALINK_150 || @@ -276,14 +332,26 @@ int dl_send_data(WatchInfoPtr wi, int type) if (wi->dl_device != DATALINK_IRONMAN && dl_download_data.memory) { +#if 0 memcpy(buf, dstart, *dstart); buf[2] = 1; +#else + buf[0] = 0x05; + buf[1] = 0x60; + buf[2] = dl_download_data.memory / (MAX_PCKT - 6); + + if (dl_download_data.memory % (MAX_PCKT - 6)) + buf[2]++; + buf[2]++; +#endif dl_docrc(buf); if (write(ofd, buf, *buf) != *buf) return ((*dl_error_proc) ("Can't write dstart to tmp file.")); + +#if 0 memcpy(buf, dinfo, *dinfo); buf[2] = 1; buf[3] = dl_download_data.memory / (MAX_PCKT - 6); @@ -313,6 +381,31 @@ int dl_send_data(WatchInfoPtr wi, int type) if (wi->dl_device == DATALINK_70) buf[1] = DATA_70; +#else + + pnum=1; + + buf[0] = 0x13; + buf[1] = 0x61; + buf[2] = pnum; + buf[3] = (addr >> 8) & 0xff; + buf[4] = addr & 0xff; + addr += dl_download_data.app_size; + buf[5] = (addr >> 8) & 0xff; + buf[6] = addr & 0xff; + addr += dl_download_data.todo_size; + buf[7] = (addr >> 8) & 0xff; + buf[8] = addr & 0xff; + addr += dl_download_data.phone_size; + buf[9] = (addr >> 8) & 0xff; + buf[10] = addr & 0xff; + buf[11] = dl_download_data.num_apps; + buf[12] = dl_download_data.num_todos; + buf[13] = dl_download_data.num_phones; + buf[14] = dl_download_data.num_annivs; + buf[15] = 0x00; + buf[16] = 0x03; +#endif dl_docrc(buf); @@ -320,14 +413,26 @@ int dl_send_data(WatchInfoPtr wi, int type) return ((*dl_error_proc) ("Can't write dinfo to tmp file.")); +#if 0 pnum = 1; +#else + pnum = 2; +#endif memcpy(buf, dspace, *dspace); +#if 1 + buf[0] = 0x3; +#endif + if (wi->dl_device == DATALINK_70) buf[1] = DATA_70; +#if 0 buf[2] = 1; buf[3] = pnum++; +#else + buf[2] = pnum++; +#endif for (i = 0; i < dl_download_data.num_apps; i++) { @@ -421,8 +526,16 @@ int dl_send_data(WatchInfoPtr wi, int type) return ((*dl_error_proc) ("Can't write to tmp file.")); + +#if 0 memcpy(buf, dend, *dend); buf[2] = 1; +#else + buf[0]=0x4; + buf[1]=0x62; +#endif + + dl_docrc(buf); if (write(ofd, buf, *buf) != *buf) @@ -558,7 +671,11 @@ int dl_send_data(WatchInfoPtr wi, int type) } /* timezone label packet for IRONMAN watch */ +#if 0 if (wi->dl_device == DATALINK_IRONMAN) +#else + if (1) +#endif for (i = 0; i < dl_download_data.num_times; i++) { p = 0; @@ -673,6 +790,10 @@ int dl_send_data(WatchInfoPtr wi, int type) memcpy(buf, dspace, *dspace); +#if 1 + buf[0] = 0x3; +#endif + if (wi->dl_device == DATALINK_70) buf[1] = DATA_70; @@ -735,6 +856,10 @@ int dl_send_data(WatchInfoPtr wi, int type) memcpy(buf, dspace, *dspace); +#if 1 + buf[0] = 0x3; +#endif + if (wi->dl_device == DATALINK_70) buf[1] = DATA_70; @@ -798,6 +923,7 @@ int dl_send_data(WatchInfoPtr wi, int type) close(ofd); +#if 0 switch (type) { case BLINK_FILE: @@ -892,6 +1018,7 @@ int dl_send_data(WatchInfoPtr wi, int type) break; } +#endif return (ret); } diff --git a/serblink.c b/serblink.c index 9ca9fdc..44751f0 100644 --- a/serblink.c +++ b/serblink.c @@ -30,7 +30,7 @@ #include #include #include -#include +#include #include #include @@ -41,7 +41,7 @@ #endif #ifndef PORT -#define PORT "/dev/ttyd1" +#define PORT "/dev/ttyUSB1" #endif void sendbyte(int fil, unsigned char dat) @@ -50,6 +50,7 @@ void sendbyte(int fil, unsigned char dat) #define LEN 6 { static int frame = 0; +#if 0 char buff[1024]; int c = 0; int i; @@ -72,11 +73,21 @@ void sendbyte(int fil, unsigned char dat) /* a single CRT frame (different inter-word pause) */ write(fil, buff, c); +#else + write(fil, &dat, 1); + if (!frame) { + usleep(1492); /*Scanlines 216 to 263 */ + } else { + usleep(6383); /*Scanlines 402 to 78 */ + } + frame = !frame; /* a frame is 2 words, which would have been on */ +#endif } /* For pauses between packets: */ static void __pause(int fil, int count) { +#if 0 char buff[8192]; int i, c; @@ -84,6 +95,9 @@ static void __pause(int fil, int count) for (i = 0; i < (count * LEN); i++) buff[c++] = 0x0; write(fil, buff, c); +#else + usleep(count * 488); // 488 per 2048 baud bit +#endif } #undef ZERO @@ -95,6 +109,7 @@ int main(int argc, char **argv) int port; int data; struct termios old, new; + struct termios2 tios2; int i, j, len, plen; unsigned char buff[4096]; char fil[1024]; @@ -166,13 +181,20 @@ int main(int argc, char **argv) perror("tcgetattr failed:"); exit(1); } - new = old; - cfsetspeed(&new, B115200); + cfmakeraw(&new); + cfsetspeed(&new, B2400); if (tcsetattr(port, TCSANOW, &new) < 0) { perror("tcsetattr failed:"); exit(1); } + + ioctl(port, TCGETS2, &tios2); + tios2.c_cflag &= ~CBAUD; + tios2.c_cflag |= BOTHER; + tios2.c_ispeed = tios2.c_ospeed = 2048; + ioctl(port, TCSETS2, &tios2); + #if 0 while (1) __pause(port, 20); /* used for hardware debugging */ diff --git a/settime.c b/settime.c index 7361599..3c89093 100644 --- a/settime.c +++ b/settime.c @@ -151,6 +151,6 @@ int main( int argc, char ** argv) /* Send it to the watch */ - dl_send_data(wi, SVGA_BLINK); + dl_send_data(wi, BLINK_FILE); return 0; }