summaryrefslogtreecommitdiff
path: root/include/ia_imaging/ia_mkn_decoder.h
blob: 696e54baa14b57af61d22ab0821fcf86f324a257 (plain)
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*
 * Copyright (C) 2015 - 2017 Intel Corporation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*!
 * \file ia_mkn_decoder.h
 * \brief Definitions of functions to decode records from Maker Note.
*/

#ifndef IA_MKN_DECODER_H_
#define IA_MKN_DECODER_H_

#include "ia_types.h"
#include "ia_mkn_types.h"

#ifdef __cplusplus
extern "C" {
#endif

/*!
 * \brief Checks if makernote contents are valid.
 *
 * \param[in] a_mknt_data_ptr       Mandatory.\n
 *                                  Pointer to the makernote (MKNT) binary data.
 * \param[in] a_tag                 Mandatory.\n
 *                                  Tag which should match tag in the given data. Can be 0, if tag doesn't matter.
 * \return                          True if makernote data is valid.
 */
LIBEXPORT bool
ia_mkn_is_valid(const ia_binary_data *a_mknt_data_ptr,
                const unsigned int a_tag);

/*!
 * \brief Changes endianness of given makernote buffer.
 * Modifies the makernote buffer by changing endianness of makernote header and records.
 *
 * \param[in, out] mknt_data        Mandatory.\n
 *                                  Pointer to the makernote (MKNT) binary data which will be changed
 *                                  to different endianness.
 * \return                          Error code.
 */
LIBEXPORT ia_err
ia_mkn_change_endianness(ia_binary_data *mknt_data);

/*!
 * \brief Prints all records contents.
 * Prints all record headers and record contents into the stdout in the same format as defined by the DFID. If a buffer
 * containing makernote header file is given as input, the DNID is also printed out as the first value on each row.
 * Note. Makernote data CRC validity is not checked when printing records. Prior to calling this function,
 * call ia_mkn_is_valid() to validate integrity of makernote data.
 *
 * \param[in] mknt_data             Mandatory.\n
 *                                  Pointer to the makernote (MKNT) binary data.
 * \param[in] makernote_header_file Optional.\n
 *                                  Buffer where makernote header file has been read. Can be NULL.
 * \param[in] mkn_dnid_struct_name  Optional.\n
 *                                  C string of name of structure containing DNIDs in the given header file.
 * \param[in] dnid                  Mandatory.\n
 *                                  Record's DNID to print. If 0, all records will be printed out.
 * \param[in] binary                Mandatory.\n
 *                                  Flag indicating if data is printed out as binary data into stdout.
 * \param[in] key                   Mandatory.\n
 *                                  Packing key (16 bytes).
 * \return                          Error code.
 */
LIBEXPORT ia_err
ia_mkn_print_record(const ia_binary_data *mknt_data,
                    const char *makernote_header_file,
                    const char *mkn_dnid_struct_name,
                    ia_mkn_dnid dnid,
                    bool binary,
                    const char *key);

/*!
 * \brief Copies record data from the makernote to given buffer.
 * Checks if a given record exists in the makernote and copies the data from the makernote buffer into the record data buffer.
 * The amount to copy depends on size value given as input in the record header structure. If size is 0,
 * only the record header is updated with correct data size and no data is copied. Thus this function can be called twice:
 * First to get the record size and second time (after allocating a buffer for the output) to get the record data. When querying
 * for record, DFID and DNID must match the record's DFID and DNID.
 * Note. Makernote data CRC validity is not checked when getting records. Prior to calling this function,
 * call ia_mkn_is_valid() to validate integrity of makernote data.
 *
 * \param[in] mknt_data             Mandatory.\n
 *                                  Pointer to the makernote (MKNT) binary data.
 * \param[in] key                   Mandatory.\n
 *                                  Packing key (16 bytes).
 * \param[in,out] mkn_record_header Mandatory.\n
 *                                  Record header with size set to 0 or wanted data size from record. DFID and DNID
 *                                  must be set correctly to get record data.
 * \param[out]    record_data       Mandatory if record header size is not 0.\n
 *                                  Large enough buffer to hold whole record data.
 * \return                          Error code.
 */
LIBEXPORT ia_err
ia_mkn_get_record(const ia_binary_data *mknt_data,
                  const char* key,
                  ia_mkn_record_header *mkn_record_header,
                  void *record_data);

/*!
 * \brief Copies record data from the makernote to given buffer.
 * Parses through the makernote file and copies record headers of the first num_mkn_records to the given memory array.
 * Client should make sure enough memory is allocated for num_mkn_records in the given array.
 * If mkn_record_headers is NULL, this function will return the number of records. Thus
 * first call can be used to query how many records there are and second call to get the actual record headers.
 *
 * \param[in] mknt_data              Mandatory.\n
 *                                   Pointer to the makernote (MKNT) binary data.
 * \param[in,out] num_mkn_records    Mandatory.\n
 *                                   Number of makernote records the function is allowed to parse and store to the mkn_record_headers.
 * \param[in,out] mkn_record_headers Mandatory.\n
 *                                   Client allocated memory for storing the array of record headers parsed by this function.
 * \return                           Error code.
 */
LIBEXPORT ia_err
ia_mkn_get_record_headers(const ia_binary_data *mknt_data,
                          int *num_mkn_records,
                          ia_mkn_record_header *mkn_record_headers);

#ifdef __cplusplus
}
#endif
#endif /* IA_MKN_DECODER_H_ */