diff options
| author | San Mehat <san@google.com> | 2009-06-23 21:10:57 -0700 |
|---|---|---|
| committer | San Mehat <san@google.com> | 2009-07-10 14:23:51 -0700 |
| commit | c4a895b7094461c98101924cf096680bfb7856f1 (patch) | |
| tree | 002d78d20dc1d3ddd548f10c5d39807f6d5b7fb7 /nexus/TiwlanWifiController.cpp | |
| parent | a0c0d8a89e1cd775d0ecf5a3df744d8ac0ccfc2f (diff) | |
| download | system_core-c4a895b7094461c98101924cf096680bfb7856f1.tar.gz system_core-c4a895b7094461c98101924cf096680bfb7856f1.tar.bz2 system_core-c4a895b7094461c98101924cf096680bfb7856f1.zip | |
nexus: Rollup update for nexus
nexus: Change field separator from : to ' '
Signed-off-by: San Mehat <san@google.com>
nexus: Add some prototypes for stuff to come
Signed-off-by: San Mehat <san@google.com>
nexus: Add some TODOs
Signed-off-by: San Mehat <san@google.com>
libsysutils: Put a proper token parser into the FrameworkListener which
supports minimal \ escapes and quotes
Signed-off-by: San Mehat <san@google.com>
nexus: Fix a lot of bugs
Signed-off-by: San Mehat <san@google.com>
libsysutils: Remove some debugging
Signed-off-by: San Mehat <san@google.com>
nexus: Send broadcasts for supplicant state changes
Signed-off-by: San Mehat <san@google.com>
nexus: Plumb DHCP listener state changes to NetworkManager
Signed-off-by: San Mehat <san@google.com>
nexus: Make the SupplicantState strings more parsable
Signed-off-by: San Mehat <san@google.com>
nexus: Broadcast a message when dhcp state changes.
Signed-off-by: San Mehat <san@google.com>
nexus: Add a few new response codes
Signed-off-by: San Mehat <san@google.com>
nexus: Rename ErrorCode -> ResponseCode
Signed-off-by: San Mehat <san@google.com>
nexus: Add DHCP event broadcasting. Also adds the framework for
tracking supplicant 'searching-for-AP' state
Signed-off-by: San Mehat <san@google.com>
nexus: REmove WifiScanner
Signed-off-by: San Mehat <san@google.com>
nexus: Change the way scanning works. scanmode can now be selected
independantly of triggering a scan. Also adds rxfilter support
Signed-off-by: San Mehat <san@google.com>
nexus: Add support for configuring bluetooth coexistence scanning and modes
Signed-off-by: San Mehat <san@google.com>
nexus: use case insensitive match for property names
Signed-off-by: San Mehat <san@google.com>
nexus: Rollup of a bunch of stuff:
- 'list' command now takes an argument to match against
- InterfaceConfig has been moved into the Controller base (for now)
- DhcpClient now has some rudimentry locking
- process 'ADDRINFO' messages from dhcpcd
- Drop tertiary dns
Signed-off-by: San Mehat <san@google.com>
nexus: Clean up some of the supplicant variable parsing and add 'wifi.current'
Signed-off-by: San Mehat <san@google.com>
nexus: Add driver-stop/start, initial suspend support
Signed-off-by: San Mehat <san@google.com>
nexus: Add Controller suspend/resume callbacks, as well as locking
Signed-off-by: San Mehat <san@google.com>
nexus: Make ARP probing configurable for DhcpClient
Signed-off-by: San Mehat <san@google.com>
nexus: Add linkspeed / rssi retrieval
Signed-off-by: San Mehat <san@google.com>
nexus: Add WifiStatusPoller to track RSSI/linkspeed when associated
Signed-off-by: San Mehat <san@google.com>
nexus: Disable some debugging and add 'wifi.netcount' property
Signed-off-by: San Mehat <san@google.com>
nexus: Replace the hackish property system with something more flexible with namespaces
Signed-off-by: San Mehat <san@google.com>
libsysutils: Fix a few bugs in SocketListener
Signed-off-by: San Mehat <san@google.com>
nexus: PropertyManager: Add array support
Signed-off-by: San Mehat <san@google.com>
nexus: Clean up properties
Signed-off-by: San Mehat <san@google.com>
nexus: WifiController: Change name of 'CurrentNetwork' property
Signed-off-by: San Mehat <san@google.com>
Diffstat (limited to 'nexus/TiwlanWifiController.cpp')
| -rw-r--r-- | nexus/TiwlanWifiController.cpp | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/nexus/TiwlanWifiController.cpp b/nexus/TiwlanWifiController.cpp index 61535c35..016c7907 100644 --- a/nexus/TiwlanWifiController.cpp +++ b/nexus/TiwlanWifiController.cpp @@ -51,6 +51,7 @@ int TiwlanWifiController::powerUp() { int TiwlanWifiController::powerDown() { if (mEventListener) { delete mEventListener; + shutdown(mListenerSock, SHUT_RDWR); close(mListenerSock); mListenerSock = -1; mEventListener = NULL; @@ -77,7 +78,8 @@ int TiwlanWifiController::loadFirmware() { LOGD("Firmware loaded OK"); if (startDriverEventListener()) { - LOGW("Failed to start driver event listener"); + LOGW("Failed to start driver event listener (%s)", + strerror(errno)); } return 0; @@ -95,32 +97,48 @@ int TiwlanWifiController::loadFirmware() { int TiwlanWifiController::startDriverEventListener() { struct sockaddr_in addr; - int s; - if ((s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) + if (mListenerSock != -1) { + LOGE("Listener already started!"); + errno = EBUSY; return -1; + } + + if ((mListenerSock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { + LOGE("socket failed (%s)", strerror(errno)); + return -1; + } memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_port = htons(TI_DRIVER_MSG_PORT); - if (bind(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) { - close(s); - return -1; + if (bind(mListenerSock, + (struct sockaddr *) &addr, + sizeof(addr)) < 0) { + LOGE("bind failed (%s)", strerror(errno)); + goto out_err; } - mEventListener = new TiwlanEventListener(s); + mEventListener = new TiwlanEventListener(mListenerSock); if (mEventListener->startListener()) { LOGE("Error starting driver listener (%s)", strerror(errno)); + goto out_err; + } + return 0; +out_err: + if (mEventListener) { delete mEventListener; mEventListener = NULL; - close(s); - return -1; } - mListenerSock = s; - return 0; + if (mListenerSock != -1) { + shutdown(mListenerSock, SHUT_RDWR); + close(mListenerSock); + mListenerSock = -1; + } + return -1; } bool TiwlanWifiController::isFirmwareLoaded() { |
