[ASR] add asr getting stated guide; add ASR582X CI (#27057)

* [ASR] add asr getting stated guide; add ASR582X CI

* remove unused env in CI; remove app list

---------

Co-authored-by: Andrei Litvin <andy314@gmail.com>
diff --git a/.github/workflows/examples-asr.yaml b/.github/workflows/examples-asr.yaml
new file mode 100644
index 0000000..08dc309
--- /dev/null
+++ b/.github/workflows/examples-asr.yaml
@@ -0,0 +1,70 @@
+# Copyright (c) 2023 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.
+
+name: Build example - ASR
+
+on:
+    push:
+    pull_request:
+    merge_group:
+
+concurrency:
+    group: ${{ github.ref }}-${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.event.number) || (github.event_name == 'workflow_dispatch' && github.run_number) || github.sha }}
+    cancel-in-progress: true
+
+env:
+    CHIP_NO_LOG_TIMESTAMPS: true
+    # XXX: Workaround for https://github.com/actions/cache/issues/1141
+    SEGMENT_DOWNLOAD_TIMEOUT_MINS: 3
+
+jobs:
+    asr:
+        name: ASR
+
+        runs-on: ubuntu-latest
+        if: github.actor != 'restyled-io[bot]'
+
+        container:
+            image: connectedhomeip/chip-build-asr:0.7.14
+            options: --user root
+
+        steps:
+            - uses: Wandalen/wretry.action@v1.0.36
+              name: Checkout
+              with:
+                  action: actions/checkout@v3
+                  with: |
+                      token: ${{ github.token }}
+                  attempt_limit: 3
+                  attempt_delay: 2000
+            - name: Checkout submodules
+              run: scripts/checkout_submodules.py --allow-changing-global-git-config --shallow --platform asr
+            - name: Bootstrap cache
+              uses: actions/cache@v3
+              timeout-minutes: 10
+              with:
+                  key: ${{ runner.os }}-env-${{ hashFiles('scripts/setup/*', 'third_party/pigweed/**') }}
+                  path: |
+                      .environment
+                      build_overrides/pigweed_environment.gni
+            - name: Bootstrap
+              run: bash scripts/bootstrap.sh
+            - name: Build all ASR582X examples
+              run: |
+                  ./scripts/run_in_build_env.sh \
+                     "./scripts/build/build_examples.py \
+                        --target asr-asr582x-lighting \
+                        --target asr-asr582x-lighting-ota \
+                        build \
+                     "
\ No newline at end of file
diff --git a/docs/guides/README.md b/docs/guides/README.md
index 451a2c6..d37c959 100644
--- a/docs/guides/README.md
+++ b/docs/guides/README.md
@@ -4,6 +4,7 @@
 
 -   [Android - Building](./android_building.md)
 -   [Apple - Testing with iPhone, iPad, macOS, Apple TV, HomePod, Watch, etc](./darwin.md)
+-   [ASR - Getting Started Guide](./asr_getting_started_guide.md)
 -   [Espressif (ESP32) - Getting Started Guide](./esp32/README.md)
 -   [Infineon PSoC6 - Software Update](./infineon_psoc6_software_update.md)
 -   [Linux - Simulated Devices](./simulated_device_linux.md)
diff --git a/docs/guides/asr_getting_started_guide.md b/docs/guides/asr_getting_started_guide.md
new file mode 100644
index 0000000..fa86dfd
--- /dev/null
+++ b/docs/guides/asr_getting_started_guide.md
@@ -0,0 +1,134 @@
+# ASR Getting Started Guide
+
+The ASR platform is a [Matter](https://github.com/project-chip/connectedhomeip)
+platform that uses ASR FreeRTOS SDK.
+
+---
+
+-   [ASR Getting Started Guide](#asr-getting-started-guide)
+    -   [Supported Chips](#supported-chips)
+    -   [Matter Example Applications](#matter-example-applications)
+    -   [Building the Example Application](#building-the-example-application)
+    -   [Commissioning](#commissioning)
+        -   [BLE mode](#ble-mode)
+        -   [IP mode](#ip-mode)
+    -   [Shell](#shell)
+    -   [OTA](#ota)
+
+---
+
+## Supported Chips
+
+The ASR platform is supported on:
+
+-   [ASR582X](http://www.asrmicro.com/en/goods/proinfo/36.html)
+-   [ASR595X](http://www.asrmicro.com/en/goods/proinfo/42.html)
+
+## Matter Example Applications
+
+Sample Matter applications are provided for the ASR platform. They can be used
+to speed up development. You can find them in the samples with `/asr` subfolder.
+
+## Building the Example Application
+
+-   [Setup Matter Environment](./BUILDING.md)
+
+-   Setup toolchain
+    -   for ASR582X
+        ```
+        cd toolchain
+        wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/RC2.1/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2
+        tar -jxvf gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2
+        export ASR_TOOLCHAIN_PATH={abs-path-to-toolchain}/gcc-arm-none-eabi-9-2019-q4-major/bin/
+        ```
+    -   for ASR595X
+        ```
+        git clone --depth=1 https://github.com/asriot/Tools.git
+        cd Tools/toolchain
+        cat asr_riscv_gnu_toolchain_10.2_ubuntu-16.04.tar.bz2.part* > asr_riscv_gnu_toolchain_10.2_ubuntu-16.04.tar.bz2
+        mkdir -p asr_riscv_gnu_toolchain_10.2_ubuntu-16.04
+        tar -jxvf asr_riscv_gnu_toolchain_10.2_ubuntu-16.04.tar.bz2 -C asr_riscv_gnu_toolchain_10.2_ubuntu-16.04/
+        export ASR_TOOLCHAIN_PATH={abs-path-to-toolchain}/asr_riscv_gnu_toolchain_10.2_ubuntu-16.04/bin/
+        ```
+-   Setup Chip environment
+    -   for ASR582X:
+        ```
+        export ASR_BOARD=asr582x
+        ```
+    -   for ASR595X:
+        ```
+        export ASR_BOARD=asr595x
+        ```
+-   Building the Application
+
+    If the lighting example is to be built:
+
+    ```
+    ./scripts/build/build_examples.py --target asr-$ASR_BOARD-lighting build
+    ```
+
+-   The output image files are stored in the subdirectories under `out`, the
+    subdirectory name is the same as the argument specified after the option
+    `--target` when build the examples.
+
+-   After building the application, `DOGO` tool is used to flash it to the
+    board.
+
+## Commissioning
+
+There are two commissioning modes supported by ASR platform:
+
+### BLE mode
+
+1. Build and Flash
+2. The example will run automatically after booting the ASR board.
+3. Restore factory settings using command `recovery`
+4. Commissioning with
+   [Chip-Tool](https://github.com/project-chip/connectedhomeip/tree/master/examples/chip-tool),for
+   example:
+    ```
+    ./chip-tool pairing ble-wifi <node_id> <ssid> <password> <pin_code> <discriminator>
+    ```
+
+### IP mode
+
+1. Build and Flash
+2. The example will run automatically after booting the ASR board.
+3. Restore factory settings using command `recovery`
+4. Connect to AP using command `wifi_open sta [ssid] [password]`
+5. Commissioning with
+   [Chip-Tool](https://github.com/project-chip/connectedhomeip/tree/master/examples/chip-tool),for
+   example:
+    ```
+    ./chip-tool pairing onnetwork-long <node_id> <pin_code> <discriminator>
+    ```
+
+## Shell
+
+1. To build the example with Matter shell, exactly the same steps as above but
+   add argument `-shell` when using the `build_examples.py` script. For example:
+   `./scripts/build/build_examples.py --target asr-$ASR_BOARD-lighting-shell build`
+2. The example will run automatically after booting the ASR board.
+3. Use `help` command to list all supported commands:
+    ```
+    help
+    base64          Base64 encode / decode utilities
+    exit            Exit the shell application
+    help            List out all top level commands
+    version         Output the software version
+    ble             BLE transport commands
+    wifi            Usage: wifi <subcommand>
+    config          Manage device configuration. Usage to dump value: config [param_name] and to set some values (discriminator): config [param_name] [param_value].
+    device          Device management commands
+    onboardingcodes Dump device onboarding codes. Usage: onboardingcodes none|softap|ble|onnetwork [qrcode|qrcodeurl|manualpairingcode]
+    dns             Dns client commands
+    OnOff           OnOff commands. Usage: OnOff [on|off]
+    Done
+    ```
+
+## OTA
+
+To build the example with the Matter OTA Requestor functionality, exactly the
+same steps as above but add argument `-ota` when using the `build_examples.py`
+script. For example:
+`./scripts/build/build_examples.py --target asr-$ASR_BOARD-lighting-ota build`
diff --git a/docs/guides/index.md b/docs/guides/index.md
index 5d93bbb..1cbfcab 100644
--- a/docs/guides/index.md
+++ b/docs/guides/index.md
@@ -20,6 +20,7 @@
 
 -   [Android - Building](./android_building.md)
 -   [Apple - Testing with iPhone, iPad, macOS, Apple TV, HomePod, Watch, etc](./darwin.md)
+-   [ASR - Getting Started Guide](./asr_getting_started_guide.md)
 -   [Espressif (ESP32) - Getting Started Guide](./esp32/README.md)
 -   [Infineon PSoC6 - Software Update](./infineon_psoc6_software_update.md)
 -   [Linux - Simulated Devices](./simulated_device_linux.md)
diff --git a/examples/lighting-app/asr/README.md b/examples/lighting-app/asr/README.md
index 78755f0..c9b8009 100755
--- a/examples/lighting-app/asr/README.md
+++ b/examples/lighting-app/asr/README.md
@@ -1,80 +1,33 @@
-# CHIP ASR Lighting Example
+# Matter ASR Lighting Example
 
 This example demonstrates the Matter Lighting application on ASR platform.
 
 ---
 
--   [CHIP ASR Lighting Example](#chip-asr-lighting-example)
+-   [Matter ASR Lighting Example](#matter-asr-lighting-example)
     -   [Supported Chips](#supported-chips)
-    -   [Building the Example Application](#building-the-example-application)
-    -   [Commissioning](#commissioning)
-        -   [BLE mode](#ble-mode)
-        -   [IP mode](#ip-mode)
+    -   [Building and Commissioning](#building-and-commissioning)
     -   [Cluster Control](#cluster-control)
+    -   [Indicate current state of lightbulb](#indicate-current-state-of-lightbulb)
 
 ---
 
 ## Supported Chips
 
-The CHIP demo application is supported on:
+The Matter demo application is supported on:
 
 -   ASR582X
 -   ASR595X
 
-## Building the Example Application
+## Building and Commissioning
 
--   [Setup CHIP Environment](../../../docs/guides/BUILDING.md)
+Please refer
+[Building and Commissioning](../../../docs/guides/asr_getting_started_guide.md#building-the-example-application)
+guides to get started
 
--   Setup toolchain for ASR582X,download gcc-arm-none-eabi-9-2019-q4-major,then
-    export `ASR_TOOLCHAIN_PATH`:
-    ```
-    export ASR_TOOLCHAIN_PATH={path-to-toolchain}/gcc-arm-none-eabi-9-2019-q4-major/bin/
-    ```
-    for ASR595X,download asr_riscv_gnu_toolchain_10.2_ubuntu,then export
-    `ASR_TOOLCHAIN_PATH`:
-    ```
-    export ASR_TOOLCHAIN_PATH={path-to-toolchain}/asr_riscv_gnu_toolchain_10.2_ubuntu-16.04/bin/
-    ```
--   Setup Chip environment
-    -   for ASR582X:
-        ```
-        export ASR_BOARD=asr582x
-        ```
-    -   for ASR595X:
-        ```
-        export ASR_BOARD=asr595x
-        ```
--   Building the Application
-    ```
-    ./scripts/build/build_examples.py --target asr-$ASR_BOARD-lighting build
-    ```
--   The output image files are stored in the subdirectories under `out`, the
-    subdirectory name is the same as the argument specified after the option
-    `--target` when build the examples.
-
--   After building the application, `DOGO` tool is used to flash it to the
-    board.
-
-## Commissioning
-
-There are two commissioning modes supported by ASR platform:
-
-### BLE mode
-
-1. Build and Flash
-2. The example will run automatically after booting the ASR board.
-3. Restore factory settings using command `recovery`
-4. Commissioning with
-   [Chip-Tool](https://github.com/project-chip/connectedhomeip/tree/master/examples/chip-tool)
-
-### IP mode
-
-1. Build and Flash
-2. The example will run automatically after booting the ASR board.
-3. Restore factory settings using command `recovery`
-4. Connect to AP using command `wifi_open sta [ssid] [password]`
-5. Commissioning with
-   [Chip-Tool](https://github.com/project-chip/connectedhomeip/tree/master/examples/chip-tool)
+```
+./scripts/build/build_examples.py --target asr-$ASR_BOARD-lighting build
+```
 
 ## Cluster Control
 
@@ -96,3 +49,16 @@
     ```
     ./chip-tool colorcontrol move-to-hue-and-saturation 240 100 0 0 0 <NODE ID> 1
     ```
+
+## Indicate current state of lightbulb
+
+By default, a 3-color LED(RGB) module is used to show current state of lightbulb
+Connect the module to following pins:
+
+| Name  |  Pin  |
+| :---: | :---: |
+|  Red  | PAD7  |
+| Green | PAD6  |
+| Blue  | PAD10 |
+
+These default pins are defined at `examples/platform/asr/LEDWidget.h`
diff --git a/examples/platform/asr/shell/matter_shell.cpp b/examples/platform/asr/shell/matter_shell.cpp
index 55a66b3..f84d694 100644
--- a/examples/platform/asr/shell/matter_shell.cpp
+++ b/examples/platform/asr/shell/matter_shell.cpp
@@ -34,6 +34,9 @@
 #include <lib/core/CHIPError.h>
 #include <string>
 #include <vector>
+#if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
+#include "init_OTARequestor.h"
+#endif
 
 using namespace ::chip;
 using namespace ::chip::Credentials;
diff --git a/scripts/build/build/targets.py b/scripts/build/build/targets.py
index d2024c4..f573fee 100755
--- a/scripts/build/build/targets.py
+++ b/scripts/build/build/targets.py
@@ -425,6 +425,8 @@
     target.AppendModifier('ota', enable_ota_requestor=True)
     target.AppendModifier('shell', chip_build_libshell=True)
     target.AppendModifier('no_logging', chip_logging=False)
+    target.AppendModifier('factory', enable_factory=True)
+    target.AppendModifier('rotating_id', enable_rotating_device_id=True)
 
     return target
 
diff --git a/scripts/build/builders/asr.py b/scripts/build/builders/asr.py
index e8ca5aa..c329f70 100644
--- a/scripts/build/builders/asr.py
+++ b/scripts/build/builders/asr.py
@@ -60,6 +60,7 @@
                  chip_build_libshell: bool = False,
                  chip_logging: bool = True,
                  enable_factory: bool = False,
+                 enable_rotating_device_id: bool = False,
                  enable_ota_requestor: bool = False):
         super(ASRBuilder, self).__init__(
             root=app.BuildRoot(root),
@@ -104,6 +105,10 @@
             self.extra_gn_options.append('chip_use_transitional_commissionable_data_provider=false')
             self.extra_gn_options.append('chip_enable_factory_data=true')
 
+        if enable_rotating_device_id:
+            self.extra_gn_options.append('chip_enable_additional_data_advertising=true')
+            self.extra_gn_options.append('chip_enable_rotating_device_id=true')
+
         self.extra_gn_options.append('asr_toolchain_root="%s"' % os.environ['ASR_TOOLCHAIN_PATH'])
 
     def GnBuildArgs(self):
diff --git a/scripts/build/testdata/all_targets_linux_x64.txt b/scripts/build/testdata/all_targets_linux_x64.txt
index 821e9a8..e4f8a89 100644
--- a/scripts/build/testdata/all_targets_linux_x64.txt
+++ b/scripts/build/testdata/all_targets_linux_x64.txt
@@ -1,5 +1,5 @@
 ameba-amebad-{all-clusters,all-clusters-minimal,light,light-switch,pigweed}
-asr-{asr582x,asr595x}-lighting[-ota][-shell][-no_logging]
+asr-{asr582x,asr595x}-lighting[-ota][-shell][-no_logging][-factory][-rotating_id]
 android-{arm,arm64,x86,x64,androidstudio-arm,androidstudio-arm64,androidstudio-x86,androidstudio-x64}-{chip-tool,chip-test,tv-server,tv-casting-app,java-matter-controller}[-no-debug]
 bouffalolab-{bl602-iot-matter-v1,bl602-iot-dvk-3s,bl602-night-light,xt-zb6-devkit,bl706-iot-dvk,bl706-night-light}-light[-shell][-115200][-rpc][-cdc]
 cc32xx-lock
diff --git a/src/platform/ASR/ASRConfig.h b/src/platform/ASR/ASRConfig.h
index 1089509..af10b47 100644
--- a/src/platform/ASR/ASRConfig.h
+++ b/src/platform/ASR/ASRConfig.h
@@ -25,8 +25,6 @@
 
 #pragma once
 
-// #include <platform/internal/CHIPDeviceLayerInternal.h>
-
 #include "asr_factory_config.h"
 #include <string.h>
 
diff --git a/src/platform/ASR/ASROTAImageProcessor.cpp b/src/platform/ASR/ASROTAImageProcessor.cpp
index beb7e6e..92a3ab0 100644
--- a/src/platform/ASR/ASROTAImageProcessor.cpp
+++ b/src/platform/ASR/ASROTAImageProcessor.cpp
@@ -150,9 +150,8 @@
     ChipLogProgress(SoftwareUpdate, "ASROTAImageProcessor::HandleApply()");
 
     imageProcessor->ota_boot_para.res_type = LEGA_OTA_FINISH;
+    // Set boot mode and then reboot
     lega_ota_set_boot(&imageProcessor->ota_boot_para);
-
-    // reboot();
 }
 
 void ASROTAImageProcessor::HandleAbort(intptr_t context)
@@ -217,7 +216,6 @@
         ReturnErrorCodeIf(error == CHIP_ERROR_BUFFER_TOO_SMALL, CHIP_NO_ERROR);
         ReturnErrorOnFailure(error);
 
-        // SL TODO -- store version somewhere
         ChipLogProgress(SoftwareUpdate, "Image Header software version: %ld payload size: %lu", header.mSoftwareVersion,
                         (long unsigned int) header.mPayloadSize);
         mParams.totalFileBytes = header.mPayloadSize;
diff --git a/src/platform/ASR/ASRUtils.cpp b/src/platform/ASR/ASRUtils.cpp
index cecf87f..1961de3 100644
--- a/src/platform/ASR/ASRUtils.cpp
+++ b/src/platform/ASR/ASRUtils.cpp
@@ -288,9 +288,6 @@
     strncpy((char *) conf.wifi_key, (char *) stationConfig.wifi_key, stationConfig.key_len);
     conf.security = stationConfig.security;
 
-    // before wlan open with sta mode, make sure the wlan is closed.
-    // lega_wlan_close();
-
     ChipLogProgress(DeviceLayer, "Connecting to AP : [%s]\r\n", StringOrNullMarker(conf.wifi_ssid));
 
     lega_wlan_clear_pmk();
diff --git a/src/platform/ASR/ConnectivityManagerImpl.cpp b/src/platform/ASR/ConnectivityManagerImpl.cpp
index 6e828c8..b24e6ff 100644
--- a/src/platform/ASR/ConnectivityManagerImpl.cpp
+++ b/src/platform/ASR/ConnectivityManagerImpl.cpp
@@ -42,10 +42,9 @@
 #include <platform/DiagnosticDataProvider.h>
 #include <platform/internal/BLEManager.h>
 
+#include "lega_wlan_api.h"
 #include "lwip/opt.h"
 #include <platform/ASR/NetworkCommissioningDriver.h>
-// asr wifi
-#include "lega_wlan_api.h"
 #if !CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
 #error "WiFi Station support must be enabled when building for ASR"
 #endif
diff --git a/src/platform/ASR/KeyValueStoreManagerImpl.cpp b/src/platform/ASR/KeyValueStoreManagerImpl.cpp
index bc499ae..546cdea 100644
--- a/src/platform/ASR/KeyValueStoreManagerImpl.cpp
+++ b/src/platform/ASR/KeyValueStoreManagerImpl.cpp
@@ -44,7 +44,7 @@
 
 CHIP_ERROR KeyValueStoreManagerImpl::Init()
 {
-    // duet_flash_kv_init();
+    // KV has already been initialized at init_asrPlatform(), so return success
     return CHIP_NO_ERROR;
 }
 
diff --git a/src/platform/ASR/NetworkCommissioningWiFiDriver.cpp b/src/platform/ASR/NetworkCommissioningWiFiDriver.cpp
index 5c81675..d7ed626 100644
--- a/src/platform/ASR/NetworkCommissioningWiFiDriver.cpp
+++ b/src/platform/ASR/NetworkCommissioningWiFiDriver.cpp
@@ -15,14 +15,14 @@
  *    limitations under the License.
  */
 
+#include "lega_wlan_api.h"
 #include <lib/support/CodeUtils.h>
 #include <lib/support/SafeInt.h>
+#include <limits>
 #include <platform/ASR/ASRConfig.h>
 #include <platform/ASR/ASRUtils.h>
 #include <platform/ASR/NetworkCommissioningDriver.h>
 #include <platform/CHIPDeviceLayer.h>
-
-#include <limits>
 #include <string>
 
 using namespace ::chip;
@@ -184,8 +184,7 @@
         callback->OnResult(networkingStatus, CharSpan(), 0);
     }
 }
-// asr wifi
-#include "lega_wlan_api.h"
+
 CHIP_ERROR ASRWiFiDriver::StartScanWiFiNetworks(ByteSpan ssid)
 {
     if (ASRUtils::EnableStationMode() != CHIP_NO_ERROR)
diff --git a/src/platform/ASR/PlatformManagerImpl.h b/src/platform/ASR/PlatformManagerImpl.h
index 890fefd..1a16797 100644
--- a/src/platform/ASR/PlatformManagerImpl.h
+++ b/src/platform/ASR/PlatformManagerImpl.h
@@ -29,6 +29,8 @@
 #include <platform/internal/GenericPlatformManagerImpl_FreeRTOS.h>
 #endif
 #include <atomic>
+#include <lega_rtos_api.h>
+
 namespace chip {
 namespace DeviceLayer {
 
diff --git a/src/platform/ASR/args.gni b/src/platform/ASR/args.gni
index 8521765..4301315 100755
--- a/src/platform/ASR/args.gni
+++ b/src/platform/ASR/args.gni
@@ -14,6 +14,8 @@
 
 import("//build_overrides/chip.gni")
 
+import("${chip_root}/examples/platform/asr/args.gni")
+
 riscv_platform_config = "${chip_root}/third_party/asr/asr_riscv.gni"
 
 chip_device_platform = "asr"