more work on swig bindings, nearly every calls supported, some chan wrapping missing, and also lists

git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@1200 7ae35d74-ebe9-4afe-98af-79ac388436b8
Hamlib-1.1.4
Stéphane Fillod, F8CFE 2002-10-07 21:44:51 +00:00
rodzic 683ba1c248
commit 03160aa72f
7 zmienionych plików z 496 dodań i 82 usunięć

Wyświetl plik

@ -2,12 +2,14 @@
# hamlibtcl, hamlibperl, etc. are temproray modules names
# They will be generated in separate subdirs in the future
# more information on swig at http://www.swig.org
#lib_LTLIBRARIES = @BINDING_LA@
#EXTRA_LTLIBRARIES = hamlibperl.la hamlibtcl.la
lib_LTLIBRARIES = hamlibperl.la hamlibtcl.la
INCLUDES = @INCLUDES@ -Dbool=char -I/usr/lib/perl/5.6.1/CORE -I@TCL_SRC_DIR@/generic
INCLUDES = @INCLUDES@ -Dbool=char -I@PERL_INC_DIR@ -I@TCL_SRC_DIR@/generic
# Perl binding
#hamlibperl_la_INCLUDES = @INCLUDES@ -Dbool=char -I/usr/lib/perl/5.6.1/CORE
@ -30,7 +32,6 @@ hamlibtcl_la_LIBADD = ../src/libhamlib.la
hamlibtcl_wrap.c: hamlib.swg
swig -tcl @INCLUDES@ -o $@ $<
rig.swg: ../include/hamlib/rig.h ../include/hamlib/riglist.h
rotator.swg: ../include/hamlib/rotator.h ../include/hamlib/rotlist.h
@ -39,3 +40,4 @@ hamlib.swg: ignore.swg rig.swg rotator.swg
EXTRA_DIST = hamlib.swg ignore.swg rig.swg rotator.swg
CLEANFILES = hamlibperl_wrap.c hamlib.pm hamlibtcl_wrap.c

Wyświetl plik

@ -6,7 +6,7 @@
* Hamlib bindings - swig interface file
* Copyright (c) 2001,2002 by Stephane Fillod
*
* $Id: hamlib.swg,v 1.2 2002-09-16 06:50:13 fillods Exp $
* $Id: hamlib.swg,v 1.3 2002-10-07 21:44:51 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
@ -30,6 +30,9 @@
#include <hamlib/rig.h>
#include <hamlib/rotator.h>
#include "misc.h"
#include <limits.h>
%}
/*

Wyświetl plik

@ -46,3 +46,106 @@
%ignore RIG_BACKEND_RPC;
%ignore RIG_GNURADIO;
%ignore RIG_BACKEND_GNURADIO;
%ignore rig_open;
%ignore rig_set_freq;
%ignore rig_get_freq;
%ignore rig_set_mode;
%ignore rig_get_mode;
%ignore rig_set_vfo;
%ignore rig_get_vfo;
%ignore rig_set_ptt;
%ignore rig_get_ptt;
%ignore rig_get_dcd;
%ignore rig_set_rptr_shift;
%ignore rig_get_rptr_shift;
%ignore rig_set_rptr_offs;
%ignore rig_get_rptr_offs;
%ignore rig_set_ctcss_tone;
%ignore rig_get_ctcss_tone;
%ignore rig_set_dcs_code;
%ignore rig_get_dcs_code;
%ignore rig_set_ctcss_sql;
%ignore rig_get_ctcss_sql;
%ignore rig_set_dcs_sql;
%ignore rig_get_dcs_sql;
%ignore rig_set_split_freq;
%ignore rig_get_split_freq;
%ignore rig_set_split_mode;
%ignore rig_get_split_mode;
%ignore rig_set_split;
%ignore rig_get_split;
%ignore rig_set_rit;
%ignore rig_get_rit;
%ignore rig_set_xit;
%ignore rig_get_xit;
%ignore rig_set_ts;
%ignore rig_get_ts;
%ignore rig_power2mW;
%ignore rig_mW2power;
%ignore rig_get_resolution;
%ignore rig_set_level;
%ignore rig_get_level;
%ignore rig_set_parm;
%ignore rig_get_parm;
%ignore rig_set_conf;
%ignore rig_get_conf;
%ignore rig_set_powerstat;
%ignore rig_get_powerstat;
%ignore rig_reset;
%ignore rig_set_ext_level;
%ignore rig_get_ext_level;
%ignore rig_set_ext_parm;
%ignore rig_get_ext_parm;
%ignore rig_ext_level_foreach;
%ignore rig_ext_parm_foreach;
%ignore rig_token_lookup;
%ignore rig_close;
%ignore rig_cleanup;
%ignore rig_probe;
%ignore rig_set_ant;
%ignore rig_get_ant;
%ignore rig_has_get_level;
%ignore rig_has_set_level;
%ignore rig_has_get_parm;
%ignore rig_has_set_parm;
%ignore rig_has_get_func;
%ignore rig_has_set_func;
%ignore rig_set_func;
%ignore rig_get_func;
%ignore rig_send_dtmf;
%ignore rig_recv_dtmf;
%ignore rig_send_morse;
%ignore rig_set_bank;
%ignore rig_set_mem;
%ignore rig_get_mem;
%ignore rig_vfo_op;
%ignore rig_has_vfo_op;
%ignore rig_scan;
%ignore rig_has_scan;
%ignore rig_set_channel;
%ignore rig_get_channel;
%ignore rig_set_trn;
%ignore rig_get_trn;
%ignore rig_set_freq_callback;
%ignore rig_set_mode_callback;
%ignore rig_set_vfo_callback;
%ignore rig_set_ptt_callback;
%ignore rig_set_dcd_callback;
%ignore rig_get_info;
%ignore rig_passband_normal;
%ignore rig_passband_narrow;
%ignore rig_passband_wide;
%ignore rot_open;
%ignore rot_close;
%ignore rot_cleanup;
%ignore rot_set_conf;
%ignore rot_get_conf;
%ignore rot_set_position;
%ignore rot_get_position;
%ignore rot_stop;
%ignore rot_park;
%ignore rot_reset;
%ignore rot_move;
%ignore rot_get_info;

Wyświetl plik

@ -6,14 +6,60 @@ use hamlib;
print "Version: $hamlib::hamlib_version\n";
print "FM: $hamlib::RIG_MODE_FM\n";
hamlib::rig_set_debug(5);
hamlib::rig_set_debug($hamlib::RIG_DEBUG_TRACE);
$rig = new hamlib::Rig($hamlib::RIG_MODEL_DUMMY);
$rig->open();
$rpath = $rig->get_conf("rig_pathname");
$region = $rig->get_conf(1073741944);
print "get_conf: path=\"$rpath\", ITU region=$region\n";
$rig->set_freq(12000000, $hamlib::RIG_VFO_A);
$f = $rig->get_freq();
print "freq: $f\n";
($mode, $width) = $rig->get_mode();
print "mode: $mode, width: $width\n";
print "ITU region: $rig->{state}->{itu_region}\n";
print "Copyright: $rig->{caps}->{copyright}\n";
$inf = $rig->get_info();
print "get_info: $inf\n";
$rig->set_level("VOX", 1);
$lvl = $rig->get_level_i("VOX");
print "level: $lvl\n";
$rig->set_level($hamlib::RIG_LEVEL_VOX, 5);
$lvl = $rig->get_level_i($hamlib::RIG_LEVEL_VOX);
print "level: $lvl\n";
$chan = new hamlib::Chan($hamlib::RIG_VFO_A);
$rig->get_channel(\$chan);
print "VFO: $chan->{fields}->{vfo}, $chan->{fields}->{freq}\n";
$rig->close();
($long1, $lat1) = locator2longlat("IN98EC");
($long2, $lat2) = locator2longlat("DM33DX");
$loc1 = longlat2locator($long1, $lat1);
$loc2 = longlat2locator($long2, $lat2);
print "Loc1: $loc1\n";
print "Loc2: $loc2\n";
($dist, $az) = qrb($long1, $lat1, $long2, $lat2);
$longpath = distance_long_path($dist);
print "Distance: $dist km, long path: $longpath\n";
($deg, $min, $sec) = dec2dms($az);
$az2 = dms2dec($deg, $min, $sec);
print "Bearing: $az, $deg° $min' $sec\", recoded: $az2\n"

Wyświetl plik

@ -2,7 +2,7 @@
* Hamlib bindings - Rig interface
* Copyright (c) 2001,2002 by Stephane Fillod
*
* $Id: rig.swg,v 1.2 2002-09-16 06:50:13 fillods Exp $
* $Id: rig.swg,v 1.3 2002-10-07 21:44:51 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
@ -32,24 +32,15 @@ typedef struct Rig {
%}
#define MAX_STATIC 256
/*
* decalre wrapper method with one argument besides RIG* (no target vfo)
* decalre wrapper method with one argument besides RIG* and optional no target vfo
*/
#define METHOD1(f, t1) void f (t1 _##t1) \
{ self->error_status = rig_##f(self->rig, _##t1); }
#define METHOD2(f, t1, t2) void f (t1 _##t1##_1, t2 _##t2##_2) \
{ self->error_status = rig_##f(self->rig, _##t1##_1, _##t2##_2); }
/*
* decalre wrapper method with one argument besides RIG* and vfo
*/
#define METHOD1V(f, t1) void f (t1 _##t1, vfo_t vfo = RIG_VFO_CURR) \
{ self->error_status = rig_##f(self->rig, vfo, _##t1); }
/*
* decalre wrapper method with two arguments besides RIG* and vfo
*/
#define METHOD2V(f, t1, t2) void f (t1 _##t1##_1, t2 _##t2##_2, vfo_t vfo = RIG_VFO_CURR) \
{ self->error_status = rig_##f(self->rig, vfo, _##t1##_1, _##t2##_2); }
#define METHOD1(f, t1) void f (t1 _##t1 _VFO_DECL) \
{ self->error_status = rig_##f(self->rig _VFO_ARG, _##t1); }
#define METHOD2(f, t1, t2) void f (t1 _##t1##_1, t2 _##t2##_2 _VFO_DECL) \
{ self->error_status = rig_##f(self->rig _VFO_ARG, _##t1##_1, _##t2##_2); }
/*
* decalre wrapper method with one output argument besides RIG* (no target vfo)
@ -63,6 +54,142 @@ typedef struct Rig {
#define METHOD1VGET(f, t1) t1 f (vfo_t vfo = RIG_VFO_CURR) \
{ t1 _##t1; self->error_status = rig_##f(self->rig, vfo, &_##t1); return _##t1; }
#define METHODSIMPLESET(f, t1, fld, chk) void set_##f (setting_t stg, t1 fld _VFO_DECL) \
{ value_t val; if (chk (stg)) { \
self->error_status = -RIG_EINVAL; /* invalid type */ \
return; \
} \
val.fld = fld; \
self->error_status = rig_set_##f(self->rig _VFO_ARG , stg, val); \
}
/*
* RIG_CONF_ extparm's type:
* NUMERIC: val.f
* COMBO: val.i, starting from 0
* STRING: val.s
* CHECKBUTTON: val.i 0/1
*/
#define METHODSUPERSET(f, t1, fld, chk) void set_##f (const char *name, t1 fld _VFO_DECL) \
{ setting_t stg; value_t val; \
stg = parse_##f(name); \
if (!rig_has_set_##f(self->rig, stg)) { \
const struct confparams *cfp; \
cfp = rig_ext_lookup(self->rig, name); \
if (!cfp) { \
self->error_status = -RIG_EINVAL; /* no such parameter */ \
return; \
} \
switch (cfp->type) { \
case RIG_CONF_NUMERIC: \
val.fld = fld; \
break; \
case RIG_CONF_CHECKBUTTON: \
case RIG_CONF_COMBO: \
val.i = (int)fld; \
break; \
case RIG_CONF_STRING: \
self->error_status = -RIG_EINVAL; /* invalid type */ \
return; \
default: \
self->error_status = -RIG_ECONF; \
return; \
} \
self->error_status = rig_set_ext_##f(self->rig _VFO_ARG, cfp->token, val); \
return; \
} \
if (chk (stg)) { \
self->error_status = -RIG_EINVAL; /* invalid type */ \
return; \
} \
val.fld = fld; \
self->error_status = rig_set_##f(self->rig _VFO_ARG , stg, val); \
}
#define METHODSTRSET(f) void set_##f (const char *name, const char *s _VFO_DECL) \
{ value_t val; /* only ext_level/parm's can have string values */ \
const struct confparams *cfp; \
cfp = rig_ext_lookup(self->rig, name); \
if (!cfp) { \
self->error_status = -RIG_EINVAL; /* no such parameter */ \
return; \
} \
if (cfp->type != RIG_CONF_STRING) { \
self->error_status = -RIG_EINVAL; /* invalid type */ \
return; \
} \
val.cs = s; \
self->error_status = rig_set_ext_##f(self->rig _VFO_ARG, cfp->token, val); \
}
#define METHODSIMPLEGET(f, t1, fld, chk) t1 get_##f##_##fld (setting_t stg _VFO_DECL) \
{ value_t val; if (chk (stg)) { \
self->error_status = -RIG_EINVAL; /* invalid type */ \
return val.fld; /* undefined value */ \
} \
self->error_status = rig_get_##f(self->rig _VFO_ARG , stg, &val); \
return val.fld; \
}
#define METHODSUPERGET(fct, t1, fld, chk) t1 get_##fct##_##fld(const char *name _VFO_DECL) \
{ setting_t stg; value_t val; \
stg = parse_##fct(name); \
if (!rig_has_get_##fct(self->rig, stg)) { \
const struct confparams *cfp; \
cfp = rig_ext_lookup(self->rig, name); \
if (!cfp) { \
self->error_status = -RIG_EINVAL; /* no such parameter */ \
return val.fld; /* undefined */ \
} \
if (cfp->type == RIG_CONF_STRING) { \
self->error_status = -RIG_EINVAL; \
return val.fld; /* undefined */ \
} \
self->error_status = rig_get_ext_##fct(self->rig _VFO_ARG, cfp->token, &val); \
switch (cfp->type) { \
case RIG_CONF_NUMERIC: \
return (t1)val.f; \
case RIG_CONF_CHECKBUTTON: \
case RIG_CONF_COMBO: \
return (t1)val.i; \
default: \
self->error_status = -RIG_ECONF; \
return val.fld; /* undefined */ \
} \
} \
if (chk (stg)) { \
self->error_status = -RIG_EINVAL; /* invalid type */ \
return val.fld; /* undefined */ \
} \
self->error_status = rig_get_##fct(self->rig _VFO_ARG , stg, &val); \
return val.fld; \
}
#define METHODSTRGET(f) const char * get_##f (const char *name _VFO_DECL) \
{ static char s[MAX_STATIC]=""; value_t val; /* only ext_level/parm's can have string values */ \
const struct confparams *cfp; \
cfp = rig_ext_lookup(self->rig, name); \
if (!cfp) { \
self->error_status = -RIG_EINVAL; /* no such parameter */ \
return ""; \
} \
if (cfp->type != RIG_CONF_STRING) { \
self->error_status = -RIG_EINVAL; /* invalid type */ \
return ""; \
} \
val.s = s; \
self->error_status = rig_get_ext_##f(self->rig _VFO_ARG, cfp->token, &val); \
return val.s; \
}
/*
* Rig class alike
*/
%extend Rig {
Rig(rig_model_t rig_model) {
Rig *r;
@ -103,27 +230,57 @@ typedef struct Rig {
void close () {
self->error_status = rig_close(self->rig);
}
/* set methods */
METHOD1V(set_freq, freq_t)
METHOD2V(set_mode, rmode_t, pbwidth_t)
METHOD1(set_vfo, vfo_t)
METHOD1V(set_ptt, ptt_t)
METHOD1V(set_rptr_shift, rptr_shift_t)
METHOD1V(set_rptr_offs, shortfreq_t)
METHOD1V(set_ctcss_tone, tone_t)
METHOD1V(set_dcs_code, tone_t)
METHOD1V(set_ctcss_sql, tone_t)
METHOD1V(set_dcs_sql, tone_t)
METHOD1V(set_split_freq, freq_t)
METHOD2V(set_split_mode, rmode_t, pbwidth_t)
METHOD1V(set_split, split_t)
METHOD1V(set_rit, shortfreq_t)
METHOD1V(set_xit, shortfreq_t)
METHOD1V(set_ts, shortfreq_t)
METHOD1V(set_ant, ant_t)
METHOD2V(set_func, setting_t, int)
METHOD1V(set_bank, int)
METHOD1V(set_mem, int)
/*
* group all vfo, and non vfo apart
*/
#define _VFO_ARG ,vfo
#define _VFO_DECL ,vfo_t vfo = RIG_VFO_CURR
METHOD1(set_freq, freq_t)
METHOD2(set_mode, rmode_t, pbwidth_t)
METHOD1(set_ptt, ptt_t)
METHOD1(set_rptr_shift, rptr_shift_t)
METHOD1(set_rptr_offs, shortfreq_t)
METHOD1(set_ctcss_tone, tone_t)
METHOD1(set_dcs_code, tone_t)
METHOD1(set_ctcss_sql, tone_t)
METHOD1(set_dcs_sql, tone_t)
METHOD1(set_split_freq, freq_t)
METHOD2(set_split_mode, rmode_t, pbwidth_t)
METHOD1(set_split, split_t)
METHOD1(set_rit, shortfreq_t)
METHOD1(set_xit, shortfreq_t)
METHOD1(set_ts, shortfreq_t)
METHOD1(set_ant, ant_t)
METHOD2(set_func, setting_t, int)
METHOD1(set_bank, int)
METHOD1(set_mem, int)
METHOD1(send_dtmf, const_char_string)
METHOD1(send_morse, const_char_string)
METHOD1(vfo_op, vfo_op_t)
METHOD2(scan, scan_t, int)
METHODSIMPLESET(level, int, i, RIG_LEVEL_IS_FLOAT)
METHODSIMPLESET(level, float, f, !RIG_LEVEL_IS_FLOAT)
METHODSUPERSET(level, int, i, RIG_LEVEL_IS_FLOAT)
METHODSUPERSET(level, float, f, !RIG_LEVEL_IS_FLOAT)
METHODSTRSET(level)
METHOD2(set_ext_level, token_t, value_t)
METHODSIMPLEGET(level, int, i, RIG_LEVEL_IS_FLOAT)
METHODSIMPLEGET(level, float, f, !RIG_LEVEL_IS_FLOAT)
METHODSUPERGET(level, int, i, RIG_LEVEL_IS_FLOAT)
METHODSUPERGET(level, float, f, !RIG_LEVEL_IS_FLOAT)
METHODSTRGET(level)
/*
* these ones do not take a vfo arg
*/
#undef _VFO_ARG
#undef _VFO_DECL
#define _VFO_ARG
#define _VFO_DECL
METHOD1(set_vfo, vfo_t) /* particular case */
METHOD1(set_powerstat, powerstat_t)
METHOD1(set_channel, const_channel_t_p)
METHOD1(set_trn, int)
@ -131,10 +288,6 @@ typedef struct Rig {
METHOD1(has_set_parm, setting_t)
METHOD1(has_set_func, setting_t)
METHOD1(reset, reset_t)
METHOD1V(send_dtmf, const_char_string)
METHOD1V(send_morse, const_char_string)
METHOD1V(vfo_op, vfo_op_t)
METHOD2V(scan, scan_t, int)
METHOD1(has_scan, scan_t)
METHOD1(has_vfo_op, vfo_op_t)
METHOD1(passband_normal, rmode_t)
@ -144,33 +297,36 @@ typedef struct Rig {
METHOD1(ext_token_lookup, const_char_string) /* level & parm */
METHOD1(token_lookup, const_char_string) /* conf */
void set_conf_s(const char *name, const char *val) {
token_t tok = rig_token_lookup(self->rig, name);
/* FIXME: token not found */
self->error_status = rig_set_conf(self->rig, tok, val);
}
void set_ext_parm_s(const char *name, value_t val) {
token_t tok = rig_ext_token_lookup(self->rig, name);
/* FIXME: token not found */
self->error_status = rig_set_ext_parm(self->rig, tok, val);
}
void set_ext_level_s(const char *name, value_t val, vfo_t vfo = RIG_VFO_CURR) {
token_t tok = rig_ext_token_lookup(self->rig, name);
/* FIXME: token not found */
self->error_status = rig_set_ext_level(self->rig, vfo, tok, val);
}
METHOD2(set_conf, token_t, const_char_string)
METHOD2(set_ext_parm, token_t, value_t)
METHOD2V(set_ext_level, token_t, value_t)
METHODSIMPLESET(parm, int, i, RIG_PARM_IS_FLOAT)
METHODSIMPLESET(parm, float, f, !RIG_PARM_IS_FLOAT)
METHODSUPERSET(parm, int, i, RIG_PARM_IS_FLOAT)
METHODSUPERSET(parm, float, f, !RIG_PARM_IS_FLOAT)
METHODSTRSET(parm)
METHODSIMPLEGET(parm, int, i, RIG_PARM_IS_FLOAT)
METHODSIMPLEGET(parm, float, f, !RIG_PARM_IS_FLOAT)
METHODSUPERGET(parm, int, i, RIG_PARM_IS_FLOAT)
METHODSUPERGET(parm, float, f, !RIG_PARM_IS_FLOAT)
METHODSTRGET(parm)
/* TODO: get rid of value_t, use dynamic casting */
METHOD2V(set_level, setting_t, value_t)
METHOD2(set_parm, setting_t, value_t)
void set_conf(const char *name, const char *val) {
token_t tok = rig_token_lookup(self->rig, name);
if (tok == RIG_CONF_END)
self->error_status = -RIG_EINVAL;
else
self->error_status = rig_set_conf(self->rig, tok, val);
}
/* TODO: get_ext_parm_list, level, conf, .. */
/* TODO: all the get functions */
/* get functions */
METHOD1VGET(get_freq, freq_t)
extern void get_mode(rmode_t *OUTPUT, pbwidth_t *OUTPUT, vfo_t vfo = RIG_VFO_CURR);
@ -191,14 +347,54 @@ typedef struct Rig {
METHOD1VGET(get_ant, ant_t)
METHOD1VGET(get_mem, int)
METHOD1GET(get_powerstat, powerstat_t)
//METHOD2GET(get_parm, setting_t, value_t)
//METHOD1GET(get_channel, channel_t) /* special input/output */
METHOD1GET(get_trn, int)
// METHOD1V(recv_dtmf, char_string, int *length)
//METHOD2GET(get_conf, token_t, const_char_string)
//METHOD2GET(get_ext_parm, token_t, value_t)
//METHOD2VGET(get_ext_level, token_t, value_t)
//METHOD1GET(get_info, const_char_string)
/* get_channel() returns current VFO data
* get_channel(10) returns content of memory #10
* get_channel(0, RIG_VFO_A) returns VFO A data
*/
const channel_t *get_channel(int channel_num = INT_MAX, vfo_t vfo = RIG_VFO_MEM) {
static channel_t chan;
chan.channel_num = channel_num;
chan.vfo = channel_num != INT_MAX ? vfo : RIG_VFO_CURR;
self->error_status = rig_get_channel(self->rig, &chan);
/* TODO: copy ext_level's */
return &chan;
}
const char *get_conf(token_t tok) {
static char s[MAX_STATIC] = "";
self->error_status = rig_get_conf(self->rig, tok, s);
return s;
}
const char *get_conf(const char *name) {
token_t tok = rig_token_lookup(self->rig, name);
static char s[MAX_STATIC] = "";
if (tok == RIG_CONF_END)
self->error_status = -RIG_EINVAL;
else
self->error_status = rig_get_conf(self->rig, tok, s);
return s;
}
const char *recv_dtmf(vfo_t vfo = RIG_VFO_CURR) {
static char s[64];
int len = sizeof(s)-1;
self->error_status = rig_recv_dtmf(self->rig, vfo, s, &len);
s[len] = '\0';
return s;
}
const char * get_info(void) {
const char *s;
s = rig_get_info(self->rig);
self->error_status = s ? RIG_OK : -RIG_EINVAL;
return s;
}
int get_func(setting_t func, vfo_t vfo = RIG_VFO_CURR) {
int status;
@ -206,14 +402,15 @@ typedef struct Rig {
return status;
}
#ifndef SWIGJAVA
void get_level(setting_t level, vfo_t vfo = RIG_VFO_CURR)
{ value_t val; self->error_status = rig_get_level(self->rig, vfo, level, &val);
//if (RIG_LEVEL_IS_FLOAT(level))
/* TODO: dynamic casting */
}
#else
/* TODO */
/* TODO also: get_parm */
#endif
};
@ -234,3 +431,4 @@ void Rig_get_split_mode(Rig *self, rmode_t *mode, pbwidth_t *width, vfo_t vfo)
}
%}

Wyświetl plik

@ -2,7 +2,7 @@
* Hamlib bindings - Rotator interface
* Copyright (c) 2001,2002 by Stephane Fillod
*
* $Id: rotator.swg,v 1.2 2002-09-16 06:50:13 fillods Exp $
* $Id: rotator.swg,v 1.3 2002-10-07 21:44:51 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
@ -80,6 +80,7 @@ typedef struct Rot {
ROTMETHOD0(close)
ROTMETHOD2(set_position, azimuth_t, elevation_t)
extern void get_position(azimuth_t *OUTPUT, elevation_t *OUTPUT);
ROTMETHOD0(stop)
ROTMETHOD0(park)
ROTMETHOD1(reset, rot_reset_t)
@ -87,16 +88,51 @@ typedef struct Rot {
ROTMETHOD1(token_lookup, const_char_string) /* conf */
void set_conf_s(const char *name, const char *val) {
void set_conf(const char *name, const char *val) {
token_t tok = rot_token_lookup(self->rot, name);
/* FIXME: token not found */
self->error_status = rot_set_conf(self->rot, tok, val);
if (tok == RIG_CONF_END)
self->error_status = -RIG_EINVAL;
else
self->error_status = rot_set_conf(self->rot, tok, val);
}
ROTMETHOD2(set_conf, token_t, const_char_string)
/* TODO: get_ext_parm_list, level, conf, .. */
const char *get_conf(token_t tok) {
static char s[128] = "";
self->error_status = rot_get_conf(self->rot, tok, s);
return s;
}
/* TODO: all the get functions */
const char *get_conf(const char *name) {
token_t tok = rot_token_lookup(self->rot, name);
static char s[128] = "";
if (tok == RIG_CONF_END)
self->error_status = -RIG_EINVAL;
else
self->error_status = rot_get_conf(self->rot, tok, s);
return s;
}
const char * get_info(void) {
const char *s;
s = rot_get_info(self->rot);
self->error_status = s ? RIG_OK : -RIG_EINVAL;
return s;
}
/* TODO: get_conf_list, .. */
};
%{
/*
* this one returns 2 values, here is a perl example:
* ($az, $elevation) = $rig->get_position();
*/
void Rot_get_position(Rot *self, azimuth_t *azimuth, elevation_t *elevation)
{
self->error_status = rot_get_position(self->rot, azimuth, elevation);
}
%}

Wyświetl plik

@ -6,16 +6,42 @@ load ".libs/hamlibtcl.so" Hamlib
puts $hamlib_version\n
rig_set_debug $RIG_DEBUG_TRACE
# Init RIG_MODEL_DUMMY
Rig my_rig $RIG_MODEL_DUMMY
my_rig open
my_rig set_freq 145550000
# note: get_level may not be implemented yet!
puts [my_rig get_level $RIG_LEVEL_STRENGTH]
puts status:[my_rig cget -error_status]
set mode [my_rig get_mode]
puts "mode:[lindex $mode 0], bandwidth:[lindex $mode 1]Hz (0=normal)"
set state [my_rig cget -state]
puts ITU_region:[$state cget -itu_region]
# The following works well also
# puts ITU_region:[[my_rig cget -state] cget -itu_region]
puts getinfo:[my_rig get_info]
my_rig set_level "VOX" 1
puts status:[my_rig cget -error_status]
puts level:[my_rig get_level_i "VOX"]
puts status:[my_rig cget -error_status]
my_rig set_level $RIG_LEVEL_VOX 5
puts status:[my_rig cget -error_status]
puts level:[my_rig get_level_i $RIG_LEVEL_VOX]
puts status:[my_rig cget -error_status]
puts str:[my_rig get_level_i $RIG_LEVEL_STRENGTH]
puts status:[my_rig cget -error_status]
puts status(str):[rigerror [my_rig cget -error_status]]
my_rig close
my_rig cleanup
#my_rig cleanup
exit 0