Weather control switch for connected day. NXP LPC 1768 module. Ethernet connectivity.
Dependencies: EthernetInterface mbed-rtos mbed nanoservice_client_1_12
Fork of Trenton_Switch_LPC1768_WIFLY by
main.cpp
- Committer:
- Kojto
- Date:
- 2013-09-08
- Revision:
- 0:ce33c63eefe5
- Child:
- 1:99076f2d9408
File content as of revision 0:ce33c63eefe5:
#include "mbed.h" #include "KL25Z_irq_prio.h" #include "cc3000.h" #include "doTCPIP.h" #include "main.h" using namespace mbed_cc3000; // Serial USB port Serial pc(USBTX, USBRX); // Wi-Go battery charger control DigitalOut PWR_EN1(PTB2); DigitalOut PWR_EN2(PTB3); // Wi-go LED DigitalOut ledr (LED_RED); DigitalOut ledg (LED_GREEN); DigitalOut ledb (LED_BLUE); DigitalOut led1 (PTB8); DigitalOut led2 (PTB9); DigitalOut led3 (PTB10); // Wi-go cc3000 cc3000 wigo(PTA16, PTA13, PTD0, SPI(PTD2, PTD3, PTC5), PORTA_IRQn); /* TODO REMOVE -> new function with all priorities as well */ #define WLAN_ISF_PCR PORTA->PCR[16] #define WLAN_ISF_ISFR PORTA->ISFR #define WLAN_ISF_MASK (1<<16) void initLEDs(void) { RED_OFF; GREEN_OFF; BLUE_OFF; LED_D1_OFF; LED_D2_OFF; LED_D3_OFF; } void print_cc3000_info() { wigo.get_user_file_info((uint8_t *)&userFS, sizeof(userFS)); wigo.get_mac_address(myMAC); printf("\n\nWi-Go MAC address %02x:%02x:%02x:%02x:%02x:%02x\n\n", myMAC[0], myMAC[1], myMAC[2], myMAC[3], myMAC[4], myMAC[5]); printf("FTC %i\n",userFS.FTC); printf("PP_version %i.%i\n",userFS.PP_version[0], userFS.PP_version[1]); printf("SERV_PACK %i.%i\n",userFS.SERV_PACK[0], userFS.SERV_PACK[1]); printf("DRV_VER %i.%i.%i\n",userFS.DRV_VER[0], userFS.DRV_VER[1], userFS.DRV_VER[2]); printf("FW_VER %i.%i.%i\n",userFS.FW_VER[0], userFS.FW_VER[1], userFS.FW_VER[2]); } int32_t set_static_dhcp(void) { uint8_t pucIP_Addr[4]; uint8_t pucIP_DefaultGWAddr[4]; uint8_t pucSubnetMask[4]; uint8_t pucDNS[4]; // Subnet mask is assumed to be 255.255.255.0 pucSubnetMask[0] = 0xFF; pucSubnetMask[1] = 0xFF; pucSubnetMask[2] = 0xFF; pucSubnetMask[3] = 0x0; // CC3000's IP pucIP_Addr[0] = STATIC_IP_OCT1; pucIP_Addr[1] = STATIC_IP_OCT2; pucIP_Addr[2] = STATIC_IP_OCT3; pucIP_Addr[3] = STATIC_IP_OCT4; // Default Gateway/Router IP // 192.168.1.1 pucIP_DefaultGWAddr[0] = STATIC_IP_OCT1; pucIP_DefaultGWAddr[1] = STATIC_IP_OCT2; pucIP_DefaultGWAddr[2] = STATIC_IP_OCT3; pucIP_DefaultGWAddr[3] = STATIC_GW_OCT4; // We assume the router is also a DNS server pucDNS[0] = STATIC_IP_OCT1; pucDNS[1] = STATIC_IP_OCT2; pucDNS[2] = STATIC_IP_OCT3; pucDNS[3] = STATIC_GW_OCT4; wigo._netapp.dhcp((uint32_t *)pucIP_Addr, (uint32_t *)pucSubnetMask, (uint32_t *)pucIP_DefaultGWAddr, (uint32_t *)pucDNS); // reset the CC3000 to apply Static Setting wigo._wlan.stop(); wait(1); wigo._wlan.start(0); // Mask out all non-required events from CC3000 wigo._wlan.set_event_mask(HCI_EVNT_WLAN_KEEPALIVE| HCI_EVNT_WLAN_UNSOL_INIT| HCI_EVNT_WLAN_ASYNC_PING_REPORT); return(0); } void connect_to_ssid(uint8_t *ssid, uint8_t *key, uint8_t sec_mode) { printf("Connecting to SSID: %s. Timeout is 10s.\n",ssid); if (wigo.connect_to_AP(ssid, key, sec_mode) == true) { printf("Connected\n"); } else { printf("Connection timed-out (error).\n"); } } void connect_to_ssid(uint8_t *ssid) { wigo.connect_open(ssid); } int main() { // set current to 500mA since we're turning on the Wi-Fi PWR_EN1 = 0; PWR_EN2 = 1; pc.baud (115200); NVIC_SetAllPriority(3); // Set ALL interrupt priorities to level 3 NVIC_SetPriority(SPI0_IRQn, 0x0); // Wi-Fi SPI interrupt must be higher priority than SysTick NVIC_SetPriority(PORTA_IRQn, 0x1); NVIC_SetPriority(SysTick_IRQn, 0x2); // SysTick set to lower priority than Wi-Fi SPI bus interrupt // Clear pending interrupt WLAN_ISF_PCR |= PORT_PCR_ISF_MASK; WLAN_ISF_ISFR |= WLAN_ISF_MASK; GREEN_ON; wigo.start(0); printf("CC3000 Python demo.\n"); print_cc3000_info(); printf("\n<0> Normal run. SmartConfig will\n start if no valid connection exists.\n"); printf("<1> Connect using fixed SSID : %s\n", SSID); printf("<2> SmartConfig.\n"); signed char c = getchar(); switch (c) { case '0': if(!userFS.FTC) { do_FTC(); wigo._wlan.stop(); } break; case '1': printf("Attempting SSID Connection\n"); #ifndef CC3000_TINY_DRIVER #ifdef AP_KEY connect_to_ssid((uint8_t *)SSID,(uint8_t *)AP_KEY,AP_SECURITY); /* TODO rewrite to const vraiables - NOT MACROS */ #else connect_to_ssid(SSID); #endif #else connect_to_ssid(SSID); #endif break; case '2': //server_running = 1; //runSmartConfig = 1; start_smart_config(); init_tcp(); //server_running = 1; RED_OFF; GREEN_OFF; BLUE_OFF; printf("Press the reset button on your board and select 1...\n"); while(1) { GREEN_ON; wait_ms(500); GREEN_OFF; wait_ms(500); } default: printf("Wrong selection.\n"); printf("Reset the board and try again.\n"); break; } //server_running = 0; SmartConfigProfilestored = SMART_CONFIG_SET; RED_OFF; GREEN_OFF; BLUE_OFF; //dynamic dhcp is set by default #if IP_ALLOC_METHOD == USE_STATIC_IP set_static_dhcp(); #endif run_tcp_server(); // Run TCP/IP Connection to host }