dataitem.h
Go to the documentation of this file.
1/*
2 * $COPYRIGHT-BEGIN$
3 * libasterix
4 * Copyright [2013-2026] SinoATC <http://www.sinoatc.com>.
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 SinoATC 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 * $COPYRIGHT-END$
17 */
18
28
29#ifndef LIBASTERIX_DATAITEM_H
30#define LIBASTERIX_DATAITEM_H
31
32#include <stddef.h>
33#include <stdbool.h>
34#include "platform.h"
35
36#ifdef __cplusplus
37extern "C" {
38#endif
39
53
63#define AST_MAP_DATAITEM_TYPE_EX(category_name, category_value, dataitem_name, dataitem_value) \
64 I ## category_name ## _ ## dataitem_name = category_value ## dataitem_value,
65
68#define SPF 999
69#define REF 998
70#define RFS 997
71
73//#define A01 901 //Dataitem I021/130 prior version 0.23 - Obsolete
74#define A02 902
75#define A03 903
76#define A04 904
77#define A05 905
78#define A06 906
79#define A07 907
80#define A08 908
81
85typedef enum _ast_dataitem_type_t
86{
88
89 //For CAT001~CAT009
90#define AST_MAP_DATAITEM_TYPE(category, dataitem) AST_MAP_DATAITEM_TYPE_EX(00 ## category, category, dataitem, dataitem)
91
92 //Category 001
113 AST_MAP_DATAITEM_TYPE(1, 901) //ASR-10SS extension of I001/130
114 AST_MAP_DATAITEM_TYPE(1, 902) //ASR-10SS extension of I001/210
115 AST_MAP_DATAITEM_TYPE(1, 903) //ASR-10SS MKII extension of I001/130
116 AST_MAP_DATAITEM_TYPE(1, 904) //ASR-10SS MKII extension of I001/210
120
121 //Category 002
133 AST_MAP_DATAITEM_TYPE(2, 901) //ASR-10SS extension of I002/050
134 AST_MAP_DATAITEM_TYPE(2, 902) //ASR-10SS MKII extension of I002/050
138
139 //Category 004
160
161 //Category 008
176
177 //For CAT010~CAT099
178#undef AST_MAP_DATAITEM_TYPE
179#define AST_MAP_DATAITEM_TYPE(category, dataitem) AST_MAP_DATAITEM_TYPE_EX(0 ## category, category, dataitem, dataitem)
180
181 //Category 010
209
210 //Category 015
236
237 //Category 016
248
249 //Category 019
262
263 //Category 020
292
293 //Category 021
348
349 //Category 023
359
360 //Category 033
378
379 //Category 034
394
395 //Category 048
424
425 //Category 062
455
456 //Category 063
470
471 //Category 065
481
482 //For CAT100~CAT256
483#undef AST_MAP_DATAITEM_TYPE
484#define AST_MAP_DATAITEM_TYPE(category, dataitem) AST_MAP_DATAITEM_TYPE_EX(category, category, dataitem, dataitem)
485
486 //Category 240
501
503
512
514typedef struct _ast_dataitem_t
515{
516 const unsigned char* data;
517 size_t size;
518
520
521 bool valid;
523
525typedef struct _ast_dataitem_ex_t
526{
528
529 void* data;
531
533AST_API ast_dataitem_t ast_dataitem_decode(const unsigned char* buffer, const size_t bufsize, const ast_dataitem_type_t type);
534
536AST_API ast_dataitem_t ast_dataitem_encode(unsigned char* const buffer, const size_t bufsize, const ast_dataitem_ex_t xdi);
537
539AST_API ast_dataitem_t ast_dataitem_copy(unsigned char* const buffer, const size_t bufsize, const ast_dataitem_t src);
540
542#define AST_MAX_DATAITEM_SIZE 1024
543
545AST_API size_t ast_dataitem_get_size(const unsigned char* buffer, const size_t bufsize, const ast_dataitem_type_t type);
546
548AST_API size_t ast_dataitem_get_size_fixed(const unsigned char* buffer, const size_t bufsize, const size_t fix_size);
549AST_API size_t ast_dataitem_get_size_fixed_1_byte(const unsigned char* buffer, const size_t bufsize);
550AST_API size_t ast_dataitem_get_size_fixed_2_byte(const unsigned char* buffer, const size_t bufsize);
551AST_API size_t ast_dataitem_get_size_fixed_3_byte(const unsigned char* buffer, const size_t bufsize);
552AST_API size_t ast_dataitem_get_size_fixed_4_byte(const unsigned char* buffer, const size_t bufsize);
553AST_API size_t ast_dataitem_get_size_fixed_5_byte(const unsigned char* buffer, const size_t bufsize);
554AST_API size_t ast_dataitem_get_size_fixed_6_byte(const unsigned char* buffer, const size_t bufsize);
555AST_API size_t ast_dataitem_get_size_fixed_7_byte(const unsigned char* buffer, const size_t bufsize);
556AST_API size_t ast_dataitem_get_size_fixed_8_byte(const unsigned char* buffer, const size_t bufsize);
557AST_API size_t ast_dataitem_get_size_fixed_9_byte(const unsigned char* buffer, const size_t bufsize);
558AST_API size_t ast_dataitem_get_size_fixed_12_byte(const unsigned char* buffer, const size_t bufsize);
559
561AST_API size_t ast_dataitem_get_size_variable(const unsigned char* buffer, const size_t bufsize, const size_t max_size);
562AST_API size_t ast_dataitem_get_size_var_1_byte(const unsigned char* buffer, const size_t bufsize);
563AST_API size_t ast_dataitem_get_size_var_2_byte(const unsigned char* buffer, const size_t bufsize);
564AST_API size_t ast_dataitem_get_size_var_3_byte(const unsigned char* buffer, const size_t bufsize);
565AST_API size_t ast_dataitem_get_size_var_4_byte(const unsigned char* buffer, const size_t bufsize);
566AST_API size_t ast_dataitem_get_size_var_5_byte(const unsigned char* buffer, const size_t bufsize);
567AST_API size_t ast_dataitem_get_size_var_6_byte(const unsigned char* buffer, const size_t bufsize);
568AST_API size_t ast_dataitem_get_size_var_11_byte(const unsigned char* buffer, const size_t bufsize);
569AST_API size_t ast_dataitem_get_size_var_12_byte(const unsigned char* buffer, const size_t bufsize);
570AST_API size_t ast_dataitem_get_size_var_16_byte(const unsigned char* buffer, const size_t bufsize);
571AST_API size_t ast_dataitem_get_size_var_23_byte(const unsigned char* buffer, const size_t bufsize);
572AST_API size_t ast_dataitem_get_size_var_unlimited(const unsigned char* buffer, const size_t bufsize);
573
575AST_API size_t ast_dataitem_get_size_repeat(const unsigned char* buffer, const size_t bufsize, const size_t unit_size);
576AST_API size_t ast_dataitem_get_size_rep_1_byte(const unsigned char* buffer, const size_t bufsize);
577AST_API size_t ast_dataitem_get_size_rep_2_byte(const unsigned char* buffer, const size_t bufsize);
578AST_API size_t ast_dataitem_get_size_rep_3_byte(const unsigned char* buffer, const size_t bufsize);
579AST_API size_t ast_dataitem_get_size_rep_4_byte(const unsigned char* buffer, const size_t bufsize);
580AST_API size_t ast_dataitem_get_size_rep_5_byte(const unsigned char* buffer, const size_t bufsize);
581AST_API size_t ast_dataitem_get_size_rep_6_byte(const unsigned char* buffer, const size_t bufsize);
582AST_API size_t ast_dataitem_get_size_rep_8_byte(const unsigned char* buffer, const size_t bufsize);
583AST_API size_t ast_dataitem_get_size_rep_12_byte(const unsigned char* buffer, const size_t bufsize);
584AST_API size_t ast_dataitem_get_size_rep_15_byte(const unsigned char* buffer, const size_t bufsize);
585AST_API size_t ast_dataitem_get_size_rep_21_byte(const unsigned char* buffer, const size_t bufsize);
586AST_API size_t ast_dataitem_get_size_rep_64_byte(const unsigned char* buffer, const size_t bufsize);
587AST_API size_t ast_dataitem_get_size_rep_256_byte(const unsigned char* buffer, const size_t bufsize);
588
589
596
598#define AST_DATAITEM_SUMMARY_PREFERED_CHARS 256
599
609AST_API void ast_dataitem_get_summary(char* summary, const size_t summary_size, const ast_dataitem_t di);
610
612#define AST_DATAITEM_HEX_STR_PREFERED_CHARS (AST_MAX_DATAITEM_SIZE * 3)
613
620AST_API void ast_dataitem_get_hex_str(char* string, const size_t string_size, ast_dataitem_t di);
621
623#define AST_DATAITEM_HEX_HTML_PREFERED_CHARS (AST_MAX_DATAITEM_SIZE * 12 + 128)
624
630AST_API void ast_dataitem_get_hex_html(char* html, const size_t html_size, const ast_dataitem_t di);
631
633#define AST_DATAITEM_BIN_STR_PREFERED_CHARS (AST_MAX_DATAITEM_SIZE * 9)
634
641AST_API void ast_dataitem_get_bin_str(char* string, const size_t string_size, const ast_dataitem_t di);
642
644#define AST_DATAITEM_BIN_HTML_PREFERED_CHARS (AST_MAX_DATAITEM_SIZE * 128 + 64)
645
651AST_API void ast_dataitem_get_bin_html(char* html, const size_t html_size, const ast_dataitem_t di);
652
654#define AST_DATAITEM_DETAIL_HTML_PREFERED_CHARS (AST_DATAITEM_HEX_HTML_PREFERED_CHARS + AST_DATAITEM_BIN_HTML_PREFERED_CHARS + 20480)
655
669AST_API void ast_dataitem_get_detail_html(char* detail, const size_t detail_size, const ast_dataitem_t di);
670
678AST_API void ast_dataitem_get_detail_html_dummy(char* detail, const size_t detail_size, const ast_dataitem_t di);
679 /* end of group di_dataitem */
681
682#ifdef __cplusplus
683 }
684#endif // extern "C"
685
686#endif //LIBASTERIX_DATAITEM_H
687
688// vim:set ft=c.doxygen sw=2 sts=2 fenc=utf8:
#define AST_MAP_DATAITEM_TYPE(category, dataitem)
Definition dataitem.h:90
size_t ast_dataitem_get_size_var_16_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_var_2_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_rep_8_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_var_4_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 function to get fixed data item size.
size_t ast_dataitem_get_size_fixed_8_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_rep_21_byte(const unsigned char *buffer, const size_t bufsize)
#define A08
Definition dataitem.h:80
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.
size_t ast_dataitem_get_size_rep_2_byte(const unsigned char *buffer, const size_t bufsize)
void ast_dataitem_get_hex_str(char *string, const size_t string_size, ast_dataitem_t di)
Function to get raw data item data in hexadecimal format.
size_t ast_dataitem_get_size_var_6_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_fixed_4_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_rep_256_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_fixed_9_byte(const unsigned char *buffer, const size_t bufsize)
#define RFS
Definition dataitem.h:70
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.
#define A02
AXX are old version of CAT021 ADS-B data items that are not compatible with its new version.
Definition dataitem.h:74
size_t ast_dataitem_get_size_rep_6_byte(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 data item data in binary format.
size_t ast_dataitem_get_size_var_23_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_var_1_byte(const unsigned char *buffer, const size_t bufsize)
#define A04
Definition dataitem.h:76
size_t ast_dataitem_get_size_rep_1_byte(const unsigned char *buffer, const size_t bufsize)
ast_dataitem_type_t
Definition of data item type in each category.
Definition dataitem.h:86
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.
size_t ast_dataitem_get_size_var_3_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_fixed_3_byte(const unsigned char *buffer, const size_t bufsize)
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_var_unlimited(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 data item data in binary format.
size_t ast_dataitem_get_size_rep_15_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_variable(const unsigned char *buffer, const size_t bufsize, const size_t max_size)
Utility function to get FX extendable data item size.
#define A03
Definition dataitem.h:75
size_t ast_dataitem_get_size_fixed_7_byte(const unsigned char *buffer, const size_t bufsize)
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.
#define A07
Definition dataitem.h:79
size_t ast_dataitem_get_size_fixed_1_byte(const unsigned char *buffer, const size_t bufsize)
#define REF
Definition dataitem.h:69
size_t ast_dataitem_get_size_rep_4_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_rep_12_byte(const unsigned char *buffer, const size_t bufsize)
void ast_dataitem_get_detail_html_dummy(char *detail, const size_t detail_size, const ast_dataitem_t di)
Dummy get detail function.
#define A05
Definition dataitem.h:77
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_fixed_2_byte(const unsigned char *buffer, const size_t bufsize)
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 data item data in hexadecimal format.
size_t ast_dataitem_get_size_rep_5_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)
size_t ast_dataitem_get_size_fixed_6_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_rep_3_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_var_11_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 data item from extracted data.
void ast_dataitem_get_summary(char *summary, const size_t summary_size, const ast_dataitem_t di)
Function to get summary of one dataitem.
#define AST_MAP_DATAITEM_TYPE_EX(category_name, category_value, dataitem_name, dataitem_value)
Macro used to map data item type.
Definition dataitem.h:63
size_t ast_dataitem_get_size_var_12_byte(const unsigned char *buffer, const size_t bufsize)
size_t ast_dataitem_get_size_var_5_byte(const unsigned char *buffer, const size_t bufsize)
#define A06
Definition dataitem.h:78
size_t ast_dataitem_get_size_fixed_12_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 data item.
#define SPF
Special data items SPF, REF and RFS are widely used in different categories by different manufacturer...
Definition dataitem.h:68
@ INULLITEM
Null (Empty) dataitem.
Definition dataitem.h:87
This file includes platform specific definitions.
#define AST_API
Definition platform.h:63
Extracted dataitem.
Definition dataitem.h:526
ast_dataitem_type_t type
Type of data item.
Definition dataitem.h:527
void * data
Pointer to extracted data of individual dataitem.
Definition dataitem.h:529
Dataitem.
Definition dataitem.h:515
size_t size
Size of data item.
Definition dataitem.h:517
const unsigned char * data
Address of data item.
Definition dataitem.h:516
bool valid
True when data item is valid, means it's correctly decoded/encoded.
Definition dataitem.h:521
ast_dataitem_type_t type
Type of data item.
Definition dataitem.h:519