Compare commits
153 commits
zigbee-sam
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5214f904f1 | ||
|
|
20693143ae | ||
|
|
2e5f89b228 | ||
|
|
2dc7144de1 | ||
|
|
5f671b0170 | ||
|
|
21dd14d7f3 | ||
|
|
f8c28cebd6 | ||
|
|
8ef2b5b748 | ||
|
|
4e0f3911bd | ||
|
|
20d98d02a0 | ||
|
|
ccdbaaf142 | ||
|
|
57cf5aa0e5 | ||
|
|
e7e4b77eef | ||
|
|
dc02480da9 | ||
|
|
4796bfab5f | ||
|
|
e62521d2ae | ||
|
|
16c4d23c47 | ||
|
|
15920b1ae4 | ||
|
|
d26eab5825 | ||
|
|
c7aaf5b388 | ||
|
|
905978e8c9 | ||
|
|
4c0fe9b4c6 | ||
|
|
dd373ea235 | ||
|
|
25a5941777 | ||
|
|
37ea3a1062 | ||
|
|
d3ddd089bd | ||
|
|
28c2809b04 | ||
|
|
ad3cd4194f | ||
|
|
171a1eb4a0 | ||
|
|
5199ceaa50 | ||
|
|
7de5115705 | ||
|
|
d5ed701c45 | ||
|
|
141071a414 | ||
|
|
35618227d5 | ||
|
|
77c204397e | ||
|
|
5d2b648b22 | ||
|
|
da1642514a | ||
|
|
85ca1a67bc | ||
|
|
e68c113513 | ||
|
|
e0481994b2 | ||
|
|
9ea5c7b4d0 | ||
|
|
1a5acd02a5 | ||
|
|
8fb45f7165 | ||
|
|
9fdd15626a | ||
|
|
c70eb600a3 | ||
|
|
95ec660cb6 | ||
|
|
d84a6422fe | ||
|
|
8c21fe73d5 | ||
|
|
0a73159ce9 | ||
|
|
105016e24c | ||
|
|
bc3d834b20 | ||
|
|
37aff683ad | ||
|
|
c86f04e406 | ||
|
|
7f42dd0c00 | ||
|
|
46feb542cc | ||
|
|
62a99cc716 | ||
|
|
90f99bd5b0 | ||
|
|
5882312a77 | ||
|
|
a4a02257f9 | ||
|
|
f9f122b818 | ||
|
|
d5891f4a6f | ||
|
|
56c5fa7ba0 | ||
|
|
f6b4600044 | ||
|
|
afa53f0e94 | ||
|
|
426195184d | ||
|
|
c9df52fd5f | ||
|
|
930239e385 | ||
|
|
015ce94bbd | ||
|
|
987c4f52c0 | ||
|
|
509350457f | ||
|
|
bcc5a853d0 | ||
|
|
3aa33cdd89 | ||
|
|
ce748c4759 | ||
|
|
5cede82dc5 | ||
|
|
9285a6bc41 | ||
|
|
6f10dc9e19 | ||
|
|
c52d5f7a48 | ||
|
|
727138415e | ||
|
|
69c0ed3694 | ||
|
|
ba786eb298 | ||
|
|
6580cf40a2 | ||
|
|
54b1c48638 | ||
|
|
e56a7748b0 | ||
|
|
117b257336 | ||
|
|
70d716520d | ||
|
|
414427df5b | ||
|
|
fbf8e09f0d | ||
|
|
0ca44f737b | ||
|
|
7ac6d98b3b | ||
|
|
9ff5180cd7 | ||
|
|
fdf4609131 | ||
|
|
00d11f50a7 | ||
|
|
caec746c26 | ||
|
|
cb40173b6b | ||
|
|
ebc26fcccd | ||
|
|
dbded329a4 | ||
|
|
e82c1b6bc1 | ||
|
|
2c052cd376 | ||
|
|
20d6c893bf | ||
|
|
02b3970ffc | ||
|
|
6c618d946c | ||
|
|
ead6fd434d | ||
|
|
bf9f4e1b5b | ||
|
|
a6995d1ce8 | ||
|
|
c7128ef163 | ||
|
|
5eef25f86b | ||
|
|
19e0354113 | ||
|
|
5cc40a41f6 | ||
|
|
7f652ce75d | ||
|
|
b34bc60a0a | ||
|
|
2f7a25e266 | ||
|
|
e24530b7c3 | ||
|
|
1983f31af9 | ||
|
|
dbf288138e | ||
|
|
53f806a8e5 | ||
|
|
cfc5491849 | ||
|
|
8dceb6c7cc | ||
|
|
a79c1579f3 | ||
|
|
e71eaf9823 | ||
|
|
df6e327947 | ||
|
|
b3ae950ee0 | ||
|
|
1a2dcbb70b | ||
|
|
03a281fada | ||
|
|
123149d3d2 | ||
|
|
d5a548a110 | ||
|
|
1ffc876ad0 | ||
|
|
34ddee5ea3 | ||
|
|
3959abbf03 | ||
|
|
2bff7d8741 | ||
|
|
abe8845c4b | ||
|
|
40a8676e59 | ||
|
|
5e315ba9cd | ||
|
|
7be5fe1669 | ||
|
|
d292190d31 | ||
|
|
d3bcc13749 | ||
|
|
4b277bd62f | ||
|
|
ee708db400 | ||
|
|
05e25d166a | ||
|
|
997bfb7518 | ||
|
|
28db7224a6 | ||
|
|
41ba531fba | ||
|
|
424b471eb8 | ||
|
|
af47848b80 | ||
|
|
119055b97a | ||
|
|
ee38d4561a | ||
|
|
1fbd971c4f | ||
|
|
5d25499ae1 | ||
|
|
8105bfcd7b | ||
|
|
98433502af | ||
|
|
14399dffb4 | ||
|
|
54792ce35f | ||
|
|
a34b1f8721 | ||
|
|
c76b8dc289 |
109 changed files with 175074 additions and 18814 deletions
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "nrf-connect:v2.1",
|
||||
"image": "nordicplayground/nrfconnect-sdk:v2.1-branch",
|
||||
"name": "nrf-connect:v2.4",
|
||||
"image": "nordicplayground/nrfconnect-sdk:v2.5-branch",
|
||||
"features": {
|
||||
},
|
||||
"customizations": {
|
||||
|
|
|
|||
5
.github/actions/build/Dockerfile
vendored
5
.github/actions/build/Dockerfile
vendored
|
|
@ -1,5 +0,0 @@
|
|||
FROM nordicplayground/nrfconnect-sdk:v2.1-branch
|
||||
|
||||
COPY build.sh /build.sh
|
||||
|
||||
ENTRYPOINT ["/build.sh"]
|
||||
38
.github/actions/build/action.yml
vendored
38
.github/actions/build/action.yml
vendored
|
|
@ -1,27 +1,27 @@
|
|||
name: 'Build'
|
||||
description: 'Builds a nrf-connect sample for b-parasite'
|
||||
name: "Build"
|
||||
description: "Builds a nrf-connect sample for b-parasite"
|
||||
inputs:
|
||||
sample-dir:
|
||||
description: 'Sample directory to build'
|
||||
description: "Sample directory to build"
|
||||
required: true
|
||||
board:
|
||||
description: 'Board definition to use'
|
||||
description: "Board definition to use"
|
||||
default: bparasite_nrf52840
|
||||
revision:
|
||||
description: 'Board revision use'
|
||||
default: '1.2.0'
|
||||
description: "Board revision use"
|
||||
default: "2.0.0"
|
||||
cmake-extra:
|
||||
description: 'Extra CMake arguments'
|
||||
default: ''
|
||||
output-bin:
|
||||
description: 'Name of the .hex output'
|
||||
required: true
|
||||
description: "Extra CMake arguments"
|
||||
default: ""
|
||||
runs:
|
||||
using: 'docker'
|
||||
image: 'Dockerfile'
|
||||
args:
|
||||
- ${{ inputs.sample-dir }}
|
||||
- ${{ inputs.board }}
|
||||
- ${{ inputs.revision }}
|
||||
- ${{ inputs.cmake-extra }}
|
||||
- ${{ inputs.output-bin }}
|
||||
using: "composite"
|
||||
steps:
|
||||
- run: |
|
||||
docker run --rm -v ${GITHUB_WORKSPACE}:/repo \
|
||||
nordicplayground/nrfconnect-sdk:v2.5-branch \
|
||||
west build \
|
||||
--build-dir /repo/${{ inputs.sample-dir }}/build \
|
||||
--pristine \
|
||||
--board ${{ inputs.board }}@${{ inputs.revision }} \
|
||||
/repo/${{ inputs.sample-dir }} -- ${{ inputs.cmake-extra }}
|
||||
shell: bash
|
||||
|
|
|
|||
21
.github/actions/build/build.sh
vendored
21
.github/actions/build/build.sh
vendored
|
|
@ -1,21 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -eux -o pipefail
|
||||
|
||||
SAMPLE_DIR=$1
|
||||
BOARD=$2
|
||||
REVISION=$3
|
||||
CMAKE_EXTRA=$4
|
||||
OUTPUT_BIN=$5
|
||||
|
||||
TODAY=$(date +'%Y-%m-%d')
|
||||
|
||||
# Replaces occurrences of "__TODAY__" with $TODAY in $CMAKE_EXTRA.
|
||||
CMAKE_EXTRA="${CMAKE_EXTRA/__TODAY__/"$TODAY"}"
|
||||
|
||||
cd "${GITHUB_WORKSPACE}/${SAMPLE_DIR}"
|
||||
|
||||
echo $CMAKE_EXTRA
|
||||
|
||||
west build --build-dir ./build --pristine --board "${BOARD}@${REVISION}" -- $CMAKE_EXTRA
|
||||
|
||||
mv build/zephyr/zephyr.hex build/zephyr/"${OUTPUT_BIN}"
|
||||
33
.github/actions/build_and_upload/action.yml
vendored
33
.github/actions/build_and_upload/action.yml
vendored
|
|
@ -1,33 +0,0 @@
|
|||
name: 'Build and upload artifact'
|
||||
description: 'Builds a nrf-connect sample for b-parasite'
|
||||
inputs:
|
||||
sample-dir:
|
||||
description: 'Sample directory to build'
|
||||
required: true
|
||||
board:
|
||||
description: 'Board definition to use'
|
||||
required: true
|
||||
revision:
|
||||
description: 'Board revision use'
|
||||
default: '1.2.0'
|
||||
cmake-extra:
|
||||
description: 'Extra CMake arguments'
|
||||
default: ''
|
||||
output-bin:
|
||||
description: 'Name of the .hex output'
|
||||
required: true
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- uses: ./.github/actions/build
|
||||
with:
|
||||
sample-dir: ${{ inputs.sample-dir }}
|
||||
board: ${{ inputs.board }}
|
||||
revision: ${{ inputs.revision }}
|
||||
cmake-extra: ${{ inputs.cmake-extra }}
|
||||
output-bin: ${{ inputs.output-bin }}
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: sample-binaries
|
||||
path: code/nrf-connect/samples/ble/build/zephyr/${{ inputs.output-bin }}
|
||||
127
.github/workflows/b-parasite.yml
vendored
127
.github/workflows/b-parasite.yml
vendored
|
|
@ -6,77 +6,106 @@ on:
|
|||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
name: Check format & build samples
|
||||
name: Check code format
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
- name: Check clang-format
|
||||
uses: jidicula/clang-format-action@v4.9.0
|
||||
with:
|
||||
check-path: 'code/nrf-connect'
|
||||
check-path: "code/nrf-connect"
|
||||
exclude-regex: '\/build\/'
|
||||
|
||||
build-blinky:
|
||||
runs-on: ubuntu-latest
|
||||
name: Build blinky
|
||||
needs:
|
||||
- lint
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Build blinky
|
||||
uses: ./.github/actions/build
|
||||
with:
|
||||
sample-dir: code/nrf-connect/samples/blinky
|
||||
board: bparasite_nrf52840
|
||||
revision: 2.0.0
|
||||
output-bin: blinky_nrf52840.hex
|
||||
|
||||
build-input:
|
||||
runs-on: ubuntu-latest
|
||||
name: Build input
|
||||
needs:
|
||||
- lint
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Build input
|
||||
uses: ./.github/actions/build
|
||||
with:
|
||||
sample-dir: code/nrf-connect/samples/input
|
||||
board: bparasite_nrf52840
|
||||
revision: 2.0.0
|
||||
output-bin: input_nrf52840.hex
|
||||
|
||||
build-soil-read-loop:
|
||||
runs-on: ubuntu-latest
|
||||
name: Build soil_read_loop
|
||||
needs:
|
||||
- lint
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Build soil_read_loop
|
||||
uses: ./.github/actions/build
|
||||
with:
|
||||
sample-dir: code/nrf-connect/samples/soil_read_loop
|
||||
board: bparasite_nrf52840
|
||||
revision: 2.0.0
|
||||
output-bin: soil_read_loop_nrf52840.hex
|
||||
- name: Build ble_nrf52840_1_2_0_default.hex
|
||||
uses: ./.github/actions/build_and_upload
|
||||
|
||||
build-ble:
|
||||
strategy:
|
||||
matrix:
|
||||
soc: [nrf52840, nrf52833]
|
||||
revision: [1.1.0, 1.2.0, 2.0.0]
|
||||
runs-on: ubuntu-latest
|
||||
name: Build ble ${{ matrix.soc }}@${{ matrix.revision }}
|
||||
needs:
|
||||
- lint
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Build
|
||||
uses: ./.github/actions/build
|
||||
with:
|
||||
sample-dir: code/nrf-connect/samples/ble
|
||||
board: bparasite_nrf52840
|
||||
revision: '1.2.0'
|
||||
output-bin: ble_nrf52840_1_2_0_default.hex
|
||||
- name: Build ble_nrf52840_1_1_0_default.hex
|
||||
uses: ./.github/actions/build_and_upload
|
||||
with:
|
||||
sample-dir: code/nrf-connect/samples/ble
|
||||
board: bparasite_nrf52840
|
||||
revision: '1.1.0'
|
||||
output-bin: ble_nrf52840_1_1_0_default.hex
|
||||
- name: Build ble_nrf52840_1_0_0_default.hex
|
||||
uses: ./.github/actions/build_and_upload
|
||||
with:
|
||||
sample-dir: code/nrf-connect/samples/ble
|
||||
board: bparasite_nrf52840
|
||||
revision: '1.0.0'
|
||||
output-bin: ble_nrf52840_1_0_0_default.hex
|
||||
- name: Build ble_test_nrf52840_bthomev1_1s.hex
|
||||
uses: ./.github/actions/build_and_upload
|
||||
with:
|
||||
sample-dir: code/nrf-connect/samples/ble
|
||||
board: bparasite_nrf52840
|
||||
revision: '1.2.0'
|
||||
cmake-extra: -DCONFIG_PRST_BLE_ENCODING_BTHOME_V1=y -DCONFIG_PRST_SLEEP_DURATION_SEC=1
|
||||
output-bin: ble_test_nrf52840_bthomev1_1s.hex
|
||||
- name: Build ble_test_nrf52840_bthomev2_1s.hex
|
||||
uses: ./.github/actions/build_and_upload
|
||||
with:
|
||||
sample-dir: code/nrf-connect/samples/ble
|
||||
board: bparasite_nrf52840
|
||||
revision: '1.2.0'
|
||||
cmake-extra: -DCONFIG_PRST_BLE_ENCODING_BTHOME_V2=y -DCONFIG_PRST_SLEEP_DURATION_SEC=1
|
||||
output-bin: ble_test_nrf52840_bthomev2_1s.hex
|
||||
- name: Build ble_nrf52833_default.hex
|
||||
uses: ./.github/actions/build_and_upload
|
||||
with:
|
||||
sample-dir: code/nrf-connect/samples/ble
|
||||
board: bparasite_nrf52833
|
||||
output-bin: ble_nrf52833_default.hex
|
||||
- name: Build zigbee_nrf528340_default.hex
|
||||
uses: ./.github/actions/build_and_upload
|
||||
board: bparasite_${{ matrix.soc }}
|
||||
revision: ${{ matrix.revision }}
|
||||
cmake-extra: -DCONFIG_PRST_BLE_ENCODING_BTHOME_V2=y -DCONFIG_PRST_SLEEP_DURATION_MSEC=1000 -DCONFIG_PRSTLIB_LOG_LEVEL_DBG=y
|
||||
output-bin: ble_${{ matrix.soc }}_${{ matrix.revision }}_debug.hex
|
||||
|
||||
build-zigbee:
|
||||
strategy:
|
||||
matrix:
|
||||
soc: [nrf52840, nrf52833]
|
||||
revision: [1.2.0, 2.0.0]
|
||||
runs-on: ubuntu-latest
|
||||
name: Build zigbee ${{ matrix.soc }}@${{ matrix.revision }}
|
||||
needs:
|
||||
- lint
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Build
|
||||
uses: ./.github/actions/build
|
||||
with:
|
||||
sample-dir: code/nrf-connect/samples/zigbee
|
||||
board: bparasite_nrf52840
|
||||
output-bin: zigbee_nrf52840_default.hex
|
||||
cmake-extra: -DPRST_ZB_BUILD_DATE=__TODAY__
|
||||
board: bparasite_${{ matrix.soc }}
|
||||
revision: ${{ matrix.revision }}
|
||||
cmake-extra: -DCONFIG_PRSTLIB_LOG_LEVEL_DBG=y
|
||||
output-bin: zigbee_${{ matrix.soc }}_${{ matrix.revision }}_debug.hex
|
||||
|
|
|
|||
128
CODE_OF_CONDUCT.md
Normal file
128
CODE_OF_CONDUCT.md
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
rbaron.net/contact.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||
enforcement ladder](https://github.com/mozilla/diversity).
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at
|
||||
https://www.contributor-covenant.org/translations.
|
||||
27
README.md
27
README.md
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
# b-parasite
|
||||
<p align="center">
|
||||
<img src="img/resized/img1.jpg" width="512px" border="0" alt="PCB front and back photo" />
|
||||
<img src="img/resized/b-parasite-2.0.0.jpg" width="512px" border="0" alt="PCB front and back photo" />
|
||||
</p>
|
||||
|
||||
b-parasite is an open source soil moisture and ambient temperature/humidity/light sensor.
|
||||
|
|
@ -10,7 +10,7 @@ b-parasite is an open source soil moisture and ambient temperature/humidity/ligh
|
|||
# Features
|
||||
* Capacitive Soil moisture sensor - see [this blog post](https://rbaron.net/blog/2021/04/05/How-capacitive-soil-moisture-sensors-work.html), [this Twitter thread](https://twitter.com/rbaron_/status/1367182806368071685), and [this post](https://wemakethings.net/2012/09/26/capacitance_measurement/) for nice resources on how they work
|
||||
* Air temperature and humidity sensor using a [Sensirion's SHTC3](https://www.sensirion.com/en/environmental-sensors/humidity-sensors/digital-humidity-sensor-shtc3-our-new-standard-for-consumer-electronics/)
|
||||
* Light sensor using an [ALS-PT19](https://everlighteurope.com/ambient-light-sensors/7/ALSPT19315CL177TR8.html) phototransistor
|
||||
* Light sensor using an [ALS-PT19](https://en.everlight.com/wp-content/plugins/ItemRelationship/product_files/pdf/ALS-PT19-315C-L177-TR8_V8.pdf) phototransistor
|
||||
* Powered by a common CR2032 coin cell, potentially for over two years
|
||||
* Support for [nRF52840](https://www.nordicsemi.com/products/nrf52840) and [nRF52833](https://www.nordicsemi.com/products/nrf52833) modules
|
||||
* Open hardware and open source design
|
||||
|
|
@ -20,13 +20,14 @@ This repository also hosts a few different firmware samples for b-parasite.
|
|||
|
||||
|Sample|Description|Extra Documentation|
|
||||
|---|---|---|
|
||||
|[samples/ble](./code/nrf-connect/samples/ble)|This is the most battle-tested and useful firmware. It periodically reads all sensors and broadcast them via Bluetooth Low Energy (BLE). It works with [Home Assistant](https://www.home-assistant.io/) out of the box. |[Docs](./code/nrf-connect/samples/ble/README.md)|
|
||||
|[samples/ble](./code/nrf-connect/samples/ble)|This is the most battle-tested and useful firmware. It periodically reads all sensors and broadcast them via Bluetooth Low Energy (BLE). It works with [Home Assistant](https://www.home-assistant.io/) + [BTHome](https://bthome.io/) out of the box. |[Docs](./code/nrf-connect/samples/ble/README.md)|
|
||||
|[samples/zigbee](./code/nrf-connect/samples/zigbee)| An experimental/educational/exploratory basic Zigbee sample built on [nRF Connect + ZBOSS](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/ug_zigbee.html). It integrates with [Home Assistant](https://www.home-assistant.io/) via [ZHA](https://www.home-assistant.io/integrations/zha) or [Zigbee2MQTT](https://www.zigbee2mqtt.io/). |[Docs](./code/nrf-connect/samples/zigbee/README.md)|
|
||||
|[samples/blinky](./code/nrf-connect/samples/blinky)| The classic "Hello, world" |-|
|
||||
|[samples/soil_read_loop](./code/nrf-connect/samples/soil_read_loop)| Read the soil moisture sensor on a loop. Useful for experimenting and calibrating the sensor. |-|
|
||||
|[samples/soil_read_loop](./code/nrf-connect/samples/soil_read_loop)| Reads the soil moisture sensor on a loop. Useful for experimenting and calibrating the sensor. |-|
|
||||
|[samples/input](./code/nrf-connect/samples/input)| Handles button presses. Useful for power profiling GPIO interrupts and testing debouncing for push switches on [boards that have them](https://github.com/rbaron/b-parasite/wiki/Hardware-Versions). |-|
|
||||
|
||||
# Documentation
|
||||
Information about how to order, assemble, build the samples, protect the sensor and flash the firmware is on [the Wiki](https://github.com/rbaron/b-parasite/wiki/How-to-Program).
|
||||
Information about how to order, assemble, build the samples, protect the sensor and flash the firmware is on [the Wiki](https://github.com/rbaron/b-parasite/wiki).
|
||||
|
||||
# Repository Organization
|
||||
* [code/nrf-connect/](./code/nrf-connect/) - Common library and samples, built with Nordic's [nRF Connect SDK](https://www.nordicsemi.com/Products/Development-software/nrf-connect-sdk).
|
||||
|
|
@ -40,8 +41,20 @@ Information about how to order, assemble, build the samples, protect the sensor
|
|||
</p>
|
||||
|
||||
# Case
|
||||
A 3D printable case model can be found in [case/](case/).
|
||||

|
||||
<p align="center">
|
||||
<img src="img/case/screenshot.png" alt="Render of the original 3D printable case" />
|
||||
</p>
|
||||
|
||||
We have three different 3D-printable cases:
|
||||
1. Original snap-on case - [case/Top.stl](./case/Top.stl), [case/Bottom.stl](./case/Bottom.stl)
|
||||
2. High airflow - [case/b_parasite_case_high_airflow.stl](./case/b_parasite_case_high_airflow.stl)
|
||||
3. Mushroom-style - available on [Printables](https://www.printables.com/model/456571-mushroomcap-for-b-parasite-soil-moisture-sensor)
|
||||
4. b-parasite Hat - available on [Printables](https://www.printables.com/model/901220-waterproof-case-for-b-parasite-soil-moisture-air-s)
|
||||
|
||||
# Accessories
|
||||
|
||||
Designs and hardware to help you, when building your own:
|
||||
1. Desk holder for b-parasites [Printables](https://www.printables.com/de/model/566974-b-parasite-holder)
|
||||
|
||||
# License
|
||||
The hardware and associated design files are released under the [Creative Commons CC BY-SA 4.0 license](https://creativecommons.org/licenses/by-sa/4.0/).
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
|
|
@ -11,4 +11,4 @@ add_library(prstlib STATIC
|
|||
)
|
||||
|
||||
target_include_directories(prstlib PRIVATE include)
|
||||
target_link_libraries(prstlib PUBLIC zephyr_interface)
|
||||
target_link_libraries(prstlib PUBLIC zephyr_interface kernel)
|
||||
|
|
|
|||
|
|
@ -4,6 +4,14 @@ if BOARD_BPARASITE_NRF52833
|
|||
config BOARD
|
||||
default "bparasite_nrf52833"
|
||||
|
||||
config BOARD_REVISION
|
||||
string "Board revision."
|
||||
default "1.0.0"
|
||||
|
||||
config BOARD_REVISION_CODE
|
||||
int "Board revision code. An integer representation of the board revision."
|
||||
default 1
|
||||
|
||||
config BT_CTLR
|
||||
default BT
|
||||
|
||||
|
|
|
|||
|
|
@ -45,4 +45,4 @@
|
|||
low-power-enable;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -10,10 +10,11 @@
|
|||
zephyr,sram = &sram0;
|
||||
zephyr,flash = &flash0;
|
||||
zephyr,code-partition = &slot0_partition;
|
||||
zephyr,ieee802154 = &ieee802154;
|
||||
};
|
||||
|
||||
zephyr,user {
|
||||
io-channels = <&adc 0>, <&adc 1>, <&adc 2>;
|
||||
io-channels = <&adc 0>, <&adc 2>;
|
||||
};
|
||||
|
||||
leds {
|
||||
|
|
@ -27,9 +28,9 @@
|
|||
buttons {
|
||||
compatible = "gpio-keys";
|
||||
button0: button_0 {
|
||||
// P0.12.
|
||||
gpios = <&gpio0 12 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
|
||||
label = "Push button switch 0";
|
||||
// P0.30.
|
||||
gpios = <&gpio0 30 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
|
||||
label = "Push button SW1";
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -39,28 +40,45 @@
|
|||
pulse = <PWM_USEC(1)>;
|
||||
};
|
||||
|
||||
soil_calibration_coeffs: soil_calibration_coeffs {
|
||||
compatible = "soil-calibration-coeffs";
|
||||
dry = <306000 101000 (-11700)>;
|
||||
wet = <19000 (-4980) 3420>;
|
||||
};
|
||||
|
||||
ctrl {
|
||||
compatible = "gpio-keys";
|
||||
fast_disch: fast_disch {
|
||||
// P0.25.
|
||||
gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>;
|
||||
gpios = <&gpio0 25 GPIO_ACTIVE_HIGH>;
|
||||
label = "Fast discharge circuitry";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&uicr {
|
||||
gpio-as-nreset;
|
||||
};
|
||||
|
||||
&gpiote {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpio0 {
|
||||
status = "okay";
|
||||
// For low-power EDGE interrupts.
|
||||
// See github.com/zephyrproject-rtos/zephyr/issues/28499.
|
||||
sense-edge-mask = <0xffffffff>;
|
||||
};
|
||||
|
||||
&gpio1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ieee802154 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
compatible = "nordic,nrf-uart";
|
||||
status = "disabled";
|
||||
|
|
@ -108,17 +126,6 @@
|
|||
|
||||
};
|
||||
|
||||
// Photo.
|
||||
channel@1 {
|
||||
reg = <1>;
|
||||
zephyr,gain = "ADC_GAIN_1_6";
|
||||
zephyr,reference = "ADC_REF_INTERNAL";
|
||||
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
|
||||
// P0.02.
|
||||
zephyr,input-positive = <NRF_SAADC_AIN0>;
|
||||
zephyr,resolution = <10>;
|
||||
};
|
||||
|
||||
// Battery.
|
||||
channel@2 {
|
||||
reg = <2>;
|
||||
|
|
@ -132,7 +139,6 @@
|
|||
|
||||
|
||||
&flash0 {
|
||||
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
|
|
@ -140,33 +146,23 @@
|
|||
|
||||
boot_partition: partition@0 {
|
||||
label = "mcuboot";
|
||||
reg = <0x00000000 0x0000C000>;
|
||||
reg = <0x000000000 0xC000>;
|
||||
};
|
||||
slot0_partition: partition@c000 {
|
||||
label = "image-0";
|
||||
reg = <0x0000C000 0x00067000>;
|
||||
reg = <0x0000C000 0x32000>;
|
||||
};
|
||||
slot1_partition: partition@73000 {
|
||||
slot1_partition: partition@3e000 {
|
||||
label = "image-1";
|
||||
reg = <0x00073000 0x00067000>;
|
||||
reg = <0x0003E000 0x32000>;
|
||||
};
|
||||
scratch_partition: partition@da000 {
|
||||
scratch_partition: partition@70000 {
|
||||
label = "image-scratch";
|
||||
reg = <0x000da000 0x0001e000>;
|
||||
reg = <0x00070000 0xA000>;
|
||||
};
|
||||
|
||||
/*
|
||||
* The flash starting at 0x000f8000 and ending at
|
||||
* 0x000fffff is reserved for use by the application.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Storage partition will be used by FCB/LittleFS/NVS
|
||||
* if enabled.
|
||||
*/
|
||||
storage_partition: partition@f8000 {
|
||||
storage_partition: partition@7a000 {
|
||||
label = "storage";
|
||||
reg = <0x000f8000 0x00008000>;
|
||||
reg = <0x0007A000 0x00006000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
CONFIG_BOARD_REVISION="1.1.0"
|
||||
CONFIG_BOARD_REVISION_CODE=2
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
ldr_enable: ldr_enable {
|
||||
// P0.29.
|
||||
gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>;
|
||||
label = "Fast discharge circuitry";
|
||||
label = "LDR supply";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
@ -27,4 +27,4 @@
|
|||
zephyr,input-positive = <NRF_SAADC_AIN0>;
|
||||
zephyr,resolution = <10>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
CONFIG_BOARD_REVISION="1.2.0"
|
||||
CONFIG_BOARD_REVISION_CODE=3
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
photo_transistor_enable: photo_transistor_enable {
|
||||
// P0.29.
|
||||
gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>;
|
||||
label = "Fast discharge circuitry";
|
||||
label = "Phototransistor supply";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
@ -26,4 +26,4 @@
|
|||
zephyr,input-positive = <NRF_SAADC_AIN0>;
|
||||
zephyr,resolution = <10>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
CONFIG_BOARD_REVISION="2.0.0"
|
||||
CONFIG_BOARD_REVISION_CODE=4
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
|
||||
/ {
|
||||
photo_transistor: photo_transistor {
|
||||
compatible = "voltage-divider";
|
||||
output-ohms = <470>;
|
||||
io-channels = <&adc 1>;
|
||||
};
|
||||
|
||||
soil_calibration_coeffs: soil_calibration_coeffs {
|
||||
compatible = "soil-calibration-coeffs";
|
||||
dry = <334000 110000 (-15300)>;
|
||||
wet = <299000 (-83100) 11200>;
|
||||
};
|
||||
|
||||
ctrl {
|
||||
compatible = "gpio-keys";
|
||||
photo_transistor_enable: photo_transistor_enable {
|
||||
// P0.29.
|
||||
gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>;
|
||||
label = "Phototransistor supply";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&adc {
|
||||
channel@1 {
|
||||
reg = <1>;
|
||||
zephyr,gain = "ADC_GAIN_1_6";
|
||||
zephyr,reference = "ADC_REF_INTERNAL";
|
||||
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
|
||||
// P0.02.
|
||||
zephyr,input-positive = <NRF_SAADC_AIN0>;
|
||||
zephyr,resolution = <10>;
|
||||
};
|
||||
};
|
||||
|
|
@ -16,6 +16,4 @@ CONFIG_GPIO=y
|
|||
CONFIG_CONSOLE=y
|
||||
CONFIG_RTT_CONSOLE=y
|
||||
|
||||
CONFIG_GPIO_AS_PINRESET=y
|
||||
|
||||
CONFIG_PINCTRL=y
|
||||
|
|
|
|||
|
|
@ -4,6 +4,14 @@ if BOARD_BPARASITE_NRF52840
|
|||
config BOARD
|
||||
default "bparasite_nrf52840"
|
||||
|
||||
config BOARD_REVISION
|
||||
string "Board revision."
|
||||
default "1.0.0"
|
||||
|
||||
config BOARD_REVISION_CODE
|
||||
int "Board revision code. An integer representation of the board revision."
|
||||
default 1
|
||||
|
||||
config BT_CTLR
|
||||
default BT
|
||||
|
||||
|
|
|
|||
|
|
@ -10,10 +10,11 @@
|
|||
zephyr,sram = &sram0;
|
||||
zephyr,flash = &flash0;
|
||||
zephyr,code-partition = &slot0_partition;
|
||||
zephyr,ieee802154 = &ieee802154;
|
||||
};
|
||||
|
||||
zephyr,user {
|
||||
io-channels = <&adc 0>, <&adc 2>;
|
||||
io-channels = <&adc 0>, <&adc 2>;
|
||||
};
|
||||
|
||||
leds {
|
||||
|
|
@ -27,9 +28,9 @@
|
|||
buttons {
|
||||
compatible = "gpio-keys";
|
||||
button0: button_0 {
|
||||
// P0.12.
|
||||
gpios = <&gpio0 12 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
|
||||
label = "Push button switch 0";
|
||||
// P0.30.
|
||||
gpios = <&gpio0 30 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
|
||||
label = "Push button SW1";
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -39,6 +40,12 @@
|
|||
pulse = <PWM_USEC(1)>;
|
||||
};
|
||||
|
||||
soil_calibration_coeffs: soil_calibration_coeffs {
|
||||
compatible = "soil-calibration-coeffs";
|
||||
dry = <306000 101000 (-11700)>;
|
||||
wet = <19000 (-4980) 3420>;
|
||||
};
|
||||
|
||||
ctrl {
|
||||
compatible = "gpio-keys";
|
||||
fast_disch: fast_disch {
|
||||
|
|
@ -49,18 +56,29 @@
|
|||
};
|
||||
};
|
||||
|
||||
&uicr {
|
||||
gpio-as-nreset;
|
||||
};
|
||||
|
||||
&gpiote {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpio0 {
|
||||
status = "okay";
|
||||
// For low-power EDGE interrupts.
|
||||
// github.com/zephyrproject-rtos/zephyr/issues/28499
|
||||
sense-edge-mask = <0xffffffff>;
|
||||
};
|
||||
|
||||
&gpio1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ieee802154 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
compatible = "nordic,nrf-uart";
|
||||
status = "disabled";
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
CONFIG_BOARD_REVISION="1.1.0"
|
||||
CONFIG_BOARD_REVISION_CODE=2
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
ldr_enable: ldr_enable {
|
||||
// P0.29.
|
||||
gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>;
|
||||
label = "Fast discharge circuitry";
|
||||
label = "LDR supply";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
CONFIG_BOARD_REVISION="1.2.0"
|
||||
CONFIG_BOARD_REVISION_CODE=3
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
photo_transistor_enable: photo_transistor_enable {
|
||||
// P0.29.
|
||||
gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>;
|
||||
label = "Fast discharge circuitry";
|
||||
label = "Phototransistor supply";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
CONFIG_BOARD_REVISION="2.0.0"
|
||||
CONFIG_BOARD_REVISION_CODE=4
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
|
||||
/ {
|
||||
photo_transistor: photo_transistor {
|
||||
compatible = "voltage-divider";
|
||||
output-ohms = <470>;
|
||||
io-channels = <&adc 1>;
|
||||
};
|
||||
|
||||
soil_calibration_coeffs: soil_calibration_coeffs {
|
||||
compatible = "soil-calibration-coeffs";
|
||||
dry = <334000 110000 (-15300)>;
|
||||
wet = <299000 (-83100) 11200>;
|
||||
};
|
||||
|
||||
ctrl {
|
||||
compatible = "gpio-keys";
|
||||
photo_transistor_enable: photo_transistor_enable {
|
||||
// P0.29.
|
||||
gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>;
|
||||
label = "Phototransistor supply";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&adc {
|
||||
channel@1 {
|
||||
reg = <1>;
|
||||
zephyr,gain = "ADC_GAIN_1_6";
|
||||
zephyr,reference = "ADC_REF_INTERNAL";
|
||||
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
|
||||
// P0.02.
|
||||
zephyr,input-positive = <NRF_SAADC_AIN0>;
|
||||
zephyr,resolution = <10>;
|
||||
};
|
||||
};
|
||||
|
|
@ -16,6 +16,4 @@ CONFIG_GPIO=y
|
|||
CONFIG_CONSOLE=y
|
||||
CONFIG_RTT_CONSOLE=y
|
||||
|
||||
CONFIG_GPIO_AS_PINRESET=y
|
||||
|
||||
CONFIG_PINCTRL=y
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
# Hello
|
||||
|
||||
description: A fixed frequency & pulse PWM.
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
|
||||
description: >
|
||||
Calibration coefficients for the soil sensing circuit. We have two polynomials whose input variable
|
||||
is the battery voltage in Volts. The evaluated polynomial corresponds to the estimated ADC value,
|
||||
assumed to be 10 bits, so in [0, 1024). The two polynomials are:
|
||||
dry: For estimation of the fully dry state, given the battery voltage
|
||||
wet: For estimation of the fully dry state, given the battery voltage
|
||||
|
||||
Note that each poly coefficient is specified as 1000 times its real values. This is because we can't
|
||||
directly represent floating points in devicetree. The final evaluated value should be divided by
|
||||
1000.0f in code.
|
||||
|
||||
compatible: soil-calibration-coeffs
|
||||
|
||||
include: base.yaml
|
||||
|
||||
properties:
|
||||
dry:
|
||||
type: array
|
||||
required: true
|
||||
description: The coefficients * 1000, as integers. 0th degree first, then 1st and 2nd last.
|
||||
wet:
|
||||
type: array
|
||||
required: true
|
||||
description: The coefficients * 1000, as integers. 0th degree first, then 1st and 2nd last.
|
||||
|
|
@ -1,7 +1,24 @@
|
|||
#ifndef _PRST_BUTTON_H_
|
||||
#define _PRST_BUTTON_H_
|
||||
|
||||
// Inits button driver and registers callback.
|
||||
#include <stdbool.h>
|
||||
|
||||
typedef enum {
|
||||
PRST_BUTTON_SW1 = 0,
|
||||
} prst_button_t;
|
||||
|
||||
typedef void (*prst_button_callback_t)(prst_button_t button, bool is_active);
|
||||
|
||||
// Inits button driver.
|
||||
int prst_button_init();
|
||||
|
||||
#endif // _PRST_BUTTON_H_
|
||||
// Configures ISR and calls callback on debounced button press/release.
|
||||
int prst_button_register_callback(prst_button_callback_t callback);
|
||||
|
||||
// Returns:
|
||||
// 1 if button is active
|
||||
// 0 if button is inactive
|
||||
// -1 on error
|
||||
int prst_button_poll(prst_button_t prst_button);
|
||||
|
||||
#endif // _PRST_BUTTON_H_
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
#define PRST_TO_STRING(x) PRST_STRINGIFY(x)
|
||||
#define PRST_LOCATION __FILE__ ":" PRST_TO_STRING(__LINE__)
|
||||
|
||||
#define RET_IF_ERR_MSG(expr, msg) \
|
||||
{ \
|
||||
int err = (expr); \
|
||||
if (err) { \
|
||||
LOG_ERR("Error: " msg " in " PRST_LOCATION); \
|
||||
return err; \
|
||||
} \
|
||||
#define RET_IF_ERR_MSG(expr, msg) \
|
||||
{ \
|
||||
int err = (expr); \
|
||||
if (err) { \
|
||||
LOG_ERR("Error %d: " msg " in " PRST_LOCATION, err); \
|
||||
return err; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define RET_IF_ERR(expr) RET_IF_ERR_MSG(expr, "")
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#include "prstlib/adc.h"
|
||||
|
||||
#include <math.h>
|
||||
#include <zephyr/devicetree.h>
|
||||
#include <zephyr/drivers/adc.h>
|
||||
#include <zephyr/drivers/gpio.h>
|
||||
#include <zephyr/drivers/pwm.h>
|
||||
|
|
@ -16,6 +17,10 @@ static const struct pwm_dt_spec soil_pwm_dt =
|
|||
PWM_DT_SPEC_GET(DT_NODELABEL(soil_pwm));
|
||||
static const uint32_t pulse = DT_PROP(DT_NODELABEL(soil_pwm), pulse);
|
||||
|
||||
// Calibration coefficients for the soil sensing circuit.
|
||||
static const int dry_coeffs[3] = DT_PROP(DT_NODELABEL(soil_calibration_coeffs), dry);
|
||||
static const int wet_coeffs[3] = DT_PROP(DT_NODELABEL(soil_calibration_coeffs), wet);
|
||||
|
||||
struct gpio_dt_spec fast_disch_dt =
|
||||
GPIO_DT_SPEC_GET(DT_NODELABEL(fast_disch), gpios);
|
||||
|
||||
|
|
@ -79,13 +84,19 @@ static void set_battery_percent(const prst_adc_read_t* read, prst_batt_t* out) {
|
|||
return;
|
||||
}
|
||||
|
||||
static inline float eval_poly(const int coeffs[3], float x) {
|
||||
// The coefficients are specified times 1000, as a workaround the lack of support for floating
|
||||
// points in devicetree bindings.
|
||||
return (coeffs[0] + coeffs[1] * x + coeffs[2] * x * x) / 1000.0f;
|
||||
}
|
||||
|
||||
static inline float get_soil_moisture_percent(float battery_voltage,
|
||||
int16_t raw_adc_output) {
|
||||
const double x = battery_voltage;
|
||||
const double dry = -11.7f * x * x + 101.0f * x + 306.0f;
|
||||
const double wet = 3.42f * x * x - 4.98f * x + 19.0f;
|
||||
const float x = battery_voltage;
|
||||
const float dry = eval_poly(dry_coeffs, x);
|
||||
const float wet = eval_poly(wet_coeffs, x);
|
||||
const float percent = (raw_adc_output - dry) / (wet - dry);
|
||||
LOG_DBG("Read soil moisture: %.2f | Raw %u | Batt: %.2f | Dry: %.2f | Wet: %.2f",
|
||||
LOG_DBG("Read soil moisture 2: %.2f | Raw %u | Batt: %.2f | Dry: %.2f | Wet: %.2f",
|
||||
100.0f * percent, raw_adc_output, x, dry, wet);
|
||||
return percent;
|
||||
}
|
||||
|
|
@ -97,6 +108,7 @@ static int read_adc_spec(const struct adc_dt_spec* spec, prst_adc_read_t* out) {
|
|||
|
||||
int32_t val_mv = buf;
|
||||
RET_IF_ERR(adc_raw_to_millivolts_dt(spec, &val_mv));
|
||||
val_mv = MAX(0, val_mv);
|
||||
|
||||
out->raw = buf;
|
||||
out->millivolts = val_mv;
|
||||
|
|
@ -121,6 +133,12 @@ int prst_adc_init() {
|
|||
RET_IF_ERR(gpio_pin_configure_dt(&ldr_enable_dt, GPIO_OUTPUT));
|
||||
#endif
|
||||
|
||||
for (size_t idx = 0; idx < ARRAY_SIZE(dry_coeffs); idx++) {
|
||||
LOG_DBG("Dry coeff %d: %d\n", idx, dry_coeffs[idx]);
|
||||
}
|
||||
for (size_t idx = 0; idx < ARRAY_SIZE(wet_coeffs); idx++) {
|
||||
LOG_DBG("Wet coeff %d: %d\n", idx, wet_coeffs[idx]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#include "prstlib/button.h"
|
||||
|
||||
#include <zephyr/drivers/gpio.h>
|
||||
#include <zephyr/kernel.h>
|
||||
#include <zephyr/logging/log.h>
|
||||
|
||||
#include "prstlib/led.h"
|
||||
|
|
@ -8,23 +9,60 @@
|
|||
|
||||
LOG_MODULE_REGISTER(button, CONFIG_PRSTLIB_LOG_LEVEL);
|
||||
|
||||
static struct k_work_delayable button_pressed_delayable;
|
||||
|
||||
static struct gpio_dt_spec button =
|
||||
GPIO_DT_SPEC_GET(DT_NODELABEL(button0), gpios);
|
||||
|
||||
static struct gpio_callback cb_data;
|
||||
|
||||
static void button_pressed(const struct device *dev, struct gpio_callback *cb,
|
||||
uint32_t pins) {
|
||||
LOG_INF("Button pressed");
|
||||
prst_led_toggle();
|
||||
static prst_button_callback_t user_callback = NULL;
|
||||
|
||||
static void maybe_call_user_callback(prst_button_t button, bool is_active) {
|
||||
if (user_callback != NULL) {
|
||||
user_callback(button, is_active);
|
||||
} else {
|
||||
LOG_WRN("No user callback registered for button %d", button);
|
||||
}
|
||||
}
|
||||
|
||||
static void button_pressed_cb(struct k_work *work) {
|
||||
int button_state = prst_button_poll(PRST_BUTTON_SW1);
|
||||
if (button_state < 0) {
|
||||
LOG_ERR("Failed to poll button");
|
||||
return;
|
||||
}
|
||||
return maybe_call_user_callback(PRST_BUTTON_SW1, button_state);
|
||||
}
|
||||
|
||||
static void button_pressed_isr(const struct device *dev, struct gpio_callback *cb,
|
||||
uint32_t pins) {
|
||||
k_work_reschedule(&button_pressed_delayable, K_MSEC(10));
|
||||
}
|
||||
|
||||
int prst_button_init() {
|
||||
RET_IF_ERR(!device_is_ready(button.port));
|
||||
RET_IF_ERR(gpio_pin_configure_dt(&button, GPIO_INPUT));
|
||||
// EDGE interrupts consume more power! Just use a LEVEL one.
|
||||
RET_IF_ERR(gpio_pin_interrupt_configure_dt(&button, GPIO_INT_LEVEL_ACTIVE));
|
||||
gpio_init_callback(&cb_data, button_pressed, BIT(button.pin));
|
||||
RET_IF_ERR(gpio_add_callback(button.port, &cb_data));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int prst_button_register_callback(prst_button_callback_t callback) {
|
||||
k_work_init_delayable(&button_pressed_delayable, button_pressed_cb);
|
||||
// EDGE interrupts seem to consume more power than LEVEL ones.
|
||||
// For GPIO_INT_EDGE_BOTH: 16 uA idle.
|
||||
// For GPIO_INT_LEVEL_ACTIVE: 3 uA idle.
|
||||
// Related issue:
|
||||
// https://github.com/zephyrproject-rtos/zephyr/issues/28499
|
||||
// Apparently sense-edge-mask brings the power consumption down to
|
||||
// 3 uA for EDGE interrupts too.
|
||||
RET_IF_ERR(gpio_pin_interrupt_configure_dt(&button, GPIO_INT_EDGE_BOTH));
|
||||
gpio_init_callback(&cb_data, button_pressed_isr, BIT(button.pin));
|
||||
RET_IF_ERR(gpio_add_callback(button.port, &cb_data));
|
||||
user_callback = callback;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int prst_button_poll(prst_button_t prst_button) {
|
||||
RET_CHECK(prst_button == PRST_BUTTON_SW1, "Invalid button");
|
||||
return gpio_pin_get_dt(&button);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,10 +16,9 @@ int prst_sensors_read_all(prst_sensors_t *sensors) {
|
|||
|
||||
LOG_DBG("Batt: %d mV (%.2f%%)", sensors->batt.adc_read.millivolts,
|
||||
100 * sensors->batt.percentage);
|
||||
LOG_DBG("Soil: %.0f %% (%d mV)", 100 * sensors->soil.percentage,
|
||||
sensors->soil.adc_read.millivolts);
|
||||
LOG_DBG("Soil: %.0f %%", 100 * sensors->soil.percentage);
|
||||
LOG_DBG("Photo: %u lx (%d mV)", sensors->photo.brightness,
|
||||
sensors->soil.adc_read.millivolts);
|
||||
sensors->photo.adc_read.millivolts);
|
||||
LOG_DBG("Temp: %f oC", sensors->shtc3.temp_c);
|
||||
LOG_DBG("Humi: %.0f %%", 100 * sensors->shtc3.rel_humi);
|
||||
LOG_DBG("--------------------------------------------------");
|
||||
|
|
|
|||
|
|
@ -32,11 +32,10 @@ int prst_shtc3_read(prst_shtc3_read_t *out) {
|
|||
|
||||
// Reading in normal (not low power) mode can take up to 12.1 ms, according to
|
||||
// the datasheet.
|
||||
k_msleep(15);
|
||||
k_msleep(20);
|
||||
|
||||
while (i2c_read_dt(&shtc3, buff, 6) != 0) {
|
||||
k_msleep(10);
|
||||
}
|
||||
// Read response.
|
||||
RET_IF_ERR(i2c_read_dt(&shtc3, buff, 6));
|
||||
|
||||
// Put the sensor in sleep mode.
|
||||
RET_IF_ERR(write_cmd(PRST_SHTC3_CMD_SLEEP));
|
||||
|
|
|
|||
|
|
@ -2,17 +2,25 @@
|
|||
source "Kconfig.zephyr"
|
||||
rsource "../../prstlib/Kconfig"
|
||||
|
||||
config PRST_SLEEP_DURATION_SEC
|
||||
int "Sleep duration in seconds"
|
||||
default 600
|
||||
config PRST_SLEEP_DURATION_MSEC
|
||||
int "Sleep duration in milliseconds"
|
||||
default 600000
|
||||
|
||||
config PRST_BLE_ADV_DURATION_SEC
|
||||
int "Advertising duration in seconds"
|
||||
default 1
|
||||
config PRST_BLE_ADV_DURATION_MSEC
|
||||
int "Advertising duration in milliseconds"
|
||||
default 1000
|
||||
|
||||
config PRST_BLE_MIN_ADV_INTERVAL
|
||||
int "Minimum advertising interval in milliseconds"
|
||||
default 30
|
||||
|
||||
config PRST_BLE_MAX_ADV_INTERVAL
|
||||
int "Maximum advertising interval in milliseconds"
|
||||
default 40
|
||||
|
||||
choice PRST_BLE_ENCODING
|
||||
prompt "b-parasite BLE encoding"
|
||||
default PRST_BLE_ENCODING_BPARASITE_V2
|
||||
default PRST_BLE_ENCODING_BTHOME_V2
|
||||
|
||||
config PRST_BLE_ENCODING_BPARASITE_V2
|
||||
bool "Uses the custom b-parasite protocol v2 for encoding advertising packets"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Bluetooth Low Energy (BLE)
|
||||
In this saple, b-parasite sensors are periodically read and broadcast using Bluetooth Low Energy (BLE) dvertising packets.
|
||||
In this sample, b-parasite sensors are periodically read and broadcast using Bluetooth Low Energy (BLE) dvertising packets.
|
||||
|
||||
## Configuration
|
||||
Available configurations and their default values are in [`Kconfig`](./Kconfig). They are set in [`prj.conf`](./prj.conf). Here are some notable examples.
|
||||
|
|
@ -8,7 +8,7 @@ Available configurations and their default values are in [`Kconfig`](./Kconfig).
|
|||
To save energy, the board spends most of the time in a "deep sleep" state, in which most peripherals and radio are completely turned off. The period of sleep is controlled by the `PRST_SLEEP_DURATION_SEC` config.
|
||||
|
||||
### Advertising Duration
|
||||
When it wakes up, the sample reads all sensors and keep broadcasting advertising packets for `PRST_BLE_ADV_DURATION_SEC` before going back to sleep.
|
||||
When it wakes up, the sample reads all sensors and keep broadcasting advertising packets for `PRST_BLE_ADV_DURATION_MSEC` before going back to sleep.
|
||||
|
||||
### Advertising Packet Encoding
|
||||
There are different ways to encode the sensor data in a BLE advertising packet.
|
||||
|
|
@ -22,11 +22,10 @@ This is what a typical deployment with BTHome looks like:
|
|||

|
||||
|
||||
There are two versions of BTHome encodings supported by this sample:
|
||||
* `PRST_BLE_ENCODING_BTHOME_V2=y` (**default**) uses the [BTHome V2](https://bthome.io/format/), supported by Home Assistant since version `2022.12`
|
||||
* `PRST_BLE_ENCODING_BTHOME_V1=y` uses the [legacy BTHome V1](https://bthome.io/v1/), which was briefly in use
|
||||
* `PRST_BLE_ENCODING_BTHOME_V2=y` uses the [BTHome V2](https://bthome.io/format/), which is not yet (as of early Dec/2022) in the stable Home Assistant release. This will soon become the default.
|
||||
|
||||
#### b-parasite Encoding
|
||||
`PRST_BLE_ENCODING_BPARASITE_V2=y` selects the "legacy" encoding, used historically inn this project. This is the encoding that the [`b_parasite`](https://esphome.io/components/sensor/b_parasite.html) ESPHome component understands.
|
||||
`PRST_BLE_ENCODING_BPARASITE_V2=y` selects the legacy encoding, used historically in this project. This is the encoding that the [`b_parasite`](https://esphome.io/components/sensor/b_parasite.html) ESPHome component understands.
|
||||
|
||||
With this encoding and a ESPHome + `b_parasite` component, this is an usual deployment topology:
|
||||
|
||||
|
|
@ -43,8 +42,14 @@ While in deep sleep, the board consumes around `3.0 uA`:
|
|||
|
||||

|
||||
|
||||
In the active broadcasting state, with default settings, the average current consumption is around `344 uA`:
|
||||
In the active broadcasting state, the average power consumption is highly dependant on the advertising interval.
|
||||
|
||||

|
||||
With the default settings (in the `[30, 40] ms` range), we see an average of around `810 uA`:
|
||||
|
||||
With a `200 mAh` CR2032 battery, we can use [this spreadsheet](https://docs.google.com/spreadsheets/d/157JQiX20bGkTrlbvWbWRrs_WViL3MgVZffSCWRR7uAI/edit#gid=0) to estimate the battery life to over two years. Note that this is a simplified model and results in practice may vary.
|
||||

|
||||
|
||||
If for example we lower the connection interval to the SDK defaults (`[100, 150] ms`, roughly trading off range for power), the average current consumption is around `345 uA`:
|
||||
|
||||

|
||||
|
||||
With a `200 mAh` CR2032 battery, we can use [this spreadsheet](https://docs.google.com/spreadsheets/d/157JQiX20bGkTrlbvWbWRrs_WViL3MgVZffSCWRR7uAI/edit#gid=0) to estimate the battery life to over two years. Note that this is a simplified model and results in practice may vary.
|
||||
|
|
|
|||
|
|
@ -13,4 +13,4 @@
|
|||
"${workspaceFolder}"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 85 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 302 KiB |
|
|
@ -11,14 +11,17 @@ CONFIG_BT_DEVICE_NAME="prst"
|
|||
CONFIG_BT_CTLR_TX_PWR_PLUS_8=y
|
||||
|
||||
CONFIG_SERIAL=n
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_DEVICE=y
|
||||
|
||||
CONFIG_USE_SEGGER_RTT=y
|
||||
|
||||
CONFIG_NEWLIB_LIBC=y
|
||||
CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
|
||||
|
||||
CONFIG_ASSERT=y
|
||||
|
||||
# Application config - see all options in Kconfig.
|
||||
# CONFIG_PRST_BLE_ENCODING_BTHOME_V1=y
|
||||
# CONFIG_PRST_SLEEP_DURATION_SEC=1
|
||||
# CONFIG_PRST_BLE_ENCODING_BTHOME_V2=y
|
||||
# CONFIG_PRST_SLEEP_DURATION_MSEC=1000
|
||||
|
||||
# prstlib config - ser all options in prstlib/Kconfig.
|
||||
# CONFIG_PRSTLIB_LOG_LEVEL_DBG=y
|
||||
|
|
|
|||
|
|
@ -17,8 +17,6 @@ static const struct bt_data ad[] = {
|
|||
BT_DATA_BYTES(BT_DATA_NAME_COMPLETE, CONFIG_BT_DEVICE_NAME),
|
||||
};
|
||||
|
||||
static const struct bt_data sd[] = {};
|
||||
|
||||
static bt_addr_le_t mac_addr;
|
||||
|
||||
static int set_user_defined_bt_addr(const char *addr_str) {
|
||||
|
|
@ -55,12 +53,21 @@ int prst_ble_init() {
|
|||
return 0;
|
||||
}
|
||||
|
||||
#define PRST_MS_TO_INTERVAL(value_ms) ((uint16_t)(value_ms) / 0.625f)
|
||||
|
||||
int prst_ble_adv_start() {
|
||||
// If BT_LE_ADV_NCONN_IDENTITY, this function will advertise with a static MAC
|
||||
// address programmed in the chip. If BT_LE_ADV_NCONN, this function returns
|
||||
// advertises with a random MAC each time.
|
||||
return bt_le_adv_start(BT_LE_ADV_NCONN_IDENTITY, ad, ARRAY_SIZE(ad), sd,
|
||||
ARRAY_SIZE(sd));
|
||||
return bt_le_adv_start(
|
||||
BT_LE_ADV_PARAM(
|
||||
BT_LE_ADV_OPT_USE_IDENTITY,
|
||||
PRST_MS_TO_INTERVAL(CONFIG_PRST_BLE_MIN_ADV_INTERVAL),
|
||||
PRST_MS_TO_INTERVAL(CONFIG_PRST_BLE_MAX_ADV_INTERVAL),
|
||||
/*_peer=*/NULL),
|
||||
ad,
|
||||
ARRAY_SIZE(ad),
|
||||
// sd == NULL is required to set advertising to non-connectable. See
|
||||
// https://github.com/zephyrproject-rtos/zephyr/blob/c0fcd35531611bbe35376c62a9e50744d6904940/subsys/bluetooth/host/adv.c#L860
|
||||
/*sd=*/NULL,
|
||||
/*sd_len=*/0);
|
||||
}
|
||||
|
||||
int prst_ble_adv_stop() {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,10 @@ int prst_ble_encode_service_data(const prst_sensors_t* sensors,
|
|||
#endif
|
||||
// 4 bits for a small wrap-around counter for deduplicating messages on the
|
||||
// receiver.
|
||||
// out[3] = sensors->run_counter & 0x0f;
|
||||
|
||||
static uint8_t run_counter;
|
||||
|
||||
out[3] = run_counter++ & 0x0f;
|
||||
out[4] = sensors->batt.adc_read.millivolts >> 8;
|
||||
out[5] = sensors->batt.adc_read.millivolts & 0xff;
|
||||
int16_t temp_centicelsius = 100 * sensors->shtc3.temp_c;
|
||||
|
|
@ -101,33 +104,36 @@ int prst_ble_encode_service_data(const prst_sensors_t* sensors,
|
|||
out[4] = temp_val & 0xff;
|
||||
out[5] = temp_val >> 8;
|
||||
// Humidity.
|
||||
out[6] = 0x03;
|
||||
// Value. Factor 0.01, over 100%.
|
||||
uint16_t humi_val = 10000 * sensors->shtc3.rel_humi;
|
||||
out[7] = humi_val & 0xff;
|
||||
out[8] = humi_val >> 8;
|
||||
out[6] = 0x2E;
|
||||
// Value. Factor 1 over 100%.
|
||||
uint8_t humi_val = 100 * sensors->shtc3.rel_humi + 0.5f;
|
||||
out[7] = humi_val;
|
||||
// Illuminance.
|
||||
out[9] = 0x05;
|
||||
out[8] = 0x05;
|
||||
// Value. Factor of 0.01.
|
||||
uint32_t lux_val = sensors->photo.brightness * 100;
|
||||
out[10] = lux_val & 0xff;
|
||||
out[11] = (lux_val >> 8) & 0xff;
|
||||
out[12] = (lux_val >> 16) & 0xff;
|
||||
out[9] = lux_val & 0xff;
|
||||
out[10] = (lux_val >> 8) & 0xff;
|
||||
out[11] = (lux_val >> 16) & 0xff;
|
||||
// Battery voltage.
|
||||
out[13] = 0x0c;
|
||||
out[12] = 0x0c;
|
||||
// Value. Factor of 0.001.
|
||||
uint16_t batt_val = sensors->batt.adc_read.millivolts;
|
||||
out[14] = batt_val & 0xff;
|
||||
out[15] = batt_val >> 8;
|
||||
out[13] = batt_val & 0xff;
|
||||
out[14] = batt_val >> 8;
|
||||
// Soil moisture.
|
||||
out[16] = 0x14;
|
||||
// Factor of 0.01, so we need to multiply our the value in 100% by 1/0.01 = 100.
|
||||
uint16_t soil_val = 10000 * sensors->soil.percentage;
|
||||
out[17] = soil_val & 0xff;
|
||||
out[18] = soil_val >> 8;
|
||||
out[15] = 0x2F;
|
||||
// Factor of 1 over 100%
|
||||
uint8_t soil_val = 100 * sensors->soil.percentage + 0.5f;
|
||||
out[16] = soil_val;
|
||||
// Battery percentage.
|
||||
out[17] = 0x01;
|
||||
// Value. Factor 1 over 100%
|
||||
uint8_t batt_percentage_val = 100 * sensors->batt.percentage + 0.5f;
|
||||
out[18] = batt_percentage_val;
|
||||
|
||||
#endif // Encoding protocols
|
||||
|
||||
LOG_HEXDUMP_DBG(out, out_len, "Encoded BLE adv: ");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,25 +14,29 @@
|
|||
|
||||
LOG_MODULE_REGISTER(main, LOG_LEVEL_DBG);
|
||||
|
||||
int main(void) {
|
||||
static int prst_init() {
|
||||
RET_IF_ERR(prst_adc_init());
|
||||
RET_IF_ERR(prst_led_init());
|
||||
RET_IF_ERR(prst_button_init());
|
||||
RET_IF_ERR(prst_ble_init());
|
||||
return 0;
|
||||
}
|
||||
|
||||
RET_IF_ERR(prst_led_flash(2));
|
||||
static int prst_loop(prst_sensors_t *sensors) {
|
||||
RET_IF_ERR(prst_sensors_read_all(sensors));
|
||||
RET_IF_ERR(prst_ble_adv_set_data(sensors));
|
||||
RET_IF_ERR(prst_ble_adv_start());
|
||||
k_msleep(CONFIG_PRST_BLE_ADV_DURATION_MSEC);
|
||||
RET_IF_ERR(prst_ble_adv_stop());
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
__ASSERT(!prst_init(), "Error in prst_init()");
|
||||
prst_led_flash(2);
|
||||
prst_sensors_t sensors;
|
||||
while (true) {
|
||||
RET_IF_ERR(prst_sensors_read_all(&sensors));
|
||||
|
||||
RET_IF_ERR(prst_ble_adv_set_data(&sensors));
|
||||
RET_IF_ERR(prst_ble_adv_start());
|
||||
|
||||
k_sleep(K_SECONDS(CONFIG_PRST_BLE_ADV_DURATION_SEC));
|
||||
|
||||
RET_IF_ERR(prst_ble_adv_stop());
|
||||
|
||||
k_sleep(K_SECONDS(CONFIG_PRST_SLEEP_DURATION_SEC));
|
||||
__ASSERT(!prst_loop(&sensors), "Error in prst_loop()");
|
||||
k_msleep(CONFIG_PRST_SLEEP_DURATION_MSEC);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
2
code/nrf-connect/samples/input/.gitignore
vendored
Normal file
2
code/nrf-connect/samples/input/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
build
|
||||
build_*
|
||||
15
code/nrf-connect/samples/input/CMakeLists.txt
Normal file
15
code/nrf-connect/samples/input/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
cmake_minimum_required(VERSION 3.20.0)
|
||||
|
||||
# Pull in the dts/ and boards/ from prstlib.
|
||||
set(DTS_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../prstlib)
|
||||
set(BOARD_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../prstlib)
|
||||
|
||||
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
|
||||
|
||||
project(input)
|
||||
|
||||
target_sources(app PRIVATE src/main.c)
|
||||
|
||||
add_subdirectory(../../prstlib prstlib)
|
||||
target_include_directories(app PRIVATE ../../prstlib/include)
|
||||
target_link_libraries(app PUBLIC prstlib)
|
||||
3
code/nrf-connect/samples/input/Kconfig
Normal file
3
code/nrf-connect/samples/input/Kconfig
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
|
||||
source "Kconfig.zephyr"
|
||||
rsource "../../prstlib/Kconfig"
|
||||
16
code/nrf-connect/samples/input/input.code-workspace
Normal file
16
code/nrf-connect/samples/input/input.code-workspace
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"folders": [
|
||||
{
|
||||
"path": "."
|
||||
},
|
||||
{
|
||||
"path": "../../prstlib"
|
||||
}
|
||||
],
|
||||
"settings": {
|
||||
"C_Cpp.autoAddFileAssociations": false,
|
||||
"nrf-connect.applications": [
|
||||
"${workspaceFolder}"
|
||||
]
|
||||
}
|
||||
}
|
||||
16
code/nrf-connect/samples/input/prj.conf
Normal file
16
code/nrf-connect/samples/input/prj.conf
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
CONFIG_LOG=y
|
||||
CONFIG_PWM=y
|
||||
CONFIG_I2C=y
|
||||
CONFIG_ADC=y
|
||||
CONFIG_GPIO=y
|
||||
|
||||
CONFIG_CBPRINTF_FP_SUPPORT=y
|
||||
|
||||
CONFIG_SERIAL=n
|
||||
|
||||
CONFIG_USE_SEGGER_RTT=y
|
||||
|
||||
CONFIG_NEWLIB_LIBC=y
|
||||
CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
|
||||
|
||||
CONFIG_PRSTLIB_LOG_LEVEL_DBG=y
|
||||
47
code/nrf-connect/samples/input/src/main.c
Normal file
47
code/nrf-connect/samples/input/src/main.c
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
#include <prstlib/adc.h>
|
||||
#include <prstlib/button.h>
|
||||
#include <prstlib/led.h>
|
||||
#include <prstlib/macros.h>
|
||||
#include <prstlib/sensors.h>
|
||||
#include <prstlib/shtc3.h>
|
||||
#include <zephyr/kernel.h>
|
||||
#include <zephyr/logging/log.h>
|
||||
|
||||
LOG_MODULE_REGISTER(main, LOG_LEVEL_DBG);
|
||||
|
||||
void button_pressed_cb(prst_button_t button, bool is_active) {
|
||||
if (is_active) {
|
||||
LOG_INF("Button pressed (debounced)");
|
||||
prst_led_on();
|
||||
} else {
|
||||
LOG_INF("Button released (debounced)");
|
||||
prst_led_off();
|
||||
}
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
RET_IF_ERR(prst_adc_init());
|
||||
RET_IF_ERR(prst_led_init());
|
||||
RET_IF_ERR(prst_button_init());
|
||||
|
||||
RET_IF_ERR(prst_led_flash(2));
|
||||
|
||||
prst_sensors_t sensors;
|
||||
// Read the sensors just to ensure they'll be put to a low
|
||||
// power mode afterward.
|
||||
RET_IF_ERR(prst_sensors_read_all(&sensors));
|
||||
|
||||
int initial_button_state = prst_button_poll(PRST_BUTTON_SW1);
|
||||
RET_CHECK(initial_button_state >= 0, "Failed to poll button");
|
||||
LOG_INF("Initial button state: %s", initial_button_state ? "active" : "inactive");
|
||||
|
||||
RET_IF_ERR(prst_button_register_callback(button_pressed_cb));
|
||||
|
||||
RET_IF_ERR(prst_led_flash(2));
|
||||
|
||||
while (true) {
|
||||
LOG_INF("Main loop.");
|
||||
k_sleep(K_FOREVER);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -5,6 +5,4 @@ CONFIG_PWM_LOG_LEVEL_DBG=y
|
|||
CONFIG_CBPRINTF_FP_SUPPORT=y
|
||||
CONFIG_ADC=y
|
||||
CONFIG_GPIO=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_DEVICE=y
|
||||
CONFIG_USE_SEGGER_RTT=y
|
||||
|
|
|
|||
|
|
@ -13,4 +13,4 @@
|
|||
"${workspaceFolder}"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,10 +12,16 @@ include_directories(src)
|
|||
|
||||
target_sources(app PRIVATE
|
||||
src/main.c
|
||||
src/debug_counters.c
|
||||
src/double_reset_detector.c
|
||||
src/factory_reset.c
|
||||
src/flash_fs.c
|
||||
src/prst_zb_attrs.c
|
||||
src/prst_zb_soil_moisture_defs.c
|
||||
src/restart_handler.c
|
||||
src/watchdog.c
|
||||
)
|
||||
|
||||
add_subdirectory(../../prstlib prstlib)
|
||||
target_include_directories(app PRIVATE ../../prstlib/include)
|
||||
target_link_libraries(app PUBLIC prstlib)
|
||||
target_link_libraries(app PUBLIC prstlib)
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@ rsource "../../prstlib/Kconfig"
|
|||
|
||||
config PRST_ZB_SLEEP_DURATION_SEC
|
||||
int "Sleep duration between waking up and reading sensors in seconds."
|
||||
default 600
|
||||
default 60
|
||||
|
||||
config PRST_ZB_PARENT_POLL_INTERVAL_SEC
|
||||
int "Interval for when b-parasite polls its parent for data in seconds."
|
||||
default 60
|
||||
default 10
|
||||
|
||||
config PRST_ZB_BUILD_DATE
|
||||
string "Zigbee basic cluster build date attribute. Max 16 bytes."
|
||||
|
|
@ -19,4 +19,26 @@ config PRST_ZB_MODEL_ID
|
|||
|
||||
config PRST_ZB_HARDWARE_VERSION
|
||||
int "Zigbee basic cluster hardware version attribute. 1 byte."
|
||||
default 2
|
||||
default BOARD_REVISION_CODE
|
||||
|
||||
choice PRST_ZB_FACTORY_RESET_METHOD
|
||||
bool "Factory reset method"
|
||||
default PRST_ZB_FACTORY_RESET_VIA_SW1
|
||||
|
||||
config PRST_ZB_FACTORY_RESET_VIA_DOUBLE_RESET
|
||||
bool "Double resetting factory resets the device."
|
||||
|
||||
config PRST_ZB_FACTORY_RESET_VIA_RESET_PIN
|
||||
bool "Resetting via the reset pin will factory reset the device. Power cycling through battery replacement will not."
|
||||
|
||||
config PRST_ZB_FACTORY_RESET_VIA_SW1
|
||||
bool "Resetting while pressing and holding SW1 for 5 seconds will factory reset the device. Only available on v2.0.0+ hardware revisions."
|
||||
|
||||
config PRST_ZB_FACTORY_RESET_DISABLED
|
||||
bool "No factory reset procedure."
|
||||
|
||||
endchoice # PRST_ZB_FACTORY_RESET_METHOD
|
||||
|
||||
config PRST_ZB_RESTART_WATCHDOG_TIMEOUT_SEC
|
||||
int "Duration after the device will restart the rejoin procedure if a network has not been successfully joined."
|
||||
default 3600
|
||||
|
|
|
|||
|
|
@ -16,15 +16,24 @@ These [clusters](https://en.wikipedia.org/wiki/Zigbee#Cluster_library) are defin
|
|||
The sample will first boot and start looking for a Zigbee coordinator - in pairing mode. The onboard LED will be flashing once a second while in this mode. Once a suitable network is found, the LED will briefly flash 3 times and remain off.
|
||||
|
||||
### Factory Reset
|
||||
Most Zigbee devices provide a physical button to "factory reset" it - causing it to forget its joined network and look for a new one.
|
||||
A factory reset will make b-parasite forget its network pairing information and switch to pairing mode. There are two (mutually exclusive) methods to perform a factory reset, controlled by the `CONFIG_PRST_ZB_FACTORY_RESET_METHOD` config flag.
|
||||
|
||||
#### Factory Reset Method 1 (default) - Double reset
|
||||
Resetting b-parasite twice in the timestamp of 5 seconds will perform a factory reset. With this method, both shorting the `RST` pin to ground and removing-inserting the battery counts as a reset.
|
||||
|
||||
For better results, wait > 1 and < 5 seconds second between the resets. The LED will flash a total of 8 times to indicate it worked.
|
||||
|
||||
#### Factory Reset Method 2 - Reset Pin
|
||||
In this method, there's a distinction between two reset modes.
|
||||
|
||||
b-parasite has no physical buttons, and the implemented work around is to distinguish between two *reset modes*:
|
||||
#### Power up mode
|
||||
The device enters this mode when it is powered. For example, swapping an old battery or connecting to eternal power. This is the "usual" reset mode, and joined networks will be remembered.
|
||||
|
||||
#### Reset pin mode
|
||||
If the device's RESET pin is briefly grounded, the device will effectively be **factory reset**. The device will leave its previous network and start looking for a new one.
|
||||
|
||||
While it works, this method can be finicky - an accidental pin reset will perform an unwanted factory reset.
|
||||
|
||||
## Configs
|
||||
Available options in `Kconfig`. Notable options:
|
||||
* `CONFIG_PRST_ZB_SLEEP_DURATION_SEC`: amount of time (in seconds) the device sleeps between reading all sensors and updating its clusters
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@ CONFIG_I2C=y
|
|||
CONFIG_ADC=y
|
||||
CONFIG_GPIO=y
|
||||
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_DEVICE=y
|
||||
CONFIG_USE_SEGGER_RTT=y
|
||||
CONFIG_SEGGER_RTT_BUFFER_SIZE_UP=4096
|
||||
|
||||
CONFIG_NEWLIB_LIBC=y
|
||||
CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
|
||||
|
|
@ -29,15 +29,44 @@ CONFIG_CRYPTO_NRF_ECB=y
|
|||
CONFIG_CRYPTO_INIT_PRIORITY=80
|
||||
|
||||
# Networking
|
||||
CONFIG_NET_IPV6=n
|
||||
CONFIG_NET_IPV6_MLD=n
|
||||
CONFIG_NET_IPV6_NBR_CACHE=n
|
||||
CONFIG_NET_IPV6_RA_RDNSS=n
|
||||
CONFIG_NET_IP_ADDR_CHECK=n
|
||||
CONFIG_NET_UDP=n
|
||||
|
||||
##
|
||||
## ZigBee Channel Selection
|
||||
##
|
||||
# Get Zigbee to scan every channel.
|
||||
CONFIG_ZIGBEE_CHANNEL_SELECTION_MODE_MULTI=y
|
||||
# By default only scans channel 11 (ZigBee2MQTT default) and 15 (ZHA default).
|
||||
# Comment to scan all channels - this will make pairing consume more energy.
|
||||
# CONFIG_ZIGBEE_CHANNEL_MASK=0x8800
|
||||
|
||||
# Uncomment to set a specific channel - this will make pairing more energy efficient.
|
||||
# CONFIG_ZIGBEE_CHANNEL=11
|
||||
|
||||
# Enable API for powering down unused RAM parts.
|
||||
# https://developer.nordicsemi.com/nRF_Connect_SDK/doc/1.7.1/nrf/ug_zigbee_configuring.html#power-saving-during-sleep
|
||||
CONFIG_RAM_POWER_DOWN_LIBRARY=y
|
||||
|
||||
# LittleFS.
|
||||
CONFIG_MAIN_STACK_SIZE=2048
|
||||
CONFIG_FLASH=y
|
||||
CONFIG_FLASH_MAP=y
|
||||
CONFIG_FLASH_PAGE_LAYOUT=y
|
||||
CONFIG_FILE_SYSTEM=y
|
||||
CONFIG_FILE_SYSTEM_LITTLEFS=y
|
||||
|
||||
CONFIG_WATCHDOG=y
|
||||
CONFIG_HWINFO=y
|
||||
CONFIG_ASSERT=y
|
||||
|
||||
# Uncomment for debug log level.
|
||||
# CONFIG_LOG_DEFAULT_LEVEL=4
|
||||
|
||||
# Factory reset method selection. Only hardware revision 2.0.0+ has button SW1. Earlier
|
||||
# revisions must select a different method. See Kconfig for options.
|
||||
# CONFIG_PRST_ZB_FACTORY_RESET_VIA_SW1=y
|
||||
|
|
|
|||
106
code/nrf-connect/samples/zigbee/src/debug_counters.c
Normal file
106
code/nrf-connect/samples/zigbee/src/debug_counters.c
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
#include "debug_counters.h"
|
||||
|
||||
#include <prstlib/macros.h>
|
||||
#include <zephyr/fs/fs.h>
|
||||
#include <zephyr/fs/littlefs.h>
|
||||
#include <zephyr/kernel.h>
|
||||
#include <zephyr/logging/log.h>
|
||||
|
||||
LOG_MODULE_REGISTER(debug_counters, CONFIG_LOG_DEFAULT_LEVEL);
|
||||
|
||||
static const char kDebugCountersDir[] = "/lfs/debug_counters";
|
||||
|
||||
#define PRST_MAX_COUNTER_NAME_LENGTH 64
|
||||
#define PRST_MAX_FILE_NAME_LENGTH (sizeof(kDebugCountersDir) + 1 + PRST_MAX_COUNTER_NAME_LENGTH)
|
||||
|
||||
static int mk_filename(const char* counter_name, char* buff, size_t buff_size) {
|
||||
RET_CHECK(strlen(counter_name) <= PRST_MAX_COUNTER_NAME_LENGTH, "Counter name too long");
|
||||
strcpy(buff, kDebugCountersDir);
|
||||
strcat(buff, "/");
|
||||
strcat(buff, counter_name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int read_counter_file(struct fs_file_t* file, prst_debug_counter_t* value) {
|
||||
int n_read = fs_read(file, value, sizeof(prst_debug_counter_t));
|
||||
if (n_read != sizeof(prst_debug_counter_t)) {
|
||||
LOG_WRN("fs_read returned %d, expected %d, assuming first access", n_read, sizeof(prst_debug_counter_t));
|
||||
*value = 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int prst_debug_counters_init() {
|
||||
struct fs_dirent entry;
|
||||
int err = fs_stat(kDebugCountersDir, &entry);
|
||||
if (err == 0) {
|
||||
LOG_DBG("Directory %s already exists", kDebugCountersDir);
|
||||
return 0;
|
||||
} else if (err == -ENOENT) {
|
||||
LOG_DBG("Creating directory %s", kDebugCountersDir);
|
||||
return fs_mkdir(kDebugCountersDir);
|
||||
}
|
||||
LOG_ERR("Unexpected error in fs_stat for %s: %d", kDebugCountersDir, err);
|
||||
return err;
|
||||
}
|
||||
|
||||
int prst_debug_counters_increment(const char* counter_name) {
|
||||
char filename[PRST_MAX_FILE_NAME_LENGTH];
|
||||
RET_IF_ERR(mk_filename(counter_name, filename, sizeof(filename)));
|
||||
|
||||
LOG_DBG("Incrementing counter %s", filename);
|
||||
|
||||
// Open the file.
|
||||
struct fs_file_t file;
|
||||
fs_file_t_init(&file);
|
||||
RET_IF_ERR(fs_open(&file, filename, FS_O_CREATE | FS_O_RDWR));
|
||||
// Read the current value.
|
||||
prst_debug_counter_t value;
|
||||
RET_IF_ERR(read_counter_file(&file, &value));
|
||||
// Increment the value.
|
||||
value++;
|
||||
// Write back to file.
|
||||
RET_CHECK(fs_seek(&file, 0, SEEK_SET) == 0, "Unable to seek");
|
||||
ssize_t written = fs_write(&file, &value, sizeof(value));
|
||||
if (written != sizeof(value)) {
|
||||
LOG_ERR("fs_write returned %d, expected %d", written, sizeof(value));
|
||||
}
|
||||
RET_IF_ERR(fs_sync(&file));
|
||||
return fs_close(&file);
|
||||
}
|
||||
|
||||
int prst_debug_counters_get(const char* counter_name, prst_debug_counter_t* value) {
|
||||
char filename[PRST_MAX_FILE_NAME_LENGTH];
|
||||
RET_IF_ERR(mk_filename(counter_name, filename, sizeof(filename)));
|
||||
|
||||
LOG_DBG("Getting counter %s", filename);
|
||||
|
||||
// Open the file.
|
||||
struct fs_file_t file;
|
||||
fs_file_t_init(&file);
|
||||
RET_IF_ERR(fs_open(&file, filename, FS_O_CREATE | FS_O_READ));
|
||||
// Read the current value.
|
||||
RET_IF_ERR(read_counter_file(&file, value));
|
||||
return fs_close(&file);
|
||||
}
|
||||
|
||||
int prst_debug_counters_get_all(prst_debug_counters_callback_t callback) {
|
||||
LOG_DBG("Getting all counters from %s", kDebugCountersDir);
|
||||
|
||||
struct fs_dir_t dirp;
|
||||
fs_dir_t_init(&dirp);
|
||||
static struct fs_dirent entry;
|
||||
RET_IF_ERR(fs_opendir(&dirp, kDebugCountersDir));
|
||||
prst_debug_counter_t value;
|
||||
for (;;) {
|
||||
RET_IF_ERR(fs_readdir(&dirp, &entry));
|
||||
// End of directory;
|
||||
if (entry.name[0] == 0) {
|
||||
break;
|
||||
}
|
||||
LOG_DBG("Found %s", entry.name);
|
||||
prst_debug_counters_get(entry.name, &value);
|
||||
callback(entry.name, value);
|
||||
}
|
||||
return fs_closedir(&dirp);
|
||||
}
|
||||
18
code/nrf-connect/samples/zigbee/src/debug_counters.h
Normal file
18
code/nrf-connect/samples/zigbee/src/debug_counters.h
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
#ifndef _PRST_DEBUG_COUNTERS_H_
|
||||
#define _PRST_DEBUG_COUNTERS_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
typedef uint32_t prst_debug_counter_t;
|
||||
|
||||
typedef void (*prst_debug_counters_callback_t)(const char* counter_name, prst_debug_counter_t value);
|
||||
|
||||
int prst_debug_counters_init();
|
||||
|
||||
int prst_debug_counters_increment(const char* counter_name);
|
||||
|
||||
int prst_debug_counters_get(const char* counter_name, prst_debug_counter_t* value);
|
||||
|
||||
int prst_debug_counters_get_all(prst_debug_counters_callback_t callback);
|
||||
|
||||
#endif // _PRST_DEBUG_COUNTERS_H_
|
||||
66
code/nrf-connect/samples/zigbee/src/double_reset_detector.c
Normal file
66
code/nrf-connect/samples/zigbee/src/double_reset_detector.c
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
#include "double_reset_detector.h"
|
||||
|
||||
#include <prstlib/macros.h>
|
||||
#include <string.h>
|
||||
#include <zephyr/fs/fs.h>
|
||||
#include <zephyr/fs/littlefs.h>
|
||||
#include <zephyr/kernel.h>
|
||||
#include <zephyr/logging/log.h>
|
||||
|
||||
#include "debug_counters.h"
|
||||
|
||||
LOG_MODULE_REGISTER(double_reset_detector, CONFIG_LOG_DEFAULT_LEVEL);
|
||||
|
||||
static const char *flag_filename = "/lfs/reset_flag";
|
||||
|
||||
static const char flag_prefix[] = "prst-rst-count";
|
||||
|
||||
static struct fs_file_t flag_file;
|
||||
|
||||
static int erase_flag() {
|
||||
return fs_unlink(flag_filename);
|
||||
}
|
||||
|
||||
void erase_flag_callback(struct k_work *work) {
|
||||
LOG_INF("Erasing double reset flag.");
|
||||
if (erase_flag() != 0) {
|
||||
LOG_ERR("Error deleting flag");
|
||||
}
|
||||
}
|
||||
|
||||
K_WORK_DELAYABLE_DEFINE(erase_flag_work, erase_flag_callback);
|
||||
|
||||
int prst_detect_double_reset(prst_double_reset_callback_t on_double_reset) {
|
||||
fs_file_t_init(&flag_file);
|
||||
|
||||
RET_IF_ERR(fs_open(&flag_file, flag_filename, FS_O_CREATE | FS_O_RDWR));
|
||||
|
||||
char buff[sizeof(flag_prefix)];
|
||||
RET_CHECK(fs_read(&flag_file, buff, sizeof(buff)) >= 0, "Unable to read file");
|
||||
|
||||
// Consider it a double reset if the flag is present in the FS.
|
||||
if (strcmp(buff, flag_prefix) == 0) {
|
||||
RET_IF_ERR(fs_close(&flag_file));
|
||||
RET_IF_ERR(erase_flag());
|
||||
prst_debug_counters_increment("double_reset");
|
||||
return on_double_reset();
|
||||
}
|
||||
|
||||
// Rewind file.
|
||||
RET_IF_ERR(fs_seek(&flag_file, 0, SEEK_SET));
|
||||
|
||||
// Write the flag and erase it after some time.
|
||||
ssize_t written = fs_write(&flag_file, flag_prefix, sizeof(flag_prefix));
|
||||
if (written != sizeof(flag_prefix)) {
|
||||
LOG_ERR("fs_write returned %d, expected %d", written, sizeof(flag_prefix));
|
||||
return -1;
|
||||
}
|
||||
|
||||
RET_IF_ERR(fs_close(&flag_file));
|
||||
|
||||
// Schedule the erasure of the flag after some time.
|
||||
RET_CHECK(k_work_schedule(&erase_flag_work, K_SECONDS(5)) == 1,
|
||||
"Work not scheduled");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
#ifndef _PRST_ZB_DOUBLE_RESET_DETECTOR_H_
|
||||
#define _PRST_ZB_DOUBLE_RESET_DETECTOR_H_
|
||||
|
||||
typedef int (*prst_double_reset_callback_t)();
|
||||
|
||||
int prst_detect_double_reset(prst_double_reset_callback_t on_double_reset);
|
||||
|
||||
#endif // _PRST_ZB_DOUBLE_RESET_DETECTOR_H_
|
||||
75
code/nrf-connect/samples/zigbee/src/factory_reset.c
Normal file
75
code/nrf-connect/samples/zigbee/src/factory_reset.c
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
#include "factory_reset.h"
|
||||
|
||||
#include <hal/nrf_power.h>
|
||||
#include <prstlib/button.h>
|
||||
#include <prstlib/led.h>
|
||||
#include <zephyr/logging/log.h>
|
||||
#include <zigbee/zigbee_app_utils.h>
|
||||
|
||||
#include "double_reset_detector.h"
|
||||
|
||||
LOG_MODULE_REGISTER(factory_reset, CONFIG_LOG_DEFAULT_LEVEL);
|
||||
|
||||
static int factory_reset() {
|
||||
LOG_WRN("Factory resetting device");
|
||||
zb_bdb_reset_via_local_action(/*param=*/0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if CONFIG_PRST_ZB_FACTORY_RESET_VIA_DOUBLE_RESET
|
||||
int double_reset_handler() {
|
||||
LOG_WRN("Called double reset handler");
|
||||
prst_led_flash(5);
|
||||
return factory_reset();
|
||||
}
|
||||
#endif // CONFIG_PRST_ZB_FACTORY_RESET_VIA_DOUBLE_RESET
|
||||
|
||||
#if CONFIG_PRST_ZB_FACTORY_RESET_VIA_RESET_PIN
|
||||
static int factory_reset_if_reset_via_reset_pin() {
|
||||
uint32_t reset_reason = nrf_power_resetreas_get(NRF_POWER);
|
||||
// If we're resetting via the RESET pin (e.g.: reset pin shorting, firmware flashing).
|
||||
if (reset_reason & 0x1) {
|
||||
LOG_WRN("Manual reset / re-flashing detected - erasing pairing info");
|
||||
return factory_reset();
|
||||
} else { // It's a power-on cycle (e.g.: swapping battery, first boot).
|
||||
LOG_INF("Power-on cycle - keeping pairing info");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif // CONFIG_PRST_ZB_FACTORY_RESET_VIA_RESET_PIN
|
||||
|
||||
#if CONFIG_PRST_ZB_FACTORY_RESET_VIA_SW1
|
||||
static void timer_do_reset(zb_uint8_t unused_param) {
|
||||
LOG_WRN("SW1 button was pressed for 5 seconds, factory resetting device");
|
||||
prst_led_flash(/*times=*/5);
|
||||
factory_reset();
|
||||
}
|
||||
|
||||
static void sw1_factory_reset_check_timer_cb(struct k_timer *timer_id) {
|
||||
if (!prst_button_poll(PRST_BUTTON_SW1)) {
|
||||
LOG_DBG("SW1 button was released, will not factory reset device");
|
||||
return;
|
||||
}
|
||||
ZB_SCHEDULE_APP_CALLBACK(timer_do_reset, /*param=*/0);
|
||||
}
|
||||
|
||||
K_TIMER_DEFINE(sw1_factory_reset_check_timer, sw1_factory_reset_check_timer_cb, NULL);
|
||||
#endif
|
||||
|
||||
int prst_zb_factory_reset_check() {
|
||||
#if CONFIG_PRST_ZB_FACTORY_RESET_VIA_DOUBLE_RESET
|
||||
return prst_detect_double_reset(double_reset_handler);
|
||||
#elif CONFIG_PRST_ZB_FACTORY_RESET_VIA_RESET_PIN
|
||||
return factory_reset_if_reset_via_reset_pin();
|
||||
#elif CONFIG_PRST_ZB_FACTORY_RESET_VIA_SW1
|
||||
if (prst_button_poll(PRST_BUTTON_SW1)) {
|
||||
LOG_DBG("SW1 pressed. Scheduling timer");
|
||||
k_timer_start(&sw1_factory_reset_check_timer, K_SECONDS(5), K_NO_WAIT);
|
||||
}
|
||||
return 0;
|
||||
#elif CONFIG_PRST_ZB_FACTORY_RESET_DISABLED
|
||||
return 0;
|
||||
#else
|
||||
#error "No factory reset method selected -- explicitly select CONFIG_PRST_ZB_FACTORY_RESET_DISABLED=y to disable it"
|
||||
#endif // CONFIG_PRST_ZB_FACTORY_RESET_VIA_RESET_PIN
|
||||
}
|
||||
6
code/nrf-connect/samples/zigbee/src/factory_reset.h
Normal file
6
code/nrf-connect/samples/zigbee/src/factory_reset.h
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
#ifndef _PRST_ZB_FACTORY_RESET_H_
|
||||
#define _PRST_ZB_FACTORY_RESET_H_
|
||||
|
||||
int prst_zb_factory_reset_check();
|
||||
|
||||
#endif // _PRST_ZB_FACTORY_RESET_H_
|
||||
26
code/nrf-connect/samples/zigbee/src/flash_fs.c
Normal file
26
code/nrf-connect/samples/zigbee/src/flash_fs.c
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
#include "flash_fs.h"
|
||||
|
||||
#include <prstlib/macros.h>
|
||||
#include <zephyr/fs/fs.h>
|
||||
#include <zephyr/fs/littlefs.h>
|
||||
#include <zephyr/logging/log.h>
|
||||
|
||||
LOG_MODULE_REGISTER(flash_fs, CONFIG_LOG_DEFAULT_LEVEL);
|
||||
|
||||
FS_LITTLEFS_DECLARE_DEFAULT_CONFIG(storage);
|
||||
|
||||
static struct fs_mount_t lfs_storage_mnt = {
|
||||
.type = FS_LITTLEFS,
|
||||
.fs_data = &storage,
|
||||
.storage_dev = (void *)FIXED_PARTITION_ID(storage_partition),
|
||||
.mnt_point = "/lfs",
|
||||
};
|
||||
|
||||
int prst_flash_fs_init() {
|
||||
// TODO: if booting for the first time after a full flash erase, fs_mount will
|
||||
// complain (via a LOG_ERR) and then automatically format the flash. It all works,
|
||||
// but avoiding a scary red message would be ideal. Maybe somehow check if it's
|
||||
// formatted before mounting?
|
||||
RET_IF_ERR(fs_mount(&lfs_storage_mnt));
|
||||
return 0;
|
||||
}
|
||||
9
code/nrf-connect/samples/zigbee/src/flash_fs.h
Normal file
9
code/nrf-connect/samples/zigbee/src/flash_fs.h
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
#ifndef _PRST_FLASH_FS_H_
|
||||
#define _PRST_FLASH_FS_H_
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
// Initializes and mounts littlefs.
|
||||
int prst_flash_fs_init();
|
||||
|
||||
#endif // _PRST_FLASH_FS_H_
|
||||
|
|
@ -1,5 +1,3 @@
|
|||
#include <dk_buttons_and_leds.h>
|
||||
#include <hal/nrf_power.h>
|
||||
#include <math.h>
|
||||
#include <prstlib/adc.h>
|
||||
#include <prstlib/button.h>
|
||||
|
|
@ -12,16 +10,20 @@
|
|||
#include <zboss_api.h>
|
||||
#include <zboss_api_addons.h>
|
||||
#include <zcl/zb_zcl_power_config.h>
|
||||
#include <zephyr/drivers/hwinfo.h>
|
||||
#include <zephyr/kernel.h>
|
||||
#include <zephyr/logging/log.h>
|
||||
#include <zigbee/zigbee_app_utils.h>
|
||||
#include <zigbee/zigbee_error_handler.h>
|
||||
|
||||
#include "debug_counters.h"
|
||||
#include "factory_reset.h"
|
||||
#include "flash_fs.h"
|
||||
#include "prst_zb_attrs.h"
|
||||
#include "prst_zb_endpoint_defs.h"
|
||||
#include "prst_zb_soil_moisture_defs.h"
|
||||
|
||||
#define FACTORY_RESET_BUTTON DK_BTN4_MSK
|
||||
#include "restart_handler.h"
|
||||
#include "watchdog.h"
|
||||
|
||||
LOG_MODULE_REGISTER(app, CONFIG_LOG_DEFAULT_LEVEL);
|
||||
|
||||
|
|
@ -29,17 +31,8 @@ static struct zb_device_ctx dev_ctx;
|
|||
|
||||
static prst_sensors_t sensors;
|
||||
|
||||
static void maybe_erase_pairing_info(struct k_timer *timer) {
|
||||
uint32_t reset_reason = nrf_power_resetreas_get(NRF_POWER);
|
||||
// If we're resetting via the RESET pin (e.g.: reset pin shorting, firmware flashing).
|
||||
if (reset_reason & 0x1) {
|
||||
LOG_WRN("Manual reset / re-flashing detected - erasing pairing info");
|
||||
// TODO: consider zb_bdb_reset_via_local_action(/*param=*/0);
|
||||
zigbee_erase_persistent_storage(/*erase=*/true);
|
||||
} else { // It's a power-on cycle (e.g.: swapping battery, first boot).
|
||||
LOG_INF("Power-on cycle - keeping pairing info");
|
||||
}
|
||||
}
|
||||
static bool joining_signal_received = false;
|
||||
static bool stack_initialised = false;
|
||||
|
||||
static void led_flashing_cb(struct k_timer *timer) {
|
||||
prst_led_toggle();
|
||||
|
|
@ -82,8 +75,8 @@ ZB_ZCL_DECLARE_REL_HUMIDITY_MEASUREMENT_ATTRIB_LIST(
|
|||
ZB_ZCL_DECLARE_POWER_CONFIG_BATTERY_ATTRIB_LIST_EXT(
|
||||
batt_attr_list,
|
||||
&dev_ctx.batt_attrs.voltage,
|
||||
/*battery_size=*/ZB_ZCL_POWER_CONFIG_BATTERY_SIZE_OTHER,
|
||||
/*battery_quantity=*/1,
|
||||
/*battery_size=*/&dev_ctx.batt_attrs.size,
|
||||
/*battery_quantity=*/&dev_ctx.batt_attrs.quantity,
|
||||
/*battery_rated_voltage=*/NULL,
|
||||
/*battery_alarm_mask=*/NULL,
|
||||
/*battery_voltage_min_threshold=*/NULL,
|
||||
|
|
@ -126,43 +119,33 @@ ZBOSS_DECLARE_DEVICE_CTX_1_EP(
|
|||
app_template_ctx,
|
||||
app_template_ep);
|
||||
|
||||
void zboss_signal_handler(zb_bufid_t bufid) {
|
||||
// See zigbee_default_signal_handler() for all available signals.
|
||||
zb_zdo_app_signal_type_t sig = zb_get_app_signal(bufid, /*sg_p=*/NULL);
|
||||
zb_ret_t status = ZB_GET_APP_SIGNAL_STATUS(bufid);
|
||||
switch (sig) {
|
||||
case ZB_BDB_SIGNAL_STEERING: // New network.
|
||||
case ZB_BDB_SIGNAL_DEVICE_REBOOT: { // Previously joined network.
|
||||
LOG_DBG("Steering complete. Status: %d", status);
|
||||
prst_led_flash(/*times=*/3);
|
||||
if (status == RET_OK) {
|
||||
k_timer_stop(&led_flashing_timer);
|
||||
prst_led_off();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ZB_ZDO_SIGNAL_SKIP_STARTUP:
|
||||
case ZB_ZDO_SIGNAL_LEAVE: {
|
||||
LOG_DBG("Will restart flashing");
|
||||
k_timer_start(&led_flashing_timer, K_NO_WAIT, K_SECONDS(1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ZB_ERROR_CHECK(zigbee_default_signal_handler(bufid));
|
||||
if (bufid) {
|
||||
zb_buf_free(bufid);
|
||||
}
|
||||
void identify_cb(zb_bufid_t bufid) {
|
||||
LOG_DBG("Remote identify command called");
|
||||
prst_led_flash(15);
|
||||
}
|
||||
|
||||
void update_sensors_cb(zb_uint8_t arg) {
|
||||
LOG_INF("Updating sensors");
|
||||
LOG_DBG("Updating sensors");
|
||||
|
||||
if (prst_sensors_read_all(&sensors)) {
|
||||
LOG_ERR("Unable to read sensors");
|
||||
return;
|
||||
// Reschedule the same callback.
|
||||
zb_ret_t ret = ZB_SCHEDULE_APP_ALARM(
|
||||
update_sensors_cb,
|
||||
/*param=*/0,
|
||||
ZB_MILLISECONDS_TO_BEACON_INTERVAL(1000 * CONFIG_PRST_ZB_SLEEP_DURATION_SEC));
|
||||
if (ret != RET_OK) {
|
||||
prst_debug_counters_increment("sens_cb_schedule_err");
|
||||
__ASSERT(false, "Unable to schedule sensor update callback");
|
||||
}
|
||||
|
||||
__ASSERT(!prst_watchdog_feed(), "Failed to feed watchdog");
|
||||
|
||||
prst_debug_counters_increment("sensors_read_before");
|
||||
if (prst_sensors_read_all(&sensors)) {
|
||||
prst_debug_counters_increment("sensors_read_error");
|
||||
__ASSERT(false, "Unable to read sensors");
|
||||
}
|
||||
prst_debug_counters_increment("sensors_read_after");
|
||||
|
||||
// Battery voltage in units of 100 mV.
|
||||
uint8_t batt_voltage = sensors.batt.adc_read.millivolts / 100;
|
||||
prst_zb_set_attr_value(ZB_ZCL_CLUSTER_ID_POWER_CONFIG,
|
||||
|
|
@ -198,35 +181,151 @@ void update_sensors_cb(zb_uint8_t arg) {
|
|||
prst_zb_set_attr_value(ZB_ZCL_CLUSTER_ID_ILLUMINANCE_MEASUREMENT,
|
||||
ZB_ZCL_ATTR_ILLUMINANCE_MEASUREMENT_MEASURED_VALUE_ID,
|
||||
&log_lux);
|
||||
}
|
||||
|
||||
ZB_SCHEDULE_APP_ALARM(update_sensors_cb,
|
||||
/*param=*/0,
|
||||
ZB_TIME_ONE_SECOND * CONFIG_PRST_ZB_SLEEP_DURATION_SEC);
|
||||
void zboss_signal_handler(zb_bufid_t bufid) {
|
||||
// See zigbee_default_signal_handler() for all available signals.
|
||||
zb_zdo_app_signal_hdr_t *sig_hndler = NULL;
|
||||
zb_zdo_app_signal_type_t sig = zb_get_app_signal(bufid, /*sg_p=*/&sig_hndler);
|
||||
zb_ret_t status = ZB_GET_APP_SIGNAL_STATUS(bufid);
|
||||
switch (sig) {
|
||||
case ZB_BDB_SIGNAL_STEERING: // New network.
|
||||
case ZB_BDB_SIGNAL_DEVICE_REBOOT: { // Previously joined network.
|
||||
LOG_DBG("Steering complete. Status: %d", status);
|
||||
if (status == RET_OK) {
|
||||
LOG_DBG("Steering successful. Status: %d", status);
|
||||
k_timer_stop(&led_flashing_timer);
|
||||
prst_led_off();
|
||||
prst_restart_watchdog_stop();
|
||||
// Update the long polling parent interval - needs to be done after joining.
|
||||
zb_zdo_pim_set_long_poll_interval(1000 * CONFIG_PRST_ZB_PARENT_POLL_INTERVAL_SEC);
|
||||
} else {
|
||||
LOG_DBG("Steering failed. Status: %d", status);
|
||||
prst_restart_watchdog_start();
|
||||
// Power saving.
|
||||
k_timer_stop(&led_flashing_timer);
|
||||
prst_led_off();
|
||||
}
|
||||
joining_signal_received = true;
|
||||
break;
|
||||
}
|
||||
case ZB_BDB_SIGNAL_DEVICE_FIRST_START:
|
||||
joining_signal_received = true;
|
||||
break;
|
||||
case ZB_ZDO_SIGNAL_LEAVE:
|
||||
if (status == RET_OK) {
|
||||
k_timer_start(&led_flashing_timer, K_NO_WAIT, K_SECONDS(1));
|
||||
zb_zdo_signal_leave_params_t *leave_params = ZB_ZDO_SIGNAL_GET_PARAMS(sig_hndler, zb_zdo_signal_leave_params_t);
|
||||
LOG_DBG("Network left (leave type: %d)", leave_params->leave_type);
|
||||
|
||||
/* Set joining_signal_received to false so broken rejoin procedure can be detected correctly. */
|
||||
if (leave_params->leave_type == ZB_NWK_LEAVE_TYPE_REJOIN) {
|
||||
joining_signal_received = false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ZB_ZDO_SIGNAL_SKIP_STARTUP: {
|
||||
stack_initialised = true;
|
||||
LOG_DBG("Started zigbee stack and waiting for connection to network.");
|
||||
k_timer_start(&led_flashing_timer, K_NO_WAIT, K_SECONDS(1));
|
||||
|
||||
// Kick off main sensor update task.
|
||||
ZB_ERROR_CHECK(ZB_SCHEDULE_APP_ALARM(update_sensors_cb,
|
||||
/*param=*/0,
|
||||
ZB_MILLISECONDS_TO_BEACON_INTERVAL(1000)));
|
||||
__ASSERT_NO_MSG(!prst_watchdog_start());
|
||||
break;
|
||||
}
|
||||
case ZB_NLME_STATUS_INDICATION: {
|
||||
zb_zdo_signal_nlme_status_indication_params_t *nlme_status_ind =
|
||||
ZB_ZDO_SIGNAL_GET_PARAMS(sig_hndler, zb_zdo_signal_nlme_status_indication_params_t);
|
||||
if (nlme_status_ind->nlme_status.status == ZB_NWK_COMMAND_STATUS_PARENT_LINK_FAILURE) {
|
||||
/* Check for broken rejoin procedure and restart the device to recover.
|
||||
This implements Nordic's suggested workaround for errata KRKNWK-12017, which effects
|
||||
the recent nRF Connect SDK (v1.8.0 - v2.3.0 at time of writing).
|
||||
For details see: https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/known_issues.html?v=v2-3-0
|
||||
*/
|
||||
if (stack_initialised && !joining_signal_received) {
|
||||
zb_reset(0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ZB_ERROR_CHECK(zigbee_default_signal_handler(bufid));
|
||||
if (bufid) {
|
||||
zb_buf_free(bufid);
|
||||
}
|
||||
}
|
||||
|
||||
void dump_counter(const char *counter_name, prst_debug_counter_t value) {
|
||||
LOG_INF("- %s: %d", counter_name, value);
|
||||
}
|
||||
|
||||
int log_reset_reason_counter() {
|
||||
uint32_t cause;
|
||||
const char *reset_counter_str = "reset_cause_unknown";
|
||||
RET_IF_ERR(hwinfo_get_reset_cause(&cause));
|
||||
RET_IF_ERR(hwinfo_clear_reset_cause());
|
||||
if (cause & RESET_PIN) {
|
||||
reset_counter_str = "reset_cause_pin";
|
||||
} else if (cause & RESET_SOFTWARE) {
|
||||
// Includes fatal errors from __ASSERT, ZB_ERROR_CHECK and friends.
|
||||
reset_counter_str = "reset_cause_software";
|
||||
} else if (cause & RESET_BROWNOUT) {
|
||||
reset_counter_str = "reset_cause_brownout";
|
||||
} else if (cause & RESET_POR) {
|
||||
reset_counter_str = "reset_cause_power_on";
|
||||
} else if (cause & RESET_WATCHDOG) {
|
||||
reset_counter_str = "reset_cause_watchdog";
|
||||
} else if (cause & RESET_DEBUG) {
|
||||
reset_counter_str = "reset_cause_debug";
|
||||
} else if (cause & RESET_LOW_POWER_WAKE) {
|
||||
reset_counter_str = "reset_cause_low_power";
|
||||
} else if (cause & RESET_CPU_LOCKUP) {
|
||||
reset_counter_str = "reset_cause_cpu_lockup";
|
||||
} else if (cause & RESET_HARDWARE) {
|
||||
reset_counter_str = "reset_cause_hardware";
|
||||
} else if (cause & RESET_USER) {
|
||||
reset_counter_str = "reset_cause_user";
|
||||
}
|
||||
return prst_debug_counters_increment(reset_counter_str);
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
RET_IF_ERR(prst_adc_init());
|
||||
RET_IF_ERR(prst_led_init());
|
||||
RET_IF_ERR(prst_button_init());
|
||||
RET_IF_ERR(prst_flash_fs_init());
|
||||
RET_IF_ERR(prst_debug_counters_init());
|
||||
|
||||
maybe_erase_pairing_info(NULL);
|
||||
// Initialize sensors - quickly put them into low power mode.
|
||||
__ASSERT_NO_MSG(!prst_sensors_read_all(&sensors));
|
||||
|
||||
register_factory_reset_button(FACTORY_RESET_BUTTON);
|
||||
prst_debug_counters_increment("boot");
|
||||
|
||||
log_reset_reason_counter();
|
||||
|
||||
LOG_INF("Dumping debug counters:");
|
||||
prst_debug_counters_get_all(dump_counter);
|
||||
|
||||
__ASSERT_NO_MSG(!prst_zb_factory_reset_check());
|
||||
|
||||
prst_zb_attrs_init(&dev_ctx);
|
||||
|
||||
ZB_AF_REGISTER_DEVICE_CTX(&app_template_ctx);
|
||||
|
||||
update_sensors_cb(/*arg=*/0);
|
||||
prst_led_flash(2);
|
||||
k_msleep(100);
|
||||
|
||||
zb_zdo_pim_set_long_poll_interval(
|
||||
ZB_TIME_ONE_SECOND * CONFIG_PRST_ZB_PARENT_POLL_INTERVAL_SEC);
|
||||
power_down_unused_ram();
|
||||
ZB_AF_SET_IDENTIFY_NOTIFICATION_HANDLER(PRST_ZIGBEE_ENDPOINT, identify_cb);
|
||||
|
||||
RET_IF_ERR(prst_led_flash(2));
|
||||
|
||||
zigbee_enable();
|
||||
zigbee_configure_sleepy_behavior(/*enable=*/true);
|
||||
power_down_unused_ram();
|
||||
zigbee_enable();
|
||||
|
||||
prst_debug_counters_increment("main_finish");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ void prst_zb_attrs_init(struct zb_device_ctx *dev_ctx) {
|
|||
|
||||
dev_ctx->basic_attr.hw_version = CONFIG_PRST_ZB_HARDWARE_VERSION;
|
||||
|
||||
dev_ctx->batt_attrs.quantity = 1;
|
||||
dev_ctx->batt_attrs.size = ZB_ZCL_POWER_CONFIG_BATTERY_SIZE_OTHER;
|
||||
|
||||
dev_ctx->identify_attr.identify_time =
|
||||
ZB_ZCL_IDENTIFY_IDENTIFY_TIME_DEFAULT_VALUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,10 @@ typedef struct {
|
|||
zb_uint8_t voltage;
|
||||
// Units of 0.5%. 0x00 (0%) - 0xc8 (100%) (optional, reportable).
|
||||
zb_uint8_t percentage;
|
||||
// Whole number of battery cells used to power device
|
||||
zb_uint8_t quantity;
|
||||
// Enumeration of battery size
|
||||
enum zb_zcl_power_config_battery_size_e size;
|
||||
} prst_batt_attrs_t;
|
||||
|
||||
// Soil moisture cluster.
|
||||
|
|
|
|||
34
code/nrf-connect/samples/zigbee/src/restart_handler.c
Normal file
34
code/nrf-connect/samples/zigbee/src/restart_handler.c
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
#include "restart_handler.h"
|
||||
|
||||
#include <zephyr/kernel.h>
|
||||
#include <zephyr/logging/log.h>
|
||||
#include <zigbee/zigbee_app_utils.h>
|
||||
|
||||
#include "debug_counters.h"
|
||||
|
||||
LOG_MODULE_REGISTER(restart_handler, CONFIG_LOG_DEFAULT_LEVEL);
|
||||
|
||||
void callback_work_handler(struct k_work *work) {
|
||||
LOG_INF("Running restart callback_work_handler.");
|
||||
prst_debug_counters_increment("steering_watchdog_restart");
|
||||
// If the device is not commissioned, the rejoin procedure is started.
|
||||
user_input_indicate();
|
||||
}
|
||||
|
||||
K_WORK_DEFINE(callback_work, callback_work_handler);
|
||||
|
||||
// Runs in an ISR context. We offload the actual work to a workqueue.
|
||||
static void restart_network_steering_cb(struct k_timer *timer) {
|
||||
LOG_INF("Triggered restart_network_steering_cb. Offloading work.");
|
||||
k_work_submit(&callback_work);
|
||||
}
|
||||
|
||||
K_TIMER_DEFINE(restart_timer, restart_network_steering_cb, NULL);
|
||||
|
||||
void prst_restart_watchdog_start() {
|
||||
k_timer_start(&restart_timer, K_SECONDS(CONFIG_PRST_ZB_RESTART_WATCHDOG_TIMEOUT_SEC), K_MSEC(0));
|
||||
}
|
||||
|
||||
void prst_restart_watchdog_stop() {
|
||||
k_timer_stop(&restart_timer);
|
||||
}
|
||||
7
code/nrf-connect/samples/zigbee/src/restart_handler.h
Normal file
7
code/nrf-connect/samples/zigbee/src/restart_handler.h
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
#ifndef _PRST_ZB_RESTART_HANDLER_H_
|
||||
#define _PRST_ZB_RESTART_HANDLER_H_
|
||||
|
||||
void prst_restart_watchdog_start();
|
||||
void prst_restart_watchdog_stop();
|
||||
|
||||
#endif // _PRST_ZB_RESTART_HANDLER_H_
|
||||
47
code/nrf-connect/samples/zigbee/src/watchdog.c
Normal file
47
code/nrf-connect/samples/zigbee/src/watchdog.c
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
#include "watchdog.h"
|
||||
|
||||
#include <prstlib/macros.h>
|
||||
#include <zephyr/device.h>
|
||||
#include <zephyr/drivers/watchdog.h>
|
||||
#include <zephyr/kernel.h>
|
||||
#include <zephyr/logging/log.h>
|
||||
|
||||
#define PRST_ZB_WATCHDOG_TIMEOUT_SEC (2 * CONFIG_PRST_ZB_SLEEP_DURATION_SEC)
|
||||
|
||||
LOG_MODULE_REGISTER(watchdog, CONFIG_LOG_DEFAULT_LEVEL);
|
||||
|
||||
typedef struct {
|
||||
const struct device *const wdt;
|
||||
int wtd_channel_id;
|
||||
} wtd_data_t;
|
||||
|
||||
static wtd_data_t wtd_data = {
|
||||
.wdt = DEVICE_DT_GET(DT_NODELABEL(wdt)),
|
||||
};
|
||||
|
||||
int prst_watchdog_start() {
|
||||
static const struct wdt_timeout_cfg wdt_settings = {
|
||||
.window = {
|
||||
.min = 0,
|
||||
.max = PRST_ZB_WATCHDOG_TIMEOUT_SEC * MSEC_PER_SEC,
|
||||
},
|
||||
// NULL callback means use the default, which is the system reset.
|
||||
.callback = NULL,
|
||||
.flags = WDT_FLAG_RESET_SOC};
|
||||
|
||||
RET_IF_ERR(!device_is_ready(wtd_data.wdt));
|
||||
|
||||
// Install timeout.
|
||||
wtd_data.wtd_channel_id = wdt_install_timeout(wtd_data.wdt, &wdt_settings);
|
||||
RET_CHECK(wtd_data.wtd_channel_id >= 0, "Failed to install watchdog timeout.");
|
||||
|
||||
// Start watchdog.
|
||||
RET_IF_ERR(wdt_setup(wtd_data.wdt, WDT_OPT_PAUSE_HALTED_BY_DBG));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int prst_watchdog_feed() {
|
||||
RET_IF_ERR(wdt_feed(wtd_data.wdt, wtd_data.wtd_channel_id));
|
||||
return 0;
|
||||
}
|
||||
8
code/nrf-connect/samples/zigbee/src/watchdog.h
Normal file
8
code/nrf-connect/samples/zigbee/src/watchdog.h
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
#ifndef _PRST_ZB_WATCHDOG_H_
|
||||
#define _PRST_ZB_WATCHDOG_H_
|
||||
|
||||
int prst_watchdog_start();
|
||||
|
||||
int prst_watchdog_feed();
|
||||
|
||||
#endif // _PRST_ZB_WATCHDOG_H_
|
||||
BIN
img/resized/b-parasite-2.0.0.jpg
Executable file
BIN
img/resized/b-parasite-2.0.0.jpg
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 992 KiB |
|
|
@ -1,6 +1,7 @@
|
|||
(fp_lib_table
|
||||
(lib (name kicad)(type KiCad)(uri ${KIPRJMOD}/lib/kicad)(options "")(descr ""))
|
||||
(lib (name nrfmicro)(type KiCad)(uri ${KIPRJMOD}/lib/nrfmicro)(options "")(descr ""))
|
||||
(lib (name OSHW-logo)(type Legacy)(uri ${KIPRJMOD}/lib/oshw/OSHW-logo.mod)(options "")(descr ""))
|
||||
(lib (name snapeda)(type KiCad)(uri ${KIPRJMOD}/lib/snapeda)(options "")(descr ""))
|
||||
(lib (name "kicad")(type "KiCad")(uri "${KIPRJMOD}/lib/kicad")(options "")(descr ""))
|
||||
(lib (name "nrfmicro")(type "KiCad")(uri "${KIPRJMOD}/lib/nrfmicro")(options "")(descr ""))
|
||||
(lib (name "OSHW-logo")(type "Legacy")(uri "${KIPRJMOD}/lib/oshw/OSHW-logo.mod")(options "")(descr ""))
|
||||
(lib (name "snapeda")(type "KiCad")(uri "${KIPRJMOD}/lib/snapeda")(options "")(descr ""))
|
||||
(lib (name "b-parasite")(type "KiCad")(uri "${KIPRJMOD}/lib/b-parasite")(options "")(descr ""))
|
||||
)
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,79 +1,40 @@
|
|||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(5.1.2-1)-1*
|
||||
G04 #@! TF.CreationDate,2021-10-09T10:13:21+02:00*
|
||||
G04 #@! TF.ProjectId,parasite,70617261-7369-4746-952e-6b696361645f,1.2.0*
|
||||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,7.0.1-0*
|
||||
G04 #@! TF.CreationDate,2023-03-19T14:40:06+01:00*
|
||||
G04 #@! TF.ProjectId,parasite,70617261-7369-4746-952e-6b696361645f,2.0.0*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Soldermask,Bot*
|
||||
G04 #@! TF.FilePolarity,Negative*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.2-1)-1) date 2021-10-09 10:13:21*
|
||||
G04 Created by KiCad (PCBNEW 7.0.1-0) date 2023-03-19 14:40:06*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.100000*%
|
||||
G04 Aperture macros list*
|
||||
%AMRoundRect*
|
||||
0 Rectangle with rounded corners*
|
||||
0 $1 Rounding radius*
|
||||
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
|
||||
0 Add a 4 corners polygon primitive as box body*
|
||||
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
|
||||
0 Add four circle primitives for the rounded corners*
|
||||
1,1,$1+$1,$2,$3*
|
||||
1,1,$1+$1,$4,$5*
|
||||
1,1,$1+$1,$6,$7*
|
||||
1,1,$1+$1,$8,$9*
|
||||
0 Add four rect primitives between the rounded corners*
|
||||
20,1,$1+$1,$2,$3,$4,$5,0*
|
||||
20,1,$1+$1,$4,$5,$6,$7,0*
|
||||
20,1,$1+$1,$6,$7,$8,$9,0*
|
||||
20,1,$1+$1,$8,$9,$2,$3,0*%
|
||||
G04 Aperture macros list end*
|
||||
%ADD10RoundRect,0.051000X-2.550000X2.550000X-2.550000X-2.550000X2.550000X-2.550000X2.550000X2.550000X0*%
|
||||
%ADD11C,17.902000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
G36*
|
||||
X69701000Y-70301000D02*
|
||||
G01*
|
||||
X64499000Y-70301000D01*
|
||||
X64499000Y-65099000D01*
|
||||
X69701000Y-65099000D01*
|
||||
X69701000Y-70301000D01*
|
||||
X69701000Y-70301000D01*
|
||||
G37*
|
||||
G36*
|
||||
X69710909Y-46292981D02*
|
||||
G01*
|
||||
X71339887Y-46967726D01*
|
||||
X71339888Y-46967727D01*
|
||||
X72805930Y-47947304D01*
|
||||
X74052696Y-49194070D01*
|
||||
X74707228Y-50173648D01*
|
||||
X75032274Y-50660113D01*
|
||||
X75707019Y-52289091D01*
|
||||
X76051000Y-54018402D01*
|
||||
X76051000Y-55781598D01*
|
||||
X75707019Y-57510909D01*
|
||||
X75032274Y-59139887D01*
|
||||
X75032273Y-59139888D01*
|
||||
X74052696Y-60605930D01*
|
||||
X72805930Y-61852696D01*
|
||||
X71826352Y-62507228D01*
|
||||
X71339887Y-62832274D01*
|
||||
X69710909Y-63507019D01*
|
||||
X67981598Y-63851000D01*
|
||||
X66218402Y-63851000D01*
|
||||
X64489091Y-63507019D01*
|
||||
X62860113Y-62832274D01*
|
||||
X62373648Y-62507228D01*
|
||||
X61394070Y-61852696D01*
|
||||
X60147304Y-60605930D01*
|
||||
X59167727Y-59139888D01*
|
||||
X59167726Y-59139887D01*
|
||||
X58492981Y-57510909D01*
|
||||
X58149000Y-55781598D01*
|
||||
X58149000Y-54018402D01*
|
||||
X58492981Y-52289091D01*
|
||||
X59167726Y-50660113D01*
|
||||
X59492772Y-50173648D01*
|
||||
X60147304Y-49194070D01*
|
||||
X61394070Y-47947304D01*
|
||||
X62860112Y-46967727D01*
|
||||
X62860113Y-46967726D01*
|
||||
X64489091Y-46292981D01*
|
||||
X66218402Y-45949000D01*
|
||||
X67981598Y-45949000D01*
|
||||
X69710909Y-46292981D01*
|
||||
X69710909Y-46292981D01*
|
||||
G37*
|
||||
G36*
|
||||
X69701000Y-44701000D02*
|
||||
G01*
|
||||
X64499000Y-44701000D01*
|
||||
X64499000Y-39499000D01*
|
||||
X69701000Y-39499000D01*
|
||||
X69701000Y-44701000D01*
|
||||
X69701000Y-44701000D01*
|
||||
G37*
|
||||
X67100000Y-42355000D03*
|
||||
X67100000Y-67955000D03*
|
||||
D11*
|
||||
X67100000Y-55155000D03*
|
||||
M02*
|
||||
|
|
|
|||
|
|
@ -1,18 +1,19 @@
|
|||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(5.1.2-1)-1*
|
||||
G04 #@! TF.CreationDate,2021-10-09T10:13:21+02:00*
|
||||
G04 #@! TF.ProjectId,parasite,70617261-7369-4746-952e-6b696361645f,1.2.0*
|
||||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,7.0.1-0*
|
||||
G04 #@! TF.CreationDate,2023-03-19T14:40:06+01:00*
|
||||
G04 #@! TF.ProjectId,parasite,70617261-7369-4746-952e-6b696361645f,2.0.0*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Paste,Bot*
|
||||
G04 #@! TF.FilePolarity,Positive*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.2-1)-1) date 2021-10-09 10:13:21*
|
||||
G04 Created by KiCad (PCBNEW 7.0.1-0) date 2023-03-19 14:40:06*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10R,5.100000X5.100000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X67100000Y-42100000D03*
|
||||
X67100000Y-67700000D03*
|
||||
X67100000Y-42355000D03*
|
||||
X67100000Y-67955000D03*
|
||||
M02*
|
||||
|
|
|
|||
|
|
@ -1,74 +0,0 @@
|
|||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(5.1.2-1)-1*
|
||||
G04 #@! TF.CreationDate,2021-10-09T10:13:21+02:00*
|
||||
G04 #@! TF.ProjectId,parasite,70617261-7369-4746-952e-6b696361645f,1.2.0*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Legend,Bot*
|
||||
G04 #@! TF.FilePolarity,Positive*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.2-1)-1) date 2021-10-09 10:13:21*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.120000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X58000000Y-99000000D02*
|
||||
X78000000Y-99000000D01*
|
||||
X64350000Y-70450000D02*
|
||||
X64350000Y-65650000D01*
|
||||
X69850000Y-70450000D02*
|
||||
X64350000Y-70450000D01*
|
||||
X69850000Y-65650000D02*
|
||||
X69850000Y-70450000D01*
|
||||
X69850000Y-39350000D02*
|
||||
X69850000Y-44150000D01*
|
||||
X64350000Y-39350000D02*
|
||||
X69850000Y-39350000D01*
|
||||
X64350000Y-44150000D02*
|
||||
X64350000Y-39350000D01*
|
||||
X57600000Y-65450000D02*
|
||||
X57600000Y-58750000D01*
|
||||
X57600000Y-44350000D02*
|
||||
X57600000Y-51050000D01*
|
||||
X77950000Y-58850000D02*
|
||||
X73150000Y-65650000D01*
|
||||
X77950000Y-50950000D02*
|
||||
X77950000Y-58850000D01*
|
||||
X73150000Y-44100000D02*
|
||||
X77950000Y-50950000D01*
|
||||
X57598536Y-51053615D02*
|
||||
G75*
|
||||
G03X57600000Y-58750000I9501464J-3846385D01*
|
||||
G01*
|
||||
X76750000Y-45200000D02*
|
||||
X76783333Y-45300000D01*
|
||||
X76816666Y-45333333D01*
|
||||
X76883333Y-45366666D01*
|
||||
X76983333Y-45366666D01*
|
||||
X77050000Y-45333333D01*
|
||||
X77083333Y-45300000D01*
|
||||
X77116666Y-45233333D01*
|
||||
X77116666Y-44966666D01*
|
||||
X76416666Y-44966666D01*
|
||||
X76416666Y-45200000D01*
|
||||
X76450000Y-45266666D01*
|
||||
X76483333Y-45300000D01*
|
||||
X76550000Y-45333333D01*
|
||||
X76616666Y-45333333D01*
|
||||
X76683333Y-45300000D01*
|
||||
X76716666Y-45266666D01*
|
||||
X76750000Y-45200000D01*
|
||||
X76750000Y-44966666D01*
|
||||
X76416666Y-45566666D02*
|
||||
X76416666Y-45966666D01*
|
||||
X77116666Y-45766666D02*
|
||||
X76416666Y-45766666D01*
|
||||
X77116666Y-46566666D02*
|
||||
X77116666Y-46166666D01*
|
||||
X77116666Y-46366666D02*
|
||||
X76416666Y-46366666D01*
|
||||
X76516666Y-46300000D01*
|
||||
X76583333Y-46233333D01*
|
||||
X76616666Y-46166666D01*
|
||||
M02*
|
||||
46
kicad/gerber/parasite-B_Silkscreen.gbr
Normal file
46
kicad/gerber/parasite-B_Silkscreen.gbr
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,7.0.1-0*
|
||||
G04 #@! TF.CreationDate,2023-03-19T14:40:06+01:00*
|
||||
G04 #@! TF.ProjectId,parasite,70617261-7369-4746-952e-6b696361645f,2.0.0*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Legend,Bot*
|
||||
G04 #@! TF.FilePolarity,Positive*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 7.0.1-0) date 2023-03-19 14:40:06*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.120000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X58000000Y-99000000D02*
|
||||
X78000000Y-99000000D01*
|
||||
X57600000Y-65705000D02*
|
||||
X57600000Y-59005000D01*
|
||||
X69850000Y-39605000D02*
|
||||
X69850000Y-44405000D01*
|
||||
X64350000Y-70705000D02*
|
||||
X64350000Y-65905000D01*
|
||||
X77950000Y-59105000D02*
|
||||
X73150000Y-65905000D01*
|
||||
X57600000Y-44605000D02*
|
||||
X57600000Y-51305000D01*
|
||||
X64350000Y-44405000D02*
|
||||
X64350000Y-39605000D01*
|
||||
X77950000Y-51205000D02*
|
||||
X77950000Y-59105000D01*
|
||||
X64350000Y-39605000D02*
|
||||
X69850000Y-39605000D01*
|
||||
X69850000Y-65905000D02*
|
||||
X69850000Y-70705000D01*
|
||||
X69850000Y-70705000D02*
|
||||
X64350000Y-70705000D01*
|
||||
X73150000Y-44355000D02*
|
||||
X77950000Y-51205000D01*
|
||||
X57598537Y-51308615D02*
|
||||
G75*
|
||||
G03*
|
||||
X57600001Y-59005000I9501463J-3846385D01*
|
||||
G01*
|
||||
M02*
|
||||
|
|
@ -1,45 +1,53 @@
|
|||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(5.1.2-1)-1*
|
||||
G04 #@! TF.CreationDate,2021-10-09T10:13:21+02:00*
|
||||
G04 #@! TF.ProjectId,parasite,70617261-7369-4746-952e-6b696361645f,1.2.0*
|
||||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,7.0.1-0*
|
||||
G04 #@! TF.CreationDate,2023-03-19T14:40:06+01:00*
|
||||
G04 #@! TF.ProjectId,parasite,70617261-7369-4746-952e-6b696361645f,2.0.0*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Profile,NP*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.2-1)-1) date 2021-10-09 10:13:21*
|
||||
G04 Created by KiCad (PCBNEW 7.0.1-0) date 2023-03-19 14:40:06*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 #@! TA.AperFunction,Profile*
|
||||
%ADD10C,0.050000*%
|
||||
G04 #@! TD*
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X79000000Y-143000000D02*
|
||||
X79000000Y-30000000D01*
|
||||
X57000000Y-30000000D02*
|
||||
X57000000Y-143000000D01*
|
||||
X60000000Y-27000000D02*
|
||||
X76000000Y-27000000D01*
|
||||
X68999999Y-152999999D02*
|
||||
X79000000Y-143000000D01*
|
||||
X67000002Y-152999998D02*
|
||||
G75*
|
||||
G03*
|
||||
X68999998Y-152999998I999998J999999D01*
|
||||
G01*
|
||||
X67000001Y-152999999D02*
|
||||
X57000000Y-143000000D01*
|
||||
X68999999Y-152999999D02*
|
||||
X79000000Y-143000000D01*
|
||||
X57000000Y-30000000D02*
|
||||
X57000000Y-143000000D01*
|
||||
X79000000Y-143000000D02*
|
||||
X79000000Y-30000000D01*
|
||||
X76414214Y-68000000D02*
|
||||
G75*
|
||||
G02X67000001Y-152999999I-999999J999999D01*
|
||||
G03*
|
||||
X76414214Y-68000000I-1414214J0D01*
|
||||
G01*
|
||||
X60000000Y-27000000D02*
|
||||
G75*
|
||||
G03*
|
||||
X57000000Y-30000000I0J-3000000D01*
|
||||
G01*
|
||||
X62414214Y-68000000D02*
|
||||
G75*
|
||||
G03X62414214Y-68000000I-1414214J0D01*
|
||||
G03*
|
||||
X62414214Y-68000000I-1414214J0D01*
|
||||
G01*
|
||||
X76414214Y-68000000D02*
|
||||
X79000000Y-30000000D02*
|
||||
G75*
|
||||
G03X76414214Y-68000000I-1414214J0D01*
|
||||
G01*
|
||||
X57000000Y-30000000D02*
|
||||
G75*
|
||||
G02X60000000Y-27000000I3000000J0D01*
|
||||
G01*
|
||||
X76000000Y-27000000D02*
|
||||
G75*
|
||||
G02X79000000Y-30000000I0J-3000000D01*
|
||||
G03*
|
||||
X76000000Y-27000000I-3000000J0D01*
|
||||
G01*
|
||||
M02*
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
6406
kicad/gerber/parasite-F_Silkscreen.gbr
Normal file
6406
kicad/gerber/parasite-F_Silkscreen.gbr
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -1,62 +1,67 @@
|
|||
M48
|
||||
; DRILL file {KiCad (5.1.2-1)-1} date 2021 October 09, Saturday 10:12:47
|
||||
; FORMAT={3:3/ absolute / metric / suppress leading zeros}
|
||||
; #@! TF.CreationDate,2021-10-09T10:12:47+02:00
|
||||
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(5.1.2-1)-1
|
||||
; DRILL file {KiCad 7.0.1-0} date 2023 March 19, Sunday 14:40:27
|
||||
; FORMAT={-:-/ absolute / metric / decimal}
|
||||
; #@! TF.CreationDate,2023-03-19T14:40:27+01:00
|
||||
; #@! TF.GenerationSoftware,Kicad,Pcbnew,7.0.1-0
|
||||
; #@! TF.FileFunction,MixedPlating,1,2
|
||||
FMAT,2
|
||||
METRIC,TZ
|
||||
T1C0.400
|
||||
METRIC
|
||||
; #@! TA.AperFunction,Plated,PTH,ViaDrill
|
||||
T1C0.300
|
||||
%
|
||||
G90
|
||||
G05
|
||||
T1
|
||||
X58400Y-50400
|
||||
X59200Y-42000
|
||||
X59200Y-43100
|
||||
X59200Y-44200
|
||||
X59600Y-35400
|
||||
X59600Y-36300
|
||||
X59600Y-37200
|
||||
X59700Y-33500
|
||||
X60900Y-45600
|
||||
X62100Y-35600
|
||||
X62925Y-31530
|
||||
X63000Y-33800
|
||||
X63500Y-38200
|
||||
X63500Y-49600
|
||||
X63500Y-50500
|
||||
X63500Y-51400
|
||||
X63600Y-41600
|
||||
X63600Y-42700
|
||||
X63800Y-64300
|
||||
X64100Y-55238
|
||||
X64700Y-38200
|
||||
X65800Y-38200
|
||||
X65800Y-61100
|
||||
X65863Y-55238
|
||||
X67100Y-38200
|
||||
X67100Y-67700
|
||||
X67199Y-55038
|
||||
X67800Y-67000
|
||||
X68550Y-66250
|
||||
X68700Y-60700
|
||||
X69500Y-34400
|
||||
X69500Y-34400
|
||||
X69900Y-37400
|
||||
X69900Y-38400
|
||||
X70800Y-36300
|
||||
X71300Y-52400
|
||||
X71600Y-37700
|
||||
X71800Y-34700
|
||||
X72200Y-52400
|
||||
X73119Y-42600
|
||||
X74494Y-47510
|
||||
X74700Y-45700
|
||||
X74800Y-53800
|
||||
X74800Y-54700
|
||||
X75100Y-31800
|
||||
X75300Y-43200
|
||||
X75900Y-40300
|
||||
X76100Y-38200
|
||||
X58.078Y-41.312
|
||||
X58.078Y-42.201
|
||||
X58.078Y-43.09
|
||||
X58.078Y-43.979
|
||||
X59.602Y-48.297
|
||||
X59.856Y-64.172
|
||||
X59.983Y-36.613
|
||||
X60.237Y-47.535
|
||||
X60.618Y-64.172
|
||||
X60.999Y-36.613
|
||||
X60.999Y-46.9
|
||||
X61.38Y-64.172
|
||||
X62.142Y-64.172
|
||||
X62.269Y-36.359
|
||||
X62.269Y-51.472
|
||||
X62.523Y-34.454
|
||||
X64.682Y-32.168
|
||||
X65.063Y-45.63
|
||||
X65.698Y-32.168
|
||||
X66.714Y-32.168
|
||||
X67.603Y-44.995
|
||||
X67.603Y-45.63
|
||||
X67.857Y-32.168
|
||||
X68.873Y-32.168
|
||||
X69.254Y-37.375
|
||||
X69.254Y-38.137
|
||||
X69.254Y-38.899
|
||||
X69.762Y-32.168
|
||||
X70.143Y-45.63
|
||||
X70.148Y-44.995
|
||||
X70.397Y-48.678
|
||||
X70.397Y-49.44
|
||||
X70.397Y-50.202
|
||||
X70.397Y-50.964
|
||||
X70.397Y-51.726
|
||||
X73.468Y-36.623
|
||||
X73.468Y-37.893
|
||||
X73.468Y-42.973
|
||||
X74.969Y-63.918
|
||||
X75.096Y-33.184
|
||||
X75.223Y-34.708
|
||||
X75.223Y-36.74
|
||||
X75.604Y-49.059
|
||||
X75.731Y-63.918
|
||||
X75.858Y-50.329
|
||||
X76.366Y-44.233
|
||||
X76.493Y-48.678
|
||||
X76.493Y-63.918
|
||||
X76.62Y-54.393
|
||||
X76.62Y-58.965
|
||||
X77.255Y-63.918
|
||||
T0
|
||||
M30
|
||||
|
|
|
|||
523
kicad/lib/b-parasite/circuit_drawing.kicad_mod
Normal file
523
kicad/lib/b-parasite/circuit_drawing.kicad_mod
Normal file
|
|
@ -0,0 +1,523 @@
|
|||
(footprint "LOGO" (version 20210606) (generator bitmap2component) (layer "F.Cu")
|
||||
(at 0 0)
|
||||
(attr board_only exclude_from_pos_files exclude_from_bom)
|
||||
(fp_text reference "G***" (at 0 0) (layer F.SilkS)
|
||||
(effects (font (thickness 0.3)))
|
||||
)
|
||||
(fp_text value "LOGO" (at 0.75 0) (layer F.SilkS) hide
|
||||
(effects (font (thickness 0.3)))
|
||||
)
|
||||
(fp_poly (pts (xy -1.344936 10.301429) (xy -1.127149 10.302122) (xy -0.902519 10.303472) (xy -0.673995 10.305476) (xy -0.444525 10.308126) (xy -0.217059 10.311420) (xy 0.005455 10.315350) (xy 0.220068 10.319913)
|
||||
(xy 0.423831 10.325104) (xy 0.613796 10.330916) (xy 0.617739 10.331049) (xy 0.924560 10.341309) (xy 1.196968 10.350191) (xy 1.436864 10.357727) (xy 1.646145 10.363952) (xy 1.826710 10.368898)
|
||||
(xy 1.980459 10.372600) (xy 2.109288 10.375089) (xy 2.215098 10.376400) (xy 2.299786 10.376567) (xy 2.365252 10.375622) (xy 2.413393 10.373599) (xy 2.446109 10.370531) (xy 2.465297 10.366453)
|
||||
(xy 2.470958 10.363651) (xy 2.514999 10.342288) (xy 2.571759 10.329734) (xy 2.626031 10.327923) (xy 2.662605 10.338790) (xy 2.663108 10.339197) (xy 2.667196 10.346649) (xy 2.670842 10.363107)
|
||||
(xy 2.674070 10.390475) (xy 2.676904 10.430655) (xy 2.679368 10.485552) (xy 2.681487 10.557067) (xy 2.683284 10.647104) (xy 2.684783 10.757566) (xy 2.686010 10.890357) (xy 2.686987 11.047379)
|
||||
(xy 2.687739 11.230535) (xy 2.688290 11.441729) (xy 2.688664 11.682863) (xy 2.688885 11.955842) (xy 2.688978 12.262567) (xy 2.688984 12.382045) (xy 2.689019 12.699978) (xy 2.689061 12.983534)
|
||||
(xy 2.689013 13.234673) (xy 2.688779 13.455356) (xy 2.688262 13.647543) (xy 2.687367 13.813194) (xy 2.685997 13.954271) (xy 2.684056 14.072733) (xy 2.681448 14.170540) (xy 2.678076 14.249654)
|
||||
(xy 2.673845 14.312034) (xy 2.668657 14.359642) (xy 2.662417 14.394436) (xy 2.655029 14.418379) (xy 2.646395 14.433430) (xy 2.636421 14.441549) (xy 2.625010 14.444698) (xy 2.612065 14.444836)
|
||||
(xy 2.597490 14.443924) (xy 2.587768 14.443689) (xy 2.530578 14.444387) (xy 2.489127 14.445136) (xy 2.465602 14.445187) (xy 2.407950 14.445092) (xy 2.318383 14.444858) (xy 2.199111 14.444493)
|
||||
(xy 2.052346 14.444005) (xy 1.880297 14.443403) (xy 1.685176 14.442694) (xy 1.469194 14.441887) (xy 1.234562 14.440989) (xy 0.983490 14.440009) (xy 0.718189 14.438954) (xy 0.440871 14.437833)
|
||||
(xy 0.153746 14.436654) (xy 0.127181 14.436544) (xy -0.240200 14.435115) (xy -0.572991 14.434037) (xy -0.872938 14.433333) (xy -1.141785 14.433026) (xy -1.381280 14.433139) (xy -1.593167 14.433694)
|
||||
(xy -1.779192 14.434713) (xy -1.941102 14.436221) (xy -2.080641 14.438239) (xy -2.199556 14.440790) (xy -2.299592 14.443897) (xy -2.382496 14.447583) (xy -2.450012 14.451870) (xy -2.503887 14.456781)
|
||||
(xy -2.545866 14.462339) (xy -2.577696 14.468567) (xy -2.590325 14.471932) (xy -2.634041 14.468544) (xy -2.652062 14.453995) (xy -2.662235 14.432720) (xy -2.667891 14.395257) (xy -2.669292 14.335893)
|
||||
(xy -2.666700 14.248914) (xy -2.664018 14.193827) (xy -2.646920 13.853077) (xy -2.632789 13.533487) (xy -2.621414 13.226757) (xy -2.620059 13.180398) (xy -2.459122 13.180398) (xy -2.458995 13.359012)
|
||||
(xy -2.457712 13.532736) (xy -2.456950 13.592849) (xy -2.447978 14.222251) (xy -0.447272 14.233926) (xy -0.176178 14.235627) (xy 0.087734 14.237512) (xy 0.341826 14.239552) (xy 0.583461 14.241714)
|
||||
(xy 0.810003 14.243967) (xy 1.018815 14.246282) (xy 1.207259 14.248626) (xy 1.372700 14.250969) (xy 1.512500 14.253279) (xy 1.624022 14.255526) (xy 1.704629 14.257679) (xy 1.751686 14.259706)
|
||||
(xy 1.753290 14.259817) (xy 1.851538 14.265609) (xy 1.970981 14.270852) (xy 2.096479 14.274965) (xy 2.212053 14.277359) (xy 2.470958 14.280686) (xy 2.470864 12.595529) (xy 2.470726 12.346816)
|
||||
(xy 2.470350 12.105398) (xy 2.469756 11.874162) (xy 2.468961 11.655995) (xy 2.467984 11.453784) (xy 2.466842 11.270416) (xy 2.465554 11.108778) (xy 2.464138 10.971756) (xy 2.462612 10.862237)
|
||||
(xy 2.460993 10.783108) (xy 2.459301 10.737257) (xy 2.459197 10.735623) (xy 2.447624 10.560873) (xy 2.300314 10.544850) (xy 2.263785 10.542841) (xy 2.193273 10.540906) (xy 2.091131 10.539058)
|
||||
(xy 1.959714 10.537314) (xy 1.801376 10.535688) (xy 1.618471 10.534198) (xy 1.413353 10.532857) (xy 1.188376 10.531682) (xy 0.945894 10.530687) (xy 0.688262 10.529889) (xy 0.417833 10.529303)
|
||||
(xy 0.136962 10.528943) (xy -0.140795 10.528827) (xy -2.434593 10.528827) (xy -2.437347 10.574249) (xy -2.437844 10.601597) (xy -2.438145 10.661308) (xy -2.438254 10.749403) (xy -2.438176 10.861908)
|
||||
(xy -2.437915 10.994846) (xy -2.437476 11.144242) (xy -2.436864 11.306120) (xy -2.436403 11.410014) (xy -2.435998 11.594338) (xy -2.436418 11.782783) (xy -2.437593 11.968867) (xy -2.439452 12.146107)
|
||||
(xy -2.441923 12.308021) (xy -2.444934 12.448125) (xy -2.448414 12.559936) (xy -2.449314 12.581902) (xy -2.453189 12.697644) (xy -2.456157 12.841470) (xy -2.458155 13.005135) (xy -2.459122 13.180398)
|
||||
(xy -2.620059 13.180398) (xy -2.612582 12.924587) (xy -2.606083 12.618678) (xy -2.601703 12.300731) (xy -2.599233 11.962446) (xy -2.598463 11.624570) (xy -2.598684 11.367817) (xy -2.599498 11.142636)
|
||||
(xy -2.600893 10.949706) (xy -2.602860 10.789704) (xy -2.605386 10.663310) (xy -2.608463 10.571200) (xy -2.612078 10.514055) (xy -2.616221 10.492551) (xy -2.616309 10.492489) (xy -2.634220 10.463971)
|
||||
(xy -2.625428 10.425613) (xy -2.593072 10.388308) (xy -2.584514 10.382233) (xy -2.541608 10.351697) (xy -2.510541 10.325637) (xy -2.487035 10.320180) (xy -2.430147 10.315427) (xy -2.342826 10.311372)
|
||||
(xy -2.228021 10.308011) (xy -2.088680 10.305338) (xy -1.927753 10.303349) (xy -1.748187 10.302038) (xy -1.552932 10.301399) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -1.455563 7.524156) (xy -1.400578 7.530357) (xy -1.367034 7.543565) (xy -1.350017 7.564994) (xy -1.344612 7.595856) (xy -1.344492 7.603229) (xy -1.346074 7.620031) (xy -1.354746 7.631761)
|
||||
(xy -1.376394 7.639716) (xy -1.416907 7.645189) (xy -1.482173 7.649476) (xy -1.573949 7.653693) (xy -1.682102 7.659787) (xy -1.757210 7.667512) (xy -1.802547 7.677326) (xy -1.820473 7.688131)
|
||||
(xy -1.826130 7.714878) (xy -1.829685 7.772110) (xy -1.830987 7.854028) (xy -1.829888 7.954833) (xy -1.828608 8.003574) (xy -1.826323 8.116160) (xy -1.826755 8.210007) (xy -1.829759 8.279818)
|
||||
(xy -1.835192 8.320299) (xy -1.837350 8.326071) (xy -1.869291 8.353447) (xy -1.908997 8.352511) (xy -1.942458 8.324041) (xy -1.944708 8.320110) (xy -1.953136 8.284035) (xy -1.958593 8.214581)
|
||||
(xy -1.960940 8.114596) (xy -1.960292 8.001747) (xy -1.959766 7.903060) (xy -1.961319 7.817572) (xy -1.964678 7.751852) (xy -1.969570 7.712466) (xy -1.972634 7.704568) (xy -2.002380 7.697089)
|
||||
(xy -2.057021 7.701304) (xy -2.127724 7.715388) (xy -2.205656 7.737514) (xy -2.281983 7.765857) (xy -2.293612 7.770916) (xy -2.354502 7.795982) (xy -2.392683 7.805186) (xy -2.417290 7.800171)
|
||||
(xy -2.425336 7.794587) (xy -2.448137 7.756604) (xy -2.450342 7.709598) (xy -2.431237 7.672166) (xy -2.430079 7.671181) (xy -2.382952 7.646088) (xy -2.305379 7.620783) (xy -2.203225 7.596341)
|
||||
(xy -2.082360 7.573839) (xy -1.948650 7.554355) (xy -1.807964 7.538965) (xy -1.666168 7.528746) (xy -1.649507 7.527925) (xy -1.536901 7.523750) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 7.936598 6.667652) (xy 7.956077 6.728764) (xy 7.957940 6.742475) (xy 7.967024 6.822389) (xy 8.066953 6.818134) (xy 8.136406 6.817507) (xy 8.201227 6.820676) (xy 8.227058 6.823711)
|
||||
(xy 8.268339 6.834978) (xy 8.282290 6.855310) (xy 8.281564 6.873388) (xy 8.273752 6.894694) (xy 8.252557 6.910873) (xy 8.210656 6.925386) (xy 8.140725 6.941691) (xy 8.133965 6.943121)
|
||||
(xy 8.065830 6.958635) (xy 8.012061 6.973050) (xy 7.982143 6.983762) (xy 7.979530 6.985527) (xy 7.974057 7.009160) (xy 7.971555 7.059748) (xy 7.971681 7.128060) (xy 7.974096 7.204867)
|
||||
(xy 7.978459 7.280937) (xy 7.984429 7.347039) (xy 7.991666 7.393943) (xy 7.995032 7.405775) (xy 8.024851 7.441539) (xy 8.074580 7.447906) (xy 8.112659 7.437505) (xy 8.137704 7.414663)
|
||||
(xy 8.165765 7.370443) (xy 8.177090 7.346661) (xy 8.210988 7.291213) (xy 8.246145 7.268104) (xy 8.276219 7.274142) (xy 8.294870 7.306132) (xy 8.295757 7.360880) (xy 8.285766 7.401404)
|
||||
(xy 8.244001 7.477996) (xy 8.174089 7.535575) (xy 8.105031 7.566696) (xy 8.032764 7.587877) (xy 7.980136 7.591533) (xy 7.943931 7.582403) (xy 7.909142 7.551835) (xy 7.882789 7.490571)
|
||||
(xy 7.864426 7.397010) (xy 7.853606 7.269553) (xy 7.852971 7.255987) (xy 7.848235 7.172266) (xy 7.842278 7.101235) (xy 7.835920 7.051210) (xy 7.830860 7.031495) (xy 7.812738 7.021235)
|
||||
(xy 7.774553 7.024781) (xy 7.723554 7.038194) (xy 7.668114 7.053465) (xy 7.635135 7.056809) (xy 7.612513 7.047516) (xy 7.593808 7.030575) (xy 7.567470 6.998253) (xy 7.558226 6.976824)
|
||||
(xy 7.574059 6.942016) (xy 7.613204 6.909906) (xy 7.663128 6.889159) (xy 7.689950 6.885732) (xy 7.760889 6.882632) (xy 7.803016 6.869538) (xy 7.823716 6.839652) (xy 7.830373 6.786176)
|
||||
(xy 7.830758 6.756109) (xy 7.833315 6.691054) (xy 7.842301 6.654167) (xy 7.859690 6.637552) (xy 7.860481 6.637239) (xy 7.903831 6.636170) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -0.069152 6.999999) (xy 0.009217 7.030947) (xy 0.114030 7.079954) (xy 0.166686 7.106142) (xy 0.249144 7.146358) (xy 0.322462 7.179662) (xy 0.379294 7.202885) (xy 0.412293 7.212859)
|
||||
(xy 0.414564 7.213018) (xy 0.450892 7.228918) (xy 0.470929 7.268917) (xy 0.472389 7.285210) (xy 0.456959 7.299903) (xy 0.424791 7.311869) (xy 0.381014 7.330692) (xy 0.328534 7.363493)
|
||||
(xy 0.311236 7.376552) (xy 0.257430 7.413017) (xy 0.187532 7.451982) (xy 0.136266 7.476295) (xy 0.070015 7.505542) (xy 0.009694 7.533315) (xy -0.024184 7.549847) (xy -0.067200 7.570083)
|
||||
(xy -0.094721 7.573665) (xy -0.122882 7.561829) (xy -0.129653 7.557930) (xy -0.145733 7.541701) (xy -0.152891 7.511614) (xy -0.152447 7.458808) (xy -0.149876 7.422216) (xy -0.140376 7.303862)
|
||||
(xy -0.937749 7.302430) (xy -1.143215 7.301750) (xy -1.370231 7.300457) (xy -1.608941 7.298644) (xy -1.849491 7.296399) (xy -2.082024 7.293815) (xy -2.296685 7.290982) (xy -2.461874 7.288375)
|
||||
(xy -2.635579 7.285675) (xy -2.810401 7.283543) (xy -2.980110 7.282012) (xy -3.138475 7.281118) (xy -3.279264 7.280897) (xy -3.396247 7.281383) (xy -3.483192 7.282610) (xy -3.483870 7.282626)
|
||||
(xy -3.779113 7.289501) (xy -3.779361 7.364815) (xy -3.784884 7.449792) (xy -3.800491 7.502622) (xy -3.825732 7.521836) (xy -3.827378 7.521888) (xy -3.858205 7.513966) (xy -3.906208 7.493943)
|
||||
(xy -3.929730 7.482382) (xy -3.980146 7.457863) (xy -4.052310 7.424668) (xy -4.099279 7.403791) (xy -3.888126 7.403791) (xy -3.879042 7.412875) (xy -3.869957 7.403791) (xy -3.879042 7.394706)
|
||||
(xy -3.888126 7.403791) (xy -4.099279 7.403791) (xy -4.134453 7.388157) (xy -4.179099 7.368827) (xy -4.256720 7.334412) (xy -4.325749 7.301703) (xy -4.376648 7.275325) (xy -4.394971 7.264141)
|
||||
(xy -4.426782 7.231114) (xy -4.423595 7.203777) (xy -4.386503 7.183567) (xy -4.325497 7.172702) (xy -4.246905 7.155521) (xy -4.144956 7.116394) (xy -4.048217 7.070346) (xy -3.967820 7.030204)
|
||||
(xy -3.912761 7.004934) (xy -3.876191 6.992550) (xy -3.851258 6.991065) (xy -3.831111 6.998492) (xy -3.821300 7.004526) (xy -3.793192 7.031474) (xy -3.780989 7.071704) (xy -3.779113 7.112733)
|
||||
(xy -3.779113 7.193298) (xy -3.438448 7.198616) (xy -3.365952 7.199387) (xy -3.260696 7.199986) (xy -3.126258 7.200413) (xy -2.966214 7.200668) (xy -2.784142 7.200753) (xy -2.583619 7.200667)
|
||||
(xy -2.368222 7.200410) (xy -2.141529 7.199984) (xy -1.907117 7.199388) (xy -1.668563 7.198622) (xy -1.612482 7.198419) (xy -0.127182 7.192903) (xy -0.127182 7.158512) (xy -0.054507 7.158512)
|
||||
(xy -0.047859 7.173467) (xy -0.042394 7.170624) (xy -0.040220 7.149062) (xy -0.042394 7.146399) (xy -0.053196 7.148893) (xy -0.054507 7.158512) (xy -0.127182 7.158512) (xy -0.127182 7.131188)
|
||||
(xy -0.136613 7.077882) (xy -0.157242 7.052651) (xy -0.178029 7.024938) (xy -0.176102 7.006642) (xy -0.158760 6.988732) (xy -0.124127 6.986222) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -4.620270 -4.718515) (xy -4.604591 -4.704592) (xy -4.561799 -4.664391) (xy -4.573133 -3.049864) (xy -4.584468 -1.435336) (xy -4.545806 -1.435336) (xy -4.504627 -1.420171) (xy -4.481366 -1.383223)
|
||||
(xy -4.482860 -1.337316) (xy -4.487697 -1.326324) (xy -4.517670 -1.297214) (xy -4.542843 -1.289986) (xy -4.554423 -1.288533) (xy -4.563195 -1.281215) (xy -4.569556 -1.263595) (xy -4.573905 -1.231235)
|
||||
(xy -4.576640 -1.179698) (xy -4.578159 -1.104545) (xy -4.578860 -1.001340) (xy -4.579113 -0.885730) (xy -4.579260 -0.825805) (xy -4.579576 -0.731587) (xy -4.580052 -0.605121) (xy -4.580679 -0.448451)
|
||||
(xy -4.581447 -0.263623) (xy -4.582348 -0.052680) (xy -4.583372 0.182334) (xy -4.584510 0.439372) (xy -4.585754 0.716392) (xy -4.587093 1.011347) (xy -4.588520 1.322195) (xy -4.590024 1.646890)
|
||||
(xy -4.591597 1.983388) (xy -4.593230 2.329644) (xy -4.594913 2.683614) (xy -4.596368 2.987132) (xy -4.598472 3.416625) (xy -4.600493 3.811128) (xy -4.602445 4.171991) (xy -4.604345 4.500561)
|
||||
(xy -4.606207 4.798187) (xy -4.608048 5.066218) (xy -4.609882 5.306001) (xy -4.611727 5.518885) (xy -4.613596 5.706218) (xy -4.615507 5.869348) (xy -4.617473 6.009625) (xy -4.619512 6.128395)
|
||||
(xy -4.621638 6.227008) (xy -4.623868 6.306813) (xy -4.626216 6.369156) (xy -4.628699 6.415387) (xy -4.631331 6.446854) (xy -4.634130 6.464905) (xy -4.636675 6.470724) (xy -4.620566 6.471880)
|
||||
(xy -4.569445 6.473014) (xy -4.484639 6.474124) (xy -4.367475 6.475205) (xy -4.219279 6.476254) (xy -4.041378 6.477269) (xy -3.835097 6.478245) (xy -3.601763 6.479178) (xy -3.342703 6.480067)
|
||||
(xy -3.059242 6.480907) (xy -2.752708 6.481695) (xy -2.424427 6.482428) (xy -2.075725 6.483103) (xy -1.707928 6.483715) (xy -1.322364 6.484262) (xy -0.920357 6.484740) (xy -0.503235 6.485146)
|
||||
(xy -0.072325 6.485476) (xy 0.371048 6.485728) (xy 0.825558 6.485897) (xy 1.289877 6.485981) (xy 1.386704 6.485988) (xy 1.943590 6.486019) (xy 2.465283 6.486066) (xy 2.952925 6.486134)
|
||||
(xy 3.407661 6.486228) (xy 3.830634 6.486356) (xy 4.222989 6.486523) (xy 4.585868 6.486735) (xy 4.920416 6.486998) (xy 5.227777 6.487318) (xy 5.509093 6.487702) (xy 5.765509 6.488156)
|
||||
(xy 5.998170 6.488685) (xy 6.208217 6.489296) (xy 6.396795 6.489994) (xy 6.565049 6.490786) (xy 6.714121 6.491678) (xy 6.845155 6.492676) (xy 6.959296 6.493786) (xy 7.057686 6.495014)
|
||||
(xy 7.141471 6.496367) (xy 7.211792 6.497849) (xy 7.269795 6.499468) (xy 7.316622 6.501229) (xy 7.353418 6.503138) (xy 7.381327 6.505202) (xy 7.401492 6.507427) (xy 7.415056 6.509818)
|
||||
(xy 7.423165 6.512382) (xy 7.426960 6.515125) (xy 7.427587 6.518053) (xy 7.427585 6.518061) (xy 7.425813 6.520991) (xy 7.420896 6.523739) (xy 7.411689 6.526311) (xy 7.397045 6.528713)
|
||||
(xy 7.375817 6.530954) (xy 7.346860 6.533039) (xy 7.309026 6.534976) (xy 7.261170 6.536772) (xy 7.202145 6.538433) (xy 7.130805 6.539967) (xy 7.046004 6.541379) (xy 6.946594 6.542678)
|
||||
(xy 6.831430 6.543870) (xy 6.699366 6.544962) (xy 6.549254 6.545961) (xy 6.379950 6.546873) (xy 6.190305 6.547706) (xy 5.979174 6.548466) (xy 5.745411 6.549161) (xy 5.487869 6.549798)
|
||||
(xy 5.205401 6.550382) (xy 4.896862 6.550921) (xy 4.561105 6.551423) (xy 4.196984 6.551893) (xy 3.803352 6.552339) (xy 3.379063 6.552767) (xy 2.922971 6.553185) (xy 2.433929 6.553600)
|
||||
(xy 1.910790 6.554017) (xy 1.378146 6.554426) (xy -4.665171 6.558995) (xy -4.694366 6.514437) (xy -4.697162 6.508158) (xy -4.699754 6.497371) (xy -4.702144 6.480886) (xy -4.704333 6.457512)
|
||||
(xy -4.706323 6.426057) (xy -4.708115 6.385331) (xy -4.709711 6.334143) (xy -4.711112 6.271301) (xy -4.712319 6.195615) (xy -4.713333 6.105894) (xy -4.714157 6.000946) (xy -4.714791 5.879581)
|
||||
(xy -4.715236 5.740608) (xy -4.715495 5.582835) (xy -4.715569 5.405072) (xy -4.715458 5.206128) (xy -4.715165 4.984811) (xy -4.714691 4.739931) (xy -4.714036 4.470297) (xy -4.713203 4.174718)
|
||||
(xy -4.712193 3.852002) (xy -4.711008 3.500960) (xy -4.709647 3.120399) (xy -4.708114 2.709128) (xy -4.706410 2.265958) (xy -4.704535 1.789696) (xy -4.702491 1.279152) (xy -4.700903 0.886620)
|
||||
(xy -4.699034 0.438303) (xy -4.697108 -0.000694) (xy -4.695132 -0.428973) (xy -4.693117 -0.845139) (xy -4.691072 -1.247797) (xy -4.689007 -1.635552) (xy -4.686931 -2.007007) (xy -4.684853 -2.360767)
|
||||
(xy -4.682784 -2.695437) (xy -4.680733 -3.009620) (xy -4.678708 -3.301922) (xy -4.676720 -3.570947) (xy -4.674778 -3.815299) (xy -4.672892 -4.033583) (xy -4.671070 -4.224402) (xy -4.669323 -4.386362)
|
||||
(xy -4.667660 -4.518067) (xy -4.666091 -4.618121) (xy -4.664624 -4.685129) (xy -4.663270 -4.717695) (xy -4.662814 -4.720716) (xy -4.646133 -4.732346) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.486015 6.024894) (xy 0.512064 6.059193) (xy 0.524185 6.110796) (xy 0.521409 6.164191) (xy 0.502766 6.203865) (xy 0.497494 6.208467) (xy 0.467158 6.227308) (xy 0.454220 6.231902)
|
||||
(xy 0.432150 6.222362) (xy 0.410946 6.208467) (xy 0.388379 6.177171) (xy 0.384093 6.124292) (xy 0.384763 6.114921) (xy 0.399570 6.054702) (xy 0.428811 6.020470) (xy 0.467739 6.016447)
|
||||
)(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 3.296852 -4.383197) (xy 3.367139 -4.348281) (xy 3.423567 -4.301186) (xy 3.437047 -4.283379) (xy 3.441554 -4.258827) (xy 3.445542 -4.203928) (xy 3.448772 -4.124674) (xy 3.451007 -4.027056)
|
||||
(xy 3.452009 -3.917062) (xy 3.452031 -3.906295) (xy 3.468998 -3.067169) (xy 3.517019 -2.219024) (xy 3.595391 -1.370504) (xy 3.703412 -0.530254) (xy 3.751588 -0.218026) (xy 3.873054 0.502934)
|
||||
(xy 3.999963 1.194365) (xy 4.133635 1.862841) (xy 4.275390 2.514938) (xy 4.426549 3.157228) (xy 4.442949 3.224079) (xy 4.502325 3.462588) (xy 4.556385 3.673404) (xy 4.607391 3.864370)
|
||||
(xy 4.657611 4.043329) (xy 4.709307 4.218125) (xy 4.764745 4.396602) (xy 4.826189 4.586604) (xy 4.895905 4.795974) (xy 4.902224 4.814735) (xy 4.964508 4.998364) (xy 5.017646 5.152132)
|
||||
(xy 5.063467 5.280818) (xy 5.103800 5.389203) (xy 5.140475 5.482065) (xy 5.175321 5.564183) (xy 5.210169 5.640338) (xy 5.246847 5.715308) (xy 5.247304 5.716215) (xy 5.316631 5.854001)
|
||||
(xy 5.355858 5.707441) (xy 5.398652 5.562639) (xy 5.451966 5.410639) (xy 5.518147 5.245577) (xy 5.599541 5.061593) (xy 5.694929 4.860157) (xy 5.804169 4.638746) (xy 5.908474 4.435457)
|
||||
(xy 6.011838 4.243388) (xy 6.118254 4.055637) (xy 6.231715 3.865303) (xy 6.356214 3.665484) (xy 6.495743 3.449276) (xy 6.619921 3.261302) (xy 6.696459 3.146896) (xy 6.767830 3.041530)
|
||||
(xy 6.836989 2.941134) (xy 6.906888 2.841637) (xy 6.980479 2.738969) (xy 7.060718 2.629059) (xy 7.150555 2.507837) (xy 7.252945 2.371232) (xy 7.370839 2.215174) (xy 7.507193 2.035592)
|
||||
(xy 7.549188 1.980400) (xy 7.653376 1.843017) (xy 7.758939 1.702902) (xy 7.861836 1.565484) (xy 7.958025 1.436194) (xy 8.043462 1.320459) (xy 8.114108 1.223711) (xy 8.157844 1.162804)
|
||||
(xy 8.265648 1.013160) (xy 8.356872 0.892322) (xy 8.433871 0.798082) (xy 8.499001 0.728232) (xy 8.554618 0.680565) (xy 8.603077 0.652872) (xy 8.646735 0.642946) (xy 8.687945 0.648579)
|
||||
(xy 8.701302 0.653431) (xy 8.749043 0.688898) (xy 8.780780 0.741791) (xy 8.789102 0.798051) (xy 8.785823 0.813808) (xy 8.768663 0.839050) (xy 8.729886 0.882525) (xy 8.675060 0.938355)
|
||||
(xy 8.609753 1.000661) (xy 8.602622 1.007240) (xy 8.535121 1.071283) (xy 8.466287 1.140913) (xy 8.393809 1.218909) (xy 8.315380 1.308049) (xy 8.228688 1.411111) (xy 8.131424 1.530873)
|
||||
(xy 8.021278 1.670113) (xy 7.895942 1.831610) (xy 7.753105 2.018140) (xy 7.656702 2.144997) (xy 7.409783 2.473887) (xy 7.185535 2.779651) (xy 6.981773 3.065671) (xy 6.796310 3.335328)
|
||||
(xy 6.626962 3.592003) (xy 6.471543 3.839076) (xy 6.327867 4.079930) (xy 6.193749 4.317943) (xy 6.067003 4.556499) (xy 5.958919 4.771417) (xy 5.838028 5.026727) (xy 5.738102 5.257689)
|
||||
(xy 5.657633 5.468508) (xy 5.595111 5.663393) (xy 5.549030 5.846548) (xy 5.522980 5.987519) (xy 5.502847 6.091325) (xy 5.477546 6.161697) (xy 5.443397 6.201508) (xy 5.396720 6.213631)
|
||||
(xy 5.333835 6.200940) (xy 5.278040 6.178758) (xy 5.252008 6.165695) (xy 5.228878 6.149103) (xy 5.206713 6.125242) (xy 5.183578 6.090375) (xy 5.157535 6.040764) (xy 5.126650 5.972671)
|
||||
(xy 5.088987 5.882358) (xy 5.042608 5.766087) (xy 4.985579 5.620120) (xy 4.976204 5.595994) (xy 4.842102 5.235665) (xy 4.708188 4.846718) (xy 4.576828 4.436808) (xy 4.450387 4.013587)
|
||||
(xy 4.331232 3.584711) (xy 4.221727 3.157834) (xy 4.218143 3.143204) (xy 4.161146 2.908056) (xy 4.108388 2.685440) (xy 4.058878 2.470568) (xy 4.011625 2.258653) (xy 3.965636 2.044906)
|
||||
(xy 3.919922 1.824539) (xy 3.873490 1.592766) (xy 3.825350 1.344797) (xy 3.774510 1.075846) (xy 3.719979 0.781124) (xy 3.660766 0.455843) (xy 3.653905 0.417882) (xy 3.565758 -0.087061)
|
||||
(xy 3.489298 -0.562476) (xy 3.424008 -1.013061) (xy 3.369368 -1.443515) (xy 3.324862 -1.858536) (xy 3.289970 -2.262822) (xy 3.264175 -2.661072) (xy 3.246959 -3.057983) (xy 3.239716 -3.338520)
|
||||
(xy 3.236649 -3.480286) (xy 3.233090 -3.609695) (xy 3.229216 -3.722464) (xy 3.225205 -3.814311) (xy 3.221235 -3.880953) (xy 3.217483 -3.918107) (xy 3.215415 -3.924464) (xy 3.194264 -3.912121)
|
||||
(xy 3.178537 -3.896000) (xy 3.154600 -3.876486) (xy 3.105811 -3.843224) (xy 3.038833 -3.800559) (xy 2.960328 -3.752832) (xy 2.944188 -3.743272) (xy 2.840269 -3.680805) (xy 2.749479 -3.622923)
|
||||
(xy 2.666573 -3.565354) (xy 2.586303 -3.503824) (xy 2.503425 -3.434063) (xy 2.412691 -3.351797) (xy 2.308856 -3.252754) (xy 2.186674 -3.132662) (xy 2.151576 -3.097783) (xy 2.043300 -2.988755)
|
||||
(xy 1.924492 -2.866891) (xy 1.797611 -2.734882) (xy 1.665117 -2.595422) (xy 1.529471 -2.451203) (xy 1.393131 -2.304917) (xy 1.258558 -2.159258) (xy 1.128213 -2.016917) (xy 1.004554 -1.880588)
|
||||
(xy 0.890042 -1.752962) (xy 0.787136 -1.636733) (xy 0.698298 -1.534593) (xy 0.625986 -1.449234) (xy 0.572660 -1.383350) (xy 0.540781 -1.339632) (xy 0.533598 -1.326796) (xy 0.510434 -1.288980)
|
||||
(xy 0.485624 -1.271900) (xy 0.484144 -1.271817) (xy 0.462212 -1.257966) (xy 0.419933 -1.218110) (xy 0.359441 -1.154792) (xy 0.282868 -1.070559) (xy 0.192346 -0.967954) (xy 0.090009 -0.849523)
|
||||
(xy -0.022011 -0.717810) (xy -0.141581 -0.575360) (xy -0.266569 -0.424718) (xy -0.394841 -0.268428) (xy -0.524266 -0.109036) (xy -0.652711 0.050915) (xy -0.778042 0.208879) (xy -0.898128 0.362311)
|
||||
(xy -1.010835 0.508667) (xy -1.038528 0.545064) (xy -1.284986 0.876056) (xy -1.531525 1.219146) (xy -1.776608 1.571705) (xy -2.018703 1.931104) (xy -2.256272 2.294716) (xy -2.487782 2.659911)
|
||||
(xy -2.711696 3.024062) (xy -2.926481 3.384539) (xy -3.130599 3.738714) (xy -3.322518 4.083959) (xy -3.500700 4.417645) (xy -3.663612 4.737144) (xy -3.809717 5.039826) (xy -3.937481 5.323064)
|
||||
(xy -4.045369 5.584230) (xy -4.131845 5.820693) (xy -4.147646 5.868526) (xy -4.184068 5.977473) (xy -4.213861 6.055986) (xy -4.239763 6.108738) (xy -4.264512 6.140405) (xy -4.290846 6.155663)
|
||||
(xy -4.317909 6.159227) (xy -4.365543 6.144939) (xy -4.407835 6.110098) (xy -4.431627 6.066736) (xy -4.433191 6.053784) (xy -4.426427 6.014795) (xy -4.407480 5.948046) (xy -4.378368 5.859229)
|
||||
(xy -4.341108 5.754032) (xy -4.297719 5.638144) (xy -4.250219 5.517254) (xy -4.200624 5.397053) (xy -4.198520 5.392093) (xy -4.072181 5.107734) (xy -3.924630 4.798999) (xy -3.757883 4.469459)
|
||||
(xy -3.573954 4.122681) (xy -3.374861 3.762235) (xy -3.162617 3.391690) (xy -2.939238 3.014616) (xy -2.706741 2.634581) (xy -2.467140 2.255155) (xy -2.222450 1.879908) (xy -2.174496 1.807797)
|
||||
(xy -1.763544 1.210393) (xy -1.324329 0.606914) (xy -0.862435 0.004502) (xy -0.383445 -0.589699) (xy 0.107056 -1.168547) (xy 0.488668 -1.598856) (xy 0.757368 -1.894438) (xy 1.017601 -2.178220)
|
||||
(xy 1.267904 -2.448677) (xy 1.506816 -2.704287) (xy 1.732874 -2.943523) (xy 1.944617 -3.164861) (xy 2.140582 -3.366777) (xy 2.319308 -3.547747) (xy 2.479332 -3.706246) (xy 2.619193 -3.840749)
|
||||
(xy 2.737429 -3.949733) (xy 2.775340 -3.983229) (xy 2.880382 -4.081595) (xy 2.965365 -4.175325) (xy 3.015892 -4.244345) (xy 3.065185 -4.316977) (xy 3.107255 -4.362579) (xy 3.150313 -4.387019)
|
||||
(xy 3.202569 -4.396162) (xy 3.229324 -4.396853) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.499878 5.614359) (xy 0.521281 5.651195) (xy 0.527636 5.703113) (xy 0.519629 5.754821) (xy 0.497948 5.791026) (xy 0.491752 5.795212) (xy 0.446689 5.812180) (xy 0.414617 5.800828)
|
||||
(xy 0.389442 5.769336) (xy 0.370269 5.717817) (xy 0.374166 5.667446) (xy 0.395782 5.625732) (xy 0.429767 5.600185) (xy 0.470767 5.598314) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.499878 5.196476) (xy 0.521281 5.233312) (xy 0.527636 5.285231) (xy 0.519629 5.336938) (xy 0.497948 5.373143) (xy 0.491752 5.377329) (xy 0.446689 5.394298) (xy 0.414617 5.382946)
|
||||
(xy 0.389442 5.351453) (xy 0.370269 5.299935) (xy 0.374166 5.249563) (xy 0.395782 5.207849) (xy 0.429767 5.182302) (xy 0.470767 5.180431) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.486369 4.767375) (xy 0.515290 4.802695) (xy 0.526862 4.865139) (xy 0.526895 4.869241) (xy 0.515826 4.931367) (xy 0.486868 4.969381) (xy 0.446401 4.979481) (xy 0.400800 4.957864)
|
||||
(xy 0.391927 4.949703) (xy 0.367636 4.902716) (xy 0.367193 4.846038) (xy 0.390091 4.796949) (xy 0.396602 4.790298) (xy 0.445129 4.762226) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.496698 4.357635) (xy 0.521680 4.402647) (xy 0.526895 4.451359) (xy 0.515826 4.513485) (xy 0.486868 4.551498) (xy 0.446401 4.561598) (xy 0.400800 4.539982) (xy 0.391927 4.531821)
|
||||
(xy 0.367004 4.486412) (xy 0.365557 4.433507) (xy 0.383982 4.384496) (xy 0.418674 4.350770) (xy 0.451884 4.342346) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.491352 3.934742) (xy 0.505093 3.946266) (xy 0.523687 3.984794) (xy 0.527452 4.037217) (xy 0.517556 4.087992) (xy 0.495168 4.121574) (xy 0.491752 4.123681) (xy 0.448723 4.140603)
|
||||
(xy 0.417160 4.131744) (xy 0.393445 4.109263) (xy 0.368459 4.063085) (xy 0.366679 4.013985) (xy 0.383092 3.969281) (xy 0.412684 3.936293) (xy 0.450441 3.922341) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.490233 3.515999) (xy 0.505093 3.528383) (xy 0.522880 3.567431) (xy 0.525362 3.621468) (xy 0.513247 3.672868) (xy 0.498344 3.696055) (xy 0.456921 3.722108) (xy 0.417071 3.712601)
|
||||
(xy 0.393445 3.691380) (xy 0.367761 3.644559) (xy 0.365414 3.595122) (xy 0.381445 3.550309) (xy 0.410898 3.517359) (xy 0.448814 3.503509) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.494609 3.103007) (xy 0.521564 3.145710) (xy 0.526895 3.190962) (xy 0.515364 3.247680) (xy 0.485830 3.289849) (xy 0.445886 3.306718) (xy 0.445136 3.306724) (xy 0.413215 3.294810)
|
||||
(xy 0.391927 3.278173) (xy 0.370934 3.237564) (xy 0.364087 3.183151) (xy 0.372097 3.132562) (xy 0.385179 3.110500) (xy 0.420600 3.092298) (xy 0.445136 3.088698) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.494609 2.685124) (xy 0.521564 2.727827) (xy 0.526895 2.773080) (xy 0.515364 2.829797) (xy 0.485830 2.871966) (xy 0.445886 2.888835) (xy 0.445136 2.888841) (xy 0.413215 2.876928)
|
||||
(xy 0.391927 2.860290) (xy 0.370934 2.819681) (xy 0.364087 2.765268) (xy 0.372097 2.714679) (xy 0.385179 2.692618) (xy 0.420600 2.674415) (xy 0.445136 2.670815) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.489872 2.268094) (xy 0.516754 2.306039) (xy 0.526486 2.355457) (xy 0.516782 2.405039) (xy 0.486515 2.442675) (xy 0.447499 2.466152) (xy 0.421000 2.466051) (xy 0.391927 2.442407)
|
||||
(xy 0.370934 2.401799) (xy 0.364087 2.347386) (xy 0.372097 2.296796) (xy 0.385179 2.274735) (xy 0.420087 2.257031) (xy 0.448130 2.252932) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.490176 1.851093) (xy 0.517394 1.893007) (xy 0.524001 1.951471) (xy 0.523473 1.956527) (xy 0.504588 2.001969) (xy 0.467976 2.033439) (xy 0.425911 2.041323) (xy 0.417882 2.039209)
|
||||
(xy 0.381753 2.014057) (xy 0.365562 1.967226) (xy 0.363654 1.934070) (xy 0.375230 1.874074) (xy 0.410573 1.841468) (xy 0.448130 1.835050) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.472227 1.423196) (xy 0.506520 1.449581) (xy 0.508087 1.452310) (xy 0.524853 1.507227) (xy 0.522266 1.561675) (xy 0.505093 1.595221) (xy 0.468959 1.613303) (xy 0.424002 1.615566)
|
||||
(xy 0.386547 1.602874) (xy 0.374404 1.588285) (xy 0.364049 1.535551) (xy 0.367342 1.480739) (xy 0.383019 1.441347) (xy 0.385179 1.438970) (xy 0.426084 1.419040) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.474936 1.009202) (xy 0.506871 1.041060) (xy 0.522998 1.087676) (xy 0.516818 1.141920) (xy 0.512366 1.152987) (xy 0.483105 1.185293) (xy 0.441282 1.200151) (xy 0.400532 1.195838)
|
||||
(xy 0.374494 1.170634) (xy 0.374404 1.170402) (xy 0.363760 1.115789) (xy 0.368271 1.060677) (xy 0.386298 1.021433) (xy 0.389629 1.018283) (xy 0.433690 0.999233) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.477969 0.596435) (xy 0.510678 0.630662) (xy 0.516536 0.646380) (xy 0.520311 0.710576) (xy 0.499957 0.758629) (xy 0.460784 0.784232) (xy 0.408103 0.781079) (xy 0.404256 0.779697)
|
||||
(xy 0.376378 0.761235) (xy 0.364839 0.726440) (xy 0.363376 0.693225) (xy 0.370250 0.639026) (xy 0.387705 0.602308) (xy 0.390393 0.599766) (xy 0.433184 0.584403) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.482832 0.174283) (xy 0.495289 0.194392) (xy 0.499389 0.236830) (xy 0.499642 0.263447) (xy 0.498306 0.317414) (xy 0.490494 0.345001) (xy 0.470506 0.356160) (xy 0.444483 0.359695)
|
||||
(xy 0.401401 0.359665) (xy 0.376350 0.352124) (xy 0.365070 0.320899) (xy 0.363820 0.271740) (xy 0.371301 0.221241) (xy 0.386214 0.185996) (xy 0.389629 0.182518) (xy 0.427843 0.167408)
|
||||
(xy 0.457762 0.166667) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.499642 -0.154435) (xy 0.497991 -0.100177) (xy 0.489934 -0.072417) (xy 0.470814 -0.061361) (xy 0.454220 -0.058885) (xy 0.409698 -0.061098) (xy 0.384908 -0.069770) (xy 0.368915 -0.100731)
|
||||
(xy 0.366471 -0.161316) (xy 0.366740 -0.165320) (xy 0.371939 -0.214827) (xy 0.383859 -0.238018) (xy 0.411142 -0.244866) (xy 0.436051 -0.245279) (xy 0.499642 -0.245279) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -6.136217 -0.877083) (xy -6.068221 -0.839232) (xy -6.026484 -0.779299) (xy -6.013877 -0.708584) (xy -6.024575 -0.638007) (xy -6.060343 -0.586085) (xy -6.126694 -0.544927) (xy -6.128898 -0.543919)
|
||||
(xy -6.209706 -0.515564) (xy -6.279346 -0.513287) (xy -6.352015 -0.537148) (xy -6.367886 -0.544921) (xy -6.416140 -0.566081) (xy -6.443107 -0.567558) (xy -6.453210 -0.558547) (xy -6.467944 -0.504620)
|
||||
(xy -6.453529 -0.445066) (xy -6.414765 -0.387208) (xy -6.356454 -0.338370) (xy -6.288558 -0.307367) (xy -6.238061 -0.295839) (xy -6.190354 -0.295943) (xy -6.129641 -0.308337) (xy -6.104817 -0.315025)
|
||||
(xy -6.036697 -0.331484) (xy -5.974232 -0.342447) (xy -5.941476 -0.345208) (xy -5.902267 -0.340252) (xy -5.887919 -0.319682) (xy -5.886696 -0.301758) (xy -5.895888 -0.268223) (xy -5.928947 -0.242638)
|
||||
(xy -5.955777 -0.230668) (xy -5.994728 -0.217859) (xy -6.050506 -0.202713) (xy -6.112979 -0.187551) (xy -6.172014 -0.174694) (xy -6.217479 -0.166464) (xy -6.239242 -0.165182) (xy -6.239782 -0.165609)
|
||||
(xy -6.256362 -0.170169) (xy -6.295642 -0.178708) (xy -6.304578 -0.180530) (xy -6.417324 -0.220325) (xy -6.512371 -0.291407) (xy -6.540422 -0.322118) (xy -6.573788 -0.365980) (xy -6.589737 -0.404112)
|
||||
(xy -6.593061 -0.452637) (xy -6.591052 -0.492486) (xy -6.569969 -0.592657) (xy -6.530994 -0.673553) (xy -6.361342 -0.673553) (xy -6.336368 -0.657864) (xy -6.313663 -0.652073) (xy -6.232003 -0.648537)
|
||||
(xy -6.168869 -0.675904) (xy -6.159228 -0.684391) (xy -6.142457 -0.707067) (xy -6.154066 -0.726594) (xy -6.167243 -0.736948) (xy -6.214529 -0.760027) (xy -6.263237 -0.754473) (xy -6.310620 -0.728920)
|
||||
(xy -6.352802 -0.696155) (xy -6.361342 -0.673553) (xy -6.530994 -0.673553) (xy -6.524087 -0.687888) (xy -6.459337 -0.771687) (xy -6.381652 -0.837565) (xy -6.296964 -0.879033) (xy -6.227444 -0.890272)
|
||||
)(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.461287 -0.664473) (xy 0.494855 -0.633517) (xy 0.508480 -0.573279) (xy 0.508726 -0.561648) (xy 0.501699 -0.506259) (xy 0.478205 -0.475737) (xy 0.473583 -0.473029) (xy 0.442669 -0.457843)
|
||||
(xy 0.422217 -0.459014) (xy 0.395171 -0.473845) (xy 0.372550 -0.501692) (xy 0.363713 -0.554908) (xy 0.363376 -0.572875) (xy 0.365972 -0.624161) (xy 0.377501 -0.650570) (xy 0.403578 -0.663405)
|
||||
(xy 0.409034 -0.664845) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.473424 -1.077691) (xy 0.501004 -1.038669) (xy 0.508726 -0.978122) (xy 0.501265 -0.922890) (xy 0.476542 -0.892589) (xy 0.473583 -0.890911) (xy 0.438779 -0.875099) (xy 0.414699 -0.879000)
|
||||
(xy 0.384089 -0.905900) (xy 0.381545 -0.908441) (xy 0.353043 -0.955419) (xy 0.347588 -1.007509) (xy 0.362682 -1.054017) (xy 0.395827 -1.084249) (xy 0.423972 -1.090129) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -7.475577 -1.756685) (xy -7.432165 -1.736711) (xy -7.417015 -1.699783) (xy -7.421683 -1.672403) (xy -7.440284 -1.645777) (xy -7.480024 -1.635081) (xy -7.500402 -1.634168) (xy -7.562322 -1.627749)
|
||||
(xy -7.623484 -1.612762) (xy -7.672369 -1.592926) (xy -7.697456 -1.571958) (xy -7.698080 -1.570373) (xy -7.685283 -1.555243) (xy -7.645764 -1.528627) (xy -7.585753 -1.494352) (xy -7.515716 -1.458321)
|
||||
(xy -7.433035 -1.414994) (xy -7.361385 -1.372364) (xy -7.308901 -1.335532) (xy -7.287311 -1.315168) (xy -7.254953 -1.251638) (xy -7.256510 -1.191201) (xy -7.291081 -1.139862) (xy -7.316259 -1.121854)
|
||||
(xy -7.375653 -1.099787) (xy -7.457385 -1.085180) (xy -7.548027 -1.079082) (xy -7.634150 -1.082542) (xy -7.689964 -1.092668) (xy -7.739154 -1.113817) (xy -7.791214 -1.146936) (xy -7.835961 -1.184119)
|
||||
(xy -7.863213 -1.217457) (xy -7.867096 -1.230212) (xy -7.857329 -1.256665) (xy -7.842309 -1.280601) (xy -7.825766 -1.299476) (xy -7.807280 -1.303040) (xy -7.776273 -1.290051) (xy -7.737839 -1.268353)
|
||||
(xy -7.675091 -1.237664) (xy -7.611129 -1.214835) (xy -7.590022 -1.209852) (xy -7.531584 -1.204602) (xy -7.473888 -1.207827) (xy -7.427010 -1.217818) (xy -7.401031 -1.232867) (xy -7.399146 -1.242192)
|
||||
(xy -7.418761 -1.260683) (xy -7.468263 -1.291238) (xy -7.544015 -1.331902) (xy -7.642379 -1.380715) (xy -7.752900 -1.432598) (xy -7.841981 -1.481021) (xy -7.895971 -1.529046) (xy -7.916074 -1.578040)
|
||||
(xy -7.911094 -1.612346) (xy -7.896434 -1.639434) (xy -7.869116 -1.662075) (xy -7.821583 -1.684892) (xy -7.748702 -1.711673) (xy -7.636514 -1.744487) (xy -7.544583 -1.759384) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -7.899569 -1.984655) (xy -7.873022 -1.962604) (xy -7.869813 -1.923660) (xy -7.889723 -1.878599) (xy -7.902021 -1.863475) (xy -7.924698 -1.830157) (xy -7.955472 -1.773161) (xy -7.989049 -1.702586)
|
||||
(xy -8.002626 -1.671531) (xy -8.047194 -1.567874) (xy -8.093445 -1.462264) (xy -8.137979 -1.362289) (xy -8.177394 -1.275538) (xy -8.208290 -1.209600) (xy -8.222464 -1.180973) (xy -8.253861 -1.146724)
|
||||
(xy -8.295709 -1.129814) (xy -8.334496 -1.133690) (xy -8.351141 -1.148136) (xy -8.368452 -1.184063) (xy -8.393711 -1.247831) (xy -8.424424 -1.332478) (xy -8.458094 -1.431041) (xy -8.492224 -1.536557)
|
||||
(xy -8.504214 -1.575134) (xy -8.530150 -1.655407) (xy -8.556151 -1.728937) (xy -8.578070 -1.784245) (xy -8.585544 -1.800220) (xy -8.603205 -1.858972) (xy -8.594929 -1.907568) (xy -8.563673 -1.937930)
|
||||
(xy -8.532872 -1.944063) (xy -8.494611 -1.936939) (xy -8.465898 -1.911632) (xy -8.442739 -1.862241) (xy -8.421140 -1.782866) (xy -8.419808 -1.777030) (xy -8.401519 -1.705287) (xy -8.378286 -1.626894)
|
||||
(xy -8.352835 -1.549586) (xy -8.327895 -1.481098) (xy -8.306191 -1.429166) (xy -8.290450 -1.401525) (xy -8.286554 -1.398999) (xy -8.275319 -1.414388) (xy -8.252045 -1.456172) (xy -8.219972 -1.517782)
|
||||
(xy -8.182346 -1.592645) (xy -8.142407 -1.674190) (xy -8.103398 -1.755844) (xy -8.068562 -1.831038) (xy -8.041142 -1.893199) (xy -8.033034 -1.912799) (xy -7.996742 -1.961714) (xy -7.943435 -1.986272)
|
||||
)(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -2.854341 -1.430780) (xy -2.826027 -1.412322) (xy -2.811888 -1.387780) (xy -2.800135 -1.350544) (xy -2.812338 -1.323980) (xy -2.832459 -1.306020) (xy -2.877539 -1.279612) (xy -2.927600 -1.276420)
|
||||
(xy -2.966047 -1.284339) (xy -2.995872 -1.308306) (xy -3.010661 -1.350339) (xy -3.006172 -1.393805) (xy -2.997659 -1.408319) (xy -2.964323 -1.426751) (xy -2.911553 -1.435217) (xy -2.904396 -1.435336)
|
||||
)(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -2.442361 -1.429264) (xy -2.424211 -1.421432) (xy -2.393400 -1.385737) (xy -2.391680 -1.347464) (xy -2.412773 -1.312357) (xy -2.450396 -1.286159) (xy -2.498271 -1.274614) (xy -2.550118 -1.283466)
|
||||
(xy -2.566345 -1.291441) (xy -2.592009 -1.324589) (xy -2.596410 -1.370553) (xy -2.578104 -1.411690) (xy -2.576338 -1.413534) (xy -2.541580 -1.429160) (xy -2.490599 -1.434732) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -2.014178 -1.418365) (xy -1.975845 -1.389684) (xy -1.962232 -1.355095) (xy -1.978117 -1.315550) (xy -2.018326 -1.287607) (xy -2.071688 -1.275085) (xy -2.127033 -1.281802) (xy -2.148462 -1.291441)
|
||||
(xy -2.174127 -1.324589) (xy -2.178528 -1.370553) (xy -2.160222 -1.411690) (xy -2.158455 -1.413534) (xy -2.117459 -1.433856) (xy -2.065375 -1.434278) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -1.598862 -1.428954) (xy -1.566218 -1.413600) (xy -1.566152 -1.413534) (xy -1.544914 -1.372013) (xy -1.552895 -1.328805) (xy -1.584574 -1.292881) (xy -1.634431 -1.273213) (xy -1.653362 -1.271817)
|
||||
(xy -1.701953 -1.281512) (xy -1.733824 -1.300368) (xy -1.758487 -1.343741) (xy -1.751867 -1.385358) (xy -1.718610 -1.418030) (xy -1.663362 -1.434566) (xy -1.646614 -1.435336) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -1.196223 -1.427935) (xy -1.151181 -1.404390) (xy -1.127739 -1.366139) (xy -1.126467 -1.353577) (xy -1.142391 -1.315477) (xy -1.182200 -1.287082) (xy -1.233951 -1.272042) (xy -1.285699 -1.274006)
|
||||
(xy -1.322690 -1.293620) (xy -1.342619 -1.334525) (xy -1.338464 -1.380668) (xy -1.312078 -1.414961) (xy -1.309349 -1.416528) (xy -1.252426 -1.433179) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -0.744948 -1.413440) (xy -0.716539 -1.373555) (xy -0.715916 -1.371233) (xy -0.716475 -1.319135) (xy -0.747563 -1.285519) (xy -0.807516 -1.272012) (xy -0.817597 -1.271817) (xy -0.869494 -1.278775)
|
||||
(xy -0.905623 -1.296079) (xy -0.908245 -1.298834) (xy -0.923383 -1.341548) (xy -0.912108 -1.387286) (xy -0.879647 -1.421211) (xy -0.862742 -1.427945) (xy -0.796498 -1.432657) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -0.357852 -1.428769) (xy -0.316560 -1.403216) (xy -0.295280 -1.360667) (xy -0.299211 -1.314967) (xy -0.309066 -1.298834) (xy -0.344490 -1.279487) (xy -0.397248 -1.272556) (xy -0.450653 -1.278101)
|
||||
(xy -0.488015 -1.296181) (xy -0.489834 -1.298198) (xy -0.505363 -1.339131) (xy -0.492320 -1.379612) (xy -0.457862 -1.412561) (xy -0.409146 -1.430898) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.057457 -1.424242) (xy 0.092720 -1.401133) (xy 0.121100 -1.372283) (xy 0.122816 -1.343527) (xy 0.113291 -1.319374) (xy 0.091428 -1.286851) (xy 0.057077 -1.273596) (xy 0.022192 -1.271817)
|
||||
(xy -0.028794 -1.277211) (xy -0.065207 -1.290499) (xy -0.069042 -1.293620) (xy -0.089677 -1.335541) (xy -0.077642 -1.379794) (xy -0.050464 -1.407053) (xy 0.005326 -1.432645) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -4.104400 -1.425513) (xy -4.066350 -1.398152) (xy -4.058794 -1.356412) (xy -4.069814 -1.326324) (xy -4.101306 -1.301057) (xy -4.151388 -1.289661) (xy -4.204746 -1.292924) (xy -4.246072 -1.311630)
|
||||
(xy -4.251307 -1.317003) (xy -4.264879 -1.356272) (xy -4.262270 -1.389679) (xy -4.250517 -1.418356) (xy -4.226914 -1.431698) (xy -4.180174 -1.435293) (xy -4.170036 -1.435336) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -3.753135 -1.432180) (xy -3.745797 -1.431728) (xy -3.694391 -1.427025) (xy -3.669580 -1.416430) (xy -3.661677 -1.392050) (xy -3.661016 -1.362661) (xy -3.662860 -1.323985) (xy -3.674849 -1.304601)
|
||||
(xy -3.706672 -1.296617) (xy -3.745797 -1.293595) (xy -3.799278 -1.292601) (xy -3.827566 -1.300955) (xy -3.841337 -1.322171) (xy -3.842408 -1.325390) (xy -3.846880 -1.374301) (xy -3.842408 -1.399932)
|
||||
(xy -3.829569 -1.422753) (xy -3.803370 -1.432331) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -3.263392 -1.424254) (xy -3.229133 -1.394327) (xy -3.224608 -1.350534) (xy -3.234049 -1.326324) (xy -3.257034 -1.301913) (xy -3.298343 -1.291342) (xy -3.334270 -1.289986) (xy -3.385651 -1.292561)
|
||||
(xy -3.412128 -1.304010) (xy -3.424990 -1.329920) (xy -3.426504 -1.335644) (xy -3.426132 -1.387897) (xy -3.395176 -1.421465) (xy -3.334938 -1.435090) (xy -3.323308 -1.435336) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -5.387984 -1.488261) (xy -5.283154 -1.487227) (xy -5.202051 -1.485547) (xy -5.148963 -1.483177) (xy -5.136447 -1.482014) (xy -5.071319 -1.470676) (xy -5.039642 -1.455324) (xy -5.038542 -1.432912)
|
||||
(xy -5.062206 -1.403296) (xy -5.076048 -1.394055) (xy -5.099917 -1.386529) (xy -5.137975 -1.380369) (xy -5.194385 -1.375225) (xy -5.273307 -1.370749) (xy -5.378903 -1.366591) (xy -5.515335 -1.362403)
|
||||
(xy -5.566391 -1.360993) (xy -5.730972 -1.356505) (xy -5.918177 -1.351348) (xy -6.114305 -1.345903) (xy -6.305659 -1.340552) (xy -6.478537 -1.335674) (xy -6.519920 -1.334497) (xy -6.663979 -1.330484)
|
||||
(xy -6.775736 -1.327765) (xy -6.859209 -1.326520) (xy -6.918418 -1.326926) (xy -6.957382 -1.329160) (xy -6.980118 -1.333401) (xy -6.990646 -1.339825) (xy -6.992983 -1.348612) (xy -6.992071 -1.355387)
|
||||
(xy -6.985376 -1.371341) (xy -6.968147 -1.381916) (xy -6.933636 -1.388538) (xy -6.875097 -1.392632) (xy -6.803982 -1.395115) (xy -6.706572 -1.398618) (xy -6.639801 -1.402432) (xy -6.604678 -1.406180)
|
||||
(xy -6.602215 -1.409482) (xy -6.633422 -1.411961) (xy -6.699308 -1.413236) (xy -6.755528 -1.413269) (xy -6.856802 -1.415457) (xy -6.927618 -1.422782) (xy -6.966397 -1.434855) (xy -6.971562 -1.451287)
|
||||
(xy -6.957786 -1.463127) (xy -6.934930 -1.466446) (xy -6.880027 -1.469698) (xy -6.797367 -1.472838) (xy -6.691239 -1.475820) (xy -6.565936 -1.478601) (xy -6.425746 -1.481136) (xy -6.274960 -1.483381)
|
||||
(xy -6.117868 -1.485291) (xy -5.958761 -1.486822) (xy -5.801929 -1.487928) (xy -5.651662 -1.488567) (xy -5.512250 -1.488692) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -6.401911 -2.338935) (xy -6.350350 -2.307768) (xy -6.305596 -2.246958) (xy -6.292032 -2.183687) (xy -6.305170 -2.122397) (xy -6.340524 -2.067529) (xy -6.393607 -2.023524) (xy -6.459932 -1.994823)
|
||||
(xy -6.535013 -1.985867) (xy -6.614362 -2.001097) (xy -6.646214 -2.014916) (xy -6.692235 -2.037369) (xy -6.716884 -2.043406) (xy -6.731025 -2.033382) (xy -6.739972 -2.017967) (xy -6.756553 -1.971936)
|
||||
(xy -6.749566 -1.929344) (xy -6.716391 -1.879338) (xy -6.702607 -1.863160) (xy -6.631814 -1.801818) (xy -6.552183 -1.772210) (xy -6.458268 -1.772981) (xy -6.395518 -1.786699) (xy -6.327398 -1.803158)
|
||||
(xy -6.264933 -1.814120) (xy -6.232177 -1.816882) (xy -6.193058 -1.812012) (xy -6.178705 -1.791444) (xy -6.177397 -1.772099) (xy -6.189376 -1.730883) (xy -6.209552 -1.710107) (xy -6.237155 -1.700463)
|
||||
(xy -6.287717 -1.686705) (xy -6.350997 -1.671186) (xy -6.416754 -1.656262) (xy -6.474747 -1.644285) (xy -6.514736 -1.637609) (xy -6.526380 -1.637283) (xy -6.545885 -1.641892) (xy -6.586958 -1.650516)
|
||||
(xy -6.595279 -1.652204) (xy -6.705801 -1.690898) (xy -6.797397 -1.756344) (xy -6.863685 -1.843931) (xy -6.865541 -1.847483) (xy -6.883892 -1.920142) (xy -6.875595 -2.005478) (xy -6.844272 -2.096064)
|
||||
(xy -6.816877 -2.143808) (xy -6.649786 -2.143808) (xy -6.634198 -2.126732) (xy -6.595250 -2.118843) (xy -6.544666 -2.119870) (xy -6.494171 -2.129537) (xy -6.455488 -2.147572) (xy -6.454471 -2.148369)
|
||||
(xy -6.432369 -2.180400) (xy -6.441812 -2.209395) (xy -6.478128 -2.229346) (xy -6.521640 -2.234764) (xy -6.555699 -2.224513) (xy -6.597166 -2.199991) (xy -6.632874 -2.170543) (xy -6.649654 -2.145517)
|
||||
(xy -6.649786 -2.143808) (xy -6.816877 -2.143808) (xy -6.793544 -2.184472) (xy -6.727034 -2.263278) (xy -6.648364 -2.325053) (xy -6.626680 -2.337246) (xy -6.557113 -2.357397) (xy -6.477227 -2.357430)
|
||||
)(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -5.435598 -2.685512) (xy -5.387053 -2.679900) (xy -5.393658 -2.262017) (xy -5.396258 -2.140854) (xy -5.399918 -2.030691) (xy -5.404348 -1.937128) (xy -5.409258 -1.865764) (xy -5.414355 -1.822197)
|
||||
(xy -5.417009 -1.812339) (xy -5.448371 -1.785109) (xy -5.489912 -1.784924) (xy -5.523429 -1.807930) (xy -5.536211 -1.841562) (xy -5.538701 -1.902204) (xy -5.535033 -1.957822) (xy -5.529396 -2.036403)
|
||||
(xy -5.524619 -2.132684) (xy -5.521596 -2.228028) (xy -5.521304 -2.243849) (xy -5.520674 -2.321437) (xy -5.522682 -2.369396) (xy -5.528650 -2.394412) (xy -5.539901 -2.403167) (xy -5.552805 -2.403059)
|
||||
(xy -5.598614 -2.403258) (xy -5.641204 -2.412287) (xy -5.666504 -2.426600) (xy -5.668670 -2.432258) (xy -5.658375 -2.452773) (xy -5.630956 -2.494246) (xy -5.591609 -2.548959) (xy -5.576407 -2.569248)
|
||||
(xy -5.528434 -2.630228) (xy -5.493996 -2.666375) (xy -5.466517 -2.683120) (xy -5.439420 -2.685893) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -5.822731 -2.233547) (xy -5.764042 -2.229577) (xy -5.733747 -2.223736) (xy -5.709522 -2.198453) (xy -5.707970 -2.160986) (xy -5.727718 -2.130254) (xy -5.756797 -2.120737) (xy -5.812250 -2.112575)
|
||||
(xy -5.884126 -2.106269) (xy -5.962472 -2.102316) (xy -6.037335 -2.101215) (xy -6.098763 -2.103466) (xy -6.136804 -2.109567) (xy -6.137247 -2.109728) (xy -6.169781 -2.136785) (xy -6.175102 -2.174646)
|
||||
(xy -6.152550 -2.209309) (xy -6.142253 -2.215956) (xy -6.109447 -2.223808) (xy -6.050720 -2.229690) (xy -5.976443 -2.233406) (xy -5.896989 -2.234757) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -5.250916 -5.145844) (xy -5.196747 -5.112125) (xy -5.159394 -5.074807) (xy -5.145126 -5.037065) (xy -5.145389 -4.989486) (xy -5.152734 -4.939650) (xy -5.168849 -4.915885) (xy -5.190236 -4.909055)
|
||||
(xy -5.226430 -4.916739) (xy -5.253953 -4.954477) (xy -5.284908 -4.994744) (xy -5.334275 -5.010856) (xy -5.338440 -5.011293) (xy -5.381012 -5.009790) (xy -5.417944 -4.991346) (xy -5.461914 -4.949932)
|
||||
(xy -5.503655 -4.896189) (xy -5.520003 -4.852547) (xy -5.519738 -4.844843) (xy -5.496850 -4.802854) (xy -5.445022 -4.762439) (xy -5.371539 -4.728032) (xy -5.290546 -4.705389) (xy -5.188246 -4.683837)
|
||||
(xy -5.116793 -4.665670) (xy -5.071060 -4.649163) (xy -5.045918 -4.632591) (xy -5.037958 -4.620384) (xy -5.041665 -4.587409) (xy -5.072934 -4.560253) (xy -5.122990 -4.544946) (xy -5.149789 -4.543541)
|
||||
(xy -5.195715 -4.548636) (xy -5.262104 -4.560680) (xy -5.332547 -4.576579) (xy -5.455314 -4.613438) (xy -5.545167 -4.655951) (xy -5.605418 -4.706960) (xy -5.639382 -4.769303) (xy -5.650372 -4.845822)
|
||||
(xy -5.650381 -4.848981) (xy -5.639930 -4.927972) (xy -5.605778 -4.997782) (xy -5.543362 -5.066211) (xy -5.503860 -5.099408) (xy -5.419453 -5.147622) (xy -5.333141 -5.163183) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -5.632332 -5.432475) (xy -5.601660 -5.404946) (xy -5.601847 -5.368364) (xy -5.632933 -5.317742) (xy -5.633232 -5.317361) (xy -5.652973 -5.285223) (xy -5.683752 -5.226888) (xy -5.722196 -5.149517)
|
||||
(xy -5.764935 -5.060272) (xy -5.808597 -4.966314) (xy -5.849810 -4.874804) (xy -5.885202 -4.792903) (xy -5.911403 -4.727774) (xy -5.913650 -4.721749) (xy -5.936457 -4.667032) (xy -5.959859 -4.620953)
|
||||
(xy -5.962089 -4.617278) (xy -5.997266 -4.586944) (xy -6.041098 -4.579704) (xy -6.078209 -4.597627) (xy -6.081243 -4.601252) (xy -6.096971 -4.631441) (xy -6.120783 -4.688684) (xy -6.149904 -4.765354)
|
||||
(xy -6.181562 -4.853827) (xy -6.212982 -4.946478) (xy -6.241392 -5.035683) (xy -6.251412 -5.069099) (xy -6.274538 -5.141946) (xy -6.298279 -5.207049) (xy -6.317862 -5.251421) (xy -6.319496 -5.254373)
|
||||
(xy -6.335565 -5.307953) (xy -6.325872 -5.356064) (xy -6.294613 -5.388402) (xy -6.261770 -5.396138) (xy -6.232664 -5.392990) (xy -6.210042 -5.379806) (xy -6.190792 -5.350973) (xy -6.171802 -5.300880)
|
||||
(xy -6.149961 -5.223914) (xy -6.135841 -5.169027) (xy -6.103950 -5.051228) (xy -6.074246 -4.957660) (xy -6.047945 -4.891578) (xy -6.026265 -4.856234) (xy -6.016879 -4.851073) (xy -6.004218 -4.866624)
|
||||
(xy -5.979742 -4.909169) (xy -5.946510 -4.972551) (xy -5.907582 -5.050611) (xy -5.866016 -5.137190) (xy -5.824873 -5.226130) (xy -5.787211 -5.311272) (xy -5.780728 -5.326451) (xy -5.740370 -5.398595)
|
||||
(xy -5.695653 -5.436397) (xy -5.647763 -5.439010) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 3.990137 -7.045483) (xy 4.241593 -7.040415) (xy 4.258945 -6.991001) (xy 4.266361 -6.946350) (xy 4.247174 -6.909546) (xy 4.242915 -6.904699) (xy 4.225829 -6.889309) (xy 4.202971 -6.878884)
|
||||
(xy 4.167559 -6.872476) (xy 4.112808 -6.869137) (xy 4.031938 -6.867921) (xy 3.978970 -6.867811) (xy 3.881306 -6.868429) (xy 3.813371 -6.870841) (xy 3.768565 -6.875890) (xy 3.740293 -6.884416)
|
||||
(xy 3.721955 -6.897261) (xy 3.718338 -6.901038) (xy 3.692397 -6.949171) (xy 3.692945 -6.998263) (xy 3.713475 -7.029632) (xy 3.743999 -7.039235) (xy 3.808187 -7.044838) (xy 3.906972 -7.046496)
|
||||
)(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 3.810274 -7.309089) (xy 3.940839 -7.308576) (xy 4.073375 -7.307730) (xy 4.202774 -7.306587) (xy 4.323927 -7.305182) (xy 4.431728 -7.303551) (xy 4.521068 -7.301730) (xy 4.586840 -7.299754)
|
||||
(xy 4.623935 -7.297660) (xy 4.630133 -7.296579) (xy 4.648871 -7.266950) (xy 4.646703 -7.227172) (xy 4.628505 -7.199702) (xy 4.606147 -7.195844) (xy 4.552749 -7.192321) (xy 4.473430 -7.189170)
|
||||
(xy 4.373312 -7.186429) (xy 4.257514 -7.184136) (xy 4.131157 -7.182327) (xy 3.999362 -7.181040) (xy 3.867249 -7.180313) (xy 3.739938 -7.180182) (xy 3.622550 -7.180686) (xy 3.520205 -7.181861)
|
||||
(xy 3.438023 -7.183745) (xy 3.381126 -7.186375) (xy 3.354633 -7.189789) (xy 3.353570 -7.190398) (xy 3.343683 -7.217478) (xy 3.343852 -7.256693) (xy 3.352323 -7.291504) (xy 3.365772 -7.305413)
|
||||
(xy 3.409870 -7.307099) (xy 3.481477 -7.308275) (xy 3.575485 -7.308974) (xy 3.686786 -7.309234) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 4.639907 -9.669345) (xy 4.751876 -9.667153) (xy 4.841021 -9.662666) (xy 4.910040 -9.655756) (xy 4.961627 -9.646295) (xy 4.998478 -9.634153) (xy 5.023289 -9.619203) (xy 5.037025 -9.604040)
|
||||
(xy 5.050424 -9.556432) (xy 5.042732 -9.501331) (xy 5.017704 -9.459683) (xy 4.987031 -9.441496) (xy 4.941354 -9.432200) (xy 4.874866 -9.431539) (xy 4.781764 -9.439256) (xy 4.720663 -9.446524)
|
||||
(xy 4.654224 -9.453317) (xy 4.561943 -9.460504) (xy 4.454300 -9.467377) (xy 4.341774 -9.473225) (xy 4.299039 -9.475067) (xy 4.010454 -9.486699) (xy 4.024653 -8.745031) (xy 4.027897 -8.573089)
|
||||
(xy 4.031015 -8.402986) (xy 4.033912 -8.240326) (xy 4.036491 -8.090709) (xy 4.038656 -7.959738) (xy 4.040310 -7.853015) (xy 4.041359 -7.776143) (xy 4.041462 -7.767168) (xy 4.044070 -7.530973)
|
||||
(xy 4.234088 -7.526195) (xy 4.318471 -7.525489) (xy 4.428005 -7.526647) (xy 4.551565 -7.529440) (xy 4.678026 -7.533641) (xy 4.751144 -7.536765) (xy 4.884178 -7.542157) (xy 4.985250 -7.543673)
|
||||
(xy 5.058609 -7.540504) (xy 5.108503 -7.531842) (xy 5.139177 -7.516877) (xy 5.154879 -7.494801) (xy 5.159857 -7.464804) (xy 5.159943 -7.458909) (xy 5.144281 -7.414680) (xy 5.106598 -7.377885)
|
||||
(xy 5.060850 -7.361081) (xy 5.051429 -7.361277) (xy 5.014838 -7.365042) (xy 4.963693 -7.370234) (xy 4.960086 -7.370598) (xy 4.913020 -7.376698) (xy 4.842835 -7.387386) (xy 4.762154 -7.400705)
|
||||
(xy 4.733569 -7.405663) (xy 4.688329 -7.412789) (xy 4.639599 -7.418452) (xy 4.583448 -7.422718) (xy 4.515948 -7.425654) (xy 4.433169 -7.427327) (xy 4.331180 -7.427803) (xy 4.206052 -7.427149)
|
||||
(xy 4.053855 -7.425431) (xy 3.870659 -7.422717) (xy 3.797278 -7.421523) (xy 3.608601 -7.418489) (xy 3.452956 -7.416263) (xy 3.327045 -7.414918) (xy 3.227570 -7.414530) (xy 3.151233 -7.415173)
|
||||
(xy 3.094737 -7.416921) (xy 3.054782 -7.419849) (xy 3.028071 -7.424031) (xy 3.011307 -7.429542) (xy 3.001190 -7.436457) (xy 2.998310 -7.439579) (xy 2.982590 -7.474839) (xy 2.991789 -7.500701)
|
||||
(xy 3.001855 -7.510747) (xy 3.020810 -7.518480) (xy 3.053217 -7.524282) (xy 3.103636 -7.528535) (xy 3.176630 -7.531622) (xy 3.276761 -7.533925) (xy 3.408590 -7.535826) (xy 3.411131 -7.535858)
|
||||
(xy 3.541463 -7.537542) (xy 3.640072 -7.539328) (xy 3.711567 -7.541723) (xy 3.760561 -7.545234) (xy 3.791664 -7.550369) (xy 3.809488 -7.557635) (xy 3.818644 -7.567539) (xy 3.823742 -7.580589)
|
||||
(xy 3.823957 -7.581280) (xy 3.827833 -7.595104) (xy 3.831202 -7.611785) (xy 3.834205 -7.634546) (xy 3.836982 -7.666611) (xy 3.839674 -7.711204) (xy 3.842420 -7.771549) (xy 3.845362 -7.850870)
|
||||
(xy 3.848638 -7.952389) (xy 3.852391 -8.079333) (xy 3.856759 -8.234923) (xy 3.861883 -8.422384) (xy 3.864067 -8.503005) (xy 3.869778 -8.719760) (xy 3.874215 -8.902932) (xy 3.877370 -9.055254)
|
||||
(xy 3.879235 -9.179458) (xy 3.879799 -9.278278) (xy 3.879055 -9.354446) (xy 3.876993 -9.410695) (xy 3.873605 -9.449757) (xy 3.868882 -9.474366) (xy 3.862815 -9.487253) (xy 3.860872 -9.489135)
|
||||
(xy 3.837005 -9.493409) (xy 3.783938 -9.495470) (xy 3.708743 -9.495262) (xy 3.618495 -9.492727) (xy 3.585754 -9.491331) (xy 3.328805 -9.479427) (xy 3.298304 -9.525977) (xy 3.278608 -9.569959)
|
||||
(xy 3.286325 -9.607135) (xy 3.293260 -9.616599) (xy 3.305399 -9.624351) (xy 3.326473 -9.630695) (xy 3.360212 -9.635933) (xy 3.410346 -9.640367) (xy 3.480605 -9.644301) (xy 3.574721 -9.648036)
|
||||
(xy 3.696423 -9.651877) (xy 3.849441 -9.656124) (xy 3.909898 -9.657732) (xy 4.140112 -9.663436) (xy 4.336721 -9.667358) (xy 4.502421 -9.669370) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 6.135435 -10.290202) (xy 6.162680 -10.251080) (xy 6.195588 -10.186402) (xy 6.231775 -10.093797) (xy 6.248039 -10.014259) (xy 6.243772 -9.953469) (xy 6.223979 -9.921136) (xy 6.187019 -9.909651)
|
||||
(xy 6.149270 -9.928618) (xy 6.117831 -9.973018) (xy 6.106387 -10.004294) (xy 6.073484 -10.082397) (xy 6.028723 -10.126745) (xy 5.974538 -10.136678) (xy 5.913361 -10.111531) (xy 5.865131 -10.070065)
|
||||
(xy 5.793751 -9.980066) (xy 5.751563 -9.891718) (xy 5.739366 -9.809111) (xy 5.757957 -9.736337) (xy 5.791309 -9.691885) (xy 5.878965 -9.625802) (xy 5.976699 -9.589646) (xy 6.091826 -9.581064)
|
||||
(xy 6.128738 -9.583329) (xy 6.215394 -9.587258) (xy 6.270694 -9.580450) (xy 6.298334 -9.561744) (xy 6.302013 -9.529979) (xy 6.301823 -9.528974) (xy 6.278328 -9.496447) (xy 6.227408 -9.471926)
|
||||
(xy 6.157340 -9.456663) (xy 6.076403 -9.451910) (xy 5.992876 -9.458917) (xy 5.932117 -9.473080) (xy 5.806206 -9.526384) (xy 5.708450 -9.597457) (xy 5.641542 -9.684320) (xy 5.639794 -9.687617)
|
||||
(xy 5.616062 -9.769668) (xy 5.619118 -9.865667) (xy 5.646995 -9.967346) (xy 5.697726 -10.066438) (xy 5.744789 -10.128715) (xy 5.816558 -10.200310) (xy 5.884070 -10.243336) (xy 5.956860 -10.262845)
|
||||
(xy 6.002818 -10.265379) (xy 6.054454 -10.269102) (xy 6.089270 -10.278488) (xy 6.095636 -10.283548) (xy 6.114033 -10.300105) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.394028 -12.601339) (xy 0.442772 -12.568276) (xy 0.462341 -12.547009) (xy 0.477166 -12.519475) (xy 0.489162 -12.478660) (xy 0.500245 -12.417553) (xy 0.512329 -12.329138) (xy 0.515936 -12.300286)
|
||||
(xy 0.529855 -12.197206) (xy 0.546030 -12.092138) (xy 0.562290 -11.998507) (xy 0.574413 -11.938576) (xy 0.604812 -11.803977) (xy 0.645924 -11.917517) (xy 0.678780 -11.996452) (xy 0.719499 -12.078541)
|
||||
(xy 0.746197 -12.124792) (xy 0.789972 -12.198763) (xy 0.837599 -12.286490) (xy 0.882382 -12.375004) (xy 0.917628 -12.451337) (xy 0.928404 -12.477758) (xy 0.962556 -12.521754) (xy 1.015578 -12.542869)
|
||||
(xy 1.075181 -12.536914) (xy 1.087263 -12.531890) (xy 1.118360 -12.510434) (xy 1.136229 -12.476285) (xy 1.147031 -12.418147) (xy 1.157745 -12.354697) (xy 1.171525 -12.299286) (xy 1.177575 -12.282118)
|
||||
(xy 1.191903 -12.242707) (xy 1.212019 -12.180872) (xy 1.233857 -12.109165) (xy 1.236419 -12.100429) (xy 1.257007 -12.033241) (xy 1.271629 -11.996455) (xy 1.283149 -11.985223) (xy 1.294430 -11.994701)
|
||||
(xy 1.296719 -11.998337) (xy 1.331765 -12.054561) (xy 1.377358 -12.124727) (xy 1.428425 -12.201372) (xy 1.479892 -12.277034) (xy 1.526685 -12.344250) (xy 1.563730 -12.395559) (xy 1.585416 -12.422926)
|
||||
(xy 1.634060 -12.452453) (xy 1.700652 -12.465048) (xy 1.769920 -12.458500) (xy 1.789072 -12.452420) (xy 1.810985 -12.431532) (xy 1.842081 -12.386566) (xy 1.876328 -12.326444) (xy 1.882931 -12.313573)
|
||||
(xy 1.925116 -12.234269) (xy 1.972593 -12.151661) (xy 2.012640 -12.087430) (xy 2.048261 -12.035163) (xy 2.070680 -12.009126) (xy 2.086345 -12.004982) (xy 2.101702 -12.018394) (xy 2.106498 -12.024294)
|
||||
(xy 2.122228 -12.042711) (xy 2.139552 -12.057680) (xy 2.162045 -12.069453) (xy 2.193284 -12.078285) (xy 2.236842 -12.084429) (xy 2.296295 -12.088140) (xy 2.375219 -12.089670) (xy 2.477189 -12.089275)
|
||||
(xy 2.605780 -12.087207) (xy 2.764568 -12.083721) (xy 2.898372 -12.080505) (xy 3.099777 -12.075578) (xy 3.267967 -12.071335) (xy 3.406053 -12.067565) (xy 3.517146 -12.064058) (xy 3.604359 -12.060603)
|
||||
(xy 3.670801 -12.056989) (xy 3.719585 -12.053004) (xy 3.753822 -12.048439) (xy 3.776624 -12.043083) (xy 3.791101 -12.036724) (xy 3.800365 -12.029152) (xy 3.807527 -12.020155) (xy 3.808494 -12.018832)
|
||||
(xy 3.821157 -12.006807) (xy 3.842697 -11.997449) (xy 3.878255 -11.990068) (xy 3.932974 -11.983968) (xy 4.011994 -11.978457) (xy 4.120457 -11.972841) (xy 4.164693 -11.970796) (xy 4.288241 -11.965020)
|
||||
(xy 4.415469 -11.958772) (xy 4.535398 -11.952613) (xy 4.637047 -11.947101) (xy 4.687553 -11.944165) (xy 4.878326 -11.932597) (xy 4.964270 -12.043331) (xy 5.015241 -12.102668) (xy 5.062092 -12.145932)
|
||||
(xy 5.095971 -12.165548) (xy 5.138647 -12.167624) (xy 5.200194 -12.160830) (xy 5.246218 -12.151530) (xy 5.300810 -12.136792) (xy 5.337519 -12.119698) (xy 5.366373 -12.091956) (xy 5.397398 -12.045280)
|
||||
(xy 5.418845 -12.008839) (xy 5.464549 -11.919694) (xy 5.484662 -11.848961) (xy 5.479402 -11.789471) (xy 5.448984 -11.734057) (xy 5.427932 -11.709382) (xy 5.362962 -11.660230) (xy 5.281178 -11.627912)
|
||||
(xy 5.192450 -11.613332) (xy 5.106645 -11.617393) (xy 5.033634 -11.640999) (xy 4.995311 -11.669757) (xy 4.967338 -11.693129) (xy 4.932248 -11.703955) (xy 4.877580 -11.705288) (xy 4.854574 -11.704243)
|
||||
(xy 4.797864 -11.704850) (xy 4.715447 -11.710426) (xy 4.617478 -11.720080) (xy 4.514114 -11.732922) (xy 4.491989 -11.736039) (xy 4.383633 -11.750107) (xy 4.273468 -11.761754) (xy 4.173514 -11.769868)
|
||||
(xy 4.095789 -11.773339) (xy 4.087733 -11.773391) (xy 3.942632 -11.773391) (xy 3.942500 -11.232869) (xy 3.943262 -11.079321) (xy 3.945476 -10.922455) (xy 3.948927 -10.770241) (xy 3.953400 -10.630647)
|
||||
(xy 3.958678 -10.511640) (xy 3.964403 -10.422942) (xy 3.986437 -10.153537) (xy 4.359706 -10.154936) (xy 4.512518 -10.155457) (xy 4.633023 -10.155457) (xy 4.725251 -10.154503) (xy 4.793234 -10.152160)
|
||||
(xy 4.841002 -10.147998) (xy 4.872586 -10.141581) (xy 4.892016 -10.132478) (xy 4.903323 -10.120255) (xy 4.910538 -10.104480) (xy 4.913767 -10.095416) (xy 4.922629 -10.054310) (xy 4.907732 -10.025251)
|
||||
(xy 4.889574 -10.009114) (xy 4.850525 -9.981579) (xy 4.821356 -9.979079) (xy 4.785622 -10.001603) (xy 4.776348 -10.009022) (xy 4.733191 -10.032454) (xy 4.692017 -10.027428) (xy 4.655473 -10.021997)
|
||||
(xy 4.591088 -10.020803) (xy 4.507108 -10.023826) (xy 4.446257 -10.028016) (xy 4.314068 -10.034551) (xy 4.172110 -10.034733) (xy 4.046088 -10.028738) (xy 3.963473 -10.023104) (xy 3.893071 -10.020185)
|
||||
(xy 3.843523 -10.020226) (xy 3.824976 -10.022445) (xy 3.798760 -10.026009) (xy 3.743321 -10.029410) (xy 3.665773 -10.032343) (xy 3.573230 -10.034501) (xy 3.530748 -10.035112) (xy 3.261302 -10.038269)
|
||||
(xy 3.261302 -10.147282) (xy 3.517471 -10.152306) (xy 3.773640 -10.157331) (xy 3.795867 -10.424839) (xy 3.802779 -10.534528) (xy 3.808040 -10.674113) (xy 3.811524 -10.837184) (xy 3.813106 -11.017333)
|
||||
(xy 3.812658 -11.208148) (xy 3.812230 -11.255229) (xy 3.806366 -11.818112) (xy 3.732335 -11.812761) (xy 3.666948 -11.816679) (xy 3.635283 -11.835150) (xy 3.612971 -11.852991) (xy 3.585665 -11.845756)
|
||||
(xy 3.573047 -11.838240) (xy 3.536778 -11.824274) (xy 3.485966 -11.823215) (xy 3.433905 -11.830062) (xy 3.389366 -11.834808) (xy 3.314352 -11.839854) (xy 3.214720 -11.844934) (xy 3.096328 -11.849783)
|
||||
(xy 2.965033 -11.854133) (xy 2.826693 -11.857720) (xy 2.822646 -11.857810) (xy 2.668735 -11.861432) (xy 2.547137 -11.863977) (xy 2.453829 -11.864310) (xy 2.384788 -11.861291) (xy 2.335989 -11.853784)
|
||||
(xy 2.303408 -11.840651) (xy 2.283021 -11.820755) (xy 2.270806 -11.792958) (xy 2.262737 -11.756124) (xy 2.254792 -11.709114) (xy 2.252544 -11.696662) (xy 2.226858 -11.615050) (xy 2.186709 -11.560859)
|
||||
(xy 2.135044 -11.537767) (xy 2.124751 -11.537196) (xy 2.078675 -11.553420) (xy 2.033167 -11.595998) (xy 1.996581 -11.655789) (xy 1.983562 -11.691697) (xy 1.962702 -11.742527) (xy 1.926613 -11.808219)
|
||||
(xy 1.882777 -11.875268) (xy 1.878902 -11.880640) (xy 1.848348 -11.924027) (xy 5.003551 -11.924027) (xy 5.006932 -11.869079) (xy 5.016111 -11.815809) (xy 5.029093 -11.776863) (xy 5.039992 -11.764695)
|
||||
(xy 5.067854 -11.756474) (xy 5.117056 -11.741498) (xy 5.150858 -11.731081) (xy 5.213604 -11.712319) (xy 5.253843 -11.704625) (xy 5.283798 -11.708379) (xy 5.315690 -11.723959) (xy 5.337088 -11.736854)
|
||||
(xy 5.377955 -11.770856) (xy 5.394596 -11.812728) (xy 5.387842 -11.869684) (xy 5.360869 -11.943500) (xy 5.334111 -11.996264) (xy 5.303873 -12.025831) (xy 5.257331 -12.044121) (xy 5.250624 -12.045967)
|
||||
(xy 5.182869 -12.053240) (xy 5.113891 -12.043169) (xy 5.054536 -12.019238) (xy 5.015647 -11.984930) (xy 5.007958 -11.968009) (xy 5.003551 -11.924027) (xy 1.848348 -11.924027) (xy 1.827734 -11.953298)
|
||||
(xy 1.775874 -12.030689) (xy 1.735813 -12.094012) (xy 1.677278 -12.191182) (xy 1.592208 -12.041335) (xy 1.546267 -11.952118) (xy 1.501532 -11.851354) (xy 1.466351 -11.758123) (xy 1.461016 -11.741474)
|
||||
(xy 1.435790 -11.664854) (xy 1.414152 -11.615354) (xy 1.391438 -11.584705) (xy 1.362988 -11.564638) (xy 1.360616 -11.563392) (xy 1.310984 -11.545548) (xy 1.266510 -11.548721) (xy 1.224588 -11.575623)
|
||||
(xy 1.182611 -11.628968) (xy 1.137974 -11.711469) (xy 1.088071 -11.825839) (xy 1.073407 -11.862407) (xy 0.986112 -12.083110) (xy 0.922217 -12.012387) (xy 0.869223 -11.939432) (xy 0.823803 -11.844410)
|
||||
(xy 0.783886 -11.722249) (xy 0.754357 -11.600787) (xy 0.733291 -11.506545) (xy 0.716255 -11.442446) (xy 0.700219 -11.402986) (xy 0.682155 -11.382663) (xy 0.659034 -11.375974) (xy 0.631235 -11.377078)
|
||||
(xy 0.593722 -11.384556) (xy 0.571291 -11.404480) (xy 0.554393 -11.447049) (xy 0.549321 -11.464521) (xy 0.520295 -11.563453) (xy 0.486842 -11.670516) (xy 0.450822 -11.780501) (xy 0.414094 -11.888193)
|
||||
(xy 0.378517 -11.988383) (xy 0.345950 -12.075858) (xy 0.318253 -12.145406) (xy 0.297285 -12.191816) (xy 0.284905 -12.209876) (xy 0.283545 -12.209554) (xy 0.265952 -12.184907) (xy 0.238054 -12.138637)
|
||||
(xy 0.209996 -12.088280) (xy 0.179578 -12.032995) (xy 0.151855 -11.990479) (xy 0.121737 -11.959131) (xy 0.084136 -11.937351) (xy 0.033965 -11.923539) (xy -0.033867 -11.916094) (xy -0.124446 -11.913417)
|
||||
(xy -0.242861 -11.913906) (xy -0.340314 -11.915208) (xy -0.464768 -11.917616) (xy -0.584906 -11.921115) (xy -0.693117 -11.925394) (xy -0.781787 -11.930143) (xy -0.843305 -11.935053) (xy -0.851932 -11.936058)
|
||||
(xy -0.972032 -11.951357) (xy -1.053791 -11.864626) (xy -1.124230 -11.799936) (xy -1.187203 -11.767019) (xy -1.249594 -11.764263) (xy -1.318285 -11.790056) (xy -1.334178 -11.798963) (xy -1.420421 -11.869183)
|
||||
(xy -1.478355 -11.960132) (xy -1.500002 -12.042544) (xy -1.374987 -12.042544) (xy -1.368988 -11.972761) (xy -1.339880 -11.910044) (xy -1.301608 -11.872596) (xy -1.248816 -11.848636) (xy -1.196421 -11.854617)
|
||||
(xy -1.138757 -11.892004) (xy -1.105837 -11.923284) (xy -1.045638 -11.986867) (xy -1.009036 -12.032255) (xy -0.993307 -12.066302) (xy -0.995726 -12.095862) (xy -1.013569 -12.127792) (xy -1.020633 -12.137647)
|
||||
(xy -1.075745 -12.193509) (xy -1.143386 -12.221674) (xy -1.210277 -12.227611) (xy -1.275522 -12.211926) (xy -1.326135 -12.170363) (xy -1.359996 -12.111157) (xy -1.374987 -12.042544) (xy -1.500002 -12.042544)
|
||||
(xy -1.503706 -12.056644) (xy -1.506778 -12.106178) (xy -1.498017 -12.140849) (xy -1.471359 -12.175195) (xy -1.442516 -12.203331) (xy -1.391321 -12.244325) (xy -1.327052 -12.285894) (xy -1.260533 -12.322074)
|
||||
(xy -1.202584 -12.346899) (xy -1.168095 -12.354615) (xy -1.135786 -12.342749) (xy -1.088181 -12.311994) (xy -1.034658 -12.270138) (xy -0.984594 -12.224969) (xy -0.947365 -12.184276) (xy -0.932875 -12.159258)
|
||||
(xy -0.921736 -12.114876) (xy -0.710689 -12.125643) (xy -0.600738 -12.131215) (xy -0.473155 -12.137625) (xy -0.346604 -12.143936) (xy -0.271806 -12.147638) (xy -0.043969 -12.158866) (xy -0.004899 -12.226751)
|
||||
(xy 0.033614 -12.286233) (xy 0.085376 -12.356301) (xy 0.143557 -12.428746) (xy 0.201327 -12.495358) (xy 0.251854 -12.547930) (xy 0.286733 -12.577265) (xy 0.344992 -12.604734) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -6.523779 -11.872380) (xy -6.510432 -11.848866) (xy -6.499451 -11.828848) (xy -6.474022 -11.821019) (xy -6.424259 -11.822806) (xy -6.413950 -11.823757) (xy -6.314336 -11.817606) (xy -6.230115 -11.778543)
|
||||
(xy -6.161314 -11.706583) (xy -6.129247 -11.651345) (xy -6.093591 -11.539380) (xy -6.086571 -11.416095) (xy -6.105775 -11.289055) (xy -6.148791 -11.165820) (xy -6.213207 -11.053952) (xy -6.296612 -10.961014)
|
||||
(xy -6.365344 -10.911070) (xy -6.443124 -10.875411) (xy -6.521168 -10.856396) (xy -6.588494 -10.855903) (xy -6.622532 -10.867096) (xy -6.711830 -10.937648) (xy -6.773814 -11.030868) (xy -6.808998 -11.147775)
|
||||
(xy -6.816036 -11.230579) (xy -6.688312 -11.230579) (xy -6.679225 -11.166529) (xy -6.668299 -11.136538) (xy -6.629520 -11.077369) (xy -6.582636 -11.028245) (xy -6.536913 -10.997816) (xy -6.513650 -10.992132)
|
||||
(xy -6.474201 -11.002624) (xy -6.426290 -11.028491) (xy -6.417410 -11.034737) (xy -6.335975 -11.110933) (xy -6.273569 -11.201654) (xy -6.231269 -11.300605) (xy -6.210149 -11.401491) (xy -6.211283 -11.498018)
|
||||
(xy -6.235747 -11.583892) (xy -6.284616 -11.652818) (xy -6.308517 -11.672359) (xy -6.364445 -11.695460) (xy -6.428430 -11.698888) (xy -6.488834 -11.684733) (xy -6.534016 -11.655085) (xy -6.549527 -11.629081)
|
||||
(xy -6.572409 -11.599014) (xy -6.594109 -11.591703) (xy -6.620893 -11.574901) (xy -6.645009 -11.529911) (xy -6.665133 -11.464858) (xy -6.679941 -11.387869) (xy -6.688109 -11.307067) (xy -6.688312 -11.230579)
|
||||
(xy -6.816036 -11.230579) (xy -6.818161 -11.255580) (xy -6.816075 -11.326016) (xy -6.806459 -11.393399) (xy -6.786868 -11.469604) (xy -6.754855 -11.566507) (xy -6.753091 -11.571523) (xy -6.721050 -11.655920)
|
||||
(xy -6.687429 -11.733711) (xy -6.656926 -11.794518) (xy -6.640002 -11.821345) (xy -6.597136 -11.863557) (xy -6.555912 -11.881096) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -2.759860 -13.251935) (xy -2.750946 -13.242429) (xy -2.729882 -13.237112) (xy -2.678017 -13.233509) (xy -2.600841 -13.231535) (xy -2.503847 -13.231106) (xy -2.392525 -13.232138) (xy -2.272368 -13.234546)
|
||||
(xy -2.148867 -13.238247) (xy -2.027514 -13.243156) (xy -1.913799 -13.249189) (xy -1.813215 -13.256261) (xy -1.805144 -13.256933) (xy -1.736879 -13.261761) (xy -1.695622 -13.260804) (xy -1.672276 -13.252397)
|
||||
(xy -1.657744 -13.234875) (xy -1.654700 -13.229395) (xy -1.647057 -13.180860) (xy -1.665369 -13.129205) (xy -1.702912 -13.087199) (xy -1.738663 -13.069949) (xy -1.770609 -13.066866) (xy -1.832835 -13.065054)
|
||||
(xy -1.919305 -13.064533) (xy -2.023980 -13.065320) (xy -2.140826 -13.067433) (xy -2.188010 -13.068610) (xy -2.309854 -13.071358) (xy -2.423647 -13.072939) (xy -2.522890 -13.073341) (xy -2.601085 -13.072550)
|
||||
(xy -2.651731 -13.070554) (xy -2.661731 -13.069570) (xy -2.734407 -13.059746) (xy -2.734620 -12.245636) (xy -2.734760 -12.051329) (xy -2.735150 -11.890115) (xy -2.735913 -11.758749) (xy -2.737168 -11.653985)
|
||||
(xy -2.739038 -11.572580) (xy -2.741645 -11.511289) (xy -2.745109 -11.466866) (xy -2.749553 -11.436067) (xy -2.755098 -11.415648) (xy -2.761865 -11.402363) (xy -2.766415 -11.396629) (xy -2.790472 -11.363203)
|
||||
(xy -2.797997 -11.342395) (xy -2.812591 -11.319980) (xy -2.826737 -11.312030) (xy -2.851630 -11.309242) (xy -2.908084 -11.306714) (xy -2.991321 -11.304536) (xy -3.096565 -11.302803) (xy -3.219037 -11.301605)
|
||||
(xy -3.353962 -11.301036) (xy -3.396830 -11.301002) (xy -3.554531 -11.301229) (xy -3.679715 -11.302036) (xy -3.776200 -11.303608) (xy -3.847802 -11.306132) (xy -3.898340 -11.309792) (xy -3.931632 -11.314774)
|
||||
(xy -3.951496 -11.321266) (xy -3.960977 -11.328466) (xy -3.966967 -11.351449) (xy -3.970819 -11.403935) (xy -3.972516 -11.486730) (xy -3.972042 -11.600642) (xy -3.969380 -11.746477) (xy -3.964515 -11.925041)
|
||||
(xy -3.957429 -12.137141) (xy -3.948107 -12.383582) (xy -3.936531 -12.665173) (xy -3.931459 -12.783400) (xy -3.920361 -13.039403) (xy -4.143291 -13.051390) (xy -4.251427 -13.056373) (xy -4.366998 -13.060343)
|
||||
(xy -4.473899 -13.062809) (xy -4.535972 -13.063377) (xy -4.705723 -13.063377) (xy -4.706038 -12.768133) (xy -4.704956 -12.666866) (xy -4.701747 -12.538213) (xy -4.696740 -12.391045) (xy -4.690260 -12.234230)
|
||||
(xy -4.682636 -12.076639) (xy -4.676303 -11.962242) (xy -4.646254 -11.451593) (xy -4.688954 -11.393838) (xy -4.706761 -11.370366) (xy -4.724182 -11.352609) (xy -4.746639 -11.339181) (xy -4.779555 -11.328697)
|
||||
(xy -4.828351 -11.319774) (xy -4.898450 -11.311027) (xy -4.995273 -11.301070) (xy -5.087268 -11.292114) (xy -5.215978 -11.279923) (xy -5.313420 -11.271634) (xy -5.384449 -11.267184) (xy -5.433916 -11.266504)
|
||||
(xy -5.466676 -11.269530) (xy -5.487579 -11.276194) (xy -5.501481 -11.286431) (xy -5.501517 -11.286467) (xy -5.517438 -11.316369) (xy -5.522867 -11.353915) (xy -5.517193 -11.383753) (xy -5.505721 -11.391846)
|
||||
(xy -5.495267 -11.404971) (xy -5.497681 -11.416756) (xy -5.493754 -11.447884) (xy -5.477644 -11.471263) (xy -5.460941 -11.482728) (xy -5.433694 -11.490879) (xy -5.390307 -11.496238) (xy -5.325184 -11.499328)
|
||||
(xy -5.232727 -11.500672) (xy -5.160916 -11.500859) (xy -4.873784 -11.500859) (xy -4.862429 -11.557636) (xy -4.857686 -11.601903) (xy -4.854236 -11.676996) (xy -4.852035 -11.777430) (xy -4.851039 -11.897720)
|
||||
(xy -4.851202 -12.032378) (xy -4.852480 -12.175919) (xy -4.854829 -12.322857) (xy -4.858204 -12.467706) (xy -4.862561 -12.604979) (xy -4.867854 -12.729192) (xy -4.872641 -12.814049) (xy -4.894682 -13.155208)
|
||||
(xy -4.850067 -13.199823) (xy -4.829469 -13.219180) (xy -4.809078 -13.231273) (xy -4.781190 -13.236945) (xy -4.738099 -13.237039) (xy -4.672100 -13.232398) (xy -4.605695 -13.226565) (xy -4.515327 -13.221022)
|
||||
(xy -4.400909 -13.217779) (xy -4.274662 -13.216986) (xy -4.148810 -13.218788) (xy -4.096940 -13.220433) (xy -3.980642 -13.224374) (xy -3.895503 -13.225898) (xy -3.836410 -13.224781) (xy -3.798248 -13.220802)
|
||||
(xy -3.775906 -13.213737) (xy -3.766232 -13.206014) (xy -3.761161 -13.181329) (xy -3.757709 -13.123773) (xy -3.755823 -13.036775) (xy -3.755448 -12.923762) (xy -3.756532 -12.788162) (xy -3.759022 -12.633405)
|
||||
(xy -3.762863 -12.462917) (xy -3.768002 -12.280128) (xy -3.774387 -12.088465) (xy -3.781963 -11.891356) (xy -3.789363 -11.720734) (xy -3.801329 -11.459137) (xy -3.576738 -11.471249) (xy -3.464220 -11.477392)
|
||||
(xy -3.340395 -11.484271) (xy -3.223078 -11.490892) (xy -3.156831 -11.494696) (xy -2.961517 -11.506030) (xy -2.961517 -12.339780) (xy -2.961443 -12.535989) (xy -2.961144 -12.698980) (xy -2.960501 -12.831870)
|
||||
(xy -2.959399 -12.937780) (xy -2.957719 -13.019828) (xy -2.955344 -13.081132) (xy -2.952157 -13.124813) (xy -2.948042 -13.153987) (xy -2.942879 -13.171775) (xy -2.936553 -13.181296) (xy -2.929721 -13.185390)
|
||||
(xy -2.892979 -13.209710) (xy -2.874185 -13.230242) (xy -2.840339 -13.254901) (xy -2.796705 -13.262679) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 7.005625 -12.306397) (xy 7.061631 -12.274759) (xy 7.105026 -12.230345) (xy 7.131419 -12.179957) (xy 7.136419 -12.130400) (xy 7.115635 -12.088477) (xy 7.098532 -12.075009) (xy 7.073398 -12.066903)
|
||||
(xy 7.047845 -12.080383) (xy 7.016772 -12.114220) (xy 6.961437 -12.161748) (xy 6.904405 -12.172990) (xy 6.845993 -12.147938) (xy 6.812440 -12.117673) (xy 6.765389 -12.056845) (xy 6.748008 -12.005006)
|
||||
(xy 6.761548 -11.960707) (xy 6.807258 -11.922499) (xy 6.886387 -11.888936) (xy 7.000184 -11.858567) (xy 7.043885 -11.849336) (xy 7.141988 -11.825248) (xy 7.204131 -11.799549) (xy 7.230662 -11.771972)
|
||||
(xy 7.221935 -11.742251) (xy 7.205004 -11.726905) (xy 7.165499 -11.708478) (xy 7.110663 -11.703607) (xy 7.034432 -11.712472) (xy 6.931402 -11.735091) (xy 6.806193 -11.773257) (xy 6.714449 -11.817984)
|
||||
(xy 6.653568 -11.871397) (xy 6.620947 -11.935624) (xy 6.613448 -11.995061) (xy 6.620054 -12.062702) (xy 6.643700 -12.121370) (xy 6.690126 -12.183503) (xy 6.711014 -12.206450) (xy 6.786380 -12.272868)
|
||||
(xy 6.862506 -12.308639) (xy 6.941401 -12.318455) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 6.635481 -12.595241) (xy 6.662028 -12.573190) (xy 6.665237 -12.534246) (xy 6.645327 -12.489185) (xy 6.633029 -12.474061) (xy 6.610352 -12.440744) (xy 6.579578 -12.383747) (xy 6.546001 -12.313173)
|
||||
(xy 6.532424 -12.282118) (xy 6.487856 -12.178461) (xy 6.441605 -12.072851) (xy 6.397071 -11.972876) (xy 6.357656 -11.886125) (xy 6.326760 -11.820186) (xy 6.312586 -11.791560) (xy 6.281189 -11.757311)
|
||||
(xy 6.239341 -11.740400) (xy 6.200554 -11.744276) (xy 6.183909 -11.758723) (xy 6.166598 -11.794650) (xy 6.141339 -11.858418) (xy 6.110626 -11.943065) (xy 6.076956 -12.041627) (xy 6.042826 -12.147143)
|
||||
(xy 6.030836 -12.185720) (xy 6.004900 -12.265994) (xy 5.978899 -12.339524) (xy 5.956980 -12.394831) (xy 5.949506 -12.410807) (xy 5.931845 -12.469559) (xy 5.940122 -12.518155) (xy 5.971377 -12.548517)
|
||||
(xy 6.002178 -12.554650) (xy 6.040439 -12.547525) (xy 6.069152 -12.522218) (xy 6.092311 -12.472828) (xy 6.113910 -12.393452) (xy 6.115242 -12.387616) (xy 6.133531 -12.315874) (xy 6.156765 -12.237481)
|
||||
(xy 6.182215 -12.160173) (xy 6.207155 -12.091685) (xy 6.228859 -12.039752) (xy 6.244600 -12.012111) (xy 6.248496 -12.009585) (xy 6.259731 -12.024974) (xy 6.283006 -12.066759) (xy 6.315078 -12.128369)
|
||||
(xy 6.352704 -12.203232) (xy 6.392643 -12.284776) (xy 6.431652 -12.366431) (xy 6.466488 -12.441625) (xy 6.493908 -12.503785) (xy 6.502016 -12.523385) (xy 6.538308 -12.572301) (xy 6.591615 -12.596858)
|
||||
)(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -6.147453 -13.732288) (xy -6.101865 -13.725821) (xy -6.082062 -13.710551) (xy -6.077494 -13.677394) (xy -6.077468 -13.672032) (xy -6.080037 -13.639440) (xy -6.093928 -13.621531) (xy -6.128417 -13.611548)
|
||||
(xy -6.168312 -13.605844) (xy -6.243237 -13.592665) (xy -6.305322 -13.575204) (xy -6.346432 -13.556240) (xy -6.358807 -13.540758) (xy -6.343329 -13.527859) (xy -6.301285 -13.502846) (xy -6.238921 -13.469213)
|
||||
(xy -6.162485 -13.430453) (xy -6.154968 -13.426753) (xy -6.061291 -13.379090) (xy -5.995470 -13.341047) (xy -5.951644 -13.308698) (xy -5.923952 -13.278114) (xy -5.917170 -13.267420) (xy -5.893217 -13.199976)
|
||||
(xy -5.903542 -13.142523) (xy -5.947558 -13.097445) (xy -5.960997 -13.089789) (xy -6.028289 -13.067528) (xy -6.116684 -13.055017) (xy -6.212102 -13.052918) (xy -6.300464 -13.061892) (xy -6.341330 -13.071908)
|
||||
(xy -6.424870 -13.108375) (xy -6.479301 -13.153017) (xy -6.502318 -13.202848) (xy -6.491615 -13.254880) (xy -6.487721 -13.261502) (xy -6.473027 -13.273122) (xy -6.446947 -13.269890) (xy -6.401447 -13.250008)
|
||||
(xy -6.374444 -13.236172) (xy -6.303196 -13.207318) (xy -6.224644 -13.188652) (xy -6.149040 -13.181205) (xy -6.086636 -13.186007) (xy -6.048363 -13.203391) (xy -6.046147 -13.215854) (xy -6.063216 -13.233624)
|
||||
(xy -6.103225 -13.259076) (xy -6.169829 -13.294586) (xy -6.249700 -13.334266) (xy -6.335913 -13.377728) (xy -6.413484 -13.419405) (xy -6.474797 -13.455028) (xy -6.512239 -13.480327) (xy -6.515987 -13.483578)
|
||||
(xy -6.551192 -13.534039) (xy -6.555142 -13.584516) (xy -6.527724 -13.626800) (xy -6.518062 -13.633813) (xy -6.463762 -13.660156) (xy -6.387848 -13.686646) (xy -6.303223 -13.709855) (xy -6.222792 -13.726354)
|
||||
(xy -6.159460 -13.732713) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -6.540773 -13.953648) (xy -6.510101 -13.926119) (xy -6.510288 -13.889537) (xy -6.541373 -13.838915) (xy -6.541672 -13.838534) (xy -6.561413 -13.806397) (xy -6.592192 -13.748062) (xy -6.630637 -13.670691)
|
||||
(xy -6.673376 -13.581445) (xy -6.717038 -13.487487) (xy -6.758251 -13.395977) (xy -6.793643 -13.314076) (xy -6.819843 -13.248947) (xy -6.822090 -13.242922) (xy -6.844898 -13.188205) (xy -6.868300 -13.142126)
|
||||
(xy -6.870529 -13.138452) (xy -6.905707 -13.108117) (xy -6.949538 -13.100877) (xy -6.986650 -13.118800) (xy -6.989684 -13.122425) (xy -7.005412 -13.152615) (xy -7.029223 -13.209857) (xy -7.058345 -13.286527)
|
||||
(xy -7.090002 -13.375000) (xy -7.121423 -13.467651) (xy -7.149833 -13.556856) (xy -7.159852 -13.590272) (xy -7.182979 -13.663119) (xy -7.206719 -13.728222) (xy -7.226302 -13.772594) (xy -7.227937 -13.775546)
|
||||
(xy -7.244005 -13.829126) (xy -7.234313 -13.877237) (xy -7.203054 -13.909575) (xy -7.170211 -13.917311) (xy -7.141105 -13.914163) (xy -7.118482 -13.900979) (xy -7.099232 -13.872146) (xy -7.080242 -13.822053)
|
||||
(xy -7.058401 -13.745087) (xy -7.044281 -13.690201) (xy -7.012391 -13.572401) (xy -6.982687 -13.478834) (xy -6.956386 -13.412751) (xy -6.934705 -13.377407) (xy -6.925320 -13.372246) (xy -6.912659 -13.387797)
|
||||
(xy -6.888183 -13.430342) (xy -6.854951 -13.493724) (xy -6.816022 -13.571784) (xy -6.774457 -13.658363) (xy -6.733313 -13.747303) (xy -6.695652 -13.832445) (xy -6.689168 -13.847624) (xy -6.648811 -13.919768)
|
||||
(xy -6.604094 -13.957570) (xy -6.556204 -13.960184) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.966951 -14.121966) (xy 0.995291 -14.109011) (xy 1.048349 -14.092284) (xy 1.115216 -14.075182) (xy 1.122738 -14.073470) (xy 1.274522 -14.032545) (xy 1.398640 -13.984929) (xy 1.493814 -13.932000)
|
||||
(xy 1.558771 -13.875134) (xy 1.592233 -13.815708) (xy 1.592924 -13.755099) (xy 1.559569 -13.694685) (xy 1.513429 -13.651832) (xy 1.452931 -13.614611) (xy 1.388050 -13.587504) (xy 1.362607 -13.581179)
|
||||
(xy 1.318028 -13.570602) (xy 1.294672 -13.559008) (xy 1.293598 -13.555168) (xy 1.308969 -13.538224) (xy 1.345755 -13.503753) (xy 1.397571 -13.457633) (xy 1.430794 -13.428890) (xy 1.494646 -13.372248)
|
||||
(xy 1.534469 -13.330923) (xy 1.555341 -13.298475) (xy 1.562336 -13.268466) (xy 1.562518 -13.261813) (xy 1.554936 -13.214734) (xy 1.531489 -13.198102) (xy 1.491120 -13.212012) (xy 1.432772 -13.256560)
|
||||
(xy 1.412105 -13.275442) (xy 1.354209 -13.326994) (xy 1.279456 -13.389581) (xy 1.200357 -13.452843) (xy 1.166276 -13.479074) (xy 1.080366 -13.548378) (xy 1.024165 -13.604650) (xy 0.995119 -13.651572)
|
||||
(xy 0.990672 -13.692825) (xy 0.999921 -13.718643) (xy 1.033722 -13.747372) (xy 1.085413 -13.749553) (xy 1.144635 -13.726538) (xy 1.198315 -13.707754) (xy 1.262788 -13.702077) (xy 1.329160 -13.707798)
|
||||
(xy 1.388537 -13.723211) (xy 1.432026 -13.746606) (xy 1.450732 -13.776276) (xy 1.450361 -13.785244) (xy 1.430532 -13.811284) (xy 1.384891 -13.843667) (xy 1.322341 -13.877990) (xy 1.251781 -13.909853)
|
||||
(xy 1.182113 -13.934853) (xy 1.122239 -13.948589) (xy 1.119318 -13.948940) (xy 1.050382 -13.952584) (xy 0.989289 -13.948647) (xy 0.943734 -13.938592) (xy 0.921410 -13.923884) (xy 0.923651 -13.911695)
|
||||
(xy 0.929849 -13.886916) (xy 0.935435 -13.832986) (xy 0.940252 -13.757086) (xy 0.944143 -13.666400) (xy 0.946953 -13.568110) (xy 0.948524 -13.469400) (xy 0.948700 -13.377451) (xy 0.947323 -13.299448)
|
||||
(xy 0.944239 -13.242573) (xy 0.939289 -13.214008) (xy 0.938878 -13.213269) (xy 0.909374 -13.194869) (xy 0.867028 -13.191988) (xy 0.831367 -13.204757) (xy 0.824350 -13.212499) (xy 0.819368 -13.236922)
|
||||
(xy 0.813737 -13.291520) (xy 0.807912 -13.370148) (xy 0.802351 -13.466661) (xy 0.797650 -13.571333) (xy 0.793214 -13.690002) (xy 0.790729 -13.777699) (xy 0.790520 -13.839753) (xy 0.792914 -13.881493)
|
||||
(xy 0.798240 -13.908249) (xy 0.806822 -13.925350) (xy 0.818989 -13.938125) (xy 0.820209 -13.939191) (xy 0.846171 -13.970891) (xy 0.852768 -13.993698) (xy 0.852922 -14.062105) (xy 0.876371 -14.105696)
|
||||
(xy 0.898818 -14.120228) (xy 0.945024 -14.130988) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 1.243692 12.862108) (xy 1.265410 12.874154) (xy 1.312809 12.890080) (xy 1.375950 12.906582) (xy 1.380773 12.907689) (xy 1.536314 12.949978) (xy 1.664030 12.999235) (xy 1.762201 13.054282)
|
||||
(xy 1.829109 13.113941) (xy 1.863034 13.177032) (xy 1.863292 13.238510) (xy 1.838684 13.277807) (xy 1.789368 13.320664) (xy 1.725519 13.360458) (xy 1.657312 13.390569) (xy 1.611267 13.402527)
|
||||
(xy 1.541443 13.413692) (xy 1.678689 13.542862) (xy 1.736222 13.599285) (xy 1.782435 13.648921) (xy 1.811515 13.685268) (xy 1.818561 13.699284) (xy 1.817413 13.759402) (xy 1.799689 13.787330)
|
||||
(xy 1.765984 13.782908) (xy 1.716889 13.745971) (xy 1.701928 13.731277) (xy 1.665114 13.696754) (xy 1.607713 13.646475) (xy 1.537631 13.587237) (xy 1.464069 13.526878) (xy 1.379993 13.458185)
|
||||
(xy 1.320892 13.407005) (xy 1.282974 13.368652) (xy 1.262446 13.338437) (xy 1.255518 13.311673) (xy 1.258395 13.283673) (xy 1.260403 13.275129) (xy 1.278518 13.238443) (xy 1.315033 13.227579)
|
||||
(xy 1.322127 13.227539) (xy 1.376631 13.237411) (xy 1.417167 13.254148) (xy 1.495219 13.278165) (xy 1.593260 13.273060) (xy 1.639735 13.262278) (xy 1.686810 13.243827) (xy 1.706039 13.219020)
|
||||
(xy 1.707868 13.203158) (xy 1.701215 13.173761) (xy 1.677757 13.147187) (xy 1.632243 13.119850) (xy 1.559424 13.088159) (xy 1.514020 13.070645) (xy 1.436006 13.046850) (xy 1.358737 13.032736)
|
||||
(xy 1.288596 13.028100) (xy 1.231971 13.032742) (xy 1.195248 13.046459) (xy 1.184811 13.069048) (xy 1.189663 13.080907) (xy 1.195675 13.108131) (xy 1.200621 13.163862) (xy 1.204444 13.240866)
|
||||
(xy 1.207085 13.331906) (xy 1.208488 13.429747) (xy 1.208593 13.527154) (xy 1.207344 13.616889) (xy 1.204681 13.691719) (xy 1.200548 13.744407) (xy 1.195160 13.767417) (xy 1.160329 13.787326)
|
||||
(xy 1.117890 13.786542) (xy 1.085307 13.766450) (xy 1.080646 13.758333) (xy 1.076117 13.730549) (xy 1.071732 13.672878) (xy 1.067809 13.591767) (xy 1.064665 13.493668) (xy 1.062754 13.395339)
|
||||
(xy 1.061619 13.272202) (xy 1.062231 13.180791) (xy 1.064857 13.116523) (xy 1.069763 13.074814) (xy 1.077217 13.051084) (xy 1.083264 13.043364) (xy 1.100709 13.011799) (xy 1.108287 12.964224)
|
||||
(xy 1.108297 12.962521) (xy 1.116646 12.911828) (xy 1.136733 12.874017) (xy 1.136848 12.873901) (xy 1.175123 12.850970) (xy 1.216114 12.846570) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -1.459705 11.794769) (xy -1.436778 11.814303) (xy -1.408410 11.859096) (xy -1.378924 11.919404) (xy -1.352647 11.985488) (xy -1.333902 12.047603) (xy -1.327015 12.093662) (xy -1.336830 12.151003)
|
||||
(xy -1.363016 12.181169) (xy -1.398090 12.184398) (xy -1.434570 12.160929) (xy -1.464974 12.111000) (xy -1.472321 12.089033) (xy -1.501873 12.020460) (xy -1.543402 11.971589) (xy -1.590325 11.948746)
|
||||
(xy -1.617195 11.949858) (xy -1.662173 11.974744) (xy -1.714382 12.022749) (xy -1.765475 12.084164) (xy -1.807106 12.149276) (xy -1.826771 12.193697) (xy -1.844927 12.273740) (xy -1.836618 12.335946)
|
||||
(xy -1.799445 12.389704) (xy -1.770021 12.415761) (xy -1.687137 12.472431) (xy -1.606790 12.503572) (xy -1.515455 12.513117) (xy -1.446409 12.509830) (xy -1.355964 12.506153) (xy -1.299017 12.513883)
|
||||
(xy -1.274438 12.533420) (xy -1.281096 12.565165) (xy -1.282644 12.567759) (xy -1.325085 12.605143) (xy -1.393027 12.629900) (xy -1.477521 12.640965) (xy -1.569620 12.637274) (xy -1.660376 12.617762)
|
||||
(xy -1.671531 12.614035) (xy -1.790968 12.558186) (xy -1.884928 12.484443) (xy -1.910615 12.455174) (xy -1.945228 12.385516) (xy -1.960251 12.297009) (xy -1.955031 12.201816) (xy -1.929046 12.112407)
|
||||
(xy -1.863006 11.990812) (xy -1.787168 11.903569) (xy -1.700387 11.849734) (xy -1.601520 11.828368) (xy -1.583085 11.827897) (xy -1.527537 11.824411) (xy -1.494900 11.815157) (xy -1.489843 11.808396)
|
||||
(xy -1.475536 11.794610) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 0.022139 12.344028) (xy 0.083534 12.365793) (xy 0.093373 12.372961) (xy 0.136266 12.409299) (xy 0.096866 12.442808) (xy 0.066395 12.460466) (xy 0.018640 12.473284) (xy -0.053446 12.482719)
|
||||
(xy -0.122398 12.488105) (xy -0.211791 12.496200) (xy -0.298654 12.507877) (xy -0.369191 12.521139) (xy -0.391868 12.527074) (xy -0.473107 12.548046) (xy -0.528312 12.552239) (xy -0.563871 12.539282)
|
||||
(xy -0.582632 12.516013) (xy -0.593833 12.464657) (xy -0.576508 12.420433) (xy -0.536646 12.394187) (xy -0.513659 12.391127) (xy -0.471688 12.387734) (xy -0.407020 12.378775) (xy -0.332538 12.366070)
|
||||
(xy -0.320898 12.363874) (xy -0.183780 12.342987) (xy -0.068200 12.336399) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 2.193336 12.312187) (xy 2.211361 12.313778) (xy 2.238298 12.340430) (xy 2.245405 12.384432) (xy 2.230620 12.431441) (xy 2.228704 12.434486) (xy 2.220556 12.445922) (xy 2.210134 12.455125)
|
||||
(xy 2.193578 12.462434) (xy 2.167029 12.468185) (xy 2.126625 12.472716) (xy 2.068507 12.476365) (xy 1.988815 12.479468) (xy 1.883689 12.482364) (xy 1.749269 12.485389) (xy 1.613999 12.488212)
|
||||
(xy 1.466311 12.491499) (xy 1.325893 12.495060) (xy 1.198047 12.498729) (xy 1.088075 12.502338) (xy 1.001279 12.505720) (xy 0.942962 12.508705) (xy 0.926609 12.509952) (xy 0.860713 12.512068)
|
||||
(xy 0.810231 12.505838) (xy 0.794885 12.499856) (xy 0.768449 12.468672) (xy 0.763090 12.446958) (xy 0.766265 12.421017) (xy 0.778607 12.400844) (xy 0.804343 12.385478) (xy 0.847697 12.373964)
|
||||
(xy 0.912895 12.365343) (xy 1.004163 12.358655) (xy 1.125727 12.352944) (xy 1.188266 12.350554) (xy 1.329299 12.345147) (xy 1.485531 12.338765) (xy 1.642960 12.332007) (xy 1.787585 12.325467)
|
||||
(xy 1.871387 12.321454) (xy 1.976202 12.316776) (xy 2.069030 12.313576) (xy 2.143525 12.311999) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy -0.131947 12.116954) (xy -0.046752 12.126920) (xy 0.010850 12.143407) (xy 0.043663 12.166945) (xy 0.054491 12.198062) (xy 0.054506 12.199478) (xy 0.038571 12.237266) (xy -0.000520 12.266943)
|
||||
(xy -0.049696 12.283237) (xy -0.095886 12.280874) (xy -0.116547 12.268490) (xy -0.139108 12.262389) (xy -0.190254 12.256015) (xy -0.262248 12.250145) (xy -0.342143 12.245779) (xy -0.554149 12.236695)
|
||||
(xy -0.559842 12.177646) (xy -0.565536 12.118598) (xy -0.396323 12.114477) (xy -0.247536 12.112983) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
(fp_poly (pts (xy 1.809751 11.211556) (xy 1.878469 11.219190) (xy 1.908919 11.228965) (xy 1.936912 11.260684) (xy 1.944063 11.289913) (xy 1.942690 11.307474) (xy 1.934611 11.319654) (xy 1.913882 11.327818)
|
||||
(xy 1.874561 11.333334) (xy 1.810706 11.337568) (xy 1.718426 11.341797) (xy 1.630182 11.346566) (xy 1.554431 11.352449) (xy 1.498982 11.358717) (xy 1.471643 11.364639) (xy 1.471140 11.364922)
|
||||
(xy 1.462680 11.381814) (xy 1.457187 11.422377) (xy 1.454501 11.489977) (xy 1.454460 11.587982) (xy 1.456039 11.682034) (xy 1.457940 11.801018) (xy 1.457585 11.888625) (xy 1.454702 11.949760)
|
||||
(xy 1.449023 11.989328) (xy 1.440276 12.012236) (xy 1.437653 12.015844) (xy 1.399931 12.043173) (xy 1.364736 12.035441) (xy 1.345131 12.010779) (xy 1.338373 11.980200) (xy 1.332780 11.919716)
|
||||
(xy 1.328722 11.835748) (xy 1.326571 11.734721) (xy 1.326323 11.684813) (xy 1.325508 11.585835) (xy 1.323257 11.500236) (xy 1.319859 11.434334) (xy 1.315604 11.394446) (xy 1.312596 11.385506)
|
||||
(xy 1.282486 11.382349) (xy 1.227995 11.389528) (xy 1.158831 11.404792) (xy 1.084700 11.425888) (xy 1.015310 11.450566) (xy 0.994943 11.459185) (xy 0.921569 11.485957) (xy 0.872754 11.488312)
|
||||
(xy 0.845257 11.465235) (xy 0.835838 11.415708) (xy 0.835765 11.409292) (xy 0.841072 11.375196) (xy 0.863138 11.352224) (xy 0.911177 11.330946) (xy 0.912983 11.330284) (xy 0.999099 11.304038)
|
||||
(xy 1.105435 11.279749) (xy 1.225592 11.258068) (xy 1.353172 11.239645) (xy 1.481776 11.225131) (xy 1.605006 11.215178) (xy 1.716464 11.210436) )(layer F.SilkS) (width 0.000000)
|
||||
)
|
||||
)
|
||||
21
kicad/lib/grabcad/Crystal-SMD-3215-Pin2.wrl
Normal file
21
kicad/lib/grabcad/Crystal-SMD-3215-Pin2.wrl
Normal file
File diff suppressed because one or more lines are too long
1009
kicad/lib/kicad/BatteryHolder_Keystone_3002_1x2032.wrl
Normal file
1009
kicad/lib/kicad/BatteryHolder_Keystone_3002_1x2032.wrl
Normal file
File diff suppressed because one or more lines are too long
29
kicad/lib/snapeda/B3U-1000P.lib
Normal file
29
kicad/lib/snapeda/B3U-1000P.lib
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
EESchema-LIBRARY Version 2.3
|
||||
#encoding utf-8
|
||||
#(c) SnapEDA 2016 (snapeda.com)
|
||||
#This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Design Exception 1.0
|
||||
#
|
||||
# B3U-1000P
|
||||
#
|
||||
DEF B3U-1000P S 0 40 Y N 1 L N
|
||||
F0 "S" -100 100 50 H V L BNN
|
||||
F1 "B3U-1000P" -100 -100 50 H V L BNN
|
||||
F2 "SW_B3U-1000P" 0 0 50 H I L BNN
|
||||
F3 "" 0 0 50 H I L BNN
|
||||
F4 "None" 0 0 50 H I L BNN "PACKAGE"
|
||||
F5 "B3U-1000P" 0 0 50 H I L BNN "MP"
|
||||
F6 "Omron" 0 0 50 H I L BNN "MF"
|
||||
F7 "Unavailable" 0 0 50 H I L BNN "AVAILABILITY"
|
||||
F8 "Tactile Switch SPST-NO Top Actuated Surface Mount" 0 0 50 H I L BNN "DESCRIPTION"
|
||||
F9 "None" 0 0 50 H I L BNN "PRICE"
|
||||
DRAW
|
||||
P 2 0 0 6 -100 0 110 84 N
|
||||
C 100 0 13 0 0 6 N
|
||||
P 2 0 0 6 200 0 115 0 N
|
||||
P 2 0 0 6 -100 0 -200 0 N
|
||||
X ~ 1 -300 0 100 R 40 40 0 0 P
|
||||
X ~ 2 300 0 100 L 40 40 0 0 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# End Library
|
||||
6741
kicad/lib/snapeda/B3U-1000P.step
Normal file
6741
kicad/lib/snapeda/B3U-1000P.step
Normal file
File diff suppressed because it is too large
Load diff
56
kicad/lib/snapeda/E73-2G4M08S1C-modified.kicad_mod
Normal file
56
kicad/lib/snapeda/E73-2G4M08S1C-modified.kicad_mod
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
(footprint "E73-2G4M08S1C-modified" (version 20211014) (generator pcbnew)
|
||||
(layer "F.Cu")
|
||||
(tedit 61D2FB58)
|
||||
(attr through_hole)
|
||||
(fp_text reference "REF**" (at -3.175 -10.16) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 62c63d1a-e221-4784-bc74-9a7cdd5bb2e8)
|
||||
)
|
||||
(fp_text value "E73-2G4M08S1C" (at 1.905 10.795) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 1bfcb033-dbb4-482e-a363-6f517218fc19)
|
||||
)
|
||||
(fp_line (start -6.5 -9.5) (end -6.5 9) (layer "F.SilkS") (width 0.127) (tstamp 64a139a1-2b6a-4995-aba9-e720c1c31ad6))
|
||||
(fp_line (start 6.5 -9.5) (end -6.5 -9.5) (layer "F.SilkS") (width 0.127) (tstamp bb76de72-eeb8-4e41-aaf2-395dc1f75530))
|
||||
(fp_line (start 6.5 9) (end 6.5 -9.5) (layer "F.SilkS") (width 0.127) (tstamp d7bc56f6-74f9-4f91-b973-bc4802c7f7e4))
|
||||
(fp_line (start -6.5 9) (end 6.5 9) (layer "F.SilkS") (width 0.127) (tstamp e9755b38-3198-4ac8-90c4-d11a0b164f87))
|
||||
(fp_poly (pts
|
||||
(xy -19.5 -9.5)
|
||||
(xy 19.5 -9.5)
|
||||
(xy 19.5 -6)
|
||||
(xy -19.5 -6)
|
||||
) (layer "Dwgs.User") (width 0.01) (fill solid) (tstamp 51732324-a780-4005-a624-eab32e6658df))
|
||||
(pad "1" smd rect (at -6.5 -5.03) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 2a3afbfc-f820-4f85-8adc-4889c8e1b6e7))
|
||||
(pad "2" smd rect (at -6.5 -3.76) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp db0e211a-914d-4a5d-8b4e-556553c54b32))
|
||||
(pad "3" smd rect (at -6.5 -2.49) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp fc8ecbdc-77f0-4c85-9f37-5ca83f63bbb1))
|
||||
(pad "4" smd rect (at -6.5 -1.22) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 34440ace-6738-45cc-9855-dde9bd553c56))
|
||||
(pad "5" smd rect (at -6.5 0.05) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp b10ced4c-8d3a-451a-baed-886677f32040))
|
||||
(pad "6" smd rect (at -6.5 1.32) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 47f33dc4-397c-41e0-91ca-adda3ae4b759))
|
||||
(pad "7" smd rect (at -6.5 2.59) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 9ebca351-ca9f-4578-bab5-0149df1dfb6d))
|
||||
(pad "8" smd rect (at -6.5 3.86) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 8b72ea5e-7238-4d4e-bb92-f1974db80348))
|
||||
(pad "9" smd rect (at -6.5 5.13) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 32dd1dfa-02d5-4ed5-9804-0e13538946f5))
|
||||
(pad "10" smd rect (at -6.5 6.4) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 2dfc0e17-3908-45f6-a4e8-d94fcbe026cb))
|
||||
(pad "11" smd rect (at -4.44 9) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp d03b33f9-87fe-4b5a-85e5-b11a4f9751b9))
|
||||
(pad "13" smd rect (at -3.17 9) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 28b704cf-85ae-41be-931a-21cab6b04490))
|
||||
(pad "15" smd rect (at -1.9 9) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp a691d471-4d8c-4137-89fd-ee32bfecd7f3))
|
||||
(pad "17" smd rect (at -0.63 9) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 6f9c8787-2311-4c54-9acc-43f64531c084))
|
||||
(pad "19" smd rect (at 0.64 9) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 325de6ca-6520-48cc-9032-e8248658195e))
|
||||
(pad "21" smd rect (at 1.91 9) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 21755008-b7b9-4118-be9b-eea02a310c76))
|
||||
(pad "23" smd rect (at 3.18 9) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 3bdc1582-33c4-4ef9-ad6c-c58828a6d257))
|
||||
(pad "25" smd rect (at 4.45 9) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 25575f13-1b0a-4119-bfb3-0cdde6ec8270))
|
||||
(pad "26" smd rect (at 6.5 6.4) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp dc441d22-7d4a-45a0-990e-2b6aa19e9c6c))
|
||||
(pad "27" smd rect (at 6.5 5.13) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp e620f6ca-4521-498d-a4b4-ec8b76a342bd))
|
||||
(pad "29" smd rect (at 6.5 3.86) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp a4506d62-c23f-4d90-bc1d-a077fbe3926d))
|
||||
(pad "31" smd rect (at 6.5 2.59) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 5e1f905f-5a17-413b-895d-b1b86ab25a2c))
|
||||
(pad "33" smd rect (at 6.5 1.32) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 7bf2b13a-0a61-4504-8fd7-6e72d745055c))
|
||||
(pad "35" smd rect (at 6.5 0.05) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp deed76d2-22fd-42ca-92b9-d5fbb35960c2))
|
||||
(pad "37" smd rect (at 6.5 -1.22) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 1bc74e9d-dc7f-4e6a-9fce-2cd4619cfd5e))
|
||||
(pad "39" smd rect (at 6.5 -2.49) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 010d2f36-bef8-463c-a402-9b24dbdaef1a))
|
||||
(pad "41" smd rect (at 6.5 -3.76) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 00ccbb40-9fae-4674-abd1-2f29aee9214d))
|
||||
(pad "43" smd rect (at 6.5 -5.03) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 7338a6cc-4638-43ec-8cd3-3a76bae7b46b))
|
||||
(model "${KIPRJMOD}/lib/E73-2G4M08S1C.step"
|
||||
(offset (xyz 6.5 -9 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz -90 0 -90))
|
||||
)
|
||||
)
|
||||
71
kicad/lib/snapeda/E73-2G4M08S1C.kicad_mod
Normal file
71
kicad/lib/snapeda/E73-2G4M08S1C.kicad_mod
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
(footprint "E73-2G4M08S1C" (version 20211014) (generator pcbnew)
|
||||
(layer "F.Cu")
|
||||
(tedit 61CC75CB)
|
||||
(attr through_hole)
|
||||
(fp_text reference "REF**" (at -3.175 -10.16) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 62c63d1a-e221-4784-bc74-9a7cdd5bb2e8)
|
||||
)
|
||||
(fp_text value "E73-2G4M08S1C" (at 1.905 10.795) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 1bfcb033-dbb4-482e-a363-6f517218fc19)
|
||||
)
|
||||
(fp_line (start -6.5 -9.5) (end -6.5 9) (layer "F.SilkS") (width 0.127) (tstamp 64a139a1-2b6a-4995-aba9-e720c1c31ad6))
|
||||
(fp_line (start 6.5 -9.5) (end -6.5 -9.5) (layer "F.SilkS") (width 0.127) (tstamp bb76de72-eeb8-4e41-aaf2-395dc1f75530))
|
||||
(fp_line (start 6.5 9) (end 6.5 -9.5) (layer "F.SilkS") (width 0.127) (tstamp d7bc56f6-74f9-4f91-b973-bc4802c7f7e4))
|
||||
(fp_line (start -6.5 9) (end 6.5 9) (layer "F.SilkS") (width 0.127) (tstamp e9755b38-3198-4ac8-90c4-d11a0b164f87))
|
||||
(fp_poly (pts
|
||||
(xy -19.5 -9.5)
|
||||
(xy 19.5 -9.5)
|
||||
(xy 19.5 -6)
|
||||
(xy -19.5 -6)
|
||||
) (layer "Dwgs.User") (width 0.01) (fill solid) (tstamp 51732324-a780-4005-a624-eab32e6658df))
|
||||
(pad "1" smd rect (at -6.5 -5.03) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 2a3afbfc-f820-4f85-8adc-4889c8e1b6e7))
|
||||
(pad "2" smd rect (at -6.5 -3.76) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp db0e211a-914d-4a5d-8b4e-556553c54b32))
|
||||
(pad "3" smd rect (at -6.5 -2.49) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp fc8ecbdc-77f0-4c85-9f37-5ca83f63bbb1))
|
||||
(pad "4" smd rect (at -6.5 -1.22) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 34440ace-6738-45cc-9855-dde9bd553c56))
|
||||
(pad "5" smd rect (at -6.5 0.05) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp b10ced4c-8d3a-451a-baed-886677f32040))
|
||||
(pad "6" smd rect (at -6.5 1.32) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 47f33dc4-397c-41e0-91ca-adda3ae4b759))
|
||||
(pad "7" smd rect (at -6.5 2.59) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 9ebca351-ca9f-4578-bab5-0149df1dfb6d))
|
||||
(pad "8" smd rect (at -6.5 3.86) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 8b72ea5e-7238-4d4e-bb92-f1974db80348))
|
||||
(pad "9" smd rect (at -6.5 5.13) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 32dd1dfa-02d5-4ed5-9804-0e13538946f5))
|
||||
(pad "10" smd rect (at -6.5 6.4) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 2dfc0e17-3908-45f6-a4e8-d94fcbe026cb))
|
||||
(pad "11" smd rect (at -4.44 9) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp d03b33f9-87fe-4b5a-85e5-b11a4f9751b9))
|
||||
(pad "12" smd rect (at -3.81 6.9) (size 0.9 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 9d4fdaf1-0082-4f91-b123-3b30eaf39376))
|
||||
(pad "13" smd rect (at -3.17 9) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 28b704cf-85ae-41be-931a-21cab6b04490))
|
||||
(pad "14" smd rect (at -2.54 6.9) (size 0.9 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp fdb9b12b-8a9f-4d42-b2ac-38e6ed117ebf))
|
||||
(pad "15" smd rect (at -1.9 9) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp a691d471-4d8c-4137-89fd-ee32bfecd7f3))
|
||||
(pad "16" smd rect (at -1.27 6.9) (size 0.9 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp aea0a9bf-c3f0-491f-9f46-775c907175b8))
|
||||
(pad "17" smd rect (at -0.63 9) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 6f9c8787-2311-4c54-9acc-43f64531c084))
|
||||
(pad "18" smd rect (at 0 6.9) (size 0.9 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 6d520754-68d8-4942-8352-d8883ee61a70))
|
||||
(pad "19" smd rect (at 0.64 9) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 325de6ca-6520-48cc-9032-e8248658195e))
|
||||
(pad "20" smd rect (at 1.27 6.9) (size 0.9 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp db424427-2f96-4cf2-ba5f-5e91d51c9f48))
|
||||
(pad "21" smd rect (at 1.91 9) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 21755008-b7b9-4118-be9b-eea02a310c76))
|
||||
(pad "22" smd rect (at 2.54 6.9) (size 0.9 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 7e12b4a0-973f-4ea2-9d48-a3f84a86dd3a))
|
||||
(pad "23" smd rect (at 3.18 9) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 3bdc1582-33c4-4ef9-ad6c-c58828a6d257))
|
||||
(pad "24" smd rect (at 3.81 6.9) (size 0.9 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 320d39f9-b5a0-4bcd-a732-ddb2c4a82265))
|
||||
(pad "25" smd rect (at 4.45 9) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 25575f13-1b0a-4119-bfb3-0cdde6ec8270))
|
||||
(pad "26" smd rect (at 6.5 6.4) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp dc441d22-7d4a-45a0-990e-2b6aa19e9c6c))
|
||||
(pad "27" smd rect (at 6.5 5.13) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp e620f6ca-4521-498d-a4b4-ec8b76a342bd))
|
||||
(pad "28" smd rect (at 4.4 4.495) (size 0.9 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp a7da3f28-0850-4aff-b9b7-bee40228a244))
|
||||
(pad "29" smd rect (at 6.5 3.86) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp a4506d62-c23f-4d90-bc1d-a077fbe3926d))
|
||||
(pad "30" smd rect (at 4.4 3.225) (size 0.9 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 0f4e07dc-1a0e-4c35-9a3c-f00d559fe996))
|
||||
(pad "31" smd rect (at 6.5 2.59) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 5e1f905f-5a17-413b-895d-b1b86ab25a2c))
|
||||
(pad "32" smd rect (at 4.4 1.955) (size 0.9 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp efa49ef2-2430-471b-bd0c-616fbea629dc))
|
||||
(pad "33" smd rect (at 6.5 1.32) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 7bf2b13a-0a61-4504-8fd7-6e72d745055c))
|
||||
(pad "34" smd rect (at 4.4 0.685) (size 0.9 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp bff972dd-76be-4541-b2ca-5bebd42b1f2b))
|
||||
(pad "35" smd rect (at 6.5 0.05) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp deed76d2-22fd-42ca-92b9-d5fbb35960c2))
|
||||
(pad "36" smd rect (at 4.4 -0.585) (size 0.9 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp aa1a89ee-4433-4df9-9903-9df5b5a78a55))
|
||||
(pad "37" smd rect (at 6.5 -1.22) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 1bc74e9d-dc7f-4e6a-9fce-2cd4619cfd5e))
|
||||
(pad "38" smd rect (at 4.4 -1.855) (size 0.9 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp b4c8dc4b-9c34-4698-ac73-a37131d6b8e3))
|
||||
(pad "39" smd rect (at 6.5 -2.49) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 010d2f36-bef8-463c-a402-9b24dbdaef1a))
|
||||
(pad "40" smd rect (at 4.4 -3.125) (size 0.9 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 852b4a80-9987-4f8f-90e1-c268e85a7e12))
|
||||
(pad "41" smd rect (at 6.5 -3.76) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 00ccbb40-9fae-4674-abd1-2f29aee9214d))
|
||||
(pad "42" smd rect (at 4.4 -4.395) (size 0.9 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 7e1fbde0-d64c-4303-8a99-35bf2573cf2c))
|
||||
(pad "43" smd rect (at 6.5 -5.03) (size 2 1) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 7338a6cc-4638-43ec-8cd3-3a76bae7b46b))
|
||||
(model "${KIPRJMOD}/lib/E73-2G4M08S1C.step"
|
||||
(offset (xyz 6.5 -9 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz -90 0 -90))
|
||||
)
|
||||
)
|
||||
63
kicad/lib/snapeda/E73-2G4M08S1C.lib
Normal file
63
kicad/lib/snapeda/E73-2G4M08S1C.lib
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
EESchema-LIBRARY Version 2.3
|
||||
#encoding utf-8
|
||||
#(c) SnapEDA 2016 (snapeda.com)
|
||||
#This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Design Exception 1.0
|
||||
#
|
||||
# E73-2G4M08S1C
|
||||
#
|
||||
DEF E73-2G4M08S1C U 0 40 Y Y 3 L N
|
||||
F0 "U" -600 800 50 H V L BNN
|
||||
F1 "E73-2G4M08S1C" -600 -1000 50 H V L BNN
|
||||
F2 "E73-2G4M08S1C" 0 0 50 H I L BNN
|
||||
F3 "" 0 0 50 H I L BNN
|
||||
DRAW
|
||||
S -600 -900 100 800 1 0 10 f
|
||||
X GND@1 5 -700 200 100 R 40 40 1 0 B
|
||||
X VDD 19 -700 400 100 R 40 40 1 0 B
|
||||
X GND@2 21 -700 100 100 R 40 40 1 0 B
|
||||
X VDDH 23 -700 700 100 R 40 40 1 0 B
|
||||
X GND@3 24 -700 0 100 R 40 40 1 0 B
|
||||
X DCCH 25 -700 600 100 R 40 40 1 0 B
|
||||
X P0.18/RESET 26 -700 -200 100 R 40 40 1 0 B
|
||||
X VBUS 27 -700 -600 100 R 40 40 1 0 B
|
||||
X DM 29 -700 -700 100 R 40 40 1 0 B
|
||||
X DP 31 -700 -800 100 R 40 40 1 0 B
|
||||
X SWDIO 37 -700 -300 100 R 40 40 1 0 B
|
||||
X SWDCLK 39 -700 -400 100 R 40 40 1 0 B
|
||||
S -200 -1200 400 1200 2 0 10 f
|
||||
X P0.03/AIN1 3 500 800 100 L 40 40 2 0 B
|
||||
X P0.28/AIN4 4 500 -800 100 L 40 40 2 0 B
|
||||
X P0.02/AIN0 7 500 900 100 L 40 40 2 0 B
|
||||
X P0.29/AIN5 8 500 -900 100 L 40 40 2 0 B
|
||||
X P0.31/AIN7 9 500 -1100 100 L 40 40 2 0 B
|
||||
X P0.30/AIN6 10 500 -1000 100 L 40 40 2 0 B
|
||||
X P0.00/XL1 11 500 1100 100 L 40 40 2 0 B
|
||||
X P0.26 12 500 -700 100 L 40 40 2 0 B
|
||||
X P0.01/XL2 13 500 1000 100 L 40 40 2 0 B
|
||||
X P0.06 14 500 500 100 L 40 40 2 0 B
|
||||
X P0.05/AIN3 15 500 600 100 L 40 40 2 0 B
|
||||
X P0.08 16 500 300 100 L 40 40 2 0 B
|
||||
X P0.04/AIN2 18 500 700 100 L 40 40 2 0 B
|
||||
X P0.12 20 500 0 100 L 40 40 2 0 B
|
||||
X P0.07 22 500 400 100 L 40 40 2 0 B
|
||||
X P0.15 28 500 -200 100 L 40 40 2 0 B
|
||||
X P0.17 30 500 -300 100 L 40 40 2 0 B
|
||||
X P0.20 32 500 -400 100 L 40 40 2 0 B
|
||||
X P0.13 33 500 -100 100 L 40 40 2 0 B
|
||||
X P0.22 34 500 -500 100 L 40 40 2 0 B
|
||||
X P0.24 35 500 -600 100 L 40 40 2 0 B
|
||||
X P0.09/NFC1 41 500 200 100 L 40 40 2 0 B
|
||||
X P0.10/NFC2 43 500 100 100 L 40 40 2 0 B
|
||||
S -100 -500 300 400 3 0 10 f
|
||||
X P1.11 1 400 -300 100 L 40 40 3 0 B
|
||||
X P1.10 2 400 -200 100 L 40 40 3 0 B
|
||||
X P1.13 6 400 -400 100 L 40 40 3 0 B
|
||||
X P1.09 17 400 -100 100 L 40 40 3 0 B
|
||||
X P1.00 36 400 300 100 L 40 40 3 0 B
|
||||
X P1.02 38 400 200 100 L 40 40 3 0 B
|
||||
X P1.04 40 400 100 100 L 40 40 3 0 B
|
||||
X P1.06 42 400 0 100 L 40 40 3 0 B
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# End Library
|
||||
135685
kicad/lib/snapeda/E73-2G4M08S1C.step
Normal file
135685
kicad/lib/snapeda/E73-2G4M08S1C.step
Normal file
File diff suppressed because it is too large
Load diff
4179
kicad/lib/snapeda/SHTC3-3DModel-STEP-327035.STEP
Normal file
4179
kicad/lib/snapeda/SHTC3-3DModel-STEP-327035.STEP
Normal file
File diff suppressed because it is too large
Load diff
32
kicad/lib/snapeda/SW_B3U-1000P.kicad_mod
Normal file
32
kicad/lib/snapeda/SW_B3U-1000P.kicad_mod
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
|
||||
(footprint SW_B3U-1000P (layer F.Cu) (tedit 6367FB92)
|
||||
(descr "")
|
||||
(fp_text reference REF** (at 0.475 -2.335 0) (layer F.SilkS)
|
||||
(effects (font (size 1.0 1.0) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value SW_B3U-1000P (at 4.92 2.265 0) (layer F.Fab)
|
||||
(effects (font (size 1.0 1.0) (thickness 0.15)))
|
||||
)
|
||||
(pad 1 smd rect (at -1.7 0.0 90.0) (size 1.7 0.8) (layers F.Cu F.Mask F.Paste))
|
||||
(pad 2 smd rect (at 1.7 0.0 90.0) (size 1.7 0.8) (layers F.Cu F.Mask F.Paste))
|
||||
(fp_line (start -1.5 1.25) (end -1.5 -1.25) (layer F.Fab) (width 0.127))
|
||||
(fp_line (start 1.5 -1.25) (end 1.5 1.25) (layer F.Fab) (width 0.127))
|
||||
(fp_line (start 1.5 1.25) (end -1.5 1.25) (layer F.Fab) (width 0.127))
|
||||
(fp_line (start -1.5 1.25) (end 1.5 1.25) (layer F.SilkS) (width 0.127))
|
||||
(fp_line (start -1.75 1.1) (end -2.35 1.1) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -2.35 1.1) (end -2.35 -1.1) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -2.35 -1.1) (end -1.75 -1.1) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 1.75 -1.1) (end 2.35 -1.1) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 2.35 -1.1) (end 2.35 1.1) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 2.35 1.1) (end 1.75 1.1) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 1.75 1.1) (end 1.75 1.5) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 1.75 1.5) (end -1.75 1.5) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.75 1.5) (end -1.75 1.1) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.75 -1.1) (end -1.75 -1.5) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.75 -1.5) (end 1.75 -1.5) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 1.75 -1.5) (end 1.75 -1.1) (layer F.CrtYd) (width 0.05))
|
||||
(fp_circle (center -2.7 -0.2) (end -2.6 -0.2) (layer F.SilkS) (width 0.2))
|
||||
(fp_circle (center -2.7 -0.2) (end -2.6 -0.2) (layer F.Fab) (width 0.2))
|
||||
(fp_line (start -1.5 -1.25) (end 1.5 -1.25) (layer F.SilkS) (width 0.127))
|
||||
(fp_line (start 1.5 -1.25) (end -1.5 -1.25) (layer F.Fab) (width 0.127))
|
||||
)
|
||||
1543
kicad/lib/snapeda/TR8--3DModel-STEP-56544.STEP
Normal file
1543
kicad/lib/snapeda/TR8--3DModel-STEP-56544.STEP
Normal file
File diff suppressed because it is too large
Load diff
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue