Function to get amplifier port address

Convert src/amplifier.c to new MACROs/access method.
pull/1476/head
George Baltz N3GB 2024-01-08 15:48:30 -05:00
rodzic cd1f4d3929
commit b0d1eb297f
2 zmienionych plików z 71 dodań i 44 usunięć

Wyświetl plik

@ -18,6 +18,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
* *
*/ */
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#ifndef _AMPLIFIER_H #ifndef _AMPLIFIER_H
#define _AMPLIFIER_H 1 #define _AMPLIFIER_H 1
@ -445,6 +446,8 @@ rig_ext_lookup HAMLIB_PARAMS((RIG *rig,
extern HAMLIB_EXPORT(setting_t) amp_parse_level(const char *s); extern HAMLIB_EXPORT(setting_t) amp_parse_level(const char *s);
extern HAMLIB_EXPORT(const char *) amp_strlevel(setting_t); extern HAMLIB_EXPORT(const char *) amp_strlevel(setting_t);
extern HAMLIB_EXPORT(void *) amp_data_pointer(AMP *amp, rig_ptrx_t idx);
//! @endcond //! @endcond

Wyświetl plik

@ -20,6 +20,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
* *
*/ */
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/** /**
* \addtogroup amplifier * \addtogroup amplifier
@ -185,6 +186,7 @@ AMP *HAMLIB_API amp_init(amp_model_t amp_model)
AMP *amp; AMP *amp;
const struct amp_caps *caps; const struct amp_caps *caps;
struct amp_state *rs; struct amp_state *rs;
hamlib_port_t *ap;
amp_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); amp_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
@ -224,37 +226,41 @@ AMP *HAMLIB_API amp_init(amp_model_t amp_model)
*/ */
rs = &amp->state; rs = &amp->state;
rs->comm_state = 0; //TODO allocate and link new ampport
rs->ampport.type.rig = caps->port_type; /* default from caps */ // For now, use the embedded one
ap = AMPPORT(amp);
rs->ampport.write_delay = caps->write_delay; rs->comm_state = 0;
rs->ampport.post_write_delay = caps->post_write_delay; ap->type.rig = caps->port_type; /* default from caps */
rs->ampport.timeout = caps->timeout;
rs->ampport.retry = caps->retry; ap->write_delay = caps->write_delay;
ap->post_write_delay = caps->post_write_delay;
ap->timeout = caps->timeout;
ap->retry = caps->retry;
rs->has_get_level = caps->has_get_level; rs->has_get_level = caps->has_get_level;
switch (caps->port_type) switch (caps->port_type)
{ {
case RIG_PORT_SERIAL: case RIG_PORT_SERIAL:
// Don't think we need a default port here // Don't think we need a default port here
//strncpy(rs->ampport.pathname, DEFAULT_SERIAL_PORT, HAMLIB_FILPATHLEN - 1); //strncpy(ap->pathname, DEFAULT_SERIAL_PORT, HAMLIB_FILPATHLEN - 1);
rs->ampport.parm.serial.rate = caps->serial_rate_max; /* fastest ! */ ap->parm.serial.rate = caps->serial_rate_max; /* fastest ! */
rs->ampport.parm.serial.data_bits = caps->serial_data_bits; ap->parm.serial.data_bits = caps->serial_data_bits;
rs->ampport.parm.serial.stop_bits = caps->serial_stop_bits; ap->parm.serial.stop_bits = caps->serial_stop_bits;
rs->ampport.parm.serial.parity = caps->serial_parity; ap->parm.serial.parity = caps->serial_parity;
rs->ampport.parm.serial.handshake = caps->serial_handshake; ap->parm.serial.handshake = caps->serial_handshake;
break; break;
case RIG_PORT_NETWORK: case RIG_PORT_NETWORK:
case RIG_PORT_UDP_NETWORK: case RIG_PORT_UDP_NETWORK:
strncpy(rs->ampport.pathname, "127.0.0.1:4531", HAMLIB_FILPATHLEN - 1); strncpy(ap->pathname, "127.0.0.1:4531", HAMLIB_FILPATHLEN - 1);
break; break;
default: default:
strncpy(rs->ampport.pathname, "", HAMLIB_FILPATHLEN - 1); strncpy(ap->pathname, "", HAMLIB_FILPATHLEN - 1);
} }
rs->ampport.fd = -1; ap->fd = -1;
/* /*
* let the backend a chance to setup his private data * let the backend a chance to setup his private data
@ -279,7 +285,7 @@ AMP *HAMLIB_API amp_init(amp_model_t amp_model)
// Now we have to copy our new rig state hamlib_port structure to the deprecated one // Now we have to copy our new rig state hamlib_port structure to the deprecated one
// Clients built on older 4.X versions will use the old structure // Clients built on older 4.X versions will use the old structure
// Clients built on newer 4.5 versions will use the new structure // Clients built on newer 4.5 versions will use the new structure
memcpy(&amp->state.ampport_deprecated, &amp->state.ampport, memcpy(&amp->state.ampport_deprecated, ap,
sizeof(amp->state.ampport_deprecated)); sizeof(amp->state.ampport_deprecated));
return amp; return amp;
@ -306,6 +312,7 @@ int HAMLIB_API amp_open(AMP *amp)
{ {
const struct amp_caps *caps; const struct amp_caps *caps;
struct amp_state *rs; struct amp_state *rs;
hamlib_port_t *ap = AMPPORT(amp);
int status; int status;
int net1, net2, net3, net4, port; int net1, net2, net3, net4, port;
@ -324,21 +331,21 @@ int HAMLIB_API amp_open(AMP *amp)
return -RIG_EINVAL; return -RIG_EINVAL;
} }
rs->ampport.fd = -1; ap->fd = -1;
// determine if we have a network address // determine if we have a network address
if (sscanf(rs->ampport.pathname, "%d.%d.%d.%d:%d", &net1, &net2, &net3, &net4, if (sscanf(ap->pathname, "%d.%d.%d.%d:%d", &net1, &net2, &net3, &net4,
&port) == 5) &port) == 5)
{ {
rig_debug(RIG_DEBUG_TRACE, "%s: using network address %s\n", __func__, rig_debug(RIG_DEBUG_TRACE, "%s: using network address %s\n", __func__,
rs->ampport.pathname); ap->pathname);
rs->ampport.type.rig = RIG_PORT_NETWORK; ap->type.rig = RIG_PORT_NETWORK;
} }
switch (rs->ampport.type.rig) switch (ap->type.rig)
{ {
case RIG_PORT_SERIAL: case RIG_PORT_SERIAL:
status = serial_open(&rs->ampport); status = serial_open(ap);
if (status != 0) if (status != 0)
{ {
@ -348,7 +355,7 @@ int HAMLIB_API amp_open(AMP *amp)
break; break;
case RIG_PORT_PARALLEL: case RIG_PORT_PARALLEL:
status = par_open(&rs->ampport); status = par_open(ap);
if (status < 0) if (status < 0)
{ {
@ -358,18 +365,18 @@ int HAMLIB_API amp_open(AMP *amp)
break; break;
case RIG_PORT_DEVICE: case RIG_PORT_DEVICE:
status = open(rs->ampport.pathname, O_RDWR, 0); status = open(ap->pathname, O_RDWR, 0);
if (status < 0) if (status < 0)
{ {
return -RIG_EIO; return -RIG_EIO;
} }
rs->ampport.fd = status; ap->fd = status;
break; break;
case RIG_PORT_USB: case RIG_PORT_USB:
status = usb_port_open(&rs->ampport); status = usb_port_open(ap);
if (status < 0) if (status < 0)
{ {
@ -385,7 +392,7 @@ int HAMLIB_API amp_open(AMP *amp)
case RIG_PORT_NETWORK: case RIG_PORT_NETWORK:
case RIG_PORT_UDP_NETWORK: case RIG_PORT_UDP_NETWORK:
/* FIXME: default port */ /* FIXME: default port */
status = network_open(&rs->ampport, 4531); status = network_open(ap, 4531);
if (status < 0) if (status < 0)
{ {
@ -412,31 +419,31 @@ int HAMLIB_API amp_open(AMP *amp)
if (status != RIG_OK) if (status != RIG_OK)
{ {
memcpy(&amp->state.ampport_deprecated, &amp->state.ampport, memcpy(&amp->state.ampport_deprecated, ap,
sizeof(amp->state.ampport_deprecated)); sizeof(amp->state.ampport_deprecated));
return status; return status;
} }
} }
if (rs->ampport.parm.serial.dtr_state == RIG_SIGNAL_ON) if (ap->parm.serial.dtr_state == RIG_SIGNAL_ON)
{ {
ser_set_dtr(&rs->ampport, 1); ser_set_dtr(ap, 1);
} }
else else
{ {
ser_set_dtr(&rs->ampport, 0); ser_set_dtr(ap, 0);
} }
if (rs->ampport.parm.serial.rts_state == RIG_SIGNAL_ON) if (ap->parm.serial.rts_state == RIG_SIGNAL_ON)
{ {
ser_set_rts(&rs->ampport, 1); ser_set_rts(ap, 1);
} }
else else
{ {
ser_set_rts(&rs->ampport, 0); ser_set_rts(ap, 0);
} }
memcpy(&amp->state.ampport_deprecated, &amp->state.ampport, memcpy(&amp->state.ampport_deprecated, ap,
sizeof(amp->state.ampport_deprecated)); sizeof(amp->state.ampport_deprecated));
return RIG_OK; return RIG_OK;
@ -464,6 +471,7 @@ int HAMLIB_API amp_close(AMP *amp)
{ {
const struct amp_caps *caps; const struct amp_caps *caps;
struct amp_state *rs; struct amp_state *rs;
hamlib_port_t *ap = AMPPORT(amp);
amp_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); amp_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
@ -499,32 +507,32 @@ int HAMLIB_API amp_close(AMP *amp)
} }
if (rs->ampport.fd != -1) if (ap->fd != -1)
{ {
switch (rs->ampport.type.rig) switch (ap->type.rig)
{ {
case RIG_PORT_SERIAL: case RIG_PORT_SERIAL:
ser_close(&rs->ampport); ser_close(ap);
break; break;
case RIG_PORT_PARALLEL: case RIG_PORT_PARALLEL:
par_close(&rs->ampport); par_close(ap);
break; break;
case RIG_PORT_USB: case RIG_PORT_USB:
usb_port_close(&rs->ampport); usb_port_close(ap);
break; break;
case RIG_PORT_NETWORK: case RIG_PORT_NETWORK:
case RIG_PORT_UDP_NETWORK: case RIG_PORT_UDP_NETWORK:
network_close(&rs->ampport); network_close(ap);
break; break;
default: default:
close(rs->ampport.fd); close(ap->fd);
} }
rs->ampport.fd = -1; ap->fd = -1;
} }
remove_opened_amp(amp); remove_opened_amp(amp);
@ -949,5 +957,21 @@ int HAMLIB_API amp_get_powerstat(AMP *amp, powerstat_t *status)
return amp->caps->get_powerstat(amp, status); return amp->caps->get_powerstat(amp, status);
} }
/**
* \brief Get the address of amplifier data structure(s)
*
* \sa rig_data_pointer
*
*/
void * HAMLIB_API amp_data_pointer(AMP *amp, rig_ptrx_t idx)
{
switch(idx)
{
case RIG_PTRX_AMPPORT:
return AMPPORT(amp);
default:
amp_debug(RIG_DEBUG_ERR, "%s: Invalid data index=%d\n", __func__, idx);
return NULL;
}
}
/*! @} */ /*! @} */