24bit buffer support
Hello, this patch add 24bit support to the target buffer functions and little/big endian functions. Regards, Mathias
This commit is contained in:
parent
aaf145c422
commit
b0bdc4e2f2
|
@ -116,6 +116,11 @@ static inline uint32_t le_to_h_u32(const uint8_t* buf)
|
||||||
return (uint32_t)(buf[0] | buf[1] << 8 | buf[2] << 16 | buf[3] << 24);
|
return (uint32_t)(buf[0] | buf[1] << 8 | buf[2] << 16 | buf[3] << 24);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline uint32_t le_to_h_u24(const uint8_t* buf)
|
||||||
|
{
|
||||||
|
return (uint32_t)(buf[0] | buf[1] << 8 | buf[2] << 16);
|
||||||
|
}
|
||||||
|
|
||||||
static inline uint16_t le_to_h_u16(const uint8_t* buf)
|
static inline uint16_t le_to_h_u16(const uint8_t* buf)
|
||||||
{
|
{
|
||||||
return (uint16_t)(buf[0] | buf[1] << 8);
|
return (uint16_t)(buf[0] | buf[1] << 8);
|
||||||
|
@ -126,6 +131,11 @@ static inline uint32_t be_to_h_u32(const uint8_t* buf)
|
||||||
return (uint32_t)(buf[3] | buf[2] << 8 | buf[1] << 16 | buf[0] << 24);
|
return (uint32_t)(buf[3] | buf[2] << 8 | buf[1] << 16 | buf[0] << 24);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline uint32_t be_to_h_u24(const uint8_t* buf)
|
||||||
|
{
|
||||||
|
return (uint32_t)(buf[2] | buf[1] << 8 | buf[0] << 16);
|
||||||
|
}
|
||||||
|
|
||||||
static inline uint16_t be_to_h_u16(const uint8_t* buf)
|
static inline uint16_t be_to_h_u16(const uint8_t* buf)
|
||||||
{
|
{
|
||||||
return (uint16_t)(buf[1] | buf[0] << 8);
|
return (uint16_t)(buf[1] | buf[0] << 8);
|
||||||
|
@ -147,6 +157,20 @@ static inline void h_u32_to_be(uint8_t* buf, int val)
|
||||||
buf[3] = (uint8_t) (val >> 0);
|
buf[3] = (uint8_t) (val >> 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void h_u24_to_le(uint8_t* buf, int val)
|
||||||
|
{
|
||||||
|
buf[2] = (uint8_t) (val >> 16);
|
||||||
|
buf[1] = (uint8_t) (val >> 8);
|
||||||
|
buf[0] = (uint8_t) (val >> 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void h_u24_to_be(uint8_t* buf, int val)
|
||||||
|
{
|
||||||
|
buf[0] = (uint8_t) (val >> 16);
|
||||||
|
buf[1] = (uint8_t) (val >> 8);
|
||||||
|
buf[2] = (uint8_t) (val >> 0);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void h_u16_to_le(uint8_t* buf, int val)
|
static inline void h_u16_to_le(uint8_t* buf, int val)
|
||||||
{
|
{
|
||||||
buf[1] = (uint8_t) (val >> 8);
|
buf[1] = (uint8_t) (val >> 8);
|
||||||
|
|
|
@ -280,6 +280,15 @@ uint32_t target_buffer_get_u32(struct target *target, const uint8_t *buffer)
|
||||||
return be_to_h_u32(buffer);
|
return be_to_h_u32(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* read a uint24_t from a buffer in target memory endianness */
|
||||||
|
uint32_t target_buffer_get_u24(struct target *target, const uint8_t *buffer)
|
||||||
|
{
|
||||||
|
if (target->endianness == TARGET_LITTLE_ENDIAN)
|
||||||
|
return le_to_h_u24(buffer);
|
||||||
|
else
|
||||||
|
return be_to_h_u24(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
/* read a uint16_t from a buffer in target memory endianness */
|
/* read a uint16_t from a buffer in target memory endianness */
|
||||||
uint16_t target_buffer_get_u16(struct target *target, const uint8_t *buffer)
|
uint16_t target_buffer_get_u16(struct target *target, const uint8_t *buffer)
|
||||||
{
|
{
|
||||||
|
@ -304,6 +313,15 @@ void target_buffer_set_u32(struct target *target, uint8_t *buffer, uint32_t valu
|
||||||
h_u32_to_be(buffer, value);
|
h_u32_to_be(buffer, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* write a uint24_t to a buffer in target memory endianness */
|
||||||
|
void target_buffer_set_u24(struct target *target, uint8_t *buffer, uint32_t value)
|
||||||
|
{
|
||||||
|
if (target->endianness == TARGET_LITTLE_ENDIAN)
|
||||||
|
h_u24_to_le(buffer, value);
|
||||||
|
else
|
||||||
|
h_u24_to_be(buffer, value);
|
||||||
|
}
|
||||||
|
|
||||||
/* write a uint16_t to a buffer in target memory endianness */
|
/* write a uint16_t to a buffer in target memory endianness */
|
||||||
void target_buffer_set_u16(struct target *target, uint8_t *buffer, uint16_t value)
|
void target_buffer_set_u16(struct target *target, uint8_t *buffer, uint16_t value)
|
||||||
{
|
{
|
||||||
|
|
|
@ -479,8 +479,10 @@ void target_free_all_working_areas(struct target *target);
|
||||||
extern struct target *all_targets;
|
extern struct target *all_targets;
|
||||||
|
|
||||||
uint32_t target_buffer_get_u32(struct target *target, const uint8_t *buffer);
|
uint32_t target_buffer_get_u32(struct target *target, const uint8_t *buffer);
|
||||||
|
uint32_t target_buffer_get_u24(struct target *target, const uint8_t *buffer);
|
||||||
uint16_t target_buffer_get_u16(struct target *target, const uint8_t *buffer);
|
uint16_t target_buffer_get_u16(struct target *target, const uint8_t *buffer);
|
||||||
void target_buffer_set_u32(struct target *target, uint8_t *buffer, uint32_t value);
|
void target_buffer_set_u32(struct target *target, uint8_t *buffer, uint32_t value);
|
||||||
|
void target_buffer_set_u24(struct target *target, uint8_t *buffer, uint32_t value);
|
||||||
void target_buffer_set_u16(struct target *target, uint8_t *buffer, uint16_t value);
|
void target_buffer_set_u16(struct target *target, uint8_t *buffer, uint16_t value);
|
||||||
|
|
||||||
int target_read_u32(struct target *target, uint32_t address, uint32_t *value);
|
int target_read_u32(struct target *target, uint32_t address, uint32_t *value);
|
||||||
|
|
Loading…
Reference in New Issue