Skip to content

Commit

Permalink
[Ameba] Implement reading and decoding factorydata from flash (#23758)
Browse files Browse the repository at this point in the history
* [FactoryData] Implement reading and decoding factorydata from flash
- Add FactoryDataDecoder
- Revise FactoryDataProvider
- Change chipinterface initialization order
- Add CHIP_ENABLE_AMEBA_FACTORY_DATA macro to enable/disable flash factorydata
- Revise filepath in mbedtls.cmake

* [Build] Fix warning and errors

* [Build] ignore warning for unused label

* [factorydata] dont read factorydata if CONFIG_ENABLE_AMEBA_FACTORY_DATA is disabled

Co-authored-by: Andrei Litvin <andy314@gmail.com>
  • Loading branch information
2 people authored and pull[bot] committed Sep 1, 2023
1 parent 9dc3a39 commit 3728391
Show file tree
Hide file tree
Showing 8 changed files with 371 additions and 68 deletions.
2 changes: 2 additions & 0 deletions config/ameba/chip.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ list(
-DCONFIG_PLATFORM_8721D
-DCONFIG_USE_MBEDTLS_ROM_ALG
-DCONFIG_FUNCION_O0_OPTIMIZE
-DCONFIG_ENABLE_AMEBA_FACTORY_DATA=0
-DDM_ODM_SUPPORT_TYPE=32
-DCHIP_DEVICE_LAYER_TARGET=Ameba
-DMBEDTLS_CONFIG_FILE=<mbedtls_config.h>
Expand All @@ -43,6 +44,7 @@ list(
-Wno-unused-variable
-Wno-deprecated-declarations
-Wno-unused-parameter
-Wno-unused-label
-Wno-format
-Wno-stringop-truncation
-Wno-format-nonliteral
Expand Down
1 change: 1 addition & 0 deletions examples/all-clusters-app/ameba/chip_main.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,7 @@ list(
-DCHIP_HAVE_CONFIG_H
-DMBEDTLS_CONFIG_FILE=<mbedtls_config.h>
-DCHIP_SHELL_MAX_TOKENS=11
-DCONFIG_ENABLE_AMEBA_FACTORY_DATA=0
)

if (matter_enable_persistentstorage_audit)
Expand Down
16 changes: 9 additions & 7 deletions examples/all-clusters-app/ameba/main/chipinterface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ static void InitServer(intptr_t context)
initParams.InitializeStaticResourcesBeforeServerInit();
chip::Server::GetInstance().Init(initParams);
gExampleDeviceInfoProvider.SetStorageDelegate(&Server::GetInstance().GetPersistentStorage());
// TODO: Use our own DeviceInfoProvider
chip::DeviceLayer::SetDeviceInfoProvider(&gExampleDeviceInfoProvider);

NetWorkCommissioningInstInit();
Expand All @@ -157,22 +158,23 @@ extern "C" void ChipTest(void)

initPref();

// Initialize device attestation, commissionable data and device instance info
// TODO: Use our own DeviceInstanceInfoProvider
// SetDeviceInstanceInfoProvider(&mFactoryDataProvider);
mFactoryDataProvider.Init();
SetCommissionableDataProvider(&mFactoryDataProvider);
SetDeviceAttestationCredentialsProvider(&mFactoryDataProvider);

CHIPDeviceManager & deviceMgr = CHIPDeviceManager::GetInstance();

err = deviceMgr.Init(&EchoCallbacks);
if (err != CHIP_NO_ERROR)
{
ChipLogError(DeviceLayer, "DeviceManagerInit() - ERROR!\r\n");
}
else
{
ChipLogProgress(DeviceLayer, "DeviceManagerInit() - OK\r\n");
}

// Set DeviceInstanceInfoProvider after CHIPDeviceManager init
// CHIPDeviceManager init will set GenericDeviceInsanceInfoProvider first
#if CONFIG_ENABLE_AMEBA_FACTORY_DATA
SetDeviceInstanceInfoProvider(&mFactoryDataProvider);
#endif

chip::DeviceLayer::PlatformMgr().ScheduleWork(InitServer, 0);

Expand Down
2 changes: 2 additions & 0 deletions src/platform/Ameba/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ static_library("Ameba") {
"ConnectivityManagerImpl.h",
"DiagnosticDataProviderImpl.cpp",
"DiagnosticDataProviderImpl.h",
"FactoryDataDecoder.cpp",
"FactoryDataDecoder.h",
"FactoryDataProvider.cpp",
"FactoryDataProvider.h",
"KeyValueStoreManagerImpl.cpp",
Expand Down
46 changes: 46 additions & 0 deletions src/platform/Ameba/FactoryDataDecoder.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
*
* Copyright (c) 2022 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.
*/

#include "FactoryDataDecoder.h"
#include "chip_porting.h"
#include <platform/internal/CHIPDeviceLayerInternal.h>

namespace chip {
namespace DeviceLayer {

CHIP_ERROR FactoryDataDecoder::ReadFactoryData(uint8_t * buffer, uint16_t * pfactorydata_len)
{
uint32_t ret = 0;
ret = ReadFactory(buffer, pfactorydata_len);
if (ret != 1)
return CHIP_ERROR_INTERNAL;

return CHIP_NO_ERROR;
}

CHIP_ERROR FactoryDataDecoder::DecodeFactoryData(uint8_t * buffer, FactoryData * fdata, uint16_t factorydata_len)
{
uint32_t ret = 0;
ret = DecodeFactory(buffer, fdata, factorydata_len);
if (ret != 0)
return CHIP_ERROR_INTERNAL;

return CHIP_NO_ERROR;
}

} // namespace DeviceLayer
} // namespace chip
38 changes: 38 additions & 0 deletions src/platform/Ameba/FactoryDataDecoder.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
*
* Copyright (c) 2022 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 <platform/internal/CHIPDeviceLayerInternal.h>

namespace chip {
namespace DeviceLayer {

class FactoryDataDecoder
{
public:
CHIP_ERROR ReadFactoryData(uint8_t * buffer, uint16_t * pfactorydata_len);
CHIP_ERROR DecodeFactoryData(uint8_t * buffer, FactoryData * fdata, uint16_t factorydata_len);
static FactoryDataDecoder & GetInstance()
{
static FactoryDataDecoder instance;
return instance;
}
};

} // namespace DeviceLayer
} // namespace chip
Loading

0 comments on commit 3728391

Please sign in to comment.