Re: [Hamlib-developer] API completion
Library to control radio transceivers and receivers
Brought to you by:
n0nb
|
From: Frank S. <vk...@ix...> - 2000-10-11 04:38:53
|
Hi,
See my comments (***) below.
/Frank..
Stephane Fillod wrote:
>
> Here is a (long) list of pending issues I try to work out, if we want to see
> the Hamlib API complete one day.
> Let me know if you agree or disagree on the ideas, on the implementation,
> etc. Part of it is already coded. However it's not written in stone though.
> If you think the API names are not well chosen, you might be right!
> Give a better name in that case, english is not my mother tongue!
>
> Duplex and split operation:
> ---------------------------
>
> Until now, we have *duplex* support with the following enum:
>
> enum rptr_shift_e {
> RIG_RPT_SHIFT_NONE = 0,
> RIG_RPT_SHIFT_MINUS,
> RIG_RPT_SHIFT_PLUS
> }
>
> Adding the following two capabilities, we can set the duplex offset,
> thus the duplex support is complete.
>
> int (*set_rpt_offs)(RIG *rig, freq_t offs); /* set duplex offset freq */
> int (*get_rpt_offs)(RIG *rig, freq_t *offs); /* get duplex offset freq */
>
> Do you see anything else needed?
>
***
Reverse to listen for example repeater input frequencies.
Is this just a toggle of the current (ie: remember state) RIG_RPT_SHIFT
?
If so, then is this backend "instance data"
> Well, now let's talk about *split* support.
> On most radios (all ?), the split mode is implemented using 2 VFOs.
> ie. VFO A holds the receive frequency while VFO B holds the transmit freq.
>
> enum split_e {
> RIG_SPLIT_OFF = 0,
> RIG_SPLIT_ON
> };
> int (*set_split_freq)(RIG *rig, freq_t rx_freq, freq_t tx_freq);
> int (*get_split_freq)(RIG *rig, freq_t *rx_freq, freq_t *tx_freq);
> int (*set_split)(RIG *rig, split_t split);
> int (*get_split)(RIG *rig, split_t *split);
>
> set_split_freq would set VFO A and VFO B accordingly, or whatever else
> the rig is using. Breaking set_split_freq down in set_split_rxfreq and
> set_split_txfreq would have been better, but hey, being smart
> has a cost!
> Concerning set_split(), we could have reuse set_rpt_shift(), but the
> name could be misleading.
>
> What do you think of this proposal? Can I check it in?
>
> Clarification on enum vfo_e
> ---------------------------
> So my proposal would be:
>
> { RIG_VFO_MAIN = 0,
> RIG_VFO_SUB,
> RIG_VFO_SAT,
> RIG_VFO_A = RIG_VFO_MAIN,
> RIG_VFO_B = RIG_VFO_SUB,
> RIG_VFO_C = RIG_VFO_SAT
> }
>
> Is it OK with you?
***
Really we are simply aliasing "n" VFO's to something tangibile
for humans to understand. This is OK with me.
>
> rmode_t
> -------
> Luc is right, we have to rework this type. WE should remove all the wide
> and narrow combinations, in order to keep it simple.
> Then, we can add some rig_set_filter() that would support, not only
> "builtin" narrow and wide filter, but also added filters (ie. can have
> more that one narrow filter installed).
>
***
Yes, a rationalising of modes is good.
ie: mode and bandwidth are different settings on our virtual radio model
(aka API)
also, bandwidth applies to RF frontend, IF, AF and offrig DSP bandwidth.
eg: IF filtering, AF filtering, Off rig filtering + squelch (DSP on
computer)
ie: location(s) and response(s)
location:
---------
enum filter_path_e {
RIG_BW_RF = 0,
RIG_BW_IF,
RIG_BW_AF,
RIG_BW_RF_EXTERNAL,
RIG_BW_IF_EXTERNAL,
RIG_BW_AF_EXTERNAL,
}
typedef filter_path_e filter_path_t
response
---------
Also, bandwidth may be too restrictive
should not we model it as
types like bandpass, band reject high pass, low pass, etc
enum filter_resp {
RIG_FILTER_BPASS,
RIG_FILTER_BREJECT,
RIG_FILTER_HPF,
RIG_FILTER_LPF,
..etc
}
or
enum filter_width {
RIG_FILTER_NARROW,
RIG_FILTER_NORMAL,
RIG_FILTER_WIDE
..etc
}
typedef filter_width_e filter_width_t
These above generally equate to buttons on the rig.
However we may need a general filter decription for that done
at IF and AF etc.. especially when DSP is involved.
I am not (yet) saying 15 pole chebyshev with such and such
charactersitics. It would be nice to pass a bode plot
to the rig (one day !!). But we do need to set cutoff frequencies
etc. eg: 3db cutoff for BPF, HPF,LPF, etc.. if the rig can handle
it.
An API suggestion would be
rig_set_filter(RIG *rig, filter_path_t fp, freq_resp_t fres)
Note also thet BPF can be modelled as HPF/LPF combo
or as BPF with center freq and BW etc..
PSk users prefers centre freq and BW, whereas removing lowend crud
is a LPF for example.
hmmm... geeting late so I move on :-)
> Misc functions
> --------------
> int (*set_ant)(RIG *rig, int ant); /* set antenna number */
> int (*get_ant)(RIG *rig, int *ant); /* get antenna */
>
> int (*set_att)(RIG *rig, int att); /* set attenuator, in db */
> int (*get_att)(RIG *rig, int *att); /* set attenuator, in db */
>
> and preamp as well? any proposal?
> We'll need to support filters too. Can you see a generic approach on this?
>
> Memory:
> ------
>
> int rig_set_mem(RIG *rig, int ch);
> int rig_get_mem(RIG *rig, int *ch);
> int rig_mem_clear(RIG *rig);
> int rig_mem_to_vfo(RIG *rig);
> int rig_vfo_to_mem(RIG *rig); /* memory write */
>
> We need also VFO A=B, Switch VFO A and B, set to VFO mode, set to MEM mode
>
> int rig_vfo_copy(RIG *rig);
> int rig_vfo_xchg(RIG *rig);
> int rig_vfo_mode(RIG *rig);
> int rig_mem_mode(RIG *rig);
>
> OR
>
> int rig_vfo_mem(RIG *rig, vfo_mem_t op);
>
> where op can have the following values:
> * RIG_VM_VFOAB
> * RIG_VM_VFO_XCHG
> * RIG_VM_VFO_MODE
> * RIG_VM_MEM_MODE
> etc.
> we could even have:
> * RIG_VM_MCL
> * RIG_VM_MEM2VFO
> * RIG_VM_VFO2MEM
>
> This would cut down the number of functions in the API.
> What do you think ? What about the names?
>
> about freq range:
> ----------------
> Just something to keep in mind. Some rigs, with the same model number,
> are manufactured for ITU region 1 and ITU region 2.
> So what's the matter? Well the frequency ranges vary from one region
> to another one. This will be a great handicap for the capabilities.
> Keep thinking of it, how we could solve this problem...
> and let me know!
>
> Scan functions:
> --------------
> rig_scan(my_rig, RIG_SCAN_START);
> rig_scan(my_rig, RIG_SCAN_STOP);
>
> Is that enough? Do we need more control?
I see a couple of things here.
1. Rig onboard scanning capability
2. Backend soft scanning, and asynchronous handling
of "stop scanning" requests etc..
3. Frontend soft scanning requests.
>
> About sql:
> ---------
> We need 3 functions:
>
> set squelch level: 0.0 .. 1.0
> get squelch level-> 0.0 .. 1.0
> read squelch status: open/closed
Offrig squelch , tone detection (DSP on PC) ??
>
> misc:
> ----
> A function to get firmware string, ITU region, trx ID, etc.
> someting that can be displayed in an 'About ...' GUI popup window.
>
> level settings:
> ---------------
>
> For all the ON/OFF settings, what do you think of using the rig_set_func()
> call that would take care of it? And what about the rest? One set/get
> function per paramter or something more generic like this:
>
> rig_set_setting(RIG *rig, setting_t setting, int value);
> rig_get_setting(RIG *rig, setting_t setting, int *value);
>
***
This is prefereable, otherwise my 300 button rig is going to create
a lots of API functions.
> Needless to say, that could be a mess if the setting is not an integer
> but a float or a string, etc.
> I'm waiting for your thoughts on this.
***
It seems to me that the API models a virtual Radio with particular
capability ranges
for each setting.
I think we should standardise up front the acceptable range settings for
the virtual radio and let the backend take care of necessary scaling.
I expect that most level settings can be implemented via "int" quite
acceptably.
>
> Let's complete the API (or at least close to it) so we can release it,
> after we've documented it....
>
> Thanks for reading :-)
> --
> Stephane F4CFE
> _______________________________________________
> Hamlib-developer mailing list
> Ham...@li...
> http://lists.sourceforge.net/mailman/listinfo/hamlib-developer
Cheers / Frank..
--
Frank Singleton VK3FCS
Email: victor kilo three foxtrot charlie sierra at ix dot netcom dot com
|