aboutsummaryrefslogtreecommitdiffstats
path: root/src/gdisp/gdisp_image.c
diff options
context:
space:
mode:
authorinmarket <andrewh@inmarket.com.au>2015-11-12 18:33:12 +1000
committerinmarket <andrewh@inmarket.com.au>2015-11-12 18:33:12 +1000
commitd403294cb430c1dfb811880a3b8280a616c3d279 (patch)
tree502faabc1a5c63808075fd4efc44dabef6351905 /src/gdisp/gdisp_image.c
parent2928950e47903d09c418427f107d5854cea20638 (diff)
downloaduGFX-d403294cb430c1dfb811880a3b8280a616c3d279.tar.gz
uGFX-d403294cb430c1dfb811880a3b8280a616c3d279.tar.bz2
uGFX-d403294cb430c1dfb811880a3b8280a616c3d279.zip
More endian updates. Images should now work for any endian machine even strange ones.
Diffstat (limited to 'src/gdisp/gdisp_image.c')
-rw-r--r--src/gdisp/gdisp_image.c45
1 files changed, 43 insertions, 2 deletions
diff --git a/src/gdisp/gdisp_image.c b/src/gdisp/gdisp_image.c
index 7da3d90e..87d11065 100644
--- a/src/gdisp/gdisp_image.c
+++ b/src/gdisp/gdisp_image.c
@@ -191,8 +191,49 @@ void gdispImageFree(gdispImage *img, void *ptr, size_t sz) {
#endif
}
-#if GFX_CPU_ENDIAN != GFX_CPU_ENDIAN_LITTLE && GFX_CPU_ENDIAN != GFX_CPU_ENDIAN_BIG
- const uint8_t gdispImageEndianArray[4] = { 1, 2, 3, 4 };
+#if GFX_CPU_ENDIAN != GFX_CPU_ENDIAN_LITTLE && GFX_CPU_ENDIAN != GFX_CPU_ENDIAN_BIG \
+ && GFX_CPU_ENDIAN != GFX_CPU_ENDIAN_WBDWL && GFX_CPU_ENDIAN != GFX_CPU_ENDIAN_WLDWB
+
+ union wbyteorder_u {
+ uint8_t b[2];
+ uint32_t w;
+ };
+ union dwbyteorder_u {
+ uint8_t b[4];
+ uint32_t l;
+ };
+
+ uint16_t gdispImageH16toLE16(uint16_t w) {
+ union wbyteorder_u we;
+
+ we.w = w;
+ return (((uint16_t)we.b[0]))|(((uint16_t)we.b[1]) << 8);
+ }
+ uint16_t gdispImageH16toBE16(uint16_t dw) {
+ union wbyteorder_u we;
+
+ we.w = w;
+ return (((uint16_t)we.b[0]) << 8)|(((uint16_t)we.b[1]));
+ }
+
+ uint32_t gdispImageH32toLE32(uint32_t dw) {
+ union dwbyteorder_u we;
+
+ we.l = dw;
+ return (((uint32_t)we.b[0]))
+ |(((uint32_t)we.b[1]) << 8)
+ |(((uint32_t)we.b[2]) << 16)
+ |(((uint32_t)we.b[3]) << 24);
+ }
+ uint32_t gdispImageH32toBE32(uint32_t dw) {
+ union dwbyteorder_u we;
+
+ we.l = dw;
+ return (((uint32_t)we.b[0]) << 24)
+ |(((uint32_t)we.b[1]) << 16)
+ |(((uint32_t)we.b[2]) << 8)
+ |(((uint32_t)we.b[3]));
+ }
#endif
#endif /* GFX_USE_GDISP && GDISP_NEED_IMAGE */