change for FST-01 error LED
[gnuk/neug.git] / src / sys.h
1 extern const uint8_t sys_version[8];
2
3 typedef void (*handler)(void);
4 extern handler vector[14];
5
6 static inline const uint8_t *
7 unique_device_id (void)
8 {
9   /* STM32F103 has 96-bit unique device identifier */
10   const uint8_t *addr = (const uint8_t *)0x1ffff7e8;
11
12   return addr;
13 }
14
15 static inline void
16 set_led (int on)
17 {
18   void (*func) (int) = (void (*)(int))vector[2];
19
20   return (*func) (on);
21 }
22
23 static inline void
24 flash_unlock (void)
25 {
26   (*vector[3]) ();
27 }
28
29 static inline int
30 flash_program_halfword (uint32_t addr, uint16_t data)
31 {
32   int (*func) (uint32_t, uint16_t) = (int (*)(uint32_t, uint16_t))vector[4];
33
34   return (*func) (addr, data);
35 }
36
37 static inline int
38 flash_erase_page (uint32_t addr)
39 {
40   int (*func) (uint32_t) = (int (*)(uint32_t))vector[5];
41
42   return (*func) (addr);
43 }
44
45 static inline int
46 flash_check_blank (const uint8_t *p_start, size_t size)
47 {
48   int (*func) (const uint8_t *, int) = (int (*)(const uint8_t *, int))vector[6];
49
50   return (*func) (p_start, size);
51 }
52
53 static inline int
54 flash_write (uint32_t dst_addr, const uint8_t *src, size_t len)
55 {
56   int (*func) (uint32_t, const uint8_t *, size_t)
57     = (int (*)(uint32_t, const uint8_t *, size_t))vector[7];
58
59   return (*func) (dst_addr, src, len);
60 }
61
62 static inline int
63 flash_protect (void)
64 {
65   int (*func) (void) = (int (*)(void))vector[8];
66
67   return (*func) ();
68 }
69
70 static inline void __attribute__((noreturn))
71 flash_erase_all_and_exec (void (*entry)(void))
72 {
73   void (*func) (void (*)(void)) = (void (*)(void (*)(void)))vector[9];
74
75   (*func) (entry);
76   for (;;);
77 }
78
79 static inline void
80 usb_lld_sys_init (void)
81 {
82   (*vector[10]) ();
83 }
84
85 static inline void
86 usb_lld_sys_shutdown (void)
87 {
88   (*vector[11]) ();
89 }
90
91 static inline void
92 nvic_system_reset (void)
93 {
94   (*vector[12]) ();
95 }