mirror of
https://github.com/openharmony/drivers_framework.git
synced 2026-08-27 20:49:55 -04:00
20e219caf6
Signed-off-by: yuanbo <yuanbo@huawei.com>
85 lines
2.5 KiB
C
85 lines
2.5 KiB
C
/*
|
|
* Copyright (c) 2020-2021 Huawei Device Co., Ltd.
|
|
*
|
|
* HDF is dual licensed: you can use it either under the terms of
|
|
* the GPL, or the BSD license, at your option.
|
|
* See the LICENSE file in the root of this repository for complete details.
|
|
*/
|
|
|
|
#ifndef HCS_BLOB_IF_H
|
|
#define HCS_BLOB_IF_H
|
|
|
|
#include "hdf_base.h"
|
|
|
|
#define CONFIG_NODE 0x1
|
|
#define CONFIG_ATTR 0x2
|
|
#define CONFIG_REFERENCE 0x3
|
|
#define CONFIG_ARRAY 0x4
|
|
#define CONFIG_BYTE 0x10
|
|
#define CONFIG_WORD 0x11
|
|
#define CONFIG_DWORD 0x12
|
|
#define CONFIG_QWORD 0x13
|
|
#define CONFIG_STRING 0x14
|
|
|
|
struct HbcHeader {
|
|
uint32_t magicNumber;
|
|
uint32_t versionMajor;
|
|
uint32_t versionMinor;
|
|
uint32_t checkSum;
|
|
int32_t totalSize;
|
|
};
|
|
|
|
#define HBC_MAGIC_NUMBER 0xA00AA00A
|
|
#define HBC_HEADER_LENGTH sizeof(struct HbcHeader)
|
|
#define HBC_BLOB_MAX_LENGTH (1024 * 1024 * 10) // The maximum length is 10 MB.
|
|
#define HBC_ROOT_NAME "root"
|
|
|
|
bool HcsIsByteAlign(void);
|
|
#define HCS_ALIGN_SIZE 4
|
|
static inline size_t HcsAlignSize(size_t size)
|
|
{
|
|
return (size + HCS_ALIGN_SIZE - 1) & (~(HCS_ALIGN_SIZE - 1));
|
|
}
|
|
|
|
static inline uint8_t HcsByteCodeToUint8(const char *start)
|
|
{
|
|
return *(uint8_t *)(start);
|
|
}
|
|
|
|
static inline uint16_t HcsByteCodeToUint16(const char *start)
|
|
{
|
|
return *(uint16_t *)(start);
|
|
}
|
|
|
|
static inline uint32_t HcsByteCodeToUint32(const char *start)
|
|
{
|
|
return *(uint32_t *)(start);
|
|
}
|
|
|
|
static inline uint64_t HcsByteCodeToUint64(const char *start)
|
|
{
|
|
return *(uint64_t *)(start);
|
|
}
|
|
|
|
static inline uint32_t HcsGetPrefix(const char *start)
|
|
{
|
|
return HcsIsByteAlign() ? HcsByteCodeToUint32(start) : HcsByteCodeToUint8(start);
|
|
}
|
|
|
|
#define HCS_DWORD_LENGTH 4
|
|
#define HCS_QWORD_LENGTH 8
|
|
#define HCS_PREFIX_LENGTH (HcsIsByteAlign() ? HCS_DWORD_LENGTH : 1)
|
|
#define HCS_BYTE_LENGTH (HcsIsByteAlign() ? HCS_DWORD_LENGTH : 1)
|
|
#define HCS_WORD_LENGTH (HcsIsByteAlign() ? HCS_DWORD_LENGTH : 2)
|
|
#define HCS_STRING_LENGTH(str) (HcsIsByteAlign() ? HcsAlignSize(strlen(str) + 1) : (strlen(str) + 1))
|
|
int32_t HcsGetDataTypeOffset(const char *start);
|
|
int32_t HcsGetAttrLength(const char *start);
|
|
int32_t HcsGetNodeOrAttrLength(const char *start);
|
|
int32_t HcsGetNodeLength(const char *blob);
|
|
bool HcsCheckBlobFormat(const char *start, uint32_t length);
|
|
bool HcsSwapToUint8(uint8_t *value, const char *realValue, uint32_t type);
|
|
bool HcsSwapToUint16(uint16_t *value, const char *realValue, uint32_t type);
|
|
bool HcsSwapToUint32(uint32_t *value, const char *realValue, uint32_t type);
|
|
bool HcsSwapToUint64(uint64_t *value, const char *realValue, uint32_t type);
|
|
|
|
#endif /* HCS_BLOB_IF_H */ |