This commit is contained in:
nagumii 2024-12-15 14:49:51 +02:00
commit 8eb19fd9a0
3 changed files with 241 additions and 999 deletions

255
README.md
View file

@ -1,183 +1,78 @@
---
---
<img src="https://github.com/noon92/luckfox/blob/main/luckfox_pico_mini_tiny_linux_board.jpg" width="400">
<h1 id="femtofox----subsubthe-tiny-low-power-linux-meshtastic-node">Femtofox &nbsp;&nbsp;&nbsp;<sub><sub>The tiny, low power Linux Meshtastic node</sub></sub></h1>
<h4 id="the-luckfox-pico-mini-is-a-compact-and-power-efficient-linux-capable-board-capable-of-running-ubuntu.-femtofox-is-an-expansion-of-the-luckfoxs-capabilities-combining-a-customized-ubuntu-image-with-a-custom-pcb-integrating-it-with-a-lora-radio-to-create-a-power-efficient-cheap-and-small-meshtastic-linux-node.">The Luckfox Pico Mini is a compact and power efficient Linux capable board, capable of running Ubuntu. Femtofox is an expansion of the Luckfox’s capabilities, combining a customized Ubuntu image with a custom PCB, integrating it with a LoRa radio to create a power efficient, cheap and small Meshtastic Linux node.</h4>
<p><strong>Features:</strong></p>
<ul>
<li>Tiny size (63x54mm for the Kitchen Sink Edition, 65x30mm for the Smol Edition). Roughly equivalent to a Raspberry Pi and Pi Zero.</li>
<li>Power efficiency (~0.38w)</li>
<li>Full Linux CLI (Ubuntu) via our pre-built Foxbuntu image</li>
<li>Meshtastic native client support via SPI</li>
<li>USB host support</li>
<li>Wifi over USB</li>
<li>RTC support</li>
</ul>
<p><strong>Accomplished:</strong></p>
<ul>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" checked="true" disabled=""> Meshtastic native client controlling a LoRa radio (see <a href="supported_hardware.md">supported hardware</a>)</li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" checked="true" disabled=""> WIFI over USB (see <a href="supported_hardware.md">supported hardware</a>)</li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" checked="true" disabled=""> Ethernet over USB (see <a href="supported_hardware.md">supported hardware</a>)</li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" checked="true" disabled=""> Ethernet over pins (see <em>Networking</em> below and wiring diagram at bottom of page)</li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" checked="true" disabled=""> UART communications with Meshtastic nodes (2 pin pairs) such as RAK Wisblock</li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" checked="true" disabled=""> USB serial communications with Meshtastic nodes (see <a href="supported_hardware.md">supported hardware</a>)</li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" checked="true" disabled=""> USB mass storage</li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" checked="true" disabled=""> Real time clock (RTC) support (see <a href="supported_hardware.md">supported hardware</a>)</li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" checked="true" disabled=""> Activity LED disabled. User LED will blink for 5 seconds when boot is complete</li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" checked="true" disabled=""> Pressing the “BOOT” button triggers reboot</li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" checked="true" disabled=""> Ability to reconfigure wifi via USB flash drive</li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" checked="true" disabled=""> Meshtasticd to run LoRa radio over SPI (accomplished, updated image and instructions coming soon)</li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" checked="true" disabled=""> Allow editing of config files by plugging in thumb drive</li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" checked="true" disabled=""> Ability to activate or deactivate WIFI via Meshtastic admin</li>
</ul>
<p><strong>Project goals:</strong></p>
<ul>
<li>A solar-deployable Meshtastic node running Linux, without needing a giant solar panel / battery</li>
<li>Wifi capabilities (with ability to disable/enable wifi via mesh for power savings)</li>
</ul>
<p>Login for the images is <code>femto:fox</code>. Root is <code>root:root</code>.</p>
<p>The preconfigured images will reboot every 24 hours. If the internal clock is accurate, this will be at 3am. Reboot timing is set in <code>crontab</code>. To keep accurate time, an RTC module can be installed (see <a href="supported_hardware.md">supported hardware</a>) or internet connectivity can be maintained for NTP. If no authoritative time source is found, time will be set to 2024-01-01 00:00 on boot.</p>
<h3 id="supported-hardware---click-here"><a href="supported_hardware.md">Supported hardware - click here</a></h3>
<h3 id="networking">Networking:</h3>
<p>There are four methods to get online:</p>
<ol>
<li>Ethernet over USB - most adapters should be supported, but I’ve only tested the RTL8152 chipset.</li>
<li>USB wifi (see <a href="supported_hardware.md">supported hardware</a>).</li>
<li>Preconfigured Ubuntu images: ethernet via the castellated pins at the bottom of the board. See pinout at the bottom of this readme.</li>
<li>RDNIS via usb - <a href="https://web.archive.org/web/20241006173648/https://wiki.luckfox.com/Luckfox-Pico/Luckfox-Pico-Network-Sharing-1/">see this guide</a>. Note that in the preconfigured images USB is set to host mode, so you’ll have to switch back to peripheral with <code>sudo luckfox-config</code>. This is not really recommended, but can be used in a pinch.</li>
</ol>
<h3 id="installation---connection-to-meshtastic-node-via-uart-or-usb">Installation - connection to Meshtastic node via UART or USB:</h3>
<ol>
<li>Download the most recent OS image in <a href="https://github.com/noon92/femtofox/releases">releases</a>.</li>
<li>Flash the image your MicroSD card using <a href="https://etcher.balena.io/">Balena Etcher</a> or your favorite flashing program. You will likely get a warning that the image appears to be invalid or has no partition table. This is normal.</li>
<li>Insert the microSD card into the Luckfox Pico Mini.</li>
<li>Configure the system with a USB drive as described in <a href="usb_config.md">USB Configuration Tool</a>.</li>
</ol>
<h3 id="pinout">Pinout:</h3>
<table>
<thead>
<tr>
<th>Pin #</th>
<th>Pin ID</th>
<th>Function</th>
<th>Luckfox</th>
<th>Pin #</th>
<th>Pin ID</th>
<th>Function</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>VBus</td>
<td>5V in/out</td>
<td></td>
<td>22</td>
<td>1V8</td>
<td>1.8V out</td>
</tr>
<tr>
<td>2</td>
<td>GND</td>
<td></td>
<td></td>
<td>21</td>
<td>GND</td>
<td></td>
</tr>
<tr>
<td>3</td>
<td>3V3</td>
<td>3.3V out</td>
<td></td>
<td>20</td>
<td>4C1</td>
<td>1v8 IO, SARADC</td>
</tr>
<tr>
<td>4/42</td>
<td>1B2</td>
<td>Debug UART2-TX</td>
<td></td>
<td>19</td>
<td>4C0</td>
<td>1v8 IO, SARADC</td>
</tr>
<tr>
<td>5/43</td>
<td>1B3</td>
<td>Debug UART2-RX</td>
<td></td>
<td>18/4</td>
<td>0A4</td>
<td>3v3 IO</td>
</tr>
<tr>
<td>6/48</td>
<td>1C0</td>
<td>CS0, IO</td>
<td></td>
<td>17/55</td>
<td>1C7</td>
<td>IRQ, IO</td>
</tr>
<tr>
<td>7/49</td>
<td>1C1</td>
<td>CLK, IO</td>
<td></td>
<td>16/54</td>
<td>1C6</td>
<td>BUSY, IO</td>
</tr>
<tr>
<td>8/50</td>
<td>1C2</td>
<td>MOSI, IO</td>
<td></td>
<td>15/59</td>
<td>1D3</td>
<td>i2c SCL</td>
</tr>
<tr>
<td>9/51</td>
<td>1C3</td>
<td>MISO, IO</td>
<td></td>
<td>14/58</td>
<td>1D2</td>
<td>i2c SDA</td>
</tr>
<tr>
<td>10/52</td>
<td>1C4</td>
<td>UART4-TX</td>
<td></td>
<td>13/57</td>
<td>1D1</td>
<td>UART3-RX, NRST</td>
</tr>
<tr>
<td>11/53</td>
<td>1C5</td>
<td>UART4-RX</td>
<td></td>
<td>12/56</td>
<td>1D0</td>
<td>UART3-TX, RXEN</td>
</tr>
</tbody>
</table><p>Pin ID explanation: <strong>1C6</strong> = GPIO bank <strong>1</strong>, group <strong>C</strong>, pin <strong>6</strong>.<br>
In Meshtasticd’s config.yaml we use GPIO bank 1, and subtract 32 from the pin number.</p>
<p><img src="https://github.com/noon92/luckfox/blob/main/luckfox_pinout.png" alt="pinout"><br>
<img src="https://github.com/noon92/luckfox/blob/main/luckfox_pico_mini_original_wiring_diagram.jpg" alt="pinout"></p>
<blockquote>
<p>[!NOTE]<br>
The information on this page is given without warranty or guarantee. Links to vendors of products are for informational purposes only.<br>
Meshtastic® is a registered trademark of Meshtastic LLC. Meshtastic software components are released under various licenses, see GitHub for details. No warranty is provided - use at your own risk.</p>
</blockquote>
# Femtofox &nbsp;&nbsp;&nbsp;<sub><sub>The tiny, low power Linux Meshtastic node
#### The Luckfox Pico Mini is a compact and power efficient Linux capable board, capable of running Ubuntu. Femtofox is an expansion of the Luckfox's capabilities, combining a customized Ubuntu image with a custom PCB, integrating it with a LoRa radio to create a power efficient, cheap and small Meshtastic Linux node.
**Features:**
* Tiny size (63x54mm for the Kitchen Sink Edition, 65x30mm for the Smol Edition). Roughly equivalent to a Raspberry Pi and Pi Zero.
* Power efficiency (~0.38w)
* Full Linux CLI (Ubuntu) via our pre-built Foxbuntu image
* Meshtastic native client support via SPI
* USB host support
* Wifi over USB
* RTC support
**Accomplished:**
- [x] Meshtastic native client controlling a LoRa radio (see [supported hardware](supported_hardware.md))
- [x] WIFI over USB (see [supported hardware](supported_hardware.md))
- [x] Ethernet over USB (see [supported hardware](supported_hardware.md))
- [x] Ethernet over pins (see *Networking* below and wiring diagram at bottom of page)
- [x] UART communications with Meshtastic nodes (2 pin pairs) such as RAK Wisblock
- [x] USB serial communications with Meshtastic nodes (see [supported hardware](supported_hardware.md))
- [x] USB mass storage
- [x] Real time clock (RTC) support (see [supported hardware](supported_hardware.md))
- [x] Activity LED disabled. User LED will blink for 5 seconds when boot is complete
- [x] Pressing the "BOOT" button triggers reboot
- [x] Ability to reconfigure wifi via USB flash drive
- [x] Meshtasticd to run LoRa radio over SPI (accomplished, updated image and instructions coming soon)
- [x] Allow editing of config files by plugging in thumb drive
- [x] Ability to activate or deactivate WIFI via Meshtastic admin
**Project goals:**
* A solar-deployable Meshtastic node running Linux, without needing a giant solar panel / battery
* Wifi capabilities (with ability to disable/enable wifi via mesh for power savings)
Login for the images is `femto:fox`. Root is `root:root`.
The preconfigured images will reboot every 24 hours. If the internal clock is accurate, this will be at 3am. Reboot timing is set in `crontab`. To keep accurate time, an RTC module can be installed (see [supported hardware](supported_hardware.md)) or internet connectivity can be maintained for NTP. If no authoritative time source is found, time will be set to 2024-01-01 00:00 on boot.
### [Supported hardware - click here](supported_hardware.md)
### Networking:
There are four methods to get online:
1. Ethernet over USB - most adapters should be supported, but I've only tested the RTL8152 chipset.
2. USB wifi (see [supported hardware](supported_hardware.md)).
3. Preconfigured Ubuntu images: ethernet via the castellated pins at the bottom of the board. See pinout at the bottom of this readme.
4. RDNIS via usb - [see this guide](https://web.archive.org/web/20241006173648/https://wiki.luckfox.com/Luckfox-Pico/Luckfox-Pico-Network-Sharing-1/). Note that in the preconfigured images USB is set to host mode, so you'll have to switch back to peripheral with `sudo luckfox-config`. This is not really recommended, but can be used in a pinch.
### Installation - connection to Meshtastic node via UART or USB:
1. Download the most recent OS image in [releases](https://github.com/noon92/femtofox/releases).
2. Flash the image your MicroSD card using [Balena Etcher](https://etcher.balena.io/) or your favorite flashing program. You will likely get a warning that the image appears to be invalid or has no partition table. This is normal.
3. Insert the microSD card into the Luckfox Pico Mini.
4. Configure the system with a USB drive as described in [USB Configuration Tool](usb_config.md).
### Pinout:
|Pin #|Pin ID |Function |Luckfox |Pin #|Pin ID |Function |
|-----|-------|--------------|--------|-----|-------|--------------|
|1 |VBus |5V in/out | |22 |1V8 |1.8V out |
|2 |GND | | |21 |GND | |
|3 |3V3 |3.3V out | |20 |4C1 |1v8 IO, SARADC|
|4/42 |1B2 |Debug UART2-TX| |19 |4C0 |1v8 IO, SARADC|
|5/43 |1B3 |Debug UART2-RX| |18/4 |0A4 |3v3 IO |
|6/48 |1C0 |CS0, IO | |17/55|1C7 |IRQ, IO |
|7/49 |1C1 |CLK, IO | |16/54|1C6 |BUSY, IO |
|8/50 |1C2 |MOSI, IO | |15/59|1D3 |i2c SCL |
|9/51 |1C3 |MISO, IO | |14/58|1D2 |i2c SDA |
|10/52|1C4 |UART4-TX | |13/57|1D1 |UART3-RX, NRST|
|11/53|1C5 |UART4-RX | |12/56|1D0 |UART3-TX, RXEN|
Pin ID explanation: **1C6** = GPIO bank **1**, group **C**, pin **6**.
In Meshtasticd's config.yaml we use GPIO bank 1, and subtract 32 from the pin number.
![pinout](https://github.com/noon92/luckfox/blob/main/luckfox_pinout.png)
![pinout](https://github.com/noon92/luckfox/blob/main/luckfox_pico_mini_original_wiring_diagram.jpg)
> [!NOTE]
> The information on this page is given without warranty or guarantee. Links to vendors of products are for informational purposes only.
> Meshtastic® is a registered trademark of Meshtastic LLC. Meshtastic software components are released under various licenses, see GitHub for details. No warranty is provided - use at your own risk.

View file

@ -1,714 +1,107 @@
---
## Supported Hardware
| Hardware | Confirmed working | Expected to work | Notes |
|-|-|-|--|
|LoRa radios (working with Meshtasticd)|<li>[Waveshare RPi LoRa hat without GNSS](https://www.waveshare.com/sx1262-lorawan-hat.htm?sku=22002)*<li>[Seeed Wio SX1262](https://www.seeedstudio.com/Wio-SX1262-Wireless-Module-p-5981.html)<li>[Ebyte E220900M30S](https://aliexpress.com/item/4000543921245.html)<li>AI Thinker RA-01SH<li>[Heltec HT-RA62](https://www.aliexpress.com/item/1005005445349105.html)|<li>Ebyte E22-900mm22s<li>[Ebyte E22-900m22s](https://www.aliexpress.com/item/1005001808069127.html)<li>Any SPI LoRa radio that's Meshtastic compatible|*Waveshare RPi hat is not recommended as it has issues with sending longer messages.| |
|MicroSD cards|<li>[Kingston Endurance 32gb](https://www.kingston.com/en/memory-cards/high-endurance-microsd-card)<li>[Sandisk Ultra UHS-I 32gb](https://shop.sandisk.com/products/memory-cards/microsd-cards/sandisk-ultra-uhs-i-microsd?sku=SDSQUA4-032G-GN6MA)|Any reasonably fast (UHS-I or better) card with 8gb or more|Stick with reputable manufacturers (Kingston, PNY Samsung, Sandisk, Transcend...)<br>The faster the better! Consider sticking with "endurance" cards, especially for remotely deployed nodes.| |
|RTC (real time clock)|<li>[DS3231M](https://vi.aliexpress.com/item/1005007143842437.html)<li>[DS1307](https://vi.aliexpress.com/item/1005007143542894.html)|DS1337, DS1338, DS1340, other DS3231 variants |Some DS3231 modules are listed as having a supercapacitor - these are usually actually lithium coin cells.| |
|Meshtastic nodes|USB+UART: [RAK4631 with RAK19007 or RAK19003 base board](https://store.rakwireless.com/products/wisblock-meshtastic-starter-kit)| |RAK4630 and 4631 are the same.| |
|USB wifi adapter chipsets|||See below | |
|Misc. hardware|<li>USB hubs (powered or not)<li>Thumb drives<li>SD card readers||If power draw exceeds supply, the device will reboot, bootloop or hard crash. Unpowered USB hubs seem to be notorious for causing reboots.| |
### Wifi chipsets
The following wifi chipsets/devices have their drivers included in the OS images. Most of these have not been tested. Note that power consumption metrics are for a specific version of a chipset and may not apply to all implementations.
---
<h2 id="supported-hardware">Supported Hardware</h2>
<table>
<thead>
<tr>
<th>Hardware</th>
<th>Confirmed working</th>
<th>Expected to work</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>LoRa radios (working with Meshtasticd)</td>
<td><li><a href="https://www.waveshare.com/sx1262-lorawan-hat.htm?sku=22002">Waveshare RPi LoRa hat without GNSS</a>*</li><li><a href="https://www.seeedstudio.com/Wio-SX1262-Wireless-Module-p-5981.html">Seeed Wio SX1262</a></li><li><a href="https://aliexpress.com/item/4000543921245.html">Ebyte E220900M30S</a></li><li>AI Thinker RA-01SH</li><li><a href="https://www.aliexpress.com/item/1005005445349105.html">Heltec HT-RA62</a></li></td>
<td><li>Ebyte E22-900mm22s</li><li><a href="https://www.aliexpress.com/item/1005001808069127.html">Ebyte E22-900m22s</a></li><li>Any SPI LoRa radio that’s Meshtastic compatible</li></td>
<td>*Waveshare RPi hat is not recommended as it has issues with sending longer messages.</td>
</tr>
<tr>
<td>MicroSD cards</td>
<td><li><a href="https://www.kingston.com/en/memory-cards/high-endurance-microsd-card">Kingston Endurance 32gb</a></li><li><a href="https://shop.sandisk.com/products/memory-cards/microsd-cards/sandisk-ultra-uhs-i-microsd?sku=SDSQUA4-032G-GN6MA">Sandisk Ultra UHS-I 32gb</a></li></td>
<td>Any reasonably fast (UHS-I or better) card with 8gb or more</td>
<td>Stick with reputable manufacturers (Kingston, PNY Samsung, Sandisk, Transcend…)<br>The faster the better! Consider sticking with “endurance” cards, especially for remotely deployed nodes.</td>
</tr>
<tr>
<td>RTC (real time clock)</td>
<td><li><a href="https://vi.aliexpress.com/item/1005007143842437.html">DS3231M</a></li><li><a href="https://vi.aliexpress.com/item/1005007143542894.html">DS1307</a></li></td>
<td>DS1337, DS1338, DS1340, other DS3231 variants</td>
<td>Some DS3231 modules are listed as having a supercapacitor - these are usually actually lithium coin cells.</td>
</tr>
<tr>
<td>Meshtastic nodes</td>
<td>USB+UART: <a href="https://store.rakwireless.com/products/wisblock-meshtastic-starter-kit">RAK4631 with RAK19007 or RAK19003 base board</a></td>
<td></td>
<td>RAK4630 and 4631 are the same.</td>
</tr>
<tr>
<td>USB wifi adapter chipsets</td>
<td></td>
<td></td>
<td>See below</td>
</tr>
<tr>
<td>Misc. hardware</td>
<td><li>USB hubs (powered or not)</li><li>Thumb drives</li><li>SD card readers</li></td>
<td></td>
<td>If power draw exceeds supply, the device will reboot, bootloop or hard crash. Unpowered USB hubs seem to be notorious for causing reboots.</td>
</tr>
</tbody>
</table><h3 id="wifi-chipsets">Wifi chipsets</h3>
<p>The following wifi chipsets/devices have their drivers included in the OS images. Most of these have not been tested. Note that power consumption metrics are for a specific version of a chipset and may not apply to all implementations.</p>
<table>
<thead>
<tr>
<th>Chipset:</th>
<th>Tested?</th>
<th>Recommended?</th>
<th>Power usage</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><u>Realtek:</u></strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8187</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8187b</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8188[cr]u</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8188cu</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8188ee</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8188eu<br>rtl8188eus<br>rtl8188cus</td>
<td>✔️</td>
<td>✔️</td>
<td>Idle: 0.25w<br>TXing: 0.4w<br>Off: 0.026w</td>
<td>Model tested:<br><a href="https://techinfodepot.shoutwiki.com/wiki/TP-LINK_TL-WN725N_v2">TP-LINK TL-WN725N <strong>V2</strong></a>: working<br><a href="https://techinfodepot.shoutwiki.com/wiki/TP-LINK_TL-WN722N_v1.x">TP-Link TL-WR722N <strong>V4</strong></a>: working (v2, v3 <em>should</em> be identical)</td>
</tr>
<tr>
<td>rtl8188ru</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl819[12]cu</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8191cu</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8192ce</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8192cu</td>
<td>✔️</td>
<td>❔</td>
<td></td>
<td>Tested:<br><a href="https://techinfodepot.shoutwiki.com/wiki/Edimax_EW-7811Un">Edimax EW-7811Un</a>: working</td>
</tr>
<tr>
<td>rtl8192de</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8192e</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8192ee</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8192eu</td>
<td>✔️</td>
<td>❌</td>
<td></td>
<td>Buggy</td>
</tr>
<tr>
<td>rtl8192se</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8273,8188,8191,8192</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8712u</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8723ae</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8723au</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8723be</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8821ae</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rtl8821au</td>
<td>✔️</td>
<td>❌</td>
<td></td>
<td>Tested:<br><a href="https://www.tp-link.com/us/home-networking/usb-adapter/archer-t2u-plus/">TP-Link Archer T2U Plus</a>: <strong>NOT</strong> working</td>
</tr>
<tr>
<td>rtl8xxx other</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong><u>Mediatek:</u></strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>mt7601u</td>
<td>✔️</td>
<td>✔️</td>
<td>Idle: 0.739w</td>
<td>Tested:<br><a href="https://www.amazon.com/dp/B0BNFKJPXS">Genbasic RF 2A4M1</a>: working</td>
</tr>
<tr>
<td>mt76x0u</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>mt76x2u</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>mt7663s</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>mt7663u</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong><u>Atheros:</u></strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>ar5008</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>ar5523</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>ar6003</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>ar6004</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>ar9001</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>ar9002</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>ar9170</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>ar9271</td>
<td>✔️</td>
<td>❔</td>
<td></td>
<td>Tested:<br><a href="https://techinfodepot.shoutwiki.com/wiki/TP-LINK_TL-WN722N_v1.x">TP-Link TL-WR722N <strong>V1</strong></a>: working<br><a href="https://www.thinkpenguin.com/gnu-linux/penguin-wireless-n-usb-adapter-gnu-linux-tpe-n150usb">Penguin Wireless TPE-N150USB</a>: buggy<br><a href="https://www.aliexpress.com/item/1005007556237899.html">Generic AR9271 w/SMA antenna</a>: buggy<br>Work in progress</td>
</tr>
<tr>
<td>ar9k</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>ath11k</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>ar10k</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>wcn3660</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>wcn3680</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong><u>Ralink:</u></strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rt2501/rt73</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rt2571</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rt2571w</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rt2572</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rt2573</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rt25xx</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rt2671</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rt27xx</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rt28xx</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rt28xx unknown</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rt30xx</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rt3070</td>
<td>✔️</td>
<td>❔</td>
<td></td>
<td>Tested:<br><a href="https://techinfodepot.shoutwiki.com/wiki/ALFA_Network_AWUS036NEH">Alfa AWUS036NEH</a>: buggy</td>
</tr>
<tr>
<td>rt33xx</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rt3573</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rt35xx</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rt53xx</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>rt55xx</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong><u>Atmel:</u></strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>at76c503</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>at76c505</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>at76c505a</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong><u>Microchip Atmel:</u></strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>wilc1000</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong><u>Zydas:</u></strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>zd1201</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>zd1211</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>zd1211b</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong><u>RNDIS USB:</u></strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Asus WL169gE</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Belkin F5D7051</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>BT Voyager 1055</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Buffalo WLI-U2-KG125S</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>BUFFALO WLI-USB-G54</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Eminent EM4045</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Linksys WUSB54GSC</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Linksys WUSB54GSv1</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Linksys WUSB54GSv2</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>U.S. Robotics USR5420</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>U.S. Robotics USR5421</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
|Chipset: |Tested?|Recommended?|Power usage |Notes|
|-----------------------|-------|------------|------------|-----|
|**<u>Realtek:** | | | | |
|rtl8187 | | | | |
|rtl8187b | | | | |
|rtl8188[cr]u | | | | |
|rtl8188cu | | | | |
|rtl8188ee | | | | |
|rtl8188eu<br>rtl8188eus<br>rtl8188cus|✔️|✔️|Idle: 0.25w<br>TXing: 0.4w<br>Off: 0.026w|Model tested:<br>[TP-LINK TL-WN725N **V2**](https://techinfodepot.shoutwiki.com/wiki/TP-LINK_TL-WN725N_v2): working<br>[TP-Link TL-WR722N **V4**](https://techinfodepot.shoutwiki.com/wiki/TP-LINK_TL-WN722N_v1.x): working (v2, v3 *should* be identical)|
|rtl8188ru | | | | |
|rtl819[12]cu | | | | |
|rtl8191cu | | | | |
|rtl8192ce | | | | |
|rtl8192cu |✔️ |❔ | |Tested:<br>[Edimax EW-7811Un](https://techinfodepot.shoutwiki.com/wiki/Edimax_EW-7811Un): working|
|rtl8192de | | | | |
|rtl8192e | | | | |
|rtl8192ee | | | | |
|rtl8192eu |✔️ |❌ | |Buggy|
|rtl8192se | | | | |
|rtl8273,8188,8191,8192 | | | | |
|rtl8712u | | | | |
|rtl8723ae | | | | |
|rtl8723au | | | | |
|rtl8723be | | | | |
|rtl8821ae | | | | |
|rtl8821au |✔️ |❌ | |Tested:<br>[TP-Link Archer T2U Plus](https://www.tp-link.com/us/home-networking/usb-adapter/archer-t2u-plus/): **NOT** working|
|rtl8xxx other | | | | |
| | | | | |
|**<u>Mediatek:** | | | | |
|mt7601u |✔️ |✔️ |Idle: 0.739w|Tested:<br>[Genbasic RF 2A4M1](https://www.amazon.com/dp/B0BNFKJPXS): working|
|mt76x0u | | | | |
|mt76x2u | | | | |
|mt7663s | | | | |
|mt7663u | | | | |
| | | | | |
|**<u>Atheros:** | | | | |
|ar5008 | | | | |
|ar5523 | | | | |
|ar6003 | | | | |
|ar6004 | | | | |
|ar9001 | | | | |
|ar9002 | | | | |
|ar9170 | | | | |
|ar9271 |✔️ |❔ | |Tested:<br>[TP-Link TL-WR722N **V1**](https://techinfodepot.shoutwiki.com/wiki/TP-LINK_TL-WN722N_v1.x): working<br>[Penguin Wireless TPE-N150USB](https://www.thinkpenguin.com/gnu-linux/penguin-wireless-n-usb-adapter-gnu-linux-tpe-n150usb): buggy<br>[Generic AR9271 w/SMA antenna](https://www.aliexpress.com/item/1005007556237899.html): buggy<br>Work in progress|
|ar9k | | | | |
|ath11k | | | | |
|ar10k | | | | |
|wcn3660 | | | | |
|wcn3680 | | | | |
| | | | | |
|**<u>Ralink:** | | | | |
|rt2501/rt73 | | | | |
|rt2571 | | | | |
|rt2571w | | | | |
|rt2572 | | | | |
|rt2573 | | | | |
|rt25xx | | | | |
|rt2671 | | | | |
|rt27xx | | | | |
|rt28xx | | | | |
|rt28xx unknown | | | | |
|rt30xx | | | | |
|rt3070 |✔️ |❔ | |Tested:<br>[Alfa AWUS036NEH](https://techinfodepot.shoutwiki.com/wiki/ALFA_Network_AWUS036NEH): buggy|
|rt33xx | | | | |
|rt3573 | | | | |
|rt35xx | | | | |
|rt53xx | | | | |
|rt55xx | | | | |
| | | | | |
|**<u>Atmel:** | | | | |
|at76c503 | | | | |
|at76c505 | | | | |
|at76c505a | | | | |
| | | | | |
|**<u>Microchip Atmel:**| | | | |
|wilc1000 | | | | |
| | | | | |
|**<u>Zydas:** | | | | |
|zd1201 | | | | |
|zd1211 | | | | |
|zd1211b | | | | |
| | | | | |
|**<u>RNDIS USB:** | | | | |
|Asus WL169gE | | | | |
|Belkin F5D7051 | | | | |
|BT Voyager 1055 | | | | |
|Buffalo WLI-U2-KG125S | | | | |
|BUFFALO WLI-USB-G54 | | | | |
|Eminent EM4045 | | | | |
|Linksys WUSB54GSC | | | | |
|Linksys WUSB54GSv1 | | | | |
|Linksys WUSB54GSv2 | | | | |
|U.S. Robotics USR5420 | | | | |
|U.S. Robotics USR5421 | | | | |

View file

@ -1,29 +1,23 @@
---
## USB Configuration Tool
To configure some Femtofox settings such as wifi, you can insert a USB flash drive containing a configuration file. The system will automatically recognize, mount and implement the settings you specify.
Configurable settings are:
---
- Wifi SSID
- Wifi PSK (password)
- Wifi country
- Timezone
- Meshtastic:
- LoRa radio model
- [URL](https://meshtastic.org/docs/software/python/cli/#--seturl-seturl) (used to configure LoRa settings and channels)
- Security: Add Admin Key
- Security: Clear Admin Key List
- Security: [Legacy Admin Channel](https://meshtastic.org/docs/configuration/radio/security/#admin-channel-enabled) enable/disable
<h2 id="usb-configuration-tool">USB Configuration Tool</h2>
<p>To configure some Femtofox settings such as wifi, you can insert a USB flash drive containing a configuration file. The system will automatically recognize, mount and implement the settings you specify.<br>
Configurable settings are:</p>
<ul>
<li>Wifi SSID</li>
<li>Wifi PSK (password)</li>
<li>Wifi country</li>
<li>Timezone</li>
<li>Meshtastic:
<ul>
<li>LoRa radio model</li>
<li><a href="https://meshtastic.org/docs/software/python/cli/#--seturl-seturl">URL</a> (used to configure LoRa settings and channels)</li>
<li>Security: Add Admin Key</li>
<li>Security: Clear Admin Key List</li>
<li>Security: <a href="https://meshtastic.org/docs/configuration/radio/security/#admin-channel-enabled">Legacy Admin Channel</a> enable/disable</li>
</ul>
</li>
</ul>
<h3 id="instructions">Instructions</h3>
<p>The USB drive must be formatted with a single FAT32, exFAT, NTFS (read only - log will not be saved to drive) or ext4 partition. Add a file named <code>femtofox-config.txt</code> and whichever of the the following lines you want to set, keeping in mind this is CaSe sEnSiTiVe:</p>
<pre><code>wifi_ssid="Your SSID name"
### Instructions
The USB drive must be formatted with a single FAT32, exFAT, NTFS (read only - log will not be saved to drive) or ext4 partition. Add a file named `femtofox-config.txt` and whichever of the the following lines you want to set, keeping in mind this is CaSe sEnSiTiVe:
```
wifi_ssid="Your SSID name"
wifi_psk="wifipassword"
wifi_country="US"
timezone="America/New_York"
@ -31,89 +25,49 @@ meshtastic_lora_radio="ebyte-e22-900m30s"
meshtastic_url="https://meshtastic.org/e/#CgMSAQESCAgBOAFAA0gB"
meshtastic_admin_key="base64:T/b8EGvi/Nqi6GyGefJt/jOQr+5uWHHZuBavkNcUwWQ="
meshtastic_legacy_admin="true"
</code></pre>
<blockquote>
<p>[!NOTE]<br>
Enter as many or as few settings as you like.</p>
<p>For <code>wifi_country</code>, insert your country’s two letter code (such as CA or IN) in capital letters.</p>
<p>Use a timezone as it appears in <a href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones">the tz database</a>.</p>
<p><strong>Meshtastic</strong><br>
For <code>meshtastic_lora_radio</code>, choose your radio from the supported hardware list.<br>
Options are:</p>
<ul>
<li><code>ebyte-e22-900m30sm</code></li>
<li><code>ebyte-e22-900m22s</code></li>
<li><code>e22-900mm22s</code></li>
<li><code>heltec-ht-ra62</code></li>
<li><code>seeed-wio-sx1262</code></li>
<li><code>waveshare-sx126x-xxxm</code></li>
<li><code>ai-thinker-ra-01sh</code></li>
<li><code>none</code> <em>(for simradio)</em></li>
</ul>
<p><strong>Important:</strong> You cannot set URL and security settings in the same operation - if you must set both, set the URL first, then edit the <code>femtofox-config.txt</code> file on the USB drive to remove the URL and add in your security settings.</p>
<p>To add a <code>meshtastic_admin_key</code>, copy it from the app and add <code>base64:</code> to the beginning (<code>meshtastic_admin_key="base64:T/b8EGvi/Nqi6GyGefJt/jOQr+5uWHHZuBavkNcUwWQ="</code>).</p>
<p>Clearing the <code>meshtastic_admin_key</code> list: The admin key list can contain up to three keys - <em>if more are added they will be ignored</em>. The USB configuration tool supports clearing the admin key list, after which you will need to re-add your admin key/s in a second operation. To clear the admin key list, enter <code>meshtastic_admin_key="0"</code>, without <code>base64:</code>.</p>
</blockquote>
<blockquote>
<p>[!CAUTION]<br>
Attempting to set wifi settings via USB configuration tool without a wifi adapter connected will lead to a 5 minute hang while the configuration tool runs - either disconnect and reconnect power or wait the full 5 minutes to to recover.</p>
</blockquote>
<p><strong>To apply your configuration, reboot the Femtofox with the USB drive plugged in. No other USB drives can be plugged in at the same time.</strong><br>
A log (<code>femtofox-config.log</code>) is saved to <code>/home/femto</code> and the USB drive (except on NTFS, which is read only).<br>
<br></p>
<h3 id="boot-codes">Boot codes</h3>
<p>When the Femtofox is finished booting, it will blink its User LED (see below) in a pattern which can be used to gather info on its status or help diagnose issues.<br>
<img src="https://github.com/noon92/femtofox/blob/main/leds.png" alt="LEDs"></p>
```
> [!NOTE]
> Enter as many or as few settings as you like.
>
> For `wifi_country`, insert your country's two letter code (such as CA or IN) in capital letters.
>
> Use a timezone as it appears in [the tz database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
>
> **Meshtastic**
> For `meshtastic_lora_radio`, choose your radio from the supported hardware list.
> Options are:
> * `ebyte-e22-900m30sm`
> * `ebyte-e22-900m22s`
> * `e22-900mm22s`
> * `heltec-ht-ra62`
> * `seeed-wio-sx1262`
> * `waveshare-sx126x-xxxm`
> * `ai-thinker-ra-01sh`
> * `none` *(for simradio)*
>
> **Important:** You cannot set URL and security settings in the same operation - if you must set both, set the URL first, then edit the `femtofox-config.txt` file on the USB drive to remove the URL and add in your security settings.
>
>To add a `meshtastic_admin_key`, copy it from the app and add `base64:` to the beginning (`meshtastic_admin_key="base64:T/b8EGvi/Nqi6GyGefJt/jOQr+5uWHHZuBavkNcUwWQ="`).
>
> Clearing the `meshtastic_admin_key` list: The admin key list can contain up to three keys - *if more are added they will be ignored*. The USB configuration tool supports clearing the admin key list, after which you will need to re-add your admin key/s in a second operation. To clear the admin key list, enter `meshtastic_admin_key="0"`, without `base64:`.
<table>
<thead>
<tr>
<th>LED blink pattern</th>
<th>Meaning</th>
<th>Possible causes</th>
<th>Solutions</th>
</tr>
</thead>
<tbody>
<tr>
<td><center>⚠️<br>________________<br>1 very long blink, lasting 5 seconds</center></td>
<td>Failed to mount USB drive. Ignoring.</td>
<td><li>Invalid filesystem</li><li>Corrupted partition table</li><li>Defective USB drive</li><li>Defective USB OTG adapter</li></td>
<td><li>Use a supported partition (FAT32, exFAT, NTFS, ext4)</li><li>Repair partition table</li><li>Try another USB drive</li><li>Try another USB OTG adapter</li></td>
</tr>
<tr>
<td><center>⚠️<br>_____&nbsp;&nbsp;_____&nbsp;&nbsp;_____<br>3 long blinks, each lasting 1.5 seconds</center></td>
<td>USB drive mounted successfully but femtofox-config.txt was not found. Ignoring.</td>
<td>Config file missing.</td>
<td>Create configuration file as described above.</td>
</tr>
<tr>
<td><center>⚠️<br>_____&nbsp;&nbsp;_____&nbsp;&nbsp;_____&nbsp;&nbsp;_____&nbsp;&nbsp;_____<br>5 long blinks, each lasting 1.5 seconds</center></td>
<td>USB drive mounted successfully and femtofox-config.txt was found but did not contain readable configuration data. Ignoring.</td>
<td>Configuration file improperly formatted or contains no data.</td>
<td>Check configuration file contents as described above.</td>
</tr>
<tr>
<td><center>⚠️<br>___&nbsp;&nbsp;___&nbsp;&nbsp;_&nbsp;&nbsp;_&nbsp;&nbsp;___&nbsp;&nbsp;___&nbsp;&nbsp;_&nbsp;&nbsp;_<br>2 long blinks, each lasting 1 seconds, then 2 short blinks, each lasting 1/4 of a second. Repeats twice</center></td>
<td>Error while trying to implement a Meshtastic setting after 3 attempts. Some settings may have been implemented successfully.</td>
<td><li>The error may be transient.</li><li>Configuration file may contain improper data.</li></td>
<td><li>Try again.</li><li>Check configuration file contents as described above.</li><li>Check the log.<br><br>This pattern may flash before other patterns. The pattern will repeat once for each failed setting.</li></td>
</tr>
<tr>
<td><center>✅<br>. . . . . . . . . .<br>10 very fast blinks, each lasting 1/8th of a second</center></td>
<td>USB drive mounted successfully, and femtofox-config.txt was found and contained configuration data which was sent for deployment. Any affected services will now restart. You can disconnect the USB drive.</td>
<td>This does not mean that the information in the config file is correct - only that it was readable.<br>Note that the “success” boot code will flash if at least one setting is successfully read - even if the setting was not implemented successfully.</td>
<td></td>
</tr>
<tr>
<td><center>✅<br>__&nbsp;&nbsp;__&nbsp;&nbsp;__&nbsp;&nbsp;__&nbsp;&nbsp;__<br>5 medium blinks, each lasting 0.5 seconds</center></td>
<td>Boot complete. Appears on every successful boot and always appears last.</td>
<td></td>
<td></td>
</tr>
</tbody>
</table><blockquote>
<p>[!NOTE]<br>
Boot codes can appear in sequence - for example: one long (4 second) blink, followed by 5 medium (half second) blinks means the attempt to mount the USB drive failed, and that boot is complete.</p>
</blockquote>
> [!CAUTION]
> Attempting to set wifi settings via USB configuration tool without a wifi adapter connected will lead to a 5 minute hang while the configuration tool runs - either disconnect and reconnect power or wait the full 5 minutes to to recover.
**To apply your configuration, reboot the Femtofox with the USB drive plugged in. No other USB drives can be plugged in at the same time.**
A log (`femtofox-config.log`) is saved to `/home/femto` and the USB drive (except on NTFS, which is read only).
<br>
### Boot codes
When the Femtofox is finished booting, it will blink its User LED (see below) in a pattern which can be used to gather info on its status or help diagnose issues.
![LEDs](https://github.com/noon92/femtofox/blob/main/leds.png)
| LED blink pattern | Meaning | Possible causes | Solutions |
|--|--|--|--|
|<center>⚠️<br>________________<br>1 very long blink, lasting 5 seconds| Failed to mount USB drive. Ignoring.| <li>Invalid filesystem<li>Corrupted partition table<li>Defective USB drive<li>Defective USB OTG adapter | <li>Use a supported partition (FAT32, exFAT, NTFS, ext4)<li>Repair partition table<li>Try another USB drive<li>Try another USB OTG adapter |
|<center>⚠️<br>\_\_\_\_\_&nbsp;&nbsp;\_\_\_\_\_&nbsp;&nbsp;\_\_\_\_\_<br>3 long blinks, each lasting 1.5 seconds | USB drive mounted successfully but femtofox-config.txt was not found. Ignoring.| Config file missing. | Create configuration file as described above. |
|<center>⚠️<br>\_\_\_\_\_&nbsp;&nbsp;\_\_\_\_\_&nbsp;&nbsp;\_\_\_\_\_&nbsp;&nbsp;\_\_\_\_\_&nbsp;&nbsp;\_\_\_\_\_<br>5 long blinks, each lasting 1.5 seconds | USB drive mounted successfully and femtofox-config.txt was found but did not contain readable configuration data. Ignoring.| Configuration file improperly formatted or contains no data. | Check configuration file contents as described above. |
|<center>⚠️<br>\_\_\_&nbsp;&nbsp;\_\_\_&nbsp;&nbsp;\_&nbsp;&nbsp;\_&nbsp;&nbsp;\_\_\_&nbsp;&nbsp;\_\_\_&nbsp;&nbsp;\_&nbsp;&nbsp;\_<br>2 long blinks, each lasting 1 seconds, then 2 short blinks, each lasting 1/4 of a second. Repeats twice | Error while trying to implement a Meshtastic setting after 3 attempts. Some settings may have been implemented successfully.| <li>The error may be transient.<li>Configuration file may contain improper data. | <li>Try again.<li>Check configuration file contents as described above.<li>Check the log.<br><br>This pattern may flash before other patterns. The pattern will repeat once for each failed setting.|
|<center>✅<br>. . . . . . . . . .<br>10 very fast blinks, each lasting 1/8th of a second | USB drive mounted successfully, and femtofox-config.txt was found and contained configuration data which was sent for deployment. Any affected services will now restart. You can disconnect the USB drive. | This does not mean that the information in the config file is correct - only that it was readable.<br>Note that the "success" boot code will flash if at least one setting is successfully read - even if the setting was not implemented successfully.|
|<center>✅<br>\_\_&nbsp;&nbsp;\_\_&nbsp;&nbsp;\_\_&nbsp;&nbsp;\_\_&nbsp;&nbsp;\_\_<br>5 medium blinks, each lasting 0.5 seconds | Boot complete. Appears on every successful boot and always appears last.| | |
> [!NOTE]
> Boot codes can appear in sequence - for example: one long (4 second) blink, followed by 5 medium (half second) blinks means the attempt to mount the USB drive failed, and that boot is complete.