Added functions to encode/decode unsigned64 values.
This commit is contained in:
@@ -51,7 +51,11 @@ extern "C" {
|
|||||||
int decode_unsigned32(
|
int decode_unsigned32(
|
||||||
uint8_t * apdu,
|
uint8_t * apdu,
|
||||||
uint32_t * value);
|
uint32_t * value);
|
||||||
|
#ifdef UINT64_MAX
|
||||||
|
int decode_unsigned64(
|
||||||
|
uint8_t * buffer,
|
||||||
|
uint64_t * value);
|
||||||
|
#endif
|
||||||
/* signed value encoding and decoding */
|
/* signed value encoding and decoding */
|
||||||
int encode_signed8(
|
int encode_signed8(
|
||||||
uint8_t * apdu,
|
uint8_t * apdu,
|
||||||
@@ -77,6 +81,11 @@ extern "C" {
|
|||||||
int decode_signed32(
|
int decode_signed32(
|
||||||
uint8_t * apdu,
|
uint8_t * apdu,
|
||||||
int32_t * value);
|
int32_t * value);
|
||||||
|
#ifdef UINT64_MAX
|
||||||
|
int encode_unsigned64(
|
||||||
|
uint8_t * buffer,
|
||||||
|
uint64_t value);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
#include "ctest.h"
|
#include "ctest.h"
|
||||||
|
|||||||
@@ -113,6 +113,54 @@ int decode_unsigned32(
|
|||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef UINT64_MAX
|
||||||
|
/**
|
||||||
|
* @brief Encode a 64-bit unsigned value into buffer
|
||||||
|
* @param buffer - pointer to bytes for storing encoding
|
||||||
|
* @param value - 16-bit value to encode
|
||||||
|
* @return Returns the number of bytes encoded
|
||||||
|
*/
|
||||||
|
int encode_unsigned64(
|
||||||
|
uint8_t * buffer,
|
||||||
|
uint64_t value)
|
||||||
|
{
|
||||||
|
buffer[0] = (uint8_t) ((value & 0xff00000000000000) >> 56);
|
||||||
|
buffer[1] = (uint8_t) ((value & 0x00ff000000000000) >> 48);
|
||||||
|
buffer[2] = (uint8_t) ((value & 0x0000ff0000000000) >> 40);
|
||||||
|
buffer[3] = (uint8_t) ((value & 0x000000ff00000000) >> 32);
|
||||||
|
buffer[4] = (uint8_t) ((value & 0x00000000ff000000) >> 24);
|
||||||
|
buffer[5] = (uint8_t) ((value & 0x0000000000ff0000) >> 16);
|
||||||
|
buffer[6] = (uint8_t) ((value & 0x000000000000ff00) >> 8);
|
||||||
|
buffer[7] = (uint8_t) (value & 0x00000000000000ff);
|
||||||
|
|
||||||
|
return 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Decode a 64-bit unsigned value from a buffer
|
||||||
|
* @param buffer - pointer to bytes for used for decoding
|
||||||
|
* @param value - pointer to 64-bit value to store the decoded value
|
||||||
|
* @return Returns the number of bytes decoded
|
||||||
|
*/
|
||||||
|
int decode_unsigned64(
|
||||||
|
uint8_t * buffer,
|
||||||
|
uint64_t * value)
|
||||||
|
{
|
||||||
|
if (value) {
|
||||||
|
*value = ((uint64_t) ((((uint64_t) buffer[0]) << 56) & 0xff00000000000000));
|
||||||
|
*value |= ((uint64_t) ((((uint64_t) buffer[1]) << 48) & 0x00ff000000000000));
|
||||||
|
*value |= ((uint64_t) ((((uint64_t) buffer[2]) << 40) & 0x0000ff0000000000));
|
||||||
|
*value |= ((uint64_t) ((((uint64_t) buffer[3]) << 32) & 0x000000ff00000000));
|
||||||
|
*value |= ((uint64_t) ((((uint64_t) buffer[4]) << 24) & 0x00000000ff000000));
|
||||||
|
*value |= ((uint64_t) ((((uint64_t) buffer[5]) << 16) & 0x0000000000ff0000));
|
||||||
|
*value |= ((uint64_t) ((((uint64_t) buffer[6]) << 8) & 0x000000000000ff00));
|
||||||
|
*value |= ((uint64_t) (((uint64_t) buffer[7]) & 0x00000000000000ff));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 8;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if BACNET_USE_SIGNED
|
#if BACNET_USE_SIGNED
|
||||||
int encode_signed8(
|
int encode_signed8(
|
||||||
uint8_t * apdu,
|
uint8_t * apdu,
|
||||||
|
|||||||
Reference in New Issue
Block a user