Re: [chirp_devel] #112: Memory bank support for VX-8
Is the first step documenting how the VX-8 banks are stored in the memory image? Has anyone started on this with the VX-8 or similar Yaesu?
Is there bank support in chirp for any other radio?
On 5/13/2011 5:25 AM, CHIRP Tracker wrote:
#112: Memory bank support for VX-8 ------------------------------+--------------------------------------------- Reporter: jesper@… | Type: Feature Status: new | Priority: Functionality Milestone: | Component: Bank Editor Version: 0.1.11 | Keywords: Platform: Linux | ------------------------------+--------------------------------------------- Chirp currently doesn't seem to support memory bank editing in Yaesu VX-8, though the VX-8 does actually have memory banks. Would it be possible to add support for it in chirp?
Is the first step documenting how the VX-8 banks are stored in the memory image? Has anyone started on this with the VX-8 or similar Yaesu?
Yeah, that would be helpful. Next, a plan to change the existing bank model to one that works for the yaesus (i.e. one-to-many).
Is there bank support in chirp for any other radio?
Yep, most of the Icom drivers support it.
On 05/13/2011 05:21 PM, Robert Terzi wrote:
Is the first step documenting how the VX-8 banks are stored in the memory image? Has anyone started on this with the VX-8 or similar Yaesu?
Not for the -8, but I've done it for the -6. In bitwise syntax, it is
#seekto 0x018A; u16 bank_sizes[24];
#seekto 0x097A; struct { u8 name[6]; } bank_names[24];
#seekto 0x0C0A; struct { u16 channel[100]; } bank_members[24];
bank sizes: (N-1)*2, where N is no. of channels in bank. bank names: 6 bytes per bank. Same charset as channel names. bank members: 2 bytes per member. Channel number, zero based. Unused slots have ff ff.
Jon LA4RT
Is there bank support in chirp for any other radio?
On 5/13/2011 5:25 AM, CHIRP Tracker wrote:
#112: Memory bank support for VX-8 ------------------------------+--------------------------------------------- Reporter: jesper@… | Type: Feature Status: new | Priority: Functionality Milestone: | Component: Bank Editor Version: 0.1.11 | Keywords: Platform: Linux | ------------------------------+--------------------------------------------- Chirp currently doesn't seem to support memory bank editing in Yaesu VX-8, though the VX-8 does actually have memory banks. Would it be possible to add support for it in chirp?
chirp_devel mailing list chirp_devel@intrepid.danplanet.com http://intrepid.danplanet.com/mailman/listinfo/chirp_devel
On 05/13/2011 05:21 PM, Robert Terzi wrote:
Is the first step documenting how the VX-8 banks are stored in the memory image? Has anyone started on this with the VX-8 or similar Yaesu?
Is there bank support in chirp for any other radio?
Have you got a VX-8? If so, could you do the following? - Download your current image from the radio. - Write down which channels - if any - belong to which banks - Add a channel to each of the first two banks, and write down what you changed. - Download a new image with the changes - Send me both images.
(If anybody has a VX-3, It would be great if they could do the same.)
Jon LA4RT
On 5/13/2011 5:25 AM, CHIRP Tracker wrote:
#112: Memory bank support for VX-8 ------------------------------+--------------------------------------------- Reporter: jesper@… | Type: Feature Status: new | Priority: Functionality Milestone: | Component: Bank Editor Version: 0.1.11 | Keywords: Platform: Linux | ------------------------------+--------------------------------------------- Chirp currently doesn't seem to support memory bank editing in Yaesu VX-8, though the VX-8 does actually have memory banks. Would it be possible to add support for it in chirp?
chirp_devel mailing list chirp_devel@intrepid.danplanet.com http://intrepid.danplanet.com/mailman/listinfo/chirp_devel
On 05/13/2011 05:21 PM, Robert Terzi wrote:
Is the first step documenting how the VX-8 banks are stored in the memory image? Has anyone started on this with the VX-8 or similar Yaesu?
Is there bank support in chirp for any other radio?
Starting at 0x135A, there are 24 records with memory bank names. Each record is 18 bytes long. In tests/images/vx8.img, they are as follows:
2 bytes 0x0 6 bytes "BANK 1" - "BANK24" in the label charset 10 bytes 0xff
The manual shows a bank named '2 m amateur band' - 15 letters. So the 10 bytes are probably used for longer names. Could the 0x0 bytes be used to store name length, if it is "extra" length? I don't own a VX-8, so I can't try.
Ahead of the bank names, there are 72 records with 2 bytes 0x0 and 16 bytes 0xff. May be they are names of something else.
Jon LA4RT
On 5/13/2011 5:25 AM, CHIRP Tracker wrote:
#112: Memory bank support for VX-8 ------------------------------+--------------------------------------------- Reporter: jesper@… | Type: Feature Status: new | Priority: Functionality Milestone: | Component: Bank Editor Version: 0.1.11 | Keywords: Platform: Linux | ------------------------------+--------------------------------------------- Chirp currently doesn't seem to support memory bank editing in Yaesu VX-8, though the VX-8 does actually have memory banks. Would it be possible to add support for it in chirp?
chirp_devel mailing list chirp_devel@intrepid.danplanet.com http://intrepid.danplanet.com/mailman/listinfo/chirp_devel
The manual shows a bank named '2 m amateur band' - 15 letters. So the 10 bytes are probably used for longer names. Could the 0x0 bytes be used to store name length, if it is "extra" length? I don't own a VX-8, so I can't try.
Yep, looks like it. Attached is an image with Bank1's name set to "BANK 1AAAAAAAAAA".
On 05/17/2011 01:04 AM, Dan Smith wrote:
The manual shows a bank named '2 m amateur band' - 15 letters. So the 10 bytes are probably used for longer names. Could the 0x0 bytes be used to store name length, if it is "extra" length? I don't own a VX-8, so I can't try.
Yep, looks like it. Attached is an image with Bank1's name set to "BANK 1AAAAAAAAAA".
Great.
Here's a patch which implements get_banks for VX-3, VX-6 and VX-8. It returns a list of 24 bank names.
For VX-6, I've also implemented get_bank_channels. For bank number n, it returns the list of channels belonging to the bank.
No UI and no writing back yet. A channel can belong to any combination of banks.
Jon LA4RT
chirp_devel mailing list chirp_devel@intrepid.danplanet.com http://intrepid.danplanet.com/mailman/listinfo/chirp_devel
On 5/17/2011 11:11 AM, Jon Kåre Hellan wrote:
For VX-6, I've also implemented get_bank_channels. For bank number n, it returns the list of channels belonging to the bank.
I've been meaning to look and maybe you can save me some time:
how are you exercising your changes to the radio drivers?
Are you using chirp.py to load a radio image and test intereactively in the interpreter?
On 05/17/2011 11:09 PM, Robert Terzi wrote:
On 5/17/2011 11:11 AM, Jon Kåre Hellan wrote:
For VX-6, I've also implemented get_bank_channels. For bank number n, it returns the list of channels belonging to the bank.
I've been meaning to look and maybe you can save me some time:
how are you exercising your changes to the radio drivers?
Are you using chirp.py to load a radio image and test intereactively in the interpreter?
I load the image, and abuse the UI in various ways. If I set 'has_bank_index' to true, I get the 'Banks' pane in the UI. In one version, I appended the channel numbers of the members to the bank names.
Attaching code to show bank members on vx8 in the 'Banks' pane.
Jon LA4RT
chirp_devel mailing list chirp_devel@intrepid.danplanet.com http://intrepid.danplanet.com/mailman/listinfo/chirp_devel
- # Return channels for a bank. Bank given as number
- def get_bank_channels(self, bank):
nchannels = 0
size = self._memobj.bank_sizes[bank]
if size<= 198:
nchannels = 1 + size/2
_channels = self._memobj.bank_channels[bank]
channels = []
for i in range(0, nchannels):
channels.append(_channels.channel[i])
return channels
This is so that we can present the user with a list of channels belonging to a bank, right? I.e, they want to create a bank by tagging channels into it instead of marking the channel with a specific bank...
So, maybe we need to change the UI to not allow per-memory bank editing for any of the radios, but rather make the bank editor more robust, and capable of handling the one-to-one and one-to-many bank models. I'm definitely in favor of a unified workflow in the UI. We'll just need to change the current bank-supporting drivers to return banks of memories (like you have above) and declare whether they support one-to-one or one-to-many.
Sound reasonable? I can try to hack some of the UI changes up in a prototype patch if this seems like a good path forward.
On 5/17/2011 7:57 PM, Dan Smith wrote:
- # Return channels for a bank. Bank given as number
- def get_bank_channels(self, bank):
This is so that we can present the user with a list of channels belonging to a bank, right? I.e, they want to create a bank by tagging channels into it instead of marking the channel with a specific bank...
For what it's worth the two "commercial" apps I've used for the VX-8 only let you see the bank info in context of the memory channels. each memory channel get 24 columns for each memory bank.
Admittedly much of the time this is how I'd like to work with memory banks, add a new repeater and put it in the bank to tag it's location or what ever property I want to restrict my scanning to.
However, what I'd like see is the by bank view, and this is part of my motivation for working on it. There are times I'd like to work in just the limited view of bank members or have a report by bank.
Don't know if this helps, --Rob
For what it's worth the two "commercial" apps I've used for the VX-8 only let you see the bank info in context of the memory channels. each memory channel get 24 columns for each memory bank.
Is this in the view where you set the banks, or in the view where you edit the memory itself? Got a screenshot? I never use the commercial stuff. Doesn't run on my platform :)
Admittedly much of the time this is how I'd like to work with memory banks, add a new repeater and put it in the bank to tag it's location or what ever property I want to restrict my scanning to.
Hmm, well, I could make the per-memory bank selection a different and more-active widget and let you set it there too, I suppose.
However, what I'd like see is the by bank view, and this is part of my motivation for working on it. There are times I'd like to work in just the limited view of bank members or have a report by bank.
Yeah, well, I think I'd like to go with this change initially and remove the bank column in memory edit view. Then once we get all the internal stuff worked out to make it behave properly, I can see about adding the bank column back into the memory editor and make it do the right thing.
On 05/18/2011 01:57 AM, Dan Smith wrote:
- # Return channels for a bank. Bank given as number
- def get_bank_channels(self, bank):
nchannels = 0
size = self._memobj.bank_sizes[bank]
if size<= 198:
nchannels = 1 + size/2
_channels = self._memobj.bank_channels[bank]
channels = []
for i in range(0, nchannels):
channels.append(_channels.channel[i])
return channels
This is so that we can present the user with a list of channels belonging to a bank, right? I.e, they want to create a bank by tagging channels into it instead of marking the channel with a specific bank...
We need it no matter how the UI ends up. It's the most natural way to decode the bank membership information in the image. In turn, it can be directly mapped to a spreadsheet like channels by banks layout, or something different.
So, maybe we need to change the UI to not allow per-memory bank editing for any of the radios, but rather make the bank editor more robust, and capable of handling the one-to-one and one-to-many bank models. I'm definitely in favor of a unified workflow in the UI. We'll just need to change the current bank-supporting drivers to return banks of memories (like you have above) and declare whether they support one-to-one or one-to-many.
Sound reasonable?
It does.
I've seen two different approaches:
- A separate tab for mapping channels to banks - Two different views in the channel editor, one with a column for each possible bank, and one with columns for the other channel attributes.
I can try to hack some of the UI changes up in a prototype patch if this seems like a good path forward.
Looking forward to it.
Jon LA4RT
I got a chance to do some testing of VX-8DR memory banks:
Bank names:
Bank Names start at 0x135A, two bytes of zeros, 16 bytes of label. The first two bytes are not length, so far I haven't seen them be anything but zero.
#seekto 0x135A; struct { u8 unknown1; char label[16]; } banknames[24];
Bank Linking Flag:
The flag bits for whether banks are linked are stored at offset 0x546-0x548. The flags are stored starting with bank 1 as the LSB for the 16 bit big endian word stored at 0x546. It looks like:
MSB LSB 0x546: Bank 16 Bank 9 0x547: Bank 8 Bank 1 0x548: Bank 24 Bank 17
Bank Memory Storage:
The list of memories for Bank 1 starts at 0x198a and contains 100 two byte entries by memory number, zero based, so the first memory is 0. Memory 999 is stored as 0x03 0xe6 (998 zero based) Unused slots are FF FF.
EAI is treated as Memory No. 1000, stored as 0x03e7
The "special memories", Weather 1 is 0x1800, Weather 2 is 0x1801 Marine 1 is 0x2800, 2 is 0x2801, ... , Marine 88 is 0x2838 Radio 1 VOA (1st shortwave) is 0x3000 ... Radio 88 is 0x3058
#seekto 0x198a; struct { u16 channel[100]; } bank_members[24];
Memory Bank In Use:
starting at 0x54a, there are two bytes for each memory bank that indicate whether the bank has anything in it. 0xFFFF if it isn't in use and 0 if it is. I don't know why a 16 bit value is used for something that could be a bit mask.
#seekto 0x54a; struct { u16 in_use; } bank_used[24];
Bank Sizes (or number of entries in each bank):
So far, I can't find any indication that there is a spot to count the number of entries used in each bank the way there is on the vx6 that Jon Hellan provided.
Highest Bank Number in Use:
The oddest part that I found is there seems to be three separate places that seem to indicate the highest bank number in use. There also seem to be two copies of each of them. 0x650 through 0x6cf (128 bytes) seems to be almost, but not completely duplicated started at 0x6d0.
Note zero based bank number
At offset 0x654: ff ff ff ff - no banks are used. 00 00 00 00 - highest bank is Bank 1. 00 01 00 00 - highest bank is Bank 2. 00 17 00 00 - highest bank is Bank 24.
this is repeated 128 bytes later at 0x6d4.
I supposed this could also be the most recently used bank number.
On 05/17/2011 10:45 PM, Robert Terzi wrote:
I got a chance to do some testing of VX-8DR memory banks:
Bank names:
Bank Names start at 0x135A, two bytes of zeros, 16 bytes of label. The first two bytes are not length, so far I haven't seen them be anything but zero.
#seekto 0x135A; struct { u8 unknown1; char label[16]; } banknames[24];
Bank Linking Flag:
The flag bits for whether banks are linked are stored at offset 0x546-0x548. The flags are stored starting with bank 1 as the LSB for the 16 bit big endian word stored at 0x546. It looks like:
MSB LSB
0x546: Bank 16 Bank 9 0x547: Bank 8 Bank 1 0x548: Bank 24 Bank 17
Bank Memory Storage:
The list of memories for Bank 1 starts at 0x198a and contains 100 two byte entries by memory number, zero based, so the first memory is 0. Memory 999 is stored as 0x03 0xe6 (998 zero based) Unused slots are FF FF.
EAI is treated as Memory No. 1000, stored as 0x03e7
The "special memories", Weather 1 is 0x1800, Weather 2 is 0x1801 Marine 1 is 0x2800, 2 is 0x2801, ... , Marine 88 is 0x2838 Radio 1 VOA (1st shortwave) is 0x3000 ... Radio 88 is 0x3058
#seekto 0x198a; struct { u16 channel[100]; } bank_members[24];
Memory Bank In Use:
starting at 0x54a, there are two bytes for each memory bank that indicate whether the bank has anything in it. 0xFFFF if it isn't in use and 0 if it is. I don't know why a 16 bit value is used for something that could be a bit mask.
#seekto 0x54a; struct { u16 in_use; } bank_used[24];
Bank Sizes (or number of entries in each bank):
So far, I can't find any indication that there is a spot to count the number of entries used in each bank the way there is on the vx6 that Jon Hellan provided.
Doesn't have to be. The 0xffff values are enough.
Highest Bank Number in Use:
The oddest part that I found is there seems to be three separate places that seem to indicate the highest bank number in use. There also seem to be two copies of each of them. 0x650 through 0x6cf (128 bytes) seems to be almost, but not completely duplicated started at 0x6d0.
Note zero based bank number
At offset 0x654: ff ff ff ff - no banks are used. 00 00 00 00 - highest bank is Bank 1. 00 01 00 00 - highest bank is Bank 2. 00 17 00 00 - highest bank is Bank 24.
this is repeated 128 bytes later at 0x6d4.
I supposed this could also be the most recently used bank number.
I agree. On the VX-6, the beginning of the image is about current state.
Jon LA4RT
participants (4)
-
Dan Smith
-
Jon K Hellan
-
Jon Kåre Hellan
-
Robert Terzi