diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 69304d5..b4b6a90 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,7 +22,7 @@ jobs: set -o pipefail python3 -m venv venv source ./venv/bin/activate - pip install protoc-gen-mavsdk + pip install "protoc-gen-mavsdk~=2.0" ./gradlew build - name: Build and prepare mavsdk-server working-directory: ./mavsdk_server @@ -81,7 +81,7 @@ jobs: set -o pipefail python3 -m venv venv source ./venv/bin/activate - pip install protoc-gen-mavsdk + pip install "protoc-gen-mavsdk~=2.0" ./gradlew build -PVERSION=${{ steps.version.outputs.tag_name }} ./gradlew publish -PVERSION=${{ steps.version.outputs.tag_name }} - name: Build and prepare mavsdk-server diff --git a/sdk/proto b/sdk/proto index 08c45fc..b5113c1 160000 --- a/sdk/proto +++ b/sdk/proto @@ -1 +1 @@ -Subproject commit 08c45fcc54e3aa3aa5bf8279e0146f4ebf065372 +Subproject commit b5113c15e125af48dee07f9affe83b6b1f4a2aab diff --git a/sdk/templates/call.j2 b/sdk/templates/call.j2 index fcafb60..b395f50 100644 --- a/sdk/templates/call.j2 +++ b/sdk/templates/call.j2 @@ -1,14 +1,14 @@ @CheckReturnValue -public Completable {{ name.lower_camel_case }}({% for param in params %}@NonNull {{ param.type_info.name }} {{ param.name.lower_camel_case }}{{ ", " if not loop.last }}{% endfor %}) { +public Completable {{ name.lower_camel_case }}({% for param in params %}@NonNull {% if param.type_info.is_primitive %}{{ param.type_info.name }}{% elif param.type_info.is_repeated %}List<{{ param.type_info.inner_name.upper_camel_case }}>{% else %}{{ param.type_info.name.upper_camel_case }}{% endif %} {{ param.name.lower_camel_case }}{{ ", " if not loop.last }}{% endfor %}) { {{ plugin_name.upper_camel_case }}Proto.{{ name.upper_camel_case }}Request request = {{ plugin_name.upper_camel_case }}Proto.{{ name.upper_camel_case }}Request.newBuilder() {%- for param in params %} {%- if param.type_info.is_primitive %} .set{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}) {%- elif param.type_info.is_repeated %} - .addAll{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}.stream().map(elem -> elem.rpc{{ param.type_info.inner_name }}())::iterator) + .addAll{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}.stream().map(elem -> elem.rpc{{ param.type_info.inner_name.upper_camel_case }}())::iterator) {%- else %} - .set{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}.rpc{{ param.type_info.name }}()) + .set{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}.rpc{{ param.type_info.name.upper_camel_case }}()) {%- endif %} {%- endfor %} .build(); diff --git a/sdk/templates/request.j2 b/sdk/templates/request.j2 index 660b938..7eeaa19 100644 --- a/sdk/templates/request.j2 +++ b/sdk/templates/request.j2 @@ -1,18 +1,18 @@ @CheckReturnValue -public Single<{% if return_type.is_primitive %}{{ return_type.name }}{% elif return_type.is_repeated %}List<{{ plugin_name.upper_camel_case }}.{{ return_type.inner_name }}>{% else %}{{ plugin_name.upper_camel_case }}.{{ return_type.name }}{% endif %}> {{ name.lower_camel_case }}{% if name.lower_camel_case == "getFlightInformation" %}Sync{% endif %}({% for param in params %}@NonNull {{ param.type_info.name }} {{ param.name.lower_camel_case }}{{ ", " if not loop.last }}{% endfor %}) { +public Single<{% if return_type.is_primitive %}{{ return_type.name }}{% elif return_type.is_repeated %}List<{{ plugin_name.upper_camel_case }}.{{ return_type.inner_name.upper_camel_case }}>{% else %}{{ plugin_name.upper_camel_case }}.{{ return_type.name.upper_camel_case }}{% endif %}> {{ name.lower_camel_case }}{% if name.lower_camel_case == "getFlightInformation" %}Sync{% endif %}({% for param in params %}@NonNull {% if param.type_info.is_primitive %}{{ param.type_info.name }}{% else %}{{ param.type_info.name.upper_camel_case }}{% endif %} {{ param.name.lower_camel_case }}{{ ", " if not loop.last }}{% endfor %}) { {{ plugin_name.upper_camel_case }}Proto.{{ name.upper_camel_case }}Request request = {{ plugin_name.upper_camel_case }}Proto.{{ name.upper_camel_case }}Request.newBuilder() {%- for param in params %} {%- if param.type_info.is_primitive %} .set{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}) {%- elif param.type_info.is_repeated %} - .addAll{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}.stream().map(elem -> elem.rpc{{ param.type_info.inner_name }}())::iterator) + .addAll{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}.stream().map(elem -> elem.rpc{{ param.type_info.inner_name.upper_camel_case }}())::iterator) {%- else %} - .set{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}.rpc{{ param.type_info.name }}()) + .set{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}.rpc{{ param.type_info.name.upper_camel_case }}()) {%- endif %} {%- endfor %} .build(); - Single<{% if return_type.is_primitive %}{{ return_type.name }}{% elif return_type.is_repeated %}List<{{ plugin_name.upper_camel_case }}.{{ return_type.inner_name }}>{% else %}{{ plugin_name.upper_camel_case }}.{{ return_type.name }}{% endif %}> single = Single.create(emitter -> { + Single<{% if return_type.is_primitive %}{{ return_type.name }}{% elif return_type.is_repeated %}List<{{ plugin_name.upper_camel_case }}.{{ return_type.inner_name.upper_camel_case }}>{% else %}{{ plugin_name.upper_camel_case }}.{{ return_type.name.upper_camel_case }}{% endif %}> single = Single.create(emitter -> { if (!isInitialized) { Thread.sleep(PLUGIN_INIT_TIMEOUT_MS); if (!isInitialized) { @@ -39,9 +39,9 @@ public Single<{% if return_type.is_primitive %}{{ return_type.name }}{% elif ret {%- endif %} {%- else %} {%- if return_type.is_repeated %} - emitter.onSuccess(value.get{{ return_name.upper_camel_case }}List().stream().map({{ return_type.inner_name }}::translateFromRpc).collect(Collectors.toList())); + emitter.onSuccess(value.get{{ return_name.upper_camel_case }}List().stream().map({{ return_type.inner_name.upper_camel_case }}::translateFromRpc).collect(Collectors.toList())); {%- else %} - emitter.onSuccess({{ return_type.name }}.translateFromRpc(value.get{{ return_name.upper_camel_case }}())); + emitter.onSuccess({{ return_type.name.upper_camel_case }}.translateFromRpc(value.get{{ return_name.upper_camel_case }}())); {%- endif %} {%- endif %} {%- if has_result %} diff --git a/sdk/templates/stream.j2 b/sdk/templates/stream.j2 index 1b8948a..6f76dcd 100644 --- a/sdk/templates/stream.j2 +++ b/sdk/templates/stream.j2 @@ -1,18 +1,18 @@ {% if not is_finite %} // Infinite stream -private final FlowableProcessor<{% if return_type.is_primitive %}{{ return_type.name }}{% elif return_type.is_repeated %}List<{{ plugin_name.upper_camel_case }}.{{ return_type.inner_name }}>{% else %}{{ plugin_name.upper_camel_case }}.{{ return_type.name }}{% endif %}> {{ name.lower_camel_case }}Processor = PublishProcessor.create(); -private final Flowable<{% if return_type.is_primitive %}{{ return_type.name }}{% elif return_type.is_repeated %}List<{{ plugin_name.upper_camel_case }}.{{ return_type.inner_name }}>{% else %}{{ plugin_name.upper_camel_case }}.{{ return_type.name }}{% endif %}> {{ name.lower_camel_case }} = {{ name.lower_camel_case }}Processor.onBackpressureBuffer().share();; +private final FlowableProcessor<{% if return_type.is_primitive %}{{ return_type.name }}{% elif return_type.is_repeated %}List<{{ plugin_name.upper_camel_case }}.{{ return_type.inner_name.upper_camel_case }}>{% else %}{{ plugin_name.upper_camel_case }}.{{ return_type.name.upper_camel_case }}{% endif %}> {{ name.lower_camel_case }}Processor = PublishProcessor.create(); +private final Flowable<{% if return_type.is_primitive %}{{ return_type.name }}{% elif return_type.is_repeated %}List<{{ plugin_name.upper_camel_case }}.{{ return_type.inner_name.upper_camel_case }}>{% else %}{{ plugin_name.upper_camel_case }}.{{ return_type.name.upper_camel_case }}{% endif %}> {{ name.lower_camel_case }} = {{ name.lower_camel_case }}Processor.onBackpressureBuffer().share();; private volatile boolean is{{ name.upper_camel_case }}Initialized = false; -private void process{{ name.upper_camel_case }}({% for param in params %}@NonNull {{ param.type_info.name }} {{ param.name.lower_camel_case }}{{ ", " if not loop.last }}{% endfor %}) { +private void process{{ name.upper_camel_case }}({% for param in params %}@NonNull {% if param.type_info.is_primitive %}{{ param.type_info.name }}{% else %}{{ param.type_info.name.upper_camel_case }}{% endif %} {{ param.name.lower_camel_case }}{{ ", " if not loop.last }}{% endfor %}) { {{ plugin_name.upper_camel_case }}Proto.Subscribe{{ name.upper_camel_case }}Request request = {{ plugin_name.upper_camel_case }}Proto.Subscribe{{ name.upper_camel_case }}Request.newBuilder() {%- for param in params %} {%- if param.type_info.is_primitive %} .set{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}) {%- elif param.type_info.is_repeated %} - .addAll{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}.stream().map(elem -> elem.rpc{{ param.type_info.inner_name }}())::iterator) + .addAll{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}.stream().map(elem -> elem.rpc{{ param.type_info.inner_name.upper_camel_case }}())::iterator) {%- else %} - .set{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}.rpc{{ param.type_info.name }}()) + .set{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}.rpc{{ param.type_info.name.upper_camel_case }}()) {%- endif %} {%- endfor %} .build(); @@ -25,13 +25,13 @@ private void process{{ name.upper_camel_case }}({% for param in params %}@NonNul {%- if return_type.is_primitive %} {{ name.lower_camel_case }}Processor.onNext(value.get{{ return_name.upper_camel_case }}List()); {%- else %} - {{ name.lower_camel_case }}Processor.onNext(value.get{{ return_name.upper_camel_case }}List().stream().map({{ return_type.inner_name }}::translateFromRpc).collect(Collectors.toList())); + {{ name.lower_camel_case }}Processor.onNext(value.get{{ return_name.upper_camel_case }}List().stream().map({{ return_type.inner_name.upper_camel_case }}::translateFromRpc).collect(Collectors.toList())); {%- endif %} {%- else %} {%- if return_type.is_primitive %} {{ name.lower_camel_case }}Processor.onNext(value.get{{ return_name.upper_camel_case }}()); {%- else %} - {{ name.lower_camel_case }}Processor.onNext({{ return_type.name }}.translateFromRpc(value.get{{ return_name.upper_camel_case }}())); + {{ name.lower_camel_case }}Processor.onNext({{ return_type.name.upper_camel_case }}.translateFromRpc(value.get{{ return_name.upper_camel_case }}())); {%- endif %} {%- endif %} } @@ -49,7 +49,7 @@ private void process{{ name.upper_camel_case }}({% for param in params %}@NonNul } @CheckReturnValue -public Flowable<{% if return_type.is_primitive %}{{ return_type.name }}{% elif return_type.is_repeated %}List<{{ plugin_name.upper_camel_case }}.{{ return_type.inner_name }}>{% else %}{{ plugin_name.upper_camel_case }}.{{ return_type.name }}{% endif %}> get{{ name.upper_camel_case }}({% for param in params %}@NonNull {{ param.type_info.name }} {{ param.name.lower_camel_case }}{{ ", " if not loop.last }}{% endfor %}) { +public Flowable<{% if return_type.is_primitive %}{{ return_type.name }}{% elif return_type.is_repeated %}List<{{ plugin_name.upper_camel_case }}.{{ return_type.inner_name.upper_camel_case }}>{% else %}{{ plugin_name.upper_camel_case }}.{{ return_type.name.upper_camel_case }}{% endif %}> get{{ name.upper_camel_case }}({% for param in params %}@NonNull {% if param.type_info.is_primitive %}{{ param.type_info.name }}{% else %}{{ param.type_info.name.upper_camel_case }}{% endif %} {{ param.name.lower_camel_case }}{{ ", " if not loop.last }}{% endfor %}) { if (!is{{ name.upper_camel_case }}Initialized) { synchronized (this) { if (!is{{ name.upper_camel_case }}Initialized) { @@ -63,20 +63,20 @@ public Flowable<{% if return_type.is_primitive %}{{ return_type.name }}{% elif r {% else %} // Finite stream -private Flowable<{% if return_type.is_primitive %}{{ return_type.name }}{% elif return_type.is_repeated %}List<{{ plugin_name.upper_camel_case }}.{{ return_type.inner_name }}>{% else %}{{ plugin_name.upper_camel_case }}.{{ return_type.name }}{% endif %}> create{{ name.upper_camel_case }}({% for param in params %}{{ param.type_info.name }} {{ param.name.lower_camel_case }}{{ ", " if not loop.last }}{% endfor %}) { +private Flowable<{% if return_type.is_primitive %}{{ return_type.name }}{% elif return_type.is_repeated %}List<{{ plugin_name.upper_camel_case }}.{{ return_type.inner_name.upper_camel_case }}>{% else %}{{ plugin_name.upper_camel_case }}.{{ return_type.name.upper_camel_case }}{% endif %}> create{{ name.upper_camel_case }}({% for param in params %}{% if param.type_info.is_primitive %}{{ param.type_info.name }}{% else %}{{ param.type_info.name.upper_camel_case }}{% endif %} {{ param.name.lower_camel_case }}{{ ", " if not loop.last }}{% endfor %}) { {{ plugin_name.upper_camel_case }}Proto.Subscribe{{ name.upper_camel_case }}Request request = {{ plugin_name.upper_camel_case }}Proto.Subscribe{{ name.upper_camel_case }}Request.newBuilder() {%- for param in params %} {%- if param.type_info.is_primitive %} .set{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}) {%- elif param.type_info.is_repeated %} - .addAll{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}.stream().map(elem -> elem.rpc{{ param.type_info.inner_name }}())::iterator) + .addAll{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}.stream().map(elem -> elem.rpc{{ param.type_info.inner_name.upper_camel_case }}())::iterator) {%- else %} - .set{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}.rpc{{ param.type_info.name }}()) + .set{{ param.name.upper_camel_case }}({{ param.name.lower_camel_case }}.rpc{{ param.type_info.name.upper_camel_case }}()) {%- endif %} {%- endfor %} .build(); - Flowable<{% if return_type.is_primitive %}{{ return_type.name }}{% elif return_type.is_repeated %}List<{{ plugin_name.upper_camel_case }}.{{ return_type.inner_name }}>{% else %}{{ plugin_name.upper_camel_case }}.{{ return_type.name }}{% endif %}> flowable = Flowable.create(emitter -> { + Flowable<{% if return_type.is_primitive %}{{ return_type.name }}{% elif return_type.is_repeated %}List<{{ plugin_name.upper_camel_case }}.{{ return_type.inner_name.upper_camel_case }}>{% else %}{{ plugin_name.upper_camel_case }}.{{ return_type.name.upper_camel_case }}{% endif %}> flowable = Flowable.create(emitter -> { if (!isInitialized) { Thread.sleep(PLUGIN_INIT_TIMEOUT_MS); if (!isInitialized) { @@ -99,13 +99,13 @@ private Flowable<{% if return_type.is_primitive %}{{ return_type.name }}{% elif {%- if return_type.is_primitive %} emitter.onNext(value.get{{ return_name.upper_camel_case }}List()); {%- else %} - emitter.onNext(value.get{{ return_name.upper_camel_case }}List().stream().map({{ return_type.inner_name }}::translateFromRpc).collect(Collectors.toList())); + emitter.onNext(value.get{{ return_name.upper_camel_case }}List().stream().map({{ return_type.inner_name.upper_camel_case }}::translateFromRpc).collect(Collectors.toList())); {%- endif %} {%- else %} {%- if return_type.is_primitive %} emitter.onNext(value.get{{ return_name.upper_camel_case }}()); {%- else %} - emitter.onNext({{ return_type.name }}.translateFromRpc(value.get{{ return_name.upper_camel_case }}())); + emitter.onNext({{ return_type.name.upper_camel_case }}.translateFromRpc(value.get{{ return_name.upper_camel_case }}())); {%- endif %} {%- endif %} break; @@ -131,7 +131,7 @@ private Flowable<{% if return_type.is_primitive %}{{ return_type.name }}{% elif } @CheckReturnValue -public Flowable<{% if return_type.is_primitive %}{{ return_type.name }}{% elif return_type.is_repeated %}List<{{ plugin_name.upper_camel_case }}.{{ return_type.inner_name }}>{% else %}{{ plugin_name.upper_camel_case }}.{{ return_type.name }}{% endif %}> {{ name.lower_camel_case }}({% for param in params %}@NonNull {{ param.type_info.name }} {{ param.name.lower_camel_case }}{{ ", " if not loop.last }}{% endfor %}) { +public Flowable<{% if return_type.is_primitive %}{{ return_type.name }}{% elif return_type.is_repeated %}List<{{ plugin_name.upper_camel_case }}.{{ return_type.inner_name.upper_camel_case }}>{% else %}{{ plugin_name.upper_camel_case }}.{{ return_type.name.upper_camel_case }}{% endif %}> {{ name.lower_camel_case }}({% for param in params %}@NonNull {% if param.type_info.is_primitive %}{{ param.type_info.name }}{% else %}{{ param.type_info.name.upper_camel_case }}{% endif %} {{ param.name.lower_camel_case }}{{ ", " if not loop.last }}{% endfor %}) { return create{{ name.upper_camel_case }}({% for param in params %}{{ param.name.lower_camel_case }}{{ ", " if not loop.last }}{% endfor %}); } diff --git a/sdk/templates/struct.j2 b/sdk/templates/struct.j2 index 8b3ad75..f0faf2c 100644 --- a/sdk/templates/struct.j2 +++ b/sdk/templates/struct.j2 @@ -1,20 +1,26 @@ public static class {{ name.upper_camel_case }} { {%- for field in fields %} + {%- if field.type_info.is_primitive %} private {{ field.type_info.name }} {{ field.name.lower_camel_case }}; + {%- elif field.type_info.is_repeated %} + private List<{{ field.type_info.inner_name.upper_camel_case }}> {{ field.name.lower_camel_case }}; + {%- else %} + private {{ field.type_info.name.upper_camel_case }} {{ field.name.lower_camel_case }}; + {%- endif %} {%- endfor %} {%- for nested_enum in nested_enums %} {{ '\n' + indent(nested_enums[nested_enum], 1) }} {%- endfor %} - public {{ name.upper_camel_case }}({%- for field in fields %}{{ field.type_info.name }} {{ field.name.lower_camel_case }}{{ ", " if not loop.last }}{%- endfor %}) { + public {{ name.upper_camel_case }}({%- for field in fields %}{% if field.type_info.is_primitive %}{{ field.type_info.name }}{% elif field.type_info.is_repeated %}List<{{ field.type_info.inner_name.upper_camel_case }}>{% else %}{{ field.type_info.name.upper_camel_case }}{% endif %} {{ field.name.lower_camel_case }}{{ ", " if not loop.last }}{%- endfor %}) { {%- for field in fields %} this.{{ field.name.lower_camel_case }} = {{ field.name.lower_camel_case }}; {%- endfor %} } {%- for field in fields %} - public {{ field.type_info.name }} get{{ field.name.upper_camel_case }}() { + public {% if field.type_info.is_primitive %}{{ field.type_info.name }}{% elif field.type_info.is_repeated %}List<{{ field.type_info.inner_name.upper_camel_case }}>{% else %}{{ field.type_info.name.upper_camel_case }}{% endif %} get{{ field.name.upper_camel_case }}() { return {{ field.name.lower_camel_case }}; } {%- endfor %} @@ -26,13 +32,13 @@ public static class {{ name.upper_camel_case }} { {%- if field.type_info.is_primitive %} .addAll{{ field.name.upper_camel_case }}({{ field.name.lower_camel_case }}) {%- else %} - .addAll{{ field.name.upper_camel_case }}({{ field.name.lower_camel_case }}.stream().map({{ field.type_info.inner_name }}::rpc{{ field.type_info.inner_name }}).collect(Collectors.toList())) + .addAll{{ field.name.upper_camel_case }}({{ field.name.lower_camel_case }}.stream().map({{ field.type_info.inner_name.upper_camel_case }}::rpc{{ field.type_info.inner_name.upper_camel_case }}).collect(Collectors.toList())) {%- endif %} {%- else %} {%- if field.type_info.is_primitive %} .set{{ field.name.upper_camel_case }}(this.{{ field.name.lower_camel_case }}) {%- else %} - .set{{ field.name.upper_camel_case }}(this.{{ field.name.lower_camel_case }}.rpc{{ field.type_info.inner_name }}()) + .set{{ field.name.upper_camel_case }}(this.{{ field.name.lower_camel_case }}.rpc{{ field.type_info.inner_name.upper_camel_case }}()) {%- endif %} {%- endif %} {%- endfor %} @@ -46,13 +52,13 @@ public static class {{ name.upper_camel_case }} { {%- if field.type_info.is_primitive %} rpc{{ name.upper_camel_case }}.get{{ field.name.upper_camel_case }}List(){{ "," if not loop.last }} {%- else %} - rpc{{ name.upper_camel_case }}.get{{ field.name.upper_camel_case }}List().stream().map({{ field.type_info.inner_name }}::translateFromRpc).collect(Collectors.toList()){{ "," if not loop.last }} + rpc{{ name.upper_camel_case }}.get{{ field.name.upper_camel_case }}List().stream().map({{ field.type_info.inner_name.upper_camel_case }}::translateFromRpc).collect(Collectors.toList()){{ "," if not loop.last }} {%- endif %} {%- else %} {%- if field.type_info.is_primitive %} rpc{{ name.upper_camel_case }}.get{{ field.name.upper_camel_case }}(){{ "," if not loop.last }} {%- else %} - {{ field.type_info.name }}.translateFromRpc(rpc{{ name.upper_camel_case }}.get{{ field.name.upper_camel_case }}()){{ "," if not loop.last }} + {{ field.type_info.name.upper_camel_case }}.translateFromRpc(rpc{{ name.upper_camel_case }}.get{{ field.name.upper_camel_case }}()){{ "," if not loop.last }} {%- endif %} {%- endif %} {%- endfor %});