Webserver only w/o any other functions, single thread. Running on STM32F013+W5500
Dependencies: NTPClient W5500Interface Watchdog device_configuration eeprom_flash mbed-rpc-nucleo mbed-rtos mbed
Fork of F103-Serial-to-Ethernet by
main.cpp@45:8d18a95fcf8a, 2016-07-19 (annotated)
- Committer:
- olympux
- Date:
- Tue Jul 19 07:50:53 2016 +0000
- Revision:
- 45:8d18a95fcf8a
- Parent:
- 44:4e8a9b466695
- Child:
- 46:971bdaa3507c
Tested
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
olympux | 0:c2eac797face | 1 | #include "mbed.h" |
olympux | 27:22f289beceb8 | 2 | #include "rtos.h" |
olympux | 27:22f289beceb8 | 3 | #include "mbed_rpc.h" |
olympux | 27:22f289beceb8 | 4 | #include "Arguments.h" |
olympux | 27:22f289beceb8 | 5 | |
olympux | 12:7c152c0ca4d8 | 6 | #include "eeprom.h" |
olympux | 0:c2eac797face | 7 | #include "EthernetInterface.h" |
olympux | 9:d2534ecf88c6 | 8 | #include "NTPClient.h" |
olympux | 0:c2eac797face | 9 | |
olympux | 12:7c152c0ca4d8 | 10 | #include "my_eeprom_funcs.h" |
olympux | 20:71c7950fdd91 | 11 | #include "Watchdog.h" |
olympux | 12:7c152c0ca4d8 | 12 | |
olympux | 40:c966abbe2d62 | 13 | #include "RPCCommand.h" |
olympux | 40:c966abbe2d62 | 14 | #include "HTTPServer.h" |
olympux | 40:c966abbe2d62 | 15 | #include "Formatter.h" |
olympux | 40:c966abbe2d62 | 16 | #include "RequestHandler.h" |
olympux | 40:c966abbe2d62 | 17 | #include "RPCType.h" |
olympux | 40:c966abbe2d62 | 18 | |
olympux | 40:c966abbe2d62 | 19 | #define SERVER_PORT 80 |
olympux | 40:c966abbe2d62 | 20 | |
olympux | 0:c2eac797face | 21 | |
olympux | 42:d0ff08711ca5 | 22 | /* |
olympux | 42:d0ff08711ca5 | 23 | * Debug option |
olympux | 31:2e4b6de6c2f3 | 24 | */ |
olympux | 25:48dd18cc147c | 25 | #if 1 |
olympux | 16:84a5bf7285d0 | 26 | //Enable debug |
olympux | 16:84a5bf7285d0 | 27 | #include <cstdio> |
olympux | 31:2e4b6de6c2f3 | 28 | #define DBG(x, ...) std::printf("[main : DBG]"x"\r\n", ##__VA_ARGS__); |
olympux | 31:2e4b6de6c2f3 | 29 | #define WARN(x, ...) std::printf("[main : WARN]"x"\r\n", ##__VA_ARGS__); |
olympux | 31:2e4b6de6c2f3 | 30 | #define ERR(x, ...) std::printf("[main : ERR]"x"\r\n", ##__VA_ARGS__); |
olympux | 16:84a5bf7285d0 | 31 | #else |
olympux | 16:84a5bf7285d0 | 32 | //Disable debug |
olympux | 31:2e4b6de6c2f3 | 33 | #define DBG(x, ...) |
olympux | 16:84a5bf7285d0 | 34 | #define WARN(x, ...) |
olympux | 31:2e4b6de6c2f3 | 35 | #define ERR(x, ...) |
olympux | 16:84a5bf7285d0 | 36 | #endif |
olympux | 16:84a5bf7285d0 | 37 | |
olympux | 16:84a5bf7285d0 | 38 | |
olympux | 2:18f10e7209f4 | 39 | /* |
olympux | 45:8d18a95fcf8a | 40 | * Hardware defines |
olympux | 45:8d18a95fcf8a | 41 | */ |
olympux | 9:d2534ecf88c6 | 42 | // Ethernet |
olympux | 0:c2eac797face | 43 | SPI spi(PA_7, PA_6, PA_5); // mosi, miso, sclk |
olympux | 11:709f90a3b599 | 44 | EthernetInterface eth(&spi, PA_4, PC_9); // spi, cs, reset |
olympux | 40:c966abbe2d62 | 45 | int ethernet_init(void); |
olympux | 30:15e23257e786 | 46 | |
olympux | 30:15e23257e786 | 47 | /* |
olympux | 45:8d18a95fcf8a | 48 | * EEPROM section |
olympux | 45:8d18a95fcf8a | 49 | */ |
olympux | 30:15e23257e786 | 50 | // Virtual address defined by the user: 0xFFFF value is prohibited |
olympux | 30:15e23257e786 | 51 | uint16_t VirtAddVarTab[NumbOfVar] = {0x1212, 0x1313, 0x1414, 0x1515, // IP_Addr |
olympux | 30:15e23257e786 | 52 | 0x2212, 0x2313, 0x2414, 0x2515, // IP_Subnet |
olympux | 30:15e23257e786 | 53 | 0x3212, 0x3313, 0x3414, 0x3515, // IP_Gateway |
olympux | 30:15e23257e786 | 54 | 0x4212, // TCP server port, not used |
olympux | 30:15e23257e786 | 55 | 0x5212, // UDP server port, not used |
olympux | 42:d0ff08711ca5 | 56 | 0x8888, // 1st run? 0xA5A5 = static IP has been configured |
olympux | 30:15e23257e786 | 57 | 0x6212, 0x6313, 0x6414, // MAC |
olympux | 31:2e4b6de6c2f3 | 58 | |
olympux | 30:15e23257e786 | 59 | // this section is for the TCP server that this device connects to in TCP client mode |
olympux | 30:15e23257e786 | 60 | 0x7212, 0x7313, // 0xA5A5 = auto transmit status, time period |
olympux | 30:15e23257e786 | 61 | 0x8212, 0x8313,0x8414, 0x8515, // TCP server IP address |
olympux | 30:15e23257e786 | 62 | 0x9212, // TCP server port |
olympux | 31:2e4b6de6c2f3 | 63 | |
olympux | 30:15e23257e786 | 64 | // this section is for selecting protocol, not used |
olympux | 30:15e23257e786 | 65 | 0xA212, // 0xA5A5 = enable TCP server |
olympux | 30:15e23257e786 | 66 | 0xA313, // 0xA5A5 = eanble TCP client |
olympux | 42:d0ff08711ca5 | 67 | 0xA414 // 0xA5A5 = enable UDP server, always enabled for configuration |
olympux | 31:2e4b6de6c2f3 | 68 | }; |
olympux | 31:2e4b6de6c2f3 | 69 | |
olympux | 30:15e23257e786 | 70 | |
olympux | 30:15e23257e786 | 71 | /* |
olympux | 42:d0ff08711ca5 | 72 | * Variables for network configuration, TCP server |
olympux | 42:d0ff08711ca5 | 73 | */ |
olympux | 42:d0ff08711ca5 | 74 | // Device configuration |
olympux | 45:8d18a95fcf8a | 75 | uint16_t u16ip_addr[4], u16ip_subnet[4], u16ip_gateway[4], u16mac_addr[3]; // 16-bits variables to be compatible with eeprom functions |
olympux | 45:8d18a95fcf8a | 76 | char str_ip_addr[16], str_ip_subnet[16], str_ip_gateway[16], str_mac_addr[20]; // RPC variables, converted from 16-bits u16ip_xxx |
olympux | 45:8d18a95fcf8a | 77 | uint8_t u8ip_addr[4]; // keep ip address in 8-bits |
olympux | 42:d0ff08711ca5 | 78 | uint16_t configured_ip = 0; // flag indicates a static ip has been configured 0xA5A5 |
olympux | 42:d0ff08711ca5 | 79 | uint8_t u8mac[6]; // mac in 8-bits |
olympux | 30:15e23257e786 | 80 | |
olympux | 42:d0ff08711ca5 | 81 | // TCP/UDP server |
olympux | 42:d0ff08711ca5 | 82 | uint16_t tcp_server_local_port = 10000; // change to 7000 if internet required |
olympux | 42:d0ff08711ca5 | 83 | uint16_t udp_server_local_port = 11000; |
olympux | 30:15e23257e786 | 84 | |
olympux | 45:8d18a95fcf8a | 85 | // Used for TCP client mode |
olympux | 42:d0ff08711ca5 | 86 | // this section is used to set the TCP server that this device connects to in TCP client mode. |
olympux | 42:d0ff08711ca5 | 87 | // this device will update its status to the server every transmit_time_period. |
olympux | 30:15e23257e786 | 88 | uint16_t auto_transmit_flag = 0, transmit_time_period = 1000; // auto transmit status, time period = 1s |
olympux | 45:8d18a95fcf8a | 89 | uint16_t u16server_ip_addr[4]; // 16-bit variable to be compatible with eeprom functions |
olympux | 30:15e23257e786 | 90 | uint8_t u8server_ip_addr[4]; // server ip address in 8-bits |
olympux | 45:8d18a95fcf8a | 91 | char str_server_ip_addr[16]; // RPC variable, converted from 16-bits u16server_ip_addr |
olympux | 45:8d18a95fcf8a | 92 | uint16_t u16tcp_server_port; // 16-bit variable to be compatible with eeprom functions |
olympux | 45:8d18a95fcf8a | 93 | uint16_t u16enable_tcp_server, u16enable_tcp_client; // flags for enabling TCP client or TCP server |
olympux | 42:d0ff08711ca5 | 94 | |
olympux | 42:d0ff08711ca5 | 95 | // Corresponding RPC variables |
olympux | 42:d0ff08711ca5 | 96 | RPCVariable<char*> rpcIPAddress(str_ip_addr, 16, "ipaddr"); |
olympux | 42:d0ff08711ca5 | 97 | RPCVariable<char*> rpcSubnet(str_ip_subnet, 16, "subnet"); |
olympux | 42:d0ff08711ca5 | 98 | RPCVariable<char*> rpcGateway(str_ip_gateway, 16, "gateway"); |
olympux | 43:48ca8c6f6f49 | 99 | RPCVariable<char*> rpcMac(str_mac_addr, 20, "mac"); |
olympux | 45:8d18a95fcf8a | 100 | //RPCVariable<unsigned short> rpcLocalTCPServerPort(&tcp_server_local_port, "localtcpserverport"); |
olympux | 42:d0ff08711ca5 | 101 | RPCVariable<unsigned short> rpcLocalUDPPort(&udp_server_local_port, "localudpport"); |
olympux | 45:8d18a95fcf8a | 102 | //RPCVariable<unsigned short> rpcEnableTCPServer(&u16enable_tcp_server, "enabletcpserver"); |
olympux | 30:15e23257e786 | 103 | |
olympux | 43:48ca8c6f6f49 | 104 | // RPC function definitions |
olympux | 45:8d18a95fcf8a | 105 | // save ip address only |
olympux | 45:8d18a95fcf8a | 106 | void set_ip_addr(Arguments* args, Reply* rep){ |
olympux | 43:48ca8c6f6f49 | 107 | int b[4], n, i; |
olympux | 43:48ca8c6f6f49 | 108 | char ipaddr[4]; |
olympux | 43:48ca8c6f6f49 | 109 | |
olympux | 43:48ca8c6f6f49 | 110 | n = sscanf(str_ip_addr, "%d.%d.%d.%d", &b[0], &b[1], &b[2], &b[3]); |
olympux | 43:48ca8c6f6f49 | 111 | if (n == 4) { |
olympux | 43:48ca8c6f6f49 | 112 | DBG("%d.%d.%d.%d",b[0],b[1],b[2],b[3]); |
olympux | 43:48ca8c6f6f49 | 113 | for (i = 0; i < 4; i++) { |
olympux | 43:48ca8c6f6f49 | 114 | ipaddr[i] = b[i] & 0x00FF; |
olympux | 43:48ca8c6f6f49 | 115 | } |
olympux | 43:48ca8c6f6f49 | 116 | save_ip_addr(ipaddr); |
olympux | 43:48ca8c6f6f49 | 117 | NVIC_SystemReset(); |
olympux | 43:48ca8c6f6f49 | 118 | } |
olympux | 43:48ca8c6f6f49 | 119 | else { |
olympux | 43:48ca8c6f6f49 | 120 | DBG("Saving IP address failed"); |
olympux | 43:48ca8c6f6f49 | 121 | } |
olympux | 43:48ca8c6f6f49 | 122 | } |
olympux | 45:8d18a95fcf8a | 123 | |
olympux | 45:8d18a95fcf8a | 124 | // set configuration flag |
olympux | 45:8d18a95fcf8a | 125 | void set_configuration_flag(Arguments* args, Reply* rep){ |
olympux | 44:4e8a9b466695 | 126 | set_conf(); |
olympux | 44:4e8a9b466695 | 127 | } |
olympux | 45:8d18a95fcf8a | 128 | |
olympux | 45:8d18a95fcf8a | 129 | // reset configuration flag |
olympux | 45:8d18a95fcf8a | 130 | void reset_configuration_flag(Arguments* args, Reply* rep){ |
olympux | 43:48ca8c6f6f49 | 131 | reset_conf(); |
olympux | 43:48ca8c6f6f49 | 132 | } |
olympux | 45:8d18a95fcf8a | 133 | |
olympux | 45:8d18a95fcf8a | 134 | // Attach eeprom functions to RPC functions |
olympux | 45:8d18a95fcf8a | 135 | RPCFunction rpcSaveIPAddr(&set_ip_addr, "saveipaddr"); |
olympux | 45:8d18a95fcf8a | 136 | RPCFunction rpcSetConfiguration(&set_configuration_flag, "setconf"); |
olympux | 45:8d18a95fcf8a | 137 | RPCFunction rpcResetConfiguration(&reset_configuration_flag, "resetconf"); |
olympux | 45:8d18a95fcf8a | 138 | |
olympux | 30:15e23257e786 | 139 | |
olympux | 45:8d18a95fcf8a | 140 | /* |
olympux | 45:8d18a95fcf8a | 141 | * RPC Protocol |
olympux | 45:8d18a95fcf8a | 142 | * Use the RPC enabled wrapped class - see RpcClasses.h for more info |
olympux | 45:8d18a95fcf8a | 143 | */ |
olympux | 45:8d18a95fcf8a | 144 | // DigitalIn |
olympux | 45:8d18a95fcf8a | 145 | RpcDigitalIn di0(PB_14, "di0"); |
olympux | 45:8d18a95fcf8a | 146 | RpcDigitalIn di1(PB_12, "di1"); |
olympux | 45:8d18a95fcf8a | 147 | RpcDigitalIn di2(PB_10, "di2"); |
olympux | 45:8d18a95fcf8a | 148 | RpcDigitalIn di3(PB_1, "di3"); |
olympux | 45:8d18a95fcf8a | 149 | RpcDigitalIn di4(PB_15, "di4"); |
olympux | 45:8d18a95fcf8a | 150 | RpcDigitalIn di5(PB_13, "di5"); |
olympux | 45:8d18a95fcf8a | 151 | RpcDigitalIn di6(PB_11, "di6"); |
olympux | 45:8d18a95fcf8a | 152 | RpcDigitalIn di7(PB_2, "di7"); |
olympux | 45:8d18a95fcf8a | 153 | DigitalIn din0(PB_14); |
olympux | 45:8d18a95fcf8a | 154 | DigitalIn din1(PB_12); |
olympux | 45:8d18a95fcf8a | 155 | DigitalIn din2(PB_10); |
olympux | 45:8d18a95fcf8a | 156 | DigitalIn din3(PB_1); |
olympux | 45:8d18a95fcf8a | 157 | DigitalIn din4(PB_15); |
olympux | 45:8d18a95fcf8a | 158 | DigitalIn din5(PB_13); |
olympux | 45:8d18a95fcf8a | 159 | DigitalIn din6(PB_11); |
olympux | 45:8d18a95fcf8a | 160 | DigitalIn din7(PB_2); |
olympux | 45:8d18a95fcf8a | 161 | // DigitalOut |
olympux | 45:8d18a95fcf8a | 162 | RpcDigitalOut do0(PB_3, "do0"); |
olympux | 45:8d18a95fcf8a | 163 | RpcDigitalOut do1(PB_5, "do1"); |
olympux | 45:8d18a95fcf8a | 164 | RpcDigitalOut do2(PB_7, "do2"); |
olympux | 45:8d18a95fcf8a | 165 | RpcDigitalOut do3(PB_9, "do3"); |
olympux | 45:8d18a95fcf8a | 166 | RpcDigitalOut do4(PD_2, "do4"); |
olympux | 45:8d18a95fcf8a | 167 | RpcDigitalOut do5(PB_4, "do5"); |
olympux | 45:8d18a95fcf8a | 168 | RpcDigitalOut do6(PB_6, "do6"); |
olympux | 45:8d18a95fcf8a | 169 | RpcDigitalOut do7(PB_8, "do7"); |
olympux | 45:8d18a95fcf8a | 170 | DigitalOut dout0(PB_3); |
olympux | 45:8d18a95fcf8a | 171 | DigitalOut dout1(PB_5); |
olympux | 45:8d18a95fcf8a | 172 | DigitalOut dout2(PB_7); |
olympux | 45:8d18a95fcf8a | 173 | DigitalOut dout3(PB_9); |
olympux | 45:8d18a95fcf8a | 174 | DigitalOut dout4(PD_2); |
olympux | 45:8d18a95fcf8a | 175 | DigitalOut dout5(PB_4); |
olympux | 45:8d18a95fcf8a | 176 | DigitalOut dout6(PB_6); |
olympux | 45:8d18a95fcf8a | 177 | DigitalOut dout7(PB_8); |
olympux | 45:8d18a95fcf8a | 178 | // AnalogIn |
olympux | 45:8d18a95fcf8a | 179 | RpcAnalogIn adc10(PC_0, "ai0"); // adc10 |
olympux | 45:8d18a95fcf8a | 180 | RpcAnalogIn adc11(PC_1, "ai1"); // adc11 |
olympux | 45:8d18a95fcf8a | 181 | AnalogIn ain0(PC_0); |
olympux | 45:8d18a95fcf8a | 182 | AnalogIn ain1(PC_1); |
olympux | 45:8d18a95fcf8a | 183 | // AnalogOut, PWM |
olympux | 45:8d18a95fcf8a | 184 | RpcPwmOut pwm11(PA_8, "pwm0"); // pwm11 |
olympux | 45:8d18a95fcf8a | 185 | RpcPwmOut pwm21(PA_15, "pwm1"); // pwm21 |
olympux | 27:22f289beceb8 | 186 | // Serial |
olympux | 45:8d18a95fcf8a | 187 | RpcSerial rpcUsart(USBTX, USBRX, "uart"); // usart2 |
olympux | 27:22f289beceb8 | 188 | Serial uart(USBTX,USBRX); |
olympux | 45:8d18a95fcf8a | 189 | // Timer |
olympux | 45:8d18a95fcf8a | 190 | RpcTimer timer1("tmr1"); |
olympux | 20:71c7950fdd91 | 191 | // Watchdog |
olympux | 20:71c7950fdd91 | 192 | Watchdog wdt; |
olympux | 20:71c7950fdd91 | 193 | |
olympux | 26:09e0dd020900 | 194 | |
olympux | 45:8d18a95fcf8a | 195 | // Some variable types that can be modified through RPC. |
olympux | 45:8d18a95fcf8a | 196 | //int wheelsOn; |
olympux | 45:8d18a95fcf8a | 197 | //char lcdBannerMessage; |
olympux | 45:8d18a95fcf8a | 198 | //float speed; |
olympux | 45:8d18a95fcf8a | 199 | int current_time; |
olympux | 45:8d18a95fcf8a | 200 | int enable_onoff_dout = 0; // 8-bit LSB |
olympux | 45:8d18a95fcf8a | 201 | int do0OnTime = 64800, do0OffTime = 21600; //default ON = 18:00, OFF = 6:00 |
olympux | 45:8d18a95fcf8a | 202 | int do1OnTime = 64800, do1OffTime = 21600; |
olympux | 45:8d18a95fcf8a | 203 | int do2OnTime = 64800, do2OffTime = 21600; |
olympux | 45:8d18a95fcf8a | 204 | int do3OnTime = 64800, do3OffTime = 21600; |
olympux | 45:8d18a95fcf8a | 205 | int do4OnTime = 64800, do4OffTime = 21600; |
olympux | 45:8d18a95fcf8a | 206 | int do5OnTime = 64800, do5OffTime = 21600; |
olympux | 45:8d18a95fcf8a | 207 | int do6OnTime = 64800, do6OffTime = 21600; |
olympux | 45:8d18a95fcf8a | 208 | int do7OnTime = 64800, do7OffTime = 21600; |
olympux | 45:8d18a95fcf8a | 209 | |
olympux | 45:8d18a95fcf8a | 210 | //RPCVariable<int> rpcLights(&wheelsOn, "wheels"); |
olympux | 45:8d18a95fcf8a | 211 | //RPCVariable<char> rpcBanner(&lcdBannerMessage, "banner"); |
olympux | 45:8d18a95fcf8a | 212 | //RPCVariable<float> rpcSpeed(&speed, "speed"); |
olympux | 45:8d18a95fcf8a | 213 | RPCVariable<int> rpcCurrentTime(¤t_time, "Time"); |
olympux | 45:8d18a95fcf8a | 214 | RPCVariable<int> rpcEnableOnOffDout(&enable_onoff_dout, "EnableOnOffDout"); |
olympux | 45:8d18a95fcf8a | 215 | RPCVariable<int> rpcdo0OnTime(&do0OnTime, "do0OnTime"); |
olympux | 45:8d18a95fcf8a | 216 | RPCVariable<int> rpcdo0OffTime(&do0OffTime, "do0OffTime"); |
olympux | 45:8d18a95fcf8a | 217 | RPCVariable<int> rpcdo1OnTime(&do1OnTime, "do1OnTime"); |
olympux | 45:8d18a95fcf8a | 218 | RPCVariable<int> rpcdo1OffTime(&do1OffTime, "do1OffTime"); |
olympux | 45:8d18a95fcf8a | 219 | RPCVariable<int> rpcdo2OnTime(&do2OnTime, "do2OnTime"); |
olympux | 45:8d18a95fcf8a | 220 | RPCVariable<int> rpcdo2OffTime(&do2OffTime, "do2OffTime"); |
olympux | 45:8d18a95fcf8a | 221 | RPCVariable<int> rpcdo3OnTime(&do3OnTime, "do3OnTime"); |
olympux | 45:8d18a95fcf8a | 222 | RPCVariable<int> rpcdo3OffTime(&do3OffTime, "do3OffTime"); |
olympux | 45:8d18a95fcf8a | 223 | RPCVariable<int> rpcdo4OnTime(&do4OnTime, "do4OnTime"); |
olympux | 45:8d18a95fcf8a | 224 | RPCVariable<int> rpcdo4OffTime(&do4OffTime, "do4OffTime"); |
olympux | 45:8d18a95fcf8a | 225 | RPCVariable<int> rpcdo5OnTime(&do5OnTime, "do5OnTime"); |
olympux | 45:8d18a95fcf8a | 226 | RPCVariable<int> rpcdo5OffTime(&do5OffTime, "do5OffTime"); |
olympux | 45:8d18a95fcf8a | 227 | RPCVariable<int> rpcdo6OnTime(&do6OnTime, "do6OnTime"); |
olympux | 45:8d18a95fcf8a | 228 | RPCVariable<int> rpcdo6OffTime(&do6OffTime, "do6OffTime"); |
olympux | 45:8d18a95fcf8a | 229 | RPCVariable<int> rpcdo7OnTime(&do7OnTime, "do7OnTime"); |
olympux | 45:8d18a95fcf8a | 230 | RPCVariable<int> rpcdo7OffTime(&do7OffTime, "do7OffTime"); |
olympux | 45:8d18a95fcf8a | 231 | |
olympux | 45:8d18a95fcf8a | 232 | // RPC function definitions |
olympux | 45:8d18a95fcf8a | 233 | // Create a function of the required format |
olympux | 45:8d18a95fcf8a | 234 | void set_current_time(Arguments* args, Reply* rep); |
olympux | 45:8d18a95fcf8a | 235 | void set_current_time(Arguments* args, Reply* rep){ |
olympux | 45:8d18a95fcf8a | 236 | time_t ct = (time_t)current_time; // convert |
olympux | 45:8d18a95fcf8a | 237 | struct tm *st = localtime(&ct); |
olympux | 45:8d18a95fcf8a | 238 | |
olympux | 45:8d18a95fcf8a | 239 | set_time(ct); // set time |
olympux | 45:8d18a95fcf8a | 240 | |
olympux | 45:8d18a95fcf8a | 241 | DBG("Set current time to: %s", ctime(&ct)); |
olympux | 45:8d18a95fcf8a | 242 | DBG("Time only: %d:%d:%d", st->tm_hour, st->tm_min, st->tm_sec); |
olympux | 45:8d18a95fcf8a | 243 | } |
olympux | 45:8d18a95fcf8a | 244 | // Attach it to an RPC object |
olympux | 45:8d18a95fcf8a | 245 | RPCFunction rpcSetCurrentTime(&set_current_time, "SetTime"); |
olympux | 45:8d18a95fcf8a | 246 | |
olympux | 26:09e0dd020900 | 247 | |
olympux | 2:18f10e7209f4 | 248 | /* |
olympux | 42:d0ff08711ca5 | 249 | * Threads |
olympux | 42:d0ff08711ca5 | 250 | */ |
olympux | 20:71c7950fdd91 | 251 | // WDT reset |
olympux | 31:2e4b6de6c2f3 | 252 | void wdt_reset_thread(void const* args) |
olympux | 31:2e4b6de6c2f3 | 253 | { |
olympux | 20:71c7950fdd91 | 254 | while (true) |
olympux | 20:71c7950fdd91 | 255 | wdt.Service(); |
olympux | 20:71c7950fdd91 | 256 | } |
olympux | 20:71c7950fdd91 | 257 | |
olympux | 40:c966abbe2d62 | 258 | |
olympux | 40:c966abbe2d62 | 259 | HTTPServer create_simple_server() |
olympux | 40:c966abbe2d62 | 260 | { |
olympux | 40:c966abbe2d62 | 261 | HTTPServer srv; |
olympux | 40:c966abbe2d62 | 262 | srv.add_request_handler("DELETE", new DeleteRequestHandler()); |
olympux | 40:c966abbe2d62 | 263 | srv.add_request_handler("GET", new GetRequestHandler()); |
olympux | 40:c966abbe2d62 | 264 | srv.add_request_handler("PUT", new PutRequestHandler()); |
olympux | 40:c966abbe2d62 | 265 | return srv; |
olympux | 40:c966abbe2d62 | 266 | } |
olympux | 40:c966abbe2d62 | 267 | |
olympux | 40:c966abbe2d62 | 268 | HTTPServer create_interactive_server() |
olympux | 39:083cf93121a9 | 269 | { |
olympux | 40:c966abbe2d62 | 270 | HTTPServer srv(new InteractiveHTMLFormatter()); |
olympux | 40:c966abbe2d62 | 271 | srv.add_request_handler("GET", new ComplexRequestHandler()); |
olympux | 40:c966abbe2d62 | 272 | return srv; |
olympux | 38:f8735ae519aa | 273 | } |
olympux | 38:f8735ae519aa | 274 | |
olympux | 45:8d18a95fcf8a | 275 | // Prototypes |
olympux | 45:8d18a95fcf8a | 276 | void digital_outputs_timer_thread(void const* args); |
olympux | 45:8d18a95fcf8a | 277 | |
olympux | 38:f8735ae519aa | 278 | // Main code |
olympux | 4:568c97f2a407 | 279 | int main() |
olympux | 4:568c97f2a407 | 280 | { |
olympux | 42:d0ff08711ca5 | 281 | int ret; |
olympux | 42:d0ff08711ca5 | 282 | |
olympux | 20:71c7950fdd91 | 283 | Thread::wait(500); // turn on delay |
olympux | 31:2e4b6de6c2f3 | 284 | |
olympux | 4:568c97f2a407 | 285 | /* |
olympux | 9:d2534ecf88c6 | 286 | * Configure |
olympux | 4:568c97f2a407 | 287 | */ |
olympux | 11:709f90a3b599 | 288 | uart.baud(115200); |
olympux | 36:dc6f079777bb | 289 | DBG("Starting..."); |
olympux | 31:2e4b6de6c2f3 | 290 | |
olympux | 31:2e4b6de6c2f3 | 291 | // check watchdog |
olympux | 20:71c7950fdd91 | 292 | if (wdt.WatchdogCausedReset()) |
olympux | 20:71c7950fdd91 | 293 | DBG("Watchdog caused reset."); |
olympux | 20:71c7950fdd91 | 294 | wdt.Configure(4); |
olympux | 31:2e4b6de6c2f3 | 295 | |
olympux | 6:d054e394fba3 | 296 | /* |
olympux | 6:d054e394fba3 | 297 | * FLASH |
olympux | 6:d054e394fba3 | 298 | */ |
olympux | 12:7c152c0ca4d8 | 299 | load_eeprom_network(); |
olympux | 15:edeb0aed160d | 300 | load_eeprom_tcpserver(); |
olympux | 31:2e4b6de6c2f3 | 301 | |
olympux | 20:71c7950fdd91 | 302 | /* |
olympux | 20:71c7950fdd91 | 303 | * UI threads |
olympux | 20:71c7950fdd91 | 304 | */ |
olympux | 20:71c7950fdd91 | 305 | Thread t3(wdt_reset_thread); |
olympux | 45:8d18a95fcf8a | 306 | Thread t4(digital_outputs_timer_thread); |
olympux | 40:c966abbe2d62 | 307 | |
olympux | 40:c966abbe2d62 | 308 | // rpc |
olympux | 40:c966abbe2d62 | 309 | RPCType::instance().register_types(); |
olympux | 31:2e4b6de6c2f3 | 310 | |
olympux | 4:568c97f2a407 | 311 | /* |
olympux | 4:568c97f2a407 | 312 | * Ethernet |
olympux | 4:568c97f2a407 | 313 | */ |
olympux | 6:d054e394fba3 | 314 | ret = ethernet_init(); |
olympux | 4:568c97f2a407 | 315 | if (ret) { |
olympux | 18:ca499a2e7da6 | 316 | ERR("Ethernet initialisation failed. App halted."); |
olympux | 4:568c97f2a407 | 317 | while (true) {}; |
olympux | 4:568c97f2a407 | 318 | } |
olympux | 31:2e4b6de6c2f3 | 319 | |
olympux | 23:47ee805435b1 | 320 | Thread::wait(2000); // TCP/UDP stack delay |
olympux | 31:2e4b6de6c2f3 | 321 | |
olympux | 40:c966abbe2d62 | 322 | // create rpc http server |
olympux | 40:c966abbe2d62 | 323 | HTTPServer srv = create_interactive_server(); |
olympux | 26:09e0dd020900 | 324 | |
olympux | 40:c966abbe2d62 | 325 | if(!srv.init(SERVER_PORT)) |
olympux | 40:c966abbe2d62 | 326 | { |
olympux | 40:c966abbe2d62 | 327 | eth.disconnect(); |
olympux | 40:c966abbe2d62 | 328 | return -1; |
olympux | 27:22f289beceb8 | 329 | } |
olympux | 31:2e4b6de6c2f3 | 330 | |
olympux | 40:c966abbe2d62 | 331 | srv.run(); |
olympux | 26:09e0dd020900 | 332 | } |
olympux | 26:09e0dd020900 | 333 | |
olympux | 26:09e0dd020900 | 334 | |
olympux | 26:09e0dd020900 | 335 | /* |
olympux | 42:d0ff08711ca5 | 336 | * W5500 Ethernet init |
olympux | 42:d0ff08711ca5 | 337 | */ |
olympux | 31:2e4b6de6c2f3 | 338 | int ethernet_init(void) |
olympux | 31:2e4b6de6c2f3 | 339 | { |
olympux | 26:09e0dd020900 | 340 | int dhcp_ret, ret; |
olympux | 31:2e4b6de6c2f3 | 341 | |
olympux | 27:22f289beceb8 | 342 | DBG("Initialising ethernet..."); |
olympux | 31:2e4b6de6c2f3 | 343 | |
olympux | 26:09e0dd020900 | 344 | // if not configured, try dhcp |
olympux | 26:09e0dd020900 | 345 | dhcp_ret = -1; |
olympux | 26:09e0dd020900 | 346 | if (configured_ip != DEFAULT_ENABLE_FLAG_VALUE) { |
olympux | 27:22f289beceb8 | 347 | DBG("Connecting to DHCP server..."); |
olympux | 26:09e0dd020900 | 348 | dhcp_ret = eth.init(u8mac); |
olympux | 26:09e0dd020900 | 349 | if (dhcp_ret == 0) |
olympux | 26:09e0dd020900 | 350 | dhcp_ret = eth.connect(); |
olympux | 26:09e0dd020900 | 351 | } |
olympux | 31:2e4b6de6c2f3 | 352 | |
olympux | 26:09e0dd020900 | 353 | if (dhcp_ret != 0) { |
olympux | 26:09e0dd020900 | 354 | DBG("No DHCP, load static IP configuration"); |
olympux | 26:09e0dd020900 | 355 | ret = eth.init(u8mac, str_ip_addr, str_ip_subnet, str_ip_gateway); // static |
olympux | 26:09e0dd020900 | 356 | } else { |
olympux | 26:09e0dd020900 | 357 | snprintf(str_ip_addr, 16, "%s", eth.getIPAddress()); |
olympux | 26:09e0dd020900 | 358 | snprintf(str_ip_subnet, 16, "%s", eth.getNetworkMask()); |
olympux | 26:09e0dd020900 | 359 | snprintf(str_ip_gateway, 16, "%s", eth.getGateway()); |
olympux | 26:09e0dd020900 | 360 | ret = 0; |
olympux | 26:09e0dd020900 | 361 | } |
olympux | 26:09e0dd020900 | 362 | |
olympux | 26:09e0dd020900 | 363 | if (ret == 0) { |
olympux | 26:09e0dd020900 | 364 | DBG("Initialized, MAC: %s", eth.getMACAddress()); |
olympux | 26:09e0dd020900 | 365 | } else { |
olympux | 26:09e0dd020900 | 366 | ERR("Error eth.init() - ret = %d", ret); |
olympux | 26:09e0dd020900 | 367 | return -1; |
olympux | 26:09e0dd020900 | 368 | } |
olympux | 26:09e0dd020900 | 369 | |
olympux | 26:09e0dd020900 | 370 | ret = eth.connect(); |
olympux | 26:09e0dd020900 | 371 | if (!ret) { |
olympux | 26:09e0dd020900 | 372 | DBG("IP: %s, MASK: %s, GW: %s", eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway()); |
olympux | 26:09e0dd020900 | 373 | } else { |
olympux | 26:09e0dd020900 | 374 | ERR("Error eth.connect() - ret = %d", ret); |
olympux | 26:09e0dd020900 | 375 | return -1; |
olympux | 26:09e0dd020900 | 376 | } |
olympux | 31:2e4b6de6c2f3 | 377 | |
olympux | 26:09e0dd020900 | 378 | return 0; |
olympux | 26:09e0dd020900 | 379 | } |
olympux | 26:09e0dd020900 | 380 | |
olympux | 45:8d18a95fcf8a | 381 | // Timer thread to check on/off time of digital outputs |
olympux | 45:8d18a95fcf8a | 382 | void digital_outputs_timer_thread(void const* args) |
olympux | 45:8d18a95fcf8a | 383 | { |
olympux | 45:8d18a95fcf8a | 384 | Thread::wait(700); |
olympux | 45:8d18a95fcf8a | 385 | |
olympux | 45:8d18a95fcf8a | 386 | while(true) { |
olympux | 45:8d18a95fcf8a | 387 | // read current time |
olympux | 45:8d18a95fcf8a | 388 | time_t seconds = time(NULL); |
olympux | 45:8d18a95fcf8a | 389 | struct tm *st = localtime(&seconds); |
olympux | 45:8d18a95fcf8a | 390 | int current_time_in_seconds = 3600*(st->tm_hour) + 60*(st->tm_min) + st->tm_sec; |
olympux | 45:8d18a95fcf8a | 391 | DBG("Current time: %d:%d:%d", st->tm_hour, st->tm_min, st->tm_sec); |
olympux | 45:8d18a95fcf8a | 392 | |
olympux | 45:8d18a95fcf8a | 393 | // check do0 |
olympux | 45:8d18a95fcf8a | 394 | if ((enable_onoff_dout && 0x01) == 0x01) { |
olympux | 45:8d18a95fcf8a | 395 | if (do0OnTime < do0OffTime) { |
olympux | 45:8d18a95fcf8a | 396 | if ((current_time_in_seconds >= do0OnTime) && (current_time_in_seconds < do0OffTime)){ |
olympux | 45:8d18a95fcf8a | 397 | if (dout0 == 0) { |
olympux | 45:8d18a95fcf8a | 398 | dout0 = 1; |
olympux | 45:8d18a95fcf8a | 399 | DBG("do0 ON"); |
olympux | 45:8d18a95fcf8a | 400 | } |
olympux | 45:8d18a95fcf8a | 401 | else { |
olympux | 45:8d18a95fcf8a | 402 | DBG("do0 ON'ed"); |
olympux | 45:8d18a95fcf8a | 403 | } |
olympux | 45:8d18a95fcf8a | 404 | } |
olympux | 45:8d18a95fcf8a | 405 | else { |
olympux | 45:8d18a95fcf8a | 406 | if (dout0 == 1) { |
olympux | 45:8d18a95fcf8a | 407 | dout0 = 0; |
olympux | 45:8d18a95fcf8a | 408 | DBG("do0 OFF'ed"); |
olympux | 45:8d18a95fcf8a | 409 | } |
olympux | 45:8d18a95fcf8a | 410 | else { |
olympux | 45:8d18a95fcf8a | 411 | DBG("do0 OFF"); |
olympux | 45:8d18a95fcf8a | 412 | } |
olympux | 45:8d18a95fcf8a | 413 | } |
olympux | 45:8d18a95fcf8a | 414 | } |
olympux | 45:8d18a95fcf8a | 415 | else { |
olympux | 45:8d18a95fcf8a | 416 | if ((current_time_in_seconds >= do0OffTime) && ((current_time_in_seconds < do0OnTime))) { |
olympux | 45:8d18a95fcf8a | 417 | if (dout0 == 1) { |
olympux | 45:8d18a95fcf8a | 418 | dout0 = 0; |
olympux | 45:8d18a95fcf8a | 419 | DBG("do0 OFF"); |
olympux | 45:8d18a95fcf8a | 420 | } |
olympux | 45:8d18a95fcf8a | 421 | else { |
olympux | 45:8d18a95fcf8a | 422 | DBG("do0 OFF'ed"); |
olympux | 45:8d18a95fcf8a | 423 | } |
olympux | 45:8d18a95fcf8a | 424 | } |
olympux | 45:8d18a95fcf8a | 425 | else { |
olympux | 45:8d18a95fcf8a | 426 | if (dout0 == 0) { |
olympux | 45:8d18a95fcf8a | 427 | dout0 = 1; |
olympux | 45:8d18a95fcf8a | 428 | DBG("do0 ON"); |
olympux | 45:8d18a95fcf8a | 429 | } |
olympux | 45:8d18a95fcf8a | 430 | else { |
olympux | 45:8d18a95fcf8a | 431 | DBG("do0 ON'ed"); |
olympux | 45:8d18a95fcf8a | 432 | } |
olympux | 45:8d18a95fcf8a | 433 | } |
olympux | 45:8d18a95fcf8a | 434 | } |
olympux | 45:8d18a95fcf8a | 435 | } // end check do0 |
olympux | 45:8d18a95fcf8a | 436 | |
olympux | 45:8d18a95fcf8a | 437 | // check do1 |
olympux | 45:8d18a95fcf8a | 438 | if ((enable_onoff_dout && 0x02) == 0x02) { |
olympux | 45:8d18a95fcf8a | 439 | if (do1OnTime < do1OffTime) { |
olympux | 45:8d18a95fcf8a | 440 | if ((current_time_in_seconds >= do1OnTime) && (current_time_in_seconds < do1OffTime)){ |
olympux | 45:8d18a95fcf8a | 441 | if (dout1 == 0) { |
olympux | 45:8d18a95fcf8a | 442 | dout1 = 1; |
olympux | 45:8d18a95fcf8a | 443 | DBG("do1 ON"); |
olympux | 45:8d18a95fcf8a | 444 | } |
olympux | 45:8d18a95fcf8a | 445 | else { |
olympux | 45:8d18a95fcf8a | 446 | DBG("do1 ON'ed"); |
olympux | 45:8d18a95fcf8a | 447 | } |
olympux | 45:8d18a95fcf8a | 448 | } |
olympux | 45:8d18a95fcf8a | 449 | else { |
olympux | 45:8d18a95fcf8a | 450 | if (dout1 == 1) { |
olympux | 45:8d18a95fcf8a | 451 | dout1 = 0; |
olympux | 45:8d18a95fcf8a | 452 | DBG("do1 OFF"); |
olympux | 45:8d18a95fcf8a | 453 | } |
olympux | 45:8d18a95fcf8a | 454 | else { |
olympux | 45:8d18a95fcf8a | 455 | DBG("do1 OFF'ed"); |
olympux | 45:8d18a95fcf8a | 456 | } |
olympux | 45:8d18a95fcf8a | 457 | } |
olympux | 45:8d18a95fcf8a | 458 | } |
olympux | 45:8d18a95fcf8a | 459 | else { |
olympux | 45:8d18a95fcf8a | 460 | if ((current_time_in_seconds >= do1OffTime) && ((current_time_in_seconds < do1OnTime))) { |
olympux | 45:8d18a95fcf8a | 461 | if (dout1 == 1) { |
olympux | 45:8d18a95fcf8a | 462 | dout1 = 0; |
olympux | 45:8d18a95fcf8a | 463 | DBG("do1 OFF"); |
olympux | 45:8d18a95fcf8a | 464 | } |
olympux | 45:8d18a95fcf8a | 465 | else { |
olympux | 45:8d18a95fcf8a | 466 | DBG("do1 OFF'ed"); |
olympux | 45:8d18a95fcf8a | 467 | } |
olympux | 45:8d18a95fcf8a | 468 | } |
olympux | 45:8d18a95fcf8a | 469 | else { |
olympux | 45:8d18a95fcf8a | 470 | if (dout1 == 0) { |
olympux | 45:8d18a95fcf8a | 471 | dout1 = 1; |
olympux | 45:8d18a95fcf8a | 472 | DBG("do1 ON"); |
olympux | 45:8d18a95fcf8a | 473 | } |
olympux | 45:8d18a95fcf8a | 474 | else { |
olympux | 45:8d18a95fcf8a | 475 | DBG("do1 ON'ed"); |
olympux | 45:8d18a95fcf8a | 476 | } |
olympux | 45:8d18a95fcf8a | 477 | } |
olympux | 45:8d18a95fcf8a | 478 | } |
olympux | 45:8d18a95fcf8a | 479 | } // end check do1 |
olympux | 45:8d18a95fcf8a | 480 | |
olympux | 45:8d18a95fcf8a | 481 | // check do2 |
olympux | 45:8d18a95fcf8a | 482 | if ((enable_onoff_dout && 0x04) == 0x04) { |
olympux | 45:8d18a95fcf8a | 483 | if (do2OnTime < do2OffTime) { |
olympux | 45:8d18a95fcf8a | 484 | if ((current_time_in_seconds >= do2OnTime) && (current_time_in_seconds < do2OffTime)){ |
olympux | 45:8d18a95fcf8a | 485 | if (dout2 == 0) { |
olympux | 45:8d18a95fcf8a | 486 | dout2 = 1; |
olympux | 45:8d18a95fcf8a | 487 | DBG("do2 ON"); |
olympux | 45:8d18a95fcf8a | 488 | } |
olympux | 45:8d18a95fcf8a | 489 | else { |
olympux | 45:8d18a95fcf8a | 490 | DBG("do2 ON'ed"); |
olympux | 45:8d18a95fcf8a | 491 | } |
olympux | 45:8d18a95fcf8a | 492 | } |
olympux | 45:8d18a95fcf8a | 493 | else { |
olympux | 45:8d18a95fcf8a | 494 | if (dout2 == 1) { |
olympux | 45:8d18a95fcf8a | 495 | dout2 = 0; |
olympux | 45:8d18a95fcf8a | 496 | DBG("do2 OFF"); |
olympux | 45:8d18a95fcf8a | 497 | } |
olympux | 45:8d18a95fcf8a | 498 | else { |
olympux | 45:8d18a95fcf8a | 499 | DBG("do2 OFF'ed"); |
olympux | 45:8d18a95fcf8a | 500 | } |
olympux | 45:8d18a95fcf8a | 501 | } |
olympux | 45:8d18a95fcf8a | 502 | } |
olympux | 45:8d18a95fcf8a | 503 | else { |
olympux | 45:8d18a95fcf8a | 504 | if ((current_time_in_seconds >= do2OffTime) && ((current_time_in_seconds < do2OnTime))) { |
olympux | 45:8d18a95fcf8a | 505 | if (dout2 == 1) { |
olympux | 45:8d18a95fcf8a | 506 | dout2 = 0; |
olympux | 45:8d18a95fcf8a | 507 | DBG("do2 OFF"); |
olympux | 45:8d18a95fcf8a | 508 | } |
olympux | 45:8d18a95fcf8a | 509 | else { |
olympux | 45:8d18a95fcf8a | 510 | DBG("do2 OFF'ed"); |
olympux | 45:8d18a95fcf8a | 511 | } |
olympux | 45:8d18a95fcf8a | 512 | } |
olympux | 45:8d18a95fcf8a | 513 | else { |
olympux | 45:8d18a95fcf8a | 514 | if (dout2 == 0) { |
olympux | 45:8d18a95fcf8a | 515 | dout2 = 1; |
olympux | 45:8d18a95fcf8a | 516 | DBG("do2 ON"); |
olympux | 45:8d18a95fcf8a | 517 | } |
olympux | 45:8d18a95fcf8a | 518 | else { |
olympux | 45:8d18a95fcf8a | 519 | DBG("do2 ON'ed"); |
olympux | 45:8d18a95fcf8a | 520 | } |
olympux | 45:8d18a95fcf8a | 521 | } |
olympux | 45:8d18a95fcf8a | 522 | } |
olympux | 45:8d18a95fcf8a | 523 | } // end check do2 |
olympux | 45:8d18a95fcf8a | 524 | |
olympux | 45:8d18a95fcf8a | 525 | // check do3 |
olympux | 45:8d18a95fcf8a | 526 | if ((enable_onoff_dout && 0x08) == 0x08) { |
olympux | 45:8d18a95fcf8a | 527 | if (do3OnTime < do3OffTime) { |
olympux | 45:8d18a95fcf8a | 528 | if ((current_time_in_seconds >= do3OnTime) && (current_time_in_seconds < do3OffTime)){ |
olympux | 45:8d18a95fcf8a | 529 | if (dout3 == 0) { |
olympux | 45:8d18a95fcf8a | 530 | dout3 = 1; |
olympux | 45:8d18a95fcf8a | 531 | DBG("do3 ON"); |
olympux | 45:8d18a95fcf8a | 532 | } |
olympux | 45:8d18a95fcf8a | 533 | else { |
olympux | 45:8d18a95fcf8a | 534 | DBG("do3 ON'ed"); |
olympux | 45:8d18a95fcf8a | 535 | } |
olympux | 45:8d18a95fcf8a | 536 | } |
olympux | 45:8d18a95fcf8a | 537 | else { |
olympux | 45:8d18a95fcf8a | 538 | if (dout3 == 1) { |
olympux | 45:8d18a95fcf8a | 539 | dout3 = 0; |
olympux | 45:8d18a95fcf8a | 540 | DBG("do3 OFF"); |
olympux | 45:8d18a95fcf8a | 541 | } |
olympux | 45:8d18a95fcf8a | 542 | else { |
olympux | 45:8d18a95fcf8a | 543 | DBG("do3 OFF'ed"); |
olympux | 45:8d18a95fcf8a | 544 | } |
olympux | 45:8d18a95fcf8a | 545 | } |
olympux | 45:8d18a95fcf8a | 546 | } |
olympux | 45:8d18a95fcf8a | 547 | else { |
olympux | 45:8d18a95fcf8a | 548 | if ((current_time_in_seconds >= do3OffTime) && ((current_time_in_seconds < do3OnTime))) { |
olympux | 45:8d18a95fcf8a | 549 | if (dout3 == 1) { |
olympux | 45:8d18a95fcf8a | 550 | dout3 = 0; |
olympux | 45:8d18a95fcf8a | 551 | DBG("do3 OFF"); |
olympux | 45:8d18a95fcf8a | 552 | } |
olympux | 45:8d18a95fcf8a | 553 | else { |
olympux | 45:8d18a95fcf8a | 554 | DBG("do3 OFF'ed"); |
olympux | 45:8d18a95fcf8a | 555 | } |
olympux | 45:8d18a95fcf8a | 556 | } |
olympux | 45:8d18a95fcf8a | 557 | else { |
olympux | 45:8d18a95fcf8a | 558 | if (dout3 == 0) { |
olympux | 45:8d18a95fcf8a | 559 | dout3 = 1; |
olympux | 45:8d18a95fcf8a | 560 | DBG("do3 ON"); |
olympux | 45:8d18a95fcf8a | 561 | } |
olympux | 45:8d18a95fcf8a | 562 | else { |
olympux | 45:8d18a95fcf8a | 563 | DBG("do3 ON'ed"); |
olympux | 45:8d18a95fcf8a | 564 | } |
olympux | 45:8d18a95fcf8a | 565 | } |
olympux | 45:8d18a95fcf8a | 566 | } |
olympux | 45:8d18a95fcf8a | 567 | } // end check do3 |
olympux | 45:8d18a95fcf8a | 568 | |
olympux | 45:8d18a95fcf8a | 569 | // check do4 |
olympux | 45:8d18a95fcf8a | 570 | if ((enable_onoff_dout && 0x10) == 0x10) { |
olympux | 45:8d18a95fcf8a | 571 | if (do4OnTime < do4OffTime) { |
olympux | 45:8d18a95fcf8a | 572 | if ((current_time_in_seconds >= do4OnTime) && (current_time_in_seconds < do4OffTime)){ |
olympux | 45:8d18a95fcf8a | 573 | if (dout4 == 0) { |
olympux | 45:8d18a95fcf8a | 574 | dout4 = 1; |
olympux | 45:8d18a95fcf8a | 575 | DBG("do4 ON"); |
olympux | 45:8d18a95fcf8a | 576 | } |
olympux | 45:8d18a95fcf8a | 577 | else { |
olympux | 45:8d18a95fcf8a | 578 | DBG("do4 ON'ed"); |
olympux | 45:8d18a95fcf8a | 579 | } |
olympux | 45:8d18a95fcf8a | 580 | } |
olympux | 45:8d18a95fcf8a | 581 | else { |
olympux | 45:8d18a95fcf8a | 582 | if (dout4 == 1) { |
olympux | 45:8d18a95fcf8a | 583 | dout4 = 0; |
olympux | 45:8d18a95fcf8a | 584 | DBG("do4 OFF"); |
olympux | 45:8d18a95fcf8a | 585 | } |
olympux | 45:8d18a95fcf8a | 586 | else { |
olympux | 45:8d18a95fcf8a | 587 | DBG("do4 OFF'ed"); |
olympux | 45:8d18a95fcf8a | 588 | } |
olympux | 45:8d18a95fcf8a | 589 | } |
olympux | 45:8d18a95fcf8a | 590 | } |
olympux | 45:8d18a95fcf8a | 591 | else { |
olympux | 45:8d18a95fcf8a | 592 | if ((current_time_in_seconds >= do4OffTime) && ((current_time_in_seconds < do4OnTime))) { |
olympux | 45:8d18a95fcf8a | 593 | if (dout4 == 1) { |
olympux | 45:8d18a95fcf8a | 594 | dout4 = 0; |
olympux | 45:8d18a95fcf8a | 595 | DBG("do4 OFF"); |
olympux | 45:8d18a95fcf8a | 596 | } |
olympux | 45:8d18a95fcf8a | 597 | else { |
olympux | 45:8d18a95fcf8a | 598 | DBG("do4 OFF'ed"); |
olympux | 45:8d18a95fcf8a | 599 | } |
olympux | 45:8d18a95fcf8a | 600 | } |
olympux | 45:8d18a95fcf8a | 601 | else { |
olympux | 45:8d18a95fcf8a | 602 | if (dout4 == 0) { |
olympux | 45:8d18a95fcf8a | 603 | dout4 = 1; |
olympux | 45:8d18a95fcf8a | 604 | DBG("do4 ON"); |
olympux | 45:8d18a95fcf8a | 605 | } |
olympux | 45:8d18a95fcf8a | 606 | else { |
olympux | 45:8d18a95fcf8a | 607 | DBG("do4 ON'ed"); |
olympux | 45:8d18a95fcf8a | 608 | } |
olympux | 45:8d18a95fcf8a | 609 | } |
olympux | 45:8d18a95fcf8a | 610 | } |
olympux | 45:8d18a95fcf8a | 611 | } // end check do4 |
olympux | 45:8d18a95fcf8a | 612 | |
olympux | 45:8d18a95fcf8a | 613 | // check do5 |
olympux | 45:8d18a95fcf8a | 614 | if ((enable_onoff_dout && 0x20) == 0x20) { |
olympux | 45:8d18a95fcf8a | 615 | if (do5OnTime < do5OffTime) { |
olympux | 45:8d18a95fcf8a | 616 | if ((current_time_in_seconds >= do5OnTime) && (current_time_in_seconds < do5OffTime)){ |
olympux | 45:8d18a95fcf8a | 617 | if (dout5 == 0) { |
olympux | 45:8d18a95fcf8a | 618 | dout5 = 1; |
olympux | 45:8d18a95fcf8a | 619 | DBG("do5 ON"); |
olympux | 45:8d18a95fcf8a | 620 | } |
olympux | 45:8d18a95fcf8a | 621 | else { |
olympux | 45:8d18a95fcf8a | 622 | DBG("do5 ON'ed"); |
olympux | 45:8d18a95fcf8a | 623 | } |
olympux | 45:8d18a95fcf8a | 624 | } |
olympux | 45:8d18a95fcf8a | 625 | else { |
olympux | 45:8d18a95fcf8a | 626 | if (dout5 == 1) { |
olympux | 45:8d18a95fcf8a | 627 | dout5 = 0; |
olympux | 45:8d18a95fcf8a | 628 | DBG("do5 OFF"); |
olympux | 45:8d18a95fcf8a | 629 | } |
olympux | 45:8d18a95fcf8a | 630 | else { |
olympux | 45:8d18a95fcf8a | 631 | DBG("do5 OFF'ed"); |
olympux | 45:8d18a95fcf8a | 632 | } |
olympux | 45:8d18a95fcf8a | 633 | } |
olympux | 45:8d18a95fcf8a | 634 | } |
olympux | 45:8d18a95fcf8a | 635 | else { |
olympux | 45:8d18a95fcf8a | 636 | if ((current_time_in_seconds >= do5OffTime) && ((current_time_in_seconds < do5OnTime))) { |
olympux | 45:8d18a95fcf8a | 637 | if (dout5 == 1) { |
olympux | 45:8d18a95fcf8a | 638 | dout5 = 0; |
olympux | 45:8d18a95fcf8a | 639 | DBG("do5 OFF"); |
olympux | 45:8d18a95fcf8a | 640 | } |
olympux | 45:8d18a95fcf8a | 641 | else { |
olympux | 45:8d18a95fcf8a | 642 | DBG("do5 OFF'ed"); |
olympux | 45:8d18a95fcf8a | 643 | } |
olympux | 45:8d18a95fcf8a | 644 | } |
olympux | 45:8d18a95fcf8a | 645 | else { |
olympux | 45:8d18a95fcf8a | 646 | if (dout5 == 0) { |
olympux | 45:8d18a95fcf8a | 647 | dout5 = 1; |
olympux | 45:8d18a95fcf8a | 648 | DBG("do5 ON"); |
olympux | 45:8d18a95fcf8a | 649 | } |
olympux | 45:8d18a95fcf8a | 650 | else { |
olympux | 45:8d18a95fcf8a | 651 | DBG("do5 ON'ed"); |
olympux | 45:8d18a95fcf8a | 652 | } |
olympux | 45:8d18a95fcf8a | 653 | } |
olympux | 45:8d18a95fcf8a | 654 | } |
olympux | 45:8d18a95fcf8a | 655 | } // end check do5 |
olympux | 45:8d18a95fcf8a | 656 | |
olympux | 45:8d18a95fcf8a | 657 | // check do6 |
olympux | 45:8d18a95fcf8a | 658 | if ((enable_onoff_dout && 0x40) == 0x40) { |
olympux | 45:8d18a95fcf8a | 659 | if (do6OnTime < do6OffTime) { |
olympux | 45:8d18a95fcf8a | 660 | if ((current_time_in_seconds >= do6OnTime) && (current_time_in_seconds < do6OffTime)){ |
olympux | 45:8d18a95fcf8a | 661 | if (dout6 == 0) { |
olympux | 45:8d18a95fcf8a | 662 | dout6 = 1; |
olympux | 45:8d18a95fcf8a | 663 | DBG("do6 ON"); |
olympux | 45:8d18a95fcf8a | 664 | } |
olympux | 45:8d18a95fcf8a | 665 | else { |
olympux | 45:8d18a95fcf8a | 666 | DBG("do6 ON'ed"); |
olympux | 45:8d18a95fcf8a | 667 | } |
olympux | 45:8d18a95fcf8a | 668 | } |
olympux | 45:8d18a95fcf8a | 669 | else { |
olympux | 45:8d18a95fcf8a | 670 | if (dout6 == 1) { |
olympux | 45:8d18a95fcf8a | 671 | dout6 = 0; |
olympux | 45:8d18a95fcf8a | 672 | DBG("do6 OFF"); |
olympux | 45:8d18a95fcf8a | 673 | } |
olympux | 45:8d18a95fcf8a | 674 | else { |
olympux | 45:8d18a95fcf8a | 675 | DBG("do6 OFF'ed"); |
olympux | 45:8d18a95fcf8a | 676 | } |
olympux | 45:8d18a95fcf8a | 677 | } |
olympux | 45:8d18a95fcf8a | 678 | } |
olympux | 45:8d18a95fcf8a | 679 | else { |
olympux | 45:8d18a95fcf8a | 680 | if ((current_time_in_seconds >= do6OffTime) && ((current_time_in_seconds < do6OnTime))) { |
olympux | 45:8d18a95fcf8a | 681 | if (dout6 == 1) { |
olympux | 45:8d18a95fcf8a | 682 | dout6 = 0; |
olympux | 45:8d18a95fcf8a | 683 | DBG("do6 OFF"); |
olympux | 45:8d18a95fcf8a | 684 | } |
olympux | 45:8d18a95fcf8a | 685 | else { |
olympux | 45:8d18a95fcf8a | 686 | DBG("do6 OFF'ed"); |
olympux | 45:8d18a95fcf8a | 687 | } |
olympux | 45:8d18a95fcf8a | 688 | } |
olympux | 45:8d18a95fcf8a | 689 | else { |
olympux | 45:8d18a95fcf8a | 690 | if (dout6 == 0) { |
olympux | 45:8d18a95fcf8a | 691 | dout6 = 1; |
olympux | 45:8d18a95fcf8a | 692 | DBG("do6 ON"); |
olympux | 45:8d18a95fcf8a | 693 | } |
olympux | 45:8d18a95fcf8a | 694 | else { |
olympux | 45:8d18a95fcf8a | 695 | DBG("do6 ON'ed"); |
olympux | 45:8d18a95fcf8a | 696 | } |
olympux | 45:8d18a95fcf8a | 697 | } |
olympux | 45:8d18a95fcf8a | 698 | } |
olympux | 45:8d18a95fcf8a | 699 | } // end check do6 |
olympux | 45:8d18a95fcf8a | 700 | |
olympux | 45:8d18a95fcf8a | 701 | // check do7 |
olympux | 45:8d18a95fcf8a | 702 | if ((enable_onoff_dout && 0x80) == 0x80) { |
olympux | 45:8d18a95fcf8a | 703 | if (do7OnTime < do7OffTime) { |
olympux | 45:8d18a95fcf8a | 704 | if ((current_time_in_seconds >= do7OnTime) && (current_time_in_seconds < do7OffTime)){ |
olympux | 45:8d18a95fcf8a | 705 | if (dout7 == 0) { |
olympux | 45:8d18a95fcf8a | 706 | dout7 = 1; |
olympux | 45:8d18a95fcf8a | 707 | DBG("do7 ON"); |
olympux | 45:8d18a95fcf8a | 708 | } |
olympux | 45:8d18a95fcf8a | 709 | else { |
olympux | 45:8d18a95fcf8a | 710 | DBG("do7 ON'ed"); |
olympux | 45:8d18a95fcf8a | 711 | } |
olympux | 45:8d18a95fcf8a | 712 | } |
olympux | 45:8d18a95fcf8a | 713 | else { |
olympux | 45:8d18a95fcf8a | 714 | if (dout7 == 1) { |
olympux | 45:8d18a95fcf8a | 715 | dout7 = 0; |
olympux | 45:8d18a95fcf8a | 716 | DBG("do7 OFF"); |
olympux | 45:8d18a95fcf8a | 717 | } |
olympux | 45:8d18a95fcf8a | 718 | else { |
olympux | 45:8d18a95fcf8a | 719 | DBG("do7 OFF'ed"); |
olympux | 45:8d18a95fcf8a | 720 | } |
olympux | 45:8d18a95fcf8a | 721 | } |
olympux | 45:8d18a95fcf8a | 722 | } |
olympux | 45:8d18a95fcf8a | 723 | else { |
olympux | 45:8d18a95fcf8a | 724 | if ((current_time_in_seconds >= do7OffTime) && ((current_time_in_seconds < do7OnTime))) { |
olympux | 45:8d18a95fcf8a | 725 | if (dout7 == 1) { |
olympux | 45:8d18a95fcf8a | 726 | dout7 = 0; |
olympux | 45:8d18a95fcf8a | 727 | DBG("do7 OFF"); |
olympux | 45:8d18a95fcf8a | 728 | } |
olympux | 45:8d18a95fcf8a | 729 | else { |
olympux | 45:8d18a95fcf8a | 730 | DBG("do7 OFF'ed"); |
olympux | 45:8d18a95fcf8a | 731 | } |
olympux | 45:8d18a95fcf8a | 732 | } |
olympux | 45:8d18a95fcf8a | 733 | else { |
olympux | 45:8d18a95fcf8a | 734 | if (dout7 == 0) { |
olympux | 45:8d18a95fcf8a | 735 | dout7 = 1; |
olympux | 45:8d18a95fcf8a | 736 | DBG("do7 ON"); |
olympux | 45:8d18a95fcf8a | 737 | } |
olympux | 45:8d18a95fcf8a | 738 | else { |
olympux | 45:8d18a95fcf8a | 739 | DBG("do7 ON'ed"); |
olympux | 45:8d18a95fcf8a | 740 | } |
olympux | 45:8d18a95fcf8a | 741 | } |
olympux | 45:8d18a95fcf8a | 742 | } |
olympux | 45:8d18a95fcf8a | 743 | } // end check do7 |
olympux | 45:8d18a95fcf8a | 744 | |
olympux | 45:8d18a95fcf8a | 745 | |
olympux | 45:8d18a95fcf8a | 746 | // wait 1s |
olympux | 45:8d18a95fcf8a | 747 | Thread::wait(10000); // Thread::wait() in ms |
olympux | 45:8d18a95fcf8a | 748 | } |
olympux | 45:8d18a95fcf8a | 749 | } |