You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

https://etwiki.sys.comcast.net/display/CE/%5bShared%5d+WiFi

https://etwiki.sys.comcast.net/display/APPS/WIFI+Manager+API


RDK Wi-Fi Sub-system overview

In this section we will get an overview on the kind of Wifi support offered by RDK, how WPA supplicant is playing an important role on managing Wifi Driver, event notification and communication to different applications

In RDK we support integrated Wi-Fi chips as well as USB based Wi-Fi adapters. Implementation differences between on board Wi-Fi & USB Wi-Fi adapter are abstracted from Upper layers i.e. application doesn’t know what kind of Wi-Fi device or connection they are accessing. 

RDK Wifi uses wpa_supplicant wireless daemon for connection management with the Wi-Fi driver. wpa_supplicant is designed to be a "daemon" that runs in the background and acts as the backend component controlling the wireless connection. wpa_supplicant also offers a control and monitoring interface to handle different wireless commands. Wi-Fi subsystem uses generic drivers such as NL80211 brings in wide range of vendor equipment's under coverage.

RDK Wi-Fi stack extensively uses commonly available Linux wireless utilities which brings most of the USB based and on-chip wireless equipment under our coverage. It provides support for diagnostics and connection management from remote and native applications. It uses IARM, which is a Linux D-BUS based communication protocol for managing Wi-Fi event notification and communication across different applications.

WiFi is a new features that is added in RDK video community devices. Recently Wi-Fi features is added to a Hardware Development (Raspberry Pi) video platform. As of now feature wise almost covered the client and access point related things, and we are continuing to work on remote management and diagnostics functionalities to be included into the Wi-Fi code.

Where does Raspberry-Pi Wi-Fi stand?

1.Basic Feature wise R-PI Wi-Fi is almost at the same level as that of other RDK platforms.

Main difference that we can derive are:

In RPI: 

  • Raspberry-Pi is light weight and the abstraction layers are mainly written around common linux utilities.
  • In R-PI we have a partial set of TR-181 APIs implemented which is needed for basic debugging.

In Other RDK Platform:

  • In case of Other commercial RDK platforms, some proprietary code is used along with generic wireless code.
  • Network manager can facilitate  on-boarding process through a service called as lostfound.
  • Also more OEM/SoC calls are used to expose more private features.

Wi-Fi Architecture

In this section, we will  get the details on the architecture, layers, and how different RDK components interact with the wifi driver to enable Core wifi functionality.


Application:
      In top of the eco-system we have wide range of application which requires wireless network access. This may be a cloud based UI application, a diagnostics webpage or a console application such as test automation kit which will be required to verify readiness of a new RDK box with respect to different component features. This can be a HTML based webpage or a native console application requesting Wi-Fi functionalities.

Service manager:
      Service manager is the contact point between external applications and native RDK. It is present in RDK as a library which when plugged in to a browser such as WPE or Qt enhances its capability to make communication from web applications to native RDK components through Java script. This exposes Java Script as well as native APIs, have decision making ability to route the request to appropriate RDK component.

IARM Message Bus:
     RDK provides a common message and event notification mechanism known as IARM which passes the calls from upper layer i.e. service manager to actual network manager. A D-Bus based event and messaging mechanism propagates requests from application layer to lower layers. Sends event notification from Lower (network or HAL) layer to application layer.

Wi-Fi Network Manager:
      Wi-Fi network manager is a daemon which handles network states and network interfaces. It handles Wireless initialization and management. This maintains the Wi-Fi state machine, initializes Wi-Fi subsystem & manages connection & disconnection events.

Wi-Fi generic HAL:
      It is an Abstraction of Wireless driver calls and various linux wireless utilities to present a set of APIs for common wireless operation. It provides a set of APIs as per RDK specification for connection, management & diagnostic related activities. Abstracts implementation details and SoC dependencies from network management layer.
Linux wireless utility:
     Tools such as wpa_supplicant, wereless-tools, net-link library, etc. which provides support for most of the common Wi-Fi chips. 

Driver & Firmware:
     Provided by SoC/OEM manufacturer. The kernel space driver and firmware binaries will be provided by Wi-FI SOC or OEM and it should be present in the defined path in the RDK box.

Use Cases

Let us see in what types of network topology one wireless enabled RDK box can operate. We can see two use cases here,
In first case we will see a straight forward network where we will have an IP headend for TV channels, VOD,  etc.

  • In the above picture, the data will be received by a RDK Broadband device which will be our entry point to the home network. This will act as a video gateway, an internet router as well as can be a home DVR also. The network connectivity from RDK broadband device to IP headend will be through a high speed network such as fiber optics, etc.
  • From the RDK broadband device, all clients in a home network will receive internet and video data through the wireless network. The RDK broadband device will be the access point and video devices such as Raspberry Pi will act as wifi clients.

In second use case, we wanted to show how a legacy network can be extended to operate with wifi enable devices,
In the figure, we use a RDK Video gateway to receive data from Cable media and relay to a RDK broadband device through MoCA network. In this network topology,

RDK client devices will be able to access the QAM channel and DVR from the Video gateway and internet through the broadband device. Video and internet data will be received by the Broadband Device and sent to Wireless clients.

Wi-Fi Service Manager

Service Manager can be used for a wide range of services but in this context we wlll focus on the wifi service only.

  • ServiceManager provides a uniform mechanism for discovering and consuming Wifi service on a target device.
  • It is a Bridge between browser based application and the native RDK.
  • It Provides capability for applications to use wifi services from other applications such as HTML 5, Java scripts, etc.
  • All the service registrations are received by Service Manager and after registration, it announces the service availability to interested applications.
  • It is one of the well-known facility for cloud-based applications to gain access to device vended functionality.
  • Here the advantage is , applications need not know which other component are providing which type of services.
  • Service manager provides some callback method which is basically for handling asynchronous events that is sent through other applications.
  • for example events such as connecting to AP or disconnected from AP are generated by wifi Manager and sent to service manager.

Some of major API details are provided which is available under the header include/services/wifimanagerservice.h. Generally in case of each service, there are two common API for registering and un-registering particular service. When we register a service, we are making it available to the other application. And when we un-register it will no longer be accessible to the upper layer application.

  

Service Manager API ListDescriptions

WifiManagerService()

Constructor, which will register for Wi-Fi service

WifiManagerService::registerForEvents()

Register events for Wi-Fi manager service.

WifiManagerService::unregisterEvents()

Unregister events for Wi-Fi manager service

WifiManagerService::notifyEvent()

Notify the events received from netSrvMgr.

WifiManagerService::getAvailableSSIDs()

Retrieves the array of strings representing SSIDs

WifiManagerService::getCurrentState()

Retrieves the current state

WifiManagerService::getPairedSSID()

Returns the paired SSIDs as string

WifiManagerService::connect()

Connect with given or saved SSID and passphrase

…….

…….

Wi-Fi Network Manager

Wifi- network manager, which takes several responsibility for managing Wifi in Video device

  • It dynamically detect the Network interfaces, send notifications to subscribers
  • Supports diagnostics both local and cloud based applications
  • Setup and update the network routes based on priorities, wifi connection status, availability, etc
  • It also Listen to home networking updates to determine the routes for which communication to be established in outside world
  • It provide Modular approach to add/remove new network interface types and also provide support for configuring routing rules

Lets see how network manager works when a RDK device boots up, On bootup, network service manager reads a configuration file to check what all network interfaces are supported on current set-top box and accordingly it initializes and bring-up the corresponding subsystems such as wifi, moca, or Ethernet. It also sets the telemetry parameters such as logging interval and decide what information need to be logged according to the configuration sets by the user.

The WIFI Manager API provides support to client applications that wish to enable WIFI communications on a STB.

  • It Provide API to Initialize the wifi driver and runs the linux wireless daemon
  • Provides API to configure WiFi SSID and password, it is required for video device to to connect to the Access Point.
  • It provide facility to immediately try to connect to WiFi network with provided SSID and password when API is invoked.
  • It also Provides response to caller to indicate whether or not WiFi network connection was successfully established.
  • Provides API to clear previously configured SSID and password.
  • Stores/Saves WiFi SSID and password in persistent memory, which will help in automatically connecting to the AP after box reboots. 
  • Enumerates via API the available broadcasting SSIDs.
  • Wifi Manager automatically tries to connect to paired Wifi network on startup

Another important feature of the network manager is to notify other application or other listeners when a major event occurs with the Wi-Fi sub-system
Here the event may of following types.

  • Any state change that either the state changed from Connected to Disconnected or Vice Versa.
  • when settop boots with WiFi capability.
  • when WiFi network is successfully established.
  • when connection to WiFi network is lost.
  • when WiFi driver failure is detected.
  • By notifying about all the discussed events, it helps the other application to do some decision making or display some information in the screen.
  • For example, when a video is being played from internet and in-between wireless connection is lost.
  • In this case the video player will receive a disconnection event from the network manager and can show on screen error message.

Wi-Fi Network Manager - IARM Event & Calls

Lets see how the event notification mechanism works. Basically all the event related activity are done through a D-Bus messaging extension known as IARM. In our case the network manager will register few event names and their corresponding event handler function. When an application is interested to receive that event, he will be register as a listen to that event. Whenever the event occurs all the register listener that are connected to IARM will be able to receive the notification.

IARMBus CallDescriptions

IARM_BUS_WIFI_MGR_API_getAvailableSSIDs

Retrieves the List of available APs

IARM_BUS_WIFI_MGR_API_getConnectedSSID

Returns the properties of the currently connected SSID

IARM_BUS_WIFI_MGR_API_setEnabled

Enable the WIFI adapter on the box

IARM_BUS_WIFI_MGR_API_connect

Connect with given or saved SSID and passphrase

IARM_BUS_WIFI_MGR_API_getConnectionType

Retrieves the type based on active network interface

IARM_BUS_WIFI_MGR_API_getRadioStatsProps

Retrieve the get radio stats properties


•IARM Call implementation:
•Here we can see that for each of the possible Wi-Fi Events, we have defined a IARM Call.
•For example, we have  some remote procedure calls, which can be invoked from any application to perform some Wi-Fi related operation.
•These operation may be to get the list of available network or to connect to a particular wifi network, etc.
•IARM Events:
•Basically we have 2 types of events for Wifi Manager notifications.
1.State change notifications
•WIFI_CONNECTING : When a connection is initiated the state will change from IDEAL to CONNECTING.
•WIFI_FAILED : When a connection attempt is failed.
•WIFI_DISCONNECTED : When a AP is disconnected from client.
•WIFI_CONNECTED : This will be notified after a successful connection.
2.Error events:
•WIFI_NO_SSID: The Access point we wanted to connect is no longer available.
•WIFI_UNKNOWN : Unknown error has happened.
•WIFI_CONNECTION_LOST : connection is lost, this may indicate that an AP is no longer in range.
•WIFI_SSID_CHANGED : this indicates that we have connected to another SSID
•WIFI_CONNECTION_FAILED : When the connection is failed, it may be because of invalid credential or any other issue.
•WIFI_CONNECTION_INTERRUPTED : Connection is cancelled by user when it was in progress.

Wi-Fi Integration requirement

Code Walk-through

Wi-Fi HAL APIs

Debugging and Log analysis

  • No labels