kopia lustrzana https://github.com/Hamlib/Hamlib
* ser_ptt*/ser_dcd* are gone. Try to not mix low level serial stuff with
high level Hamlib stuff. Added ser_get_cts,ser_get_dsr,ser_get_car. * better error code cascading git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@1861 7ae35d74-ebe9-4afe-98af-79ac388436b8Hamlib-1.2.3
rodzic
3b5f811c42
commit
643fb5feae
|
@ -2,7 +2,7 @@
|
|||
* Hamlib CI-V backend - OptoScan extensions
|
||||
* Copyright (c) 2000-2004 by Stephane Fillod
|
||||
*
|
||||
* $Id: optoscan.c,v 1.11 2004-09-26 08:35:03 fillods Exp $
|
||||
* $Id: optoscan.c,v 1.12 2004-10-02 20:18:16 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -595,7 +595,7 @@ int optoscan_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch)
|
|||
|
||||
optoscan_wait_timer(rig,state); /*Step 5*/
|
||||
|
||||
ser_get_dcd(&rs->rigport,&pin_state);
|
||||
ser_get_car(&rs->rigport,&pin_state);
|
||||
if( pin_state ) /*Step 6*/
|
||||
{
|
||||
return RIG_OK; /* we've broken squelch - return(). caller can */
|
||||
|
|
46
src/rig.c
46
src/rig.c
|
@ -2,7 +2,7 @@
|
|||
* Hamlib Interface - main file
|
||||
* Copyright (c) 2000-2004 by Stephane Fillod and Frank Singleton
|
||||
*
|
||||
* $Id: rig.c,v 1.81 2004-10-02 10:32:08 fillods Exp $
|
||||
* $Id: rig.c,v 1.82 2004-10-02 20:18:16 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -1137,12 +1137,13 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
|
|||
break;
|
||||
|
||||
case RIG_PTT_SERIAL_DTR:
|
||||
return ser_set_dtr(&rig->state.pttport, ptt==RIG_PTT_ON);
|
||||
|
||||
case RIG_PTT_SERIAL_RTS:
|
||||
ser_ptt_set(&rig->state.pttport, ptt);
|
||||
break;
|
||||
return ser_set_rts(&rig->state.pttport, ptt==RIG_PTT_ON);
|
||||
|
||||
case RIG_PTT_PARALLEL:
|
||||
par_ptt_set(&rig->state.pttport, ptt);
|
||||
break;
|
||||
return par_ptt_set(&rig->state.pttport, ptt);
|
||||
|
||||
case RIG_PTT_NONE:
|
||||
return -RIG_ENAVAIL; /* not available */
|
||||
|
@ -1170,7 +1171,7 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
|
|||
int HAMLIB_API rig_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
|
||||
{
|
||||
const struct rig_caps *caps;
|
||||
int retcode;
|
||||
int retcode, status;
|
||||
vfo_t curr_vfo;
|
||||
|
||||
if (CHECK_RIG_ARG(rig) || !ptt)
|
||||
|
@ -1201,12 +1202,17 @@ int HAMLIB_API rig_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
|
|||
break;
|
||||
|
||||
case RIG_PTT_SERIAL_RTS:
|
||||
retcode = ser_get_rts(&rig->state.pttport, &status);
|
||||
*ptt = status ? RIG_PTT_ON : RIG_PTT_OFF;
|
||||
return retcode;
|
||||
|
||||
case RIG_PTT_SERIAL_DTR:
|
||||
ser_ptt_get(&rig->state.pttport, ptt);
|
||||
break;
|
||||
retcode = ser_get_dtr(&rig->state.pttport, &status);
|
||||
*ptt = status ? RIG_PTT_ON : RIG_PTT_OFF;
|
||||
return retcode;
|
||||
|
||||
case RIG_PTT_PARALLEL:
|
||||
par_ptt_get(&rig->state.pttport, ptt);
|
||||
break;
|
||||
return par_ptt_get(&rig->state.pttport, ptt);
|
||||
|
||||
case RIG_PTT_NONE:
|
||||
return -RIG_ENAVAIL; /* not available */
|
||||
|
@ -1234,7 +1240,7 @@ int HAMLIB_API rig_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
|
|||
int HAMLIB_API rig_get_dcd(RIG *rig, vfo_t vfo, dcd_t *dcd)
|
||||
{
|
||||
const struct rig_caps *caps;
|
||||
int retcode;
|
||||
int retcode, status;
|
||||
vfo_t curr_vfo;
|
||||
|
||||
if (CHECK_RIG_ARG(rig) || !dcd)
|
||||
|
@ -1265,13 +1271,23 @@ int HAMLIB_API rig_get_dcd(RIG *rig, vfo_t vfo, dcd_t *dcd)
|
|||
break;
|
||||
|
||||
case RIG_DCD_SERIAL_CTS:
|
||||
retcode = ser_get_cts(&rig->state.dcdport, &status);
|
||||
*dcd = status ? RIG_DCD_ON : RIG_DCD_OFF;
|
||||
return retcode;
|
||||
|
||||
case RIG_DCD_SERIAL_DSR:
|
||||
retcode = ser_get_dsr(&rig->state.dcdport, &status);
|
||||
*dcd = status ? RIG_DCD_ON : RIG_DCD_OFF;
|
||||
return retcode;
|
||||
|
||||
case RIG_DCD_SERIAL_CAR:
|
||||
ser_dcd_get(&rig->state.dcdport, dcd);
|
||||
break;
|
||||
retcode = ser_get_car(&rig->state.dcdport, &status);
|
||||
*dcd = status ? RIG_DCD_ON : RIG_DCD_OFF;
|
||||
return retcode;
|
||||
|
||||
|
||||
case RIG_DCD_PARALLEL:
|
||||
par_dcd_get(&rig->state.dcdport, dcd);
|
||||
break;
|
||||
return par_dcd_get(&rig->state.dcdport, dcd);
|
||||
|
||||
case RIG_DCD_NONE:
|
||||
return -RIG_ENAVAIL; /* not available */
|
||||
|
|
127
src/serial.c
127
src/serial.c
|
@ -4,7 +4,7 @@
|
|||
* Parts of the PTT handling are derived from soundmodem, an excellent
|
||||
* ham packet softmodem written by Thomas Sailer, HB9JNX.
|
||||
*
|
||||
* $Id: serial.c,v 1.41 2004-10-02 10:32:08 fillods Exp $
|
||||
* $Id: serial.c,v 1.42 2004-10-02 20:18:16 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -414,7 +414,8 @@ int HAMLIB_API ser_set_rts(port_t *p, int state)
|
|||
unsigned int y = TIOCM_RTS;
|
||||
|
||||
#if defined(TIOCMBIS) && defined(TIOCMBIC)
|
||||
return IOCTL(p->fd, state ? TIOCMBIS : TIOCMBIC, &y);
|
||||
return IOCTL(p->fd, state ? TIOCMBIS : TIOCMBIC, &y) < 0 ?
|
||||
-RIG_EIO : RIG_OK;
|
||||
#else
|
||||
if (IOCTL(p->fd, TIOCMGET, &y) < 0) {
|
||||
return -RIG_EIO;
|
||||
|
@ -423,7 +424,7 @@ int HAMLIB_API ser_set_rts(port_t *p, int state)
|
|||
y |= TIOCM_RTS;
|
||||
else
|
||||
y &= ~TIOCM_RTS;
|
||||
return IOCTL(p->fd, TIOCMSET, &y);
|
||||
return IOCTL(p->fd, TIOCMSET, &y) < 0 ? -RIG_EIO : RIG_OK;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -433,11 +434,13 @@ int HAMLIB_API ser_set_rts(port_t *p, int state)
|
|||
*/
|
||||
int HAMLIB_API ser_get_rts(port_t *p, int *state)
|
||||
{
|
||||
int status;
|
||||
int retcode;
|
||||
unsigned int y;
|
||||
status = IOCTL(p->fd, TIOCMGET, &y);
|
||||
*state = (y & TIOCM_RTS) ? RIG_PTT_ON:RIG_PTT_OFF;
|
||||
return RIG_OK;
|
||||
|
||||
retcode = IOCTL(p->fd, TIOCMGET, &y);
|
||||
*state = (y & TIOCM_RTS) == TIOCM_RTS;
|
||||
|
||||
return retcode < 0 ? -RIG_EIO : RIG_OK;
|
||||
}
|
||||
|
||||
int HAMLIB_API ser_set_dtr(port_t *p, int state)
|
||||
|
@ -445,7 +448,8 @@ int HAMLIB_API ser_set_dtr(port_t *p, int state)
|
|||
unsigned int y = TIOCM_DTR;
|
||||
|
||||
#if defined(TIOCMBIS) && defined(TIOCMBIC)
|
||||
return IOCTL(p->fd, state ? TIOCMBIS : TIOCMBIC, &y);
|
||||
return IOCTL(p->fd, state ? TIOCMBIS : TIOCMBIC, &y) < 0 ?
|
||||
-RIG_EIO : RIG_OK;
|
||||
#else
|
||||
if (IOCTL(p->fd, TIOCMGET, &y) < 0) {
|
||||
return -RIG_EIO;
|
||||
|
@ -454,23 +458,26 @@ int HAMLIB_API ser_set_dtr(port_t *p, int state)
|
|||
y |= TIOCM_DTR;
|
||||
else
|
||||
y &= ~TIOCM_DTR;
|
||||
return IOCTL(p->fd, TIOCMSET, &y);
|
||||
return IOCTL(p->fd, TIOCMSET, &y) < 0 ? -RIG_EIO : RIG_OK;
|
||||
#endif
|
||||
}
|
||||
|
||||
int HAMLIB_API ser_get_dtr(port_t *p, int *state)
|
||||
{
|
||||
int status;
|
||||
int retcode;
|
||||
unsigned int y;
|
||||
status = IOCTL(p->fd, TIOCMGET, &y);
|
||||
*state = (y & TIOCM_DTR) ? RIG_PTT_ON:RIG_PTT_OFF;
|
||||
return status;
|
||||
|
||||
retcode = IOCTL(p->fd, TIOCMGET, &y);
|
||||
*state = (y & TIOCM_DTR) == TIOCM_DTR;
|
||||
|
||||
return retcode < 0 ? -RIG_EIO : RIG_OK;
|
||||
}
|
||||
|
||||
int HAMLIB_API ser_set_brk(port_t *p, int state)
|
||||
{
|
||||
#if defined(TIOCSBRK) && defined(TIOCCBRK)
|
||||
return IOCTL(p->fd, state ? TIOCSBRK : TIOCCBRK, 0 );
|
||||
return IOCTL(p->fd, state ? TIOCSBRK : TIOCCBRK, 0 ) < 0 ?
|
||||
-RIG_EIO : RIG_OK;
|
||||
#else
|
||||
return -RIG_ENIMPL;
|
||||
#endif
|
||||
|
@ -480,87 +487,37 @@ int HAMLIB_API ser_set_brk(port_t *p, int state)
|
|||
* assumes state not NULL
|
||||
* p is supposed to be &rig->state.rigport
|
||||
*/
|
||||
int HAMLIB_API ser_get_dcd(port_t *p, int *state)
|
||||
int HAMLIB_API ser_get_car(port_t *p, int *state)
|
||||
{
|
||||
int status;
|
||||
int retcode;
|
||||
unsigned int y;
|
||||
status = IOCTL(p->fd, TIOCMGET, &y);
|
||||
*state = (y & TIOCM_CAR) ? RIG_DCD_ON:RIG_DCD_OFF;
|
||||
return RIG_OK;
|
||||
|
||||
retcode = IOCTL(p->fd, TIOCMGET, &y);
|
||||
*state = (y & TIOCM_CAR) == TIOCM_CAR;
|
||||
|
||||
return retcode < 0 ? -RIG_EIO : RIG_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* p is supposed to be &rig->state.pttport
|
||||
*/
|
||||
int ser_ptt_set(port_t *p, ptt_t pttx)
|
||||
int HAMLIB_API ser_get_cts(port_t *p, int *state)
|
||||
{
|
||||
switch(p->type.ptt) {
|
||||
case RIG_PTT_SERIAL_RTS:
|
||||
return ser_set_rts(p, pttx==RIG_PTT_ON);
|
||||
case RIG_PTT_SERIAL_DTR:
|
||||
return ser_set_dtr(p, pttx==RIG_PTT_ON);
|
||||
default:
|
||||
rig_debug(RIG_DEBUG_ERR,"Unsupported PTT type %d\n",
|
||||
p->type.ptt);
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
return RIG_OK;
|
||||
int retcode;
|
||||
unsigned int y;
|
||||
|
||||
retcode = IOCTL(p->fd, TIOCMGET, &y);
|
||||
*state = (y & TIOCM_CTS) == TIOCM_CTS;
|
||||
|
||||
return retcode < 0 ? -RIG_EIO : RIG_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* assumes pttx not NULL
|
||||
*/
|
||||
int ser_ptt_get(port_t *p, ptt_t *pttx)
|
||||
int HAMLIB_API ser_get_dsr(port_t *p, int *state)
|
||||
{
|
||||
int retcode;
|
||||
unsigned int y;
|
||||
|
||||
switch(p->type.ptt) {
|
||||
case RIG_PTT_SERIAL_RTS:
|
||||
return ser_get_rts(p, &pttx);
|
||||
case RIG_PTT_SERIAL_DTR:
|
||||
return ser_get_dtr(p, &pttx);
|
||||
default:
|
||||
rig_debug(RIG_DEBUG_ERR,"Unsupported PTT type %d\n",
|
||||
p->type.ptt);
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
return RIG_OK;
|
||||
}
|
||||
retcode = IOCTL(p->fd, TIOCMGET, &y);
|
||||
*state = (y & TIOCM_DSR) == TIOCM_DSR;
|
||||
|
||||
/*
|
||||
* assumes dcdx not NULL
|
||||
* p is supposed to be &rig->state.dcdport
|
||||
*/
|
||||
int ser_dcd_get(port_t *p, dcd_t *dcdx)
|
||||
{
|
||||
|
||||
switch(p->type.dcd) {
|
||||
case RIG_DCD_SERIAL_CTS:
|
||||
{
|
||||
unsigned int y;
|
||||
int status;
|
||||
|
||||
status = IOCTL(p->fd, TIOCMGET, &y);
|
||||
*dcdx = y & TIOCM_CTS ? RIG_DCD_ON:RIG_DCD_OFF;
|
||||
return status;
|
||||
}
|
||||
|
||||
case RIG_DCD_SERIAL_DSR:
|
||||
{
|
||||
unsigned int y;
|
||||
int status;
|
||||
|
||||
status = IOCTL(p->fd, TIOCMGET, &y);
|
||||
*dcdx = y & TIOCM_DSR ? RIG_DCD_ON:RIG_DCD_OFF;
|
||||
return status;
|
||||
}
|
||||
case RIG_DCD_SERIAL_CAR:
|
||||
return ser_get_dcd(p, &dcdx);
|
||||
default:
|
||||
rig_debug(RIG_DEBUG_ERR,"Unsupported DCD type %d\n",
|
||||
p->type.dcd);
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
return RIG_OK;
|
||||
return retcode < 0 ? -RIG_EIO : RIG_OK;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Hamlib Interface - serial communication header
|
||||
* Copyright (c) 2000-2004 by Stephane Fillod and Frank Singleton
|
||||
*
|
||||
* $Id: serial.h,v 1.24 2004-10-02 10:32:09 fillods Exp $
|
||||
* $Id: serial.h,v 1.25 2004-10-02 20:18:16 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -35,15 +35,14 @@ extern HAMLIB_EXPORT(int) serial_flush(port_t *p);
|
|||
/* Hamlib internal use, see rig.c */
|
||||
int ser_open(port_t *p);
|
||||
int ser_close(port_t *p);
|
||||
int ser_ptt_set(port_t *p, ptt_t pttx);
|
||||
int ser_ptt_get(port_t *p, ptt_t *pttx);
|
||||
int ser_dcd_get(port_t *p, dcd_t *dcdx);
|
||||
extern HAMLIB_EXPORT(int) ser_set_rts(port_t *p, int state);
|
||||
extern HAMLIB_EXPORT(int) ser_get_rts(port_t *p, int *state);
|
||||
extern HAMLIB_EXPORT(int) ser_set_brk(port_t *p, int state);
|
||||
extern HAMLIB_EXPORT(int) ser_set_dtr(port_t *p, int state);
|
||||
extern HAMLIB_EXPORT(int) ser_get_dtr(port_t *p, int *state);
|
||||
extern HAMLIB_EXPORT(int) ser_get_dcd(port_t *p, int *state);
|
||||
extern HAMLIB_EXPORT(int) ser_get_cts(port_t *p, int *state);
|
||||
extern HAMLIB_EXPORT(int) ser_get_dsr(port_t *p, int *state);
|
||||
extern HAMLIB_EXPORT(int) ser_get_car(port_t *p, int *state);
|
||||
int par_open(port_t *p);
|
||||
int par_close(port_t *p);
|
||||
int par_ptt_set(port_t *p, ptt_t pttx);
|
||||
|
|
Ładowanie…
Reference in New Issue