* 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-79ac388436b8
Hamlib-1.2.3
Stéphane Fillod, F8CFE 2004-10-02 20:18:16 +00:00
rodzic 3b5f811c42
commit 643fb5feae
4 zmienionych plików z 79 dodań i 107 usunięć

Wyświetl plik

@ -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 */

Wyświetl plik

@ -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 */

Wyświetl plik

@ -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;
}

Wyświetl plik

@ -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);