dataitem.h
Go to the documentation of this file.
1 /*
2  * libasterix
3  * Copyright [2020] SinoATC (http://www.sinoatc.com/).
4  * Copyright [2013-2020] Aerosys Corporation (http://www.aerosys.cn/).
5  * All Rights Reserved.
6  *
7  * NOTICE: All information contained herein is, and remains
8  * the property of SinoATC and its suppliers, if any.
9  * The intellectual and technical concepts contained herein
10  * are proprietary to Aerosys Corporation and its suppliers and may be
11  * covered by U.S. and Foreign Patents, patents in process,
12  * and are protected by trade secret or copyright law.
13  * Dissemination of this information or reproduction of this material
14  * is strictly forbidden unless prior written permission is obtained
15  * from SinoATC.
16  */
17 
24 #ifndef LIBASTERIX_DATAITEM_H
25 #define LIBASTERIX_DATAITEM_H
26 
27 #include <stddef.h>
28 #include <stdbool.h>
29 #include "platform.h"
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
48 #define AST_MAP_DATAITEM_TYPE_EX(category_name, category_value, dataitem_name, dataitem_value) \
49  I ## category_name ## _ ## dataitem_name = category_value ## dataitem_value,
50 
54 #define SPF 999 //Special purpose field (SPF) maps to 999
55 #define REF 998 //Reserved extension filed (REF) maps to 998
56 //#define A01 901 //Dataitem I021/130 prior version 0.23 - obsolete
57 #define A02 902 //Dataitem I021/130 version 0.24 ~ 0.26
58 #define A03 903 //Dataitem I021/040 prior version 0.26
59 #define A04 904 //Dataitem I021/131 prior version 0.26
60 #define A05 905 //Dataitem I021/090 prior version 0.26
61 #define A06 906 //Dataitem I021/210 prior version 0.26
62 #define A07 907 //Dataitem I021/271 version 1.0 ~ 2.1
63 
67 typedef enum _ast_dataitem_type_t
68 {
69  INULLITEM = 0,
70 
71  //For CAT001~CAT009
72 #define AST_MAP_DATAITEM_TYPE(category, dataitem) AST_MAP_DATAITEM_TYPE_EX(00 ## category, category, dataitem, dataitem)
73 
74  //Category 001
96 
97  //Category 002
110 
111  //Category 004
130 
131  //Category 008
144 
145  //For CAT010~CAT099
146 #undef AST_MAP_DATAITEM_TYPE
147 #define AST_MAP_DATAITEM_TYPE(category, dataitem) AST_MAP_DATAITEM_TYPE_EX(0 ## category, category, dataitem, dataitem)
148 
149  //Category 010
177 
178  //Category 019
189 
190  //Category 020
219 
220  //Category 021
274 
275  //Category 023
285 
286  //Category 033
304 
305  //Category 034
320 
321  //Category 048
350 
351  //Category 062
381 
382  //Category 065
390 
391  //For CAT100~CAT256
392 #undef AST_MAP_DATAITEM_TYPE
393 #define AST_MAP_DATAITEM_TYPE(category, dataitem) AST_MAP_DATAITEM_TYPE_EX(category, category, dataitem, dataitem)
394 
395  //Category 240
410 
412 
419 
421 typedef struct _ast_dataitem_t
422 {
423  const unsigned char* data;
424  size_t size;
425 
427 
428  bool valid;
430 
432 typedef struct _ast_dataitem_ex_t
433 {
435 
436  void* data;
438 
440 AST_API ast_dataitem_t ast_dataitem_decode(const unsigned char* buffer, const size_t bufsize, const ast_dataitem_type_t type);
441 
443 AST_API ast_dataitem_t ast_dataitem_encode(unsigned char* const buffer, const size_t bufsize, const ast_dataitem_ex_t xdi);
444 
446 AST_API ast_dataitem_t ast_dataitem_copy(unsigned char* const buffer, const size_t bufsize, const ast_dataitem_t src);
447 
449 #define AST_MAX_DATAITEM_SIZE 1024
450 
452 AST_API size_t ast_dataitem_get_size(const unsigned char* buffer, const size_t bufsize, const ast_dataitem_type_t type);
453 
455 AST_API size_t ast_dataitem_get_size_fixed(const unsigned char* buffer, const size_t bufsize, const size_t fix_size);
456 AST_API size_t ast_dataitem_get_size_fixed_1_byte(const unsigned char* buffer, const size_t bufsize);
457 AST_API size_t ast_dataitem_get_size_fixed_2_byte(const unsigned char* buffer, const size_t bufsize);
458 AST_API size_t ast_dataitem_get_size_fixed_3_byte(const unsigned char* buffer, const size_t bufsize);
459 AST_API size_t ast_dataitem_get_size_fixed_4_byte(const unsigned char* buffer, const size_t bufsize);
460 AST_API size_t ast_dataitem_get_size_fixed_5_byte(const unsigned char* buffer, const size_t bufsize);
461 AST_API size_t ast_dataitem_get_size_fixed_6_byte(const unsigned char* buffer, const size_t bufsize);
462 AST_API size_t ast_dataitem_get_size_fixed_7_byte(const unsigned char* buffer, const size_t bufsize);
463 AST_API size_t ast_dataitem_get_size_fixed_8_byte(const unsigned char* buffer, const size_t bufsize);
464 AST_API size_t ast_dataitem_get_size_fixed_9_byte(const unsigned char* buffer, const size_t bufsize);
465 AST_API size_t ast_dataitem_get_size_fixed_12_byte(const unsigned char* buffer, const size_t bufsize);
466 
468 AST_API size_t ast_dataitem_get_size_variable(const unsigned char* buffer, const size_t bufsize, const size_t max_size);
469 AST_API size_t ast_dataitem_get_size_var_1_byte(const unsigned char* buffer, const size_t bufsize);
470 AST_API size_t ast_dataitem_get_size_var_2_byte(const unsigned char* buffer, const size_t bufsize);
471 AST_API size_t ast_dataitem_get_size_var_3_byte(const unsigned char* buffer, const size_t bufsize);
472 AST_API size_t ast_dataitem_get_size_var_4_byte(const unsigned char* buffer, const size_t bufsize);
473 AST_API size_t ast_dataitem_get_size_var_5_byte(const unsigned char* buffer, const size_t bufsize);
474 AST_API size_t ast_dataitem_get_size_var_6_byte(const unsigned char* buffer, const size_t bufsize);
475 AST_API size_t ast_dataitem_get_size_var_23_byte(const unsigned char* buffer, const size_t bufsize);
476 AST_API size_t ast_dataitem_get_size_var_unlimited(const unsigned char* buffer, const size_t bufsize);
477 
479 AST_API size_t ast_dataitem_get_size_repeat(const unsigned char* buffer, const size_t bufsize, const size_t unit_size);
480 AST_API size_t ast_dataitem_get_size_rep_1_byte(const unsigned char* buffer, const size_t bufsize);
481 AST_API size_t ast_dataitem_get_size_rep_2_byte(const unsigned char* buffer, const size_t bufsize);
482 AST_API size_t ast_dataitem_get_size_rep_3_byte(const unsigned char* buffer, const size_t bufsize);
483 AST_API size_t ast_dataitem_get_size_rep_4_byte(const unsigned char* buffer, const size_t bufsize);
484 AST_API size_t ast_dataitem_get_size_rep_8_byte(const unsigned char* buffer, const size_t bufsize);
485 AST_API size_t ast_dataitem_get_size_rep_15_byte(const unsigned char* buffer, const size_t bufsize);
486 AST_API size_t ast_dataitem_get_size_rep_64_byte(const unsigned char* buffer, const size_t bufsize);
487 AST_API size_t ast_dataitem_get_size_rep_256_byte(const unsigned char* buffer, const size_t bufsize);
488 
489 
494 AST_API const char* ast_dataitem_get_name(const ast_dataitem_type_t type);
495 
497 #define AST_DATAITEM_SUMMARY_PREFERED_CHARS 256
498 
508 AST_API void ast_dataitem_get_summary(char* summary, const size_t summary_size, const ast_dataitem_t di);
509 
511 #define AST_DATAITEM_HEX_STR_PREFERED_CHARS (AST_MAX_DATAITEM_SIZE * 3)
512 
519 AST_API void ast_dataitem_get_hex_str(char* string, const size_t string_size, ast_dataitem_t di);
520 
522 #define AST_DATAITEM_HEX_HTML_PREFERED_CHARS (AST_MAX_DATAITEM_SIZE * 12 + 128)
523 
529 AST_API void ast_dataitem_get_hex_html(char* html, const size_t html_size, const ast_dataitem_t di);
530 
532 #define AST_DATAITEM_BIN_STR_PREFERED_CHARS (AST_MAX_DATAITEM_SIZE * 9)
533 
540 AST_API void ast_dataitem_get_bin_str(char* string, const size_t string_size, const ast_dataitem_t di);
541 
543 #define AST_DATAITEM_BIN_HTML_PREFERED_CHARS (AST_MAX_DATAITEM_SIZE * 128 + 64)
544 
550 AST_API void ast_dataitem_get_bin_html(char* html, const size_t html_size, const ast_dataitem_t di);
551 
553 #define AST_DATAITEM_DETAIL_HTML_PREFERED_CHARS (AST_DATAITEM_HEX_HTML_PREFERED_CHARS + AST_DATAITEM_BIN_HTML_PREFERED_CHARS + 20480)
554 
568 AST_API void ast_dataitem_get_detail_html(char* detail, const size_t detail_size, const ast_dataitem_t di);
569 
576 AST_API void ast_dataitem_get_detail_html_dummy(char* detail, const size_t detail_size, const ast_dataitem_t di);
577 
580 #ifdef __cplusplus
581  }
582 #endif // extern "C"
583 
584 #endif //LIBASTERIX_DATAITEM_H
585 
586 // vim:set ft=c.doxygen sw=2 sts=2 fenc=utf8:
size_t ast_dataitem_get_size_fixed_3_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_fixed_1_byte(const unsigned char *buffer, const size_t bufsize)
void ast_dataitem_get_summary(char *summary, const size_t summary_size, const ast_dataitem_t di)
Function to get summary of one dataitem.
Extracted dataitem.
Definition: dataitem.h:432
size_t ast_dataitem_get_size_var_5_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_fixed_8_byte(const unsigned char *buffer, const size_t bufsize)
#define A06
Definition: dataitem.h:61
#define AST_MAP_DATAITEM_TYPE_EX(category_name, category_value, dataitem_name, dataitem_value)
Macro used to map dataitem type.
Definition: dataitem.h:48
size_t ast_dataitem_get_size_rep_3_byte(const unsigned char *buffer, const size_t bufsize)
#define AST_API
Definition: platform.h:63
size_t ast_dataitem_get_size(const unsigned char *buffer, const size_t bufsize, const ast_dataitem_type_t type)
Function to get size of one dataitem.
size_t ast_dataitem_get_size_rep_256_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_rep_4_byte(const unsigned char *buffer, const size_t bufsize)
#define AST_MAP_DATAITEM_TYPE(category, dataitem)
Definition: dataitem.h:393
ast_dataitem_t ast_dataitem_copy(unsigned char *const buffer, const size_t bufsize, const ast_dataitem_t src)
Copy data item to binary buffer.
void ast_dataitem_get_hex_str(char *string, const size_t string_size, ast_dataitem_t di)
Function to get raw dataitem data in hexadecimal format.
size_t ast_dataitem_get_size_var_6_byte(const unsigned char *buffer, const size_t bufsize)
This file includes platform specific definitions.
size_t ast_dataitem_get_size_var_1_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_var_23_byte(const unsigned char *buffer, const size_t bufsize)
Null (Empty) dataitem.
Definition: dataitem.h:69
#define A04
Definition: dataitem.h:59
size_t ast_dataitem_get_size_fixed_7_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_rep_1_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_var_3_byte(const unsigned char *buffer, const size_t bufsize)
ast_dataitem_type_t type
Type of data item.
Definition: dataitem.h:434
#define A03
Definition: dataitem.h:58
size_t ast_dataitem_get_size_var_4_byte(const unsigned char *buffer, const size_t bufsize)
#define SPF
Definition: dataitem.h:54
size_t ast_dataitem_get_size_fixed_9_byte(const unsigned char *buffer, const size_t bufsize)
void * data
Pointer to extracted data of individual dataitem.
Definition: dataitem.h:436
const char * ast_dataitem_type_to_str(const ast_dataitem_type_t type)
Convert from ast_dataitem_type_t to C string.
size_t ast_dataitem_get_size_fixed_2_byte(const unsigned char *buffer, const size_t bufsize)
const char * ast_dataitem_get_name(const ast_dataitem_type_t type)
Function to get name of one dataitem.
void ast_dataitem_get_hex_html(char *html, const size_t html_size, const ast_dataitem_t di)
Function to get a html snippet of the raw dataitem data in hexadecimal format.
size_t ast_dataitem_get_size_fixed_4_byte(const unsigned char *buffer, const size_t bufsize)
ast_dataitem_t ast_dataitem_encode(unsigned char *const buffer, const size_t bufsize, const ast_dataitem_ex_t xdi)
Encode.
void ast_dataitem_get_detail_html(char *detail, const size_t detail_size, const ast_dataitem_t di)
Function to get a html snippet of detailed description of dataitem.
#define A02
Definition: dataitem.h:57
size_t ast_dataitem_get_size_fixed_6_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_fixed(const unsigned char *buffer, const size_t bufsize, const size_t fix_size)
Utility funciton to get fixed dataitem size.
size_t ast_dataitem_get_size_fixed_12_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_rep_64_byte(const unsigned char *buffer, const size_t bufsize)
void ast_dataitem_get_bin_str(char *string, const size_t string_size, const ast_dataitem_t di)
Function to get raw dataitem data in binary format.
const unsigned char * data
Address of data item.
Definition: dataitem.h:423
ast_dataitem_t ast_dataitem_decode(const unsigned char *buffer, const size_t bufsize, const ast_dataitem_type_t type)
Decode data item from binary data.
Dataitem.
Definition: dataitem.h:421
#define A07
Definition: dataitem.h:62
#define REF
Definition: dataitem.h:55
ast_dataitem_type_t
Definition of data item id in each category.
Definition: dataitem.h:67
#define A05
Definition: dataitem.h:60
size_t ast_dataitem_get_size_variable(const unsigned char *buffer, const size_t bufsize, const size_t max_size)
Utility funciton to get FX extendable dataitem size.
ast_dataitem_type_t type
Type of data item.
Definition: dataitem.h:426
size_t size
Size of data item.
Definition: dataitem.h:424
size_t ast_dataitem_get_size_rep_8_byte(const unsigned char *buffer, const size_t bufsize)
bool valid
True when data item is valid, means it's correctlly decoded/encoded.
Definition: dataitem.h:428
void ast_dataitem_get_detail_html_dummy(char *detail, const size_t detail_size, const ast_dataitem_t di)
Dummy get detail function.
size_t ast_dataitem_get_size_var_2_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_rep_2_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_fixed_5_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_repeat(const unsigned char *buffer, const size_t bufsize, const size_t unit_size)
Utility function to get repeated dataitem size.
size_t ast_dataitem_get_size_rep_15_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_var_unlimited(const unsigned char *buffer, const size_t bufsize)
void ast_dataitem_get_bin_html(char *html, const size_t html_size, const ast_dataitem_t di)
Function to get a html snippet of the raw dataitem data in binary format.