X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=pb.h;h=dd06c69b988fd25d1860050055e473142cbc07d1;hb=57e81ca73b0e0f54e29ca29ec13af551a5335a9b;hp=cd3f465e8b8c16613ecfc77a7b9159ff357a3797;hpb=69085d93877ef75ca28505487d8a1335a4b7fa6c;p=apps%2Fagl-service-can-low-level.git diff --git a/pb.h b/pb.h index cd3f465e..dd06c69b 100644 --- a/pb.h +++ b/pb.h @@ -84,29 +84,24 @@ typedef uint8_t pb_type_t; #define PB_LTYPES_COUNT 7 #define PB_LTYPE_MASK 0x0F -/****************** - * Modifier flags * - ******************/ +/************************** + * Field repetition rules * + **************************/ -/* Just the basic, write data at data_offset */ #define PB_HTYPE_REQUIRED 0x00 - -/* Write true at size_offset */ #define PB_HTYPE_OPTIONAL 0x10 - -/* Read to pre-allocated array - * Maximum number of entries is array_size, - * actual number is stored at size_offset */ #define PB_HTYPE_REPEATED 0x20 +#define PB_HTYPE_MASK 0x30 -/* Works for all required/optional/repeated fields. - * data_offset points to pb_callback_t structure. - * LTYPE should be valid or 0 (it is ignored, but - * sometimes used to speculatively index an array). */ -#define PB_HTYPE_CALLBACK 0x30 - -#define PB_HTYPE_MASK 0xF0 +/******************** + * Allocation types * + ********************/ + +#define PB_ATYPE_STATIC 0x00 +#define PB_ATYPE_CALLBACK 0x40 +#define PB_ATYPE_MASK 0xC0 +#define PB_ATYPE(x) ((x) & PB_ATYPE_MASK) #define PB_HTYPE(x) ((x) & PB_HTYPE_MASK) #define PB_LTYPE(x) ((x) & PB_LTYPE_MASK) @@ -214,19 +209,19 @@ typedef enum { * submessages and default values. */ #define PB_REQUIRED_STATIC(tag, st, m, pm, ltype, ptr) \ - {tag, PB_HTYPE_REQUIRED | ltype, \ + {tag, PB_ATYPE_STATIC | PB_HTYPE_REQUIRED | ltype, \ pb_delta_end(st, m, pm), 0, pb_membersize(st, m), 0, ptr} /* Optional fields add the delta to the has_ variable. */ #define PB_OPTIONAL_STATIC(tag, st, m, pm, ltype, ptr) \ - {tag, PB_HTYPE_OPTIONAL | ltype, \ + {tag, PB_ATYPE_STATIC | PB_HTYPE_OPTIONAL | ltype, \ pb_delta_end(st, m, pm), \ pb_delta(st, has_ ## m, m), \ pb_membersize(st, m), 0, ptr} /* Repeated fields have a _count field and also the maximum number of entries. */ #define PB_REPEATED_STATIC(tag, st, m, pm, ltype, ptr) \ - {tag, PB_HTYPE_REPEATED | ltype, \ + {tag, PB_ATYPE_STATIC | PB_HTYPE_REPEATED | ltype, \ pb_delta_end(st, m, pm), \ pb_delta(st, m ## _count, m), \ pb_membersize(st, m[0]), \ @@ -234,15 +229,15 @@ typedef enum { /* Callbacks are much like required fields except with special datatype. */ #define PB_REQUIRED_CALLBACK(tag, st, m, pm, ltype, ptr) \ - {tag, PB_HTYPE_CALLBACK | ltype, \ + {tag, PB_ATYPE_CALLBACK | PB_HTYPE_REQUIRED | ltype, \ pb_delta_end(st, m, pm), 0, pb_membersize(st, m), 0, ptr} #define PB_OPTIONAL_CALLBACK(tag, st, m, pm, ltype, ptr) \ - {tag, PB_HTYPE_CALLBACK | ltype, \ + {tag, PB_ATYPE_CALLBACK | PB_HTYPE_OPTIONAL | ltype, \ pb_delta_end(st, m, pm), 0, pb_membersize(st, m), 0, ptr} #define PB_REPEATED_CALLBACK(tag, st, m, pm, ltype, ptr) \ - {tag, PB_HTYPE_CALLBACK | ltype, \ + {tag, PB_ATYPE_CALLBACK | PB_HTYPE_REPEATED | ltype, \ pb_delta_end(st, m, pm), 0, pb_membersize(st, m), 0, ptr} /* The mapping from protobuf types to LTYPEs is done using these macros. */