summaryrefslogtreecommitdiff
path: root/include/ia_imaging/ia_mkn_decoder.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/ia_imaging/ia_mkn_decoder.h')
-rw-r--r--include/ia_imaging/ia_mkn_decoder.h136
1 files changed, 136 insertions, 0 deletions
diff --git a/include/ia_imaging/ia_mkn_decoder.h b/include/ia_imaging/ia_mkn_decoder.h
new file mode 100644
index 0000000..696e54b
--- /dev/null
+++ b/include/ia_imaging/ia_mkn_decoder.h
@@ -0,0 +1,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_ */