kopia lustrzana https://github.com/Hamlib/Hamlib
initial SatEL rotator support
rodzic
c20125a264
commit
e6fa200152
|
@ -52,7 +52,7 @@ dnl Beware of duplication should a backend directory include both rig and
|
||||||
dnl rotor definitions, e.g. "dummy". Optional backends will not be listed
|
dnl rotor definitions, e.g. "dummy". Optional backends will not be listed
|
||||||
dnl here but will be added later, e.g. "winradio".
|
dnl here but will be added later, e.g. "winradio".
|
||||||
RIG_BACKEND_LIST="rigs/adat rigs/alinco rigs/aor rigs/barrett rigs/dorji rigs/drake rigs/dummy rigs/elad rigs/flexradio rigs/icom rigs/icmarine rigs/jrc rigs/kachina rigs/kenwood rigs/kit rigs/lowe rigs/pcr rigs/prm80 rigs/racal rigs/rft rigs/rs rigs/skanti rigs/tapr rigs/tentec rigs/tuner rigs/uniden rigs/winradio rigs/wj rigs/yaesu"
|
RIG_BACKEND_LIST="rigs/adat rigs/alinco rigs/aor rigs/barrett rigs/dorji rigs/drake rigs/dummy rigs/elad rigs/flexradio rigs/icom rigs/icmarine rigs/jrc rigs/kachina rigs/kenwood rigs/kit rigs/lowe rigs/pcr rigs/prm80 rigs/racal rigs/rft rigs/rs rigs/skanti rigs/tapr rigs/tentec rigs/tuner rigs/uniden rigs/winradio rigs/wj rigs/yaesu"
|
||||||
ROT_BACKEND_LIST="rotators/amsat rotators/ars rotators/celestron rotators/cnctrk rotators/easycomm rotators/ether6 rotators/fodtrack rotators/gs232a rotators/heathkit rotators/m2 rotators/meade rotators/rotorez rotators/sartek rotators/spid rotators/ts7400 rotators/prosistel rotators/ioptron"
|
ROT_BACKEND_LIST="rotators/amsat rotators/ars rotators/celestron rotators/cnctrk rotators/easycomm rotators/ether6 rotators/fodtrack rotators/gs232a rotators/heathkit rotators/m2 rotators/meade rotators/rotorez rotators/sartek rotators/spid rotators/ts7400 rotators/prosistel rotators/ioptron rotators/satel"
|
||||||
# Amplifiers are all in the amplifiers directory
|
# Amplifiers are all in the amplifiers directory
|
||||||
AMP_BACKEND_LIST="amplifiers/elecraft"
|
AMP_BACKEND_LIST="amplifiers/elecraft"
|
||||||
|
|
||||||
|
@ -842,6 +842,7 @@ rotators/sartek/Makefile
|
||||||
rotators/spid/Makefile
|
rotators/spid/Makefile
|
||||||
rotators/ts7400/Makefile
|
rotators/ts7400/Makefile
|
||||||
rotators/indi/Makefile
|
rotators/indi/Makefile
|
||||||
|
rotators/satel/Makefile
|
||||||
rigs/adat/Makefile
|
rigs/adat/Makefile
|
||||||
rigs/alinco/Makefile
|
rigs/alinco/Makefile
|
||||||
rigs/aor/Makefile
|
rigs/aor/Makefile
|
||||||
|
|
|
@ -491,6 +491,20 @@
|
||||||
#define ROT_MODEL_INDI ROT_MAKE_MODEL(ROT_INDI, 1)
|
#define ROT_MODEL_INDI ROT_MAKE_MODEL(ROT_INDI, 1)
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \def ROT_MODEL_SATEL
|
||||||
|
* \brief A macro that returns the model number of the SatEL backend.
|
||||||
|
*
|
||||||
|
* The SatEL backend can be used with rotators that support the VE5FP
|
||||||
|
* interface.
|
||||||
|
*/
|
||||||
|
//! @cond Doxygen_Suppress
|
||||||
|
#define ROT_SATEL 21
|
||||||
|
#define ROT_BACKEND_SATEL "satel"
|
||||||
|
//! @endcond
|
||||||
|
#define ROT_MODEL_SATEL ROT_MAKE_MODEL(ROT_SATEL, 1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
SATELSRC = satel.c satel.h
|
||||||
|
|
||||||
|
noinst_LTLIBRARIES = libhamlib-satel.la
|
||||||
|
libhamlib_satel_la_SOURCES = $(SATELSRC)
|
||||||
|
|
||||||
|
EXTRA_DIST = Android.mk
|
|
@ -0,0 +1,232 @@
|
||||||
|
/*
|
||||||
|
* Hamlib Sat/El backend - main file
|
||||||
|
* Copyright (c) 2021 Joshua Lynch
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <strings.h>
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "hamlib/rotator.h"
|
||||||
|
#include "serial.h"
|
||||||
|
#include "misc.h"
|
||||||
|
#include "register.h"
|
||||||
|
|
||||||
|
#include "satel.h"
|
||||||
|
|
||||||
|
|
||||||
|
static int satel_rot_open(ROT *rot)
|
||||||
|
{
|
||||||
|
#define RES_BUF_SIZE 256
|
||||||
|
char buf[RES_BUF_SIZE];
|
||||||
|
int ret;
|
||||||
|
struct rot_state *rs;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||||
|
|
||||||
|
|
||||||
|
rs = &rot->state;
|
||||||
|
|
||||||
|
rig_flush(&rs->rotport);
|
||||||
|
|
||||||
|
// check if we're connected to the rotator
|
||||||
|
ret = write_block(&rs->rotport, "?", 1);
|
||||||
|
if (ret != RIG_OK)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
ret = read_string(&rs->rotport, buf, RES_BUF_SIZE, "\n", 1);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
ret = strncasecmp("SatEL", buf, 5);
|
||||||
|
if (ret != 0)
|
||||||
|
return RIG_EIO;
|
||||||
|
|
||||||
|
// yep, now enable motion
|
||||||
|
ret = write_block(&rs->rotport, "g", 1);
|
||||||
|
if (ret != RIG_OK)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
|
||||||
|
return RIG_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int satel_rot_set_position(ROT *rot, azimuth_t az, elevation_t el)
|
||||||
|
{
|
||||||
|
#define BUF_CMD_SIZE 20
|
||||||
|
char buf[BUF_CMD_SIZE];
|
||||||
|
struct rot_state *rs;
|
||||||
|
|
||||||
|
|
||||||
|
rig_debug(RIG_DEBUG_VERBOSE, "%s called: %.2f %.2f\n", __func__,
|
||||||
|
az, el);
|
||||||
|
|
||||||
|
|
||||||
|
rs = &rot->state;
|
||||||
|
|
||||||
|
rig_flush(&rs->rotport);
|
||||||
|
|
||||||
|
snprintf(buf, BUF_CMD_SIZE, "p%03d %03d\r\n", (int)az, (int)el);
|
||||||
|
return write_block(&rs->rotport, buf, strlen(buf));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int satel_rot_get_position(ROT *rot, azimuth_t *az, elevation_t *el)
|
||||||
|
{
|
||||||
|
#define RES_BUF_SIZE 256
|
||||||
|
char buf[RES_BUF_SIZE];
|
||||||
|
char *p;
|
||||||
|
int ret;
|
||||||
|
struct rot_state *rs;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||||
|
|
||||||
|
|
||||||
|
rs = &rot->state;
|
||||||
|
|
||||||
|
rig_flush(&rs->rotport);
|
||||||
|
|
||||||
|
ret = write_block(&rs->rotport, "z", 1);
|
||||||
|
if (ret != RIG_OK)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
|
||||||
|
// skip header information
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
ret = read_string(&rs->rotport, buf, RES_BUF_SIZE, "\n", 1);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// read azimuth line
|
||||||
|
ret = read_string(&rs->rotport, buf, RES_BUF_SIZE, "\n", 1);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
p = buf + 10;
|
||||||
|
p[3] = '\0';
|
||||||
|
*az = strtof(p, NULL);
|
||||||
|
|
||||||
|
rig_debug(RIG_DEBUG_VERBOSE, "AZIMUTH %f[%s]", *az, p);
|
||||||
|
|
||||||
|
|
||||||
|
// read elevation line
|
||||||
|
ret = read_string(&rs->rotport, buf, RES_BUF_SIZE, "\n", 1);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
p = buf + 12;
|
||||||
|
p[3] = '\0';
|
||||||
|
*el = strtof(p, NULL);
|
||||||
|
|
||||||
|
rig_debug(RIG_DEBUG_VERBOSE, "ELEVATION %f[%s]", *el, p);
|
||||||
|
|
||||||
|
// skip trailer information
|
||||||
|
for (int i = 0; i < 2; i++)
|
||||||
|
{
|
||||||
|
ret = read_string(&rs->rotport, buf, RES_BUF_SIZE, "\n", 1);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return RIG_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int satel_rot_stop(ROT *rot)
|
||||||
|
{
|
||||||
|
struct rot_state *rs;
|
||||||
|
|
||||||
|
|
||||||
|
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||||
|
|
||||||
|
|
||||||
|
rs = &rot->state;
|
||||||
|
|
||||||
|
rig_flush(&rs->rotport);
|
||||||
|
|
||||||
|
return write_block(&rs->rotport, "*", 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *satel_rot_get_info(ROT *rot)
|
||||||
|
{
|
||||||
|
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||||
|
|
||||||
|
return "Satel rotator";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Satel rotator capabilities.
|
||||||
|
*/
|
||||||
|
const struct rot_caps satel_rot_caps =
|
||||||
|
{
|
||||||
|
ROT_MODEL(ROT_MODEL_SATEL),
|
||||||
|
.model_name = "SatEL",
|
||||||
|
.mfg_name = "SatEL",
|
||||||
|
.version = "20210123.0",
|
||||||
|
.copyright = "LGPL",
|
||||||
|
.status = RIG_STATUS_ALPHA,
|
||||||
|
.rot_type = ROT_TYPE_AZEL,
|
||||||
|
.port_type = RIG_PORT_SERIAL,
|
||||||
|
.serial_rate_max = 9600,
|
||||||
|
.serial_rate_min = 9600,
|
||||||
|
.serial_data_bits = 8,
|
||||||
|
.serial_stop_bits = 1,
|
||||||
|
.serial_parity = RIG_PARITY_NONE,
|
||||||
|
.serial_handshake = RIG_HANDSHAKE_NONE,
|
||||||
|
.write_delay = 250,
|
||||||
|
.post_write_delay = 0,
|
||||||
|
.timeout = 1000,
|
||||||
|
.retry = 0,
|
||||||
|
.min_az = 0.,
|
||||||
|
.max_az = 360.,
|
||||||
|
.min_el = 0.,
|
||||||
|
.max_el = 90.,
|
||||||
|
.rot_open = satel_rot_open,
|
||||||
|
.get_position = satel_rot_get_position,
|
||||||
|
.set_position = satel_rot_set_position,
|
||||||
|
.stop = satel_rot_stop,
|
||||||
|
.get_info = satel_rot_get_info,
|
||||||
|
.priv = NULL, /* priv */
|
||||||
|
};
|
||||||
|
|
||||||
|
DECLARE_INITROT_BACKEND(satel)
|
||||||
|
{
|
||||||
|
rig_debug(RIG_DEBUG_VERBOSE, "%s: _init called\n", __func__);
|
||||||
|
|
||||||
|
rot_register(&satel_rot_caps);
|
||||||
|
|
||||||
|
return RIG_OK;
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
* Hamlib Sat/El backend - main header
|
||||||
|
* Copyright (c) 2021 Joshua Lynch
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _ROT_SATEL_H
|
||||||
|
#define _ROT_SATEL_H 1
|
||||||
|
|
||||||
|
extern const struct rot_caps satel_rot_caps;
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _ROT_SATEL_H */
|
|
@ -84,6 +84,7 @@ DEFINE_INITROT_BACKEND(cnctrk);
|
||||||
DEFINE_INITROT_BACKEND(prosistel);
|
DEFINE_INITROT_BACKEND(prosistel);
|
||||||
DEFINE_INITROT_BACKEND(meade);
|
DEFINE_INITROT_BACKEND(meade);
|
||||||
DEFINE_INITROT_BACKEND(ioptron);
|
DEFINE_INITROT_BACKEND(ioptron);
|
||||||
|
DEFINE_INITROT_BACKEND(satel);
|
||||||
#if HAVE_LIBINDI
|
#if HAVE_LIBINDI
|
||||||
DEFINE_INITROT_BACKEND(indi);
|
DEFINE_INITROT_BACKEND(indi);
|
||||||
#endif
|
#endif
|
||||||
|
@ -126,6 +127,7 @@ static struct
|
||||||
{ ROT_PROSISTEL, ROT_BACKEND_PROSISTEL, ROT_FUNCNAMA(prosistel) },
|
{ ROT_PROSISTEL, ROT_BACKEND_PROSISTEL, ROT_FUNCNAMA(prosistel) },
|
||||||
{ ROT_MEADE, ROT_BACKEND_MEADE, ROT_FUNCNAMA(meade) },
|
{ ROT_MEADE, ROT_BACKEND_MEADE, ROT_FUNCNAMA(meade) },
|
||||||
{ ROT_IOPTRON, ROT_BACKEND_IOPTRON, ROT_FUNCNAMA(ioptron) },
|
{ ROT_IOPTRON, ROT_BACKEND_IOPTRON, ROT_FUNCNAMA(ioptron) },
|
||||||
|
{ ROT_SATEL, ROT_BACKEND_SATEL, ROT_FUNCNAMA(satel) },
|
||||||
#if HAVE_LIBINDI
|
#if HAVE_LIBINDI
|
||||||
{ ROT_INDI, ROT_BACKEND_INDI, ROT_FUNCNAMA(indi) },
|
{ ROT_INDI, ROT_BACKEND_INDI, ROT_FUNCNAMA(indi) },
|
||||||
#endif
|
#endif
|
||||||
|
|
Ładowanie…
Reference in New Issue