# WPS Module
| Since  | Origin / Contributor  | Maintainer  | Source  |
| :----- | :-------------------- | :---------- | :------ |
| 2017-01-01 | [Frank Exoo](https://github.com/FrankX0) | [Frank Exoo](https://github.com/FrankX0) | [wps.c](../../../app/modules/wps.c)|

[WPS](https://en.wikipedia.org/wiki/Wi-Fi_Protected_Setup) allows devices to be added to an existing network without entering the network credentials.

!!! danger

    Use this with caution. There are serious security concerns about using WPS.

    WPA/WPA2 networks that have the WPS feature enabled are [very easy to crack](http://www.howtogeek.com/176124/wi-fi-protected-setup-wps-is-insecure-heres-why-you-should-disable-it/). Once the WPS pin has been stolen [the router gives out the password](https://scotthelme.co.uk/wifi-insecurity-wps/) even if it has been changed.

    You should use WPA/WPA2 with the WPS feature disabled.

## wps.disable()
Disable WiFi WPS function.

#### Parameters
none

#### Returns
`nil`

## wps.enable()
Enable WiFi WPS function.

#### Parameters
none

#### Returns
`nil`

## wps.start()
Start WiFi WPS function. WPS must be enabled prior calling this function.

#### Syntax
`wps.start([function(status)])`

#### Parameters
- `function(status)` callback function for when the WPS function ends.

#### Returns
`nil`

#### Example
```lua
wps.enable()
wps.start(function(status)
  if status == wps.SUCCESS then
    print("SUCCESS!")
  elseif status == wps.FAILED then
    print("Failed")
  elseif status == wps.TIMEOUT then
    print("Timeout")
  elseif status == wps.WEP then
    print("WEP not supported")
  elseif status == wps.SCAN_ERR then
    print("WPS AP not found")
  else
    print(status)
  end
  wps.disable()
end)
```