Merge pull request #1107 from rcarteraz/update-development-reference-material

Update Development Reference Material
This commit is contained in:
rcarteraz 2024-03-10 18:07:49 -07:00 committed by GitHub
commit 3bf4a26365
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 170 additions and 12 deletions

View file

@ -2,33 +2,65 @@
id: github
title: GitHub
sidebar_label: GitHub
sidebar_position: 3
---
## Overview
All of Meshtastic's code and documentation is hosted on GitHub. If you would like to contribute to the project, having a GitHub account is an important step to doing so.
The Meshtastic project is hosted on GitHub, a popular web-based platform for version control and collaborative software development. GitHub allows developers to manage and track changes to their code, collaborate with others, and distribute their work.
## Set up GitHub account
If you want to contribute to the Meshtastic project or simply stay up-to-date with the latest developments, you'll need a GitHub account.
- Go to [github.com](https://github.com)
- Click `Sign Up`
## Setting up a GitHub Account
1. Go to [github.com](https://github.com)
2. Click on the "Sign up" button in the top right corner.
3. Follow the on-screen instructions to create your account.
With a GitHub account, you can:
- Access and view the Meshtastic project repositories.
- Report issues or bugs you encounter.
- Propose changes or new features through pull requests.
- Discuss and collaborate with other contributors.
## Meshtastic on GitHub
The Meshtastic project is organized under the [meshtastic GitHub organization](https://github.com/meshtastic). Here are some of the main repositories:
- [firmware](https://github.com/meshtastic/firmware): The firmware code for Meshtastic devices.
- [Meshtastic-Android](https://github.com/meshtastic/Meshtastic-Android): The Android application for Meshtastic.
- [web](https://github.com/meshtastic/web): The Meshtastic Web Client.
- [protobufs](https://github.com/meshtastic/protobufs): The Protocol Buffer definitions used by Meshtastic.
- [Meshtastic-Apple](https://github.com/meshtastic/Meshtastic-Apple): Apple iOS, iPadOS & macOS Clients For Meshtastic.
- [meshtastic](https://github.com/meshtastic/meshtastic): The Meshtastic project website and documentation.
- [python](https://github.com/meshtastic/python): The Python CLI and API for communicating with Meshtastic devices.
## Contributing to Meshtastic
If you're interested in contributing to the Meshtastic project, you'll need to follow the contribution guidelines outlined in the project's repositories. These guidelines typically include instructions for setting up your development environment, coding conventions, and the process for submitting pull requests.
Additionally, many Meshtastic repositories include a `README.md` file that provides an overview of the project, installation instructions, and other relevant information.
## README Template
All Meshtastic developers should follow this convention when writing a README for a repository.
Repobeats images can be generated at [repobeats.axiom.co](https://repobeats.axiom.co/)
Meshtastic developers are encouraged to follow a consistent README format for new repositories. The template includes sections for an overview, getting started guide, documentation/API references, installation instructions, and compatibility information.
```markdown
# Repo name
# Repository Name
<!--Project specific badges here-->
<!--Crowdin Badge can be generated from https://crowdin.meshtastic.org/u/projects/<project_id>/crowdsource -->
[![Crowdin](https://badges.crowdin.net/e/<badge_id>/localized.svg)](https://crowdin.meshtastic.org/<project>)
[![CI](https://img.shields.io/github/actions/workflow/status/meshtastic/<repo>/ci.yml?branch=master&label=actions&logo=github&color=yellow)](https://github.com/meshtastic/<repo>/actions/workflows/ci.yml)
[![CLA assistant](https://cla-assistant.io/readme/badge/meshtastic/<repo>)](https://cla-assistant.io/meshtastic/<repo>)
[![Fiscal Contributors](https://opencollective.com/meshtastic/tiers/badge.svg?label=Fiscal%20Contributors&color=deeppink)](https://opencollective.com/meshtastic/)
[![Vercel](https://img.shields.io/static/v1?label=Powered%20by&message=Vercel&style=flat&logo=vercel&color=000000)](https://vercel.com?utm_source=meshtastic&utm_campaign=oss)
## Overview

View file

@ -0,0 +1,110 @@
---
id: gnss-modules
title: Understanding GNSS Modules
sidebar_label: GNSS Modules
sidebar_position: 4
---
A detailed contribution from community contributor GPSFan which provides an in-depth look at GNSS modules, specifically focusing on u-blox modules, which could be useful for hardware devs designing devices for integrating GPS functionality into Meshtastic hardware projects.
## u-blox Module Types
### Clones
- Clones, like Beitian, Goouu Tech, BZGNSS & VKEL, can be functionally equivalent to u-blox parts, and will have their own label on the module.
- Sometimes, clones have the proper amount of flash and can be updated as new firmware comes out, sometimes not.
### Counterfeits
- Counterfeits usually use u-blox chips inside but have a u-blox looking label on the module with substandard circuitry inside.
### Fakes
- Fakes have a u-blox looking label, but all bets are off as to what's inside, often another Chinese chip or a 6010 with an M8 label.
Beware, most modules seen on Amazon, eBay, Banggood, Temu or AliExpress are in one of the above three categories.
### Genuine u-blox Modules
Digikey, Mouser, Arrow, u-blox and others sell genuine u-blox parts at premium prices.
## u-blox Chip Series
### Neo-6 Series
The Neo-6 is the oldest (although there are older u-blox 4 and 5 parts), most power hungry, least capable and lowest sensitivity module. The 6010 chip supports 50 channels.
### Neo-7 Series
The Neo-7 supports SBAS, GLONASS as well as GPS, and has some nice high precision parts (Neo-7P). The 7020 chip supports 56 channels.
### M8 Series
The M8 supports GPS, SBAS, GLONASS, QZSS, BieDou and Galileo, but can only support 3 major ones concurrently. QZSS and GPS should always be either enabled together or both disabled for M8 & above parts. The 8030 chip supports 72 channels.
### M9 Series
The M9 supports all the above constellations but can use 4 systems at once (SBAS and QZSS are augmentation systems and don't count in this number). The 9140 chip forms the basis of the M9, D9 and F9 products, the F9P being a very capable L1/L2 or L5 RTK capable product. The 9140 chip supports 92 channels.
### M10 Series
It is left as an exercise for the reader to read the product briefs for the M10 series. The 10050 chip supports 72 channels.
### Comparison to Other GNSS Chips
As a comparison:
- The Unicore UM980 has 1408 channels
- The Septentrio mosaic-T has 448 "hardware channels"
## u-blox Chip Configurations
The u-blox chips have several configurations that can be customized by the module maker:
- Flash size
- LNA
- TCXO
- SAW filter
- General circuit layout
## u-blox Firmware and Protocol
Each chip series supports a different and increasing protocol version. Beginning with 23.01, the legacy CFG commands were replaced with a different config method using the VALSET/VALGET/VALDEL series of commands. However, even up to protocol 34, many of the CFG commands still work. The new config method allows much finer grained configuration at the cost of complexity. Trying to support both legacy and new config methods can be challenging.
### Protocol Specification Levels
There are 3 levels of protocol specifications:
1. **Internal Use Only**: No one but u-blox employees see these, and they detail the entire firmware command set.
2. **NDA Restricted**: OEMs that buy lots of parts and sign an NDA have access to these. Few if any make it out into the wild, and they detail a subset of the internal specs.
3. **Public**: Can be downloaded by anyone off the u-blox website. These are a subset of the NDA restricted, and often contain errors and omissions.
### Libraries and Hidden Commands
- All u-blox firmwares support hidden or undocumented commands.
- SparkFun has a u-blox config library that uses the new method, it is very complete and very much overkill.
## Future u-blox Chips
There are new u-blox chips/modules in the pipeline, and in R&D, competing with the Chinese designed and produced parts like the UM980 and UC6580 should produce better and cheaper parts from u-blox (one would hope).
## Common GPS Problems
### Self-inflicted Problems
#### Attempting Indoor Fix
- Trying to get a fix indoors is never recommended.
- The GNSS signals are very weak, and anything between the antenna and the satellite (even the atmosphere) will degrade the signal.
- All indoor locations are not created equally in terms of signal reception.
#### Unrealistic Fix Time Expectations
- Expecting a fix immediately after power on is unrealistic.
- The time to first fix (TTFF) varies depending on whether it's a cold start (receiver has no time/almanac/ephemeris data), warm start, or hot start.
- A good receiver under ideal conditions can take up to 28 seconds for a cold start fix.
#### Impatient Timeout
Waiting too long for a fix when receiver parameters may have timed out, meaning it will never get a fix after that timeout period.
#### Using Sub-optimal Constellations
Using only one or two constellations when the receiver can receive many is a waste of hardware resources.
#### Poor Antenna Placement
- GNSS antennas are directional and don't have much gain.
- Putting the receiver in your pocket or not pointing the antenna towards the sky will reduce effectiveness.
### Other Causes
#### Hardware Design and Build Quality
- GNSS receivers operate at microwave frequencies, so signal path impedance and noise management are important.
- Using a good external antenna with LNA and SAW filter can reduce locally generated noise.
- Proper coaxial cables are also crucial.
#### Cost Cutting
An overly aggressive approach to cost reduction can degrade performance incrementally to the point of making the receiver useless.
#### Aggressive Power Management
Most receivers have aggressive power management modes that can hamper acquisition/tracking if combined with a poor view of the sky.
#### Incorrect Initialization
Supporting multi-generational products and different receiver manufacturers makes properly initializing the receiver challenging.

View file

@ -2,7 +2,10 @@
id: lora-design
title: LoRa Design Guide
sidebar_label: LoRa Datasheet
sidebar_position: 1
sidebar_position: 2
---
- [LoRa Design Guide Datasheet](/documents/LoRa_Design_Guide.pdf)
## Useful Resources
### [LoRa Modem Design Guide](/documents/LoRa_Design_Guide.pdf)
- A guide from Semtech explaining the key principles and design parameters behind LoRa modulation and their SX1272/3/6/7/8 LoRa modem chips. Helpful for understanding core LoRa concepts like spreading factor, bandwidth, time on air, sensitivity etc.

View file

@ -1,8 +1,21 @@
---
id: protobufs
title: Protobufs
sidebar_label: Protobufs
sidebar_position: 1
---
## Overview
Protobufs are used by Meshtastic software to send and receive data between App and Device and Device to Device.
Protocol Buffers, commonly referred to as Protobufs, are a language-neutral, platform-neutral, extensible mechanism for serializing structured data. They are used by Meshtastic software for encoding and transmitting data between the App and Device, as well as for Device-to-Device communication.
Documentation on the Meshtastic Protobuf messages can be found on the [BSR(Buf Schema Registry)](https://buf.build/meshtastic/protobufs).
Protobufs provide a efficient and lightweight way of exchanging data, making them well-suited for use in resource-constrained environments like the Meshtastic network. They offer several advantages over traditional data formats like XML or JSON, including:
- Smaller serialized size: Protobuf serialized data is typically much smaller than XML or JSON representations of the same data.
- Faster serialization and deserialization: Protobufs are designed to be serialized and deserialized quickly, which is important for applications that need to process large amounts of data.
- Type-safe and self-describing: Protobuf messages are type-safe, and the message formats are self-describing, making it easier to work with and maintain the data over time.
## Meshtastic Protobufs
The Meshtastic project defines its own set of Protobuf messages for various types of data exchanged between app-device and device-device. These messages are organized into different modules.
The official documentation for the Meshtastic Protobuf messages can be found on the [Buf Schema Registry (BSR)](https://buf.build/meshtastic/protobufs). The BSR provides a centralized location for managing and documenting the Protobuf schemas used by the project.