Subversion Repositories public

Rev

Rev 230 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 230 Rev 246
Line 63... Line 63...
63
 
63
 
64
/* Close the USB connection with the Garmin device. */
64
/* Close the USB connection with the Garmin device. */
65
 
65
 
66
int garmin_close(garmin_unit *garmin)
66
int garmin_close(garmin_unit *garmin)
67
{
67
{
-
 
68
	if (!garmin)
-
 
69
	   return 1;
-
 
70
 
68
	if (method && garmin->usb.fd != -1)
71
	if (method && garmin->usb.fd != -1)
69
	{
72
	{
70
	   if (isatty(garmin->usb.fd))
73
	   if (isatty(garmin->usb.fd))
71
	   {
74
	   {
72
	      /* force hangup on close on systems that don't do HUPCL properly */
75
	      /* force hangup on close on systems that don't do HUPCL properly */
Line 106... Line 109...
106
garmin_packet p;
109
garmin_packet p;
107
struct sigaction saio;
110
struct sigaction saio;
108
char hv0[1024];
111
char hv0[1024];
109
struct termios tp;
112
struct termios tp;
110
 
113
 
-
 
114
	if (!garmin)
-
 
115
	   return 0;
-
 
116
 
111
	if (method && garmin->usb.fd == -1)
117
	if (method && garmin->usb.fd == -1)
112
	{
118
	{
113
	   /* check for USB serial drivers -- very Linux-specific */
119
	   /* check for USB serial drivers -- very Linux-specific */
114
/*	   if (access("/sys/module/garmin_gps", R_OK) != 0)
120
/*	   if (access("/sys/module/garmin_gps", R_OK) != 0)
115
	   {
121
	   {
Line 245... Line 251...
245
 
251
 
246
int garmin_set_speed(garmin_unit *garmin, unsigned int speed, unsigned int stopbits)
252
int garmin_set_speed(garmin_unit *garmin, unsigned int speed, unsigned int stopbits)
247
{
253
{
248
unsigned int rate;
254
unsigned int rate;
249
 
255
 
-
 
256
	if (!garmin)
-
 
257
	   return 0;
-
 
258
 
250
	if (speed < 300)
259
	if (speed < 300)
251
	   rate = B0;
260
	   rate = B0;
252
	else if (speed < 1200)
261
	else if (speed < 1200)
253
	   rate = B300;
262
	   rate = B300;
254
	else if (speed < 2400)
263
	else if (speed < 2400)
Line 289... Line 298...
289
	return 1;
298
	return 1;
290
}
299
}
291
 
300
 
292
uint8 garmin_packet_type(garmin_packet *p)
301
uint8 garmin_packet_type(garmin_packet *p)
293
{
302
{
-
 
303
	if (!p) return 0;
294
	return p->packet.type;
304
	return p->packet.type;
295
}
305
}
296
 
306
 
297
 
307
 
298
uint16 garmin_packet_id(garmin_packet *p)
308
uint16 garmin_packet_id(garmin_packet *p)
299
{
309
{
-
 
310
	if (!p) return 0;
300
	return get_uint16(p->packet.id);
311
	return get_uint16(p->packet.id);
301
}
312
}
302
 
313
 
303
 
314
 
304
uint32 garmin_packet_size(garmin_packet *p)
315
uint32 garmin_packet_size(garmin_packet *p)
305
{
316
{
-
 
317
	if (!p) return 0;
306
	return get_uint32(p->packet.size);
318
	return get_uint32(p->packet.size);
307
}
319
}
308
 
320
 
309
 
321
 
310
uint8 *garmin_packet_data(garmin_packet *p)
322
uint8 *garmin_packet_data(garmin_packet *p)
311
{
323
{
-
 
324
	if (!p) return 0;
312
	return p->packet.data;
325
	return p->packet.data;
313
}
326
}
314
 
327
 
315
 
328
 
316
int garmin_packetize(garmin_packet *p, uint16 id, uint32 size, uint8 *data)
329
int garmin_packetize(garmin_packet *p, uint16 id, uint32 size, uint8 *data)
317
{
330
{
318
int ok = 0;
331
int ok = 0;
319
 
332
 
-
 
333
	if (!p) return 0;
-
 
334
 
320
	if (size + PACKET_HEADER_SIZE < sizeof(garmin_packet))
335
	if (size + PACKET_HEADER_SIZE < sizeof(garmin_packet))
321
	{
336
	{
322
	   p->packet.type       = GARMIN_PROTOCOL_APP;
337
	   p->packet.type       = GARMIN_PROTOCOL_APP;
323
	   p->packet.reserved1  = 0;
338
	   p->packet.reserved1  = 0;
324
	   p->packet.reserved2  = 0;
339
	   p->packet.reserved2  = 0;
Line 354... Line 369...
354
struct timeval tv;
369
struct timeval tv;
355
int sel_ret = 0;
370
int sel_ret = 0;
356
int ok = 0;
371
int ok = 0;
357
char hv0[1024];
372
char hv0[1024];
358
 
373
 
-
 
374
	if (!garmin) return 0;
-
 
375
 
359
	if (garmin->usb.fd == -1 && garmin->usb.handle == NULL)
376
	if (garmin->usb.fd == -1 && garmin->usb.handle == NULL)
360
	   garmin_open(garmin);
377
	   garmin_open(garmin);
361
 
378
 
362
	if (method && garmin->usb.fd != -1)
379
	if (method && garmin->usb.fd != -1)
363
	{
380
	{
Line 463... Line 480...
463
int garmin_write(garmin_unit *garmin, garmin_packet *p)
480
int garmin_write(garmin_unit *garmin, garmin_packet *p)
464
{
481
{
465
int r = -1;
482
int r = -1;
466
int s = garmin_packet_size(p) + PACKET_HEADER_SIZE;
483
int s = garmin_packet_size(p) + PACKET_HEADER_SIZE;
467
 
484
 
-
 
485
	if (!garmin)
-
 
486
	   return 0;
-
 
487
 
468
	if (garmin->usb.fd == -1 && garmin->usb.handle == NULL)
488
	if (garmin->usb.fd == -1 && garmin->usb.handle == NULL)
469
	   garmin_open(garmin);
489
	   garmin_open(garmin);
470
 
490
 
471
	if (garmin->usb.handle != NULL || garmin->usb.fd != -1)
491
	if (garmin->usb.handle != NULL || garmin->usb.fd != -1)
472
	{
492
	{
Line 514... Line 534...
514
fd_set fds, rfds;
534
fd_set fds, rfds;
515
struct timeval tv;
535
struct timeval tv;
516
int sel_ret = 0;
536
int sel_ret = 0;
517
int ok = 0;
537
int ok = 0;
518
 
538
 
-
 
539
	if (!garmin)
-
 
540
	   return 0;
-
 
541
 
519
	garmin_packetize(&p, Pid_Start_Session, 0, NULL);
542
	garmin_packetize(&p, Pid_Start_Session, 0, NULL);
520
	p.packet.type = GARMIN_PROTOCOL_USB;
543
	p.packet.type = GARMIN_PROTOCOL_USB;
521
 
544
 
522
	if (method && garmin->usb.fd != -1)
545
	if (method && garmin->usb.fd != -1)
523
	{
546
	{
Line 549... Line 572...
549
int    j;
572
int    j;
550
uint32 s;
573
uint32 s;
551
char   hex[128];
574
char   hex[128];
552
char   dec[128];
575
char   dec[128];
553
 
576
 
-
 
577
	if (!p)
-
 
578
	   return;
-
 
579
 
554
	s = garmin_packet_size(p);
580
	s = garmin_packet_size(p);
555
 
581
 
556
	switch ( dir )
582
	switch ( dir )
557
	{
583
	{
558
	   case GARMIN_DIR_READ:   fprintf(fp,"<read");   break;
584
	   case GARMIN_DIR_READ:   fprintf(fp,"<read");   break;