@ -1,3 +1,35 @@ |
|||||||
# aprs_digipeater_weather_telemetry |
# APRS digipeater with weather station and PE1RXF telemetry server |
||||||
|
|
||||||
This project is a collection of former (and some new) projects connected together to make an APRS digipeater, which doubles as an APRS weather station, with PE1RXF telemetry server capabilities. |
## Abstract |
||||||
|
|
||||||
|
This project is a collection of former (and some new) projects connected together to make an APRS digipeater, which doubles as an APRS weather station, with PE1RXF telemetry server capabilities. |
||||||
|
|
||||||
|
![Block diagram of digipeater](./build_doc/images/block_diagram_overview.svg "Block diagram of digipeater") |
||||||
|
|
||||||
|
## Documentation |
||||||
|
|
||||||
|
An apprehensive description of the project can be found here: [https://meezenest.nl/mees/aprs_digipeater.html](https://meezenest.nl/mees/aprs_digipeater.html) |
||||||
|
|
||||||
|
## Specifications |
||||||
|
|
||||||
|
- 2 meter transceiver with 5 Watt output power |
||||||
|
- 70 cm LoRa transceiver with 20 dBm output power |
||||||
|
- Raspberry Pi Zero 2 W |
||||||
|
- APRS cross band digipeater software |
||||||
|
- Weather station via ModBus |
||||||
|
- Rnode TCP/IP over 70 cm LoRa for internet |
||||||
|
|
||||||
|
## License |
||||||
|
|
||||||
|
Copyright (C) 2024 M.T. Konstapel |
||||||
|
|
||||||
|
### Software |
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify |
||||||
|
it under the terms of the GNU General Public License as published by |
||||||
|
the Free Software Foundation, either version 3 of the License, or |
||||||
|
(at your option) any later version. |
||||||
|
|
||||||
|
### Hardware and documentation |
||||||
|
|
||||||
|
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. |
||||||
|
@ -0,0 +1,13 @@ |
|||||||
|
html: |
||||||
|
pandoc -s aprs_digipeater.md --toc --toc-depth=1 -c ./css/mvp.css \
|
||||||
|
--template ./template/template.html -o aprs_digipeater.html
|
||||||
|
|
||||||
|
installation_guide: |
||||||
|
pandoc -s installation_pe1rxf_aprs_weather_server.md --toc --toc-depth=1 -c ./css/mvp.css \
|
||||||
|
--template ./template/template.html -o installation_pe1rxf_aprs_weather_server.html
|
||||||
|
|
||||||
|
pdf: |
||||||
|
pandoc aprs_digipeater.md --toc -o aprs_digipeater.pdf --pdf-engine=xelatex -H ./template/custom_settings.tex
|
||||||
|
|
||||||
|
clean: |
||||||
|
rm -rvf build
|
@ -0,0 +1,277 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang=""> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8" /> |
||||||
|
<meta name="generator" content="pandoc" /> |
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> |
||||||
|
<meta name="author" content="M.T. Konstapel" /> |
||||||
|
<meta name="dcterms.date" content="2024-02-14" /> |
||||||
|
<title>APRS digipeater</title> |
||||||
|
<link rel="stylesheet" href="./css/mvp.css" /> |
||||||
|
<style type="text/css"> |
||||||
|
:root { |
||||||
|
--width-content: 1080px; |
||||||
|
} |
||||||
|
|
||||||
|
nav { |
||||||
|
justify-content: space-around; |
||||||
|
} |
||||||
|
|
||||||
|
</style> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<header id="title-block-header"> |
||||||
|
<nav id="TOC"> |
||||||
|
<ul> |
||||||
|
<li> |
||||||
|
<a href="#">Index</a> |
||||||
|
<ul> |
||||||
|
<li><a href="#the-story" id="toc-the-story">The |
||||||
|
story</a></li> |
||||||
|
<li><a href="#the-design" id="toc-the-design">The |
||||||
|
design</a></li> |
||||||
|
<li><a href="#the-build" id="toc-the-build">The |
||||||
|
build</a></li> |
||||||
|
<li><a href="#the-specifications" |
||||||
|
id="toc-the-specifications">The specifications</a></li> |
||||||
|
<li><a href="#license" id="toc-license">License</a></li> |
||||||
|
</ul> |
||||||
|
</li> |
||||||
|
<li> |
||||||
|
<a href="./aprs_digipeater.pdf">PDF version</a> |
||||||
|
</li> |
||||||
|
<li> |
||||||
|
<a href="https://git.meezenest.nl/marcel/aprs_digipeater">Git repo</a> |
||||||
|
</li> |
||||||
|
<li> |
||||||
|
<a href="https://meezenest.nl/mees/aprs_digipeater.html">Back</a> |
||||||
|
</li> |
||||||
|
</ul> |
||||||
|
|
||||||
|
<a href="https://www.meezenest.nl/mees/"><img alt="Logo" src="./images/mees_logo.svg" height="70"></a> |
||||||
|
</nav> |
||||||
|
<h1 class="title">APRS digipeater</h1> |
||||||
|
<p class="subtitle">with weather and PE1RXF telemetry server</p> |
||||||
|
<p class="author">M.T. Konstapel</p> |
||||||
|
<p class="date">2024-02-14</p> |
||||||
|
<p><a href="./aprs_digipeater.pdf"><i>PDF version</i></a></p> |
||||||
|
</header> |
||||||
|
<main> |
||||||
|
<article> |
||||||
|
<p><b>Abstract </b><p>This project is a collection of former (and some |
||||||
|
new) projects connected together to make an APRS digipeater, which |
||||||
|
doubles as an APRS weather station, with PE1RXF telemetry server |
||||||
|
capabilities.</p></p> |
||||||
|
<figure> |
||||||
|
<img src="./images/block_diagram_overview.svg" |
||||||
|
title="Block diagram ofdigipeater" alt="Block diagram of digipeater" /> |
||||||
|
<figcaption aria-hidden="true">Block diagram of digipeater</figcaption> |
||||||
|
</figure> |
||||||
|
<h1 id="the-story">The story</h1> |
||||||
|
<p>For several years I operate an APRS iGate on both 2 meter and 70 cm |
||||||
|
LoRa. I added my own PE1RXF telemetry support (see: <a |
||||||
|
href="https://www.meezenest.nl/mees-elektronica/aprs_telemetry.html">https://www.meezenest.nl/mees-elektronica/aprs_telemetry.html</a>). |
||||||
|
This worked fine, but I already had designed an updated version of the |
||||||
|
iGate. The prototype worked, but had some issues. So I kept using the |
||||||
|
old iGate and forgot all about the new version.</p> |
||||||
|
<p>Some time ago I started to design a weather station (<a |
||||||
|
href="https://www.meezenest.nl/mees-elektronica/weather_station.html">https://www.meezenest.nl/mees-elektronica/weather_station.html</a>) |
||||||
|
which I located in the back garden. Because it was out of reach of my |
||||||
|
wifi network, I used the APRS iGate prototype to send the weather data |
||||||
|
via its build in LoRa modem to my PE1RXF telemetry server.</p> |
||||||
|
<p>Than the idea of relocating my existing iGate to the location of my |
||||||
|
weather station emerged. The weather station had all the hardware I |
||||||
|
needed build in. And it made sense to combine the two systems, as both |
||||||
|
handle APRS traffic. Besides, both systems use energy so shutting one |
||||||
|
down seems sensible.</p> |
||||||
|
<p>But the reason I used the APRS iGate prototype in the first place, |
||||||
|
namely the absence of wifi, became a problem again. An APRS iGate has to |
||||||
|
have access to the internet, that’s the whole point! But the amount of |
||||||
|
data it sends is small, so I didn’t need lots of bandwidth. And at that |
||||||
|
point another dormant project woke up: I always wanted to experiment |
||||||
|
with TCP/IP over the air. In the past I did some experiments with TCP/IP |
||||||
|
over AX.25 (packet radio), but the 1200 baud modems were simply too |
||||||
|
slow. I also had build a 5GHz HamNet link, but 350 Mbit/s is quite the |
||||||
|
overkill. I needed a link speed between 15kB/s to 500kB/s. The Rnode |
||||||
|
project from <a |
||||||
|
href="https://unsigned.io/hardware/RNode.html">https://unsigned.io/hardware/RNode.html</a> |
||||||
|
seemed perfect.</p> |
||||||
|
<h1 id="the-design">The design</h1> |
||||||
|
<h2 id="weather-station">Weather station</h2> |
||||||
|
<p>This project started with a weather station. I designed it as a stand |
||||||
|
alone weather station with an RS-484 ModBus interface. It can measure |
||||||
|
wind speed, wind direction, rain fall, humidity, air pressure and |
||||||
|
temperature. The complete build document of the weather station can be |
||||||
|
found here: <a |
||||||
|
href="https://www.meezenest.nl/mees-elektronica/projects/weather_station/build_doc/weather_station.html">https://www.meezenest.nl/mees-elektronica/projects/weather_station/build_doc/weather_station.html</a></p> |
||||||
|
<figure> |
||||||
|
<img src="./images/weather_station_sensors_small.jpg" |
||||||
|
title="Weather station" alt="Weather station" /> |
||||||
|
<figcaption aria-hidden="true">Weather station</figcaption> |
||||||
|
</figure> |
||||||
|
<h2 id="brains">Brains</h2> |
||||||
|
<p>Although stand alone in operation, to read the measurements the |
||||||
|
weather station must be connected to a host via RS-485. This host is a |
||||||
|
Raspberry Pi LoRa shield I designed to be the successor of my first APRS |
||||||
|
iGate. It is a simple PCB with room for a Raspberry Pi Zero 2 W, a LoRa |
||||||
|
transceiver, a real time clock and a power supply.</p> |
||||||
|
<figure> |
||||||
|
<img src="./images/RPi-LoRa-shield_prototype.jpg" |
||||||
|
title="Raspberry Pi LoRa shield prototype" |
||||||
|
alt="Raspberry Pi LoRa shield prototype" /> |
||||||
|
<figcaption aria-hidden="true">Raspberry Pi LoRa shield |
||||||
|
prototype</figcaption> |
||||||
|
</figure> |
||||||
|
<figure> |
||||||
|
<img src="./images/RPi-LoRa-shield_schematic.png" |
||||||
|
title="Raspberry Pi LoRa shield schematic" |
||||||
|
alt="Raspberry Pi LoRa shield schematic" /> |
||||||
|
<figcaption aria-hidden="true">Raspberry Pi LoRa shield |
||||||
|
schematic</figcaption> |
||||||
|
</figure> |
||||||
|
<p><a href="./images/RPi-LoRa-shield_schematic.pdf">PDF version of |
||||||
|
schematic</a></p> |
||||||
|
<h2 id="peripherals">Peripherals</h2> |
||||||
|
<p>The Raspberry Pi need some extra hardware for interfacing the various |
||||||
|
peripherals, like the transceiver, the ModBus and the Rnode modem.</p> |
||||||
|
<h3 id="usb-hub">USB hub</h3> |
||||||
|
<p>As the Raspberry Pi only has one USB port, a hub is essential. I used |
||||||
|
an old one I had laying around. Taken out of its case, it fits |
||||||
|
perfectly.</p> |
||||||
|
<h3 id="rs-485-dongle">RS-485 dongle</h3> |
||||||
|
<p>To interface with the weather station a USB to RS-485 dongle is |
||||||
|
needed. A cheap one from Joy-IT (<a |
||||||
|
href="https://joy-it.net/en/products/SBC-TTL-RS485">https://joy-it.net/en/products/SBC-TTL-RS485</a>) |
||||||
|
is fine.</p> |
||||||
|
<figure> |
||||||
|
<img src="./images/rs-485_dongle.webp" title="RS-485 dongle" |
||||||
|
alt="RS-485 dongle" /> |
||||||
|
<figcaption aria-hidden="true">RS-485 dongle</figcaption> |
||||||
|
</figure> |
||||||
|
<h3 id="baud-aprs-modem">1200 baud APRS modem</h3> |
||||||
|
<p>This modem I also had laying around. It is called “Packet modem nano |
||||||
|
2” and it is based on the Micromodem from unsigned.io (<a |
||||||
|
href="https://unsigned.io/hardware/MicroModem.html">https://unsigned.io/hardware/MicroModem.html</a>). |
||||||
|
The design files for this modem are part of this project and can be |
||||||
|
found in the git repository.</p> |
||||||
|
<figure> |
||||||
|
<img src="./images/packetmodem_nano2_pcb_small.jpg" |
||||||
|
title="Packet modem nano 2" alt="Packet modem nano 2" /> |
||||||
|
<figcaption aria-hidden="true">Packet modem nano 2</figcaption> |
||||||
|
</figure> |
||||||
|
<figure> |
||||||
|
<img src="./images/packetmodem_nano2_rev2.png" |
||||||
|
title="Packet modem nano 2 schematic" |
||||||
|
alt="Packet modem nano 2 schamatic" /> |
||||||
|
<figcaption aria-hidden="true">Packet modem nano 2 |
||||||
|
schamatic</figcaption> |
||||||
|
</figure> |
||||||
|
<p><a href="./images/packetmodem_nano2_rev2.pdf">PDF version of |
||||||
|
schematic</a></p> |
||||||
|
<h3 id="rnode-modem">Rnode modem</h3> |
||||||
|
<p>For the low speed network link I use the Rnode project from <a |
||||||
|
href="https://unsigned.io/hardware/RNode.html">https://unsigned.io/hardware/RNode.html</a>. |
||||||
|
This is an amazing project and I only use a small part of the features |
||||||
|
available. In my ow project is works as a KISS compatible LoRa modem. |
||||||
|
Together with the tncattach program (<a |
||||||
|
href="https://unsigned.io/software/tncattach.html">https://unsigned.io/software/tncattach.html</a>) |
||||||
|
it forms a Linux network adapter over which I can route all the network |
||||||
|
traffic. The maximum speed is just above 20 KB/s, which is enough for |
||||||
|
APRS-IS traffic. For archival reasons, I included the source code of |
||||||
|
tncattach as well as rns (the firmware and configuration utility) in the |
||||||
|
git repository.</p> |
||||||
|
<p>The hardware on which the Rnode firmware is flashed is a LilyGO |
||||||
|
LoRa32 v2.1 (also known as TTGO T3 v1.6.1). Of course you need at least |
||||||
|
two boards to form a network. With a good antenna, the range is easily |
||||||
|
100 meters (and probably more than 1 km), which is plenty enough for |
||||||
|
what I need.</p> |
||||||
|
<figure> |
||||||
|
<img src="./images/lilygo-ttgo-lora32.jpg" title="LilyGO LoRa32" |
||||||
|
alt="LilyGO LoRa32" /> |
||||||
|
<figcaption aria-hidden="true">LilyGO LoRa32</figcaption> |
||||||
|
</figure> |
||||||
|
<h2 id="more-than-brains-alone">More than brains alone</h2> |
||||||
|
<p>The Raspberry Pi with all the extra hardware is housed in a small |
||||||
|
plastic housing. On the back panel behind the SMA connectors and the |
||||||
|
power jack, I placed a copper strip. This acts as the start grounding |
||||||
|
strip on which all other ground wires are connected. This prevents a lot |
||||||
|
of RF and EMC problems.</p> |
||||||
|
<figure> |
||||||
|
<img src="./images/raspberry_pi_proto_small.jpg" |
||||||
|
title="Inside the brains" alt="Inside the brains" /> |
||||||
|
<figcaption aria-hidden="true">Inside the brains</figcaption> |
||||||
|
</figure> |
||||||
|
<p><a href="./images/raspberry_pi_proto.jpg">Large version of |
||||||
|
photo</a></p> |
||||||
|
<figure> |
||||||
|
<img src="./images/raspberry_pi_proto_backside.jpg" title="Back side" |
||||||
|
alt="Back side" /> |
||||||
|
<figcaption aria-hidden="true">Back side</figcaption> |
||||||
|
</figure> |
||||||
|
<h2 id="external-hardware">External hardware</h2> |
||||||
|
<h3 id="meter-transceiver">2 meter transceiver</h3> |
||||||
|
<p>The 2 meter transceiver is an old Alinco DJ-580 hand held radio with |
||||||
|
an output power of 5 Watt. It is connected to both the 5 pin DIN |
||||||
|
connector and the 12 Volt barrel jack on the Raspberry Pi.</p> |
||||||
|
<figure> |
||||||
|
<img src="./images/alinco_dj580t.jpg" title="Alinco DJ-580" |
||||||
|
alt="Alinco DJ-580" /> |
||||||
|
<figcaption aria-hidden="true">Alinco DJ-580</figcaption> |
||||||
|
</figure> |
||||||
|
<h3 id="diplexer">Diplexer</h3> |
||||||
|
<p>The LoRa APRS transceiver (70cm) and the APRS transceiver (2m) are |
||||||
|
connected to a triplexer, making it possible to use one dual band |
||||||
|
antenna for both radios. Why a triplexer? Well, I had one laying around. |
||||||
|
I terminated the unused 1200MHz connector with a 50 Ohm load. But a |
||||||
|
diplexer would have been sufficient, of course.</p> |
||||||
|
<figure> |
||||||
|
<img src="./images/triplexer.png" title="Triplexer" alt="Triplexer" /> |
||||||
|
<figcaption aria-hidden="true">Triplexer</figcaption> |
||||||
|
</figure> |
||||||
|
<h3 id="antenna">Antenna</h3> |
||||||
|
<p>This is a simple 2m/70cm dual band antenna from Diamond, the X30.</p> |
||||||
|
<figure> |
||||||
|
<img src="./images/diamond-x30.jpg" title="Antenna" alt="Antenna" /> |
||||||
|
<figcaption aria-hidden="true">Antenna</figcaption> |
||||||
|
</figure> |
||||||
|
<h1 id="the-build">The build</h1> |
||||||
|
<h2 id="software">Software</h2> |
||||||
|
<p>The instalation of all the needed software on the Raspberry Pi is |
||||||
|
complicated, so I wrote a separate document: <a |
||||||
|
href="./installation_pe1rxf_aprs_weather_server.html">installation_pe1rxf_aprs_weather_server.html</a></p> |
||||||
|
<h1 id="the-specifications">The specifications</h1> |
||||||
|
<ul> |
||||||
|
<li>2 meter transceiver with 5 Watt output power</li> |
||||||
|
<li>70 cm LoRa transceiver with 20 dBm output power</li> |
||||||
|
<li>Raspberry Pi Zero 2 W</li> |
||||||
|
<li>APRS cross band digipeater software</li> |
||||||
|
<li>Weather station via ModBus</li> |
||||||
|
<li>Rnode TCP/IP over 70 cm LoRa for internet</li> |
||||||
|
</ul> |
||||||
|
<h1 id="license">License</h1> |
||||||
|
<p>Copyright (C) 2023, 2024 M.T. Konstapel</p> |
||||||
|
<p><a |
||||||
|
href="https://meezenest.nl/mees/">https://meezenest.nl/mees/</a></p> |
||||||
|
<p>The software is published as open-source software (GPL). The hardware |
||||||
|
is published as open-source hardware (OSH).</p> |
||||||
|
<h2 id="software-1">Software</h2> |
||||||
|
<p>This program is free software: you can redistribute it and/or modify |
||||||
|
it under the terms of the GNU General Public License as published by the |
||||||
|
Free Software Foundation, either version 3 of the License, or (at your |
||||||
|
option) any later version.</p> |
||||||
|
<h2 id="hardware-and-documentation">Hardware and documentation</h2> |
||||||
|
<p>This work is licensed under a Creative Commons Attribution-ShareAlike |
||||||
|
4.0 International License.</p> |
||||||
|
<hr> |
||||||
|
</article> |
||||||
|
</main> |
||||||
|
<footer> |
||||||
|
<p>© |
||||||
|
2024-02-14 |
||||||
|
M.T. Konstapel |
||||||
|
<a href="https://meezenest.nl/mees/">https://meezenest.nl/mees/</a> |
||||||
|
</p><p>This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>. |
||||||
|
</p> |
||||||
|
</footer> |
||||||
|
</body> |
||||||
|
</html> |
@ -0,0 +1,142 @@ |
|||||||
|
--- |
||||||
|
title: APRS digipeater |
||||||
|
subtitle: with weather and PE1RXF telemetry server |
||||||
|
author: M.T. Konstapel |
||||||
|
date: 2024-02-14 |
||||||
|
website: https://meezenest.nl/mees/ |
||||||
|
page_back: https://meezenest.nl/mees/aprs_digipeater.html |
||||||
|
logo: ./images/mees_logo.svg |
||||||
|
pdf_version: ./aprs_digipeater.pdf |
||||||
|
git_repo: https://git.meezenest.nl/marcel/aprs_digipeater |
||||||
|
numbersections: true |
||||||
|
# Formatting: |
||||||
|
geometry: "a4paper, left=2.0cm, right=2.0cm, top=1.9cm, bottom=2.54cm" |
||||||
|
abstract: > |
||||||
|
This project is a collection of former (and some new) projects connected together to make an APRS digipeater, which doubles as an APRS weather station, with PE1RXF telemetry server capabilities. |
||||||
|
--- |
||||||
|
|
||||||
|
![Block diagram of digipeater](./images/block_diagram_overview.svg "Block diagram ofdigipeater") |
||||||
|
|
||||||
|
# The story |
||||||
|
|
||||||
|
For several years I operate an APRS iGate on both 2 meter and 70 cm LoRa. I added my own PE1RXF telemetry support (see: [https://www.meezenest.nl/mees-elektronica/aprs_telemetry.html](https://www.meezenest.nl/mees-elektronica/aprs_telemetry.html)). This worked fine, but I already had designed an updated version of the iGate. The prototype worked, but had some issues. So I kept using the old iGate and forgot all about the new version. |
||||||
|
|
||||||
|
Some time ago I started to design a weather station ([https://www.meezenest.nl/mees-elektronica/weather_station.html](https://www.meezenest.nl/mees-elektronica/weather_station.html)) which I located in the back garden. Because it was out of reach of my wifi network, I used the APRS iGate prototype to send the weather data via its build in LoRa modem to my PE1RXF telemetry server. |
||||||
|
|
||||||
|
Than the idea of relocating my existing iGate to the location of my weather station emerged. The weather station had all the hardware I needed build in. And it made sense to combine the two systems, as both handle APRS traffic. Besides, both systems use energy so shutting one down seems sensible. |
||||||
|
|
||||||
|
But the reason I used the APRS iGate prototype in the first place, namely the absence of wifi, became a problem again. An APRS iGate has to have access to the internet, that's the whole point! But the amount of data it sends is small, so I didn't need lots of bandwidth. And at that point another dormant project woke up: I always wanted to experiment with TCP/IP over the air. In the past I did some experiments with TCP/IP over AX.25 (packet radio), but the 1200 baud modems were simply too slow. I also had build a 5GHz HamNet link, but 350 Mbit/s is quite the overkill. I needed a link speed between 15kB/s to 500kB/s. The Rnode project from [https://unsigned.io/hardware/RNode.html](https://unsigned.io/hardware/RNode.html) seemed perfect. |
||||||
|
|
||||||
|
# The design |
||||||
|
|
||||||
|
## Weather station |
||||||
|
|
||||||
|
This project started with a weather station. I designed it as a stand alone weather station with an RS-484 ModBus interface. It can measure wind speed, wind direction, rain fall, humidity, air pressure and temperature. The complete build document of the weather station can be found here: [https://www.meezenest.nl/mees-elektronica/projects/weather_station/build_doc/weather_station.html](https://www.meezenest.nl/mees-elektronica/projects/weather_station/build_doc/weather_station.html) |
||||||
|
|
||||||
|
![Weather station](./images/weather_station_sensors_small.jpg "Weather station") |
||||||
|
|
||||||
|
## Brains |
||||||
|
|
||||||
|
Although stand alone in operation, to read the measurements the weather station must be connected to a host via RS-485. This host is a Raspberry Pi LoRa shield I designed to be the successor of my first APRS iGate. It is a simple PCB with room for a Raspberry Pi Zero 2 W, a LoRa transceiver, a real time clock and a power supply. |
||||||
|
|
||||||
|
![Raspberry Pi LoRa shield prototype](./images/RPi-LoRa-shield_prototype.jpg "Raspberry Pi LoRa shield prototype") |
||||||
|
|
||||||
|
![Raspberry Pi LoRa shield schematic](./images/RPi-LoRa-shield_schematic.png "Raspberry Pi LoRa shield schematic") |
||||||
|
|
||||||
|
[PDF version of schematic](./images/RPi-LoRa-shield_schematic.pdf) |
||||||
|
|
||||||
|
## Peripherals |
||||||
|
|
||||||
|
The Raspberry Pi need some extra hardware for interfacing the various peripherals, like the transceiver, the ModBus and the Rnode modem. |
||||||
|
|
||||||
|
### USB hub |
||||||
|
|
||||||
|
As the Raspberry Pi only has one USB port, a hub is essential. I used an old one I had laying around. Taken out of its case, it fits perfectly. |
||||||
|
|
||||||
|
### RS-485 dongle |
||||||
|
|
||||||
|
To interface with the weather station a USB to RS-485 dongle is needed. A cheap one from Joy-IT ([https://joy-it.net/en/products/SBC-TTL-RS485](https://joy-it.net/en/products/SBC-TTL-RS485)) is fine. |
||||||
|
|
||||||
|
![RS-485 dongle](./images/rs-485_dongle.webp "RS-485 dongle") |
||||||
|
|
||||||
|
### 1200 baud APRS modem |
||||||
|
|
||||||
|
This modem I also had laying around. It is called "Packet modem nano 2" and it is based on the Micromodem from unsigned.io ([https://unsigned.io/hardware/MicroModem.html](https://unsigned.io/hardware/MicroModem.html)). The design files for this modem are part of this project and can be found in the git repository. |
||||||
|
|
||||||
|
![Packet modem nano 2](./images/packetmodem_nano2_pcb_small.jpg "Packet modem nano 2") |
||||||
|
|
||||||
|
![Packet modem nano 2 schamatic](./images/packetmodem_nano2_rev2.png "Packet modem nano 2 schematic") |
||||||
|
|
||||||
|
[PDF version of schematic](./images/packetmodem_nano2_rev2.pdf) |
||||||
|
|
||||||
|
### Rnode modem |
||||||
|
|
||||||
|
For the low speed network link I use the Rnode project from [https://unsigned.io/hardware/RNode.html](https://unsigned.io/hardware/RNode.html). This is an amazing project and I only use a small part of the features available. In my ow project is works as a KISS compatible LoRa modem. Together with the tncattach program ([https://unsigned.io/software/tncattach.html](https://unsigned.io/software/tncattach.html)) it forms a Linux network adapter over which I can route all the network traffic. The maximum speed is just above 20 KB/s, which is enough for APRS-IS traffic. For archival reasons, I included the source code of tncattach as well as rns (the firmware and configuration utility) in the git repository. |
||||||
|
|
||||||
|
The hardware on which the Rnode firmware is flashed is a LilyGO LoRa32 v2.1 (also known as TTGO T3 v1.6.1). Of course you need at least two boards to form a network. With a good antenna, the range is easily 100 meters (and probably more than 1 km), which is plenty enough for what I need. |
||||||
|
|
||||||
|
![LilyGO LoRa32](./images/lilygo-ttgo-lora32.jpg "LilyGO LoRa32") |
||||||
|
|
||||||
|
## More than brains alone |
||||||
|
|
||||||
|
The Raspberry Pi with all the extra hardware is housed in a small plastic housing. On the back panel behind the SMA connectors and the power jack, I placed a copper strip. This acts as the start grounding strip on which all other ground wires are connected. This prevents a lot of RF and EMC problems. |
||||||
|
|
||||||
|
![Inside the brains](./images/raspberry_pi_proto_small.jpg "Inside the brains") |
||||||
|
|
||||||
|
[Large version of photo](./images/raspberry_pi_proto.jpg) |
||||||
|
|
||||||
|
![Back side](./images/raspberry_pi_proto_backside.jpg "Back side") |
||||||
|
|
||||||
|
## External hardware |
||||||
|
|
||||||
|
### 2 meter transceiver |
||||||
|
|
||||||
|
The 2 meter transceiver is an old Alinco DJ-580 hand held radio with an output power of 5 Watt. It is connected to both the 5 pin DIN connector and the 12 Volt barrel jack on the Raspberry Pi. |
||||||
|
|
||||||
|
![Alinco DJ-580](./images/alinco_dj580t.jpg "Alinco DJ-580") |
||||||
|
|
||||||
|
### Diplexer |
||||||
|
|
||||||
|
The LoRa APRS transceiver (70cm) and the APRS transceiver (2m) are connected to a triplexer, making it possible to use one dual band antenna for both radios. Why a triplexer? Well, I had one laying around. I terminated the unused 1200MHz connector with a 50 Ohm load. But a diplexer would have been sufficient, of course. |
||||||
|
|
||||||
|
![Triplexer](./images/triplexer.png "Triplexer") |
||||||
|
|
||||||
|
### Antenna |
||||||
|
|
||||||
|
This is a simple 2m/70cm dual band antenna from Diamond, the X30. |
||||||
|
|
||||||
|
![Antenna](./images/diamond-x30.jpg "Antenna") |
||||||
|
|
||||||
|
# The build |
||||||
|
|
||||||
|
## Software |
||||||
|
|
||||||
|
The instalation of all the needed software on the Raspberry Pi is complicated, so I wrote a separate document: [installation_pe1rxf_aprs_weather_server.html](./installation_pe1rxf_aprs_weather_server.html) |
||||||
|
|
||||||
|
# The specifications |
||||||
|
|
||||||
|
- 2 meter transceiver with 5 Watt output power |
||||||
|
- 70 cm LoRa transceiver with 20 dBm output power |
||||||
|
- Raspberry Pi Zero 2 W |
||||||
|
- APRS cross band digipeater software |
||||||
|
- Weather station via ModBus |
||||||
|
- Rnode TCP/IP over 70 cm LoRa for internet |
||||||
|
|
||||||
|
# License |
||||||
|
|
||||||
|
Copyright (C) 2023, 2024 M.T. Konstapel |
||||||
|
|
||||||
|
[https://meezenest.nl/mees/](https://meezenest.nl/mees/) |
||||||
|
|
||||||
|
The software is published as open-source software (GPL). The hardware is published as open-source hardware (OSH). |
||||||
|
|
||||||
|
## Software |
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify |
||||||
|
it under the terms of the GNU General Public License as published by |
||||||
|
the Free Software Foundation, either version 3 of the License, or |
||||||
|
(at your option) any later version. |
||||||
|
|
||||||
|
## Hardware and documentation |
||||||
|
|
||||||
|
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. |
@ -0,0 +1,563 @@ |
|||||||
|
/* MVP.css v1.14 - https://github.com/andybrewer/mvp */ |
||||||
|
/* Edited by Konstapel https://meezenest.nl/mees */ |
||||||
|
|
||||||
|
:root { |
||||||
|
--active-brightness: 0.85; |
||||||
|
--border-radius: 5px; |
||||||
|
--box-shadow: 2px 2px 10px; |
||||||
|
--color-accent: #f4f0ec; |
||||||
|
--color-bg: #fff; |
||||||
|
--color-bg-secondary: #e9e9e9; |
||||||
|
--color-link: #a9a9a9; |
||||||
|
--color-secondary: #3366FF; |
||||||
|
--color-secondary-accent: #920de90b; |
||||||
|
--color-shadow: #f4f4f4; |
||||||
|
--color-table: #a9a9a9; |
||||||
|
--color-text: #000; |
||||||
|
--color-text-secondary: #999; |
||||||
|
--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; |
||||||
|
--hover-brightness: 1.2; |
||||||
|
--justify-important: center; |
||||||
|
--justify-normal: left; |
||||||
|
--line-height: 1.5; |
||||||
|
--width-card: 285px; |
||||||
|
--width-card-medium: 460px; |
||||||
|
--width-card-wide: 1080px; |
||||||
|
--width-content: 1080px; |
||||||
|
} |
||||||
|
|
||||||
|
@media (prefers-color-scheme: dark) { |
||||||
|
:root[color-mode="user"] { |
||||||
|
--color-accent: #0097fc4f; |
||||||
|
--color-bg: #333; |
||||||
|
--color-bg-secondary: #555; |
||||||
|
--color-link: #0097fc; |
||||||
|
--color-secondary: #e20de9; |
||||||
|
--color-secondary-accent: #e20de94f; |
||||||
|
--color-shadow: #bbbbbb20; |
||||||
|
--color-table: #0097fc; |
||||||
|
--color-text: #f7f7f7; |
||||||
|
--color-text-secondary: #aaa; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
html { |
||||||
|
scroll-behavior: smooth; |
||||||
|
} |
||||||
|
|
||||||
|
@media (prefers-reduced-motion: reduce) { |
||||||
|
html { |
||||||
|
scroll-behavior: auto; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/* Layout */ |
||||||
|
article aside { |
||||||
|
background: var(--color-secondary-accent); |
||||||
|
border-left: 4px solid var(--color-secondary); |
||||||
|
padding: 0.01rem 0.8rem; |
||||||
|
} |
||||||
|
|
||||||
|
body { |
||||||
|
background: var(--color-bg); |
||||||
|
color: var(--color-text); |
||||||
|
font-family: var(--font-family); |
||||||
|
line-height: var(--line-height); |
||||||
|
margin: 0; |
||||||
|
overflow-x: hidden; |
||||||
|
padding: 0; |
||||||
|
font-size: 110%; |
||||||
|
} |
||||||
|
|
||||||
|
footer, |
||||||
|
header, |
||||||
|
main { |
||||||
|
margin: 0 auto; |
||||||
|
max-width: var(--width-content); |
||||||
|
padding: 3rem 1rem; |
||||||
|
} |
||||||
|
|
||||||
|
main { |
||||||
|
border: 1px solid lightgray; |
||||||
|
border-radius: 5px; |
||||||
|
} |
||||||
|
|
||||||
|
footer { |
||||||
|
font-size: 0.7em; |
||||||
|
} |
||||||
|
|
||||||
|
hr { |
||||||
|
background-color: var(--color-bg-secondary); |
||||||
|
border: none; |
||||||
|
height: 1px; |
||||||
|
margin: 4rem 0; |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
|
||||||
|
section { |
||||||
|
display: flex; |
||||||
|
flex-wrap: wrap; |
||||||
|
justify-content: var(--justify-important); |
||||||
|
} |
||||||
|
|
||||||
|
section img, |
||||||
|
article img { |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
|
||||||
|
section pre { |
||||||
|
overflow: auto; |
||||||
|
} |
||||||
|
|
||||||
|
section aside { |
||||||
|
border: 1px solid var(--color-bg-secondary); |
||||||
|
border-radius: var(--border-radius); |
||||||
|
box-shadow: var(--box-shadow) var(--color-shadow); |
||||||
|
margin: 1rem; |
||||||
|
padding: 1.25rem; |
||||||
|
width: var(--width-card); |
||||||
|
} |
||||||
|
|
||||||
|
section aside:hover { |
||||||
|
box-shadow: var(--box-shadow) var(--color-bg-secondary); |
||||||
|
} |
||||||
|
|
||||||
|
[hidden] { |
||||||
|
display: none; |
||||||
|
} |
||||||
|
|
||||||
|
/* Headers */ |
||||||
|
article header, |
||||||
|
div header, |
||||||
|
main header { |
||||||
|
padding-top: 0; |
||||||
|
} |
||||||
|
|
||||||
|
header { |
||||||
|
text-align: var(--justify-important); |
||||||
|
} |
||||||
|
|
||||||
|
header a b, |
||||||
|
header a em, |
||||||
|
header a i, |
||||||
|
header a strong { |
||||||
|
margin-left: 0.5rem; |
||||||
|
margin-right: 0.5rem; |
||||||
|
} |
||||||
|
|
||||||
|
header nav img { |
||||||
|
margin: 1rem 0; |
||||||
|
} |
||||||
|
|
||||||
|
section header { |
||||||
|
padding-top: 0; |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
|
||||||
|
/* Nav */ |
||||||
|
nav { |
||||||
|
align-items: center; |
||||||
|
display: flex; |
||||||
|
font-weight: bold; |
||||||
|
justify-content: space-between; |
||||||
|
margin-bottom: 7rem; |
||||||
|
} |
||||||
|
|
||||||
|
nav ul { |
||||||
|
list-style: none; |
||||||
|
padding: 0; |
||||||
|
} |
||||||
|
|
||||||
|
nav ul li { |
||||||
|
display: inline-block; |
||||||
|
margin: 0 0.5rem; |
||||||
|
position: relative; |
||||||
|
text-align: left; |
||||||
|
} |
||||||
|
|
||||||
|
/* Nav Dropdown */ |
||||||
|
nav ul li:hover ul { |
||||||
|
display: block; |
||||||
|
} |
||||||
|
|
||||||
|
nav ul li ul { |
||||||
|
background: var(--color-bg); |
||||||
|
border: 1px solid var(--color-bg-secondary); |
||||||
|
border-radius: var(--border-radius); |
||||||
|
box-shadow: var(--box-shadow) var(--color-shadow); |
||||||
|
display: none; |
||||||
|
height: auto; |
||||||
|
left: -2px; |
||||||
|
padding: .5rem 1rem; |
||||||
|
position: absolute; |
||||||
|
top: 1.7rem; |
||||||
|
white-space: nowrap; |
||||||
|
width: auto; |
||||||
|
z-index: 1; |
||||||
|
} |
||||||
|
|
||||||
|
nav ul li ul::before { |
||||||
|
/* fill gap above to make mousing over them easier */ |
||||||
|
content: ""; |
||||||
|
position: absolute; |
||||||
|
left: 0; |
||||||
|
right: 0; |
||||||
|
top: -0.5rem; |
||||||
|
height: 0.5rem; |
||||||
|
} |
||||||
|
|
||||||
|
nav ul li ul li, |
||||||
|
nav ul li ul li a { |
||||||
|
display: block; |
||||||
|
} |
||||||
|
|
||||||
|
/* Typography */ |
||||||
|
code, |
||||||
|
samp { |
||||||
|
background-color: var(--color-accent); |
||||||
|
border-radius: var(--border-radius); |
||||||
|
color: var(--color-text); |
||||||
|
display: inline-block; |
||||||
|
margin: 0 0.1rem; |
||||||
|
padding: 0 0.5rem; |
||||||
|
} |
||||||
|
|
||||||
|
details { |
||||||
|
margin: 1.3rem 0; |
||||||
|
} |
||||||
|
|
||||||
|
details summary { |
||||||
|
font-weight: bold; |
||||||
|
cursor: pointer; |
||||||
|
} |
||||||
|
|
||||||
|
h1, |
||||||
|
h2, |
||||||
|
h3, |
||||||
|
h4, |
||||||
|
h5, |
||||||
|
h6 { |
||||||
|
line-height: var(--line-height); |
||||||
|
} |
||||||
|
|
||||||
|
h1 { |
||||||
|
font-size: 1.875em; |
||||||
|
border-bottom: 1px solid lightgray; |
||||||
|
} |
||||||
|
|
||||||
|
h2 { |
||||||
|
font-size: 1.4em; |
||||||
|
} |
||||||
|
|
||||||
|
mark { |
||||||
|
padding: 0.1rem; |
||||||
|
} |
||||||
|
|
||||||
|
ol li, |
||||||
|
ul li { |
||||||
|
padding: 0.2rem 0; |
||||||
|
} |
||||||
|
|
||||||
|
p { |
||||||
|
margin: 0.75rem 0; |
||||||
|
padding: 0; |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
|
||||||
|
pre { |
||||||
|
margin: 1rem 0; |
||||||
|
max-width: var(--width-card-wide); |
||||||
|
padding: 1rem 0; |
||||||
|
} |
||||||
|
|
||||||
|
pre code, |
||||||
|
pre samp { |
||||||
|
display: block; |
||||||
|
max-width: var(--width-card-wide); |
||||||
|
padding: 0.8rem 2rem; |
||||||
|
/*white-space: pre-wrap;*/ |
||||||
|
overflow-x: auto; |
||||||
|
} |
||||||
|
|
||||||
|
small { |
||||||
|
color: var(--color-text-secondary); |
||||||
|
} |
||||||
|
|
||||||
|
sup { |
||||||
|
background-color: var(--color-secondary); |
||||||
|
border-radius: var(--border-radius); |
||||||
|
color: var(--color-bg); |
||||||
|
font-size: xx-small; |
||||||
|
font-weight: bold; |
||||||
|
margin: 0.2rem; |
||||||
|
padding: 0.2rem 0.3rem; |
||||||
|
position: relative; |
||||||
|
top: -2px; |
||||||
|
} |
||||||
|
|
||||||
|
/* Links */ |
||||||
|
a { |
||||||
|
color: var(--color-link); |
||||||
|
display: inline-block; |
||||||
|
font-weight: bold; |
||||||
|
text-decoration: underline; |
||||||
|
} |
||||||
|
|
||||||
|
a:active { |
||||||
|
filter: brightness(var(--active-brightness)); |
||||||
|
} |
||||||
|
|
||||||
|
a:hover { |
||||||
|
filter: brightness(var(--hover-brightness)); |
||||||
|
} |
||||||
|
|
||||||
|
a b, |
||||||
|
a em, |
||||||
|
a i, |
||||||
|
a strong, |
||||||
|
button, |
||||||
|
input[type="submit"] { |
||||||
|
border-radius: var(--border-radius); |
||||||
|
display: inline-block; |
||||||
|
font-size: medium; |
||||||
|
font-weight: bold; |
||||||
|
line-height: var(--line-height); |
||||||
|
margin: 0.5rem 0; |
||||||
|
padding: 1rem 2rem; |
||||||
|
} |
||||||
|
|
||||||
|
button, |
||||||
|
input[type="submit"] { |
||||||
|
font-family: var(--font-family); |
||||||
|
} |
||||||
|
|
||||||
|
button:active, |
||||||
|
input[type="submit"]:active { |
||||||
|
filter: brightness(var(--active-brightness)); |
||||||
|
} |
||||||
|
|
||||||
|
button:hover, |
||||||
|
input[type="submit"]:hover { |
||||||
|
cursor: pointer; |
||||||
|
filter: brightness(var(--hover-brightness)); |
||||||
|
} |
||||||
|
|
||||||
|
a b, |
||||||
|
a strong, |
||||||
|
button, |
||||||
|
input[type="submit"] { |
||||||
|
background-color: var(--color-link); |
||||||
|
border: 2px solid var(--color-link); |
||||||
|
color: var(--color-bg); |
||||||
|
} |
||||||
|
|
||||||
|
a em, |
||||||
|
a i { |
||||||
|
border: 2px solid var(--color-link); |
||||||
|
border-radius: var(--border-radius); |
||||||
|
color: var(--color-link); |
||||||
|
display: inline-block; |
||||||
|
padding: 1rem 2rem; |
||||||
|
} |
||||||
|
|
||||||
|
article aside a { |
||||||
|
color: var(--color-secondary); |
||||||
|
} |
||||||
|
|
||||||
|
/* Images */ |
||||||
|
figure { |
||||||
|
margin: 0; |
||||||
|
padding: 0; |
||||||
|
text-align: center; |
||||||
|
} |
||||||
|
|
||||||
|
figure img { |
||||||
|
max-width: 100%; |
||||||
|
max-height: 500px; |
||||||
|
} |
||||||
|
|
||||||
|
figure figcaption { |
||||||
|
color: var(--color-text-secondary); |
||||||
|
} |
||||||
|
|
||||||
|
/* Forms */ |
||||||
|
button:disabled, |
||||||
|
input:disabled { |
||||||
|
background: var(--color-bg-secondary); |
||||||
|
border-color: var(--color-bg-secondary); |
||||||
|
color: var(--color-text-secondary); |
||||||
|
cursor: not-allowed; |
||||||
|
} |
||||||
|
|
||||||
|
button[disabled]:hover, |
||||||
|
input[type="submit"][disabled]:hover { |
||||||
|
filter: none; |
||||||
|
} |
||||||
|
|
||||||
|
form { |
||||||
|
border: 1px solid var(--color-bg-secondary); |
||||||
|
border-radius: var(--border-radius); |
||||||
|
box-shadow: var(--box-shadow) var(--color-shadow); |
||||||
|
display: block; |
||||||
|
max-width: var(--width-card-wide); |
||||||
|
min-width: var(--width-card); |
||||||
|
padding: 1.5rem; |
||||||
|
text-align: var(--justify-normal); |
||||||
|
} |
||||||
|
|
||||||
|
form header { |
||||||
|
margin: 1.5rem 0; |
||||||
|
padding: 1.5rem 0; |
||||||
|
} |
||||||
|
|
||||||
|
input, |
||||||
|
label, |
||||||
|
select, |
||||||
|
textarea { |
||||||
|
display: block; |
||||||
|
font-size: inherit; |
||||||
|
max-width: var(--width-card-wide); |
||||||
|
} |
||||||
|
|
||||||
|
input[type="checkbox"], |
||||||
|
input[type="radio"] { |
||||||
|
display: inline-block; |
||||||
|
} |
||||||
|
|
||||||
|
input[type="checkbox"]+label, |
||||||
|
input[type="radio"]+label { |
||||||
|
display: inline-block; |
||||||
|
font-weight: normal; |
||||||
|
position: relative; |
||||||
|
top: 1px; |
||||||
|
} |
||||||
|
|
||||||
|
input[type="range"] { |
||||||
|
padding: 0.4rem 0; |
||||||
|
} |
||||||
|
|
||||||
|
input, |
||||||
|
select, |
||||||
|
textarea { |
||||||
|
border: 1px solid var(--color-bg-secondary); |
||||||
|
border-radius: var(--border-radius); |
||||||
|
margin-bottom: 1rem; |
||||||
|
padding: 0.4rem 0.8rem; |
||||||
|
} |
||||||
|
|
||||||
|
input[type="text"], |
||||||
|
textarea { |
||||||
|
width: calc(100% - 1.6rem); |
||||||
|
} |
||||||
|
|
||||||
|
input[readonly], |
||||||
|
textarea[readonly] { |
||||||
|
background-color: var(--color-bg-secondary); |
||||||
|
} |
||||||
|
|
||||||
|
label { |
||||||
|
font-weight: bold; |
||||||
|
margin-bottom: 0.2rem; |
||||||
|
} |
||||||
|
|
||||||
|
/* Popups */ |
||||||
|
dialog { |
||||||
|
border: 1px solid var(--color-bg-secondary); |
||||||
|
border-radius: var(--border-radius); |
||||||
|
box-shadow: var(--box-shadow) var(--color-shadow); |
||||||
|
position: fixed; |
||||||
|
top: 50%; |
||||||
|
left: 50%; |
||||||
|
transform: translate(-50%, -50%); |
||||||
|
width: 50%; |
||||||
|
z-index: 999; |
||||||
|
} |
||||||
|
|
||||||
|
/* Tables */ |
||||||
|
table { |
||||||
|
border: 1px solid var(--color-bg-secondary); |
||||||
|
border-radius: var(--border-radius); |
||||||
|
border-spacing: 0; |
||||||
|
display: inline-block; |
||||||
|
max-width: 100%; |
||||||
|
overflow-x: auto; |
||||||
|
padding: 0; |
||||||
|
white-space: nowrap; |
||||||
|
} |
||||||
|
|
||||||
|
table td, |
||||||
|
table th, |
||||||
|
table tr { |
||||||
|
padding: 0.4rem 0.8rem; |
||||||
|
text-align: var(--justify-important); |
||||||
|
} |
||||||
|
|
||||||
|
table thead { |
||||||
|
background-color: var(--color-table); |
||||||
|
border-collapse: collapse; |
||||||
|
border-radius: var(--border-radius); |
||||||
|
/*color: var(--color-bg);*/ |
||||||
|
margin: 0; |
||||||
|
padding: 0; |
||||||
|
} |
||||||
|
|
||||||
|
table thead th:first-child { |
||||||
|
border-top-left-radius: var(--border-radius); |
||||||
|
} |
||||||
|
|
||||||
|
table thead th:last-child { |
||||||
|
border-top-right-radius: var(--border-radius); |
||||||
|
} |
||||||
|
|
||||||
|
table thead th:first-child, |
||||||
|
table tr td:first-child { |
||||||
|
text-align: var(--justify-normal); |
||||||
|
} |
||||||
|
|
||||||
|
table tr:nth-child(even) { |
||||||
|
background-color: var(--color-accent); |
||||||
|
} |
||||||
|
|
||||||
|
/* Quotes */ |
||||||
|
blockquote { |
||||||
|
display: block; |
||||||
|
font-size: x-large; |
||||||
|
line-height: var(--line-height); |
||||||
|
margin: 1rem auto; |
||||||
|
max-width: var(--width-card-medium); |
||||||
|
padding: 1.5rem 1rem; |
||||||
|
text-align: var(--justify-important); |
||||||
|
} |
||||||
|
|
||||||
|
blockquote footer { |
||||||
|
color: var(--color-text-secondary); |
||||||
|
display: block; |
||||||
|
font-size: small; |
||||||
|
line-height: var(--line-height); |
||||||
|
padding: 1.5rem 0; |
||||||
|
} |
||||||
|
|
||||||
|
/* Scrollbars */ |
||||||
|
* { |
||||||
|
scrollbar-width: thin; |
||||||
|
scrollbar-color: rgb(202, 202, 232) auto; |
||||||
|
} |
||||||
|
|
||||||
|
*::-webkit-scrollbar { |
||||||
|
width: 5px; |
||||||
|
height: 5px; |
||||||
|
} |
||||||
|
|
||||||
|
*::-webkit-scrollbar-track { |
||||||
|
background: transparent; |
||||||
|
} |
||||||
|
|
||||||
|
*::-webkit-scrollbar-thumb { |
||||||
|
background-color: rgb(202, 202, 232); |
||||||
|
border-radius: 10px; |
||||||
|
} |
||||||
|
|
||||||
|
h1.title { |
||||||
|
border-bottom: 0px solid white; |
||||||
|
} |
||||||
|
|
After Width: | Height: | Size: 515 KiB |
After Width: | Height: | Size: 222 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 23 KiB |
@ -0,0 +1,75 @@ |
|||||||
|
{ |
||||||
|
"board": { |
||||||
|
"active_layer": 0, |
||||||
|
"active_layer_preset": "", |
||||||
|
"auto_track_width": true, |
||||||
|
"hidden_nets": [], |
||||||
|
"high_contrast_mode": 0, |
||||||
|
"net_color_mode": 1, |
||||||
|
"opacity": { |
||||||
|
"pads": 1.0, |
||||||
|
"tracks": 1.0, |
||||||
|
"vias": 1.0, |
||||||
|
"zones": 0.6 |
||||||
|
}, |
||||||
|
"ratsnest_display_mode": 0, |
||||||
|
"selection_filter": { |
||||||
|
"dimensions": true, |
||||||
|
"footprints": true, |
||||||
|
"graphics": true, |
||||||
|
"keepouts": true, |
||||||
|
"lockedItems": true, |
||||||
|
"otherItems": true, |
||||||
|
"pads": true, |
||||||
|
"text": true, |
||||||
|
"tracks": true, |
||||||
|
"vias": true, |
||||||
|
"zones": true |
||||||
|
}, |
||||||
|
"visible_items": [ |
||||||
|
0, |
||||||
|
1, |
||||||
|
2, |
||||||
|
3, |
||||||
|
4, |
||||||
|
5, |
||||||
|
8, |
||||||
|
9, |
||||||
|
10, |
||||||
|
11, |
||||||
|
12, |
||||||
|
13, |
||||||
|
14, |
||||||
|
15, |
||||||
|
16, |
||||||
|
17, |
||||||
|
18, |
||||||
|
19, |
||||||
|
20, |
||||||
|
21, |
||||||
|
22, |
||||||
|
23, |
||||||
|
24, |
||||||
|
25, |
||||||
|
26, |
||||||
|
27, |
||||||
|
28, |
||||||
|
29, |
||||||
|
30, |
||||||
|
32, |
||||||
|
33, |
||||||
|
34, |
||||||
|
35, |
||||||
|
36 |
||||||
|
], |
||||||
|
"visible_layers": "fffffff_ffffffff", |
||||||
|
"zone_display_mode": 0 |
||||||
|
}, |
||||||
|
"meta": { |
||||||
|
"filename": "packetmodem_nano2_rev2.kicad_prl", |
||||||
|
"version": 3 |
||||||
|
}, |
||||||
|
"project": { |
||||||
|
"files": [] |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,361 @@ |
|||||||
|
{ |
||||||
|
"board": { |
||||||
|
"design_settings": { |
||||||
|
"defaults": { |
||||||
|
"board_outline_line_width": 0.05, |
||||||
|
"copper_line_width": 0.2, |
||||||
|
"copper_text_italic": false, |
||||||
|
"copper_text_size_h": 1.5, |
||||||
|
"copper_text_size_v": 1.5, |
||||||
|
"copper_text_thickness": 0.3, |
||||||
|
"copper_text_upright": true, |
||||||
|
"courtyard_line_width": 0.05, |
||||||
|
"other_line_width": 0.15, |
||||||
|
"other_text_italic": false, |
||||||
|
"other_text_size_h": 1.0, |
||||||
|
"other_text_size_v": 1.0, |
||||||
|
"other_text_thickness": 0.15, |
||||||
|
"other_text_upright": true, |
||||||
|
"silk_line_width": 0.12, |
||||||
|
"silk_text_italic": false, |
||||||
|
"silk_text_size_h": 1.0, |
||||||
|
"silk_text_size_v": 1.0, |
||||||
|
"silk_text_thickness": 0.15, |
||||||
|
"silk_text_upright": true |
||||||
|
}, |
||||||
|
"diff_pair_dimensions": [ |
||||||
|
{ |
||||||
|
"gap": 0.25, |
||||||
|
"via_gap": 0.25, |
||||||
|
"width": 0.2 |
||||||
|
} |
||||||
|
], |
||||||
|
"drc_exclusions": [], |
||||||
|
"rule_severitieslegacy_courtyards_overlap": true, |
||||||
|
"rule_severitieslegacy_no_courtyard_defined": false, |
||||||
|
"rules": { |
||||||
|
"allow_blind_buried_vias": false, |
||||||
|
"allow_microvias": false, |
||||||
|
"min_hole_to_hole": 0.25, |
||||||
|
"min_microvia_diameter": 0.2, |
||||||
|
"min_microvia_drill": 0.09999999999999999, |
||||||
|
"min_through_hole_diameter": 0.3, |
||||||
|
"min_track_width": 0.2, |
||||||
|
"min_via_diameter": 0.4, |
||||||
|
"solder_mask_clearance": 0.051, |
||||||
|
"solder_mask_min_width": 0.25, |
||||||
|
"solder_paste_clearance": 0.0, |
||||||
|
"solder_paste_margin_ratio": 0.0 |
||||||
|
}, |
||||||
|
"track_widths": [ |
||||||
|
0.25, |
||||||
|
0.7, |
||||||
|
1.5 |
||||||
|
], |
||||||
|
"via_dimensions": [ |
||||||
|
{ |
||||||
|
"diameter": 0.8, |
||||||
|
"drill": 0.4 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"diameter": 2.4, |
||||||
|
"drill": 0.8 |
||||||
|
} |
||||||
|
] |
||||||
|
}, |
||||||
|
"layer_presets": [] |
||||||
|
}, |
||||||
|
"boards": [], |
||||||
|
"cvpcb": { |
||||||
|
"equivalence_files": [] |
||||||
|
}, |
||||||
|
"erc": { |
||||||
|
"erc_exclusions": [], |
||||||
|
"meta": { |
||||||
|
"version": 0 |
||||||
|
}, |
||||||
|
"pin_map": [ |
||||||
|
[ |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
1, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
2 |
||||||
|
], |
||||||
|
[ |
||||||
|
0, |
||||||
|
2, |
||||||
|
0, |
||||||
|
1, |
||||||
|
0, |
||||||
|
0, |
||||||
|
1, |
||||||
|
0, |
||||||
|
2, |
||||||
|
2, |
||||||
|
2, |
||||||
|
2 |
||||||
|
], |
||||||
|
[ |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
1, |
||||||
|
0, |
||||||
|
1, |
||||||
|
0, |
||||||
|
1, |
||||||
|
2 |
||||||
|
], |
||||||
|
[ |
||||||
|
0, |
||||||
|
1, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
1, |
||||||
|
1, |
||||||
|
2, |
||||||
|
1, |
||||||
|
1, |
||||||
|
2 |
||||||
|
], |
||||||
|
[ |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
1, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
2 |
||||||
|
], |
||||||
|
[ |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
2 |
||||||
|
], |
||||||
|
[ |
||||||
|
1, |
||||||
|
1, |
||||||
|
1, |
||||||
|
1, |
||||||
|
1, |
||||||
|
0, |
||||||
|
1, |
||||||
|
1, |
||||||
|
1, |
||||||
|
1, |
||||||
|
1, |
||||||
|
2 |
||||||
|
], |
||||||
|
[ |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
1, |
||||||
|
0, |
||||||
|
0, |
||||||
|
1, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
2 |
||||||
|
], |
||||||
|
[ |
||||||
|
0, |
||||||
|
2, |
||||||
|
1, |
||||||
|
2, |
||||||
|
0, |
||||||
|
0, |
||||||
|
1, |
||||||
|
0, |
||||||
|
2, |
||||||
|
2, |
||||||
|
2, |
||||||
|
2 |
||||||
|
], |
||||||
|
[ |
||||||
|
0, |
||||||
|
2, |
||||||
|
0, |
||||||
|
1, |
||||||
|
0, |
||||||
|
0, |
||||||
|
1, |
||||||
|
0, |
||||||
|
2, |
||||||
|
0, |
||||||
|
0, |
||||||
|
2 |
||||||
|
], |
||||||
|
[ |
||||||
|
0, |
||||||
|
2, |
||||||
|
1, |
||||||
|
1, |
||||||
|
0, |
||||||
|
0, |
||||||
|
1, |
||||||
|
0, |
||||||
|
2, |
||||||
|
0, |
||||||
|
0, |
||||||
|
2 |
||||||
|
], |
||||||
|
[ |
||||||
|
2, |
||||||
|
2, |
||||||
|
2, |
||||||
|
2, |
||||||
|
2, |
||||||
|
2, |
||||||
|
2, |
||||||
|
2, |
||||||
|
2, |
||||||
|
2, |
||||||
|
2, |
||||||
|
2 |
||||||
|
] |
||||||
|
], |
||||||
|
"rule_severities": { |
||||||
|
"bus_definition_conflict": "error", |
||||||
|
"bus_entry_needed": "error", |
||||||
|
"bus_label_syntax": "error", |
||||||
|
"bus_to_bus_conflict": "error", |
||||||
|
"bus_to_net_conflict": "error", |
||||||
|
"different_unit_footprint": "error", |
||||||
|
"different_unit_net": "error", |
||||||
|
"duplicate_reference": "error", |
||||||
|
"duplicate_sheet_names": "error", |
||||||
|
"extra_units": "error", |
||||||
|
"global_label_dangling": "warning", |
||||||
|
"hier_label_mismatch": "error", |
||||||
|
"label_dangling": "error", |
||||||
|
"lib_symbol_issues": "warning", |
||||||
|
"multiple_net_names": "warning", |
||||||
|
"net_not_bus_member": "warning", |
||||||
|
"no_connect_connected": "warning", |
||||||
|
"no_connect_dangling": "warning", |
||||||
|
"pin_not_connected": "error", |
||||||
|
"pin_not_driven": "error", |
||||||
|
"pin_to_pin": "warning", |
||||||
|
"power_pin_not_driven": "error", |
||||||
|
"similar_labels": "warning", |
||||||
|
"unannotated": "error", |
||||||
|
"unit_value_mismatch": "error", |
||||||
|
"unresolved_variable": "error", |
||||||
|
"wire_dangling": "error" |
||||||
|
} |
||||||
|
}, |
||||||
|
"libraries": { |
||||||
|
"pinned_footprint_libs": [], |
||||||
|
"pinned_symbol_libs": [] |
||||||
|
}, |
||||||
|
"meta": { |
||||||
|
"filename": "packetmodem_nano2_rev2.kicad_pro", |
||||||
|
"version": 1 |
||||||
|
}, |
||||||
|
"net_settings": { |
||||||
|
"classes": [ |
||||||
|
{ |
||||||
|
"bus_width": 12.0, |
||||||
|
"clearance": 0.2, |
||||||
|
"diff_pair_gap": 0.25, |
||||||
|
"diff_pair_via_gap": 0.25, |
||||||
|
"diff_pair_width": 0.2, |
||||||
|
"line_style": 0, |
||||||
|
"microvia_diameter": 0.3, |
||||||
|
"microvia_drill": 0.1, |
||||||
|
"name": "Default", |
||||||
|
"pcb_color": "rgba(0, 0, 0, 0.000)", |
||||||
|
"schematic_color": "rgba(0, 0, 0, 0.000)", |
||||||
|
"track_width": 0.25, |
||||||
|
"via_diameter": 0.8, |
||||||
|
"via_drill": 0.4, |
||||||
|
"wire_width": 6.0 |
||||||
|
} |
||||||
|
], |
||||||
|
"meta": { |
||||||
|
"version": 2 |
||||||
|
}, |
||||||
|
"net_colors": null |
||||||
|
}, |
||||||
|
"pcbnew": { |
||||||
|
"last_paths": { |
||||||
|
"gencad": "", |
||||||
|
"idf": "", |
||||||
|
"netlist": "packetmodem_nano2_rev2.net", |
||||||
|
"specctra_dsn": "", |
||||||
|
"step": "", |
||||||
|
"vrml": "" |
||||||
|
}, |
||||||
|
"page_layout_descr_file": "" |
||||||
|
}, |
||||||
|
"schematic": { |
||||||
|
"annotate_start_num": 0, |
||||||
|
"drawing": { |
||||||
|
"default_line_thickness": 6.0, |
||||||
|
"default_text_size": 50.0, |
||||||
|
"field_names": [], |
||||||
|
"intersheets_ref_own_page": false, |
||||||
|
"intersheets_ref_prefix": "", |
||||||
|
"intersheets_ref_short": false, |
||||||
|
"intersheets_ref_show": false, |
||||||
|
"intersheets_ref_suffix": "", |
||||||
|
"junction_size_choice": 3, |
||||||
|
"label_size_ratio": 0.25, |
||||||
|
"pin_symbol_size": 0.0, |
||||||
|
"text_offset_ratio": 0.08 |
||||||
|
}, |
||||||
|
"legacy_lib_dir": "", |
||||||
|
"legacy_lib_list": [], |
||||||
|
"meta": { |
||||||
|
"version": 1 |
||||||
|
}, |
||||||
|
"net_format_name": "", |
||||||
|
"ngspice": { |
||||||
|
"fix_include_paths": true, |
||||||
|
"fix_passive_vals": false, |
||||||
|
"meta": { |
||||||
|
"version": 0 |
||||||
|
}, |
||||||
|
"model_mode": 0, |
||||||
|
"workbook_filename": "" |
||||||
|
}, |
||||||
|
"page_layout_descr_file": "", |
||||||
|
"plot_directory": "", |
||||||
|
"spice_adjust_passive_values": false, |
||||||
|
"spice_external_command": "spice \"%I\"", |
||||||
|
"subpart_first_id": 65, |
||||||
|
"subpart_id_separator": 0 |
||||||
|
}, |
||||||
|
"sheets": [], |
||||||
|
"text_variables": {} |
||||||
|
} |
After Width: | Height: | Size: 534 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 3.6 MiB |
After Width: | Height: | Size: 110 KiB |
After Width: | Height: | Size: 355 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 384 KiB |
After Width: | Height: | Size: 92 KiB |
@ -0,0 +1,482 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang=""> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8" /> |
||||||
|
<meta name="generator" content="pandoc" /> |
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> |
||||||
|
<meta name="author" content="M.T. Konstapel" /> |
||||||
|
<meta name="dcterms.date" content="2024-02-14" /> |
||||||
|
<title>APRS digipeater installation guide</title> |
||||||
|
<link rel="stylesheet" href="./css/mvp.css" /> |
||||||
|
<style type="text/css"> |
||||||
|
:root { |
||||||
|
--width-content: 1080px; |
||||||
|
} |
||||||
|
|
||||||
|
nav { |
||||||
|
justify-content: space-around; |
||||||
|
} |
||||||
|
|
||||||
|
</style> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<header id="title-block-header"> |
||||||
|
<nav id="TOC"> |
||||||
|
<ul> |
||||||
|
<li> |
||||||
|
<a href="#">Index</a> |
||||||
|
<ul> |
||||||
|
<li><a |
||||||
|
href="#installation-guide-pe1rxf-aprs-digipeater-and-weather-station" |
||||||
|
id="toc-installation-guide-pe1rxf-aprs-digipeater-and-weather-station">Installation |
||||||
|
guide PE1RXF APRS digipeater and weather station</a></li> |
||||||
|
<li><a href="#preparing-the-sd-card" |
||||||
|
id="toc-preparing-the-sd-card">Preparing the SD |
||||||
|
card</a></li> |
||||||
|
<li><a href="#before-the-first-boot" |
||||||
|
id="toc-before-the-first-boot">Before the first |
||||||
|
boot</a></li> |
||||||
|
<li><a href="#the-pi-is-booted-for-the-first-time" |
||||||
|
id="toc-the-pi-is-booted-for-the-first-time">The Pi is |
||||||
|
booted for the first time</a></li> |
||||||
|
<li><a href="#from-a-vanilla-pi-to-an-aprs-digipeater" |
||||||
|
id="toc-from-a-vanilla-pi-to-an-aprs-digipeater">From a |
||||||
|
vanilla Pi to an APRS digipeater</a></li> |
||||||
|
<li><a href="#backup-sd-card" id="toc-backup-sd-card">Backup |
||||||
|
SD card!</a></li> |
||||||
|
</ul> |
||||||
|
</li> |
||||||
|
<li> |
||||||
|
<a href="https://git.meezenest.nl/marcel/aprs_digipeater">Git repo</a> |
||||||
|
</li> |
||||||
|
<li> |
||||||
|
<a href="https://meezenest.nl/mees/aprs_digipeater.html">Back</a> |
||||||
|
</li> |
||||||
|
</ul> |
||||||
|
|
||||||
|
<a href="https://www.meezenest.nl/mees/"><img alt="Logo" src="./images/mees_logo.svg" height="70"></a> |
||||||
|
</nav> |
||||||
|
<h1 class="title">APRS digipeater installation guide</h1> |
||||||
|
<p class="subtitle">not for the faint of heart</p> |
||||||
|
<p class="author">M.T. Konstapel</p> |
||||||
|
<p class="date">2024-02-14</p> |
||||||
|
</header> |
||||||
|
<main> |
||||||
|
<article> |
||||||
|
<p><b>Abstract </b><p>This project is a collection of former (and some |
||||||
|
new) projects connected together to make an APRS digipeater, which |
||||||
|
doubles as an APRS weather station, with PE1RXF telemetry server |
||||||
|
capabilities.</p></p> |
||||||
|
<h1 |
||||||
|
id="installation-guide-pe1rxf-aprs-digipeater-and-weather-station">Installation |
||||||
|
guide PE1RXF APRS digipeater and weather station</h1> |
||||||
|
<p>This guide assumes you are using the LoRa hat for the Raspberry Pi |
||||||
|
Zero from Mees Electronics.</p> |
||||||
|
<h1 id="preparing-the-sd-card">Preparing the SD card</h1> |
||||||
|
<p>Download the latest 32 bit version of Raspberry OS. Do not use the 64 |
||||||
|
bit version. It will probably work, but some software I use might not |
||||||
|
work on 64 bit.</p> |
||||||
|
<pre><code>$ unxz image_name.img.xz |
||||||
|
$ sudo dd if=image_name.img of=/dev/name_of_block_device bs=4M conv=fsync status=progress</code></pre> |
||||||
|
<h1 id="before-the-first-boot">Before the first boot</h1> |
||||||
|
<h3 id="mount-the-boot-partition-on-a-computer.">Mount the boot |
||||||
|
partition on a computer.</h3> |
||||||
|
<h3 id="create-a-file-called-userconf-in-boot">Create a file called |
||||||
|
“userconf” in /boot</h3> |
||||||
|
<pre><code>$ nano userconf</code></pre> |
||||||
|
<p>This file should only have one line of text, with |
||||||
|
username:encrypted-password – that is, your preferred username, followed |
||||||
|
by a colon, and then an encrypted representation of the password you |
||||||
|
wish to use.</p> |
||||||
|
<p>The simplest approach to generate the encrypted password is to use |
||||||
|
OpenSSL on a Raspberry Pi that is already running — Activate a terminal |
||||||
|
window and type: echo ‘frambozentaart’ | openssl passwd -6 -stdin This |
||||||
|
will generate what appears to be a random string of characters, but is |
||||||
|
really an encrypted version of the provided password.</p> |
||||||
|
<p>This is the line that should go in userconf.txt:</p> |
||||||
|
<pre><code>taart:$6$wOOBx/uscFupsHDn$PSjutVwKxZyGa9.11NP/wpy4Wtn4qA0Xx3AY5KvuzmxOm7En5l2/O33yNWISmWxTlWHzLuVaPnJO0ccYVdDNu0</code></pre> |
||||||
|
<p>This defines user: ‘taart’ with password ‘frambozentaart’</p> |
||||||
|
<h3 id="create-an-empty-file-called-ssh-in-boot">Create an empty file |
||||||
|
called “ssh” in /boot</h3> |
||||||
|
<pre><code>$ touch ssh</code></pre> |
||||||
|
<h3 id="create-a-file-called-wpa_supplicant.conf-in-boot">Create a file |
||||||
|
called “wpa_supplicant.conf” in /boot</h3> |
||||||
|
<pre><code>$ nano wpa_supplicant.conf</code></pre> |
||||||
|
<p>Add the following text:</p> |
||||||
|
<pre><code>country=nl |
||||||
|
update_config=1 |
||||||
|
ctrl_interface=/var/run/wpa_supplicant |
||||||
|
network={ |
||||||
|
scan_ssid=1 |
||||||
|
ssid="Your WiFi Name" |
||||||
|
psk="Your WiFi Password" |
||||||
|
}</code></pre> |
||||||
|
<h3 id="activate-auto-power-off-button">Activate Auto power off |
||||||
|
button</h3> |
||||||
|
<pre><code>$ nano config.txt</code></pre> |
||||||
|
<p>Add the following text:</p> |
||||||
|
<pre><code>dtoverlay=gpio-poweroff,gpiopin=21,active_low="y" |
||||||
|
dtoverlay=gpio-shutdown,gpio_pin=16</code></pre> |
||||||
|
<p>GPIO21 goes high when RPi is booting and stays high until after |
||||||
|
succesfully halting the processor with “sudo halt” or shutdown via |
||||||
|
external button. When GPIO16 goes low (external button pressed), RPi |
||||||
|
goes into shutdown.</p> |
||||||
|
<h3 |
||||||
|
id="insert-the-sd-card-in-the-raspberry-pi-and-press-the-power-button">Insert |
||||||
|
the SD card in the Raspberry Pi and press the power button</h3> |
||||||
|
<p>During the first boot, the Pi will reboot once. Because of the |
||||||
|
external power button, this will not work: the Pi will shutdown. Power |
||||||
|
up the Pi by pressing the external power button again.</p> |
||||||
|
<h1 id="the-pi-is-booted-for-the-first-time">The Pi is booted for the |
||||||
|
first time</h1> |
||||||
|
<p>Search for the ip address of the Raspberry Pi (for exammple by |
||||||
|
logging into your router) and ssh into the Pi (user: taart, password: |
||||||
|
frambozentaart)</p> |
||||||
|
<h3 id="create-new-user">Create new user</h3> |
||||||
|
<pre><code>$ sudo adduser user_name</code></pre> |
||||||
|
<p>Add the new user to all the groups of the default user (taart)</p> |
||||||
|
<pre><code>$ sudo nano /etc/group</code></pre> |
||||||
|
<p>Replace taart by user_name ,taart (for example adm:x:4:taart becomes |
||||||
|
adm_x:username,taart)</p> |
||||||
|
<p>Add user to sudo group</p> |
||||||
|
<pre><code>$ sudo usermod -aG sudo user_name</code></pre> |
||||||
|
<p>Reboot the system and log in as new user.</p> |
||||||
|
<p>Test user’s sudo permissions by executing a random command as sudo |
||||||
|
(for example: sudo ls)</p> |
||||||
|
<p>Remove default user taart</p> |
||||||
|
<pre><code>$ sudo deluser -remove-home taart</code></pre> |
||||||
|
<p>Disable auto-login.</p> |
||||||
|
<pre><code>$ sudo raspi-config</code></pre> |
||||||
|
<p>Set system-options / S5 Boot/Auto login / B1 Console</p> |
||||||
|
<h3 id="login-with-ssh-without-password">Login with ssh without |
||||||
|
password</h3> |
||||||
|
<p>Create key on local machine</p> |
||||||
|
<pre><code>$ ssh-keygen -t ed25519 -f ~/.ssh/aprs-weather-server -C "marcel aprs-weather-server-server"</code></pre> |
||||||
|
<p>Copy the key to the Raspberry Pi</p> |
||||||
|
<pre><code>$ ssh-copy-id -i ~/.ssh/aprs-weather-server.pub marcel@server_ip_address</code></pre> |
||||||
|
<p>Log in on the Raspberry Pi without password</p> |
||||||
|
<pre><code>$ ssh -o "IdentitiesOnly=yes" -i .ssh/aprs-weather-server <IP-adres>></code></pre> |
||||||
|
<p>Optional: on the local machine edit .ssh/config and add the |
||||||
|
server/key combination. Now you can log in with just “ssh |
||||||
|
<server-name”</p> |
||||||
|
<h3 id="housekeeping">Housekeeping</h3> |
||||||
|
<p>Change login screen via motd (message of the day).</p> |
||||||
|
<pre><code>$ nano /etc/motd</code></pre> |
||||||
|
<p>Change hostname.</p> |
||||||
|
<pre><code>$ sudo nano /etc/hostname |
||||||
|
$ sudo nano /etc/hosts</code></pre> |
||||||
|
<p>Setting the locale</p> |
||||||
|
<pre><code>$ sudo raspi-config</code></pre> |
||||||
|
<p>Edit Localisation options / change locale (en_US.UTF-8 UTF-8) And set |
||||||
|
time zone</p> |
||||||
|
<p>For years now, Perl give Locale warnings. Fix it:</p> |
||||||
|
<pre><code>$ sudo nano /etc/default/locale</code></pre> |
||||||
|
<p>add:</p> |
||||||
|
<pre><code>LC_ALL=en_US.UTF-8 |
||||||
|
LANGUAGE=en_US.UTF-8</code></pre> |
||||||
|
<p>Update software</p> |
||||||
|
<pre><code>$ sudo apt-get update |
||||||
|
$ sudo apt-get upgrade</code></pre> |
||||||
|
<h3 id="install-firewall">Install firewall</h3> |
||||||
|
<pre><code>$ sudo apt install ufw |
||||||
|
$ sudo ufw allow ssh |
||||||
|
$ sudo ufw enable |
||||||
|
$ sudo ufw status</code></pre> |
||||||
|
<h1 id="from-a-vanilla-pi-to-an-aprs-digipeater">From a vanilla Pi to an |
||||||
|
APRS digipeater</h1> |
||||||
|
<h3 id="enable-i2c-rtc">Enable I2C RTC</h3> |
||||||
|
<pre><code>$ sudo rapi-config</code></pre> |
||||||
|
<p>enable i2c</p> |
||||||
|
<pre><code>$ sudo reboot |
||||||
|
|
||||||
|
$ sudo apt-get install i2c-tools |
||||||
|
|
||||||
|
$ sudo i2cdetect -y 1</code></pre> |
||||||
|
<p>#68 is RTC</p> |
||||||
|
<pre><code>$ sudo nano /boot/firmware/config.txt</code></pre> |
||||||
|
<p>Add dtoverlay=i2c-rtc,ds1307</p> |
||||||
|
<pre><code>$ sudo reboot |
||||||
|
|
||||||
|
$ sudo i2cdetect -y 1</code></pre> |
||||||
|
<p>If UU appears instead of 68 then we have successfully loaded in the |
||||||
|
Kernel driver for our RTC circuit.</p> |
||||||
|
<p>Disable fake hardware clock:</p> |
||||||
|
<pre><code>$ sudo apt-get -y remove fake-hwclock |
||||||
|
$ sudo update-rc.d -f fake-hwclock remove |
||||||
|
$ sudo systemctl disable fake-hwclock |
||||||
|
|
||||||
|
$ sudo nano /lib/udev/hwclock-set</code></pre> |
||||||
|
<p>Find</p> |
||||||
|
<pre><code>if [ -e /run/systemd/system ] ; then |
||||||
|
exit 0 |
||||||
|
fi</code></pre> |
||||||
|
<p>Replace with:</p> |
||||||
|
<pre><code>#if [ -e /run/systemd/system ] ; then |
||||||
|
# exit 0 |
||||||
|
#fi</code></pre> |
||||||
|
<p>Also comment out the two lines</p> |
||||||
|
<pre><code>/sbin/hwclock --rtc=$dev --systz --badyear</code></pre> |
||||||
|
<p>and</p> |
||||||
|
<pre><code>/sbin/hwclock --rtc=$dev --systz</code></pre> |
||||||
|
<p>Read RTC:</p> |
||||||
|
<pre><code>$ sudo hwclock -r</code></pre> |
||||||
|
<p>Set RTC from system time:</p> |
||||||
|
<pre><code>$ sudo hwclock -w</code></pre> |
||||||
|
<h3 id="ax.25-support">AX.25 support</h3> |
||||||
|
<pre><code>$ sudo apt-get install libax25 ax25-apps ax25-tools |
||||||
|
$ sudo nano /etc/ax25/axports</code></pre> |
||||||
|
<p>add:</p> |
||||||
|
<pre><code>ax0 PE1RXF-1 9600 255 2 144.800 MHz APRS (1200 bps) |
||||||
|
ax1 PE1RXF-3 9600 255 2 433.775 MHz APRS (LORA)</code></pre> |
||||||
|
<h3 id="aprx-software">APRX software</h3> |
||||||
|
<pre><code>$ sudo apt-get install aprx |
||||||
|
$ sudo systemctl enable aprx |
||||||
|
|
||||||
|
$ sudo nano /etc/aprs.conf:</code></pre> |
||||||
|
<p>Add the following (may be different on your machine)</p> |
||||||
|
<pre><code>mycall PE1RXF-1 |
||||||
|
|
||||||
|
<aprsis> |
||||||
|
passcode 19123 |
||||||
|
server euro.aprs2.net 14580 |
||||||
|
</aprsis> |
||||||
|
|
||||||
|
<logging> |
||||||
|
|
||||||
|
pidfile /var/run/aprx.pid |
||||||
|
|
||||||
|
rflog /var/log/aprx/aprx-rf.log |
||||||
|
|
||||||
|
|
||||||
|
aprxlog /var/log/aprx/aprx.log |
||||||
|
|
||||||
|
</logging> |
||||||
|
|
||||||
|
<interface> |
||||||
|
ax25-device $mycall |
||||||
|
tx-ok true # transmitter enable defaults to false |
||||||
|
telem-to-is false # set to 'false' to disable |
||||||
|
</interface> |
||||||
|
|
||||||
|
#Secondary interface (internal LoRa radio) |
||||||
|
<interface> |
||||||
|
callsign PE1RXF-3 |
||||||
|
ax25-device PE1RXF-3 |
||||||
|
tx-ok true |
||||||
|
telem-to-is false # set to 'false' to disable |
||||||
|
</interface> |
||||||
|
|
||||||
|
|
||||||
|
<beacon> |
||||||
|
beaconmode aprsis |
||||||
|
cycle-size 20m |
||||||
|
beacon srccall PE1RXF-1 symbol "R&" lat "5302.78N" lon "00707.91E" comment "APRS RX iGATE 144.800MHz https://meezenest.nl/pe1rxf" |
||||||
|
</beacon> |
||||||
|
<beacon> |
||||||
|
beaconmode aprsis |
||||||
|
cycle-size 20m |
||||||
|
beacon srccall PE1RXF-3 symbol "L&" lat "5302.78N" lon "00707.91E" comment "LoRa APRS RX iGATE 433.775MHz https://meezenest.nl/pe1rxf" |
||||||
|
</beacon> |
||||||
|
#<beacon> |
||||||
|
# beaconmode radio |
||||||
|
# cycle-size 30m |
||||||
|
# beacon interface PE1RXF-3 symbol "L&" lat "5302.78N" lon "00707.91E" comment "LoRa APRS RX iGATE 433.775MHz https://meezenest.nl/pe1rxf" |
||||||
|
#</beacon> |
||||||
|
|
||||||
|
<digipeater> |
||||||
|
transmitter $mycall |
||||||
|
|
||||||
|
<source> |
||||||
|
source $mycall |
||||||
|
relay-type directonly |
||||||
|
viscous-delay 5 |
||||||
|
# Forward enkel PE1RXF* (bij wet verboden om als relais voor derden te fungeren) |
||||||
|
filter b/PE1RXF* |
||||||
|
</source> |
||||||
|
|
||||||
|
<source> |
||||||
|
source PE1RXF-3 |
||||||
|
relay-type directonly |
||||||
|
viscous-delay 5 |
||||||
|
filter b/PE1RXF* |
||||||
|
</source> |
||||||
|
|
||||||
|
</digipeater> |
||||||
|
|
||||||
|
# LoRa digipeater |
||||||
|
<digipeater> |
||||||
|
|
||||||
|
transmitter PE1RXF-3 |
||||||
|
|
||||||
|
<source> |
||||||
|
source $mycall |
||||||
|
relay-type directonly |
||||||
|
viscous-delay 5 |
||||||
|
filter b/PE1RXF* |
||||||
|
</source> |
||||||
|
|
||||||
|
<source> |
||||||
|
source PE1RXF-3 |
||||||
|
relay-type directonly |
||||||
|
viscous-delay 5 |
||||||
|
filter b/PE1RXF* |
||||||
|
</source> |
||||||
|
|
||||||
|
</digipeater></code></pre> |
||||||
|
<h3 id="some-commands-must-be-called-as-sudo">Some commands must be |
||||||
|
called as sudo</h3> |
||||||
|
<p>but we don’t want to enter the password all the time. Especcially at |
||||||
|
boot time!</p> |
||||||
|
<pre><code>$ sudo visudo</code></pre> |
||||||
|
<p>Add:</p> |
||||||
|
<pre><code>marcel ALL = (root) NOPASSWD: /usr/sbin/kissattach |
||||||
|
marcel ALL = (root) NOPASSWD: /usr/sbin/kissparms |
||||||
|
marcel ALL = (root) NOPASSWD: /usr/bin/socat |
||||||
|
marcel ALL = (root) NOPASSWD: /usr/local/bin/tncattach</code></pre> |
||||||
|
<h3 id="bd-packet-modem">1200bd packet modem</h3> |
||||||
|
<pre><code>$ mkdir ham |
||||||
|
$ cd ham |
||||||
|
$ nano ~/ham/start_packetmodem_nano2.sh</code></pre> |
||||||
|
<p>Add (make sure USB port is correct):</p> |
||||||
|
<pre><code>#!/bin/bash |
||||||
|
|
||||||
|
echo "Starting packet modem nano 2" |
||||||
|
|
||||||
|
# Packet modem uses a CS340 chip, which does not have a serial number. If other USB devices |
||||||
|
# with a CS340 chip are pluged in the software cannot distinquish between the various devices. |
||||||
|
# But the modem is always connected to the same physical USB port. Use this port number |
||||||
|
# instead of /dev/USBx. |
||||||
|
serial_port=$(readlink -f /dev/serial/by-path/platform-3f980000.usb-usb-0:1.4:1.0-port0) |
||||||
|
# Set serial port in RAW mode. Otherwise some charcters may be lost to the modem. |
||||||
|
/usr/bin/stty -F $serial_port raw |
||||||
|
sleep 1 |
||||||
|
sudo /usr/sbin/kissattach $serial_port ax0 |
||||||
|
sleep 1 |
||||||
|
sudo /usr/sbin/kissparms -p ax0 -t 500 -s 200 -r 32 -l 100 -f n</code></pre> |
||||||
|
<p>Make file executable:</p> |
||||||
|
<pre><code>$ chmod u+x ./start_packetmodem_nano2.sh</code></pre> |
||||||
|
<h3 id="lora-aprs-modem">LoRa APRS modem</h3> |
||||||
|
<pre><code>$ sudo apt-get install git |
||||||
|
$ sudo raspi-config</code></pre> |
||||||
|
<p>Enable SPI</p> |
||||||
|
<pre><code>$ sudo apt-get install socat</code></pre> |
||||||
|
<p>clone LoRa driver:</p> |
||||||
|
<pre><code>$ cd ham |
||||||
|
$ git clone https://git.meezenest.nl/marcel/RPi-LoRa-KISS-TNC.git</code></pre> |
||||||
|
<p>In start_all.sh the line with socat probably says ax2, change to |
||||||
|
ax1</p> |
||||||
|
<h3 id="weather-station">Weather station</h3> |
||||||
|
<pre><code>$ get the weather_station software, which is still under development (will be published on https://git.meezenest.nl/) |
||||||
|
|
||||||
|
$ sudo apt install python3-pip</code></pre> |
||||||
|
<p>Install pythonax25, which can be found at |
||||||
|
~/ham/weather_station/python-ax25:</p> |
||||||
|
<pre><code>$ cd ~/ham/weather_station/python-ax25 |
||||||
|
$ sudo ./install.sh</code></pre> |
||||||
|
<p>Install other libraries:</p> |
||||||
|
<pre><code>$ pip3 install minimalmodbus --break-system-packages |
||||||
|
$ pip3 install retrying --break-system-packages |
||||||
|
$ pip3 install pyaml --break-system-packages</code></pre> |
||||||
|
<p>Add /home/marcel/.local/bin to path:</p> |
||||||
|
<pre><code>$ nano .bashrc |
||||||
|
|
||||||
|
add: |
||||||
|
export PATH=/home/marcel/.local/bin:$PATH</code></pre> |
||||||
|
<h3 id="rnode">Rnode</h3> |
||||||
|
<pre><code>$ pip3 install rns --break-system-packages</code></pre> |
||||||
|
<p>If the Rnode modem firmware is not yet installed on the ESP32 board |
||||||
|
do:</p> |
||||||
|
<pre><code>$ rnodeconf /dev/ttyACM0 --autoinstall</code></pre> |
||||||
|
<p>Install tncattach:</p> |
||||||
|
<pre><code>$ cd ~/ham |
||||||
|
$ git clone https://github.com/markqvist/tncattach.git |
||||||
|
$ cd tncattach |
||||||
|
$ make |
||||||
|
$ sudo make install |
||||||
|
|
||||||
|
$ mkdir ~/ham/rnode_hamnet |
||||||
|
$ nano ~/ham/rnode_hamnet/start_rnode.sh and add:</code></pre> |
||||||
|
<p>Add:</p> |
||||||
|
<pre><code>#!/bin/bash |
||||||
|
|
||||||
|
# Set the Rnode in TNC mode on 434.25 MHz BW 500kHz Spreading Factor 7 Code Rate 4:5 Power 17dBm |
||||||
|
# Ideally, this command should only be executed once. |
||||||
|
/home/marcel/.local/bin/rnodeconf /dev/ttyACM0 -T --freq 434250000 --bw 500000 --txp 17 --sf 7 --cr 5 |
||||||
|
|
||||||
|
# Send station identification every 10 minutes |
||||||
|
# mtu: 496 (PtP), 482 (ethernet) or 478 (ethernet with VLAN) |
||||||
|
sudo /usr/local/bin/tncattach /dev/ttyACM0 115200 -d -e --mtu 482 --noipv6 --ipv4 192.168.44.2/24 --id PE1RXF -t 600</code></pre> |
||||||
|
<p>Make executable:</p> |
||||||
|
<pre><code>$ chmod u+x ./start_rnode.sh</code></pre> |
||||||
|
<h3 id="routing">Routing</h3> |
||||||
|
<p>To use this adapter for internet access change the default |
||||||
|
gateway:</p> |
||||||
|
<pre><code>$ sudo route add default gw 192.168.44.1 metric 30</code></pre> |
||||||
|
<p>This gives the new route priority, because the already defined |
||||||
|
default route has a metric of 100</p> |
||||||
|
<p>Change metrics by removing the route and adding it again. The |
||||||
|
exammple makes the old gateway the one with the higest priority:</p> |
||||||
|
<pre><code>$ sudo route del default gw 192.168.44.1 metric 30 |
||||||
|
$ sudo route add default gw 192.168.44.1 metric 200</code></pre> |
||||||
|
<p>chech with:</p> |
||||||
|
<pre><code>$ ip route</code></pre> |
||||||
|
<h3 |
||||||
|
id="and-also-on-the-server-site-enable-forwarding-and-nat-not-on-the-aprs-digipeater">And |
||||||
|
also, on the server site, enable forwarding and nat (NOT ON THE APRS |
||||||
|
DIGIPEATER!!!)</h3> |
||||||
|
<pre><code>$ sudo echo "1" > /proc/sys/net/ipv4/ip_forward |
||||||
|
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE |
||||||
|
$ sudo iptables -A FORWARD -i eth0 -o tnc0 -m state --state RELATED,ESTABLISHED -j ACCEPT |
||||||
|
$ sudo iptables -A FORWARD -i tnc0 -o eth0 -j ACCEPT</code></pre> |
||||||
|
<p>NOTE: make these changes permanant….</p> |
||||||
|
<pre><code>$ sudo nano /etc/sysctl.conf</code></pre> |
||||||
|
<p>uncomment: net.ipv4.ip_forward=1</p> |
||||||
|
<p>Maybe needed:</p> |
||||||
|
<pre><code># Add the following statement somewhere at the beginning |
||||||
|
# of /etc/dhcpcd.conf to prevent dhcpcd from changing MTU |
||||||
|
denyinterfaces tnc0</code></pre> |
||||||
|
<h3 id="start-script">Start script</h3> |
||||||
|
<pre><code>$ nano ~/ham/start_aprs_server.sh</code></pre> |
||||||
|
<p>Add:</p> |
||||||
|
<pre><code>#!/bin/bash |
||||||
|
|
||||||
|
echo "Starting AX.25 interfaces" |
||||||
|
# initializing 1200bd packet modem |
||||||
|
/home/marcel/ham/start_packetmodem_nano2.sh |
||||||
|
|
||||||
|
# initializing LoRa modem |
||||||
|
/home/marcel/ham/RPi-LoRa-KISS-TNC/start_all.sh |
||||||
|
|
||||||
|
# initializing RNode network over LoRa |
||||||
|
echo "Starting LoRa network interface" |
||||||
|
/home/marcel/ham/rnode_hamnet/start_rnode.sh |
||||||
|
|
||||||
|
# Start weather station software |
||||||
|
echo "Starting weather station" |
||||||
|
/home/marcel/ham/weather_station/start_weater_station.sh</code></pre> |
||||||
|
<p>And make executable</p> |
||||||
|
<pre><code>$ chmod u+x ./start_aprs_server.sh</code></pre> |
||||||
|
<p>Add to crontab:</p> |
||||||
|
<pre><code>$ crontab -e</code></pre> |
||||||
|
<p>Add:</p> |
||||||
|
<pre><code># Start APRS server at boot time (for some reason a 60 second wait is necessary) |
||||||
|
@reboot sleep 60 && /home/marcel/ham/start_aprs_server.sh</code></pre> |
||||||
|
<p>TODO:</p> |
||||||
|
<p>network route over RNode if ethernet is down</p> |
||||||
|
<p>Webinterface for sending and receiving messages over APRS (forward to |
||||||
|
e-mail?)</p> |
||||||
|
<h1 id="backup-sd-card">Backup SD card!</h1> |
||||||
|
<p>I use the script pishrink.sh to make an image.</p> |
||||||
|
<hr> |
||||||
|
</article> |
||||||
|
</main> |
||||||
|
<footer> |
||||||
|
<p>© |
||||||
|
2024-02-14 |
||||||
|
M.T. Konstapel |
||||||
|
<a href="https://meezenest.nl/mees/">https://meezenest.nl/mees/</a> |
||||||
|
</p><p>This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>. |
||||||
|
</p> |
||||||
|
</footer> |
||||||
|
</body> |
||||||
|
</html> |
@ -0,0 +1,541 @@ |
|||||||
|
--- |
||||||
|
title: APRS digipeater installation guide |
||||||
|
subtitle: not for the faint of heart |
||||||
|
author: M.T. Konstapel |
||||||
|
date: 2024-02-14 |
||||||
|
website: https://meezenest.nl/mees/ |
||||||
|
page_back: https://meezenest.nl/mees/aprs_digipeater.html |
||||||
|
logo: ./images/mees_logo.svg |
||||||
|
git_repo: https://git.meezenest.nl/marcel/aprs_digipeater |
||||||
|
numbersections: true |
||||||
|
# Formatting: |
||||||
|
geometry: "a4paper, left=2.0cm, right=2.0cm, top=1.9cm, bottom=2.54cm" |
||||||
|
abstract: > |
||||||
|
This project is a collection of former (and some new) projects connected together to make an APRS digipeater, which doubles as an APRS weather station, with PE1RXF telemetry server capabilities. |
||||||
|
--- |
||||||
|
|
||||||
|
# Installation guide PE1RXF APRS digipeater and weather station |
||||||
|
|
||||||
|
This guide assumes you are using the LoRa hat for the Raspberry Pi Zero from Mees Electronics. |
||||||
|
|
||||||
|
# Preparing the SD card |
||||||
|
|
||||||
|
Download the latest 32 bit version of Raspberry OS. Do not use the 64 bit version. It will probably work, but some software I use might not work on 64 bit. |
||||||
|
|
||||||
|
$ unxz image_name.img.xz |
||||||
|
$ sudo dd if=image_name.img of=/dev/name_of_block_device bs=4M conv=fsync status=progress |
||||||
|
|
||||||
|
# Before the first boot |
||||||
|
|
||||||
|
### Mount the boot partition on a computer. |
||||||
|
|
||||||
|
### Create a file called "userconf" in /boot |
||||||
|
|
||||||
|
$ nano userconf |
||||||
|
|
||||||
|
This file should only have one line of text, with username:encrypted-password – that is, your preferred username, followed by a colon, and then an encrypted representation of the password you wish to use. |
||||||
|
|
||||||
|
The simplest approach to generate the encrypted password is to use OpenSSL on a Raspberry Pi that is already running — Activate a terminal window and type: |
||||||
|
echo 'frambozentaart' | openssl passwd -6 -stdin |
||||||
|
This will generate what appears to be a random string of characters, but is really an encrypted version of the provided password. |
||||||
|
|
||||||
|
This is the line that should go in userconf.txt: |
||||||
|
|
||||||
|
taart:$6$wOOBx/uscFupsHDn$PSjutVwKxZyGa9.11NP/wpy4Wtn4qA0Xx3AY5KvuzmxOm7En5l2/O33yNWISmWxTlWHzLuVaPnJO0ccYVdDNu0 |
||||||
|
|
||||||
|
This defines user: 'taart' with password 'frambozentaart' |
||||||
|
|
||||||
|
### Create an empty file called "ssh" in /boot |
||||||
|
|
||||||
|
$ touch ssh |
||||||
|
|
||||||
|
### Create a file called "wpa_supplicant.conf" in /boot |
||||||
|
|
||||||
|
$ nano wpa_supplicant.conf |
||||||
|
|
||||||
|
Add the following text: |
||||||
|
|
||||||
|
country=nl |
||||||
|
update_config=1 |
||||||
|
ctrl_interface=/var/run/wpa_supplicant |
||||||
|
network={ |
||||||
|
scan_ssid=1 |
||||||
|
ssid="Your WiFi Name" |
||||||
|
psk="Your WiFi Password" |
||||||
|
} |
||||||
|
|
||||||
|
### Activate Auto power off button |
||||||
|
|
||||||
|
$ nano config.txt |
||||||
|
|
||||||
|
Add the following text: |
||||||
|
|
||||||
|
dtoverlay=gpio-poweroff,gpiopin=21,active_low="y" |
||||||
|
dtoverlay=gpio-shutdown,gpio_pin=16 |
||||||
|
|
||||||
|
GPIO21 goes high when RPi is booting and stays high until after succesfully halting the processor with "sudo halt" or shutdown via external button. |
||||||
|
When GPIO16 goes low (external button pressed), RPi goes into shutdown. |
||||||
|
|
||||||
|
### Insert the SD card in the Raspberry Pi and press the power button |
||||||
|
|
||||||
|
During the first boot, the Pi will reboot once. Because of the external power button, this will not work: the Pi will shutdown. Power up the Pi by pressing the external power button again. |
||||||
|
|
||||||
|
# The Pi is booted for the first time |
||||||
|
|
||||||
|
Search for the ip address of the Raspberry Pi (for exammple by logging into your router) and ssh into the Pi (user: taart, password: frambozentaart) |
||||||
|
|
||||||
|
### Create new user |
||||||
|
|
||||||
|
$ sudo adduser user_name |
||||||
|
|
||||||
|
Add the new user to all the groups of the default user (taart) |
||||||
|
|
||||||
|
$ sudo nano /etc/group |
||||||
|
|
||||||
|
Replace taart by user_name ,taart (for example adm:x:4:taart becomes adm_x:username,taart) |
||||||
|
|
||||||
|
Add user to sudo group |
||||||
|
|
||||||
|
$ sudo usermod -aG sudo user_name |
||||||
|
|
||||||
|
Reboot the system and log in as new user. |
||||||
|
|
||||||
|
Test user's sudo permissions by executing a random command as sudo (for example: sudo ls) |
||||||
|
|
||||||
|
Remove default user taart |
||||||
|
|
||||||
|
$ sudo deluser -remove-home taart |
||||||
|
|
||||||
|
Disable auto-login. |
||||||
|
|
||||||
|
$ sudo raspi-config |
||||||
|
|
||||||
|
Set system-options / S5 Boot/Auto login / B1 Console |
||||||
|
|
||||||
|
### Login with ssh without password |
||||||
|
|
||||||
|
|
||||||
|
Create key on local machine |
||||||
|
|
||||||
|
$ ssh-keygen -t ed25519 -f ~/.ssh/aprs-weather-server -C "marcel aprs-weather-server-server" |
||||||
|
|
||||||
|
Copy the key to the Raspberry Pi |
||||||
|
|
||||||
|
$ ssh-copy-id -i ~/.ssh/aprs-weather-server.pub marcel@server_ip_address |
||||||
|
|
||||||
|
Log in on the Raspberry Pi without password |
||||||
|
|
||||||
|
$ ssh -o "IdentitiesOnly=yes" -i .ssh/aprs-weather-server <IP-adres>> |
||||||
|
|
||||||
|
Optional: on the local machine edit .ssh/config and add the server/key combination. Now you can log in with just "ssh <server-name" |
||||||
|
|
||||||
|
### Housekeeping |
||||||
|
|
||||||
|
Change login screen via motd (message of the day). |
||||||
|
|
||||||
|
$ nano /etc/motd |
||||||
|
|
||||||
|
Change hostname. |
||||||
|
|
||||||
|
$ sudo nano /etc/hostname |
||||||
|
$ sudo nano /etc/hosts |
||||||
|
|
||||||
|
Setting the locale |
||||||
|
|
||||||
|
$ sudo raspi-config |
||||||
|
|
||||||
|
Edit Localisation options / change locale (en_US.UTF-8 UTF-8) |
||||||
|
And set time zone |
||||||
|
|
||||||
|
For years now, Perl give Locale warnings. Fix it: |
||||||
|
|
||||||
|
$ sudo nano /etc/default/locale |
||||||
|
|
||||||
|
add: |
||||||
|
|
||||||
|
LC_ALL=en_US.UTF-8 |
||||||
|
LANGUAGE=en_US.UTF-8 |
||||||
|
|
||||||
|
Update software |
||||||
|
|
||||||
|
$ sudo apt-get update |
||||||
|
$ sudo apt-get upgrade |
||||||
|
|
||||||
|
### Install firewall |
||||||
|
|
||||||
|
$ sudo apt install ufw |
||||||
|
$ sudo ufw allow ssh |
||||||
|
$ sudo ufw enable |
||||||
|
$ sudo ufw status |
||||||
|
|
||||||
|
# From a vanilla Pi to an APRS digipeater |
||||||
|
|
||||||
|
### Enable I2C RTC |
||||||
|
|
||||||
|
$ sudo rapi-config |
||||||
|
|
||||||
|
enable i2c |
||||||
|
|
||||||
|
$ sudo reboot |
||||||
|
|
||||||
|
$ sudo apt-get install i2c-tools |
||||||
|
|
||||||
|
$ sudo i2cdetect -y 1 |
||||||
|
|
||||||
|
#68 is RTC |
||||||
|
|
||||||
|
$ sudo nano /boot/firmware/config.txt |
||||||
|
|
||||||
|
Add dtoverlay=i2c-rtc,ds1307 |
||||||
|
|
||||||
|
$ sudo reboot |
||||||
|
|
||||||
|
$ sudo i2cdetect -y 1 |
||||||
|
|
||||||
|
If UU appears instead of 68 then we have successfully loaded in the Kernel driver for our RTC circuit. |
||||||
|
|
||||||
|
Disable fake hardware clock: |
||||||
|
|
||||||
|
$ sudo apt-get -y remove fake-hwclock |
||||||
|
$ sudo update-rc.d -f fake-hwclock remove |
||||||
|
$ sudo systemctl disable fake-hwclock |
||||||
|
|
||||||
|
$ sudo nano /lib/udev/hwclock-set |
||||||
|
|
||||||
|
Find |
||||||
|
|
||||||
|
if [ -e /run/systemd/system ] ; then |
||||||
|
exit 0 |
||||||
|
fi |
||||||
|
|
||||||
|
Replace with: |
||||||
|
|
||||||
|
#if [ -e /run/systemd/system ] ; then |
||||||
|
# exit 0 |
||||||
|
#fi |
||||||
|
|
||||||
|
Also comment out the two lines |
||||||
|
|
||||||
|
/sbin/hwclock --rtc=$dev --systz --badyear |
||||||
|
|
||||||
|
and |
||||||
|
|
||||||
|
/sbin/hwclock --rtc=$dev --systz |
||||||
|
|
||||||
|
Read RTC: |
||||||
|
|
||||||
|
$ sudo hwclock -r |
||||||
|
|
||||||
|
Set RTC from system time: |
||||||
|
|
||||||
|
$ sudo hwclock -w |
||||||
|
|
||||||
|
|
||||||
|
### AX.25 support |
||||||
|
|
||||||
|
$ sudo apt-get install libax25 ax25-apps ax25-tools |
||||||
|
$ sudo nano /etc/ax25/axports |
||||||
|
|
||||||
|
add: |
||||||
|
|
||||||
|
ax0 PE1RXF-1 9600 255 2 144.800 MHz APRS (1200 bps) |
||||||
|
ax1 PE1RXF-3 9600 255 2 433.775 MHz APRS (LORA) |
||||||
|
|
||||||
|
### APRX software |
||||||
|
|
||||||
|
$ sudo apt-get install aprx |
||||||
|
$ sudo systemctl enable aprx |
||||||
|
|
||||||
|
$ sudo nano /etc/aprs.conf: |
||||||
|
|
||||||
|
Add the following (may be different on your machine) |
||||||
|
|
||||||
|
mycall PE1RXF-1 |
||||||
|
|
||||||
|
<aprsis> |
||||||
|
passcode 19123 |
||||||
|
server euro.aprs2.net 14580 |
||||||
|
</aprsis> |
||||||
|
|
||||||
|
<logging> |
||||||
|
|
||||||
|
pidfile /var/run/aprx.pid |
||||||
|
|
||||||
|
rflog /var/log/aprx/aprx-rf.log |
||||||
|
|
||||||
|
|
||||||
|
aprxlog /var/log/aprx/aprx.log |
||||||
|
|
||||||
|
</logging> |
||||||
|
|
||||||
|
<interface> |
||||||
|
ax25-device $mycall |
||||||
|
tx-ok true # transmitter enable defaults to false |
||||||
|
telem-to-is false # set to 'false' to disable |
||||||
|
</interface> |
||||||
|
|
||||||
|
#Secondary interface (internal LoRa radio) |
||||||
|
<interface> |
||||||
|
callsign PE1RXF-3 |
||||||
|
ax25-device PE1RXF-3 |
||||||
|
tx-ok true |
||||||
|
telem-to-is false # set to 'false' to disable |
||||||
|
</interface> |
||||||
|
|
||||||
|
|
||||||
|
<beacon> |
||||||
|
beaconmode aprsis |
||||||
|
cycle-size 20m |
||||||
|
beacon srccall PE1RXF-1 symbol "R&" lat "5302.78N" lon "00707.91E" comment "APRS RX iGATE 144.800MHz https://meezenest.nl/pe1rxf" |
||||||
|
</beacon> |
||||||
|
<beacon> |
||||||
|
beaconmode aprsis |
||||||
|
cycle-size 20m |
||||||
|
beacon srccall PE1RXF-3 symbol "L&" lat "5302.78N" lon "00707.91E" comment "LoRa APRS RX iGATE 433.775MHz https://meezenest.nl/pe1rxf" |
||||||
|
</beacon> |
||||||
|
#<beacon> |
||||||
|
# beaconmode radio |
||||||
|
# cycle-size 30m |
||||||
|
# beacon interface PE1RXF-3 symbol "L&" lat "5302.78N" lon "00707.91E" comment "LoRa APRS RX iGATE 433.775MHz https://meezenest.nl/pe1rxf" |
||||||
|
#</beacon> |
||||||
|
|
||||||
|
<digipeater> |
||||||
|
transmitter $mycall |
||||||
|
|
||||||
|
<source> |
||||||
|
source $mycall |
||||||
|
relay-type directonly |
||||||
|
viscous-delay 5 |
||||||
|
# Forward enkel PE1RXF* (bij wet verboden om als relais voor derden te fungeren) |
||||||
|
filter b/PE1RXF* |
||||||
|
</source> |
||||||
|
|
||||||
|
<source> |
||||||
|
source PE1RXF-3 |
||||||
|
relay-type directonly |
||||||
|
viscous-delay 5 |
||||||
|
filter b/PE1RXF* |
||||||
|
</source> |
||||||
|
|
||||||
|
</digipeater> |
||||||
|
|
||||||
|
# LoRa digipeater |
||||||
|
<digipeater> |
||||||
|
|
||||||
|
transmitter PE1RXF-3 |
||||||
|
|
||||||
|
<source> |
||||||
|
source $mycall |
||||||
|
relay-type directonly |
||||||
|
viscous-delay 5 |
||||||
|
filter b/PE1RXF* |
||||||
|
</source> |
||||||
|
|
||||||
|
<source> |
||||||
|
source PE1RXF-3 |
||||||
|
relay-type directonly |
||||||
|
viscous-delay 5 |
||||||
|
filter b/PE1RXF* |
||||||
|
</source> |
||||||
|
|
||||||
|
</digipeater> |
||||||
|
|
||||||
|
### Some commands must be called as sudo |
||||||
|
|
||||||
|
but we don't want to enter the password all the time. Especcially at boot time! |
||||||
|
|
||||||
|
$ sudo visudo |
||||||
|
|
||||||
|
Add: |
||||||
|
|
||||||
|
marcel ALL = (root) NOPASSWD: /usr/sbin/kissattach |
||||||
|
marcel ALL = (root) NOPASSWD: /usr/sbin/kissparms |
||||||
|
marcel ALL = (root) NOPASSWD: /usr/bin/socat |
||||||
|
marcel ALL = (root) NOPASSWD: /usr/local/bin/tncattach |
||||||
|
|
||||||
|
### 1200bd packet modem |
||||||
|
|
||||||
|
$ mkdir ham |
||||||
|
$ cd ham |
||||||
|
$ nano ~/ham/start_packetmodem_nano2.sh |
||||||
|
|
||||||
|
Add (make sure USB port is correct): |
||||||
|
|
||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
echo "Starting packet modem nano 2" |
||||||
|
|
||||||
|
# Packet modem uses a CS340 chip, which does not have a serial number. If other USB devices |
||||||
|
# with a CS340 chip are pluged in the software cannot distinquish between the various devices. |
||||||
|
# But the modem is always connected to the same physical USB port. Use this port number |
||||||
|
# instead of /dev/USBx. |
||||||
|
serial_port=$(readlink -f /dev/serial/by-path/platform-3f980000.usb-usb-0:1.4:1.0-port0) |
||||||
|
# Set serial port in RAW mode. Otherwise some charcters may be lost to the modem. |
||||||
|
/usr/bin/stty -F $serial_port raw |
||||||
|
sleep 1 |
||||||
|
sudo /usr/sbin/kissattach $serial_port ax0 |
||||||
|
sleep 1 |
||||||
|
sudo /usr/sbin/kissparms -p ax0 -t 500 -s 200 -r 32 -l 100 -f n |
||||||
|
|
||||||
|
Make file executable: |
||||||
|
|
||||||
|
$ chmod u+x ./start_packetmodem_nano2.sh |
||||||
|
|
||||||
|
### LoRa APRS modem |
||||||
|
|
||||||
|
$ sudo apt-get install git |
||||||
|
$ sudo raspi-config |
||||||
|
|
||||||
|
Enable SPI |
||||||
|
|
||||||
|
$ sudo apt-get install socat |
||||||
|
|
||||||
|
clone LoRa driver: |
||||||
|
|
||||||
|
$ cd ham |
||||||
|
$ git clone https://git.meezenest.nl/marcel/RPi-LoRa-KISS-TNC.git |
||||||
|
|
||||||
|
In start_all.sh the line with socat probably says ax2, change to ax1 |
||||||
|
|
||||||
|
### Weather station |
||||||
|
|
||||||
|
$ get the weather_station software, which is still under development (will be published on https://git.meezenest.nl/) |
||||||
|
|
||||||
|
$ sudo apt install python3-pip |
||||||
|
|
||||||
|
Install pythonax25, which can be found at ~/ham/weather_station/python-ax25: |
||||||
|
|
||||||
|
$ cd ~/ham/weather_station/python-ax25 |
||||||
|
$ sudo ./install.sh |
||||||
|
|
||||||
|
Install other libraries: |
||||||
|
|
||||||
|
$ pip3 install minimalmodbus --break-system-packages |
||||||
|
$ pip3 install retrying --break-system-packages |
||||||
|
$ pip3 install pyaml --break-system-packages |
||||||
|
|
||||||
|
Add /home/marcel/.local/bin to path: |
||||||
|
|
||||||
|
$ nano .bashrc |
||||||
|
|
||||||
|
add: |
||||||
|
export PATH=/home/marcel/.local/bin:$PATH |
||||||
|
|
||||||
|
### Rnode |
||||||
|
|
||||||
|
$ pip3 install rns --break-system-packages |
||||||
|
|
||||||
|
If the Rnode modem firmware is not yet installed on the ESP32 board do: |
||||||
|
|
||||||
|
$ rnodeconf /dev/ttyACM0 --autoinstall |
||||||
|
|
||||||
|
Install tncattach: |
||||||
|
|
||||||
|
$ cd ~/ham |
||||||
|
$ git clone https://github.com/markqvist/tncattach.git |
||||||
|
$ cd tncattach |
||||||
|
$ make |
||||||
|
$ sudo make install |
||||||
|
|
||||||
|
$ mkdir ~/ham/rnode_hamnet |
||||||
|
$ nano ~/ham/rnode_hamnet/start_rnode.sh and add: |
||||||
|
|
||||||
|
Add: |
||||||
|
|
||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
# Set the Rnode in TNC mode on 434.25 MHz BW 500kHz Spreading Factor 7 Code Rate 4:5 Power 17dBm |
||||||
|
# Ideally, this command should only be executed once. |
||||||
|
/home/marcel/.local/bin/rnodeconf /dev/ttyACM0 -T --freq 434250000 --bw 500000 --txp 17 --sf 7 --cr 5 |
||||||
|
|
||||||
|
# Send station identification every 10 minutes |
||||||
|
# mtu: 496 (PtP), 482 (ethernet) or 478 (ethernet with VLAN) |
||||||
|
sudo /usr/local/bin/tncattach /dev/ttyACM0 115200 -d -e --mtu 482 --noipv6 --ipv4 192.168.44.2/24 --id PE1RXF -t 600 |
||||||
|
|
||||||
|
Make executable: |
||||||
|
|
||||||
|
$ chmod u+x ./start_rnode.sh |
||||||
|
|
||||||
|
### Routing |
||||||
|
|
||||||
|
To use this adapter for internet access change the default gateway: |
||||||
|
|
||||||
|
$ sudo route add default gw 192.168.44.1 metric 30 |
||||||
|
|
||||||
|
This gives the new route priority, because the already defined default route has a metric of 100 |
||||||
|
|
||||||
|
Change metrics by removing the route and adding it again. The exammple makes the old gateway the one with the higest priority: |
||||||
|
|
||||||
|
$ sudo route del default gw 192.168.44.1 metric 30 |
||||||
|
$ sudo route add default gw 192.168.44.1 metric 200 |
||||||
|
|
||||||
|
chech with: |
||||||
|
|
||||||
|
$ ip route |
||||||
|
|
||||||
|
### And also, on the server site, enable forwarding and nat (NOT ON THE APRS DIGIPEATER!!!) |
||||||
|
|
||||||
|
$ sudo echo "1" > /proc/sys/net/ipv4/ip_forward |
||||||
|
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE |
||||||
|
$ sudo iptables -A FORWARD -i eth0 -o tnc0 -m state --state RELATED,ESTABLISHED -j ACCEPT |
||||||
|
$ sudo iptables -A FORWARD -i tnc0 -o eth0 -j ACCEPT |
||||||
|
|
||||||
|
NOTE: make these changes permanant.... |
||||||
|
|
||||||
|
$ sudo nano /etc/sysctl.conf |
||||||
|
|
||||||
|
uncomment: net.ipv4.ip_forward=1 |
||||||
|
|
||||||
|
Maybe needed: |
||||||
|
|
||||||
|
# Add the following statement somewhere at the beginning |
||||||
|
# of /etc/dhcpcd.conf to prevent dhcpcd from changing MTU |
||||||
|
denyinterfaces tnc0 |
||||||
|
|
||||||
|
|
||||||
|
### Start script |
||||||
|
|
||||||
|
$ nano ~/ham/start_aprs_server.sh |
||||||
|
|
||||||
|
Add: |
||||||
|
|
||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
echo "Starting AX.25 interfaces" |
||||||
|
# initializing 1200bd packet modem |
||||||
|
/home/marcel/ham/start_packetmodem_nano2.sh |
||||||
|
|
||||||
|
# initializing LoRa modem |
||||||
|
/home/marcel/ham/RPi-LoRa-KISS-TNC/start_all.sh |
||||||
|
|
||||||
|
# initializing RNode network over LoRa |
||||||
|
echo "Starting LoRa network interface" |
||||||
|
/home/marcel/ham/rnode_hamnet/start_rnode.sh |
||||||
|
|
||||||
|
# Start weather station software |
||||||
|
echo "Starting weather station" |
||||||
|
/home/marcel/ham/weather_station/start_weater_station.sh |
||||||
|
|
||||||
|
And make executable |
||||||
|
|
||||||
|
$ chmod u+x ./start_aprs_server.sh |
||||||
|
|
||||||
|
Add to crontab: |
||||||
|
|
||||||
|
$ crontab -e |
||||||
|
|
||||||
|
Add: |
||||||
|
|
||||||
|
# Start APRS server at boot time (for some reason a 60 second wait is necessary) |
||||||
|
@reboot sleep 60 && /home/marcel/ham/start_aprs_server.sh |
||||||
|
|
||||||
|
TODO: |
||||||
|
|
||||||
|
network route over RNode if ethernet is down |
||||||
|
|
||||||
|
Webinterface for sending and receiving messages over APRS (forward to e-mail?) |
||||||
|
|
||||||
|
|
||||||
|
# Backup SD card! |
||||||
|
|
||||||
|
I use the script pishrink.sh to make an image. |
@ -0,0 +1,16 @@ |
|||||||
|
% Override default figure placement To be within the flow of the text rather |
||||||
|
% than on it's own page. |
||||||
|
\usepackage{float} |
||||||
|
\usepackage{graphicx} |
||||||
|
\makeatletter |
||||||
|
\def\fps@figure{H} |
||||||
|
\makeatother |
||||||
|
|
||||||
|
% Scale all large images to 50% of twext width |
||||||
|
\makeatletter |
||||||
|
\setkeys{Gin}{width=\ifdim\Gin@nat@width>\linewidth |
||||||
|
0.5\linewidth |
||||||
|
\else |
||||||
|
\Gin@nat@width |
||||||
|
\fi} |
||||||
|
\makeatother |
@ -0,0 +1,120 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="$lang$" xml:lang="$lang$"$if(dir)$ dir="$dir$"$endif$> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8" /> |
||||||
|
<meta name="generator" content="pandoc" /> |
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> |
||||||
|
$for(author-meta)$ |
||||||
|
<meta name="author" content="$author-meta$" /> |
||||||
|
$endfor$ |
||||||
|
$if(date-meta)$ |
||||||
|
<meta name="dcterms.date" content="$date-meta$" /> |
||||||
|
$endif$ |
||||||
|
$if(keywords)$ |
||||||
|
<meta name="keywords" content="$for(keywords)$$keywords$$sep$, $endfor$" /> |
||||||
|
$endif$ |
||||||
|
<title>$if(title-prefix)$$title-prefix$ – $endif$$pagetitle$</title> |
||||||
|
$if(highlighting-css)$ |
||||||
|
<style type="text/css"> |
||||||
|
$highlighting-css$ |
||||||
|
</style> |
||||||
|
$endif$ |
||||||
|
$for(css)$ |
||||||
|
<link rel="stylesheet" href="$css$" /> |
||||||
|
$endfor$ |
||||||
|
<style type="text/css"> |
||||||
|
:root { |
||||||
|
--width-content: 1080px; |
||||||
|
} |
||||||
|
|
||||||
|
nav { |
||||||
|
justify-content: space-around; |
||||||
|
} |
||||||
|
|
||||||
|
$if(quotes)$ |
||||||
|
q { quotes: "“" "”" "‘" "’"; } |
||||||
|
$endif$ |
||||||
|
</style> |
||||||
|
$if(math)$ |
||||||
|
$math$ |
||||||
|
$endif$ |
||||||
|
$for(header-includes)$ |
||||||
|
$header-includes$ |
||||||
|
$endfor$ |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
$for(include-before)$ |
||||||
|
$include-before$ |
||||||
|
$endfor$ |
||||||
|
$if(title)$ |
||||||
|
<header id="title-block-header"> |
||||||
|
<nav id="$idprefix$TOC"> |
||||||
|
<ul> |
||||||
|
$if(toc)$ |
||||||
|
<li> |
||||||
|
<a href="#">Index</a> |
||||||
|
$table-of-contents$ |
||||||
|
</li> |
||||||
|
$endif$ |
||||||
|
$if(pdf_version)$ |
||||||
|
<li> |
||||||
|
<a href="$pdf_version$">PDF version</a> |
||||||
|
</li> |
||||||
|
$endif$ |
||||||
|
$if(git_repo)$ |
||||||
|
<li> |
||||||
|
<a href="$git_repo$">Git repo</a> |
||||||
|
</li> |
||||||
|
$endif$ |
||||||
|
$if(website)$ |
||||||
|
<li> |
||||||
|
<a href="$page_back$">Back</a> |
||||||
|
</li> |
||||||
|
$endif$ |
||||||
|
</ul> |
||||||
|
|
||||||
|
<a href="https://www.meezenest.nl/mees/"><img alt="Logo" src="$logo$" height="70"></a> |
||||||
|
</nav> |
||||||
|
<h1 class="title">$title$</h1> |
||||||
|
$if(subtitle)$ |
||||||
|
<p class="subtitle">$subtitle$</p> |
||||||
|
$endif$ |
||||||
|
$for(author)$ |
||||||
|
<p class="author">$author$</p> |
||||||
|
$endfor$ |
||||||
|
$if(date)$ |
||||||
|
<p class="date">$date$</p> |
||||||
|
$endif$ |
||||||
|
$if(pdf_version)$ |
||||||
|
<p><a href="$pdf_version$"><i>PDF version</i></a></p> |
||||||
|
$endif$ |
||||||
|
</header> |
||||||
|
$endif$ |
||||||
|
<main> |
||||||
|
<article> |
||||||
|
$if(abstract)$ |
||||||
|
<p><b>Abstract </b>$abstract$</p> |
||||||
|
$endif$ |
||||||
|
$body$ |
||||||
|
$for(include-after)$ |
||||||
|
$include-after$ |
||||||
|
$endfor$ |
||||||
|
<hr> |
||||||
|
</article> |
||||||
|
</main> |
||||||
|
<footer> |
||||||
|
<p>© |
||||||
|
$if(date)$ |
||||||
|
$date$ |
||||||
|
$endif$ |
||||||
|
$for(author)$ |
||||||
|
$author$ |
||||||
|
$endfor$ |
||||||
|
$if(website)$ |
||||||
|
<a href="$website$">$website$</a> |
||||||
|
$endif$ |
||||||
|
</p><p>This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>. |
||||||
|
</p> |
||||||
|
</footer> |
||||||
|
</body> |
||||||
|
</html> |
@ -0,0 +1,6 @@ |
|||||||
|
# Modification LM2596 module |
||||||
|
|
||||||
|
* Lift pin 5 of LM2596 from PCB and solder a wire to it. |
||||||
|
* Solder other side of this wire to the pad on the PCB |
||||||
|
|
||||||
|
![Modification](modification_LM2596.jpg) |
@ -0,0 +1,425 @@ |
|||||||
|
EESchema-LIBRARY Version 2.4 |
||||||
|
#encoding utf-8 |
||||||
|
# |
||||||
|
# Connector_Conn_01x05_Male |
||||||
|
# |
||||||
|
DEF Connector_Conn_01x05_Male J 0 40 Y N 1 F N |
||||||
|
F0 "J" 0 300 50 H V C CNN |
||||||
|
F1 "Connector_Conn_01x05_Male" 0 -300 50 H V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
$FPLIST |
||||||
|
Connector*:*_1x??_* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
S 34 -195 0 -205 1 1 6 F |
||||||
|
S 34 -95 0 -105 1 1 6 F |
||||||
|
S 34 5 0 -5 1 1 6 F |
||||||
|
S 34 105 0 95 1 1 6 F |
||||||
|
S 34 205 0 195 1 1 6 F |
||||||
|
P 2 1 1 6 50 -200 34 -200 N |
||||||
|
P 2 1 1 6 50 -100 34 -100 N |
||||||
|
P 2 1 1 6 50 0 34 0 N |
||||||
|
P 2 1 1 6 50 100 34 100 N |
||||||
|
P 2 1 1 6 50 200 34 200 N |
||||||
|
X Pin_1 1 200 200 150 L 50 50 1 1 P |
||||||
|
X Pin_2 2 200 100 150 L 50 50 1 1 P |
||||||
|
X Pin_3 3 200 0 150 L 50 50 1 1 P |
||||||
|
X Pin_4 4 200 -100 150 L 50 50 1 1 P |
||||||
|
X Pin_5 5 200 -200 150 L 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Device_CP_Small |
||||||
|
# |
||||||
|
DEF Device_CP_Small C 0 10 N N 1 F N |
||||||
|
F0 "C" 10 70 50 H V L CNN |
||||||
|
F1 "Device_CP_Small" 10 -80 50 H V L CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
$FPLIST |
||||||
|
CP_* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
S -60 -12 60 -27 0 1 0 F |
||||||
|
S -60 27 60 12 0 1 0 N |
||||||
|
P 2 0 1 0 -50 60 -30 60 N |
||||||
|
P 2 0 1 0 -40 50 -40 70 N |
||||||
|
X ~ 1 0 100 73 D 50 50 1 1 P |
||||||
|
X ~ 2 0 -100 73 U 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Device_C_Small |
||||||
|
# |
||||||
|
DEF Device_C_Small C 0 10 N N 1 F N |
||||||
|
F0 "C" 10 70 50 H V L CNN |
||||||
|
F1 "Device_C_Small" 10 -80 50 H V L CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
$FPLIST |
||||||
|
C_* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
P 2 0 1 13 -60 -20 60 -20 N |
||||||
|
P 2 0 1 12 -60 20 60 20 N |
||||||
|
X ~ 1 0 100 80 D 50 50 1 1 P |
||||||
|
X ~ 2 0 -100 80 U 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Device_D_Small_ALT |
||||||
|
# |
||||||
|
DEF Device_D_Small_ALT D 0 10 N N 1 F N |
||||||
|
F0 "D" -50 80 50 H V L CNN |
||||||
|
F1 "Device_D_Small_ALT" -150 -80 50 H V L CNN |
||||||
|
F2 "" 0 0 50 V I C CNN |
||||||
|
F3 "" 0 0 50 V I C CNN |
||||||
|
$FPLIST |
||||||
|
TO-???* |
||||||
|
*_Diode_* |
||||||
|
*SingleDiode* |
||||||
|
D_* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
P 2 0 1 0 -30 -40 -30 40 N |
||||||
|
P 2 0 1 0 -30 0 30 0 N |
||||||
|
P 4 0 1 0 30 -40 -30 0 30 40 30 -40 F |
||||||
|
X K 1 -100 0 70 R 50 50 1 1 P |
||||||
|
X A 2 100 0 70 L 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Device_LED_Dual_ACA |
||||||
|
# |
||||||
|
DEF Device_LED_Dual_ACA D 0 0 Y N 1 F N |
||||||
|
F0 "D" 0 225 50 H V C CNN |
||||||
|
F1 "Device_LED_Dual_ACA" 0 -250 50 H V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
$FPLIST |
||||||
|
LED* |
||||||
|
LED_SMD:* |
||||||
|
LED_THT:* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
C -100 0 11 0 1 0 F |
||||||
|
C 0 0 180 0 1 10 f |
||||||
|
P 2 0 1 0 -180 0 -100 0 N |
||||||
|
P 2 0 1 8 -50 -50 -50 -150 N |
||||||
|
P 2 0 1 8 -50 50 -50 150 N |
||||||
|
P 2 0 1 0 150 -100 75 -100 N |
||||||
|
P 2 0 1 0 150 100 75 100 N |
||||||
|
P 4 0 1 8 50 -150 50 -50 -50 -100 50 -150 N |
||||||
|
P 4 0 1 8 50 50 50 150 -50 100 50 50 N |
||||||
|
P 4 0 1 0 80 100 -100 100 -100 -100 80 -100 N |
||||||
|
P 5 0 1 0 80 200 140 260 110 260 140 260 140 230 N |
||||||
|
P 5 0 1 0 130 160 190 220 160 220 190 220 190 190 N |
||||||
|
X A1 1 300 100 150 L 50 50 1 1 I |
||||||
|
X K 2 -300 0 120 R 50 50 1 1 I |
||||||
|
X A2 3 300 -100 150 L 50 50 1 1 I |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Device_R_Small |
||||||
|
# |
||||||
|
DEF Device_R_Small R 0 10 N N 1 F N |
||||||
|
F0 "R" 30 20 50 H V L CNN |
||||||
|
F1 "Device_R_Small" 30 -40 50 H V L CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
$FPLIST |
||||||
|
R_* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
S -30 70 30 -70 0 1 8 N |
||||||
|
X ~ 1 0 100 30 D 50 50 1 1 P |
||||||
|
X ~ 2 0 -100 30 U 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Graphic_Logo_Open_Hardware_Small |
||||||
|
# |
||||||
|
DEF Graphic_Logo_Open_Hardware_Small #LOGO 0 40 Y Y 1 F N |
||||||
|
F0 "#LOGO" 0 275 50 H I C CNN |
||||||
|
F1 "Graphic_Logo_Open_Hardware_Small" 0 -225 50 H I C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
DRAW |
||||||
|
P 277 0 1 0 132 -171 130 -170 125 -167 118 -162 109 -156 100 -150 93 -146 88 -142 86 -141 85 -142 81 -144 75 -147 71 -149 66 -151 63 -151 63 -151 61 -147 58 -139 53 -130 49 -119 44 -107 38 -95 34 -83 29 -72 26 -64 24 -58 23 -55 23 -55 26 -52 31 -49 41 -40 51 -27 57 -13 60 3 58 18 52 32 42 45 30 54 16 60 0 62 -15 61 -29 55 -42 45 -48 39 -55 26 -60 12 -60 9 -59 -7 -55 -21 -47 -34 -36 -45 -34 -46 -29 -50 -25 -53 -23 -55 -42 -102 -45 -110 -51 -123 -55 -134 -59 -143 -62 -149 -63 -151 -63 -151 -65 -151 -68 -150 -75 -147 -79 -145 -84 -142 -87 -141 -89 -142 -93 -145 -100 -150 -109 -156 -117 -161 -124 -166 -130 -170 -132 -171 -133 -171 -135 -170 -139 -166 -146 -160 -155 -151 -156 -150 -164 -142 -170 -136 -174 -131 -175 -129 -175 -129 -174 -127 -170 -121 -166 -114 -160 -105 -144 -82 -153 -61 -155 -54 -159 -46 -161 -41 -162 -38 -165 -37 -170 -36 -179 -34 -189 -32 -199 -31 -207 -29 -214 -28 -217 -27 -217 -27 -218 -25 -218 -22 -218 -17 -219 -9 -219 3 -219 5 -218 16 -218 25 -218 30 -218 33 -218 33 -215 33 -209 35 -200 36 -190 38 -189 39 -179 41 -170 42 -164 44 -161 45 -161 45 -159 49 -156 56 -152 64 -149 72 -146 79 -144 85 -143 87 -143 87 -145 90 -148 95 -153 102 -160 111 -160 112 -166 121 -171 128 -174 133 -175 136 -175 136 -173 138 -169 143 -162 150 -155 158 -152 160 -144 169 -138 174 -134 177 -132 178 -132 178 -130 176 -124 172 -117 167 -108 161 -107 161 -98 155 -91 150 -86 146 -84 145 -83 145 -80 146 -73 148 -66 151 -58 155 -50 158 -45 160 -42 162 -42 162 -41 165 -40 171 -38 180 -36 191 -35 193 -33 203 -32 212 -31 218 -30 220 -28 221 -23 221 -16 221 -6 221 3 221 13 221 21 221 27 220 29 220 29 220 30 217 32 210 33 201 36 190 36 188 38 178 40 169 41 163 42 161 42 161 47 159 54 156 62 152 82 144 107 161 109 163 118 169 125 174 130 177 133 178 133 178 135 176 140 171 147 165 154 157 160 151 167 144 171 140 174 137 174 135 174 134 173 131 169 126 164 118 158 110 153 102 148 94 144 88 143 85 143 84 145 79 148 72 152 63 160 44 173 41 181 40 192 38 202 36 218 33 219 -26 216 -27 214 -27 208 -29 199 -30 189 -32 181 -34 172 -36 166 -37 163 -37 162 -38 160 -42 157 -49 154 -57 150 -65 147 -73 145 -79 144 -82 145 -84 149 -89 153 -97 159 -105 165 -114 170 -121 173 -126 175 -129 174 -131 171 -135 164 -141 155 -151 153 -152 145 -160 139 -166 134 -170 132 -171 F |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Mechanical_MountingHole |
||||||
|
# |
||||||
|
DEF Mechanical_MountingHole H 0 40 Y Y 1 F N |
||||||
|
F0 "H" 0 200 50 H V C CNN |
||||||
|
F1 "Mechanical_MountingHole" 0 125 50 H V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
$FPLIST |
||||||
|
MountingHole* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
C 0 0 50 0 1 50 N |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Switch_SW_Push |
||||||
|
# |
||||||
|
DEF Switch_SW_Push SW 0 40 N N 1 F N |
||||||
|
F0 "SW" 50 100 50 H V L CNN |
||||||
|
F1 "Switch_SW_Push" 0 -60 50 H V C CNN |
||||||
|
F2 "" 0 200 50 H I C CNN |
||||||
|
F3 "" 0 200 50 H I C CNN |
||||||
|
DRAW |
||||||
|
C -80 0 20 0 1 0 N |
||||||
|
C 80 0 20 0 1 0 N |
||||||
|
P 2 0 1 0 0 50 0 120 N |
||||||
|
P 2 0 1 0 100 50 -100 50 N |
||||||
|
X 1 1 -200 0 100 R 50 50 0 1 P |
||||||
|
X 2 2 200 0 100 L 50 50 0 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Timer_NE555 |
||||||
|
# |
||||||
|
DEF Timer_NE555 U 0 20 Y Y 1 F N |
||||||
|
F0 "U" -400 350 50 H V L CNN |
||||||
|
F1 "Timer_NE555" 100 350 50 H V L CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
ALIAS ICM7555 LMC555xM LMC555xMM LMC555xN MC1455 TLC555CD TLC555CP TLC555CPS NA555 NE555 SE555 SA555 |
||||||
|
$FPLIST |
||||||
|
SOIC*3.9x4.9mm*P1.27mm* |
||||||
|
DIP*W7.62mm* |
||||||
|
TSSOP*3x3mm*P0.65mm* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
S -350 -300 350 300 0 1 10 f |
||||||
|
S -350 -300 350 300 0 1 10 f |
||||||
|
X GND 1 0 -400 100 U 50 50 0 0 W |
||||||
|
X VCC 8 0 400 100 D 50 50 0 0 W |
||||||
|
X TR 2 -500 200 150 R 50 50 1 1 I |
||||||
|
X Q 3 500 200 150 L 50 50 1 1 O |
||||||
|
X R 4 -500 -200 150 R 50 50 1 1 I I |
||||||
|
X CV 5 -500 0 150 R 50 50 1 1 I |
||||||
|
X THR 6 500 -200 150 L 50 50 1 1 I |
||||||
|
X DIS 7 500 0 150 L 50 50 1 1 I |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Transistor_BJT_BC547 |
||||||
|
# |
||||||
|
DEF Transistor_BJT_BC547 Q 0 0 Y N 1 F N |
||||||
|
F0 "Q" 200 75 50 H V L CNN |
||||||
|
F1 "Transistor_BJT_BC547" 200 0 50 H V L CNN |
||||||
|
F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN |
||||||
|
F3 "" 0 0 50 H I L CNN |
||||||
|
ALIAS BC546 BC548 BC549 BC550 BC337 BC338 |
||||||
|
$FPLIST |
||||||
|
TO?92* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
C 50 0 111 0 1 10 N |
||||||
|
P 2 0 1 0 0 0 25 0 N |
||||||
|
P 2 0 1 0 25 25 100 100 N |
||||||
|
P 3 0 1 0 25 -25 100 -100 100 -100 N |
||||||
|
P 3 0 1 20 25 75 25 -75 25 -75 N |
||||||
|
P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F |
||||||
|
X C 1 100 200 100 D 50 50 1 1 P |
||||||
|
X B 2 -200 0 200 R 50 50 1 1 I |
||||||
|
X E 3 100 -200 100 U 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# mtk_power_supply_DCDC_LM2596 |
||||||
|
# |
||||||
|
DEF mtk_power_supply_DCDC_LM2596 U 0 20 Y Y 1 F N |
||||||
|
F0 "U" 0 450 50 H V C CNN |
||||||
|
F1 "mtk_power_supply_DCDC_LM2596" 0 350 50 H V C CNN |
||||||
|
F2 "Converter_DCDC:Converter_DCDC_XP_POWER-ISU02_SMD" 0 -350 50 H I C CIN |
||||||
|
F3 "" 0 -450 50 H I C CNN |
||||||
|
$FPLIST |
||||||
|
*XP?POWER*ISU02*SMD* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
S -400 300 400 -300 0 1 10 f |
||||||
|
P 2 0 1 0 0 -200 0 -250 N |
||||||
|
P 2 0 1 0 0 -100 0 -150 N |
||||||
|
P 2 0 1 0 0 0 0 -50 N |
||||||
|
P 2 0 1 0 0 100 0 50 N |
||||||
|
P 2 0 1 0 0 200 0 150 N |
||||||
|
P 2 0 1 0 0 300 0 250 N |
||||||
|
X +VIN 1 -500 200 100 R 50 50 1 1 W |
||||||
|
X -VIN 2 -500 -200 100 R 50 50 1 1 W |
||||||
|
X -VOUT 3 500 -200 100 L 50 50 1 1 w |
||||||
|
X +VOUT 4 500 200 100 L 50 50 1 1 w |
||||||
|
X ~ON~/OFF 5 -500 0 100 R 50 50 1 1 I |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# mtk_processor_Raspberry_Pi_for_lora_module |
||||||
|
# |
||||||
|
DEF mtk_processor_Raspberry_Pi_for_lora_module J 0 40 Y Y 1 F N |
||||||
|
F0 "J" -700 1250 50 H V L BNN |
||||||
|
F1 "mtk_processor_Raspberry_Pi_for_lora_module" 400 -1250 50 H V L TNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
$FPLIST |
||||||
|
PinHeader*2x20*P2.54mm*Vertical* |
||||||
|
PinSocket*2x20*P2.54mm*Vertical* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
S -700 1200 700 -1200 0 1 10 f |
||||||
|
S -665 -690 -700 -710 1 1 0 N |
||||||
|
S -665 -590 -700 -610 1 1 0 N |
||||||
|
S -665 -490 -700 -510 1 1 0 N |
||||||
|
S -665 -390 -700 -410 1 1 0 N |
||||||
|
S -665 -290 -700 -310 1 1 0 N |
||||||
|
S -665 -190 -700 -210 1 1 0 N |
||||||
|
S -665 10 -700 -10 1 1 0 N |
||||||
|
S -665 110 -700 90 1 1 0 N |
||||||
|
S -665 210 -700 190 1 1 0 N |
||||||
|
S -665 410 -700 390 1 1 0 N |
||||||
|
S -665 510 -700 490 1 1 0 N |
||||||
|
S -665 610 -700 590 1 1 0 N |
||||||
|
S -665 810 -700 790 1 1 0 N |
||||||
|
S -665 910 -700 890 1 1 0 N |
||||||
|
S -410 -1165 -390 -1200 1 1 0 N |
||||||
|
S -310 -1165 -290 -1200 1 1 0 N |
||||||
|
S -210 -1165 -190 -1200 1 1 0 N |
||||||
|
S -210 1200 -190 1165 1 1 0 N |
||||||
|
S -110 -1165 -90 -1200 1 1 0 N |
||||||
|
S -110 1200 -90 1165 1 1 0 N |
||||||
|
S -10 -1165 10 -1200 1 1 0 N |
||||||
|
S 90 -1165 110 -1200 1 1 0 N |
||||||
|
S 90 1200 110 1165 1 1 0 N |
||||||
|
S 190 -1165 210 -1200 1 1 0 N |
||||||
|
S 190 1200 210 1165 1 1 0 N |
||||||
|
S 290 -1165 310 -1200 1 1 0 N |
||||||
|
S 700 -790 665 -810 1 1 0 N |
||||||
|
S 700 -690 665 -710 1 1 0 N |
||||||
|
S 700 -490 665 -510 1 1 0 N |
||||||
|
S 700 -390 665 -410 1 1 0 N |
||||||
|
S 700 -290 665 -310 1 1 0 N |
||||||
|
S 700 -190 665 -210 1 1 0 N |
||||||
|
S 700 -90 665 -110 1 1 0 N |
||||||
|
S 700 110 665 90 1 1 0 N |
||||||
|
S 700 210 665 190 1 1 0 N |
||||||
|
S 700 310 665 290 1 1 0 N |
||||||
|
S 700 510 665 490 1 1 0 N |
||||||
|
S 700 610 665 590 1 1 0 N |
||||||
|
S 700 810 665 790 1 1 0 N |
||||||
|
S 700 910 665 890 1 1 0 N |
||||||
|
X 3V3 1 100 1300 100 D 50 50 1 1 W |
||||||
|
X GND 14 -200 -1300 100 U 50 50 1 1 W |
||||||
|
X MOSI0/GPIO10 19 800 -400 100 L 50 50 1 1 B |
||||||
|
X 5V 2 -200 1300 100 D 50 50 1 1 W |
||||||
|
X GND 20 -100 -1300 100 U 50 50 1 1 W |
||||||
|
X MISO0/GPIO9 21 800 -300 100 L 50 50 1 1 B |
||||||
|
X SCLK0/GPIO11 23 800 -500 100 L 50 50 1 1 B |
||||||
|
X ~CE0~/GPIO8 24 800 -200 100 L 50 50 1 1 B |
||||||
|
X GND 25 0 -1300 100 U 50 50 1 1 W |
||||||
|
X GCLK1/GPIO5 29 800 200 100 L 50 50 1 1 B |
||||||
|
X SDA/GPIO2 3 800 600 100 L 50 50 1 1 B |
||||||
|
X GND 30 100 -1300 100 U 50 50 1 1 W |
||||||
|
X GCLK2/GPIO6 31 800 100 100 L 50 50 1 1 B |
||||||
|
X GND 34 200 -1300 100 U 50 50 1 1 W |
||||||
|
X GPIO16 36 -800 600 100 R 50 50 1 1 B |
||||||
|
X GND 39 300 -1300 100 U 50 50 1 1 W |
||||||
|
X 5V 4 -100 1300 100 D 50 50 1 1 W |
||||||
|
X GPIO21/SCLK1 40 -800 0 100 R 50 50 1 1 B |
||||||
|
X SCL/GPIO3 5 800 500 100 L 50 50 1 1 B |
||||||
|
X GND 6 -400 -1300 100 U 50 50 1 1 W |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# mtk_rf_Ra-02 |
||||||
|
# |
||||||
|
DEF mtk_rf_Ra-02 U 0 40 Y Y 1 F N |
||||||
|
F0 "U" -150 150 50 H V C CNN |
||||||
|
F1 "mtk_rf_Ra-02" -50 -850 50 H V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
DRAW |
||||||
|
S -200 100 500 -800 0 1 0 f |
||||||
|
X GND 1 -400 0 200 R 50 50 1 1 P |
||||||
|
X DIO4 10 700 -600 200 L 50 50 1 1 B |
||||||
|
X DIO5 11 700 -500 200 L 50 50 1 1 B |
||||||
|
X SCK 12 700 -400 200 L 50 50 1 1 B |
||||||
|
X MISO 13 700 -300 200 L 50 50 1 1 B |
||||||
|
X MOSI 14 700 -200 200 L 50 50 1 1 B |
||||||
|
X NSS 15 700 -100 200 L 50 50 1 1 B |
||||||
|
X GND 16 700 0 200 L 50 50 1 1 P |
||||||
|
X GND 2 -400 -100 200 R 50 50 1 1 P |
||||||
|
X 3V3 3 -400 -200 200 R 50 50 1 1 W |
||||||
|
X RST 4 -400 -300 200 R 50 50 1 1 I |
||||||
|
X DIO0 5 -400 -400 200 R 50 50 1 1 B |
||||||
|
X DIO1 6 -400 -500 200 R 50 50 1 1 B |
||||||
|
X DIO2 7 -400 -600 200 R 50 50 1 1 B |
||||||
|
X DIO3 8 -400 -700 200 R 50 50 1 1 B |
||||||
|
X GND 9 700 -700 200 L 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# power_+12V |
||||||
|
# |
||||||
|
DEF power_+12V #PWR 0 0 Y Y 1 F P |
||||||
|
F0 "#PWR" 0 -150 50 H I C CNN |
||||||
|
F1 "power_+12V" 0 140 50 H V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
DRAW |
||||||
|
P 2 0 1 0 -30 50 0 100 N |
||||||
|
P 2 0 1 0 0 0 0 100 N |
||||||
|
P 2 0 1 0 0 100 30 50 N |
||||||
|
X +12V 1 0 0 0 U 50 50 1 1 W N |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# power_+3V3 |
||||||
|
# |
||||||
|
DEF power_+3V3 #PWR 0 0 Y Y 1 F P |
||||||
|
F0 "#PWR" 0 -150 50 H I C CNN |
||||||
|
F1 "power_+3V3" 0 140 50 H V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
ALIAS +3.3V |
||||||
|
DRAW |
||||||
|
P 2 0 1 0 -30 50 0 100 N |
||||||
|
P 2 0 1 0 0 0 0 100 N |
||||||
|
P 2 0 1 0 0 100 30 50 N |
||||||
|
X +3V3 1 0 0 0 U 50 50 1 1 W N |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# power_+5V |
||||||
|
# |
||||||
|
DEF power_+5V #PWR 0 0 Y Y 1 F P |
||||||
|
F0 "#PWR" 0 -150 50 H I C CNN |
||||||
|
F1 "power_+5V" 0 140 50 H V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
DRAW |
||||||
|
P 2 0 1 0 -30 50 0 100 N |
||||||
|
P 2 0 1 0 0 0 0 100 N |
||||||
|
P 2 0 1 0 0 100 30 50 N |
||||||
|
X +5V 1 0 0 0 U 50 50 1 1 W N |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# power_GND |
||||||
|
# |
||||||
|
DEF power_GND #PWR 0 0 Y Y 1 F P |
||||||
|
F0 "#PWR" 0 -250 50 H I C CNN |
||||||
|
F1 "power_GND" 0 -150 50 H V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
DRAW |
||||||
|
P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N |
||||||
|
X GND 1 0 0 0 D 50 50 1 1 W N |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
#End Library |
@ -0,0 +1,78 @@ |
|||||||
|
{ |
||||||
|
"Header": |
||||||
|
{ |
||||||
|
"GenerationSoftware": |
||||||
|
{ |
||||||
|
"Vendor": "KiCad", |
||||||
|
"Application": "Pcbnew", |
||||||
|
"Version": "5.1.8-5.1.8" |
||||||
|
}, |
||||||
|
"CreationDate": "2022-01-20T13:52:36+01:00" |
||||||
|
}, |
||||||
|
"GeneralSpecs": |
||||||
|
{ |
||||||
|
"ProjectId": |
||||||
|
{ |
||||||
|
"Name": "winlink_server", |
||||||
|
"GUID": "77696e6c-696e-46b5-9f73-65727665722e", |
||||||
|
"Revision": "rev?" |
||||||
|
}, |
||||||
|
"Size": |
||||||
|
{ |
||||||
|
"X": 0.000, |
||||||
|
"Y": 0.000 |
||||||
|
}, |
||||||
|
"LayerNumber": 2, |
||||||
|
"BoardThickness": 1.600 |
||||||
|
}, |
||||||
|
"DesignRules": |
||||||
|
[ |
||||||
|
{ |
||||||
|
"Layers": "Outer", |
||||||
|
"PadToPad": 0.200, |
||||||
|
"PadToTrack": 0.200, |
||||||
|
"TrackToTrack": 0.200, |
||||||
|
"MinLineWidth": 0.250, |
||||||
|
"TrackToRegion": 0.508, |
||||||
|
"RegionToRegion": 0.508 |
||||||
|
} |
||||||
|
], |
||||||
|
"FilesAttributes": |
||||||
|
[ |
||||||
|
{ |
||||||
|
"Path": "winlink_server-F_Cu.gbr", |
||||||
|
"FileFunction": "Copper,L1,Top", |
||||||
|
"FilePolarity": "Positive" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"Path": "winlink_server-B_Cu.gbr", |
||||||
|
"FileFunction": "Copper,L2,Bot", |
||||||
|
"FilePolarity": "Positive" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"Path": "winlink_server-F_SilkS.gbr", |
||||||
|
"FileFunction": "Legend,Top", |
||||||
|
"FilePolarity": "Positive" |
||||||
|
} |
||||||
|
], |
||||||
|
"MaterialStackup": |
||||||
|
[ |
||||||
|
{ |
||||||
|
"Type": "Legend", |
||||||
|
"Notes": "Layer F.SilkS" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"Type": "Copper", |
||||||
|
"Notes": "Layer F.Cu" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"Type": "Dielectric", |
||||||
|
"Material": "FR4", |
||||||
|
"Notes": "Layers L1/L2" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"Type": "Copper", |
||||||
|
"Notes": "Layer B.Cu" |
||||||
|
} |
||||||
|
] |
||||||
|
} |
unable to load file from base commit
|
@ -0,0 +1,698 @@ |
|||||||
|
(export (version D) |
||||||
|
(design |
||||||
|
(source /home/marcel/Documenten/electronische_projecten/winlink_server/winlink-server-KiCad/winlink_server.sch) |
||||||
|
(date "do 20 jan 2022 14:51:51 CET") |
||||||
|
(tool "Eeschema 5.1.8-5.1.8") |
||||||
|
(sheet (number 1) (name /) (tstamps /) |
||||||
|
(title_block |
||||||
|
(title "LORA APRS shield") |
||||||
|
(company "M. Konstapel") |
||||||
|
(rev 1) |
||||||
|
(date 2022-01-20) |
||||||
|
(source winlink_server.sch) |
||||||
|
(comment (number 1) (value https://meezenest.nl/mees)) |
||||||
|
(comment (number 2) (value "")) |
||||||
|
(comment (number 3) (value "")) |
||||||
|
(comment (number 4) (value ""))))) |
||||||
|
(components |
||||||
|
(comp (ref U1) |
||||||
|
(value Ra-02) |
||||||
|
(footprint mtk_rf:RA-02) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) Thinker) |
||||||
|
(field (name "Ordering #") Ra-02)) |
||||||
|
(libsource (lib mtk_rf) (part Ra-02) (description "")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E5E459)) |
||||||
|
(comp (ref U2) |
||||||
|
(value NE555) |
||||||
|
(footprint Package_DIP:DIP-8_W7.62mm_LongPads) |
||||||
|
(datasheet http://www.ti.com/lit/ds/symlink/ne555.pdf) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") NE555)) |
||||||
|
(libsource (lib Timer) (part NE555) (description "Precision Timers, DIP-8/SOIC-8")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E60C77)) |
||||||
|
(comp (ref C2) |
||||||
|
(value 100n) |
||||||
|
(footprint Capacitor_THT:C_Disc_D7.5mm_W2.5mm_P5.00mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") 100n/50V)) |
||||||
|
(libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E64022)) |
||||||
|
(comp (ref C3) |
||||||
|
(value 100U) |
||||||
|
(footprint Capacitor_THT:CP_Radial_D5.0mm_P2.50mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") 100U/15V)) |
||||||
|
(libsource (lib Device) (part CP_Small) (description "Polarized capacitor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E647F7)) |
||||||
|
(comp (ref R1) |
||||||
|
(value 470k) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "470k 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E6532C)) |
||||||
|
(comp (ref U3) |
||||||
|
(value DCDC_LM2596) |
||||||
|
(footprint mtk_power_supply:LM2596) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "LM2596 module")) |
||||||
|
(libsource (lib mtk_power_supply) (part DCDC_LM2596) (description "")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E6B9FF)) |
||||||
|
(comp (ref R2) |
||||||
|
(value 10k) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "10k 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E738A4)) |
||||||
|
(comp (ref D4) |
||||||
|
(value 1N4148) |
||||||
|
(footprint Diode_THT:D_A-405_P7.62mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") 1N4148)) |
||||||
|
(libsource (lib Device) (part D_Small_ALT) (description "Diode, small symbol, filled shape")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E748F5)) |
||||||
|
(comp (ref D5) |
||||||
|
(value 1N4148) |
||||||
|
(footprint Diode_THT:D_A-405_P7.62mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") 1N4148)) |
||||||
|
(libsource (lib Device) (part D_Small_ALT) (description "Diode, small symbol, filled shape")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E7510A)) |
||||||
|
(comp (ref D3) |
||||||
|
(value 1N4148) |
||||||
|
(footprint Diode_THT:D_A-405_P7.62mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") 1N4148)) |
||||||
|
(libsource (lib Device) (part D_Small_ALT) (description "Diode, small symbol, filled shape")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E752C9)) |
||||||
|
(comp (ref R9) |
||||||
|
(value 100k) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "100k 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E78C2C)) |
||||||
|
(comp (ref R8) |
||||||
|
(value 10k) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "10k 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E7939A)) |
||||||
|
(comp (ref Q3) |
||||||
|
(value BC547C) |
||||||
|
(footprint Package_TO_SOT_THT:TO-92_Wide) |
||||||
|
(datasheet http://www.fairchildsemi.com/ds/BC/BC547.pdf) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") BC547C)) |
||||||
|
(libsource (lib Transistor_BJT) (part BC547) (description "0.1A Ic, 45V Vce, Small Signal NPN Transistor, TO-92")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E8E32B)) |
||||||
|
(comp (ref D7) |
||||||
|
(value 1N4148) |
||||||
|
(footprint Diode_THT:D_A-405_P7.62mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") 1N4148)) |
||||||
|
(libsource (lib Device) (part D_Small_ALT) (description "Diode, small symbol, filled shape")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E8F395)) |
||||||
|
(comp (ref SW1) |
||||||
|
(value POWER_ON) |
||||||
|
(footprint Connector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_Vertical) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "2.54mm header 2 pin")) |
||||||
|
(libsource (lib Switch) (part SW_Push) (description "Push button switch, generic, two pins")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E786D8)) |
||||||
|
(comp (ref D6) |
||||||
|
(value "Dual LED") |
||||||
|
(footprint Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "LED dual color 3 mm")) |
||||||
|
(libsource (lib Device) (part LED_Dual_ACA) (description "Dual LED, common cathode on pin 2")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61EA59A8)) |
||||||
|
(comp (ref R7) |
||||||
|
(value 10k) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "10k 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61EB5A7D)) |
||||||
|
(comp (ref R6) |
||||||
|
(value 3k3) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "3k3 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61EBD1AF)) |
||||||
|
(comp (ref R3) |
||||||
|
(value 10k) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "10k 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61ED8E9E)) |
||||||
|
(comp (ref Q1) |
||||||
|
(value BC547C) |
||||||
|
(footprint Package_TO_SOT_THT:TO-92_Wide) |
||||||
|
(datasheet http://www.fairchildsemi.com/ds/BC/BC547.pdf) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") BC547C)) |
||||||
|
(libsource (lib Transistor_BJT) (part BC547) (description "0.1A Ic, 45V Vce, Small Signal NPN Transistor, TO-92")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E725D2)) |
||||||
|
(comp (ref C1) |
||||||
|
(value 100n) |
||||||
|
(footprint Capacitor_THT:C_Disc_D7.5mm_W2.5mm_P5.00mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") 100n/50V)) |
||||||
|
(libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61F5371B)) |
||||||
|
(comp (ref D1) |
||||||
|
(value 1N4148) |
||||||
|
(footprint Diode_THT:D_A-405_P7.62mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") 1N4148)) |
||||||
|
(libsource (lib Device) (part D_Small_ALT) (description "Diode, small symbol, filled shape")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E95571)) |
||||||
|
(comp (ref J2) |
||||||
|
(value IIC) |
||||||
|
(footprint Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "2.54mm header 5 pin")) |
||||||
|
(libsource (lib Connector) (part Conn_01x05_Male) (description "Generic connector, single row, 01x05, script generated (kicad-library-utils/schlib/autogen/connector/)")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61ED9E42)) |
||||||
|
(comp (ref R4) |
||||||
|
(value 10k) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "10k 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61EEB42A)) |
||||||
|
(comp (ref R5) |
||||||
|
(value 10k) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "10k 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61EEB432)) |
||||||
|
(comp (ref Q2) |
||||||
|
(value BC547C) |
||||||
|
(footprint Package_TO_SOT_THT:TO-92_Wide) |
||||||
|
(datasheet http://www.fairchildsemi.com/ds/BC/BC547.pdf) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") BC547C)) |
||||||
|
(libsource (lib Transistor_BJT) (part BC547) (description "0.1A Ic, 45V Vce, Small Signal NPN Transistor, TO-92")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61EEB43B)) |
||||||
|
(comp (ref D2) |
||||||
|
(value 1N4148) |
||||||
|
(footprint Diode_THT:D_A-405_P7.62mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") 1N4148)) |
||||||
|
(libsource (lib Device) (part D_Small_ALT) (description "Diode, small symbol, filled shape")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61F1769B)) |
||||||
|
(comp (ref H1) |
||||||
|
(value M3) |
||||||
|
(footprint MountingHole:MountingHole_3.2mm_M3_DIN965_Pad) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) "Not a placeable part") |
||||||
|
(field (name "Ordering #") -)) |
||||||
|
(libsource (lib Mechanical) (part MountingHole) (description "Mounting Hole without connection")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 6200BDDD)) |
||||||
|
(comp (ref H2) |
||||||
|
(value M3) |
||||||
|
(footprint MountingHole:MountingHole_3.2mm_M3_DIN965_Pad) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) "Not a placeable part") |
||||||
|
(field (name "Ordering #") -)) |
||||||
|
(libsource (lib Mechanical) (part MountingHole) (description "Mounting Hole without connection")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 6200C56C)) |
||||||
|
(comp (ref H3) |
||||||
|
(value M3) |
||||||
|
(footprint MountingHole:MountingHole_3.2mm_M3_DIN965_Pad) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) "Not a placeable part") |
||||||
|
(field (name "Ordering #") -)) |
||||||
|
(libsource (lib Mechanical) (part MountingHole) (description "Mounting Hole without connection")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 6200C756)) |
||||||
|
(comp (ref H4) |
||||||
|
(value M3) |
||||||
|
(footprint MountingHole:MountingHole_3.2mm_M3_DIN965_Pad) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) "Not a placeable part") |
||||||
|
(field (name "Ordering #") -)) |
||||||
|
(libsource (lib Mechanical) (part MountingHole) (description "Mounting Hole without connection")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 6200C9C8)) |
||||||
|
(comp (ref J1) |
||||||
|
(value Raspberry_Pi_for_lora_module) |
||||||
|
(footprint mtk_processor:Raspberry_Pi_Zero_for_lora_module) |
||||||
|
(datasheet https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/rpi_SCH_3bplus_1p0_reduced.pdf) |
||||||
|
(libsource (lib mtk_processor) (part Raspberry_Pi_for_lora_module) (description "expansion header for Raspberry Pi 2 & 3")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 620B745B))) |
||||||
|
(libparts |
||||||
|
(libpart (lib Connector) (part Conn_01x05_Male) |
||||||
|
(description "Generic connector, single row, 01x05, script generated (kicad-library-utils/schlib/autogen/connector/)") |
||||||
|
(docs ~) |
||||||
|
(footprints |
||||||
|
(fp Connector*:*_1x??_*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) J) |
||||||
|
(field (name Value) Conn_01x05_Male)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name Pin_1) (type passive)) |
||||||
|
(pin (num 2) (name Pin_2) (type passive)) |
||||||
|
(pin (num 3) (name Pin_3) (type passive)) |
||||||
|
(pin (num 4) (name Pin_4) (type passive)) |
||||||
|
(pin (num 5) (name Pin_5) (type passive)))) |
||||||
|
(libpart (lib Device) (part CP_Small) |
||||||
|
(description "Polarized capacitor, small symbol") |
||||||
|
(docs ~) |
||||||
|
(footprints |
||||||
|
(fp CP_*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) C) |
||||||
|
(field (name Value) CP_Small)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name ~) (type passive)) |
||||||
|
(pin (num 2) (name ~) (type passive)))) |
||||||
|
(libpart (lib Device) (part C_Small) |
||||||
|
(description "Unpolarized capacitor, small symbol") |
||||||
|
(docs ~) |
||||||
|
(footprints |
||||||
|
(fp C_*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) C) |
||||||
|
(field (name Value) C_Small)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name ~) (type passive)) |
||||||
|
(pin (num 2) (name ~) (type passive)))) |
||||||
|
(libpart (lib Device) (part D_Small_ALT) |
||||||
|
(description "Diode, small symbol, filled shape") |
||||||
|
(docs ~) |
||||||
|
(footprints |
||||||
|
(fp TO-???*) |
||||||
|
(fp *_Diode_*) |
||||||
|
(fp *SingleDiode*) |
||||||
|
(fp D_*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) D) |
||||||
|
(field (name Value) D_Small_ALT)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name K) (type passive)) |
||||||
|
(pin (num 2) (name A) (type passive)))) |
||||||
|
(libpart (lib Device) (part LED_Dual_ACA) |
||||||
|
(description "Dual LED, common cathode on pin 2") |
||||||
|
(docs ~) |
||||||
|
(footprints |
||||||
|
(fp LED*) |
||||||
|
(fp LED_SMD:*) |
||||||
|
(fp LED_THT:*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) D) |
||||||
|
(field (name Value) LED_Dual_ACA)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name A1) (type input)) |
||||||
|
(pin (num 2) (name K) (type input)) |
||||||
|
(pin (num 3) (name A2) (type input)))) |
||||||
|
(libpart (lib Device) (part R_Small) |
||||||
|
(description "Resistor, small symbol") |
||||||
|
(docs ~) |
||||||
|
(footprints |
||||||
|
(fp R_*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) R) |
||||||
|
(field (name Value) R_Small)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name ~) (type passive)) |
||||||
|
(pin (num 2) (name ~) (type passive)))) |
||||||
|
(libpart (lib Mechanical) (part MountingHole) |
||||||
|
(description "Mounting Hole without connection") |
||||||
|
(docs ~) |
||||||
|
(footprints |
||||||
|
(fp MountingHole*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) H) |
||||||
|
(field (name Value) MountingHole))) |
||||||
|
(libpart (lib Switch) (part SW_Push) |
||||||
|
(description "Push button switch, generic, two pins") |
||||||
|
(docs ~) |
||||||
|
(fields |
||||||
|
(field (name Reference) SW) |
||||||
|
(field (name Value) SW_Push)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name 1) (type passive)) |
||||||
|
(pin (num 2) (name 2) (type passive)))) |
||||||
|
(libpart (lib Timer) (part LM555) |
||||||
|
(aliases |
||||||
|
(alias ICM7555) |
||||||
|
(alias LMC555xM) |
||||||
|
(alias LMC555xMM) |
||||||
|
(alias LMC555xN) |
||||||
|
(alias MC1455) |
||||||
|
(alias TLC555CD) |
||||||
|
(alias TLC555CP) |
||||||
|
(alias TLC555CPS) |
||||||
|
(alias NA555) |
||||||
|
(alias NE555) |
||||||
|
(alias SE555) |
||||||
|
(alias SA555)) |
||||||
|
(description "Timer, DIP-8/SOIC-8/SSOP-8") |
||||||
|
(docs http://www.ti.com/lit/ds/symlink/lm555.pdf) |
||||||
|
(footprints |
||||||
|
(fp SOIC*3.9x4.9mm*P1.27mm*) |
||||||
|
(fp DIP*W7.62mm*) |
||||||
|
(fp TSSOP*3x3mm*P0.65mm*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) U) |
||||||
|
(field (name Value) LM555)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name GND) (type power_in)) |
||||||
|
(pin (num 2) (name TR) (type input)) |
||||||
|
(pin (num 3) (name Q) (type output)) |
||||||
|
(pin (num 4) (name R) (type input)) |
||||||
|
(pin (num 5) (name CV) (type input)) |
||||||
|
(pin (num 6) (name THR) (type input)) |
||||||
|
(pin (num 7) (name DIS) (type input)) |
||||||
|
(pin (num 8) (name VCC) (type power_in)))) |
||||||
|
(libpart (lib Transistor_BJT) (part BC547) |
||||||
|
(aliases |
||||||
|
(alias BC546) |
||||||
|
(alias BC548) |
||||||
|
(alias BC549) |
||||||
|
(alias BC550) |
||||||
|
(alias BC337) |
||||||
|
(alias BC338)) |
||||||
|
(description "0.1A Ic, 45V Vce, Small Signal NPN Transistor, TO-92") |
||||||
|
(docs http://www.fairchildsemi.com/ds/BC/BC547.pdf) |
||||||
|
(footprints |
||||||
|
(fp TO?92*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) Q) |
||||||
|
(field (name Value) BC547) |
||||||
|
(field (name Footprint) Package_TO_SOT_THT:TO-92_Inline)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name C) (type passive)) |
||||||
|
(pin (num 2) (name B) (type input)) |
||||||
|
(pin (num 3) (name E) (type passive)))) |
||||||
|
(libpart (lib mtk_power_supply) (part DCDC_LM2596) |
||||||
|
(footprints |
||||||
|
(fp *XP?POWER*ISU02*SMD*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) U) |
||||||
|
(field (name Value) DCDC_LM2596) |
||||||
|
(field (name Footprint) Converter_DCDC:Converter_DCDC_XP_POWER-ISU02_SMD)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name +VIN) (type power_in)) |
||||||
|
(pin (num 2) (name -VIN) (type power_in)) |
||||||
|
(pin (num 3) (name -VOUT) (type power_out)) |
||||||
|
(pin (num 4) (name +VOUT) (type power_out)) |
||||||
|
(pin (num 5) (name ~ON~/OFF) (type input)))) |
||||||
|
(libpart (lib mtk_processor) (part Raspberry_Pi_for_lora_module) |
||||||
|
(description "expansion header for Raspberry Pi 2 & 3") |
||||||
|
(docs https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/rpi_SCH_3bplus_1p0_reduced.pdf) |
||||||
|
(footprints |
||||||
|
(fp PinHeader*2x20*P2.54mm*Vertical*) |
||||||
|
(fp PinSocket*2x20*P2.54mm*Vertical*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) J) |
||||||
|
(field (name Value) Raspberry_Pi_for_lora_module)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name 3V3) (type power_in)) |
||||||
|
(pin (num 2) (name 5V) (type power_in)) |
||||||
|
(pin (num 3) (name SDA/GPIO2) (type BiDi)) |
||||||
|
(pin (num 4) (name 5V) (type power_in)) |
||||||
|
(pin (num 5) (name SCL/GPIO3) (type BiDi)) |
||||||
|
(pin (num 6) (name GND) (type power_in)) |
||||||
|
(pin (num 14) (name GND) (type power_in)) |
||||||
|
(pin (num 19) (name MOSI0/GPIO10) (type BiDi)) |
||||||
|
(pin (num 20) (name GND) (type power_in)) |
||||||
|
(pin (num 21) (name MISO0/GPIO9) (type BiDi)) |
||||||
|
(pin (num 23) (name SCLK0/GPIO11) (type BiDi)) |
||||||
|
(pin (num 24) (name ~CE0~/GPIO8) (type BiDi)) |
||||||
|
(pin (num 25) (name GND) (type power_in)) |
||||||
|
(pin (num 29) (name GCLK1/GPIO5) (type BiDi)) |
||||||
|
(pin (num 30) (name GND) (type power_in)) |
||||||
|
(pin (num 31) (name GCLK2/GPIO6) (type BiDi)) |
||||||
|
(pin (num 34) (name GND) (type power_in)) |
||||||
|
(pin (num 36) (name GPIO16) (type BiDi)) |
||||||
|
(pin (num 39) (name GND) (type power_in)) |
||||||
|
(pin (num 40) (name GPIO21/SCLK1) (type BiDi)))) |
||||||
|
(libpart (lib mtk_rf) (part Ra-02) |
||||||
|
(fields |
||||||
|
(field (name Reference) U) |
||||||
|
(field (name Value) Ra-02)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name GND) (type passive)) |
||||||
|
(pin (num 2) (name GND) (type passive)) |
||||||
|
(pin (num 3) (name 3V3) (type power_in)) |
||||||
|
(pin (num 4) (name RST) (type input)) |
||||||
|
(pin (num 5) (name DIO0) (type BiDi)) |
||||||
|
(pin (num 6) (name DIO1) (type BiDi)) |
||||||
|
(pin (num 7) (name DIO2) (type BiDi)) |
||||||
|
(pin (num 8) (name DIO3) (type BiDi)) |
||||||
|
(pin (num 9) (name GND) (type passive)) |
||||||
|
(pin (num 10) (name DIO4) (type BiDi)) |
||||||
|
(pin (num 11) (name DIO5) (type BiDi)) |
||||||
|
(pin (num 12) (name SCK) (type BiDi)) |
||||||
|
(pin (num 13) (name MISO) (type BiDi)) |
||||||
|
(pin (num 14) (name MOSI) (type BiDi)) |
||||||
|
(pin (num 15) (name NSS) (type BiDi)) |
||||||
|
(pin (num 16) (name GND) (type passive))))) |
||||||
|
(libraries |
||||||
|
(library (logical Connector) |
||||||
|
(uri /usr/share/kicad/library/Connector.lib)) |
||||||
|
(library (logical Device) |
||||||
|
(uri /home/marcel/kicad_sources/kicad-symbols-master/Device.lib)) |
||||||
|
(library (logical Mechanical) |
||||||
|
(uri /usr/share/kicad/library/Mechanical.lib)) |
||||||
|
(library (logical Switch) |
||||||
|
(uri /usr/share/kicad/library/Switch.lib)) |
||||||
|
(library (logical Timer) |
||||||
|
(uri /home/marcel/kicad_sources/kicad-symbols-master/Timer.lib)) |
||||||
|
(library (logical Transistor_BJT) |
||||||
|
(uri /home/marcel/kicad_sources/kicad-symbols-master/Transistor_BJT.lib)) |
||||||
|
(library (logical mtk_power_supply) |
||||||
|
(uri /home/marcel/Documenten/electronische_projecten/KiCad_libraries/mtk_power_supply.lib)) |
||||||
|
(library (logical mtk_processor) |
||||||
|
(uri /home/marcel/Documenten/electronische_projecten/KiCad_libraries/mtk_processor.lib)) |
||||||
|
(library (logical mtk_rf) |
||||||
|
(uri /home/marcel/Documenten/electronische_projecten/KiCad_libraries/mtk_rf.lib))) |
||||||
|
(nets |
||||||
|
(net (code 1) (name MOSI) |
||||||
|
(node (ref U1) (pin 14)) |
||||||
|
(node (ref J1) (pin 19))) |
||||||
|
(net (code 2) (name LORA_RST) |
||||||
|
(node (ref J1) (pin 31)) |
||||||
|
(node (ref U1) (pin 4))) |
||||||
|
(net (code 3) (name SCK) |
||||||
|
(node (ref J1) (pin 23)) |
||||||
|
(node (ref U1) (pin 12))) |
||||||
|
(net (code 4) (name NSS) |
||||||
|
(node (ref J1) (pin 24)) |
||||||
|
(node (ref U1) (pin 15))) |
||||||
|
(net (code 5) (name MISO) |
||||||
|
(node (ref U1) (pin 13)) |
||||||
|
(node (ref J1) (pin 21))) |
||||||
|
(net (code 6) (name +3V3) |
||||||
|
(node (ref U1) (pin 3)) |
||||||
|
(node (ref J2) (pin 1)) |
||||||
|
(node (ref J1) (pin 1)) |
||||||
|
(node (ref C1) (pin 1))) |
||||||
|
(net (code 7) (name GND) |
||||||
|
(node (ref J2) (pin 5)) |
||||||
|
(node (ref R5) (pin 2)) |
||||||
|
(node (ref Q2) (pin 3)) |
||||||
|
(node (ref J1) (pin 20)) |
||||||
|
(node (ref J1) (pin 25)) |
||||||
|
(node (ref J1) (pin 34)) |
||||||
|
(node (ref J1) (pin 39)) |
||||||
|
(node (ref J1) (pin 6)) |
||||||
|
(node (ref J1) (pin 30)) |
||||||
|
(node (ref Q3) (pin 3)) |
||||||
|
(node (ref U1) (pin 1)) |
||||||
|
(node (ref D6) (pin 2)) |
||||||
|
(node (ref R3) (pin 2)) |
||||||
|
(node (ref U2) (pin 1)) |
||||||
|
(node (ref U3) (pin 2)) |
||||||
|
(node (ref D7) (pin 2)) |
||||||
|
(node (ref U3) (pin 3)) |
||||||
|
(node (ref U1) (pin 9)) |
||||||
|
(node (ref U1) (pin 2)) |
||||||
|
(node (ref U1) (pin 16)) |
||||||
|
(node (ref C3) (pin 2)) |
||||||
|
(node (ref C2) (pin 2)) |
||||||
|
(node (ref Q1) (pin 3)) |
||||||
|
(node (ref J1) (pin 14)) |
||||||
|
(node (ref C1) (pin 2))) |
||||||
|
(net (code 8) (name DIO0) |
||||||
|
(node (ref J1) (pin 29)) |
||||||
|
(node (ref U1) (pin 5))) |
||||||
|
(net (code 9) (name +5V) |
||||||
|
(node (ref U3) (pin 4)) |
||||||
|
(node (ref U2) (pin 4)) |
||||||
|
(node (ref U2) (pin 8)) |
||||||
|
(node (ref R6) (pin 1)) |
||||||
|
(node (ref J1) (pin 2)) |
||||||
|
(node (ref D1) (pin 1)) |
||||||
|
(node (ref J1) (pin 4)) |
||||||
|
(node (ref C2) (pin 1)) |
||||||
|
(node (ref R1) (pin 1))) |
||||||
|
(net (code 10) (name POWER_ON_SWITCH) |
||||||
|
(node (ref D3) (pin 2)) |
||||||
|
(node (ref D2) (pin 2)) |
||||||
|
(node (ref R8) (pin 1))) |
||||||
|
(net (code 11) (name "Net-(D2-Pad1)") |
||||||
|
(node (ref R4) (pin 2)) |
||||||
|
(node (ref D2) (pin 1))) |
||||||
|
(net (code 12) (name "Net-(D6-Pad1)") |
||||||
|
(node (ref R6) (pin 2)) |
||||||
|
(node (ref D6) (pin 1)) |
||||||
|
(node (ref Q2) (pin 1))) |
||||||
|
(net (code 13) (name POWER_OFF) |
||||||
|
(node (ref J1) (pin 36)) |
||||||
|
(node (ref Q3) (pin 1))) |
||||||
|
(net (code 14) (name SCL) |
||||||
|
(node (ref J2) (pin 3)) |
||||||
|
(node (ref J1) (pin 5))) |
||||||
|
(net (code 15) (name SDA) |
||||||
|
(node (ref J1) (pin 3)) |
||||||
|
(node (ref J2) (pin 2))) |
||||||
|
(net (code 16) (name "Net-(Q2-Pad2)") |
||||||
|
(node (ref R4) (pin 1)) |
||||||
|
(node (ref R5) (pin 1)) |
||||||
|
(node (ref Q2) (pin 2))) |
||||||
|
(net (code 17) (name "Net-(J2-Pad4)") |
||||||
|
(node (ref J2) (pin 4))) |
||||||
|
(net (code 18) (name "Net-(Q1-Pad2)") |
||||||
|
(node (ref R2) (pin 1)) |
||||||
|
(node (ref R3) (pin 1)) |
||||||
|
(node (ref Q1) (pin 2))) |
||||||
|
(net (code 19) (name "Net-(D6-Pad3)") |
||||||
|
(node (ref U3) (pin 5)) |
||||||
|
(node (ref D6) (pin 3)) |
||||||
|
(node (ref Q1) (pin 1)) |
||||||
|
(node (ref R7) (pin 2))) |
||||||
|
(net (code 20) (name +12V) |
||||||
|
(node (ref R7) (pin 1)) |
||||||
|
(node (ref U3) (pin 1)) |
||||||
|
(node (ref SW1) (pin 1))) |
||||||
|
(net (code 21) (name "Net-(R8-Pad2)") |
||||||
|
(node (ref SW1) (pin 2)) |
||||||
|
(node (ref R8) (pin 2)) |
||||||
|
(node (ref R9) (pin 2))) |
||||||
|
(net (code 22) (name "Net-(D3-Pad1)") |
||||||
|
(node (ref D3) (pin 1)) |
||||||
|
(node (ref D5) (pin 1)) |
||||||
|
(node (ref D4) (pin 1)) |
||||||
|
(node (ref R2) (pin 2))) |
||||||
|
(net (code 23) (name POWER_ON_DELAY) |
||||||
|
(node (ref D5) (pin 2)) |
||||||
|
(node (ref U2) (pin 3))) |
||||||
|
(net (code 24) (name "Net-(C3-Pad1)") |
||||||
|
(node (ref U2) (pin 2)) |
||||||
|
(node (ref D1) (pin 2)) |
||||||
|
(node (ref R1) (pin 2)) |
||||||
|
(node (ref C3) (pin 1))) |
||||||
|
(net (code 25) (name "Net-(U1-Pad8)") |
||||||
|
(node (ref U1) (pin 8))) |
||||||
|
(net (code 26) (name "Net-(U1-Pad7)") |
||||||
|
(node (ref U1) (pin 7))) |
||||||
|
(net (code 27) (name "Net-(U1-Pad6)") |
||||||
|
(node (ref U1) (pin 6))) |
||||||
|
(net (code 28) (name "Net-(U1-Pad11)") |
||||||
|
(node (ref U1) (pin 11))) |
||||||
|
(net (code 29) (name "Net-(U1-Pad10)") |
||||||
|
(node (ref U1) (pin 10))) |
||||||
|
(net (code 30) (name "Net-(U2-Pad5)") |
||||||
|
(node (ref U2) (pin 5)) |
||||||
|
(node (ref U2) (pin 6))) |
||||||
|
(net (code 31) (name POWER_ON_RPI) |
||||||
|
(node (ref D4) (pin 2)) |
||||||
|
(node (ref J1) (pin 40))) |
||||||
|
(net (code 32) (name "Net-(U2-Pad7)") |
||||||
|
(node (ref U2) (pin 7))) |
||||||
|
(net (code 33) (name "Net-(D7-Pad1)") |
||||||
|
(node (ref R9) (pin 1)) |
||||||
|
(node (ref D7) (pin 1)) |
||||||
|
(node (ref Q3) (pin 2))))) |
@ -0,0 +1,252 @@ |
|||||||
|
update=do 20 jan 2022 12:11:04 CET |
||||||
|
version=1 |
||||||
|
last_client=kicad |
||||||
|
[general] |
||||||
|
version=1 |
||||||
|
RootSch= |
||||||
|
BoardNm= |
||||||
|
[cvpcb] |
||||||
|
version=1 |
||||||
|
NetIExt=net |
||||||
|
[eeschema] |
||||||
|
version=1 |
||||||
|
LibDir= |
||||||
|
[eeschema/libraries] |
||||||
|
[schematic_editor] |
||||||
|
version=1 |
||||||
|
PageLayoutDescrFile= |
||||||
|
PlotDirectoryName= |
||||||
|
SubpartIdSeparator=0 |
||||||
|
SubpartFirstId=65 |
||||||
|
NetFmtName=Pcbnew |
||||||
|
SpiceAjustPassiveValues=0 |
||||||
|
LabSize=50 |
||||||
|
ERC_TestSimilarLabels=1 |
||||||
|
[pcbnew] |
||||||
|
version=1 |
||||||
|
PageLayoutDescrFile= |
||||||
|
LastNetListRead=winlink_server.net |
||||||
|
CopperLayerCount=2 |
||||||
|
BoardThickness=1.6 |
||||||
|
AllowMicroVias=0 |
||||||
|
AllowBlindVias=0 |
||||||
|
RequireCourtyardDefinitions=0 |
||||||
|
ProhibitOverlappingCourtyards=1 |
||||||
|
MinTrackWidth=0.2 |
||||||
|
MinViaDiameter=0.4 |
||||||
|
MinViaDrill=0.3 |
||||||
|
MinMicroViaDiameter=0.2 |
||||||
|
MinMicroViaDrill=0.09999999999999999 |
||||||
|
MinHoleToHole=0.25 |
||||||
|
TrackWidth1=0.25 |
||||||
|
TrackWidth2=0.8 |
||||||
|
TrackWidth3=1.5 |
||||||
|
ViaDiameter1=0.8 |
||||||
|
ViaDrill1=0.4 |
||||||
|
ViaDiameter2=2 |
||||||
|
ViaDrill2=0.8 |
||||||
|
dPairWidth1=0.2 |
||||||
|
dPairGap1=0.25 |
||||||
|
dPairViaGap1=0.25 |
||||||
|
SilkLineWidth=0.12 |
||||||
|
SilkTextSizeV=1 |
||||||
|
SilkTextSizeH=1 |
||||||
|
SilkTextSizeThickness=0.15 |
||||||
|
SilkTextItalic=0 |
||||||
|
SilkTextUpright=1 |
||||||
|
CopperLineWidth=0.2 |
||||||
|
CopperTextSizeV=1.5 |
||||||
|
CopperTextSizeH=1.5 |
||||||
|
CopperTextThickness=0.3 |
||||||
|
CopperTextItalic=0 |
||||||
|
CopperTextUpright=1 |
||||||
|
EdgeCutLineWidth=0.05 |
||||||
|
CourtyardLineWidth=0.05 |
||||||
|
OthersLineWidth=0.15 |
||||||
|
OthersTextSizeV=1 |
||||||
|
OthersTextSizeH=1 |
||||||
|
OthersTextSizeThickness=0.15 |
||||||
|
OthersTextItalic=0 |
||||||
|
OthersTextUpright=1 |
||||||
|
SolderMaskClearance=0 |
||||||
|
SolderMaskMinWidth=0 |
||||||
|
SolderPasteClearance=0 |
||||||
|
SolderPasteRatio=-0 |
||||||
|
[pcbnew/Layer.F.Cu] |
||||||
|
Name=F.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.In1.Cu] |
||||||
|
Name=In1.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In2.Cu] |
||||||
|
Name=In2.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In3.Cu] |
||||||
|
Name=In3.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In4.Cu] |
||||||
|
Name=In4.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In5.Cu] |
||||||
|
Name=In5.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In6.Cu] |
||||||
|
Name=In6.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In7.Cu] |
||||||
|
Name=In7.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In8.Cu] |
||||||
|
Name=In8.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In9.Cu] |
||||||
|
Name=In9.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In10.Cu] |
||||||
|
Name=In10.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In11.Cu] |
||||||
|
Name=In11.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In12.Cu] |
||||||
|
Name=In12.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In13.Cu] |
||||||
|
Name=In13.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In14.Cu] |
||||||
|
Name=In14.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In15.Cu] |
||||||
|
Name=In15.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In16.Cu] |
||||||
|
Name=In16.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In17.Cu] |
||||||
|
Name=In17.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In18.Cu] |
||||||
|
Name=In18.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In19.Cu] |
||||||
|
Name=In19.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In20.Cu] |
||||||
|
Name=In20.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In21.Cu] |
||||||
|
Name=In21.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In22.Cu] |
||||||
|
Name=In22.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In23.Cu] |
||||||
|
Name=In23.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In24.Cu] |
||||||
|
Name=In24.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In25.Cu] |
||||||
|
Name=In25.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In26.Cu] |
||||||
|
Name=In26.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In27.Cu] |
||||||
|
Name=In27.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In28.Cu] |
||||||
|
Name=In28.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In29.Cu] |
||||||
|
Name=In29.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In30.Cu] |
||||||
|
Name=In30.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.B.Cu] |
||||||
|
Name=B.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.B.Adhes] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.F.Adhes] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.B.Paste] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.F.Paste] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.B.SilkS] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.F.SilkS] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.B.Mask] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.F.Mask] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.Dwgs.User] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.Cmts.User] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.Eco1.User] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.Eco2.User] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.Edge.Cuts] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.Margin] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.B.CrtYd] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.F.CrtYd] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.B.Fab] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.F.Fab] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.Rescue] |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Netclasses] |
||||||
|
[pcbnew/Netclasses/Default] |
||||||
|
Name=Default |
||||||
|
Clearance=0.2 |
||||||
|
TrackWidth=0.25 |
||||||
|
ViaDiameter=0.8 |
||||||
|
ViaDrill=0.4 |
||||||
|
uViaDiameter=0.3 |
||||||
|
uViaDrill=0.1 |
||||||
|
dPairWidth=0.2 |
||||||
|
dPairGap=0.25 |
||||||
|
dPairViaGap=0.25 |
@ -0,0 +1,863 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<export version="D"> |
||||||
|
<design> |
||||||
|
<source>/home/marcel/Documenten/electronische_projecten/winlink_server/RPi_LoRa_shield-KiCad/RPi_LoRa_shield.sch</source> |
||||||
|
<date>ma 24 jan 2022 14:09:44 CET</date> |
||||||
|
<tool>Eeschema 5.1.8-5.1.8</tool> |
||||||
|
<sheet number="1" name="/" tstamps="/"> |
||||||
|
<title_block> |
||||||
|
<title>LORA APRS shield</title> |
||||||
|
<company>M. Konstapel</company> |
||||||
|
<rev>1</rev> |
||||||
|
<date>2022-01-20</date> |
||||||
|
<source>RPi_LoRa_shield.sch</source> |
||||||
|
<comment number="1" value="https://meezenest.nl/mees"/> |
||||||
|
<comment number="2" value=""/> |
||||||
|
<comment number="3" value=""/> |
||||||
|
<comment number="4" value=""/> |
||||||
|
</title_block> |
||||||
|
</sheet> |
||||||
|
</design> |
||||||
|
<components> |
||||||
|
<comp ref="U1"> |
||||||
|
<value>Ra-02</value> |
||||||
|
<footprint>mtk_rf:RA-02</footprint> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">Thinker</field> |
||||||
|
<field name="Ordering #">Ra-02</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="mtk_rf" part="Ra-02" description=""/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61E5E459</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="U2"> |
||||||
|
<value>NE555</value> |
||||||
|
<footprint>Package_DIP:DIP-8_W7.62mm_LongPads</footprint> |
||||||
|
<datasheet>http://www.ti.com/lit/ds/symlink/ne555.pdf</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">NE555</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Timer" part="NE555" description="Precision Timers, DIP-8/SOIC-8"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61E60C77</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="C2"> |
||||||
|
<value>100n</value> |
||||||
|
<footprint>Capacitor_THT:C_Disc_D7.5mm_W2.5mm_P5.00mm</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">100n/50V</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="C_Small" description="Unpolarized capacitor, small symbol"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61E64022</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="C3"> |
||||||
|
<value>100U</value> |
||||||
|
<footprint>Capacitor_THT:CP_Radial_D5.0mm_P2.50mm</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">100U/15V</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="CP_Small" description="Polarized capacitor, small symbol"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61E647F7</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="R1"> |
||||||
|
<value>470k</value> |
||||||
|
<footprint>Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">470k 1% 0.25W</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="R_Small" description="Resistor, small symbol"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61E6532C</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="U3"> |
||||||
|
<value>DCDC_LM2596</value> |
||||||
|
<footprint>mtk_power_supply:LM2596</footprint> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">LM2596 module</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="mtk_power_supply" part="DCDC_LM2596" description=""/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61E6B9FF</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="R2"> |
||||||
|
<value>10k</value> |
||||||
|
<footprint>Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">10k 1% 0.25W</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="R_Small" description="Resistor, small symbol"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61E738A4</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="D4"> |
||||||
|
<value>1N4148</value> |
||||||
|
<footprint>Diode_THT:D_A-405_P7.62mm_Horizontal</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">1N4148</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="D_Small_ALT" description="Diode, small symbol, filled shape"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61E748F5</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="D5"> |
||||||
|
<value>1N4148</value> |
||||||
|
<footprint>Diode_THT:D_A-405_P7.62mm_Horizontal</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">1N4148</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="D_Small_ALT" description="Diode, small symbol, filled shape"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61E7510A</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="D3"> |
||||||
|
<value>1N4148</value> |
||||||
|
<footprint>Diode_THT:D_A-405_P7.62mm_Horizontal</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">1N4148</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="D_Small_ALT" description="Diode, small symbol, filled shape"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61E752C9</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="R9"> |
||||||
|
<value>100k</value> |
||||||
|
<footprint>Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">100k 1% 0.25W</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="R_Small" description="Resistor, small symbol"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61E78C2C</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="R8"> |
||||||
|
<value>10k</value> |
||||||
|
<footprint>Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">10k 1% 0.25W</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="R_Small" description="Resistor, small symbol"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61E7939A</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="Q3"> |
||||||
|
<value>BC547C</value> |
||||||
|
<footprint>Package_TO_SOT_THT:TO-92_Wide</footprint> |
||||||
|
<datasheet>http://www.fairchildsemi.com/ds/BC/BC547.pdf</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">BC547C</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Transistor_BJT" part="BC547" description="0.1A Ic, 45V Vce, Small Signal NPN Transistor, TO-92"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61E8E32B</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="D7"> |
||||||
|
<value>1N4148</value> |
||||||
|
<footprint>Diode_THT:D_A-405_P7.62mm_Horizontal</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">1N4148</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="D_Small_ALT" description="Diode, small symbol, filled shape"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61E8F395</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="SW1"> |
||||||
|
<value>POWER_ON</value> |
||||||
|
<footprint>Connector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_Vertical</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">2.54mm header 2 pin</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Switch" part="SW_Push" description="Push button switch, generic, two pins"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61E786D8</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="D6"> |
||||||
|
<value>Dual LED</value> |
||||||
|
<footprint>Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">LED dual color 3 mm</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="LED_Dual_ACA" description="Dual LED, common cathode on pin 2"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61EA59A8</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="R7"> |
||||||
|
<value>10k</value> |
||||||
|
<footprint>Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">10k 1% 0.25W</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="R_Small" description="Resistor, small symbol"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61EB5A7D</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="R6"> |
||||||
|
<value>3k3</value> |
||||||
|
<footprint>Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">3k3 1% 0.25W</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="R_Small" description="Resistor, small symbol"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61EBD1AF</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="R3"> |
||||||
|
<value>10k</value> |
||||||
|
<footprint>Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">10k 1% 0.25W</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="R_Small" description="Resistor, small symbol"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61ED8E9E</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="Q1"> |
||||||
|
<value>BC547C</value> |
||||||
|
<footprint>Package_TO_SOT_THT:TO-92_Wide</footprint> |
||||||
|
<datasheet>http://www.fairchildsemi.com/ds/BC/BC547.pdf</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">BC547C</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Transistor_BJT" part="BC547" description="0.1A Ic, 45V Vce, Small Signal NPN Transistor, TO-92"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61E725D2</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="C1"> |
||||||
|
<value>100n</value> |
||||||
|
<footprint>Capacitor_THT:C_Disc_D7.5mm_W2.5mm_P5.00mm</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">100n/50V</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="C_Small" description="Unpolarized capacitor, small symbol"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61F5371B</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="D1"> |
||||||
|
<value>1N4148</value> |
||||||
|
<footprint>Diode_THT:D_A-405_P7.62mm_Horizontal</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">1N4148</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="D_Small_ALT" description="Diode, small symbol, filled shape"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61E95571</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="J2"> |
||||||
|
<value>IIC</value> |
||||||
|
<footprint>Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">2.54mm header 5 pin</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Connector" part="Conn_01x05_Male" description="Generic connector, single row, 01x05, script generated (kicad-library-utils/schlib/autogen/connector/)"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61ED9E42</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="R4"> |
||||||
|
<value>10k</value> |
||||||
|
<footprint>Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">10k 1% 0.25W</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="R_Small" description="Resistor, small symbol"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61EEB42A</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="R5"> |
||||||
|
<value>10k</value> |
||||||
|
<footprint>Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">10k 1% 0.25W</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="R_Small" description="Resistor, small symbol"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61EEB432</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="Q2"> |
||||||
|
<value>BC547C</value> |
||||||
|
<footprint>Package_TO_SOT_THT:TO-92_Wide</footprint> |
||||||
|
<datasheet>http://www.fairchildsemi.com/ds/BC/BC547.pdf</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">BC547C</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Transistor_BJT" part="BC547" description="0.1A Ic, 45V Vce, Small Signal NPN Transistor, TO-92"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61EEB43B</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="D2"> |
||||||
|
<value>1N4148</value> |
||||||
|
<footprint>Diode_THT:D_A-405_P7.62mm_Horizontal</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">QPL</field> |
||||||
|
<field name="Ordering #">1N4148</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Device" part="D_Small_ALT" description="Diode, small symbol, filled shape"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>61F1769B</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="H1"> |
||||||
|
<value>M3</value> |
||||||
|
<footprint>MountingHole:MountingHole_3.2mm_M3_DIN965_Pad</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">Not a placeable part</field> |
||||||
|
<field name="Ordering #">-</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Mechanical" part="MountingHole" description="Mounting Hole without connection"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>6200BDDD</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="H2"> |
||||||
|
<value>M3</value> |
||||||
|
<footprint>MountingHole:MountingHole_3.2mm_M3_DIN965_Pad</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">Not a placeable part</field> |
||||||
|
<field name="Ordering #">-</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Mechanical" part="MountingHole" description="Mounting Hole without connection"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>6200C56C</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="H3"> |
||||||
|
<value>M3</value> |
||||||
|
<footprint>MountingHole:MountingHole_3.2mm_M3_DIN965_Pad</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">Not a placeable part</field> |
||||||
|
<field name="Ordering #">-</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Mechanical" part="MountingHole" description="Mounting Hole without connection"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>6200C756</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="H4"> |
||||||
|
<value>M3</value> |
||||||
|
<footprint>MountingHole:MountingHole_3.2mm_M3_DIN965_Pad</footprint> |
||||||
|
<datasheet>~</datasheet> |
||||||
|
<fields> |
||||||
|
<field name="Manufacturer">Not a placeable part</field> |
||||||
|
<field name="Ordering #">-</field> |
||||||
|
</fields> |
||||||
|
<libsource lib="Mechanical" part="MountingHole" description="Mounting Hole without connection"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>6200C9C8</tstamp> |
||||||
|
</comp> |
||||||
|
<comp ref="J1"> |
||||||
|
<value>Raspberry_Pi_for_lora_module</value> |
||||||
|
<footprint>mtk_processor:Raspberry_Pi_Zero_for_lora_module</footprint> |
||||||
|
<datasheet>https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/rpi_SCH_3bplus_1p0_reduced.pdf</datasheet> |
||||||
|
<libsource lib="mtk_processor" part="Raspberry_Pi_for_lora_module" description="expansion header for Raspberry Pi 2 & 3"/> |
||||||
|
<sheetpath names="/" tstamps="/"/> |
||||||
|
<tstamp>620B745B</tstamp> |
||||||
|
</comp> |
||||||
|
</components> |
||||||
|
<libparts> |
||||||
|
<libpart lib="Connector" part="Conn_01x05_Male"> |
||||||
|
<description>Generic connector, single row, 01x05, script generated (kicad-library-utils/schlib/autogen/connector/)</description> |
||||||
|
<docs>~</docs> |
||||||
|
<footprints> |
||||||
|
<fp>Connector*:*_1x??_*</fp> |
||||||
|
</footprints> |
||||||
|
<fields> |
||||||
|
<field name="Reference">J</field> |
||||||
|
<field name="Value">Conn_01x05_Male</field> |
||||||
|
</fields> |
||||||
|
<pins> |
||||||
|
<pin num="1" name="Pin_1" type="passive"/> |
||||||
|
<pin num="2" name="Pin_2" type="passive"/> |
||||||
|
<pin num="3" name="Pin_3" type="passive"/> |
||||||
|
<pin num="4" name="Pin_4" type="passive"/> |
||||||
|
<pin num="5" name="Pin_5" type="passive"/> |
||||||
|
</pins> |
||||||
|
</libpart> |
||||||
|
<libpart lib="Device" part="CP_Small"> |
||||||
|
<description>Polarized capacitor, small symbol</description> |
||||||
|
<docs>~</docs> |
||||||
|
<footprints> |
||||||
|
<fp>CP_*</fp> |
||||||
|
</footprints> |
||||||
|
<fields> |
||||||
|
<field name="Reference">C</field> |
||||||
|
<field name="Value">CP_Small</field> |
||||||
|
</fields> |
||||||
|
<pins> |
||||||
|
<pin num="1" name="~" type="passive"/> |
||||||
|
<pin num="2" name="~" type="passive"/> |
||||||
|
</pins> |
||||||
|
</libpart> |
||||||
|
<libpart lib="Device" part="C_Small"> |
||||||
|
<description>Unpolarized capacitor, small symbol</description> |
||||||
|
<docs>~</docs> |
||||||
|
<footprints> |
||||||
|
<fp>C_*</fp> |
||||||
|
</footprints> |
||||||
|
<fields> |
||||||
|
<field name="Reference">C</field> |
||||||
|
<field name="Value">C_Small</field> |
||||||
|
</fields> |
||||||
|
<pins> |
||||||
|
<pin num="1" name="~" type="passive"/> |
||||||
|
<pin num="2" name="~" type="passive"/> |
||||||
|
</pins> |
||||||
|
</libpart> |
||||||
|
<libpart lib="Device" part="D_Small_ALT"> |
||||||
|
<description>Diode, small symbol, filled shape</description> |
||||||
|
<docs>~</docs> |
||||||
|
<footprints> |
||||||
|
<fp>TO-???*</fp> |
||||||
|
<fp>*_Diode_*</fp> |
||||||
|
<fp>*SingleDiode*</fp> |
||||||
|
<fp>D_*</fp> |
||||||
|
</footprints> |
||||||
|
<fields> |
||||||
|
<field name="Reference">D</field> |
||||||
|
<field name="Value">D_Small_ALT</field> |
||||||
|
</fields> |
||||||
|
<pins> |
||||||
|
<pin num="1" name="K" type="passive"/> |
||||||
|
<pin num="2" name="A" type="passive"/> |
||||||
|
</pins> |
||||||
|
</libpart> |
||||||
|
<libpart lib="Device" part="LED_Dual_ACA"> |
||||||
|
<description>Dual LED, common cathode on pin 2</description> |
||||||
|
<docs>~</docs> |
||||||
|
<footprints> |
||||||
|
<fp>LED*</fp> |
||||||
|
<fp>LED_SMD:*</fp> |
||||||
|
<fp>LED_THT:*</fp> |
||||||
|
</footprints> |
||||||
|
<fields> |
||||||
|
<field name="Reference">D</field> |
||||||
|
<field name="Value">LED_Dual_ACA</field> |
||||||
|
</fields> |
||||||
|
<pins> |
||||||
|
<pin num="1" name="A1" type="input"/> |
||||||
|
<pin num="2" name="K" type="input"/> |
||||||
|
<pin num="3" name="A2" type="input"/> |
||||||
|
</pins> |
||||||
|
</libpart> |
||||||
|
<libpart lib="Device" part="R_Small"> |
||||||
|
<description>Resistor, small symbol</description> |
||||||
|
<docs>~</docs> |
||||||
|
<footprints> |
||||||
|
<fp>R_*</fp> |
||||||
|
</footprints> |
||||||
|
<fields> |
||||||
|
<field name="Reference">R</field> |
||||||
|
<field name="Value">R_Small</field> |
||||||
|
</fields> |
||||||
|
<pins> |
||||||
|
<pin num="1" name="~" type="passive"/> |
||||||
|
<pin num="2" name="~" type="passive"/> |
||||||
|
</pins> |
||||||
|
</libpart> |
||||||
|
<libpart lib="Mechanical" part="MountingHole"> |
||||||
|
<description>Mounting Hole without connection</description> |
||||||
|
<docs>~</docs> |
||||||
|
<footprints> |
||||||
|
<fp>MountingHole*</fp> |
||||||
|
</footprints> |
||||||
|
<fields> |
||||||
|
<field name="Reference">H</field> |
||||||
|
<field name="Value">MountingHole</field> |
||||||
|
</fields> |
||||||
|
</libpart> |
||||||
|
<libpart lib="Switch" part="SW_Push"> |
||||||
|
<description>Push button switch, generic, two pins</description> |
||||||
|
<docs>~</docs> |
||||||
|
<fields> |
||||||
|
<field name="Reference">SW</field> |
||||||
|
<field name="Value">SW_Push</field> |
||||||
|
</fields> |
||||||
|
<pins> |
||||||
|
<pin num="1" name="1" type="passive"/> |
||||||
|
<pin num="2" name="2" type="passive"/> |
||||||
|
</pins> |
||||||
|
</libpart> |
||||||
|
<libpart lib="Timer" part="LM555"> |
||||||
|
<aliases> |
||||||
|
<alias>ICM7555</alias> |
||||||
|
<alias>LMC555xM</alias> |
||||||
|
<alias>LMC555xMM</alias> |
||||||
|
<alias>LMC555xN</alias> |
||||||
|
<alias>MC1455</alias> |
||||||
|
<alias>TLC555CD</alias> |
||||||
|
<alias>TLC555CP</alias> |
||||||
|
<alias>TLC555CPS</alias> |
||||||
|
<alias>NA555</alias> |
||||||
|
<alias>NE555</alias> |
||||||
|
<alias>SE555</alias> |
||||||
|
<alias>SA555</alias> |
||||||
|
</aliases> |
||||||
|
<description>Timer, DIP-8/SOIC-8/SSOP-8</description> |
||||||
|
<docs>http://www.ti.com/lit/ds/symlink/lm555.pdf</docs> |
||||||
|
<footprints> |
||||||
|
<fp>SOIC*3.9x4.9mm*P1.27mm*</fp> |
||||||
|
<fp>DIP*W7.62mm*</fp> |
||||||
|
<fp>TSSOP*3x3mm*P0.65mm*</fp> |
||||||
|
</footprints> |
||||||
|
<fields> |
||||||
|
<field name="Reference">U</field> |
||||||
|
<field name="Value">LM555</field> |
||||||
|
</fields> |
||||||
|
<pins> |
||||||
|
<pin num="1" name="GND" type="power_in"/> |
||||||
|
<pin num="2" name="TR" type="input"/> |
||||||
|
<pin num="3" name="Q" type="output"/> |
||||||
|
<pin num="4" name="R" type="input"/> |
||||||
|
<pin num="5" name="CV" type="input"/> |
||||||
|
<pin num="6" name="THR" type="input"/> |
||||||
|
<pin num="7" name="DIS" type="input"/> |
||||||
|
<pin num="8" name="VCC" type="power_in"/> |
||||||
|
</pins> |
||||||
|
</libpart> |
||||||
|
<libpart lib="Transistor_BJT" part="BC547"> |
||||||
|
<aliases> |
||||||
|
<alias>BC546</alias> |
||||||
|
<alias>BC548</alias> |
||||||
|
<alias>BC549</alias> |
||||||
|
<alias>BC550</alias> |
||||||
|
<alias>BC337</alias> |
||||||
|
<alias>BC338</alias> |
||||||
|
</aliases> |
||||||
|
<description>0.1A Ic, 45V Vce, Small Signal NPN Transistor, TO-92</description> |
||||||
|
<docs>http://www.fairchildsemi.com/ds/BC/BC547.pdf</docs> |
||||||
|
<footprints> |
||||||
|
<fp>TO?92*</fp> |
||||||
|
</footprints> |
||||||
|
<fields> |
||||||
|
<field name="Reference">Q</field> |
||||||
|
<field name="Value">BC547</field> |
||||||
|
<field name="Footprint">Package_TO_SOT_THT:TO-92_Inline</field> |
||||||
|
</fields> |
||||||
|
<pins> |
||||||
|
<pin num="1" name="C" type="passive"/> |
||||||
|
<pin num="2" name="B" type="input"/> |
||||||
|
<pin num="3" name="E" type="passive"/> |
||||||
|
</pins> |
||||||
|
</libpart> |
||||||
|
<libpart lib="mtk_power_supply" part="DCDC_LM2596"> |
||||||
|
<footprints> |
||||||
|
<fp>*XP?POWER*ISU02*SMD*</fp> |
||||||
|
</footprints> |
||||||
|
<fields> |
||||||
|
<field name="Reference">U</field> |
||||||
|
<field name="Value">DCDC_LM2596</field> |
||||||
|
<field name="Footprint">Converter_DCDC:Converter_DCDC_XP_POWER-ISU02_SMD</field> |
||||||
|
</fields> |
||||||
|
<pins> |
||||||
|
<pin num="1" name="+VIN" type="power_in"/> |
||||||
|
<pin num="2" name="-VIN" type="power_in"/> |
||||||
|
<pin num="3" name="-VOUT" type="power_out"/> |
||||||
|
<pin num="4" name="+VOUT" type="power_out"/> |
||||||
|
<pin num="5" name="~ON~/OFF" type="input"/> |
||||||
|
</pins> |
||||||
|
</libpart> |
||||||
|
<libpart lib="mtk_processor" part="Raspberry_Pi_for_lora_module"> |
||||||
|
<description>expansion header for Raspberry Pi 2 & 3</description> |
||||||
|
<docs>https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/rpi_SCH_3bplus_1p0_reduced.pdf</docs> |
||||||
|
<footprints> |
||||||
|
<fp>PinHeader*2x20*P2.54mm*Vertical*</fp> |
||||||
|
<fp>PinSocket*2x20*P2.54mm*Vertical*</fp> |
||||||
|
</footprints> |
||||||
|
<fields> |
||||||
|
<field name="Reference">J</field> |
||||||
|
<field name="Value">Raspberry_Pi_for_lora_module</field> |
||||||
|
</fields> |
||||||
|
<pins> |
||||||
|
<pin num="1" name="3V3" type="power_in"/> |
||||||
|
<pin num="2" name="5V" type="power_in"/> |
||||||
|
<pin num="3" name="SDA/GPIO2" type="BiDi"/> |
||||||
|
<pin num="4" name="5V" type="power_in"/> |
||||||
|
<pin num="5" name="SCL/GPIO3" type="BiDi"/> |
||||||
|
<pin num="6" name="GND" type="power_in"/> |
||||||
|
<pin num="14" name="GND" type="power_in"/> |
||||||
|
<pin num="19" name="MOSI0/GPIO10" type="BiDi"/> |
||||||
|
<pin num="20" name="GND" type="power_in"/> |
||||||
|
<pin num="21" name="MISO0/GPIO9" type="BiDi"/> |
||||||
|
<pin num="23" name="SCLK0/GPIO11" type="BiDi"/> |
||||||
|
<pin num="24" name="~CE0~/GPIO8" type="BiDi"/> |
||||||
|
<pin num="25" name="GND" type="power_in"/> |
||||||
|
<pin num="29" name="GCLK1/GPIO5" type="BiDi"/> |
||||||
|
<pin num="30" name="GND" type="power_in"/> |
||||||
|
<pin num="31" name="GCLK2/GPIO6" type="BiDi"/> |
||||||
|
<pin num="34" name="GND" type="power_in"/> |
||||||
|
<pin num="36" name="GPIO16" type="BiDi"/> |
||||||
|
<pin num="39" name="GND" type="power_in"/> |
||||||
|
<pin num="40" name="GPIO21/SCLK1" type="BiDi"/> |
||||||
|
</pins> |
||||||
|
</libpart> |
||||||
|
<libpart lib="mtk_rf" part="Ra-02"> |
||||||
|
<fields> |
||||||
|
<field name="Reference">U</field> |
||||||
|
<field name="Value">Ra-02</field> |
||||||
|
</fields> |
||||||
|
<pins> |
||||||
|
<pin num="1" name="GND" type="passive"/> |
||||||
|
<pin num="2" name="GND" type="passive"/> |
||||||
|
<pin num="3" name="3V3" type="power_in"/> |
||||||
|
<pin num="4" name="RST" type="input"/> |
||||||
|
<pin num="5" name="DIO0" type="BiDi"/> |
||||||
|
<pin num="6" name="DIO1" type="BiDi"/> |
||||||
|
<pin num="7" name="DIO2" type="BiDi"/> |
||||||
|
<pin num="8" name="DIO3" type="BiDi"/> |
||||||
|
<pin num="9" name="GND" type="passive"/> |
||||||
|
<pin num="10" name="DIO4" type="BiDi"/> |
||||||
|
<pin num="11" name="DIO5" type="BiDi"/> |
||||||
|
<pin num="12" name="SCK" type="BiDi"/> |
||||||
|
<pin num="13" name="MISO" type="BiDi"/> |
||||||
|
<pin num="14" name="MOSI" type="BiDi"/> |
||||||
|
<pin num="15" name="NSS" type="BiDi"/> |
||||||
|
<pin num="16" name="GND" type="passive"/> |
||||||
|
</pins> |
||||||
|
</libpart> |
||||||
|
</libparts> |
||||||
|
<libraries> |
||||||
|
<library logical="Connector"> |
||||||
|
<uri>/usr/share/kicad/library/Connector.lib</uri> |
||||||
|
</library> |
||||||
|
<library logical="Device"> |
||||||
|
<uri>/home/marcel/kicad_sources/kicad-symbols-master/Device.lib</uri> |
||||||
|
</library> |
||||||
|
<library logical="Mechanical"> |
||||||
|
<uri>/usr/share/kicad/library/Mechanical.lib</uri> |
||||||
|
</library> |
||||||
|
<library logical="Switch"> |
||||||
|
<uri>/usr/share/kicad/library/Switch.lib</uri> |
||||||
|
</library> |
||||||
|
<library logical="Timer"> |
||||||
|
<uri>/home/marcel/kicad_sources/kicad-symbols-master/Timer.lib</uri> |
||||||
|
</library> |
||||||
|
<library logical="Transistor_BJT"> |
||||||
|
<uri>/home/marcel/kicad_sources/kicad-symbols-master/Transistor_BJT.lib</uri> |
||||||
|
</library> |
||||||
|
<library logical="mtk_power_supply"> |
||||||
|
<uri>/home/marcel/Documenten/electronische_projecten/KiCad_libraries/mtk_power_supply.lib</uri> |
||||||
|
</library> |
||||||
|
<library logical="mtk_processor"> |
||||||
|
<uri>/home/marcel/Documenten/electronische_projecten/KiCad_libraries/mtk_processor.lib</uri> |
||||||
|
</library> |
||||||
|
<library logical="mtk_rf"> |
||||||
|
<uri>/home/marcel/Documenten/electronische_projecten/KiCad_libraries/mtk_rf.lib</uri> |
||||||
|
</library> |
||||||
|
</libraries> |
||||||
|
<nets> |
||||||
|
<net code="1" name="MOSI"> |
||||||
|
<node ref="U1" pin="14"/> |
||||||
|
<node ref="J1" pin="19"/> |
||||||
|
</net> |
||||||
|
<net code="2" name="LORA_RST"> |
||||||
|
<node ref="J1" pin="31"/> |
||||||
|
<node ref="U1" pin="4"/> |
||||||
|
</net> |
||||||
|
<net code="3" name="SCK"> |
||||||
|
<node ref="J1" pin="23"/> |
||||||
|
<node ref="U1" pin="12"/> |
||||||
|
</net> |
||||||
|
<net code="4" name="NSS"> |
||||||
|
<node ref="J1" pin="24"/> |
||||||
|
<node ref="U1" pin="15"/> |
||||||
|
</net> |
||||||
|
<net code="5" name="MISO"> |
||||||
|
<node ref="U1" pin="13"/> |
||||||
|
<node ref="J1" pin="21"/> |
||||||
|
</net> |
||||||
|
<net code="6" name="+3V3"> |
||||||
|
<node ref="U1" pin="3"/> |
||||||
|
<node ref="J2" pin="1"/> |
||||||
|
<node ref="J1" pin="1"/> |
||||||
|
<node ref="C1" pin="1"/> |
||||||
|
</net> |
||||||
|
<net code="7" name="GND"> |
||||||
|
<node ref="J2" pin="5"/> |
||||||
|
<node ref="R5" pin="2"/> |
||||||
|
<node ref="Q2" pin="3"/> |
||||||
|
<node ref="J1" pin="20"/> |
||||||
|
<node ref="J1" pin="25"/> |
||||||
|
<node ref="J1" pin="34"/> |
||||||
|
<node ref="J1" pin="39"/> |
||||||
|
<node ref="J1" pin="6"/> |
||||||
|
<node ref="J1" pin="30"/> |
||||||
|
<node ref="Q3" pin="3"/> |
||||||
|
<node ref="U1" pin="1"/> |
||||||
|
<node ref="D6" pin="2"/> |
||||||
|
<node ref="R3" pin="2"/> |
||||||
|
<node ref="U2" pin="1"/> |
||||||
|
<node ref="U3" pin="2"/> |
||||||
|
<node ref="D7" pin="2"/> |
||||||
|
<node ref="U3" pin="3"/> |
||||||
|
<node ref="U1" pin="9"/> |
||||||
|
<node ref="U1" pin="2"/> |
||||||
|
<node ref="U1" pin="16"/> |
||||||
|
<node ref="C3" pin="2"/> |
||||||
|
<node ref="C2" pin="2"/> |
||||||
|
<node ref="Q1" pin="3"/> |
||||||
|
<node ref="J1" pin="14"/> |
||||||
|
<node ref="C1" pin="2"/> |
||||||
|
</net> |
||||||
|
<net code="8" name="DIO0"> |
||||||
|
<node ref="J1" pin="29"/> |
||||||
|
<node ref="U1" pin="5"/> |
||||||
|
</net> |
||||||
|
<net code="9" name="+5V"> |
||||||
|
<node ref="U3" pin="4"/> |
||||||
|
<node ref="U2" pin="4"/> |
||||||
|
<node ref="U2" pin="8"/> |
||||||
|
<node ref="R6" pin="1"/> |
||||||
|
<node ref="J1" pin="2"/> |
||||||
|
<node ref="D1" pin="1"/> |
||||||
|
<node ref="J1" pin="4"/> |
||||||
|
<node ref="C2" pin="1"/> |
||||||
|
<node ref="R1" pin="1"/> |
||||||
|
</net> |
||||||
|
<net code="10" name="POWER_ON_SWITCH"> |
||||||
|
<node ref="D3" pin="2"/> |
||||||
|
<node ref="D2" pin="2"/> |
||||||
|
<node ref="R8" pin="1"/> |
||||||
|
</net> |
||||||
|
<net code="11" name="Net-(D2-Pad1)"> |
||||||
|
<node ref="R4" pin="2"/> |
||||||
|
<node ref="D2" pin="1"/> |
||||||
|
</net> |
||||||
|
<net code="12" name="Net-(D6-Pad1)"> |
||||||
|
<node ref="R6" pin="2"/> |
||||||
|
<node ref="D6" pin="1"/> |
||||||
|
<node ref="Q2" pin="1"/> |
||||||
|
</net> |
||||||
|
<net code="13" name="POWER_OFF"> |
||||||
|
<node ref="J1" pin="36"/> |
||||||
|
<node ref="Q3" pin="1"/> |
||||||
|
</net> |
||||||
|
<net code="14" name="SCL"> |
||||||
|
<node ref="J2" pin="3"/> |
||||||
|
<node ref="J1" pin="5"/> |
||||||
|
</net> |
||||||
|
<net code="15" name="SDA"> |
||||||
|
<node ref="J1" pin="3"/> |
||||||
|
<node ref="J2" pin="2"/> |
||||||
|
</net> |
||||||
|
<net code="16" name="Net-(Q2-Pad2)"> |
||||||
|
<node ref="R4" pin="1"/> |
||||||
|
<node ref="R5" pin="1"/> |
||||||
|
<node ref="Q2" pin="2"/> |
||||||
|
</net> |
||||||
|
<net code="17" name="Net-(J2-Pad4)"> |
||||||
|
<node ref="J2" pin="4"/> |
||||||
|
</net> |
||||||
|
<net code="18" name="Net-(Q1-Pad2)"> |
||||||
|
<node ref="R2" pin="1"/> |
||||||
|
<node ref="R3" pin="1"/> |
||||||
|
<node ref="Q1" pin="2"/> |
||||||
|
</net> |
||||||
|
<net code="19" name="Net-(D6-Pad3)"> |
||||||
|
<node ref="U3" pin="5"/> |
||||||
|
<node ref="D6" pin="3"/> |
||||||
|
<node ref="Q1" pin="1"/> |
||||||
|
<node ref="R7" pin="2"/> |
||||||
|
</net> |
||||||
|
<net code="20" name="+12V"> |
||||||
|
<node ref="R7" pin="1"/> |
||||||
|
<node ref="U3" pin="1"/> |
||||||
|
<node ref="SW1" pin="1"/> |
||||||
|
</net> |
||||||
|
<net code="21" name="Net-(R8-Pad2)"> |
||||||
|
<node ref="SW1" pin="2"/> |
||||||
|
<node ref="R8" pin="2"/> |
||||||
|
<node ref="R9" pin="2"/> |
||||||
|
</net> |
||||||
|
<net code="22" name="Net-(D3-Pad1)"> |
||||||
|
<node ref="D3" pin="1"/> |
||||||
|
<node ref="D5" pin="1"/> |
||||||
|
<node ref="D4" pin="1"/> |
||||||
|
<node ref="R2" pin="2"/> |
||||||
|
</net> |
||||||
|
<net code="23" name="POWER_ON_DELAY"> |
||||||
|
<node ref="D5" pin="2"/> |
||||||
|
<node ref="U2" pin="3"/> |
||||||
|
</net> |
||||||
|
<net code="24" name="Net-(C3-Pad1)"> |
||||||
|
<node ref="U2" pin="2"/> |
||||||
|
<node ref="D1" pin="2"/> |
||||||
|
<node ref="R1" pin="2"/> |
||||||
|
<node ref="C3" pin="1"/> |
||||||
|
</net> |
||||||
|
<net code="25" name="Net-(U1-Pad8)"> |
||||||
|
<node ref="U1" pin="8"/> |
||||||
|
</net> |
||||||
|
<net code="26" name="Net-(U1-Pad7)"> |
||||||
|
<node ref="U1" pin="7"/> |
||||||
|
</net> |
||||||
|
<net code="27" name="Net-(U1-Pad6)"> |
||||||
|
<node ref="U1" pin="6"/> |
||||||
|
</net> |
||||||
|
<net code="28" name="Net-(U1-Pad11)"> |
||||||
|
<node ref="U1" pin="11"/> |
||||||
|
</net> |
||||||
|
<net code="29" name="Net-(U1-Pad10)"> |
||||||
|
<node ref="U1" pin="10"/> |
||||||
|
</net> |
||||||
|
<net code="30" name="Net-(U2-Pad5)"> |
||||||
|
<node ref="U2" pin="5"/> |
||||||
|
<node ref="U2" pin="6"/> |
||||||
|
</net> |
||||||
|
<net code="31" name="POWER_ON_RPI"> |
||||||
|
<node ref="D4" pin="2"/> |
||||||
|
<node ref="J1" pin="40"/> |
||||||
|
</net> |
||||||
|
<net code="32" name="Net-(U2-Pad7)"> |
||||||
|
<node ref="U2" pin="7"/> |
||||||
|
</net> |
||||||
|
<net code="33" name="Net-(D7-Pad1)"> |
||||||
|
<node ref="R9" pin="1"/> |
||||||
|
<node ref="D7" pin="1"/> |
||||||
|
<node ref="Q3" pin="2"/> |
||||||
|
</net> |
||||||
|
</nets> |
||||||
|
</export> |
After Width: | Height: | Size: 509 KiB |
After Width: | Height: | Size: 518 KiB |
@ -0,0 +1,675 @@ |
|||||||
|
GNU GENERAL PUBLIC LICENSE |
||||||
|
Version 3, 29 June 2007 |
||||||
|
|
||||||
|
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> |
||||||
|
Everyone is permitted to copy and distribute verbatim copies |
||||||
|
of this license document, but changing it is not allowed. |
||||||
|
|
||||||
|
Preamble |
||||||
|
|
||||||
|
The GNU General Public License is a free, copyleft license for |
||||||
|
software and other kinds of works. |
||||||
|
|
||||||
|
The licenses for most software and other practical works are designed |
||||||
|
to take away your freedom to share and change the works. By contrast, |
||||||
|
the GNU General Public License is intended to guarantee your freedom to |
||||||
|
share and change all versions of a program--to make sure it remains free |
||||||
|
software for all its users. We, the Free Software Foundation, use the |
||||||
|
GNU General Public License for most of our software; it applies also to |
||||||
|
any other work released this way by its authors. You can apply it to |
||||||
|
your programs, too. |
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not |
||||||
|
price. Our General Public Licenses are designed to make sure that you |
||||||
|
have the freedom to distribute copies of free software (and charge for |
||||||
|
them if you wish), that you receive source code or can get it if you |
||||||
|
want it, that you can change the software or use pieces of it in new |
||||||
|
free programs, and that you know you can do these things. |
||||||
|
|
||||||
|
To protect your rights, we need to prevent others from denying you |
||||||
|
these rights or asking you to surrender the rights. Therefore, you have |
||||||
|
certain responsibilities if you distribute copies of the software, or if |
||||||
|
you modify it: responsibilities to respect the freedom of others. |
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether |
||||||
|
gratis or for a fee, you must pass on to the recipients the same |
||||||
|
freedoms that you received. You must make sure that they, too, receive |
||||||
|
or can get the source code. And you must show them these terms so they |
||||||
|
know their rights. |
||||||
|
|
||||||
|
Developers that use the GNU GPL protect your rights with two steps: |
||||||
|
(1) assert copyright on the software, and (2) offer you this License |
||||||
|
giving you legal permission to copy, distribute and/or modify it. |
||||||
|
|
||||||
|
For the developers' and authors' protection, the GPL clearly explains |
||||||
|
that there is no warranty for this free software. For both users' and |
||||||
|
authors' sake, the GPL requires that modified versions be marked as |
||||||
|
changed, so that their problems will not be attributed erroneously to |
||||||
|
authors of previous versions. |
||||||
|
|
||||||
|
Some devices are designed to deny users access to install or run |
||||||
|
modified versions of the software inside them, although the manufacturer |
||||||
|
can do so. This is fundamentally incompatible with the aim of |
||||||
|
protecting users' freedom to change the software. The systematic |
||||||
|
pattern of such abuse occurs in the area of products for individuals to |
||||||
|
use, which is precisely where it is most unacceptable. Therefore, we |
||||||
|
have designed this version of the GPL to prohibit the practice for those |
||||||
|
products. If such problems arise substantially in other domains, we |
||||||
|
stand ready to extend this provision to those domains in future versions |
||||||
|
of the GPL, as needed to protect the freedom of users. |
||||||
|
|
||||||
|
Finally, every program is threatened constantly by software patents. |
||||||
|
States should not allow patents to restrict development and use of |
||||||
|
software on general-purpose computers, but in those that do, we wish to |
||||||
|
avoid the special danger that patents applied to a free program could |
||||||
|
make it effectively proprietary. To prevent this, the GPL assures that |
||||||
|
patents cannot be used to render the program non-free. |
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and |
||||||
|
modification follow. |
||||||
|
|
||||||
|
TERMS AND CONDITIONS |
||||||
|
|
||||||
|
0. Definitions. |
||||||
|
|
||||||
|
"This License" refers to version 3 of the GNU General Public License. |
||||||
|
|
||||||
|
"Copyright" also means copyright-like laws that apply to other kinds of |
||||||
|
works, such as semiconductor masks. |
||||||
|
|
||||||
|
"The Program" refers to any copyrightable work licensed under this |
||||||
|
License. Each licensee is addressed as "you". "Licensees" and |
||||||
|
"recipients" may be individuals or organizations. |
||||||
|
|
||||||
|
To "modify" a work means to copy from or adapt all or part of the work |
||||||
|
in a fashion requiring copyright permission, other than the making of an |
||||||
|
exact copy. The resulting work is called a "modified version" of the |
||||||
|
earlier work or a work "based on" the earlier work. |
||||||
|
|
||||||
|
A "covered work" means either the unmodified Program or a work based |
||||||
|
on the Program. |
||||||
|
|
||||||
|
To "propagate" a work means to do anything with it that, without |
||||||
|
permission, would make you directly or secondarily liable for |
||||||
|
infringement under applicable copyright law, except executing it on a |
||||||
|
computer or modifying a private copy. Propagation includes copying, |
||||||
|
distribution (with or without modification), making available to the |
||||||
|
public, and in some countries other activities as well. |
||||||
|
|
||||||
|
To "convey" a work means any kind of propagation that enables other |
||||||
|
parties to make or receive copies. Mere interaction with a user through |
||||||
|
a computer network, with no transfer of a copy, is not conveying. |
||||||
|
|
||||||
|
An interactive user interface displays "Appropriate Legal Notices" |
||||||
|
to the extent that it includes a convenient and prominently visible |
||||||
|
feature that (1) displays an appropriate copyright notice, and (2) |
||||||
|
tells the user that there is no warranty for the work (except to the |
||||||
|
extent that warranties are provided), that licensees may convey the |
||||||
|
work under this License, and how to view a copy of this License. If |
||||||
|
the interface presents a list of user commands or options, such as a |
||||||
|
menu, a prominent item in the list meets this criterion. |
||||||
|
|
||||||
|
1. Source Code. |
||||||
|
|
||||||
|
The "source code" for a work means the preferred form of the work |
||||||
|
for making modifications to it. "Object code" means any non-source |
||||||
|
form of a work. |
||||||
|
|
||||||
|
A "Standard Interface" means an interface that either is an official |
||||||
|
standard defined by a recognized standards body, or, in the case of |
||||||
|
interfaces specified for a particular programming language, one that |
||||||
|
is widely used among developers working in that language. |
||||||
|
|
||||||
|
The "System Libraries" of an executable work include anything, other |
||||||
|
than the work as a whole, that (a) is included in the normal form of |
||||||
|
packaging a Major Component, but which is not part of that Major |
||||||
|
Component, and (b) serves only to enable use of the work with that |
||||||
|
Major Component, or to implement a Standard Interface for which an |
||||||
|
implementation is available to the public in source code form. A |
||||||
|
"Major Component", in this context, means a major essential component |
||||||
|
(kernel, window system, and so on) of the specific operating system |
||||||
|
(if any) on which the executable work runs, or a compiler used to |
||||||
|
produce the work, or an object code interpreter used to run it. |
||||||
|
|
||||||
|
The "Corresponding Source" for a work in object code form means all |
||||||
|
the source code needed to generate, install, and (for an executable |
||||||
|
work) run the object code and to modify the work, including scripts to |
||||||
|
control those activities. However, it does not include the work's |
||||||
|
System Libraries, or general-purpose tools or generally available free |
||||||
|
programs which are used unmodified in performing those activities but |
||||||
|
which are not part of the work. For example, Corresponding Source |
||||||
|
includes interface definition files associated with source files for |
||||||
|
the work, and the source code for shared libraries and dynamically |
||||||
|
linked subprograms that the work is specifically designed to require, |
||||||
|
such as by intimate data communication or control flow between those |
||||||
|
subprograms and other parts of the work. |
||||||
|
|
||||||
|
The Corresponding Source need not include anything that users |
||||||
|
can regenerate automatically from other parts of the Corresponding |
||||||
|
Source. |
||||||
|
|
||||||
|
The Corresponding Source for a work in source code form is that |
||||||
|
same work. |
||||||
|
|
||||||
|
2. Basic Permissions. |
||||||
|
|
||||||
|
All rights granted under this License are granted for the term of |
||||||
|
copyright on the Program, and are irrevocable provided the stated |
||||||
|
conditions are met. This License explicitly affirms your unlimited |
||||||
|
permission to run the unmodified Program. The output from running a |
||||||
|
covered work is covered by this License only if the output, given its |
||||||
|
content, constitutes a covered work. This License acknowledges your |
||||||
|
rights of fair use or other equivalent, as provided by copyright law. |
||||||
|
|
||||||
|
You may make, run and propagate covered works that you do not |
||||||
|
convey, without conditions so long as your license otherwise remains |
||||||
|
in force. You may convey covered works to others for the sole purpose |
||||||
|
of having them make modifications exclusively for you, or provide you |
||||||
|
with facilities for running those works, provided that you comply with |
||||||
|
the terms of this License in conveying all material for which you do |
||||||
|
not control copyright. Those thus making or running the covered works |
||||||
|
for you must do so exclusively on your behalf, under your direction |
||||||
|
and control, on terms that prohibit them from making any copies of |
||||||
|
your copyrighted material outside their relationship with you. |
||||||
|
|
||||||
|
Conveying under any other circumstances is permitted solely under |
||||||
|
the conditions stated below. Sublicensing is not allowed; section 10 |
||||||
|
makes it unnecessary. |
||||||
|
|
||||||
|
3. Protecting Users' Legal Rights From Anti-Circumvention Law. |
||||||
|
|
||||||
|
No covered work shall be deemed part of an effective technological |
||||||
|
measure under any applicable law fulfilling obligations under article |
||||||
|
11 of the WIPO copyright treaty adopted on 20 December 1996, or |
||||||
|
similar laws prohibiting or restricting circumvention of such |
||||||
|
measures. |
||||||
|
|
||||||
|
When you convey a covered work, you waive any legal power to forbid |
||||||
|
circumvention of technological measures to the extent such circumvention |
||||||
|
is effected by exercising rights under this License with respect to |
||||||
|
the covered work, and you disclaim any intention to limit operation or |
||||||
|
modification of the work as a means of enforcing, against the work's |
||||||
|
users, your or third parties' legal rights to forbid circumvention of |
||||||
|
technological measures. |
||||||
|
|
||||||
|
4. Conveying Verbatim Copies. |
||||||
|
|
||||||
|
You may convey verbatim copies of the Program's source code as you |
||||||
|
receive it, in any medium, provided that you conspicuously and |
||||||
|
appropriately publish on each copy an appropriate copyright notice; |
||||||
|
keep intact all notices stating that this License and any |
||||||
|
non-permissive terms added in accord with section 7 apply to the code; |
||||||
|
keep intact all notices of the absence of any warranty; and give all |
||||||
|
recipients a copy of this License along with the Program. |
||||||
|
|
||||||
|
You may charge any price or no price for each copy that you convey, |
||||||
|
and you may offer support or warranty protection for a fee. |
||||||
|
|
||||||
|
5. Conveying Modified Source Versions. |
||||||
|
|
||||||
|
You may convey a work based on the Program, or the modifications to |
||||||
|
produce it from the Program, in the form of source code under the |
||||||
|
terms of section 4, provided that you also meet all of these conditions: |
||||||
|
|
||||||
|
a) The work must carry prominent notices stating that you modified |
||||||
|
it, and giving a relevant date. |
||||||
|
|
||||||
|
b) The work must carry prominent notices stating that it is |
||||||
|
released under this License and any conditions added under section |
||||||
|
7. This requirement modifies the requirement in section 4 to |
||||||
|
"keep intact all notices". |
||||||
|
|
||||||
|
c) You must license the entire work, as a whole, under this |
||||||
|
License to anyone who comes into possession of a copy. This |
||||||
|
License will therefore apply, along with any applicable section 7 |
||||||
|
additional terms, to the whole of the work, and all its parts, |
||||||
|
regardless of how they are packaged. This License gives no |
||||||
|
permission to license the work in any other way, but it does not |
||||||
|
invalidate such permission if you have separately received it. |
||||||
|
|
||||||
|
d) If the work has interactive user interfaces, each must display |
||||||
|
Appropriate Legal Notices; however, if the Program has interactive |
||||||
|
interfaces that do not display Appropriate Legal Notices, your |
||||||
|
work need not make them do so. |
||||||
|
|
||||||
|
A compilation of a covered work with other separate and independent |
||||||
|
works, which are not by their nature extensions of the covered work, |
||||||
|
and which are not combined with it such as to form a larger program, |
||||||
|
in or on a volume of a storage or distribution medium, is called an |
||||||
|
"aggregate" if the compilation and its resulting copyright are not |
||||||
|
used to limit the access or legal rights of the compilation's users |
||||||
|
beyond what the individual works permit. Inclusion of a covered work |
||||||
|
in an aggregate does not cause this License to apply to the other |
||||||
|
parts of the aggregate. |
||||||
|
|
||||||
|
6. Conveying Non-Source Forms. |
||||||
|
|
||||||
|
You may convey a covered work in object code form under the terms |
||||||
|
of sections 4 and 5, provided that you also convey the |
||||||
|
machine-readable Corresponding Source under the terms of this License, |
||||||
|
in one of these ways: |
||||||
|
|
||||||
|
a) Convey the object code in, or embodied in, a physical product |
||||||
|
(including a physical distribution medium), accompanied by the |
||||||
|
Corresponding Source fixed on a durable physical medium |
||||||
|
customarily used for software interchange. |
||||||
|
|
||||||
|
b) Convey the object code in, or embodied in, a physical product |
||||||
|
(including a physical distribution medium), accompanied by a |
||||||
|
written offer, valid for at least three years and valid for as |
||||||
|
long as you offer spare parts or customer support for that product |
||||||
|
model, to give anyone who possesses the object code either (1) a |
||||||
|
copy of the Corresponding Source for all the software in the |
||||||
|
product that is covered by this License, on a durable physical |
||||||
|
medium customarily used for software interchange, for a price no |
||||||
|
more than your reasonable cost of physically performing this |
||||||
|
conveying of source, or (2) access to copy the |
||||||
|
Corresponding Source from a network server at no charge. |
||||||
|
|
||||||
|
c) Convey individual copies of the object code with a copy of the |
||||||
|
written offer to provide the Corresponding Source. This |
||||||
|
alternative is allowed only occasionally and noncommercially, and |
||||||
|
only if you received the object code with such an offer, in accord |
||||||
|
with subsection 6b. |
||||||
|
|
||||||
|
d) Convey the object code by offering access from a designated |
||||||
|
place (gratis or for a charge), and offer equivalent access to the |
||||||
|
Corresponding Source in the same way through the same place at no |
||||||
|
further charge. You need not require recipients to copy the |
||||||
|
Corresponding Source along with the object code. If the place to |
||||||
|
copy the object code is a network server, the Corresponding Source |
||||||
|
may be on a different server (operated by you or a third party) |
||||||
|
that supports equivalent copying facilities, provided you maintain |
||||||
|
clear directions next to the object code saying where to find the |
||||||
|
Corresponding Source. Regardless of what server hosts the |
||||||
|
Corresponding Source, you remain obligated to ensure that it is |
||||||
|
available for as long as needed to satisfy these requirements. |
||||||
|
|
||||||
|
e) Convey the object code using peer-to-peer transmission, provided |
||||||
|
you inform other peers where the object code and Corresponding |
||||||
|
Source of the work are being offered to the general public at no |
||||||
|
charge under subsection 6d. |
||||||
|
|
||||||
|
A separable portion of the object code, whose source code is excluded |
||||||
|
from the Corresponding Source as a System Library, need not be |
||||||
|
included in conveying the object code work. |
||||||
|
|
||||||
|
A "User Product" is either (1) a "consumer product", which means any |
||||||
|
tangible personal property which is normally used for personal, family, |
||||||
|
or household purposes, or (2) anything designed or sold for incorporation |
||||||
|
into a dwelling. In determining whether a product is a consumer product, |
||||||
|
doubtful cases shall be resolved in favor of coverage. For a particular |
||||||
|
product received by a particular user, "normally used" refers to a |
||||||
|
typical or common use of that class of product, regardless of the status |
||||||
|
of the particular user or of the way in which the particular user |
||||||
|
actually uses, or expects or is expected to use, the product. A product |
||||||
|
is a consumer product regardless of whether the product has substantial |
||||||
|
commercial, industrial or non-consumer uses, unless such uses represent |
||||||
|
the only significant mode of use of the product. |
||||||
|
|
||||||
|
"Installation Information" for a User Product means any methods, |
||||||
|
procedures, authorization keys, or other information required to install |
||||||
|
and execute modified versions of a covered work in that User Product from |
||||||
|
a modified version of its Corresponding Source. The information must |
||||||
|
suffice to ensure that the continued functioning of the modified object |
||||||
|
code is in no case prevented or interfered with solely because |
||||||
|
modification has been made. |
||||||
|
|
||||||
|
If you convey an object code work under this section in, or with, or |
||||||
|
specifically for use in, a User Product, and the conveying occurs as |
||||||
|
part of a transaction in which the right of possession and use of the |
||||||
|
User Product is transferred to the recipient in perpetuity or for a |
||||||
|
fixed term (regardless of how the transaction is characterized), the |
||||||
|
Corresponding Source conveyed under this section must be accompanied |
||||||
|
by the Installation Information. But this requirement does not apply |
||||||
|
if neither you nor any third party retains the ability to install |
||||||
|
modified object code on the User Product (for example, the work has |
||||||
|
been installed in ROM). |
||||||
|
|
||||||
|
The requirement to provide Installation Information does not include a |
||||||
|
requirement to continue to provide support service, warranty, or updates |
||||||
|
for a work that has been modified or installed by the recipient, or for |
||||||
|
the User Product in which it has been modified or installed. Access to a |
||||||
|
network may be denied when the modification itself materially and |
||||||
|
adversely affects the operation of the network or violates the rules and |
||||||
|
protocols for communication across the network. |
||||||
|
|
||||||
|
Corresponding Source conveyed, and Installation Information provided, |
||||||
|
in accord with this section must be in a format that is publicly |
||||||
|
documented (and with an implementation available to the public in |
||||||
|
source code form), and must require no special password or key for |
||||||
|
unpacking, reading or copying. |
||||||
|
|
||||||
|
7. Additional Terms. |
||||||
|
|
||||||
|
"Additional permissions" are terms that supplement the terms of this |
||||||
|
License by making exceptions from one or more of its conditions. |
||||||
|
Additional permissions that are applicable to the entire Program shall |
||||||
|
be treated as though they were included in this License, to the extent |
||||||
|
that they are valid under applicable law. If additional permissions |
||||||
|
apply only to part of the Program, that part may be used separately |
||||||
|
under those permissions, but the entire Program remains governed by |
||||||
|
this License without regard to the additional permissions. |
||||||
|
|
||||||
|
When you convey a copy of a covered work, you may at your option |
||||||
|
remove any additional permissions from that copy, or from any part of |
||||||
|
it. (Additional permissions may be written to require their own |
||||||
|
removal in certain cases when you modify the work.) You may place |
||||||
|
additional permissions on material, added by you to a covered work, |
||||||
|
for which you have or can give appropriate copyright permission. |
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, for material you |
||||||
|
add to a covered work, you may (if authorized by the copyright holders of |
||||||
|
that material) supplement the terms of this License with terms: |
||||||
|
|
||||||
|
a) Disclaiming warranty or limiting liability differently from the |
||||||
|
terms of sections 15 and 16 of this License; or |
||||||
|
|
||||||
|
b) Requiring preservation of specified reasonable legal notices or |
||||||
|
author attributions in that material or in the Appropriate Legal |
||||||
|
Notices displayed by works containing it; or |
||||||
|
|
||||||
|
c) Prohibiting misrepresentation of the origin of that material, or |
||||||
|
requiring that modified versions of such material be marked in |
||||||
|
reasonable ways as different from the original version; or |
||||||
|
|
||||||
|
d) Limiting the use for publicity purposes of names of licensors or |
||||||
|
authors of the material; or |
||||||
|
|
||||||
|
e) Declining to grant rights under trademark law for use of some |
||||||
|
trade names, trademarks, or service marks; or |
||||||
|
|
||||||
|
f) Requiring indemnification of licensors and authors of that |
||||||
|
material by anyone who conveys the material (or modified versions of |
||||||
|
it) with contractual assumptions of liability to the recipient, for |
||||||
|
any liability that these contractual assumptions directly impose on |
||||||
|
those licensors and authors. |
||||||
|
|
||||||
|
All other non-permissive additional terms are considered "further |
||||||
|
restrictions" within the meaning of section 10. If the Program as you |
||||||
|
received it, or any part of it, contains a notice stating that it is |
||||||
|
governed by this License along with a term that is a further |
||||||
|
restriction, you may remove that term. If a license document contains |
||||||
|
a further restriction but permits relicensing or conveying under this |
||||||
|
License, you may add to a covered work material governed by the terms |
||||||
|
of that license document, provided that the further restriction does |
||||||
|
not survive such relicensing or conveying. |
||||||
|
|
||||||
|
If you add terms to a covered work in accord with this section, you |
||||||
|
must place, in the relevant source files, a statement of the |
||||||
|
additional terms that apply to those files, or a notice indicating |
||||||
|
where to find the applicable terms. |
||||||
|
|
||||||
|
Additional terms, permissive or non-permissive, may be stated in the |
||||||
|
form of a separately written license, or stated as exceptions; |
||||||
|
the above requirements apply either way. |
||||||
|
|
||||||
|
8. Termination. |
||||||
|
|
||||||
|
You may not propagate or modify a covered work except as expressly |
||||||
|
provided under this License. Any attempt otherwise to propagate or |
||||||
|
modify it is void, and will automatically terminate your rights under |
||||||
|
this License (including any patent licenses granted under the third |
||||||
|
paragraph of section 11). |
||||||
|
|
||||||
|
However, if you cease all violation of this License, then your |
||||||
|
license from a particular copyright holder is reinstated (a) |
||||||
|
provisionally, unless and until the copyright holder explicitly and |
||||||
|
finally terminates your license, and (b) permanently, if the copyright |
||||||
|
holder fails to notify you of the violation by some reasonable means |
||||||
|
prior to 60 days after the cessation. |
||||||
|
|
||||||
|
Moreover, your license from a particular copyright holder is |
||||||
|
reinstated permanently if the copyright holder notifies you of the |
||||||
|
violation by some reasonable means, this is the first time you have |
||||||
|
received notice of violation of this License (for any work) from that |
||||||
|
copyright holder, and you cure the violation prior to 30 days after |
||||||
|
your receipt of the notice. |
||||||
|
|
||||||
|
Termination of your rights under this section does not terminate the |
||||||
|
licenses of parties who have received copies or rights from you under |
||||||
|
this License. If your rights have been terminated and not permanently |
||||||
|
reinstated, you do not qualify to receive new licenses for the same |
||||||
|
material under section 10. |
||||||
|
|
||||||
|
9. Acceptance Not Required for Having Copies. |
||||||
|
|
||||||
|
You are not required to accept this License in order to receive or |
||||||
|
run a copy of the Program. Ancillary propagation of a covered work |
||||||
|
occurring solely as a consequence of using peer-to-peer transmission |
||||||
|
to receive a copy likewise does not require acceptance. However, |
||||||
|
nothing other than this License grants you permission to propagate or |
||||||
|
modify any covered work. These actions infringe copyright if you do |
||||||
|
not accept this License. Therefore, by modifying or propagating a |
||||||
|
covered work, you indicate your acceptance of this License to do so. |
||||||
|
|
||||||
|
10. Automatic Licensing of Downstream Recipients. |
||||||
|
|
||||||
|
Each time you convey a covered work, the recipient automatically |
||||||
|
receives a license from the original licensors, to run, modify and |
||||||
|
propagate that work, subject to this License. You are not responsible |
||||||
|
for enforcing compliance by third parties with this License. |
||||||
|
|
||||||
|
An "entity transaction" is a transaction transferring control of an |
||||||
|
organization, or substantially all assets of one, or subdividing an |
||||||
|
organization, or merging organizations. If propagation of a covered |
||||||
|
work results from an entity transaction, each party to that |
||||||
|
transaction who receives a copy of the work also receives whatever |
||||||
|
licenses to the work the party's predecessor in interest had or could |
||||||
|
give under the previous paragraph, plus a right to possession of the |
||||||
|
Corresponding Source of the work from the predecessor in interest, if |
||||||
|
the predecessor has it or can get it with reasonable efforts. |
||||||
|
|
||||||
|
You may not impose any further restrictions on the exercise of the |
||||||
|
rights granted or affirmed under this License. For example, you may |
||||||
|
not impose a license fee, royalty, or other charge for exercise of |
||||||
|
rights granted under this License, and you may not initiate litigation |
||||||
|
(including a cross-claim or counterclaim in a lawsuit) alleging that |
||||||
|
any patent claim is infringed by making, using, selling, offering for |
||||||
|
sale, or importing the Program or any portion of it. |
||||||
|
|
||||||
|
11. Patents. |
||||||
|
|
||||||
|
A "contributor" is a copyright holder who authorizes use under this |
||||||
|
License of the Program or a work on which the Program is based. The |
||||||
|
work thus licensed is called the contributor's "contributor version". |
||||||
|
|
||||||
|
A contributor's "essential patent claims" are all patent claims |
||||||
|
owned or controlled by the contributor, whether already acquired or |
||||||
|
hereafter acquired, that would be infringed by some manner, permitted |
||||||
|
by this License, of making, using, or selling its contributor version, |
||||||
|
but do not include claims that would be infringed only as a |
||||||
|
consequence of further modification of the contributor version. For |
||||||
|
purposes of this definition, "control" includes the right to grant |
||||||
|
patent sublicenses in a manner consistent with the requirements of |
||||||
|
this License. |
||||||
|
|
||||||
|
Each contributor grants you a non-exclusive, worldwide, royalty-free |
||||||
|
patent license under the contributor's essential patent claims, to |
||||||
|
make, use, sell, offer for sale, import and otherwise run, modify and |
||||||
|
propagate the contents of its contributor version. |
||||||
|
|
||||||
|
In the following three paragraphs, a "patent license" is any express |
||||||
|
agreement or commitment, however denominated, not to enforce a patent |
||||||
|
(such as an express permission to practice a patent or covenant not to |
||||||
|
sue for patent infringement). To "grant" such a patent license to a |
||||||
|
party means to make such an agreement or commitment not to enforce a |
||||||
|
patent against the party. |
||||||
|
|
||||||
|
If you convey a covered work, knowingly relying on a patent license, |
||||||
|
and the Corresponding Source of the work is not available for anyone |
||||||
|
to copy, free of charge and under the terms of this License, through a |
||||||
|
publicly available network server or other readily accessible means, |
||||||
|
then you must either (1) cause the Corresponding Source to be so |
||||||
|
available, or (2) arrange to deprive yourself of the benefit of the |
||||||
|
patent license for this particular work, or (3) arrange, in a manner |
||||||
|
consistent with the requirements of this License, to extend the patent |
||||||
|
license to downstream recipients. "Knowingly relying" means you have |
||||||
|
actual knowledge that, but for the patent license, your conveying the |
||||||
|
covered work in a country, or your recipient's use of the covered work |
||||||
|
in a country, would infringe one or more identifiable patents in that |
||||||
|
country that you have reason to believe are valid. |
||||||
|
|
||||||
|
If, pursuant to or in connection with a single transaction or |
||||||
|
arrangement, you convey, or propagate by procuring conveyance of, a |
||||||
|
covered work, and grant a patent license to some of the parties |
||||||
|
receiving the covered work authorizing them to use, propagate, modify |
||||||
|
or convey a specific copy of the covered work, then the patent license |
||||||
|
you grant is automatically extended to all recipients of the covered |
||||||
|
work and works based on it. |
||||||
|
|
||||||
|
A patent license is "discriminatory" if it does not include within |
||||||
|
the scope of its coverage, prohibits the exercise of, or is |
||||||
|
conditioned on the non-exercise of one or more of the rights that are |
||||||
|
specifically granted under this License. You may not convey a covered |
||||||
|
work if you are a party to an arrangement with a third party that is |
||||||
|
in the business of distributing software, under which you make payment |
||||||
|
to the third party based on the extent of your activity of conveying |
||||||
|
the work, and under which the third party grants, to any of the |
||||||
|
parties who would receive the covered work from you, a discriminatory |
||||||
|
patent license (a) in connection with copies of the covered work |
||||||
|
conveyed by you (or copies made from those copies), or (b) primarily |
||||||
|
for and in connection with specific products or compilations that |
||||||
|
contain the covered work, unless you entered into that arrangement, |
||||||
|
or that patent license was granted, prior to 28 March 2007. |
||||||
|
|
||||||
|
Nothing in this License shall be construed as excluding or limiting |
||||||
|
any implied license or other defenses to infringement that may |
||||||
|
otherwise be available to you under applicable patent law. |
||||||
|
|
||||||
|
12. No Surrender of Others' Freedom. |
||||||
|
|
||||||
|
If conditions are imposed on you (whether by court order, agreement or |
||||||
|
otherwise) that contradict the conditions of this License, they do not |
||||||
|
excuse you from the conditions of this License. If you cannot convey a |
||||||
|
covered work so as to satisfy simultaneously your obligations under this |
||||||
|
License and any other pertinent obligations, then as a consequence you may |
||||||
|
not convey it at all. For example, if you agree to terms that obligate you |
||||||
|
to collect a royalty for further conveying from those to whom you convey |
||||||
|
the Program, the only way you could satisfy both those terms and this |
||||||
|
License would be to refrain entirely from conveying the Program. |
||||||
|
|
||||||
|
13. Use with the GNU Affero General Public License. |
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, you have |
||||||
|
permission to link or combine any covered work with a work licensed |
||||||
|
under version 3 of the GNU Affero General Public License into a single |
||||||
|
combined work, and to convey the resulting work. The terms of this |
||||||
|
License will continue to apply to the part which is the covered work, |
||||||
|
but the special requirements of the GNU Affero General Public License, |
||||||
|
section 13, concerning interaction through a network will apply to the |
||||||
|
combination as such. |
||||||
|
|
||||||
|
14. Revised Versions of this License. |
||||||
|
|
||||||
|
The Free Software Foundation may publish revised and/or new versions of |
||||||
|
the GNU General Public License from time to time. Such new versions will |
||||||
|
be similar in spirit to the present version, but may differ in detail to |
||||||
|
address new problems or concerns. |
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the |
||||||
|
Program specifies that a certain numbered version of the GNU General |
||||||
|
Public License "or any later version" applies to it, you have the |
||||||
|
option of following the terms and conditions either of that numbered |
||||||
|
version or of any later version published by the Free Software |
||||||
|
Foundation. If the Program does not specify a version number of the |
||||||
|
GNU General Public License, you may choose any version ever published |
||||||
|
by the Free Software Foundation. |
||||||
|
|
||||||
|
If the Program specifies that a proxy can decide which future |
||||||
|
versions of the GNU General Public License can be used, that proxy's |
||||||
|
public statement of acceptance of a version permanently authorizes you |
||||||
|
to choose that version for the Program. |
||||||
|
|
||||||
|
Later license versions may give you additional or different |
||||||
|
permissions. However, no additional obligations are imposed on any |
||||||
|
author or copyright holder as a result of your choosing to follow a |
||||||
|
later version. |
||||||
|
|
||||||
|
15. Disclaimer of Warranty. |
||||||
|
|
||||||
|
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY |
||||||
|
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT |
||||||
|
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY |
||||||
|
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, |
||||||
|
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
||||||
|
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM |
||||||
|
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF |
||||||
|
ALL NECESSARY SERVICING, REPAIR OR CORRECTION. |
||||||
|
|
||||||
|
16. Limitation of Liability. |
||||||
|
|
||||||
|
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS |
||||||
|
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY |
||||||
|
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE |
||||||
|
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF |
||||||
|
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD |
||||||
|
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), |
||||||
|
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF |
||||||
|
SUCH DAMAGES. |
||||||
|
|
||||||
|
17. Interpretation of Sections 15 and 16. |
||||||
|
|
||||||
|
If the disclaimer of warranty and limitation of liability provided |
||||||
|
above cannot be given local legal effect according to their terms, |
||||||
|
reviewing courts shall apply local law that most closely approximates |
||||||
|
an absolute waiver of all civil liability in connection with the |
||||||
|
Program, unless a warranty or assumption of liability accompanies a |
||||||
|
copy of the Program in return for a fee. |
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS |
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs |
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest |
||||||
|
possible use to the public, the best way to achieve this is to make it |
||||||
|
free software which everyone can redistribute and change under these terms. |
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest |
||||||
|
to attach them to the start of each source file to most effectively |
||||||
|
state the exclusion of warranty; and each file should have at least |
||||||
|
the "copyright" line and a pointer to where the full notice is found. |
||||||
|
|
||||||
|
{one line to give the program's name and a brief idea of what it does.} |
||||||
|
Copyright (C) {year} {name of author} |
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify |
||||||
|
it under the terms of the GNU General Public License as published by |
||||||
|
the Free Software Foundation, either version 3 of the License, or |
||||||
|
(at your option) any later version. |
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, |
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
GNU General Public License for more details. |
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License |
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail. |
||||||
|
|
||||||
|
If the program does terminal interaction, make it output a short |
||||||
|
notice like this when it starts in an interactive mode: |
||||||
|
|
||||||
|
{project} Copyright (C) {year} {fullname} |
||||||
|
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
||||||
|
This is free software, and you are welcome to redistribute it |
||||||
|
under certain conditions; type `show c' for details. |
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate |
||||||
|
parts of the General Public License. Of course, your program's commands |
||||||
|
might be different; for a GUI interface, you would use an "about box". |
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or school, |
||||||
|
if any, to sign a "copyright disclaimer" for the program, if necessary. |
||||||
|
For more information on this, and how to apply and follow the GNU GPL, see |
||||||
|
<http://www.gnu.org/licenses/>. |
||||||
|
|
||||||
|
The GNU General Public License does not permit incorporating your program |
||||||
|
into proprietary programs. If your program is a subroutine library, you |
||||||
|
may consider it more useful to permit linking proprietary applications with |
||||||
|
the library. If this is what you want to do, use the GNU Lesser General |
||||||
|
Public License instead of this License. But first, please read |
||||||
|
<http://www.gnu.org/philosophy/why-not-lgpl.html>. |
||||||
|
|
@ -0,0 +1,378 @@ |
|||||||
|
# AVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al.
|
||||||
|
# Modified (bringing often-changed options to the top) by Elliot Williams
|
||||||
|
|
||||||
|
# make all = Make software and program
|
||||||
|
# make clean = Clean out built project files.
|
||||||
|
# make program = Download the hex file to the device, using avrdude. Please
|
||||||
|
# customize the avrdude settings below first!
|
||||||
|
|
||||||
|
# Microcontroller Type
|
||||||
|
#MCU = atmega1284p
|
||||||
|
#MCU = atmega644p
|
||||||
|
MCU = atmega328p
|
||||||
|
|
||||||
|
# Target file name (without extension).
|
||||||
|
TARGET = images/MicroModemGP
|
||||||
|
|
||||||
|
# Programming hardware: type avrdude -c ?
|
||||||
|
# to get a full listing.
|
||||||
|
AVRDUDE_PROGRAMMER = arduino
|
||||||
|
|
||||||
|
AVRDUDE_PORT = /dev/usb # not really needed for usb
|
||||||
|
#AVRDUDE_PORT = /dev/parport0 # linux
|
||||||
|
# AVRDUDE_PORT = lpt1 # windows
|
||||||
|
|
||||||
|
############# Don't need to change below here for most purposes (Elliot)
|
||||||
|
|
||||||
|
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
|
||||||
|
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
|
||||||
|
OPT = s
|
||||||
|
|
||||||
|
# Output format. (can be srec, ihex, binary)
|
||||||
|
FORMAT = ihex
|
||||||
|
|
||||||
|
# List C source files here. (C dependencies are automatically generated.)
|
||||||
|
#SRC = $(TARGET).c
|
||||||
|
SRC = main.c hardware/Serial.c hardware/AFSK.c util/CRC-CCIT.c protocol/LLP.c protocol/KISS.c
|
||||||
|
|
||||||
|
# If there is more than one source file, append them above, or modify and
|
||||||
|
# uncomment the following:
|
||||||
|
#SRC += foo.c bar.c
|
||||||
|
|
||||||
|
# You can also wrap lines by appending a backslash to the end of the line:
|
||||||
|
#SRC += baz.c \
|
||||||
|
#xyzzy.c
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# List Assembler source files here.
|
||||||
|
# Make them always end in a capital .S. Files ending in a lowercase .s
|
||||||
|
# will not be considered source files but generated files (assembler
|
||||||
|
# output from the compiler), and will be deleted upon "make clean"!
|
||||||
|
# Even though the DOS/Win* filesystem matches both .s and .S the same,
|
||||||
|
# it will preserve the spelling of the filenames, and gcc itself does
|
||||||
|
# care about how the name is spelled on its command-line.
|
||||||
|
ASRC =
|
||||||
|
|
||||||
|
|
||||||
|
# List any extra directories to look for include files here.
|
||||||
|
# Each directory must be seperated by a space.
|
||||||
|
EXTRAINCDIRS =
|
||||||
|
|
||||||
|
|
||||||
|
# Optional compiler flags.
|
||||||
|
# -g: generate debugging information (for GDB, or for COFF conversion)
|
||||||
|
# -O*: optimization level
|
||||||
|
# -f...: tuning, see gcc manual and avr-libc documentation
|
||||||
|
# -Wall...: warning level
|
||||||
|
# -Wa,...: tell GCC to pass this to the assembler.
|
||||||
|
# -ahlms: create assembler listing
|
||||||
|
CFLAGS = -g -O$(OPT) \
|
||||||
|
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \ |
||||||
|
-Wall -Wstrict-prototypes \ |
||||||
|
-Wa,-adhlns=$(<:.c=.lst) \
|
||||||
|
$(patsubst %,-I%,$(EXTRAINCDIRS)) |
||||||
|
|
||||||
|
|
||||||
|
# Set a "language standard" compiler flag.
|
||||||
|
# Unremark just one line below to set the language standard to use.
|
||||||
|
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
|
||||||
|
#CFLAGS += -std=c89
|
||||||
|
#CFLAGS += -std=gnu89
|
||||||
|
#CFLAGS += -std=c99
|
||||||
|
CFLAGS += -std=gnu99
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Optional assembler flags.
|
||||||
|
# -Wa,...: tell GCC to pass this to the assembler.
|
||||||
|
# -ahlms: create listing
|
||||||
|
# -gstabs: have the assembler create line number information; note that
|
||||||
|
# for use in COFF files, additional information about filenames
|
||||||
|
# and function names needs to be present in the assembler source
|
||||||
|
# files -- see avr-libc docs [FIXME: not yet described there]
|
||||||
|
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Optional linker flags.
|
||||||
|
# -Wl,...: tell GCC to pass this to linker.
|
||||||
|
# -Map: create map file
|
||||||
|
# --cref: add cross reference to map file
|
||||||
|
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Additional libraries
|
||||||
|
|
||||||
|
# Minimalistic printf version
|
||||||
|
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
|
||||||
|
|
||||||
|
# Floating point printf version (requires -lm below)
|
||||||
|
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
|
||||||
|
|
||||||
|
# -lm = math library
|
||||||
|
LDFLAGS += -lm
|
||||||
|
|
||||||
|
|
||||||
|
# Programming support using avrdude. Settings and variables.
|
||||||
|
|
||||||
|
|
||||||
|
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
|
||||||
|
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
|
||||||
|
|
||||||
|
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
|
||||||
|
|
||||||
|
# Uncomment the following if you want avrdude's erase cycle counter.
|
||||||
|
# Note that this counter needs to be initialized first using -Yn,
|
||||||
|
# see avrdude manual.
|
||||||
|
#AVRDUDE_ERASE += -y
|
||||||
|
|
||||||
|
# Uncomment the following if you do /not/ wish a verification to be
|
||||||
|
# performed after programming the device.
|
||||||
|
#AVRDUDE_FLAGS += -V
|
||||||
|
|
||||||
|
# Increase verbosity level. Please use this when submitting bug
|
||||||
|
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
|
||||||
|
# to submit bug reports.
|
||||||
|
#AVRDUDE_FLAGS += -v -v
|
||||||
|
|
||||||
|
#Run while cable attached or don't
|
||||||
|
AVRDUDE_FLAGS += -E reset #keep chip disabled while cable attached
|
||||||
|
#AVRDUDE_FLAGS += -E noreset
|
||||||
|
|
||||||
|
#AVRDUDE_WRITE_FLASH = -U lfuse:w:0x04:m #run with 8 Mhz clock
|
||||||
|
|
||||||
|
#AVRDUDE_WRITE_FLASH = -U lfuse:w:0x21:m #run with 1 Mhz clock #default clock mode
|
||||||
|
|
||||||
|
#AVRDUDE_WRITE_FLASH = -U lfuse:w:0x01:m #run with 1 Mhz clock no start up time
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Define programs and commands.
|
||||||
|
SHELL = sh
|
||||||
|
|
||||||
|
CC = avr-gcc
|
||||||
|
|
||||||
|
OBJCOPY = avr-objcopy
|
||||||
|
OBJDUMP = avr-objdump
|
||||||
|
SIZE = avr-size
|
||||||
|
|
||||||
|
|
||||||
|
# Programming support using avrdude.
|
||||||
|
AVRDUDE = avrdude
|
||||||
|
|
||||||
|
|
||||||
|
REMOVE = rm -f
|
||||||
|
COPY = cp
|
||||||
|
|
||||||
|
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
|
||||||
|
ELFSIZE = $(SIZE) --mcu=$(MCU) -C $(TARGET).elf
|
||||||
|
|
||||||
|
|
||||||
|
# Define Messages
|
||||||
|
# English
|
||||||
|
MSG_ERRORS_NONE = Firmware compiled successfully!
|
||||||
|
MSG_BEGIN = Starting build...
|
||||||
|
MSG_END = -------- Done --------
|
||||||
|
MSG_SIZE_BEFORE = Size before:
|
||||||
|
MSG_SIZE_AFTER = Size after:
|
||||||
|
MSG_COFF = Converting to AVR COFF:
|
||||||
|
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
|
||||||
|
MSG_FLASH = Creating load file for Flash:
|
||||||
|
MSG_EEPROM = Creating load file for EEPROM:
|
||||||
|
MSG_EXTENDED_LISTING = Creating Extended Listing:
|
||||||
|
MSG_SYMBOL_TABLE = Creating Symbol Table:
|
||||||
|
MSG_LINKING = Linking:
|
||||||
|
MSG_COMPILING = Compiling:
|
||||||
|
MSG_ASSEMBLING = Assembling:
|
||||||
|
MSG_CLEANING = Cleaning project:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Define all object files.
|
||||||
|
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
|
||||||
|
|
||||||
|
# Define all listing files.
|
||||||
|
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
|
||||||
|
|
||||||
|
# Combine all necessary flags and optional flags.
|
||||||
|
# Add target processor to flags.
|
||||||
|
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
|
||||||
|
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Default target: make program!
|
||||||
|
#all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
|
||||||
|
# $(TARGET).lss $(TARGET).sym sizeafter finished end
|
||||||
|
|
||||||
|
all: begin $(TARGET).elf $(TARGET).hex $(TARGET).eep \
|
||||||
|
$(TARGET).lss $(TARGET).sym cleanup sizeafter finished
|
||||||
|
# $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
|
||||||
|
|
||||||
|
# Eye candy.
|
||||||
|
# AVR Studio 3.x does not check make's exit code but relies on
|
||||||
|
# the following magic strings to be generated by the compile job.
|
||||||
|
begin: |
||||||
|
@echo
|
||||||
|
@echo $(MSG_BEGIN)
|
||||||
|
|
||||||
|
finished: |
||||||
|
@echo $(MSG_ERRORS_NONE)
|
||||||
|
|
||||||
|
end: |
||||||
|
@echo $(MSG_END)
|
||||||
|
@echo
|
||||||
|
|
||||||
|
|
||||||
|
# Display size of file.
|
||||||
|
sizebefore: |
||||||
|
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
|
||||||
|
|
||||||
|
sizeafter: |
||||||
|
@if [ -f $(TARGET).elf ]; then echo; $(ELFSIZE); echo; fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Display compiler version information.
|
||||||
|
gccversion : |
||||||
|
@$(CC) --version
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Convert ELF to COFF for use in debugging / simulating in
|
||||||
|
# AVR Studio or VMLAB.
|
||||||
|
COFFCONVERT=$(OBJCOPY) --debugging \
|
||||||
|
--change-section-address .data-0x800000 \
|
||||||
|
--change-section-address .bss-0x800000 \
|
||||||
|
--change-section-address .noinit-0x800000 \
|
||||||
|
--change-section-address .eeprom-0x810000
|
||||||
|
|
||||||
|
|
||||||
|
coff: $(TARGET).elf |
||||||
|
# @echo
|
||||||
|
# @echo $(MSG_COFF) $(TARGET).cof
|
||||||
|
@$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
|
||||||
|
|
||||||
|
|
||||||
|
extcoff: $(TARGET).elf |
||||||
|
# @echo
|
||||||
|
# @echo $(MSG_EXTENDED_COFF) $(TARGET).cof
|
||||||
|
@$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Program the device.
|
||||||
|
program: $(TARGET).hex $(TARGET).eep |
||||||
|
@$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Create final output files (.hex, .eep) from ELF output file.
|
||||||
|
%.hex: %.elf |
||||||
|
# @echo
|
||||||
|
# @echo $(MSG_FLASH) $@
|
||||||
|
@$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
|
||||||
|
|
||||||
|
%.eep: %.elf |
||||||
|
# @echo
|
||||||
|
# @echo $(MSG_EEPROM) $@
|
||||||
|
# @echo Not generating any EEPROM images
|
||||||
|
@-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
|
||||||
|
|
||||||
|
# Create extended listing file from ELF output file.
|
||||||
|
%.lss: %.elf |
||||||
|
# @echo
|
||||||
|
# @echo $(MSG_EXTENDED_LISTING) $@
|
||||||
|
@$(OBJDUMP) -h -S $< > $@
|
||||||
|
|
||||||
|
# Create a symbol table from ELF output file.
|
||||||
|
%.sym: %.elf |
||||||
|
# @echo
|
||||||
|
# @echo $(MSG_SYMBOL_TABLE) $@
|
||||||
|
@avr-nm -n $< > $@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Link: create ELF output file from object files.
|
||||||
|
.SECONDARY : $(TARGET).elf |
||||||
|
.PRECIOUS : $(OBJ) |
||||||
|
%.elf: $(OBJ) |
||||||
|
@echo $(MSG_LINKING) $@
|
||||||
|
@$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
|
||||||
|
|
||||||
|
|
||||||
|
# Compile: create object files from C source files.
|
||||||
|
%.o : %.c |
||||||
|
@echo $(MSG_COMPILING) $<
|
||||||
|
@$(CC) -c $(ALL_CFLAGS) $< -o $@
|
||||||
|
|
||||||
|
|
||||||
|
# Compile: create assembler files from C source files.
|
||||||
|
%.s : %.c |
||||||
|
@$(CC) -S $(ALL_CFLAGS) $< -o $@
|
||||||
|
|
||||||
|
|
||||||
|
# Assemble: create object files from assembler source files.
|
||||||
|
%.o : %.S |
||||||
|
@echo
|
||||||
|
@echo $(MSG_ASSEMBLING) $<
|
||||||
|
@$(CC) -c $(ALL_ASFLAGS) $< -o $@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Target: clean project.
|
||||||
|
clean: clean_list finished |
||||||
|
|
||||||
|
clean_list : |
||||||
|
@echo
|
||||||
|
@echo $(MSG_CLEANING)
|
||||||
|
$(REMOVE) $(TARGET).hex
|
||||||
|
$(REMOVE) $(TARGET).eep
|
||||||
|
$(REMOVE) $(TARGET).obj
|
||||||
|
$(REMOVE) $(TARGET).cof
|
||||||
|
$(REMOVE) $(TARGET).elf
|
||||||
|
$(REMOVE) $(TARGET).map
|
||||||
|
$(REMOVE) $(TARGET).obj
|
||||||
|
$(REMOVE) $(TARGET).a90
|
||||||
|
$(REMOVE) $(TARGET).sym
|
||||||
|
$(REMOVE) $(TARGET).lnk
|
||||||
|
$(REMOVE) $(TARGET).lss
|
||||||
|
$(REMOVE) $(OBJ)
|
||||||
|
$(REMOVE) $(LST)
|
||||||
|
$(REMOVE) $(SRC:.c=.s)
|
||||||
|
$(REMOVE) $(SRC:.c=.d)
|
||||||
|
$(REMOVE) *~
|
||||||
|
|
||||||
|
cleanup: |
||||||
|
@$(REMOVE) $(SRC:.c=.s)
|
||||||
|
@$(REMOVE) $(SRC:.c=.d)
|
||||||
|
@$(REMOVE) $(LST)
|
||||||
|
|
||||||
|
# Automatically generate C source code dependencies.
|
||||||
|
# (Code originally taken from the GNU make user manual and modified
|
||||||
|
# (See README.txt Credits).)
|
||||||
|
#
|
||||||
|
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
|
||||||
|
# (see the SHELL variable defined above).
|
||||||
|
# This may not work with other shells or other seds.
|
||||||
|
#
|
||||||
|
%.d: %.c |
||||||
|
@set -e; $(CC) -MM $(ALL_CFLAGS) $< \
|
||||||
|
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
|
||||||
|
[ -s $@ ] || rm -f $@
|
||||||
|
|
||||||
|
|
||||||
|
# Remove the '-' if you want to see the dependency files generated.
|
||||||
|
-include $(SRC:.c=.d) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Listing of phony targets.
|
||||||
|
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
|
||||||
|
clean clean_list program
|
@ -0,0 +1,39 @@ |
|||||||
|
MicroModemGP |
||||||
|
========== |
||||||
|
|
||||||
|
MicroModemGP is a general purpose firmware for [MicroModem](http://unsigned.io/micromodem). |
||||||
|
|
||||||
|
It supports both KISS mode serial connections, and direct serial connection without framing for easy communication with anything with a serial port. |
||||||
|
|
||||||
|
You can buy a complete modem from [my shop](http://unsigned.io/shop), or you can build one yourself pretty easily. Take a look at the documentation in the [MicroModem](https://github.com/markqvist/MicroModem) repository for information and getting started guides! |
||||||
|
|
||||||
|
## Some features |
||||||
|
|
||||||
|
- Easily send and receive packets over mostly any radio |
||||||
|
- Full modulation and demodulation in software |
||||||
|
- Flexibility in how received packets are output over serial connection |
||||||
|
- Can run with open squelch |
||||||
|
- Supports KISS mode for use with programs on a host computer |
||||||
|
- 12,8 Hamming-code forward error correction and 12-byte interleaving |
||||||
|
- CRC checksum on packets ensure data integrity |
||||||
|
- Supports packets with up to 564 bytes of data |
||||||
|
|
||||||
|
## Serial connection settings |
||||||
|
|
||||||
|
By default, the modem uses __9600 baud, 8N1__ serial. The baudrate can be modified in the "device.h" file. |
||||||
|
|
||||||
|
## KISS mode or direct serial framing |
||||||
|
|
||||||
|
You can configure whether to use KISS serial framing or direct serial framing in the "config.h" file. |
||||||
|
|
||||||
|
When the modem is running in KISS mode, there's really not much more to it than connecting the modem to a computer, opening whatever program you want to use with it, and off you go. |
||||||
|
|
||||||
|
You can also configure the modem in direct serial framing mode. If using direct serial framing, the firmware uses time-sensitive input, which means that it will buffer serial data as it comes in, and when it has received no data for a few milliseconds, it will start sending whatever it has received. |
||||||
|
|
||||||
|
If you're manually typing things to the modem from a terminal, you should therefore set your serial terminal program to not send data for every keystroke, but only on new-line, or pressing send or whatever. You can also compile the firmware for KISS mode serial connection, if you have a host program using KISS. If you are using MicroModemGP with [Reticulum](https://github.com/markqvist/Reticulum), use KISS. |
||||||
|
|
||||||
|
## Other notes |
||||||
|
|
||||||
|
The project has been implemented in your normal C with makefile style, and uses AVR Libc. The firmware is compatible with Arduino-based products, although it was not written in the Arduino IDE. |
||||||
|
|
||||||
|
Visit [my site](http://unsigned.io) for questions, comments and other details. |
@ -0,0 +1,9 @@ |
|||||||
|
#ifndef CONFIG_H |
||||||
|
#define CONFIG_H |
||||||
|
|
||||||
|
// Choose whether to use KISS or direct
|
||||||
|
// framing for serial data
|
||||||
|
#define SERIAL_FRAMING SERIAL_FRAMING_KISS |
||||||
|
//#define SERIAL_FRAMING SERIAL_FRAMING_DIRECT
|
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,40 @@ |
|||||||
|
#include "util/constants.h" |
||||||
|
|
||||||
|
#ifndef DEVICE_CONFIGURATION |
||||||
|
#define DEVICE_CONFIGURATION |
||||||
|
|
||||||
|
// CPU settings
|
||||||
|
#define TARGET_CPU m328p |
||||||
|
#define F_CPU 16000000 |
||||||
|
#define FREQUENCY_CORRECTION 0 |
||||||
|
|
||||||
|
// ADC settings
|
||||||
|
#define OPEN_SQUELCH true |
||||||
|
#define ADC_REFERENCE REF_3V3 |
||||||
|
// OR
|
||||||
|
//#define ADC_REFERENCE REF_5V
|
||||||
|
|
||||||
|
// Sampling & timer setup
|
||||||
|
#define CONFIG_AFSK_DAC_SAMPLERATE 9600 |
||||||
|
|
||||||
|
// Don't change this! Change it in
|
||||||
|
// config.h instead. This is going away
|
||||||
|
// soon, and only an intermediary thing.
|
||||||
|
#define SERIAL_PROTOCOL PROTOCOL_KISS |
||||||
|
|
||||||
|
// Serial settings
|
||||||
|
#define BAUD 9600 |
||||||
|
#define SERIAL_DEBUG false |
||||||
|
#define TX_MAXWAIT 5UL |
||||||
|
|
||||||
|
// Port settings
|
||||||
|
#if TARGET_CPU == m328p |
||||||
|
#define DAC_PORT PORTD |
||||||
|
#define DAC_DDR DDRD |
||||||
|
#define LED_PORT PORTB |
||||||
|
#define LED_DDR DDRB |
||||||
|
#define ADC_PORT PORTC |
||||||
|
#define ADC_DDR DDRC |
||||||
|
#endif |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,2 @@ |
|||||||
|
#!/bin/bash |
||||||
|
avrdude -p $2 -c arduino -P /dev/tty$1 -b 115200 -F -U flash:w:images/MicroModemGP.hex |
@ -0,0 +1,546 @@ |
|||||||
|
#include <string.h> |
||||||
|
#include "AFSK.h" |
||||||
|
#include "util/time.h" |
||||||
|
|
||||||
|
extern volatile ticks_t _clock; |
||||||
|
extern unsigned long custom_preamble; |
||||||
|
extern unsigned long custom_tail; |
||||||
|
|
||||||
|
bool hw_afsk_dac_isr = false; |
||||||
|
bool hw_5v_ref = false; |
||||||
|
Afsk *AFSK_modem; |
||||||
|
|
||||||
|
// Forward declerations
|
||||||
|
int afsk_getchar(FILE *strem); |
||||||
|
int afsk_putchar(char c, FILE *stream); |
||||||
|
|
||||||
|
void AFSK_hw_refDetect(void) { |
||||||
|
// This is manual for now
|
||||||
|
#if ADC_REFERENCE == REF_5V |
||||||
|
hw_5v_ref = true; |
||||||
|
#else |
||||||
|
hw_5v_ref = false; |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
void AFSK_hw_init(void) { |
||||||
|
// Set up ADC
|
||||||
|
|
||||||
|
AFSK_hw_refDetect(); |
||||||
|
|
||||||
|
TCCR1A = 0;
|
||||||
|
TCCR1B = _BV(CS10) | _BV(WGM13) | _BV(WGM12); |
||||||
|
ICR1 = (((CPU_FREQ+FREQUENCY_CORRECTION)) / 9600) - 1; |
||||||
|
|
||||||
|
if (hw_5v_ref) { |
||||||
|
ADMUX = _BV(REFS0) | 0; |
||||||
|
} else { |
||||||
|
ADMUX = 0; |
||||||
|
} |
||||||
|
|
||||||
|
ADC_DDR &= ~_BV(0); |
||||||
|
ADC_PORT &= ~_BV(0); |
||||||
|
DIDR0 |= _BV(0); |
||||||
|
ADCSRB = _BV(ADTS2) | |
||||||
|
_BV(ADTS1) | |
||||||
|
_BV(ADTS0);
|
||||||
|
ADCSRA = _BV(ADEN) | |
||||||
|
_BV(ADSC) | |
||||||
|
_BV(ADATE)| |
||||||
|
_BV(ADIE) | |
||||||
|
_BV(ADPS2); |
||||||
|
|
||||||
|
AFSK_DAC_INIT(); |
||||||
|
LED_TX_INIT(); |
||||||
|
LED_RX_INIT(); |
||||||
|
} |
||||||
|
|
||||||
|
void AFSK_init(Afsk *afsk) { |
||||||
|
// Allocate modem struct memory
|
||||||
|
memset(afsk, 0, sizeof(*afsk)); |
||||||
|
AFSK_modem = afsk; |
||||||
|
// Set phase increment
|
||||||
|
afsk->phaseInc = MARK_INC; |
||||||
|
afsk->silentSamples = 0; |
||||||
|
|
||||||
|
// Initialise FIFO buffers
|
||||||
|
fifo_init(&afsk->delayFifo, (uint8_t *)afsk->delayBuf, sizeof(afsk->delayBuf)); |
||||||
|
fifo_init(&afsk->rxFifo, afsk->rxBuf, sizeof(afsk->rxBuf)); |
||||||
|
fifo_init(&afsk->txFifo, afsk->txBuf, sizeof(afsk->txBuf)); |
||||||
|
|
||||||
|
// Fill delay FIFO with zeroes
|
||||||
|
for (int i = 0; i<SAMPLESPERBIT / 2; i++) { |
||||||
|
fifo_push(&afsk->delayFifo, 0); |
||||||
|
} |
||||||
|
|
||||||
|
AFSK_hw_init(); |
||||||
|
|
||||||
|
// Set up streams
|
||||||
|
FILE afsk_fd = FDEV_SETUP_STREAM(afsk_putchar, afsk_getchar, _FDEV_SETUP_RW); |
||||||
|
afsk->fd = afsk_fd; |
||||||
|
} |
||||||
|
|
||||||
|
static void AFSK_txStart(Afsk *afsk) { |
||||||
|
if (!afsk->sending) { |
||||||
|
afsk->phaseInc = MARK_INC; |
||||||
|
afsk->phaseAcc = 0; |
||||||
|
afsk->bitstuffCount = 0; |
||||||
|
afsk->sending = true; |
||||||
|
afsk->sending_data = true; |
||||||
|
LED_TX_ON(); |
||||||
|
afsk->preambleLength = DIV_ROUND(custom_preamble * BITRATE, 8000); |
||||||
|
AFSK_DAC_IRQ_START(); |
||||||
|
} |
||||||
|
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { |
||||||
|
afsk->tailLength = DIV_ROUND(custom_tail * BITRATE, 8000); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
int afsk_putchar(char c, FILE *stream) { |
||||||
|
AFSK_txStart(AFSK_modem); |
||||||
|
while(fifo_isfull_locked(&AFSK_modem->txFifo)) { /* Wait */ } |
||||||
|
fifo_push_locked(&AFSK_modem->txFifo, c); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
int afsk_getchar(FILE *stream) { |
||||||
|
if (fifo_isempty_locked(&AFSK_modem->rxFifo)) { |
||||||
|
return EOF; |
||||||
|
} else { |
||||||
|
return fifo_pop_locked(&AFSK_modem->rxFifo); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void AFSK_transmit(char *buffer, size_t size) { |
||||||
|
fifo_flush(&AFSK_modem->txFifo); |
||||||
|
int i = 0; |
||||||
|
while (size--) { |
||||||
|
afsk_putchar(buffer[i++], NULL); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
uint8_t AFSK_dac_isr(Afsk *afsk) { |
||||||
|
if (afsk->sampleIndex == 0) { |
||||||
|
if (afsk->txBit == 0) { |
||||||
|
if (fifo_isempty(&afsk->txFifo) && afsk->tailLength == 0) { |
||||||
|
AFSK_DAC_IRQ_STOP(); |
||||||
|
afsk->sending = false; |
||||||
|
afsk->sending_data = false; |
||||||
|
LED_TX_OFF(); |
||||||
|
return 0; |
||||||
|
} else { |
||||||
|
if (!afsk->bitStuff) afsk->bitstuffCount = 0; |
||||||
|
afsk->bitStuff = true; |
||||||
|
if (afsk->preambleLength == 0) { |
||||||
|
if (fifo_isempty(&afsk->txFifo)) { |
||||||
|
afsk->sending_data = false; |
||||||
|
afsk->tailLength--; |
||||||
|
afsk->currentOutputByte = HDLC_FLAG; |
||||||
|
} else { |
||||||
|
afsk->currentOutputByte = fifo_pop(&afsk->txFifo); |
||||||
|
} |
||||||
|
} else { |
||||||
|
afsk->preambleLength--; |
||||||
|
afsk->currentOutputByte = HDLC_FLAG; |
||||||
|
} |
||||||
|
if (afsk->currentOutputByte == LLP_ESC) { |
||||||
|
if (fifo_isempty(&afsk->txFifo)) { |
||||||
|
AFSK_DAC_IRQ_STOP(); |
||||||
|
afsk->sending = false; |
||||||
|
LED_TX_OFF(); |
||||||
|
return 0; |
||||||
|
} else { |
||||||
|
afsk->currentOutputByte = fifo_pop(&afsk->txFifo); |
||||||
|
} |
||||||
|
} else if (afsk->currentOutputByte == HDLC_FLAG || afsk->currentOutputByte == HDLC_RESET) { |
||||||
|
afsk->bitStuff = false; |
||||||
|
} |
||||||
|
} |
||||||
|
afsk->txBit = 0x01; |
||||||
|
} |
||||||
|
|
||||||
|
if (afsk->bitStuff && afsk->bitstuffCount >= BIT_STUFF_LEN) { |
||||||
|
afsk->bitstuffCount = 0; |
||||||
|
afsk->phaseInc = SWITCH_TONE(afsk->phaseInc); |
||||||
|
} else { |
||||||
|
if (afsk->currentOutputByte & afsk->txBit) { |
||||||
|
afsk->bitstuffCount++; |
||||||
|
} else { |
||||||
|
afsk->bitstuffCount = 0; |
||||||
|
afsk->phaseInc = SWITCH_TONE(afsk->phaseInc); |
||||||
|
} |
||||||
|
afsk->txBit <<= 1; |
||||||
|
} |
||||||
|
|
||||||
|
afsk->sampleIndex = SAMPLESPERBIT; |
||||||
|
} |
||||||
|
|
||||||
|
afsk->phaseAcc += afsk->phaseInc; |
||||||
|
afsk->phaseAcc %= SIN_LEN; |
||||||
|
afsk->sampleIndex--; |
||||||
|
|
||||||
|
return sinSample(afsk->phaseAcc); |
||||||
|
} |
||||||
|
|
||||||
|
static bool hdlcParse(Hdlc *hdlc, bool bit, FIFOBuffer *fifo) { |
||||||
|
// Initialise a return value. We start with the
|
||||||
|
// assumption that all is going to end well :)
|
||||||
|
bool ret = true; |
||||||
|
|
||||||
|
// Bitshift our byte of demodulated bits to
|
||||||
|
// the left by one bit, to make room for the
|
||||||
|
// next incoming bit
|
||||||
|
hdlc->demodulatedBits <<= 1; |
||||||
|
// And then put the newest bit from the
|
||||||
|
// demodulator into the byte.
|
||||||
|
hdlc->demodulatedBits |= bit ? 1 : 0; |
||||||
|
|
||||||
|
// Now we'll look at the last 8 received bits, and
|
||||||
|
// check if we have received a HDLC flag (01111110)
|
||||||
|
if (hdlc->demodulatedBits == HDLC_FLAG) { |
||||||
|
// If we have, check that our output buffer is
|
||||||
|
// not full.
|
||||||
|
if (!fifo_isfull(fifo)) { |
||||||
|
// If it isn't, we'll push the HDLC_FLAG into
|
||||||
|
// the buffer and indicate that we are now
|
||||||
|
// receiving data. For bling we also turn
|
||||||
|
// on the RX LED.
|
||||||
|
fifo_push(fifo, HDLC_FLAG); |
||||||
|
hdlc->receiving = true; |
||||||
|
|
||||||
|
if (hdlc->dcd_count < DCD_MIN_COUNT) { |
||||||
|
hdlc->dcd = false; |
||||||
|
hdlc->dcd_count++; |
||||||
|
} else { |
||||||
|
hdlc->dcd = true; |
||||||
|
} |
||||||
|
|
||||||
|
#if OPEN_SQUELCH == false |
||||||
|
LED_RX_ON(); |
||||||
|
#endif |
||||||
|
} else { |
||||||
|
// If the buffer is full, we have a problem
|
||||||
|
// and abort by setting the return value to
|
||||||
|
// false and stopping the here.
|
||||||
|
|
||||||
|
ret = false; |
||||||
|
hdlc->receiving = false; |
||||||
|
hdlc->dcd = false; |
||||||
|
hdlc->dcd_count = 0; |
||||||
|
} |
||||||
|
|
||||||
|
// Everytime we receive a HDLC_FLAG, we reset the
|
||||||
|
// storage for our current incoming byte and bit
|
||||||
|
// position in that byte. This effectively
|
||||||
|
// synchronises our parsing to the start and end
|
||||||
|
// of the received bytes.
|
||||||
|
hdlc->currentByte = 0; |
||||||
|
hdlc->bitIndex = 0; |
||||||
|
return ret; |
||||||
|
} |
||||||
|
|
||||||
|
// Check if we have received a RESET flag (01111111)
|
||||||
|
// In this comparison we also detect when no transmission
|
||||||
|
// (or silence) is taking place, and the demodulator
|
||||||
|
// returns an endless stream of zeroes. Due to the NRZ-S
|
||||||
|
// coding, the actual bits send to this function will
|
||||||
|
// be an endless stream of ones, which this AND operation
|
||||||
|
// will also detect.
|
||||||
|
if ((hdlc->demodulatedBits & HDLC_RESET) == HDLC_RESET) { |
||||||
|
// If we have, something probably went wrong at the
|
||||||
|
// transmitting end, and we abort the reception.
|
||||||
|
hdlc->receiving = false; |
||||||
|
hdlc->dcd = false; |
||||||
|
hdlc->dcd_count = 0; |
||||||
|
return ret; |
||||||
|
} |
||||||
|
|
||||||
|
// Check the DCD status and set RX LED appropriately
|
||||||
|
if (hdlc->dcd) { |
||||||
|
LED_RX_ON(); |
||||||
|
} else { |
||||||
|
LED_RX_OFF(); |
||||||
|
} |
||||||
|
|
||||||
|
// If we have not yet seen a HDLC_FLAG indicating that
|
||||||
|
// a transmission is actually taking place, don't bother
|
||||||
|
// with anything.
|
||||||
|
if (!hdlc->receiving) { |
||||||
|
hdlc->dcd = false; |
||||||
|
hdlc->dcd_count = 0; |
||||||
|
|
||||||
|
return ret; |
||||||
|
} |
||||||
|
|
||||||
|
// First check if what we are seeing is a stuffed bit.
|
||||||
|
// Since the different HDLC control characters like
|
||||||
|
// HDLC_FLAG, HDLC_RESET and such could also occur in
|
||||||
|
// a normal data stream, we employ a method known as
|
||||||
|
// "bit stuffing". All control characters have more than
|
||||||
|
// 5 ones in a row, so if the transmitting party detects
|
||||||
|
// this sequence in the _data_ to be transmitted, it inserts
|
||||||
|
// a zero to avoid the receiving party interpreting it as
|
||||||
|
// a control character. Therefore, if we detect such a
|
||||||
|
// "stuffed bit", we simply ignore it and wait for the
|
||||||
|
// next bit to come in.
|
||||||
|
//
|
||||||
|
// We do the detection by applying an AND bit-mask to the
|
||||||
|
// stream of demodulated bits. This mask is 00111111 (0x3f)
|
||||||
|
// if the result of the operation is 00111110 (0x3e), we
|
||||||
|
// have detected a stuffed bit.
|
||||||
|
if ((hdlc->demodulatedBits & 0x3f) == 0x3e) |
||||||
|
return ret; |
||||||
|
|
||||||
|
// If we have an actual 1 bit, push this to the current byte
|
||||||
|
// If it's a zero, we don't need to do anything, since the
|
||||||
|
// bit is initialized to zero when we bitshifted earlier.
|
||||||
|
if (hdlc->demodulatedBits & 0x01) |
||||||
|
hdlc->currentByte |= 0x80; |
||||||
|
|
||||||
|
// Increment the bitIndex and check if we have a complete byte
|
||||||
|
if (++hdlc->bitIndex >= 8) { |
||||||
|
// If we have a HDLC control character, put a AX.25 escape
|
||||||
|
// in the received data. We know we need to do this,
|
||||||
|
// because at this point we must have already seen a HDLC
|
||||||
|
// flag, meaning that this control character is the result
|
||||||
|
// of a bitstuffed byte that is equal to said control
|
||||||
|
// character, but is actually part of the data stream.
|
||||||
|
// By inserting the escape character, we tell the protocol
|
||||||
|
// layer that this is not an actual control character, but
|
||||||
|
// data.
|
||||||
|
if ((hdlc->currentByte == HDLC_FLAG || |
||||||
|
hdlc->currentByte == HDLC_RESET || |
||||||
|
hdlc->currentByte == LLP_ESC)) { |
||||||
|
// We also need to check that our received data buffer
|
||||||
|
// is not full before putting more data in
|
||||||
|
if (!fifo_isfull(fifo)) { |
||||||
|
fifo_push(fifo, LLP_ESC); |
||||||
|
} else { |
||||||
|
// If it is, abort and return false
|
||||||
|
hdlc->receiving = false; |
||||||
|
hdlc->dcd = false; |
||||||
|
hdlc->dcd_count = 0; |
||||||
|
LED_RX_OFF(); |
||||||
|
ret = false; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// Push the actual byte to the received data FIFO,
|
||||||
|
// if it isn't full.
|
||||||
|
if (!fifo_isfull(fifo)) { |
||||||
|
fifo_push(fifo, hdlc->currentByte); |
||||||
|
} else { |
||||||
|
// If it is, well, you know by now!
|
||||||
|
hdlc->receiving = false; |
||||||
|
hdlc->dcd = false; |
||||||
|
hdlc->dcd_count = 0; |
||||||
|
LED_RX_OFF(); |
||||||
|
ret = false; |
||||||
|
} |
||||||
|
|
||||||
|
// Wipe received byte and reset bit index to 0
|
||||||
|
hdlc->currentByte = 0; |
||||||
|
hdlc->bitIndex = 0; |
||||||
|
|
||||||
|
} else { |
||||||
|
// We don't have a full byte yet, bitshift the byte
|
||||||
|
// to make room for the next bit
|
||||||
|
hdlc->currentByte >>= 1; |
||||||
|
} |
||||||
|
|
||||||
|
return ret; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
void AFSK_adc_isr(Afsk *afsk, int8_t currentSample) { |
||||||
|
// To determine the received frequency, and thereby
|
||||||
|
// the bit of the sample, we multiply the sample by
|
||||||
|
// a sample delayed by (samples per bit / 2).
|
||||||
|
// We then lowpass-filter the samples with a
|
||||||
|
// Chebyshev filter. The lowpass filtering serves
|
||||||
|
// to "smooth out" the variations in the samples.
|
||||||
|
|
||||||
|
afsk->iirX[0] = afsk->iirX[1]; |
||||||
|
|
||||||
|
#if FILTER_CUTOFF == 600 |
||||||
|
afsk->iirX[1] = ((int8_t)fifo_pop(&afsk->delayFifo) * currentSample) >> 2; |
||||||
|
// The above is a simplification of:
|
||||||
|
// afsk->iirX[1] = ((int8_t)fifo_pop(&afsk->delayFifo) * currentSample) / 3.558147322;
|
||||||
|
#elif FILTER_CUTOFF == 800 |
||||||
|
afsk->iirX[1] = ((int8_t)fifo_pop(&afsk->delayFifo) * currentSample) >> 2; |
||||||
|
// The above is a simplification of:
|
||||||
|
// afsk->iirX[1] = ((int8_t)fifo_pop(&afsk->delayFifo) * currentSample) / 2.899043379;
|
||||||
|
#elif FILTER_CUTOFF == 1200 |
||||||
|
afsk->iirX[1] = ((int8_t)fifo_pop(&afsk->delayFifo) * currentSample) >> 1; |
||||||
|
// The above is a simplification of:
|
||||||
|
// afsk->iirX[1] = ((int8_t)fifo_pop(&afsk->delayFifo) * currentSample) / 2.228465666;
|
||||||
|
#elif FILTER_CUTOFF == 1600 |
||||||
|
afsk->iirX[1] = ((int8_t)fifo_pop(&afsk->delayFifo) * currentSample) >> 1; |
||||||
|
// The above is a simplification of:
|
||||||
|
// afsk->iirX[1] = ((int8_t)fifo_pop(&afsk->delayFifo) * currentSample) / 1.881349100;
|
||||||
|
#else |
||||||
|
#error Unsupported filter cutoff! |
||||||
|
#endif |
||||||
|
|
||||||
|
afsk->iirY[0] = afsk->iirY[1]; |
||||||
|
|
||||||
|
#if FILTER_CUTOFF == 600 |
||||||
|
afsk->iirY[1] = afsk->iirX[0] + afsk->iirX[1] + (afsk->iirY[0] >> 1); |
||||||
|
// The above is a simplification of a first-order 600Hz chebyshev filter:
|
||||||
|
// afsk->iirY[1] = afsk->iirX[0] + afsk->iirX[1] + (afsk->iirY[0] * 0.4379097269);
|
||||||
|
#elif FILTER_CUTOFF == 800 |
||||||
|
afsk->iirY[1] = afsk->iirX[0] + afsk->iirX[1] + (afsk->iirY[0] / 3); |
||||||
|
// The above is a simplification of a first-order 800Hz chebyshev filter:
|
||||||
|
// afsk->iirY[1] = afsk->iirX[0] + afsk->iirX[1] + (afsk->iirY[0] * 0.3101172565);
|
||||||
|
#elif FILTER_CUTOFF == 1200 |
||||||
|
afsk->iirY[1] = afsk->iirX[0] + afsk->iirX[1] + (afsk->iirY[0] / 10); |
||||||
|
// The above is a simplification of a first-order 1200Hz chebyshev filter:
|
||||||
|
// afsk->iirY[1] = afsk->iirX[0] + afsk->iirX[1] + (afsk->iirY[0] * 0.1025215106);
|
||||||
|
#elif FILTER_CUTOFF == 1600 |
||||||
|
afsk->iirY[1] = afsk->iirX[0] + afsk->iirX[1] + -1*(afsk->iirY[0] / 17); |
||||||
|
// The above is a simplification of a first-order 1600Hz chebyshev filter:
|
||||||
|
// afsk->iirY[1] = afsk->iirX[0] + afsk->iirX[1] + (afsk->iirY[0] * -0.0630669239);
|
||||||
|
#else |
||||||
|
#error Unsupported filter cutoff! |
||||||
|
#endif |
||||||
|
|
||||||
|
|
||||||
|
// We put the sampled bit in a delay-line:
|
||||||
|
// First we bitshift everything 1 left
|
||||||
|
afsk->sampledBits <<= 1; |
||||||
|
// And then add the sampled bit to our delay line
|
||||||
|
afsk->sampledBits |= (afsk->iirY[1] > 0) ? 0 : 1; |
||||||
|
|
||||||
|
// Put the current raw sample in the delay FIFO
|
||||||
|
fifo_push(&afsk->delayFifo, currentSample); |
||||||
|
|
||||||
|
// We need to check whether there is a signal transition.
|
||||||
|
// If there is, we can recalibrate the phase of our
|
||||||
|
// sampler to stay in sync with the transmitter. A bit of
|
||||||
|
// explanation is required to understand how this works.
|
||||||
|
// Since we have PHASE_MAX/PHASE_BITS = 8 samples per bit,
|
||||||
|
// we employ a phase counter (currentPhase), that increments
|
||||||
|
// by PHASE_BITS everytime a sample is captured. When this
|
||||||
|
// counter reaches PHASE_MAX, it wraps around by modulus
|
||||||
|
// PHASE_MAX. We then look at the last three samples we
|
||||||
|
// captured and determine if the bit was a one or a zero.
|
||||||
|
//
|
||||||
|
// This gives us a "window" looking into the stream of
|
||||||
|
// samples coming from the ADC. Sort of like this:
|
||||||
|
//
|
||||||
|
// Past Future
|
||||||
|
// 0000000011111111000000001111111100000000
|
||||||
|
// |________|
|
||||||
|
// ||
|
||||||
|
// Window
|
||||||
|
//
|
||||||
|
// Every time we detect a signal transition, we adjust
|
||||||
|
// where this window is positioned a little. How much we
|
||||||
|
// adjust it is defined by PHASE_INC. If our current phase
|
||||||
|
// phase counter value is less than half of PHASE_MAX (ie,
|
||||||
|
// the window size) when a signal transition is detected,
|
||||||
|
// add PHASE_INC to our phase counter, effectively moving
|
||||||
|
// the window a little bit backward (to the left in the
|
||||||
|
// illustration), inversely, if the phase counter is greater
|
||||||
|
// than half of PHASE_MAX, we move it forward a little.
|
||||||
|
// This way, our "window" is constantly seeking to position
|
||||||
|
// it's center at the bit transitions. Thus, we synchronise
|
||||||
|
// our timing to the transmitter, even if it's timing is
|
||||||
|
// a little off compared to our own.
|
||||||
|
if (SIGNAL_TRANSITIONED(afsk->sampledBits)) { |
||||||
|
if (afsk->currentPhase < PHASE_THRESHOLD) { |
||||||
|
afsk->currentPhase += PHASE_INC; |
||||||
|
} else { |
||||||
|
afsk->currentPhase -= PHASE_INC; |
||||||
|
} |
||||||
|
afsk->silentSamples = 0; |
||||||
|
} else { |
||||||
|
afsk->silentSamples++; |
||||||
|
} |
||||||
|
|
||||||
|
// We increment our phase counter
|
||||||
|
afsk->currentPhase += PHASE_BITS; |
||||||
|
|
||||||
|
// Check if we have reached the end of
|
||||||
|
// our sampling window.
|
||||||
|
if (afsk->currentPhase >= PHASE_MAX) { |
||||||
|
// If we have, wrap around our phase
|
||||||
|
// counter by modulus
|
||||||
|
afsk->currentPhase %= PHASE_MAX; |
||||||
|
|
||||||
|
// Bitshift to make room for the next
|
||||||
|
// bit in our stream of demodulated bits
|
||||||
|
afsk->actualBits <<= 1; |
||||||
|
|
||||||
|
// We determine the actual bit value by reading
|
||||||
|
// the last 3 sampled bits. If there is two or
|
||||||
|
// more 1's, we will assume that the transmitter
|
||||||
|
// sent us a one, otherwise we assume a zero
|
||||||
|
uint8_t bits = afsk->sampledBits & 0x07; |
||||||
|
if (bits == 0x07 || // 111
|
||||||
|
bits == 0x06 || // 110
|
||||||
|
bits == 0x05 || // 101
|
||||||
|
bits == 0x03 // 011
|
||||||
|
) { |
||||||
|
afsk->actualBits |= 1; |
||||||
|
} |
||||||
|
|
||||||
|
//// Alternative using five bits ////////////////
|
||||||
|
// uint8_t bits = afsk->sampledBits & 0x0f;
|
||||||
|
// uint8_t c = 0;
|
||||||
|
// c += bits & BV(1);
|
||||||
|
// c += bits & BV(2);
|
||||||
|
// c += bits & BV(3);
|
||||||
|
// c += bits & BV(4);
|
||||||
|
// c += bits & BV(5);
|
||||||
|
// if (c >= 3) afsk->actualBits |= 1;
|
||||||
|
/////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// Now we can pass the actual bit to the HDLC parser.
|
||||||
|
// We are using NRZ-S coding, so if 2 consecutive bits
|
||||||
|
// have the same value, we have a 1, otherwise a 0.
|
||||||
|
// We use the TRANSITION_FOUND function to determine this.
|
||||||
|
//
|
||||||
|
// This is smart in combination with bit stuffing,
|
||||||
|
// since it ensures a transmitter will never send more
|
||||||
|
// than five consecutive 1's. When sending consecutive
|
||||||
|
// ones, the signal stays at the same level, and if
|
||||||
|
// this happens for longer periods of time, we would
|
||||||
|
// not be able to synchronize our phase to the transmitter
|
||||||
|
// and would start experiencing "bit slip".
|
||||||
|
//
|
||||||
|
// By combining bit-stuffing with NRZ-S coding, we ensure
|
||||||
|
// that the signal will regularly make transitions
|
||||||
|
// that we can use to synchronize our phase.
|
||||||
|
//
|
||||||
|
// We also check the return of the Link Control parser
|
||||||
|
// to check if an error occured.
|
||||||
|
|
||||||
|
if (!hdlcParse(&afsk->hdlc, !TRANSITION_FOUND(afsk->actualBits), &afsk->rxFifo)) { |
||||||
|
afsk->status |= 1; |
||||||
|
if (fifo_isfull(&afsk->rxFifo)) { |
||||||
|
fifo_flush(&afsk->rxFifo); |
||||||
|
afsk->status = 0; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (afsk->silentSamples > DCD_TIMEOUT_SAMPLES) { |
||||||
|
afsk->silentSamples = 0; |
||||||
|
afsk->hdlc.dcd = false; |
||||||
|
LED_RX_OFF(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
ISR(ADC_vect) { |
||||||
|
TIFR1 = _BV(ICF1); |
||||||
|
AFSK_adc_isr(AFSK_modem, ((int16_t)((ADC) >> 2) - 128)); |
||||||
|
if (hw_afsk_dac_isr) { |
||||||
|
DAC_PORT = (AFSK_dac_isr(AFSK_modem) & 0xF0) | _BV(3);
|
||||||
|
} else { |
||||||
|
DAC_PORT = 128; |
||||||
|
} |
||||||
|
++_clock; |
||||||
|
} |
@ -0,0 +1,162 @@ |
|||||||
|
#ifndef AFSK_H |
||||||
|
#define AFSK_H |
||||||
|
|
||||||
|
#include "device.h" |
||||||
|
#include <stdint.h> |
||||||
|
#include <stdbool.h> |
||||||
|
#include <stdio.h> |
||||||
|
#include <avr/pgmspace.h> |
||||||
|
#include "util/FIFO.h" |
||||||
|
#include "util/time.h" |
||||||
|
#include "protocol/HDLC.h" |
||||||
|
|
||||||
|
#define SIN_LEN 512 |
||||||
|
static const uint8_t sin_table[] PROGMEM = |
||||||
|
{ |
||||||
|
128, 129, 131, 132, 134, 135, 137, 138, 140, 142, 143, 145, 146, 148, 149, 151, |
||||||
|
152, 154, 155, 157, 158, 160, 162, 163, 165, 166, 167, 169, 170, 172, 173, 175, |
||||||
|
176, 178, 179, 181, 182, 183, 185, 186, 188, 189, 190, 192, 193, 194, 196, 197, |
||||||
|
198, 200, 201, 202, 203, 205, 206, 207, 208, 210, 211, 212, 213, 214, 215, 217, |
||||||
|
218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, |
||||||
|
234, 234, 235, 236, 237, 238, 238, 239, 240, 241, 241, 242, 243, 243, 244, 245, |
||||||
|
245, 246, 246, 247, 248, 248, 249, 249, 250, 250, 250, 251, 251, 252, 252, 252, |
||||||
|
253, 253, 253, 253, 254, 254, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, |
||||||
|
}; |
||||||
|
|
||||||
|
inline static uint8_t sinSample(uint16_t i) { |
||||||
|
uint16_t newI = i % (SIN_LEN/2); |
||||||
|
newI = (newI >= (SIN_LEN/4)) ? (SIN_LEN/2 - newI -1) : newI; |
||||||
|
uint8_t sine = pgm_read_byte(&sin_table[newI]); |
||||||
|
return (i >= (SIN_LEN/2)) ? (255 - sine) : sine; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
#define SWITCH_TONE(inc) (((inc) == MARK_INC) ? SPACE_INC : MARK_INC) |
||||||
|
#define BITS_DIFFER(bits1, bits2) (((bits1)^(bits2)) & 0x01) |
||||||
|
#define DUAL_XOR(bits1, bits2) ((((bits1)^(bits2)) & 0x03) == 0x03) |
||||||
|
#define SIGNAL_TRANSITIONED(bits) DUAL_XOR((bits), (bits) >> 2) |
||||||
|
#define TRANSITION_FOUND(bits) BITS_DIFFER((bits), (bits) >> 1) |
||||||
|
|
||||||
|
#define CPU_FREQ F_CPU |
||||||
|
|
||||||
|
#define CONFIG_AFSK_RX_BUFLEN 64 |
||||||
|
#define CONFIG_AFSK_TX_BUFLEN 64 |
||||||
|
#define CONFIG_AFSK_RXTIMEOUT 0 |
||||||
|
#define CONFIG_AFSK_PREAMBLE_LEN 350UL |
||||||
|
#define CONFIG_AFSK_TRAILER_LEN 50UL |
||||||
|
#define BIT_STUFF_LEN 5 |
||||||
|
|
||||||
|
#define SAMPLERATE 9600 |
||||||
|
#define BITRATE 1200 |
||||||
|
|
||||||
|
#define SAMPLESPERBIT (SAMPLERATE / BITRATE) |
||||||
|
#define PHASE_INC 1 // Nudge by an eigth of a sample each adjustment
|
||||||
|
|
||||||
|
#define DCD_MIN_COUNT 6 |
||||||
|
#define DCD_TIMEOUT_SAMPLES 96 |
||||||
|
|
||||||
|
#if BITRATE == 960 |
||||||
|
#define FILTER_CUTOFF 600 |
||||||
|
#define MARK_FREQ 960 |
||||||
|
#define SPACE_FREQ 1600 |
||||||
|
#define PHASE_BITS 10 // How much to increment phase counter each sample
|
||||||
|
#elif BITRATE == 1200 |
||||||
|
#define FILTER_CUTOFF 600 |
||||||
|
#define MARK_FREQ 1200 |
||||||
|
#define SPACE_FREQ 2200 |
||||||
|
#define PHASE_BITS 8 |
||||||
|
#elif BITRATE == 1600 |
||||||
|
#define FILTER_CUTOFF 800 |
||||||
|
#define MARK_FREQ 1600 |
||||||
|
#define SPACE_FREQ 2600 |
||||||
|
#define PHASE_BITS 8 |
||||||
|
#else |
||||||
|
#error Unsupported bitrate! |
||||||
|
#endif |
||||||
|
|
||||||
|
#define PHASE_MAX (SAMPLESPERBIT * PHASE_BITS) // Resolution of our phase counter = 64
|
||||||
|
#define PHASE_THRESHOLD (PHASE_MAX / 2) // Target transition point of our phase window
|
||||||
|
|
||||||
|
typedef struct Hdlc |
||||||
|
{ |
||||||
|
uint8_t demodulatedBits; |
||||||
|
uint8_t bitIndex; |
||||||
|
uint8_t currentByte; |
||||||
|
bool receiving; |
||||||
|
bool dcd; |
||||||
|
uint8_t dcd_count; |
||||||
|
} Hdlc; |
||||||
|
|
||||||
|
typedef struct Afsk |
||||||
|
{ |
||||||
|
// Stream access to modem
|
||||||
|
FILE fd; |
||||||
|
|
||||||
|
// General values
|
||||||
|
Hdlc hdlc; // We need a link control structure
|
||||||
|
uint16_t preambleLength; // Length of sync preamble
|
||||||
|
uint16_t tailLength; // Length of transmission tail
|
||||||
|
|
||||||
|
// Modulation values
|
||||||
|
uint8_t sampleIndex; // Current sample index for outgoing bit
|
||||||
|
uint8_t currentOutputByte; // Current byte to be modulated
|
||||||
|
uint8_t txBit; // Mask of current modulated bit
|
||||||
|
bool bitStuff; // Whether bitstuffing is allowed
|
||||||
|
|
||||||
|
uint8_t bitstuffCount; // Counter for bit-stuffing
|
||||||
|
|
||||||
|
uint16_t phaseAcc; // Phase accumulator
|
||||||
|
uint16_t phaseInc; // Phase increment per sample
|
||||||
|
|
||||||
|
uint8_t silentSamples; // How many samples were completely silent
|
||||||
|
|
||||||
|
FIFOBuffer txFifo; // FIFO for transmit data
|
||||||
|
uint8_t txBuf[CONFIG_AFSK_TX_BUFLEN]; // Actual data storage for said FIFO
|
||||||
|
|
||||||
|
volatile bool sending; // Set when modem is sending
|
||||||
|
volatile bool sending_data; // Set when modem is sending data
|
||||||
|
|
||||||
|
// Demodulation values
|
||||||
|
FIFOBuffer delayFifo; // Delayed FIFO for frequency discrimination
|
||||||
|
int8_t delayBuf[SAMPLESPERBIT / 2 + 1]; // Actual data storage for said FIFO
|
||||||
|
|
||||||
|
FIFOBuffer rxFifo; // FIFO for received data
|
||||||
|
uint8_t rxBuf[CONFIG_AFSK_RX_BUFLEN]; // Actual data storage for said FIFO
|
||||||
|
|
||||||
|
int16_t iirX[2]; // IIR Filter X cells
|
||||||
|
int16_t iirY[2]; // IIR Filter Y cells
|
||||||
|
|
||||||
|
uint8_t sampledBits; // Bits sampled by the demodulator (at ADC speed)
|
||||||
|
int8_t currentPhase; // Current phase of the demodulator
|
||||||
|
uint8_t actualBits; // Actual found bits at correct bitrate
|
||||||
|
|
||||||
|
volatile int status; // Status of the modem, 0 means OK
|
||||||
|
|
||||||
|
} Afsk; |
||||||
|
|
||||||
|
#define DIV_ROUND(dividend, divisor) (((dividend) + (divisor) / 2) / (divisor)) |
||||||
|
#define MARK_INC (uint16_t)(DIV_ROUND(SIN_LEN * (uint32_t)MARK_FREQ, CONFIG_AFSK_DAC_SAMPLERATE)) |
||||||
|
#define SPACE_INC (uint16_t)(DIV_ROUND(SIN_LEN * (uint32_t)SPACE_FREQ, CONFIG_AFSK_DAC_SAMPLERATE)) |
||||||
|
|
||||||
|
#define AFSK_DAC_IRQ_START() do { extern bool hw_afsk_dac_isr; hw_afsk_dac_isr = true; } while (0) |
||||||
|
#define AFSK_DAC_IRQ_STOP() do { extern bool hw_afsk_dac_isr; hw_afsk_dac_isr = false; } while (0) |
||||||
|
#define AFSK_DAC_INIT() do { DAC_DDR |= 0xF8; } while (0) |
||||||
|
|
||||||
|
// Here's some macros for controlling the RX/TX LEDs
|
||||||
|
// THE _INIT() functions writes to the DDRB register
|
||||||
|
// to configure the pins as output pins, and the _ON()
|
||||||
|
// and _OFF() functions writes to the PORT registers
|
||||||
|
// to turn the pins on or off.
|
||||||
|
#define LED_TX_INIT() do { LED_DDR |= _BV(1); } while (0) |
||||||
|
#define LED_TX_ON() do { LED_PORT |= _BV(1); } while (0) |
||||||
|
#define LED_TX_OFF() do { LED_PORT &= ~_BV(1); } while (0) |
||||||
|
|
||||||
|
#define LED_RX_INIT() do { LED_DDR |= _BV(2); } while (0) |
||||||
|
#define LED_RX_ON() do { LED_PORT |= _BV(2); } while (0) |
||||||
|
#define LED_RX_OFF() do { LED_PORT &= ~_BV(2); } while (0) |
||||||
|
|
||||||
|
void AFSK_init(Afsk *afsk); |
||||||
|
void AFSK_transmit(char *buffer, size_t size); |
||||||
|
void AFSK_poll(Afsk *afsk); |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,49 @@ |
|||||||
|
#include "Serial.h" |
||||||
|
#include <util/setbaud.h> |
||||||
|
#include <stdio.h> |
||||||
|
#include <string.h> |
||||||
|
|
||||||
|
void serial_init(Serial *serial) { |
||||||
|
memset(serial, 0, sizeof(*serial)); |
||||||
|
UBRR0H = UBRRH_VALUE; |
||||||
|
UBRR0L = UBRRL_VALUE; |
||||||
|
|
||||||
|
#if USE_2X |
||||||
|
UCSR0A |= _BV(U2X0); |
||||||
|
#else |
||||||
|
UCSR0A &= ~(_BV(U2X0)); |
||||||
|
#endif |
||||||
|
|
||||||
|
// Set to 8-bit data, enable RX and TX
|
||||||
|
UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); |
||||||
|
UCSR0B = _BV(RXEN0) | _BV(TXEN0); |
||||||
|
|
||||||
|
FILE uart0_fd = FDEV_SETUP_STREAM(uart0_putchar, uart0_getchar, _FDEV_SETUP_RW); |
||||||
|
//FILE uart0_fd = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||||
|
|
||||||
|
serial->uart0 = uart0_fd; |
||||||
|
} |
||||||
|
|
||||||
|
bool serial_available(uint8_t index) { |
||||||
|
if (index == 0) { |
||||||
|
if (UCSR0A & _BV(RXC0)) return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
int uart0_putchar(char c, FILE *stream) { |
||||||
|
loop_until_bit_is_set(UCSR0A, UDRE0); |
||||||
|
UDR0 = c; |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
int uart0_getchar(FILE *stream) { |
||||||
|
loop_until_bit_is_set(UCSR0A, RXC0); |
||||||
|
return UDR0; |
||||||
|
} |
||||||
|
|
||||||
|
char uart0_getchar_nowait(void) { |
||||||
|
if (!(UCSR0A & _BV(RXC0))) return EOF; |
||||||
|
return UDR0; |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
#ifndef SERIAL_H |
||||||
|
#define SERIAL_H |
||||||
|
|
||||||
|
#include "device.h" |
||||||
|
|
||||||
|
#include <stdio.h> |
||||||
|
#include <stdbool.h> |
||||||
|
#include <avr/io.h> |
||||||
|
|
||||||
|
typedef struct Serial { |
||||||
|
FILE uart0; |
||||||
|
} Serial; |
||||||
|
|
||||||
|
void serial_init(Serial *serial); |
||||||
|
bool serial_available(uint8_t index); |
||||||
|
int uart0_putchar(char c, FILE *stream); |
||||||
|
int uart0_getchar(FILE *stream); |
||||||
|
char uart0_getchar_nowait(void); |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,58 @@ |
|||||||
|
#include <stdbool.h> |
||||||
|
#include <string.h> |
||||||
|
#include <avr/io.h> |
||||||
|
|
||||||
|
#include "device.h" |
||||||
|
#include "config.h" |
||||||
|
#include "util/FIFO.h" |
||||||
|
#include "util/time.h" |
||||||
|
#include "hardware/AFSK.h" |
||||||
|
#include "hardware/Serial.h" |
||||||
|
#include "protocol/AX25.h" |
||||||
|
#include "protocol/LLP.h" |
||||||
|
#include "protocol/KISS.h" |
||||||
|
|
||||||
|
|
||||||
|
Serial serial; |
||||||
|
Afsk modem; |
||||||
|
LLPAddress localAdress; |
||||||
|
LLPCtx llp; |
||||||
|
|
||||||
|
static void llp_callback(struct LLPCtx *ctx) { |
||||||
|
kiss_messageCallback(ctx); |
||||||
|
} |
||||||
|
|
||||||
|
void init(void) { |
||||||
|
sei(); |
||||||
|
|
||||||
|
AFSK_init(&modem); |
||||||
|
|
||||||
|
memset(&localAdress, 0, sizeof(localAdress)); |
||||||
|
localAdress.network = LLP_ADDR_BROADCAST; |
||||||
|
localAdress.host = LLP_ADDR_BROADCAST; |
||||||
|
llp_init(&llp, &localAdress, &modem.fd, llp_callback); |
||||||
|
|
||||||
|
serial_init(&serial);
|
||||||
|
stdout = &serial.uart0; |
||||||
|
stdin = &serial.uart0; |
||||||
|
|
||||||
|
kiss_init(&llp, &modem, &serial); |
||||||
|
} |
||||||
|
|
||||||
|
int main (void) { |
||||||
|
init(); |
||||||
|
|
||||||
|
while (true) { |
||||||
|
llp_poll(&llp); |
||||||
|
|
||||||
|
if (serial_available(0)) { |
||||||
|
char sbyte = uart0_getchar_nowait(); |
||||||
|
kiss_serialCallback(sbyte); |
||||||
|
} |
||||||
|
#if SERIAL_FRAMING == SERIAL_FRAMING_DIRECT |
||||||
|
kiss_checkTimeout(false); |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
@ -0,0 +1,669 @@ |
|||||||
|
:100000000C9474010C9491010C9491010C94910145 |
||||||
|
:100010000C9491010C9491010C9491010C94910118 |
||||||
|
:100020000C9491010C9491010C9491010C94910108 |
||||||
|
:100030000C9491010C9491010C9491010C949101F8 |
||||||
|
:100040000C9491010C9491010C9491010C949101E8 |
||||||
|
:100050000C9491010C94FC060C9491010C94910168 |
||||||
|
:100060000C9491010C949101808183848687898A04 |
||||||
|
:100070008C8E8F9192949597989A9B9D9EA0A2A307 |
||||||
|
:10008000A5A6A7A9AAACADAFB0B2B3B5B6B7B9BA79 |
||||||
|
:10009000BCBDBEC0C1C2C4C5C6C8C9CACBCDCECF07 |
||||||
|
:1000A000D0D2D3D4D5D6D7D9DADBDCDDDEDFE0E1C0 |
||||||
|
:1000B000E2E3E4E5E6E7E8E9EAEAEBECEDEEEEEFB1 |
||||||
|
:1000C000F0F1F1F2F3F3F4F5F5F6F6F7F8F8F9F9E3 |
||||||
|
:1000D000FAFAFAFBFBFCFCFCFDFDFDFDFEFEFEFE5C |
||||||
|
:1000E000FEFFFFFFFFFFFFFF0000891112239B327D |
||||||
|
:1000F0002446AD573665BF74488CC19D5AAFD3BEF8 |
||||||
|
:100100006CCAE5DB7EE9F7F88110080193331A2207 |
||||||
|
:10011000A5562C47B7753E64C99C408DDBBF52AED7 |
||||||
|
:10012000EDDA64CBFFF976E802218B3010029913E7 |
||||||
|
:100130002667AF763444BD554AADC3BC588ED19FB7 |
||||||
|
:100140006EEBE7FA7CC8F5D983310A2091121803C7 |
||||||
|
:10015000A7772E66B5543C45CBBD42ACD99E508F97 |
||||||
|
:10016000EFFB66EAFDD874C904428D5316619F7097 |
||||||
|
:100170002004A9153227BB364CCEC5DF5EEDD7FC77 |
||||||
|
:100180006888E1997AABF3BA85520C4397711E6087 |
||||||
|
:10019000A1142805B3373A26CDDE44CFDFFD56EC57 |
||||||
|
:1001A000E9986089FBBB72AA06638F7214409D5167 |
||||||
|
:1001B0002225AB343006B9174EEFC7FE5CCCD5DD37 |
||||||
|
:1001C0006AA9E3B8788AF19B87730E6295501C4147 |
||||||
|
:1001D000A3352A24B1163807CFFF46EEDDDC54CD17 |
||||||
|
:1001E000EBB962A8F99A708B088481951AA793B627 |
||||||
|
:1001F0002CC2A5D33EE1B7F04008C919522BDB3A17 |
||||||
|
:10020000644EED5F766DFF7C899400859BB712A6E6 |
||||||
|
:10021000ADD224C3BFF136E0C1184809D33B5A2AF6 |
||||||
|
:10022000E55E6C4FF77D7E6C0AA583B418869197C6 |
||||||
|
:100230002EE3A7F23CC0B5D14229CB38500AD91BD6 |
||||||
|
:10024000666FEF7E744CFD5D8BB502A499961087A6 |
||||||
|
:10025000AFF326E2BDD034C1C3394A28D11A580BB6 |
||||||
|
:10026000E77F6E6EF55C7C4D0CC685D71EE597F476 |
||||||
|
:100270002880A1913AA3B3B2444ACD5B5669DF7896 |
||||||
|
:10028000600CE91D722FFB3E8DD604C79FF516E466 |
||||||
|
:10029000A9902081BBB332A2C55A4C4BD7795E6876 |
||||||
|
:1002A000E11C680DF33F7A2E0EE787F61CC495D546 |
||||||
|
:1002B0002AA1A3B03882B193466BCF7A5448DD5956 |
||||||
|
:1002C000622DEB3C700EF91F8FF706E69DD414C526 |
||||||
|
:1002D000ABB122A0B9923083C77B4E6AD5585C4936 |
||||||
|
:1002E000E33D6A2CF11E780F11241FBECFEFD8E03A |
||||||
|
:1002F000DEBFCDBF11E0A0E0B1E0EAE9F9E202C063 |
||||||
|
:1003000005900D92A231B107D9F716E0A2E1B1E054 |
||||||
|
:1003100001C01D92A43BB107E1F70E945B130C944E |
||||||
|
:10032000CB140C9400000C944C12789488EB95E05C |
||||||
|
:100330000E941803E8E9F6E08FEF9FEF9183808336 |
||||||
|
:100340009383828323E931E048EB55E0BF018AE4DF |
||||||
|
:1003500093E00E94EE078AE896E00E94CF01EEEA61 |
||||||
|
:10036000F6E08AE896E09383828391838083AC01F0 |
||||||
|
:1003700068EB75E08AE493E00C943F129091C00022 |
||||||
|
:1003800095FFFCCF8093C60081E090E008958091B6 |
||||||
|
:10039000C00087FFFCCF8091C60090E00895CF9306 |
||||||
|
:1003A000DF93CDB7DEB72E970FB6F894DEBF0FBE42 |
||||||
|
:1003B000CDBFDC018EE0FD01982F11929A95E9F7EF |
||||||
|
:1003C0001092C50097E69093C400E0ECF0E09081B5 |
||||||
|
:1003D0009D7F908396E09093C20098E19093C10036 |
||||||
|
:1003E0009E012F5F3F4FF90111928A95E9F783E053 |
||||||
|
:1003F0008C838EEB91E09A87898787EC91E09C87CC |
||||||
|
:100400008B879EE0F90101900D929A95E1F72E9667 |
||||||
|
:100410000FB6F894DEBF0FBECDBFDF91CF91089528 |
||||||
|
:10042000811106C08091C000881F8827881F089509 |
||||||
|
:1004300080E008958091C00087FF03C08091C600CE |
||||||
|
:1004400008958FEF08950F931F93CF93DF93182F85 |
||||||
|
:10045000C0919C06D0919D06FE01E659FF4F808118 |
||||||
|
:10046000811126C080E490E098A38F8F1E8E1D8E90 |
||||||
|
:100470001C8E01E0008331960083299A20910901A6 |
||||||
|
:1004800030910A0140910B0150910C01A0EBB4E0B6 |
||||||
|
:100490000E946E136056704F8F4F9F4F20E43FE1D4 |
||||||
|
:1004A00040E050E00E94A1133D8B2C8B0093130180 |
||||||
|
:1004B0000FB7F89420910501309106014091070192 |
||||||
|
:1004C00050910801A0EBB4E00E946E136056704F8B |
||||||
|
:1004D0008F4F9F4F20E43FE140E050E00E94A11386 |
||||||
|
:1004E0003F8B2E8B0FBFE0919C06F0919D064FB77E |
||||||
|
:1004F000F89426A137A182A193A12817390739F4CE |
||||||
|
:1005000020A531A584A195A12817390779F060A508 |
||||||
|
:1005100071A526A137A12150310991E080E0621731 |
||||||
|
:10052000730709F090E0292F382F02C021E030E056 |
||||||
|
:100530004FBF232BC1F6E0919C06F0919D062FB78B |
||||||
|
:10054000F894A0A5B1A51C9340A551A584A195A19F |
||||||
|
:100550004817590719F482A193A103C080A591A55A |
||||||
|
:10056000019691A780A72FBF81E090E0DF91CF9106 |
||||||
|
:100570001F910F910895E0919C06F0919D064FB751 |
||||||
|
:10058000F894E758FF4F24813581868197814FBFCA |
||||||
|
:1005900028173907E9F0E0919C06F0919D069FB776 |
||||||
|
:1005A000F894E758FF4FA481B58122813381A217C7 |
||||||
|
:1005B000B30719F42081318105C0A481B5819D0163 |
||||||
|
:1005C0002F5F3F4F358324838C919FBF90E0089528 |
||||||
|
:1005D0008FEF9FEF0895109212010895109212016B |
||||||
|
:1005E0001092800089E18093810081E896E09093E9 |
||||||
|
:1005F00087008093860080911201882321F080E497 |
||||||
|
:1006000080937C0002C010927C00389840988091C2 |
||||||
|
:100610007E00816080937E0087E080937B008CEE7B |
||||||
|
:1006200080937A008AB1886F8AB9219A229A0895B4 |
||||||
|
:100630000F931F93CF93DF93CDB7DEB72E970FB6EF |
||||||
|
:10064000F894DEBF0FBECDBF8C018EECD8011D9299 |
||||||
|
:100650008A95E9F710939D0600939C0680E490E04C |
||||||
|
:10066000F80190A3878F11A2C8018C589F4FE459BD |
||||||
|
:10067000FF4F918380839783868395838483049639 |
||||||
|
:10068000938382830996D801A758BF4F11969C93F4 |
||||||
|
:100690008E9317969C938E93169715969C938E9394 |
||||||
|
:1006A0001497CF9613969C938E931297865991091F |
||||||
|
:1006B000D80193969C938E93929799969C938E9340 |
||||||
|
:1006C000989797969C938E939697CF9695969C9392 |
||||||
|
:1006D0008E93949784E090E0A681B7811C92468126 |
||||||
|
:1006E0005781228133814217530719F420813181C8 |
||||||
|
:1006F00004C0268137812F5F3F4F378326830197C0 |
||||||
|
:1007000059F70E94EE028EE0FE013196DF01982F2C |
||||||
|
:100710001D929A95E9F793E09C8323E232E03A87B1 |
||||||
|
:1007200029872BEB32E03C872B87D80101900D9273 |
||||||
|
:100730008A95E1F72E960FB6F894DEBF0FBECDBFB7 |
||||||
|
:10074000DF91CF911F910F9108950F931F93CF9336 |
||||||
|
:10075000DF93E0919C06F0919D0620A531A537A37B |
||||||
|
:1007600026A3EC018C01060F171FC017D10731F02B |
||||||
|
:1007700060E070E089910E942302F7CFDF91CF9172 |
||||||
|
:100780001F910F910895DC0158968C915897811113 |
||||||
|
:10079000F8C05A968C915A978111AEC096964D9199 |
||||||
|
:1007A0005C91979798962D913C9199974217530792 |
||||||
|
:1007B00079F456962D913C915797232B49F410923A |
||||||
|
:1007C0001301FD01E659FF4F1082A559BF4F68C0C4 |
||||||
|
:1007D0005B969C915B97911103C05C961C925C9711 |
||||||
|
:1007E00091E05B969C935B9754962D913C91559725 |
||||||
|
:1007F00021153105B9F596964D915C91979798968C |
||||||
|
:100800002D913C9199974217530779F4FD01E559D1 |
||||||
|
:10081000FF4F108256962D913C91579721503109E8 |
||||||
|
:1008200057963C932E93569723C09696ED91FC9144 |
||||||
|
:10083000979794962D913C919597E217F30729F499 |
||||||
|
:1008400092962D913C91939707C09696ED91FC91CD |
||||||
|
:1008500097979F012F5F3F4F97963C932E939697C4 |
||||||
|
:10086000908107C02150310955963C932E9354979F |
||||||
|
:100870009EE759969C93599759969C9159979B310D |
||||||
|
:1008800089F596964D915C91979798962D913C910C |
||||||
|
:1008900099974217530739F410921301A659BF4F85 |
||||||
|
:1008A0001C92299808959696ED91FC9197979496AD |
||||||
|
:1008B0008D919C919597E817F90729F492968D915F |
||||||
|
:1008C0009C91939706C09696ED91FC919797CF01D6 |
||||||
|
:1008D000019697969C938E939697808159968C93C8 |
||||||
|
:1008E000599706C09E57923018F45B961C925B97FE |
||||||
|
:1008F00081E05A968C935A975B968C915B975F96A2 |
||||||
|
:100900002D913C9190978823A9F05C968C915C97EF |
||||||
|
:10091000853080F05C961C925C972034310519F08C |
||||||
|
:1009200080E490E002C085E790E090969C938E93DF |
||||||
|
:100930005F9723C05A968C915A9759969C915997D4 |
||||||
|
:10094000982341F05C969C915C979F5F5C969C938A |
||||||
|
:100950005C970FC05C961C925C972034310519F0AF |
||||||
|
:1009600020E430E002C025E730E090963C932E93DF |
||||||
|
:100970005F97880F5A968C935A9788E058968C9375 |
||||||
|
:1009800058975F96ED91FC9190975D968D919C9113 |
||||||
|
:100990005E97E80FF91F9F0131705E963C932E938E |
||||||
|
:1009A0005D9758968C915897815058968C93FF2755 |
||||||
|
:1009B000E038F10530F08FEF90E0AC014E1B5F0B9B |
||||||
|
:1009C000FA01E859FF4F84912F3F310511F008F0EB |
||||||
|
:1009D00080950895EF92FF920F931F93CF93DF932B |
||||||
|
:1009E000FC018C010D531F4FD8014D915C91119763 |
||||||
|
:1009F000129711965C934E93A555B10914968D915B |
||||||
|
:100A00009C91159712962D913C91139782179307FD |
||||||
|
:100A100021F42D913C91119707C014968D919C91D2 |
||||||
|
:100A200015979C012F5F3F4F15963C932E9314977B |
||||||
|
:100A3000EC012881260290011124C9019595879522 |
||||||
|
:100A400095958795E801998388837F01D7ECED0E12 |
||||||
|
:100A5000F11CE701288139818F010B531F4FE801F9 |
||||||
|
:100A600039832883840F951F35952795820F931F0F |
||||||
|
:100A7000E70199838883AF0147535F4F21E0181640 |
||||||
|
:100A800019060CF420E0EA018881880F822B888304 |
||||||
|
:100A900016968D919C911797EC01688316962D916F |
||||||
|
:100AA0003C91179712968D919C91139728173907AF |
||||||
|
:100AB00021F48D919C91119705C016968D919C9172 |
||||||
|
:100AC0001797019617969C938E931697DA018C913F |
||||||
|
:100AD000982F9695969589278370DF01A653BF4F6F |
||||||
|
:100AE000833049F48C91803214F48F5F01C08150BF |
||||||
|
:100AF0008C9311A203C081A18F5F81A38C91885F29 |
||||||
|
:100B0000803414F48C936BC18F738C93DF01A553E5 |
||||||
|
:100B1000BF4F8C91880F8C93EA01988197702BEFCF |
||||||
|
:100B2000290F233010F0933011F481608C938C9155 |
||||||
|
:100B3000982F96958927809581709685990F892B96 |
||||||
|
:100B400086878E3709F052C0DF01A758BF4F149631 |
||||||
|
:100B50002D913C9115978D919C91119728173907EC |
||||||
|
:100B600059F416962D913C91179712968D919C9160 |
||||||
|
:100B7000139728173907B1F116962D913C911797C5 |
||||||
|
:100B800014968D919C91159701972817390751F16B |
||||||
|
:100B90001696CD91DC9117978EE7888316962D9146 |
||||||
|
:100BA0003C91179712968D919C91139728173907AE |
||||||
|
:100BB00021F48D919C91119705C016968D919C9171 |
||||||
|
:100BC0001797019617969C938E93169791E0918BA9 |
||||||
|
:100BD0008389863020F4128A8F5F838B01C0928BC9 |
||||||
|
:100BE00081E0BFC0118A128A138ABAC08F778F370B |
||||||
|
:100BF00011F4118A09C08289882311F02A9A01C050 |
||||||
|
:100C00002A988189811103C0128A138AE8C08685D7 |
||||||
|
:100C1000982F9F739E3309F4E2C080FF03C0808940 |
||||||
|
:100C20008068808B97859F5F97878089983008F4CC |
||||||
|
:100C30009DC0DF01A758BF4F92E8980F923018F07F |
||||||
|
:100C40008B3109F046C014962D913C9115978D91EA |
||||||
|
:100C50009C9111972817390759F416962D913C91BC |
||||||
|
:100C6000179712968D919C9113972817390759F170 |
||||||
|
:100C700016962D913C91179714968D919C911597EE |
||||||
|
:100C8000019728173907F9F01696CD91DC9117973F |
||||||
|
:100C90008BE1888316962D913C91179712968D9132 |
||||||
|
:100CA0009C9113972817390721F48D919C911197E6 |
||||||
|
:100CB00005C016968D919C911797019617969C9357 |
||||||
|
:100CC0008E93169706C0118A128A138A2A9880E09A |
||||||
|
:100CD00001C081E014964D915C9115972D913C9146 |
||||||
|
:100CE00011974217530759F416964D915C91179737 |
||||||
|
:100CF00012962D913C9113974217530769F116965E |
||||||
|
:100D00004D915C91179714962D913C911597215018 |
||||||
|
:100D100031094217530701F190891696CD91DC9164 |
||||||
|
:100D20001797988316964D915C91179712962D916F |
||||||
|
:100D30003C9113974217530721F42D913C91119741 |
||||||
|
:100D400006C016962D913C9117972F5F3F4F17962F |
||||||
|
:100D50003C932E93169705C0118A128A138A2A98FB |
||||||
|
:100D600080E0108A1786882321F039C08695808B11 |
||||||
|
:100D700036C0EF01C453DF4F888199818160998328 |
||||||
|
:100D80008883DF01A758BF4F14962D913C9115978A |
||||||
|
:100D90008D919C9111972817390759F416962D912A |
||||||
|
:100DA0003C91179712968D919C91139728173907AC |
||||||
|
:100DB00061F016962D913C91179714968D919C9108 |
||||||
|
:100DC000159701972817390751F416968D919C9124 |
||||||
|
:100DD000179715969C938E9314971982188281A168 |
||||||
|
:100DE000813618F011A2128A2A98DF91CF911F91B3 |
||||||
|
:100DF0000F91FF90EF9008951F920F920FB60F92F0 |
||||||
|
:100E000011242F933F934F935F936F937F938F930F |
||||||
|
:100E10009F93AF93BF93EF93FF9380E286BB609164 |
||||||
|
:100E2000780070917900769567957695679560580A |
||||||
|
:100E300080919C0690919D060E94EA048091130186 |
||||||
|
:100E4000882349F080919C0690919D060E94C303DF |
||||||
|
:100E5000807F886001C080E88BB980918606909180 |
||||||
|
:100E60008706A0918806B09189060196A11DB11D43 |
||||||
|
:100E70008093860690938706A0938806B093890690 |
||||||
|
:100E8000FF91EF91BF91AF919F918F917F916F9162 |
||||||
|
:100E90005F914F913F912F910F900FBE0F901F9038 |
||||||
|
:100EA00018950F931F93CF938C01C62F82E8860F5E |
||||||
|
:100EB000823010F06B3139F4F801608171818BE17F |
||||||
|
:100EC00090E00E946C14F801608171818C2F90E099 |
||||||
|
:100ED000CF911F910F910C946C140F931F93CF938C |
||||||
|
:100EE000DF938C010F5A1D4FD8012D913C91119722 |
||||||
|
:100EF000232B39F1EC01498550E01D972D913C9150 |
||||||
|
:100F000011972C503109241B350B11963C932E93CD |
||||||
|
:100F1000FC016D917C9111979F01281B390B2617BD |
||||||
|
:100F2000370738F49F01240F351FE9012A852193E3 |
||||||
|
:100F3000F0CFD801ED91FC91DF91CF911F910F91EE |
||||||
|
:100F40000994DF91CF911F910F910895AF92BF92B5 |
||||||
|
:100F5000CF92DF92EF92FF920F931F93CF93DF9385 |
||||||
|
:100F60005B016A017C0126EBE21A2DEFF20A2FEFFA |
||||||
|
:100F70003FEFF70131832083EC01C05CDD4F6881D6 |
||||||
|
:100F800079818EE790E00E946C148501CA0CDB1C0D |
||||||
|
:100F90000C151D0539F0F80161918F01CE010E94F9 |
||||||
|
:100FA0005107F6CFF701608111816095CE010E9453 |
||||||
|
:100FB0005107612F6095CE010E94510768817981A8 |
||||||
|
:100FC0008EE790E0DF91CF911F910F91FF90EF900E |
||||||
|
:100FD000DF90CF90BF90AF900C946C14CF93DF93C1 |
||||||
|
:100FE000EEE6F2E0DC01EF011D922197E9F7FC014A |
||||||
|
:100FF000E05CFD4F518340837196318320833F979E |
||||||
|
:101000007183608338962FEF3FEF318320833297CF |
||||||
|
:1010100031832083EEE9F6E031832083338322831A |
||||||
|
:10102000DF91CF9108952F923F924F925F926F92EE |
||||||
|
:101030007F928F929F92AF92BF92CF92DF92EF9268 |
||||||
|
:10104000FF920F931F93CF93DF93CDB7DEB728970F |
||||||
|
:101050000FB6F894DEBF0FBECDBF982F917083FB03 |
||||||
|
:10106000442440F8512C81FBAA24A0F8B12C920111 |
||||||
|
:101070002A253B253A83298384FB332730F93B8398 |
||||||
|
:101080001C8286FB662460F8712C82FB002700F925 |
||||||
|
:1010900010E085FB882480F8912C8078A82FB0E0A0 |
||||||
|
:1010A0001D01220C232C221C3308862F817063FB28 |
||||||
|
:1010B000222720F930E061FB442740F950E0422725 |
||||||
|
:1010C000532764FBEE27E0F9F0E066FBEE24E0F83E |
||||||
|
:1010D000F12C62FBCC24C0F8D12C65FB772770F98A |
||||||
|
:1010E0007D831E82607870E0660F672F661F770B26 |
||||||
|
:1010F000DF01AE25BF25B887AF83ED81FE81AE2726 |
||||||
|
:10110000BF27A627B7275A01AC24BD246A257B2513 |
||||||
|
:101110006295660F660F607CA62EF0E8AF9FA01860 |
||||||
|
:101120001124AB81BC81A625B7256A2F6170692780 |
||||||
|
:1011300079817170562F57276A2D650FA980BA8063 |
||||||
|
:10114000A026B126A22474E0A79E600D1124A82534 |
||||||
|
:10115000B925A225B325E8E0AE9F600D1124EF81EB |
||||||
|
:10116000E170E82741704E27F0E14F9F600D112498 |
||||||
|
:101170004D815E814C255D25417084272E253F25BC |
||||||
|
:101180002170282730E2239F600D1124082519259E |
||||||
|
:101190000170802F8927A30144255525942F917034 |
||||||
|
:1011A0008927880F860F28960FB6F894DEBF0FBEEA |
||||||
|
:1011B000CDBFDF91CF911F910F91FF90EF90DF9006 |
||||||
|
:1011C000CF90BF90AF909F908F907F906F905F90E7 |
||||||
|
:1011D0004F903F902F9008952F923F924F925F92A1 |
||||||
|
:1011E0006F927F928F929F92AF92BF92CF92DF9237 |
||||||
|
:1011F000EF92FF920F931F93CF93DF9300D000D015 |
||||||
|
:10120000CDB7DEB79C01DC01AB5ABD4F9C91F90113 |
||||||
|
:10121000E90FF11DEA5AFD4F60839F5F9C939C305C |
||||||
|
:1012200009F088C34901C901805C9D4F9C838B8371 |
||||||
|
:101230001196BA83A9839C91892F881F8827881FBC |
||||||
|
:101240008795882787955901B9EAAB1ABDEFBB0A84 |
||||||
|
:10125000F5014081942F991F9927991F682FF0E479 |
||||||
|
:101260009F9F600D1124690120EAC21A2DEFD20A56 |
||||||
|
:10127000D6019C91892F881F8827881F860F7401AB |
||||||
|
:10128000B7EAEB1ABDEFFB0AF7014081942F991FD3 |
||||||
|
:101290009927991FF0E29F9F800D11248401065A1F |
||||||
|
:1012A0001D4FD8014C91942F991F9927991FB0E198 |
||||||
|
:1012B0009B9F800D11243401E4EA6E1AEDEF7E0A43 |
||||||
|
:1012C000D3014C91942F991F9927991FB8E09B9FA8 |
||||||
|
:1012D000800D11242401E3EA4E1AEDEF5E0AD201DB |
||||||
|
:1012E0009C91692F661F6627661F660F660F680F41 |
||||||
|
:1012F0001401B1EA2B1ABDEF3B0AF1018081982F4E |
||||||
|
:10130000991F9927991F990F690F8B819C810E94C2 |
||||||
|
:101310005107A981BA819C9181E096FF80E0879571 |
||||||
|
:1013200088278795F501408191E046FF90E0682F7E |
||||||
|
:10133000F0E49F9F600D1124D6019C9181E096FFFF |
||||||
|
:1013400080E0860FF701408191E046FF90E0F0E2F7 |
||||||
|
:101350009F9F800D1124D8014C9191E046FF90E0B1 |
||||||
|
:10136000B0E19B9F800D1124F301408191E046FF85 |
||||||
|
:1013700090E0F8E09F9F800D1124D2019C9161E0E4 |
||||||
|
:1013800096FF60E0660F660F680FF101808191E0C3 |
||||||
|
:1013900086FF90E0990F690F8B819C810E94510715 |
||||||
|
:1013A000A981BA819C9181E095FF80E0879588278B |
||||||
|
:1013B0008795F501408191E045FF90E0682FF0E4CA |
||||||
|
:1013C0009F9F600D1124D6019C9181E095FF80E0E4 |
||||||
|
:1013D000860FF701408191E045FF90E0F0E29F9F8A |
||||||
|
:1013E000800D1124D8014C9191E045FF90E0B0E1CF |
||||||
|
:1013F0009B9F800D1124F301408191E045FF90E017 |
||||||
|
:10140000F8E09F9F800D1124D2019C9161E095FF2F |
||||||
|
:1014100060E0660F660F680FF101808191E085FF43 |
||||||
|
:1014200090E0990F690F8B819C810E945107A981DF |
||||||
|
:10143000BA819C9181E094FF80E087958827879509 |
||||||
|
:10144000F501408191E044FF90E0682FF0E49F9F18 |
||||||
|
:10145000600D1124D6019C9181E094FF80E0860FFD |
||||||
|
:10146000F701408191E044FF90E0F0E29F9F800D02 |
||||||
|
:101470001124D8014C9191E044FF90E0B0E19B9F92 |
||||||
|
:10148000800D1124F301408191E044FF90E0F8E0E9 |
||||||
|
:101490009F9F800D1124D2019C9161E094FF60E038 |
||||||
|
:1014A000660F660F680FF101808191E084FF90E084 |
||||||
|
:1014B000990F690F8B819C810E945107C4018A5A40 |
||||||
|
:1014C0009D4F9A838983DC019C9181E093FF80E0AA |
||||||
|
:1014D0008795882787955401B9EAAB1ABDEFBB0AF7 |
||||||
|
:1014E000F501408191E043FF90E0682FF0E49F9F79 |
||||||
|
:1014F000600D1124640120EAC21A2DEFD20AD60130 |
||||||
|
:101500009C9181E093FF80E0860F7401B7EAEB1AAB |
||||||
|
:10151000BDEFFB0AF701408191E043FF90E0F0E26C |
||||||
|
:101520009F9F800D11248401065A1D4FD8014C91B4 |
||||||
|
:1015300091E043FF90E0B0E19B9F800D11243401C6 |
||||||
|
:10154000E4EA6E1AEDEF7E0AD3014C9191E043FF7D |
||||||
|
:1015500090E0B8E09B9F800D11242401E3EA4E1A2D |
||||||
|
:10156000EDEF5E0AD2019C9161E093FF60E0660FAF |
||||||
|
:10157000660F680F1401B1EA2B1ABDEF3B0AF101A7 |
||||||
|
:10158000808191E083FF90E0990F690F8B819C81AE |
||||||
|
:101590000E945107A981BA819C9181E092FF80E06D |
||||||
|
:1015A000879588278795F501408191E042FF90E07B |
||||||
|
:1015B000682FF0E49F9F600D1124D6019C9181E07B |
||||||
|
:1015C00092FF80E0860FF701408191E042FF90E0BA |
||||||
|
:1015D000F0E29F9F800D1124D8014C9191E042FFD1 |
||||||
|
:1015E00090E0B0E19B9F800D1124F301408191E0D8 |
||||||
|
:1015F00042FF90E0F8E09F9F800D1124D2019C9162 |
||||||
|
:1016000061E092FF60E0660F660F680FF101808174 |
||||||
|
:1016100091E082FF90E0990F690F8B819C810E947D |
||||||
|
:101620005107A981BA819C9181E091FF80E0879563 |
||||||
|
:1016300088278795F501408191E041FF90E0682F70 |
||||||
|
:10164000F0E49F9F600D1124D6019C9181E091FFF1 |
||||||
|
:1016500080E0860FF701408191E041FF90E0F0E2E9 |
||||||
|
:101660009F9F800D1124D8014C9191E041FF90E0A3 |
||||||
|
:10167000B0E19B9F800D1124F301408191E041FF77 |
||||||
|
:1016800090E0F8E09F9F800D1124D2019C9161E0D1 |
||||||
|
:1016900091FF60E0660F660F680FF101808191E0B5 |
||||||
|
:1016A00081FF90E0990F690F8B819C810E94510707 |
||||||
|
:1016B000A981BA819C91F501808181708295880F02 |
||||||
|
:1016C000880F807CF0E89F9F80191124D6019C919F |
||||||
|
:1016D0009170890FF70190819170F0E29F9F800DCA |
||||||
|
:1016E0001124D8019C919170B0E19B9F800D112431 |
||||||
|
:1016F000F30190819170F8E09F9F800D1124D20139 |
||||||
|
:101700006C916170660F660F680FF10190819170A6 |
||||||
|
:10171000990F690F8B819C810E9451075401F8EA4F |
||||||
|
:10172000AF1AFDEFBF0AD5016C916401B5EACB1A7F |
||||||
|
:10173000BDEFDB0AF60170817401F2EAEF1AFDEFEA |
||||||
|
:10174000FF0AD7019C9184010F591D4FF801408178 |
||||||
|
:10175000862F881F8827881F87958827879551E0BF |
||||||
|
:1017600063FF50E0682FF0E45F9F600D112481E07B |
||||||
|
:1017700043FF80E0860F572F551F5527551F20E246 |
||||||
|
:10178000529F800D112451E073FF50E0A0E15A9F59 |
||||||
|
:10179000800D1124592F551F5527551FB8E05B9F09 |
||||||
|
:1017A000800D112461E093FF60E0660F660F680F03 |
||||||
|
:1017B000942F991F9927991F990F690F8B819C81ED |
||||||
|
:1017C0000E945107F5016081D6017C91F70190815B |
||||||
|
:1017D000D8014C9181E066FF80E087958827879546 |
||||||
|
:1017E00051E062FF50E0682FB0E45B9F600D112470 |
||||||
|
:1017F00081E042FF80E0860F51E076FF50E0E0E2BA |
||||||
|
:101800005E9F800D112451E072FF50E0F0E15F9F78 |
||||||
|
:10181000800D112451E096FF50E028E0529F800D8A |
||||||
|
:10182000112461E092FF60E0660F660F680F91E09F |
||||||
|
:1018300046FF90E0990F690F8B819C810E945107B0 |
||||||
|
:10184000D5016C91F6017081D7019C91F80140811E |
||||||
|
:1018500081E065FF80E087958827879551E061FFEB |
||||||
|
:1018600050E0682FF0E45F9F600D112481E041FF9C |
||||||
|
:1018700080E0860F51E075FF50E020E2529F800D1E |
||||||
|
:10188000112451E071FF50E0A0E15A9F800D112416 |
||||||
|
:1018900051E095FF50E0B8E05B9F800D112461E0BE |
||||||
|
:1018A00091FF60E0660F660F680F91E045FF90E0E2 |
||||||
|
:1018B000990F690F8B819C810E945107D501EC9192 |
||||||
|
:1018C000D6017C91D7015C91D8014C919E2F9170EB |
||||||
|
:1018D000872F81708295807FB0E49B9F800D1124BB |
||||||
|
:1018E000642F6170860F952F9170990F990F890F52 |
||||||
|
:1018F00091E0E4FF90E0E0E89E9F8019112491E0E0 |
||||||
|
:1019000074FF90E0F0E29F9F800D112491E054FF5E |
||||||
|
:1019100090E028E0929F800D112461E044FF60E098 |
||||||
|
:10192000660F680F8B819C810E945107F401EB5A6E |
||||||
|
:10193000FD4F10820F900F900F900F90DF91CF917D |
||||||
|
:101940001F910F91FF90EF90DF90CF90BF90AF90DD |
||||||
|
:101950009F908F907F906F905F904F903F902F90CF |
||||||
|
:1019600008951F93CF93DF93EC01162F0E94EC088C |
||||||
|
:10197000DE01A65BBD4F2D913C911197F901E12746 |
||||||
|
:10198000FF27EE0FFF1FE851FF4F85919491232F02 |
||||||
|
:101990003327282739272D933C93809115018823DD |
||||||
|
:1019A00049F0612F809114010E941308682FCE0125 |
||||||
|
:1019B0000E94EC08109314019091150181E0892791 |
||||||
|
:1019C00080931501DF91CF911F9108950F931F937D |
||||||
|
:1019D000CF93DF93EC018B01FB0161810E94B10C7D |
||||||
|
:1019E000F8016081CE010E94B10CF8016381CE0143 |
||||||
|
:1019F0000E94B10CF8016281CE01DF91CF911F915D |
||||||
|
:101A00000F910C94B10C6F927F928F929F92AF9234 |
||||||
|
:101A1000BF92CF92DF92EF92FF920F931F93CF93DB |
||||||
|
:101A2000DF93CDB7DEB72A970FB6F894DEBF0FBEAF |
||||||
|
:101A3000CDBF8C013A016901FC01EB5AFD4F1082C8 |
||||||
|
:101A40005C0186EBA81A8DEFB80A8FEF9FEFF501C6 |
||||||
|
:101A500091838083CE0101967C018AE0F701119287 |
||||||
|
:101A60008A95E9F7F801EE5BFD4F0190F081E02DDA |
||||||
|
:101A7000808191819A838983828193819C838B83E6 |
||||||
|
:101A8000FB01808191819E838D83828193819887E0 |
||||||
|
:101A90008F838CE0820F877011F41A8603C098E060 |
||||||
|
:101AA000981B9A874801F0EC8F1AFDEF9F0AF4010A |
||||||
|
:101AB000608171818EE790E00E946C14B701C801CB |
||||||
|
:101AC0000E94E60CBE016B5F7F4FC8010E94E60CCE |
||||||
|
:101AD0006985C8010E94B10C6A85C8010E94B10CD9 |
||||||
|
:101AE0008A859FEF980F9A87882311F060E0F5CFE1 |
||||||
|
:101AF0007301C60CD71CEC14FD0439F0F701619199 |
||||||
|
:101B00007F01C8010E94B10CF6CFF5016081F18020 |
||||||
|
:101B10006095C8010E94B10C6F2D6095C8010E94AC |
||||||
|
:101B2000B10CF401608171818EE790E00E946C1429 |
||||||
|
:101B30002A960FB6F894DEBF0FBECDBFDF91CF91CE |
||||||
|
:101B40001F910F91FF90EF90DF90CF90BF90AF90DB |
||||||
|
:101B50009F908F907F906F9008959A01AB016EE9EE |
||||||
|
:101B600076E00C94030D6F927F928F929F92AF92CA |
||||||
|
:101B7000BF92CF92DF92EF92FF920F931F93CF937A |
||||||
|
:101B8000DF938C010E591D4FF801B080EC01CD5947 |
||||||
|
:101B9000DD4F5881DC01AC59BD4FDC903C01FBE9C5 |
||||||
|
:101BA0006F1AFDEF7F0AF30170819C012A593D4FA6 |
||||||
|
:101BB000F90160812F5F3F4FF90140812F5F3F4F57 |
||||||
|
:101BC000F90130817C01F7E9EF1AFDEFFF0AF70117 |
||||||
|
:101BD00020817C01F6E9EF1AFDEFFF0AF701C080D2 |
||||||
|
:101BE0007C01F5E9EF1AFDEFFF0AF701A0807C0107 |
||||||
|
:101BF000F4E9EF1AFDEFFF0AF70190807C01F3E9A9 |
||||||
|
:101C0000EF1AFDEFFF0AF701F080EB2CEE1CEE243B |
||||||
|
:101C1000EE1CE794EE24E794852E881C8824881C0B |
||||||
|
:101C2000F0E48F9EE00C11248E2CE22EEE1CEE24AC |
||||||
|
:101C3000EE1CE80C8D2C881C8824881CE0E28E9E0B |
||||||
|
:101C4000E00C1124872E881C8824881CF0E18F9ECC |
||||||
|
:101C5000E00C1124862E881C8824881CE8E08E9EC7 |
||||||
|
:101C6000E00C1124842E881C8824881C880C880C85 |
||||||
|
:101C7000E80C832E881C8824881C880CE80CF8014A |
||||||
|
:101C8000E08211E0B6FE10E017951127179501E0EC |
||||||
|
:101C900056FF00E0F0E40F9F100D1124012F11E01A |
||||||
|
:101CA00026FF10E0100F01E0D6FE00E0E0E20E9FFC |
||||||
|
:101CB000100D112401E076FF00E0F0E10F9F100D00 |
||||||
|
:101CC000112401E066FF00E0E8E00E9F100D1124F2 |
||||||
|
:101CD00001E046FF00E0000F000F100F01E036FFAB |
||||||
|
:101CE00000E0000F100F1883CC2DCC1FCC27CC1F89 |
||||||
|
:101CF000C795CC27C795DA2DDD1FDD27DD1FF0E462 |
||||||
|
:101D0000DF9FC00D1124DC2FC1E0F6FEC0E0CD0F37 |
||||||
|
:101D1000D92DDD1FDD27DD1FE0E2DE9FC00D112480 |
||||||
|
:101D2000DF2DDD1FDD27DD1FF0E1DF9FC00D11245A |
||||||
|
:101D3000D1E0C6FED0E0E8E0DE9FC00D1124D1E086 |
||||||
|
:101D4000A6FED0E0DD0FDD0FCD0FD1E096FED0E096 |
||||||
|
:101D5000DD0FCD0FCC93A1E0B5FEA0E0A795AA279B |
||||||
|
:101D6000A795B1E055FFB0E0F0E4BF9FA00D1124AE |
||||||
|
:101D7000BA2FA1E025FFA0E0AB0FB1E0D5FEB0E0A7 |
||||||
|
:101D8000C0E2BC9FA00D1124B1E075FFB0E0E0E11E |
||||||
|
:101D9000BE9FA00D1124B1E065FFB0E0F8E0BF9F49 |
||||||
|
:101DA000A00D1124B1E045FFB0E0BB0FBB0FAB0F9E |
||||||
|
:101DB000B1E035FFB0E0BB0FAB0FF301A083FC0136 |
||||||
|
:101DC000EA59FD4FA1E0B4FEA0E0A795AA27A79588 |
||||||
|
:101DD000B1E054FFB0E0C0E4BC9FA00D1124BA2FC5 |
||||||
|
:101DE000A1E024FFA0E0AB0FB1E0D4FEB0E0C0E280 |
||||||
|
:101DF000BC9FA00D1124B1E074FFB0E0C0E1BC9F16 |
||||||
|
:101E0000A00D1124B1E064FFB0E0C8E0BC9FA00DBC |
||||||
|
:101E10001124B1E044FFB0E0BB0FBB0FAB0FB1E04A |
||||||
|
:101E200034FFB0E0BB0FAB0FA083FC01E959FD4FBD |
||||||
|
:101E3000A1E0C5FEA0E0A795AA27A795B1E0A5FE61 |
||||||
|
:101E4000B0E0C0E4BC9FA00D1124BA2FA1E0F4FEC5 |
||||||
|
:101E5000A0E0AB0FB1E095FEB0E0C0E2BC9FA00DEA |
||||||
|
:101E60001124B1E0F5FEB0E0C0E1BC9FA00D11244B |
||||||
|
:101E7000B1E0C4FEB0E0C8E0BC9FA00D1124B1E009 |
||||||
|
:101E8000A4FEB0E0BB0FBB0FAB0FB1E094FEB0E01F |
||||||
|
:101E9000BB0FAB0FA083FC01E859FD4FA1E0B3FEDF |
||||||
|
:101EA000A0E0A795AA27A795B1E053FFB0E0C0E452 |
||||||
|
:101EB000BC9FA00D1124BA2FA1E023FFA0E0AB0F1F |
||||||
|
:101EC000B1E0D3FEB0E0C0E2BC9FA00D1124B1E0B0 |
||||||
|
:101ED00073FFB0E0C0E1BC9FA00D1124B1E063FF2F |
||||||
|
:101EE000B0E0C8E0BC9FA00D1124B1E043FFB0E01A |
||||||
|
:101EF000BB0FBB0FAB0FB1E033FFB0E0BB0FAB0FBD |
||||||
|
:101F0000A083FC01E759FD4FA1E0B2FEA0E0A79538 |
||||||
|
:101F1000AA27A795B1E052FFB0E0C0E4BC9FA00D96 |
||||||
|
:101F20001124BA2FA1E022FFA0E0AB0FB1E0D2FE56 |
||||||
|
:101F3000B0E0C0E2BC9FA00D1124B1E072FFB0E0A0 |
||||||
|
:101F4000C0E1BC9FA00D1124B1E062FFB0E0C8E089 |
||||||
|
:101F5000BC9FA00D1124B1E042FFB0E0BB0FBB0F4E |
||||||
|
:101F6000AB0FB1E032FFB0E0BB0FAB0FA083FC01C1 |
||||||
|
:101F7000E659FD4FA1E0C3FEA0E0A795AA27A795CB |
||||||
|
:101F8000B1E0A3FEB0E0C0E4BC9FA00D1124BA2FC5 |
||||||
|
:101F9000A1E0F2FEA0E0AB0FB1E093FEB0E0C0E242 |
||||||
|
:101FA000BC9FA00D1124B1E0F3FEB0E0C0E1BC9FE6 |
||||||
|
:101FB000A00D1124B1E0C2FEB0E0C8E0BC9FA00DAE |
||||||
|
:101FC0001124B1E0A2FEB0E0BB0FBB0FAB0FB1E03C |
||||||
|
:101FD00092FEB0E0BB0FAB0FA083FC01E559FD4FB3 |
||||||
|
:101FE000A1E0B1FEA0E0A795AA27A795B1E051FF17 |
||||||
|
:101FF000B0E0C0E4BC9FA00D1124BA2FA1E021FFE6 |
||||||
|
:10200000A0E0AB0FB1E0D1FEB0E0C0E2BC9FA00DFC |
||||||
|
:102010001124B1E071FFB0E0C0E1BC9FA00D11241C |
||||||
|
:10202000B1E061FFB0E0C8E0BC9FA00D1124B1E0B9 |
||||||
|
:1020300041FFB0E0BB0FBB0FAB0FB1E031FFB0E031 |
||||||
|
:10204000BB0FAB0FA083FC01E459FD4F51705295BB |
||||||
|
:10205000550F550F507CA0E8BA9E501911242170DD |
||||||
|
:10206000250F5D2D5170C0E25C9F200D1124717011 |
||||||
|
:1020700050E1759F200D11246170A8E06A9F200D2A |
||||||
|
:1020800011244170440F440F240F3170330F230F7C |
||||||
|
:10209000208331968C2D81709A2D9170990F990F14 |
||||||
|
:1020A000C8E08C9F900D11248F2D8170980F292DE1 |
||||||
|
:1020B0002170220F920F81E0C1FE80E020E8829F14 |
||||||
|
:1020C0009019112481E0A1FE80E050E4859F900DDD |
||||||
|
:1020D000112481E091FE80E0A0E28A9F900D1124FE |
||||||
|
:1020E00081E0F1FE80E0C0E18C9F900D112490838F |
||||||
|
:1020F000DF91CF911F910F91FF90EF90DF90CF90E4 |
||||||
|
:10210000BF90AF909F908F907F906F9008952F9287 |
||||||
|
:102110003F924F925F926F927F928F929F92AF9277 |
||||||
|
:10212000BF92CF92DF92EF92FF920F931F93CF93C4 |
||||||
|
:10213000DF93CDB7DEB72B970FB6F894DEBF0FBE97 |
||||||
|
:10214000CDBF8C014C012DEA821A2DEF920A5C0161 |
||||||
|
:102150003CEAA31A3DEFB30A7C014CEBE41A4DEFC5 |
||||||
|
:10216000F40A9C01235B3D4F3C832B831C0133E924 |
||||||
|
:10217000231A3DEF330A9C01245B3D4F38872F83A0 |
||||||
|
:10218000F801E05CFD4F808191810E942E149C013A |
||||||
|
:10219000019609F45BC1D4014C91442309F4F2C0C7 |
||||||
|
:1021A0002B31310529F4F5018081882309F4EAC037 |
||||||
|
:1021B000F801EA5BFD4F80819181019691838083D4 |
||||||
|
:1021C0006CE070E00E947913892B09F0DBC02B31A1 |
||||||
|
:1021D000310529F0C9018E579109029710F4D501F4 |
||||||
|
:1021E0001C92F70180819181F801EE59FD4F8D56C7 |
||||||
|
:1021F0009240DF01A80FB91F4C914193E215F305FE |
||||||
|
:10220000C1F7D1012C93C8010E94B30DF7014080A2 |
||||||
|
:102210005180F3E04F1A5108D7014D925C9268014A |
||||||
|
:10222000BCE9CB1ABDEFDB0A612C712C9801285B4D |
||||||
|
:102230003D4F3E832D83F6013297208131963081C8 |
||||||
|
:10224000D6019C91632F822F29873A879B870E9412 |
||||||
|
:102250001308EF81F88580839B85892729853A8536 |
||||||
|
:10226000882309F451C0982F9F70998382958F70AD |
||||||
|
:102270008A83FE01319680E090E041915FEF540F38 |
||||||
|
:102280005230E8F14430D9F14830C9F1433009F413 |
||||||
|
:10229000DBC0453041F0463059F0473071F050E036 |
||||||
|
:1022A000493089F002C052E013C04A3071F002C0D8 |
||||||
|
:1022B00054E00EC04B3059F002C058E009C04C3019 |
||||||
|
:1022C00009F4BDC005C050E103C050E201C050E4B4 |
||||||
|
:1022D0008130910509F0AFC025274423A9F0AB81D7 |
||||||
|
:1022E000BC814D915D916D917C9113974F5F5F4FD4 |
||||||
|
:1022F0006F4F7F4F4D935D936D937C931397019731 |
||||||
|
:1023000019F081E090E0B9CFED81FE8140815181EB |
||||||
|
:10231000FA01E227FF27EE0FFF1FE851FF4F6591FB |
||||||
|
:102320007491852F992786279727FC01E327FF279C |
||||||
|
:10233000EE0FFF1FE851FF4F45915491892F9927C8 |
||||||
|
:1023400084279527AD81BE818D939C93C30163E063 |
||||||
|
:1023500070E00E948D13660F771F640D751D600F6E |
||||||
|
:10236000711FFB013897208331963083B3E06B0EE9 |
||||||
|
:10237000711CE3E0CE0ED11CFCE06F16710409F075 |
||||||
|
:102380005ACFFECED5018C9181113BC02E3731053D |
||||||
|
:1023900059F5F701808191819801285B3D4F6901D2 |
||||||
|
:1023A0000C9750F0D9018D919C91883B904F21F46E |
||||||
|
:1023B0002A9AC8010E946D0781E0F40180838FEFA3 |
||||||
|
:1023C0009FEFD6018D939C93F70111821082F80143 |
||||||
|
:1023D000EA5BFD4F11821082AB81BC811D921D9280 |
||||||
|
:1023E0001D921C921397CCCE2F37310519F4F401AE |
||||||
|
:1023F0001082C6CE2B31310521F481E0D5018C93BA |
||||||
|
:10240000BFCE4423A1F0F701808191818034F2E0B6 |
||||||
|
:102410009F0758F4AC014F5F5F4FD7014D935C931A |
||||||
|
:10242000F801E80FF91F208302C0F4011082D501E2 |
||||||
|
:102430001C92A6CE50E83527411151CF60CF813094 |
||||||
|
:102440009105C1F720584BCF51E042CF2B960FB6E4 |
||||||
|
:10245000F894DEBF0FBECDBFDF91CF911F910F91DA |
||||||
|
:10246000FF90EF90DF90CF90BF90AF909F908F90B4 |
||||||
|
:102470007F906F905F904F903F902F900895909332 |
||||||
|
:10248000A3068093A20650938B0640938A0670930E |
||||||
|
:10249000A6066093A5060895EF92FF920F931F93EF |
||||||
|
:1024A000CF93DF93EC018C017C018CEBE81A8DEF6C |
||||||
|
:1024B000F80AF7018081918198012C1B3D0B2817A8 |
||||||
|
:1024C000390758F4F80181918F0160918A06709163 |
||||||
|
:1024D0008B0690E00E946C14ECCFDF91CF911F919E |
||||||
|
:1024E0000F91FF90EF9008954F925F926F927F92BD |
||||||
|
:1024F0008F929F92AF92BF92EF92FF920F931F9392 |
||||||
|
:10250000CF93DF93EC018B017A01E091A506F09166 |
||||||
|
:10251000A6068189811145C00E941E149091000178 |
||||||
|
:10252000891798F4A701B801CE01DF91CF911F91CF |
||||||
|
:102530000F91FF90EF90BF90AF909F908F907F9002 |
||||||
|
:102540006F905F904F900C94AD0D8FB7F894809082 |
||||||
|
:10255000860690908706A0908806B09089068FBF67 |
||||||
|
:102560002091010130910201409103015091040139 |
||||||
|
:10257000AAE0B0E00E946E132FB7F8944090860650 |
||||||
|
:102580005090870660908806709089062FBF481883 |
||||||
|
:1025900059086A087B08461657066806790664F3E8 |
||||||
|
:1025A000B4CFE091A506F091A6068189882309F4AD |
||||||
|
:1025B000ACCF8091A2069091A3060E948710E09173 |
||||||
|
:1025C000A506F091A606E453FF4F80819181892BE7 |
||||||
|
:1025D00041F311821082DF91CF911F910F91FF90F3 |
||||||
|
:1025E000EF90BF90AF909F908F907F906F905F9093 |
||||||
|
:1025F0004F9008954091AC065091AD0666E171E0B0 |
||||||
|
:102600008091A2069091A3060E9474121092A706D0 |
||||||
|
:102610001092AD061092AC06089581110C94FA1236 |
||||||
|
:102620008091A7068823D9F02FB7F8948091860669 |
||||||
|
:1026300090918706A0918806B09189062FBF40919E |
||||||
|
:10264000A8065091A9066091AA067091AB06841B5A |
||||||
|
:10265000950BA60BB70BC397A105B105FCF6089522 |
||||||
|
:102660009FB7F8944091860650918706609188063E |
||||||
|
:10267000709189069FBF4093A8065093A906609366 |
||||||
|
:10268000AA067093AB0691E09093A7062091AC0642 |
||||||
|
:102690003091AD06A9014F5F5F4F5093AD06409357 |
||||||
|
:1026A000AC06F901EA5EFE4F80834433524010F0DD |
||||||
|
:1026B0000C94FA1208950E9495018AE493E00E9416 |
||||||
|
:1026C000871080E00E941002882321F00E941A02E5 |
||||||
|
:1026D0000E94301380E00E940D13EFCF0E94C313BD |
||||||
|
:1026E000A59F900DB49F900DA49F800D911D112466 |
||||||
|
:1026F0000895AA1BBB1B51E107C0AA1FBB1FA61749 |
||||||
|
:10270000B70710F0A61BB70B881F991F5A95A9F79A |
||||||
|
:1027100080959095BC01CD01089597FB072E16F486 |
||||||
|
:10272000009407D077FD09D00E94791307FC05D0EB |
||||||
|
:102730003EF4909581959F4F0895709561957F4FD8 |
||||||
|
:102740000895A1E21A2EAA1BBB1BFD010DC0AA1FF2 |
||||||
|
:10275000BB1FEE1FFF1FA217B307E407F50720F00A |
||||||
|
:10276000A21BB30BE40BF50B661F771F881F991F85 |
||||||
|
:102770001A9469F760957095809590959B01AC01CE |
||||||
|
:10278000BD01CF010895A29FB001B39FC001A39FD7 |
||||||
|
:10279000700D811D1124911DB29F700D811D11249A |
||||||
|
:1027A000911D08958F929F92AF92BF92CF92DF9228 |
||||||
|
:1027B000EF92FF92CF93DF93EC01688179818A8158 |
||||||
|
:1027C0009B81611571058105910521F464E279ED24 |
||||||
|
:1027D0008BE597E02DE133EF41E050E00E94AC142F |
||||||
|
:1027E00049015A019B01AC01A7EAB1E40E946E13B2 |
||||||
|
:1027F0006B017C01ACEEB4EFA50194010E94A7141B |
||||||
|
:10280000DC01CB018C0D9D1DAE1DBF1DB7FF03C0AC |
||||||
|
:102810000197A109B04888839983AA83BB839F77D6 |
||||||
|
:10282000DF91CF91FF90EF90DF90CF90BF90AF906E |
||||||
|
:102830009F908F9008950E94D21308958EE091E0AA |
||||||
|
:102840000E94D2130895A0E0B0E080930E0190930F |
||||||
|
:102850000F01A0931001B09311010895CF93DF935E |
||||||
|
:10286000EC012B8120FF33C026FF0AC02F7B2B8376 |
||||||
|
:102870008E819F8101969F838E838A8190E029C0FB |
||||||
|
:1028800022FF0FC0E881F9818081992787FD90950B |
||||||
|
:10289000009719F420622B831AC03196F983E883DC |
||||||
|
:1028A0000EC0EA85FB85099597FF09C02B8101962B |
||||||
|
:1028B00011F080E201C080E1822B8B8308C02E8161 |
||||||
|
:1028C0003F812F5F3F4F3F832E83992702C08FEFB9 |
||||||
|
:1028D0009FEFDF91CF9108950F931F93CF93DF93D5 |
||||||
|
:1028E000FB01238121FD03C08FEF9FEF28C022FF52 |
||||||
|
:1028F00016C046815781248135814217530744F41D |
||||||
|
:10290000A081B1819D012F5F3F4F318320838C9344 |
||||||
|
:10291000268137812F5F3F4F3783268310C0EB011D |
||||||
|
:10292000092F182F0084F185E02D0995892BE1F6F8 |
||||||
|
:102930008E819F8101969F838E83812F902FDF91BF |
||||||
|
:10294000CF911F910F910895B7FF0C946E130E94C1 |
||||||
|
:102950006E13821B930B0895052E97FB1EF40094B3 |
||||||
|
:102960000E94C31457FD07D00E94A11307FC03D097 |
||||||
|
:102970004EF40C94C31450954095309521953F4FDB |
||||||
|
:102980004F4F5F4F089590958095709561957F4F5B |
||||||
|
:0A2990008F4F9F4F0895F894FFCF7A |
||||||
|
:10299A00FFC8000000320000005E010000FE0100D6 |
||||||
|
:0229AA0000002B |
||||||
|
:00000001FF |
@ -0,0 +1,688 @@ |
|||||||
|
:100000000C9474010C9491010C9491010C94910145 |
||||||
|
:100010000C9491010C9491010C9491010C94910118 |
||||||
|
:100020000C9491010C9491010C9491010C94910108 |
||||||
|
:100030000C9491010C9491010C9491010C949101F8 |
||||||
|
:100040000C9491010C9491010C9491010C949101E8 |
||||||
|
:100050000C9491010C94FC060C9491010C94910168 |
||||||
|
:100060000C9491010C949101808183848687898A04 |
||||||
|
:100070008C8E8F9192949597989A9B9D9EA0A2A307 |
||||||
|
:10008000A5A6A7A9AAACADAFB0B2B3B5B6B7B9BA79 |
||||||
|
:10009000BCBDBEC0C1C2C4C5C6C8C9CACBCDCECF07 |
||||||
|
:1000A000D0D2D3D4D5D6D7D9DADBDCDDDEDFE0E1C0 |
||||||
|
:1000B000E2E3E4E5E6E7E8E9EAEAEBECEDEEEEEFB1 |
||||||
|
:1000C000F0F1F1F2F3F3F4F5F5F6F6F7F8F8F9F9E3 |
||||||
|
:1000D000FAFAFAFBFBFCFCFCFDFDFDFDFEFEFEFE5C |
||||||
|
:1000E000FEFFFFFFFFFFFFFF0000891112239B327D |
||||||
|
:1000F0002446AD573665BF74488CC19D5AAFD3BEF8 |
||||||
|
:100100006CCAE5DB7EE9F7F88110080193331A2207 |
||||||
|
:10011000A5562C47B7753E64C99C408DDBBF52AED7 |
||||||
|
:10012000EDDA64CBFFF976E802218B3010029913E7 |
||||||
|
:100130002667AF763444BD554AADC3BC588ED19FB7 |
||||||
|
:100140006EEBE7FA7CC8F5D983310A2091121803C7 |
||||||
|
:10015000A7772E66B5543C45CBBD42ACD99E508F97 |
||||||
|
:10016000EFFB66EAFDD874C904428D5316619F7097 |
||||||
|
:100170002004A9153227BB364CCEC5DF5EEDD7FC77 |
||||||
|
:100180006888E1997AABF3BA85520C4397711E6087 |
||||||
|
:10019000A1142805B3373A26CDDE44CFDFFD56EC57 |
||||||
|
:1001A000E9986089FBBB72AA06638F7214409D5167 |
||||||
|
:1001B0002225AB343006B9174EEFC7FE5CCCD5DD37 |
||||||
|
:1001C0006AA9E3B8788AF19B87730E6295501C4147 |
||||||
|
:1001D000A3352A24B1163807CFFF46EEDDDC54CD17 |
||||||
|
:1001E000EBB962A8F99A708B088481951AA793B627 |
||||||
|
:1001F0002CC2A5D33EE1B7F04008C919522BDB3A17 |
||||||
|
:10020000644EED5F766DFF7C899400859BB712A6E6 |
||||||
|
:10021000ADD224C3BFF136E0C1184809D33B5A2AF6 |
||||||
|
:10022000E55E6C4FF77D7E6C0AA583B418869197C6 |
||||||
|
:100230002EE3A7F23CC0B5D14229CB38500AD91BD6 |
||||||
|
:10024000666FEF7E744CFD5D8BB502A499961087A6 |
||||||
|
:10025000AFF326E2BDD034C1C3394A28D11A580BB6 |
||||||
|
:10026000E77F6E6EF55C7C4D0CC685D71EE597F476 |
||||||
|
:100270002880A1913AA3B3B2444ACD5B5669DF7896 |
||||||
|
:10028000600CE91D722FFB3E8DD604C79FF516E466 |
||||||
|
:10029000A9902081BBB332A2C55A4C4BD7795E6876 |
||||||
|
:1002A000E11C680DF33F7A2E0EE787F61CC495D546 |
||||||
|
:1002B0002AA1A3B03882B193466BCF7A5448DD5956 |
||||||
|
:1002C000622DEB3C700EF91F8FF706E69DD414C526 |
||||||
|
:1002D000ABB122A0B9923083C77B4E6AD5585C4936 |
||||||
|
:1002E000E33D6A2CF11E780F11241FBECFEFD8E03A |
||||||
|
:1002F000DEBFCDBF11E0A0E0B1E0E4ECFAE202C065 |
||||||
|
:1003000005900D92A231B107D9F716E0A2E1B1E054 |
||||||
|
:1003100001C01D92A43BB107E1F70E94F3130C94B6 |
||||||
|
:1003200060150C9400000C944C12789488EB95E0C6 |
||||||
|
:100330000E941803E8E9F6E08FEF9FEF9183808336 |
||||||
|
:100340009383828323E931E048EB55E0BF018AE4DF |
||||||
|
:1003500093E00E94EE078AE896E00E94CF01EEEA61 |
||||||
|
:10036000F6E08AE896E09383828391838083AC01F0 |
||||||
|
:1003700068EB75E08AE493E00C943F129091C00022 |
||||||
|
:1003800095FFFCCF8093C60081E090E008958091B6 |
||||||
|
:10039000C00087FFFCCF8091C60090E00895CF9306 |
||||||
|
:1003A000DF93CDB7DEB72E970FB6F894DEBF0FBE42 |
||||||
|
:1003B000CDBFDC018EE0FD01982F11929A95E9F7EF |
||||||
|
:1003C0001092C50097E69093C400E0ECF0E09081B5 |
||||||
|
:1003D0009D7F908396E09093C20098E19093C10036 |
||||||
|
:1003E0009E012F5F3F4FF90111928A95E9F783E053 |
||||||
|
:1003F0008C838EEB91E09A87898787EC91E09C87CC |
||||||
|
:100400008B879EE0F90101900D929A95E1F72E9667 |
||||||
|
:100410000FB6F894DEBF0FBECDBFDF91CF91089528 |
||||||
|
:10042000811106C08091C000881F8827881F089509 |
||||||
|
:1004300080E008958091C00087FF03C08091C600CE |
||||||
|
:1004400008958FEF08950F931F93CF93DF93182F85 |
||||||
|
:10045000C0919C06D0919D06FE01E659FF4F808118 |
||||||
|
:10046000811126C080E490E098A38F8F1E8E1D8E90 |
||||||
|
:100470001C8E01E0008331960083299A20910901A6 |
||||||
|
:1004800030910A0140910B0150910C01A0EBB4E0B6 |
||||||
|
:100490000E9412146056704F8F4F9F4F20E43FE12F |
||||||
|
:1004A00040E050E00E9445143D8B2C8B00931301DB |
||||||
|
:1004B0000FB7F89420910501309106014091070192 |
||||||
|
:1004C00050910801A0EBB4E00E9412146056704FE6 |
||||||
|
:1004D0008F4F9F4F20E43FE140E050E00E944514E1 |
||||||
|
:1004E0003F8B2E8B0FBFE0919C06F0919D064FB77E |
||||||
|
:1004F000F89426A137A182A193A12817390739F4CE |
||||||
|
:1005000020A531A584A195A12817390779F060A508 |
||||||
|
:1005100071A526A137A12150310991E080E0621731 |
||||||
|
:10052000730709F090E0292F382F02C021E030E056 |
||||||
|
:100530004FBF232BC1F6E0919C06F0919D062FB78B |
||||||
|
:10054000F894A0A5B1A51C9340A551A584A195A19F |
||||||
|
:100550004817590719F482A193A103C080A591A55A |
||||||
|
:10056000019691A780A72FBF81E090E0DF91CF9106 |
||||||
|
:100570001F910F910895E0919C06F0919D064FB751 |
||||||
|
:10058000F894E758FF4F24813581868197814FBFCA |
||||||
|
:1005900028173907E9F0E0919C06F0919D069FB776 |
||||||
|
:1005A000F894E758FF4FA481B58122813381A217C7 |
||||||
|
:1005B000B30719F42081318105C0A481B5819D0163 |
||||||
|
:1005C0002F5F3F4F358324838C919FBF90E0089528 |
||||||
|
:1005D0008FEF9FEF0895109212010895109212016B |
||||||
|
:1005E0001092800089E18093810081E896E09093E9 |
||||||
|
:1005F00087008093860080911201882321F080E497 |
||||||
|
:1006000080937C0002C010927C00389840988091C2 |
||||||
|
:100610007E00816080937E0087E080937B008CEE7B |
||||||
|
:1006200080937A008AB1886F8AB9219A229A0895B4 |
||||||
|
:100630000F931F93CF93DF93CDB7DEB72E970FB6EF |
||||||
|
:10064000F894DEBF0FBECDBF8C018EECD8011D9299 |
||||||
|
:100650008A95E9F710939D0600939C0680E490E04C |
||||||
|
:10066000F80190A3878F11A2C8018C589F4FE459BD |
||||||
|
:10067000FF4F918380839783868395838483049639 |
||||||
|
:10068000938382830996D801A758BF4F11969C93F4 |
||||||
|
:100690008E9317969C938E93169715969C938E9394 |
||||||
|
:1006A0001497CF9613969C938E931297865991091F |
||||||
|
:1006B000D80193969C938E93929799969C938E9340 |
||||||
|
:1006C000989797969C938E939697CF9695969C9392 |
||||||
|
:1006D0008E93949784E090E0A681B7811C92468126 |
||||||
|
:1006E0005781228133814217530719F420813181C8 |
||||||
|
:1006F00004C0268137812F5F3F4F378326830197C0 |
||||||
|
:1007000059F70E94EE028EE0FE013196DF01982F2C |
||||||
|
:100710001D929A95E9F793E09C8323E232E03A87B1 |
||||||
|
:1007200029872BEB32E03C872B87D80101900D9273 |
||||||
|
:100730008A95E1F72E960FB6F894DEBF0FBECDBFB7 |
||||||
|
:10074000DF91CF911F910F9108950F931F93CF9336 |
||||||
|
:10075000DF93E0919C06F0919D0620A531A537A37B |
||||||
|
:1007600026A3EC018C01060F171FC017D10731F02B |
||||||
|
:1007700060E070E089910E942302F7CFDF91CF9172 |
||||||
|
:100780001F910F910895DC0158968C915897811113 |
||||||
|
:10079000F8C05A968C915A978111AEC096964D9199 |
||||||
|
:1007A0005C91979798962D913C9199974217530792 |
||||||
|
:1007B00079F456962D913C915797232B49F410923A |
||||||
|
:1007C0001301FD01E659FF4F1082A559BF4F68C0C4 |
||||||
|
:1007D0005B969C915B97911103C05C961C925C9711 |
||||||
|
:1007E00091E05B969C935B9754962D913C91559725 |
||||||
|
:1007F00021153105B9F596964D915C91979798968C |
||||||
|
:100800002D913C9199974217530779F4FD01E559D1 |
||||||
|
:10081000FF4F108256962D913C91579721503109E8 |
||||||
|
:1008200057963C932E93569723C09696ED91FC9144 |
||||||
|
:10083000979794962D913C919597E217F30729F499 |
||||||
|
:1008400092962D913C91939707C09696ED91FC91CD |
||||||
|
:1008500097979F012F5F3F4F97963C932E939697C4 |
||||||
|
:10086000908107C02150310955963C932E9354979F |
||||||
|
:100870009EE759969C93599759969C9159979B310D |
||||||
|
:1008800089F596964D915C91979798962D913C910C |
||||||
|
:1008900099974217530739F410921301A659BF4F85 |
||||||
|
:1008A0001C92299808959696ED91FC9197979496AD |
||||||
|
:1008B0008D919C919597E817F90729F492968D915F |
||||||
|
:1008C0009C91939706C09696ED91FC919797CF01D6 |
||||||
|
:1008D000019697969C938E939697808159968C93C8 |
||||||
|
:1008E000599706C09E57923018F45B961C925B97FE |
||||||
|
:1008F00081E05A968C935A975B968C915B975F96A2 |
||||||
|
:100900002D913C9190978823A9F05C968C915C97EF |
||||||
|
:10091000853080F05C961C925C972034310519F08C |
||||||
|
:1009200080E490E002C085E790E090969C938E93DF |
||||||
|
:100930005F9723C05A968C915A9759969C915997D4 |
||||||
|
:10094000982341F05C969C915C979F5F5C969C938A |
||||||
|
:100950005C970FC05C961C925C972034310519F0AF |
||||||
|
:1009600020E430E002C025E730E090963C932E93DF |
||||||
|
:100970005F97880F5A968C935A9788E058968C9375 |
||||||
|
:1009800058975F96ED91FC9190975D968D919C9113 |
||||||
|
:100990005E97E80FF91F9F0131705E963C932E938E |
||||||
|
:1009A0005D9758968C915897815058968C93FF2755 |
||||||
|
:1009B000E038F10530F08FEF90E0AC014E1B5F0B9B |
||||||
|
:1009C000FA01E859FF4F84912F3F310511F008F0EB |
||||||
|
:1009D00080950895EF92FF920F931F93CF93DF932B |
||||||
|
:1009E000FC018C010D531F4FD8014D915C91119763 |
||||||
|
:1009F000129711965C934E93A555B10914968D915B |
||||||
|
:100A00009C91159712962D913C91139782179307FD |
||||||
|
:100A100021F42D913C91119707C014968D919C91D2 |
||||||
|
:100A200015979C012F5F3F4F15963C932E9314977B |
||||||
|
:100A3000EC012881260290011124C9019595879522 |
||||||
|
:100A400095958795E801998388837F01D7ECED0E12 |
||||||
|
:100A5000F11CE701288139818F010B531F4FE801F9 |
||||||
|
:100A600039832883840F951F35952795820F931F0F |
||||||
|
:100A7000E70199838883AF0147535F4F21E0181640 |
||||||
|
:100A800019060CF420E0EA018881880F822B888304 |
||||||
|
:100A900016968D919C911797EC01688316962D916F |
||||||
|
:100AA0003C91179712968D919C91139728173907AF |
||||||
|
:100AB00021F48D919C91119705C016968D919C9172 |
||||||
|
:100AC0001797019617969C938E931697DA018C913F |
||||||
|
:100AD000982F9695969589278370DF01A653BF4F6F |
||||||
|
:100AE000833049F48C91803214F48F5F01C08150BF |
||||||
|
:100AF0008C9311A203C081A18F5F81A38C91885F29 |
||||||
|
:100B0000803414F48C936BC18F738C93DF01A553E5 |
||||||
|
:100B1000BF4F8C91880F8C93EA01988197702BEFCF |
||||||
|
:100B2000290F233010F0933011F481608C938C9155 |
||||||
|
:100B3000982F96958927809581709685990F892B96 |
||||||
|
:100B400086878E3709F052C0DF01A758BF4F149631 |
||||||
|
:100B50002D913C9115978D919C91119728173907EC |
||||||
|
:100B600059F416962D913C91179712968D919C9160 |
||||||
|
:100B7000139728173907B1F116962D913C911797C5 |
||||||
|
:100B800014968D919C91159701972817390751F16B |
||||||
|
:100B90001696CD91DC9117978EE7888316962D9146 |
||||||
|
:100BA0003C91179712968D919C91139728173907AE |
||||||
|
:100BB00021F48D919C91119705C016968D919C9171 |
||||||
|
:100BC0001797019617969C938E93169791E0918BA9 |
||||||
|
:100BD0008389863020F4128A8F5F838B01C0928BC9 |
||||||
|
:100BE00081E0BFC0118A128A138ABAC08F778F370B |
||||||
|
:100BF00011F4118A09C08289882311F02A9A01C050 |
||||||
|
:100C00002A988189811103C0128A138AE8C08685D7 |
||||||
|
:100C1000982F9F739E3309F4E2C080FF03C0808940 |
||||||
|
:100C20008068808B97859F5F97878089983008F4CC |
||||||
|
:100C30009DC0DF01A758BF4F92E8980F923018F07F |
||||||
|
:100C40008B3109F046C014962D913C9115978D91EA |
||||||
|
:100C50009C9111972817390759F416962D913C91BC |
||||||
|
:100C6000179712968D919C9113972817390759F170 |
||||||
|
:100C700016962D913C91179714968D919C911597EE |
||||||
|
:100C8000019728173907F9F01696CD91DC9117973F |
||||||
|
:100C90008BE1888316962D913C91179712968D9132 |
||||||
|
:100CA0009C9113972817390721F48D919C911197E6 |
||||||
|
:100CB00005C016968D919C911797019617969C9357 |
||||||
|
:100CC0008E93169706C0118A128A138A2A9880E09A |
||||||
|
:100CD00001C081E014964D915C9115972D913C9146 |
||||||
|
:100CE00011974217530759F416964D915C91179737 |
||||||
|
:100CF00012962D913C9113974217530769F116965E |
||||||
|
:100D00004D915C91179714962D913C911597215018 |
||||||
|
:100D100031094217530701F190891696CD91DC9164 |
||||||
|
:100D20001797988316964D915C91179712962D916F |
||||||
|
:100D30003C9113974217530721F42D913C91119741 |
||||||
|
:100D400006C016962D913C9117972F5F3F4F17962F |
||||||
|
:100D50003C932E93169705C0118A128A138A2A98FB |
||||||
|
:100D600080E0108A1786882321F039C08695808B11 |
||||||
|
:100D700036C0EF01C453DF4F888199818160998328 |
||||||
|
:100D80008883DF01A758BF4F14962D913C9115978A |
||||||
|
:100D90008D919C9111972817390759F416962D912A |
||||||
|
:100DA0003C91179712968D919C91139728173907AC |
||||||
|
:100DB00061F016962D913C91179714968D919C9108 |
||||||
|
:100DC000159701972817390751F416968D919C9124 |
||||||
|
:100DD000179715969C938E9314971982188281A168 |
||||||
|
:100DE000813618F011A2128A2A98DF91CF911F91B3 |
||||||
|
:100DF0000F91FF90EF9008951F920F920FB60F92F0 |
||||||
|
:100E000011242F933F934F935F936F937F938F930F |
||||||
|
:100E10009F93AF93BF93EF93FF9380E286BB609164 |
||||||
|
:100E2000780070917900769567957695679560580A |
||||||
|
:100E300080919C0690919D060E94EA048091130186 |
||||||
|
:100E4000882349F080919C0690919D060E94C303DF |
||||||
|
:100E5000807F886001C080E88BB980918606909180 |
||||||
|
:100E60008706A0918806B09189060196A11DB11D43 |
||||||
|
:100E70008093860690938706A0938806B093890690 |
||||||
|
:100E8000FF91EF91BF91AF919F918F917F916F9162 |
||||||
|
:100E90005F914F913F912F910F900FBE0F901F9038 |
||||||
|
:100EA00018950F931F93CF938C01C62F82E8860F5E |
||||||
|
:100EB000823010F06B3139F4F801608171818BE17F |
||||||
|
:100EC00090E00E940115F801608171818C2F90E003 |
||||||
|
:100ED000CF911F910F910C9401150F931F93CF93F6 |
||||||
|
:100EE000DF938C010F5A1D4FD8012D913C91119722 |
||||||
|
:100EF000232B39F1EC01498550E01D972D913C9150 |
||||||
|
:100F000011972C503109241B350B11963C932E93CD |
||||||
|
:100F1000FC016D917C9111979F01281B390B2617BD |
||||||
|
:100F2000370738F49F01240F351FE9012A852193E3 |
||||||
|
:100F3000F0CFD801ED91FC91DF91CF911F910F91EE |
||||||
|
:100F40000994DF91CF911F910F910895AF92BF92B5 |
||||||
|
:100F5000CF92DF92EF92FF920F931F93CF93DF9385 |
||||||
|
:100F60005B016A017C0126EBE21A2DEFF20A2FEFFA |
||||||
|
:100F70003FEFF70131832083EC01C05CDD4F6881D6 |
||||||
|
:100F800079818EE790E00E9401158501CA0CDB1C77 |
||||||
|
:100F90000C151D0539F0F80161918F01CE010E94F9 |
||||||
|
:100FA0005107F6CFF701608111816095CE010E9453 |
||||||
|
:100FB0005107612F6095CE010E94510768817981A8 |
||||||
|
:100FC0008EE790E0DF91CF911F910F91FF90EF900E |
||||||
|
:100FD000DF90CF90BF90AF900C940115CF93DF932B |
||||||
|
:100FE000EEE6F2E0DC01EF011D922197E9F7FC014A |
||||||
|
:100FF000E05CFD4F518340837196318320833F979E |
||||||
|
:101000007183608338962FEF3FEF318320833297CF |
||||||
|
:1010100031832083EEE9F6E031832083338322831A |
||||||
|
:10102000DF91CF9108952F923F924F925F926F92EE |
||||||
|
:101030007F928F929F92AF92BF92CF92DF92EF9268 |
||||||
|
:10104000FF920F931F93CF93DF93CDB7DEB728970F |
||||||
|
:101050000FB6F894DEBF0FBECDBF982F917083FB03 |
||||||
|
:10106000442440F8512C81FBAA24A0F8B12C920111 |
||||||
|
:101070002A253B253A83298384FB332730F93B8398 |
||||||
|
:101080001C8286FB662460F8712C82FB002700F925 |
||||||
|
:1010900010E085FB882480F8912C8078A82FB0E0A0 |
||||||
|
:1010A0001D01220C232C221C3308862F817063FB28 |
||||||
|
:1010B000222720F930E061FB442740F950E0422725 |
||||||
|
:1010C000532764FBEE27E0F9F0E066FBEE24E0F83E |
||||||
|
:1010D000F12C62FBCC24C0F8D12C65FB772770F98A |
||||||
|
:1010E0007D831E82607870E0660F672F661F770B26 |
||||||
|
:1010F000DF01AE25BF25B887AF83ED81FE81AE2726 |
||||||
|
:10110000BF27A627B7275A01AC24BD246A257B2513 |
||||||
|
:101110006295660F660F607CA62EF0E8AF9FA01860 |
||||||
|
:101120001124AB81BC81A625B7256A2F6170692780 |
||||||
|
:1011300079817170562F57276A2D650FA980BA8063 |
||||||
|
:10114000A026B126A22474E0A79E600D1124A82534 |
||||||
|
:10115000B925A225B325E8E0AE9F600D1124EF81EB |
||||||
|
:10116000E170E82741704E27F0E14F9F600D112498 |
||||||
|
:101170004D815E814C255D25417084272E253F25BC |
||||||
|
:101180002170282730E2239F600D1124082519259E |
||||||
|
:101190000170802F8927A30144255525942F917034 |
||||||
|
:1011A0008927880F860F28960FB6F894DEBF0FBEEA |
||||||
|
:1011B000CDBFDF91CF911F910F91FF90EF90DF9006 |
||||||
|
:1011C000CF90BF90AF909F908F907F906F905F90E7 |
||||||
|
:1011D0004F903F902F9008952F923F924F925F92A1 |
||||||
|
:1011E0006F927F928F929F92AF92BF92CF92DF9237 |
||||||
|
:1011F000EF92FF920F931F93CF93DF9300D000D015 |
||||||
|
:10120000CDB7DEB79C01DC01AB5ABD4F9C91F90113 |
||||||
|
:10121000E90FF11DEA5AFD4F60839F5F9C939C305C |
||||||
|
:1012200009F088C34901C901805C9D4F9C838B8371 |
||||||
|
:101230001196BA83A9839C91892F881F8827881FBC |
||||||
|
:101240008795882787955901B9EAAB1ABDEFBB0A84 |
||||||
|
:10125000F5014081942F991F9927991F682FF0E479 |
||||||
|
:101260009F9F600D1124690120EAC21A2DEFD20A56 |
||||||
|
:10127000D6019C91892F881F8827881F860F7401AB |
||||||
|
:10128000B7EAEB1ABDEFFB0AF7014081942F991FD3 |
||||||
|
:101290009927991FF0E29F9F800D11248401065A1F |
||||||
|
:1012A0001D4FD8014C91942F991F9927991FB0E198 |
||||||
|
:1012B0009B9F800D11243401E4EA6E1AEDEF7E0A43 |
||||||
|
:1012C000D3014C91942F991F9927991FB8E09B9FA8 |
||||||
|
:1012D000800D11242401E3EA4E1AEDEF5E0AD201DB |
||||||
|
:1012E0009C91692F661F6627661F660F660F680F41 |
||||||
|
:1012F0001401B1EA2B1ABDEF3B0AF1018081982F4E |
||||||
|
:10130000991F9927991F990F690F8B819C810E94C2 |
||||||
|
:101310005107A981BA819C9181E096FF80E0879571 |
||||||
|
:1013200088278795F501408191E046FF90E0682F7E |
||||||
|
:10133000F0E49F9F600D1124D6019C9181E096FFFF |
||||||
|
:1013400080E0860FF701408191E046FF90E0F0E2F7 |
||||||
|
:101350009F9F800D1124D8014C9191E046FF90E0B1 |
||||||
|
:10136000B0E19B9F800D1124F301408191E046FF85 |
||||||
|
:1013700090E0F8E09F9F800D1124D2019C9161E0E4 |
||||||
|
:1013800096FF60E0660F660F680FF101808191E0C3 |
||||||
|
:1013900086FF90E0990F690F8B819C810E94510715 |
||||||
|
:1013A000A981BA819C9181E095FF80E0879588278B |
||||||
|
:1013B0008795F501408191E045FF90E0682FF0E4CA |
||||||
|
:1013C0009F9F600D1124D6019C9181E095FF80E0E4 |
||||||
|
:1013D000860FF701408191E045FF90E0F0E29F9F8A |
||||||
|
:1013E000800D1124D8014C9191E045FF90E0B0E1CF |
||||||
|
:1013F0009B9F800D1124F301408191E045FF90E017 |
||||||
|
:10140000F8E09F9F800D1124D2019C9161E095FF2F |
||||||
|
:1014100060E0660F660F680FF101808191E085FF43 |
||||||
|
:1014200090E0990F690F8B819C810E945107A981DF |
||||||
|
:10143000BA819C9181E094FF80E087958827879509 |
||||||
|
:10144000F501408191E044FF90E0682FF0E49F9F18 |
||||||
|
:10145000600D1124D6019C9181E094FF80E0860FFD |
||||||
|
:10146000F701408191E044FF90E0F0E29F9F800D02 |
||||||
|
:101470001124D8014C9191E044FF90E0B0E19B9F92 |
||||||
|
:10148000800D1124F301408191E044FF90E0F8E0E9 |
||||||
|
:101490009F9F800D1124D2019C9161E094FF60E038 |
||||||
|
:1014A000660F660F680FF101808191E084FF90E084 |
||||||
|
:1014B000990F690F8B819C810E945107C4018A5A40 |
||||||
|
:1014C0009D4F9A838983DC019C9181E093FF80E0AA |
||||||
|
:1014D0008795882787955401B9EAAB1ABDEFBB0AF7 |
||||||
|
:1014E000F501408191E043FF90E0682FF0E49F9F79 |
||||||
|
:1014F000600D1124640120EAC21A2DEFD20AD60130 |
||||||
|
:101500009C9181E093FF80E0860F7401B7EAEB1AAB |
||||||
|
:10151000BDEFFB0AF701408191E043FF90E0F0E26C |
||||||
|
:101520009F9F800D11248401065A1D4FD8014C91B4 |
||||||
|
:1015300091E043FF90E0B0E19B9F800D11243401C6 |
||||||
|
:10154000E4EA6E1AEDEF7E0AD3014C9191E043FF7D |
||||||
|
:1015500090E0B8E09B9F800D11242401E3EA4E1A2D |
||||||
|
:10156000EDEF5E0AD2019C9161E093FF60E0660FAF |
||||||
|
:10157000660F680F1401B1EA2B1ABDEF3B0AF101A7 |
||||||
|
:10158000808191E083FF90E0990F690F8B819C81AE |
||||||
|
:101590000E945107A981BA819C9181E092FF80E06D |
||||||
|
:1015A000879588278795F501408191E042FF90E07B |
||||||
|
:1015B000682FF0E49F9F600D1124D6019C9181E07B |
||||||
|
:1015C00092FF80E0860FF701408191E042FF90E0BA |
||||||
|
:1015D000F0E29F9F800D1124D8014C9191E042FFD1 |
||||||
|
:1015E00090E0B0E19B9F800D1124F301408191E0D8 |
||||||
|
:1015F00042FF90E0F8E09F9F800D1124D2019C9162 |
||||||
|
:1016000061E092FF60E0660F660F680FF101808174 |
||||||
|
:1016100091E082FF90E0990F690F8B819C810E947D |
||||||
|
:101620005107A981BA819C9181E091FF80E0879563 |
||||||
|
:1016300088278795F501408191E041FF90E0682F70 |
||||||
|
:10164000F0E49F9F600D1124D6019C9181E091FFF1 |
||||||
|
:1016500080E0860FF701408191E041FF90E0F0E2E9 |
||||||
|
:101660009F9F800D1124D8014C9191E041FF90E0A3 |
||||||
|
:10167000B0E19B9F800D1124F301408191E041FF77 |
||||||
|
:1016800090E0F8E09F9F800D1124D2019C9161E0D1 |
||||||
|
:1016900091FF60E0660F660F680FF101808191E0B5 |
||||||
|
:1016A00081FF90E0990F690F8B819C810E94510707 |
||||||
|
:1016B000A981BA819C91F501808181708295880F02 |
||||||
|
:1016C000880F807CF0E89F9F80191124D6019C919F |
||||||
|
:1016D0009170890FF70190819170F0E29F9F800DCA |
||||||
|
:1016E0001124D8019C919170B0E19B9F800D112431 |
||||||
|
:1016F000F30190819170F8E09F9F800D1124D20139 |
||||||
|
:101700006C916170660F660F680FF10190819170A6 |
||||||
|
:10171000990F690F8B819C810E9451075401F8EA4F |
||||||
|
:10172000AF1AFDEFBF0AD5016C916401B5EACB1A7F |
||||||
|
:10173000BDEFDB0AF60170817401F2EAEF1AFDEFEA |
||||||
|
:10174000FF0AD7019C9184010F591D4FF801408178 |
||||||
|
:10175000862F881F8827881F87958827879551E0BF |
||||||
|
:1017600063FF50E0682FF0E45F9F600D112481E07B |
||||||
|
:1017700043FF80E0860F572F551F5527551F20E246 |
||||||
|
:10178000529F800D112451E073FF50E0A0E15A9F59 |
||||||
|
:10179000800D1124592F551F5527551FB8E05B9F09 |
||||||
|
:1017A000800D112461E093FF60E0660F660F680F03 |
||||||
|
:1017B000942F991F9927991F990F690F8B819C81ED |
||||||
|
:1017C0000E945107F5016081D6017C91F70190815B |
||||||
|
:1017D000D8014C9181E066FF80E087958827879546 |
||||||
|
:1017E00051E062FF50E0682FB0E45B9F600D112470 |
||||||
|
:1017F00081E042FF80E0860F51E076FF50E0E0E2BA |
||||||
|
:101800005E9F800D112451E072FF50E0F0E15F9F78 |
||||||
|
:10181000800D112451E096FF50E028E0529F800D8A |
||||||
|
:10182000112461E092FF60E0660F660F680F91E09F |
||||||
|
:1018300046FF90E0990F690F8B819C810E945107B0 |
||||||
|
:10184000D5016C91F6017081D7019C91F80140811E |
||||||
|
:1018500081E065FF80E087958827879551E061FFEB |
||||||
|
:1018600050E0682FF0E45F9F600D112481E041FF9C |
||||||
|
:1018700080E0860F51E075FF50E020E2529F800D1E |
||||||
|
:10188000112451E071FF50E0A0E15A9F800D112416 |
||||||
|
:1018900051E095FF50E0B8E05B9F800D112461E0BE |
||||||
|
:1018A00091FF60E0660F660F680F91E045FF90E0E2 |
||||||
|
:1018B000990F690F8B819C810E945107D501EC9192 |
||||||
|
:1018C000D6017C91D7015C91D8014C919E2F9170EB |
||||||
|
:1018D000872F81708295807FB0E49B9F800D1124BB |
||||||
|
:1018E000642F6170860F952F9170990F990F890F52 |
||||||
|
:1018F00091E0E4FF90E0E0E89E9F8019112491E0E0 |
||||||
|
:1019000074FF90E0F0E29F9F800D112491E054FF5E |
||||||
|
:1019100090E028E0929F800D112461E044FF60E098 |
||||||
|
:10192000660F680F8B819C810E945107F401EB5A6E |
||||||
|
:10193000FD4F10820F900F900F900F90DF91CF917D |
||||||
|
:101940001F910F91FF90EF90DF90CF90BF90AF90DD |
||||||
|
:101950009F908F907F906F905F904F903F902F90CF |
||||||
|
:1019600008951F93CF93DF93EC01162F0E94EC088C |
||||||
|
:10197000DE01A65BBD4F2D913C911197F901E12746 |
||||||
|
:10198000FF27EE0FFF1FE851FF4F85919491232F02 |
||||||
|
:101990003327282739272D933C93809115018823DD |
||||||
|
:1019A00049F0612F809114010E941308682FCE0125 |
||||||
|
:1019B0000E94EC08109314019091150181E0892791 |
||||||
|
:1019C00080931501DF91CF911F9108950F931F937D |
||||||
|
:1019D000CF93DF93EC018B01FB0161810E94B10C7D |
||||||
|
:1019E000F8016081CE010E94B10CF8016381CE0143 |
||||||
|
:1019F0000E94B10CF8016281CE01DF91CF911F915D |
||||||
|
:101A00000F910C94B10C6F927F928F929F92AF9234 |
||||||
|
:101A1000BF92CF92DF92EF92FF920F931F93CF93DB |
||||||
|
:101A2000DF93CDB7DEB72A970FB6F894DEBF0FBEAF |
||||||
|
:101A3000CDBF8C013A016901FC01EB5AFD4F1082C8 |
||||||
|
:101A40005C0186EBA81A8DEFB80A8FEF9FEFF501C6 |
||||||
|
:101A500091838083CE0101967C018AE0F701119287 |
||||||
|
:101A60008A95E9F7F801EE5BFD4F0190F081E02DDA |
||||||
|
:101A7000808191819A838983828193819C838B83E6 |
||||||
|
:101A8000FB01808191819E838D83828193819887E0 |
||||||
|
:101A90008F838CE0820F877011F41A8603C098E060 |
||||||
|
:101AA000981B9A874801F0EC8F1AFDEF9F0AF4010A |
||||||
|
:101AB000608171818EE790E00E940115B701C80135 |
||||||
|
:101AC0000E94E60CBE016B5F7F4FC8010E94E60CCE |
||||||
|
:101AD0006985C8010E94B10C6A85C8010E94B10CD9 |
||||||
|
:101AE0008A859FEF980F9A87882311F060E0F5CFE1 |
||||||
|
:101AF0007301C60CD71CEC14FD0439F0F701619199 |
||||||
|
:101B00007F01C8010E94B10CF6CFF5016081F18020 |
||||||
|
:101B10006095C8010E94B10C6F2D6095C8010E94AC |
||||||
|
:101B2000B10CF401608171818EE790E00E94011593 |
||||||
|
:101B30002A960FB6F894DEBF0FBECDBFDF91CF91CE |
||||||
|
:101B40001F910F91FF90EF90DF90CF90BF90AF90DB |
||||||
|
:101B50009F908F907F906F9008959A01AB016EE9EE |
||||||
|
:101B600076E00C94030D6F927F928F929F92AF92CA |
||||||
|
:101B7000BF92CF92DF92EF92FF920F931F93CF937A |
||||||
|
:101B8000DF938C010E591D4FF801B080EC01CD5947 |
||||||
|
:101B9000DD4F5881DC01AC59BD4FDC903C01FBE9C5 |
||||||
|
:101BA0006F1AFDEF7F0AF30170819C012A593D4FA6 |
||||||
|
:101BB000F90160812F5F3F4FF90140812F5F3F4F57 |
||||||
|
:101BC000F90130817C01F7E9EF1AFDEFFF0AF70117 |
||||||
|
:101BD00020817C01F6E9EF1AFDEFFF0AF701C080D2 |
||||||
|
:101BE0007C01F5E9EF1AFDEFFF0AF701A0807C0107 |
||||||
|
:101BF000F4E9EF1AFDEFFF0AF70190807C01F3E9A9 |
||||||
|
:101C0000EF1AFDEFFF0AF701F080EB2CEE1CEE243B |
||||||
|
:101C1000EE1CE794EE24E794852E881C8824881C0B |
||||||
|
:101C2000F0E48F9EE00C11248E2CE22EEE1CEE24AC |
||||||
|
:101C3000EE1CE80C8D2C881C8824881CE0E28E9E0B |
||||||
|
:101C4000E00C1124872E881C8824881CF0E18F9ECC |
||||||
|
:101C5000E00C1124862E881C8824881CE8E08E9EC7 |
||||||
|
:101C6000E00C1124842E881C8824881C880C880C85 |
||||||
|
:101C7000E80C832E881C8824881C880CE80CF8014A |
||||||
|
:101C8000E08211E0B6FE10E017951127179501E0EC |
||||||
|
:101C900056FF00E0F0E40F9F100D1124012F11E01A |
||||||
|
:101CA00026FF10E0100F01E0D6FE00E0E0E20E9FFC |
||||||
|
:101CB000100D112401E076FF00E0F0E10F9F100D00 |
||||||
|
:101CC000112401E066FF00E0E8E00E9F100D1124F2 |
||||||
|
:101CD00001E046FF00E0000F000F100F01E036FFAB |
||||||
|
:101CE00000E0000F100F1883CC2DCC1FCC27CC1F89 |
||||||
|
:101CF000C795CC27C795DA2DDD1FDD27DD1FF0E462 |
||||||
|
:101D0000DF9FC00D1124DC2FC1E0F6FEC0E0CD0F37 |
||||||
|
:101D1000D92DDD1FDD27DD1FE0E2DE9FC00D112480 |
||||||
|
:101D2000DF2DDD1FDD27DD1FF0E1DF9FC00D11245A |
||||||
|
:101D3000D1E0C6FED0E0E8E0DE9FC00D1124D1E086 |
||||||
|
:101D4000A6FED0E0DD0FDD0FCD0FD1E096FED0E096 |
||||||
|
:101D5000DD0FCD0FCC93A1E0B5FEA0E0A795AA279B |
||||||
|
:101D6000A795B1E055FFB0E0F0E4BF9FA00D1124AE |
||||||
|
:101D7000BA2FA1E025FFA0E0AB0FB1E0D5FEB0E0A7 |
||||||
|
:101D8000C0E2BC9FA00D1124B1E075FFB0E0E0E11E |
||||||
|
:101D9000BE9FA00D1124B1E065FFB0E0F8E0BF9F49 |
||||||
|
:101DA000A00D1124B1E045FFB0E0BB0FBB0FAB0F9E |
||||||
|
:101DB000B1E035FFB0E0BB0FAB0FF301A083FC0136 |
||||||
|
:101DC000EA59FD4FA1E0B4FEA0E0A795AA27A79588 |
||||||
|
:101DD000B1E054FFB0E0C0E4BC9FA00D1124BA2FC5 |
||||||
|
:101DE000A1E024FFA0E0AB0FB1E0D4FEB0E0C0E280 |
||||||
|
:101DF000BC9FA00D1124B1E074FFB0E0C0E1BC9F16 |
||||||
|
:101E0000A00D1124B1E064FFB0E0C8E0BC9FA00DBC |
||||||
|
:101E10001124B1E044FFB0E0BB0FBB0FAB0FB1E04A |
||||||
|
:101E200034FFB0E0BB0FAB0FA083FC01E959FD4FBD |
||||||
|
:101E3000A1E0C5FEA0E0A795AA27A795B1E0A5FE61 |
||||||
|
:101E4000B0E0C0E4BC9FA00D1124BA2FA1E0F4FEC5 |
||||||
|
:101E5000A0E0AB0FB1E095FEB0E0C0E2BC9FA00DEA |
||||||
|
:101E60001124B1E0F5FEB0E0C0E1BC9FA00D11244B |
||||||
|
:101E7000B1E0C4FEB0E0C8E0BC9FA00D1124B1E009 |
||||||
|
:101E8000A4FEB0E0BB0FBB0FAB0FB1E094FEB0E01F |
||||||
|
:101E9000BB0FAB0FA083FC01E859FD4FA1E0B3FEDF |
||||||
|
:101EA000A0E0A795AA27A795B1E053FFB0E0C0E452 |
||||||
|
:101EB000BC9FA00D1124BA2FA1E023FFA0E0AB0F1F |
||||||
|
:101EC000B1E0D3FEB0E0C0E2BC9FA00D1124B1E0B0 |
||||||
|
:101ED00073FFB0E0C0E1BC9FA00D1124B1E063FF2F |
||||||
|
:101EE000B0E0C8E0BC9FA00D1124B1E043FFB0E01A |
||||||
|
:101EF000BB0FBB0FAB0FB1E033FFB0E0BB0FAB0FBD |
||||||
|
:101F0000A083FC01E759FD4FA1E0B2FEA0E0A79538 |
||||||
|
:101F1000AA27A795B1E052FFB0E0C0E4BC9FA00D96 |
||||||
|
:101F20001124BA2FA1E022FFA0E0AB0FB1E0D2FE56 |
||||||
|
:101F3000B0E0C0E2BC9FA00D1124B1E072FFB0E0A0 |
||||||
|
:101F4000C0E1BC9FA00D1124B1E062FFB0E0C8E089 |
||||||
|
:101F5000BC9FA00D1124B1E042FFB0E0BB0FBB0F4E |
||||||
|
:101F6000AB0FB1E032FFB0E0BB0FAB0FA083FC01C1 |
||||||
|
:101F7000E659FD4FA1E0C3FEA0E0A795AA27A795CB |
||||||
|
:101F8000B1E0A3FEB0E0C0E4BC9FA00D1124BA2FC5 |
||||||
|
:101F9000A1E0F2FEA0E0AB0FB1E093FEB0E0C0E242 |
||||||
|
:101FA000BC9FA00D1124B1E0F3FEB0E0C0E1BC9FE6 |
||||||
|
:101FB000A00D1124B1E0C2FEB0E0C8E0BC9FA00DAE |
||||||
|
:101FC0001124B1E0A2FEB0E0BB0FBB0FAB0FB1E03C |
||||||
|
:101FD00092FEB0E0BB0FAB0FA083FC01E559FD4FB3 |
||||||
|
:101FE000A1E0B1FEA0E0A795AA27A795B1E051FF17 |
||||||
|
:101FF000B0E0C0E4BC9FA00D1124BA2FA1E021FFE6 |
||||||
|
:10200000A0E0AB0FB1E0D1FEB0E0C0E2BC9FA00DFC |
||||||
|
:102010001124B1E071FFB0E0C0E1BC9FA00D11241C |
||||||
|
:10202000B1E061FFB0E0C8E0BC9FA00D1124B1E0B9 |
||||||
|
:1020300041FFB0E0BB0FBB0FAB0FB1E031FFB0E031 |
||||||
|
:10204000BB0FAB0FA083FC01E459FD4F51705295BB |
||||||
|
:10205000550F550F507CA0E8BA9E501911242170DD |
||||||
|
:10206000250F5D2D5170C0E25C9F200D1124717011 |
||||||
|
:1020700050E1759F200D11246170A8E06A9F200D2A |
||||||
|
:1020800011244170440F440F240F3170330F230F7C |
||||||
|
:10209000208331968C2D81709A2D9170990F990F14 |
||||||
|
:1020A000C8E08C9F900D11248F2D8170980F292DE1 |
||||||
|
:1020B0002170220F920F81E0C1FE80E020E8829F14 |
||||||
|
:1020C0009019112481E0A1FE80E050E4859F900DDD |
||||||
|
:1020D000112481E091FE80E0A0E28A9F900D1124FE |
||||||
|
:1020E00081E0F1FE80E0C0E18C9F900D112490838F |
||||||
|
:1020F000DF91CF911F910F91FF90EF90DF90CF90E4 |
||||||
|
:10210000BF90AF909F908F907F906F9008952F9287 |
||||||
|
:102110003F924F925F926F927F928F929F92AF9277 |
||||||
|
:10212000BF92CF92DF92EF92FF920F931F93CF93C4 |
||||||
|
:10213000DF93CDB7DEB72B970FB6F894DEBF0FBE97 |
||||||
|
:10214000CDBF8C014C012DEA821A2DEF920A5C0161 |
||||||
|
:102150003CEAA31A3DEFB30A7C014CEBE41A4DEFC5 |
||||||
|
:10216000F40A9C01235B3D4F3C832B831C0133E924 |
||||||
|
:10217000231A3DEF330A9C01245B3D4F38872F83A0 |
||||||
|
:10218000F801E05CFD4F808191810E94C3149C01A5 |
||||||
|
:10219000019609F45BC1D4014C91442309F4F2C0C7 |
||||||
|
:1021A0002B31310529F4F5018081882309F4EAC037 |
||||||
|
:1021B000F801EA5BFD4F80819181019691838083D4 |
||||||
|
:1021C0006CE070E00E941D14892B09F0DBC02B31FC |
||||||
|
:1021D000310529F0C9018E579109029710F4D501F4 |
||||||
|
:1021E0001C92F70180819181F801EE59FD4F8D56C7 |
||||||
|
:1021F0009240DF01A80FB91F4C914193E215F305FE |
||||||
|
:10220000C1F7D1012C93C8010E94B30DF7014080A2 |
||||||
|
:102210005180F3E04F1A5108D7014D925C9268014A |
||||||
|
:10222000BCE9CB1ABDEFDB0A612C712C9801285B4D |
||||||
|
:102230003D4F3E832D83F6013297208131963081C8 |
||||||
|
:10224000D6019C91632F822F29873A879B870E9412 |
||||||
|
:102250001308EF81F88580839B85892729853A8536 |
||||||
|
:10226000882309F451C0982F9F70998382958F70AD |
||||||
|
:102270008A83FE01319680E090E041915FEF540F38 |
||||||
|
:102280005230E8F14430D9F14830C9F1433009F413 |
||||||
|
:10229000DBC0453041F0463059F0473071F050E036 |
||||||
|
:1022A000493089F002C052E013C04A3071F002C0D8 |
||||||
|
:1022B00054E00EC04B3059F002C058E009C04C3019 |
||||||
|
:1022C00009F4BDC005C050E103C050E201C050E4B4 |
||||||
|
:1022D0008130910509F0AFC025274423A9F0AB81D7 |
||||||
|
:1022E000BC814D915D916D917C9113974F5F5F4FD4 |
||||||
|
:1022F0006F4F7F4F4D935D936D937C931397019731 |
||||||
|
:1023000019F081E090E0B9CFED81FE8140815181EB |
||||||
|
:10231000FA01E227FF27EE0FFF1FE851FF4F6591FB |
||||||
|
:102320007491852F992786279727FC01E327FF279C |
||||||
|
:10233000EE0FFF1FE851FF4F45915491892F9927C8 |
||||||
|
:1023400084279527AD81BE818D939C93C30163E063 |
||||||
|
:1023500070E00E943114660F771F640D751D600FC9 |
||||||
|
:10236000711FFB013897208331963083B3E06B0EE9 |
||||||
|
:10237000711CE3E0CE0ED11CFCE06F16710409F075 |
||||||
|
:102380005ACFFECED5018C9181113BC02E3731053D |
||||||
|
:1023900059F5F701808191819801285B3D4F6901D2 |
||||||
|
:1023A0000C9750F0D9018D919C91883B904F21F46E |
||||||
|
:1023B0002A9AC8010E946D0781E0F40180838FEFA3 |
||||||
|
:1023C0009FEFD6018D939C93F70111821082F80143 |
||||||
|
:1023D000EA5BFD4F11821082AB81BC811D921D9280 |
||||||
|
:1023E0001D921C921397CCCE2F37310519F4F401AE |
||||||
|
:1023F0001082C6CE2B31310521F481E0D5018C93BA |
||||||
|
:10240000BFCE4423A1F0F701808191818034F2E0B6 |
||||||
|
:102410009F0758F4AC014F5F5F4FD7014D935C931A |
||||||
|
:10242000F801E80FF91F208302C0F4011082D501E2 |
||||||
|
:102430001C92A6CE50E83527411151CF60CF813094 |
||||||
|
:102440009105C1F720584BCF51E042CF2B960FB6E4 |
||||||
|
:10245000F894DEBF0FBECDBFDF91CF911F910F91DA |
||||||
|
:10246000FF90EF90DF90CF90BF90AF909F908F90B4 |
||||||
|
:102470007F906F905F904F903F902F900895909332 |
||||||
|
:10248000A3068093A20650938B0640938A0670930E |
||||||
|
:10249000A6066093A5060895EF92FF920F931F93EF |
||||||
|
:1024A000CF93DF93EC0160918A0670918B0680ECEC |
||||||
|
:1024B00090E00E94011560918A0670918B0680E081 |
||||||
|
:1024C00090E00E9401158E017E018CEBE81A8DEFE1 |
||||||
|
:1024D000F80AF7018081918160918A0670918B06DC |
||||||
|
:1024E00098012C1B3D0B2817390708F5F80181913D |
||||||
|
:1024F0008F01803C59F48BED90E00E9401156091B2 |
||||||
|
:102500008A0670918B068CED90E00EC08B3D59F4DD |
||||||
|
:102510008BED90E00E94011560918A0670918B0608 |
||||||
|
:102520008DED90E001C090E00E940115D2CF80ECCB |
||||||
|
:1025300090E0DF91CF911F910F91FF90EF900C945D |
||||||
|
:1025400001154F925F926F927F928F929F92AF92FE |
||||||
|
:10255000BF92EF92FF920F931F93CF93DF93EC0103 |
||||||
|
:102560008B017A01E091A506F091A606818981117F |
||||||
|
:1025700045C00E94B31490910001891798F4A701F7 |
||||||
|
:10258000B801CE01DF91CF911F910F91FF90EF9095 |
||||||
|
:10259000BF90AF909F908F907F906F905F904F9083 |
||||||
|
:1025A0000C94AD0D8FB7F8948090860690908706B6 |
||||||
|
:1025B000A0908806B09089068FBF209101013091CC |
||||||
|
:1025C00002014091030150910401AAE0B0E00E9491 |
||||||
|
:1025D00012142FB7F89440908606509087066090AA |
||||||
|
:1025E0008806709089062FBF481859086A087B082A |
||||||
|
:1025F000461657066806790664F3B4CFE091A5063F |
||||||
|
:10260000F091A6068189882309F4ACCF8091A206B7 |
||||||
|
:102610009091A3060E948710E091A506F091A6066E |
||||||
|
:10262000E453FF4F80819181892B41F31182108205 |
||||||
|
:10263000DF91CF911F910F91FF90EF90BF90AF90DE |
||||||
|
:102640009F908F907F906F905F904F900895882318 |
||||||
|
:1026500099F04091AC065091AD0666E171E0809131 |
||||||
|
:10266000A2069091A3060E94A1121092A7061092B2 |
||||||
|
:10267000AD061092AC0608958091A7068823D9F084 |
||||||
|
:102680002FB7F8948091860690918706A0918806CE |
||||||
|
:10269000B09189062FBF4091A8065091A90660917C |
||||||
|
:1026A000AA067091AB06841B950BA60BB70BC397BC |
||||||
|
:1026B000A105B10574F608959091A7069923A1F09C |
||||||
|
:1026C000803C01F580910D01811111C01092A70687 |
||||||
|
:1026D0004091AC065091AD0666E171E08091A20692 |
||||||
|
:1026E0009091A3060C94A112803C09F07BC081E07C |
||||||
|
:1026F0008093A7068EEF80930D011092AD06109285 |
||||||
|
:10270000AC0608952091AC063091AD06243392E0DA |
||||||
|
:10271000390708F067C090910D012115310531F49A |
||||||
|
:102720009E3F21F48F7080930D01089591111FC079 |
||||||
|
:102730008B3D21F481E08093A40608959091A40636 |
||||||
|
:10274000992349F08C3D21F08D3D19F48BED01C0AA |
||||||
|
:1027500080EC1092A406A9014F5F5F4F5093AD0625 |
||||||
|
:102760004093AC06F901EA5EFE4F808308959130F4 |
||||||
|
:1027700079F4282F30E0AAE0B0E00E9403146093BF |
||||||
|
:10278000090170930A0180930B0190930C01089545 |
||||||
|
:10279000943089F42AE0829FC0011124AA2797FD72 |
||||||
|
:1027A000A095BA2F8093050190930601A09307018D |
||||||
|
:1027B000B09308010895933089F42AE0829FC00104 |
||||||
|
:1027C0001124AA2797FDA095BA2F80930101909319 |
||||||
|
:1027D0000201A0930301B09304010895923011F413 |
||||||
|
:1027E0008093000108950E9495018AE493E00E947D |
||||||
|
:1027F000871080E00E9410028823B9F30E941A0219 |
||||||
|
:102800000E945C13F2CFA29FB001B39FC001A39FAF |
||||||
|
:10281000700D811D1124911DB29F700D811D112419 |
||||||
|
:10282000911D08950E940314A59F900DB49F900DD3 |
||||||
|
:10283000A49F800D911D11240895AA1BBB1B51E17B |
||||||
|
:1028400007C0AA1FBB1FA617B70710F0A61BB70B20 |
||||||
|
:10285000881F991F5A95A9F780959095BC01CD01C5 |
||||||
|
:10286000089597FB072E16F4009407D077FD09D042 |
||||||
|
:102870000E941D1407FC05D03EF4909581959F4F52 |
||||||
|
:102880000895709561957F4F0895A1E21A2EAA1BB5 |
||||||
|
:10289000BB1BFD010DC0AA1FBB1FEE1FFF1FA21710 |
||||||
|
:1028A000B307E407F50720F0A21BB30BE40BF50B0D |
||||||
|
:1028B000661F771F881F991F1A9469F76095709596 |
||||||
|
:1028C000809590959B01AC01BD01CF0108958F9239 |
||||||
|
:1028D0009F92AF92BF92CF92DF92EF92FF92CF93EF |
||||||
|
:1028E000DF93EC01688179818A819B816115710593 |
||||||
|
:1028F0008105910521F464E279ED8BE597E02DE106 |
||||||
|
:1029000033EF41E050E00E94411549015A019B011B |
||||||
|
:10291000AC01A7EAB1E40E9412146B017C01ACEE99 |
||||||
|
:10292000B4EFA50194010E943C15DC01CB018C0D94 |
||||||
|
:102930009D1DAE1DBF1DB7FF03C00197A109B04883 |
||||||
|
:1029400088839983AA83BB839F77DF91CF91FF9080 |
||||||
|
:10295000EF90DF90CF90BF90AF909F908F900895B1 |
||||||
|
:102960000E94671408958EE091E00E946714089514 |
||||||
|
:10297000A0E0B0E080930E0190930F01A0931001AE |
||||||
|
:10298000B09311010895CF93DF93EC012B8120FFC9 |
||||||
|
:1029900033C026FF0AC02F7B2B838E819F81019637 |
||||||
|
:1029A0009F838E838A8190E029C022FF0FC0E88137 |
||||||
|
:1029B000F9818081992787FD9095009719F420620D |
||||||
|
:1029C0002B831AC03196F983E8830EC0EA85FB8514 |
||||||
|
:1029D000099597FF09C02B81019611F080E201C093 |
||||||
|
:1029E00080E1822B8B8308C02E813F812F5F3F4F78 |
||||||
|
:1029F0003F832E83992702C08FEF9FEFDF91CF9106 |
||||||
|
:102A000008950F931F93CF93DF93FB01238121FD43 |
||||||
|
:102A100003C08FEF9FEF28C022FF16C04681578169 |
||||||
|
:102A2000248135814217530744F4A081B1819D016F |
||||||
|
:102A30002F5F3F4F318320838C93268137812F5F17 |
||||||
|
:102A40003F4F3783268310C0EB01092F182F0084D6 |
||||||
|
:102A5000F185E02D0995892BE1F68E819F81019604 |
||||||
|
:102A60009F838E83812F902FDF91CF911F910F91A4 |
||||||
|
:102A70000895B7FF0C9412140E941214821B930B3A |
||||||
|
:102A80000895052E97FB1EF400940E94581557FDDB |
||||||
|
:102A900007D00E94451407FC03D04EF40C9458153F |
||||||
|
:102AA00050954095309521953F4F4F4F5F4F08957A |
||||||
|
:102AB00090958095709561957F4F8F4F9F4F0895AA |
||||||
|
:042AC000F894FFCFB8 |
||||||
|
:102AC400FFC8000000320000005E010000FE0100AB |
||||||
|
:022AD400000000 |
||||||
|
:00000001FF |
@ -0,0 +1,88 @@ |
|||||||
|
// Based on work by Francesco Sacchi
|
||||||
|
|
||||||
|
#include <string.h> |
||||||
|
#include <ctype.h> |
||||||
|
#include "AX25.h" |
||||||
|
#include "protocol/HDLC.h" |
||||||
|
#include "util/CRC-CCIT.h" |
||||||
|
#include "../hardware/AFSK.h" |
||||||
|
|
||||||
|
#define countof(a) sizeof(a)/sizeof(a[0]) |
||||||
|
#define MIN(a,b) ({ typeof(a) _a = (a); typeof(b) _b = (b); ((typeof(_a))((_a < _b) ? _a : _b)); }) |
||||||
|
#define DECODE_CALL(buf, addr) for (unsigned i = 0; i < sizeof((addr)); i++) { char c = (*(buf)++ >> 1); (addr)[i] = (c == ' ') ? '\x0' : c; } |
||||||
|
#define AX25_SET_REPEATED(msg, idx, val) do { if (val) { (msg)->rpt_flags |= _BV(idx); } else { (msg)->rpt_flags &= ~_BV(idx) ; } } while(0) |
||||||
|
|
||||||
|
void ax25_init(AX25Ctx *ctx, FILE *channel, ax25_callback_t hook) { |
||||||
|
memset(ctx, 0, sizeof(*ctx)); |
||||||
|
ctx->ch = channel; |
||||||
|
ctx->hook = hook; |
||||||
|
ctx->crc_in = ctx->crc_out = CRC_CCIT_INIT_VAL; |
||||||
|
} |
||||||
|
|
||||||
|
static void ax25_decode(AX25Ctx *ctx) { |
||||||
|
#if SERIAL_PROTOCOL == PROTOCOL_KISS |
||||||
|
if (ctx->hook) ctx->hook(ctx); |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
void ax25_poll(AX25Ctx *ctx) { |
||||||
|
int c; |
||||||
|
|
||||||
|
while ((c = fgetc(ctx->ch)) != EOF) { |
||||||
|
if (!ctx->escape && c == HDLC_FLAG) { |
||||||
|
if (ctx->frame_len >= AX25_MIN_FRAME_LEN) { |
||||||
|
if (ctx->crc_in == AX25_CRC_CORRECT) { |
||||||
|
#if OPEN_SQUELCH == true |
||||||
|
LED_RX_ON(); |
||||||
|
#endif |
||||||
|
ax25_decode(ctx); |
||||||
|
} |
||||||
|
} |
||||||
|
ctx->sync = true; |
||||||
|
ctx->crc_in = CRC_CCIT_INIT_VAL; |
||||||
|
ctx->frame_len = 0; |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
if (!ctx->escape && c == HDLC_RESET) { |
||||||
|
ctx->sync = false; |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
if (!ctx->escape && c == AX25_ESC) { |
||||||
|
ctx->escape = true; |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
if (ctx->sync) { |
||||||
|
if (ctx->frame_len < AX25_MAX_FRAME_LEN) { |
||||||
|
ctx->buf[ctx->frame_len++] = c; |
||||||
|
ctx->crc_in = update_crc_ccit(c, ctx->crc_in); |
||||||
|
} else { |
||||||
|
ctx->sync = false; |
||||||
|
} |
||||||
|
} |
||||||
|
ctx->escape = false; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
static void ax25_putchar(AX25Ctx *ctx, uint8_t c) |
||||||
|
{ |
||||||
|
if (c == HDLC_FLAG || c == HDLC_RESET || c == AX25_ESC) fputc(AX25_ESC, ctx->ch); |
||||||
|
ctx->crc_out = update_crc_ccit(c, ctx->crc_out); |
||||||
|
fputc(c, ctx->ch); |
||||||
|
} |
||||||
|
|
||||||
|
void ax25_sendRaw(AX25Ctx *ctx, void *_buf, size_t len) { |
||||||
|
ctx->crc_out = CRC_CCIT_INIT_VAL; |
||||||
|
fputc(HDLC_FLAG, ctx->ch); |
||||||
|
const uint8_t *buf = (const uint8_t *)_buf; |
||||||
|
while (len--) ax25_putchar(ctx, *buf++); |
||||||
|
|
||||||
|
uint8_t crcl = (ctx->crc_out & 0xff) ^ 0xff; |
||||||
|
uint8_t crch = (ctx->crc_out >> 8) ^ 0xff; |
||||||
|
ax25_putchar(ctx, crcl); |
||||||
|
ax25_putchar(ctx, crch); |
||||||
|
|
||||||
|
fputc(HDLC_FLAG, ctx->ch); |
||||||
|
} |
@ -0,0 +1,40 @@ |
|||||||
|
#ifndef PROTOCOL_AX25_H |
||||||
|
#define PROTOCOL_AX25_H |
||||||
|
|
||||||
|
#include <stdio.h> |
||||||
|
#include <stdbool.h> |
||||||
|
#include "device.h" |
||||||
|
|
||||||
|
#define AX25_MIN_FRAME_LEN 18 |
||||||
|
#ifndef CUSTOM_FRAME_SIZE |
||||||
|
#define AX25_MAX_FRAME_LEN 620 |
||||||
|
#else |
||||||
|
#define AX25_MAX_FRAME_LEN CUSTOM_FRAME_SIZE |
||||||
|
#endif |
||||||
|
|
||||||
|
#define AX25_CRC_CORRECT 0xF0B8 |
||||||
|
|
||||||
|
#define AX25_CTRL_UI 0x03 |
||||||
|
#define AX25_PID_NOLAYER3 0xF0 |
||||||
|
|
||||||
|
struct AX25Ctx; // Forward declarations
|
||||||
|
struct AX25Msg; |
||||||
|
|
||||||
|
typedef void (*ax25_callback_t)(struct AX25Ctx *ctx); |
||||||
|
|
||||||
|
typedef struct AX25Ctx { |
||||||
|
uint8_t buf[AX25_MAX_FRAME_LEN]; |
||||||
|
FILE *ch; |
||||||
|
size_t frame_len; |
||||||
|
uint16_t crc_in; |
||||||
|
uint16_t crc_out; |
||||||
|
ax25_callback_t hook; |
||||||
|
bool sync; |
||||||
|
bool escape; |
||||||
|
} AX25Ctx; |
||||||
|
|
||||||
|
void ax25_poll(AX25Ctx *ctx); |
||||||
|
void ax25_sendRaw(AX25Ctx *ctx, void *_buf, size_t len); |
||||||
|
void ax25_init(AX25Ctx *ctx, FILE *channel, ax25_callback_t hook); |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,8 @@ |
|||||||
|
#ifndef PROTOCOL_HDLC_H |
||||||
|
#define PROTOCOL_HDLC_H |
||||||
|
|
||||||
|
#define HDLC_FLAG 0x7E |
||||||
|
#define HDLC_RESET 0x7F |
||||||
|
#define LLP_ESC 0x1B |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,159 @@ |
|||||||
|
#include <stdlib.h> |
||||||
|
#include <string.h> |
||||||
|
|
||||||
|
#include "device.h" |
||||||
|
#include "KISS.h" |
||||||
|
|
||||||
|
static uint8_t serialBuffer[LLP_MAX_DATA_SIZE]; // Buffer for holding incoming serial data
|
||||||
|
LLPCtx *llpCtx; |
||||||
|
Afsk *channel; |
||||||
|
Serial *serial; |
||||||
|
size_t frame_len; |
||||||
|
bool IN_FRAME; |
||||||
|
bool ESCAPE; |
||||||
|
bool FLOWCONTROL; |
||||||
|
|
||||||
|
uint8_t command = CMD_UNKNOWN; |
||||||
|
unsigned long custom_preamble = CONFIG_AFSK_PREAMBLE_LEN; |
||||||
|
unsigned long custom_tail = CONFIG_AFSK_TRAILER_LEN; |
||||||
|
|
||||||
|
unsigned long slotTime = 200; |
||||||
|
uint8_t p = 255; |
||||||
|
ticks_t timeout_ticks; |
||||||
|
|
||||||
|
void kiss_init(LLPCtx *ctx, Afsk *afsk, Serial *ser) { |
||||||
|
llpCtx = ctx; |
||||||
|
serial = ser; |
||||||
|
channel = afsk; |
||||||
|
FLOWCONTROL = false; |
||||||
|
} |
||||||
|
|
||||||
|
void kiss_messageCallback(LLPCtx *ctx) { |
||||||
|
#if (SERIAL_FRAMING == SERIAL_FRAMING_DIRECT) |
||||||
|
for (unsigned i = 0; i < ctx->frame_len; i++) { |
||||||
|
uint8_t b = ctx->buf[i]; |
||||||
|
fputc(b, &serial->uart0); |
||||||
|
} |
||||||
|
#else |
||||||
|
fputc(FEND, &serial->uart0); |
||||||
|
fputc(0x00, &serial->uart0); |
||||||
|
for (unsigned i = 0; i < ctx->frame_len; i++) { |
||||||
|
uint8_t b = ctx->buf[i]; |
||||||
|
if (b == FEND) { |
||||||
|
fputc(FESC, &serial->uart0); |
||||||
|
fputc(TFEND, &serial->uart0); |
||||||
|
} else if (b == FESC) { |
||||||
|
fputc(FESC, &serial->uart0); |
||||||
|
fputc(TFESC, &serial->uart0); |
||||||
|
} else { |
||||||
|
fputc(b, &serial->uart0); |
||||||
|
} |
||||||
|
} |
||||||
|
fputc(FEND, &serial->uart0); |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
void kiss_csma(LLPCtx *ctx, uint8_t *buf, size_t len) { |
||||||
|
bool sent = false; |
||||||
|
while (!sent) { |
||||||
|
//puts("Waiting in CSMA");
|
||||||
|
if(!channel->hdlc.receiving) { |
||||||
|
uint8_t tp = rand() & 0xFF; |
||||||
|
if (tp < p) { |
||||||
|
//llp_sendRaw(ctx, buf, len);
|
||||||
|
llp_broadcast(ctx, buf, len); |
||||||
|
sent = true; |
||||||
|
} else { |
||||||
|
ticks_t start = timer_clock(); |
||||||
|
long slot_ticks = ms_to_ticks(slotTime); |
||||||
|
while (timer_clock() - start < slot_ticks) { |
||||||
|
cpu_relax(); |
||||||
|
} |
||||||
|
} |
||||||
|
} else { |
||||||
|
while (!sent && channel->hdlc.receiving) { |
||||||
|
// Continously poll the modem for data
|
||||||
|
// while waiting, so we don't overrun
|
||||||
|
// receive buffers
|
||||||
|
llp_poll(llpCtx); |
||||||
|
|
||||||
|
if (channel->status != 0) { |
||||||
|
// If an overflow or other error
|
||||||
|
// occurs, we'll back off and drop
|
||||||
|
// this packet silently.
|
||||||
|
channel->status = 0; |
||||||
|
sent = true; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (FLOWCONTROL) { |
||||||
|
while (!ctx->ready_for_data) { /* Wait */ } |
||||||
|
fputc(FEND, &serial->uart0); |
||||||
|
fputc(CMD_READY, &serial->uart0); |
||||||
|
fputc(0x01, &serial->uart0); |
||||||
|
fputc(FEND, &serial->uart0); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void kiss_checkTimeout(bool force) { |
||||||
|
if (force || (IN_FRAME && timer_clock() - timeout_ticks > ms_to_ticks(TX_MAXWAIT))) { |
||||||
|
kiss_csma(llpCtx, serialBuffer, frame_len); |
||||||
|
IN_FRAME = false; |
||||||
|
frame_len = 0; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void kiss_serialCallback(uint8_t sbyte) { |
||||||
|
#if SERIAL_FRAMING == SERIAL_FRAMING_DIRECT |
||||||
|
timeout_ticks = timer_clock(); |
||||||
|
IN_FRAME = true; |
||||||
|
serialBuffer[frame_len++] = sbyte; |
||||||
|
if (frame_len >= LLP_MAX_DATA_SIZE) kiss_checkTimeout(true); |
||||||
|
#else |
||||||
|
if (IN_FRAME && sbyte == FEND && command == CMD_DATA) { |
||||||
|
IN_FRAME = false; |
||||||
|
kiss_csma(llpCtx, serialBuffer, frame_len); |
||||||
|
} else if (sbyte == FEND) { |
||||||
|
IN_FRAME = true; |
||||||
|
command = CMD_UNKNOWN; |
||||||
|
frame_len = 0; |
||||||
|
} else if (IN_FRAME && frame_len < LLP_MAX_DATA_SIZE) { |
||||||
|
// Have a look at the command byte first
|
||||||
|
if (frame_len == 0 && command == CMD_UNKNOWN) { |
||||||
|
// MicroModem supports only one HDLC port, so we
|
||||||
|
// strip off the port nibble of the command byte
|
||||||
|
sbyte = sbyte & 0x0F; |
||||||
|
command = sbyte; |
||||||
|
} else if (command == CMD_DATA) { |
||||||
|
if (sbyte == FESC) { |
||||||
|
ESCAPE = true; |
||||||
|
} else { |
||||||
|
if (ESCAPE) { |
||||||
|
if (sbyte == TFEND) sbyte = FEND; |
||||||
|
if (sbyte == TFESC) sbyte = FESC; |
||||||
|
ESCAPE = false; |
||||||
|
} |
||||||
|
serialBuffer[frame_len++] = sbyte; |
||||||
|
} |
||||||
|
} else if (command == CMD_TXDELAY) { |
||||||
|
custom_preamble = sbyte * 10UL; |
||||||
|
} else if (command == CMD_TXTAIL) { |
||||||
|
custom_tail = sbyte * 10; |
||||||
|
} else if (command == CMD_SLOTTIME) { |
||||||
|
slotTime = sbyte * 10; |
||||||
|
} else if (command == CMD_P) { |
||||||
|
p = sbyte; |
||||||
|
} else if (command == CMD_READY) { |
||||||
|
if (sbyte == 0x00) { |
||||||
|
FLOWCONTROL = false; |
||||||
|
} else { |
||||||
|
FLOWCONTROL = true; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
#endif |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
#ifndef _PROTOCOL_KISS |
||||||
|
#define _PROTOCOL_KISS 0x02 |
||||||
|
|
||||||
|
#include "../hardware/AFSK.h" |
||||||
|
#include "../hardware/Serial.h" |
||||||
|
#include "../util/time.h" |
||||||
|
#include "LLP.h" |
||||||
|
#include "config.h" |
||||||
|
|
||||||
|
#define FEND 0xC0 |
||||||
|
#define FESC 0xDB |
||||||
|
#define TFEND 0xDC |
||||||
|
#define TFESC 0xDD |
||||||
|
|
||||||
|
#define CMD_UNKNOWN 0xFE |
||||||
|
#define CMD_DATA 0x00 |
||||||
|
#define CMD_TXDELAY 0x01 |
||||||
|
#define CMD_P 0x02 |
||||||
|
#define CMD_SLOTTIME 0x03 |
||||||
|
#define CMD_TXTAIL 0x04 |
||||||
|
#define CMD_FULLDUPLEX 0x05 |
||||||
|
#define CMD_SETHARDWARE 0x06 |
||||||
|
#define CMD_READY 0x0F |
||||||
|
#define CMD_RETURN 0xFF |
||||||
|
|
||||||
|
void kiss_init(LLPCtx *ctx, Afsk *afsk, Serial *ser); |
||||||
|
void kiss_csma(LLPCtx *ctx, uint8_t *buf, size_t len); |
||||||
|
void kiss_messageCallback(LLPCtx *ctx); |
||||||
|
void kiss_serialCallback(uint8_t sbyte); |
||||||
|
void kiss_checkTimeout(bool force); |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,696 @@ |
|||||||
|
#include <string.h> |
||||||
|
#include <ctype.h> |
||||||
|
#include "LLP.h" |
||||||
|
#include "protocol/HDLC.h" |
||||||
|
#include "util/CRC-CCIT.h" |
||||||
|
#include "../hardware/AFSK.h" |
||||||
|
|
||||||
|
#define DISABLE_INTERLEAVE false |
||||||
|
#define PASSALL false |
||||||
|
#define STRIP_HEADERS true |
||||||
|
|
||||||
|
// The GET_BIT macro is used in the interleaver
|
||||||
|
// and deinterleaver to access single bits of a
|
||||||
|
// byte.
|
||||||
|
inline bool GET_BIT(uint8_t byte, int n) { return (byte & (1 << (8-n))) == (1 << (8-n)); } |
||||||
|
|
||||||
|
// We need an indicator to tell us whether we
|
||||||
|
// should send a parity byte. This happens
|
||||||
|
// whenever two normal bytes of data has been
|
||||||
|
// sent. We also keep the last sent byte in
|
||||||
|
// memory because we need it to calculate the
|
||||||
|
// parity byte.
|
||||||
|
static bool sendParityBlock = false; |
||||||
|
static uint8_t lastByte = 0x00; |
||||||
|
|
||||||
|
LLPAddress broadcast_address; |
||||||
|
|
||||||
|
void llp_decode(LLPCtx *ctx) { |
||||||
|
if (ctx->hook) { |
||||||
|
size_t length = ctx->frame_len; |
||||||
|
uint8_t *buffer = (uint8_t*)&ctx->buf; |
||||||
|
size_t padding = buffer[LLP_HEADER_SIZE-1]; |
||||||
|
size_t address_size = 2*sizeof(LLPAddress); |
||||||
|
#if STRIP_HEADERS |
||||||
|
uint8_t strip_headers = 1; |
||||||
|
#else |
||||||
|
uint8_t strip_headers = 0; |
||||||
|
#endif |
||||||
|
size_t subtraction = (address_size + (LLP_HEADER_SIZE - address_size))*strip_headers + padding; |
||||||
|
ctx->frame_len = length - subtraction - LLP_CHECKSUM_SIZE; |
||||||
|
|
||||||
|
for (int i = 0; i < ctx->frame_len; i++) { |
||||||
|
#if STRIP_HEADERS |
||||||
|
buffer[i] = buffer[i+subtraction]; |
||||||
|
#else |
||||||
|
if ( i >= LLP_HEADER_SIZE ) { |
||||||
|
buffer[i] = buffer[i+padding]; |
||||||
|
} else { |
||||||
|
buffer[i] = buffer[i]; |
||||||
|
} |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
ctx->hook(ctx); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void llp_poll(LLPCtx *ctx) { |
||||||
|
int c; |
||||||
|
|
||||||
|
#if DISABLE_INTERLEAVE |
||||||
|
while ((c = fgetc(ctx->ch)) != EOF) { |
||||||
|
if (!ctx->escape && c == HDLC_FLAG) { |
||||||
|
if (ctx->frame_len >= LLP_MIN_FRAME_LENGTH) { |
||||||
|
if (PASSALL || ctx->crc_in == LLP_CRC_CORRECT) { |
||||||
|
#if OPEN_SQUELCH == true |
||||||
|
LED_RX_ON(); |
||||||
|
#endif |
||||||
|
llp_decode(ctx); |
||||||
|
} |
||||||
|
} |
||||||
|
ctx->sync = true; |
||||||
|
ctx->crc_in = CRC_CCIT_INIT_VAL; |
||||||
|
ctx->frame_len = 0; |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
if (!ctx->escape && c == HDLC_RESET) { |
||||||
|
ctx->sync = false; |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
if (!ctx->escape && c == LLP_ESC) { |
||||||
|
ctx->escape = true; |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
if (ctx->sync) { |
||||||
|
if (ctx->frame_len < LLP_MAX_FRAME_LENGTH) { |
||||||
|
ctx->buf[ctx->frame_len++] = c; |
||||||
|
ctx->crc_in = update_crc_ccit(c, ctx->crc_in); |
||||||
|
} else { |
||||||
|
ctx->sync = false; |
||||||
|
} |
||||||
|
} |
||||||
|
ctx->escape = false; |
||||||
|
} |
||||||
|
#else |
||||||
|
while ((c = fgetc(ctx->ch)) != EOF) { |
||||||
|
|
||||||
|
/////////////////////////////////////////////
|
||||||
|
// Start of forward error correction block //
|
||||||
|
/////////////////////////////////////////////
|
||||||
|
if ((ctx->sync && (c != LLP_ESC )) || (ctx->sync && (ctx->escape && (c == LLP_ESC || c == HDLC_FLAG || c == HDLC_RESET)))) { |
||||||
|
// We have a byte, increment our read counter
|
||||||
|
ctx->readLength++; |
||||||
|
|
||||||
|
// Check if we have read 12 bytes. If we
|
||||||
|
// have, we should now have a block of two
|
||||||
|
// data bytes and a parity byte. This block
|
||||||
|
if (ctx->readLength % LLP_INTERLEAVE_SIZE == 0) { |
||||||
|
// If the last character in the block
|
||||||
|
// looks like a control character, we
|
||||||
|
// need to set the escape indicator to
|
||||||
|
// false, since the next byte will be
|
||||||
|
// read immediately after the FEC
|
||||||
|
// routine, and thus, the normal reading
|
||||||
|
// code will not reset the indicator.
|
||||||
|
if (c == LLP_ESC || c == HDLC_FLAG || c == HDLC_RESET) ctx->escape = false; |
||||||
|
|
||||||
|
// The block is interleaved, so we will
|
||||||
|
// first put the received bytes in the
|
||||||
|
// deinterleaving buffer
|
||||||
|
for (int i = 1; i < LLP_INTERLEAVE_SIZE; i++) { |
||||||
|
ctx->interleaveIn[i-1] = ctx->buf[ctx->frame_len-(LLP_INTERLEAVE_SIZE-i)]; |
||||||
|
} |
||||||
|
ctx->interleaveIn[LLP_INTERLEAVE_SIZE-1] = c; |
||||||
|
|
||||||
|
// We then deinterleave the block
|
||||||
|
llpDeinterleave(ctx); |
||||||
|
|
||||||
|
// Adjust the packet length, since we will get
|
||||||
|
// parity bytes in the data buffer with block
|
||||||
|
// sizes larger than 3
|
||||||
|
ctx->frame_len -= LLP_INTERLEAVE_SIZE/3 - 1; |
||||||
|
|
||||||
|
// For each 3-byte block in the deinterleaved
|
||||||
|
// bytes, we apply forward error correction
|
||||||
|
for (int i = 0; i < LLP_INTERLEAVE_SIZE; i+=3) { |
||||||
|
// We now calculate a parity byte on the
|
||||||
|
// received data.
|
||||||
|
|
||||||
|
// Deinterleaved data bytes
|
||||||
|
uint8_t a = ctx->interleaveIn[i]; |
||||||
|
uint8_t b = ctx->interleaveIn[i+1]; |
||||||
|
|
||||||
|
// Deinterleaved parity byte
|
||||||
|
uint8_t p = ctx->interleaveIn[i+2]; |
||||||
|
|
||||||
|
ctx->calculatedParity = llpParityBlock(a, b); |
||||||
|
|
||||||
|
// By XORing the calculated parity byte
|
||||||
|
// with the received parity byte, we get
|
||||||
|
// what is called the "syndrome". This
|
||||||
|
// number will tell us if we had any
|
||||||
|
// errors during transmission, and if so
|
||||||
|
// where they are. Using Hamming code, we
|
||||||
|
// can only detect single bit errors in a
|
||||||
|
// byte though, which is why we interleave
|
||||||
|
// the data, since most errors will usually
|
||||||
|
// occur in bursts of more than one bit.
|
||||||
|
// With 2 data byte interleaving we can
|
||||||
|
// correct 2 consecutive bit errors.
|
||||||
|
uint8_t syndrome = ctx->calculatedParity ^ p; |
||||||
|
if (syndrome == 0x00) { |
||||||
|
// If the syndrome equals 0, we either
|
||||||
|
// don't have any errors, or the error
|
||||||
|
// is unrecoverable, so we don't do
|
||||||
|
// anything
|
||||||
|
} else { |
||||||
|
// If the syndrome is not equal to 0,
|
||||||
|
// there is a problem, and we will try
|
||||||
|
// to correct it. We first need to split
|
||||||
|
// the syndrome byte up into the two
|
||||||
|
// actual syndrome numbers, one for
|
||||||
|
// each data byte.
|
||||||
|
uint8_t syndromes[2]; |
||||||
|
syndromes[0] = syndrome & 0x0f; |
||||||
|
syndromes[1] = (syndrome & 0xf0) >> 4; |
||||||
|
|
||||||
|
// Then we look at each syndrome number
|
||||||
|
// to determine what bit in the data
|
||||||
|
// bytes to correct.
|
||||||
|
for (int i = 0; i < 2; i++) { |
||||||
|
uint8_t s = syndromes[i]; |
||||||
|
uint8_t correction = 0x00; |
||||||
|
if (s == 1 || s == 2 || s == 4 || s == 8) { |
||||||
|
// This signifies an error in the
|
||||||
|
// parity block, so we actually
|
||||||
|
// don't need any correction
|
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
// The following determines what
|
||||||
|
// bit to correct according to
|
||||||
|
// the syndrome value.
|
||||||
|
if (s == 3) correction = 0x01; |
||||||
|
if (s == 5) correction = 0x02; |
||||||
|
if (s == 6) correction = 0x04; |
||||||
|
if (s == 7) correction = 0x08; |
||||||
|
if (s == 9) correction = 0x10; |
||||||
|
if (s == 10) correction = 0x20; |
||||||
|
if (s == 11) correction = 0x40; |
||||||
|
if (s == 12) correction = 0x80; |
||||||
|
|
||||||
|
// And finally we apply the correction
|
||||||
|
if (i == 1) a ^= correction; |
||||||
|
if (i == 0) b ^= correction; |
||||||
|
|
||||||
|
// This is just for testing purposes.
|
||||||
|
// Nice to know when corrections were
|
||||||
|
// actually made.
|
||||||
|
if (s != 0) ctx->correctionsMade += 1; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// We now update the checksum of the packet
|
||||||
|
// with the deinterleaved and possibly
|
||||||
|
// corrected bytes.
|
||||||
|
|
||||||
|
ctx->crc_in = update_crc_ccit(a, ctx->crc_in); |
||||||
|
ctx->crc_in = update_crc_ccit(b, ctx->crc_in); |
||||||
|
|
||||||
|
ctx->buf[ctx->frame_len-(LLP_DATA_BLOCK_SIZE)+((i/3)*2)] = a; |
||||||
|
ctx->buf[ctx->frame_len-(LLP_DATA_BLOCK_SIZE-1)+((i/3)*2)] = b; |
||||||
|
} |
||||||
|
|
||||||
|
continue; |
||||||
|
} |
||||||
|
} |
||||||
|
/////////////////////////////////////////////
|
||||||
|
// End of forward error correction block //
|
||||||
|
/////////////////////////////////////////////
|
||||||
|
|
||||||
|
if (!ctx->escape && c == HDLC_FLAG) { |
||||||
|
if (ctx->frame_len >= LLP_MIN_FRAME_LENGTH) { |
||||||
|
if (PASSALL || ctx->crc_in == LLP_CRC_CORRECT) { |
||||||
|
#if OPEN_SQUELCH == true |
||||||
|
LED_RX_ON(); |
||||||
|
#endif |
||||||
|
llp_decode(ctx); |
||||||
|
} |
||||||
|
} |
||||||
|
ctx->sync = true; |
||||||
|
ctx->crc_in = CRC_CCIT_INIT_VAL; |
||||||
|
ctx->frame_len = 0; |
||||||
|
ctx->readLength = 0; |
||||||
|
ctx->correctionsMade = 0; |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
if (!ctx->escape && c == HDLC_RESET) { |
||||||
|
ctx->sync = false; |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
if (!ctx->escape && c == LLP_ESC) { |
||||||
|
ctx->escape = true; |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
if (ctx->sync) { |
||||||
|
if (ctx->frame_len < LLP_MAX_FRAME_LENGTH) { |
||||||
|
ctx->buf[ctx->frame_len++] = c; |
||||||
|
} else { |
||||||
|
ctx->sync = false; |
||||||
|
} |
||||||
|
} |
||||||
|
ctx->escape = false; |
||||||
|
} |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
static void llp_putchar(LLPCtx *ctx, uint8_t c) { |
||||||
|
if (c == HDLC_FLAG || c == HDLC_RESET || c == LLP_ESC) fputc(LLP_ESC, ctx->ch); |
||||||
|
fputc(c, ctx->ch); |
||||||
|
} |
||||||
|
|
||||||
|
static void llp_sendchar(LLPCtx *ctx, uint8_t c) { |
||||||
|
llpInterleave(ctx, c); |
||||||
|
ctx->crc_out = update_crc_ccit(c, ctx->crc_out); |
||||||
|
|
||||||
|
if (sendParityBlock) { |
||||||
|
uint8_t p = llpParityBlock(lastByte, c); |
||||||
|
llpInterleave(ctx, p); |
||||||
|
} |
||||||
|
|
||||||
|
lastByte = c; |
||||||
|
sendParityBlock ^= true; |
||||||
|
} |
||||||
|
|
||||||
|
void llp_sendaddress(LLPCtx *ctx, LLPAddress *address) { |
||||||
|
llp_sendchar(ctx, address->network >> 8); |
||||||
|
llp_sendchar(ctx, address->network & 0xff); |
||||||
|
llp_sendchar(ctx, address->host >> 8); |
||||||
|
llp_sendchar(ctx, address->host & 0xff); |
||||||
|
} |
||||||
|
|
||||||
|
void llp_broadcast(LLPCtx *ctx, const void *_buf, size_t len) { |
||||||
|
llp_send(ctx, &broadcast_address, _buf, len); |
||||||
|
} |
||||||
|
|
||||||
|
void llp_send(LLPCtx *ctx, LLPAddress *dst, const void *_buf, size_t len) { |
||||||
|
ctx->ready_for_data = false; |
||||||
|
ctx->interleaveCounter = 0; |
||||||
|
ctx->crc_out = CRC_CCIT_INIT_VAL; |
||||||
|
uint8_t *buffer = (uint8_t*)_buf; |
||||||
|
|
||||||
|
LLPHeader header; |
||||||
|
memset(&header, 0, sizeof(header)); |
||||||
|
|
||||||
|
LLPAddress *localAddress = ctx->address; |
||||||
|
header.src.network = localAddress->network; |
||||||
|
header.src.host = localAddress->host; |
||||||
|
header.dst.network = dst->network; |
||||||
|
header.dst.host = dst->host; |
||||||
|
header.flags = 0x00; |
||||||
|
header.padding = (len + LLP_HEADER_SIZE + LLP_CRC_SIZE) % LLP_DATA_BLOCK_SIZE; |
||||||
|
if (header.padding != 0) { |
||||||
|
header.padding = LLP_DATA_BLOCK_SIZE - header.padding; |
||||||
|
} |
||||||
|
|
||||||
|
// Transmit the HDLC_FLAG to signify start of TX
|
||||||
|
fputc(HDLC_FLAG, ctx->ch); |
||||||
|
|
||||||
|
// Transmit source & destination addresses
|
||||||
|
llp_sendaddress(ctx, &header.src); |
||||||
|
llp_sendaddress(ctx, &header.dst); |
||||||
|
|
||||||
|
// Transmit header flags & padding count
|
||||||
|
llp_sendchar(ctx, header.flags); |
||||||
|
llp_sendchar(ctx, header.padding); |
||||||
|
|
||||||
|
// Transmit padding
|
||||||
|
while (header.padding--) { |
||||||
|
llp_sendchar(ctx, 0x00); |
||||||
|
} |
||||||
|
|
||||||
|
// Transmit payload
|
||||||
|
while (len--) { |
||||||
|
llp_sendchar(ctx, *buffer++); |
||||||
|
} |
||||||
|
|
||||||
|
// Send CRC checksum
|
||||||
|
uint8_t crcl = (ctx->crc_out & 0xff) ^ 0xff; |
||||||
|
uint8_t crch = (ctx->crc_out >> 8) ^ 0xff; |
||||||
|
llp_sendchar(ctx, crcl); |
||||||
|
llp_sendchar(ctx, crch); |
||||||
|
|
||||||
|
// And transmit a HDLC_FLAG to signify
|
||||||
|
// end of the transmission.
|
||||||
|
fputc(HDLC_FLAG, ctx->ch); |
||||||
|
ctx->ready_for_data = true; |
||||||
|
} |
||||||
|
|
||||||
|
void llp_sendRaw(LLPCtx *ctx, const void *_buf, size_t len) { |
||||||
|
ctx->ready_for_data = false; |
||||||
|
ctx->crc_out = CRC_CCIT_INIT_VAL; |
||||||
|
fputc(HDLC_FLAG, ctx->ch); |
||||||
|
const uint8_t *buf = (const uint8_t *)_buf; |
||||||
|
while (len--) llp_putchar(ctx, *buf++); |
||||||
|
|
||||||
|
uint8_t crcl = (ctx->crc_out & 0xff) ^ 0xff; |
||||||
|
uint8_t crch = (ctx->crc_out >> 8) ^ 0xff; |
||||||
|
llp_putchar(ctx, crcl); |
||||||
|
llp_putchar(ctx, crch); |
||||||
|
|
||||||
|
fputc(HDLC_FLAG, ctx->ch); |
||||||
|
|
||||||
|
ctx->ready_for_data = true; |
||||||
|
} |
||||||
|
|
||||||
|
void llp_init(LLPCtx *ctx, LLPAddress *address, FILE *channel, llp_callback_t hook) { |
||||||
|
memset(ctx, 0, sizeof(*ctx)); |
||||||
|
ctx->ch = channel; |
||||||
|
ctx->hook = hook; |
||||||
|
ctx->address = address; |
||||||
|
ctx->crc_in = ctx->crc_out = CRC_CCIT_INIT_VAL; |
||||||
|
ctx->ready_for_data = true; |
||||||
|
|
||||||
|
memset(&broadcast_address, 0, sizeof(broadcast_address)); |
||||||
|
broadcast_address.network = LLP_ADDR_BROADCAST; |
||||||
|
broadcast_address.host = LLP_ADDR_BROADCAST; |
||||||
|
} |
||||||
|
|
||||||
|
// This function calculates and returns a parity
|
||||||
|
// byte for two input bytes. The parity byte is
|
||||||
|
// used for correcting errors in the transmission.
|
||||||
|
// The error correction algorithm is a standard
|
||||||
|
// (12,8) Hamming code.
|
||||||
|
inline bool BIT(uint8_t byte, int n) { return ((byte & _BV(n-1))>>(n-1)); } |
||||||
|
uint8_t llpParityBlock(uint8_t first, uint8_t other) { |
||||||
|
uint8_t parity = 0x00; |
||||||
|
|
||||||
|
parity = ((BIT(first, 1) ^ BIT(first, 2) ^ BIT(first, 4) ^ BIT(first, 5) ^ BIT(first, 7))) + |
||||||
|
((BIT(first, 1) ^ BIT(first, 3) ^ BIT(first, 4) ^ BIT(first, 6) ^ BIT(first, 7))<<1) + |
||||||
|
((BIT(first, 2) ^ BIT(first, 3) ^ BIT(first, 4) ^ BIT(first, 8))<<2) + |
||||||
|
((BIT(first, 5) ^ BIT(first, 6) ^ BIT(first, 7) ^ BIT(first, 8))<<3) + |
||||||
|
|
||||||
|
((BIT(other, 1) ^ BIT(other, 2) ^ BIT(other, 4) ^ BIT(other, 5) ^ BIT(other, 7))<<4) + |
||||||
|
((BIT(other, 1) ^ BIT(other, 3) ^ BIT(other, 4) ^ BIT(other, 6) ^ BIT(other, 7))<<5) + |
||||||
|
((BIT(other, 2) ^ BIT(other, 3) ^ BIT(other, 4) ^ BIT(other, 8))<<6) + |
||||||
|
((BIT(other, 5) ^ BIT(other, 6) ^ BIT(other, 7) ^ BIT(other, 8))<<7); |
||||||
|
|
||||||
|
return parity; |
||||||
|
} |
||||||
|
|
||||||
|
// Following is the functions responsible
|
||||||
|
// for interleaving and deinterleaving
|
||||||
|
// blocks of data. The interleaving table
|
||||||
|
// for 3-byte interleaving is also included.
|
||||||
|
// The table for 12-byte is much simpler,
|
||||||
|
// and should be inferable from looking
|
||||||
|
// at the function.
|
||||||
|
|
||||||
|
///////////////////////////////
|
||||||
|
// Interleave-table (3-byte) //
|
||||||
|
///////////////////////////////
|
||||||
|
//
|
||||||
|
// Non-interleaved:
|
||||||
|
// aaaaaaaa bbbbbbbb cccccccc
|
||||||
|
// 12345678 12345678 12345678
|
||||||
|
// M L
|
||||||
|
// S S
|
||||||
|
// B B
|
||||||
|
//
|
||||||
|
// Interleaved:
|
||||||
|
// abcabcab cabcabca bcabcabc
|
||||||
|
// 11144477 22255578 63336688
|
||||||
|
//
|
||||||
|
///////////////////////////////
|
||||||
|
|
||||||
|
void llpInterleave(LLPCtx *ctx, uint8_t byte) { |
||||||
|
ctx->interleaveOut[ctx->interleaveCounter] = byte; |
||||||
|
ctx->interleaveCounter++; |
||||||
|
if (!DISABLE_INTERLEAVE) { |
||||||
|
if (ctx->interleaveCounter == LLP_INTERLEAVE_SIZE) { |
||||||
|
// We have the bytes we need for interleaving
|
||||||
|
// in the buffer and are ready to interleave them.
|
||||||
|
|
||||||
|
uint8_t a = (GET_BIT(ctx->interleaveOut[0], 1) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveOut[1], 1) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveOut[3], 1) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveOut[4], 1) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveOut[6], 1) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveOut[7], 1) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveOut[9], 1) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveOut[10],1)); |
||||||
|
llp_putchar(ctx, a); |
||||||
|
|
||||||
|
uint8_t b = (GET_BIT(ctx->interleaveOut[0], 2) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveOut[1], 2) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveOut[3], 2) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveOut[4], 2) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveOut[6], 2) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveOut[7], 2) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveOut[9], 2) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveOut[10],2)); |
||||||
|
llp_putchar(ctx, b); |
||||||
|
|
||||||
|
uint8_t c = (GET_BIT(ctx->interleaveOut[0], 3) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveOut[1], 3) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveOut[3], 3) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveOut[4], 3) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveOut[6], 3) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveOut[7], 3) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveOut[9], 3) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveOut[10],3)); |
||||||
|
llp_putchar(ctx, c); |
||||||
|
|
||||||
|
uint8_t d = (GET_BIT(ctx->interleaveOut[0], 4) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveOut[1], 4) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveOut[3], 4) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveOut[4], 4) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveOut[6], 4) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveOut[7], 4) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveOut[9], 4) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveOut[10],4)); |
||||||
|
llp_putchar(ctx, d); |
||||||
|
|
||||||
|
uint8_t e = (GET_BIT(ctx->interleaveOut[0], 5) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveOut[1], 5) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveOut[3], 5) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveOut[4], 5) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveOut[6], 5) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveOut[7], 5) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveOut[9], 5) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveOut[10],5)); |
||||||
|
llp_putchar(ctx, e); |
||||||
|
|
||||||
|
uint8_t f = (GET_BIT(ctx->interleaveOut[0], 6) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveOut[1], 6) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveOut[3], 6) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveOut[4], 6) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveOut[6], 6) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveOut[7], 6) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveOut[9], 6) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveOut[10],6)); |
||||||
|
llp_putchar(ctx, f); |
||||||
|
|
||||||
|
uint8_t g = (GET_BIT(ctx->interleaveOut[0], 7) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveOut[1], 7) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveOut[3], 7) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveOut[4], 7) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveOut[6], 7) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveOut[7], 7) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveOut[9], 7) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveOut[10],7)); |
||||||
|
llp_putchar(ctx, g); |
||||||
|
|
||||||
|
uint8_t h = (GET_BIT(ctx->interleaveOut[0], 8) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveOut[1], 8) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveOut[3], 8) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveOut[4], 8) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveOut[6], 8) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveOut[7], 8) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveOut[9], 8) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveOut[10],8)); |
||||||
|
llp_putchar(ctx, h); |
||||||
|
|
||||||
|
uint8_t p = (GET_BIT(ctx->interleaveOut[2], 1) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveOut[2], 5) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveOut[5], 1) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveOut[5], 5) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveOut[8], 1) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveOut[8], 5) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveOut[11],1) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveOut[11],5)); |
||||||
|
llp_putchar(ctx, p); |
||||||
|
|
||||||
|
uint8_t q = (GET_BIT(ctx->interleaveOut[2], 2) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveOut[2], 6) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveOut[5], 2) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveOut[5], 6) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveOut[8], 2) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveOut[8], 6) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveOut[11],2) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveOut[11],6)); |
||||||
|
llp_putchar(ctx, q); |
||||||
|
|
||||||
|
uint8_t s = (GET_BIT(ctx->interleaveOut[2], 3) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveOut[2], 7) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveOut[5], 3) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveOut[5], 7) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveOut[8], 3) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveOut[8], 7) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveOut[11],3) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveOut[11],7)); |
||||||
|
llp_putchar(ctx, s); |
||||||
|
|
||||||
|
uint8_t t = (GET_BIT(ctx->interleaveOut[2], 4) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveOut[2], 8) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveOut[5], 4) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveOut[5], 8) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveOut[8], 4) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveOut[8], 8) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveOut[11],4) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveOut[11],8)); |
||||||
|
llp_putchar(ctx, t); |
||||||
|
|
||||||
|
ctx->interleaveCounter = 0; |
||||||
|
} |
||||||
|
} else { |
||||||
|
if (ctx->interleaveCounter == LLP_INTERLEAVE_SIZE) { |
||||||
|
for (int i = 0; i < LLP_INTERLEAVE_SIZE; i++) { |
||||||
|
llp_putchar(ctx, ctx->interleaveOut[i]); |
||||||
|
} |
||||||
|
ctx->interleaveCounter = 0; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
void llpDeinterleave(LLPCtx *ctx) { |
||||||
|
uint8_t a = (GET_BIT(ctx->interleaveIn[0], 1) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveIn[1], 1) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveIn[2], 1) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveIn[3], 1) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveIn[4], 1) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveIn[5], 1) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveIn[6], 1) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveIn[7], 1)); |
||||||
|
|
||||||
|
uint8_t b = (GET_BIT(ctx->interleaveIn[0], 2) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveIn[1], 2) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveIn[2], 2) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveIn[3], 2) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveIn[4], 2) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveIn[5], 2) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveIn[6], 2) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveIn[7], 2)); |
||||||
|
|
||||||
|
uint8_t p = (GET_BIT(ctx->interleaveIn[8], 1) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveIn[9], 1) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveIn[10],1) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveIn[11],1) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveIn[8], 2) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveIn[9], 2) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveIn[10],2) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveIn[11],2)); |
||||||
|
|
||||||
|
uint8_t c = (GET_BIT(ctx->interleaveIn[0], 3) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveIn[1], 3) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveIn[2], 3) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveIn[3], 3) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveIn[4], 3) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveIn[5], 3) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveIn[6], 3) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveIn[7], 3)); |
||||||
|
|
||||||
|
uint8_t d = (GET_BIT(ctx->interleaveIn[0], 4) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveIn[1], 4) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveIn[2], 4) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveIn[3], 4) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveIn[4], 4) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveIn[5], 4) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveIn[6], 4) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveIn[7], 4)); |
||||||
|
|
||||||
|
uint8_t q = (GET_BIT(ctx->interleaveIn[8], 3) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveIn[9], 3) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveIn[10],3) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveIn[11],3) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveIn[8], 4) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveIn[9], 4) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveIn[10],4) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveIn[11],4)); |
||||||
|
|
||||||
|
uint8_t e = (GET_BIT(ctx->interleaveIn[0], 5) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveIn[1], 5) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveIn[2], 5) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveIn[3], 5) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveIn[4], 5) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveIn[5], 5) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveIn[6], 5) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveIn[7], 5)); |
||||||
|
|
||||||
|
uint8_t f = (GET_BIT(ctx->interleaveIn[0], 6) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveIn[1], 6) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveIn[2], 6) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveIn[3], 6) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveIn[4], 6) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveIn[5], 6) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveIn[6], 6) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveIn[7], 6)); |
||||||
|
|
||||||
|
uint8_t s = (GET_BIT(ctx->interleaveIn[8], 5) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveIn[9], 5) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveIn[10],5) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveIn[11],5) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveIn[8], 6) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveIn[9], 6) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveIn[10],6) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveIn[11],6)); |
||||||
|
|
||||||
|
uint8_t g = (GET_BIT(ctx->interleaveIn[0], 7) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveIn[1], 7) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveIn[2], 7) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveIn[3], 7) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveIn[4], 7) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveIn[5], 7) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveIn[6], 7) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveIn[7], 7)); |
||||||
|
|
||||||
|
uint8_t h = (GET_BIT(ctx->interleaveIn[0], 8) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveIn[1], 8) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveIn[2], 8) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveIn[3], 8) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveIn[4], 8) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveIn[5], 8) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveIn[6], 8) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveIn[7], 8)); |
||||||
|
|
||||||
|
uint8_t t = (GET_BIT(ctx->interleaveIn[8], 7) << 7) + |
||||||
|
(GET_BIT(ctx->interleaveIn[9], 7) << 6) + |
||||||
|
(GET_BIT(ctx->interleaveIn[10],7) << 5) + |
||||||
|
(GET_BIT(ctx->interleaveIn[11],7) << 4) + |
||||||
|
(GET_BIT(ctx->interleaveIn[8], 8) << 3) + |
||||||
|
(GET_BIT(ctx->interleaveIn[9], 8) << 2) + |
||||||
|
(GET_BIT(ctx->interleaveIn[10],8) << 1) + |
||||||
|
(GET_BIT(ctx->interleaveIn[11],8)); |
||||||
|
|
||||||
|
ctx->interleaveIn[0] = a; |
||||||
|
ctx->interleaveIn[1] = b; |
||||||
|
ctx->interleaveIn[2] = p; |
||||||
|
ctx->interleaveIn[3] = c; |
||||||
|
ctx->interleaveIn[4] = d; |
||||||
|
ctx->interleaveIn[5] = q; |
||||||
|
ctx->interleaveIn[6] = e; |
||||||
|
ctx->interleaveIn[7] = f; |
||||||
|
ctx->interleaveIn[8] = s; |
||||||
|
ctx->interleaveIn[9] = g; |
||||||
|
ctx->interleaveIn[10] = h; |
||||||
|
ctx->interleaveIn[11] = t; |
||||||
|
} |
@ -0,0 +1,72 @@ |
|||||||
|
#ifndef PROTOCOL_LLP_H |
||||||
|
#define PROTOCOL_LLP_H |
||||||
|
|
||||||
|
#include <stdio.h> |
||||||
|
#include <stdbool.h> |
||||||
|
#include "device.h" |
||||||
|
|
||||||
|
#define LLP_ADDR_BROADCAST 0xFFFF |
||||||
|
|
||||||
|
#define LLP_INTERLEAVE_SIZE 12 |
||||||
|
#define LLP_MIN_FRAME_LENGTH LLP_INTERLEAVE_SIZE |
||||||
|
#define LLP_MAX_FRAME_LENGTH 48 * LLP_INTERLEAVE_SIZE |
||||||
|
#define LLP_HEADER_SIZE 10 |
||||||
|
#define LLP_CHECKSUM_SIZE 2 |
||||||
|
#define LLP_MAX_DATA_SIZE LLP_MAX_FRAME_LENGTH - LLP_HEADER_SIZE - LLP_CHECKSUM_SIZE |
||||||
|
#define LLP_DATA_BLOCK_SIZE ((LLP_INTERLEAVE_SIZE/3)*2) |
||||||
|
|
||||||
|
#define LLP_CRC_SIZE 2 |
||||||
|
#define LLP_CRC_CORRECT 0xF0B8 |
||||||
|
|
||||||
|
struct LLPCtx; // Forward declarations
|
||||||
|
|
||||||
|
typedef void (*llp_callback_t)(struct LLPCtx *ctx); |
||||||
|
|
||||||
|
typedef struct LLPAddress { |
||||||
|
uint16_t network; |
||||||
|
uint16_t host; |
||||||
|
} LLPAddress; |
||||||
|
|
||||||
|
typedef struct LLPHeader { |
||||||
|
LLPAddress src; |
||||||
|
LLPAddress dst; |
||||||
|
uint8_t flags; |
||||||
|
uint8_t padding; |
||||||
|
} LLPHeader; |
||||||
|
|
||||||
|
typedef struct LLPMsg { |
||||||
|
LLPHeader header; |
||||||
|
const uint8_t *data; |
||||||
|
size_t len; |
||||||
|
} LLPMsg; |
||||||
|
|
||||||
|
typedef struct LLPCtx { |
||||||
|
uint8_t buf[LLP_MAX_FRAME_LENGTH]; |
||||||
|
FILE *ch; |
||||||
|
LLPAddress *address; |
||||||
|
size_t frame_len; |
||||||
|
size_t readLength; |
||||||
|
uint16_t crc_in; |
||||||
|
uint16_t crc_out; |
||||||
|
uint8_t calculatedParity; |
||||||
|
long correctionsMade; |
||||||
|
llp_callback_t hook; |
||||||
|
bool sync; |
||||||
|
bool escape; |
||||||
|
bool ready_for_data; |
||||||
|
uint8_t interleaveCounter; // Keeps track of when we have received an entire interleaved block
|
||||||
|
uint8_t interleaveOut[LLP_INTERLEAVE_SIZE]; // A buffer for interleaving bytes before they are sent
|
||||||
|
uint8_t interleaveIn[LLP_INTERLEAVE_SIZE]; // A buffer for storing interleaved bytes before they are deinterleaved
|
||||||
|
} LLPCtx; |
||||||
|
|
||||||
|
void llp_broadcast(LLPCtx *ctx, const void *_buf, size_t len); |
||||||
|
void llp_send(LLPCtx *ctx, LLPAddress *dst, const void *_buf, size_t len); |
||||||
|
void llp_sendRaw(LLPCtx *ctx, const void *_buf, size_t len); |
||||||
|
void llp_poll(LLPCtx *ctx); |
||||||
|
void llp_init(LLPCtx *ctx, LLPAddress *address, FILE *channel, llp_callback_t hook); |
||||||
|
|
||||||
|
void llpInterleave(LLPCtx *ctx, uint8_t byte); |
||||||
|
void llpDeinterleave(LLPCtx *ctx); |
||||||
|
uint8_t llpParityBlock(uint8_t first, uint8_t other); |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,36 @@ |
|||||||
|
#include "CRC-CCIT.h" |
||||||
|
|
||||||
|
const uint16_t crc_ccit_table[256] PROGMEM = { |
||||||
|
0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, |
||||||
|
0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, |
||||||
|
0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, |
||||||
|
0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, |
||||||
|
0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, |
||||||
|
0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, |
||||||
|
0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, |
||||||
|
0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, |
||||||
|
0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, |
||||||
|
0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, |
||||||
|
0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, |
||||||
|
0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, |
||||||
|
0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, |
||||||
|
0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, |
||||||
|
0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, |
||||||
|
0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, |
||||||
|
0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, |
||||||
|
0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, |
||||||
|
0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, |
||||||
|
0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, |
||||||
|
0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, |
||||||
|
0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, |
||||||
|
0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, |
||||||
|
0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, |
||||||
|
0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, |
||||||
|
0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, |
||||||
|
0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, |
||||||
|
0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, |
||||||
|
0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, |
||||||
|
0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, |
||||||
|
0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, |
||||||
|
0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78, |
||||||
|
}; |
@ -0,0 +1,18 @@ |
|||||||
|
// CRC-CCIT Implementation based on work by Francesco Sacchi
|
||||||
|
|
||||||
|
#ifndef CRC_CCIT_H |
||||||
|
#define CRC_CCIT_H |
||||||
|
|
||||||
|
#include <stdint.h> |
||||||
|
#include <avr/pgmspace.h> |
||||||
|
|
||||||
|
#define CRC_CCIT_INIT_VAL ((uint16_t)0xFFFF) |
||||||
|
|
||||||
|
extern const uint16_t crc_ccit_table[256]; |
||||||
|
|
||||||
|
inline uint16_t update_crc_ccit(uint8_t c, uint16_t prev_crc) { |
||||||
|
return (prev_crc >> 8) ^ pgm_read_word(&crc_ccit_table[(prev_crc ^ c) & 0xff]); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,85 @@ |
|||||||
|
#ifndef UTIL_FIFO_H |
||||||
|
#define UTIL_FIFO_H |
||||||
|
|
||||||
|
#include <stddef.h> |
||||||
|
#include <util/atomic.h> |
||||||
|
|
||||||
|
typedef struct FIFOBuffer |
||||||
|
{ |
||||||
|
unsigned char *begin; |
||||||
|
unsigned char *end; |
||||||
|
unsigned char * volatile head; |
||||||
|
unsigned char * volatile tail; |
||||||
|
} FIFOBuffer; |
||||||
|
|
||||||
|
inline bool fifo_isempty(const FIFOBuffer *f) { |
||||||
|
return f->head == f->tail; |
||||||
|
} |
||||||
|
|
||||||
|
inline bool fifo_isfull(const FIFOBuffer *f) { |
||||||
|
return ((f->head == f->begin) && (f->tail == f->end)) || (f->tail == f->head - 1); |
||||||
|
} |
||||||
|
|
||||||
|
inline void fifo_push(FIFOBuffer *f, unsigned char c) { |
||||||
|
*(f->tail) = c; |
||||||
|
|
||||||
|
if (f->tail == f->end) { |
||||||
|
f->tail = f->begin; |
||||||
|
} else { |
||||||
|
f->tail++; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
inline unsigned char fifo_pop(FIFOBuffer *f) { |
||||||
|
if(f->head == f->end) { |
||||||
|
f->head = f->begin; |
||||||
|
return *(f->end); |
||||||
|
} else { |
||||||
|
return *(f->head++); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
inline void fifo_flush(FIFOBuffer *f) { |
||||||
|
f->head = f->tail; |
||||||
|
} |
||||||
|
|
||||||
|
inline bool fifo_isempty_locked(const FIFOBuffer *f) { |
||||||
|
bool result; |
||||||
|
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { |
||||||
|
result = fifo_isempty(f); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
inline bool fifo_isfull_locked(const FIFOBuffer *f) { |
||||||
|
bool result; |
||||||
|
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { |
||||||
|
result = fifo_isfull(f); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
inline void fifo_push_locked(FIFOBuffer *f, unsigned char c) { |
||||||
|
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { |
||||||
|
fifo_push(f, c); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
inline unsigned char fifo_pop_locked(FIFOBuffer *f) { |
||||||
|
unsigned char c; |
||||||
|
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { |
||||||
|
c = fifo_pop(f); |
||||||
|
} |
||||||
|
return c; |
||||||
|
} |
||||||
|
|
||||||
|
inline void fifo_init(FIFOBuffer *f, unsigned char *buffer, size_t size) { |
||||||
|
f->head = f->tail = f->begin = buffer; |
||||||
|
f->end = buffer + size -1; |
||||||
|
} |
||||||
|
|
||||||
|
inline size_t fifo_len(FIFOBuffer *f) { |
||||||
|
return f->end - f->begin; |
||||||
|
} |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,12 @@ |
|||||||
|
#define PROTOCOL_KISS 0x01 |
||||||
|
#define PROTOCOL_SIMPLE_SERIAL 0x02 |
||||||
|
|
||||||
|
#define m328p 0x01 |
||||||
|
#define m1284p 0x02 |
||||||
|
#define m644p 0x03 |
||||||
|
|
||||||
|
#define REF_3V3 0x01 |
||||||
|
#define REF_5V 0x02 |
||||||
|
|
||||||
|
#define SERIAL_FRAMING_KISS 0x01 |
||||||
|
#define SERIAL_FRAMING_DIRECT 0x02 |
@ -0,0 +1,43 @@ |
|||||||
|
#ifndef UTIL_TIME_H |
||||||
|
#define UTIL_TIME_H |
||||||
|
|
||||||
|
#include <util/atomic.h> |
||||||
|
#include "device.h" |
||||||
|
|
||||||
|
#define DIV_ROUND(dividend, divisor) (((dividend) + (divisor) / 2) / (divisor)) |
||||||
|
#define CLOCK_TICKS_PER_SEC CONFIG_AFSK_DAC_SAMPLERATE |
||||||
|
|
||||||
|
typedef int32_t ticks_t; |
||||||
|
typedef int32_t mtime_t; |
||||||
|
|
||||||
|
volatile ticks_t _clock; |
||||||
|
|
||||||
|
inline ticks_t timer_clock(void) { |
||||||
|
ticks_t result; |
||||||
|
|
||||||
|
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { |
||||||
|
result = _clock; |
||||||
|
} |
||||||
|
|
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
inline ticks_t ms_to_ticks(mtime_t ms) { |
||||||
|
return ms * DIV_ROUND(CLOCK_TICKS_PER_SEC, 1000); |
||||||
|
} |
||||||
|
|
||||||
|
inline void cpu_relax(void) { |
||||||
|
// Do nothing!
|
||||||
|
} |
||||||
|
|
||||||
|
inline void delay_ms(unsigned long ms) { |
||||||
|
ticks_t start = timer_clock(); |
||||||
|
unsigned long n_ticks = ms_to_ticks(ms); |
||||||
|
while (timer_clock() - start < n_ticks) { |
||||||
|
cpu_relax(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,71 @@ |
|||||||
|
# 1200bps AFSK / Bell 202 modem |
||||||
|
|
||||||
|
This modem is intended for use as a universal KISS tnc for packet Winlink or APRS. Other uses are, of course, possible. It is build around an Atmel ATmega328P, clocked at 16MHz. The ATmega328P must be programmed with the Arduino bootloader and is programmable via the Arduino IDE. A CH340 serial to USB converter is used as an interface to the outside world. It is also possible to use an Arduino nano instead. |
||||||
|
|
||||||
|
In order to program the ATmega328P in-circuit, a small modification made to the CH340 board is needed. See photo. |
||||||
|
|
||||||
|
![CH340 modification](./images/ISP-modification.jpg "CH340 modification") |
||||||
|
|
||||||
|
This design is based on the MicroModem from markqvist (https://unsigned.io/). |
||||||
|
|
||||||
|
## Use cases |
||||||
|
|
||||||
|
- Digipeater with APRX |
||||||
|
- Winlink RMS (packet) |
||||||
|
- APRS station with YACC or Xastir |
||||||
|
|
||||||
|
# Author |
||||||
|
|
||||||
|
Copyright 2022 M.T. Konstapel (PE1RXF) |
||||||
|
|
||||||
|
https://www.meezenest.nl/mees-elektronica |
||||||
|
|
||||||
|
# Features |
||||||
|
|
||||||
|
- Uses universal KISS protocol. |
||||||
|
- USB powered. |
||||||
|
- Can be configured for normal PTT (open emitter) or combined PTT/MIC (for some hand helds). |
||||||
|
- Open source hardware and software. |
||||||
|
- Should work on any OS (but only tested on Linux) |
||||||
|
|
||||||
|
# Adjustment |
||||||
|
|
||||||
|
Adjust VR2 to get about 100 mV signal on pin 23 (PC0) of ATmega328P. Adjust VR1 according to the input sensitivity of the used transmitter. |
||||||
|
|
||||||
|
# Flexible firmware support |
||||||
|
|
||||||
|
The modem also works with the other firmware from unsigned.io. It can be programmed for different applications: |
||||||
|
|
||||||
|
- APRS KISS (also used for TCP/IP over AX.25) (microaprs-3v-kiss-latest.hex) - used in this project |
||||||
|
- APRS SimpleSerial (microaprs-3v-ss-latest.hex) |
||||||
|
- MicroModemGP KISS (MicroModemGP-kiss.hex) |
||||||
|
- MicroModem Direct Serial (MicroModemGP-direct.hex) |
||||||
|
|
||||||
|
Program the ATmega328P with the following command: |
||||||
|
|
||||||
|
avrdude -p m328p -c arduino -P /dev/ttyUSB0 -b 115200 -U flash:w:microaprs-3v-kiss-latest.hex |
||||||
|
|
||||||
|
For me this command failed because it couldn't find the avrdude.conf file. I had to specify the full paths: |
||||||
|
|
||||||
|
~/arduino-1.8.10/hardware/tools/avr/bin/avrdude -p m328p -c arduino -C ~/arduino-1.8.10/hardware/tools/avr/etc/avrdude.conf -P /dev/ttyACM0 -b 115200 -U flash:w:~/Documenten/electronische_projecten/packetmodem_nano2/MicroModemGP/precompiled/microaprs-3v-kiss-latest.hex |
||||||
|
|
||||||
|
# How to use on Linux |
||||||
|
|
||||||
|
## Install AX.25 support |
||||||
|
|
||||||
|
sudo apt-get install libax25 ax25-apps ax25-tools |
||||||
|
sudo nano /etc/ax25/axports |
||||||
|
|
||||||
|
than add line: |
||||||
|
ax0 NOCALL 9600 255 2 Packet modem nano2 |
||||||
|
|
||||||
|
## Attach KISS interface to AX.25 |
||||||
|
|
||||||
|
sudo /usr/sbin/kissattach /dev/ttyUSB0 ax0 |
||||||
|
sudo /usr/sbin/kissparms -p ax0 -t 500 -s 200 -r 32 -l 100 -f n |
||||||
|
|
||||||
|
## Configure Pat |
||||||
|
|
||||||
|
pat configure |
||||||
|
|
||||||
|
than add AX.25 port 'ax0' to the 'ax25' section, subsection 'port' |
After Width: | Height: | Size: 478 KiB |
After Width: | Height: | Size: 3.4 MiB |
After Width: | Height: | Size: 384 KiB |
After Width: | Height: | Size: 3.3 MiB |
After Width: | Height: | Size: 534 KiB |
@ -0,0 +1,378 @@ |
|||||||
|
:100000000C9474010C9491010C9491010C94910145 |
||||||
|
:100010000C9491010C9491010C9491010C94910118 |
||||||
|
:100020000C9491010C9491010C9491010C94910108 |
||||||
|
:100030000C9491010C9491010C9491010C949101F8 |
||||||
|
:100040000C9491010C9491010C9491010C949101E8 |
||||||
|
:100050000C9491010C94F4060C9491010C94910170 |
||||||
|
:100060000C9491010C949101808183848687898A04 |
||||||
|
:100070008C8E8F9192949597989A9B9D9EA0A2A307 |
||||||
|
:10008000A5A6A7A9AAACADAFB0B2B3B5B6B7B9BA79 |
||||||
|
:10009000BCBDBEC0C1C2C4C5C6C8C9CACBCDCECF07 |
||||||
|
:1000A000D0D2D3D4D5D6D7D9DADBDCDDDEDFE0E1C0 |
||||||
|
:1000B000E2E3E4E5E6E7E8E9EAEAEBECEDEEEEEFB1 |
||||||
|
:1000C000F0F1F1F2F3F3F4F5F5F6F6F7F8F8F9F9E3 |
||||||
|
:1000D000FAFAFAFBFBFCFCFCFDFDFDFDFEFEFEFE5C |
||||||
|
:1000E000FEFFFFFFFFFFFFFF0000891112239B327D |
||||||
|
:1000F0002446AD573665BF74488CC19D5AAFD3BEF8 |
||||||
|
:100100006CCAE5DB7EE9F7F88110080193331A2207 |
||||||
|
:10011000A5562C47B7753E64C99C408DDBBF52AED7 |
||||||
|
:10012000EDDA64CBFFF976E802218B3010029913E7 |
||||||
|
:100130002667AF763444BD554AADC3BC588ED19FB7 |
||||||
|
:100140006EEBE7FA7CC8F5D983310A2091121803C7 |
||||||
|
:10015000A7772E66B5543C45CBBD42ACD99E508F97 |
||||||
|
:10016000EFFB66EAFDD874C904428D5316619F7097 |
||||||
|
:100170002004A9153227BB364CCEC5DF5EEDD7FC77 |
||||||
|
:100180006888E1997AABF3BA85520C4397711E6087 |
||||||
|
:10019000A1142805B3373A26CDDE44CFDFFD56EC57 |
||||||
|
:1001A000E9986089FBBB72AA06638F7214409D5167 |
||||||
|
:1001B0002225AB343006B9174EEFC7FE5CCCD5DD37 |
||||||
|
:1001C0006AA9E3B8788AF19B87730E6295501C4147 |
||||||
|
:1001D000A3352A24B1163807CFFF46EEDDDC54CD17 |
||||||
|
:1001E000EBB962A8F99A708B088481951AA793B627 |
||||||
|
:1001F0002CC2A5D33EE1B7F04008C919522BDB3A17 |
||||||
|
:10020000644EED5F766DFF7C899400859BB712A6E6 |
||||||
|
:10021000ADD224C3BFF136E0C1184809D33B5A2AF6 |
||||||
|
:10022000E55E6C4FF77D7E6C0AA583B418869197C6 |
||||||
|
:100230002EE3A7F23CC0B5D14229CB38500AD91BD6 |
||||||
|
:10024000666FEF7E744CFD5D8BB502A499961087A6 |
||||||
|
:10025000AFF326E2BDD034C1C3394A28D11A580BB6 |
||||||
|
:10026000E77F6E6EF55C7C4D0CC685D71EE597F476 |
||||||
|
:100270002880A1913AA3B3B2444ACD5B5669DF7896 |
||||||
|
:10028000600CE91D722FFB3E8DD604C79FF516E466 |
||||||
|
:10029000A9902081BBB332A2C55A4C4BD7795E6876 |
||||||
|
:1002A000E11C680DF33F7A2E0EE787F61CC495D546 |
||||||
|
:1002B0002AA1A3B03882B193466BCF7A5448DD5956 |
||||||
|
:1002C000622DEB3C700EF91F8FF706E69DD414C526 |
||||||
|
:1002D000ABB122A0B9923083C77B4E6AD5585C4936 |
||||||
|
:1002E000E33D6A2CF11E780F11241FBECFEFD8E03A |
||||||
|
:1002F000DEBFCDBF11E0A0E0B1E0EAE6F7E102C069 |
||||||
|
:1003000005900D92A231B107D9F718E0A2E1B1E052 |
||||||
|
:1003100001C01D92A434B107E1F70E946E0A0C944B |
||||||
|
:10032000B30B0C9400000C94C40878948CE294E015 |
||||||
|
:100330000E94100323E931E04CE254E0BA018CE062 |
||||||
|
:1003400095E00E948D078EEF94E00E94C701EEE3D6 |
||||||
|
:10035000F8E08EEF94E09383828391838083AC01F5 |
||||||
|
:100360006CE274E08CE095E00C94B5089091C000CC |
||||||
|
:1003700095FFFCCF8093C60081E090E008958091C6 |
||||||
|
:10038000C00087FFFCCF8091C60090E00895CF9316 |
||||||
|
:10039000DF93CDB7DEB72E970FB6F894DEBF0FBE52 |
||||||
|
:1003A000CDBFDC018EE0FD01982F11929A95E9F7FF |
||||||
|
:1003B0001092C50097E69093C400E0ECF0E09081C5 |
||||||
|
:1003C0009D7F908396E09093C20098E19093C10046 |
||||||
|
:1003D0009E012F5F3F4FF90111928A95E9F783E063 |
||||||
|
:1003E0008C8386EB91E09A8789878FEB91E09C87DD |
||||||
|
:1003F0008B879EE0F90101900D929A95E1F72E9678 |
||||||
|
:100400000FB6F894DEBF0FBECDBFDF91CF91089538 |
||||||
|
:10041000811106C08091C000881F8827881F089519 |
||||||
|
:1004200080E008958091C00087FF03C08091C600DE |
||||||
|
:1004300008958FEF08950F931F93CF93DF93182F95 |
||||||
|
:10044000C0913308D0913408FE01E659FF4F8081F6 |
||||||
|
:10045000811126C080E490E098A38F8F1E8E1D8EA0 |
||||||
|
:100460001C8E01E0008331960083299A20910901B6 |
||||||
|
:1004700030910A0140910B0150910C01A0EBB4E0C6 |
||||||
|
:100480000E948D0A6056704F8F4F9F4F20E43FE1CE |
||||||
|
:1004900040E050E00E94980A3D8B2C8B00931301A2 |
||||||
|
:1004A0000FB7F894209105013091060140910701A2 |
||||||
|
:1004B00050910801A0EBB4E00E948D0A6056704F85 |
||||||
|
:1004C0008F4F9F4F20E43FE140E050E00E94980AA8 |
||||||
|
:1004D0003F8B2E8B0FBFE0913308F09134084FB75C |
||||||
|
:1004E000F89426A137A182A193A12817390739F4DE |
||||||
|
:1004F00020A531A584A195A12817390779F060A519 |
||||||
|
:1005000071A526A137A12150310991E080E0621741 |
||||||
|
:10051000730709F090E0292F382F02C021E030E066 |
||||||
|
:100520004FBF232BC1F6E0913308F09134082FB769 |
||||||
|
:10053000F894A0A5B1A51C9340A551A584A195A1AF |
||||||
|
:100540004817590719F482A193A103C080A591A56A |
||||||
|
:10055000019691A780A72FBF81E090E0DF91CF9116 |
||||||
|
:100560001F910F910895E0913308F09134084FB72F |
||||||
|
:10057000F894E758FF4F24813581868197814FBFDA |
||||||
|
:1005800028173907E9F0E0913308F09134089FB754 |
||||||
|
:10059000F894E758FF4FA481B58122813381A217D7 |
||||||
|
:1005A000B30719F42081318105C0A481B5819D0173 |
||||||
|
:1005B0002F5F3F4F358324838C919FBF90E0089538 |
||||||
|
:1005C0008FEF9FEF0895109212010895109212017B |
||||||
|
:1005D0001092800089E18093810081E896E09093F9 |
||||||
|
:1005E00087008093860080911201882321F080E4A7 |
||||||
|
:1005F00080937C0002C010927C00389840988091D3 |
||||||
|
:100600007E00816080937E0087E080937B008CEE8B |
||||||
|
:1006100080937A008AB1886F8AB9219A229A0895C4 |
||||||
|
:100620000F931F93CF93DF93CDB7DEB72E970FB6FF |
||||||
|
:10063000F894DEBF0FBECDBF8C018EECD8011D92A9 |
||||||
|
:100640008A95E9F7109334080093330880E490E02A |
||||||
|
:10065000F80190A3878F11A2C8018C589F4FE459CD |
||||||
|
:10066000FF4F918380839783868395838483049649 |
||||||
|
:10067000938382830996D801A758BF4F11969C9304 |
||||||
|
:100680008E9317969C938E93169715969C938E93A4 |
||||||
|
:100690001497CF9613969C938E931297865991092F |
||||||
|
:1006A000D80193969C938E93929799969C938E9350 |
||||||
|
:1006B000989797969C938E939697CF9695969C93A2 |
||||||
|
:1006C0008E93949784E090E0A681B7811C92468136 |
||||||
|
:1006D0005781228133814217530719F420813181D8 |
||||||
|
:1006E00004C0268137812F5F3F4F378326830197D0 |
||||||
|
:1006F00059F70E94E6028EE0FE013196DF01982F45 |
||||||
|
:100700001D929A95E9F793E09C832BE132E03A87BA |
||||||
|
:10071000298723EB32E03C872B87D80101900D928B |
||||||
|
:100720008A95E1F72E960FB6F894DEBF0FBECDBFC7 |
||||||
|
:10073000DF91CF911F910F9108950F931F93CF9346 |
||||||
|
:10074000DF93E0913308F091340820A531A537A359 |
||||||
|
:1007500026A3EC018C01060F171FC017D10731F03B |
||||||
|
:1007600060E070E089910E941B02F7CFDF91CF918A |
||||||
|
:100770001F910F910895DC0158968C915897811123 |
||||||
|
:10078000F8C05A968C915A978111AEC096964D91A9 |
||||||
|
:100790005C91979798962D913C91999742175307A2 |
||||||
|
:1007A00079F456962D913C915797232B49F410924A |
||||||
|
:1007B0001301FD01E659FF4F1082A559BF4F68C0D4 |
||||||
|
:1007C0005B969C915B97911103C05C961C925C9721 |
||||||
|
:1007D00091E05B969C935B9754962D913C91559735 |
||||||
|
:1007E00021153105B9F596964D915C91979798969C |
||||||
|
:1007F0002D913C9199974217530779F4FD01E559E2 |
||||||
|
:10080000FF4F108256962D913C91579721503109F8 |
||||||
|
:1008100057963C932E93569723C09696ED91FC9154 |
||||||
|
:10082000979794962D913C919597E217F30729F4A9 |
||||||
|
:1008300092962D913C91939707C09696ED91FC91DD |
||||||
|
:1008400097979F012F5F3F4F97963C932E939697D4 |
||||||
|
:10085000908107C02150310955963C932E935497AF |
||||||
|
:100860009EE759969C93599759969C9159979B311D |
||||||
|
:1008700089F596964D915C91979798962D913C911C |
||||||
|
:1008800099974217530739F410921301A659BF4F95 |
||||||
|
:100890001C92299808959696ED91FC9197979496BD |
||||||
|
:1008A0008D919C919597E817F90729F492968D916F |
||||||
|
:1008B0009C91939706C09696ED91FC919797CF01E6 |
||||||
|
:1008C000019697969C938E939697808159968C93D8 |
||||||
|
:1008D000599706C09E57923018F45B961C925B970E |
||||||
|
:1008E00081E05A968C935A975B968C915B975F96B2 |
||||||
|
:1008F0002D913C9190978823A9F05C968C915C9700 |
||||||
|
:10090000853080F05C961C925C972034310519F09C |
||||||
|
:1009100080E490E002C085E790E090969C938E93EF |
||||||
|
:100920005F9723C05A968C915A9759969C915997E4 |
||||||
|
:10093000982341F05C969C915C979F5F5C969C939A |
||||||
|
:100940005C970FC05C961C925C972034310519F0BF |
||||||
|
:1009500020E430E002C025E730E090963C932E93EF |
||||||
|
:100960005F97880F5A968C935A9788E058968C9385 |
||||||
|
:1009700058975F96ED91FC9190975D968D919C9123 |
||||||
|
:100980005E97E80FF91F9F0131705E963C932E939E |
||||||
|
:100990005D9758968C915897815058968C93FF2765 |
||||||
|
:1009A000E038F10530F08FEF90E0AC014E1B5F0BAB |
||||||
|
:1009B000FA01E859FF4F84912F3F310511F008F0FB |
||||||
|
:1009C00080950895EF92FF920F931F93CF93DF933B |
||||||
|
:1009D000FC018C010D531F4FD8014D915C91119773 |
||||||
|
:1009E000129711965C934E93A555B10914968D916B |
||||||
|
:1009F0009C91159712962D913C911397821793070E |
||||||
|
:100A000021F42D913C91119707C014968D919C91E2 |
||||||
|
:100A100015979C012F5F3F4F15963C932E9314978B |
||||||
|
:100A2000EC012881260290011124C9019595879532 |
||||||
|
:100A300095958795E801998388837F01D7ECED0E22 |
||||||
|
:100A4000F11CE701288139818F010B531F4FE80109 |
||||||
|
:100A500039832883840F951F35952795820F931F1F |
||||||
|
:100A6000E70199838883AF0147535F4F21E0181650 |
||||||
|
:100A700019060CF420E0EA018881880F822B888314 |
||||||
|
:100A800016968D919C911797EC01688316962D917F |
||||||
|
:100A90003C91179712968D919C91139728173907BF |
||||||
|
:100AA00021F48D919C91119705C016968D919C9182 |
||||||
|
:100AB0001797019617969C938E931697DA018C914F |
||||||
|
:100AC000982F9695969589278370DF01A653BF4F7F |
||||||
|
:100AD000833049F48C91803214F48F5F01C08150CF |
||||||
|
:100AE0008C9311A203C081A18F5F81A38C91885F39 |
||||||
|
:100AF000803414F48C936BC18F738C93DF01A553F6 |
||||||
|
:100B0000BF4F8C91880F8C93EA01988197702BEFDF |
||||||
|
:100B1000290F233010F0933011F481608C938C9165 |
||||||
|
:100B2000982F96958927809581709685990F892BA6 |
||||||
|
:100B300086878E3709F052C0DF01A758BF4F149641 |
||||||
|
:100B40002D913C9115978D919C91119728173907FC |
||||||
|
:100B500059F416962D913C91179712968D919C9170 |
||||||
|
:100B6000139728173907B1F116962D913C911797D5 |
||||||
|
:100B700014968D919C91159701972817390751F17B |
||||||
|
:100B80001696CD91DC9117978EE7888316962D9156 |
||||||
|
:100B90003C91179712968D919C91139728173907BE |
||||||
|
:100BA00021F48D919C91119705C016968D919C9181 |
||||||
|
:100BB0001797019617969C938E93169791E0918BB9 |
||||||
|
:100BC0008389863020F4128A8F5F838B01C0928BD9 |
||||||
|
:100BD00081E0BFC0118A128A138ABAC08F778F371B |
||||||
|
:100BE00011F4118A09C08289882311F02A9A01C060 |
||||||
|
:100BF0002A988189811103C0128A138AE8C08685E8 |
||||||
|
:100C0000982F9F739E3309F4E2C080FF03C0808950 |
||||||
|
:100C10008068808B97859F5F97878089983008F4DC |
||||||
|
:100C20009DC0DF01A758BF4F92E8980F923018F08F |
||||||
|
:100C30008B3109F046C014962D913C9115978D91FA |
||||||
|
:100C40009C9111972817390759F416962D913C91CC |
||||||
|
:100C5000179712968D919C9113972817390759F180 |
||||||
|
:100C600016962D913C91179714968D919C911597FE |
||||||
|
:100C7000019728173907F9F01696CD91DC9117974F |
||||||
|
:100C80008BE1888316962D913C91179712968D9142 |
||||||
|
:100C90009C9113972817390721F48D919C911197F6 |
||||||
|
:100CA00005C016968D919C911797019617969C9367 |
||||||
|
:100CB0008E93169706C0118A128A138A2A9880E0AA |
||||||
|
:100CC00001C081E014964D915C9115972D913C9156 |
||||||
|
:100CD00011974217530759F416964D915C91179747 |
||||||
|
:100CE00012962D913C9113974217530769F116966E |
||||||
|
:100CF0004D915C91179714962D913C911597215029 |
||||||
|
:100D000031094217530701F190891696CD91DC9174 |
||||||
|
:100D10001797988316964D915C91179712962D917F |
||||||
|
:100D20003C9113974217530721F42D913C91119751 |
||||||
|
:100D300006C016962D913C9117972F5F3F4F17963F |
||||||
|
:100D40003C932E93169705C0118A128A138A2A980B |
||||||
|
:100D500080E0108A1786882321F039C08695808B21 |
||||||
|
:100D600036C0EF01C453DF4F888199818160998338 |
||||||
|
:100D70008883DF01A758BF4F14962D913C9115979A |
||||||
|
:100D80008D919C9111972817390759F416962D913A |
||||||
|
:100D90003C91179712968D919C91139728173907BC |
||||||
|
:100DA00061F016962D913C91179714968D919C9118 |
||||||
|
:100DB000159701972817390751F416968D919C9134 |
||||||
|
:100DC000179715969C938E9314971982188281A178 |
||||||
|
:100DD000813618F011A2128A2A98DF91CF911F91C3 |
||||||
|
:100DE0000F91FF90EF9008951F920F920FB60F9200 |
||||||
|
:100DF00011242F933F934F935F936F937F938F9320 |
||||||
|
:100E00009F93AF93BF93EF93FF9380E286BB609174 |
||||||
|
:100E1000780070917900769567957695679560581A |
||||||
|
:100E200080913308909134080E94E204809113016C |
||||||
|
:100E3000882349F080913308909134080E94BB03C5 |
||||||
|
:100E4000807F886001C080E88BB98091FA0490911E |
||||||
|
:100E5000FB04A091FC04B091FD040196A11DB11DFD |
||||||
|
:100E60008093FA049093FB04A093FC04B093FD04D8 |
||||||
|
:100E7000FF91EF91BF91AF919F918F917F916F9172 |
||||||
|
:100E80005F914F913F912F910F900FBE0F901F9048 |
||||||
|
:100E90001895CF92DF92EF92FF920F931F93CF930B |
||||||
|
:100EA000DF931F92CDB7DEB77C01262F82E8860F35 |
||||||
|
:100EB0008701065E1C4F823010F06B3149F4F80157 |
||||||
|
:100EC000608171818BE190E029830E94540B29811C |
||||||
|
:100ED000D701A05EBC4F3C9111964C911197822F87 |
||||||
|
:100EE00090E0FC01E327EE0FFF1FE851FF4F259133 |
||||||
|
:100EF0003491C42ED12C2C253D252D933C93F80103 |
||||||
|
:100F0000608171810F90DF91CF911F910F91FF90C0 |
||||||
|
:100F1000EF90DF90CF900C94540BCF93DF93E7E2E8 |
||||||
|
:100F2000F3E0DC01EF011D922197E9F7FC01E65E99 |
||||||
|
:100F3000FC4F518340833297718360833A963183AB |
||||||
|
:100F4000208332972FEF3FEF318320833297318315 |
||||||
|
:100F50002083389681E08083DF91CF9108953F927E |
||||||
|
:100F60004F925F926F927F928F929F92AF92BF92B9 |
||||||
|
:100F7000CF92DF92EF92FF920F931F93CF93DF9365 |
||||||
|
:100F80002C013C0126EE621A2CEF720A6C014BED2B |
||||||
|
:100F9000C41A4CEFD40AEC01CC5DDC4F8C01045E2A |
||||||
|
:100FA0001C4F7C0182EEE81A8CEFF80A332433944C |
||||||
|
:100FB000AA24AA94BA2C4201AEED8A1AACEF9A0A7E |
||||||
|
:100FC000F301808191810E94160B8F3FFFEF9F07F5 |
||||||
|
:100FD00009F459C0F6012081211129C08E379105ED |
||||||
|
:100FE000D9F4D8018D919C91429770F0F7018081DE |
||||||
|
:100FF0009181883B904F41F42A9AD401ED91FC9164 |
||||||
|
:10100000309711F0C20109953882F701B182A082B0 |
||||||
|
:10101000D8011D921C92D4CF8F37910511F41882FC |
||||||
|
:10102000CFCF8B31910519F4F6013082C9CF2881D9 |
||||||
|
:10103000222331F1D8012D913C912831B3E03B07B7 |
||||||
|
:10104000F0F4A9014F5F5F4FF80151834083F20133 |
||||||
|
:10105000E20FF31F8083D7012D913C91F901E8271E |
||||||
|
:10106000FF27EE0FFF1FE851FF4F85919491232F2B |
||||||
|
:10107000332782279327F7019183808301C0188249 |
||||||
|
:10108000D6011C929DCFDF91CF911F910F91FF90C0 |
||||||
|
:10109000EF90DF90CF90BF90AF909F908F907F9018 |
||||||
|
:1010A0006F905F904F903F9008956F927F928F92D4 |
||||||
|
:1010B0009F92AF92BF92CF92DF92EF92FF920F93E7 |
||||||
|
:1010C0001F93CF93DF93EC013B014A017C018AED32 |
||||||
|
:1010D000E81A8CEFF80AF70110825E01F0EEAF1A01 |
||||||
|
:1010E000FCEFBF0A8FEF9FEFF501918380836E01C4 |
||||||
|
:1010F000F6EECF1AFCEFDF0AF601608171818EE710 |
||||||
|
:1011000090E00E94540B8301860C971C081519056A |
||||||
|
:1011100039F0F80161918F01CE010E944907F6CFA5 |
||||||
|
:10112000F501608111816095CE010E944907612F10 |
||||||
|
:101130006095CE010E944907F601608171818EE7BA |
||||||
|
:1011400090E00E94540B81E0F7018083DF91CF9102 |
||||||
|
:101150001F910F91FF90EF90DF90CF90BF90AF90D5 |
||||||
|
:101160009F908F907F906F90089590933808809310 |
||||||
|
:1011700037085093FF044093FE0470933A0860933D |
||||||
|
:101180003908109236080895EF92FF920F931F933B |
||||||
|
:10119000CF93DF93EC016091FE047091FF0480EC2B |
||||||
|
:1011A00090E00E94540B6091FE047091FF0480E077 |
||||||
|
:1011B00090E00E94540B8E017E0184EEE81A8CEFC1 |
||||||
|
:1011C000F80AF70120813181225031096091FE0433 |
||||||
|
:1011D0007091FF04C8018C1B9D0B8217930708F5C3 |
||||||
|
:1011E000F80181918F01803C59F48BED90E00E94D1 |
||||||
|
:1011F000540B6091FE047091FF048CED90E00EC0E2 |
||||||
|
:101200008B3D59F48BED90E00E94540B6091FE04ED |
||||||
|
:101210007091FF048DED90E001C090E00E94540BAE |
||||||
|
:10122000D0CF80EC90E0DF91CF911F910F91FF9094 |
||||||
|
:10123000EF900C94540B4F925F926F927F928F922B |
||||||
|
:101240009F92AF92BF92EF92FF920F931F93CF9313 |
||||||
|
:10125000DF93EC018B017A01E0913908F0913A08B3 |
||||||
|
:101260008289811138C00E94060B90910001891774 |
||||||
|
:1012700030F4A701B801CE010E94550846C08FB7CF |
||||||
|
:10128000F8948090FA049090FB04A090FC04B09035 |
||||||
|
:10129000FD048FBF209101013091020140910301B3 |
||||||
|
:1012A00050910401AAE0B0E00E948D0A2FB7F89493 |
||||||
|
:1012B0004090FA045090FB046090FC047090FD0490 |
||||||
|
:1012C0002FBF481859086A087B0846165706680653 |
||||||
|
:1012D000790664F3C1CFE0913908F0913A08818929 |
||||||
|
:1012E000882309F4B9CF80913708909138080E947B |
||||||
|
:1012F000AF07E0913908F0913A08E453FF4F80813D |
||||||
|
:101300009181892B41F311821082809136088823C4 |
||||||
|
:10131000A1F1CA5DDC4F8881811101C0FFCF6091CE |
||||||
|
:10132000FE047091FF0480EC90E00E94540B6091E9 |
||||||
|
:10133000FE047091FF048FE090E00E94540B6091D6 |
||||||
|
:10134000FE047091FF0481E090E00E94540B6091D4 |
||||||
|
:10135000FE047091FF0480EC90E0DF91CF911F912B |
||||||
|
:101360000F91FF90EF90BF90AF909F908F907F90E4 |
||||||
|
:101370006F905F904F900C94540BDF91CF911F9121 |
||||||
|
:101380000F91FF90EF90BF90AF909F908F907F90C4 |
||||||
|
:101390006F905F904F90089590913B089923A1F032 |
||||||
|
:1013A000803C01F580910D01811111C010923B0824 |
||||||
|
:1013B00040913C0850913D0864E171E0809137080C |
||||||
|
:1013C000909138080C941B09803C09F086C081E09C |
||||||
|
:1013D00080933B088EEF80930D0110923D08109290 |
||||||
|
:1013E0003C08089520913C0830913D08283193E055 |
||||||
|
:1013F000390708F072C090910D012115310531F4C3 |
||||||
|
:101400009E3F21F48F7080930D01089591111FC0AC |
||||||
|
:101410008B3D21F481E08093350808959091350843 |
||||||
|
:10142000992349F08C3D21F08D3D19F48BED01C0DD |
||||||
|
:1014300080EC10923508A9014F5F5F4F50933D0833 |
||||||
|
:1014400040933C08F901EC5EFE4F80830895913093 |
||||||
|
:1014500079F4282F30E0AAE0B0E00E947E0A609381 |
||||||
|
:10146000090170930A0180930B0190930C01089578 |
||||||
|
:10147000943089F42AE0829FC0011124AA2797FDA5 |
||||||
|
:10148000A095BA2F8093050190930601A0930701C0 |
||||||
|
:10149000B09308010895933089F42AE0829FC00137 |
||||||
|
:1014A0001124AA2797FDA095BA2F8093010190934C |
||||||
|
:1014B0000201A0930301B09304010895923019F43E |
||||||
|
:1014C0008093000108959F3041F4811103C0109270 |
||||||
|
:1014D0003608089581E08093360808950E949501AA |
||||||
|
:1014E0008CE095E00E94AF0780E00E94080288230C |
||||||
|
:1014F000B9F30E9412020E94CC09F2CFA29FB00160 |
||||||
|
:10150000B39FC001A39F700D811D1124911DB29F37 |
||||||
|
:10151000700D811D1124911D08950E947E0AA59FC2 |
||||||
|
:10152000900DB49F900DA49F800D911D11240895DE |
||||||
|
:10153000A1E21A2EAA1BBB1BFD010DC0AA1FBB1FD7 |
||||||
|
:10154000EE1FFF1FA217B307E407F50720F0A21B49 |
||||||
|
:10155000B30BE40BF50B661F771F881F991F1A94B6 |
||||||
|
:1015600069F760957095809590959B01AC01BD01E0 |
||||||
|
:10157000CF0108958F929F92AF92BF92CF92DF9248 |
||||||
|
:10158000EF92FF92CF93DF93EC01688179818A819A |
||||||
|
:101590009B81611571058105910521F464E279ED66 |
||||||
|
:1015A0008BE597E02DE133EF41E050E00E94940B92 |
||||||
|
:1015B00049015A019B01AC01A7EAB1E40E948D0ADE |
||||||
|
:1015C0006B017C01ACEEB4EFA50194010E948F0B7E |
||||||
|
:1015D000DC01CB018C0D9D1DAE1DBF1DB7FF03C0EF |
||||||
|
:1015E0000197A109B04888839983AA83BB839F7719 |
||||||
|
:1015F000DF91CF91FF90EF90DF90CF90BF90AF90B1 |
||||||
|
:101600009F908F9008950E94BA0A08958EE091E00D |
||||||
|
:101610000E94BA0A0895A0E0B0E080930E01909372 |
||||||
|
:101620000F01A0931001B09311010895CF93DF93A0 |
||||||
|
:10163000EC012B8120FF33C026FF0AC02F7B2B83B8 |
||||||
|
:101640008E819F8101969F838E838A8190E029C03D |
||||||
|
:1016500022FF0FC0E881F9818081992787FD90954D |
||||||
|
:10166000009719F420622B831AC03196F983E8831E |
||||||
|
:101670000EC0EA85FB85099597FF09C02B8101966D |
||||||
|
:1016800011F080E201C080E1822B8B8308C02E81A3 |
||||||
|
:101690003F812F5F3F4F3F832E83992702C08FEFFB |
||||||
|
:1016A0009FEFDF91CF9108950F931F93CF93DF9317 |
||||||
|
:1016B000FB01238121FD03C08FEF9FEF28C022FF94 |
||||||
|
:1016C00016C046815781248135814217530744F45F |
||||||
|
:1016D000A081B1819D012F5F3F4F318320838C9387 |
||||||
|
:1016E000268137812F5F3F4F3783268310C0EB0160 |
||||||
|
:1016F000092F182F0084F185E02D0995892BE1F63B |
||||||
|
:101700008E819F8101969F838E83812F902FDF9101 |
||||||
|
:10171000CF911F910F910895B7FF0C948D0A0E94ED |
||||||
|
:101720008D0A821B930B0895052E97FB1EF40094DF |
||||||
|
:101730000E94AB0B57FD07D00E94980A07FC03D00C |
||||||
|
:101740004EF40C94AB0B50954095309521953F4F3E |
||||||
|
:101750004F4F5F4F089590958095709561957F4F9D |
||||||
|
:0A1760008F4F9F4F0895F894FFCFBC |
||||||
|
:10176A003FC8000000320000005E010000FE0100D8 |
||||||
|
:02177A0000006D |
||||||
|
:00000001FF |
@ -0,0 +1,89 @@ |
|||||||
|
[BOM_OPTIONS] |
||||||
|
; General BoM options here |
||||||
|
; If 'ignore_dnf' option is set to 1, rows that are not to be fitted on the PCB will not be written to the BoM file |
||||||
|
ignore_dnf = 1 |
||||||
|
; If 'use_alt' option is set to 1, grouped references will be printed in the alternate compressed style eg: R1-R7,R18 |
||||||
|
use_alt = 0 |
||||||
|
; If 'alt_wrap' option is set to and integer N, the references field will wrap after N entries are printed |
||||||
|
alt_wrap = 0 |
||||||
|
; If 'number_rows' option is set to 1, each row in the BoM will be prepended with an incrementing row number |
||||||
|
number_rows = 1 |
||||||
|
; If 'group_connectors' option is set to 1, connectors with the same footprints will be grouped together, independent of the name of the connector |
||||||
|
group_connectors = 1 |
||||||
|
; If 'test_regex' option is set to 1, each component group will be tested against a number of regular-expressions (specified, per column, below). If any matches are found, the row is ignored in the output file |
||||||
|
test_regex = 1 |
||||||
|
; If 'merge_blank_fields' option is set to 1, component groups with blank fields will be merged into the most compatible group, where possible |
||||||
|
merge_blank_fields = 1 |
||||||
|
; If '{opt}' option is set to 1, the schematic version number will be appended to the filename. |
||||||
|
include_version_number = 1 |
||||||
|
; Field name used to determine if a particular part is to be fitted |
||||||
|
fit_field = Config |
||||||
|
; Make a backup of the bom before generating the new one, using the following template |
||||||
|
make_backup = %O.tmp |
||||||
|
; Default number of boards to produce if none given on CLI with -n |
||||||
|
number_boards = 1 |
||||||
|
; Default PCB variant if none given on CLI with -r |
||||||
|
board_variant = default |
||||||
|
|
||||||
|
[IGNORE_COLUMNS] |
||||||
|
; Any column heading that appears here will be excluded from the Generated BoM |
||||||
|
; Titles are case-insensitive |
||||||
|
Part Lib |
||||||
|
Footprint Lib |
||||||
|
|
||||||
|
[COLUMN_ORDER] |
||||||
|
; Columns will apear in the order they are listed here |
||||||
|
; Titles are case-insensitive |
||||||
|
Description |
||||||
|
Part |
||||||
|
Part Lib |
||||||
|
References |
||||||
|
Value |
||||||
|
Footprint |
||||||
|
Footprint Lib |
||||||
|
Quantity Per PCB |
||||||
|
Build Quantity |
||||||
|
Datasheet |
||||||
|
|
||||||
|
[GROUP_FIELDS] |
||||||
|
; List of fields used for sorting individual components into groups |
||||||
|
; Components which match (comparing *all* fields) will be grouped together |
||||||
|
; Field names are case-insensitive |
||||||
|
Part |
||||||
|
Part Lib |
||||||
|
Value |
||||||
|
Footprint |
||||||
|
Footprint Lib |
||||||
|
|
||||||
|
[COMPONENT_ALIASES] |
||||||
|
; A series of values which are considered to be equivalent for the part name |
||||||
|
; Each line represents a tab-separated list of equivalent component name values |
||||||
|
; e.g. 'c c_small cap' will ensure the equivalent capacitor symbols can be grouped together |
||||||
|
; Aliases are case-insensitive |
||||||
|
c c_small cap capacitor |
||||||
|
r r_small res resistor |
||||||
|
sw switch |
||||||
|
l l_small inductor |
||||||
|
zener zenersmall |
||||||
|
d diode d_small |
||||||
|
|
||||||
|
[REGEX_INCLUDE] |
||||||
|
; A series of regular expressions used to include parts in the BoM |
||||||
|
; If there are any regex defined here, only components that match against ANY of them will be included in the BOM |
||||||
|
; Column names are case-insensitive |
||||||
|
; Format is: "ColumName Regex" (tab-separated) |
||||||
|
|
||||||
|
[REGEX_EXCLUDE] |
||||||
|
; A series of regular expressions used to exclude parts from the BoM |
||||||
|
; If a component matches ANY of these, it will be excluded from the BoM |
||||||
|
; Column names are case-insensitive |
||||||
|
; Format is: "ColumName Regex" (tab-separated) |
||||||
|
References ^TP[0-9]* |
||||||
|
References ^FID |
||||||
|
Part mount.*hole |
||||||
|
Part solder.*bridge |
||||||
|
Part test.*point |
||||||
|
Footprint test.*point |
||||||
|
Footprint mount.*hole |
||||||
|
Footprint fiducial |
||||||
|
|
@ -0,0 +1,437 @@ |
|||||||
|
EESchema-LIBRARY Version 2.4 |
||||||
|
#encoding utf-8 |
||||||
|
# |
||||||
|
# Connector_Conn_01x02_Male |
||||||
|
# |
||||||
|
DEF Connector_Conn_01x02_Male J 0 40 Y N 1 F N |
||||||
|
F0 "J" 0 100 50 H V C CNN |
||||||
|
F1 "Connector_Conn_01x02_Male" 0 -200 50 H V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
$FPLIST |
||||||
|
Connector*:*_1x??_* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
S 34 -95 0 -105 1 1 6 F |
||||||
|
S 34 5 0 -5 1 1 6 F |
||||||
|
P 2 1 1 6 50 -100 34 -100 N |
||||||
|
P 2 1 1 6 50 0 34 0 N |
||||||
|
X Pin_1 1 200 0 150 L 50 50 1 1 P |
||||||
|
X Pin_2 2 200 -100 150 L 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Connector_Conn_01x05_Male |
||||||
|
# |
||||||
|
DEF Connector_Conn_01x05_Male J 0 40 Y N 1 F N |
||||||
|
F0 "J" 0 300 50 H V C CNN |
||||||
|
F1 "Connector_Conn_01x05_Male" 0 -300 50 H V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
$FPLIST |
||||||
|
Connector*:*_1x??_* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
S 34 -195 0 -205 1 1 6 F |
||||||
|
S 34 -95 0 -105 1 1 6 F |
||||||
|
S 34 5 0 -5 1 1 6 F |
||||||
|
S 34 105 0 95 1 1 6 F |
||||||
|
S 34 205 0 195 1 1 6 F |
||||||
|
P 2 1 1 6 50 -200 34 -200 N |
||||||
|
P 2 1 1 6 50 -100 34 -100 N |
||||||
|
P 2 1 1 6 50 0 34 0 N |
||||||
|
P 2 1 1 6 50 100 34 100 N |
||||||
|
P 2 1 1 6 50 200 34 200 N |
||||||
|
X Pin_1 1 200 200 150 L 50 50 1 1 P |
||||||
|
X Pin_2 2 200 100 150 L 50 50 1 1 P |
||||||
|
X Pin_3 3 200 0 150 L 50 50 1 1 P |
||||||
|
X Pin_4 4 200 -100 150 L 50 50 1 1 P |
||||||
|
X Pin_5 5 200 -200 150 L 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Connector_USB_B |
||||||
|
# |
||||||
|
DEF Connector_USB_B J 0 40 Y Y 1 F N |
||||||
|
F0 "J" -200 450 50 H V L CNN |
||||||
|
F1 "Connector_USB_B" -200 350 50 H V L CNN |
||||||
|
F2 "" 150 -50 50 H I C CNN |
||||||
|
F3 "" 150 -50 50 H I C CNN |
||||||
|
$FPLIST |
||||||
|
USB* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
C -150 85 25 0 1 10 F |
||||||
|
C -25 135 15 0 1 10 F |
||||||
|
S -200 -300 200 300 0 1 10 f |
||||||
|
S -150 220 -100 180 0 1 0 F |
||||||
|
S -5 -300 5 -270 0 1 0 N |
||||||
|
S 10 50 -20 20 0 1 10 F |
||||||
|
S 200 -105 170 -95 0 1 0 N |
||||||
|
S 200 -5 170 5 0 1 0 N |
||||||
|
S 200 195 170 205 0 1 0 N |
||||||
|
P 2 0 1 10 -75 85 25 85 N |
||||||
|
P 4 0 1 10 -125 85 -100 85 -50 135 -25 135 N |
||||||
|
P 4 0 1 10 -100 85 -75 85 -50 35 0 35 N |
||||||
|
P 4 0 1 10 25 110 25 60 75 85 25 110 F |
||||||
|
P 7 0 1 0 -160 170 -90 170 -90 225 -105 240 -145 240 -160 225 -160 170 N |
||||||
|
X VBUS 1 300 200 100 L 50 50 1 1 w |
||||||
|
X D- 2 300 -100 100 L 50 50 1 1 B |
||||||
|
X D+ 3 300 0 100 L 50 50 1 1 B |
||||||
|
X GND 4 0 -400 100 U 50 50 1 1 w |
||||||
|
X Shield 5 -100 -400 100 U 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Device_CP_Small |
||||||
|
# |
||||||
|
DEF Device_CP_Small C 0 10 N N 1 F N |
||||||
|
F0 "C" 10 70 50 H V L CNN |
||||||
|
F1 "Device_CP_Small" 10 -80 50 H V L CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
$FPLIST |
||||||
|
CP_* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
S -60 -12 60 -27 0 1 0 F |
||||||
|
S -60 27 60 12 0 1 0 N |
||||||
|
P 2 0 1 0 -50 60 -30 60 N |
||||||
|
P 2 0 1 0 -40 50 -40 70 N |
||||||
|
X ~ 1 0 100 73 D 50 50 1 1 P |
||||||
|
X ~ 2 0 -100 73 U 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Device_C_Small |
||||||
|
# |
||||||
|
DEF Device_C_Small C 0 10 N N 1 F N |
||||||
|
F0 "C" 10 70 50 H V L CNN |
||||||
|
F1 "Device_C_Small" 10 -80 50 H V L CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
$FPLIST |
||||||
|
C_* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
P 2 0 1 13 -60 -20 60 -20 N |
||||||
|
P 2 0 1 12 -60 20 60 20 N |
||||||
|
X ~ 1 0 100 80 D 50 50 1 1 P |
||||||
|
X ~ 2 0 -100 80 U 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Device_Crystal_Small |
||||||
|
# |
||||||
|
DEF Device_Crystal_Small Y 0 40 N N 1 F N |
||||||
|
F0 "Y" 0 100 50 H V C CNN |
||||||
|
F1 "Device_Crystal_Small" 0 -100 50 H V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
$FPLIST |
||||||
|
Crystal* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
S -30 -60 30 60 0 1 0 N |
||||||
|
P 2 0 1 15 -50 -30 -50 30 N |
||||||
|
P 2 0 1 15 50 -30 50 30 N |
||||||
|
X 1 1 -100 0 50 R 50 50 1 1 P |
||||||
|
X 2 2 100 0 50 L 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Device_D_Small_ALT |
||||||
|
# |
||||||
|
DEF Device_D_Small_ALT D 0 10 N N 1 F N |
||||||
|
F0 "D" -50 80 50 H V L CNN |
||||||
|
F1 "Device_D_Small_ALT" -150 -80 50 H V L CNN |
||||||
|
F2 "" 0 0 50 V I C CNN |
||||||
|
F3 "" 0 0 50 V I C CNN |
||||||
|
$FPLIST |
||||||
|
TO-???* |
||||||
|
*_Diode_* |
||||||
|
*SingleDiode* |
||||||
|
D_* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
P 2 0 1 0 -30 -40 -30 40 N |
||||||
|
P 2 0 1 0 -30 0 30 0 N |
||||||
|
P 4 0 1 0 30 -40 -30 0 30 40 30 -40 F |
||||||
|
X K 1 -100 0 70 R 50 50 1 1 P |
||||||
|
X A 2 100 0 70 L 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Device_LED_Small_ALT |
||||||
|
# |
||||||
|
DEF Device_LED_Small_ALT D 0 10 N N 1 F N |
||||||
|
F0 "D" -50 125 50 H V L CNN |
||||||
|
F1 "Device_LED_Small_ALT" -175 -100 50 H V L CNN |
||||||
|
F2 "" 0 0 50 V I C CNN |
||||||
|
F3 "" 0 0 50 V I C CNN |
||||||
|
$FPLIST |
||||||
|
LED* |
||||||
|
LED_SMD:* |
||||||
|
LED_THT:* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
P 2 0 1 0 -30 -40 -30 40 N |
||||||
|
P 2 0 1 0 40 0 -30 0 N |
||||||
|
P 4 0 1 0 30 -40 -30 0 30 40 30 -40 F |
||||||
|
P 5 0 1 0 0 30 -20 50 -10 50 -20 50 -20 40 N |
||||||
|
P 5 0 1 0 20 50 0 70 10 70 0 70 0 60 N |
||||||
|
X K 1 -100 0 70 R 50 50 1 1 P |
||||||
|
X A 2 100 0 70 L 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Device_R_POT_Small |
||||||
|
# |
||||||
|
DEF Device_R_POT_Small RV 0 40 Y N 1 F N |
||||||
|
F0 "RV" -175 0 50 V V C CNN |
||||||
|
F1 "Device_R_POT_Small" -100 0 50 V V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
$FPLIST |
||||||
|
Potentiometer* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
S 30 71 -30 -71 0 1 10 N |
||||||
|
P 6 0 1 0 35 0 25 0 65 15 65 -15 25 0 35 0 F |
||||||
|
X 1 1 0 100 25 D 25 25 1 1 P |
||||||
|
X 2 2 100 0 39 L 25 25 1 1 P |
||||||
|
X 3 3 0 -100 25 U 25 25 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Device_R_Small |
||||||
|
# |
||||||
|
DEF Device_R_Small R 0 10 N N 1 F N |
||||||
|
F0 "R" 30 20 50 H V L CNN |
||||||
|
F1 "Device_R_Small" 30 -40 50 H V L CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
$FPLIST |
||||||
|
R_* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
S -30 70 30 -70 0 1 8 N |
||||||
|
X ~ 1 0 100 30 D 50 50 1 1 P |
||||||
|
X ~ 2 0 -100 30 U 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Graphic_Logo_Open_Hardware_Small |
||||||
|
# |
||||||
|
DEF Graphic_Logo_Open_Hardware_Small #LOGO 0 40 Y Y 1 F N |
||||||
|
F0 "#LOGO" 0 275 50 H I C CNN |
||||||
|
F1 "Graphic_Logo_Open_Hardware_Small" 0 -225 50 H I C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
DRAW |
||||||
|
P 277 0 1 0 132 -171 130 -170 125 -167 118 -162 109 -156 100 -150 93 -146 88 -142 86 -141 85 -142 81 -144 75 -147 71 -149 66 -151 63 -151 63 -151 61 -147 58 -139 53 -130 49 -119 44 -107 38 -95 34 -83 29 -72 26 -64 24 -58 23 -55 23 -55 26 -52 31 -49 41 -40 51 -27 57 -13 60 3 58 18 52 32 42 45 30 54 16 60 0 62 -15 61 -29 55 -42 45 -48 39 -55 26 -60 12 -60 9 -59 -7 -55 -21 -47 -34 -36 -45 -34 -46 -29 -50 -25 -53 -23 -55 -42 -102 -45 -110 -51 -123 -55 -134 -59 -143 -62 -149 -63 -151 -63 -151 -65 -151 -68 -150 -75 -147 -79 -145 -84 -142 -87 -141 -89 -142 -93 -145 -100 -150 -109 -156 -117 -161 -124 -166 -130 -170 -132 -171 -133 -171 -135 -170 -139 -166 -146 -160 -155 -151 -156 -150 -164 -142 -170 -136 -174 -131 -175 -129 -175 -129 -174 -127 -170 -121 -166 -114 -160 -105 -144 -82 -153 -61 -155 -54 -159 -46 -161 -41 -162 -38 -165 -37 -170 -36 -179 -34 -189 -32 -199 -31 -207 -29 -214 -28 -217 -27 -217 -27 -218 -25 -218 -22 -218 -17 -219 -9 -219 3 -219 5 -218 16 -218 25 -218 30 -218 33 -218 33 -215 33 -209 35 -200 36 -190 38 -189 39 -179 41 -170 42 -164 44 -161 45 -161 45 -159 49 -156 56 -152 64 -149 72 -146 79 -144 85 -143 87 -143 87 -145 90 -148 95 -153 102 -160 111 -160 112 -166 121 -171 128 -174 133 -175 136 -175 136 -173 138 -169 143 -162 150 -155 158 -152 160 -144 169 -138 174 -134 177 -132 178 -132 178 -130 176 -124 172 -117 167 -108 161 -107 161 -98 155 -91 150 -86 146 -84 145 -83 145 -80 146 -73 148 -66 151 -58 155 -50 158 -45 160 -42 162 -42 162 -41 165 -40 171 -38 180 -36 191 -35 193 -33 203 -32 212 -31 218 -30 220 -28 221 -23 221 -16 221 -6 221 3 221 13 221 21 221 27 220 29 220 29 220 30 217 32 210 33 201 36 190 36 188 38 178 40 169 41 163 42 161 42 161 47 159 54 156 62 152 82 144 107 161 109 163 118 169 125 174 130 177 133 178 133 178 135 176 140 171 147 165 154 157 160 151 167 144 171 140 174 137 174 135 174 134 173 131 169 126 164 118 158 110 153 102 148 94 144 88 143 85 143 84 145 79 148 72 152 63 160 44 173 41 181 40 192 38 202 36 218 33 219 -26 216 -27 214 -27 208 -29 199 -30 189 -32 181 -34 172 -36 166 -37 163 -37 162 -38 160 -42 157 -49 154 -57 150 -65 147 -73 145 -79 144 -82 145 -84 149 -89 153 -97 159 -105 165 -114 170 -121 173 -126 175 -129 174 -131 171 -135 164 -141 155 -151 153 -152 145 -160 139 -166 134 -170 132 -171 F |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Isolator_CNY17-1 |
||||||
|
# |
||||||
|
DEF Isolator_CNY17-1 U 0 40 Y Y 1 F N |
||||||
|
F0 "U" -200 200 50 H V L CNN |
||||||
|
F1 "Isolator_CNY17-1" 0 200 50 H V L CNN |
||||||
|
F2 "" 0 0 50 H I L CNN |
||||||
|
F3 "" 0 0 50 H I L CNN |
||||||
|
ALIAS CNY17-2 CNY17-3 CNY17-4 |
||||||
|
$FPLIST |
||||||
|
DIP*W7.62mm* |
||||||
|
DIP*W10.16mm* |
||||||
|
SMDIP*W9.53mm* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
S -200 150 200 -150 0 1 10 f |
||||||
|
P 2 0 1 10 -125 -25 -75 -25 N |
||||||
|
P 2 0 1 0 115 -55 160 -100 N |
||||||
|
P 2 0 1 0 115 -50 75 -50 N |
||||||
|
P 2 0 1 0 115 -45 160 0 N |
||||||
|
P 2 0 1 0 160 -100 200 -100 N |
||||||
|
P 2 0 1 0 200 0 160 0 N |
||||||
|
P 3 0 1 0 -200 100 -100 100 -100 -30 N |
||||||
|
P 3 0 1 0 -100 -25 -100 -100 -200 -100 N |
||||||
|
P 3 0 1 0 75 -50 75 100 200 100 N |
||||||
|
P 3 0 1 14 115 -10 115 -90 115 -90 N |
||||||
|
P 4 0 1 10 -100 -25 -125 25 -75 25 -100 -25 N |
||||||
|
P 4 0 1 0 155 -95 145 -75 135 -85 155 -95 N |
||||||
|
P 5 0 1 0 -25 -20 25 -20 10 -25 10 -15 25 -20 N |
||||||
|
P 5 0 1 0 -25 20 25 20 10 15 10 25 25 20 N |
||||||
|
X ~ 1 -300 100 100 R 50 50 1 1 P |
||||||
|
X ~ 2 -300 -100 100 R 50 50 1 1 P |
||||||
|
X NC 3 -200 0 100 R 50 50 1 1 N N |
||||||
|
X ~ 4 300 -100 100 L 50 50 1 1 P |
||||||
|
X ~ 5 300 0 100 L 50 50 1 1 P |
||||||
|
X ~ 6 300 100 100 L 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# MCU_Microchip_ATmega_ATmega328P-PU |
||||||
|
# |
||||||
|
DEF MCU_Microchip_ATmega_ATmega328P-PU U 0 20 Y Y 1 F N |
||||||
|
F0 "U" -500 1450 50 H V L BNN |
||||||
|
F1 "MCU_Microchip_ATmega_ATmega328P-PU" 100 -1450 50 H V L TNN |
||||||
|
F2 "Package_DIP:DIP-28_W7.62mm" 0 0 50 H I C CIN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
ALIAS ATmega48P-20PU ATmega48A-PU ATmega48PA-PU ATmega88PV-10PU ATmega88P-20PU ATmega88A-PU ATmega88PA-PU ATmega168PV-10PU ATmega168P-20PU ATmega168A-PU ATmega168PA-PU ATmega328-PU ATmega328P-PU |
||||||
|
$FPLIST |
||||||
|
DIP*W7.62mm* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
S -500 -1400 500 1400 0 1 10 f |
||||||
|
X ~RESET~/PC6 1 600 -300 100 L 50 50 1 1 T |
||||||
|
X XTAL2/PB7 10 600 500 100 L 50 50 1 1 T |
||||||
|
X PD5 11 600 -1000 100 L 50 50 1 1 T |
||||||
|
X PD6 12 600 -1100 100 L 50 50 1 1 T |
||||||
|
X PD7 13 600 -1200 100 L 50 50 1 1 T |
||||||
|
X PB0 14 600 1200 100 L 50 50 1 1 T |
||||||
|
X PB1 15 600 1100 100 L 50 50 1 1 T |
||||||
|
X PB2 16 600 1000 100 L 50 50 1 1 T |
||||||
|
X PB3 17 600 900 100 L 50 50 1 1 T |
||||||
|
X PB4 18 600 800 100 L 50 50 1 1 T |
||||||
|
X PB5 19 600 700 100 L 50 50 1 1 T |
||||||
|
X PD0 2 600 -500 100 L 50 50 1 1 T |
||||||
|
X AVCC 20 100 1500 100 D 50 50 1 1 W |
||||||
|
X AREF 21 -600 1200 100 R 50 50 1 1 P |
||||||
|
X GND 22 -50 -1500 100 U 50 50 1 1 P |
||||||
|
X PC0 23 600 300 100 L 50 50 1 1 T |
||||||
|
X PC1 24 600 200 100 L 50 50 1 1 T |
||||||
|
X PC2 25 600 100 100 L 50 50 1 1 T |
||||||
|
X PC3 26 600 0 100 L 50 50 1 1 T |
||||||
|
X PC4 27 600 -100 100 L 50 50 1 1 T |
||||||
|
X PC5 28 600 -200 100 L 50 50 1 1 T |
||||||
|
X PD1 3 600 -600 100 L 50 50 1 1 T |
||||||
|
X PD2 4 600 -700 100 L 50 50 1 1 T |
||||||
|
X PD3 5 600 -800 100 L 50 50 1 1 T |
||||||
|
X PD4 6 600 -900 100 L 50 50 1 1 T |
||||||
|
X VCC 7 0 1500 100 D 50 50 1 1 W |
||||||
|
X GND 8 50 -1500 100 U 50 50 1 1 W |
||||||
|
X XTAL1/PB6 9 600 600 100 L 50 50 1 1 T |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Mechanical_MountingHole |
||||||
|
# |
||||||
|
DEF Mechanical_MountingHole H 0 40 Y Y 1 F N |
||||||
|
F0 "H" 0 200 50 H V C CNN |
||||||
|
F1 "Mechanical_MountingHole" 0 125 50 H V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
$FPLIST |
||||||
|
MountingHole* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
C 0 0 50 0 1 50 N |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# Transistor_FET_2N7000 |
||||||
|
# |
||||||
|
DEF Transistor_FET_2N7000 Q 0 0 Y N 1 F N |
||||||
|
F0 "Q" 200 75 50 H V L CNN |
||||||
|
F1 "Transistor_FET_2N7000" 200 0 50 H V L CNN |
||||||
|
F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN |
||||||
|
F3 "" 0 0 50 H I L CNN |
||||||
|
ALIAS TP0610L VP0610L |
||||||
|
$FPLIST |
||||||
|
TO?92* |
||||||
|
$ENDFPLIST |
||||||
|
DRAW |
||||||
|
C 65 0 111 0 1 10 N |
||||||
|
C 100 -70 11 0 1 0 F |
||||||
|
C 100 70 11 0 1 0 F |
||||||
|
P 2 0 1 0 -100 0 10 0 N |
||||||
|
P 2 0 1 0 30 -70 100 -70 N |
||||||
|
P 2 0 1 10 30 -50 30 -90 N |
||||||
|
P 2 0 1 0 30 0 100 0 N |
||||||
|
P 2 0 1 10 30 20 30 -20 N |
||||||
|
P 2 0 1 0 30 70 100 70 N |
||||||
|
P 2 0 1 10 30 90 30 50 N |
||||||
|
P 2 0 1 0 100 -70 100 -100 N |
||||||
|
P 2 0 1 0 100 -70 100 0 N |
||||||
|
P 2 0 1 0 100 100 100 70 N |
||||||
|
P 3 0 1 10 10 75 10 -75 10 -75 N |
||||||
|
P 4 0 1 0 40 0 80 15 80 -15 40 0 F |
||||||
|
P 4 0 1 0 100 -70 130 -70 130 70 100 70 N |
||||||
|
P 4 0 1 0 110 20 115 15 145 15 150 10 N |
||||||
|
P 4 0 1 0 130 15 115 -10 145 -10 130 15 N |
||||||
|
X S 1 100 -200 100 U 50 50 1 1 P |
||||||
|
X G 2 -200 0 100 R 50 50 1 1 I |
||||||
|
X D 3 100 200 100 D 50 50 1 1 P |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# mtk_processor_CH340_module |
||||||
|
# |
||||||
|
DEF mtk_processor_CH340_module U 0 40 Y Y 1 F N |
||||||
|
F0 "U" 50 150 50 H V C CNN |
||||||
|
F1 "mtk_processor_CH340_module" 350 -850 50 H V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
DRAW |
||||||
|
T 900 600 -350 50 0 0 0 USB Normal 0 C C |
||||||
|
S 0 100 850 -800 0 1 0 f |
||||||
|
X 5V 1 -200 0 200 R 50 50 1 1 w |
||||||
|
X GND 10 1050 -500 200 L 50 50 1 1 P |
||||||
|
X DTR 11 -200 -700 200 R 50 50 1 1 O |
||||||
|
X VCC 2 -200 -100 200 R 50 50 1 1 W |
||||||
|
X 3V3 3 -200 -200 200 R 50 50 1 1 w |
||||||
|
X TxD 4 -200 -300 200 R 50 50 1 1 O |
||||||
|
X RxD 5 -200 -400 200 R 50 50 1 1 I |
||||||
|
X GND 6 -200 -500 200 R 50 50 1 1 P |
||||||
|
X 5V 7 1050 -200 200 L 50 50 1 1 w |
||||||
|
X D- 8 1050 -300 200 L 50 50 1 1 B |
||||||
|
X D+ 9 1050 -400 200 L 50 50 1 1 B |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# power_+3.3V |
||||||
|
# |
||||||
|
DEF power_+3.3V #PWR 0 0 Y Y 1 F P |
||||||
|
F0 "#PWR" 0 -150 50 H I C CNN |
||||||
|
F1 "power_+3.3V" 0 140 50 H V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
ALIAS +3.3V |
||||||
|
DRAW |
||||||
|
P 2 0 1 0 -30 50 0 100 N |
||||||
|
P 2 0 1 0 0 0 0 100 N |
||||||
|
P 2 0 1 0 0 100 30 50 N |
||||||
|
X +3V3 1 0 0 0 U 50 50 1 1 W N |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# power_+5V |
||||||
|
# |
||||||
|
DEF power_+5V #PWR 0 0 Y Y 1 F P |
||||||
|
F0 "#PWR" 0 -150 50 H I C CNN |
||||||
|
F1 "power_+5V" 0 140 50 H V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
DRAW |
||||||
|
P 2 0 1 0 -30 50 0 100 N |
||||||
|
P 2 0 1 0 0 0 0 100 N |
||||||
|
P 2 0 1 0 0 100 30 50 N |
||||||
|
X +5V 1 0 0 0 U 50 50 1 1 W N |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
# power_GND |
||||||
|
# |
||||||
|
DEF power_GND #PWR 0 0 Y Y 1 F P |
||||||
|
F0 "#PWR" 0 -250 50 H I C CNN |
||||||
|
F1 "power_GND" 0 -150 50 H V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
DRAW |
||||||
|
P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N |
||||||
|
X GND 1 0 0 0 D 50 50 1 1 W N |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
#End Library |
@ -0,0 +1,3 @@ |
|||||||
|
EESchema-DOCLIB Version 2.0 |
||||||
|
# |
||||||
|
#End Doc Library |
@ -0,0 +1,28 @@ |
|||||||
|
EESchema-LIBRARY Version 2.4 |
||||||
|
#encoding utf-8 |
||||||
|
# |
||||||
|
# CH340_module-mtk_processor |
||||||
|
# |
||||||
|
DEF CH340_module-mtk_processor U 0 40 Y Y 1 F N |
||||||
|
F0 "U" 50 150 50 H V C CNN |
||||||
|
F1 "CH340_module-mtk_processor" 350 -850 50 H V C CNN |
||||||
|
F2 "" 0 0 50 H I C CNN |
||||||
|
F3 "" 0 0 50 H I C CNN |
||||||
|
DRAW |
||||||
|
T 900 600 -350 50 0 0 0 USB Normal 0 C C |
||||||
|
S 0 100 850 -800 0 1 0 f |
||||||
|
X 5V 1 -200 0 200 R 50 50 1 1 w |
||||||
|
X GND 10 1050 -500 200 L 50 50 1 1 P |
||||||
|
X DTR 11 -200 -700 200 R 50 50 1 1 O |
||||||
|
X VCC 2 -200 -100 200 R 50 50 1 1 W |
||||||
|
X 3V3 3 -200 -200 200 R 50 50 1 1 w |
||||||
|
X TxD 4 -200 -300 200 R 50 50 1 1 O |
||||||
|
X RxD 5 -200 -400 200 R 50 50 1 1 I |
||||||
|
X GND 6 -200 -500 200 R 50 50 1 1 P |
||||||
|
X 5V 7 1050 -200 200 L 50 50 1 1 w |
||||||
|
X D- 8 1050 -300 200 L 50 50 1 1 B |
||||||
|
X D+ 9 1050 -400 200 L 50 50 1 1 B |
||||||
|
ENDDRAW |
||||||
|
ENDDEF |
||||||
|
# |
||||||
|
#End Library |
@ -0,0 +1,909 @@ |
|||||||
|
(export (version D) |
||||||
|
(design |
||||||
|
(source /home/marcel/Documenten/electronische_projecten/packetmodem_nano2/packetmodem_nano2/packetmodem_nano2.sch) |
||||||
|
(date "za 15 jan 2022 16:07:16 CET") |
||||||
|
(tool "Eeschema 5.1.8-5.1.8") |
||||||
|
(sheet (number 1) (name /) (tstamps /) |
||||||
|
(title_block |
||||||
|
(title "Packet modem Nano 2") |
||||||
|
(company "M. Konstapel") |
||||||
|
(rev 1) |
||||||
|
(date 2022-01-14) |
||||||
|
(source packetmodem_nano2.sch) |
||||||
|
(comment (number 1) (value https://meezenest.nl/mees)) |
||||||
|
(comment (number 2) (value "")) |
||||||
|
(comment (number 3) (value "")) |
||||||
|
(comment (number 4) (value ""))))) |
||||||
|
(components |
||||||
|
(comp (ref R6) |
||||||
|
(value 100k) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "100k 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5ED94444)) |
||||||
|
(comp (ref R7) |
||||||
|
(value 100k) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "100k 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5ED95C85)) |
||||||
|
(comp (ref C8) |
||||||
|
(value 1U) |
||||||
|
(footprint Capacitor_THT:C_Disc_D7.5mm_W5.0mm_P5.00mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "1U 50V 5mm pitch")) |
||||||
|
(libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5ED95EF8)) |
||||||
|
(comp (ref RV2) |
||||||
|
(value 47k) |
||||||
|
(footprint Potentiometer_THT:Potentiometer_ACP_CA9-V10_Vertical) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "47k potentiometer")) |
||||||
|
(libsource (lib Device) (part R_POT_Small) (description Potentiometer)) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EDE914D)) |
||||||
|
(comp (ref R1) |
||||||
|
(value 8k2) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "8k2 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EDF6457)) |
||||||
|
(comp (ref R2) |
||||||
|
(value 3k9) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "3k9 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EDF7C48)) |
||||||
|
(comp (ref R3) |
||||||
|
(value 2k2) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "2k2 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EDF800B)) |
||||||
|
(comp (ref R4) |
||||||
|
(value 1k) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "1k 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EDF8401)) |
||||||
|
(comp (ref R5) |
||||||
|
(value 270R) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "270R 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE0149B)) |
||||||
|
(comp (ref C5) |
||||||
|
(value 100n) |
||||||
|
(footprint Capacitor_THT:C_Disc_D7.5mm_W2.5mm_P5.00mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "100nF 50V 5mm pitch")) |
||||||
|
(libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE018C3)) |
||||||
|
(comp (ref C6) |
||||||
|
(value 10U/25V) |
||||||
|
(footprint Capacitor_THT:CP_Radial_D6.3mm_P2.50mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "10U 25V 2.5mm pitch")) |
||||||
|
(libsource (lib Device) (part CP_Small) (description "Polarized capacitor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE0BED7)) |
||||||
|
(comp (ref RV1) |
||||||
|
(value 47k) |
||||||
|
(footprint Potentiometer_THT:Potentiometer_ACP_CA9-V10_Vertical) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "47k potentiometer")) |
||||||
|
(libsource (lib Device) (part R_POT_Small) (description Potentiometer)) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE12706)) |
||||||
|
(comp (ref Q1) |
||||||
|
(value 2N7000) |
||||||
|
(footprint Package_TO_SOT_THT:TO-92_Wide) |
||||||
|
(datasheet https://www.fairchildsemi.com/datasheets/2N/2N7000.pdf) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") 2N7000)) |
||||||
|
(libsource (lib Transistor_FET) (part 2N7000) (description "0.2A Id, 200V Vds, N-Channel MOSFET, 2.6V Logic Level, TO-92")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE19961)) |
||||||
|
(comp (ref R10) |
||||||
|
(value 2M2) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "2M2 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE1F8E9)) |
||||||
|
(comp (ref R9) |
||||||
|
(value 1k) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "1k 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE200CE)) |
||||||
|
(comp (ref C9) |
||||||
|
(value 10U/25V) |
||||||
|
(footprint Capacitor_THT:CP_Radial_D6.3mm_P2.50mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "10U 25V 2.5mm pitch")) |
||||||
|
(libsource (lib Device) (part CP_Small) (description "Polarized capacitor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE206EA)) |
||||||
|
(comp (ref D1) |
||||||
|
(value 1N4148) |
||||||
|
(footprint Diode_THT:D_DO-34_SOD68_P7.62mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") 1N4148)) |
||||||
|
(libsource (lib Device) (part D_Small_ALT) (description "Diode, small symbol, filled shape")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE238EB)) |
||||||
|
(comp (ref U3) |
||||||
|
(value CNX36) |
||||||
|
(footprint Package_DIP:DIP-6_W7.62mm_Socket_LongPads) |
||||||
|
(datasheet http://www.vishay.com/docs/83606/cny17.pdf) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") CNX36)) |
||||||
|
(libsource (lib Isolator) (part CNY17-1) (description "DC Optocoupler Base Connected, Vce 70V, CTR 40-80%, Viso 5000V (RMS), DIP6")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE408E0)) |
||||||
|
(comp (ref R8) |
||||||
|
(value 270R) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "270R 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE454CE)) |
||||||
|
(comp (ref R14) |
||||||
|
(value 1k) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "1k 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE6CBC1)) |
||||||
|
(comp (ref R15) |
||||||
|
(value 1k) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "1k 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE6DAC9)) |
||||||
|
(comp (ref R13) |
||||||
|
(value 1k) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "1k 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE784C7)) |
||||||
|
(comp (ref D2) |
||||||
|
(value POWER) |
||||||
|
(footprint LED_THT:LED_D3.0mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "Green 3mm")) |
||||||
|
(libsource (lib Device) (part LED_Small_ALT) (description "Light emitting diode, small symbol, filled shape")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE7C5FC)) |
||||||
|
(comp (ref D3) |
||||||
|
(value RX) |
||||||
|
(footprint LED_THT:LED_D3.0mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "Yellow 3mm")) |
||||||
|
(libsource (lib Device) (part LED_Small_ALT) (description "Light emitting diode, small symbol, filled shape")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE7D047)) |
||||||
|
(comp (ref D4) |
||||||
|
(value TX) |
||||||
|
(footprint LED_THT:LED_D3.0mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "Red 3mm")) |
||||||
|
(libsource (lib Device) (part LED_Small_ALT) (description "Light emitting diode, small symbol, filled shape")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE7D27E)) |
||||||
|
(comp (ref J1) |
||||||
|
(value "To TRX") |
||||||
|
(footprint Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "Header 5 pin 2.54mm pitch")) |
||||||
|
(libsource (lib Connector) (part Conn_01x05_Male) (description "Generic connector, single row, 01x05, script generated (kicad-library-utils/schlib/autogen/connector/)")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EE9C3C1)) |
||||||
|
(comp (ref H1) |
||||||
|
(value MountingHole) |
||||||
|
(footprint MountingHole:MountingHole_3.2mm_M3_DIN965_Pad) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) "Not a placable part")) |
||||||
|
(libsource (lib Mechanical) (part MountingHole) (description "Mounting Hole without connection")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EEC5467)) |
||||||
|
(comp (ref H2) |
||||||
|
(value MountingHole) |
||||||
|
(footprint MountingHole:MountingHole_3.2mm_M3_DIN965_Pad) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) "Not a placable part")) |
||||||
|
(libsource (lib Mechanical) (part MountingHole) (description "Mounting Hole without connection")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EEC60D6)) |
||||||
|
(comp (ref H3) |
||||||
|
(value MountingHole) |
||||||
|
(footprint MountingHole:MountingHole_3.2mm_M3_DIN965_Pad) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) "Not a placable part")) |
||||||
|
(libsource (lib Mechanical) (part MountingHole) (description "Mounting Hole without connection")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EEC63E4)) |
||||||
|
(comp (ref H4) |
||||||
|
(value MountingHole) |
||||||
|
(footprint MountingHole:MountingHole_3.2mm_M3_DIN965_Pad) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) "Not a placable part")) |
||||||
|
(libsource (lib Mechanical) (part MountingHole) (description "Mounting Hole without connection")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EEC6769)) |
||||||
|
(comp (ref LOGO1) |
||||||
|
(value Logo_Open_Hardware_Small) |
||||||
|
(footprint Symbol:OSHW-Symbol_6.7x6mm_Copper) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) "Not a placable part")) |
||||||
|
(libsource (lib Graphic) (part Logo_Open_Hardware_Small) (description "Open Hardware logo, small")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EF89C9B)) |
||||||
|
(comp (ref C7) |
||||||
|
(value 10U/25V) |
||||||
|
(footprint Capacitor_THT:CP_Radial_D6.3mm_P2.50mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "10U 25V 2.5mm pitch")) |
||||||
|
(libsource (lib Device) (part CP_Small) (description "Polarized capacitor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EFB355B)) |
||||||
|
(comp (ref J4) |
||||||
|
(value mode) |
||||||
|
(footprint Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "Header 2 pin 2.54mm pitch")) |
||||||
|
(libsource (lib Connector) (part Conn_01x02_Male) (description "Generic connector, single row, 01x02, script generated (kicad-library-utils/schlib/autogen/connector/)")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EFB4B99)) |
||||||
|
(comp (ref R16) |
||||||
|
(value 2k2) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "2k2 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 5EFB7203)) |
||||||
|
(comp (ref U1) |
||||||
|
(value ATmega328P-PU) |
||||||
|
(footprint Package_DIP:DIP-28_W7.62mm_LongPads) |
||||||
|
(datasheet http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega328_P%20AVR%20MCU%20with%20picoPower%20Technology%20Data%20Sheet%2040001984A.pdf) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) Microchip) |
||||||
|
(field (name "Ordering #") ATmega328P-PU)) |
||||||
|
(libsource (lib MCU_Microchip_ATmega) (part ATmega328P-PU) (description "20MHz, 32kB Flash, 2kB SRAM, 1kB EEPROM, DIP-28")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61EE274C)) |
||||||
|
(comp (ref Y1) |
||||||
|
(value 16MHz) |
||||||
|
(footprint Crystal:Crystal_HC49-U_Vertical) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "16MHz crystal")) |
||||||
|
(libsource (lib Device) (part Crystal_Small) (description "Two pin crystal, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61EE649F)) |
||||||
|
(comp (ref C3) |
||||||
|
(value 22p) |
||||||
|
(footprint Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "22pF 50V 5mm pitch")) |
||||||
|
(libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61EEF7AE)) |
||||||
|
(comp (ref C4) |
||||||
|
(value 22p) |
||||||
|
(footprint Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "22pF 50V 5mm pitch")) |
||||||
|
(libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61EEFE15)) |
||||||
|
(comp (ref U2) |
||||||
|
(value CH340_module) |
||||||
|
(footprint mtk_processor:CH340_module) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) Otronic.nl) |
||||||
|
(field (name "Ordering #") 9365193326391)) |
||||||
|
(libsource (lib mtk_processor) (part CH340_module) (description "")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 620479BB)) |
||||||
|
(comp (ref C2) |
||||||
|
(value 10U/25V) |
||||||
|
(footprint Capacitor_THT:CP_Radial_D6.3mm_P2.50mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "10U 25V 2.5mm pitch")) |
||||||
|
(libsource (lib Device) (part CP_Small) (description "Polarized capacitor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 62077B7A)) |
||||||
|
(comp (ref C1) |
||||||
|
(value 100n) |
||||||
|
(footprint Capacitor_THT:C_Disc_D7.5mm_W2.5mm_P5.00mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "100nF 50V 5mm pitch")) |
||||||
|
(libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 6207924D)) |
||||||
|
(comp (ref R11) |
||||||
|
(value 10k) |
||||||
|
(footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "10k 1% 0.25W")) |
||||||
|
(libsource (lib Device) (part R_Small) (description "Resistor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 6207E258)) |
||||||
|
(comp (ref C10) |
||||||
|
(value 100n) |
||||||
|
(footprint Capacitor_THT:C_Disc_D7.5mm_W2.5mm_P5.00mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "100nF 50V 5mm pitch")) |
||||||
|
(libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 6207EA82)) |
||||||
|
(comp (ref J2) |
||||||
|
(value USB_B) |
||||||
|
(footprint Connector_USB:USB_B_OST_USB-B1HSxx_Horizontal) |
||||||
|
(datasheet " ~") |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "USB B connector")) |
||||||
|
(libsource (lib Connector) (part USB_B) (description "USB Type B connector")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 62204B4B)) |
||||||
|
(comp (ref C12) |
||||||
|
(value 10U/25V) |
||||||
|
(footprint Capacitor_THT:CP_Radial_D6.3mm_P2.50mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "10U 25V 2.5mm pitch")) |
||||||
|
(libsource (lib Device) (part CP_Small) (description "Polarized capacitor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E97180)) |
||||||
|
(comp (ref C11) |
||||||
|
(value 100n) |
||||||
|
(footprint Capacitor_THT:C_Disc_D7.5mm_W2.5mm_P5.00mm) |
||||||
|
(datasheet ~) |
||||||
|
(fields |
||||||
|
(field (name Manufacturer) QPL) |
||||||
|
(field (name "Ordering #") "100nF 50V 5mm pitch")) |
||||||
|
(libsource (lib Device) (part C_Small) (description "Unpolarized capacitor, small symbol")) |
||||||
|
(sheetpath (names /) (tstamps /)) |
||||||
|
(tstamp 61E97932))) |
||||||
|
(libparts |
||||||
|
(libpart (lib Connector) (part Conn_01x02_Male) |
||||||
|
(description "Generic connector, single row, 01x02, script generated (kicad-library-utils/schlib/autogen/connector/)") |
||||||
|
(docs ~) |
||||||
|
(footprints |
||||||
|
(fp Connector*:*_1x??_*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) J) |
||||||
|
(field (name Value) Conn_01x02_Male)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name Pin_1) (type passive)) |
||||||
|
(pin (num 2) (name Pin_2) (type passive)))) |
||||||
|
(libpart (lib Connector) (part Conn_01x05_Male) |
||||||
|
(description "Generic connector, single row, 01x05, script generated (kicad-library-utils/schlib/autogen/connector/)") |
||||||
|
(docs ~) |
||||||
|
(footprints |
||||||
|
(fp Connector*:*_1x??_*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) J) |
||||||
|
(field (name Value) Conn_01x05_Male)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name Pin_1) (type passive)) |
||||||
|
(pin (num 2) (name Pin_2) (type passive)) |
||||||
|
(pin (num 3) (name Pin_3) (type passive)) |
||||||
|
(pin (num 4) (name Pin_4) (type passive)) |
||||||
|
(pin (num 5) (name Pin_5) (type passive)))) |
||||||
|
(libpart (lib Connector) (part USB_B) |
||||||
|
(description "USB Type B connector") |
||||||
|
(docs " ~") |
||||||
|
(footprints |
||||||
|
(fp USB*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) J) |
||||||
|
(field (name Value) USB_B)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name VBUS) (type power_out)) |
||||||
|
(pin (num 2) (name D-) (type BiDi)) |
||||||
|
(pin (num 3) (name D+) (type BiDi)) |
||||||
|
(pin (num 4) (name GND) (type power_out)) |
||||||
|
(pin (num 5) (name Shield) (type passive)))) |
||||||
|
(libpart (lib Device) (part CP_Small) |
||||||
|
(description "Polarized capacitor, small symbol") |
||||||
|
(docs ~) |
||||||
|
(footprints |
||||||
|
(fp CP_*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) C) |
||||||
|
(field (name Value) CP_Small)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name ~) (type passive)) |
||||||
|
(pin (num 2) (name ~) (type passive)))) |
||||||
|
(libpart (lib Device) (part C_Small) |
||||||
|
(description "Unpolarized capacitor, small symbol") |
||||||
|
(docs ~) |
||||||
|
(footprints |
||||||
|
(fp C_*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) C) |
||||||
|
(field (name Value) C_Small)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name ~) (type passive)) |
||||||
|
(pin (num 2) (name ~) (type passive)))) |
||||||
|
(libpart (lib Device) (part Crystal_Small) |
||||||
|
(description "Two pin crystal, small symbol") |
||||||
|
(docs ~) |
||||||
|
(footprints |
||||||
|
(fp Crystal*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) Y) |
||||||
|
(field (name Value) Crystal_Small)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name 1) (type passive)) |
||||||
|
(pin (num 2) (name 2) (type passive)))) |
||||||
|
(libpart (lib Device) (part D_Small_ALT) |
||||||
|
(description "Diode, small symbol, filled shape") |
||||||
|
(docs ~) |
||||||
|
(footprints |
||||||
|
(fp TO-???*) |
||||||
|
(fp *_Diode_*) |
||||||
|
(fp *SingleDiode*) |
||||||
|
(fp D_*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) D) |
||||||
|
(field (name Value) D_Small_ALT)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name K) (type passive)) |
||||||
|
(pin (num 2) (name A) (type passive)))) |
||||||
|
(libpart (lib Device) (part LED_Small_ALT) |
||||||
|
(description "Light emitting diode, small symbol, filled shape") |
||||||
|
(docs ~) |
||||||
|
(footprints |
||||||
|
(fp LED*) |
||||||
|
(fp LED_SMD:*) |
||||||
|
(fp LED_THT:*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) D) |
||||||
|
(field (name Value) LED_Small_ALT)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name K) (type passive)) |
||||||
|
(pin (num 2) (name A) (type passive)))) |
||||||
|
(libpart (lib Device) (part R_POT_Small) |
||||||
|
(description Potentiometer) |
||||||
|
(docs ~) |
||||||
|
(footprints |
||||||
|
(fp Potentiometer*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) RV) |
||||||
|
(field (name Value) R_POT_Small)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name 1) (type passive)) |
||||||
|
(pin (num 2) (name 2) (type passive)) |
||||||
|
(pin (num 3) (name 3) (type passive)))) |
||||||
|
(libpart (lib Device) (part R_Small) |
||||||
|
(description "Resistor, small symbol") |
||||||
|
(docs ~) |
||||||
|
(footprints |
||||||
|
(fp R_*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) R) |
||||||
|
(field (name Value) R_Small)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name ~) (type passive)) |
||||||
|
(pin (num 2) (name ~) (type passive)))) |
||||||
|
(libpart (lib Graphic) (part Logo_Open_Hardware_Small) |
||||||
|
(description "Open Hardware logo, small") |
||||||
|
(docs ~) |
||||||
|
(fields |
||||||
|
(field (name Reference) "#LOGO") |
||||||
|
(field (name Value) Logo_Open_Hardware_Small))) |
||||||
|
(libpart (lib Isolator) (part CNY17-1) |
||||||
|
(aliases |
||||||
|
(alias CNY17-2) |
||||||
|
(alias CNY17-3) |
||||||
|
(alias CNY17-4)) |
||||||
|
(description "DC Optocoupler Base Connected, Vce 70V, CTR 40-80%, Viso 5000V (RMS), DIP6") |
||||||
|
(docs http://www.vishay.com/docs/83606/cny17.pdf) |
||||||
|
(footprints |
||||||
|
(fp DIP*W7.62mm*) |
||||||
|
(fp DIP*W10.16mm*) |
||||||
|
(fp SMDIP*W9.53mm*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) U) |
||||||
|
(field (name Value) CNY17-1)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name ~) (type passive)) |
||||||
|
(pin (num 2) (name ~) (type passive)) |
||||||
|
(pin (num 3) (name NC) (type NotConnected)) |
||||||
|
(pin (num 4) (name ~) (type passive)) |
||||||
|
(pin (num 5) (name ~) (type passive)) |
||||||
|
(pin (num 6) (name ~) (type passive)))) |
||||||
|
(libpart (lib MCU_Microchip_ATmega) (part ATmega48PV-10PU) |
||||||
|
(aliases |
||||||
|
(alias ATmega48P-20PU) |
||||||
|
(alias ATmega48A-PU) |
||||||
|
(alias ATmega48PA-PU) |
||||||
|
(alias ATmega88PV-10PU) |
||||||
|
(alias ATmega88P-20PU) |
||||||
|
(alias ATmega88A-PU) |
||||||
|
(alias ATmega88PA-PU) |
||||||
|
(alias ATmega168PV-10PU) |
||||||
|
(alias ATmega168P-20PU) |
||||||
|
(alias ATmega168A-PU) |
||||||
|
(alias ATmega168PA-PU) |
||||||
|
(alias ATmega328-PU) |
||||||
|
(alias ATmega328P-PU)) |
||||||
|
(description "10MHz, 4kB Flash, 512B SRAM, 256B EEPROM, DIP-28") |
||||||
|
(docs http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-8025-8-bit-AVR-Microcontroller-ATmega48P-88P-168P_Datasheet.pdf) |
||||||
|
(footprints |
||||||
|
(fp DIP*W7.62mm*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) U) |
||||||
|
(field (name Value) ATmega48PV-10PU) |
||||||
|
(field (name Footprint) Package_DIP:DIP-28_W7.62mm)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name ~RESET~/PC6) (type 3state)) |
||||||
|
(pin (num 2) (name PD0) (type 3state)) |
||||||
|
(pin (num 3) (name PD1) (type 3state)) |
||||||
|
(pin (num 4) (name PD2) (type 3state)) |
||||||
|
(pin (num 5) (name PD3) (type 3state)) |
||||||
|
(pin (num 6) (name PD4) (type 3state)) |
||||||
|
(pin (num 7) (name VCC) (type power_in)) |
||||||
|
(pin (num 8) (name GND) (type power_in)) |
||||||
|
(pin (num 9) (name XTAL1/PB6) (type 3state)) |
||||||
|
(pin (num 10) (name XTAL2/PB7) (type 3state)) |
||||||
|
(pin (num 11) (name PD5) (type 3state)) |
||||||
|
(pin (num 12) (name PD6) (type 3state)) |
||||||
|
(pin (num 13) (name PD7) (type 3state)) |
||||||
|
(pin (num 14) (name PB0) (type 3state)) |
||||||
|
(pin (num 15) (name PB1) (type 3state)) |
||||||
|
(pin (num 16) (name PB2) (type 3state)) |
||||||
|
(pin (num 17) (name PB3) (type 3state)) |
||||||
|
(pin (num 18) (name PB4) (type 3state)) |
||||||
|
(pin (num 19) (name PB5) (type 3state)) |
||||||
|
(pin (num 20) (name AVCC) (type power_in)) |
||||||
|
(pin (num 21) (name AREF) (type passive)) |
||||||
|
(pin (num 22) (name GND) (type passive)) |
||||||
|
(pin (num 23) (name PC0) (type 3state)) |
||||||
|
(pin (num 24) (name PC1) (type 3state)) |
||||||
|
(pin (num 25) (name PC2) (type 3state)) |
||||||
|
(pin (num 26) (name PC3) (type 3state)) |
||||||
|
(pin (num 27) (name PC4) (type 3state)) |
||||||
|
(pin (num 28) (name PC5) (type 3state)))) |
||||||
|
(libpart (lib Mechanical) (part MountingHole) |
||||||
|
(description "Mounting Hole without connection") |
||||||
|
(docs ~) |
||||||
|
(footprints |
||||||
|
(fp MountingHole*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) H) |
||||||
|
(field (name Value) MountingHole))) |
||||||
|
(libpart (lib Transistor_FET) (part 2N7000) |
||||||
|
(aliases |
||||||
|
(alias TP0610L) |
||||||
|
(alias VP0610L)) |
||||||
|
(description "0.2A Id, 200V Vds, N-Channel MOSFET, 2.6V Logic Level, TO-92") |
||||||
|
(docs https://www.fairchildsemi.com/datasheets/2N/2N7000.pdf) |
||||||
|
(footprints |
||||||
|
(fp TO?92*)) |
||||||
|
(fields |
||||||
|
(field (name Reference) Q) |
||||||
|
(field (name Value) 2N7000) |
||||||
|
(field (name Footprint) Package_TO_SOT_THT:TO-92_Inline)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name S) (type passive)) |
||||||
|
(pin (num 2) (name G) (type input)) |
||||||
|
(pin (num 3) (name D) (type passive)))) |
||||||
|
(libpart (lib mtk_processor) (part CH340_module) |
||||||
|
(fields |
||||||
|
(field (name Reference) U) |
||||||
|
(field (name Value) CH340_module)) |
||||||
|
(pins |
||||||
|
(pin (num 1) (name 5V) (type power_out)) |
||||||
|
(pin (num 2) (name VCC) (type power_in)) |
||||||
|
(pin (num 3) (name 3V3) (type power_out)) |
||||||
|
(pin (num 4) (name TxD) (type output)) |
||||||
|
(pin (num 5) (name RxD) (type input)) |
||||||
|
(pin (num 6) (name GND) (type passive)) |
||||||
|
(pin (num 7) (name 5V) (type power_out)) |
||||||
|
(pin (num 8) (name D-) (type BiDi)) |
||||||
|
(pin (num 9) (name D+) (type BiDi)) |
||||||
|
(pin (num 10) (name GND) (type passive)) |
||||||
|
(pin (num 11) (name DTR) (type output))))) |
||||||
|
(libraries |
||||||
|
(library (logical Connector) |
||||||
|
(uri /usr/share/kicad/library/Connector.lib)) |
||||||
|
(library (logical Device) |
||||||
|
(uri /home/marcel/kicad_sources/kicad-symbols-master/Device.lib)) |
||||||
|
(library (logical Graphic) |
||||||
|
(uri /usr/share/kicad/library/Graphic.lib)) |
||||||
|
(library (logical Isolator) |
||||||
|
(uri /home/marcel/kicad_sources/kicad-symbols-master/Isolator.lib)) |
||||||
|
(library (logical MCU_Microchip_ATmega) |
||||||
|
(uri /home/marcel/kicad_sources/kicad-symbols-master/MCU_Microchip_ATmega.lib)) |
||||||
|
(library (logical Mechanical) |
||||||
|
(uri /usr/share/kicad/library/Mechanical.lib)) |
||||||
|
(library (logical Transistor_FET) |
||||||
|
(uri /home/marcel/kicad_sources/kicad-symbols-master/Transistor_FET.lib)) |
||||||
|
(library (logical mtk_processor) |
||||||
|
(uri /home/marcel/Documenten/electronische_projecten/KiCad_libraries/mtk_processor.lib))) |
||||||
|
(nets |
||||||
|
(net (code 1) (name TxD) |
||||||
|
(node (ref U1) (pin 2)) |
||||||
|
(node (ref U2) (pin 4))) |
||||||
|
(net (code 2) (name RxD) |
||||||
|
(node (ref U1) (pin 3)) |
||||||
|
(node (ref U2) (pin 5))) |
||||||
|
(net (code 3) (name "Net-(U2-Pad1)") |
||||||
|
(node (ref U2) (pin 2)) |
||||||
|
(node (ref U2) (pin 1))) |
||||||
|
(net (code 4) (name "Net-(C7-Pad1)") |
||||||
|
(node (ref J4) (pin 2)) |
||||||
|
(node (ref J1) (pin 1)) |
||||||
|
(node (ref C7) (pin 1))) |
||||||
|
(net (code 5) (name "Net-(J1-Pad5)") |
||||||
|
(node (ref RV2) (pin 1)) |
||||||
|
(node (ref J1) (pin 5))) |
||||||
|
(net (code 6) (name "Net-(J4-Pad1)") |
||||||
|
(node (ref R16) (pin 1)) |
||||||
|
(node (ref J4) (pin 1))) |
||||||
|
(net (code 7) (name "Net-(C10-Pad1)") |
||||||
|
(node (ref C10) (pin 1)) |
||||||
|
(node (ref U2) (pin 11))) |
||||||
|
(net (code 8) (name "Net-(C3-Pad2)") |
||||||
|
(node (ref C3) (pin 2)) |
||||||
|
(node (ref Y1) (pin 1)) |
||||||
|
(node (ref U1) (pin 9))) |
||||||
|
(net (code 9) (name "Net-(C4-Pad2)") |
||||||
|
(node (ref C4) (pin 2)) |
||||||
|
(node (ref Y1) (pin 2)) |
||||||
|
(node (ref U1) (pin 10))) |
||||||
|
(net (code 10) (name GND) |
||||||
|
(node (ref U3) (pin 4)) |
||||||
|
(node (ref RV2) (pin 3)) |
||||||
|
(node (ref Q1) (pin 1)) |
||||||
|
(node (ref RV1) (pin 3)) |
||||||
|
(node (ref D1) (pin 2)) |
||||||
|
(node (ref R10) (pin 2)) |
||||||
|
(node (ref R5) (pin 2)) |
||||||
|
(node (ref C5) (pin 2)) |
||||||
|
(node (ref R7) (pin 2)) |
||||||
|
(node (ref U1) (pin 22)) |
||||||
|
(node (ref J1) (pin 2)) |
||||||
|
(node (ref U2) (pin 6)) |
||||||
|
(node (ref D4) (pin 1)) |
||||||
|
(node (ref D3) (pin 1)) |
||||||
|
(node (ref D2) (pin 1)) |
||||||
|
(node (ref U1) (pin 8)) |
||||||
|
(node (ref C3) (pin 1)) |
||||||
|
(node (ref C4) (pin 1)) |
||||||
|
(node (ref U2) (pin 10)) |
||||||
|
(node (ref C2) (pin 2)) |
||||||
|
(node (ref C1) (pin 2)) |
||||||
|
(node (ref J2) (pin 4)) |
||||||
|
(node (ref J2) (pin 5)) |
||||||
|
(node (ref C12) (pin 2)) |
||||||
|
(node (ref C11) (pin 2))) |
||||||
|
(net (code 11) (name "Net-(J1-Pad3)") |
||||||
|
(node (ref U3) (pin 5)) |
||||||
|
(node (ref J1) (pin 3)) |
||||||
|
(node (ref R16) (pin 2))) |
||||||
|
(net (code 12) (name PTT) |
||||||
|
(node (ref U1) (pin 5)) |
||||||
|
(node (ref R9) (pin 2))) |
||||||
|
(net (code 13) (name RESET) |
||||||
|
(node (ref U1) (pin 1)) |
||||||
|
(node (ref R11) (pin 1)) |
||||||
|
(node (ref C10) (pin 2))) |
||||||
|
(net (code 14) (name +3V3) |
||||||
|
(node (ref U2) (pin 3)) |
||||||
|
(node (ref R6) (pin 1)) |
||||||
|
(node (ref U1) (pin 21)) |
||||||
|
(node (ref C11) (pin 1)) |
||||||
|
(node (ref C12) (pin 1))) |
||||||
|
(net (code 15) (name "Net-(J2-Pad3)") |
||||||
|
(node (ref U2) (pin 8)) |
||||||
|
(node (ref J2) (pin 3))) |
||||||
|
(net (code 16) (name "Net-(J2-Pad2)") |
||||||
|
(node (ref U2) (pin 9)) |
||||||
|
(node (ref J2) (pin 2))) |
||||||
|
(net (code 17) (name +5V) |
||||||
|
(node (ref U1) (pin 20)) |
||||||
|
(node (ref R13) (pin 2)) |
||||||
|
(node (ref R8) (pin 1)) |
||||||
|
(node (ref U2) (pin 7)) |
||||||
|
(node (ref R11) (pin 2)) |
||||||
|
(node (ref C1) (pin 1)) |
||||||
|
(node (ref C2) (pin 1)) |
||||||
|
(node (ref U1) (pin 7)) |
||||||
|
(node (ref J2) (pin 1))) |
||||||
|
(net (code 18) (name ANALOG_OUT) |
||||||
|
(node (ref C6) (pin 2)) |
||||||
|
(node (ref RV1) (pin 1))) |
||||||
|
(net (code 19) (name "Net-(Q1-Pad3)") |
||||||
|
(node (ref Q1) (pin 3)) |
||||||
|
(node (ref U3) (pin 2))) |
||||||
|
(net (code 20) (name "Net-(C7-Pad2)") |
||||||
|
(node (ref RV1) (pin 2)) |
||||||
|
(node (ref C7) (pin 2))) |
||||||
|
(net (code 21) (name "Net-(C9-Pad1)") |
||||||
|
(node (ref C9) (pin 1)) |
||||||
|
(node (ref R9) (pin 1))) |
||||||
|
(net (code 22) (name "Net-(C9-Pad2)") |
||||||
|
(node (ref Q1) (pin 2)) |
||||||
|
(node (ref R10) (pin 1)) |
||||||
|
(node (ref D1) (pin 1)) |
||||||
|
(node (ref C9) (pin 2))) |
||||||
|
(net (code 23) (name "Net-(C8-Pad2)") |
||||||
|
(node (ref C8) (pin 2)) |
||||||
|
(node (ref RV2) (pin 2))) |
||||||
|
(net (code 24) (name "Net-(C5-Pad1)") |
||||||
|
(node (ref R1) (pin 1)) |
||||||
|
(node (ref R4) (pin 1)) |
||||||
|
(node (ref R3) (pin 1)) |
||||||
|
(node (ref R2) (pin 1)) |
||||||
|
(node (ref C5) (pin 1)) |
||||||
|
(node (ref C6) (pin 1)) |
||||||
|
(node (ref R5) (pin 1))) |
||||||
|
(net (code 25) (name ANALOG_IN) |
||||||
|
(node (ref U1) (pin 23)) |
||||||
|
(node (ref R6) (pin 2)) |
||||||
|
(node (ref R7) (pin 1)) |
||||||
|
(node (ref C8) (pin 1))) |
||||||
|
(net (code 26) (name "Net-(R1-Pad2)") |
||||||
|
(node (ref R1) (pin 2)) |
||||||
|
(node (ref U1) (pin 6))) |
||||||
|
(net (code 27) (name "Net-(R8-Pad2)") |
||||||
|
(node (ref R8) (pin 2)) |
||||||
|
(node (ref U3) (pin 1))) |
||||||
|
(net (code 28) (name "Net-(R2-Pad2)") |
||||||
|
(node (ref U1) (pin 11)) |
||||||
|
(node (ref R2) (pin 2))) |
||||||
|
(net (code 29) (name "Net-(R3-Pad2)") |
||||||
|
(node (ref U1) (pin 12)) |
||||||
|
(node (ref R3) (pin 2))) |
||||||
|
(net (code 30) (name "Net-(R4-Pad2)") |
||||||
|
(node (ref U1) (pin 13)) |
||||||
|
(node (ref R4) (pin 2))) |
||||||
|
(net (code 31) (name "Net-(J1-Pad4)") |
||||||
|
(node (ref J1) (pin 4))) |
||||||
|
(net (code 32) (name "Net-(U1-Pad4)") |
||||||
|
(node (ref U1) (pin 4))) |
||||||
|
(net (code 33) (name "Net-(U1-Pad28)") |
||||||
|
(node (ref U1) (pin 28))) |
||||||
|
(net (code 34) (name "Net-(U1-Pad27)") |
||||||
|
(node (ref U1) (pin 27))) |
||||||
|
(net (code 35) (name "Net-(U1-Pad26)") |
||||||
|
(node (ref U1) (pin 26))) |
||||||
|
(net (code 36) (name "Net-(U1-Pad25)") |
||||||
|
(node (ref U1) (pin 25))) |
||||||
|
(net (code 37) (name "Net-(U1-Pad24)") |
||||||
|
(node (ref U1) (pin 24))) |
||||||
|
(net (code 38) (name "Net-(U1-Pad19)") |
||||||
|
(node (ref U1) (pin 19))) |
||||||
|
(net (code 39) (name "Net-(U1-Pad18)") |
||||||
|
(node (ref U1) (pin 18))) |
||||||
|
(net (code 40) (name "Net-(U1-Pad17)") |
||||||
|
(node (ref U1) (pin 17))) |
||||||
|
(net (code 41) (name "Net-(U1-Pad14)") |
||||||
|
(node (ref U1) (pin 14))) |
||||||
|
(net (code 42) (name "Net-(D3-Pad2)") |
||||||
|
(node (ref R14) (pin 1)) |
||||||
|
(node (ref D3) (pin 2))) |
||||||
|
(net (code 43) (name "Net-(D2-Pad2)") |
||||||
|
(node (ref D2) (pin 2)) |
||||||
|
(node (ref R13) (pin 1))) |
||||||
|
(net (code 44) (name TX_LED) |
||||||
|
(node (ref R15) (pin 2)) |
||||||
|
(node (ref U1) (pin 15))) |
||||||
|
(net (code 45) (name RX_LED) |
||||||
|
(node (ref R14) (pin 2)) |
||||||
|
(node (ref U1) (pin 16))) |
||||||
|
(net (code 46) (name "Net-(D4-Pad2)") |
||||||
|
(node (ref D4) (pin 2)) |
||||||
|
(node (ref R15) (pin 1))) |
||||||
|
(net (code 47) (name "Net-(U3-Pad6)") |
||||||
|
(node (ref U3) (pin 6))) |
||||||
|
(net (code 48) (name "Net-(U3-Pad3)") |
||||||
|
(node (ref U3) (pin 3))))) |
@ -0,0 +1,252 @@ |
|||||||
|
update=za 15 jan 2022 14:22:00 CET |
||||||
|
version=1 |
||||||
|
last_client=kicad |
||||||
|
[general] |
||||||
|
version=1 |
||||||
|
RootSch= |
||||||
|
BoardNm= |
||||||
|
[cvpcb] |
||||||
|
version=1 |
||||||
|
NetIExt=net |
||||||
|
[eeschema] |
||||||
|
version=1 |
||||||
|
LibDir= |
||||||
|
[eeschema/libraries] |
||||||
|
[schematic_editor] |
||||||
|
version=1 |
||||||
|
PageLayoutDescrFile= |
||||||
|
PlotDirectoryName=/home/marcel/Documenten/electronische_projecten/aprs_server/PE1RXF-APRS-server/packetmodem_nano/ |
||||||
|
SubpartIdSeparator=0 |
||||||
|
SubpartFirstId=65 |
||||||
|
NetFmtName=Pcbnew |
||||||
|
SpiceAjustPassiveValues=0 |
||||||
|
LabSize=50 |
||||||
|
ERC_TestSimilarLabels=1 |
||||||
|
[pcbnew] |
||||||
|
version=1 |
||||||
|
PageLayoutDescrFile= |
||||||
|
LastNetListRead=packetmodem_nano2.net |
||||||
|
CopperLayerCount=2 |
||||||
|
BoardThickness=1.6 |
||||||
|
AllowMicroVias=0 |
||||||
|
AllowBlindVias=0 |
||||||
|
RequireCourtyardDefinitions=0 |
||||||
|
ProhibitOverlappingCourtyards=1 |
||||||
|
MinTrackWidth=0.2 |
||||||
|
MinViaDiameter=0.4 |
||||||
|
MinViaDrill=0.3 |
||||||
|
MinMicroViaDiameter=0.2 |
||||||
|
MinMicroViaDrill=0.09999999999999999 |
||||||
|
MinHoleToHole=0.25 |
||||||
|
TrackWidth1=0.25 |
||||||
|
TrackWidth2=0.7 |
||||||
|
TrackWidth3=1.5 |
||||||
|
ViaDiameter1=0.8 |
||||||
|
ViaDrill1=0.4 |
||||||
|
ViaDiameter2=2.4 |
||||||
|
ViaDrill2=0.8 |
||||||
|
dPairWidth1=0.2 |
||||||
|
dPairGap1=0.25 |
||||||
|
dPairViaGap1=0.25 |
||||||
|
SilkLineWidth=0.12 |
||||||
|
SilkTextSizeV=1 |
||||||
|
SilkTextSizeH=1 |
||||||
|
SilkTextSizeThickness=0.15 |
||||||
|
SilkTextItalic=0 |
||||||
|
SilkTextUpright=1 |
||||||
|
CopperLineWidth=0.2 |
||||||
|
CopperTextSizeV=1.5 |
||||||
|
CopperTextSizeH=1.5 |
||||||
|
CopperTextThickness=0.3 |
||||||
|
CopperTextItalic=0 |
||||||
|
CopperTextUpright=1 |
||||||
|
EdgeCutLineWidth=0.05 |
||||||
|
CourtyardLineWidth=0.05 |
||||||
|
OthersLineWidth=0.15 |
||||||
|
OthersTextSizeV=1 |
||||||
|
OthersTextSizeH=1 |
||||||
|
OthersTextSizeThickness=0.15 |
||||||
|
OthersTextItalic=0 |
||||||
|
OthersTextUpright=1 |
||||||
|
SolderMaskClearance=0.051 |
||||||
|
SolderMaskMinWidth=0.25 |
||||||
|
SolderPasteClearance=0 |
||||||
|
SolderPasteRatio=0 |
||||||
|
[pcbnew/Layer.F.Cu] |
||||||
|
Name=F.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.In1.Cu] |
||||||
|
Name=In1.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In2.Cu] |
||||||
|
Name=In2.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In3.Cu] |
||||||
|
Name=In3.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In4.Cu] |
||||||
|
Name=In4.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In5.Cu] |
||||||
|
Name=In5.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In6.Cu] |
||||||
|
Name=In6.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In7.Cu] |
||||||
|
Name=In7.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In8.Cu] |
||||||
|
Name=In8.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In9.Cu] |
||||||
|
Name=In9.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In10.Cu] |
||||||
|
Name=In10.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In11.Cu] |
||||||
|
Name=In11.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In12.Cu] |
||||||
|
Name=In12.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In13.Cu] |
||||||
|
Name=In13.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In14.Cu] |
||||||
|
Name=In14.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In15.Cu] |
||||||
|
Name=In15.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In16.Cu] |
||||||
|
Name=In16.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In17.Cu] |
||||||
|
Name=In17.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In18.Cu] |
||||||
|
Name=In18.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In19.Cu] |
||||||
|
Name=In19.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In20.Cu] |
||||||
|
Name=In20.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In21.Cu] |
||||||
|
Name=In21.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In22.Cu] |
||||||
|
Name=In22.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In23.Cu] |
||||||
|
Name=In23.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In24.Cu] |
||||||
|
Name=In24.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In25.Cu] |
||||||
|
Name=In25.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In26.Cu] |
||||||
|
Name=In26.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In27.Cu] |
||||||
|
Name=In27.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In28.Cu] |
||||||
|
Name=In28.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In29.Cu] |
||||||
|
Name=In29.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.In30.Cu] |
||||||
|
Name=In30.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Layer.B.Cu] |
||||||
|
Name=B.Cu |
||||||
|
Type=0 |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.B.Adhes] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.F.Adhes] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.B.Paste] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.F.Paste] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.B.SilkS] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.F.SilkS] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.B.Mask] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.F.Mask] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.Dwgs.User] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.Cmts.User] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.Eco1.User] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.Eco2.User] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.Edge.Cuts] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.Margin] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.B.CrtYd] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.F.CrtYd] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.B.Fab] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.F.Fab] |
||||||
|
Enabled=1 |
||||||
|
[pcbnew/Layer.Rescue] |
||||||
|
Enabled=0 |
||||||
|
[pcbnew/Netclasses] |
||||||
|
[pcbnew/Netclasses/Default] |
||||||
|
Name=Default |
||||||
|
Clearance=0.2 |
||||||
|
TrackWidth=0.25 |
||||||
|
ViaDiameter=0.8 |
||||||
|
ViaDrill=0.4 |
||||||
|
uViaDiameter=0.3 |
||||||
|
uViaDrill=0.1 |
||||||
|
dPairWidth=0.2 |
||||||
|
dPairGap=0.25 |
||||||
|
dPairViaGap=0.25 |