[chirp_devel] Implementing Banks in CHIRP Driver
Craig Jones
Sun May 28 20:21:05 PDT 2023
Do I understand correctly that you could add this to the description?
For example, if the banks[16] array contains [2,3,5,7,0,0,0,0,0,...]
then that means that memory[0:2] belong to Bank A, memory[2:5]
belong to Bank B, memory[5:10] to C, memory[10:17] to D, and
memory[17:] aren't in any bank.
If so, that's wild, with wacky implications:
* I don't see a logical location number in the mem struct, so that
means the "Location Number" of every channel is constantly changing
when you add/remove a channel to a bank?
* It also means the user can't control the order of the memory locations?
* At first, I was thinking that you would keep a cross-indexing array
in your bank model which gets populated on the way in (download or
file load) and interpreted on the way out (upload or save), but I
guess you'll actually have to rearrange memory with every bank
change if the UI is going to be able to keep up in real time.
* BTW, if my example is correct, the "capacity" is misleading. I'd
change it to "current_count" or current_size
On 5/28/2023 2:55 PM, Joseph Scanlan wrote:
> Here is my class description. Does it make at least a little sense to
> someone who hasn’t spent time with the driver?
>
> """
>
> The Icom land mobile bank model.
>
>
> The radio stores bank capacity in an array of 16 bit, unsigned
>
> integers. There is no other mapping. This implies
>
> - memories in a bank are contiguous,
>
> - memories in a bank are in the order that they apear in the
>
> "memory" array,
>
> - each memory can only be in one bank,
>
> - all memories not in a bank are at the end of the "memory" array.
>
> Here, "memory" array refers to the struct in "MEM_FORMAT".
>
> “”"
>
>
> Do all models look the same in the banks tab? This is what I see:
>
>
> Banks tab.png
>
> Thanks for the spelling correction.
>
>> On May 24, 2023, at 15:00, Craig Jones via chirp_devel
>> <chirp_devel at intrepid.danplanet.com> wrote:
>>
>> I was wondering what "capacity" meant. So, if that's just the count,
>> where is the actual linkage between the bank and the memories?
>> Anyway, the Anytone model I'm working on right now is the same (each
>> mem is limited to one bank, or none):
>>
>> classAnytoneBankModel(chirp_common.BankModel):
>> """
>> The Anytone bank model, for the radios that support it, is that a
>> memory
>> channel can only belong to one bank at a time. There are 10 banks
>> (A-J
>> with no alternate names). The mapping is done in a block of bytes
>> that
>> correspond to the 750 memories (one byte per memory). The
>> possible values
>> are 0-9 (A-J) or 15 (x0F) for "off".
>> """
>> def__init__(self, radio, name="Banks", num_banks=10, num_memories=750):
>> super(AnytoneBankModel,self).__init__(radio,name)
>> self._bank_bounds =range(num_banks)
>> self._mem_bounds =range(1,num_memories +1)
>> self._banks =[
>> chirp_common.Bank(self,i,string.ascii_uppercase[i]) fori
>> inself._bank_bounds
>> ]
>> defget_num_mappings(self):
>> returnlen(self._banks)
>> defget_mappings(self):
>> returnself._banks
>> defadd_memory_to_mapping(self, memory, bank):
>> self._radio.set_bank(memory.number,bank.get_index())
>> defremove_memory_from_mapping(self, memory, mapping):
>> self._radio.clr_bank(memory.number)
>> defget_mapping_memories(self, bank):
>> """Returns a list of all memories assigned to the given bank"""
>> memories =[]
>> fori inself._mem_bounds:
>> bank_index =self._radio.get_bank(i)
>> ifbank_index isnotNoneandbank_index ==bank.get_index():
>> memories.append(self._radio.get_memory(i))
>> returnmemories
>> defget_memory_mappings(self, memory):
>> bank_index =self._radio.get_bank(memory.number)
>> return[]ifbank_index isNoneelse[self._banks[bank_index]]
>>
>> BTW, "scrabmler_code" is misspelled.
>>
>>
>> On 5/24/2023 1:52 PM, Joseph Scanlan wrote:
>>> A memory can not be in more than one bank simultaneously.
>>>
>>> A memory need not be in a bank.
>>>
>>> Memories are stored sequentially starting from [0]. Each number in banks holds the count of memories in that bank. The count can be 0. So to find the start index of the first memory in a bank we have to sum the sizes of all previous banks.
>>>
>>>> On May 23, 2023, at 14:06, Craig Jones via chirp_devel<chirp_devel at intrepid.danplanet.com> wrote:
>>>>
>>>> I just went through that myself. The first two questions: 1. Can one
>>>> memory belong to multiple banks simultaneously? 2. Does every memory
>>>> have to belong to at least one bank? The answers determine which base
>>>> class you use for the bank model.
>>>>
>>>> You need to implement a bank model so that Chirp can inquire, for
>>>> example, which memories are in bank C?
>>>>
>>>> You also need to implement get_bank(), set_bank(), clear_bank() for a
>>>> memory (in the radio class), which will be called by the bank model.
>>>>
>>>> Hopefully, that's enough to get you started.
>>>>
>>>>
>>>> On 5/23/2023 1:47 PM, Joseph Scanlan via chirp_devel wrote:
>>>>> Does anyone have an example that will help me understand MemoryMapping, MappingModel, Bank, and BankModel classes? I’m working on a driver for the Icom IC-F520 land mobile radio.
>>>>>
>>>>> The F520 has 256 channels and 16 banks. This is how they look in MEM_FORMAT:
>>>>>
>>>>> struct {
>>>>> u16 capacity;
>>>>> } banks[16];
>>>>>
>>>>>
>>>>> struct {
>>>>> char name[10];
>>>>> u32 inhibit:1,
>>>>> freq_rx:31;
>>>>> u32 inhibit_tx:1,
>>>>> freq_tx:31;
>>>>> u8 rx_tone_off:1,
>>>>> rx_tone_digital:1,
>>>>> unk01:6;
>>>>> u8 rx_tone;
>>>>> u8 tx_tone_off:1,
>>>>> tx_tone_digital:1,
>>>>> unk02:6;
>>>>> u8 tx_tone;
>>>>> u8 unk03:3,
>>>>> tot_on:1,
>>>>> lockout_repeater:1,
>>>>> lockout_busy:1,
>>>>> power_rf:2;
>>>>> u8 log_in:2,
>>>>> log_out:2,
>>>>> unk04:1,
>>>>> text_on:1,
>>>>> unk05:1,
>>>>> two_tone_unk1:1;
>>>>> u8 unk06:4,
>>>>> two_tone_unk2:2
>>>>> auto_reset_a:1,
>>>>> unk07:1;
>>>>> u8 narrow:1,
>>>>> scrambler_on:1,
>>>>> scrambler_inhibit:1,
>>>>> compander_on:1,
>>>>> unk08:4;
>>>>> u8 unk09;
>>>>> u8 scrabmler_code;
>>>>> u16 unk10;
>>>>> u16 unk11;
>>>>> u8 unk12:6,
>>>>> two_tone_index:2;
>>>>> } memory[256];
>>>>> _______________________________________________
>>>>> chirp_devel mailing list
>>>>> chirp_devel at intrepid.danplanet.com
>>>>> http://intrepid.danplanet.com/mailman/listinfo/chirp_devel
>>>>> Developer docs:http://chirp.danplanet.com/projects/chirp/wiki/Developers
>>>> --
>>>> This email has been checked for viruses by AVG antivirus software.
>>>> www.avg.com
>>>> _______________________________________________
>>>> chirp_devel mailing list
>>>> chirp_devel at intrepid.danplanet.com
>>>> http://intrepid.danplanet.com/mailman/listinfo/chirp_devel
>>>> Developer docs:http://chirp.danplanet.com/projects/chirp/wiki/Developers
>>
>> <http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient>
>> Virus-free.www.avg.com
>> <http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient>
>>
>>
>> <x-msg://1/#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
>> _______________________________________________
>> chirp_devel mailing list
>> chirp_devel at intrepid.danplanet.com
>> http://intrepid.danplanet.com/mailman/listinfo/chirp_devel
>> Developer docs: http://chirp.danplanet.com/projects/chirp/wiki/Developers
>
--
This email has been checked for viruses by AVG antivirus software.
www.avg.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://intrepid.danplanet.com/pipermail/chirp_devel/attachments/20230528/4b9b30ce/attachment-0001.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Banks tab.png
Type: image/png
Size: 109946 bytes
Desc: not available
Url : http://intrepid.danplanet.com/pipermail/chirp_devel/attachments/20230528/4b9b30ce/attachment-0001.png
More information about the chirp_devel
mailing list