This is a sample application program for GR-PEACH_WlanBP3595AP library. GR-PEACH_WlanBP3595AP library only works with GR-PEACH. This sample works as TCP socket sever, and this program sends a message when a connection is accepted.

Dependencies:   EthernetInterface GR-PEACH_WlanBP3595AP mbed-rtos mbed

Fork of GR-PEACH_WlanBP3595AP_sample by Rohm

Committer:
tousaki
Date:
Fri Dec 25 08:28:10 2015 +0000
Revision:
0:d1c30577e772
Child:
1:3eae92f063c3
Created 1st version.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tousaki 0:d1c30577e772 1 /* This is a sample application program for WlanBP3595 library. */
tousaki 0:d1c30577e772 2 /* This program works as TCP socket sever, and this program sends a message */
tousaki 0:d1c30577e772 3 /* when a connection is accepted. The setting of the WLAN is WPA2+AES. */
tousaki 0:d1c30577e772 4
tousaki 0:d1c30577e772 5 /*
tousaki 0:d1c30577e772 6 This program works with the following libraries.
tousaki 0:d1c30577e772 7 mbed-rtos : revision 84
tousaki 0:d1c30577e772 8 EthernetInterface_GR-PEACH_WlanBP3595AP : revision 50
tousaki 0:d1c30577e772 9 */
tousaki 0:d1c30577e772 10
tousaki 0:d1c30577e772 11 #include "mbed.h"
tousaki 0:d1c30577e772 12 #include "rtos.h"
tousaki 0:d1c30577e772 13 #include "EthernetInterface.h"
tousaki 0:d1c30577e772 14 #include "WlanBP3595.h"
tousaki 0:d1c30577e772 15
tousaki 0:d1c30577e772 16 /* Please change the following macro definition to your setting. */
tousaki 0:d1c30577e772 17 #define WLAN_SSID ("GR-PEACH_WlanTest") // SSID
tousaki 0:d1c30577e772 18 #define WLAN_PSK ("WlanBP3595_PreSharedKey") // PSK(Pre-Shared Key)
tousaki 0:d1c30577e772 19 #define SERVER_IP ("192.168.1.200") // Server IP address
tousaki 0:d1c30577e772 20 #define SERVER_PORT (50000) // TCP server socket port number
tousaki 0:d1c30577e772 21 #define SUBNET_MASK ("255.255.255.0") // Subnet mask
tousaki 0:d1c30577e772 22 #define DEFAULT_GATEWAY ("192.168.1.1") // Default gateway
tousaki 0:d1c30577e772 23 #define CONNECT_TIMEOUT (3*60*1000) // Connect-Timeout in ms
tousaki 0:d1c30577e772 24 #define SEND_MESSAGE ("Hello, world!\r\n") // Send-message
tousaki 0:d1c30577e772 25
tousaki 0:d1c30577e772 26 static void _wlan_inf_callback(uint8_t ucType, uint16_t usWid, uint16_t usSize, uint8_t *pucData);
tousaki 0:d1c30577e772 27 static int _wlan_connect(void);
tousaki 0:d1c30577e772 28
tousaki 0:d1c30577e772 29 DigitalOut red_led(LED1); // On: error
tousaki 0:d1c30577e772 30 DigitalOut green_led(LED2); // On: WLAN has been connected
tousaki 0:d1c30577e772 31
tousaki 0:d1c30577e772 32 /** Main function
tousaki 0:d1c30577e772 33 *
tousaki 0:d1c30577e772 34 */
tousaki 0:d1c30577e772 35 int main() {
tousaki 0:d1c30577e772 36 EthernetInterface eth;
tousaki 0:d1c30577e772 37 TCPSocketServer server;
tousaki 0:d1c30577e772 38 TCPSocketConnection connection;
tousaki 0:d1c30577e772 39 uint32_t status;
tousaki 0:d1c30577e772 40 int ret;
tousaki 0:d1c30577e772 41
tousaki 0:d1c30577e772 42 /* Initialize WlanBP3595 */
tousaki 0:d1c30577e772 43 ret = WlanBP3595_Init(_wlan_inf_callback);
tousaki 0:d1c30577e772 44 if (ret != 0) {
tousaki 0:d1c30577e772 45 /* error */
tousaki 0:d1c30577e772 46 red_led = 1;
tousaki 0:d1c30577e772 47 while (1) { Thread::wait(1000); }
tousaki 0:d1c30577e772 48 }
tousaki 0:d1c30577e772 49
tousaki 0:d1c30577e772 50 /* Wait until WLAN_BP3595_START */
tousaki 0:d1c30577e772 51 while (1) {
tousaki 0:d1c30577e772 52 Thread::wait(200);
tousaki 0:d1c30577e772 53 status = WlanBP3595_GetWlanSts();
tousaki 0:d1c30577e772 54 if (status == WLAN_BP3595_START) {
tousaki 0:d1c30577e772 55 break;
tousaki 0:d1c30577e772 56 }
tousaki 0:d1c30577e772 57 }
tousaki 0:d1c30577e772 58
tousaki 0:d1c30577e772 59 /* Initialize EthernetInterface */
tousaki 0:d1c30577e772 60 ret = eth.init(SERVER_IP, SUBNET_MASK, DEFAULT_GATEWAY);
tousaki 0:d1c30577e772 61 if (ret != 0) {
tousaki 0:d1c30577e772 62 /* error */
tousaki 0:d1c30577e772 63 red_led = 1;
tousaki 0:d1c30577e772 64 while (1) { Thread::wait(1000); }
tousaki 0:d1c30577e772 65 }
tousaki 0:d1c30577e772 66
tousaki 0:d1c30577e772 67 /* Connect(WLAN) */
tousaki 0:d1c30577e772 68 ret = _wlan_connect();
tousaki 0:d1c30577e772 69 if (ret != 0) {
tousaki 0:d1c30577e772 70 /* error */
tousaki 0:d1c30577e772 71 red_led = 1;
tousaki 0:d1c30577e772 72 while (1) { Thread::wait(1000); }
tousaki 0:d1c30577e772 73 }
tousaki 0:d1c30577e772 74
tousaki 0:d1c30577e772 75 /* Connect(EthernetInterface) */
tousaki 0:d1c30577e772 76 ret = eth.connect(CONNECT_TIMEOUT);
tousaki 0:d1c30577e772 77 if (ret != 0) {
tousaki 0:d1c30577e772 78 /* error */
tousaki 0:d1c30577e772 79 red_led = 1;
tousaki 0:d1c30577e772 80 while (1) { Thread::wait(1000); }
tousaki 0:d1c30577e772 81 }
tousaki 0:d1c30577e772 82
tousaki 0:d1c30577e772 83 /* Bind and listen */
tousaki 0:d1c30577e772 84 server.bind(SERVER_PORT);
tousaki 0:d1c30577e772 85 server.listen();
tousaki 0:d1c30577e772 86
tousaki 0:d1c30577e772 87 /* Loop */
tousaki 0:d1c30577e772 88 while (1) {
tousaki 0:d1c30577e772 89 /* Accept */
tousaki 0:d1c30577e772 90 server.accept(connection);
tousaki 0:d1c30577e772 91 printf("Connection from: %s\n", connection.get_address());
tousaki 0:d1c30577e772 92
tousaki 0:d1c30577e772 93 /* Send a message */
tousaki 0:d1c30577e772 94 connection.send_all((char *)SEND_MESSAGE, sizeof(SEND_MESSAGE)-1);
tousaki 0:d1c30577e772 95
tousaki 0:d1c30577e772 96 /* Close */
tousaki 0:d1c30577e772 97 connection.close();
tousaki 0:d1c30577e772 98 }
tousaki 0:d1c30577e772 99 }
tousaki 0:d1c30577e772 100
tousaki 0:d1c30577e772 101 /** WLAN Information callback function
tousaki 0:d1c30577e772 102 *
tousaki 0:d1c30577e772 103 */
tousaki 0:d1c30577e772 104 static void _wlan_inf_callback(uint8_t ucType, uint16_t usWid, uint16_t usSize, uint8_t *pucData)
tousaki 0:d1c30577e772 105 {
tousaki 0:d1c30577e772 106 if (ucType == 'I')
tousaki 0:d1c30577e772 107 {
tousaki 0:d1c30577e772 108 if (usWid == 0x0005) // WID_STATUS
tousaki 0:d1c30577e772 109 {
tousaki 0:d1c30577e772 110 if (pucData[0] == 0x01) // CONNECTED
tousaki 0:d1c30577e772 111 {
tousaki 0:d1c30577e772 112 /* Notify the EthernetInterface driver that WLAN has been connected */
tousaki 0:d1c30577e772 113 WlanBP3595_Connected();
tousaki 0:d1c30577e772 114 green_led = 1;
tousaki 0:d1c30577e772 115 }
tousaki 0:d1c30577e772 116 else
tousaki 0:d1c30577e772 117 {
tousaki 0:d1c30577e772 118 /* Notify the EthernetInterface driver that WLAN has been disconnected */
tousaki 0:d1c30577e772 119 WlanBP3595_Disconnected();
tousaki 0:d1c30577e772 120 green_led = 0;
tousaki 0:d1c30577e772 121 }
tousaki 0:d1c30577e772 122 }
tousaki 0:d1c30577e772 123 }
tousaki 0:d1c30577e772 124 }
tousaki 0:d1c30577e772 125
tousaki 0:d1c30577e772 126 /** WLAN connecting function
tousaki 0:d1c30577e772 127 *
tousaki 0:d1c30577e772 128 */
tousaki 0:d1c30577e772 129 static int _wlan_connect(void)
tousaki 0:d1c30577e772 130 {
tousaki 0:d1c30577e772 131 grp_u8 ucWidData8; // 8bit wid data
tousaki 0:d1c30577e772 132 grp_wld_byte_array tBAWidData; // byte array wid data
tousaki 0:d1c30577e772 133 int ret;
tousaki 0:d1c30577e772 134
tousaki 0:d1c30577e772 135 /* Set BSS type */
tousaki 0:d1c30577e772 136 ucWidData8 = 0x02; // AP(Access Point)
tousaki 0:d1c30577e772 137 ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_BSS_TYPE, &ucWidData8);
tousaki 0:d1c30577e772 138 if (ret != 0) {
tousaki 0:d1c30577e772 139 /* error */
tousaki 0:d1c30577e772 140 return -1;
tousaki 0:d1c30577e772 141 }
tousaki 0:d1c30577e772 142
tousaki 0:d1c30577e772 143 /* Set SSID */
tousaki 0:d1c30577e772 144 tBAWidData.pucData = (grp_u8 *)WLAN_SSID;
tousaki 0:d1c30577e772 145 tBAWidData.ulSize = strlen((char *)tBAWidData.pucData);
tousaki 0:d1c30577e772 146 ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_SSID, &tBAWidData);
tousaki 0:d1c30577e772 147 if (ret != 0) {
tousaki 0:d1c30577e772 148 /* error */
tousaki 0:d1c30577e772 149 return -1;
tousaki 0:d1c30577e772 150 }
tousaki 0:d1c30577e772 151
tousaki 0:d1c30577e772 152 /* Set 11i mode */
tousaki 0:d1c30577e772 153 ucWidData8 = 0x01 | // Encryption is enable
tousaki 0:d1c30577e772 154 0x10 | // WPA2 is enable
tousaki 0:d1c30577e772 155 0x20; // CCMP(AES) is enable
tousaki 0:d1c30577e772 156 ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_11I_MODE, &ucWidData8);
tousaki 0:d1c30577e772 157 if (ret != 0) {
tousaki 0:d1c30577e772 158 /* error */
tousaki 0:d1c30577e772 159 return -1;
tousaki 0:d1c30577e772 160 }
tousaki 0:d1c30577e772 161
tousaki 0:d1c30577e772 162 /* Set PSK */
tousaki 0:d1c30577e772 163 tBAWidData.pucData = (grp_u8 *)WLAN_PSK;
tousaki 0:d1c30577e772 164 tBAWidData.ulSize = strlen((char *)tBAWidData.pucData);
tousaki 0:d1c30577e772 165 ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_11I_PSK, &tBAWidData);
tousaki 0:d1c30577e772 166 if (ret != 0) {
tousaki 0:d1c30577e772 167 /* error */
tousaki 0:d1c30577e772 168 return -1;
tousaki 0:d1c30577e772 169 }
tousaki 0:d1c30577e772 170
tousaki 0:d1c30577e772 171 return 0;
tousaki 0:d1c30577e772 172 }