问题标签 [nanopb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3838 浏览

c - 如何使用 nanopb 编译 .proto + .options 文件

我写了一个 .options 文件并将其放在与 .proto 文件相同的目录中。然后,我尝试使用命令编译它(使用 nanopb 编译器)

并得到这个错误:

那我做错了什么?我需要在 .proto 文件中导入我的选项文件吗?我还应该做些什么来让它发挥作用吗?

0 投票
2 回答
5240 浏览

c - 在c中的nanopb中为protobuf消息中的重复字段创建回调和结构

我有一个原型消息定义为:

现在,编译后,该字段是 ofpb_callback_t并且我想编写该函数。(没有 .options 文件)

现在,函数应该包含在哪里和什么?数据本身存储在哪里,我如何访问它/为其分配新数据?

* 编辑 *

根据@Groo 的回答,这是我尝试过的代码:

输出是:

之前:arr[0] = 10

解码成功:17

之后:arr[0] = 0

我做错了什么?

0 投票
1 回答
2869 浏览

c - 在 protobuf 中对嵌套和重复字段使用回调 在 c 中使用 nanopb

*编辑:更新 * 我的消息定义为:

我正在尝试使用回调选项编写解码器和编码器。我认为我的编码工作正常,但我的解码器失败了。我的代码是:定义:

编码器/解码器功能:

主要是:

我得到的输出是:

大小:3个要编码的数据:123-1.200000、456-2.300000、789-3.400000 编码大小:29字节解码:1个解码数据:0-0.000000、0-0.000000、0-0.000000

编码缓冲区的打印:

0a07087b15ffffff9affffff99ffffff993f0a0808ffffffc80315333313400a0808ffffff950615ffffff9affffff995940

我在解码器中尝试了一些不同的结构,但它不起作用。很确定这是我错过的一些愚蠢的小东西,但我对此一无所知。

0 投票
1 回答
1203 浏览

server - nanopb 无法与 google protobuf 通信

我创建了一个简单的服务器客户端程序。我想启用 NanoPb 和 Protobuf 之间的通信。但是,它不起作用。有谁知道我做错了什么?

TestParameterProto.proto :

TestParameterProto.options:

服务器.c:

Google Protobuf 中的 client.java :

我收到以下错误消息:

0 投票
1 回答
77 浏览

protocol-buffers - 依赖于带有自定义规则的外部仓库的原型

如何正确依赖外部存储库中定义的 proto_libary 规则并使用自定义规则?

我需要使用 nanopb 为外部存储库中的原型生成文件。这有效:

但是,当我定义自定义规则时,我认为我需要从 awesome_repo 获取底层 .proto 才能将其传递给 protoc ,但我找不到这样做的方法。我也试图不让 other_repo 必须拉入 nanopb 并为我生成它。

0 投票
1 回答
230 浏览

esp8266 - Nanopb + Azure MQTT 在 NodeMCU 上不起作用

我一直在尝试使用NodeMCU上的 Nanopb 库对字符串进行编码,并使用AzureMQTT发布它。

在单独测试时,Nanopb 和 Azure 都可以正常工作。但是,将两者集成在一个草图中会给我带来错误。

串口输出如下:

如果观察到,client.connected()则返回 false,因此,消息不会被发布。

此外,有时会client.run()出现堆栈错误:

解码堆栈跟踪给出:

C:\Users\Violet\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/heap.c 第 13 行

0 投票
2 回答
160 浏览

protocols - protobuf 实现未使用的字节(用于限制器实现)

我需要通过串行端口传输数据。为了确保数据的完整性,我想要一个围绕每个 protobuf 消息的小信封协议。我想到了以下几点:

  1. 消息类型(1 字节)
  2. 消息大小(2 个字节)
  3. protobuf 消息(N 字节)
  4. (校验和;可选)

消息类型主要是 proto 文件中定义的消息之间的映射。但是,如果消息损坏或某些字节丢失,则消息大小将不正确,并且无法再解释所有后续字节。解决这个问题的一种方法是在消息之间引入限制器,但为此我需要选择 protobuf 不使用的东西。是否存在任何 protobuf 消息从未使用过的字节序列?

我也想过另一种方式。如果 master 发现包损坏,它应该将通信重置为干净的开始。为此,我希望主机向从机发送 RESTART 命令。从机应以 ACK 应答,然后再次开始发送完整消息。在 RESTART 和 ACK 之间接收到的所有字节都将被主机丢弃。我想将 ACK 和 RESTART 编码为特殊消息。但是使用这种方法我面临同样的问题:我需要为 ACK 和 RESTART 找到未被任何 protobuf 消息使用的字节序列。

也许我也采取了错误的方法 - 随意建议其他方法来处理丢失的字节。

0 投票
1 回答
256 浏览

cocoapods - 安装 CocoaPod pod (Firestore) 在同一台笔记本电脑上给出不一致的结果

这里有限的 CocoaPod 经验......所以,我有 2 个项目包含 Firestore CocoaPod,除了应用程序名称外,它们具有相同的 pod 文件。其中之一,无论我安装/更新、清除缓存等多少次,它都会成功安装我需要的所有 pod 并创建 Pods/Pods.xcodeproj 文件和 Podfile.lock 文件。


工作吊舱文件

另一个项目(全新,在 pod 安装之前构建干净)尝试安装相同的 pod,但总是失败,并且不会创建 Pods/Pods.xcodeproj 文件或 Podfile.lock 文件。实际上,我创建了一些具有相同结果的新项目。


失败的 POD 文件


错误信息

可以工作的 pod 文件有旧版本的 pod 文件,因为我有一段时间没有接触过代码,所以我升级了版本,它仍然可以工作。

我不明白所有这些 pod 文件副本存储和提取的位置,但我看不出它们如何提取不同的源文件或类似的东西。我认为,如果一个 pod 适用于一个项目,那么它也适用于同一 Mac 上的另一个项目。

不久前,我完全放弃了 Firestore/Firebase,因为我被同样的问题难住了。我认为这个 nanopb pod 是我在其他地方也需要的东西,并且需要学习如何克服这种障碍,无论是 nanopb 问题还是 CocoaPods 问题。我希望这是 CocoaPods 安装的常见问题,而不是太独特。当我搜索 nanopb 安装问题时,找不到太多东西。搜索 CocoaPods 安装问题是指 CocoaPods 本身,而不是特定模块。

谢谢您的帮助。

0 投票
1 回答
508 浏览

c++ - c++ nanopb Protobuff without

I have a protoBuff3 specification which looks something like

And a options file that sets "MSG.data max_count:20"

I am trying to encode and decode protobuffs without using .

I am currently using pb_ostream_from_buffer and pb_encode however I when trying to link i get an error saying pb_ostream_..., pb_encode, pb_decode,... external symbols do not exist. I am able to find these functions defined in pb_encode.h and pb_decode.h

.Online i see reference to functions like ParseFromString and SerializeToString, however I can not find these function anywhere.

What is the proper way to serialize and serialize my message without iostreams?

0 投票
1 回答
181 浏览

c - 输入字符串由空终止字符组成

我正在使用 NanoPB 将编码数据(数组unsigned char)从服务器发送到客户端。我将每个字节映射为一个char,将它们连接起来,然后通过网络作为一个完整的字符串发送。在客户端,我有一个串行接口,可以使用getcor读取服务器的响应gets。问题是缓冲区可能有null-terminating chars并且gets会失败。例如,假设缓冲区包含如下内容:

为简单起见,我将缓冲区写入文件并尝试将其读回并重建它(借助this):

这是输出:

如何从该文件重建缓冲区?为什么readChars打印所有缓冲区strInput而不打印?