]> mj.ucw.cz Git - home-hw.git/blobdiff - lib/util.h
Bootloader: Checksum after flashing
[home-hw.git] / lib / util.h
index a84d09975475d03fe05a7bca1715aeb57b3c25b6..6b9f4ba488dd94a54daab69a866ba7ce10253d2c 100644 (file)
@@ -1,9 +1,17 @@
+/*
+ *     General Utility Library for STM32
+ *
+ *     (c) 2018--2019 Martin Mareš <mj@ucw.cz>
+ */
+
 #include <stdbool.h>
 #include <stddef.h>
 #include <stdint.h>
 
 #include "config.h"
 
+// Types
+
 typedef unsigned int uint;
 typedef uint8_t byte;
 typedef uint16_t u16;
@@ -11,11 +19,17 @@ typedef int16_t s16;
 typedef uint32_t u32;
 typedef int32_t s32;
 
+// Macros
+
 #define MIN(x,y) ((x) < (y) ? (x) : (y))
 #define MAX(x,y) ((x) > (y) ? (x) : (y))
+#define CLAMP(x,min,max) ({ typeof(x) _t=x; (_t < min) ? min : (_t > max) ? max : _t; })
+#define ARRAY_SIZE(ary) (sizeof(ary)/sizeof((ary)[0]))
 
 #define UNUSED __attribute__((unused))
 
+// Unaligned access to data
+
 static inline uint get_u16_le(byte *p)
 {
        return (p[1] << 8) | p[0];
@@ -64,8 +78,18 @@ static inline void put_u32_le(byte *p, u32 x)
        p[0] = x & 0xff;
 }
 
-// debug.c
+// CPU instructions not covered by libopencm3
 
-void debug_printf(const char *fmt, ...);
+static inline void wait_for_interrupt(void)
+{
+       asm volatile ("wfi");
+}
+
+// util-debug.c
+
+void debug_printf(const char *fmt, ...) __attribute__((format(printf,1,2)));
 void debug_puts(const char *s);
 void debug_putc(int c);
+
+void debug_led(bool light);
+void debug_led_toggle(void);