[chirp_devel] IC-7000 Split Duplex and the User Experience
I'm adding support for split duplex on the Icom IC-7000 (a live mode radio) but I'm unhappy with the user experience. Now I'm trolling for suggestions.
As I understand things, Memory.freq holds the receive frequency, Memory.offset holds the difference between the transmit and receive frequency, and Memory.duplex tells us to add, subtract, or ignore the offset to get our transmit frequency. Except when Memory.duplex equals "split", then Memory.offset holds the transmit frequency.
Now my dilemma. The IC-7000 does not support per memory offset values but I set RadioFeature.has_offset True to get the memory editor to show the Offset column.
The user can set duplex to split and enter the transmit frequency in the offset column, which sets the radio's memory channel correctly. So far, so good.
What I don't like is that the user can edit the offset with the duplex set to "", "+", or "-". IcomCIVRadio.set_memory silently drops the offset but the user's change is displayed until the next refresh.
Any corrections to my basic assumptions or suggestion on how leave the user less confused?
-- wireless Joseph.P.Scanlan@n7xsd.us +1-702-896-0507 -- work Joseph.P.Scanlan@ClarkCountyNV.gov +1-702-455-3679
On Tue, Dec 29, 2015 at 8:44 AM, Joseph scanlan via chirp_devel chirp_devel@intrepid.danplanet.com wrote:
What I don't like is that the user can edit the offset with the duplex set to "", "+", or "-". IcomCIVRadio.set_memory silently drops the offset but the user's change is displayed until the next refresh.
Any corrections to my basic assumptions or suggestion on how leave the user less confused?
You need to handle these cases in your driver.
You can set rf.valid_duplexes = ["", "split"] so that only no offset and split are offered.
Alternatively, you could handle + and - such that is does the math and sets the appropriate transmit frequency in the radio. Many radios do this. Here's an example in the UV5R driver: http://chirp.danplanet.com/projects/chirp/repository/entry/chirp/drivers/uv5...
Tom KD7LXL
On Dec 29, 2015, at 1:02 PM, Tom Hayward tom@tomh.us wrote:
On Tue, Dec 29, 2015 at 8:44 AM, Joseph scanlan via chirp_devel chirp_devel@intrepid.danplanet.com wrote:
What I don't like is that the user can edit the offset with the duplex set to "", "+", or "-". IcomCIVRadio.set_memory silently drops the offset but the user's change is displayed until the next refresh.
Any corrections to my basic assumptions or suggestion on how leave the user less confused?
You need to handle these cases in your driver.
You can set rf.valid_duplexes = ["", "split"] so that only no offset and split are offered.
Alternatively, you could handle + and - such that is does the math and sets the appropriate transmit frequency in the radio. Many radios do this. Here's an example in the UV5R driver: http://chirp.danplanet.com/projects/chirp/repository/entry/chirp/drivers/uv5...
Tom KD7LXL
Changing the duplex is fine. It's the offset that the user is able to edit but not actually change. The IC-7000 stores offsets per band, not per memory.
On Tue, Dec 29, 2015 at 1:08 PM, Joseph scanlan via chirp_devel chirp_devel@intrepid.danplanet.com wrote:
The IC-7000 stores offsets per band, not per memory.
If this is the case, you ought to disable duplex in the channel editor altogether. You can add a feature in the Settings pane to set the band offset.
The user can set duplex to split and enter the transmit frequency in the offset column, which sets the radio's memory channel correctly. So far, so good.
What did you mean by this in your first message? Does it set the radio's memory channel or a band setting?
Tom KD7LXL
On Dec 29, 2015, at 2:43 PM, Tom Hayward tom@tomh.us wrote:
On Tue, Dec 29, 2015 at 1:08 PM, Joseph scanlan via chirp_devel chirp_devel@intrepid.danplanet.com wrote:
The IC-7000 stores offsets per band, not per memory.
If this is the case, you ought to disable duplex in the channel editor altogether. You can add a feature in the Settings pane to set the band offset.
Duplex is set for each memory chanel in the radio. It is (and should) be editable. I would love to disable the Offset column but then where does the user enter transmit frequency in the memory editor (for split operation).
I'm pretty new to using chirp. The IC-2820 just worked but the IC-7000 was short on features so I decided to dive in and write some code. :-)
The user can set duplex to split and enter the transmit frequency in the offset column, which sets the radio's memory channel correctly. So far, so good.
What did you mean by this in your first message? Does it set the radio's memory channel or a band setting?
Duplex is set for each channel. Valid values are "" (simplex), "+", "-", and "split". There is a place in each memory channel (and the CI-V frame) for a separate transmit frequency.
Even though there are band buttons on the front of the radio, the CI-V memory frame simply accepts the frequency. I assume the radio "does the math" when it needs to know what band it's in (to enable/disable features and such).
On Tue, Dec 29, 2015 at 3:15 PM, Joseph scanlan via chirp_devel chirp_devel@intrepid.danplanet.com wrote:
Duplex is set for each channel. Valid values are "" (simplex), "+", "-", and "split". There is a place in each memory channel (and the CI-V frame) for a separate transmit frequency.
I think I understand now. When the user has chosen + or -, it will use the band's standard offset. When the user chooses "split", it uses the specified transmit frequency. And the problem you have is that sometimes users change the offset for + or - without realizing it affects the whole band.
How about something like this:
def set_memory(self, mem): ... if mem.duplex in ('+', '-'): if mem.offset == get_band_offset(mem.freq): memobj.duplex = self._rf.valid_duplexes.index(mem.duplex) else: memobj.duplex = self._rf.valid_duplexes.index("split") if mem.duplex == '+': memobj.txfreq = mem.freq + mem.offset else: memobj.txfreq = mem.freq - mem.offset elif mem.duplex == "split": memobj.txfreq = mem.offset else: memobj.duplex = self._rf.valid_duplexes.index("")
[This could be refactored a bit, but hopefully this is simple enough to understand.]
You will need to figure out how to write get_band_offset() if you want to use that logic. Otherwise you can just set any offset as split.
Tom KD7LXL
On Dec 29, 2015, at 3:40 PM, Tom Hayward tom@tomh.us wrote:
On Tue, Dec 29, 2015 at 3:15 PM, Joseph scanlan via chirp_devel chirp_devel@intrepid.danplanet.com wrote:
Duplex is set for each channel. Valid values are "" (simplex), "+", "-", and "split". There is a place in each memory channel (and the CI-V frame) for a separate transmit frequency.
I think I understand now. When the user has chosen + or -, it will use the band's standard offset. When the user chooses "split", it uses the specified transmit frequency. And the problem you have is that sometimes users change the offset for + or - without realizing it affects the whole band.
Not quite. The user changes the offset on a channel and has no effect at all on the radio. The memory editor shows the user's entry until it refreshes the channel from the radio.
There's nothing wrong with this. It just seams rude to let the user believe he's making a change that makes no sense to the radio.
I have considered adding a Settings editor to the IC-7000 to support band offset changes but that will not be part of this patch.
On Tue, Dec 29, 2015 at 3:52 PM, Joseph scanlan via chirp_devel chirp_devel@intrepid.danplanet.com wrote:
On Dec 29, 2015, at 3:40 PM, Tom Hayward tom@tomh.us wrote:
I think I understand now. When the user has chosen + or -, it will use the band's standard offset. When the user chooses "split", it uses the specified transmit frequency. And the problem you have is that sometimes users change the offset for + or - without realizing it affects the whole band.
Not quite. The user changes the offset on a channel and has no effect at all on the radio.
If you use the code I gave you, it will have an effect!
Tom KD7LXL
participants (2)
-
Joseph scanlan
-
Tom Hayward