]> cloudbase.mooo.com Git - irmp.git/blame - irmp-main-esp8266.c
libopencm3: Add IRMP_LOGGING
[irmp.git] / irmp-main-esp8266.c
CommitLineData
ea29682a 1/******************************************************************************\r
2\r
3Test 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 7IRMP ported to ESP8266, testet with MOD-WIFI-ESP8266-DEV on\r
8ESP8266-EVB evaluation board. https://www.olimex.com/Products/IoT/ESP8266-EVB/\r
9\r
10Connections\r
11-----------\r
12\r
30d1689d 13Input TSOP via 1k resistor at GPIO12 (Pin 7 UEXT),\r
ea29682a 14Output via UART (Pin 3/4 UEXT)\r
15\r
16example output\r
17---------------\r
18\r
19ESP8266 IRMP Test v0.3 W.Strobl 20151120\r
20F_INTERRUPTS==15000\r
21SDK version: 1.4.1(pre2) Chip ID=10619495\r
22data : 0x3ffe8000 ~ 0x3ffe837a, len: 890\r
23rodata: 0x3ffe8380 ~ 0x3ffe891c, len: 1436\r
24bss : 0x3ffe8920 ~ 0x3ffef4c0, len: 27552\r
25heap : 0x3ffef4c0 ~ 0x3fffc000, len: 52032\r
26free heap size=51784, system time=330392, rtc time=59472\r
27IRMP listening ...\r
28mode : sta(18:fe:34:a2:0a:67)\r
29add if0\r
30\r
31IRMP TELEFUNKEN(34): addr=0x0000 cmd=0x23f1, f=0\r
32IRMP TELEFUNKEN(34): addr=0x0000 cmd=0x1ffe, f=0\r
33IRMP TELEFUNKEN(34): addr=0x0000 cmd=0x28fc, f=0\r
34IRMP TELEFUNKEN(34): addr=0x0000 cmd=0x0113, f=0\r
35IRMP TELEFUNKEN(34): addr=0x0000 cmd=0x28fc, f=0\r
36IRMP TELEFUNKEN(34): addr=0x0000 cmd=0x09ff, f=0\r
37IRMP TELEFUNKEN(34): addr=0x0000 cmd=0x28fc, f=0\r
38IRMP TELEFUNKEN(34): addr=0x0000 cmd=0x0113, f=0\r
39IRMP KASEIKYO( 5): addr=0x2002 cmd=0x9001, f=0\r
40IRMP KASEIKYO( 5): addr=0x2002 cmd=0x9b40, f=0\r
41IRMP SIRCS( 1): addr=0x0809 cmd=0x1d0b, f=0\r
42IRMP SIRCS( 1): addr=0x0809 cmd=0x1d7a, f=0\r
43IRMP SIRCS( 1): addr=0x0809 cmd=0x1d7c, f=0\r
44IRMP SIRCS( 1): addr=0x0809 cmd=0x1d79, f=0\r
45IRMP SIRCS( 1): addr=0x0809 cmd=0x1d7c, f=0\r
46IRMP SAMSG32(10): addr=0x2d2d cmd=0xc639, f=0\r
47IRMP 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
62typedef enum {\r
63 FRC1_SOURCE = 0,\r
64 NMI_SOURCE = 1,\r
65} FRC1_TIMER_SOURCE_TYPE;\r
66\r
67void hw_timer_set_func (void (* user_hw_timer_cb_set)(void));\r
68\r
69void hw_timer_init (\r
70FRC1_TIMER_SOURCE_TYPE source_type,\r
71u8 req)\r
72;\r
73\r
74void irmp_timer(void)\r
75{\r
76 irmp_ISR ();\r
77}\r
78\r
79// info\r
80\r
81void 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
89void 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
103os_event_t user_procTaskQueue[user_procTaskQueueLen];\r
104static 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 109int 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
117IRMP_DATA irmp_data;\r
118\r
119//------------------ User Task ---------------------\r
120\r
30d1689d 121static void\r
ea29682a 122user_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
161void ICACHE_FLASH_ATTR\r
162user_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