JDu*_*une 4 protocol-buffers ios esp32
我在我的项目中使用谷歌的协议缓冲区进行通信,并且我尝试使用他们的命令行工具 protoc 手动解码一些二进制数据(十六进制格式)。这是我正在使用的命令:
echo 08015a325a300a0d313932 | xxd -r -p | protoc --decode=WiFiConfigPayload wifi_config.proto
Run Code Online (Sandbox Code Playgroud)
我从此命令以及我为“--decode”指定的任何其他类型收到以下错误:
类型未定义:WiFiConfigPayload
这是我正在使用的主要 .proto 文件(它由 espressif 创建,用于其 esp32 芯片)。该文件还导入了其他 .proto 文件,如果有人认为相关,可以在这里找到。
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;
}
}
Run Code Online (Sandbox Code Playgroud)
关于为什么该命令无法从 .protoc 文件解析 WifiConfigPayload 类型(或任何与此相关的类型)的任何想法?
小智 12
我刚刚也遇到了这个问题,我认为你错过了实际的错误。protoc 可能会抱怨,因为您没有通过包引用该消息。
protoc --decode=<PackageName>.MessageName
Run Code Online (Sandbox Code Playgroud)
您的情况中的 PackageName 是 espressif
echo 08015a325a300a0d313932 | xxd -r -p | protoc --decode=espressif.WiFiConfigPayload wifi_config.proto
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3531 次 |
| 最近记录: |