<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://ratpack.ece.utah.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nelson</id>
	<title>Ratpack - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://ratpack.ece.utah.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nelson"/>
	<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php/Special:Contributions/Nelson"/>
	<updated>2026-08-02T20:36:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Itinerary&amp;diff=74</id>
		<title>Itinerary</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Itinerary&amp;diff=74"/>
		<updated>2026-08-02T02:10:59Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Meetings]]&lt;br /&gt;
&lt;br /&gt;
Nelson: Bob&#039;s method of interpreting frequencies&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=ADC&amp;diff=73</id>
		<title>ADC</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=ADC&amp;diff=73"/>
		<updated>2026-08-02T02:10:14Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Index]]&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/Goertzel_algorithm&lt;br /&gt;
&lt;br /&gt;
I am wondering how well this will work for selecting a square wave. I&#039;ll try to do a demo in python.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Gay bob&#039;s idea ==&lt;br /&gt;
&lt;br /&gt;
Just use a first difference, maybe taking it a few samples back, and see when that becomes big enough, then record that as a transition, and calculate the average difference in time between them over the period.&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=File:2026_07_31-Meeting.png&amp;diff=70</id>
		<title>File:2026 07 31-Meeting.png</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=File:2026_07_31-Meeting.png&amp;diff=70"/>
		<updated>2026-07-31T19:56:49Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=2026_07_31-Meeting&amp;diff=69</id>
		<title>2026 07 31-Meeting</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=2026_07_31-Meeting&amp;diff=69"/>
		<updated>2026-07-31T19:56:45Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Meetings]]&lt;br /&gt;
&lt;br /&gt;
Most of the meeting time was spent discussing and defining the [[DAC]] Contract, to be implemented by next week&lt;br /&gt;
&lt;br /&gt;
The [[Formatting]] page now defines a rough style guide for code going forward.&lt;br /&gt;
&lt;br /&gt;
DMA:&lt;br /&gt;
 - Oneshot: writes a long bit of data to a section out/in from adc/dac&lt;br /&gt;
 - Circular: Reruns over the same circular buffer repeatedly&lt;br /&gt;
 - DMA Shares AHB system bus with other masters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next week Goals: 16:00 Friday Meeting, Me and Ben in this room&lt;br /&gt;
 - Hardware testing, Will scope the connections next meeting&lt;br /&gt;
 - Have dac output pipeline all the way from a faux packet_framer() to the Dac outputting&lt;br /&gt;
 - Make past code conform to style guide&lt;br /&gt;
 - Get completed commits from BeanBranch into main&lt;br /&gt;
&lt;br /&gt;
[[File:2026_07_31-Meeting.png]]&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=DAC&amp;diff=68</id>
		<title>DAC</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=DAC&amp;diff=68"/>
		<updated>2026-07-31T19:56:06Z</updated>

		<summary type="html">&lt;p&gt;Nelson: /* Timer6 Interrupts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Contracts]]&lt;br /&gt;
&lt;br /&gt;
== DataBlock Struct ==&lt;br /&gt;
 ```&lt;br /&gt;
 typedef struct {&lt;br /&gt;
     int length; // Length in bits&lt;br /&gt;
     int current_index; // current position *TO BE READ NEXT* in bits&lt;br /&gt;
     uint8_t flags; // an area to communicate between different things accessing this memory&lt;br /&gt;
     const int max_length; // maximum length which can be stored in `data` in bits&lt;br /&gt;
     const uint8_t* data; // pointer to uint8 array to store data in&lt;br /&gt;
 } DataBlock_s;&lt;br /&gt;
 ```&lt;br /&gt;
&lt;br /&gt;
== FLAGS Data ==&lt;br /&gt;
- 0 for DAC_STOPPED&lt;br /&gt;
- 1 for DAC_WORKING&lt;br /&gt;
&lt;br /&gt;
== Dac Outputting Overview ==&lt;br /&gt;
 - Setup handled by DAC_init()&lt;br /&gt;
 - Tim3 will hold a given frequency, it has an approximately 0.5second period. This is how long the high freq is held for the one bit.&lt;br /&gt;
 - Once Tim3 finishes, it will call a handler that checks if done, or sets Tim6 ARR depending on the next bit&lt;br /&gt;
 - Tim6 will at halfway through set the dac&#039;s output to 1, and at the end set the dac&#039;s output to 0. This has a frequency on the order of 1.2kHz, or 2.4kHz. This will transmit the frequency for the duration of Tim3&#039;s output&lt;br /&gt;
&lt;br /&gt;
 - From packet_framer() we write the DataBlock_s-&amp;gt;length and -&amp;gt;data fields, then call DAC_init()&lt;br /&gt;
&lt;br /&gt;
== DAC_init() ==&lt;br /&gt;
 - Set current_index to zero&lt;br /&gt;
 - set flags to 1 to mean the dac is working, external stuff should respect that and not try to write into this block&lt;br /&gt;
 - Enable Tim6&lt;br /&gt;
 - Enable radio PTT (once implemented)&lt;br /&gt;
 - Enable Tim3&lt;br /&gt;
 - Manually set Tim3 to max value to &#039;naturally&#039; trigger a reset? Is this possible? We could also just call the handler, but then we get a race condition I think if the timer&#039;s going and other interrupts could delay it? We could also just wait 0.5s for it to happen actually naturally&lt;br /&gt;
&lt;br /&gt;
== Timer3 Interrupt ==&lt;br /&gt;
The long one that changes the frequency of TIm6&lt;br /&gt;
 - if current position is less than message length&lt;br /&gt;
     - Get the bit stated by current_index and set TIM6&#039;s ARR accordingly to hf if it&#039;s a 1, or lf it&#039;s a 0. Remember that current_index is the bit index&lt;br /&gt;
 - else (current pos is strictly greater than message length)&lt;br /&gt;
     - Disable radio PTT (once implemented)&lt;br /&gt;
     - Stop Tim6&lt;br /&gt;
     - Stop Tim3&lt;br /&gt;
     - Set -&amp;gt;flags to 0 to indicate done transmitting&lt;br /&gt;
&lt;br /&gt;
== Timer6 Interrupts ==&lt;br /&gt;
The fast one that sends 0s and 1s to the dac&lt;br /&gt;
&lt;br /&gt;
This could alternately be implemented by xoring 1 with the old value and only having an interrupt at the end of a faster timer, but reading the old value is likely less worth it.&lt;br /&gt;
&lt;br /&gt;
Two interrupts method (I think better?)&lt;br /&gt;
 Halfway interrupt: Write 1 into dac&lt;br /&gt;
 Fullway interrupt: Write 0 into dac&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=ADC&amp;diff=67</id>
		<title>ADC</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=ADC&amp;diff=67"/>
		<updated>2026-07-31T19:55:36Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Index]]&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/Goertzel_algorithm&lt;br /&gt;
&lt;br /&gt;
I am wondering how well this will work for selecting a square wave. I&#039;ll try to do a demo in python.&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=DAC&amp;diff=66</id>
		<title>DAC</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=DAC&amp;diff=66"/>
		<updated>2026-07-31T19:54:10Z</updated>

		<summary type="html">&lt;p&gt;Nelson: /* Timer6 Interrupts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Contracts]]&lt;br /&gt;
&lt;br /&gt;
== DataBlock Struct ==&lt;br /&gt;
 ```&lt;br /&gt;
 typedef struct {&lt;br /&gt;
     int length; // Length in bits&lt;br /&gt;
     int current_index; // current position *TO BE READ NEXT* in bits&lt;br /&gt;
     uint8_t flags; // an area to communicate between different things accessing this memory&lt;br /&gt;
     const int max_length; // maximum length which can be stored in `data` in bits&lt;br /&gt;
     const uint8_t* data; // pointer to uint8 array to store data in&lt;br /&gt;
 } DataBlock_s;&lt;br /&gt;
 ```&lt;br /&gt;
&lt;br /&gt;
== FLAGS Data ==&lt;br /&gt;
- 0 for DAC_STOPPED&lt;br /&gt;
- 1 for DAC_WORKING&lt;br /&gt;
&lt;br /&gt;
== Dac Outputting Overview ==&lt;br /&gt;
 - Setup handled by DAC_init()&lt;br /&gt;
 - Tim3 will hold a given frequency, it has an approximately 0.5second period. This is how long the high freq is held for the one bit.&lt;br /&gt;
 - Once Tim3 finishes, it will call a handler that checks if done, or sets Tim6 ARR depending on the next bit&lt;br /&gt;
 - Tim6 will at halfway through set the dac&#039;s output to 1, and at the end set the dac&#039;s output to 0. This has a frequency on the order of 1.2kHz, or 2.4kHz. This will transmit the frequency for the duration of Tim3&#039;s output&lt;br /&gt;
&lt;br /&gt;
 - From packet_framer() we write the DataBlock_s-&amp;gt;length and -&amp;gt;data fields, then call DAC_init()&lt;br /&gt;
&lt;br /&gt;
== DAC_init() ==&lt;br /&gt;
 - Set current_index to zero&lt;br /&gt;
 - set flags to 1 to mean the dac is working, external stuff should respect that and not try to write into this block&lt;br /&gt;
 - Enable Tim6&lt;br /&gt;
 - Enable radio PTT (once implemented)&lt;br /&gt;
 - Enable Tim3&lt;br /&gt;
 - Manually set Tim3 to max value to &#039;naturally&#039; trigger a reset? Is this possible? We could also just call the handler, but then we get a race condition I think if the timer&#039;s going and other interrupts could delay it? We could also just wait 0.5s for it to happen actually naturally&lt;br /&gt;
&lt;br /&gt;
== Timer3 Interrupt ==&lt;br /&gt;
The long one that changes the frequency of TIm6&lt;br /&gt;
 - if current position is less than message length&lt;br /&gt;
     - Get the bit stated by current_index and set TIM6&#039;s ARR accordingly to hf if it&#039;s a 1, or lf it&#039;s a 0. Remember that current_index is the bit index&lt;br /&gt;
 - else (current pos is strictly greater than message length)&lt;br /&gt;
     - Disable radio PTT (once implemented)&lt;br /&gt;
     - Stop Tim6&lt;br /&gt;
     - Stop Tim3&lt;br /&gt;
     - Set -&amp;gt;flags to 0 to indicate done transmitting&lt;br /&gt;
&lt;br /&gt;
== Timer6 Interrupts ==&lt;br /&gt;
The fast one that sends 0s and 1s to the dac&lt;br /&gt;
&lt;br /&gt;
 Halfway interrupt: Write 1 into dac&lt;br /&gt;
 Fullway interrupt: Write 0 into dac&lt;br /&gt;
&lt;br /&gt;
This could alternately be implemented by xoring 1 with the old value and only having an interrupt at the end of a faster timer, but reading the old value is likely less worth it.&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=2026_07_31-Meeting&amp;diff=65</id>
		<title>2026 07 31-Meeting</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=2026_07_31-Meeting&amp;diff=65"/>
		<updated>2026-07-31T19:46:46Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Meetings]]&lt;br /&gt;
&lt;br /&gt;
Most of the meeting time was spent discussing and defining the [[DAC]] Contract, to be implemented by next week&lt;br /&gt;
&lt;br /&gt;
The [[Formatting]] page now defines a rough style guide for code going forward.&lt;br /&gt;
&lt;br /&gt;
DMA:&lt;br /&gt;
 - Oneshot: writes a long bit of data to a section out/in from adc/dac&lt;br /&gt;
 - Circular: Reruns over the same circular buffer repeatedly&lt;br /&gt;
 - DMA Shares AHB system bus with other masters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next week Goals: 16:00 Friday Meeting, Me and Ben in this room&lt;br /&gt;
 - Hardware testing, Will scope the connections next meeting&lt;br /&gt;
 - Have dac output pipeline all the way from a faux packet_framer() to the Dac outputting&lt;br /&gt;
 - Make past code conform to style guide&lt;br /&gt;
 - Get completed commits from BeanBranch into main&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Category:Contracts&amp;diff=64</id>
		<title>Category:Contracts</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Category:Contracts&amp;diff=64"/>
		<updated>2026-07-31T19:44:18Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Created page with &amp;quot;Category:Index Code contracts and definitions. This file is the source of truth, follow it, or discuss and change it.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Index]]&lt;br /&gt;
Code contracts and definitions. This file is the source of truth, follow it, or discuss and change it.&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=DAC&amp;diff=63</id>
		<title>DAC</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=DAC&amp;diff=63"/>
		<updated>2026-07-31T19:42:57Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Created page with &amp;quot;Category:Contracts  == DataBlock Struct ==  ```  typedef struct {      int length; // Length in bits      int current_index; // current position *TO BE READ NEXT* in bits      uint8_t flags; // an area to communicate between different things accessing this memory      const int max_length; // maximum length which can be stored in `data` in bits      const uint8_t* data; // pointer to uint8 array to store data in  } DataBlock_s;  ```  == FLAGS Data == - 0 for DAC_STOP...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Contracts]]&lt;br /&gt;
&lt;br /&gt;
== DataBlock Struct ==&lt;br /&gt;
 ```&lt;br /&gt;
 typedef struct {&lt;br /&gt;
     int length; // Length in bits&lt;br /&gt;
     int current_index; // current position *TO BE READ NEXT* in bits&lt;br /&gt;
     uint8_t flags; // an area to communicate between different things accessing this memory&lt;br /&gt;
     const int max_length; // maximum length which can be stored in `data` in bits&lt;br /&gt;
     const uint8_t* data; // pointer to uint8 array to store data in&lt;br /&gt;
 } DataBlock_s;&lt;br /&gt;
 ```&lt;br /&gt;
&lt;br /&gt;
== FLAGS Data ==&lt;br /&gt;
- 0 for DAC_STOPPED&lt;br /&gt;
- 1 for DAC_WORKING&lt;br /&gt;
&lt;br /&gt;
== Dac Outputting Overview ==&lt;br /&gt;
 - Setup handled by DAC_init()&lt;br /&gt;
 - Tim3 will hold a given frequency, it has an approximately 0.5second period. This is how long the high freq is held for the one bit.&lt;br /&gt;
 - Once Tim3 finishes, it will call a handler that checks if done, or sets Tim6 ARR depending on the next bit&lt;br /&gt;
 - Tim6 will at halfway through set the dac&#039;s output to 1, and at the end set the dac&#039;s output to 0. This has a frequency on the order of 1.2kHz, or 2.4kHz. This will transmit the frequency for the duration of Tim3&#039;s output&lt;br /&gt;
&lt;br /&gt;
 - From packet_framer() we write the DataBlock_s-&amp;gt;length and -&amp;gt;data fields, then call DAC_init()&lt;br /&gt;
&lt;br /&gt;
== DAC_init() ==&lt;br /&gt;
 - Set current_index to zero&lt;br /&gt;
 - set flags to 1 to mean the dac is working, external stuff should respect that and not try to write into this block&lt;br /&gt;
 - Enable Tim6&lt;br /&gt;
 - Enable radio PTT (once implemented)&lt;br /&gt;
 - Enable Tim3&lt;br /&gt;
 - Manually set Tim3 to max value to &#039;naturally&#039; trigger a reset? Is this possible? We could also just call the handler, but then we get a race condition I think if the timer&#039;s going and other interrupts could delay it? We could also just wait 0.5s for it to happen actually naturally&lt;br /&gt;
&lt;br /&gt;
== Timer3 Interrupt ==&lt;br /&gt;
The long one that changes the frequency of TIm6&lt;br /&gt;
 - if current position is less than message length&lt;br /&gt;
     - Get the bit stated by current_index and set TIM6&#039;s ARR accordingly to hf if it&#039;s a 1, or lf it&#039;s a 0. Remember that current_index is the bit index&lt;br /&gt;
 - else (current pos is strictly greater than message length)&lt;br /&gt;
     - Disable radio PTT (once implemented)&lt;br /&gt;
     - Stop Tim6&lt;br /&gt;
     - Stop Tim3&lt;br /&gt;
     - Set -&amp;gt;flags to 0 to indicate done transmitting&lt;br /&gt;
&lt;br /&gt;
== Timer6 Interrupts ==&lt;br /&gt;
The fast one that sends 0s and 1s to the dac&lt;br /&gt;
&lt;br /&gt;
Halfway interrupt&lt;br /&gt;
 - Write 1 into dac&lt;br /&gt;
&lt;br /&gt;
Fullway interrupt&lt;br /&gt;
 - Write 0 into dac&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Formatting&amp;diff=62</id>
		<title>Formatting</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Formatting&amp;diff=62"/>
		<updated>2026-07-31T19:14:09Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Index]]&lt;br /&gt;
&lt;br /&gt;
== 2026 07 31 ==&lt;br /&gt;
What format do we use to name things?&lt;br /&gt;
 - Using &amp;quot;/**&amp;quot; then &amp;quot; * &amp;quot; then &amp;quot; */&amp;quot; to write comments&lt;br /&gt;
 - Method names: Upper Snake Case&lt;br /&gt;
 - Struct names: Upper Snake Case, append &amp;quot;_t&amp;quot;&lt;br /&gt;
 - Variables: Lower Snake Case&lt;br /&gt;
 - Files:&lt;br /&gt;
     - .c, .h, .txt Lowercase with underscores&lt;br /&gt;
     - .txt and .json Upper Camel Case&lt;br /&gt;
 - Folders: By vibes&lt;br /&gt;
&lt;br /&gt;
Commit formatting:&lt;br /&gt;
 - https://gist.github.com/qoomon/5dfcdf8eec66a051ecd85625518cfd13&lt;br /&gt;
 - &amp;lt;type&amp;gt;(&amp;lt;optional scope&amp;gt;): &amp;lt;description&amp;gt;&lt;br /&gt;
 - Common Types:&lt;br /&gt;
     - feat: commits that add or adjust a feature&lt;br /&gt;
     - fix&lt;br /&gt;
     - refactor&lt;br /&gt;
     - style: formatting stuff that does not affect&lt;br /&gt;
     - test: stuff to do with unit testing&lt;br /&gt;
     - docs&lt;br /&gt;
     - build: stuff relating to build frameworks and tools&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Formatting&amp;diff=61</id>
		<title>Formatting</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Formatting&amp;diff=61"/>
		<updated>2026-07-31T19:13:47Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2026 07 31 ==&lt;br /&gt;
What format do we use to name things?&lt;br /&gt;
 - Using &amp;quot;/**&amp;quot; then &amp;quot; * &amp;quot; then &amp;quot; */&amp;quot; to write comments&lt;br /&gt;
 - Method names: Upper Snake Case&lt;br /&gt;
 - Struct names: Upper Snake Case, append &amp;quot;_t&amp;quot;&lt;br /&gt;
 - Variables: Lower Snake Case&lt;br /&gt;
 - Files:&lt;br /&gt;
     - .c, .h, .txt Lowercase with underscores&lt;br /&gt;
     - .txt and .json Upper Camel Case&lt;br /&gt;
 - Folders: By vibes&lt;br /&gt;
&lt;br /&gt;
Commit formatting:&lt;br /&gt;
 - https://gist.github.com/qoomon/5dfcdf8eec66a051ecd85625518cfd13&lt;br /&gt;
 - &amp;lt;type&amp;gt;(&amp;lt;optional scope&amp;gt;): &amp;lt;description&amp;gt;&lt;br /&gt;
 - Common Types:&lt;br /&gt;
     - feat: commits that add or adjust a feature&lt;br /&gt;
     - fix&lt;br /&gt;
     - refactor&lt;br /&gt;
     - style: formatting stuff that does not affect&lt;br /&gt;
     - test: stuff to do with unit testing&lt;br /&gt;
     - docs&lt;br /&gt;
     - build: stuff relating to build frameworks and tools&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=2026_07_31-Meeting&amp;diff=60</id>
		<title>2026 07 31-Meeting</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=2026_07_31-Meeting&amp;diff=60"/>
		<updated>2026-07-31T18:59:19Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Meetings]]&lt;br /&gt;
&lt;br /&gt;
DMA:&lt;br /&gt;
 - Oneshot: writes a long bit of data to a section out/in from adc/dac&lt;br /&gt;
 - Circular: Reruns over the same circular buffer repeatedly&lt;br /&gt;
 - DMA Shares AHB system bus with other masters&lt;br /&gt;
&lt;br /&gt;
I&#039;m writing [[DAC]] to define the contracts we plan to implement by next week.&lt;br /&gt;
&lt;br /&gt;
Next week Goals: 16:00 Friday Meeting, Me and Ben in this room&lt;br /&gt;
 - Hardware testing, Will scope the connections next meeting&lt;br /&gt;
 - Have dac output pipeline all the way from a faux packet_framer() to the Dac outputting&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Formatting&amp;diff=59</id>
		<title>Formatting</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Formatting&amp;diff=59"/>
		<updated>2026-07-31T18:41:36Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Created page with &amp;quot;== 2026 07 31 == What format do we use to name things?  - Using &amp;quot;/**&amp;quot; then &amp;quot; * &amp;quot; then &amp;quot; */&amp;quot; to write comments  - Method names: Upper Snake Case  - Struct names: Upper Snake Case, append &amp;quot;_t&amp;quot;  - Variables: Lower Snake Case  - Files:      - .c, .h, .txt Lowercase with underscores      - .txt and .json Upper Camel Case  - Folders: By vibes&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2026 07 31 ==&lt;br /&gt;
What format do we use to name things?&lt;br /&gt;
 - Using &amp;quot;/**&amp;quot; then &amp;quot; * &amp;quot; then &amp;quot; */&amp;quot; to write comments&lt;br /&gt;
 - Method names: Upper Snake Case&lt;br /&gt;
 - Struct names: Upper Snake Case, append &amp;quot;_t&amp;quot;&lt;br /&gt;
 - Variables: Lower Snake Case&lt;br /&gt;
 - Files:&lt;br /&gt;
     - .c, .h, .txt Lowercase with underscores&lt;br /&gt;
     - .txt and .json Upper Camel Case&lt;br /&gt;
 - Folders: By vibes&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Itinerary&amp;diff=58</id>
		<title>Itinerary</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Itinerary&amp;diff=58"/>
		<updated>2026-07-31T18:41:14Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Replaced content with &amp;quot;Category:Meetings&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Meetings]]&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=2026_07_31-Meeting&amp;diff=57</id>
		<title>2026 07 31-Meeting</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=2026_07_31-Meeting&amp;diff=57"/>
		<updated>2026-07-31T17:47:41Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Meetings]]&lt;br /&gt;
&lt;br /&gt;
DMA:&lt;br /&gt;
 - Oneshot: writes a long bit of data to a section out/in from adc/dac&lt;br /&gt;
 - Circular: Reruns over the same circular buffer repeatedly&lt;br /&gt;
 - DMA Shares AHB system bus with other masters&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=2026_07_31-Meeting&amp;diff=56</id>
		<title>2026 07 31-Meeting</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=2026_07_31-Meeting&amp;diff=56"/>
		<updated>2026-07-31T17:41:38Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Meetings]]&lt;br /&gt;
&lt;br /&gt;
DMA:&lt;br /&gt;
 - Oneshot: writes a long bit of data to a section out/in from adc/dac&lt;br /&gt;
 - Circular: Reruns over the same circular buffer repeatedly&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=2026_07_31-Meeting&amp;diff=55</id>
		<title>2026 07 31-Meeting</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=2026_07_31-Meeting&amp;diff=55"/>
		<updated>2026-07-31T17:39:48Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Created page with &amp;quot;Category:Meetings  Beans!&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Meetings]]&lt;br /&gt;
&lt;br /&gt;
Beans!&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Itinerary&amp;diff=53</id>
		<title>Itinerary</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Itinerary&amp;diff=53"/>
		<updated>2026-07-31T05:58:30Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Created page with &amp;quot;Category:Meetings  What format do we use to name things&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Meetings]]&lt;br /&gt;
&lt;br /&gt;
What format do we use to name things&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=ADC&amp;diff=52</id>
		<title>ADC</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=ADC&amp;diff=52"/>
		<updated>2026-07-31T05:04:10Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Created page with &amp;quot;Category:Index  https://en.wikipedia.org/wiki/Goertzel_algorithm&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Index]]&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/Goertzel_algorithm&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=2026_07_23-Meeting&amp;diff=51</id>
		<title>2026 07 23-Meeting</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=2026_07_23-Meeting&amp;diff=51"/>
		<updated>2026-07-31T04:36:08Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Meetings]]&lt;br /&gt;
&lt;br /&gt;
Discussed how the radio side should be structured&lt;br /&gt;
 - Protocol block will call `int frame_packet(unframed_packet* data_source, framed_packet* data_dest) {` after writing message data into data_source&lt;br /&gt;
     - Frame packet will split by MTU, frame each, and schedule the dac interupt&lt;br /&gt;
 - ADC&#039;s raw data buffer needs to be decoded often, we&#039;re really memory limited here&lt;br /&gt;
&lt;br /&gt;
 - We&#039;re going to allocate everything once at the start of main, then propigate the pointers down. This way we only need to allocate big things once, and the rest can just chill&lt;br /&gt;
&lt;br /&gt;
Discussed wanting to do smaller things weekly&lt;br /&gt;
 - Planning to try and finish the skeleton of the dac pathway below, by our meeting next friday at 11:30&lt;br /&gt;
&lt;br /&gt;
[[File:2026_07_23-Meeting.png]]&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=2026_06_24-Meeting&amp;diff=50</id>
		<title>2026 06 24-Meeting</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=2026_06_24-Meeting&amp;diff=50"/>
		<updated>2026-07-31T04:35:31Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Meetings]]&lt;br /&gt;
&lt;br /&gt;
Most of what was decided on was turned into *The* [[Protocol]] spec.&lt;br /&gt;
&lt;br /&gt;
[[File:2026_06_24-Meeting.png]]&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=File:2026_07_23-Meeting.png&amp;diff=49</id>
		<title>File:2026 07 23-Meeting.png</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=File:2026_07_23-Meeting.png&amp;diff=49"/>
		<updated>2026-07-31T04:32:43Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=File:2026_06_24-Meeting.png&amp;diff=48</id>
		<title>File:2026 06 24-Meeting.png</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=File:2026_06_24-Meeting.png&amp;diff=48"/>
		<updated>2026-07-31T04:27:29Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=2026_06_24-Meeting&amp;diff=47</id>
		<title>2026 06 24-Meeting</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=2026_06_24-Meeting&amp;diff=47"/>
		<updated>2026-07-31T04:18:19Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Created page with &amp;quot;Category:Meetings  Most of what was decided on was turned into *The* Protocol spec.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Meetings]]&lt;br /&gt;
&lt;br /&gt;
Most of what was decided on was turned into *The* [[Protocol]] spec.&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=2026_07_23-Meeting&amp;diff=46</id>
		<title>2026 07 23-Meeting</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=2026_07_23-Meeting&amp;diff=46"/>
		<updated>2026-07-23T22:43:30Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Meetings]]&lt;br /&gt;
&lt;br /&gt;
Discussed how the radio side should be structured&lt;br /&gt;
 - Protocol block will call `int frame_packet(unframed_packet* data_source, framed_packet* data_dest) {` after writing message data into data_source&lt;br /&gt;
     - Frame packet will split by MTU, frame each, and schedule the dac interupt&lt;br /&gt;
 - ADC&#039;s raw data buffer needs to be decoded often, we&#039;re really memory limited here&lt;br /&gt;
&lt;br /&gt;
 - We&#039;re going to allocate everything once at the start of main, then propigate the pointers down. This way we only need to allocate big things once, and the rest can just chill&lt;br /&gt;
&lt;br /&gt;
Discussed wanting to do smaller things weekly&lt;br /&gt;
 - Planning to try and finish the skeleton of the dac pathway below, by our meeting next friday at 11:30&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Category:Meetings&amp;diff=45</id>
		<title>Category:Meetings</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Category:Meetings&amp;diff=45"/>
		<updated>2026-07-23T22:11:20Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Index]]&lt;br /&gt;
Meeting Logs&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Category:Meetings&amp;diff=44</id>
		<title>Category:Meetings</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Category:Meetings&amp;diff=44"/>
		<updated>2026-07-23T22:10:24Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Created page with &amp;quot;Meeting Logs&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Meeting Logs&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Meetings&amp;diff=43</id>
		<title>Meetings</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Meetings&amp;diff=43"/>
		<updated>2026-07-23T22:09:13Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Created page with &amp;quot;See https://ratpack.ece.utah.edu/index.php/Category:Meetings&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See https://ratpack.ece.utah.edu/index.php/Category:Meetings&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=2026_07_23-Meeting&amp;diff=42</id>
		<title>2026 07 23-Meeting</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=2026_07_23-Meeting&amp;diff=42"/>
		<updated>2026-07-23T22:08:53Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Created page with &amp;quot;Category:Meetings  Beans!&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Meetings]]&lt;br /&gt;
&lt;br /&gt;
Beans!&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Protocol&amp;diff=40</id>
		<title>Protocol</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Protocol&amp;diff=40"/>
		<updated>2026-06-25T03:25:16Z</updated>

		<summary type="html">&lt;p&gt;Nelson: /* Packet Framing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Index]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
When data should be sent, a packet is generated, this is an arbitrary bit string of arbitrary length. If the packet gets above a threshold, call it an MTU for Max Transfer Unit, then the packet can be split into multiple frames. Each frame is one transmission, containing part or all of a packet, and meta information about itself.&lt;br /&gt;
&lt;br /&gt;
The idea is that by splitting and framing packets, we are able to reduce the amount of continuous air time in use, and reduce issues caused by drift in the bit detection&lt;br /&gt;
&lt;br /&gt;
Some transmissions are framed, others are not to save space. See the [[Protocol#Transaction Format|Transaction Format]] below&lt;br /&gt;
&lt;br /&gt;
== Transaction Format ==&lt;br /&gt;
 A ____ | Unframed, Occasionally broadcast ping to say ready to transmit, maybe once every two minutes or something&lt;br /&gt;
 A &amp;lt;- B | Unframed, Reply to A&#039;s broadcast, just different(?) preamble then A&#039;s callsign, then B&#039;s callsign&lt;br /&gt;
 A -&amp;gt; B | Framed packet, containing list of message hashes&lt;br /&gt;
 A &amp;lt;- B | Framed packet, containing list of message hashes&lt;br /&gt;
 A -&amp;gt; B | Framed packet, List of hashes A does hot have&lt;br /&gt;
 A &amp;lt;- B | Framed packet, List of hashes B does hot have&lt;br /&gt;
 A -&amp;gt; B | Framed packet, Message data for all requested packets B is missing&lt;br /&gt;
 A &amp;lt;- B | Framed packet, Message data for all requested packets A is missing&lt;br /&gt;
&lt;br /&gt;
== Packet Framing ==&lt;br /&gt;
- One frame contains a preamble, header, packet/packet part, footer&lt;br /&gt;
&lt;br /&gt;
=== Preamble ===&lt;br /&gt;
 - More than a standard bit string, could just stop transmitting within the block. This will allow the reciever to calibrate their bit width offset&lt;br /&gt;
 - All messages start this way in some fashion&lt;br /&gt;
 - Used to detect if this is a transmission for us, or another mode like someone just talking we can ignore&lt;br /&gt;
 - It could be worth having a distinct preamble for framed packets vs freeform want-to-talk/reply-to-want-to-talk packets&lt;br /&gt;
 - Something like 11110000110011001010 could be cool, the goal is that it can be listening periodically, then have enough time to spool up the math, and set the timing for where bit edges are&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
 - Contains meta information about the packet/packet part&lt;br /&gt;
 - Size of data block in bits/bytes (TBD)&lt;br /&gt;
 - Hash/Checksum/Parity to verify message integrity (TBD, I vote start with single parity bit, then get more complicated once we&#039;re good at this)&lt;br /&gt;
 - Callsign of sender, need to decide on format. It may be worth finding a standard already in place for amateur radio&lt;br /&gt;
 - Callsign of intended recipient (Do we want this?)&lt;br /&gt;
 - Section to say if we are a part of a split packet, and if so, what number out of how many we are, maybe just reserve two bytes for me/total&lt;br /&gt;
&lt;br /&gt;
=== Packet ===&lt;br /&gt;
 - Arbitrary data, split to fit in frame&#039;s MTU then reconstructed&lt;br /&gt;
&lt;br /&gt;
=== Footer ===&lt;br /&gt;
 - Like header but less&lt;br /&gt;
 - parity/checksum again(?)&lt;br /&gt;
 - Callsign of sender in standard format again -- I think this should be the end of the message so if someone doesn&#039;t know the format they can do it&lt;br /&gt;
     - Maybe beep it out in morse code using more standard fm ptt also&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Protocol&amp;diff=39</id>
		<title>Protocol</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Protocol&amp;diff=39"/>
		<updated>2026-06-25T03:24:51Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Index]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
When data should be sent, a packet is generated, this is an arbitrary bit string of arbitrary length. If the packet gets above a threshold, call it an MTU for Max Transfer Unit, then the packet can be split into multiple frames. Each frame is one transmission, containing part or all of a packet, and meta information about itself.&lt;br /&gt;
&lt;br /&gt;
The idea is that by splitting and framing packets, we are able to reduce the amount of continuous air time in use, and reduce issues caused by drift in the bit detection&lt;br /&gt;
&lt;br /&gt;
Some transmissions are framed, others are not to save space. See the [[Protocol#Transaction Format|Transaction Format]] below&lt;br /&gt;
&lt;br /&gt;
== Transaction Format ==&lt;br /&gt;
 A ____ | Unframed, Occasionally broadcast ping to say ready to transmit, maybe once every two minutes or something&lt;br /&gt;
 A &amp;lt;- B | Unframed, Reply to A&#039;s broadcast, just different(?) preamble then A&#039;s callsign, then B&#039;s callsign&lt;br /&gt;
 A -&amp;gt; B | Framed packet, containing list of message hashes&lt;br /&gt;
 A &amp;lt;- B | Framed packet, containing list of message hashes&lt;br /&gt;
 A -&amp;gt; B | Framed packet, List of hashes A does hot have&lt;br /&gt;
 A &amp;lt;- B | Framed packet, List of hashes B does hot have&lt;br /&gt;
 A -&amp;gt; B | Framed packet, Message data for all requested packets B is missing&lt;br /&gt;
 A &amp;lt;- B | Framed packet, Message data for all requested packets A is missing&lt;br /&gt;
&lt;br /&gt;
== Packet Framing ==&lt;br /&gt;
- One frame contains a preamble, header, packet/packet part, footer&lt;br /&gt;
&lt;br /&gt;
=== Preamble ===&lt;br /&gt;
 - More than a standard bit string, could just stop transmitting within the block. This will allow the reciever to calibrate their bit width offset&lt;br /&gt;
 - All messages start this way in some fashion&lt;br /&gt;
 - Used to detect if this is a transmission for us, or another mode like someone just talking we can ignore&lt;br /&gt;
 - It could be worth having a distinct preamble for framed packets vs freeform want-to-talk/reply-to-want-to-talk packets&lt;br /&gt;
 - Something like 11110000110011001010 could be cool, the goal is that it can be listening periodically, then have enough time to spool up the math, and set the timing for where bit edges are&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
 - Contains meta information about the packet/packet part&lt;br /&gt;
 - Size of data block in bits/bytes (TBD)&lt;br /&gt;
 - Hash/Checksum/Parity to verify message integrity (TBD, I vote start with single parity bit, then get more complicated once we&#039;re good at this)&lt;br /&gt;
 - Callsign of sender, need to decide on format. It may be worth finding a standard already in place for amateur radio&lt;br /&gt;
 - Callsign of intended recipient (Do we want this?)&lt;br /&gt;
 - Section to say if we are a part of a split packet, and if so, what number out of how many we are, maybe just reserve two bytes for me/total&lt;br /&gt;
&lt;br /&gt;
=== Packet ===&lt;br /&gt;
 - Arbitrary data, split to fit in frame&#039;s MTU then reconstructed&lt;br /&gt;
&lt;br /&gt;
=== Footer ===&lt;br /&gt;
 - Like header but less&lt;br /&gt;
 - parity/checksum again(?)&lt;br /&gt;
 - Callsign of sender in standard format again -- I think this should be the end of the message so if someone doesn&#039;t know the format they can do it&lt;br /&gt;
     - Maybe beep it out in morse code using more standard fm ptt also&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Protocol&amp;diff=38</id>
		<title>Protocol</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Protocol&amp;diff=38"/>
		<updated>2026-06-25T03:23:33Z</updated>

		<summary type="html">&lt;p&gt;Nelson: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Index]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
When data should be sent, a packet is generated, this is an arbitrary bit string of arbitrary length. If the packet gets above a threshold, call it an MTU for Max Transfer Unit, then the packet can be split into multiple frames. Each frame is one transmission, containing part or all of a packet, and meta information about itself.&lt;br /&gt;
&lt;br /&gt;
The idea is that by splitting and framing packets, we are able to reduce the amount of continuous air time in use, and reduce issues caused by drift in the bit detection&lt;br /&gt;
&lt;br /&gt;
Some transmissions are framed, others are not to save space. See the [[Protocol#Transaction Format|Transaction Format]] below&lt;br /&gt;
&lt;br /&gt;
== Transaction Format ==&lt;br /&gt;
 A ____ | Unframed, Occasionally broadcast ping to say ready to transmit, maybe once every two minutes or something&lt;br /&gt;
 A &amp;lt;- B | Unframed, Reply to A&#039;s broadcast, just different(?) preamble then A&#039;s callsign, then B&#039;s callsign&lt;br /&gt;
 A -&amp;gt; B | Framed packet, containing list of message hashes&lt;br /&gt;
 A &amp;lt;- B | Framed packet, containing list of message hashes&lt;br /&gt;
 A -&amp;gt; B | Framed packet, List of hashes A does hot have&lt;br /&gt;
 A &amp;lt;- B | Framed packet, List of hashes B does hot have&lt;br /&gt;
 A -&amp;gt; B | Framed packet, Message data for all requested packets B is missing&lt;br /&gt;
 A &amp;lt;- B | Framed packet, Message data for all requested packets A is missing&lt;br /&gt;
&lt;br /&gt;
== Packet Framing ==&lt;br /&gt;
- One frame contains a preamble, header, packet/packet part, footer&lt;br /&gt;
&lt;br /&gt;
=== Preamble ===&lt;br /&gt;
 - Just a standardized bit string&lt;br /&gt;
 - All messages start this way&lt;br /&gt;
 - Lets the receiver set timing offset for bit transitions&lt;br /&gt;
 - Used to detect if this is a transmission for us, or another mode like someone just talking we can ignore&lt;br /&gt;
 - It could be worth having a distinct preamble for framed packets vs freeform want-to-talk/reply-to-want-to-talk packets&lt;br /&gt;
 - Something like 11110000110011001010 could be cool, the goal is that it can be listening periodically, then have enough time to spool up the math, and set the timing for where bit edges are&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
 - Contains meta information about the packet/packet part&lt;br /&gt;
 - Size of data block in bits/bytes (TBD)&lt;br /&gt;
 - Hash/Checksum/Parity to verify message integrity (TBD, I vote start with single parity bit, then get more complicated once we&#039;re good at this)&lt;br /&gt;
 - Callsign of sender, need to decide on format. It may be worth finding a standard already in place for amateur radio&lt;br /&gt;
 - Callsign of intended recipient (Do we want this?)&lt;br /&gt;
 - Section to say if we are a part of a split packet, and if so, what number out of how many we are, maybe just reserve two bytes for me/total&lt;br /&gt;
&lt;br /&gt;
=== Packet ===&lt;br /&gt;
 - Arbitrary data, split to fit in frame&#039;s MTU then reconstructed&lt;br /&gt;
&lt;br /&gt;
=== Footer ===&lt;br /&gt;
 - Like header but less&lt;br /&gt;
 - parity/checksum again(?)&lt;br /&gt;
 - Callsign of sender in standard format again -- I think this should be the end of the message so if someone doesn&#039;t know the format they can do it&lt;br /&gt;
     - Maybe beep it out in morse code using more standard fm ptt also&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Protocol&amp;diff=37</id>
		<title>Protocol</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Protocol&amp;diff=37"/>
		<updated>2026-06-25T03:11:34Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Create protocol page to reflect protocol as decided in 2026_06_24 Meeting (and mostly my whims)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Index]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
When data should be sent, a packet is generated, this is an arbitrary bit string of arbitrary length. If the packet gets above a threshold, call it an MTU for Max Transfer Unit, then the packet can be split into multiple frames. Each frame is one transmission, containing part or all of a packet, and meta information about itself.&lt;br /&gt;
&lt;br /&gt;
The idea is that by splitting and framing packets, we are able to reduce the amount of continuous air time in use, and reduce issues caused by drift in the bit detection&lt;br /&gt;
&lt;br /&gt;
Some transmissions are framed, others are not to save space. See the Transaction section below&lt;br /&gt;
&lt;br /&gt;
TODO: How do you reference sections? would be cool if &amp;quot;Transaction Section&amp;quot; in above line was a link (am writing in vim on the bus with no internet)&lt;br /&gt;
&lt;br /&gt;
=== Transaction ===&lt;br /&gt;
 A ____ | Unframed, Occasionally broadcast ping to say ready to transmit, maybe once every two minutes or something&lt;br /&gt;
 A &amp;lt;- B | Unframed, Reply to A&#039;s broadcast, just different(?) preamble then A&#039;s callsign, then B&#039;s callsign&lt;br /&gt;
 A -&amp;gt; B | Framed packet, containing list of message hashes&lt;br /&gt;
 A &amp;lt;- B | Framed packet, containing list of message hashes&lt;br /&gt;
 A -&amp;gt; B | Framed packet, List of hashes A does hot have&lt;br /&gt;
 A &amp;lt;- B | Framed packet, List of hashes B does hot have&lt;br /&gt;
 A -&amp;gt; B | Framed packet, Message data for all requested packets B is missing&lt;br /&gt;
 A &amp;lt;- B | Framed packet, Message data for all requested packets A is missing&lt;br /&gt;
&lt;br /&gt;
=== Packet Framing ===&lt;br /&gt;
- One frame contains a preamble, header, packet/packet part, footer&lt;br /&gt;
&lt;br /&gt;
==== Preamble ====&lt;br /&gt;
 - Just a standardized bit string&lt;br /&gt;
 - All messages start this way&lt;br /&gt;
 - Lets the receiver set timing offset for bit transitions&lt;br /&gt;
 - Used to detect if this is a transmission for us, or another mode like someone just talking we can ignore&lt;br /&gt;
 - It could be worth having a distinct preamble for framed packets vs freeform want-to-talk/reply-to-want-to-talk packets&lt;br /&gt;
 - Something like 11110000110011001010 could be cool, the goal is that it can be listening periodically, then have enough time to spool up the math, and set the timing for where bit edges are&lt;br /&gt;
&lt;br /&gt;
==== Header ====&lt;br /&gt;
 - Contains meta information about the packet/packet part&lt;br /&gt;
 - Size of data block in bits/bytes (TBD)&lt;br /&gt;
 - Hash/Checksum/Parity to verify message integrity (TBD, I vote start with single parity bit, then get more complicated once we&#039;re good at this)&lt;br /&gt;
 - Callsign of sender, need to decide on format. It may be worth finding a standard already in place for amateur radio&lt;br /&gt;
 - Callsign of intended recipient (Do we want this?)&lt;br /&gt;
 - Section to say if we are a part of a split packet, and if so, what number out of how many we are, maybe just reserve two bytes for me/total&lt;br /&gt;
&lt;br /&gt;
==== Packet ====&lt;br /&gt;
 - Arbitrary data, See transaction above&lt;br /&gt;
&lt;br /&gt;
==== Footer ====&lt;br /&gt;
 - Like header but less&lt;br /&gt;
 - parity/checksum again(?)&lt;br /&gt;
 - Callsign of sender in standard format again -- I think this should be the end of the message so if someone doesn&#039;t know the format they can do it&lt;br /&gt;
     - Maybe beep it out in morse code using more standard fm ptt also&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Expenses&amp;diff=36</id>
		<title>Expenses</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Expenses&amp;diff=36"/>
		<updated>2026-06-09T21:33:01Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Created page with &amp;quot;== List of Expenses ==    == Nelson&amp;#039;s problem: not to be split == - $5.23 -- remainder for stm32&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== List of Expenses ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nelson&#039;s problem: not to be split ==&lt;br /&gt;
- $5.23 -- remainder for stm32&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Shared_Documents&amp;diff=25</id>
		<title>Shared Documents</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Shared_Documents&amp;diff=25"/>
		<updated>2026-04-14T22:24:25Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Index]]&lt;br /&gt;
&lt;br /&gt;
 Final Presentation: https://docs.google.com/presentation/d/1z0RWML4LscDDLyI2OR0ecD0lyGYomgWG8lHGuEDNWdA/edit?usp=sharing&lt;br /&gt;
&lt;br /&gt;
 Final Proposal: https://docs.google.com/document/d/14ydoZ-L2-1_XbjGCP8m4bqDTo7D6e-AzSidDjeT5dfk/edit?usp=sharing&lt;br /&gt;
 Will be typeset later, this is just for shared when writing words&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Shared_Documents&amp;diff=24</id>
		<title>Shared Documents</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Shared_Documents&amp;diff=24"/>
		<updated>2026-04-14T21:37:48Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
 Final Presentation: https://docs.google.com/presentation/d/1z0RWML4LscDDLyI2OR0ecD0lyGYomgWG8lHGuEDNWdA/edit?usp=sharing&lt;br /&gt;
&lt;br /&gt;
 Final Proposal: https://docs.google.com/document/d/14ydoZ-L2-1_XbjGCP8m4bqDTo7D6e-AzSidDjeT5dfk/edit?usp=sharing&lt;br /&gt;
 Will be typeset later, this is just for shared when writing words&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Shared_Documents&amp;diff=23</id>
		<title>Shared Documents</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Shared_Documents&amp;diff=23"/>
		<updated>2026-04-14T21:34:17Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Final Presentation: https://docs.google.com/presentation/d/1z0RWML4LscDDLyI2OR0ecD0lyGYomgWG8lHGuEDNWdA/edit?usp=sharing&lt;br /&gt;
&lt;br /&gt;
Final Proposal: https://docs.google.com/document/d/14ydoZ-L2-1_XbjGCP8m4bqDTo7D6e-AzSidDjeT5dfk/edit?usp=sharing&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Shared_Documents&amp;diff=22</id>
		<title>Shared Documents</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Shared_Documents&amp;diff=22"/>
		<updated>2026-04-14T21:33:39Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Created page with &amp;quot;   Final Proposal: - https://docs.google.com/document/d/14ydoZ-L2-1_XbjGCP8m4bqDTo7D6e-AzSidDjeT5dfk/edit?usp=sharing&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final Proposal:&lt;br /&gt;
- https://docs.google.com/document/d/14ydoZ-L2-1_XbjGCP8m4bqDTo7D6e-AzSidDjeT5dfk/edit?usp=sharing&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Category:Index&amp;diff=21</id>
		<title>Category:Index</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Category:Index&amp;diff=21"/>
		<updated>2026-04-14T21:26:31Z</updated>

		<summary type="html">&lt;p&gt;Nelson: /* TO DO: Make Nelson give us sysop permissions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2026 ECE RatPack Radio Senior Project WIki&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Presentations&amp;diff=7</id>
		<title>Presentations</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Presentations&amp;diff=7"/>
		<updated>2026-04-08T00:35:28Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Created page with &amp;quot;= Presentations we&amp;#039;ve done =  == Final Presentation == - https://docs.google.com/presentation/d/1z0RWML4LscDDLyI2OR0ecD0lyGYomgWG8lHGuEDNWdA/edit?usp=sharing&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Presentations we&#039;ve done =&lt;br /&gt;
&lt;br /&gt;
== Final Presentation ==&lt;br /&gt;
- https://docs.google.com/presentation/d/1z0RWML4LscDDLyI2OR0ecD0lyGYomgWG8lHGuEDNWdA/edit?usp=sharing&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Main_Page&amp;diff=6</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Main_Page&amp;diff=6"/>
		<updated>2026-03-06T19:25:50Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Redirected page to Category:Index&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[:Category:Index]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;MediaWiki has been installed.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Category:Index&amp;diff=4</id>
		<title>Category:Index</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Category:Index&amp;diff=4"/>
		<updated>2026-03-06T19:22:43Z</updated>

		<summary type="html">&lt;p&gt;Nelson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2026 ECE RatPack Radio Senior Project WIki&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Category:Index&amp;diff=3</id>
		<title>Category:Index</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Category:Index&amp;diff=3"/>
		<updated>2026-03-06T19:22:09Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Created blank page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
	<entry>
		<id>https://ratpack.ece.utah.edu/index.php?title=Overview&amp;diff=2</id>
		<title>Overview</title>
		<link rel="alternate" type="text/html" href="https://ratpack.ece.utah.edu/index.php?title=Overview&amp;diff=2"/>
		<updated>2026-03-06T19:16:47Z</updated>

		<summary type="html">&lt;p&gt;Nelson: Created page with &amp;quot;Category:Index  Yo we have a pretty cool project&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Index]]&lt;br /&gt;
&lt;br /&gt;
Yo we have a pretty cool project&lt;/div&gt;</summary>
		<author><name>Nelson</name></author>
	</entry>
</feed>