<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Rust on chelmiki.com</title>
    <link>https://chelmiki.com/tags/rust/</link>
    <description>Recent content in Rust on chelmiki.com</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <webMaster>en-us (Miguel)</webMaster>
    <lastBuildDate>Wed, 30 Sep 2026 23:31:00 +0100</lastBuildDate><atom:link href="https://chelmiki.com/tags/rust/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>chirp-vrn76: convert CHIRP exports for the VGC VR-N76 app</title>
      <link>https://chelmiki.com/posts/chirp-vrn76/</link>
      <pubDate>Wed, 30 Sep 2026 23:31:00 +0100</pubDate>
      
      <author>[Miguel]</author>
      
      <guid>https://chelmiki.com/posts/chirp-vrn76/</guid>
      <description>&lt;p&gt;I recently bought a VGC VR-N76 HT from Vero Telecom mainly because it supports KISS TNC over Bluetooth, which is something very appealing because I really wanted to experiment with packet radio.&lt;/p&gt;
&lt;p&gt;The first thing I wanted to do when I got the VR-N76 was to program the channels of the repeaters from my area. Unlike the other handhelds I have (Baofeng UV-5R and Quansheng UV-K5), the VR-N76 cannot be programmed with &lt;a href=&#34;https://chirpmyradio.com/&#34;&gt;CHIRP&lt;/a&gt;; and it turns out I have a bunch of CHIRP files that I use to keep re-programming my handhelds when I am travelling between areas with access to different repeaters.&lt;/p&gt;</description>
      <content>&lt;p&gt;I recently bought a VGC VR-N76 HT from Vero Telecom mainly because it supports KISS TNC over Bluetooth, which is something very appealing because I really wanted to experiment with packet radio.&lt;/p&gt;
&lt;p&gt;The first thing I wanted to do when I got the VR-N76 was to program the channels of the repeaters from my area. Unlike the other handhelds I have (Baofeng UV-5R and Quansheng UV-K5), the VR-N76 cannot be programmed with &lt;a href=&#34;https://chirpmyradio.com/&#34;&gt;CHIRP&lt;/a&gt;; and it turns out I have a bunch of CHIRP files that I use to keep re-programming my handhelds when I am travelling between areas with access to different repeaters.&lt;/p&gt;
&lt;p&gt;The VR-N76 has a companion Android app that can be used to control and configure the radio. The app allows you to import a CSV file with all the channels for a specific memory bank. Yes, this HT has several memory banks of 32 channels each.&lt;/p&gt;
&lt;p&gt;Overall this HT can store more channels than my previous HTs but, they will be segregated, which is ok because I rarely have more than 10 repeaters reachable wherever I go.&lt;/p&gt;
&lt;p&gt;I created &lt;a href=&#34;https://github.com/chelmiki/chirp-vrn76&#34;&gt;chirp-vrn76&lt;/a&gt; to convert my existing CHIRP exports into CSV files that can be imported directly into the VR-N76 app.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use-it&#34;&gt;How to use it&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;In CHIRP, I open any of the images I have from my other HTs. I can now see all the repeaters programmed.&lt;/li&gt;
&lt;li&gt;File -&amp;gt; Export to CSV&lt;/li&gt;
&lt;li&gt;Use chirp-vrn76
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://github.com/chelmiki/chirp-vrn76
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cargo build --release
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./target/release/chirp-vrn76 --input chirp_export.csv --output vgc_import.csv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Copy the exported CSV file to the phone.&lt;/li&gt;
&lt;li&gt;In the HT App, Import CSV file.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;what-does-the-tool-actually-do&#34;&gt;What does the tool actually do?&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;chirp-vrn76&lt;/code&gt; is fairly simple. Most of the work is converting from one CSV format to another. Some fields in the CHIRP export do not have a counterpart in the VR-N76 CSV format, and similarly, some of the fields in the VR-N76 have to be set to their defaults because they do not have a CHIRP counterpart.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CHIRP:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;frequency = 145.600 MHz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;duplex    = -
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;offset    = 0.600 MHz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VR-N76:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RX = 145600000 Hz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;TX = 145000000 Hz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Receive and transmit frequencies are represented differently. In CHIRP these are in MHz, and only the receive frequency is present; in the VR-N76 frequencies are represented in Hz and both receive and transmit frequencies need to be provided as absolute values, which &lt;code&gt;chirp-vrn76&lt;/code&gt; computes from CHIRP&amp;rsquo;s receive &lt;code&gt;frequency&lt;/code&gt;, &lt;code&gt;duplex&lt;/code&gt; (+, -, split) and the &lt;code&gt;offset&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The VR-N76 CSV file has only 2 channel modes AM and FM, it does not have the narrow modes NFM and NAM, however, it has an additional &lt;code&gt;bandwidth&lt;/code&gt; field that can be set to 12.5 kHz for narrow modes or 25 kHz for normal ones.&lt;/p&gt;
&lt;p&gt;Regarding the receive and transmit subtones, this is slightly more complex. CHIRP uses several fields to represent this information (&lt;code&gt;tone&lt;/code&gt;, &lt;code&gt;r_tone_freq&lt;/code&gt;, &lt;code&gt;c_tone_frequency&lt;/code&gt;, &lt;code&gt;dtcs_code&lt;/code&gt;, &lt;code&gt;dtcs_polarity&lt;/code&gt;, &lt;code&gt;rx_dtcs_code&lt;/code&gt;, and &lt;code&gt;cross_mode&lt;/code&gt;) while VR-N76 encodes the same information using only 2 fields. More details in the README file in the &lt;a href=&#34;https://github.com/chelmiki/chirp-vrn76/tree/main#tone-handling&#34;&gt;Tone Handling&lt;/a&gt; section.&lt;/p&gt;
&lt;p&gt;Finally, although the CHIRP UI shows power as &lt;em&gt;High&lt;/em&gt;, &lt;em&gt;Med&lt;/em&gt; and &lt;em&gt;Low&lt;/em&gt;, the value is exported in watts. &lt;code&gt;chirp-vrn76&lt;/code&gt; buckets and converts those values to &lt;em&gt;H&lt;/em&gt;, &lt;em&gt;M&lt;/em&gt;, &lt;em&gt;L&lt;/em&gt; which is the format expected by the VR-N76.&lt;/p&gt;
&lt;p&gt;This means I can keep using CHIRP as my main tool for managing my list of repeaters and use &lt;code&gt;chirp-vrn76&lt;/code&gt; whenever I need to move that configuration to the VR-N76.&lt;/p&gt;
</content>
    </item>
    
  </channel>
</rss>
