[Nanopb] String/Bytes type proto - Encode example code 1
반응형
[Nanopb for Google protobuf] String/Bytes type proto - Encode example code 1
※ 관련글
- Google Protobuf
- [Google Protobuf] For Java in Android Studio - 설치 및 proto 파일 컴파일
- [Google Protobuf] For Java in Android Studio - Gen Java 파일 Android Studio 적용
- [Google Protobuf] For Java in Android Studio - Basic example code 기본 소스 코드 사용 샘플
- [Google Protobuf] For C++ in Linux - Settings C++ 빌드 환경 만들기
- [Google Protobuf] For C++ in Linux - Basic example code 기본 소스 코드 사용 샘플
- Nanopb Basic type value example
- [Nanopb for Google protobuf] Basic type proto sample
- [Nanopb for Google protobuf] Basic type proto sample - Sample proto file
- [Nanopb for Google protobuf] Basic type proto sample - Encode sample code
- [Nanopb for Google protobuf] Basic type proto sample - Decode sample code
- Nanopb String / bytes value example
- [Nanopb for Google protobuf] String/Bytes type proto
- [Nanopb for Google protobuf] String/Bytes type proto - Sample proto file
- [Nanopb for Google protobuf] String/Bytes type proto - Encode example code 1
- [Nanopb for Google protobuf] String/Bytes type proto - Encode example code 2
- [Nanopb for Google protobuf] String/Bytes type proto - Decode example code
- Nanopb basic submsg example
- [Nanopb for Google protobuf] Sub message - Example proto file
- [Nanopb for Google protobuf] Sub message - Encode example code
- [Nanopb for Google protobuf] Sub message - Decode example code
- Nanopb array submsg value example
- [Nanopb for Google protobuf] Array Sub message - Example proto file
- [Nanopb for Google protobuf] Array Sub message - Encode example code
- [Nanopb for Google protobuf] Array Sub message - Decode example code
StringBytes Encode sample code 1
Struct 를 사용하지 않고 arg 에 데이터를 바로 넣고 돌리는 형태이다.
encode callback api를 구현한다.
핵심은 pb_encode_tag_for_field -> pb_encode_string
두개 api를 호출하는 것이고 그외는 예외 처리 이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
// pb는 string과 bytes 타입 다 string encode가 가능한 것 같다.
bool encode_string(pb_ostream_t *stream, const pb_field_t *field, void * const *arg)
{
Serial.print("encode_string start @@@");
Serial.println("");
if(arg == NULL){
Serial.print("encode_string failed. Str is Null");
Serial.println("");
return false;
}
if (!pb_encode_tag_for_field(stream, field)){
Serial.print("encode_string encode failed:");
Serial.print(PB_GET_ERROR(stream));
Serial.println("");
return false;
}
return pb_encode_string(stream, *arg, strlen(*arg));
}
void testStrBytesMain(){
int encodeSize = 0;
// 메시지 생성 및 초기화
TestStrBytesTypes msg = TestStrBytesTypes_init_default;
// 메시지에 테스트 데이터 입력
msg.testInt32 = 101;
// encode 를 위한 callback 함수를 등록
msg.testString.funcs.encode = &encode_string;
// encode callback 에 전달되는 arg 값 넣는다.
msg.testString.arg = "Hello world!";
byte testBytes[4] = { 0x10, 0x20, 0x30, 0x40 };
// encode 를 위한 callback 함수를 등록
msg.testBytes.funcs.encode = &encode_string;
// encode callback 에 전달되는 arg 값 넣는다.
msg.testBytes.arg = testBytes;
// Decode 시키기 위한 버퍼 및 stream 생성
uint8_t buffer[100];
pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
/* stream 과 메시지로 Encode 시킨다. 실패 시 false가 리턴된다.
* encode 호출 시 위쪽에서 등록한 callback 함수들이 호출된다. */
if (pb_encode(&stream, TestStrBytesTypes_fields, &msg)) {
encodeSize = stream.bytes_written;
Serial.print("TestStrBytesTypes encode OK size:");
Serial.print(encodeSize);
Serial.println("");
Serial.print("Str Bytes types: ");
// encode된 데이터 바이트 값 출력.
for (int i = 0; i < encodeSize; i++) {
Serial.print(buffer[i], 16);
Serial.print(" ");
}
Serial.println("");
// decode 시킨다.
testDecodeTestStrBytesTypes(encodeSize, buffer);
} else {
Serial.print("TestStrBytesTypes Encoding failed: ");
Serial.print(PB_GET_ERROR(&stream));
Serial.println("");
return;
}
}
|
cs |
반응형
'IT > C, C++' 카테고리의 다른 글
[Nanopb] String/Bytes type proto - Decode example code (0) | 2020.01.30 |
---|---|
[Nanopb] String/Bytes type proto - Encode example code 2 (0) | 2020.01.30 |
[Nanopb] String/Bytes type proto - Sample proto file (0) | 2020.01.30 |
[Nanopb] String/Bytes type proto (0) | 2020.01.30 |
[Nanopb] Basic type proto sample - Decode sample code (0) | 2020.01.30 |