| /* | |
| * 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 | |
| } |