aboutsummaryrefslogtreecommitdiff
path: root/example-led/sys.h
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2013-05-22 16:46:45 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2013-05-22 16:46:45 +0900
commit8880a8b1f9a738e9b1ab17712131279a3dfb6881 (patch)
tree1de56a2bae50bd755acc34aeac705c2b3c683345 /example-led/sys.h
parentaa3fd9876abe2131d2ebda9a418ade6a4b89f72c (diff)
add cdc example
Diffstat (limited to 'example-led/sys.h')
-rw-r--r--example-led/sys.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/example-led/sys.h b/example-led/sys.h
new file mode 100644
index 0000000..bb1ea71
--- /dev/null
+++ b/example-led/sys.h
@@ -0,0 +1,97 @@
+extern const uint8_t sys_version[8];
+
+typedef void (*handler)(void);
+extern handler vector[18];
+
+static inline const uint8_t *
+unique_device_id (void)
+{
+ /* STM32F103 has 96-bit unique device identifier */
+ const uint8_t *addr = (const uint8_t *)0x1ffff7e8;
+
+ return addr;
+}
+
+static inline void
+set_led (int on)
+{
+ void (*func) (int) = (void (*)(int))vector[2];
+
+ return (*func) (on);
+}
+
+#if 0
+static inline void
+flash_unlock (void)
+{
+ (*vector[3]) ();
+}
+#endif
+
+static inline int
+flash_program_halfword (uint32_t addr, uint16_t data)
+{
+ int (*func) (uint32_t, uint16_t) = (int (*)(uint32_t, uint16_t))vector[4];
+
+ return (*func) (addr, data);
+}
+
+static inline int
+flash_erase_page (uint32_t addr)
+{
+ int (*func) (uint32_t) = (int (*)(uint32_t))vector[5];
+
+ return (*func) (addr);
+}
+
+static inline int
+flash_check_blank (const uint8_t *p_start, size_t size)
+{
+ int (*func) (const uint8_t *, int) = (int (*)(const uint8_t *, int))vector[6];
+
+ return (*func) (p_start, size);
+}
+
+static inline int
+flash_write (uint32_t dst_addr, const uint8_t *src, size_t len)
+{
+ int (*func) (uint32_t, const uint8_t *, size_t)
+ = (int (*)(uint32_t, const uint8_t *, size_t))vector[7];
+
+ return (*func) (dst_addr, src, len);
+}
+
+static inline int
+flash_protect (void)
+{
+ int (*func) (void) = (int (*)(void))vector[8];
+
+ return (*func) ();
+}
+
+static inline void __attribute__((noreturn))
+flash_erase_all_and_exec (void (*entry)(void))
+{
+ void (*func) (void (*)(void)) = (void (*)(void (*)(void)))vector[9];
+
+ (*func) (entry);
+ for (;;);
+}
+
+static inline void
+usb_lld_sys_init (void)
+{
+ (*vector[10]) ();
+}
+
+static inline void
+usb_lld_sys_shutdown (void)
+{
+ (*vector[11]) ();
+}
+
+static inline void
+nvic_system_reset (void)
+{
+ (*vector[12]) ();
+}