This commit is contained in:
commit
71329d5484
|
@ -0,0 +1,72 @@
|
||||||
|
name: Docs
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- "main"
|
||||||
|
tags:
|
||||||
|
- "*"
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- "Docs/**"
|
||||||
|
- ".github/workflows/**"
|
||||||
|
|
||||||
|
#
|
||||||
|
jobs:
|
||||||
|
make_docs:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Build Docs
|
||||||
|
steps:
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: "3.10"
|
||||||
|
architecture: x64
|
||||||
|
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- run: sudo apt update && sudo apt install texlive-latex-recommended texlive-latex-extra texlive-pictures pandoc rename latexmk
|
||||||
|
|
||||||
|
- name: Install docs requirements
|
||||||
|
run: pip install -r Docs/requirements.txt
|
||||||
|
|
||||||
|
- name: Build pdf
|
||||||
|
run: cd Docs && make
|
||||||
|
|
||||||
|
#
|
||||||
|
- run: mv Docs/_build/latex/*.pdf Docs/_build/latex/InstrumentVisor.pdf
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: Uniform_and_Style_Guide
|
||||||
|
path: Docs/_build/latex/InstrumentVisor.pdf
|
||||||
|
#
|
||||||
|
|
||||||
|
publish_docs:
|
||||||
|
# Only run on tags
|
||||||
|
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Publish Docs
|
||||||
|
needs: [make_docs]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
name: Uniform_and_Style_Guide
|
||||||
|
|
||||||
|
- name: Upload Docs to release
|
||||||
|
uses: svenstaro/upload-release-action@v2
|
||||||
|
with:
|
||||||
|
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
file: "*.pdf"
|
||||||
|
tag: ${{ github.ref }}
|
||||||
|
overwrite: true
|
||||||
|
prerelease: true
|
||||||
|
#
|
||||||
|
body: "Kitsune Scientific, Automated with github ci/cd."
|
||||||
|
file_glob: true
|
|
@ -0,0 +1,76 @@
|
||||||
|
name: Firmware
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- "main"
|
||||||
|
tags:
|
||||||
|
- "*"
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- "Firmware/**"
|
||||||
|
- ".github/workflows/**"
|
||||||
|
|
||||||
|
#
|
||||||
|
jobs:
|
||||||
|
make_firmware:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Firmware Builder
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Cache pip
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ~/.cache/pip
|
||||||
|
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-pip-
|
||||||
|
- name: Cache PlatformIO
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ~/.platformio
|
||||||
|
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
- name: Install PlatformIO
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install --upgrade platformio
|
||||||
|
|
||||||
|
- name: Run PlatformIO
|
||||||
|
run: cd Firmware && make build
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: Display_Binaries
|
||||||
|
path: Firmware/.pio/build/ATmega328P/firmware.*
|
||||||
|
|
||||||
|
delint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Delinter
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Cache pip
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ~/.cache/pip
|
||||||
|
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-pip-
|
||||||
|
- name: Cache PlatformIO
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ~/.platformio
|
||||||
|
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
- name: Install PlatformIO
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install --upgrade platformio
|
||||||
|
|
||||||
|
- name: Run Delinter
|
||||||
|
run: cd Firmware && pio check
|
||||||
|
#
|
|
@ -0,0 +1,104 @@
|
||||||
|
name: Hardware
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
actions: read
|
||||||
|
checks: write
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- "main"
|
||||||
|
tags:
|
||||||
|
- "*"
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- "Hardware/**"
|
||||||
|
- ".github/workflows/**"
|
||||||
|
|
||||||
|
#
|
||||||
|
jobs:
|
||||||
|
KiCad_Hardware:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: KiCad Hardware
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
submodules: true
|
||||||
|
|
||||||
|
- uses: INTI-CMNB/KiBot@v2_k7
|
||||||
|
with:
|
||||||
|
# Config file
|
||||||
|
config: Hardware/config.kibot.yaml
|
||||||
|
# Prefix for output in config file.
|
||||||
|
dir: _hardwareOutput
|
||||||
|
|
||||||
|
# Hardware Files
|
||||||
|
#
|
||||||
|
schema: "Hardware/InstrumentVisor/InstrumentVisor.kicad_sch"
|
||||||
|
board: "Hardware/InstrumentVisor/InstrumentVisor.kicad_pcb"
|
||||||
|
#
|
||||||
|
|
||||||
|
- name: upload results
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: Board-Hardware
|
||||||
|
path: _hardwareOutput
|
||||||
|
|
||||||
|
dev-publish:
|
||||||
|
# publish only to devs
|
||||||
|
if: github.event_name == 'pull_request'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Dev-Publish
|
||||||
|
needs: [KiCad_Hardware]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
name: Board-Hardware
|
||||||
|
|
||||||
|
- name: Upload KiCAD Artifacts
|
||||||
|
uses: edunad/actions-image@v2.0.3
|
||||||
|
with:
|
||||||
|
path: "*-3D_top.png"
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
title: "PCB"
|
||||||
|
|
||||||
|
publish:
|
||||||
|
# Only run on tags
|
||||||
|
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Publish
|
||||||
|
needs: [KiCad_Hardware]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
# Be in our repo
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
name: Board-Hardware
|
||||||
|
|
||||||
|
- run: mkdir -p _staging/
|
||||||
|
|
||||||
|
- run: cp *.step _staging/
|
||||||
|
|
||||||
|
# Copy gerbers
|
||||||
|
- run: cp PCBWay/*.zip _staging/Board-$(git rev-parse --short HEAD)-PCBWay.zip
|
||||||
|
- run: cp JLCPCB/*.zip _staging/Board-$(git rev-parse --short HEAD)-JLCPCB.zip
|
||||||
|
|
||||||
|
- name: Upload artifacts to release
|
||||||
|
uses: svenstaro/upload-release-action@v2
|
||||||
|
with:
|
||||||
|
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
file: "_staging/*"
|
||||||
|
tag: ${{ github.ref }}
|
||||||
|
overwrite: true
|
||||||
|
prerelease: true
|
||||||
|
#
|
||||||
|
body: "Kitsune Scientific, Automated with github ci/cd."
|
||||||
|
file_glob: true
|
|
@ -0,0 +1,51 @@
|
||||||
|
# Build artifacts
|
||||||
|
version.h
|
||||||
|
_build
|
||||||
|
|
||||||
|
# Binaries
|
||||||
|
*.FCStd1
|
||||||
|
*.stl
|
||||||
|
*.pdf
|
||||||
|
*.zip
|
||||||
|
*.*~
|
||||||
|
|
||||||
|
# CAD Artifacts
|
||||||
|
*.stl
|
||||||
|
|
||||||
|
# Doc artifacts
|
||||||
|
_*/
|
||||||
|
|
||||||
|
# Temporary files
|
||||||
|
*.000
|
||||||
|
*.bak
|
||||||
|
*.bck
|
||||||
|
*.kicad_pcb-bak
|
||||||
|
*.kicad_sch-bak
|
||||||
|
*-backups
|
||||||
|
*.kicad_prl
|
||||||
|
*.sch-bak
|
||||||
|
*~
|
||||||
|
_autosave-*
|
||||||
|
*.tmp
|
||||||
|
*-save.pro
|
||||||
|
*-save.kicad_pcb
|
||||||
|
fp-info-cache
|
||||||
|
*auto_saved_files#
|
||||||
|
*.lck
|
||||||
|
|
||||||
|
# Netlist files (exported from Eeschema)
|
||||||
|
*.net
|
||||||
|
|
||||||
|
# Autorouter files (exported from Pcbnew)
|
||||||
|
*.dsn
|
||||||
|
*.ses
|
||||||
|
|
||||||
|
# Exported BOM files
|
||||||
|
*.xml
|
||||||
|
*.csv
|
||||||
|
|
||||||
|
# Pio
|
||||||
|
.pio
|
||||||
|
|
||||||
|
# dev artifacts
|
||||||
|
.vscode
|
Binary file not shown.
|
@ -0,0 +1,5 @@
|
||||||
|
# Dev
|
||||||
|
Pipfile*
|
||||||
|
|
||||||
|
# Build
|
||||||
|
_build
|
|
@ -0,0 +1,17 @@
|
||||||
|
SPHINXOPTS ?=
|
||||||
|
SPHINXBUILD ?= sphinx-build
|
||||||
|
SOURCEDIR = .
|
||||||
|
BUILDDIR = _build
|
||||||
|
|
||||||
|
# Refactored from minimal makefile
|
||||||
|
|
||||||
|
all: latexpdf
|
||||||
|
|
||||||
|
clean:
|
||||||
|
git clean -fdX
|
||||||
|
|
||||||
|
latexpdf: Makefile
|
||||||
|
@$(SPHINXBUILD) -M latexpdf "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||||
|
|
||||||
|
html: Makefile
|
||||||
|
@$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
|
@ -0,0 +1,21 @@
|
||||||
|
# Building the Docs
|
||||||
|
|
||||||
|
To get started, you'll need a few things, you should have `pipenv`
|
||||||
|
(or your favorite python container tool). And some familiarly with RST.
|
||||||
|
|
||||||
|
To begin, install the requirements into your python environment
|
||||||
|
|
||||||
|
```
|
||||||
|
pipenv install -r requirements.txt
|
||||||
|
pipenv shell
|
||||||
|
```
|
||||||
|
|
||||||
|
To make things easier, this project uses a build tool called make
|
||||||
|
|
||||||
|
To use it just run
|
||||||
|
|
||||||
|
```
|
||||||
|
make
|
||||||
|
```
|
||||||
|
|
||||||
|
Thats it! Make some edits, and then run `make html`
|
|
@ -0,0 +1,57 @@
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import subprocess
|
||||||
|
import sphinx_theme
|
||||||
|
|
||||||
|
# Revision/git information
|
||||||
|
try:
|
||||||
|
release = (
|
||||||
|
subprocess.check_output(
|
||||||
|
[
|
||||||
|
"git",
|
||||||
|
"describe",
|
||||||
|
"--abbrev=4",
|
||||||
|
"--always",
|
||||||
|
"--tags",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
.strip()
|
||||||
|
.decode("utf-8")
|
||||||
|
)
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
release = "NotARepo"
|
||||||
|
|
||||||
|
|
||||||
|
# Project Information
|
||||||
|
project = "InstrumentVisor"
|
||||||
|
copyright = "2023, Joe"
|
||||||
|
author = "Joe"
|
||||||
|
|
||||||
|
|
||||||
|
# General Config
|
||||||
|
extensions = [
|
||||||
|
"sphinx.ext.autosectionlabel",
|
||||||
|
]
|
||||||
|
|
||||||
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
|
templates_path = ["_templates"]
|
||||||
|
|
||||||
|
# List of patterns, relative to source directory, that match files and
|
||||||
|
# directories to ignore when looking for source files.
|
||||||
|
# This pattern also affects html_static_path and html_extra_path.
|
||||||
|
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
|
||||||
|
|
||||||
|
|
||||||
|
# HTML output options
|
||||||
|
html_theme = "sphinx_rtd_theme"
|
||||||
|
|
||||||
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
|
# html_static_path = ['_static']
|
||||||
|
|
||||||
|
|
||||||
|
# PDF output options
|
||||||
|
latex_elements = {"extraclassoptions": "openany,oneside"}
|
||||||
|
|
||||||
|
latex_logo = "resources/logo.png"
|
|
@ -0,0 +1,9 @@
|
||||||
|
InstrumentVisor Docs
|
||||||
|
===============================
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 3
|
||||||
|
:caption: Contents:
|
||||||
|
|
||||||
|
introduction/introduction
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
Introduction
|
||||||
|
############
|
||||||
|
|
||||||
|
Welcome!
|
||||||
|
========
|
||||||
|
|
||||||
|
Put an introduction here!
|
|
@ -0,0 +1,5 @@
|
||||||
|
# Sphinx
|
||||||
|
sphinx
|
||||||
|
sphinx-theme
|
||||||
|
sphinx-rtd-theme
|
||||||
|
readthedocs-sphinx-search
|
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 45 KiB |
|
@ -0,0 +1,2 @@
|
||||||
|
.pio
|
||||||
|
.vscode
|
|
@ -0,0 +1,46 @@
|
||||||
|
# A very simple makefile full of shortcuts
|
||||||
|
|
||||||
|
# What port the arduino is on
|
||||||
|
ifndef SERIAL_DEV
|
||||||
|
ifneq (,$(wildcard /dev/ttyUSB0))
|
||||||
|
SERIAL_DEV = /dev/ttyUSB0
|
||||||
|
else ifneq (,$(wildcard /dev/ttyACM0))
|
||||||
|
SERIAL_DEV = /dev/ttyACM0
|
||||||
|
else
|
||||||
|
SERIAL_DEV = unknown
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
.PHONY: help
|
||||||
|
|
||||||
|
help: ## Prints this help message
|
||||||
|
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
||||||
|
|
||||||
|
build: ## Invokes pio run
|
||||||
|
pio run
|
||||||
|
|
||||||
|
# For CI
|
||||||
|
binaries: ## Builds the binaries
|
||||||
|
pio run
|
||||||
|
pio run -t .pio/build/uno328/firmware.hex
|
||||||
|
|
||||||
|
flash: ## Flashes the code to the processor
|
||||||
|
pio run -t upload
|
||||||
|
|
||||||
|
deep: ## Flashes the code to processor with fresh EEPROM values
|
||||||
|
pio run -t uploadeep
|
||||||
|
|
||||||
|
clean: ## Cleans the repo of artefacts
|
||||||
|
pio run -t clean
|
||||||
|
git clean -fdx
|
||||||
|
|
||||||
|
lint: ## De-lints the repo
|
||||||
|
pio check
|
||||||
|
|
||||||
|
test: ## Run automated tests
|
||||||
|
pio test --upload-port $(SERIAL_DEV)
|
||||||
|
|
||||||
|
debug: flash monitor ## Flashes then Monitors
|
||||||
|
|
||||||
|
monitor: ## Monitors the device serial
|
||||||
|
pio device monitor --filter=direct --filter=time
|
|
@ -0,0 +1,76 @@
|
||||||
|
import logging
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
from datetime import date
|
||||||
|
|
||||||
|
|
||||||
|
today = date.today()
|
||||||
|
|
||||||
|
try:
|
||||||
|
revision = (
|
||||||
|
subprocess.check_output(
|
||||||
|
[
|
||||||
|
"git",
|
||||||
|
"describe",
|
||||||
|
"--abbrev=8",
|
||||||
|
"--dirty",
|
||||||
|
"--always",
|
||||||
|
"--tags",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
.strip()
|
||||||
|
.decode("utf-8")
|
||||||
|
)
|
||||||
|
|
||||||
|
print(f"-D REVISION='\"{revision}\"'")
|
||||||
|
except Exception as e:
|
||||||
|
logging.warning("Getting git revision failed!! Check that you have git installed?")
|
||||||
|
logging.warning(e)
|
||||||
|
|
||||||
|
print("-D REVISION='Unknown'")
|
||||||
|
|
||||||
|
try:
|
||||||
|
host = (
|
||||||
|
subprocess.check_output(
|
||||||
|
[
|
||||||
|
"hostname",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
.strip()
|
||||||
|
.decode("utf-8")
|
||||||
|
)
|
||||||
|
|
||||||
|
print(f"-D FWHOST='\"{host}\"'")
|
||||||
|
except Exception as e:
|
||||||
|
logging.warning("Getting host failed!! Are you using a UNIX compatible system?")
|
||||||
|
logging.warning(e)
|
||||||
|
|
||||||
|
print("-D FWHOST='Unknown'")
|
||||||
|
|
||||||
|
try:
|
||||||
|
username = (
|
||||||
|
subprocess.check_output(
|
||||||
|
[
|
||||||
|
"id",
|
||||||
|
"-u",
|
||||||
|
"-n",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
.strip()
|
||||||
|
.decode("utf-8")
|
||||||
|
)
|
||||||
|
|
||||||
|
# Cleanup CI
|
||||||
|
if username == "root":
|
||||||
|
username = "git"
|
||||||
|
host = "git"
|
||||||
|
|
||||||
|
print(f"-D USERNAME='\"{username}\"'")
|
||||||
|
except Exception as e:
|
||||||
|
logging.warning("Getting host failed!! Are you using a UNIX compatible system?")
|
||||||
|
logging.warning(e)
|
||||||
|
|
||||||
|
print("-D USERNAME='Unknown'")
|
||||||
|
|
||||||
|
# Print to enable debugging
|
||||||
|
# print("-D DEBUG")
|
|
@ -0,0 +1,7 @@
|
||||||
|
#ifndef _BOARD_PINS_H
|
||||||
|
#define _BOARD_PINS_H
|
||||||
|
|
||||||
|
// LEDs
|
||||||
|
#define STAT_LED 13
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1 @@
|
||||||
|
PIO stores lib data in here, you can create lib folders with objects inside.
|
|
@ -0,0 +1,23 @@
|
||||||
|
; PlatformIO Project Configuration File
|
||||||
|
|
||||||
|
[env:ATmega328P]
|
||||||
|
platform = atmelavr ; Platform to build for
|
||||||
|
board = ATmega328P ; Supported board
|
||||||
|
framework = arduino ; What framework we're using
|
||||||
|
|
||||||
|
board_build.mcu = atmega328p ; Microcontroller
|
||||||
|
board_build.f_cpu = 16000000L ; Frequency
|
||||||
|
|
||||||
|
build_flags = !python build_flags.py ; Build flags before we push
|
||||||
|
|
||||||
|
check_tool = clangtidy ; De-linter
|
||||||
|
check_flags =
|
||||||
|
clangtidy: --fix --checks=abseil,boost,bugprone,cert,cppcoreguidelines,clang-analyzer,google,hicpp,modernize,performance,portability,readability,cppcoreguidelines-avoid-magic-numbers,fuchsia-statically-constructed-objects,cert-err58-cpp,cppcoreguidelines-avoid-non-const-global-variables,cppcoreguidelines-macro-usage
|
||||||
|
|
||||||
|
lib_deps = ; External libraries
|
||||||
|
SPI
|
||||||
|
|
||||||
|
# Monitor Settings
|
||||||
|
monitor_speed = 115200
|
||||||
|
monitor_rts = 0
|
||||||
|
monitor_dtr = 0
|
|
@ -0,0 +1,31 @@
|
||||||
|
/**
|
||||||
|
* @file main.cpp
|
||||||
|
* @author Joe
|
||||||
|
* @brief Source code for InstrumentVisor
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Libs
|
||||||
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
// Headers
|
||||||
|
#include "boardPins.h"
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
// Setup serial
|
||||||
|
delay(200);
|
||||||
|
Serial.begin(115200);
|
||||||
|
Serial.println(REVISION);
|
||||||
|
|
||||||
|
// Pins
|
||||||
|
pinMode(STAT_LED, OUTPUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
// Flash LED
|
||||||
|
digitalWrite(STAT_LED, HIGH);
|
||||||
|
delay(1000);
|
||||||
|
digitalWrite(STAT_LED, LOW);
|
||||||
|
delay(1000);
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
|
||||||
|
This directory is intended for PlatformIO Test Runner and project tests.
|
||||||
|
|
||||||
|
Unit Testing is a software testing method by which individual units of
|
||||||
|
source code, sets of one or more MCU program modules together with associated
|
||||||
|
control data, usage procedures, and operating procedures, are tested to
|
||||||
|
determine whether they are fit for use. Unit testing finds problems early
|
||||||
|
in the development cycle.
|
||||||
|
|
||||||
|
More information about PlatformIO Unit Testing:
|
||||||
|
- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
|
|
@ -0,0 +1,2 @@
|
||||||
|
(kicad_pcb (version 20221018) (generator pcbnew)
|
||||||
|
)
|
|
@ -0,0 +1,332 @@
|
||||||
|
{
|
||||||
|
"board": {
|
||||||
|
"3dviewports": [],
|
||||||
|
"design_settings": {
|
||||||
|
"defaults": {
|
||||||
|
"board_outline_line_width": 0.1,
|
||||||
|
"copper_line_width": 0.2,
|
||||||
|
"copper_text_size_h": 1.5,
|
||||||
|
"copper_text_size_v": 1.5,
|
||||||
|
"copper_text_thickness": 0.3,
|
||||||
|
"other_line_width": 0.15,
|
||||||
|
"silk_line_width": 0.15,
|
||||||
|
"silk_text_size_h": 1.0,
|
||||||
|
"silk_text_size_v": 1.0,
|
||||||
|
"silk_text_thickness": 0.15
|
||||||
|
},
|
||||||
|
"diff_pair_dimensions": [],
|
||||||
|
"drc_exclusions": [],
|
||||||
|
"rules": {
|
||||||
|
"min_copper_edge_clearance": 0.0,
|
||||||
|
"solder_mask_clearance": 0.0,
|
||||||
|
"solder_mask_min_width": 0.0
|
||||||
|
},
|
||||||
|
"track_widths": [],
|
||||||
|
"via_dimensions": []
|
||||||
|
},
|
||||||
|
"layer_presets": [],
|
||||||
|
"viewports": []
|
||||||
|
},
|
||||||
|
"boards": [],
|
||||||
|
"cvpcb": {
|
||||||
|
"equivalence_files": []
|
||||||
|
},
|
||||||
|
"erc": {
|
||||||
|
"erc_exclusions": [],
|
||||||
|
"meta": {
|
||||||
|
"version": 0
|
||||||
|
},
|
||||||
|
"pin_map": [
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"rule_severities": {
|
||||||
|
"bus_definition_conflict": "error",
|
||||||
|
"bus_entry_needed": "error",
|
||||||
|
"bus_to_bus_conflict": "error",
|
||||||
|
"bus_to_net_conflict": "error",
|
||||||
|
"conflicting_netclasses": "error",
|
||||||
|
"different_unit_footprint": "error",
|
||||||
|
"different_unit_net": "error",
|
||||||
|
"duplicate_reference": "error",
|
||||||
|
"duplicate_sheet_names": "error",
|
||||||
|
"endpoint_off_grid": "warning",
|
||||||
|
"extra_units": "error",
|
||||||
|
"global_label_dangling": "warning",
|
||||||
|
"hier_label_mismatch": "error",
|
||||||
|
"label_dangling": "error",
|
||||||
|
"lib_symbol_issues": "warning",
|
||||||
|
"missing_bidi_pin": "warning",
|
||||||
|
"missing_input_pin": "warning",
|
||||||
|
"missing_power_pin": "error",
|
||||||
|
"missing_unit": "warning",
|
||||||
|
"multiple_net_names": "warning",
|
||||||
|
"net_not_bus_member": "warning",
|
||||||
|
"no_connect_connected": "warning",
|
||||||
|
"no_connect_dangling": "warning",
|
||||||
|
"pin_not_connected": "error",
|
||||||
|
"pin_not_driven": "error",
|
||||||
|
"pin_to_pin": "warning",
|
||||||
|
"power_pin_not_driven": "error",
|
||||||
|
"similar_labels": "warning",
|
||||||
|
"simulation_model_issue": "ignore",
|
||||||
|
"unannotated": "error",
|
||||||
|
"unit_value_mismatch": "error",
|
||||||
|
"unresolved_variable": "error",
|
||||||
|
"wire_dangling": "error"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"pinned_footprint_libs": [],
|
||||||
|
"pinned_symbol_libs": []
|
||||||
|
},
|
||||||
|
"meta": {
|
||||||
|
"filename": "InstrumentVisor.kicad_pro",
|
||||||
|
"version": 1
|
||||||
|
},
|
||||||
|
"net_settings": {
|
||||||
|
"classes": [
|
||||||
|
{
|
||||||
|
"bus_width": 12,
|
||||||
|
"clearance": 0.2,
|
||||||
|
"diff_pair_gap": 0.25,
|
||||||
|
"diff_pair_via_gap": 0.25,
|
||||||
|
"diff_pair_width": 0.2,
|
||||||
|
"line_style": 0,
|
||||||
|
"microvia_diameter": 0.3,
|
||||||
|
"microvia_drill": 0.1,
|
||||||
|
"name": "Default",
|
||||||
|
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||||
|
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||||
|
"track_width": 0.25,
|
||||||
|
"via_diameter": 0.8,
|
||||||
|
"via_drill": 0.4,
|
||||||
|
"wire_width": 6
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"version": 3
|
||||||
|
},
|
||||||
|
"net_colors": null,
|
||||||
|
"netclass_assignments": null,
|
||||||
|
"netclass_patterns": []
|
||||||
|
},
|
||||||
|
"pcbnew": {
|
||||||
|
"last_paths": {
|
||||||
|
"gencad": "",
|
||||||
|
"idf": "",
|
||||||
|
"netlist": "",
|
||||||
|
"specctra_dsn": "",
|
||||||
|
"step": "",
|
||||||
|
"vrml": ""
|
||||||
|
},
|
||||||
|
"page_layout_descr_file": ""
|
||||||
|
},
|
||||||
|
"schematic": {
|
||||||
|
"annotate_start_num": 0,
|
||||||
|
"drawing": {
|
||||||
|
"dashed_lines_dash_length_ratio": 12.0,
|
||||||
|
"dashed_lines_gap_length_ratio": 3.0,
|
||||||
|
"default_line_thickness": 6.0,
|
||||||
|
"default_text_size": 50.0,
|
||||||
|
"field_names": [],
|
||||||
|
"intersheets_ref_own_page": false,
|
||||||
|
"intersheets_ref_prefix": "",
|
||||||
|
"intersheets_ref_short": false,
|
||||||
|
"intersheets_ref_show": false,
|
||||||
|
"intersheets_ref_suffix": "",
|
||||||
|
"junction_size_choice": 3,
|
||||||
|
"label_size_ratio": 0.375,
|
||||||
|
"pin_symbol_size": 25.0,
|
||||||
|
"text_offset_ratio": 0.15
|
||||||
|
},
|
||||||
|
"legacy_lib_dir": "",
|
||||||
|
"legacy_lib_list": [],
|
||||||
|
"meta": {
|
||||||
|
"version": 1
|
||||||
|
},
|
||||||
|
"net_format_name": "",
|
||||||
|
"page_layout_descr_file": "",
|
||||||
|
"plot_directory": "",
|
||||||
|
"spice_current_sheet_as_root": false,
|
||||||
|
"spice_external_command": "spice \"%I\"",
|
||||||
|
"spice_model_current_sheet_as_root": true,
|
||||||
|
"spice_save_all_currents": false,
|
||||||
|
"spice_save_all_voltages": false,
|
||||||
|
"subpart_first_id": 65,
|
||||||
|
"subpart_id_separator": 0
|
||||||
|
},
|
||||||
|
"sheets": [
|
||||||
|
[
|
||||||
|
"894f620e-3404-4a40-a2a7-513bc1d5f99b",
|
||||||
|
""
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"text_variables": {}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
(kicad_sch (version 20230121) (generator eeschema)
|
||||||
|
|
||||||
|
(uuid 894f620e-3404-4a40-a2a7-513bc1d5f99b)
|
||||||
|
|
||||||
|
(paper "A4")
|
||||||
|
|
||||||
|
(title_block
|
||||||
|
(title "InstrumentVisor")
|
||||||
|
(rev "${REVISION}")
|
||||||
|
(company "Kitsune Scientific")
|
||||||
|
)
|
||||||
|
|
||||||
|
(lib_symbols
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
(sheet_instances
|
||||||
|
(path "/" (page "1"))
|
||||||
|
)
|
||||||
|
)
|
|
@ -0,0 +1,3 @@
|
||||||
|
# External Libraries
|
||||||
|
|
||||||
|
Add external libraries here: `git submodule add <url>`
|
|
@ -0,0 +1,3 @@
|
||||||
|
# Stencils and Templates
|
||||||
|
|
||||||
|
Assembly jigs and tools.
|
Binary file not shown.
|
@ -0,0 +1,230 @@
|
||||||
|
kibot:
|
||||||
|
version: 1
|
||||||
|
# Look into pcb_replace, looks sick! Also sch_replace
|
||||||
|
|
||||||
|
preflight:
|
||||||
|
run_erc: true
|
||||||
|
update_xml: true
|
||||||
|
run_drc: false
|
||||||
|
check_zone_fills: false
|
||||||
|
ignore_unconnected: false
|
||||||
|
|
||||||
|
# Replace variables
|
||||||
|
set_text_variables:
|
||||||
|
- name: "REVISION"
|
||||||
|
command: "git rev-parse --short HEAD"
|
||||||
|
- name: "FULL_REVISION"
|
||||||
|
command: "git describe --always --tags"
|
||||||
|
- name: "ISSUE"
|
||||||
|
command: "date '+%Y-%m-%d'"
|
||||||
|
# - name: "KENWOODFOX_3DMODELS" # My custom libs!
|
||||||
|
# command: "echo 'Hardware/InstrumentVisor/Libraries/kenwoodfox-kicad-libraries/3d'"
|
||||||
|
|
||||||
|
filters:
|
||||||
|
- name: only_jlc_parts
|
||||||
|
comment: "Only parts with JLC code"
|
||||||
|
type: generic
|
||||||
|
include_only:
|
||||||
|
- column: "LCSC#"
|
||||||
|
regex: '^C\d+'
|
||||||
|
|
||||||
|
variants:
|
||||||
|
- name: rotated
|
||||||
|
comment: "Just a place holder for the rotation filter"
|
||||||
|
type: kibom
|
||||||
|
variant: rotated
|
||||||
|
pre_transform: _rot_footprint
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- name: "Images"
|
||||||
|
comment: "Schematics and media for use in docs"
|
||||||
|
type: svg_sch_print
|
||||||
|
|
||||||
|
- name: "3D Models"
|
||||||
|
comment: "3D Models"
|
||||||
|
type: step
|
||||||
|
|
||||||
|
- name: "3D Renders"
|
||||||
|
comment: "3D Renders for docs!"
|
||||||
|
type: render_3d
|
||||||
|
options:
|
||||||
|
ray_tracing: true
|
||||||
|
rotate_x: -1
|
||||||
|
rotate_y: 2
|
||||||
|
zoom: 3
|
||||||
|
wait_render: 20
|
||||||
|
width: 800
|
||||||
|
|
||||||
|
# ======
|
||||||
|
# PCBWay
|
||||||
|
# ======
|
||||||
|
|
||||||
|
- name: PCBWay_gerbers
|
||||||
|
comment: Gerbers compatible with PCBWay
|
||||||
|
type: gerber
|
||||||
|
dir: PCBWay
|
||||||
|
options:
|
||||||
|
exclude_edge_layer: true
|
||||||
|
exclude_pads_from_silkscreen: true
|
||||||
|
plot_sheet_reference: false
|
||||||
|
plot_footprint_refs: true
|
||||||
|
plot_footprint_values: true
|
||||||
|
force_plot_invisible_refs_vals: false
|
||||||
|
tent_vias: true
|
||||||
|
use_protel_extensions: true
|
||||||
|
create_gerber_job_file: false
|
||||||
|
output: "%f.%x"
|
||||||
|
gerber_precision: 4.6
|
||||||
|
use_gerber_x2_attributes: false
|
||||||
|
use_gerber_net_attributes: false
|
||||||
|
disable_aperture_macros: true
|
||||||
|
line_width: 0.1
|
||||||
|
subtract_mask_from_silk: false
|
||||||
|
inner_extension_pattern: ".gl%N"
|
||||||
|
layers:
|
||||||
|
- copper
|
||||||
|
- F.SilkS
|
||||||
|
- B.SilkS
|
||||||
|
- F.Mask
|
||||||
|
- B.Mask
|
||||||
|
- F.Paste
|
||||||
|
- B.Paste
|
||||||
|
- Edge.Cuts
|
||||||
|
|
||||||
|
- name: PCBWay_drill
|
||||||
|
comment: Drill files compatible with PCBWay
|
||||||
|
type: excellon
|
||||||
|
dir: PCBWay
|
||||||
|
options:
|
||||||
|
metric_units: false
|
||||||
|
minimal_header: true
|
||||||
|
zeros_format: SUPPRESS_LEADING
|
||||||
|
# left_digits: 3
|
||||||
|
# right_digits: 3
|
||||||
|
# See https://github.com/INTI-CMNB/kicad-ci-test-spora/issues/1
|
||||||
|
# and https://docs.oshpark.com/design-tools/gerbv/fix-drill-format/
|
||||||
|
left_digits: 2
|
||||||
|
right_digits: 4
|
||||||
|
pth_and_npth_single_file: false
|
||||||
|
pth_id: ""
|
||||||
|
npth_id: "-NPTH"
|
||||||
|
output: "%f%i.drl"
|
||||||
|
|
||||||
|
- name: PCBWay
|
||||||
|
comment: ZIP file for PCBWay
|
||||||
|
type: compress
|
||||||
|
dir: PCBWay
|
||||||
|
options:
|
||||||
|
format: ZIP
|
||||||
|
files:
|
||||||
|
- from_output: PCBWay_gerbers
|
||||||
|
dest: /
|
||||||
|
- from_output: PCBWay_drill
|
||||||
|
dest: /
|
||||||
|
|
||||||
|
# ======
|
||||||
|
# JLCPCB
|
||||||
|
# ======
|
||||||
|
|
||||||
|
- name: JLCPCB_gerbers
|
||||||
|
comment: Gerbers compatible with JLCPCB
|
||||||
|
type: gerber
|
||||||
|
dir: JLCPCB
|
||||||
|
options:
|
||||||
|
exclude_edge_layer: true
|
||||||
|
exclude_pads_from_silkscreen: true
|
||||||
|
plot_sheet_reference: false
|
||||||
|
plot_footprint_refs: true
|
||||||
|
plot_footprint_values: true
|
||||||
|
force_plot_invisible_refs_vals: false
|
||||||
|
tent_vias: true
|
||||||
|
use_protel_extensions: true
|
||||||
|
create_gerber_job_file: false
|
||||||
|
disable_aperture_macros: true
|
||||||
|
gerber_precision: 4.6
|
||||||
|
use_gerber_x2_attributes: false
|
||||||
|
use_gerber_net_attributes: false
|
||||||
|
line_width: 0.1
|
||||||
|
subtract_mask_from_silk: true
|
||||||
|
inner_extension_pattern: ".gp%n"
|
||||||
|
layers:
|
||||||
|
- copper
|
||||||
|
- F.SilkS
|
||||||
|
- B.SilkS
|
||||||
|
- F.Mask
|
||||||
|
- B.Mask
|
||||||
|
- F.Paste
|
||||||
|
- B.Paste
|
||||||
|
- Edge.Cuts
|
||||||
|
|
||||||
|
- name: JLCPCB_drill
|
||||||
|
comment: Drill files compatible with JLCPCB
|
||||||
|
type: excellon
|
||||||
|
dir: JLCPCB
|
||||||
|
options:
|
||||||
|
pth_and_npth_single_file: false
|
||||||
|
pth_id: "-PTH"
|
||||||
|
npth_id: "-NPTH"
|
||||||
|
metric_units: true
|
||||||
|
map: gerber
|
||||||
|
route_mode_for_oval_holes: false
|
||||||
|
output: "%f%i.%x"
|
||||||
|
|
||||||
|
- name: "JLCPCB_position"
|
||||||
|
comment: "Pick and place file, JLCPCB style"
|
||||||
|
type: position
|
||||||
|
options:
|
||||||
|
variant: rotated
|
||||||
|
output: "%f_cpl_jlc.%x"
|
||||||
|
format: CSV
|
||||||
|
units: millimeters
|
||||||
|
separate_files_for_front_and_back: false
|
||||||
|
only_smd: true
|
||||||
|
columns:
|
||||||
|
- id: Ref
|
||||||
|
name: Designator
|
||||||
|
- Val
|
||||||
|
- Package
|
||||||
|
- id: PosX
|
||||||
|
name: "Mid X"
|
||||||
|
- id: PosY
|
||||||
|
name: "Mid Y"
|
||||||
|
- id: Rot
|
||||||
|
name: Rotation
|
||||||
|
- id: Side
|
||||||
|
name: Layer
|
||||||
|
|
||||||
|
- name: "JLCPCB_bom"
|
||||||
|
comment: "BoM for JLCPCB"
|
||||||
|
type: bom
|
||||||
|
options:
|
||||||
|
output: "%f_%i_jlc.%x"
|
||||||
|
exclude_filter: "only_jlc_parts"
|
||||||
|
ref_separator: ","
|
||||||
|
columns:
|
||||||
|
- field: Value
|
||||||
|
name: Comment
|
||||||
|
- field: References
|
||||||
|
name: Designator
|
||||||
|
- Footprint
|
||||||
|
- field: "LCSC#"
|
||||||
|
name: "LCSC Part #"
|
||||||
|
csv:
|
||||||
|
hide_pcb_info: true
|
||||||
|
hide_stats_info: true
|
||||||
|
quote_all: true
|
||||||
|
|
||||||
|
- name: JLCPCB
|
||||||
|
comment: ZIP file for JLCPCB
|
||||||
|
type: compress
|
||||||
|
dir: JLCPCB
|
||||||
|
options:
|
||||||
|
files:
|
||||||
|
- from_output: JLCPCB_gerbers
|
||||||
|
dest: /
|
||||||
|
- from_output: JLCPCB_drill
|
||||||
|
dest: /
|
||||||
|
- from_output: JLCPCB_position
|
||||||
|
dest: /
|
||||||
|
- from_output: JLCPCB_bom
|
||||||
|
dest: /
|
|
@ -0,0 +1,37 @@
|
||||||
|
[](https://github.com/Kenwood/InstrumentVisor/actions/workflows/docs_workflow.yml)
|
||||||
|
[](https://github.com/Kenwood/InstrumentVisor/actions/workflows/hardware_workflow.yml)
|
||||||
|
[](https://github.com/Kenwood/InstrumentVisor/actions/workflows/firmware_workflow.yml)
|
||||||
|
|
||||||
|
|
||||||
|
# InstrumentVisor
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
This repo contains all the firmware and hardware for the InstrumentVisor.
|
||||||
|
|
||||||
|
If you're looking for the latest docs/builds, see our [Releases Page](https://github.com/Kenwood/InstrumentVisor/releases).
|
||||||
|
|
||||||
|
# Getting Started
|
||||||
|
|
||||||
|
First, clone this repo (and optionally checkout a branch)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
git clone https://github.com/Kenwood/InstrumentVisor.git
|
||||||
|
cd InstrumentVisor
|
||||||
|
```
|
||||||
|
|
||||||
|
# Init Submodules
|
||||||
|
|
||||||
|
Some libraries and resources are included as submodules, run the following
|
||||||
|
command to initialize them before opening the main sch
|
||||||
|
|
||||||
|
(If you get a missing library error, make sure to do this)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
git submodule update --init --recursive
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Project Layout
|
||||||
|
|
||||||
|
If you want to use this project template for yourself, you can find it [here!](https://github.com/KenwoodFox/Project-Template)
|
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
Loading…
Reference in New Issue