kopia lustrzana https://github.com/Hamlib/Hamlib
* coded in a solution to not have active post_write_delay wait loop
git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@243 7ae35d74-ebe9-4afe-98af-79ac388436b8Hamlib-1.1.0
rodzic
6c20d2ba20
commit
1b4f2d8acf
40
src/serial.c
40
src/serial.c
|
@ -6,7 +6,7 @@
|
|||
* Provides useful routines for read/write serial data for communicating
|
||||
* via serial interface.
|
||||
*
|
||||
* $Id: serial.c,v 1.3 2000-10-09 01:17:20 javabear Exp $
|
||||
* $Id: serial.c,v 1.4 2000-10-23 19:58:14 f4cfe Exp $
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
|
@ -322,6 +322,8 @@ int read_sleep(int fd, unsigned char *rxbuffer, int num , int read_delay) {
|
|||
* txbuffer - pointer to a command sequence array
|
||||
* count - count of byte to send from the txbuffer
|
||||
* write_delay - write delay in ms between 2 chars
|
||||
* post_write_delay - minimum delay between two writes
|
||||
* post_write_date - timeval of last write
|
||||
*
|
||||
* returns:
|
||||
*
|
||||
|
@ -332,14 +334,35 @@ int read_sleep(int fd, unsigned char *rxbuffer, int num , int read_delay) {
|
|||
* it could work very well also with any file handle, like a socket.
|
||||
*/
|
||||
|
||||
int write_block(int fd, const unsigned char *txbuffer, size_t count, int write_delay, int post_write_delay)
|
||||
int write_block(int fd, const unsigned char *txbuffer, size_t count, int write_delay, int post_write_delay /* , struct timeval *post_write_date */ )
|
||||
{
|
||||
int i;
|
||||
|
||||
#ifdef WANT_NON_ACTIVE_POST_WRITE_DELAY
|
||||
if (post_write_date->tv_sec != 0) {
|
||||
signed int date_delay; /* in us */
|
||||
struct timeval tv;
|
||||
|
||||
/* FIXME in Y2038 ... */
|
||||
gettimeofday(tv, NULL);
|
||||
date_delay = post_write_delay*1000 -
|
||||
((tv.tv_sec - post_write_date->tv_sec)*1000000 +
|
||||
(tv.tv_usec - post_write_date->tv_usec));
|
||||
if (date_delay > 0) {
|
||||
/*
|
||||
* optional delay after last write
|
||||
*/
|
||||
usleep(date_delay);
|
||||
}
|
||||
post_write_date->tv_sec = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (write_delay > 0) {
|
||||
for (i=0; i < count; i++) {
|
||||
if (write(fd, txbuffer+i, 1) < 0) {
|
||||
rig_debug(RIG_DEBUG_ERR,"write_block() failed - %s\n", strerror(errno));
|
||||
rig_debug(RIG_DEBUG_ERR,"write_block() failed - %s\n",
|
||||
strerror(errno));
|
||||
return -RIG_EIO;
|
||||
}
|
||||
usleep(write_delay*1000);
|
||||
|
@ -348,11 +371,18 @@ int write_block(int fd, const unsigned char *txbuffer, size_t count, int write_d
|
|||
write(fd, txbuffer, count);
|
||||
}
|
||||
|
||||
if(post_write_delay > 0)
|
||||
if (post_write_delay > 0) {
|
||||
#ifdef WANT_NON_ACTIVE_POST_WRITE_DELAY
|
||||
#define POST_WRITE_DELAY_TRSHLD 10
|
||||
|
||||
if (post_write_delay > POST_WRITE_DELAY_TRSHLD)
|
||||
gettimeofday(post_write_date, NULL);
|
||||
else
|
||||
#endif
|
||||
usleep(post_write_delay*1000); /* optional delay after last write */
|
||||
/* otherwise some yaesu rigs get confused */
|
||||
/* with sequential fast writes*/
|
||||
|
||||
}
|
||||
rig_debug(RIG_DEBUG_TRACE,"TX %d bytes\n",count);
|
||||
dump_hex(txbuffer,count);
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue