Декодирование двоичных данных с использованием «proto c --decode» завершается ошибкой «Тип не определен» - PullRequest
0 голосов
/ 17 января 2020

Я использую протокол-буферы Google для связи в своем проекте и пытаюсь использовать их инструмент командной строки proto c для ручного декодирования некоторых двоичных данных (в шестнадцатеричном формате). Это команда, которую я использую:

echo 08015a325a300a0d313932 | xxd -r -p | protoc --decode=WiFiConfigPayload wifi_config.proto

Я получаю следующую ошибку из этой команды, а также любой другой тип, указанный для "--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;
    }
}

Есть идеи, почему команде не удается проанализировать тип WifiConfigPayload (или любой другой тип) из файла .proto c?

1 Ответ

0 голосов
/ 17 января 2020

Я решил проблему сам, вскоре после публикации конечно.

Проблема в строке «package espressif;», которая включена во все их файлы .proto. XCode, кажется, требует его для сборки проекта, но инструмент proto c не ожидает этой линии.

Когда я удаляю эту строку из этого файла и все его импортированные файлы .proto, анализ выполняется успешно.

...