[chirp_devel] [UV-5R] Looking for Advice
Hi all,
I want to create a selection for the UV-5R that depending the the users' selection (either tick like Boolean, or a two choice list), one or the other of the following is written.
"\x0E\x0F\x10\x11\x15" "\x00\x00\x00\x00\x00"
Any ideas?
Jim KC9HI
I want to create a selection for the UV-5R that depending the the users' selection (either tick like Boolean, or a two choice list), one or the other of the following is written.
"\x0E\x0F\x10\x11\x15" "\x00\x00\x00\x00\x00"
You mean a RadioSetting? Maybe something like this untested snipped:
def apply_foobar(setting, obj): if setting.value == True: obj.foobar = "\x0E\x0F\x10\x11\x15" else: obj.foobar = "\x00\x00\x00\x00\x00"
rs = RadioSetting("foobar", "Enable Foobar", RadioSettingBoolean(False)) rs.set_apply_callback(apply_foobar, self._memobj)
Note that it will always default to False unless you change how the RadioSettingBoolean is initialized. The callback "apply_foobar" gets called when the setting is to be applied to the radio, so that's where your logic goes to check the value that the user has chosen and apply it to the memory object.
On Sat, Feb 23, 2013 at 7:03 PM, Dan Smith dsmith@danplanet.com wrote:
I want to create a selection for the UV-5R that depending the the users' selection (either tick like Boolean, or a two choice list), one or the other of the following is written.
"\x0E\x0F\x10\x11\x15" "\x00\x00\x00\x00\x00"
You mean a RadioSetting? Maybe something like this untested snipped:
def apply_foobar(setting, obj): if setting.value == True: obj.foobar = "\x0E\x0F\x10\x11\x15" else: obj.foobar = "\x00\x00\x00\x00\x00"
rs = RadioSetting("foobar", "Enable Foobar", RadioSettingBoolean(False)) rs.set_apply_callback(apply_foobar, self._memobj)
Thanks Dan. That is what I am looking for. I don't have it working yet,
though.
Here is my structure...
#seekto 0x0F08; struct { u8 foobar[5]; } test;
Here is my RadioSetting() code...
def apply_txinhibit(setting, obj): if setting.value == True: obj.foobar = "\x00\x00\x00\x00\x00" else: obj.foobar = "\x0E\x0F\x10\x11\x15"
rs = RadioSetting("test.foobar", "TX Inhibit", RadioSettingValueBoolean(False)) rs.set_apply_callback(apply_txinhibit, self._memobj.test) other.append(rs)
Here is my error...
Setting enable = True Using apply callback test.foobar Exception running RadioJob: invalid literal for int() with base 10: '\x0e' -- Exception: -- Traceback (most recent call last): File "C:\Users\Root\chirp.hg\chirpui\common.py", line 97, in _execute result = func(*self.args, **self.kwargs) File "C:\Users\Root\chirp.hg\chirp\uv5r.py", line 1160, in set_settings self.set_settings(element) File "C:\Users\Root\chirp.hg\chirp\uv5r.py", line 1181, in set_settings element.run_apply_callback() File "C:\Users\Root\chirp.hg\chirp\settings.py", line 288, in run_apply_callba ck return self._apply_callback() File "C:\Users\Root\chirp.hg\chirp\settings.py", line 282, in <lambda> self._apply_callback = lambda: callback(self, *args) File "C:\Users\Root\chirp.hg\chirp\uv5r.py", line 916, in apply_txinhibit obj.foobar = "\x0E\x0F\x10\x11\x15" File "C:\Users\Root\chirp.hg\chirp\bitwise.py", line 591, in __setattr__ self.__dict__["_generators"][name].set_value(value) File "C:\Users\Root\chirp.hg\chirp\bitwise.py", line 238, in set_value self.__items[i].set_value(value[i]) File "C:\Users\Root\chirp.hg\chirp\bitwise.py", line 381, in set_value self._data[self._offset] = (int(value) & 0xFF) ValueError: invalid literal for int() with base 10: '\x0e' ------ Job Args: (<chirp.settings.RadioSettingGroup object at 0x03B1A490>,) Job KWArgs: {} Job Called from: File "chirpw", line 144, in <module> gtk.main() File "C:\Users\Root\chirp.hg\chirpui\settingsedit.py", line 119, in _save_sett ing self._do_save_setting(widget, value) File "C:\Users\Root\chirp.hg\chirpui\settingsedit.py", line 115, in _do_save_s etting self._save_settings() File "C:\Users\Root\chirp.hg\chirpui\settingsedit.py", line 71, in _save_setti ngs self._top_setting_group)
I think I will sleep on it and study it some more in the morning.
Jim
#seekto 0x0F08; struct { u8 foobar[5];
This is an array of integers
if setting.value == True: obj.foobar = "\x00\x00\x00\x00\x00" else: obj.foobar = "\x0E\x0F\x10\x11\x15"
This is a string (array) of characters.
ValueError: invalid literal for int() with base 10: '\x0e'
This is complaining that the characters in the string aren't valid "int() with base 10" items. Either pass it the values as integers:
[0x0E, 0x0F, ...]
or change the type of foobar to:
char foobar[5]
and that should do it.
participants (2)
-
Dan Smith
-
Jim Unroe