result = new ArrayList<>();
try {
MultipartFile file = convertFileToMultipartFile(filePath);
- MultipartFile deepFile = convertFileToMultipartFile(deepFilePath);
- String imageUrl = sysFileService.uploadFile(file, FileType.IMAGE.code());
- result.add(imageUrl);
- String deepImageUrl = sysFileService.uploadFile(deepFile, FileType.IMAGE.code());
- result.add(deepImageUrl);
+// MultipartFile deepFile = convertFileToMultipartFile(deepFilePath);
+ return sysFileService.uploadFile(file, FileType.IMAGE.code());
+// result.add(imageUrl);
+// String deepImageUrl = sysFileService.uploadFile(deepFile, FileType.IMAGE.code());
+// result.add(deepImageUrl);
} catch (IOException e) {
throw new GlobalException("图片上传失败: " + e.getMessage());
} finally {
deleteTempFile(filePath);
- deleteTempFile(deepFilePath);
+// deleteTempFile(deepFilePath);
// todo 暂时不关闭摄像头
// stop(terminalId, deviceId);
}
- return JSON.toJSONString(result);
+// return JSON.toJSONString(result);
}
// 缓冲区和收集状态
diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/service/impl/EdgeHlcServiceImpl.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/service/impl/EdgeHlcServiceImpl.java
new file mode 100644
index 0000000..2704735
--- /dev/null
+++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/service/impl/EdgeHlcServiceImpl.java
@@ -0,0 +1,84 @@
+package com.cmvr.edge.client.service.impl;
+
+import cmvr.api.HlcCommand;
+import cmvr.api.HlcServiceGrpc;
+import com.alibaba.fastjson2.JSON;
+import com.cmvr.edge.client.manage.GrpcServiceManager;
+import com.cmvr.edge.client.service.EdgeHlcService;
+import com.cmvr.edge.client.utils.EdgeCommonUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class EdgeHlcServiceImpl implements EdgeHlcService {
+
+ private final GrpcServiceManager grpcServiceManager;
+
+ @Override
+ public String touch(File image, String terminalId, String deviceId, int x, int y, double maxForce) {
+ HlcServiceGrpc.HlcServiceBlockingStub stub = grpcServiceManager.getGrpcClient(terminalId, HlcServiceGrpc.HlcServiceBlockingStub.class);
+ HlcCommand.Touch.Request request = HlcCommand.Touch.Request.newBuilder()
+ .setHeader(EdgeCommonUtil.buildRequest(deviceId))
+ .setU(x)
+ .setV(y)
+ .setMaxForce(maxForce)
+ .build();
+ String response = JSON.toJSONString(stub.touch(request).getHeader());
+ log.info("触控调用成功,响应结果:{}", response);
+ markPoint(image,x,y);
+ return response;
+ }
+
+ /**
+ * 在图片中指定坐标点进行标注
+ *
+ * @param imageFile 原始图片文件
+ * @param x 坐标 X
+ * @param y 坐标 Y
+ */
+ @Override
+ public void markPoint(File imageFile, int x, int y) {
+ // 读入图片
+ BufferedImage image;
+ try {
+ image = ImageIO.read(imageFile);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ Graphics2D g = image.createGraphics();
+
+ // 抗锯齿
+ g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+
+ // 设置画笔颜色
+ g.setColor(Color.GREEN);
+
+ // 半径
+ int radius = 5;
+ // 画实心圆
+ g.fillOval(x - radius, y - radius, radius * 2, radius * 2);
+
+ g.dispose();
+
+ // 输出文件
+ String outPath = imageFile.getParent() + File.separator +
+ "marked_" + imageFile.getName();
+ File outFile = new File(outPath);
+
+ try {
+ ImageIO.write(image, "png", outFile);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ log.info("图片标注成功:{}", outPath);
+ }
+}
diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/HlcCommand.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/HlcCommand.java
new file mode 100644
index 0000000..5e99b5d
--- /dev/null
+++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/HlcCommand.java
@@ -0,0 +1,1942 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: cmvr/api/hlc_command.proto
+
+package cmvr.api;
+
+public final class HlcCommand {
+ private HlcCommand() {}
+ public static void registerAllExtensions(
+ com.google.protobuf.ExtensionRegistryLite registry) {
+ }
+
+ public static void registerAllExtensions(
+ com.google.protobuf.ExtensionRegistry registry) {
+ registerAllExtensions(
+ (com.google.protobuf.ExtensionRegistryLite) registry);
+ }
+ public interface TouchOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:cmvr.api.Touch)
+ com.google.protobuf.MessageOrBuilder {
+ }
+ /**
+ * Protobuf type {@code cmvr.api.Touch}
+ */
+ public static final class Touch extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:cmvr.api.Touch)
+ TouchOrBuilder {
+ private static final long serialVersionUID = 0L;
+ // Use Touch.newBuilder() to construct.
+ private Touch(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
+ super(builder);
+ }
+ private Touch() {
+ }
+
+ @java.lang.Override
+ @SuppressWarnings({"unused"})
+ protected java.lang.Object newInstance(
+ UnusedPrivateParameter unused) {
+ return new Touch();
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet
+ getUnknownFields() {
+ return this.unknownFields;
+ }
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return cmvr.api.HlcCommand.internal_static_cmvr_api_Touch_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return cmvr.api.HlcCommand.internal_static_cmvr_api_Touch_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ cmvr.api.HlcCommand.Touch.class, cmvr.api.HlcCommand.Touch.Builder.class);
+ }
+
+ public interface RequestOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:cmvr.api.Touch.Request)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * .cmvr.api.CommandHeader.Request header = 1;
+ * @return Whether the header field is set.
+ */
+ boolean hasHeader();
+ /**
+ * .cmvr.api.CommandHeader.Request header = 1;
+ * @return The header.
+ */
+ cmvr.api.Common.CommandHeader.Request getHeader();
+ /**
+ * .cmvr.api.CommandHeader.Request header = 1;
+ */
+ cmvr.api.Common.CommandHeader.RequestOrBuilder getHeaderOrBuilder();
+
+ /**
+ *
+ * 触点坐标,unit: ms
+ *
+ *
+ * int32 u = 2;
+ * @return The u.
+ */
+ int getU();
+
+ /**
+ *
+ * 垂直坐标
+ *
+ *
+ * int32 v = 3;
+ * @return The v.
+ */
+ int getV();
+
+ /**
+ *
+ * 触控时允许的最大作用力,unit: N
+ *
+ *
+ * double max_force = 4;
+ * @return The maxForce.
+ */
+ double getMaxForce();
+ }
+ /**
+ * Protobuf type {@code cmvr.api.Touch.Request}
+ */
+ public static final class Request extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:cmvr.api.Touch.Request)
+ RequestOrBuilder {
+ private static final long serialVersionUID = 0L;
+ // Use Request.newBuilder() to construct.
+ private Request(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
+ super(builder);
+ }
+ private Request() {
+ }
+
+ @java.lang.Override
+ @SuppressWarnings({"unused"})
+ protected java.lang.Object newInstance(
+ UnusedPrivateParameter unused) {
+ return new Request();
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet
+ getUnknownFields() {
+ return this.unknownFields;
+ }
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return cmvr.api.HlcCommand.internal_static_cmvr_api_Touch_Request_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return cmvr.api.HlcCommand.internal_static_cmvr_api_Touch_Request_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ cmvr.api.HlcCommand.Touch.Request.class, cmvr.api.HlcCommand.Touch.Request.Builder.class);
+ }
+
+ public static final int HEADER_FIELD_NUMBER = 1;
+ private cmvr.api.Common.CommandHeader.Request header_;
+ /**
+ * .cmvr.api.CommandHeader.Request header = 1;
+ * @return Whether the header field is set.
+ */
+ @java.lang.Override
+ public boolean hasHeader() {
+ return header_ != null;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Request header = 1;
+ * @return The header.
+ */
+ @java.lang.Override
+ public cmvr.api.Common.CommandHeader.Request getHeader() {
+ return header_ == null ? cmvr.api.Common.CommandHeader.Request.getDefaultInstance() : header_;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Request header = 1;
+ */
+ @java.lang.Override
+ public cmvr.api.Common.CommandHeader.RequestOrBuilder getHeaderOrBuilder() {
+ return getHeader();
+ }
+
+ public static final int U_FIELD_NUMBER = 2;
+ private int u_;
+ /**
+ *
+ * 触点坐标,unit: ms
+ *
+ *
+ * int32 u = 2;
+ * @return The u.
+ */
+ @java.lang.Override
+ public int getU() {
+ return u_;
+ }
+
+ public static final int V_FIELD_NUMBER = 3;
+ private int v_;
+ /**
+ *
+ * 垂直坐标
+ *
+ *
+ * int32 v = 3;
+ * @return The v.
+ */
+ @java.lang.Override
+ public int getV() {
+ return v_;
+ }
+
+ public static final int MAX_FORCE_FIELD_NUMBER = 4;
+ private double maxForce_;
+ /**
+ *
+ * 触控时允许的最大作用力,unit: N
+ *
+ *
+ * double max_force = 4;
+ * @return The maxForce.
+ */
+ @java.lang.Override
+ public double getMaxForce() {
+ return maxForce_;
+ }
+
+ private byte memoizedIsInitialized = -1;
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ if (header_ != null) {
+ output.writeMessage(1, getHeader());
+ }
+ if (u_ != 0) {
+ output.writeInt32(2, u_);
+ }
+ if (v_ != 0) {
+ output.writeInt32(3, v_);
+ }
+ if (java.lang.Double.doubleToRawLongBits(maxForce_) != 0) {
+ output.writeDouble(4, maxForce_);
+ }
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (header_ != null) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeMessageSize(1, getHeader());
+ }
+ if (u_ != 0) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeInt32Size(2, u_);
+ }
+ if (v_ != 0) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeInt32Size(3, v_);
+ }
+ if (java.lang.Double.doubleToRawLongBits(maxForce_) != 0) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeDoubleSize(4, maxForce_);
+ }
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof cmvr.api.HlcCommand.Touch.Request)) {
+ return super.equals(obj);
+ }
+ cmvr.api.HlcCommand.Touch.Request other = (cmvr.api.HlcCommand.Touch.Request) obj;
+
+ if (hasHeader() != other.hasHeader()) return false;
+ if (hasHeader()) {
+ if (!getHeader()
+ .equals(other.getHeader())) return false;
+ }
+ if (getU()
+ != other.getU()) return false;
+ if (getV()
+ != other.getV()) return false;
+ if (java.lang.Double.doubleToLongBits(getMaxForce())
+ != java.lang.Double.doubleToLongBits(
+ other.getMaxForce())) return false;
+ if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ if (hasHeader()) {
+ hash = (37 * hash) + HEADER_FIELD_NUMBER;
+ hash = (53 * hash) + getHeader().hashCode();
+ }
+ hash = (37 * hash) + U_FIELD_NUMBER;
+ hash = (53 * hash) + getU();
+ hash = (37 * hash) + V_FIELD_NUMBER;
+ hash = (53 * hash) + getV();
+ hash = (37 * hash) + MAX_FORCE_FIELD_NUMBER;
+ hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+ java.lang.Double.doubleToLongBits(getMaxForce()));
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static cmvr.api.HlcCommand.Touch.Request parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.HlcCommand.Touch.Request parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.HlcCommand.Touch.Request parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.HlcCommand.Touch.Request parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.HlcCommand.Touch.Request parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.HlcCommand.Touch.Request parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.HlcCommand.Touch.Request parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static cmvr.api.HlcCommand.Touch.Request parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static cmvr.api.HlcCommand.Touch.Request parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+ public static cmvr.api.HlcCommand.Touch.Request parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static cmvr.api.HlcCommand.Touch.Request parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static cmvr.api.HlcCommand.Touch.Request parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(cmvr.api.HlcCommand.Touch.Request prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * Protobuf type {@code cmvr.api.Touch.Request}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder implements
+ // @@protoc_insertion_point(builder_implements:cmvr.api.Touch.Request)
+ cmvr.api.HlcCommand.Touch.RequestOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return cmvr.api.HlcCommand.internal_static_cmvr_api_Touch_Request_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return cmvr.api.HlcCommand.internal_static_cmvr_api_Touch_Request_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ cmvr.api.HlcCommand.Touch.Request.class, cmvr.api.HlcCommand.Touch.Request.Builder.class);
+ }
+
+ // Construct using cmvr.api.HlcCommand.Touch.Request.newBuilder()
+ private Builder() {
+
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+
+ }
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ if (headerBuilder_ == null) {
+ header_ = null;
+ } else {
+ header_ = null;
+ headerBuilder_ = null;
+ }
+ u_ = 0;
+
+ v_ = 0;
+
+ maxForce_ = 0D;
+
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return cmvr.api.HlcCommand.internal_static_cmvr_api_Touch_Request_descriptor;
+ }
+
+ @java.lang.Override
+ public cmvr.api.HlcCommand.Touch.Request getDefaultInstanceForType() {
+ return cmvr.api.HlcCommand.Touch.Request.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public cmvr.api.HlcCommand.Touch.Request build() {
+ cmvr.api.HlcCommand.Touch.Request result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public cmvr.api.HlcCommand.Touch.Request buildPartial() {
+ cmvr.api.HlcCommand.Touch.Request result = new cmvr.api.HlcCommand.Touch.Request(this);
+ if (headerBuilder_ == null) {
+ result.header_ = header_;
+ } else {
+ result.header_ = headerBuilder_.build();
+ }
+ result.u_ = u_;
+ result.v_ = v_;
+ result.maxForce_ = maxForce_;
+ onBuilt();
+ return result;
+ }
+
+ @java.lang.Override
+ public Builder clone() {
+ return super.clone();
+ }
+ @java.lang.Override
+ public Builder setField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return super.setField(field, value);
+ }
+ @java.lang.Override
+ public Builder clearField(
+ com.google.protobuf.Descriptors.FieldDescriptor field) {
+ return super.clearField(field);
+ }
+ @java.lang.Override
+ public Builder clearOneof(
+ com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+ return super.clearOneof(oneof);
+ }
+ @java.lang.Override
+ public Builder setRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ int index, java.lang.Object value) {
+ return super.setRepeatedField(field, index, value);
+ }
+ @java.lang.Override
+ public Builder addRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return super.addRepeatedField(field, value);
+ }
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof cmvr.api.HlcCommand.Touch.Request) {
+ return mergeFrom((cmvr.api.HlcCommand.Touch.Request)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(cmvr.api.HlcCommand.Touch.Request other) {
+ if (other == cmvr.api.HlcCommand.Touch.Request.getDefaultInstance()) return this;
+ if (other.hasHeader()) {
+ mergeHeader(other.getHeader());
+ }
+ if (other.getU() != 0) {
+ setU(other.getU());
+ }
+ if (other.getV() != 0) {
+ setV(other.getV());
+ }
+ if (other.getMaxForce() != 0D) {
+ setMaxForce(other.getMaxForce());
+ }
+ this.mergeUnknownFields(other.getUnknownFields());
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ case 10: {
+ input.readMessage(
+ getHeaderFieldBuilder().getBuilder(),
+ extensionRegistry);
+
+ break;
+ } // case 10
+ case 16: {
+ u_ = input.readInt32();
+
+ break;
+ } // case 16
+ case 24: {
+ v_ = input.readInt32();
+
+ break;
+ } // case 24
+ case 33: {
+ maxForce_ = input.readDouble();
+
+ break;
+ } // case 33
+ default: {
+ if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+ done = true; // was an endgroup tag
+ }
+ break;
+ } // default:
+ } // switch (tag)
+ } // while (!done)
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.unwrapIOException();
+ } finally {
+ onChanged();
+ } // finally
+ return this;
+ }
+
+ private cmvr.api.Common.CommandHeader.Request header_;
+ private com.google.protobuf.SingleFieldBuilderV3<
+ cmvr.api.Common.CommandHeader.Request, cmvr.api.Common.CommandHeader.Request.Builder, cmvr.api.Common.CommandHeader.RequestOrBuilder> headerBuilder_;
+ /**
+ * .cmvr.api.CommandHeader.Request header = 1;
+ * @return Whether the header field is set.
+ */
+ public boolean hasHeader() {
+ return headerBuilder_ != null || header_ != null;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Request header = 1;
+ * @return The header.
+ */
+ public cmvr.api.Common.CommandHeader.Request getHeader() {
+ if (headerBuilder_ == null) {
+ return header_ == null ? cmvr.api.Common.CommandHeader.Request.getDefaultInstance() : header_;
+ } else {
+ return headerBuilder_.getMessage();
+ }
+ }
+ /**
+ * .cmvr.api.CommandHeader.Request header = 1;
+ */
+ public Builder setHeader(cmvr.api.Common.CommandHeader.Request value) {
+ if (headerBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ header_ = value;
+ onChanged();
+ } else {
+ headerBuilder_.setMessage(value);
+ }
+
+ return this;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Request header = 1;
+ */
+ public Builder setHeader(
+ cmvr.api.Common.CommandHeader.Request.Builder builderForValue) {
+ if (headerBuilder_ == null) {
+ header_ = builderForValue.build();
+ onChanged();
+ } else {
+ headerBuilder_.setMessage(builderForValue.build());
+ }
+
+ return this;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Request header = 1;
+ */
+ public Builder mergeHeader(cmvr.api.Common.CommandHeader.Request value) {
+ if (headerBuilder_ == null) {
+ if (header_ != null) {
+ header_ =
+ cmvr.api.Common.CommandHeader.Request.newBuilder(header_).mergeFrom(value).buildPartial();
+ } else {
+ header_ = value;
+ }
+ onChanged();
+ } else {
+ headerBuilder_.mergeFrom(value);
+ }
+
+ return this;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Request header = 1;
+ */
+ public Builder clearHeader() {
+ if (headerBuilder_ == null) {
+ header_ = null;
+ onChanged();
+ } else {
+ header_ = null;
+ headerBuilder_ = null;
+ }
+
+ return this;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Request header = 1;
+ */
+ public cmvr.api.Common.CommandHeader.Request.Builder getHeaderBuilder() {
+
+ onChanged();
+ return getHeaderFieldBuilder().getBuilder();
+ }
+ /**
+ * .cmvr.api.CommandHeader.Request header = 1;
+ */
+ public cmvr.api.Common.CommandHeader.RequestOrBuilder getHeaderOrBuilder() {
+ if (headerBuilder_ != null) {
+ return headerBuilder_.getMessageOrBuilder();
+ } else {
+ return header_ == null ?
+ cmvr.api.Common.CommandHeader.Request.getDefaultInstance() : header_;
+ }
+ }
+ /**
+ * .cmvr.api.CommandHeader.Request header = 1;
+ */
+ private com.google.protobuf.SingleFieldBuilderV3<
+ cmvr.api.Common.CommandHeader.Request, cmvr.api.Common.CommandHeader.Request.Builder, cmvr.api.Common.CommandHeader.RequestOrBuilder>
+ getHeaderFieldBuilder() {
+ if (headerBuilder_ == null) {
+ headerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+ cmvr.api.Common.CommandHeader.Request, cmvr.api.Common.CommandHeader.Request.Builder, cmvr.api.Common.CommandHeader.RequestOrBuilder>(
+ getHeader(),
+ getParentForChildren(),
+ isClean());
+ header_ = null;
+ }
+ return headerBuilder_;
+ }
+
+ private int u_ ;
+ /**
+ *
+ * 触点坐标,unit: ms
+ *
+ *
+ * int32 u = 2;
+ * @return The u.
+ */
+ @java.lang.Override
+ public int getU() {
+ return u_;
+ }
+ /**
+ *
+ * 触点坐标,unit: ms
+ *
+ *
+ * int32 u = 2;
+ * @param value The u to set.
+ * @return This builder for chaining.
+ */
+ public Builder setU(int value) {
+
+ u_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ * 触点坐标,unit: ms
+ *
+ *
+ * int32 u = 2;
+ * @return This builder for chaining.
+ */
+ public Builder clearU() {
+
+ u_ = 0;
+ onChanged();
+ return this;
+ }
+
+ private int v_ ;
+ /**
+ *
+ * 垂直坐标
+ *
+ *
+ * int32 v = 3;
+ * @return The v.
+ */
+ @java.lang.Override
+ public int getV() {
+ return v_;
+ }
+ /**
+ *
+ * 垂直坐标
+ *
+ *
+ * int32 v = 3;
+ * @param value The v to set.
+ * @return This builder for chaining.
+ */
+ public Builder setV(int value) {
+
+ v_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ * 垂直坐标
+ *
+ *
+ * int32 v = 3;
+ * @return This builder for chaining.
+ */
+ public Builder clearV() {
+
+ v_ = 0;
+ onChanged();
+ return this;
+ }
+
+ private double maxForce_ ;
+ /**
+ *
+ * 触控时允许的最大作用力,unit: N
+ *
+ *
+ * double max_force = 4;
+ * @return The maxForce.
+ */
+ @java.lang.Override
+ public double getMaxForce() {
+ return maxForce_;
+ }
+ /**
+ *
+ * 触控时允许的最大作用力,unit: N
+ *
+ *
+ * double max_force = 4;
+ * @param value The maxForce to set.
+ * @return This builder for chaining.
+ */
+ public Builder setMaxForce(double value) {
+
+ maxForce_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ * 触控时允许的最大作用力,unit: N
+ *
+ *
+ * double max_force = 4;
+ * @return This builder for chaining.
+ */
+ public Builder clearMaxForce() {
+
+ maxForce_ = 0D;
+ onChanged();
+ return this;
+ }
+ @java.lang.Override
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ @java.lang.Override
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+
+ // @@protoc_insertion_point(builder_scope:cmvr.api.Touch.Request)
+ }
+
+ // @@protoc_insertion_point(class_scope:cmvr.api.Touch.Request)
+ private static final cmvr.api.HlcCommand.Touch.Request DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new cmvr.api.HlcCommand.Touch.Request();
+ }
+
+ public static cmvr.api.HlcCommand.Touch.Request getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser
+ PARSER = new com.google.protobuf.AbstractParser() {
+ @java.lang.Override
+ public Request parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ Builder builder = newBuilder();
+ try {
+ builder.mergeFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(builder.buildPartial());
+ } catch (com.google.protobuf.UninitializedMessageException e) {
+ throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(e)
+ .setUnfinishedMessage(builder.buildPartial());
+ }
+ return builder.buildPartial();
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public cmvr.api.HlcCommand.Touch.Request getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ public interface ResponseOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:cmvr.api.Touch.Response)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ * @return Whether the header field is set.
+ */
+ boolean hasHeader();
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ * @return The header.
+ */
+ cmvr.api.Common.CommandHeader.Feedback getHeader();
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ cmvr.api.Common.CommandHeader.FeedbackOrBuilder getHeaderOrBuilder();
+ }
+ /**
+ * Protobuf type {@code cmvr.api.Touch.Response}
+ */
+ public static final class Response extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:cmvr.api.Touch.Response)
+ ResponseOrBuilder {
+ private static final long serialVersionUID = 0L;
+ // Use Response.newBuilder() to construct.
+ private Response(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
+ super(builder);
+ }
+ private Response() {
+ }
+
+ @java.lang.Override
+ @SuppressWarnings({"unused"})
+ protected java.lang.Object newInstance(
+ UnusedPrivateParameter unused) {
+ return new Response();
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet
+ getUnknownFields() {
+ return this.unknownFields;
+ }
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return cmvr.api.HlcCommand.internal_static_cmvr_api_Touch_Response_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return cmvr.api.HlcCommand.internal_static_cmvr_api_Touch_Response_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ cmvr.api.HlcCommand.Touch.Response.class, cmvr.api.HlcCommand.Touch.Response.Builder.class);
+ }
+
+ public static final int HEADER_FIELD_NUMBER = 1;
+ private cmvr.api.Common.CommandHeader.Feedback header_;
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ * @return Whether the header field is set.
+ */
+ @java.lang.Override
+ public boolean hasHeader() {
+ return header_ != null;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ * @return The header.
+ */
+ @java.lang.Override
+ public cmvr.api.Common.CommandHeader.Feedback getHeader() {
+ return header_ == null ? cmvr.api.Common.CommandHeader.Feedback.getDefaultInstance() : header_;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ @java.lang.Override
+ public cmvr.api.Common.CommandHeader.FeedbackOrBuilder getHeaderOrBuilder() {
+ return getHeader();
+ }
+
+ private byte memoizedIsInitialized = -1;
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ if (header_ != null) {
+ output.writeMessage(1, getHeader());
+ }
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (header_ != null) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeMessageSize(1, getHeader());
+ }
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof cmvr.api.HlcCommand.Touch.Response)) {
+ return super.equals(obj);
+ }
+ cmvr.api.HlcCommand.Touch.Response other = (cmvr.api.HlcCommand.Touch.Response) obj;
+
+ if (hasHeader() != other.hasHeader()) return false;
+ if (hasHeader()) {
+ if (!getHeader()
+ .equals(other.getHeader())) return false;
+ }
+ if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ if (hasHeader()) {
+ hash = (37 * hash) + HEADER_FIELD_NUMBER;
+ hash = (53 * hash) + getHeader().hashCode();
+ }
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static cmvr.api.HlcCommand.Touch.Response parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.HlcCommand.Touch.Response parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.HlcCommand.Touch.Response parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.HlcCommand.Touch.Response parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.HlcCommand.Touch.Response parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.HlcCommand.Touch.Response parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.HlcCommand.Touch.Response parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static cmvr.api.HlcCommand.Touch.Response parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static cmvr.api.HlcCommand.Touch.Response parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+ public static cmvr.api.HlcCommand.Touch.Response parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static cmvr.api.HlcCommand.Touch.Response parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static cmvr.api.HlcCommand.Touch.Response parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(cmvr.api.HlcCommand.Touch.Response prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * Protobuf type {@code cmvr.api.Touch.Response}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder implements
+ // @@protoc_insertion_point(builder_implements:cmvr.api.Touch.Response)
+ cmvr.api.HlcCommand.Touch.ResponseOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return cmvr.api.HlcCommand.internal_static_cmvr_api_Touch_Response_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return cmvr.api.HlcCommand.internal_static_cmvr_api_Touch_Response_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ cmvr.api.HlcCommand.Touch.Response.class, cmvr.api.HlcCommand.Touch.Response.Builder.class);
+ }
+
+ // Construct using cmvr.api.HlcCommand.Touch.Response.newBuilder()
+ private Builder() {
+
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+
+ }
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ if (headerBuilder_ == null) {
+ header_ = null;
+ } else {
+ header_ = null;
+ headerBuilder_ = null;
+ }
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return cmvr.api.HlcCommand.internal_static_cmvr_api_Touch_Response_descriptor;
+ }
+
+ @java.lang.Override
+ public cmvr.api.HlcCommand.Touch.Response getDefaultInstanceForType() {
+ return cmvr.api.HlcCommand.Touch.Response.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public cmvr.api.HlcCommand.Touch.Response build() {
+ cmvr.api.HlcCommand.Touch.Response result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public cmvr.api.HlcCommand.Touch.Response buildPartial() {
+ cmvr.api.HlcCommand.Touch.Response result = new cmvr.api.HlcCommand.Touch.Response(this);
+ if (headerBuilder_ == null) {
+ result.header_ = header_;
+ } else {
+ result.header_ = headerBuilder_.build();
+ }
+ onBuilt();
+ return result;
+ }
+
+ @java.lang.Override
+ public Builder clone() {
+ return super.clone();
+ }
+ @java.lang.Override
+ public Builder setField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return super.setField(field, value);
+ }
+ @java.lang.Override
+ public Builder clearField(
+ com.google.protobuf.Descriptors.FieldDescriptor field) {
+ return super.clearField(field);
+ }
+ @java.lang.Override
+ public Builder clearOneof(
+ com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+ return super.clearOneof(oneof);
+ }
+ @java.lang.Override
+ public Builder setRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ int index, java.lang.Object value) {
+ return super.setRepeatedField(field, index, value);
+ }
+ @java.lang.Override
+ public Builder addRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return super.addRepeatedField(field, value);
+ }
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof cmvr.api.HlcCommand.Touch.Response) {
+ return mergeFrom((cmvr.api.HlcCommand.Touch.Response)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(cmvr.api.HlcCommand.Touch.Response other) {
+ if (other == cmvr.api.HlcCommand.Touch.Response.getDefaultInstance()) return this;
+ if (other.hasHeader()) {
+ mergeHeader(other.getHeader());
+ }
+ this.mergeUnknownFields(other.getUnknownFields());
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ case 10: {
+ input.readMessage(
+ getHeaderFieldBuilder().getBuilder(),
+ extensionRegistry);
+
+ break;
+ } // case 10
+ default: {
+ if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+ done = true; // was an endgroup tag
+ }
+ break;
+ } // default:
+ } // switch (tag)
+ } // while (!done)
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.unwrapIOException();
+ } finally {
+ onChanged();
+ } // finally
+ return this;
+ }
+
+ private cmvr.api.Common.CommandHeader.Feedback header_;
+ private com.google.protobuf.SingleFieldBuilderV3<
+ cmvr.api.Common.CommandHeader.Feedback, cmvr.api.Common.CommandHeader.Feedback.Builder, cmvr.api.Common.CommandHeader.FeedbackOrBuilder> headerBuilder_;
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ * @return Whether the header field is set.
+ */
+ public boolean hasHeader() {
+ return headerBuilder_ != null || header_ != null;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ * @return The header.
+ */
+ public cmvr.api.Common.CommandHeader.Feedback getHeader() {
+ if (headerBuilder_ == null) {
+ return header_ == null ? cmvr.api.Common.CommandHeader.Feedback.getDefaultInstance() : header_;
+ } else {
+ return headerBuilder_.getMessage();
+ }
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ public Builder setHeader(cmvr.api.Common.CommandHeader.Feedback value) {
+ if (headerBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ header_ = value;
+ onChanged();
+ } else {
+ headerBuilder_.setMessage(value);
+ }
+
+ return this;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ public Builder setHeader(
+ cmvr.api.Common.CommandHeader.Feedback.Builder builderForValue) {
+ if (headerBuilder_ == null) {
+ header_ = builderForValue.build();
+ onChanged();
+ } else {
+ headerBuilder_.setMessage(builderForValue.build());
+ }
+
+ return this;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ public Builder mergeHeader(cmvr.api.Common.CommandHeader.Feedback value) {
+ if (headerBuilder_ == null) {
+ if (header_ != null) {
+ header_ =
+ cmvr.api.Common.CommandHeader.Feedback.newBuilder(header_).mergeFrom(value).buildPartial();
+ } else {
+ header_ = value;
+ }
+ onChanged();
+ } else {
+ headerBuilder_.mergeFrom(value);
+ }
+
+ return this;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ public Builder clearHeader() {
+ if (headerBuilder_ == null) {
+ header_ = null;
+ onChanged();
+ } else {
+ header_ = null;
+ headerBuilder_ = null;
+ }
+
+ return this;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ public cmvr.api.Common.CommandHeader.Feedback.Builder getHeaderBuilder() {
+
+ onChanged();
+ return getHeaderFieldBuilder().getBuilder();
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ public cmvr.api.Common.CommandHeader.FeedbackOrBuilder getHeaderOrBuilder() {
+ if (headerBuilder_ != null) {
+ return headerBuilder_.getMessageOrBuilder();
+ } else {
+ return header_ == null ?
+ cmvr.api.Common.CommandHeader.Feedback.getDefaultInstance() : header_;
+ }
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ private com.google.protobuf.SingleFieldBuilderV3<
+ cmvr.api.Common.CommandHeader.Feedback, cmvr.api.Common.CommandHeader.Feedback.Builder, cmvr.api.Common.CommandHeader.FeedbackOrBuilder>
+ getHeaderFieldBuilder() {
+ if (headerBuilder_ == null) {
+ headerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+ cmvr.api.Common.CommandHeader.Feedback, cmvr.api.Common.CommandHeader.Feedback.Builder, cmvr.api.Common.CommandHeader.FeedbackOrBuilder>(
+ getHeader(),
+ getParentForChildren(),
+ isClean());
+ header_ = null;
+ }
+ return headerBuilder_;
+ }
+ @java.lang.Override
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ @java.lang.Override
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+
+ // @@protoc_insertion_point(builder_scope:cmvr.api.Touch.Response)
+ }
+
+ // @@protoc_insertion_point(class_scope:cmvr.api.Touch.Response)
+ private static final cmvr.api.HlcCommand.Touch.Response DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new cmvr.api.HlcCommand.Touch.Response();
+ }
+
+ public static cmvr.api.HlcCommand.Touch.Response getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser
+ PARSER = new com.google.protobuf.AbstractParser() {
+ @java.lang.Override
+ public Response parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ Builder builder = newBuilder();
+ try {
+ builder.mergeFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(builder.buildPartial());
+ } catch (com.google.protobuf.UninitializedMessageException e) {
+ throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(e)
+ .setUnfinishedMessage(builder.buildPartial());
+ }
+ return builder.buildPartial();
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public cmvr.api.HlcCommand.Touch.Response getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ private byte memoizedIsInitialized = -1;
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof cmvr.api.HlcCommand.Touch)) {
+ return super.equals(obj);
+ }
+ cmvr.api.HlcCommand.Touch other = (cmvr.api.HlcCommand.Touch) obj;
+
+ if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static cmvr.api.HlcCommand.Touch parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.HlcCommand.Touch parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.HlcCommand.Touch parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.HlcCommand.Touch parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.HlcCommand.Touch parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.HlcCommand.Touch parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.HlcCommand.Touch parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static cmvr.api.HlcCommand.Touch parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static cmvr.api.HlcCommand.Touch parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+ public static cmvr.api.HlcCommand.Touch parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static cmvr.api.HlcCommand.Touch parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static cmvr.api.HlcCommand.Touch parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(cmvr.api.HlcCommand.Touch prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * Protobuf type {@code cmvr.api.Touch}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder implements
+ // @@protoc_insertion_point(builder_implements:cmvr.api.Touch)
+ cmvr.api.HlcCommand.TouchOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return cmvr.api.HlcCommand.internal_static_cmvr_api_Touch_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return cmvr.api.HlcCommand.internal_static_cmvr_api_Touch_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ cmvr.api.HlcCommand.Touch.class, cmvr.api.HlcCommand.Touch.Builder.class);
+ }
+
+ // Construct using cmvr.api.HlcCommand.Touch.newBuilder()
+ private Builder() {
+
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+
+ }
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return cmvr.api.HlcCommand.internal_static_cmvr_api_Touch_descriptor;
+ }
+
+ @java.lang.Override
+ public cmvr.api.HlcCommand.Touch getDefaultInstanceForType() {
+ return cmvr.api.HlcCommand.Touch.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public cmvr.api.HlcCommand.Touch build() {
+ cmvr.api.HlcCommand.Touch result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public cmvr.api.HlcCommand.Touch buildPartial() {
+ cmvr.api.HlcCommand.Touch result = new cmvr.api.HlcCommand.Touch(this);
+ onBuilt();
+ return result;
+ }
+
+ @java.lang.Override
+ public Builder clone() {
+ return super.clone();
+ }
+ @java.lang.Override
+ public Builder setField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return super.setField(field, value);
+ }
+ @java.lang.Override
+ public Builder clearField(
+ com.google.protobuf.Descriptors.FieldDescriptor field) {
+ return super.clearField(field);
+ }
+ @java.lang.Override
+ public Builder clearOneof(
+ com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+ return super.clearOneof(oneof);
+ }
+ @java.lang.Override
+ public Builder setRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ int index, java.lang.Object value) {
+ return super.setRepeatedField(field, index, value);
+ }
+ @java.lang.Override
+ public Builder addRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return super.addRepeatedField(field, value);
+ }
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof cmvr.api.HlcCommand.Touch) {
+ return mergeFrom((cmvr.api.HlcCommand.Touch)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(cmvr.api.HlcCommand.Touch other) {
+ if (other == cmvr.api.HlcCommand.Touch.getDefaultInstance()) return this;
+ this.mergeUnknownFields(other.getUnknownFields());
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ default: {
+ if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+ done = true; // was an endgroup tag
+ }
+ break;
+ } // default:
+ } // switch (tag)
+ } // while (!done)
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.unwrapIOException();
+ } finally {
+ onChanged();
+ } // finally
+ return this;
+ }
+ @java.lang.Override
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ @java.lang.Override
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+
+ // @@protoc_insertion_point(builder_scope:cmvr.api.Touch)
+ }
+
+ // @@protoc_insertion_point(class_scope:cmvr.api.Touch)
+ private static final cmvr.api.HlcCommand.Touch DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new cmvr.api.HlcCommand.Touch();
+ }
+
+ public static cmvr.api.HlcCommand.Touch getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser
+ PARSER = new com.google.protobuf.AbstractParser() {
+ @java.lang.Override
+ public Touch parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ Builder builder = newBuilder();
+ try {
+ builder.mergeFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(builder.buildPartial());
+ } catch (com.google.protobuf.UninitializedMessageException e) {
+ throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(e)
+ .setUnfinishedMessage(builder.buildPartial());
+ }
+ return builder.buildPartial();
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public cmvr.api.HlcCommand.Touch getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_cmvr_api_Touch_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_cmvr_api_Touch_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_cmvr_api_Touch_Request_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_cmvr_api_Touch_Request_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_cmvr_api_Touch_Response_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_cmvr_api_Touch_Response_fieldAccessorTable;
+
+ public static com.google.protobuf.Descriptors.FileDescriptor
+ getDescriptor() {
+ return descriptor;
+ }
+ private static com.google.protobuf.Descriptors.FileDescriptor
+ descriptor;
+ static {
+ java.lang.String[] descriptorData = {
+ "\n\032cmvr/api/hlc_command.proto\022\010cmvr.api\032\025" +
+ "cmvr/api/common.proto\"\252\001\n\005Touch\032c\n\007Reque" +
+ "st\022/\n\006header\030\001 \001(\0132\037.cmvr.api.CommandHea" +
+ "der.Request\022\t\n\001u\030\002 \001(\005\022\t\n\001v\030\003 \001(\005\022\021\n\tmax" +
+ "_force\030\004 \001(\001\032<\n\010Response\0220\n\006header\030\001 \001(\013" +
+ "2 .cmvr.api.CommandHeader.Feedbackb\006prot" +
+ "o3"
+ };
+ descriptor = com.google.protobuf.Descriptors.FileDescriptor
+ .internalBuildGeneratedFileFrom(descriptorData,
+ new com.google.protobuf.Descriptors.FileDescriptor[] {
+ cmvr.api.Common.getDescriptor(),
+ });
+ internal_static_cmvr_api_Touch_descriptor =
+ getDescriptor().getMessageTypes().get(0);
+ internal_static_cmvr_api_Touch_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_cmvr_api_Touch_descriptor,
+ new java.lang.String[] { });
+ internal_static_cmvr_api_Touch_Request_descriptor =
+ internal_static_cmvr_api_Touch_descriptor.getNestedTypes().get(0);
+ internal_static_cmvr_api_Touch_Request_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_cmvr_api_Touch_Request_descriptor,
+ new java.lang.String[] { "Header", "U", "V", "MaxForce", });
+ internal_static_cmvr_api_Touch_Response_descriptor =
+ internal_static_cmvr_api_Touch_descriptor.getNestedTypes().get(1);
+ internal_static_cmvr_api_Touch_Response_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_cmvr_api_Touch_Response_descriptor,
+ new java.lang.String[] { "Header", });
+ cmvr.api.Common.getDescriptor();
+ }
+
+ // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/HlcServiceGrpc.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/HlcServiceGrpc.java
new file mode 100644
index 0000000..72b901f
--- /dev/null
+++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/HlcServiceGrpc.java
@@ -0,0 +1,276 @@
+package cmvr.api;
+
+import static io.grpc.MethodDescriptor.generateFullMethodName;
+
+/**
+ */
+@javax.annotation.Generated(
+ value = "by gRPC proto compiler (version 1.52.0)",
+ comments = "Source: cmvr/api/hlc_service.proto")
+@io.grpc.stub.annotations.GrpcGenerated
+public final class HlcServiceGrpc {
+
+ private HlcServiceGrpc() {}
+
+ public static final String SERVICE_NAME = "cmvr.api.HlcService";
+
+ // Static method descriptors that strictly reflect the proto.
+ private static volatile io.grpc.MethodDescriptor getTouchMethod;
+
+ @io.grpc.stub.annotations.RpcMethod(
+ fullMethodName = SERVICE_NAME + '/' + "touch",
+ requestType = cmvr.api.HlcCommand.Touch.Request.class,
+ responseType = cmvr.api.HlcCommand.Touch.Response.class,
+ methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+ public static io.grpc.MethodDescriptor getTouchMethod() {
+ io.grpc.MethodDescriptor getTouchMethod;
+ if ((getTouchMethod = HlcServiceGrpc.getTouchMethod) == null) {
+ synchronized (HlcServiceGrpc.class) {
+ if ((getTouchMethod = HlcServiceGrpc.getTouchMethod) == null) {
+ HlcServiceGrpc.getTouchMethod = getTouchMethod =
+ io.grpc.MethodDescriptor.newBuilder()
+ .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+ .setFullMethodName(generateFullMethodName(SERVICE_NAME, "touch"))
+ .setSampledToLocalTracing(true)
+ .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+ cmvr.api.HlcCommand.Touch.Request.getDefaultInstance()))
+ .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+ cmvr.api.HlcCommand.Touch.Response.getDefaultInstance()))
+ .setSchemaDescriptor(new HlcServiceMethodDescriptorSupplier("touch"))
+ .build();
+ }
+ }
+ }
+ return getTouchMethod;
+ }
+
+ /**
+ * Creates a new async stub that supports all call types for the service
+ */
+ public static HlcServiceStub newStub(io.grpc.Channel channel) {
+ io.grpc.stub.AbstractStub.StubFactory factory =
+ new io.grpc.stub.AbstractStub.StubFactory() {
+ @java.lang.Override
+ public HlcServiceStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+ return new HlcServiceStub(channel, callOptions);
+ }
+ };
+ return HlcServiceStub.newStub(factory, channel);
+ }
+
+ /**
+ * Creates a new blocking-style stub that supports unary and streaming output calls on the service
+ */
+ public static HlcServiceBlockingStub newBlockingStub(
+ io.grpc.Channel channel) {
+ io.grpc.stub.AbstractStub.StubFactory factory =
+ new io.grpc.stub.AbstractStub.StubFactory() {
+ @java.lang.Override
+ public HlcServiceBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+ return new HlcServiceBlockingStub(channel, callOptions);
+ }
+ };
+ return HlcServiceBlockingStub.newStub(factory, channel);
+ }
+
+ /**
+ * Creates a new ListenableFuture-style stub that supports unary calls on the service
+ */
+ public static HlcServiceFutureStub newFutureStub(
+ io.grpc.Channel channel) {
+ io.grpc.stub.AbstractStub.StubFactory factory =
+ new io.grpc.stub.AbstractStub.StubFactory() {
+ @java.lang.Override
+ public HlcServiceFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+ return new HlcServiceFutureStub(channel, callOptions);
+ }
+ };
+ return HlcServiceFutureStub.newStub(factory, channel);
+ }
+
+ /**
+ */
+ public static abstract class HlcServiceImplBase implements io.grpc.BindableService {
+
+ /**
+ */
+ public void touch(cmvr.api.HlcCommand.Touch.Request request,
+ io.grpc.stub.StreamObserver responseObserver) {
+ io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getTouchMethod(), responseObserver);
+ }
+
+ @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
+ return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+ .addMethod(
+ getTouchMethod(),
+ io.grpc.stub.ServerCalls.asyncUnaryCall(
+ new MethodHandlers<
+ cmvr.api.HlcCommand.Touch.Request,
+ cmvr.api.HlcCommand.Touch.Response>(
+ this, METHODID_TOUCH)))
+ .build();
+ }
+ }
+
+ /**
+ */
+ public static final class HlcServiceStub extends io.grpc.stub.AbstractAsyncStub {
+ private HlcServiceStub(
+ io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+ super(channel, callOptions);
+ }
+
+ @java.lang.Override
+ protected HlcServiceStub build(
+ io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+ return new HlcServiceStub(channel, callOptions);
+ }
+
+ /**
+ */
+ public void touch(cmvr.api.HlcCommand.Touch.Request request,
+ io.grpc.stub.StreamObserver responseObserver) {
+ io.grpc.stub.ClientCalls.asyncUnaryCall(
+ getChannel().newCall(getTouchMethod(), getCallOptions()), request, responseObserver);
+ }
+ }
+
+ /**
+ */
+ public static final class HlcServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub {
+ private HlcServiceBlockingStub(
+ io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+ super(channel, callOptions);
+ }
+
+ @java.lang.Override
+ protected HlcServiceBlockingStub build(
+ io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+ return new HlcServiceBlockingStub(channel, callOptions);
+ }
+
+ /**
+ */
+ public cmvr.api.HlcCommand.Touch.Response touch(cmvr.api.HlcCommand.Touch.Request request) {
+ return io.grpc.stub.ClientCalls.blockingUnaryCall(
+ getChannel(), getTouchMethod(), getCallOptions(), request);
+ }
+ }
+
+ /**
+ */
+ public static final class HlcServiceFutureStub extends io.grpc.stub.AbstractFutureStub {
+ private HlcServiceFutureStub(
+ io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+ super(channel, callOptions);
+ }
+
+ @java.lang.Override
+ protected HlcServiceFutureStub build(
+ io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+ return new HlcServiceFutureStub(channel, callOptions);
+ }
+
+ /**
+ */
+ public com.google.common.util.concurrent.ListenableFuture touch(
+ cmvr.api.HlcCommand.Touch.Request request) {
+ return io.grpc.stub.ClientCalls.futureUnaryCall(
+ getChannel().newCall(getTouchMethod(), getCallOptions()), request);
+ }
+ }
+
+ private static final int METHODID_TOUCH = 0;
+
+ private static final class MethodHandlers implements
+ io.grpc.stub.ServerCalls.UnaryMethod,
+ io.grpc.stub.ServerCalls.ServerStreamingMethod,
+ io.grpc.stub.ServerCalls.ClientStreamingMethod,
+ io.grpc.stub.ServerCalls.BidiStreamingMethod {
+ private final HlcServiceImplBase serviceImpl;
+ private final int methodId;
+
+ MethodHandlers(HlcServiceImplBase serviceImpl, int methodId) {
+ this.serviceImpl = serviceImpl;
+ this.methodId = methodId;
+ }
+
+ @java.lang.Override
+ @java.lang.SuppressWarnings("unchecked")
+ public void invoke(Req request, io.grpc.stub.StreamObserver responseObserver) {
+ switch (methodId) {
+ case METHODID_TOUCH:
+ serviceImpl.touch((cmvr.api.HlcCommand.Touch.Request) request,
+ (io.grpc.stub.StreamObserver) responseObserver);
+ break;
+ default:
+ throw new AssertionError();
+ }
+ }
+
+ @java.lang.Override
+ @java.lang.SuppressWarnings("unchecked")
+ public io.grpc.stub.StreamObserver invoke(
+ io.grpc.stub.StreamObserver responseObserver) {
+ switch (methodId) {
+ default:
+ throw new AssertionError();
+ }
+ }
+ }
+
+ private static abstract class HlcServiceBaseDescriptorSupplier
+ implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
+ HlcServiceBaseDescriptorSupplier() {}
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() {
+ return cmvr.api.HlcServiceOuterClass.getDescriptor();
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() {
+ return getFileDescriptor().findServiceByName("HlcService");
+ }
+ }
+
+ private static final class HlcServiceFileDescriptorSupplier
+ extends HlcServiceBaseDescriptorSupplier {
+ HlcServiceFileDescriptorSupplier() {}
+ }
+
+ private static final class HlcServiceMethodDescriptorSupplier
+ extends HlcServiceBaseDescriptorSupplier
+ implements io.grpc.protobuf.ProtoMethodDescriptorSupplier {
+ private final String methodName;
+
+ HlcServiceMethodDescriptorSupplier(String methodName) {
+ this.methodName = methodName;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() {
+ return getServiceDescriptor().findMethodByName(methodName);
+ }
+ }
+
+ private static volatile io.grpc.ServiceDescriptor serviceDescriptor;
+
+ public static io.grpc.ServiceDescriptor getServiceDescriptor() {
+ io.grpc.ServiceDescriptor result = serviceDescriptor;
+ if (result == null) {
+ synchronized (HlcServiceGrpc.class) {
+ result = serviceDescriptor;
+ if (result == null) {
+ serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
+ .setSchemaDescriptor(new HlcServiceFileDescriptorSupplier())
+ .addMethod(getTouchMethod())
+ .build();
+ }
+ }
+ }
+ return result;
+ }
+}
diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/HlcServiceOuterClass.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/HlcServiceOuterClass.java
new file mode 100644
index 0000000..d25d4c6
--- /dev/null
+++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/HlcServiceOuterClass.java
@@ -0,0 +1,40 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: cmvr/api/hlc_service.proto
+
+package cmvr.api;
+
+public final class HlcServiceOuterClass {
+ private HlcServiceOuterClass() {}
+ public static void registerAllExtensions(
+ com.google.protobuf.ExtensionRegistryLite registry) {
+ }
+
+ public static void registerAllExtensions(
+ com.google.protobuf.ExtensionRegistry registry) {
+ registerAllExtensions(
+ (com.google.protobuf.ExtensionRegistryLite) registry);
+ }
+
+ public static com.google.protobuf.Descriptors.FileDescriptor
+ getDescriptor() {
+ return descriptor;
+ }
+ private static com.google.protobuf.Descriptors.FileDescriptor
+ descriptor;
+ static {
+ java.lang.String[] descriptorData = {
+ "\n\032cmvr/api/hlc_service.proto\022\010cmvr.api\032\032" +
+ "cmvr/api/hlc_command.proto2H\n\nHlcService" +
+ "\022:\n\005touch\022\027.cmvr.api.Touch.Request\032\030.cmv" +
+ "r.api.Touch.Responseb\006proto3"
+ };
+ descriptor = com.google.protobuf.Descriptors.FileDescriptor
+ .internalBuildGeneratedFileFrom(descriptorData,
+ new com.google.protobuf.Descriptors.FileDescriptor[] {
+ cmvr.api.HlcCommand.getDescriptor(),
+ });
+ cmvr.api.HlcCommand.getDescriptor();
+ }
+
+ // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/hlc_command.proto b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/hlc_command.proto
new file mode 100644
index 0000000..7c39ced
--- /dev/null
+++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/hlc_command.proto
@@ -0,0 +1,24 @@
+syntax = "proto3";
+
+import "cmvr/api/common.proto";
+
+package cmvr.api;
+
+
+message Touch{
+ message Request{
+ CommandHeader.Request header = 1;
+ // 触点坐标,unit: ms
+ int32 u = 2; // 水平坐标
+ int32 v = 3; // 垂直坐标
+
+ // 触控时允许的最大作用力,unit: N
+ double max_force = 4;
+ }
+
+ message Response{
+ CommandHeader.Feedback header= 1;
+ }
+
+}
+
diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/hlc_service.proto b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/hlc_service.proto
new file mode 100644
index 0000000..7e14032
--- /dev/null
+++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/hlc_service.proto
@@ -0,0 +1,9 @@
+syntax = "proto3";
+
+import "cmvr/api/hlc_command.proto";
+
+package cmvr.api;
+
+service HlcService{
+ rpc touch(Touch.Request) returns (Touch.Response);
+}
\ No newline at end of file
diff --git a/cmvr-iot-api/cmvr-iot-llm/src/main/java/com/cmvr/llm/service/impl/LLMTouchServiceImpl.java b/cmvr-iot-api/cmvr-iot-llm/src/main/java/com/cmvr/llm/service/impl/LLMTouchServiceImpl.java
index 4002c1e..764f8c8 100644
--- a/cmvr-iot-api/cmvr-iot-llm/src/main/java/com/cmvr/llm/service/impl/LLMTouchServiceImpl.java
+++ b/cmvr-iot-api/cmvr-iot-llm/src/main/java/com/cmvr/llm/service/impl/LLMTouchServiceImpl.java
@@ -1,6 +1,8 @@
package com.cmvr.llm.service.impl;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
@@ -8,12 +10,14 @@ import com.cmvr.common.exception.GlobalException;
import com.cmvr.common.utils.http.CallAPIUtil;
import com.cmvr.llm.config.APIProperties;
import com.cmvr.llm.service.LLMTouchService;
+import com.cmvr.llm.util.LargeModelFileUploadUtil;
import com.cmvr.system.domain.vo.CarIcon;
import com.cmvr.system.service.CarPathFinderService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.io.File;
+import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -95,26 +99,29 @@ public class LLMTouchServiceImpl implements LLMTouchService {
String iconName = nextStepIcon.getIconName();
try {
// 上传截图
-// byte[] imageBytes = FileUtil.readBytes(image);
-// imageUrl = LargeModelFileUploadUtil.uploadFile(imageBytes);
-//
-// // 拼接图标路径,例如 icons/honda/sedan/空调控制.png
-// String iconPath = StrUtil.format("icon/{}/{}/{}.png", manufacturer, vehType, iconName);
-//
-// // 从 resources 加载图标文件
-// InputStream iconStream = this.getClass().getClassLoader().getResourceAsStream(iconPath);
-// if (iconStream == null) {
-// throw new GlobalException("未找到图标资源文件:" + iconPath);
-// }
-//
-// // 上传图标
-// byte[] iconBytes = IoUtil.readBytes(iconStream);
-// iconImageUrl = LargeModelFileUploadUtil.uploadFile(iconBytes);
- imageUrl = "https://aiagentplatform.cmft.com/api/proxy/down?Action=Download&Version=2022-01-01&Path=upload/full/5d/a3/07244360c69636d5c146e5470d8d5ddf12ceed2643ffd892b7b7a5c4aaeb&IsAnonymous=true";
- iconImageUrl =
- iconName.equals("驾驶偏好") ?
- "https://aiagentplatform.cmft.com/api/proxy/down?Action=Download&Version=2022-01-01&Path=upload/full/a4/1b/6a7319709844c0f483a1d7adcfdbbff478ff5e34bed9ecff5d8fd407f3ac&IsAnonymous=true"
- : "https://aiagentplatform.cmft.com/api/proxy/down?Action=Download&Version=2022-01-01&Path=upload%2Ffull%2Ff1%2Fb9%2F8fb5f96f0299ccef60511eb8f7cfdcec890e563bc8e00854e63484086953&IsAnonymous=true";
+ byte[] imageBytes = FileUtil.readBytes(image);
+ imageUrl = LargeModelFileUploadUtil.uploadFile(imageBytes);
+
+ // 拼接图标路径,例如 icons/honda/sedan/空调控制.png
+ String iconPath = StrUtil.format("icon/{}/{}/{}.png", manufacturer, vehType, iconName);
+
+ // 从 resources 加载图标文件
+ InputStream iconStream = this.getClass().getClassLoader().getResourceAsStream(iconPath);
+ if (iconStream == null) {
+ throw new GlobalException("未找到图标资源文件:" + iconPath);
+ }
+
+ // 上传图标
+ byte[] iconBytes = IoUtil.readBytes(iconStream);
+ // 设置的icon
+// iconImageUrl = "https://aiagentplatform.cmft.com/api/proxy/down?Action=Download&Version=2022-01-01&Path=upload%2Ffull%2F8f%2F1a%2F1b0b791926b89d1c748c9cb1280bb3e4697543b3a715e692565107442c9c&IsAnonymous=true";
+ iconImageUrl = LargeModelFileUploadUtil.uploadFile(iconBytes);
+// imageUrl = "https://aiagentplatform.cmft.com/api/proxy/down?Action=Download&Version=2022-01-01&Path=upload%2Ffull%2F88%2F99%2Fe4452191c9706d107c17b27dc0a08e13a3a1a85a261eec802ae85c11f26c&IsAnonymous=true";
+// imageUrl = "https://aiagentplatform.cmft.com/api/proxy/down?Action=Download&Version=2022-01-01&Path=upload/full/5d/a3/07244360c69636d5c146e5470d8d5ddf12ceed2643ffd892b7b7a5c4aaeb&IsAnonymous=true";
+// iconImageUrl =
+// iconName.equals("驾驶偏好") ?
+// "https://aiagentplatform.cmft.com/api/proxy/down?Action=Download&Version=2022-01-01&Path=upload/full/a4/1b/6a7319709844c0f483a1d7adcfdbbff478ff5e34bed9ecff5d8fd407f3ac&IsAnonymous=true"
+// : "https://aiagentplatform.cmft.com/api/proxy/down?Action=Download&Version=2022-01-01&Path=upload%2Ffull%2Ff1%2Fb9%2F8fb5f96f0299ccef60511eb8f7cfdcec890e563bc8e00854e63484086953&IsAnonymous=true";
} catch (Exception e) {
throw new GlobalException("上传图标或截图失败:" + e.getMessage());
}
@@ -128,7 +135,7 @@ public class LLMTouchServiceImpl implements LLMTouchService {
}
// 7) 返回
- result.put("isFinish", false);
+ result.put("isFinish", path.size() == 1);
result.put("coordinates", coordinates);
return result;
diff --git a/cmvr-iot-system/src/main/java/com/cmvr/system/util/CarPathFinderUtil.java b/cmvr-iot-system/src/main/java/com/cmvr/system/util/CarPathFinderUtil.java
index f00d439..3b445a0 100644
--- a/cmvr-iot-system/src/main/java/com/cmvr/system/util/CarPathFinderUtil.java
+++ b/cmvr-iot-system/src/main/java/com/cmvr/system/util/CarPathFinderUtil.java
@@ -1,5 +1,6 @@
package com.cmvr.system.util;
+import cn.hutool.core.util.ObjUtil;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.cmvr.system.domain.vo.CarIcon;
@@ -52,7 +53,7 @@ public class CarPathFinderUtil {
}
}
- uiMap.put(ui.getUiName(), ui);
+ uiMap.put(ui.getUiImage(), ui);
}
return uiMap;
@@ -83,7 +84,10 @@ public class CarPathFinderUtil {
}
for (CarIcon icon : currentUi.getIcons()) {
- if (icon.getIconName().equals(targetFeature)) {
+ if (ObjUtil.isEmpty(icon.getIconImage())) {
+ continue;
+ }
+ if (icon.getIconImage().equals(targetFeature)) {
currentPath.add(icon);
return currentPath;
}
diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/engine/FlowTaskEngine.java b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/engine/FlowTaskEngine.java
index 540bedd..8f40178 100644
--- a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/engine/FlowTaskEngine.java
+++ b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/engine/FlowTaskEngine.java
@@ -51,14 +51,6 @@ public class FlowTaskEngine {
context.setRunParams(jsonObject);
}
flowTaskExecutor.executeGraph(message, item, latch::countDown);
-// flowTaskExecutor.executeGraph(message, item, () -> {
-// try {
-// // 可以放一些 per-item 回调逻辑
-// } finally {
-// latch.countDown();
-// }
-// });
-
try {
latch.await(); // 等待该检测项的子流程全部完成
} catch (InterruptedException e) {
@@ -66,7 +58,6 @@ public class FlowTaskEngine {
log.error("检测项执行被中断:itemId={}", itemId, e);
break;
}
-// flowTaskExecutor.executeGraph(message, item, onFinished);
}
}
}
diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/engine/FlowTaskRuntimeEntry.java b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/engine/FlowTaskRuntimeEntry.java
index 48ab150..46597ec 100644
--- a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/engine/FlowTaskRuntimeEntry.java
+++ b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/engine/FlowTaskRuntimeEntry.java
@@ -64,7 +64,7 @@ public class FlowTaskRuntimeEntry implements FlowTaskRuntimeService {
try {
// 注册上下文
- registerTaskContext(instId, taskId, terminalId, null, RunModeEnum.NORMAL, details, taskExecuteNormalVO.getRunParams());
+ registerTaskContext(instId, taskId, terminalId, null, RunModeEnum.NORMAL, taskExecuteNormalVO.getRunParams());
// 异步提交执行
flowTaskAsyncDispatcher.submit(instId, taskId, terminalId, RunModeEnum.NORMAL, details);
@@ -115,7 +115,7 @@ public class FlowTaskRuntimeEntry implements FlowTaskRuntimeService {
List details = CollUtil.newArrayList(teQueryTaskDetailDTO);
// 注册上下文
- registerTaskContext(instId, taskId, terminalId, itemId, RunModeEnum.TRIAL, details, runParams);
+ registerTaskContext(instId, taskId, terminalId, itemId, RunModeEnum.TRIAL, runParams);
// 异步调度执行(与正式任务一致,只是模式为 TRIAL)
flowTaskAsyncDispatcher.submit(instId, taskId, terminalId, RunModeEnum.TRIAL, details);
@@ -139,7 +139,6 @@ public class FlowTaskRuntimeEntry implements FlowTaskRuntimeService {
private TeTaskInst createAndSaveTaskInstance(String taskId, String terminalId, RunModeEnum runMode) {
TeTaskInst instance = new TeTaskInst();
instance.setTaskId(taskId);
-// instance.setConfig(JSON.toJSONString(taskExecuteVO.getConfig()));
instance.setTerminalId(terminalId);
instance.setRunMode(runMode.name());
instance.setStatus(String.valueOf(TaskStatusEnum.RUNNING.getCode()));
@@ -154,8 +153,7 @@ public class FlowTaskRuntimeEntry implements FlowTaskRuntimeService {
* 注册上下文
*/
private void registerTaskContext(String instId, String taskId, String terminalId,
- String itemId, RunModeEnum mode, List details,
- JSONObject runParams) {
+ String itemId, RunModeEnum mode, JSONObject runParams) {
TaskContext ctx = new TaskContext();
ctx.setInstId(instId);
ctx.setTaskId(taskId);
diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/edge/EdgeCameraOperateService.java b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/edge/EdgeCameraOperateService.java
index 4e7539e..09b6964 100644
--- a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/edge/EdgeCameraOperateService.java
+++ b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/edge/EdgeCameraOperateService.java
@@ -55,16 +55,17 @@ public class EdgeCameraOperateService implements EdgeOperateService {
}
case CAMERA_GETRGBIMAGE: {
- String imageUrl;
+// String imageUrl;
// String imageUrl = StrUtil.format("id为 [{}] 的相机拍照了", deviceId);
- if (message.getLoopNum() <= 1) {
- // 车辆控制调节
- imageUrl = "http://192.168.1.100:9000/cmvr-iot/FILE/20250821/1755761816340.jpg";
- } else {
- // 驾驶偏好
- imageUrl = "http://192.168.1.100:9000/cmvr-iot/FILE/20250822/1755849654731.jpg";
- }
-// String imageUrl = edgeCameraService.getRGBImage(terminalId, deviceId);
+// if (message.getLoopNum() <= 1) {
+// // 车辆控制调节
+// imageUrl = "http://192.168.1.100:9000/cmvr-iot/FILE/20250821/1755761816340.jpg";
+// } else {
+// // 驾驶偏好
+// imageUrl = "http://192.168.1.100:9000/cmvr-iot/FILE/20250822/1755849654731.jpg";
+// }
+// String imageUrl = "http://192.168.1.100:9000/cmvr-iot/IMAGE/20250901/1756718594725.jpg";
+ String imageUrl = edgeCameraService.getRGBDImages(terminalId, deviceId);
JSONArray imageUrls = new JSONArray();
if (ObjUtil.isNotEmpty(upstreamOutput)) {
diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/llm/LLMTouchOperateService.java b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/llm/LLMTouchOperateService.java
index 14882e9..d9f6cd0 100644
--- a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/llm/LLMTouchOperateService.java
+++ b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/llm/LLMTouchOperateService.java
@@ -6,6 +6,7 @@ import com.alibaba.fastjson2.JSONObject;
import com.cmvr.common.config.properties.MinioProperties;
import com.cmvr.common.core.minio.MinioService;
import com.cmvr.common.exception.GlobalException;
+import com.cmvr.edge.client.service.EdgeHlcService;
import com.cmvr.llm.service.LLMTouchService;
import com.cmvr.test.enums.ActionEnum;
import com.cmvr.test.flow.builder.FlowNodeWrapper;
@@ -27,6 +28,7 @@ public class LLMTouchOperateService implements LLMOperateService {
private final MinioService minioService;
private final MinioProperties minioProps;
private final LLMTouchService llmTouchService;
+ private final EdgeHlcService edgeHlcService;
@Override
public boolean supports(ActionEnum action) {
@@ -38,6 +40,8 @@ public class LLMTouchOperateService implements LLMOperateService {
ActionEnum action = message.getAction();
String instId = message.getInstId();
JSONObject inputParams = message.getInputParams();
+ String deviceId = inputParams.getString("deviceId");
+ String terminalId = message.getTerminalId();
JSONObject output = new JSONObject();
switch (action) {
@@ -76,6 +80,7 @@ public class LLMTouchOperateService implements LLMOperateService {
output.put("coordinates", cal);
// todo 获取坐标后调用边缘系统
+ edgeHlcService.touch(image, terminalId, "hlc01", x, y, 100d);
} catch (Exception e) {
throw new RuntimeException(e);
}
diff --git a/cmvr-iot-vi/pom.xml b/cmvr-iot-vi/pom.xml
new file mode 100644
index 0000000..e5c2a34
--- /dev/null
+++ b/cmvr-iot-vi/pom.xml
@@ -0,0 +1,28 @@
+
+
+ 4.0.0
+
+ com.cmvr
+ cmvr-iot
+ 3.8.9
+
+
+ cmvr-iot-vi
+
+
+ 语音交互模块
+
+
+
+
+
+
+ com.cmvr
+ cmvr-iot-common
+
+
+
+
+
\ No newline at end of file
diff --git a/cmvr-iot-vi/src/main/java/com/cmvr/vi/mapper/ViCorpusMapper.java b/cmvr-iot-vi/src/main/java/com/cmvr/vi/mapper/ViCorpusMapper.java
new file mode 100644
index 0000000..ad1f5ee
--- /dev/null
+++ b/cmvr-iot-vi/src/main/java/com/cmvr/vi/mapper/ViCorpusMapper.java
@@ -0,0 +1,12 @@
+package com.cmvr.vi.mapper;
+
+import com.cmvr.vi.model.domain.ViCorpus;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * 语料库Mapper接口
+ *
+ * @author cmvr-iot
+ */
+public interface ViCorpusMapper extends MPJBaseMapper {
+}
diff --git a/cmvr-iot-vi/src/main/java/com/cmvr/vi/model/domain/ViCorpus.java b/cmvr-iot-vi/src/main/java/com/cmvr/vi/model/domain/ViCorpus.java
new file mode 100644
index 0000000..40d5355
--- /dev/null
+++ b/cmvr-iot-vi/src/main/java/com/cmvr/vi/model/domain/ViCorpus.java
@@ -0,0 +1,91 @@
+package com.cmvr.vi.model.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.cmvr.common.annotation.Excel;
+import com.cmvr.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 语料库对象 vi_corpus
+ *
+ * @author cmvr-iot
+ */
+@Data
+@ApiModel("语料库对象")
+public class ViCorpus extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 语料ID
+ */
+ @ApiModelProperty("语料ID")
+ @TableId(type = IdType.AUTO)
+ private Long corpusId;
+
+ /**
+ * 语料名称
+ */
+ @Excel(name = "语料名称")
+ @ApiModelProperty("语料名称")
+ private String corpusName;
+
+ /**
+ * 语料类型(WAKEUP唤醒 / TEST测试)
+ */
+ @Excel(name = "语料类型", readConverterExp = "WAKEUP唤醒,TEST测试")
+ @ApiModelProperty("语料类型")
+ private String type;
+
+ /**
+ * 语音对应的文本
+ */
+ @Excel(name = "语音对应的文本")
+ @ApiModelProperty("语音对应的文本")
+ private String textContent;
+
+ /**
+ * 语音文件存放路径
+ */
+ @Excel(name = "语音文件存放路径")
+ @ApiModelProperty("语音文件存放路径")
+ private String audioPath;
+
+ /**
+ * 音色
+ */
+ @Excel(name = "音色")
+ @ApiModelProperty("音色")
+ private String voiceType;
+
+ /**
+ * 方言
+ */
+ @Excel(name = "方言")
+ @ApiModelProperty("方言")
+ private String dialect;
+
+ /**
+ * 预期结果(预留)
+ */
+// @Excel(name = "预期结果(预留)")
+ @ApiModelProperty("预期结果(预留)")
+ private String expectedResult;
+
+ /**
+ * 同一父语料下的顺序
+ */
+ @Excel(name = "同一父语料下的顺序")
+ @ApiModelProperty("同一父语料下的顺序")
+ private Integer sortOrder;
+
+ /**
+ * 状态(0正常 1停用)
+ */
+ @Excel(name = "状态", readConverterExp = "0=正常,1=停用")
+ @ApiModelProperty(value = "状态", notes = "0=正常,1=停用")
+ private String status;
+}
diff --git a/cmvr-iot-vi/src/main/java/com/cmvr/vi/service/IViCorpusService.java b/cmvr-iot-vi/src/main/java/com/cmvr/vi/service/IViCorpusService.java
new file mode 100644
index 0000000..cf76bf9
--- /dev/null
+++ b/cmvr-iot-vi/src/main/java/com/cmvr/vi/service/IViCorpusService.java
@@ -0,0 +1,54 @@
+package com.cmvr.vi.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cmvr.vi.model.domain.ViCorpus;
+
+import java.util.List;
+
+/**
+ * 语料库Service接口
+ *
+ * @author cmvr-iot
+ */
+public interface IViCorpusService extends IService {
+ /**
+ * 查询语料库
+ *
+ * @param corpusId 语料库主键
+ * @return 语料库
+ */
+ public ViCorpus selectViCorpusByCorpusId(Long corpusId);
+
+ /**
+ * 查询语料库列表
+ *
+ * @param viCorpus 语料库
+ * @return 语料库集合
+ */
+ public List selectViCorpusList(ViCorpus viCorpus);
+
+ /**
+ * 新增语料库
+ *
+ * @param viCorpus 语料库
+ * @return 结果
+ */
+ public int insertViCorpus(ViCorpus viCorpus);
+
+ /**
+ * 修改语料库
+ *
+ * @param viCorpus 语料库
+ * @return 结果
+ */
+ public int updateViCorpus(ViCorpus viCorpus);
+
+ /**
+ * 批量删除语料库
+ *
+ * @param corpusIds 需要删除的语料库主键集合
+ * @return 结果
+ */
+ public int deleteViCorpusByCorpusIds(Long[] corpusIds);
+
+}
diff --git a/cmvr-iot-vi/src/main/java/com/cmvr/vi/service/impl/IViCorpusServiceImpl.java b/cmvr-iot-vi/src/main/java/com/cmvr/vi/service/impl/IViCorpusServiceImpl.java
new file mode 100644
index 0000000..3726bdb
--- /dev/null
+++ b/cmvr-iot-vi/src/main/java/com/cmvr/vi/service/impl/IViCorpusServiceImpl.java
@@ -0,0 +1,79 @@
+package com.cmvr.vi.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cmvr.vi.mapper.ViCorpusMapper;
+import com.cmvr.vi.model.domain.ViCorpus;
+import com.cmvr.vi.service.IViCorpusService;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 语料库Service业务层处理
+ *
+ * @author cmvr-iot
+ */
+@Service
+public class IViCorpusServiceImpl extends ServiceImpl implements IViCorpusService {
+
+ /**
+ * 查询语料库
+ *
+ * @param corpusId 语料库主键
+ * @return 语料库
+ */
+ @Override
+ public ViCorpus selectViCorpusByCorpusId(Long corpusId) {
+ return this.getById(corpusId);
+ }
+
+ /**
+ * 查询语料库列表
+ *
+ * @param viCorpus 语料库
+ * @return 语料库
+ */
+ @Override
+ public List selectViCorpusList(ViCorpus viCorpus) {
+ LambdaQueryWrapper wrapper = Wrappers.lambdaQuery();
+ wrapper.eq(ViCorpus::getType, viCorpus.getType());
+ return this.list(wrapper);
+ }
+
+ /**
+ * 新增语料库
+ *
+ * @param viCorpus 语料库
+ * @return 结果
+ */
+ @Override
+ public int insertViCorpus(ViCorpus viCorpus) {
+ return this.baseMapper.insert(viCorpus);
+ }
+
+ /**
+ * 修改语料库
+ *
+ * @param viCorpus 语料库
+ * @return 结果
+ */
+ @Override
+ public int updateViCorpus(ViCorpus viCorpus) {
+ return this.baseMapper.updateById(viCorpus);
+ }
+
+ /**
+ * 批量删除语料库
+ *
+ * @param corpusIds 需要删除的语料库主键
+ * @return 结果
+ */
+ @Override
+ public int deleteViCorpusByCorpusIds(Long[] corpusIds) {
+ return this.baseMapper.deleteBatchIds(Arrays.asList(corpusIds));
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 742dca4..3faa4ad 100644
--- a/pom.xml
+++ b/pom.xml
@@ -260,6 +260,13 @@
${cmvr-iot.version}
+
+
+ com.cmvr
+ cmvr-iot-vi
+ ${cmvr-iot.version}
+
+
com.cmvr
@@ -314,6 +321,7 @@
cmvr-iot-device
cmvr-iot-test
cmvr-iot-api
+ cmvr-iot-vi
pom