]>
Commit | Line | Data |
---|---|---|
ea29682a | 1 | /******************************************************************************\r |
2 | \r | |
3 | Test program IRMP for ESP8266 2015-11-16 Wolfgang Strobl, Bonn\r | |
4 | \r | |
30d1689d | 5 | $Id: irmp-main-esp8266.c,v 1.4 2017/02/17 09:13:06 fm Exp $\r |
7365350c | 6 | \r |
ea29682a | 7 | IRMP ported to ESP8266, testet with MOD-WIFI-ESP8266-DEV on\r |
8 | ESP8266-EVB evaluation board. https://www.olimex.com/Products/IoT/ESP8266-EVB/\r | |
9 | \r | |
10 | Connections\r | |
11 | -----------\r | |
12 | \r | |
30d1689d | 13 | Input TSOP via 1k resistor at GPIO12 (Pin 7 UEXT),\r |
ea29682a | 14 | Output via UART (Pin 3/4 UEXT)\r |
15 | \r | |
16 | example output\r | |
17 | ---------------\r | |
18 | \r | |
19 | ESP8266 IRMP Test v0.3 W.Strobl 20151120\r | |
20 | F_INTERRUPTS==15000\r | |
21 | SDK version: 1.4.1(pre2) Chip ID=10619495\r | |
22 | data : 0x3ffe8000 ~ 0x3ffe837a, len: 890\r | |
23 | rodata: 0x3ffe8380 ~ 0x3ffe891c, len: 1436\r | |
24 | bss : 0x3ffe8920 ~ 0x3ffef4c0, len: 27552\r | |
25 | heap : 0x3ffef4c0 ~ 0x3fffc000, len: 52032\r | |
26 | free heap size=51784, system time=330392, rtc time=59472\r | |
27 | IRMP listening ...\r | |
28 | mode : sta(18:fe:34:a2:0a:67)\r | |
29 | add if0\r | |
30 | \r | |
31 | IRMP TELEFUNKEN(34): addr=0x0000 cmd=0x23f1, f=0\r | |
32 | IRMP TELEFUNKEN(34): addr=0x0000 cmd=0x1ffe, f=0\r | |
33 | IRMP TELEFUNKEN(34): addr=0x0000 cmd=0x28fc, f=0\r | |
34 | IRMP TELEFUNKEN(34): addr=0x0000 cmd=0x0113, f=0\r | |
35 | IRMP TELEFUNKEN(34): addr=0x0000 cmd=0x28fc, f=0\r | |
36 | IRMP TELEFUNKEN(34): addr=0x0000 cmd=0x09ff, f=0\r | |
37 | IRMP TELEFUNKEN(34): addr=0x0000 cmd=0x28fc, f=0\r | |
38 | IRMP TELEFUNKEN(34): addr=0x0000 cmd=0x0113, f=0\r | |
39 | IRMP KASEIKYO( 5): addr=0x2002 cmd=0x9001, f=0\r | |
40 | IRMP KASEIKYO( 5): addr=0x2002 cmd=0x9b40, f=0\r | |
41 | IRMP SIRCS( 1): addr=0x0809 cmd=0x1d0b, f=0\r | |
42 | IRMP SIRCS( 1): addr=0x0809 cmd=0x1d7a, f=0\r | |
43 | IRMP SIRCS( 1): addr=0x0809 cmd=0x1d7c, f=0\r | |
44 | IRMP SIRCS( 1): addr=0x0809 cmd=0x1d79, f=0\r | |
45 | IRMP SIRCS( 1): addr=0x0809 cmd=0x1d7c, f=0\r | |
46 | IRMP SAMSG32(10): addr=0x2d2d cmd=0xc639, f=0\r | |
47 | IRMP SAMSG32(10): addr=0x2d2d cmd=0xb54a, f=0\r | |
48 | \r | |
49 | *******************************************************************************/\r | |
50 | \r | |
51 | #include "ets_sys.h"\r | |
52 | #include "osapi.h"\r | |
53 | #include "driver/uart.h"\r | |
54 | #include "gpio.h"\r | |
55 | #include "os_type.h"\r | |
56 | #include "mem.h"\r | |
57 | \r | |
58 | #include "irmp.h"\r | |
59 | \r | |
60 | // hardware timer (driven by NMI)\r | |
61 | \r | |
62 | typedef enum {\r | |
63 | FRC1_SOURCE = 0,\r | |
64 | NMI_SOURCE = 1,\r | |
65 | } FRC1_TIMER_SOURCE_TYPE;\r | |
66 | \r | |
67 | void hw_timer_set_func (void (* user_hw_timer_cb_set)(void));\r | |
68 | \r | |
69 | void hw_timer_init (\r | |
70 | FRC1_TIMER_SOURCE_TYPE source_type,\r | |
71 | u8 req)\r | |
72 | ;\r | |
73 | \r | |
74 | void irmp_timer(void)\r | |
75 | {\r | |
76 | irmp_ISR ();\r | |
77 | }\r | |
78 | \r | |
79 | // info\r | |
80 | \r | |
81 | void meminfo(void)\r | |
82 | {\r | |
83 | os_printf("free heap size=%u, system time=%u, rtc time=%u \n",\r | |
84 | system_get_free_heap_size(),\r | |
85 | system_get_time(),\r | |
86 | system_get_rtc_time());\r | |
87 | }\r | |
88 | \r | |
89 | void sysinfo(void)\r | |
90 | {\r | |
91 | os_printf("SDK version: %s Chip ID=%u\n",\r | |
92 | system_get_sdk_version(),\r | |
93 | system_get_chip_id());\r | |
94 | system_print_meminfo();\r | |
95 | meminfo();\r | |
96 | }\r | |
97 | \r | |
98 | // Tasks\r | |
99 | \r | |
100 | #define user_procTaskPrio 0\r | |
101 | #define user_procTaskQueueLen 1\r | |
102 | \r | |
103 | os_event_t user_procTaskQueue[user_procTaskQueueLen];\r | |
104 | static void user_procTask(os_event_t *events);\r | |
105 | \r | |
106 | // unbuffered Uart-rx, based on a comment in\r | |
107 | // https://github.com/SuperHouse/esp-open-rtos/issues/18\r | |
108 | \r | |
30d1689d | 109 | int my_rx_one_char(void) // char or -1\r |
ea29682a | 110 | {\r |
111 | int c = READ_PERI_REG(UART_STATUS(0)) & 0xff;\r | |
112 | if (c) return READ_PERI_REG(UART_FIFO(0));\r | |
113 | return -1;\r | |
114 | }\r | |
115 | \r | |
116 | \r | |
117 | IRMP_DATA irmp_data;\r | |
118 | \r | |
119 | //------------------ User Task ---------------------\r | |
120 | \r | |
30d1689d | 121 | static void\r |
ea29682a | 122 | user_procTask(os_event_t *events)\r |
123 | {\r | |
30d1689d | 124 | int rc = irmp_get_data (&irmp_data);\r |
125 | \r | |
ea29682a | 126 | if (rc)\r |
127 | {\r | |
128 | os_printf("\nIRMP %10s(%2d): addr=0x%04x cmd=0x%04x, f=%d ",\r | |
129 | irmp_protocol_names[ irmp_data.protocol],\r | |
130 | irmp_data.protocol,\r | |
131 | irmp_data.address,\r | |
132 | irmp_data.command,\r | |
133 | irmp_data.flags\r | |
134 | );\r | |
135 | }\r | |
30d1689d | 136 | \r |
ea29682a | 137 | // https://github.com/SuperHouse/esp-open-rtos/issues/18\r |
138 | // uart_rx_one_char ist offenbar eine ROM-Funktion.\r | |
30d1689d | 139 | \r |
ea29682a | 140 | int c = my_rx_one_char();\r |
30d1689d | 141 | \r |
142 | if(c != -1)\r | |
ea29682a | 143 | {\r |
144 | uart_tx_one_char(0,c);\r | |
145 | os_printf("(0x%02x, %d) ",c,c);\r | |
146 | switch(c)\r | |
147 | {\r | |
148 | case '.':\r | |
149 | os_printf("\nTime=%d, GPIO12=%d, ",\r | |
150 | system_get_time(),GPIO_INPUT_GET(12));\r | |
151 | os_printf("gpio=%08x ",gpio_input_get());\r | |
152 | break;\r | |
153 | }\r | |
30d1689d | 154 | }\r |
ea29682a | 155 | os_delay_us(100);\r |
30d1689d | 156 | system_os_post(user_procTaskPrio, 0, 0 );\r |
ea29682a | 157 | }\r |
158 | \r | |
30d1689d | 159 | // Init function\r |
ea29682a | 160 | \r |
161 | void ICACHE_FLASH_ATTR\r | |
162 | user_init()\r | |
163 | {\r | |
164 | void* p;\r | |
165 | uint32 now,diff;\r | |
30d1689d | 166 | \r |
ea29682a | 167 | //~ system_timer_reinit(); //US_TIMER\r |
30d1689d | 168 | \r |
169 | uart_init(BIT_RATE_115200, BIT_RATE_115200);\r | |
ea29682a | 170 | os_printf("\n\nESP8266 IRMP Test v0.3 W.Strobl 20151120\n");\r |
171 | \r | |
172 | os_printf("F_INTERRUPTS==%d\n",F_INTERRUPTS);\r | |
30d1689d | 173 | \r |
ea29682a | 174 | sysinfo();\r |
30d1689d | 175 | \r |
ea29682a | 176 | hw_timer_init(NMI_SOURCE,1);\r |
177 | hw_timer_set_func(irmp_timer);\r | |
178 | hw_timer_arm (1000000/F_INTERRUPTS);\r | |
30d1689d | 179 | \r |
ea29682a | 180 | // Initialize the GPIO subsystem.\r |
181 | gpio_init();\r | |
30d1689d | 182 | \r |
183 | \r | |
ea29682a | 184 | irmp_init ();\r |
30d1689d | 185 | \r |
ea29682a | 186 | //Start os task\r |
30d1689d | 187 | \r |
ea29682a | 188 | system_os_task(user_procTask, user_procTaskPrio,user_procTaskQueue, user_procTaskQueueLen);\r |
189 | system_os_post(user_procTaskPrio, 0, 0 );\r | |
30d1689d | 190 | \r |
ea29682a | 191 | os_printf("IRMP listening ...\n");\r |
ea29682a | 192 | }\r |