[chirp_devel] Add new radio Icom IC-E90/T90/T90A
Jaroslav Skarvada
Mon Oct 7 07:07:12 PDT 2019
----- Original Message -----
> Sorry I meant to reply to this earlier.
>
> > Regarding the clone status check, I spent some time on digging into the USB
> > sniffs
> > and it seems there is a bug in the Chirp code. After adding:
> >
> > --- a/chirp/drivers/icf.py
> > +++ b/chirp/drivers/icf.py
> > @@ -183,6 +183,7 @@ def send_clone_frame(radio, cmd, data, raw=False,
> > checksum=False):
> > pass
> >
> > radio.pipe.write(frame)
> > + get_clone_resp(radio.pipe)
> >
> > return frame
> >
> > I.e. after calling already defined, but never used function, it started to
> > work
> > even with the clone status check enabled. In the original Icom SW sniffs
> > the clone status check response is clearly visible. It seems the icf driver
> > doesn't
> > read the radio responses during the clone process and when it tries to read
> > the last
> > response code, there is already buffer full of previous data which it
> > cannot
> > correctly process.
> >
> > But there is a problem with this patch, it breaks the tests so it waits
> > forever on
> > the pipe:
> >
> > $ ./run_tests.py -d 'Icom_IC-E90'
> > Icom IC-E90 Detect PASSED: All tests
> > Icom IC-E90 Settings PASSED: All tests
> > ^CTraceback (most recent call last):
> > File "./run_tests.py", line 1300, in <module>
> > failed = tr.run_one(options.driver)
> > File "./run_tests.py", line 1232, in run_one
> > "%s.img" % drv_name))
> > File "./run_tests.py", line 1210, in run_rclass_image
> > failed += self.run_rclass_image(dev.__class__, image, dst=dev)
> > File "./run_tests.py", line 1213, in run_rclass_image
> > return self._run_one(rclass, image, dst=dst)
> > File "./run_tests.py", line 1167, in _run_one
> > failures = tc.run()
> > File "./run_tests.py", line 984, in run
> > self._run(self.SerialNone())
> > File "./run_tests.py", line 947, in _run
> > radio.sync_in()
> > File "../chirp/drivers/icx90.py", line 598, in sync_in
> > icf.IcomCloneModeRadio.sync_in(self)
> > File "../chirp/drivers/icf.py", line 627, in sync_in
> > self._mmap = clone_from_radio(self)
> > File "../chirp/drivers/icf.py", line 289, in clone_from_radio
> > return _clone_from_radio(radio)
> > File "../chirp/drivers/icf.py", line 237, in _clone_from_radio
> > md = get_model_data(radio)
> > File "../chirp/drivers/icf.py", line 140, in get_model_data
> > send_clone_frame(radio, 0xe0, mdata, raw=True)
> > File "../chirp/drivers/icf.py", line 186, in send_clone_frame
> > get_clone_resp(radio.pipe)
> > File "../chirp/drivers/icf.py", line 162, in get_clone_resp
> > while not exit_criteria(resp, length):
> > File "../chirp/drivers/icf.py", line 157, in exit_criteria
> > return buf.endswith("\xfd")
> > KeyboardInterrupt
> >
> > So this needs to be addressed somehow
>
> Yeah, so I'm surprised we're not doing this already and it definitely seems
> like the right thing to do is make the change you've proposed above. The
> reason it fails is one of the clone edge condition tests provides an endless
> stream of garbage, as if you selected the wrong serial port to do a download
> from, in an attempt to make sure the driver is robust enough to notice and
> fail. Since get_clone_resp() is pretty dumb, it ... fails.
>
So what do you propose here? Could we add e.g. some counter which will abort
get_clone_resp() after some number of characters are received (e.g. twice
the clone frame)?
> On the one hand I'd really like to get that change in there, but it's also
> been (from looking at the history) not checking the response to each frame
> for the entire lifetime of that code (so ~10 years). I would hate to
> introduce it now and cause some instability for Icom users, which have
> always enjoyed pretty stable support. I'm not sure what to do here.
>
> However, to get you out of jail here, maybe we could do something to just
> affect your model and then potentially enable it per-driver on other models
> as we're able to test them. Some some radio.MUNCH_CLONE_RESP=True flag that
> we check in the icf code to know whether or not to do that? What do you
> think?
>
OK, NP with that. I can rewrite the code.
Jaroslav
More information about the chirp_devel
mailing list