cc3000 UDP server demo

Dependencies:   NVIC_set_all_priorities cc3000_hostdriver_mbedsocket mbed

Committer:
Kojto
Date:
Sun Oct 06 10:45:48 2013 +0000
Revision:
0:c338c4b7ca0a
Child:
1:167a1a55557b
initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kojto 0:c338c4b7ca0a 1 /* mbed Microcontroller Library
Kojto 0:c338c4b7ca0a 2 * Copyright (c) 2006-2013 ARM Limited
Kojto 0:c338c4b7ca0a 3 *
Kojto 0:c338c4b7ca0a 4 * Licensed under the Apache License, Version 2.0 (the "License");
Kojto 0:c338c4b7ca0a 5 * you may not use this file except in compliance with the License.
Kojto 0:c338c4b7ca0a 6 * You may obtain a copy of the License at
Kojto 0:c338c4b7ca0a 7 *
Kojto 0:c338c4b7ca0a 8 * http://www.apache.org/licenses/LICENSE-2.0
Kojto 0:c338c4b7ca0a 9 *
Kojto 0:c338c4b7ca0a 10 * Unless required by applicable law or agreed to in writing, software
Kojto 0:c338c4b7ca0a 11 * distributed under the License is distributed on an "AS IS" BASIS,
Kojto 0:c338c4b7ca0a 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Kojto 0:c338c4b7ca0a 13 * See the License for the specific language governing permissions and
Kojto 0:c338c4b7ca0a 14 * limitations under the License.
Kojto 0:c338c4b7ca0a 15 */
Kojto 0:c338c4b7ca0a 16 #include "mbed.h"
Kojto 0:c338c4b7ca0a 17 #include "cc3000.h"
Kojto 0:c338c4b7ca0a 18 #include "main.h"
Kojto 0:c338c4b7ca0a 19
Kojto 0:c338c4b7ca0a 20 #include "UDPSocket.h"
Kojto 0:c338c4b7ca0a 21
Kojto 0:c338c4b7ca0a 22 using namespace mbed_cc3000;
Kojto 0:c338c4b7ca0a 23
Kojto 0:c338c4b7ca0a 24 tUserFS user_info;
Kojto 0:c338c4b7ca0a 25
Kojto 0:c338c4b7ca0a 26 /* cc3000 module declaration specific for user's board. Check also init() */
Kojto 0:c338c4b7ca0a 27 #if (MY_BOARD == WIGO)
Kojto 0:c338c4b7ca0a 28 cc3000 wifi(PTA16, PTA13, PTD0, SPI(PTD2, PTD3, PTC5), PORTA_IRQn);
Kojto 0:c338c4b7ca0a 29 Serial pc(USBTX, USBRX);
Kojto 0:c338c4b7ca0a 30 #elif (MY_BOARD == WIFI_DIPCORTEX)
Kojto 0:c338c4b7ca0a 31 cc3000 wifi(p28, p27, p30, SPI(p21, p14, p37), PIN_INT0_IRQn);
Kojto 0:c338c4b7ca0a 32 Serial pc(UART_TX, UART_RX);
Kojto 0:c338c4b7ca0a 33 #else
Kojto 0:c338c4b7ca0a 34
Kojto 0:c338c4b7ca0a 35 #endif
Kojto 0:c338c4b7ca0a 36
Kojto 0:c338c4b7ca0a 37 #ifndef CC3000_UNENCRYPTED_SMART_CONFIG
Kojto 0:c338c4b7ca0a 38 const uint8_t smartconfigkey[] = {0x73,0x6d,0x61,0x72,0x74,0x63,0x6f,0x6e,0x66,0x69,0x67,0x41,0x45,0x53,0x31,0x36};
Kojto 0:c338c4b7ca0a 39 #else
Kojto 0:c338c4b7ca0a 40 const uint8_t smartconfigkey = 0;
Kojto 0:c338c4b7ca0a 41 #endif
Kojto 0:c338c4b7ca0a 42
Kojto 0:c338c4b7ca0a 43 /**
Kojto 0:c338c4b7ca0a 44 * \brief Print cc3000 information
Kojto 0:c338c4b7ca0a 45 * \param none
Kojto 0:c338c4b7ca0a 46 * \return none
Kojto 0:c338c4b7ca0a 47 */
Kojto 0:c338c4b7ca0a 48 void print_cc3000_info() {
Kojto 0:c338c4b7ca0a 49 uint8_t myMAC[8];
Kojto 0:c338c4b7ca0a 50
Kojto 0:c338c4b7ca0a 51 printf("MAC address + cc3000 info \r\n");
Kojto 0:c338c4b7ca0a 52 wifi.get_user_file_info((uint8_t *)&user_info, sizeof(user_info));
Kojto 0:c338c4b7ca0a 53 wifi.get_mac_address(myMAC);
Kojto 0:c338c4b7ca0a 54 printf(" MAC address %02x:%02x:%02x:%02x:%02x:%02x \r\n \r\n", myMAC[0], myMAC[1], myMAC[2], myMAC[3], myMAC[4], myMAC[5]);
Kojto 0:c338c4b7ca0a 55
Kojto 0:c338c4b7ca0a 56 printf(" FTC %i \r\n",user_info.FTC);
Kojto 0:c338c4b7ca0a 57 printf(" PP_version %i.%i \r\n",user_info.PP_version[0], user_info.PP_version[1]);
Kojto 0:c338c4b7ca0a 58 printf(" SERV_PACK %i.%i \r\n",user_info.SERV_PACK[0], user_info.SERV_PACK[1]);
Kojto 0:c338c4b7ca0a 59 printf(" DRV_VER %i.%i.%i \r\n",user_info.DRV_VER[0], user_info.DRV_VER[1], user_info.DRV_VER[2]);
Kojto 0:c338c4b7ca0a 60 printf(" FW_VER %i.%i.%i \r\n",user_info.FW_VER[0], user_info.FW_VER[1], user_info.FW_VER[2]);
Kojto 0:c338c4b7ca0a 61 }
Kojto 0:c338c4b7ca0a 62
Kojto 0:c338c4b7ca0a 63 /**
Kojto 0:c338c4b7ca0a 64 * \brief Connect to SSID with a timeout
Kojto 0:c338c4b7ca0a 65 * \param ssid Name of SSID
Kojto 0:c338c4b7ca0a 66 * \param key Password
Kojto 0:c338c4b7ca0a 67 * \param sec_mode Security mode
Kojto 0:c338c4b7ca0a 68 * \return none
Kojto 0:c338c4b7ca0a 69 */
Kojto 0:c338c4b7ca0a 70 void connect_to_ssid(char *ssid, char *key, unsigned char sec_mode) {
Kojto 0:c338c4b7ca0a 71 printf("Connecting to SSID: %s. Timeout is 10s.\n",ssid);
Kojto 0:c338c4b7ca0a 72 if (wifi.connect_to_AP((uint8_t *)ssid, (uint8_t *)key, sec_mode) == true) {
Kojto 0:c338c4b7ca0a 73 printf(" Connected\n");
Kojto 0:c338c4b7ca0a 74 } else {
Kojto 0:c338c4b7ca0a 75 printf(" Connection timed-out (error). Please restart.\n");
Kojto 0:c338c4b7ca0a 76 while(1);
Kojto 0:c338c4b7ca0a 77 }
Kojto 0:c338c4b7ca0a 78 }
Kojto 0:c338c4b7ca0a 79
Kojto 0:c338c4b7ca0a 80 /**
Kojto 0:c338c4b7ca0a 81 * \brief Connect to SSID without security
Kojto 0:c338c4b7ca0a 82 * \param ssid Name of SSID
Kojto 0:c338c4b7ca0a 83 * \return none
Kojto 0:c338c4b7ca0a 84 */
Kojto 0:c338c4b7ca0a 85 void connect_to_ssid(char *ssid) {
Kojto 0:c338c4b7ca0a 86 wifi.connect_open((uint8_t *)ssid);
Kojto 0:c338c4b7ca0a 87 }
Kojto 0:c338c4b7ca0a 88
Kojto 0:c338c4b7ca0a 89 /**
Kojto 0:c338c4b7ca0a 90 * \brief First time configuration
Kojto 0:c338c4b7ca0a 91 * \param none
Kojto 0:c338c4b7ca0a 92 * \return none
Kojto 0:c338c4b7ca0a 93 */
Kojto 0:c338c4b7ca0a 94 void do_FTC(void) {
Kojto 0:c338c4b7ca0a 95 printf("Running First Time Configuration \r\n");
Kojto 0:c338c4b7ca0a 96 wifi.start_smart_config(smartconfigkey);
Kojto 0:c338c4b7ca0a 97 while (wifi.is_dhcp_configured() == false) {
Kojto 0:c338c4b7ca0a 98 wait_ms(500);
Kojto 0:c338c4b7ca0a 99 printf("Waiting for dhcp to be set. \r\n");
Kojto 0:c338c4b7ca0a 100 }
Kojto 0:c338c4b7ca0a 101 user_info.FTC = 1;
Kojto 0:c338c4b7ca0a 102 wifi.set_user_file_info((uint8_t *)&user_info, sizeof(user_info));
Kojto 0:c338c4b7ca0a 103 wifi._wlan.stop();
Kojto 0:c338c4b7ca0a 104 printf("FTC finished.\n");
Kojto 0:c338c4b7ca0a 105 }
Kojto 0:c338c4b7ca0a 106
Kojto 0:c338c4b7ca0a 107 /**
Kojto 0:c338c4b7ca0a 108 * \brief Websocket demo
Kojto 0:c338c4b7ca0a 109 * \param none
Kojto 0:c338c4b7ca0a 110 * \return int
Kojto 0:c338c4b7ca0a 111 */
Kojto 0:c338c4b7ca0a 112 int main() {
Kojto 0:c338c4b7ca0a 113 init(); /* board dependent init */
Kojto 0:c338c4b7ca0a 114 pc.baud(115200);
Kojto 0:c338c4b7ca0a 115
Kojto 0:c338c4b7ca0a 116 wifi.start(0);
Kojto 0:c338c4b7ca0a 117 printf("CC3000 tcp client demo.\n");
Kojto 0:c338c4b7ca0a 118 print_cc3000_info();
Kojto 0:c338c4b7ca0a 119
Kojto 0:c338c4b7ca0a 120 printf("Attempting SSID Connection. \r\n");
Kojto 0:c338c4b7ca0a 121 #if (USE_SMART_CONFIG == 1)
Kojto 0:c338c4b7ca0a 122 if (user_info.FTC == 1) {
Kojto 0:c338c4b7ca0a 123 wifi._wlan.ioctl_set_connection_policy(0, 1, 1);
Kojto 0:c338c4b7ca0a 124 } else {
Kojto 0:c338c4b7ca0a 125 printf("Smart config is not set, starting configuration. \r\n");
Kojto 0:c338c4b7ca0a 126 do_FTC();
Kojto 0:c338c4b7ca0a 127 printf("Smart config is set. Please restart your board. \r\n");
Kojto 0:c338c4b7ca0a 128 while(1);
Kojto 0:c338c4b7ca0a 129 }
Kojto 0:c338c4b7ca0a 130 #else
Kojto 0:c338c4b7ca0a 131 wifi._wlan.ioctl_set_connection_policy(0, 0, 0);
Kojto 0:c338c4b7ca0a 132 #ifndef CC3000_TINY_DRIVER
Kojto 0:c338c4b7ca0a 133 #ifdef AP_KEY
Kojto 0:c338c4b7ca0a 134 connect_to_ssid(SSID, AP_KEY, AP_SECURITY);
Kojto 0:c338c4b7ca0a 135 #else
Kojto 0:c338c4b7ca0a 136 connect_to_ssid(SSID);
Kojto 0:c338c4b7ca0a 137 #endif
Kojto 0:c338c4b7ca0a 138 #else
Kojto 0:c338c4b7ca0a 139 connect_to_ssid(SSID);
Kojto 0:c338c4b7ca0a 140 #endif
Kojto 0:c338c4b7ca0a 141 #endif
Kojto 0:c338c4b7ca0a 142 printf("DHCP request \r\n");
Kojto 0:c338c4b7ca0a 143 while (wifi.is_dhcp_configured() == false) {
Kojto 0:c338c4b7ca0a 144 wait_ms(500);
Kojto 0:c338c4b7ca0a 145 printf(" Waiting for dhcp to be set. \r\n");
Kojto 0:c338c4b7ca0a 146 }
Kojto 0:c338c4b7ca0a 147
Kojto 0:c338c4b7ca0a 148 tNetappIpconfigRetArgs ipinfo2;
Kojto 0:c338c4b7ca0a 149 wifi.get_ip_config(&ipinfo2); // data is returned in the ipinfo2 structure
Kojto 0:c338c4b7ca0a 150 printf("DHCP assigned IP Address = %d.%d.%d.%d \r\n", ipinfo2.aucIP[3], ipinfo2.aucIP[2], ipinfo2.aucIP[1], ipinfo2.aucIP[0]);
Kojto 0:c338c4b7ca0a 151
Kojto 0:c338c4b7ca0a 152 const int ECHO_SERVER_PORT = 1500;
Kojto 0:c338c4b7ca0a 153
Kojto 0:c338c4b7ca0a 154 UDPSocket server;
Kojto 0:c338c4b7ca0a 155 server.bind(ECHO_SERVER_PORT);
Kojto 0:c338c4b7ca0a 156
Kojto 0:c338c4b7ca0a 157 Endpoint client;
Kojto 0:c338c4b7ca0a 158 char buffer[256];
Kojto 0:c338c4b7ca0a 159 while (true) {
Kojto 0:c338c4b7ca0a 160 printf("\nWait for packet...\n");
Kojto 0:c338c4b7ca0a 161 int n = server.receiveFrom(client, buffer, sizeof(buffer));
Kojto 0:c338c4b7ca0a 162
Kojto 0:c338c4b7ca0a 163 printf("Received packet from: %s\n", client.get_address());
Kojto 0:c338c4b7ca0a 164 server.sendTo(client, buffer, n);
Kojto 0:c338c4b7ca0a 165 }
Kojto 0:c338c4b7ca0a 166
Kojto 0:c338c4b7ca0a 167 }