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
|
* Provides useful routines for read/write serial data for communicating
|
||||||
* via serial interface.
|
* 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
|
* 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
|
* txbuffer - pointer to a command sequence array
|
||||||
* count - count of byte to send from the txbuffer
|
* count - count of byte to send from the txbuffer
|
||||||
* write_delay - write delay in ms between 2 chars
|
* 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:
|
* 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.
|
* 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;
|
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) {
|
if (write_delay > 0) {
|
||||||
for (i=0; i < count; i++) {
|
for (i=0; i < count; i++) {
|
||||||
if (write(fd, txbuffer+i, 1) < 0) {
|
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;
|
return -RIG_EIO;
|
||||||
}
|
}
|
||||||
usleep(write_delay*1000);
|
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);
|
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 */
|
usleep(post_write_delay*1000); /* optional delay after last write */
|
||||||
/* otherwise some yaesu rigs get confused */
|
/* otherwise some yaesu rigs get confused */
|
||||||
/* with sequential fast writes*/
|
/* with sequential fast writes*/
|
||||||
|
}
|
||||||
rig_debug(RIG_DEBUG_TRACE,"TX %d bytes\n",count);
|
rig_debug(RIG_DEBUG_TRACE,"TX %d bytes\n",count);
|
||||||
dump_hex(txbuffer,count);
|
dump_hex(txbuffer,count);
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue