separated devices
[mTask.git] / client / stm32 / interface.c
1 #include <stdbool.h>
2 #include <stdint.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <stdarg.h>
6
7 #include "interface.h"
8 #include "ch.h"
9 #include "hal.h"
10
11 //Globals
12 bool input_available(void)
13 {
14 //return iqGetFullI(&(&SD6)->iqueue)>0;
15 return iqGetFullI(&(&SD3)->iqueue)>0;
16 }
17
18 uint8_t read_byte(void)
19 {
20 return (uint8_t)sdGet(&SD3);
21 //return (uint8_t)sdGet(&SD6);
22 }
23
24 void write_byte(uint8_t b)
25 {
26 sdPut(&SD3, b);
27 //sdPut(&SD6, b);
28 }
29
30 uint64_t dpins[] = {LINE_ARD_D0, LINE_ARD_D1, LINE_ARD_D2, LINE_ARD_D3,
31 LINE_ARD_D4, LINE_ARD_D5, LINE_ARD_D6, LINE_ARD_D7, LINE_ARD_D8,
32 LINE_ARD_D9, LINE_ARD_D10, LINE_ARD_D11, LINE_ARD_D12, LINE_ARD_D13,
33 LINE_ARD_D14, LINE_ARD_D15};
34
35 void write_dpin(uint8_t i, bool b)
36 {
37 palWriteLine(dpins[i], b ? PAL_HIGH : PAL_LOW);
38 }
39
40 bool read_dpin(uint8_t i)
41 {
42 debug("readpin: %d", i);
43 return palReadLine(dpins[i]) == PAL_HIGH;
44 }
45
46 void write_apin(uint8_t i, uint8_t a)
47 {
48 (void) i;
49 (void) a;
50 }
51
52 uint8_t read_apin(uint8_t i)
53 {
54 return 0;
55 (void) i;
56 }
57
58 void led_on(uint8_t i)
59 {
60 if(i == 0){
61 palWriteLine(LINE_LED1, PAL_HIGH);
62 } else if(i == 1){
63 palWriteLine(LINE_LED2, PAL_HIGH);
64 } else if(i == 2){
65 palWriteLine(LINE_LED3, PAL_HIGH);
66 }
67 }
68
69 void led_off(uint8_t i)
70 {
71 if(i == 0){
72 palWriteLine(LINE_LED1, PAL_LOW);
73 } else if(i == 1){
74 palWriteLine(LINE_LED2, PAL_LOW);
75 } else if(i == 2){
76 palWriteLine(LINE_LED3, PAL_LOW);
77 }
78 }
79
80 long getmillis(void){
81 return ST2MS(chVTGetSystemTime());
82 }
83
84 void msdelay(long ms)
85 {
86 chThdSleepMilliseconds(ms);
87 }
88
89 void real_setup(void)
90 {
91 // palSetPadMode(GPIOG, 9, PAL_MODE_ALTERNATE(8)); // USART6 TX
92 // palSetPadMode(GPIOG, 14, PAL_MODE_ALTERNATE(8)); // USART6 RX
93
94 halInit();
95 chSysInit();
96 sdStart(&SD3, NULL);
97 }
98
99 void debug(char *fmt, ...)
100 {
101 write_byte('m');
102 for(unsigned int i = 0; i<strlen(fmt); i++){
103 write_byte(fmt[i]);
104 }
105 write_byte('\n');
106 // (void)fmt;
107 }
108
109 void pdie(char *s)
110 {
111 (void)s;
112 }
113
114 void die(char *fmt, ...)
115 {
116 palWriteLine(LINE_LED1, PAL_HIGH);
117 palWriteLine(LINE_LED2, PAL_HIGH);
118 palWriteLine(LINE_LED3, PAL_HIGH);
119 while(1){
120 msdelay(100);
121 }
122 (void)fmt;
123 }