diff --git a/bluetooth/main.py b/bluetooth/main.py new file mode 100644 index 0000000..e69de29 diff --git a/bluetooth/services.proto b/bluetooth/services.proto new file mode 100644 index 0000000..72bcb5c --- /dev/null +++ b/bluetooth/services.proto @@ -0,0 +1,40 @@ +syntax = "proto3"; + +package g6_cli_utility; + +import "google/protobuf/timestamp.proto"; + +message StateData { + int32 id = 1; + google.protobuf.Timestamp timestamp = 2; // time sent to monitor latency + string text = 3; +} + +// Heartbeat message +message Beat { + int32 id = 1; + // google.protobuf.Timestamp timestamp = 2; + uint32 buffer = 2; // uint32 max +} +message Data { + int32 id = 1; + optional google.protobuf.Timestamp timestamp = 2; // FOR TESTING ONLY + string content = 3; +} + + +message Response { + string confirmation = 1; +} + +service RequiredCommands { + rpc Begin(Data) returns (Response); + rpc End(Data) returns (Response); + rpc Autopilot(Data) returns (Response); + rpc Reset(Data) returns (Response); + rpc Brake(Data) returns (Response); + rpc Accelerate(Data) returns (Response); + rpc Decelerate(Data) returns (Response); + rpc HeartBeat(Beat) returns (Response); + rpc SendStateData(StateData) returns (Response); +} diff --git a/bluetooth/services_pb2.py b/bluetooth/services_pb2.py new file mode 100644 index 0000000..5113ec1 --- /dev/null +++ b/bluetooth/services_pb2.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: services.proto +# Protobuf Python Version: 4.25.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0eservices.proto\x12\x0eg6_cli_utility\x1a\x1fgoogle/protobuf/timestamp.proto\"T\n\tStateData\x12\n\n\x02id\x18\x01 \x01(\x05\x12-\n\ttimestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0c\n\x04text\x18\x03 \x01(\t\"\"\n\x04\x42\x65\x61t\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x0e\n\x06\x62uffer\x18\x02 \x01(\r\"e\n\x04\x44\x61ta\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x32\n\ttimestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x88\x01\x01\x12\x0f\n\x07\x63ontent\x18\x03 \x01(\tB\x0c\n\n_timestamp\" \n\x08Response\x12\x14\n\x0c\x63onfirmation\x18\x01 \x01(\t2\xb0\x04\n\x10RequiredCommands\x12\x37\n\x05\x42\x65gin\x12\x14.g6_cli_utility.Data\x1a\x18.g6_cli_utility.Response\x12\x35\n\x03\x45nd\x12\x14.g6_cli_utility.Data\x1a\x18.g6_cli_utility.Response\x12;\n\tAutopilot\x12\x14.g6_cli_utility.Data\x1a\x18.g6_cli_utility.Response\x12\x37\n\x05Reset\x12\x14.g6_cli_utility.Data\x1a\x18.g6_cli_utility.Response\x12\x37\n\x05\x42rake\x12\x14.g6_cli_utility.Data\x1a\x18.g6_cli_utility.Response\x12<\n\nAccelerate\x12\x14.g6_cli_utility.Data\x1a\x18.g6_cli_utility.Response\x12<\n\nDecelerate\x12\x14.g6_cli_utility.Data\x1a\x18.g6_cli_utility.Response\x12;\n\tHeartBeat\x12\x14.g6_cli_utility.Beat\x1a\x18.g6_cli_utility.Response\x12\x44\n\rSendStateData\x12\x19.g6_cli_utility.StateData\x1a\x18.g6_cli_utility.Responseb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'services_pb2', _globals) +if _descriptor._USE_C_DESCRIPTORS == False: + DESCRIPTOR._options = None + _globals['_STATEDATA']._serialized_start=67 + _globals['_STATEDATA']._serialized_end=151 + _globals['_BEAT']._serialized_start=153 + _globals['_BEAT']._serialized_end=187 + _globals['_DATA']._serialized_start=189 + _globals['_DATA']._serialized_end=290 + _globals['_RESPONSE']._serialized_start=292 + _globals['_RESPONSE']._serialized_end=324 + _globals['_REQUIREDCOMMANDS']._serialized_start=327 + _globals['_REQUIREDCOMMANDS']._serialized_end=887 +# @@protoc_insertion_point(module_scope) diff --git a/bluetooth/services_pb2_grpc.py b/bluetooth/services_pb2_grpc.py new file mode 100644 index 0000000..c36d6ff --- /dev/null +++ b/bluetooth/services_pb2_grpc.py @@ -0,0 +1,330 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + +import services_pb2 as services__pb2 + + +class RequiredCommandsStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.Begin = channel.unary_unary( + '/g6_cli_utility.RequiredCommands/Begin', + request_serializer=services__pb2.Data.SerializeToString, + response_deserializer=services__pb2.Response.FromString, + ) + self.End = channel.unary_unary( + '/g6_cli_utility.RequiredCommands/End', + request_serializer=services__pb2.Data.SerializeToString, + response_deserializer=services__pb2.Response.FromString, + ) + self.Autopilot = channel.unary_unary( + '/g6_cli_utility.RequiredCommands/Autopilot', + request_serializer=services__pb2.Data.SerializeToString, + response_deserializer=services__pb2.Response.FromString, + ) + self.Reset = channel.unary_unary( + '/g6_cli_utility.RequiredCommands/Reset', + request_serializer=services__pb2.Data.SerializeToString, + response_deserializer=services__pb2.Response.FromString, + ) + self.Brake = channel.unary_unary( + '/g6_cli_utility.RequiredCommands/Brake', + request_serializer=services__pb2.Data.SerializeToString, + response_deserializer=services__pb2.Response.FromString, + ) + self.Accelerate = channel.unary_unary( + '/g6_cli_utility.RequiredCommands/Accelerate', + request_serializer=services__pb2.Data.SerializeToString, + response_deserializer=services__pb2.Response.FromString, + ) + self.Decelerate = channel.unary_unary( + '/g6_cli_utility.RequiredCommands/Decelerate', + request_serializer=services__pb2.Data.SerializeToString, + response_deserializer=services__pb2.Response.FromString, + ) + self.HeartBeat = channel.unary_unary( + '/g6_cli_utility.RequiredCommands/HeartBeat', + request_serializer=services__pb2.Beat.SerializeToString, + response_deserializer=services__pb2.Response.FromString, + ) + self.SendStateData = channel.unary_unary( + '/g6_cli_utility.RequiredCommands/SendStateData', + request_serializer=services__pb2.StateData.SerializeToString, + response_deserializer=services__pb2.Response.FromString, + ) + + +class RequiredCommandsServicer(object): + """Missing associated documentation comment in .proto file.""" + + def Begin(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def End(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Autopilot(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Reset(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Brake(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Accelerate(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Decelerate(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def HeartBeat(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SendStateData(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_RequiredCommandsServicer_to_server(servicer, server): + rpc_method_handlers = { + 'Begin': grpc.unary_unary_rpc_method_handler( + servicer.Begin, + request_deserializer=services__pb2.Data.FromString, + response_serializer=services__pb2.Response.SerializeToString, + ), + 'End': grpc.unary_unary_rpc_method_handler( + servicer.End, + request_deserializer=services__pb2.Data.FromString, + response_serializer=services__pb2.Response.SerializeToString, + ), + 'Autopilot': grpc.unary_unary_rpc_method_handler( + servicer.Autopilot, + request_deserializer=services__pb2.Data.FromString, + response_serializer=services__pb2.Response.SerializeToString, + ), + 'Reset': grpc.unary_unary_rpc_method_handler( + servicer.Reset, + request_deserializer=services__pb2.Data.FromString, + response_serializer=services__pb2.Response.SerializeToString, + ), + 'Brake': grpc.unary_unary_rpc_method_handler( + servicer.Brake, + request_deserializer=services__pb2.Data.FromString, + response_serializer=services__pb2.Response.SerializeToString, + ), + 'Accelerate': grpc.unary_unary_rpc_method_handler( + servicer.Accelerate, + request_deserializer=services__pb2.Data.FromString, + response_serializer=services__pb2.Response.SerializeToString, + ), + 'Decelerate': grpc.unary_unary_rpc_method_handler( + servicer.Decelerate, + request_deserializer=services__pb2.Data.FromString, + response_serializer=services__pb2.Response.SerializeToString, + ), + 'HeartBeat': grpc.unary_unary_rpc_method_handler( + servicer.HeartBeat, + request_deserializer=services__pb2.Beat.FromString, + response_serializer=services__pb2.Response.SerializeToString, + ), + 'SendStateData': grpc.unary_unary_rpc_method_handler( + servicer.SendStateData, + request_deserializer=services__pb2.StateData.FromString, + response_serializer=services__pb2.Response.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'g6_cli_utility.RequiredCommands', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class RequiredCommands(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def Begin(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/g6_cli_utility.RequiredCommands/Begin', + services__pb2.Data.SerializeToString, + services__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def End(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/g6_cli_utility.RequiredCommands/End', + services__pb2.Data.SerializeToString, + services__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def Autopilot(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/g6_cli_utility.RequiredCommands/Autopilot', + services__pb2.Data.SerializeToString, + services__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def Reset(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/g6_cli_utility.RequiredCommands/Reset', + services__pb2.Data.SerializeToString, + services__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def Brake(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/g6_cli_utility.RequiredCommands/Brake', + services__pb2.Data.SerializeToString, + services__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def Accelerate(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/g6_cli_utility.RequiredCommands/Accelerate', + services__pb2.Data.SerializeToString, + services__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def Decelerate(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/g6_cli_utility.RequiredCommands/Decelerate', + services__pb2.Data.SerializeToString, + services__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def HeartBeat(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/g6_cli_utility.RequiredCommands/HeartBeat', + services__pb2.Beat.SerializeToString, + services__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def SendStateData(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/g6_cli_utility.RequiredCommands/SendStateData', + services__pb2.StateData.SerializeToString, + services__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata)