[Nanopb] Sub message - Decode example code

Posted by [하늘이]
2020. 1. 30. 14:21 IT/C, C++
반응형

Decode sample code(Sub message sample for including basic type data)


※ 관련글

  • Google Protobuf
  1. [Google Protobuf] For Java in Android Studio - 설치 및 proto 파일 컴파일
  2. [Google Protobuf] For Java in Android Studio - Gen Java 파일 Android Studio 적용
  3. [Google Protobuf] For Java in Android Studio - Basic example code 기본 소스 코드 사용 샘플
  4. [Google Protobuf] For C++ in Linux - Settings C++ 빌드 환경 만들기
  5. [Google Protobuf] For C++ in Linux - Basic example code 기본 소스 코드 사용 샘플
  • Nanopb Basic type value example
  1. [Nanopb for Google protobuf] Basic type proto sample
  2. [Nanopb for Google protobuf] Basic type proto sample - Sample proto file
  3. [Nanopb for Google protobuf] Basic type proto sample - Encode sample code
  4. [Nanopb for Google protobuf] Basic type proto sample - Decode sample code
  • Nanopb String / bytes value example
  1. [Nanopb for Google protobuf] String/Bytes type proto
  2. [Nanopb for Google protobuf] String/Bytes type proto - Sample proto file 
  3. [Nanopb for Google protobuf] String/Bytes type proto - Encode example code 1
  4. [Nanopb for Google protobuf] String/Bytes type proto - Encode example code 2
  5. [Nanopb for Google protobuf] String/Bytes type proto - Decode example code
  • Nanopb basic submsg example
  1. [Nanopb for Google protobuf] Sub message - Example proto file
  2. [Nanopb for Google protobuf] Sub message - Encode example code
  3. [Nanopb for Google protobuf] Sub message - Decode example code
  • Nanopb array submsg value example
  1. [Nanopb for Google protobuf] Array Sub message - Example proto file
  2. [Nanopb for Google protobuf] Array Sub message - Encode example code
  3. [Nanopb for Google protobuf] Array Sub message - Decode example code

* Decode 

역시나 struct 형태 사용하는 식으로 decode 시킬 때 callback 없이 사용하면된다.

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
void testDecodeSubMsgType(int encodeSize, uint8_t* buffer) {
    //Decode 시키기 위한 inStream 생성
    pb_istream_t stream;
 
    /* Construct a pb_istream_t for reading from the buffer */
    stream = pb_istream_from_buffer(buffer, encodeSize);
 
    /* Uses _init_default to just make sure that the macro works. */
    TestSubMsgTypes msg = TestSubMsgTypes_init_default;
 
    /* [Optional] Fill with garbage to better detect initialization errors */
    memset(&msg, 0xAAsizeof(msg));
 
    // pb decode 함수를 사용하여 bytes 를 객체화 시킨다. 실패 시 false 가 출력.
    if (!pb_decode(&stream, TestSubMsgTypes_fields, &msg)) {
        Serial.print("testDecodeSubMsgType Decoding failed: ");
        Serial.print(PB_GET_ERROR(&stream));
        Serial.println("");
        return;
    } else {
        //Decode 된 메시지 를 출력시켜 확인한다.
        Serial.println("testDecodeSubMsgType Decoding OK");
        Serial.print(" testInt32:");
        Serial.println(msg.testInt32);
        /* submsg가 proto file에서 optional로 설정되어 있기 때문에,
         * submsg 를 가지고 있는지 없는지 판단 후 출력 시킨다.*/
        if(msg.has_submsg){
            Serial.print(" subInt32:");
            Serial.println(msg.submsg.subInt32Value);
            Serial.print(" subDoubleValue:");
            Serial.println(msg.submsg.subDoubleValue);
        }
    }
}
 
cs

 

반응형