使用 'protoc --decode' 解码二进制数据失败并出现错误 "Type not defined"
Decoding binary data using 'protoc --decode' fails with error "Type not defined"
我在我的项目中使用 google 的协议缓冲区进行通信,并且我正在尝试使用他们的命令行工具 protoc 手动解码一些二进制数据(十六进制格式)。这是我正在使用的命令:
echo 08015a325a300a0d313932 | xxd -r -p | protoc --decode=WiFiConfigPayload wifi_config.proto
我从此命令以及我为“--decode”指定的任何其他类型收到以下错误:
Type not defined: WiFiConfigPayload
这是我正在使用的主要 .proto 文件(它是由 espressif 创建的,用于他们的 esp32 芯片)。此文件还导入了其他 .proto 文件,如果有人认为相关,可以找到 here。
syntax = "proto3";
package espressif;
import "constants.proto";
import "wifi_constants.proto";
message CmdGetStatus {
}
message RespGetStatus {
Status status = 1;
WifiStationState sta_state = 2;
oneof state {
WifiConnectFailedReason fail_reason = 10;
WifiConnectedState connected = 11;
}
}
message CmdSetConfig {
bytes ssid = 1;
bytes passphrase = 2;
bytes bssid = 3;
int32 channel = 4;
}
message RespSetConfig {
Status status = 1;
}
message CmdApplyConfig {
}
message RespApplyConfig {
Status status = 1;
}
enum WiFiConfigMsgType {
TypeCmdGetStatus = 0;
TypeRespGetStatus = 1;
TypeCmdSetConfig = 2;
TypeRespSetConfig = 3;
TypeCmdApplyConfig = 4;
TypeRespApplyConfig = 5;
}
message WiFiConfigPayload {
WiFiConfigMsgType msg = 1;
oneof payload {
CmdGetStatus cmd_get_status = 10;
RespGetStatus resp_get_status = 11;
CmdSetConfig cmd_set_config = 12;
RespSetConfig resp_set_config = 13;
CmdApplyConfig cmd_apply_config = 14;
RespApplyConfig resp_apply_config = 15;
}
}
关于为什么命令无法从 .protoc 文件解析 WifiConfigPayload 类型(或与此相关的任何类型)的任何想法?
我自己解决了这个问题,当然是在发布后不久。
问题是第 "package espressif;" 行,它包含在他们所有的 .proto 文件中。 XCode 似乎需要它来构建项目,但 protoc 工具并不期望该行。
当我从此文件及其所有导入的 .proto 文件中删除这一行时,解析成功。
我也 运行 关注这个问题,我认为你错过了真正的错误。 protoc 可能在抱怨,因为您没有通过包引用消息。
protoc --decode=<PackageName>.MessageName
你的 PackageName 是 espressif
echo 08015a325a300a0d313932 | xxd -r -p | protoc --decode=espressif.WiFiConfigPayload wifi_config.proto
我在我的项目中使用 google 的协议缓冲区进行通信,并且我正在尝试使用他们的命令行工具 protoc 手动解码一些二进制数据(十六进制格式)。这是我正在使用的命令:
echo 08015a325a300a0d313932 | xxd -r -p | protoc --decode=WiFiConfigPayload wifi_config.proto
我从此命令以及我为“--decode”指定的任何其他类型收到以下错误:
Type not defined: WiFiConfigPayload
这是我正在使用的主要 .proto 文件(它是由 espressif 创建的,用于他们的 esp32 芯片)。此文件还导入了其他 .proto 文件,如果有人认为相关,可以找到 here。
syntax = "proto3";
package espressif;
import "constants.proto";
import "wifi_constants.proto";
message CmdGetStatus {
}
message RespGetStatus {
Status status = 1;
WifiStationState sta_state = 2;
oneof state {
WifiConnectFailedReason fail_reason = 10;
WifiConnectedState connected = 11;
}
}
message CmdSetConfig {
bytes ssid = 1;
bytes passphrase = 2;
bytes bssid = 3;
int32 channel = 4;
}
message RespSetConfig {
Status status = 1;
}
message CmdApplyConfig {
}
message RespApplyConfig {
Status status = 1;
}
enum WiFiConfigMsgType {
TypeCmdGetStatus = 0;
TypeRespGetStatus = 1;
TypeCmdSetConfig = 2;
TypeRespSetConfig = 3;
TypeCmdApplyConfig = 4;
TypeRespApplyConfig = 5;
}
message WiFiConfigPayload {
WiFiConfigMsgType msg = 1;
oneof payload {
CmdGetStatus cmd_get_status = 10;
RespGetStatus resp_get_status = 11;
CmdSetConfig cmd_set_config = 12;
RespSetConfig resp_set_config = 13;
CmdApplyConfig cmd_apply_config = 14;
RespApplyConfig resp_apply_config = 15;
}
}
关于为什么命令无法从 .protoc 文件解析 WifiConfigPayload 类型(或与此相关的任何类型)的任何想法?
我自己解决了这个问题,当然是在发布后不久。
问题是第 "package espressif;" 行,它包含在他们所有的 .proto 文件中。 XCode 似乎需要它来构建项目,但 protoc 工具并不期望该行。
当我从此文件及其所有导入的 .proto 文件中删除这一行时,解析成功。
我也 运行 关注这个问题,我认为你错过了真正的错误。 protoc 可能在抱怨,因为您没有通过包引用消息。
protoc --decode=<PackageName>.MessageName
你的 PackageName 是 espressif
echo 08015a325a300a0d313932 | xxd -r -p | protoc --decode=espressif.WiFiConfigPayload wifi_config.proto