blob: 4722d7252f9dfdc11421f5d7a7271e692fdce008 [file] [log] [blame] [edit]
/*
* Copyright 2017, Data61, CSIRO (ABN 41 687 119 230)
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <stdint.h>
#include <byteswap.h>
#include <endian.h>
typedef union colour_rgb24 {
struct {
uint8_t __padding;
uint8_t red;
uint8_t green;
uint8_t blue;
} as_rgb;
uint32_t as_u32;
} colour_rgb24_t;
static inline colour_rgb24_t colour_rgb24_create(uint8_t red, uint8_t green, uint8_t blue) {
return (colour_rgb24_t) { .as_rgb = {
.__padding = 0,
.red = red,
.green = green,
.blue = blue
}};
}
static inline colour_rgb24_t colour_rgb24_decode_u32(uint32_t colour) {
#if __BYTE_ORDER == __BIG_ENDIAN
return (colour_rgb24_t) { .as_u32 = colour };
#else
return (colour_rgb24_t) { .as_u32 = __bswap_32(colour) };
#endif
}
static inline uint32_t colour_rgb24_encode_u32(colour_rgb24_t colour) {
#if __BYTE_ORDER == __BIG_ENDIAN
return colour.as_u32;
#else
return __bswap_32(colour.as_u32);
#endif
}