├── .github
└── FUNDING.yml
├── .gitignore
├── .metadata
├── LICENSE
├── README.md
├── all_lint_rules.yaml
├── analysis_options.yaml
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ ├── google-services.json
│ ├── proguard-rules.pro
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── example
│ │ │ │ └── meshx
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable-hdpi
│ │ │ └── splash.png
│ │ │ ├── drawable-mdpi
│ │ │ └── splash.png
│ │ │ ├── drawable-night-v21
│ │ │ ├── background.png
│ │ │ └── launch_background.xml
│ │ │ ├── drawable-night
│ │ │ ├── background.png
│ │ │ └── launch_background.xml
│ │ │ ├── drawable-v21
│ │ │ ├── background.png
│ │ │ └── launch_background.xml
│ │ │ ├── drawable-xhdpi
│ │ │ └── splash.png
│ │ │ ├── drawable-xxhdpi
│ │ │ └── splash.png
│ │ │ ├── drawable-xxxhdpi
│ │ │ └── splash.png
│ │ │ ├── drawable
│ │ │ ├── background.png
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── values-night-v31
│ │ │ └── styles.xml
│ │ │ ├── values-night
│ │ │ └── styles.xml
│ │ │ ├── values-v31
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── assets
├── meshx.png
└── meshx.svg
├── firebase.json
├── flutter_native_splash.yaml
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Podfile
├── Podfile.lock
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
├── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-50x50@1x.png
│ │ │ ├── Icon-App-50x50@2x.png
│ │ │ ├── Icon-App-57x57@1x.png
│ │ │ ├── Icon-App-57x57@2x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-72x72@1x.png
│ │ │ ├── Icon-App-72x72@2x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ ├── LaunchBackground.imageset
│ │ │ ├── Contents.json
│ │ │ ├── background.png
│ │ │ └── darkbackground.png
│ │ └── LaunchImage.imageset
│ │ │ ├── Contents.json
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ └── README.md
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── GoogleService-Info.plist
│ ├── Info.plist
│ ├── Runner-Bridging-Header.h
│ └── Runner.entitlements
├── RunnerTests
│ └── RunnerTests.swift
└── firebase_app_id_file.json
├── lib
├── constants
│ ├── app_constants.dart
│ ├── ble_constants.dart
│ ├── meshtastic_constants.dart
│ └── telemetry_intervals.dart
├── exceptions
│ └── mesh_radio_exception.dart
├── firebase_options.dart
├── main.dart
├── models
│ ├── ble_characteristics.dart
│ ├── chat_type.dart
│ ├── mesh_channel.dart
│ ├── mesh_channel.freezed.dart
│ ├── mesh_node.dart
│ ├── mesh_node.freezed.dart
│ ├── mesh_radio.dart
│ ├── radio_configuration.dart
│ ├── radio_configuration.freezed.dart
│ ├── radio_connection_status.dart
│ ├── radio_connector_state.dart
│ ├── radio_scan_state.dart
│ ├── radio_scan_state.freezed.dart
│ ├── telemetry_state.dart
│ ├── telemetry_state.freezed.dart
│ ├── text_message.dart
│ ├── text_message.freezed.dart
│ ├── text_message_status.dart
│ ├── timed_telemetry.dart
│ ├── traceroute_response.dart
│ └── traceroute_response.freezed.dart
├── protobufs
│ ├── generated
│ │ ├── meshtastic
│ │ │ ├── admin.pb.dart
│ │ │ ├── admin.pbenum.dart
│ │ │ ├── admin.pbjson.dart
│ │ │ ├── admin.pbserver.dart
│ │ │ ├── apponly.pb.dart
│ │ │ ├── apponly.pbenum.dart
│ │ │ ├── apponly.pbjson.dart
│ │ │ ├── apponly.pbserver.dart
│ │ │ ├── atak.pb.dart
│ │ │ ├── atak.pbenum.dart
│ │ │ ├── atak.pbjson.dart
│ │ │ ├── atak.pbserver.dart
│ │ │ ├── cannedmessages.pb.dart
│ │ │ ├── cannedmessages.pbenum.dart
│ │ │ ├── cannedmessages.pbjson.dart
│ │ │ ├── cannedmessages.pbserver.dart
│ │ │ ├── channel.pb.dart
│ │ │ ├── channel.pbenum.dart
│ │ │ ├── channel.pbjson.dart
│ │ │ ├── channel.pbserver.dart
│ │ │ ├── clientonly.pb.dart
│ │ │ ├── clientonly.pbenum.dart
│ │ │ ├── clientonly.pbjson.dart
│ │ │ ├── clientonly.pbserver.dart
│ │ │ ├── config.pb.dart
│ │ │ ├── config.pbenum.dart
│ │ │ ├── config.pbjson.dart
│ │ │ ├── config.pbserver.dart
│ │ │ ├── connection_status.pb.dart
│ │ │ ├── connection_status.pbenum.dart
│ │ │ ├── connection_status.pbjson.dart
│ │ │ ├── connection_status.pbserver.dart
│ │ │ ├── deviceonly.pb.dart
│ │ │ ├── deviceonly.pbenum.dart
│ │ │ ├── deviceonly.pbjson.dart
│ │ │ ├── deviceonly.pbserver.dart
│ │ │ ├── localonly.pb.dart
│ │ │ ├── localonly.pbenum.dart
│ │ │ ├── localonly.pbjson.dart
│ │ │ ├── localonly.pbserver.dart
│ │ │ ├── mesh.pb.dart
│ │ │ ├── mesh.pbenum.dart
│ │ │ ├── mesh.pbjson.dart
│ │ │ ├── mesh.pbserver.dart
│ │ │ ├── module_config.pb.dart
│ │ │ ├── module_config.pbenum.dart
│ │ │ ├── module_config.pbjson.dart
│ │ │ ├── module_config.pbserver.dart
│ │ │ ├── mqtt.pb.dart
│ │ │ ├── mqtt.pbenum.dart
│ │ │ ├── mqtt.pbjson.dart
│ │ │ ├── mqtt.pbserver.dart
│ │ │ ├── paxcount.pb.dart
│ │ │ ├── paxcount.pbenum.dart
│ │ │ ├── paxcount.pbjson.dart
│ │ │ ├── paxcount.pbserver.dart
│ │ │ ├── portnums.pb.dart
│ │ │ ├── portnums.pbenum.dart
│ │ │ ├── portnums.pbjson.dart
│ │ │ ├── portnums.pbserver.dart
│ │ │ ├── remote_hardware.pb.dart
│ │ │ ├── remote_hardware.pbenum.dart
│ │ │ ├── remote_hardware.pbjson.dart
│ │ │ ├── remote_hardware.pbserver.dart
│ │ │ ├── rtttl.pb.dart
│ │ │ ├── rtttl.pbenum.dart
│ │ │ ├── rtttl.pbjson.dart
│ │ │ ├── rtttl.pbserver.dart
│ │ │ ├── storeforward.pb.dart
│ │ │ ├── storeforward.pbenum.dart
│ │ │ ├── storeforward.pbjson.dart
│ │ │ ├── storeforward.pbserver.dart
│ │ │ ├── telemetry.pb.dart
│ │ │ ├── telemetry.pbenum.dart
│ │ │ ├── telemetry.pbjson.dart
│ │ │ ├── telemetry.pbserver.dart
│ │ │ ├── xmodem.pb.dart
│ │ │ ├── xmodem.pbenum.dart
│ │ │ ├── xmodem.pbjson.dart
│ │ │ └── xmodem.pbserver.dart
│ │ ├── nanopb.pb.dart
│ │ ├── nanopb.pbenum.dart
│ │ ├── nanopb.pbjson.dart
│ │ └── nanopb.pbserver.dart
│ ├── meshtastic
│ │ ├── admin.options
│ │ ├── admin.proto
│ │ ├── apponly.options
│ │ ├── apponly.proto
│ │ ├── atak.options
│ │ ├── atak.proto
│ │ ├── cannedmessages.options
│ │ ├── cannedmessages.proto
│ │ ├── channel.options
│ │ ├── channel.proto
│ │ ├── clientonly.options
│ │ ├── clientonly.proto
│ │ ├── config.options
│ │ ├── config.proto
│ │ ├── connection_status.options
│ │ ├── connection_status.proto
│ │ ├── deviceonly.options
│ │ ├── deviceonly.proto
│ │ ├── localonly.proto
│ │ ├── mesh.options
│ │ ├── mesh.proto
│ │ ├── module_config.options
│ │ ├── module_config.proto
│ │ ├── mqtt.options
│ │ ├── mqtt.proto
│ │ ├── paxcount.proto
│ │ ├── portnums.proto
│ │ ├── remote_hardware.proto
│ │ ├── rtttl.options
│ │ ├── rtttl.proto
│ │ ├── storeforward.options
│ │ ├── storeforward.proto
│ │ ├── telemetry.options
│ │ ├── telemetry.proto
│ │ ├── xmodem.options
│ │ └── xmodem.proto
│ └── nanopb.proto
├── providers
│ ├── ack_waiting_radio_writer.dart
│ ├── ack_waiting_radio_writer.g.dart
│ ├── ble
│ │ ├── ble_characteristics_finder.dart
│ │ ├── ble_characteristics_finder.g.dart
│ │ ├── ble_permissions_requester.dart
│ │ ├── ble_permissions_requester.g.dart
│ │ ├── ble_radio_connector.dart
│ │ ├── ble_radio_connector.g.dart
│ │ ├── ble_radio_scanner.dart
│ │ └── ble_radio_scanner.g.dart
│ ├── breadcrumb_logger.dart
│ ├── breadcrumb_logger.g.dart
│ ├── channel_service.dart
│ ├── channel_service.g.dart
│ ├── node
│ │ ├── hops_away.dart
│ │ ├── hops_away.g.dart
│ │ ├── node_search.dart
│ │ ├── node_search.g.dart
│ │ ├── node_service.dart
│ │ └── node_service.g.dart
│ ├── notifications.dart
│ ├── notifications.g.dart
│ ├── radio_config
│ │ ├── radio_config_downloader_service.dart
│ │ ├── radio_config_downloader_service.g.dart
│ │ ├── radio_config_service.dart
│ │ ├── radio_config_service.g.dart
│ │ ├── radio_config_uploader_service.dart
│ │ └── radio_config_uploader_service.g.dart
│ ├── radio_connector_service.dart
│ ├── radio_connector_service.g.dart
│ ├── radio_reader.dart
│ ├── radio_reader.g.dart
│ ├── radio_writer.dart
│ ├── radio_writer.g.dart
│ ├── reconnector.dart
│ ├── reconnector.g.dart
│ ├── repository
│ │ ├── sqflite.dart
│ │ ├── sqflite.g.dart
│ │ ├── telemetry_repository.dart
│ │ ├── telemetry_repository.g.dart
│ │ ├── text_message_repository.dart
│ │ └── text_message_repository.g.dart
│ ├── router.dart
│ ├── router.g.dart
│ ├── tcp
│ │ ├── tcp_radio_connector.dart
│ │ ├── tcp_radio_connector.g.dart
│ │ ├── tcp_radio_scanner.dart
│ │ └── tcp_radio_scanner.g.dart
│ ├── telemetry
│ │ ├── telemetry_latest_streamer.dart
│ │ ├── telemetry_latest_streamer.g.dart
│ │ ├── telemetry_receiver.dart
│ │ ├── telemetry_receiver.g.dart
│ │ ├── telemetry_saver.dart
│ │ ├── telemetry_saver.g.dart
│ │ ├── telemetry_streamer.dart
│ │ └── telemetry_streamer.g.dart
│ ├── text_message
│ │ ├── text_message_receiver_service.dart
│ │ ├── text_message_receiver_service.g.dart
│ │ ├── text_message_sender_service.dart
│ │ ├── text_message_sender_service.g.dart
│ │ ├── text_message_status_service.dart
│ │ ├── text_message_status_service.g.dart
│ │ ├── text_message_stream_service.dart
│ │ └── text_message_stream_service.g.dart
│ ├── traceroute.dart
│ ├── traceroute.g.dart
│ └── wrap
│ │ ├── flutter_blue_plus_mockable.dart
│ │ ├── flutter_blue_plus_mockable.g.dart
│ │ ├── local_platform.dart
│ │ ├── local_platform.g.dart
│ │ ├── permissions.dart
│ │ ├── permissions.g.dart
│ │ ├── socket.dart
│ │ └── socket.g.dart
├── repository
│ ├── telemetry_repository.dart
│ └── text_message_repository.dart
├── screens
│ ├── channel_list.dart
│ ├── chat.dart
│ ├── config
│ │ ├── bt_config.dart
│ │ ├── channel_qr_scanner.dart
│ │ ├── channels_config.dart
│ │ ├── lora_config.dart
│ │ ├── telemetry_config.dart
│ │ └── user_config.dart
│ ├── map.dart
│ ├── node_info.dart
│ ├── nodes.dart
│ ├── radio_config.dart
│ ├── radio_connection.dart
│ ├── tab_parent.dart
│ ├── telemetry_log.dart
│ └── utils
│ │ ├── confirmation_dialog.dart
│ │ └── snackbar_message.dart
├── services
│ ├── ack_waiting_radio_writer.dart
│ ├── ble
│ │ ├── ble_characteristics_finder.dart
│ │ ├── ble_permissions_requester.dart
│ │ ├── ble_radio_reader.dart
│ │ └── ble_radio_writer.dart
│ ├── breadcrumb_logger.dart
│ ├── interfaces
│ │ ├── radio_connector.dart
│ │ ├── radio_reader.dart
│ │ └── radio_writer.dart
│ ├── null
│ │ ├── null_reader.dart
│ │ └── null_writer.dart
│ ├── radio_config
│ │ ├── radio_config_downloader_service.dart
│ │ └── radio_config_uploader_service.dart
│ ├── tcp
│ │ ├── tcp_radio_reader.dart
│ │ └── tcp_radio_writer.dart
│ ├── telemetry
│ │ └── telemetry_receiver.dart
│ ├── text_message
│ │ ├── text_message_receiver_service.dart
│ │ └── text_message_stream_service.dart
│ └── wrap
│ │ ├── flutter_blue_plus_mockable.dart
│ │ ├── permissions.dart
│ │ └── socket_mockable.dart
├── theme.dart
├── utils
│ ├── extensions.dart
│ └── splay_tree_map_with_default.dart
└── widgets
│ ├── app_bar_connection_indicator.dart
│ ├── channel_card.dart
│ ├── channel_input_form.dart
│ ├── channel_qr_show.dart
│ ├── connected_radio.dart
│ ├── connection_icon.dart
│ ├── manual_network_address_input.dart
│ ├── message_bubble.dart
│ ├── message_input.dart
│ ├── message_list.dart
│ ├── node_card.dart
│ ├── radio_choice_tile.dart
│ ├── scroll_button.dart
│ ├── text_message_status_indicator.dart
│ └── traceroute_modal.dart
├── macos
├── .gitignore
├── Flutter
│ ├── Flutter-Debug.xcconfig
│ ├── Flutter-Release.xcconfig
│ └── GeneratedPluginRegistrant.swift
├── Podfile
├── Podfile.lock
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ └── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── app_icon_1024.png
│ │ │ ├── app_icon_128.png
│ │ │ ├── app_icon_16.png
│ │ │ ├── app_icon_256.png
│ │ │ ├── app_icon_32.png
│ │ │ ├── app_icon_512.png
│ │ │ └── app_icon_64.png
│ ├── Base.lproj
│ │ └── MainMenu.xib
│ ├── Configs
│ │ ├── AppInfo.xcconfig
│ │ ├── Debug.xcconfig
│ │ ├── Release.xcconfig
│ │ └── Warnings.xcconfig
│ ├── DebugProfile.entitlements
│ ├── GoogleService-Info.plist
│ ├── Info.plist
│ ├── MainFlutterWindow.swift
│ └── Release.entitlements
├── RunnerTests
│ └── RunnerTests.swift
└── firebase_app_id_file.json
├── pubspec.lock
├── pubspec.yaml
├── sonar-project.properties
├── test
├── common.dart
├── mock_stream.dart
├── models
│ └── chat_type.dart
├── providers
│ ├── ble
│ │ ├── ble_radio_connector_test.dart
│ │ ├── ble_radio_connector_test.mocks.dart
│ │ ├── ble_radio_scanner_test.dart
│ │ └── ble_radio_scanner_test.mocks.dart
│ ├── channel_service_test.dart
│ ├── channel_service_test.mocks.dart
│ ├── node
│ │ ├── node_search_test.dart
│ │ ├── node_service_test.dart
│ │ └── node_service_test.mocks.dart
│ ├── radio_config
│ │ ├── radio_config_service_test.dart
│ │ └── radio_config_service_test.mocks.dart
│ ├── radio_connector_service_test.dart
│ ├── radio_connector_service_test.mocks.dart
│ ├── radio_reader_test.dart
│ ├── radio_reader_test.mocks.dart
│ ├── radio_writer_test.dart
│ ├── radio_writer_test.mocks.dart
│ ├── reconnector_test.dart
│ ├── reconnector_test.mocks.dart
│ ├── tcp
│ │ ├── tcp_radio_connector_test.dart
│ │ └── tcp_radio_connector_test.mocks.dart
│ └── text_message
│ │ ├── text_message_sender_service_test.dart
│ │ ├── text_message_sender_service_test.mocks.dart
│ │ ├── text_message_status_service_test.dart
│ │ └── text_message_status_service_test.mocks.dart
└── services
│ ├── ble
│ ├── ble_characteristics_finder_test.dart
│ ├── ble_characteristics_finder_test.mocks.dart
│ ├── ble_permissions_requester_test.dart
│ ├── ble_permissions_requester_test.mocks.dart
│ ├── ble_radio_reader_test.dart
│ ├── ble_radio_reader_test.mocks.dart
│ ├── ble_radio_writer_test.dart
│ └── ble_radio_writer_test.mocks.dart
│ ├── queued_radio_writer_test.dart
│ ├── queued_radio_writer_test.mocks.dart
│ ├── radio_config
│ ├── radio_config_downloader_service_test.dart
│ ├── radio_config_downloader_service_test.mocks.dart
│ ├── radio_config_uploader_service_test.dart
│ └── radio_config_uploader_service_test.mocks.dart
│ ├── tcp
│ ├── tcp_radio_reader_test.dart
│ ├── tcp_radio_reader_test.mocks.dart
│ ├── tcp_radio_writer_test.dart
│ └── tcp_radio_writer_test.mocks.dart
│ └── text_message
│ ├── text_message_receiver_service_test.dart
│ ├── text_message_receiver_service_test.mocks.dart
│ ├── text_message_stream_service_test.dart
│ └── text_message_stream_service_test.mocks.dart
└── windows
├── .gitignore
├── CMakeLists.txt
├── flutter
├── CMakeLists.txt
├── generated_plugin_registrant.cc
├── generated_plugin_registrant.h
└── generated_plugins.cmake
└── runner
├── CMakeLists.txt
├── Runner.rc
├── flutter_window.cpp
├── flutter_window.h
├── main.cpp
├── resource.h
├── resources
└── app_icon.ico
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: meshtastic
4 | patreon:
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: # Replace with a single Ko-fi username
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay:
10 | issuehunt: # Replace with a single IssueHunt username
11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
12 | polar: # Replace with a single Polar username
13 | buy_me_a_coffee:
14 | custom:
15 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 | migrate_working_dir/
12 |
13 | # IntelliJ related
14 | *.iml
15 | *.ipr
16 | *.iws
17 | .idea/
18 |
19 | # The .vscode folder contains launch configuration and tasks you configure in
20 | # VS Code which you may wish to be included in version control, so this line
21 | # is commented out by default.
22 | #.vscode/
23 |
24 | # Flutter/Dart/Pub related
25 | **/doc/api/
26 | **/ios/Flutter/.last_build_id
27 | .dart_tool/
28 | .flutter-plugins
29 | .flutter-plugins-dependencies
30 | .pub-cache/
31 | .pub/
32 | /build/
33 |
34 | # Symbolication related
35 | app.*.symbols
36 |
37 | # Obfuscation related
38 | app.*.map.json
39 |
40 | # Android Studio will place build artifacts here
41 | /android/app/debug
42 | /android/app/profile
43 | /android/app/release
44 |
45 | # Sonar
46 | .scannerwork/
47 | tests.output
48 |
49 | coverage/lcov.info
50 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: "54e66469a933b60ddf175f858f82eaeb97e48c8d"
8 | channel: "stable"
9 |
10 | project_type: app
11 |
12 | # Tracks metadata for the flutter migrate command
13 | migration:
14 | platforms:
15 | - platform: root
16 | create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
17 | base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
18 | - platform: windows
19 | create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
20 | base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
21 |
22 | # User provided section
23 |
24 | # List of Local paths (relative to this file) that should be
25 | # ignored by the migrate tool.
26 | #
27 | # Files that are not part of the templates will be ignored by default.
28 | unmanaged_files:
29 | - 'lib/main.dart'
30 | - 'ios/Runner.xcodeproj/project.pbxproj'
31 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # multimesh
2 |
3 | A cross-platform Meshtastic® client based on Flutter
4 |
5 | ## Screenshots
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | ## Nightly builds
16 | [](https://app.bitrise.io/app/39797fbe-e2bc-4938-9ef2-6552671f060c?commit_message=Nightly)
17 |
18 | ## Legal
19 | Meshtastic® is a registered trademark of Meshtastic LLC. Meshtastic software components are released under various licenses, see GitHub for details. No warranty is provided - use at your own risk.
20 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 | **/*.keystore
13 | **/*.jks
14 |
--------------------------------------------------------------------------------
/android/app/google-services.json:
--------------------------------------------------------------------------------
1 | {
2 | "project_info": {
3 | "project_number": "194789291232",
4 | "project_id": "multimesh-9b515",
5 | "storage_bucket": "multimesh-9b515.appspot.com"
6 | },
7 | "client": [
8 | {
9 | "client_info": {
10 | "mobilesdk_app_id": "1:194789291232:android:401ede243a4a4fda7c8c85",
11 | "android_client_info": {
12 | "package_name": "xyz.paulocode.meshx"
13 | }
14 | },
15 | "oauth_client": [],
16 | "api_key": [
17 | {
18 | "current_key": "AIzaSyAEfgkOUPw7pNrfchQWmjp_xFhtiZFatyI"
19 | }
20 | ],
21 | "services": {
22 | "appinvite_service": {
23 | "other_platform_oauth_client": []
24 | }
25 | }
26 | }
27 | ],
28 | "configuration_version": "1"
29 | }
--------------------------------------------------------------------------------
/android/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/example/meshx/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package xyz.paulocode.meshx
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity : FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/android/app/src/main/res/drawable-hdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-mdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/android/app/src/main/res/drawable-mdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-night-v21/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/android/app/src/main/res/drawable-night-v21/background.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-night-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
7 |
8 | -
9 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-night/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/android/app/src/main/res/drawable-night/background.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-night/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
7 |
8 | -
9 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/android/app/src/main/res/drawable-v21/background.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
7 |
8 | -
9 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/android/app/src/main/res/drawable-xhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/android/app/src/main/res/drawable-xxhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxxhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/android/app/src/main/res/drawable-xxxhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/android/app/src/main/res/drawable/background.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
7 |
8 | -
9 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night-v31/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
16 |
19 |
20 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
13 |
19 |
22 |
23 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values-v31/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
16 |
19 |
20 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
13 |
19 |
22 |
23 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.8.0'
3 | repositories {
4 | google()
5 | mavenCentral()
6 | }
7 |
8 | dependencies {
9 | // START: FlutterFire Configuration
10 | classpath 'com.google.gms:google-services:4.3.15'
11 | classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'
12 | // END: FlutterFire Configuration
13 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
14 | }
15 | }
16 |
17 | allprojects {
18 | repositories {
19 | google()
20 | mavenCentral()
21 | }
22 | }
23 |
24 | rootProject.buildDir = '../build'
25 | subprojects {
26 | project.buildDir = "${rootProject.buildDir}/${project.name}"
27 | }
28 | subprojects {
29 | project.evaluationDependsOn(':app')
30 | }
31 |
32 | tasks.register("clean", Delete) {
33 | delete rootProject.buildDir
34 | }
35 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx4G
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | zipStoreBase=GRADLE_USER_HOME
4 | zipStorePath=wrapper/dists
5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.4-all.zip
6 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | def flutterSdkPath = {
3 | def properties = new Properties()
4 | file("local.properties").withInputStream { properties.load(it) }
5 | def flutterSdkPath = properties.getProperty("flutter.sdk")
6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
7 | return flutterSdkPath
8 | }
9 | settings.ext.flutterSdkPath = flutterSdkPath()
10 |
11 | includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
12 |
13 | repositories {
14 | google()
15 | mavenCentral()
16 | gradlePluginPortal()
17 | }
18 |
19 | plugins {
20 | id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false
21 | }
22 | }
23 |
24 | plugins {
25 | id "dev.flutter.flutter-plugin-loader" version "1.0.0"
26 | id "com.android.application" version "7.3.0" apply false
27 | }
28 |
29 | include ":app"
30 |
--------------------------------------------------------------------------------
/assets/meshx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/assets/meshx.png
--------------------------------------------------------------------------------
/assets/meshx.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/firebase.json:
--------------------------------------------------------------------------------
1 | {"flutter":{"platforms":{"android":{"default":{"projectId":"multimesh-9b515","appId":"1:194789291232:android:401ede243a4a4fda7c8c85","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"multimesh-9b515","appId":"1:194789291232:ios:b601f3edbb6827e17c8c85","uploadDebugSymbols":true,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"macos":{"default":{"projectId":"multimesh-9b515","appId":"1:194789291232:ios:b601f3edbb6827e17c8c85","uploadDebugSymbols":true,"fileOutput":"macos/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"multimesh-9b515","configurations":{"android":"1:194789291232:android:401ede243a4a4fda7c8c85","ios":"1:194789291232:ios:b601f3edbb6827e17c8c85","macos":"1:194789291232:ios:b601f3edbb6827e17c8c85"}}}}}}
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | **/dgph
2 | *.mode1v3
3 | *.mode2v3
4 | *.moved-aside
5 | *.pbxuser
6 | *.perspectivev3
7 | **/*sync/
8 | .sconsign.dblite
9 | .tags*
10 | **/.vagrant/
11 | **/DerivedData/
12 | Icon?
13 | **/Pods/
14 | **/.symlinks/
15 | profile
16 | xcuserdata
17 | **/.generated/
18 | Flutter/App.framework
19 | Flutter/Flutter.framework
20 | Flutter/Flutter.podspec
21 | Flutter/Generated.xcconfig
22 | Flutter/ephemeral/
23 | Flutter/app.flx
24 | Flutter/app.zip
25 | Flutter/flutter_assets/
26 | Flutter/flutter_export_environment.sh
27 | ServiceDefinitions.json
28 | Runner/GeneratedPluginRegistrant.*
29 |
30 | # Exceptions to above rules.
31 | !default.mode1v3
32 | !default.mode2v3
33 | !default.pbxuser
34 | !default.perspectivev3
35 |
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 12.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment this line to define a global platform for your project
2 | # platform :ios, '12.0'
3 |
4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true'
6 |
7 | project 'Runner', {
8 | 'Debug' => :debug,
9 | 'Profile' => :release,
10 | 'Release' => :release,
11 | }
12 |
13 | def flutter_root
14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
15 | unless File.exist?(generated_xcode_build_settings_path)
16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
17 | end
18 |
19 | File.foreach(generated_xcode_build_settings_path) do |line|
20 | matches = line.match(/FLUTTER_ROOT\=(.*)/)
21 | return matches[1].strip if matches
22 | end
23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
24 | end
25 |
26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
27 |
28 | flutter_ios_podfile_setup
29 |
30 | target 'Runner' do
31 | use_frameworks!
32 | use_modular_headers!
33 |
34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
35 | target 'RunnerTests' do
36 | inherit! :search_paths
37 | end
38 | end
39 |
40 | post_install do |installer|
41 | installer.pods_project.targets.each do |target|
42 | flutter_additional_ios_build_settings(target)
43 | end
44 | end
45 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | SwiftFlutterForegroundTaskPlugin.setPluginRegistrantCallback(registerPlugins)
12 | if #available(iOS 10.0, *) {
13 | UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
14 | }
15 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
16 | }
17 | }
18 |
19 | func registerPlugins(registry: FlutterPluginRegistry) {
20 | GeneratedPluginRegistrant.register(with: registry)
21 | }
22 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": [
3 | {
4 | "filename": "background.png",
5 | "idiom": "universal"
6 | },
7 | {
8 | "appearances": [
9 | {
10 | "appearance": "luminosity",
11 | "value": "dark"
12 | }
13 | ],
14 | "filename": "darkbackground.png",
15 | "idiom": "universal"
16 | }
17 | ],
18 | "info": {
19 | "author": "xcode",
20 | "version": 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchBackground.imageset/darkbackground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/LaunchBackground.imageset/darkbackground.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": [
3 | {
4 | "filename": "LaunchImage.png",
5 | "idiom": "universal",
6 | "scale": "1x"
7 | },
8 | {
9 | "filename": "LaunchImage@2x.png",
10 | "idiom": "universal",
11 | "scale": "2x"
12 | },
13 | {
14 | "filename": "LaunchImage@3x.png",
15 | "idiom": "universal",
16 | "scale": "3x"
17 | }
18 | ],
19 | "info": {
20 | "author": "xcode",
21 | "version": 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paulocode/multimesh/d88a55776bd962225c6114673b3f20066e73f34f/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in
4 | this directory.
5 |
6 | You can also do it by opening your Flutter project's Xcode project
7 | with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and
8 | dropping in the desired images.
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/ios/Runner/GoogleService-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | API_KEY
6 | AIzaSyCm2mkgrd8WFEj81l8ix16I5QUCkqUap_U
7 | GCM_SENDER_ID
8 | 194789291232
9 | PLIST_VERSION
10 | 1
11 | BUNDLE_ID
12 | xyz.paulocode.meshx
13 | PROJECT_ID
14 | multimesh-9b515
15 | STORAGE_BUCKET
16 | multimesh-9b515.appspot.com
17 | IS_ADS_ENABLED
18 |
19 | IS_ANALYTICS_ENABLED
20 |
21 | IS_APPINVITE_ENABLED
22 |
23 | IS_GCM_ENABLED
24 |
25 | IS_SIGNIN_ENABLED
26 |
27 | GOOGLE_APP_ID
28 | 1:194789291232:ios:b601f3edbb6827e17c8c85
29 |
30 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 | #import
3 |
--------------------------------------------------------------------------------
/ios/Runner/Runner.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | aps-environment
6 | development
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/RunnerTests/RunnerTests.swift:
--------------------------------------------------------------------------------
1 | import Flutter
2 | import UIKit
3 | import XCTest
4 |
5 | class RunnerTests: XCTestCase {
6 |
7 | func testExample() {
8 | // If you add code to the Runner application, consider adding tests here.
9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/ios/firebase_app_id_file.json:
--------------------------------------------------------------------------------
1 | {
2 | "file_generated_by": "FlutterFire CLI",
3 | "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory",
4 | "GOOGLE_APP_ID": "1:194789291232:ios:b601f3edbb6827e17c8c85",
5 | "FIREBASE_PROJECT_ID": "multimesh-9b515",
6 | "GCM_SENDER_ID": "194789291232"
7 | }
--------------------------------------------------------------------------------
/lib/constants/app_constants.dart:
--------------------------------------------------------------------------------
1 | import 'package:platform/platform.dart';
2 |
3 | const BATCH_NUM_MESSAGES_TO_LOAD = 100;
4 | const _platform = LocalPlatform();
5 | // ignore: non_constant_identifier_names
6 | final CAN_UPLOAD_LOGS = !_platform.isWindows && !_platform.isLinux;
7 |
--------------------------------------------------------------------------------
/lib/constants/ble_constants.dart:
--------------------------------------------------------------------------------
1 | const MESHTASTIC_BLE_SERVICE = '6ba1b218-15a8-461f-9fa8-5dcae273eafd';
2 | const MESHTASTIC_TORADIO_CHARACTERISTIC =
3 | 'f75c76d2-129e-4dad-a1dd-7866124401e7';
4 | const MESHTASTIC_FROMRADIO_CHARACTERISTIC =
5 | '2c55e69e-4993-11ed-b878-0242ac120002';
6 | const MESHTASTIC_FROMNUM_CHARACTERISTIC =
7 | 'ed9da18c-a800-4f66-a670-aa7547e34453';
8 | const TO_BROADCAST = 4294967295;
9 |
--------------------------------------------------------------------------------
/lib/constants/meshtastic_constants.dart:
--------------------------------------------------------------------------------
1 | const MESHTASTIC_MAX_CHANNELS = 8;
2 | const MESHTASTIC_TCP_PORT = 4403;
3 | const MESHTASTIC_STREAM_START1 = 0x94;
4 | const MESHTASTIC_STREAM_START2 = 0xC3;
5 | const MESHTASTIC_MAX_PACKET_LEN = 512;
6 | const MESHTASTIC_MAX_HOPS = 7;
7 | const MESHTASTIC_PREFIX_URL = 'https://meshtastic.org/e/#';
8 |
--------------------------------------------------------------------------------
/lib/constants/telemetry_intervals.dart:
--------------------------------------------------------------------------------
1 | enum TelemetryIntervals {
2 | t15m,
3 | t30m,
4 | t1h,
5 | t2h,
6 | t3h,
7 | t6h,
8 | t12h,
9 | t18h,
10 | t24h,
11 | t36h,
12 | t48h,
13 | t72h,
14 | }
15 |
16 | extension IntervalNames on TelemetryIntervals {
17 | String get displayName {
18 | return name
19 | .replaceAll('t', '')
20 | .replaceAll('m', ' minutes')
21 | .replaceAll('h', ' hours');
22 | }
23 |
24 | int get seconds {
25 | if (name.contains('m')) {
26 | final minutes = name.replaceAll('t', '').replaceAll('m', '');
27 | return int.parse(minutes) * 60;
28 | } else if (name.contains('h')) {
29 | final minutes = name.replaceAll('t', '').replaceAll('h', '');
30 | return int.parse(minutes) * 60 * 60;
31 | } else {
32 | return 15 * 60;
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/lib/exceptions/mesh_radio_exception.dart:
--------------------------------------------------------------------------------
1 | class MeshRadioException implements Exception {
2 | const MeshRadioException({String? msg}) : msg = msg ?? 'Unknown error';
3 |
4 | final String msg;
5 |
6 | @override
7 | String toString() => 'MeshRadioException: $msg';
8 | }
9 |
--------------------------------------------------------------------------------
/lib/models/ble_characteristics.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter_blue_plus/flutter_blue_plus.dart';
2 |
3 | class BleCharacteristics {
4 | BleCharacteristics({
5 | required this.toRadio,
6 | required this.fromRadio,
7 | required this.fromNum,
8 | });
9 |
10 | final BluetoothCharacteristic toRadio;
11 | final BluetoothCharacteristic fromRadio;
12 | final BluetoothCharacteristic fromNum;
13 | }
14 |
--------------------------------------------------------------------------------
/lib/models/chat_type.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import '../constants/ble_constants.dart';
4 |
5 | @immutable
6 | sealed class ChatType {
7 | const ChatType({required this.toNode, required this.channel});
8 | final int toNode;
9 | final int channel;
10 |
11 | @override
12 | bool operator ==(Object other) =>
13 | identical(this, other) ||
14 | other is ChatType &&
15 | runtimeType == other.runtimeType &&
16 | toNode == other.toNode &&
17 | channel == other.channel;
18 |
19 | @override
20 | int get hashCode => toNode.hashCode ^ channel.hashCode;
21 | }
22 |
23 | @immutable
24 | class DirectMessageChat extends ChatType {
25 | const DirectMessageChat({required int dmNode})
26 | : super(toNode: dmNode, channel: 0);
27 | }
28 |
29 | @immutable
30 | class ChannelChat extends ChatType {
31 | const ChannelChat({super.toNode = TO_BROADCAST, required super.channel});
32 | }
33 |
--------------------------------------------------------------------------------
/lib/models/mesh_channel.dart:
--------------------------------------------------------------------------------
1 | import 'package:freezed_annotation/freezed_annotation.dart';
2 |
3 | import '../protobufs/generated/meshtastic/channel.pb.dart';
4 | part 'mesh_channel.freezed.dart';
5 |
6 | @freezed
7 | class MeshChannel with _$MeshChannel {
8 | const factory MeshChannel({
9 | required String name,
10 | @Default(false) bool hasBlankActualName,
11 | required Channel_Role role,
12 | required List key,
13 | required int index,
14 | required bool uplinkEnabled,
15 | required bool downlinkEnabled,
16 | }) = _MeshChannel;
17 |
18 | const MeshChannel._();
19 |
20 | bool get used => role != Channel_Role.DISABLED;
21 | }
22 |
--------------------------------------------------------------------------------
/lib/models/mesh_node.dart:
--------------------------------------------------------------------------------
1 | import 'package:freezed_annotation/freezed_annotation.dart';
2 | part 'mesh_node.freezed.dart';
3 |
4 | @freezed
5 | class MeshNode with _$MeshNode {
6 | const factory MeshNode({
7 | required int nodeNum,
8 | required String longName,
9 | String? hwModel,
10 | required String shortName,
11 | required int channel,
12 | required String id,
13 | int? batteryLevel,
14 | required DateTime lastSeen,
15 | @Default(false) bool hasUnreadMessages,
16 | }) = _MeshNode;
17 |
18 | const MeshNode._();
19 | }
20 |
--------------------------------------------------------------------------------
/lib/models/mesh_radio.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter_blue_plus/flutter_blue_plus.dart';
2 |
3 | sealed class MeshRadio {
4 | String get name;
5 | String get remoteId;
6 | }
7 |
8 | class BleMeshRadio extends MeshRadio {
9 | BleMeshRadio({required this.device}) : super();
10 |
11 | final BluetoothDevice device;
12 |
13 | @override
14 | String get name => device.advName;
15 |
16 | @override
17 | String get remoteId => device.remoteId.str;
18 | }
19 |
20 | class TcpMeshRadio extends MeshRadio {
21 | TcpMeshRadio({required this.address}) : super();
22 |
23 | final String address;
24 |
25 | @override
26 | String get name => address;
27 |
28 | @override
29 | String get remoteId => address;
30 | }
31 |
--------------------------------------------------------------------------------
/lib/models/radio_configuration.dart:
--------------------------------------------------------------------------------
1 | import 'package:freezed_annotation/freezed_annotation.dart';
2 |
3 | import '../protobufs/generated/meshtastic/config.pb.dart';
4 | import '../protobufs/generated/meshtastic/mesh.pb.dart';
5 | import '../protobufs/generated/meshtastic/mesh.pbserver.dart';
6 | import '../protobufs/generated/meshtastic/module_config.pb.dart';
7 |
8 | part 'radio_configuration.freezed.dart';
9 |
10 | @freezed
11 | class RadioConfiguration with _$RadioConfiguration {
12 | const factory RadioConfiguration({
13 | @Default(0) int myNodeNum,
14 | required Config_LoRaConfig loraConfig,
15 | required Config_BluetoothConfig bluetoothConfig,
16 | required ModuleConfig_TelemetryConfig telemetryConfig,
17 | required NodeInfo myNodeInfo,
18 | @Default(false) bool hasOwnNodeInfo,
19 | @Default(false) bool configDownloaded,
20 | }) = _RadioConfiguration;
21 |
22 | const RadioConfiguration._();
23 | }
24 |
--------------------------------------------------------------------------------
/lib/models/radio_connection_status.dart:
--------------------------------------------------------------------------------
1 | enum RadioConnectionStatus { disconnected, connecting, connected, error }
2 |
--------------------------------------------------------------------------------
/lib/models/radio_scan_state.dart:
--------------------------------------------------------------------------------
1 | import 'package:freezed_annotation/freezed_annotation.dart';
2 |
3 | import 'mesh_radio.dart';
4 |
5 | part 'radio_scan_state.freezed.dart';
6 |
7 | @freezed
8 | class RadioScanState with _$RadioScanState {
9 | const factory RadioScanState({
10 | @Default(false) bool scanning,
11 | @Default([]) List meshRadios,
12 | }) = _RadioScanState;
13 |
14 | const RadioScanState._();
15 | }
16 |
--------------------------------------------------------------------------------
/lib/models/telemetry_state.dart:
--------------------------------------------------------------------------------
1 | import 'package:freezed_annotation/freezed_annotation.dart';
2 | part 'telemetry_state.freezed.dart';
3 |
4 | @freezed
5 | class TelemetryState with _$TelemetryState {
6 | const factory TelemetryState({
7 | double? temp,
8 | double? relativeHumidity,
9 | double? barometricPressure,
10 | double? gasResistance,
11 | }) = _TelemetryState;
12 |
13 | const TelemetryState._();
14 | }
15 |
--------------------------------------------------------------------------------
/lib/models/text_message.dart:
--------------------------------------------------------------------------------
1 | import 'package:freezed_annotation/freezed_annotation.dart';
2 |
3 | import '../protobufs/generated/meshtastic/mesh.pb.dart';
4 | import 'text_message_status.dart';
5 |
6 | part 'text_message.freezed.dart';
7 |
8 | @freezed
9 | class TextMessage with _$TextMessage {
10 | const factory TextMessage({
11 | @Default(0) int packetId,
12 | required String text,
13 | required int from,
14 | required int to,
15 | required int channel,
16 | required DateTime time,
17 | @Default(TextMessageStatus.SENDING) TextMessageStatus state,
18 | required int owner,
19 | @Default(Routing_Error.NONE) Routing_Error routingError,
20 | }) = _TextMessage;
21 |
22 | const TextMessage._();
23 | }
24 |
--------------------------------------------------------------------------------
/lib/models/text_message_status.dart:
--------------------------------------------------------------------------------
1 | enum TextMessageStatus {
2 | SENDING,
3 | RADIO_ERROR,
4 | // do not delete since it
5 | // deleting will change
6 | // existing DB mapping
7 | @Deprecated('Use RADIO_ERROR instead')
8 | MAX_RETRANSMIT,
9 | OK,
10 | RECVD_BY_RADIO,
11 | IMPLICIT_ACK, // TODO
12 | }
13 |
--------------------------------------------------------------------------------
/lib/models/timed_telemetry.dart:
--------------------------------------------------------------------------------
1 | import '../protobufs/generated/meshtastic/telemetry.pb.dart';
2 |
3 | class TimedTelemetry {
4 | TimedTelemetry({required this.timeReceived, required this.telemetry});
5 |
6 | final DateTime timeReceived;
7 | final Telemetry telemetry;
8 | }
9 |
--------------------------------------------------------------------------------
/lib/models/traceroute_response.dart:
--------------------------------------------------------------------------------
1 | import 'package:freezed_annotation/freezed_annotation.dart';
2 | part 'traceroute_response.freezed.dart';
3 |
4 | @freezed
5 | class TracerouteResponse with _$TracerouteResponse {
6 | const factory TracerouteResponse({
7 | List? route,
8 | DateTime? successTime,
9 | required DateTime attemptTime,
10 | }) = _TracerouteResponse;
11 |
12 | const TracerouteResponse._();
13 | }
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/admin.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/admin.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'admin.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/apponly.pbenum.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/apponly.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/apponly.pbjson.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/apponly.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
12 | import 'dart:convert' as $convert;
13 | import 'dart:core' as $core;
14 | import 'dart:typed_data' as $typed_data;
15 |
16 | @$core.Deprecated('Use channelSetDescriptor instead')
17 | const ChannelSet$json = {
18 | '1': 'ChannelSet',
19 | '2': [
20 | {
21 | '1': 'settings',
22 | '3': 1,
23 | '4': 3,
24 | '5': 11,
25 | '6': '.meshtastic.ChannelSettings',
26 | '10': 'settings'
27 | },
28 | {
29 | '1': 'lora_config',
30 | '3': 2,
31 | '4': 1,
32 | '5': 11,
33 | '6': '.meshtastic.Config.LoRaConfig',
34 | '10': 'loraConfig'
35 | },
36 | ],
37 | };
38 |
39 | /// Descriptor for `ChannelSet`. Decode as a `google.protobuf.DescriptorProto`.
40 | final $typed_data.Uint8List channelSetDescriptor = $convert.base64Decode(
41 | 'CgpDaGFubmVsU2V0EjcKCHNldHRpbmdzGAEgAygLMhsubWVzaHRhc3RpYy5DaGFubmVsU2V0dG'
42 | 'luZ3NSCHNldHRpbmdzEj4KC2xvcmFfY29uZmlnGAIgASgLMh0ubWVzaHRhc3RpYy5Db25maWcu'
43 | 'TG9SYUNvbmZpZ1IKbG9yYUNvbmZpZw==');
44 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/apponly.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/apponly.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'apponly.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/atak.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/atak.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'atak.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/cannedmessages.pbenum.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/cannedmessages.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/cannedmessages.pbjson.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/cannedmessages.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
12 | import 'dart:convert' as $convert;
13 | import 'dart:core' as $core;
14 | import 'dart:typed_data' as $typed_data;
15 |
16 | @$core.Deprecated('Use cannedMessageModuleConfigDescriptor instead')
17 | const CannedMessageModuleConfig$json = {
18 | '1': 'CannedMessageModuleConfig',
19 | '2': [
20 | {'1': 'messages', '3': 1, '4': 1, '5': 9, '10': 'messages'},
21 | ],
22 | };
23 |
24 | /// Descriptor for `CannedMessageModuleConfig`. Decode as a `google.protobuf.DescriptorProto`.
25 | final $typed_data.Uint8List cannedMessageModuleConfigDescriptor =
26 | $convert.base64Decode(
27 | 'ChlDYW5uZWRNZXNzYWdlTW9kdWxlQ29uZmlnEhoKCG1lc3NhZ2VzGAEgASgJUghtZXNzYWdlcw'
28 | '==');
29 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/cannedmessages.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/cannedmessages.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'cannedmessages.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/channel.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/channel.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'channel.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/clientonly.pbenum.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/clientonly.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/clientonly.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/clientonly.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'clientonly.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/config.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/config.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'config.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/connection_status.pbenum.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/connection_status.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/connection_status.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/connection_status.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'connection_status.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/deviceonly.pbenum.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/deviceonly.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
12 | import 'dart:core' as $core;
13 |
14 | import 'package:protobuf/protobuf.dart' as $pb;
15 |
16 | ///
17 | /// Font sizes for the device screen
18 | class ScreenFonts extends $pb.ProtobufEnum {
19 | static const ScreenFonts FONT_SMALL =
20 | ScreenFonts._(0, _omitEnumNames ? '' : 'FONT_SMALL');
21 | static const ScreenFonts FONT_MEDIUM =
22 | ScreenFonts._(1, _omitEnumNames ? '' : 'FONT_MEDIUM');
23 | static const ScreenFonts FONT_LARGE =
24 | ScreenFonts._(2, _omitEnumNames ? '' : 'FONT_LARGE');
25 |
26 | static const $core.List values = [
27 | FONT_SMALL,
28 | FONT_MEDIUM,
29 | FONT_LARGE,
30 | ];
31 |
32 | static final $core.Map<$core.int, ScreenFonts> _byValue =
33 | $pb.ProtobufEnum.initByValue(values);
34 | static ScreenFonts? valueOf($core.int value) => _byValue[value];
35 |
36 | const ScreenFonts._($core.int v, $core.String n) : super(v, n);
37 | }
38 |
39 | const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names');
40 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/deviceonly.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/deviceonly.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'deviceonly.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/localonly.pbenum.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/localonly.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/localonly.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/localonly.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'localonly.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/mesh.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/mesh.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'mesh.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/module_config.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/module_config.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'module_config.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/mqtt.pbenum.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/mqtt.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/mqtt.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/mqtt.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'mqtt.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/paxcount.pbenum.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/paxcount.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/paxcount.pbjson.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/paxcount.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
12 | import 'dart:convert' as $convert;
13 | import 'dart:core' as $core;
14 | import 'dart:typed_data' as $typed_data;
15 |
16 | @$core.Deprecated('Use paxcountDescriptor instead')
17 | const Paxcount$json = {
18 | '1': 'Paxcount',
19 | '2': [
20 | {'1': 'wifi', '3': 1, '4': 1, '5': 13, '10': 'wifi'},
21 | {'1': 'ble', '3': 2, '4': 1, '5': 13, '10': 'ble'},
22 | {'1': 'uptime', '3': 3, '4': 1, '5': 13, '10': 'uptime'},
23 | ],
24 | };
25 |
26 | /// Descriptor for `Paxcount`. Decode as a `google.protobuf.DescriptorProto`.
27 | final $typed_data.Uint8List paxcountDescriptor = $convert.base64Decode(
28 | 'CghQYXhjb3VudBISCgR3aWZpGAEgASgNUgR3aWZpEhAKA2JsZRgCIAEoDVIDYmxlEhYKBnVwdG'
29 | 'ltZRgDIAEoDVIGdXB0aW1l');
30 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/paxcount.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/paxcount.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'paxcount.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/portnums.pb.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/portnums.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
12 | import 'dart:core' as $core;
13 |
14 | export 'portnums.pbenum.dart';
15 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/portnums.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/portnums.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'portnums.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/remote_hardware.pbenum.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/remote_hardware.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
12 | import 'dart:core' as $core;
13 |
14 | import 'package:protobuf/protobuf.dart' as $pb;
15 |
16 | ///
17 | /// TODO: REPLACE
18 | class HardwareMessage_Type extends $pb.ProtobufEnum {
19 | static const HardwareMessage_Type UNSET =
20 | HardwareMessage_Type._(0, _omitEnumNames ? '' : 'UNSET');
21 | static const HardwareMessage_Type WRITE_GPIOS =
22 | HardwareMessage_Type._(1, _omitEnumNames ? '' : 'WRITE_GPIOS');
23 | static const HardwareMessage_Type WATCH_GPIOS =
24 | HardwareMessage_Type._(2, _omitEnumNames ? '' : 'WATCH_GPIOS');
25 | static const HardwareMessage_Type GPIOS_CHANGED =
26 | HardwareMessage_Type._(3, _omitEnumNames ? '' : 'GPIOS_CHANGED');
27 | static const HardwareMessage_Type READ_GPIOS =
28 | HardwareMessage_Type._(4, _omitEnumNames ? '' : 'READ_GPIOS');
29 | static const HardwareMessage_Type READ_GPIOS_REPLY =
30 | HardwareMessage_Type._(5, _omitEnumNames ? '' : 'READ_GPIOS_REPLY');
31 |
32 | static const $core.List values = [
33 | UNSET,
34 | WRITE_GPIOS,
35 | WATCH_GPIOS,
36 | GPIOS_CHANGED,
37 | READ_GPIOS,
38 | READ_GPIOS_REPLY,
39 | ];
40 |
41 | static final $core.Map<$core.int, HardwareMessage_Type> _byValue =
42 | $pb.ProtobufEnum.initByValue(values);
43 | static HardwareMessage_Type? valueOf($core.int value) => _byValue[value];
44 |
45 | const HardwareMessage_Type._($core.int v, $core.String n) : super(v, n);
46 | }
47 |
48 | const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names');
49 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/remote_hardware.pbjson.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/remote_hardware.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
12 | import 'dart:convert' as $convert;
13 | import 'dart:core' as $core;
14 | import 'dart:typed_data' as $typed_data;
15 |
16 | @$core.Deprecated('Use hardwareMessageDescriptor instead')
17 | const HardwareMessage$json = {
18 | '1': 'HardwareMessage',
19 | '2': [
20 | {
21 | '1': 'type',
22 | '3': 1,
23 | '4': 1,
24 | '5': 14,
25 | '6': '.meshtastic.HardwareMessage.Type',
26 | '10': 'type'
27 | },
28 | {'1': 'gpio_mask', '3': 2, '4': 1, '5': 4, '10': 'gpioMask'},
29 | {'1': 'gpio_value', '3': 3, '4': 1, '5': 4, '10': 'gpioValue'},
30 | ],
31 | '4': [HardwareMessage_Type$json],
32 | };
33 |
34 | @$core.Deprecated('Use hardwareMessageDescriptor instead')
35 | const HardwareMessage_Type$json = {
36 | '1': 'Type',
37 | '2': [
38 | {'1': 'UNSET', '2': 0},
39 | {'1': 'WRITE_GPIOS', '2': 1},
40 | {'1': 'WATCH_GPIOS', '2': 2},
41 | {'1': 'GPIOS_CHANGED', '2': 3},
42 | {'1': 'READ_GPIOS', '2': 4},
43 | {'1': 'READ_GPIOS_REPLY', '2': 5},
44 | ],
45 | };
46 |
47 | /// Descriptor for `HardwareMessage`. Decode as a `google.protobuf.DescriptorProto`.
48 | final $typed_data.Uint8List hardwareMessageDescriptor = $convert.base64Decode(
49 | 'Cg9IYXJkd2FyZU1lc3NhZ2USNAoEdHlwZRgBIAEoDjIgLm1lc2h0YXN0aWMuSGFyZHdhcmVNZX'
50 | 'NzYWdlLlR5cGVSBHR5cGUSGwoJZ3Bpb19tYXNrGAIgASgEUghncGlvTWFzaxIdCgpncGlvX3Zh'
51 | 'bHVlGAMgASgEUglncGlvVmFsdWUibAoEVHlwZRIJCgVVTlNFVBAAEg8KC1dSSVRFX0dQSU9TEA'
52 | 'ESDwoLV0FUQ0hfR1BJT1MQAhIRCg1HUElPU19DSEFOR0VEEAMSDgoKUkVBRF9HUElPUxAEEhQK'
53 | 'EFJFQURfR1BJT1NfUkVQTFkQBQ==');
54 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/remote_hardware.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/remote_hardware.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'remote_hardware.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/rtttl.pbenum.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/rtttl.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/rtttl.pbjson.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/rtttl.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
12 | import 'dart:convert' as $convert;
13 | import 'dart:core' as $core;
14 | import 'dart:typed_data' as $typed_data;
15 |
16 | @$core.Deprecated('Use rTTTLConfigDescriptor instead')
17 | const RTTTLConfig$json = {
18 | '1': 'RTTTLConfig',
19 | '2': [
20 | {'1': 'ringtone', '3': 1, '4': 1, '5': 9, '10': 'ringtone'},
21 | ],
22 | };
23 |
24 | /// Descriptor for `RTTTLConfig`. Decode as a `google.protobuf.DescriptorProto`.
25 | final $typed_data.Uint8List rTTTLConfigDescriptor = $convert
26 | .base64Decode('CgtSVFRUTENvbmZpZxIaCghyaW5ndG9uZRgBIAEoCVIIcmluZ3RvbmU=');
27 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/rtttl.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/rtttl.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'rtttl.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/storeforward.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/storeforward.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'storeforward.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/telemetry.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/telemetry.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'telemetry.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/xmodem.pbenum.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/xmodem.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
12 | import 'dart:core' as $core;
13 |
14 | import 'package:protobuf/protobuf.dart' as $pb;
15 |
16 | class XModem_Control extends $pb.ProtobufEnum {
17 | static const XModem_Control NUL =
18 | XModem_Control._(0, _omitEnumNames ? '' : 'NUL');
19 | static const XModem_Control SOH =
20 | XModem_Control._(1, _omitEnumNames ? '' : 'SOH');
21 | static const XModem_Control STX =
22 | XModem_Control._(2, _omitEnumNames ? '' : 'STX');
23 | static const XModem_Control EOT =
24 | XModem_Control._(4, _omitEnumNames ? '' : 'EOT');
25 | static const XModem_Control ACK =
26 | XModem_Control._(6, _omitEnumNames ? '' : 'ACK');
27 | static const XModem_Control NAK =
28 | XModem_Control._(21, _omitEnumNames ? '' : 'NAK');
29 | static const XModem_Control CAN =
30 | XModem_Control._(24, _omitEnumNames ? '' : 'CAN');
31 | static const XModem_Control CTRLZ =
32 | XModem_Control._(26, _omitEnumNames ? '' : 'CTRLZ');
33 |
34 | static const $core.List values = [
35 | NUL,
36 | SOH,
37 | STX,
38 | EOT,
39 | ACK,
40 | NAK,
41 | CAN,
42 | CTRLZ,
43 | ];
44 |
45 | static final $core.Map<$core.int, XModem_Control> _byValue =
46 | $pb.ProtobufEnum.initByValue(values);
47 | static XModem_Control? valueOf($core.int value) => _byValue[value];
48 |
49 | const XModem_Control._($core.int v, $core.String n) : super(v, n);
50 | }
51 |
52 | const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names');
53 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/xmodem.pbjson.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/xmodem.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names, library_prefixes
9 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
10 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11 |
12 | import 'dart:convert' as $convert;
13 | import 'dart:core' as $core;
14 | import 'dart:typed_data' as $typed_data;
15 |
16 | @$core.Deprecated('Use xModemDescriptor instead')
17 | const XModem$json = {
18 | '1': 'XModem',
19 | '2': [
20 | {
21 | '1': 'control',
22 | '3': 1,
23 | '4': 1,
24 | '5': 14,
25 | '6': '.meshtastic.XModem.Control',
26 | '10': 'control'
27 | },
28 | {'1': 'seq', '3': 2, '4': 1, '5': 13, '10': 'seq'},
29 | {'1': 'crc16', '3': 3, '4': 1, '5': 13, '10': 'crc16'},
30 | {'1': 'buffer', '3': 4, '4': 1, '5': 12, '10': 'buffer'},
31 | ],
32 | '4': [XModem_Control$json],
33 | };
34 |
35 | @$core.Deprecated('Use xModemDescriptor instead')
36 | const XModem_Control$json = {
37 | '1': 'Control',
38 | '2': [
39 | {'1': 'NUL', '2': 0},
40 | {'1': 'SOH', '2': 1},
41 | {'1': 'STX', '2': 2},
42 | {'1': 'EOT', '2': 4},
43 | {'1': 'ACK', '2': 6},
44 | {'1': 'NAK', '2': 21},
45 | {'1': 'CAN', '2': 24},
46 | {'1': 'CTRLZ', '2': 26},
47 | ],
48 | };
49 |
50 | /// Descriptor for `XModem`. Decode as a `google.protobuf.DescriptorProto`.
51 | final $typed_data.Uint8List xModemDescriptor = $convert.base64Decode(
52 | 'CgZYTW9kZW0SNAoHY29udHJvbBgBIAEoDjIaLm1lc2h0YXN0aWMuWE1vZGVtLkNvbnRyb2xSB2'
53 | 'NvbnRyb2wSEAoDc2VxGAIgASgNUgNzZXESFAoFY3JjMTYYAyABKA1SBWNyYzE2EhYKBmJ1ZmZl'
54 | 'chgEIAEoDFIGYnVmZmVyIlMKB0NvbnRyb2wSBwoDTlVMEAASBwoDU09IEAESBwoDU1RYEAISBw'
55 | 'oDRU9UEAQSBwoDQUNLEAYSBwoDTkFLEBUSBwoDQ0FOEBgSCQoFQ1RSTFoQGg==');
56 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/meshtastic/xmodem.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: meshtastic/xmodem.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'xmodem.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/generated/nanopb.pbserver.dart:
--------------------------------------------------------------------------------
1 | //
2 | // Generated code. Do not modify.
3 | // source: nanopb.proto
4 | //
5 | // @dart = 2.12
6 |
7 | // ignore_for_file: annotate_overrides, camel_case_types, comment_references
8 | // ignore_for_file: constant_identifier_names
9 | // ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
10 | // ignore_for_file: non_constant_identifier_names, prefer_final_fields
11 | // ignore_for_file: unnecessary_import, unnecessary_this, unused_import
12 |
13 | export 'nanopb.pb.dart';
14 |
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/admin.options:
--------------------------------------------------------------------------------
1 | *AdminMessage.payload_variant anonymous_oneof:true
2 |
3 | *AdminMessage.set_canned_message_module_messages max_size:201
4 | *AdminMessage.get_canned_message_module_messages_response max_size:201
5 | *AdminMessage.delete_file_request max_size:201
6 |
7 | *AdminMessage.set_ringtone_message max_size:231
8 | *AdminMessage.get_ringtone_response max_size:231
9 |
10 | *HamParameters.call_sign max_size:8
11 | *HamParameters.short_name max_size:6
12 | *NodeRemoteHardwarePinsResponse.node_remote_hardware_pins max_count:16
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/apponly.options:
--------------------------------------------------------------------------------
1 | *ChannelSet.settings max_count:8
2 |
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/apponly.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 |
3 | package meshtastic;
4 |
5 | import "meshtastic/channel.proto";
6 | import "meshtastic/config.proto";
7 |
8 | option csharp_namespace = "Meshtastic.Protobufs";
9 | option go_package = "github.com/meshtastic/go/generated";
10 | option java_outer_classname = "AppOnlyProtos";
11 | option java_package = "com.geeksville.mesh";
12 | option swift_prefix = "";
13 |
14 | /*
15 | * This is the most compact possible representation for a set of channels.
16 | * It includes only one PRIMARY channel (which must be first) and
17 | * any SECONDARY channels.
18 | * No DISABLED channels are included.
19 | * This abstraction is used only on the the 'app side' of the world (ie python, javascript and android etc) to show a group of Channels as a (long) URL
20 | */
21 | message ChannelSet {
22 | /*
23 | * Channel list with settings
24 | */
25 | repeated ChannelSettings settings = 1;
26 |
27 | /*
28 | * LoRa config
29 | */
30 | Config.LoRaConfig lora_config = 2;
31 | }
32 |
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/atak.options:
--------------------------------------------------------------------------------
1 | *Contact.callsign max_size:120
2 | *Contact.device_callsign max_size:120
3 | *Status.battery int_size:8
4 | *PLI.course int_size:16
5 | *GeoChat.message max_size:200
6 | *GeoChat.to max_size:120
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/cannedmessages.options:
--------------------------------------------------------------------------------
1 | *CannedMessageModuleConfig.messages max_size:201
2 |
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/cannedmessages.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 |
3 | package meshtastic;
4 |
5 | option csharp_namespace = "Meshtastic.Protobufs";
6 | option go_package = "github.com/meshtastic/go/generated";
7 | option java_outer_classname = "CannedMessageConfigProtos";
8 | option java_package = "com.geeksville.mesh";
9 | option swift_prefix = "";
10 |
11 | /*
12 | * Canned message module configuration.
13 | */
14 | message CannedMessageModuleConfig {
15 | /*
16 | * Predefined messages for canned message module separated by '|' characters.
17 | */
18 | string messages = 1;
19 | }
20 |
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/channel.options:
--------------------------------------------------------------------------------
1 | *Channel.index int_size:8
2 |
3 | # 256 bit or 128 bit psk key
4 | *ChannelSettings.psk max_size:32
5 | *ChannelSettings.name max_size:12
6 |
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/clientonly.options:
--------------------------------------------------------------------------------
1 | *DeviceProfile.long_name max_size:40
2 | *DeviceProfile.short_name max_size:5
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/clientonly.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 |
3 | package meshtastic;
4 |
5 | import "meshtastic/localonly.proto";
6 |
7 | option csharp_namespace = "Meshtastic.Protobufs";
8 | option go_package = "github.com/meshtastic/go/generated";
9 | option java_outer_classname = "ClientOnlyProtos";
10 | option java_package = "com.geeksville.mesh";
11 | option swift_prefix = "";
12 |
13 | /*
14 | * This abstraction is used to contain any configuration for provisioning a node on any client.
15 | * It is useful for importing and exporting configurations.
16 | */
17 | message DeviceProfile {
18 | /*
19 | * Long name for the node
20 | */
21 | optional string long_name = 1;
22 |
23 | /*
24 | * Short name of the node
25 | */
26 | optional string short_name = 2;
27 |
28 | /*
29 | * The url of the channels from our node
30 | */
31 | optional string channel_url = 3;
32 |
33 | /*
34 | * The Config of the node
35 | */
36 | optional LocalConfig config = 4;
37 |
38 | /*
39 | * The ModuleConfig of the node
40 | */
41 | optional LocalModuleConfig module_config = 5;
42 | }
43 |
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/config.options:
--------------------------------------------------------------------------------
1 | # longest current is 45 chars, plan with a bit of buffer
2 | *DeviceConfig.tzdef max_size:65
3 |
4 | *NetworkConfig.wifi_ssid max_size:33
5 | *NetworkConfig.wifi_psk max_size:65
6 | *NetworkConfig.ntp_server max_size:33
7 | *NetworkConfig.rsyslog_server max_size:33
8 |
9 | # Max of three ignored nodes for our testing
10 | *LoRaConfig.ignore_incoming max_count:3
11 |
12 | *LoRaConfig.tx_power int_size:8
13 | *LoRaConfig.bandwidth int_size:16
14 | *LoRaConfig.coding_rate int_size:8
15 | *LoRaConfig.channel_num int_size:16
16 |
17 | *PowerConfig.device_battery_ina_address int_size:8
18 |
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/connection_status.options:
--------------------------------------------------------------------------------
1 | *WifiConnectionStatus.ssid max_size:33
2 |
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/deviceonly.options:
--------------------------------------------------------------------------------
1 | # options for nanopb
2 | # https://jpa.kapsi.fi/nanopb/docs/reference.html#proto-file-options
3 |
4 | # FIXME - max_count is actually 32 but we save/load this as one long string of preencoded MeshPacket bytes - not a big array in RAM
5 | *DeviceState.receive_queue max_count:1
6 |
7 | *ChannelFile.channels max_count:8
8 |
9 | *OEMStore.oem_text max_size:40
10 | *OEMStore.oem_icon_bits max_size:2048
11 | *OEMStore.oem_aes_key max_size:32
12 |
13 | *DeviceState.node_remote_hardware_pins max_count:12
14 |
15 | *NodeInfoLite.channel int_size:8
16 | *NodeInfoLite.hops_away int_size:8
17 |
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/module_config.options:
--------------------------------------------------------------------------------
1 | *CannedMessageConfig.allow_input_source max_size:16
2 |
3 | *MQTTConfig.address max_size:64
4 | *MQTTConfig.username max_size:64
5 | *MQTTConfig.password max_size:64
6 | *MQTTConfig.root max_size:32
7 |
8 | *AudioConfig.ptt_pin int_size:8
9 | *AudioConfig.i2s_ws int_size:8
10 | *AudioConfig.i2s_sd int_size:8
11 | *AudioConfig.i2s_din int_size:8
12 | *AudioConfig.i2s_sck int_size:8
13 |
14 | *ExternalNotificationConfig.output_vibra int_size:8
15 | *ExternalNotificationConfig.output_buzzer int_size:8
16 | *ExternalNotificationConfig.nag_timeout int_size:16
17 |
18 | *RemoteHardwareConfig.available_pins max_count:4
19 | *RemoteHardwarePin.name max_size:15
20 | *RemoteHardwarePin.gpio_pin int_size:8
21 |
22 | *AmbientLightingConfig.current int_size:8
23 | *AmbientLightingConfig.red int_size:8
24 | *AmbientLightingConfig.green int_size:8
25 | *AmbientLightingConfig.blue int_size:8
26 |
27 | *DetectionSensorConfig.monitor_pin int_size:8
28 | *DetectionSensorConfig.name max_size:20
29 |
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/mqtt.options:
--------------------------------------------------------------------------------
1 | *ServiceEnvelope.packet type:FT_POINTER
2 | *ServiceEnvelope.channel_id type:FT_POINTER
3 | *ServiceEnvelope.gateway_id type:FT_POINTER
4 |
5 | *MapReport.long_name max_size:40
6 | *MapReport.short_name max_size:5
7 | *MapReport.firmware_version max_size:18
8 | *MapReport.num_online_local_nodes int_size:16
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/paxcount.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 |
3 | package meshtastic;
4 |
5 | option csharp_namespace = "Meshtastic.Protobufs";
6 | option go_package = "github.com/meshtastic/go/generated";
7 | option java_outer_classname = "PaxcountProtos";
8 | option java_package = "com.geeksville.mesh";
9 | option swift_prefix = "";
10 |
11 | /*
12 | * TODO: REPLACE
13 | */
14 | message Paxcount {
15 | /*
16 | * seen Wifi devices
17 | */
18 | uint32 wifi = 1;
19 |
20 | /*
21 | * Seen BLE devices
22 | */
23 | uint32 ble = 2;
24 |
25 | /*
26 | * Uptime in seconds
27 | */
28 | uint32 uptime = 3;
29 | }
30 |
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/rtttl.options:
--------------------------------------------------------------------------------
1 | *RTTTLConfig.ringtone max_size:230
2 |
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/rtttl.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 |
3 | package meshtastic;
4 |
5 | option csharp_namespace = "Meshtastic.Protobufs";
6 | option go_package = "github.com/meshtastic/go/generated";
7 | option java_outer_classname = "RTTTLConfigProtos";
8 | option java_package = "com.geeksville.mesh";
9 | option swift_prefix = "";
10 |
11 | /*
12 | * Canned message module configuration.
13 | */
14 | message RTTTLConfig {
15 | /*
16 | * Ringtone for PWM Buzzer in RTTTL Format.
17 | */
18 | string ringtone = 1;
19 | }
20 |
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/storeforward.options:
--------------------------------------------------------------------------------
1 | *StoreAndForward.text max_size:237
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/telemetry.options:
--------------------------------------------------------------------------------
1 | # options for nanopb
2 | # https://jpa.kapsi.fi/nanopb/docs/reference.html#proto-file-options
3 |
4 | *EnvironmentMetrics.iaq int_size:16
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/xmodem.options:
--------------------------------------------------------------------------------
1 | # options for nanopb
2 | # https://jpa.kapsi.fi/nanopb/docs/reference.html#proto-file-options
3 |
4 | *XModem.buffer max_size:128
5 | *XModem.seq int_size:16
6 | *XModem.crc16 int_size:16
7 |
--------------------------------------------------------------------------------
/lib/protobufs/meshtastic/xmodem.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 |
3 | package meshtastic;
4 |
5 | option csharp_namespace = "Meshtastic.Protobufs";
6 | option go_package = "github.com/meshtastic/go/generated";
7 | option java_outer_classname = "XmodemProtos";
8 | option java_package = "com.geeksville.mesh";
9 | option swift_prefix = "";
10 |
11 | message XModem {
12 | enum Control {
13 | NUL = 0;
14 | SOH = 1;
15 | STX = 2;
16 | EOT = 4;
17 | ACK = 6;
18 | NAK = 21;
19 | CAN = 24;
20 | CTRLZ = 26;
21 | }
22 |
23 | Control control = 1;
24 | uint32 seq = 2;
25 | uint32 crc16 = 3;
26 | bytes buffer = 4;
27 | }
28 |
--------------------------------------------------------------------------------
/lib/providers/ack_waiting_radio_writer.dart:
--------------------------------------------------------------------------------
1 | // coverage:ignore-file
2 | import 'package:riverpod_annotation/riverpod_annotation.dart';
3 |
4 | import '../services/ack_waiting_radio_writer.dart';
5 | import 'radio_config/radio_config_service.dart';
6 | import 'radio_reader.dart';
7 | import 'radio_writer.dart';
8 |
9 | part 'ack_waiting_radio_writer.g.dart';
10 |
11 | @Riverpod(keepAlive: true)
12 | AckWaitingRadioWriter ackWaitingRadioWriter(AckWaitingRadioWriterRef ref) {
13 | return AckWaitingRadioWriter(
14 | hopLimitProvider: () =>
15 | ref.read(radioConfigServiceProvider).loraConfig.hopLimit,
16 | radioReader: ref.watch(radioReaderProvider),
17 | radioWriter: ref.watch(radioWriterProvider),
18 | );
19 | }
20 |
--------------------------------------------------------------------------------
/lib/providers/ack_waiting_radio_writer.g.dart:
--------------------------------------------------------------------------------
1 | // GENERATED CODE - DO NOT MODIFY BY HAND
2 |
3 | part of 'ack_waiting_radio_writer.dart';
4 |
5 | // **************************************************************************
6 | // RiverpodGenerator
7 | // **************************************************************************
8 |
9 | String _$ackWaitingRadioWriterHash() =>
10 | r'72beffedeb095194efdbd6bed0a679651c939b89';
11 |
12 | /// See also [ackWaitingRadioWriter].
13 | @ProviderFor(ackWaitingRadioWriter)
14 | final ackWaitingRadioWriterProvider = Provider.internal(
15 | ackWaitingRadioWriter,
16 | name: r'ackWaitingRadioWriterProvider',
17 | debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
18 | ? null
19 | : _$ackWaitingRadioWriterHash,
20 | dependencies: null,
21 | allTransitiveDependencies: null,
22 | );
23 |
24 | typedef AckWaitingRadioWriterRef = ProviderRef;
25 | // ignore_for_file: type=lint
26 | // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member
27 |
--------------------------------------------------------------------------------
/lib/providers/ble/ble_characteristics_finder.dart:
--------------------------------------------------------------------------------
1 | // coverage:ignore-file
2 | import 'package:riverpod_annotation/riverpod_annotation.dart';
3 |
4 | import '../../services/ble/ble_characteristics_finder.dart';
5 |
6 | part 'ble_characteristics_finder.g.dart';
7 |
8 | @Riverpod(keepAlive: true)
9 | BleCharacteristicsFinder bleCharacteristicsFinder(
10 | BleCharacteristicsFinderRef ref,
11 | ) {
12 | return BleCharacteristicsFinder();
13 | }
14 |
--------------------------------------------------------------------------------
/lib/providers/ble/ble_characteristics_finder.g.dart:
--------------------------------------------------------------------------------
1 | // GENERATED CODE - DO NOT MODIFY BY HAND
2 |
3 | part of 'ble_characteristics_finder.dart';
4 |
5 | // **************************************************************************
6 | // RiverpodGenerator
7 | // **************************************************************************
8 |
9 | String _$bleCharacteristicsFinderHash() =>
10 | r'd59818a8ba370f3968e470d134bd16671f8f4a81';
11 |
12 | /// See also [bleCharacteristicsFinder].
13 | @ProviderFor(bleCharacteristicsFinder)
14 | final bleCharacteristicsFinderProvider =
15 | Provider.internal(
16 | bleCharacteristicsFinder,
17 | name: r'bleCharacteristicsFinderProvider',
18 | debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
19 | ? null
20 | : _$bleCharacteristicsFinderHash,
21 | dependencies: null,
22 | allTransitiveDependencies: null,
23 | );
24 |
25 | typedef BleCharacteristicsFinderRef = ProviderRef;
26 | // ignore_for_file: type=lint
27 | // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member
28 |
--------------------------------------------------------------------------------
/lib/providers/ble/ble_permissions_requester.dart:
--------------------------------------------------------------------------------
1 | // coverage:ignore-file
2 | import 'package:riverpod_annotation/riverpod_annotation.dart';
3 |
4 | import '../../services/ble/ble_permissions_requester.dart';
5 | import '../wrap/flutter_blue_plus_mockable.dart';
6 | import '../wrap/local_platform.dart';
7 | import '../wrap/permissions.dart';
8 |
9 | part 'ble_permissions_requester.g.dart';
10 |
11 | @Riverpod(keepAlive: true)
12 | BlePermissionsRequester blePermissionsRequester(
13 | BlePermissionsRequesterRef ref,
14 | ) {
15 | return BlePermissionsRequester(
16 | localPlatform: ref.watch(localPlatformProvider),
17 | flutterBluePlus: ref.watch(flutterBluePlusProvider),
18 | permissions: ref.watch(permissionsProvider),
19 | );
20 | }
21 |
--------------------------------------------------------------------------------
/lib/providers/ble/ble_permissions_requester.g.dart:
--------------------------------------------------------------------------------
1 | // GENERATED CODE - DO NOT MODIFY BY HAND
2 |
3 | part of 'ble_permissions_requester.dart';
4 |
5 | // **************************************************************************
6 | // RiverpodGenerator
7 | // **************************************************************************
8 |
9 | String _$blePermissionsRequesterHash() =>
10 | r'07fc3cc08fa359caf4ae3df64729884778ef06fe';
11 |
12 | /// See also [blePermissionsRequester].
13 | @ProviderFor(blePermissionsRequester)
14 | final blePermissionsRequesterProvider =
15 | Provider.internal(
16 | blePermissionsRequester,
17 | name: r'blePermissionsRequesterProvider',
18 | debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
19 | ? null
20 | : _$blePermissionsRequesterHash,
21 | dependencies: null,
22 | allTransitiveDependencies: null,
23 | );
24 |
25 | typedef BlePermissionsRequesterRef = ProviderRef;
26 | // ignore_for_file: type=lint
27 | // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member
28 |
--------------------------------------------------------------------------------
/lib/providers/ble/ble_radio_connector.g.dart:
--------------------------------------------------------------------------------
1 | // GENERATED CODE - DO NOT MODIFY BY HAND
2 |
3 | part of 'ble_radio_connector.dart';
4 |
5 | // **************************************************************************
6 | // RiverpodGenerator
7 | // **************************************************************************
8 |
9 | String _$bleRadioConnectorHash() => r'e4236e188ed8702db6ab5fbe76da09af1c26ca81';
10 |
11 | /// See also [BleRadioConnector].
12 | @ProviderFor(BleRadioConnector)
13 | final bleRadioConnectorProvider =
14 | NotifierProvider.internal(
15 | BleRadioConnector.new,
16 | name: r'bleRadioConnectorProvider',
17 | debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
18 | ? null
19 | : _$bleRadioConnectorHash,
20 | dependencies: null,
21 | allTransitiveDependencies: null,
22 | );
23 |
24 | typedef _$BleRadioConnector = Notifier;
25 | // ignore_for_file: type=lint
26 | // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member
27 |
--------------------------------------------------------------------------------
/lib/providers/ble/ble_radio_scanner.g.dart:
--------------------------------------------------------------------------------
1 | // GENERATED CODE - DO NOT MODIFY BY HAND
2 |
3 | part of 'ble_radio_scanner.dart';
4 |
5 | // **************************************************************************
6 | // RiverpodGenerator
7 | // **************************************************************************
8 |
9 | String _$bleRadioScannerHash() => r'fc430734b236a903c4b282041ba5b16eaa671e10';
10 |
11 | /// See also [BleRadioScanner].
12 | @ProviderFor(BleRadioScanner)
13 | final bleRadioScannerProvider =
14 | NotifierProvider.internal(
15 | BleRadioScanner.new,
16 | name: r'bleRadioScannerProvider',
17 | debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
18 | ? null
19 | : _$bleRadioScannerHash,
20 | dependencies: null,
21 | allTransitiveDependencies: null,
22 | );
23 |
24 | typedef _$BleRadioScanner = Notifier;
25 | // ignore_for_file: type=lint
26 | // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member
27 |
--------------------------------------------------------------------------------
/lib/providers/breadcrumb_logger.dart:
--------------------------------------------------------------------------------
1 | import 'package:riverpod_annotation/riverpod_annotation.dart';
2 |
3 | import '../services/breadcrumb_logger.dart';
4 | import 'wrap/local_platform.dart';
5 | part 'breadcrumb_logger.g.dart';
6 |
7 | @Riverpod(keepAlive: true)
8 | BreadcrumbLogger breadcrumbLogger(BreadcrumbLoggerRef ref) {
9 | final localPlatform = ref.read(localPlatformProvider);
10 | if (!localPlatform.isWindows && !localPlatform.isLinux) {
11 | return FirebaseLogger();
12 | } else {
13 | return NullLogger();
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/lib/providers/breadcrumb_logger.g.dart:
--------------------------------------------------------------------------------
1 | // GENERATED CODE - DO NOT MODIFY BY HAND
2 |
3 | part of 'breadcrumb_logger.dart';
4 |
5 | // **************************************************************************
6 | // RiverpodGenerator
7 | // **************************************************************************
8 |
9 | String _$breadcrumbLoggerHash() => r'87a8cd98c3746dbaa490c4662d2022bd4ac0637e';
10 |
11 | /// See also [breadcrumbLogger].
12 | @ProviderFor(breadcrumbLogger)
13 | final breadcrumbLoggerProvider = Provider.internal(
14 | breadcrumbLogger,
15 | name: r'breadcrumbLoggerProvider',
16 | debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
17 | ? null
18 | : _$breadcrumbLoggerHash,
19 | dependencies: null,
20 | allTransitiveDependencies: null,
21 | );
22 |
23 | typedef BreadcrumbLoggerRef = ProviderRef;
24 | // ignore_for_file: type=lint
25 | // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member
26 |
--------------------------------------------------------------------------------
/lib/providers/channel_service.g.dart:
--------------------------------------------------------------------------------
1 | // GENERATED CODE - DO NOT MODIFY BY HAND
2 |
3 | part of 'channel_service.dart';
4 |
5 | // **************************************************************************
6 | // RiverpodGenerator
7 | // **************************************************************************
8 |
9 | String _$channelServiceHash() => r'ded70bafca9778b46ec78810085145200d71724d';
10 |
11 | /// See also [ChannelService].
12 | @ProviderFor(ChannelService)
13 | final channelServiceProvider =
14 | NotifierProvider>.internal(
15 | ChannelService.new,
16 | name: r'channelServiceProvider',
17 | debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
18 | ? null
19 | : _$channelServiceHash,
20 | dependencies: null,
21 | allTransitiveDependencies: null,
22 | );
23 |
24 | typedef _$ChannelService = Notifier>;
25 | // ignore_for_file: type=lint
26 | // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member
27 |
--------------------------------------------------------------------------------
/lib/providers/node/hops_away.dart:
--------------------------------------------------------------------------------
1 | import 'package:riverpod_annotation/riverpod_annotation.dart';
2 |
3 | import '../radio_reader.dart';
4 | part 'hops_away.g.dart';
5 |
6 | @Riverpod(keepAlive: true)
7 | class HopsAway extends _$HopsAway {
8 | @override
9 | int? build(int nodeNum) {
10 | final sub =
11 | ref.watch(radioReaderProvider).onPacketReceived().listen((event) {
12 | final packet = event.packet;
13 | if (packet.from == nodeNum &&
14 | packet.hasHopLimit() &&
15 | packet.hasHopStart()) {
16 | state = (packet.hopStart - packet.hopLimit).abs();
17 | }
18 | });
19 | ref.onDispose(sub.cancel);
20 | return null;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/lib/providers/node/node_search.dart:
--------------------------------------------------------------------------------
1 | import 'package:riverpod_annotation/riverpod_annotation.dart';
2 |
3 | import '../../models/mesh_node.dart';
4 | import 'node_service.dart';
5 |
6 | part 'node_search.g.dart';
7 |
8 | @riverpod
9 | Map nodeSearch(NodeSearchRef ref, String searchKey) {
10 | final searchKeyLowercase = searchKey.toLowerCase();
11 | final nodes = ref.watch(nodeServiceProvider);
12 | if (searchKey.trim().isEmpty) {
13 | return nodes;
14 | } else {
15 | final result = {};
16 | nodes.values
17 | .where(
18 | (element) =>
19 | element.longName.toLowerCase().contains(searchKeyLowercase) ||
20 | element.shortName.toLowerCase().contains(searchKeyLowercase),
21 | )
22 | .forEach((element) {
23 | result[element.nodeNum] = element;
24 | });
25 | return result;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/lib/providers/node/node_service.g.dart:
--------------------------------------------------------------------------------
1 | // GENERATED CODE - DO NOT MODIFY BY HAND
2 |
3 | part of 'node_service.dart';
4 |
5 | // **************************************************************************
6 | // RiverpodGenerator
7 | // **************************************************************************
8 |
9 | String _$nodeServiceHash() => r'685ebafd38255a204dd7e0bcf7c8fcf26e07f331';
10 |
11 | /// See also [NodeService].
12 | @ProviderFor(NodeService)
13 | final nodeServiceProvider =
14 | NotifierProvider>.internal(
15 | NodeService.new,
16 | name: r'nodeServiceProvider',
17 | debugGetCreateSourceHash:
18 | const bool.fromEnvironment('dart.vm.product') ? null : _$nodeServiceHash,
19 | dependencies: null,
20 | allTransitiveDependencies: null,
21 | );
22 |
23 | typedef _$NodeService = Notifier