-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Ameba] Support NetworkCommissioning (#13576)
* Support NetworkCommissioning * Check for index during ReorderNetwork * Use pvPortMalloc and vPortFree in right positions * Fix BLE commissioning issue due to CASESession fail * Remove unused ServiceProvisioning files * Fix restyled errors * Update SystemTimeSupport
- Loading branch information
Showing
11 changed files
with
482 additions
and
83 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
/* | ||
* | ||
* Copyright (c) 2021 Project CHIP Authors | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
#pragma once | ||
#include "chip_porting.h" | ||
#include <platform/NetworkCommissioning.h> | ||
#include <wifi_structures.h> | ||
|
||
namespace chip { | ||
namespace DeviceLayer { | ||
namespace NetworkCommissioning { | ||
|
||
namespace { | ||
constexpr uint8_t kMaxWiFiNetworks = 1; | ||
constexpr uint8_t kWiFiScanNetworksTimeOutSeconds = 10; | ||
constexpr uint8_t kWiFiConnectNetworkTimeoutSeconds = 20; | ||
} // namespace | ||
|
||
class AmebaScanResponseIterator : public Iterator<WiFiScanResponse> | ||
{ | ||
public: | ||
AmebaScanResponseIterator(const size_t size, const rtw_scan_result_t * scanResults) : mSize(size), mpScanResults(scanResults) {} | ||
size_t Count() override { return mSize; } | ||
bool Next(WiFiScanResponse & item) override | ||
{ | ||
if (mIternum >= mSize) | ||
{ | ||
return false; | ||
} | ||
|
||
// copy the available information into WiFiScanResponse struct, which will be copied to the result to be sent | ||
item.security = mpScanResults[mIternum].security; | ||
item.ssidLen = mpScanResults[mIternum].SSID.len; | ||
item.channel = mpScanResults[mIternum].channel; | ||
item.wiFiBand = chip::DeviceLayer::NetworkCommissioning::WiFiBand::k2g4; | ||
// item.rssi = mpScanResults[mIternum].rssi; | ||
memcpy(item.ssid, mpScanResults[mIternum].SSID.val, item.ssidLen); | ||
memcpy(item.bssid, mpScanResults[mIternum].BSSID.octet, 6); | ||
|
||
mIternum++; | ||
return true; | ||
} | ||
void Release() override {} | ||
|
||
private: | ||
const size_t mSize; // no of network scanned | ||
const rtw_scan_result_t * mpScanResults; // list of scanned network info of size mSize | ||
size_t mIternum = 0; // to iterate through mpScanResults of size mSize | ||
}; | ||
|
||
class AmebaWiFiDriver final : public WiFiDriver | ||
{ | ||
public: | ||
class WiFiNetworkIterator final : public NetworkIterator | ||
{ | ||
public: | ||
WiFiNetworkIterator(AmebaWiFiDriver * aDriver) : mDriver(aDriver) {} | ||
size_t Count() override; | ||
bool Next(Network & item) override; | ||
void Release() override { delete this; } | ||
~WiFiNetworkIterator() = default; | ||
|
||
private: | ||
AmebaWiFiDriver * mDriver; | ||
bool mExhausted = false; | ||
}; | ||
|
||
struct WiFiNetwork | ||
{ | ||
char ssid[DeviceLayer::Internal::kMaxWiFiSSIDLength]; | ||
uint8_t ssidLen = 0; | ||
char credentials[DeviceLayer::Internal::kMaxWiFiKeyLength]; | ||
uint8_t credentialsLen = 0; | ||
}; | ||
|
||
// BaseDriver | ||
NetworkIterator * GetNetworks() override { return new WiFiNetworkIterator(this); } | ||
CHIP_ERROR Init() override; | ||
CHIP_ERROR Shutdown() override; | ||
|
||
// WirelessDriver | ||
uint8_t GetMaxNetworks() override { return kMaxWiFiNetworks; } | ||
uint8_t GetScanNetworkTimeoutSeconds() override { return kWiFiScanNetworksTimeOutSeconds; } | ||
uint8_t GetConnectNetworkTimeoutSeconds() override { return kWiFiConnectNetworkTimeoutSeconds; } | ||
|
||
CHIP_ERROR CommitConfiguration() override; | ||
CHIP_ERROR RevertConfiguration() override; | ||
|
||
Status RemoveNetwork(ByteSpan networkId) override; | ||
Status ReorderNetwork(ByteSpan networkId, uint8_t index) override; | ||
void ConnectNetwork(ByteSpan networkId, ConnectCallback * callback) override; | ||
|
||
// WiFiDriver | ||
Status AddOrUpdateNetwork(ByteSpan ssid, ByteSpan credentials) override; | ||
void ScanNetworks(ByteSpan ssid, ScanCallback * callback) override; | ||
|
||
CHIP_ERROR ConnectWiFiNetwork(const char * ssid, uint8_t ssidLen, const char * key, uint8_t keyLen); | ||
void OnConnectWiFiNetwork(); | ||
void OnScanWiFiNetworkDone(); | ||
static AmebaWiFiDriver & GetInstance() | ||
{ | ||
static AmebaWiFiDriver instance; | ||
return instance; | ||
} | ||
|
||
private: | ||
bool NetworkMatch(const WiFiNetwork & network, ByteSpan networkId); | ||
CHIP_ERROR StartScanWiFiNetworks(ByteSpan ssid); | ||
|
||
WiFiNetworkIterator mWiFiIterator = WiFiNetworkIterator(this); | ||
WiFiNetwork mSavedNetwork; | ||
WiFiNetwork mStagingNetwork; | ||
ScanCallback * mpScanCallback; | ||
ConnectCallback * mpConnectCallback; | ||
}; | ||
|
||
} // namespace NetworkCommissioning | ||
} // namespace DeviceLayer | ||
} // namespace chip |
Oops, something went wrong.