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
Diff: main.cpp
- Revision:
- 46:971bdaa3507c
- Parent:
- 45:8d18a95fcf8a
- Child:
- 47:d92d2c5b8073
--- a/main.cpp Tue Jul 19 07:50:53 2016 +0000 +++ b/main.cpp Sun Aug 14 11:06:53 2016 +0000 @@ -1,14 +1,14 @@ #include "mbed.h" #include "rtos.h" -#include "mbed_rpc.h" +//#include "mbed_rpc.h" #include "Arguments.h" -#include "eeprom.h" #include "EthernetInterface.h" #include "NTPClient.h" +#include "Watchdog.h" -#include "my_eeprom_funcs.h" -#include "Watchdog.h" +#include "eeprom_flash.h" +#include "device_configuration.h" #include "RPCCommand.h" #include "HTTPServer.h" @@ -34,7 +34,7 @@ #define WARN(x, ...) #define ERR(x, ...) #endif - + /* * Hardware defines @@ -44,206 +44,61 @@ EthernetInterface eth(&spi, PA_4, PC_9); // spi, cs, reset int ethernet_init(void); -/* - * EEPROM section - */ -// Virtual address defined by the user: 0xFFFF value is prohibited -uint16_t VirtAddVarTab[NumbOfVar] = {0x1212, 0x1313, 0x1414, 0x1515, // IP_Addr - 0x2212, 0x2313, 0x2414, 0x2515, // IP_Subnet - 0x3212, 0x3313, 0x3414, 0x3515, // IP_Gateway - 0x4212, // TCP server port, not used - 0x5212, // UDP server port, not used - 0x8888, // 1st run? 0xA5A5 = static IP has been configured - 0x6212, 0x6313, 0x6414, // MAC - - // this section is for the TCP server that this device connects to in TCP client mode - 0x7212, 0x7313, // 0xA5A5 = auto transmit status, time period - 0x8212, 0x8313,0x8414, 0x8515, // TCP server IP address - 0x9212, // TCP server port - - // this section is for selecting protocol, not used - 0xA212, // 0xA5A5 = enable TCP server - 0xA313, // 0xA5A5 = eanble TCP client - 0xA414 // 0xA5A5 = enable UDP server, always enabled for configuration - }; - - -/* - * Variables for network configuration, TCP server - */ -// Device configuration -uint16_t u16ip_addr[4], u16ip_subnet[4], u16ip_gateway[4], u16mac_addr[3]; // 16-bits variables to be compatible with eeprom functions -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 -uint8_t u8ip_addr[4]; // keep ip address in 8-bits -uint16_t configured_ip = 0; // flag indicates a static ip has been configured 0xA5A5 -uint8_t u8mac[6]; // mac in 8-bits - -// TCP/UDP server -uint16_t tcp_server_local_port = 10000; // change to 7000 if internet required -uint16_t udp_server_local_port = 11000; - -// Used for TCP client mode -// this section is used to set the TCP server that this device connects to in TCP client mode. -// this device will update its status to the server every transmit_time_period. -uint16_t auto_transmit_flag = 0, transmit_time_period = 1000; // auto transmit status, time period = 1s -uint16_t u16server_ip_addr[4]; // 16-bit variable to be compatible with eeprom functions -uint8_t u8server_ip_addr[4]; // server ip address in 8-bits -char str_server_ip_addr[16]; // RPC variable, converted from 16-bits u16server_ip_addr -uint16_t u16tcp_server_port; // 16-bit variable to be compatible with eeprom functions -uint16_t u16enable_tcp_server, u16enable_tcp_client; // flags for enabling TCP client or TCP server - -// Corresponding RPC variables -RPCVariable<char*> rpcIPAddress(str_ip_addr, 16, "ipaddr"); -RPCVariable<char*> rpcSubnet(str_ip_subnet, 16, "subnet"); -RPCVariable<char*> rpcGateway(str_ip_gateway, 16, "gateway"); -RPCVariable<char*> rpcMac(str_mac_addr, 20, "mac"); -//RPCVariable<unsigned short> rpcLocalTCPServerPort(&tcp_server_local_port, "localtcpserverport"); -RPCVariable<unsigned short> rpcLocalUDPPort(&udp_server_local_port, "localudpport"); -//RPCVariable<unsigned short> rpcEnableTCPServer(&u16enable_tcp_server, "enabletcpserver"); - -// RPC function definitions -// save ip address only -void set_ip_addr(Arguments* args, Reply* rep){ - int b[4], n, i; - char ipaddr[4]; - - n = sscanf(str_ip_addr, "%d.%d.%d.%d", &b[0], &b[1], &b[2], &b[3]); - if (n == 4) { - DBG("%d.%d.%d.%d",b[0],b[1],b[2],b[3]); - for (i = 0; i < 4; i++) { - ipaddr[i] = b[i] & 0x00FF; - } - save_ip_addr(ipaddr); - NVIC_SystemReset(); - } - else { - DBG("Saving IP address failed"); - } -} - -// set configuration flag -void set_configuration_flag(Arguments* args, Reply* rep){ - set_conf(); -} - -// reset configuration flag -void reset_configuration_flag(Arguments* args, Reply* rep){ - reset_conf(); -} - -// Attach eeprom functions to RPC functions -RPCFunction rpcSaveIPAddr(&set_ip_addr, "saveipaddr"); -RPCFunction rpcSetConfiguration(&set_configuration_flag, "setconf"); -RPCFunction rpcResetConfiguration(&reset_configuration_flag, "resetconf"); +Serial pc(USBTX,USBRX); +Watchdog wdt; /* - * RPC Protocol - * Use the RPC enabled wrapped class - see RpcClasses.h for more info + * Variables for network configuration */ -// DigitalIn -RpcDigitalIn di0(PB_14, "di0"); -RpcDigitalIn di1(PB_12, "di1"); -RpcDigitalIn di2(PB_10, "di2"); -RpcDigitalIn di3(PB_1, "di3"); -RpcDigitalIn di4(PB_15, "di4"); -RpcDigitalIn di5(PB_13, "di5"); -RpcDigitalIn di6(PB_11, "di6"); -RpcDigitalIn di7(PB_2, "di7"); -DigitalIn din0(PB_14); -DigitalIn din1(PB_12); -DigitalIn din2(PB_10); -DigitalIn din3(PB_1); -DigitalIn din4(PB_15); -DigitalIn din5(PB_13); -DigitalIn din6(PB_11); -DigitalIn din7(PB_2); -// DigitalOut -RpcDigitalOut do0(PB_3, "do0"); -RpcDigitalOut do1(PB_5, "do1"); -RpcDigitalOut do2(PB_7, "do2"); -RpcDigitalOut do3(PB_9, "do3"); -RpcDigitalOut do4(PD_2, "do4"); -RpcDigitalOut do5(PB_4, "do5"); -RpcDigitalOut do6(PB_6, "do6"); -RpcDigitalOut do7(PB_8, "do7"); -DigitalOut dout0(PB_3); -DigitalOut dout1(PB_5); -DigitalOut dout2(PB_7); -DigitalOut dout3(PB_9); -DigitalOut dout4(PD_2); -DigitalOut dout5(PB_4); -DigitalOut dout6(PB_6); -DigitalOut dout7(PB_8); -// AnalogIn -RpcAnalogIn adc10(PC_0, "ai0"); // adc10 -RpcAnalogIn adc11(PC_1, "ai1"); // adc11 -AnalogIn ain0(PC_0); -AnalogIn ain1(PC_1); -// AnalogOut, PWM -RpcPwmOut pwm11(PA_8, "pwm0"); // pwm11 -RpcPwmOut pwm21(PA_15, "pwm1"); // pwm21 -// Serial -RpcSerial rpcUsart(USBTX, USBRX, "uart"); // usart2 -Serial uart(USBTX,USBRX); -// Timer -RpcTimer timer1("tmr1"); -// Watchdog -Watchdog wdt; +// Device configuration +extern uint16_t u16IpAddr[4], u16IpSubnet[4], u16IpGateway[4], u16MacAddr[3]; // 16-bits variables to be compatible with eeprom functions +extern char strIpAddr[16], strIpSubnet[16], strIpGateway[16], strMacAddr[20]; // RPC variables, converted from 16-bits u16ip_xxx +extern uint16_t u16DeviceConfiguredFlag; // flag indicates whether device has been configured (0xA5A5) or not +// TCP server/UDP +extern uint16_t u16LocalTcpServerPort; +extern uint16_t u16LocalUdpPort; +// TCP client mode, set parameters of the remote TCP server this device connects to. +// When enabled, this device will send its status to the server every transmit_time_period. +extern uint16_t u16RemoteTcpServerIpAddr[4]; // 16-bit variable to be compatible with eeprom functions +extern char strRemoteTcpServerIpAddr[16]; // RPC variable, converted from 16-bits u16server_ip_addr +extern uint16_t u16RemoteTcpServerPort; // 16-bit variable to be compatible with eeprom functions +extern uint16_t u16AutoTransmitFlag, u16TransmitPeriod; // auto transmit status, time period = 1s +// enable modes +extern uint16_t u16EnableTcpServer, u16EnableTcpClient, u16EnableUdp; // flags for enabling TCP server/client and UDP (UDP is always on for configuration) +// extra +extern uint8_t u8IpAddr[4]; // keep device ip address in 8-bits +extern uint8_t u8MacAddr[6]; // keep mac in 8-bits +extern uint8_t u8RemoteTcpServerIpAddr[4]; // remote TCP server ip address in 8-bits -// Some variable types that can be modified through RPC. -//int wheelsOn; -//char lcdBannerMessage; -//float speed; -int current_time; -int enable_onoff_dout = 0; // 8-bit LSB -int do0OnTime = 64800, do0OffTime = 21600; //default ON = 18:00, OFF = 6:00 -int do1OnTime = 64800, do1OffTime = 21600; -int do2OnTime = 64800, do2OffTime = 21600; -int do3OnTime = 64800, do3OffTime = 21600; -int do4OnTime = 64800, do4OffTime = 21600; -int do5OnTime = 64800, do5OffTime = 21600; -int do6OnTime = 64800, do6OffTime = 21600; -int do7OnTime = 64800, do7OffTime = 21600; - -//RPCVariable<int> rpcLights(&wheelsOn, "wheels"); -//RPCVariable<char> rpcBanner(&lcdBannerMessage, "banner"); -//RPCVariable<float> rpcSpeed(&speed, "speed"); -RPCVariable<int> rpcCurrentTime(¤t_time, "Time"); -RPCVariable<int> rpcEnableOnOffDout(&enable_onoff_dout, "EnableOnOffDout"); -RPCVariable<int> rpcdo0OnTime(&do0OnTime, "do0OnTime"); -RPCVariable<int> rpcdo0OffTime(&do0OffTime, "do0OffTime"); -RPCVariable<int> rpcdo1OnTime(&do1OnTime, "do1OnTime"); -RPCVariable<int> rpcdo1OffTime(&do1OffTime, "do1OffTime"); -RPCVariable<int> rpcdo2OnTime(&do2OnTime, "do2OnTime"); -RPCVariable<int> rpcdo2OffTime(&do2OffTime, "do2OffTime"); -RPCVariable<int> rpcdo3OnTime(&do3OnTime, "do3OnTime"); -RPCVariable<int> rpcdo3OffTime(&do3OffTime, "do3OffTime"); -RPCVariable<int> rpcdo4OnTime(&do4OnTime, "do4OnTime"); -RPCVariable<int> rpcdo4OffTime(&do4OffTime, "do4OffTime"); -RPCVariable<int> rpcdo5OnTime(&do5OnTime, "do5OnTime"); -RPCVariable<int> rpcdo5OffTime(&do5OffTime, "do5OffTime"); -RPCVariable<int> rpcdo6OnTime(&do6OnTime, "do6OnTime"); -RPCVariable<int> rpcdo6OffTime(&do6OffTime, "do6OffTime"); -RPCVariable<int> rpcdo7OnTime(&do7OnTime, "do7OnTime"); -RPCVariable<int> rpcdo7OffTime(&do7OffTime, "do7OffTime"); +// Corresponding RPC variables +RPCVariable<char*> rpcIPAddress(strIpAddr, 16, "ipaddr"); +RPCVariable<char*> rpcSubnet(strIpSubnet, 16, "subnet"); +RPCVariable<char*> rpcGateway(strIpGateway, 16, "gateway"); +RPCVariable<char*> rpcMac(strMacAddr, 20, "mac"); +RPCVariable<unsigned short> rpcLocalTCPServerPort(&u16LocalTcpServerPort, "localtcpserverport"); +RPCVariable<unsigned short> rpcLocalUDPPort(&u16LocalUdpPort, "localudpport"); + +RPCVariable<unsigned short> rpcEnableTCPServer(&u16EnableTcpServer, "enabletcpserver"); +RPCVariable<unsigned short> rpcEnableTCPClient(&u16EnableTcpClient, "enabletcpclient"); +RPCVariable<unsigned short> rpcEnableUDP(&u16EnableUdp, "enableudp"); + +RPCVariable<char*> rpcRemoteTCPServerIPAddress(strRemoteTcpServerIpAddr, 16, "remotetcpserveripaddr"); +RPCVariable<unsigned short> rpcRemoteTCPServerPort(&u16RemoteTcpServerPort, "remotetcpserverport"); +RPCVariable<unsigned short> rpcAutoTransmit(&u16AutoTransmitFlag, "autotransmit"); +RPCVariable<unsigned short> rpcTransmitPeriod(&u16TransmitPeriod, "transmitperiod"); // RPC function definitions -// Create a function of the required format -void set_current_time(Arguments* args, Reply* rep); -void set_current_time(Arguments* args, Reply* rep){ - time_t ct = (time_t)current_time; // convert - struct tm *st = localtime(&ct); - - set_time(ct); // set time - - DBG("Set current time to: %s", ctime(&ct)); - DBG("Time only: %d:%d:%d", st->tm_hour, st->tm_min, st->tm_sec); +// save ip address only +void show_device_config(Arguments* args, Reply* rep){ + DBG("IP: %s", strIpAddr); + DBG("Subnet: %s", strIpSubnet); + DBG("Gateway: %s", strIpGateway); + DBG("MAC: %s", strMacAddr); } -// Attach it to an RPC object -RPCFunction rpcSetCurrentTime(&set_current_time, "SetTime"); - +// Attach eeprom functions to RPC functions +RPCFunction rpcShowConfig(&show_device_config, "showdevconf"); /* * Threads @@ -255,7 +110,6 @@ wdt.Service(); } - HTTPServer create_simple_server() { HTTPServer srv; @@ -272,8 +126,6 @@ return srv; } -// Prototypes -void digital_outputs_timer_thread(void const* args); // Main code int main() @@ -283,31 +135,47 @@ Thread::wait(500); // turn on delay /* - * Configure - */ - uart.baud(115200); + * Configure + */ + pc.baud(115200); DBG("Starting..."); // check watchdog if (wdt.WatchdogCausedReset()) DBG("Watchdog caused reset."); wdt.Configure(4); - + + /*reset_device_configuration(); + uint16_t ip[4] = {192,168,0,120}; + uint16_t subnet[4] = {255,255,255,0}; + uint16_t gateway[4] = {192,168,0,1}; + uint16_t mac[3] = {0,0,1}; + uint16_t tcp_port = DEFAULT_LOCAL_TCP_SERVER_PORT; + uint16_t udp_port = DEFAULT_LOCAL_UDP_PORT; + uint16_t remote_ip[4] = {0,0,0,0}; + uint16_t remote_port = 12000; + uint16_t auto_transmit = DEFAULT_DISABLE_FLAG_VALUE; + uint16_t transmit_period = 1000; + uint16_t enable_tcp_server = DEFAULT_DISABLE_FLAG_VALUE; + uint16_t enable_tcp_client = DEFAULT_DISABLE_FLAG_VALUE; + uint16_t enable_udp = DEFAULT_ENABLE_FLAG_VALUE; + + write_device_configuration(ip, subnet, gateway, mac, + tcp_port, udp_port, + remote_ip, remote_port, auto_transmit, transmit_period, + enable_tcp_server, enable_tcp_client, enable_udp);*/ + + read_device_configuration(); + + /* - * FLASH - */ - load_eeprom_network(); - load_eeprom_tcpserver(); - - /* - * UI threads - */ - Thread t3(wdt_reset_thread); - Thread t4(digital_outputs_timer_thread); + * UI threads + */ + Thread t0(wdt_reset_thread); // rpc RPCType::instance().register_types(); - + /* * Ethernet */ @@ -318,7 +186,7 @@ } Thread::wait(2000); // TCP/UDP stack delay - + // create rpc http server HTTPServer srv = create_interactive_server(); @@ -328,10 +196,9 @@ return -1; } - srv.run(); + srv.run(); } - /* * W5500 Ethernet init */ @@ -343,20 +210,20 @@ // if not configured, try dhcp dhcp_ret = -1; - if (configured_ip != DEFAULT_ENABLE_FLAG_VALUE) { + if (u16DeviceConfiguredFlag != DEFAULT_ENABLE_FLAG_VALUE) { DBG("Connecting to DHCP server..."); - dhcp_ret = eth.init(u8mac); + dhcp_ret = eth.init(u8MacAddr); if (dhcp_ret == 0) dhcp_ret = eth.connect(); } if (dhcp_ret != 0) { DBG("No DHCP, load static IP configuration"); - ret = eth.init(u8mac, str_ip_addr, str_ip_subnet, str_ip_gateway); // static + ret = eth.init(u8MacAddr, strIpAddr, strIpSubnet, strIpGateway); // static } else { - snprintf(str_ip_addr, 16, "%s", eth.getIPAddress()); - snprintf(str_ip_subnet, 16, "%s", eth.getNetworkMask()); - snprintf(str_ip_gateway, 16, "%s", eth.getGateway()); + snprintf(strIpAddr, 16, "%s", eth.getIPAddress()); + snprintf(strIpSubnet, 16, "%s", eth.getNetworkMask()); + snprintf(strIpGateway, 16, "%s", eth.getGateway()); ret = 0; } @@ -378,372 +245,3 @@ return 0; } -// Timer thread to check on/off time of digital outputs -void digital_outputs_timer_thread(void const* args) -{ - Thread::wait(700); - - while(true) { - // read current time - time_t seconds = time(NULL); - struct tm *st = localtime(&seconds); - int current_time_in_seconds = 3600*(st->tm_hour) + 60*(st->tm_min) + st->tm_sec; - DBG("Current time: %d:%d:%d", st->tm_hour, st->tm_min, st->tm_sec); - - // check do0 - if ((enable_onoff_dout && 0x01) == 0x01) { - if (do0OnTime < do0OffTime) { - if ((current_time_in_seconds >= do0OnTime) && (current_time_in_seconds < do0OffTime)){ - if (dout0 == 0) { - dout0 = 1; - DBG("do0 ON"); - } - else { - DBG("do0 ON'ed"); - } - } - else { - if (dout0 == 1) { - dout0 = 0; - DBG("do0 OFF'ed"); - } - else { - DBG("do0 OFF"); - } - } - } - else { - if ((current_time_in_seconds >= do0OffTime) && ((current_time_in_seconds < do0OnTime))) { - if (dout0 == 1) { - dout0 = 0; - DBG("do0 OFF"); - } - else { - DBG("do0 OFF'ed"); - } - } - else { - if (dout0 == 0) { - dout0 = 1; - DBG("do0 ON"); - } - else { - DBG("do0 ON'ed"); - } - } - } - } // end check do0 - - // check do1 - if ((enable_onoff_dout && 0x02) == 0x02) { - if (do1OnTime < do1OffTime) { - if ((current_time_in_seconds >= do1OnTime) && (current_time_in_seconds < do1OffTime)){ - if (dout1 == 0) { - dout1 = 1; - DBG("do1 ON"); - } - else { - DBG("do1 ON'ed"); - } - } - else { - if (dout1 == 1) { - dout1 = 0; - DBG("do1 OFF"); - } - else { - DBG("do1 OFF'ed"); - } - } - } - else { - if ((current_time_in_seconds >= do1OffTime) && ((current_time_in_seconds < do1OnTime))) { - if (dout1 == 1) { - dout1 = 0; - DBG("do1 OFF"); - } - else { - DBG("do1 OFF'ed"); - } - } - else { - if (dout1 == 0) { - dout1 = 1; - DBG("do1 ON"); - } - else { - DBG("do1 ON'ed"); - } - } - } - } // end check do1 - - // check do2 - if ((enable_onoff_dout && 0x04) == 0x04) { - if (do2OnTime < do2OffTime) { - if ((current_time_in_seconds >= do2OnTime) && (current_time_in_seconds < do2OffTime)){ - if (dout2 == 0) { - dout2 = 1; - DBG("do2 ON"); - } - else { - DBG("do2 ON'ed"); - } - } - else { - if (dout2 == 1) { - dout2 = 0; - DBG("do2 OFF"); - } - else { - DBG("do2 OFF'ed"); - } - } - } - else { - if ((current_time_in_seconds >= do2OffTime) && ((current_time_in_seconds < do2OnTime))) { - if (dout2 == 1) { - dout2 = 0; - DBG("do2 OFF"); - } - else { - DBG("do2 OFF'ed"); - } - } - else { - if (dout2 == 0) { - dout2 = 1; - DBG("do2 ON"); - } - else { - DBG("do2 ON'ed"); - } - } - } - } // end check do2 - - // check do3 - if ((enable_onoff_dout && 0x08) == 0x08) { - if (do3OnTime < do3OffTime) { - if ((current_time_in_seconds >= do3OnTime) && (current_time_in_seconds < do3OffTime)){ - if (dout3 == 0) { - dout3 = 1; - DBG("do3 ON"); - } - else { - DBG("do3 ON'ed"); - } - } - else { - if (dout3 == 1) { - dout3 = 0; - DBG("do3 OFF"); - } - else { - DBG("do3 OFF'ed"); - } - } - } - else { - if ((current_time_in_seconds >= do3OffTime) && ((current_time_in_seconds < do3OnTime))) { - if (dout3 == 1) { - dout3 = 0; - DBG("do3 OFF"); - } - else { - DBG("do3 OFF'ed"); - } - } - else { - if (dout3 == 0) { - dout3 = 1; - DBG("do3 ON"); - } - else { - DBG("do3 ON'ed"); - } - } - } - } // end check do3 - - // check do4 - if ((enable_onoff_dout && 0x10) == 0x10) { - if (do4OnTime < do4OffTime) { - if ((current_time_in_seconds >= do4OnTime) && (current_time_in_seconds < do4OffTime)){ - if (dout4 == 0) { - dout4 = 1; - DBG("do4 ON"); - } - else { - DBG("do4 ON'ed"); - } - } - else { - if (dout4 == 1) { - dout4 = 0; - DBG("do4 OFF"); - } - else { - DBG("do4 OFF'ed"); - } - } - } - else { - if ((current_time_in_seconds >= do4OffTime) && ((current_time_in_seconds < do4OnTime))) { - if (dout4 == 1) { - dout4 = 0; - DBG("do4 OFF"); - } - else { - DBG("do4 OFF'ed"); - } - } - else { - if (dout4 == 0) { - dout4 = 1; - DBG("do4 ON"); - } - else { - DBG("do4 ON'ed"); - } - } - } - } // end check do4 - - // check do5 - if ((enable_onoff_dout && 0x20) == 0x20) { - if (do5OnTime < do5OffTime) { - if ((current_time_in_seconds >= do5OnTime) && (current_time_in_seconds < do5OffTime)){ - if (dout5 == 0) { - dout5 = 1; - DBG("do5 ON"); - } - else { - DBG("do5 ON'ed"); - } - } - else { - if (dout5 == 1) { - dout5 = 0; - DBG("do5 OFF"); - } - else { - DBG("do5 OFF'ed"); - } - } - } - else { - if ((current_time_in_seconds >= do5OffTime) && ((current_time_in_seconds < do5OnTime))) { - if (dout5 == 1) { - dout5 = 0; - DBG("do5 OFF"); - } - else { - DBG("do5 OFF'ed"); - } - } - else { - if (dout5 == 0) { - dout5 = 1; - DBG("do5 ON"); - } - else { - DBG("do5 ON'ed"); - } - } - } - } // end check do5 - - // check do6 - if ((enable_onoff_dout && 0x40) == 0x40) { - if (do6OnTime < do6OffTime) { - if ((current_time_in_seconds >= do6OnTime) && (current_time_in_seconds < do6OffTime)){ - if (dout6 == 0) { - dout6 = 1; - DBG("do6 ON"); - } - else { - DBG("do6 ON'ed"); - } - } - else { - if (dout6 == 1) { - dout6 = 0; - DBG("do6 OFF"); - } - else { - DBG("do6 OFF'ed"); - } - } - } - else { - if ((current_time_in_seconds >= do6OffTime) && ((current_time_in_seconds < do6OnTime))) { - if (dout6 == 1) { - dout6 = 0; - DBG("do6 OFF"); - } - else { - DBG("do6 OFF'ed"); - } - } - else { - if (dout6 == 0) { - dout6 = 1; - DBG("do6 ON"); - } - else { - DBG("do6 ON'ed"); - } - } - } - } // end check do6 - - // check do7 - if ((enable_onoff_dout && 0x80) == 0x80) { - if (do7OnTime < do7OffTime) { - if ((current_time_in_seconds >= do7OnTime) && (current_time_in_seconds < do7OffTime)){ - if (dout7 == 0) { - dout7 = 1; - DBG("do7 ON"); - } - else { - DBG("do7 ON'ed"); - } - } - else { - if (dout7 == 1) { - dout7 = 0; - DBG("do7 OFF"); - } - else { - DBG("do7 OFF'ed"); - } - } - } - else { - if ((current_time_in_seconds >= do7OffTime) && ((current_time_in_seconds < do7OnTime))) { - if (dout7 == 1) { - dout7 = 0; - DBG("do7 OFF"); - } - else { - DBG("do7 OFF'ed"); - } - } - else { - if (dout7 == 0) { - dout7 = 1; - DBG("do7 ON"); - } - else { - DBG("do7 ON'ed"); - } - } - } - } // end check do7 - - - // wait 1s - Thread::wait(10000); // Thread::wait() in ms - } -} \ No newline at end of file