cc3000 hostdriver with the mbed socket interface

Dependents:   cc3000_hello_world_demo cc3000_simple_socket_demo cc3000_ntp_demo cc3000_ping_demo ... more

Revision:
4:15b58c119a0a
Parent:
0:615c697c33b0
Child:
5:245ac5b73132
--- a/Socket/UDPSocket.cpp	Thu Sep 19 08:04:22 2013 +0000
+++ b/Socket/UDPSocket.cpp	Sat Sep 21 15:01:05 2013 +0000
@@ -26,36 +26,41 @@
 }
 
 int UDPSocket::init(void) {
-    /* open upd socket */
-    _sock_fd = _cc3000_module->_socket.socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
-    if (_sock_fd == -1) {
-#if (CC3000_DEBUG == 1)
-        printf("DEBUG: Failed to create new socket (udp).\n");
-#endif
-        return 0;
-    }
-
-    return 1;
+    return init_socket(SOCK_DGRAM, IPPROTO_UDP);
 }
 
 // Server initialization
 int UDPSocket::bind(int port) {
-    init();
+    if (init_socket(SOCK_DGRAM, IPPROTO_UDP) < 0) {
+        return -1;
+    }
 
     sockaddr_in localHost;
-    std::memset(&localHost, 0, sizeof(localHost));
+    std::memset(&localHost, 0, sizeof(sockaddr_in));
 
     localHost.sin_family = AF_INET;
     localHost.sin_port = htons(port);
-    localHost.sin_addr.s_addr = htons(0);
+    localHost.sin_addr.s_addr = 0;
+    // sockaddr localHost;
+    // localHost.family = AF_INET;
+    // localHost.data[0] = (port & 0xFF00)>> 8;
+    // localHost.data[1] = (port & 0x00FF);
+    // localHost.data[2] = 0;
+    // localHost.data[3] = 0;
+    // localHost.data[4] = 0;
+    // localHost.data[5] = 0;
 
-    if (_cc3000_module->_socket.bind(_sock_fd, (sockaddr *)&localHost, sizeof(localHost)) != 0) {
+    if (_cc3000_module->_socket.bind(_sock_fd, (sockaddr *)&localHost, sizeof(sockaddr_in)) != 0) {
 #if (CC3000_DEBUG == 1)
         printf("DEBUG: Failed to bind a socket (udp). Closing socket.\n");
 #endif
         _cc3000_module->_socket.closesocket(_sock_fd);
+        _sock_fd = -1;
         return -1;
     }
+// #if (CC3000_DEBUG == 1)
+//     printf("DEBUG: local add: %d\n",localHost.sin_addr.s_addr);
+// #endif
     return 0;
 }
 
@@ -68,11 +73,15 @@
 
     if (!_blocking) {
         TimeInterval timeout(_timeout);
-        if (wait_writable(timeout) != 0)
+        if (wait_writable(timeout) != 0) {
+#if (CC3000_DEBUG == 1)
+            printf("DEBUG: The socket is not writeable. _sock_fd: %d.\n", _sock_fd);
+#endif
             return 0;
+        }
     }
 
-    return _cc3000_module->_socket.sendto(_sock_fd, packet, length, 0, (sockaddr *)&remote._remote_host, sizeof(remote._remote_host));
+    return _cc3000_module->_socket.sendto(_sock_fd, packet, length, 0, (sockaddr *)&remote._remote_host, sizeof(sockaddr));
 }
 
 // -1 if unsuccessful, else number of bytes received
@@ -85,6 +94,9 @@
     if (!_blocking) {
         TimeInterval timeout(_timeout);
         if (wait_readable(timeout) != 0) {
+#if (CC3000_DEBUG == 1)
+            printf("DEBUG: The socket is not readable. _sock_fd: %d.\n", _sock_fd);
+#endif
             return 0;
         }
     }