diff --git a/flutter_app/.metadata b/flutter_app/.metadata index 6eb54a1..6e12c20 100644 --- a/flutter_app/.metadata +++ b/flutter_app/.metadata @@ -41,5 +41,5 @@ migration: # # Files that are not part of the templates will be ignored by default. unmanaged_files: - - 'lib/main.dart' - - 'ios/Runner.xcodeproj/project.pbxproj' + - "lib/main.dart" + - "ios/Runner.xcodeproj/project.pbxproj" diff --git a/flutter_app/lib/modules/change_drone_mode.dart b/flutter_app/lib/modules/change_drone_mode.dart index eda400b..633bb39 100644 --- a/flutter_app/lib/modules/change_drone_mode.dart +++ b/flutter_app/lib/modules/change_drone_mode.dart @@ -1,6 +1,24 @@ import 'package:dart_mavlink/dialects/common.dart'; import 'package:imacs/modules/mavlink_communication.dart'; import 'package:imacs/command_constructors/set_mode_constructor.dart'; +import 'dart:developer'; + +const String moduleName = "Change Drone Mode"; + +/// Define the MavMode constants and their string representations. +const Map mavModes = { + mavModePreflight: "Preflight", + mavModeManualDisarmed: "Manual Disarmed", + mavModeTestDisarmed: "Test Disarmed", + mavModeStabilizeDisarmed: "Stabilize Disarmed", + mavModeGuidedDisarmed: "Guided Disarmed", + mavModeAutoDisarmed: "Auto Disarmed", + mavModeManualArmed: "Manual Armed", + mavModeTestArmed: "Test Armed", + mavModeStabilizeArmed: "Stabilize Armed", + mavModeGuidedArmed: "Guided Armed", + mavModeAutoArmed: "Auto Armed", +}; class ChangeDroneMode { final MavlinkCommunication comm; @@ -15,5 +33,7 @@ class ChangeDroneMode { var frame = setMode(comm.sequence, systemID, componentID, baseMode); comm.sequence++; comm.write(frame); + + log('[$moduleName]: ${mavModes[baseMode]} mode set.'); } } diff --git a/flutter_app/lib/modules/mavlink_communication.dart b/flutter_app/lib/modules/mavlink_communication.dart index ef7762a..121d55b 100644 --- a/flutter_app/lib/modules/mavlink_communication.dart +++ b/flutter_app/lib/modules/mavlink_communication.dart @@ -1,10 +1,13 @@ import 'dart:typed_data'; import 'dart:io'; +import 'dart:developer'; import 'dart:async'; import 'package:flutter_libserialport/flutter_libserialport.dart'; import 'package:dart_mavlink/mavlink.dart'; import 'package:dart_mavlink/dialects/common.dart'; +const String moduleName = "Mavlink Communication"; + enum MavlinkCommunicationType { tcp, serial, @@ -28,9 +31,11 @@ class MavlinkCommunication { : _connectionType = connectionType { switch (_connectionType) { case MavlinkCommunicationType.tcp: + log('[$moduleName] Trying to start TCP connection'); _startupTcpPort(connectionAddress, tcpPort); break; case MavlinkCommunicationType.serial: + log('[$moduleName] Trying to start Serial connection'); _startupSerialPort(connectionAddress); break; } @@ -40,6 +45,7 @@ class MavlinkCommunication { // Connect to the socket _tcpSocket = await Socket.connect(connectionAddress, tcpPort); _tcpSocketInitializationFlag.complete(); + log('[$moduleName] TCP Port successfully initialized!'); } _startupSerialPort(String connectionAddress) { @@ -51,10 +57,14 @@ class MavlinkCommunication { _writeToTcpPort(MavlinkFrame frame) { _tcpSocket.write(frame.serialize()); + log('[$moduleName] Wrote a message to TCP Port. Frame ID: ${frame.componentId}'); + log('[$moduleName] Message: ${frame.message}'); } _writeToSerialPort(MavlinkFrame frame) { _serialPort.write(frame.serialize()); + log('[$moduleName] Wrote a message to Serial Port. Frame ID: ${frame.componentId}'); + log('[$moduleName] Message: ${frame.message}'); } // Send MAVLink messages diff --git a/flutter_app/lib/modules/queue_waypoints.dart b/flutter_app/lib/modules/queue_waypoints.dart index 241956b..75f1dc5 100644 --- a/flutter_app/lib/modules/queue_waypoints.dart +++ b/flutter_app/lib/modules/queue_waypoints.dart @@ -2,6 +2,9 @@ import 'package:dart_mavlink/mavlink.dart'; import 'package:imacs/modules/mavlink_communication.dart'; import 'package:imacs/command_constructors/create_waypoint_constructor.dart'; import 'package:dart_mavlink/dialects/common.dart'; +import 'dart:developer'; + +const String moduleName = "Queue Waypoints"; class QueueWaypoints { final MavlinkCommunication comm; @@ -23,6 +26,8 @@ class QueueWaypoints { newWaypoint.targetComponent, newWaypoint); comm.sequence++; comm.write(frame); + + log('[$moduleName] Added a waypoint at (Latitude: $latitude, Longitude: $longitude, Altitude: $altitude).'); } /// Queues a waypoint to be sent. @@ -33,6 +38,8 @@ class QueueWaypoints { comm.sequence, systemID, componentID, latitude, longitude, altitude); comm.sequence++; waypointQueue.add(newWaypoint); + + log('[$moduleName] Queued a waypoint to be sent at (Latitude: $latitude, Longitude: $longitude, Altitude: $altitude).'); } /// Takes first waypoint in the queue and send its to the drone @@ -46,6 +53,7 @@ class QueueWaypoints { var frame = MavlinkFrame.v2(waypoint.seq, waypoint.targetSystem, waypoint.targetComponent, waypoint); comm.write(frame); + log('[$moduleName] Sent waypoint to the drone from the queue (Latitude: ${waypoint.x}, Longitude: ${waypoint.y}, Altitude: ${waypoint.z}).'); } } } diff --git a/flutter_app/lib/widgets/change_mode_widget.dart b/flutter_app/lib/widgets/change_mode_widget.dart index c8de4b0..6dfc43c 100644 --- a/flutter_app/lib/widgets/change_mode_widget.dart +++ b/flutter_app/lib/widgets/change_mode_widget.dart @@ -1,21 +1,10 @@ +import 'dart:developer'; + import 'package:flutter/material.dart'; import 'package:dart_mavlink/dialects/common.dart'; import 'package:imacs/modules/change_drone_mode.dart'; -/// Define the MavMode constants and their string representations. -const Map mavModes = { - mavModePreflight: "Preflight", - mavModeManualDisarmed: "Manual Disarmed", - mavModeTestDisarmed: "Test Disarmed", - mavModeStabilizeDisarmed: "Stabilize Disarmed", - mavModeGuidedDisarmed: "Guided Disarmed", - mavModeAutoDisarmed: "Auto Disarmed", - mavModeManualArmed: "Manual Armed", - mavModeTestArmed: "Test Armed", - mavModeStabilizeArmed: "Stabilize Armed", - mavModeGuidedArmed: "Guided Armed", - mavModeAutoArmed: "Auto Armed", -}; +const String widgetName = "Change Drone Mode Widget"; /// Widget to change the mode of a drone using MAVLink communication. /// @@ -63,11 +52,14 @@ class DroneModeChangerState extends State { widget.componentId, _selectedMode!, ); - setState(() { - _confirmedMode = _selectedMode; - }); + setState( + () { + _confirmedMode = _selectedMode; + }, + ); + log("[$widgetName] ${mavModes[_selectedMode]} mode selected."); } else { - print('No mode selected'); + log('[$widgetName] ERROR: No mode selected.'); } } diff --git a/flutter_app/lib/widgets/drone_information_widget.dart b/flutter_app/lib/widgets/drone_information_widget.dart index ab9b895..063cf4f 100644 --- a/flutter_app/lib/widgets/drone_information_widget.dart +++ b/flutter_app/lib/widgets/drone_information_widget.dart @@ -24,8 +24,8 @@ class DroneInformation extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - height: 500, - width: 400, + height: 400, + width: 500, decoration: BoxDecoration( border: Border.all( color: Colors.black, diff --git a/flutter_app/pubspec.lock b/flutter_app/pubspec.lock index ae8500a..df9b2af 100644 --- a/flutter_app/pubspec.lock +++ b/flutter_app/pubspec.lock @@ -216,18 +216,18 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" url: "https://pub.dev" source: hosted - version: "10.0.4" + version: "10.0.5" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.5" leak_tracker_testing: dependency: transitive description: @@ -272,18 +272,18 @@ packages: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.15.0" mime: dependency: transitive description: @@ -437,26 +437,26 @@ packages: dependency: "direct dev" description: name: test - sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" + sha256: "7ee44229615f8f642b68120165ae4c2a75fe77ae2065b1e55ae4711f6cf0899e" url: "https://pub.dev" source: hosted - version: "1.25.2" + version: "1.25.7" test_api: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.7.2" test_core: dependency: transitive description: name: test_core - sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" + sha256: "55ea5a652e38a1dfb32943a7973f3681a60f872f8c3a05a14664ad54ef9c6696" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.4" typed_data: dependency: transitive description: @@ -477,10 +477,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "14.2.4" watcher: dependency: transitive description: