You need to reboot your RPi after install `pi-bluetooth`.
+By default, wpa_supplicant is not allowed to update (overwrite) configuration,
+if you want chip app to be able to store the configuration changes permanently,
+we need to make the following changes.
+
+1. Edit the dbus-fi.w1.wpa_supplicant1.service file to use configuration file
+ instead.
+
+```
+sudo nano /etc/systemd/system/dbus-fi.w1.wpa_supplicant1.service
+```
+
+Change the wpa_supplicant start parameters to:
+
+```
+ExecStart=/sbin/wpa_supplicant -u -s -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
+```
+
+2. Add the wpa-supplicant configuration file
+
+```
+sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
+```
+
+And add the following content to the file:
+
+```
+ctrl_interface=DIR=/run/wpa_supplicant
+update_config=1
+```
+
+Finally, reboot your RPi.
+
### Build Preparation
Before running any other build command, the `scripts/activate.sh` environment
subgraph cluster_controller {
label=<<b>Controller</b>>
- ChipDeviceController [shape=record label=<{ChipDeviceController|<font point-size="11">RendezvousSessionDelegate</font>}>, URL="@ref chip::DeviceController::ChipDeviceController"]
+ DeviceCommissioner [shape=record label=<{DeviceCommissioner|<font point-size="11">RendezvousSessionDelegate</font>}>, URL="@ref chip::Controller::DeviceCommissioner"]
}
# This section represents device-only elements
# Main relationships
#############################
RendezvousParameters [shape=ellipse, URL="@ref chip::RendezvousParameters"]
- RendezvousParameters -> { ChipDeviceController, RendezvousDeviceDelegate} [arrowhead=none]
+ RendezvousParameters -> { DeviceCommissioner, RendezvousDeviceDelegate} [arrowhead=none]
- {ChipDeviceController, RendezvousDeviceDelegate} -> RendezvousSession
+ {DeviceCommissioner, RendezvousDeviceDelegate} -> RendezvousSession
RendezvousSession -> TransportBle
RendezvousSession -> TransportInet [style=dashed, color=gray]
}
label=<<b>Controller</b>>
node [fillcolor="white:gray", gradientangle=90]
- ChipDeviceController [shape=record label=<{ChipDeviceController|<font point-size="11">RendezvousSessionDelegate</font>}>, URL="@ref chip::DeviceController::ChipDeviceController"]
+ DeviceCommissioner [shape=record label=<{DeviceCommissioner|<font point-size="11">RendezvousSessionDelegate</font>}>, URL="@ref chip::Controller::DeviceCommissioner"]
}
# This section represents device-only elements
#############################
# Main relationships
#############################
- {ChipDeviceController, RendezvousDeviceDelegate} -> RendezvousSession
+ {DeviceCommissioner, RendezvousDeviceDelegate} -> RendezvousSession
RendezvousSession -> HasDiscriminator
--- /dev/null
+# Configuring Thread network on a Linux machine
+
+You can use a Project CHIP controller such as
+[Python CHIP Controller](../../src/controller/python/README.md) to control
+Thread devices enabled for Project CHIP from a Linux host.
+
+For this purpose, you must equip the host with a Thread radio device, create a
+new Thread network, and ensure that packets addressed to devices within the
+network are routed through the radio device.
+
+<hr>
+
+- [Overview](#overview)
+- [Requirements](#requirements)
+- [Configuration](#configuration)
+- [Preparing OpenThread Radio Co-Processor device](#preparing-openthread-radio-co-processor)
+- [Configuring OpenThread Border Router](#configuring-openthread-border-router)
+- [Testing](#testing)
+
+<hr>
+
+## Overview
+
+The following figure shows the setup created as a result of configuring Thread
+network on a Linux machine.
+
+![linux_thread_connectivity](../images/linux_thread_connectivity.svg)
+
+In this setup, the connectivity between Python CHIP Controller and Thread
+devices is ensured in the following way:
+
+- CHIP messages generated by the Project CHIP controller are routed through a
+ virtual network interface **otbr0** to
+ [OpenThread Border Router container](https://openthread.io/guides/border-router/docker)
+ in Docker.
+- The OpenThread Border Router container uses a device with the
+ [OpenThread Radio Co-Processor](https://openthread.io/platforms/co-processor)
+ firmware to transmit Project CHIP messages to the Thread network.
+- CHIP-enabled Thread devices connected to the same Thread network receive and
+ consume Project CHIP messages.
+
+<hr>
+
+## Requirements
+
+You need the following hardware and software for this configuration:
+
+- OpenThread Radio Co-Processor device (for example,
+ [nRF52840 Dongle](https://www.nordicsemi.com/Software-and-tools/Development-Kits/nRF52840-Dongle))
+- Linux machine with Ubuntu v20.04 or later
+
+<hr>
+
+## Configuration
+
+The configuration process is composed of the following steps:
+
+- Preparing OpenThread Radio Co-Processor (RCP) device
+- Configuring OpenThread Border Router container in Docker
+
+### Configuring OpenThread Radio Co-Processor
+
+Read
+[Configuring OpenThread Radio Co-processor on nRF52840 Dongle](openthread_rcp_nrf_dongle.md)
+to learn how to configure Nordic Semiconductor's
+[nRF52840 Dongle](https://www.nordicsemi.com/Software-and-tools/Development-Kits/nRF52840-Dongle)
+as OpenThread Radio Co-Processor.
+
+You can replace the nRF52840 Dongle with a variety of development boards from
+different vendors. If you are using a Raspberry Pi as your testing platform, you
+can execute this step on a more powerful Linux machine to shorten the firmware
+build time.
+
+### Configuring OpenThread Border Router
+
+To configure OpenThread Border Router, complete the following steps:
+
+1. Install Docker daemon:
+
+ $ sudo apt update && sudo apt install docker.io
+
+2. Start the Docker daemon:
+
+ $ sudo systemctl start docker
+
+3. Create an IPv6 network for the OpenThread Border Router container in Docker:
+
+ $ sudo docker network create --ipv6 --subnet fd11:db8:1::/64 -o com.docker.network.bridge.name=otbr0 otbr
+
+4. Start the OpenThread Border Router container using the following command (in
+ the last line, replace _/dev/ttyACM0_ with the device node name of the
+ OpenThread Radio Co-processor):
+
+ $ sudo docker run -it --rm --privileged --network otbr -p 8080:80 -e NAT64=0 -e DNS64=0 \
+ --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" \
+ --volume /dev/ttyACM0:/dev/radio openthread/otbr --radio-url spinel+hdlc+uart:///dev/radio
+
+5. Open the `http://localhost:8080/` address in a web browser. If you are using
+ a Raspberry Pi without a screen, but you have a different device in the same
+ network, you can start a web browser on that device and use the address of
+ the Raspberry Pi instead of `localhost`.
+6. Click **Form** in the menu to the left. The network forming creator window
+ appears.
+7. Make sure that the On-Mesh Prefix is set to `fd11:22::`. This value is used
+ later to configure the IPv6 packet routing.
+8. Click the **Form** button at the bottom of the window to form a new Thread
+ network using the default settings.
+9. To ensure that packets addressed to devices in the Thread network are routed
+ through the OpenThread Border Router container in Docker, run the following
+ command with the On-Mesh Prefix that you set earlier:
+
+ $ sudo ip -6 route add fd11:22::/64 dev otbr0 via fd11:db8:1::2
+
+<hr>
+
+## Testing
+
+After Open Thread Border Router has been configured, complete the steps
+described in the
+[Python CHIP Controller README](../../src/controller/python/README.md) to
+commission a Thread device into the network and control it using the Project
+CHIP protocol.
This article describes how to use
[CHIPTool](../../src/android/CHIPTool/README.md) for Android smartphones to
commission an NXP K32W061 DK6 running
-[NXP K32W Lock Example Application](../../examples/lock-app/k32w/README.md) onto
-a CHIP-enabled Thread network.
+[NXP K32W Lock/Light Example Application](../../examples/lock-light-app/k32w/README.md)
+onto a CHIP-enabled Thread network.
<hr>
- [Requirements](#requirements)
- [Building and programming OpenThread RCP firmware](#building-rcp-firmware)
- [Configuring PC as Thread Border Router](#configuring-pc)
-- [Building and programming NXP K32W Lock Example Application](#building-example)
+- [Building and programming NXP K32W Lock/Light Example Application](#building-example)
- [Building and installing Android CHIPTool](#building-chiptool)
- [Forming a Thread network on the Border Router](#form-thread)
- [Preparing accessory device](#preparing-accessory)
device.
The following diagram shows the connectivity between network components required
-to allow communication between devices running the CHIPTool and Lock
+to allow communication between devices running the CHIPTool and Lock/Light
applications:
![nxp_hw_connectivity](../../examples/platform/k32w/doc/images/nxp_hw_connectivity.JPG)
<a name="building-example"></a>
-## Building and programming NXP K32W Lock Example Application
+## Building and programming NXP K32W Lock/Light Example Application
See
[NXP K32W Lock Example Application README](../../examples/lock-app/k32w/README.md)
-to learn how to build and program the example onto an K32W061 DK6.
+to learn how to build and program the lock example onto an K32W061 DK6.
+
+See
+[NXP K32W Light Example Application README](../../examples/lighting-app/k32w/README.md)
+to learn how to build and program the light example onto an K32W061 DK6.
<hr>
2. Verify that the text box on the screen is not empty and contains the IPv6
address of the accessory device.
-3. Tap the following buttons to change the lock state:
+3. Tap the following buttons to change the lock/light state:
- - _ON_ and _OFF_ buttons lock and unlock the door, respectively.
- - _TOGGLE_ changes the lock state to the opposite.
+ - _ON_ and _OFF_ buttons lock/turn on and unlock/turn off the door/light
+ bulb, respectively.
+ - _TOGGLE_ changes the lock/light state to the opposite.
-The _LED D3_ on the device turns on or off based on the changes of the lock
-state.
+The _LED D3_ on the device turns on or off based on the changes of the
+lock/light state.
--- /dev/null
+# Configuring OpenThread Radio Co-processor on nRF52840 Dongle
+
+OpenThread Radio Co-processor design allows to add Thread network capabilities
+to devices that do not natively support Thread.
+
+You can build and program
+[OpenThread Radio Co-Processor](https://openthread.io/platforms/co-processor)
+(RCP) firmware onto Nordic Semiconductor's
+[nRF52840 Dongle](https://www.nordicsemi.com/Software-and-tools/Development-Kits/nRF52840-Dongle).
+Once programmed, the dongle can be used for
+[configuring Thread network on a Linux machine](linux_thread_connectivity.md).
+
+## Building and programming the RCP firmware onto an nRF52840 Dongle
+
+Run the following commands to build and program the RCP firmware onto an
+nRF52840 Dongle:
+
+1. Clone the OpenThread repository into the current directory:
+
+ $ git clone https://github.com/openthread/openthread.git
+
+2. Enter the _openthread_ directory:
+
+ $ cd openthread
+
+3. Install OpenThread dependencies:
+
+ $ ./script/bootstrap
+
+4. Set up the build environment:
+
+ $ ./bootstrap
+
+5. Build OpenThread for the nRF52840 Dongle:
+
+ $ make -f examples/Makefile-nrf52840 BOOTLOADER=USB USB=1 THREAD_VERSION=1.2
+
+ This creates an RCP image at `output/nrf52840/bin/ot-rcp`.
+
+6. Convert the RCP image to the `.hex` format:
+
+ $ arm-none-eabi-objcopy -O ihex output/nrf52840/bin/ot-rcp output/nrf52840/bin/ot-rcp.hex
+
+7. Install
+ [nRF Util](https://www.nordicsemi.com/Software-and-tools/Development-Tools/nRF-Util):
+
+ $ python3 -m pip install -U nrfutil
+
+8. Generate the RCP firmware package:
+
+ $ nrfutil pkg generate --hw-version 52 --sd-req=0x00 \
+ --application output/nrf52840/bin/ot-rcp.hex \
+ --application-version 1 output/nrf52840/bin/ot-rcp.zip
+
+9. Connect the nRF52840 Dongle to the USB port.
+
+10. Press the **Reset** button on the dongle to put it into the DFU mode. Red
+ LED on the dongle starts blinking.
+
+11. To install the RCP firmware package onto the dongle, run the following
+ command, with _/dev/ttyACM0_ replaced with the device node name of your
+ nRF52840 Dongle:
+
+ $ nrfutil dfu usb-serial -pkg output/nrf52840/bin/ot-rcp.zip -p /dev/ttyACM0
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generated by Microsoft Visio, SVG Export linux_thread_connectivity.svg Drawing -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="4.23943in"
+ height="5.23793in"
+ viewBox="0 0 305.239 377.131"
+ xml:space="preserve"
+ color-interpolation-filters="sRGB"
+ class="st10"
+ version="1.1"
+ id="svg105"
+ sodipodi:docname="linux_thread_connectivity.svg"
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"><metadata
+ id="metadata109"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1163"
+ id="namedview107"
+ showgrid="false"
+ inkscape:zoom="1.3274742"
+ inkscape:cx="247.77132"
+ inkscape:cy="268.19765"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="g103" />
+ <style
+ type="text/css"
+ id="style2">
+ <![CDATA[
+ .st1 {fill:#768692;stroke:none;stroke-width:1}
+ .st2 {fill:#ffffff;font-family:Gotham Light;font-size:1.00001em}
+ .st3 {fill:#d9e1e2;stroke:none;stroke-width:1}
+ .st4 {fill:#333f48;font-family:Calibri;font-size:1.00001em}
+ .st5 {font-size:1em}
+ .st6 {marker-end:url(#mrkr13-19);stroke:#0033a0;stroke-linecap:butt;stroke-width:1}
+ .st7 {fill:#0033a0;fill-opacity:1;stroke:#0033a0;stroke-opacity:1;stroke-width:0.28409090909091}
+ .st8 {fill:#ffffff;stroke:none;stroke-linecap:butt;stroke-width:7.2}
+ .st9 {fill:#0033a0;font-family:Calibri;font-size:1.00001em}
+ .st10 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+ ]]>
+ </style>
+
+ <defs
+ id="Markers">
+ <g
+ id="lend13">
+ <path
+ d="M 3 1 L 0 0 L 3 -1 L 3 1 "
+ style="stroke:none"
+ id="path4" />
+ </g>
+ <marker
+ id="mrkr13-19"
+ class="st7"
+ refX="-10.56"
+ orient="auto"
+ markerUnits="strokeWidth"
+ overflow="visible">
+ <use
+ xlink:href="#lend13"
+ transform="scale(-3.52,-3.52) "
+ id="use7" />
+ </marker>
+ </defs>
+ <g
+ id="g103">
+ <title
+ id="title11">Drawing</title>
+ <g
+ id="shape6-1"
+ transform="translate(19,-143.724)">
+ <title
+ id="title13">Nordic Middle Grey</title>
+ <desc
+ id="desc15">Linux machine (Raspberry Pi or other)</desc>
+ <rect
+ x="0"
+ y="162.724"
+ width="267.239"
+ height="214.407"
+ class="st1"
+ id="rect17" />
+ <text
+ x="20.52"
+ y="177.52"
+ class="st2"
+ id="text19">Linux machine (Raspberry Pi or other)</text>
+ </g>
+ <g
+ id="shape7-4"
+ transform="translate(32.1469,-293.961)">
+ <title
+ id="title22">Nordic Light Grey</title>
+ <desc
+ id="desc24">Controller (Python CHIP Controller)</desc>
+ <rect
+ x="0"
+ y="339.126"
+ width="240.945"
+ height="38.0053"
+ class="st3"
+ id="rect26" />
+ <text
+ x="121.36"
+ y="354.53"
+ class="st4"
+ id="text30"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.00000191px;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#333f48"><tspan
+ sodipodi:role="line"
+ id="tspan111"
+ x="121.36"
+ y="354.53">Controller</tspan><tspan
+ sodipodi:role="line"
+ id="tspan113"
+ x="121.36"
+ y="369.53">(Python CHIP Controller)</tspan></text>
+ </g>
+ <g
+ id="shape8-8"
+ transform="translate(32.1469,-227.609)">
+ <title
+ id="title33">Nordic Light Grey.8</title>
+ <desc
+ id="desc35">Virtual network interface (otbr0)</desc>
+ <rect
+ x="0"
+ y="339.126"
+ width="240.945"
+ height="38.0053"
+ class="st3"
+ id="rect37" />
+ <text
+ x="27.259998"
+ y="361.73001"
+ class="st4"
+ id="text39"
+ style="font-size:12.00012016px;font-family:Calibri;fill:#333f48">Virtual network interface (otbr0)</text>
+ </g>
+ <g
+ id="shape9-11"
+ transform="translate(32.1469,-160.732)">
+ <title
+ id="title42">Nordic Light Grey.9</title>
+ <desc
+ id="desc44">OpenThread Border Router Docker image</desc>
+ <rect
+ x="0"
+ y="339.126"
+ width="240.945"
+ height="38.0053"
+ class="st3"
+ id="rect46" />
+ <text
+ x="123.24924"
+ y="345.42401"
+ class="st4"
+ id="text48"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.00000165px;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr;text-anchor:middle;fill:#333f48;stroke-width:0.97102857;"
+ transform="scale(0.97102858,1.0298358)"><tspan
+ sodipodi:role="line"
+ id="tspan115"
+ x="123.24924"
+ y="345.42401">OpenThread Border Router</tspan><tspan
+ sodipodi:role="line"
+ id="tspan117"
+ x="123.24924"
+ y="359.98901">Docker container</tspan></text>
+ </g>
+ <g
+ id="shape10-14"
+ transform="translate(145.533,-293.961)">
+ <title
+ id="title51">Dynamic connector</title>
+ <path
+ d="M7.09 377.13 L7.09 394.92"
+ class="st6"
+ id="path53" />
+ </g>
+ <g
+ id="shape11-20"
+ transform="translate(145.533,-227.609)">
+ <title
+ id="title56">Dynamic connector.11</title>
+ <path
+ d="M7.09 377.13 L7.09 395.44"
+ class="st6"
+ id="path58" />
+ </g>
+ <g
+ id="shape12-25"
+ transform="translate(32.1469,-85.0367)">
+ <title
+ id="title61">Nordic Light Grey.12</title>
+ <desc
+ id="desc63">OpenThread Radio Co-Processor (on nRF52840 Dongle or other)</desc>
+ <rect
+ x="0"
+ y="339.126"
+ width="240.945"
+ height="38.0053"
+ class="st3"
+ id="rect65" />
+ <text
+ x="23.459999"
+ y="354.53"
+ class="st4"
+ id="text69"
+ style="font-size:12.00012016px;font-family:Calibri;fill:#333f48">OpenThread Radio Co-Processor <tspan
+ x="26.869999"
+ dy="14.400145"
+ class="st5"
+ id="tspan67"
+ style="font-size:12.00012016px">(on nRF52840 Dongle or other)</tspan></text>
+ </g>
+ <g
+ id="shape13-29"
+ transform="translate(32.1469,-19)">
+ <title
+ id="title72">Nordic Light Grey.13</title>
+ <desc
+ id="desc74">Thread device enabled for Project CHIP</desc>
+ <rect
+ x="0"
+ y="339.126"
+ width="240.945"
+ height="38.0053"
+ class="st3"
+ id="rect76" />
+ <text
+ x="121.13"
+ y="354.23001"
+ class="st4"
+ id="text78"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.00000191px;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#333f48"><tspan
+ sodipodi:role="line"
+ id="tspan119"
+ x="121.13"
+ y="354.23001">Thread device enabled</tspan><tspan
+ sodipodi:role="line"
+ id="tspan121"
+ x="121.13"
+ y="369.23001">for Project CHIP</tspan></text>
+ </g>
+ <g
+ id="shape14-32"
+ transform="translate(145.533,-85.0367)">
+ <title
+ id="title81">Dynamic connector.14</title>
+ <desc
+ id="desc83">Thread</desc>
+ <path
+ d="M7.09 377.13 L7.09 394.6"
+ class="st6"
+ id="path85" />
+ <rect
+ x="18.4487"
+ y="383.947"
+ width="34.3597"
+ height="14.4001"
+ class="st8"
+ id="rect87" />
+ <text
+ x="18.45"
+ y="394.75"
+ class="st9"
+ id="text89">Thread</text>
+ </g>
+ <g
+ id="shape15-39"
+ transform="translate(145.533,-160.732)">
+ <title
+ id="title92">Dynamic connector.15</title>
+ <desc
+ id="desc94">USB</desc>
+ <path
+ d="M7.09 377.13 L7.09 404.26"
+ class="st6"
+ id="path96" />
+ <rect
+ x="17.4499"
+ y="397.28"
+ width="19.7405"
+ height="14.4001"
+ class="st8"
+ id="rect98" />
+ <text
+ x="17.45"
+ y="408.08"
+ class="st9"
+ id="text100">USB</text>
+ </g>
+ </g>
+</svg>
\ No newline at end of file
"${chip_root}/src/app/clusters/level-control/level-control.cpp",
"${chip_root}/src/app/clusters/low-power-server/low-power-server.cpp",
"${chip_root}/src/app/clusters/media-playback-server/media-playback-server.cpp",
+ "${chip_root}/src/app/clusters/network-commissioning/network-commissioning-ember.cpp",
+ "${chip_root}/src/app/clusters/network-commissioning/network-commissioning.cpp",
"${chip_root}/src/app/clusters/on-off-server/on-off.cpp",
"${chip_root}/src/app/clusters/scenes/scenes.cpp",
"${chip_root}/src/app/clusters/temperature-measurement-server/temperature-measurement-server.cpp",
{
- "writeTime": "Thu Mar 11 2021 17:27:52 GMT+0100 (Central European Standard Time)",
+ "writeTime": "Fri Mar 12 2021 15:15:46 GMT+0800 (China Standard Time)",
"featureLevel": 11,
"creator": "zap",
"keyValuePairs": [
"define": "GROUPS_CLUSTER",
"side": "client",
"enabled": 0,
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "3",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ],
"commands": [
{
"name": "AddGroup",
"incoming": 1,
"outgoing": 1
}
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
]
},
{
"define": "SCENES_CLUSTER",
"side": "server",
"enabled": 0,
- "commands": [
- {
- "name": "AddSceneResponse",
- "code": 0,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "ViewSceneResponse",
- "code": 1,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "RemoveSceneResponse",
- "code": 2,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "RemoveAllScenesResponse",
- "code": 3,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "StoreSceneResponse",
- "code": 4,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "GetSceneMembershipResponse",
- "code": 6,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- }
- ],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
+ ],
+ "commands": [
+ {
+ "name": "AddSceneResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ViewSceneResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveSceneResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveAllScenesResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "StoreSceneResponse",
+ "code": 4,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetSceneMembershipResponse",
+ "code": 6,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
]
},
{
"define": "ON_OFF_CLUSTER",
"side": "server",
"enabled": 1,
- "commands": [],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
- ]
+ ],
+ "commands": []
},
{
"name": "Level Control",
"define": "BARRIER_CONTROL_CLUSTER",
"side": "client",
"enabled": 0,
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
"commands": [
{
"name": "BarrierControlGoToPercent",
"incoming": 1,
"outgoing": 1
}
- ],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x0001",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
]
},
{
"define": "IDENTIFY_CLUSTER",
"side": "server",
"enabled": 1,
+ "commands": [
+ {
+ "name": "IdentifyQueryResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
- ],
- "commands": [
- {
- "name": "IdentifyQueryResponse",
- "code": 0,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- }
]
},
{
"define": "SCENES_CLUSTER",
"side": "client",
"enabled": 0,
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
"commands": [
{
"name": "AddScene",
"incoming": 1,
"outgoing": 1
}
- ],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "3",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
]
},
{
]
},
{
+ "name": "Network Commissioning",
+ "code": 49,
+ "mfgCode": null,
+ "define": "NETWORK_COMMISSIONING_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "commands": [
+ {
+ "name": "ScanNetworks",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "AddWiFiNetwork",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "UpdateWiFiNetwork",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "AddThreadNetwork",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "UpdateThreadNetwork",
+ "code": 8,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "RemoveNetwork",
+ "code": 10,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "EnableNetwork",
+ "code": 12,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "DisableNetwork",
+ "code": 14,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetLastNetworkCommissioningResult",
+ "code": 16,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Network Commissioning",
+ "code": 49,
+ "mfgCode": null,
+ "define": "NETWORK_COMMISSIONING_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "ScanNetworksResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "AddWiFiNetworkResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "UpdateWiFiNetworkResponse",
+ "code": 5,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "AddThreadNetworkResponse",
+ "code": 7,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "UpdateThreadNetworkResponse",
+ "code": 9,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveNetworkResponse",
+ "code": 11,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "EnableNetworkResponse",
+ "code": 13,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "DisableNetworkResponse",
+ "code": 15,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
"name": "Door Lock",
"code": 257,
"mfgCode": null,
@end
/**
+ * Cluster Network Commissioning
+ *
+ */
+@interface CHIPNetworkCommissioning : CHIPCluster
+
+- (void)addThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)addWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)disableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)enableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)getLastNetworkCommissioningResult:(uint32_t)timeoutMs completionHandler:(ResponseHandler)completionHandler;
+- (void)removeNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)scanNetworks:(NSData *)ssid
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)updateThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)updateWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+
+- (void)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+@end
+
+/**
* Cluster On/off
*
*/
#import "CHIPDevice.h"
#import "CHIPDevice_Internal.h"
-#import "ChipError.h"
+#import "CHIPError.h"
#import "gen/CHIPClientCallbacks.h"
#import "gen/CHIPClustersObjc.h"
bool mKeepAlive;
};
+class CHIPInt64uAttributeCallbackBridge : public Callback::Callback<Int64uAttributeCallback> {
+public:
+ CHIPInt64uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+ : Callback::Callback<Int64uAttributeCallback>(CallbackFn, this)
+ , mHandler(handler)
+ , mQueue(queue)
+ , mKeepAlive(keepAlive)
+ {
+ }
+
+ ~CHIPInt64uAttributeCallbackBridge() {};
+
+ static void CallbackFn(void * context, uint64_t value)
+ {
+ CHIPInt64uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt64uAttributeCallbackBridge *>(context);
+ if (callback && callback->mQueue) {
+ dispatch_async(callback->mQueue, ^{
+ callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedLongLong:value] });
+ if (!callback->mKeepAlive) {
+ callback->Cancel();
+ delete callback;
+ }
+ });
+ }
+ };
+
+private:
+ ResponseHandler mHandler;
+ dispatch_queue_t mQueue;
+ bool mKeepAlive;
+};
+
class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
public:
CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
@end
+@interface CHIPNetworkCommissioning ()
+@property (readonly) Controller::NetworkCommissioningCluster cppCluster;
+@end
+
+@implementation CHIPNetworkCommissioning
+
+- (Controller::ClusterBase *)getCluster
+{
+ return &_cppCluster;
+}
+
+- (void)addThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterAddThreadNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterAddThreadNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.AddThreadNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) operationalDataset.bytes, operationalDataset.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)addWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterAddWiFiNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterAddWiFiNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.AddWiFiNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) ssid.bytes, ssid.length),
+ chip::ByteSpan((const uint8_t *) credentials.bytes, credentials.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)disableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterDisableNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterDisableNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.DisableNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) networkID.bytes, networkID.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)enableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterEnableNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterEnableNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.EnableNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) networkID.bytes, networkID.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)getLastNetworkCommissioningResult:(uint32_t)timeoutMs completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.GetLastNetworkCommissioningResult(onSuccess->Cancel(), onFailure->Cancel(), timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)removeNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterRemoveNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterRemoveNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.RemoveNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) networkID.bytes, networkID.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)scanNetworks:(NSData *)ssid
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterScanNetworksResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterScanNetworksResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.ScanNetworks(
+ onSuccess->Cancel(), onFailure->Cancel(), chip::ByteSpan((const uint8_t *) ssid.bytes, ssid.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)updateThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterUpdateThreadNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterUpdateThreadNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.UpdateThreadNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) operationalDataset.bytes, operationalDataset.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)updateWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterUpdateWiFiNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterUpdateWiFiNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.UpdateWiFiNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) ssid.bytes, ssid.length),
+ chip::ByteSpan((const uint8_t *) credentials.bytes, credentials.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+
+- (void)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+ CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+
+@end
+
@interface CHIPOnOff ()
@property (readonly) Controller::OnOffCluster cppCluster;
@end
} // namespace MediaPlayback
+namespace NetworkCommissioning {
+
+void DispatchServerCommand(app::Command * command, CommandId commandId, EndpointId endpointId, TLV::TLVReader & dataTlv)
+{
+ {
+ switch (commandId)
+ {
+ case ZCL_ADD_THREAD_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(operationalDataset);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterAddThreadNetworkCallback(const_cast<uint8_t *>(operationalDataset), breadcrumb,
+ timeoutMs);
+ break;
+ }
+ case ZCL_ADD_WI_FI_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * ssid;
+ const uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(ssid);
+ break;
+ case 1:
+ TLVError = dataTlv.GetDataPtr(credentials);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 3:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterAddWiFiNetworkCallback(const_cast<uint8_t *>(ssid),
+ const_cast<uint8_t *>(credentials), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_DISABLE_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(networkID);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterDisableNetworkCallback(const_cast<uint8_t *>(networkID), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_ENABLE_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(networkID);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterEnableNetworkCallback(const_cast<uint8_t *>(networkID), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterGetLastNetworkCommissioningResultCallback(timeoutMs);
+ break;
+ }
+ case ZCL_REMOVE_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * NetworkID;
+ uint64_t Breadcrumb;
+ uint32_t TimeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(NetworkID);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(Breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(TimeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterRemoveNetworkCallback(const_cast<uint8_t *>(NetworkID), Breadcrumb, TimeoutMs);
+ break;
+ }
+ case ZCL_SCAN_NETWORKS_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * ssid;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(ssid);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterScanNetworksCallback(const_cast<uint8_t *>(ssid), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(operationalDataset);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterUpdateThreadNetworkCallback(const_cast<uint8_t *>(operationalDataset), breadcrumb,
+ timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * ssid;
+ const uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(ssid);
+ break;
+ case 1:
+ TLVError = dataTlv.GetDataPtr(credentials);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 3:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterUpdateWiFiNetworkCallback(const_cast<uint8_t *>(ssid),
+ const_cast<uint8_t *>(credentials), breadcrumb, timeoutMs);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ // TODO: Encode response for command not found
+ ChipLogError(Zcl, "Unknown command %" PRIx16 " for cluster %" PRIx16, commandId, ZCL_NETWORK_COMMISSIONING_CLUSTER_ID);
+ break;
+ }
+ }
+ }
+}
+
+} // namespace NetworkCommissioning
+
namespace OnOff {
void DispatchServerCommand(app::Command * command, CommandId commandId, EndpointId endpointId, TLV::TLVReader & dataTlv)
case ZCL_MEDIA_PLAYBACK_CLUSTER_ID:
clusters::MediaPlayback::DispatchServerCommand(apCommandObj, aCommandId, aEndPointId, aReader);
break;
+ case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
+ clusters::NetworkCommissioning::DispatchServerCommand(apCommandObj, aCommandId, aEndPointId, aReader);
+ break;
case ZCL_ON_OFF_CLUSTER_ID:
clusters::OnOff::DispatchServerCommand(apCommandObj, aCommandId, aEndPointId, aReader);
break;
#define ZCL_FABRIC_ID_ATTRIBUTE_ID (0x0000)
#define ZCL_BREADCRUMB_ATTRIBUTE_ID (0x0001)
+// Attribute ids for cluster: Network Commissioning
+
+// Client attributes
+
+// Server attributes
+
// Attribute ids for cluster: Shade Configuration
// Client attributes
// Server attributes
-// Attribute ids for cluster: Network Commissioning
-
-// Client attributes
-
-// Server attributes
-
// Attribute ids for cluster: Binding
// Client attributes
EmberAfStatus emberAfLevelControlClusterServerCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfLowPowerClusterServerCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfMediaPlaybackClusterServerCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfNetworkCommissioningClusterServerCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfOnOffClusterServerCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfScenesClusterServerCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfTemperatureMeasurementClusterServerCommandParse(EmberAfClusterCommand * cmd);
case ZCL_MEDIA_PLAYBACK_CLUSTER_ID:
result = emberAfMediaPlaybackClusterServerCommandParse(cmd);
break;
+ case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
+ result = emberAfNetworkCommissioningClusterServerCommandParse(cmd);
+ break;
case ZCL_ON_OFF_CLUSTER_ID:
result = emberAfOnOffClusterServerCommandParse(cmd);
break;
}
return status(wasHandled, true, cmd->mfgSpecific);
}
+EmberAfStatus emberAfNetworkCommissioningClusterServerCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_ADD_THREAD_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ operationalDataset = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(operationalDataset) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterAddThreadNetworkCallback(operationalDataset, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_ADD_WI_FI_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * ssid;
+ uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ ssid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(ssid) + 1u);
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ credentials = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(credentials) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterAddWiFiNetworkCallback(ssid, credentials, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_DISABLE_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ networkID = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(networkID) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterDisableNetworkCallback(networkID, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_ENABLE_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ networkID = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(networkID) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterEnableNetworkCallback(networkID, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterGetLastNetworkCommissioningResultCallback(timeoutMs);
+ break;
+ }
+ case ZCL_REMOVE_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * NetworkID;
+ uint64_t Breadcrumb;
+ uint32_t TimeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ NetworkID = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(NetworkID) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ Breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ TimeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterRemoveNetworkCallback(NetworkID, Breadcrumb, TimeoutMs);
+ break;
+ }
+ case ZCL_SCAN_NETWORKS_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * ssid;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ ssid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(ssid) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterScanNetworksCallback(ssid, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ operationalDataset = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(operationalDataset) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterUpdateThreadNetworkCallback(operationalDataset, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * ssid;
+ uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ ssid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(ssid) + 1u);
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ credentials = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(credentials) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterUpdateWiFiNetworkCallback(ssid, credentials, breadcrumb, timeoutMs);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
EmberAfStatus emberAfOnOffClusterServerCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
case ZCL_MEDIA_PLAYBACK_CLUSTER_ID:
emberAfMediaPlaybackClusterInitCallback(endpoint);
break;
+ case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
+ emberAfNetworkCommissioningClusterInitCallback(endpoint);
+ break;
case ZCL_ON_OFF_CLUSTER_ID:
emberAfOnOffClusterInitCallback(endpoint);
break;
// To prevent warning
(void) endpoint;
}
+void __attribute__((weak)) emberAfNetworkCommissioningClusterInitCallback(EndpointId endpoint)
+{
+ // To prevent warning
+ (void) endpoint;
+}
void __attribute__((weak)) emberAfOnOffClusterInitCallback(EndpointId endpoint)
{
// To prevent warning
*/
void emberAfMediaPlaybackClusterInitCallback(chip::EndpointId endpoint);
+/** @brief Network Commissioning Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfNetworkCommissioningClusterInitCallback(chip::EndpointId endpoint);
+
/** @brief On/off Cluster Init
*
* Cluster Init
void emberAfMediaPlaybackClusterServerTickCallback(chip::EndpointId endpoint);
//
+// Network Commissioning Cluster server
+//
+
+/** @brief Network Commissioning Cluster Server Init
+ *
+ * Server Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfNetworkCommissioningClusterServerInitCallback(chip::EndpointId endpoint);
+
+/** @brief Network Commissioning Cluster Server Attribute Changed
+ *
+ * Server Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfNetworkCommissioningClusterServerAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Network Commissioning Cluster Server Manufacturer Specific Attribute Changed
+ *
+ * Server Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfNetworkCommissioningClusterServerManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Network Commissioning Cluster Server Message Sent
+ *
+ * Server Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfNetworkCommissioningClusterServerMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Network Commissioning Cluster Server Pre Attribute Changed
+ *
+ * server Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfNetworkCommissioningClusterServerPreAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Network Commissioning Cluster Server Tick
+ *
+ * server Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfNetworkCommissioningClusterServerTickCallback(chip::EndpointId endpoint);
+
+//
// On/off Cluster server
//
bool emberAfMediaPlaybackClusterStopRequestCallback();
/**
+ * @brief Network Commissioning Cluster AddThreadNetwork Command callback
+ * @param operationalDataset
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterAddThreadNetworkCallback(uint8_t * operationalDataset, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster AddWiFiNetwork Command callback
+ * @param ssid
+ * @param credentials
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterAddWiFiNetworkCallback(uint8_t * ssid, uint8_t * credentials, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster DisableNetwork Command callback
+ * @param networkID
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterDisableNetworkCallback(uint8_t * networkID, uint64_t breadcrumb, uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster EnableNetwork Command callback
+ * @param networkID
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterEnableNetworkCallback(uint8_t * networkID, uint64_t breadcrumb, uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster GetLastNetworkCommissioningResult Command callback
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterGetLastNetworkCommissioningResultCallback(uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster RemoveNetwork Command callback
+ * @param networkID
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterRemoveNetworkCallback(uint8_t * NetworkID, uint64_t Breadcrumb, uint32_t TimeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster ScanNetworks Command callback
+ * @param ssid
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterScanNetworksCallback(uint8_t * ssid, uint64_t breadcrumb, uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster UpdateThreadNetwork Command callback
+ * @param operationalDataset
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterUpdateThreadNetworkCallback(uint8_t * operationalDataset, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster UpdateWiFiNetwork Command callback
+ * @param ssid
+ * @param credentials
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterUpdateWiFiNetworkCallback(uint8_t * ssid, uint8_t * credentials, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
* @brief On/off Cluster Off Command callback
*/
\
ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+/** @brief Command description for ScanNetworks
+ *
+ * Command: ScanNetworks
+ * @param ssid OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterScanNetworks(ssid, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_NETWORKS_COMMAND_ID, "uuu", ssid, breadcrumb, timeoutMs);
+
+/** @brief Command description for ScanNetworksResponse
+ *
+ * Command: ScanNetworksResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ * @param wifiScanResults WiFiInterfaceScanResult []
+ * @param wifiScanResultsLen int
+ * @param threadScanResults ThreadInterfaceScanResult []
+ * @param threadScanResultsLen int
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterScanNetworksResponse(errorCode, debugText, wifiScanResults, wifiScanResultsLen, threadScanResults, \
+ threadScanResultsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID, "uubb", errorCode, debugText, wifiScanResults, \
+ wifiScanResultsLen, threadScanResults, threadScanResultsLen);
+
+/** @brief Command description for AddWiFiNetwork
+ *
+ * Command: AddWiFiNetwork
+ * @param ssid OCTET_STRING
+ * @param credentials OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
+
+/** @brief Command description for AddWiFiNetworkResponse
+ *
+ * Command: AddWiFiNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddWiFiNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for UpdateWiFiNetwork
+ *
+ * Command: UpdateWiFiNetwork
+ * @param ssid OCTET_STRING
+ * @param credentials OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
+
+/** @brief Command description for UpdateWiFiNetworkResponse
+ *
+ * Command: UpdateWiFiNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateWiFiNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for AddThreadNetwork
+ *
+ * Command: AddThreadNetwork
+ * @param operationalDataset OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
+
+/** @brief Command description for AddThreadNetworkResponse
+ *
+ * Command: AddThreadNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddThreadNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for UpdateThreadNetwork
+ *
+ * Command: UpdateThreadNetwork
+ * @param operationalDataset OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
+
+/** @brief Command description for UpdateThreadNetworkResponse
+ *
+ * Command: UpdateThreadNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateThreadNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for RemoveNetwork
+ *
+ * Command: RemoveNetwork
+ * @param NetworkID OCTET_STRING
+ * @param Breadcrumb INT64U
+ * @param TimeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterRemoveNetwork(NetworkID, Breadcrumb, TimeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_NETWORK_COMMAND_ID, "uuu", NetworkID, Breadcrumb, TimeoutMs);
+
+/** @brief Command description for RemoveNetworkResponse
+ *
+ * Command: RemoveNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterRemoveNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for EnableNetwork
+ *
+ * Command: EnableNetwork
+ * @param networkID OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterEnableNetwork(networkID, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
+
+/** @brief Command description for EnableNetworkResponse
+ *
+ * Command: EnableNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterEnableNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for DisableNetwork
+ *
+ * Command: DisableNetwork
+ * @param networkID OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterDisableNetwork(networkID, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
+
+/** @brief Command description for DisableNetworkResponse
+ *
+ * Command: DisableNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterDisableNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for GetLastNetworkCommissioningResult
+ *
+ * Command: GetLastNetworkCommissioningResult
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterGetLastNetworkCommissioningResult(timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID, "u", timeoutMs);
+
/** @brief Command description for LockDoor
*
* Command: LockDoor
ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID, "uuuub", startIndex, total, startIndex, count, \
endpointInformationRecordList, endpointInformationRecordListLen);
-/** @brief Command description for ScanNetworks
- *
- * Command: ScanNetworks
- * @param ssid OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterScanNetworks(ssid, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_SCAN_NETWORKS_COMMAND_ID, "uuu", ssid, breadcrumb, timeoutMs);
-
-/** @brief Command description for ScanNetworksResponse
- *
- * Command: ScanNetworksResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- * @param wifiScanResults WiFiInterfaceScanResult []
- * @param wifiScanResultsLen int
- * @param threadScanResults ThreadInterfaceScanResult []
- * @param threadScanResultsLen int
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterScanNetworksResponse(errorCode, debugText, wifiScanResults, wifiScanResultsLen, threadScanResults, \
- threadScanResultsLen) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID, "uubb", errorCode, debugText, wifiScanResults, \
- wifiScanResultsLen, threadScanResults, threadScanResultsLen);
-
-/** @brief Command description for AddWiFiNetwork
- *
- * Command: AddWiFiNetwork
- * @param ssid OCTET_STRING
- * @param credentials OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
-
-/** @brief Command description for AddWiFiNetworkResponse
- *
- * Command: AddWiFiNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddWiFiNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for UpdateWiFiNetwork
- *
- * Command: UpdateWiFiNetwork
- * @param ssid OCTET_STRING
- * @param credentials OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
-
-/** @brief Command description for UpdateWiFiNetworkResponse
- *
- * Command: UpdateWiFiNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateWiFiNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for AddThreadNetwork
- *
- * Command: AddThreadNetwork
- * @param operationalDataset OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
-
-/** @brief Command description for AddThreadNetworkResponse
- *
- * Command: AddThreadNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddThreadNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for UpdateThreadNetwork
- *
- * Command: UpdateThreadNetwork
- * @param operationalDataset OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
-
-/** @brief Command description for UpdateThreadNetworkResponse
- *
- * Command: UpdateThreadNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateThreadNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for RemoveNetwork
- *
- * Command: RemoveNetwork
- * @param NetworkID OCTET_STRING
- * @param Breadcrumb INT64U
- * @param TimeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterRemoveNetwork(NetworkID, Breadcrumb, TimeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_REMOVE_NETWORK_COMMAND_ID, "uuu", NetworkID, Breadcrumb, TimeoutMs);
-
-/** @brief Command description for RemoveNetworkResponse
- *
- * Command: RemoveNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterRemoveNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for EnableNetwork
- *
- * Command: EnableNetwork
- * @param networkID OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterEnableNetwork(networkID, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ENABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
-
-/** @brief Command description for EnableNetworkResponse
- *
- * Command: EnableNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterEnableNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for DisableNetwork
- *
- * Command: DisableNetwork
- * @param networkID OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterDisableNetwork(networkID, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_DISABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
-
-/** @brief Command description for DisableNetworkResponse
- *
- * Command: DisableNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterDisableNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for GetLastNetworkCommissioningResult
- *
- * Command: GetLastNetworkCommissioningResult
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterGetLastNetworkCommissioningResult(timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID, "u", timeoutMs);
-
/** @brief Command description for Bind
*
* Command: Bind
// Definitions for cluster: General Commissioning
#define ZCL_GENERAL_COMMISSIONING_CLUSTER_ID (0x0030)
+// Definitions for cluster: Network Commissioning
+#define ZCL_NETWORK_COMMISSIONING_CLUSTER_ID (0x0031)
+
// Definitions for cluster: Shade Configuration
#define ZCL_SHADE_CONFIG_CLUSTER_ID (0x0100)
// Definitions for cluster: ZLL Commissioning
#define ZCL_ZLL_COMMISSIONING_CLUSTER_ID (0x1000)
-// Definitions for cluster: Network Commissioning
-#define ZCL_NETWORK_COMMISSIONING_CLUSTER_ID (0xAAAA)
-
// Definitions for cluster: Binding
#define ZCL_BINDING_CLUSTER_ID (0xF000)
#define ZCL_COMMISSIONING_COMPLETE_COMMAND_ID (0x06)
#define ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID (0x07)
+// Commands for cluster: Network Commissioning
+#define ZCL_SCAN_NETWORKS_COMMAND_ID (0x00)
+#define ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_ADD_WI_FI_NETWORK_COMMAND_ID (0x02)
+#define ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID (0x04)
+#define ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_ADD_THREAD_NETWORK_COMMAND_ID (0x06)
+#define ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID (0x08)
+#define ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_REMOVE_NETWORK_COMMAND_ID (0x0A)
+#define ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID (0x0B)
+#define ZCL_ENABLE_NETWORK_COMMAND_ID (0x0C)
+#define ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_DISABLE_NETWORK_COMMAND_ID (0x0E)
+#define ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID (0x0F)
+#define ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID (0x10)
+
// Commands for cluster: Door Lock
#define ZCL_LOCK_DOOR_COMMAND_ID (0x00)
#define ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID (0x00)
#define ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID (0x42)
#define ZCL_GET_ENDPOINT_LIST_RESPONSE_COMMAND_ID (0x42)
-// Commands for cluster: Network Commissioning
-#define ZCL_SCAN_NETWORKS_COMMAND_ID (0x00)
-#define ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID (0x01)
-#define ZCL_ADD_WI_FI_NETWORK_COMMAND_ID (0x02)
-#define ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x03)
-#define ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID (0x04)
-#define ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x05)
-#define ZCL_ADD_THREAD_NETWORK_COMMAND_ID (0x06)
-#define ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x07)
-#define ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID (0x08)
-#define ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x09)
-#define ZCL_REMOVE_NETWORK_COMMAND_ID (0x0A)
-#define ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID (0x0B)
-#define ZCL_ENABLE_NETWORK_COMMAND_ID (0x0C)
-#define ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID (0x0D)
-#define ZCL_DISABLE_NETWORK_COMMAND_ID (0x0E)
-#define ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID (0x0F)
-#define ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID (0x10)
-
// Commands for cluster: Binding
#define ZCL_BIND_COMMAND_ID (0x00)
#define ZCL_UNBIND_COMMAND_ID (0x01)
#define ZAP_ATTRIBUTE_MASK(mask) ATTRIBUTE_MASK_##mask
// This is an array of EmberAfAttributeMetadata structures.
-#define GENERATED_ATTRIBUTE_COUNT 126
+#define GENERATED_ATTRIBUTE_COUNT 127
#define GENERATED_ATTRIBUTES \
{ \
{ 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 2 } }, /* Identify (server): cluster revision */ \
}, /* Basic (server): SoftwareVersion */ \
{ \
0x000A, ZAP_TYPE(CHAR_STRING), 64, ZAP_ATTRIBUTE_MASK(SINGLETON), { (uint8_t *) ZAP_LONG_DEFAULTS_INDEX(180) } \
- }, /* Basic (server): SoftwareVersionString */ \
- { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* General Commissioning (server): cluster revision */ \
+ }, /* Basic (server): SoftwareVersionString */ \
{ \
0x0000, ZAP_TYPE(OCTET_STRING), 8, 0, { (uint8_t *) ZAP_LONG_DEFAULTS_INDEX(244) } \
}, /* General Commissioning (server): FabricId */ \
{ \
0x0001, ZAP_TYPE(INT64U), 8, ZAP_ATTRIBUTE_MASK(WRITABLE), { (uint8_t *) ZAP_LONG_DEFAULTS_INDEX(252) } \
}, /* General Commissioning (server): Breadcrumb */ \
+ { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* General Commissioning (server): cluster revision */ \
+ { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Network Commissioning (server): cluster revision */ \
{ 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 3 } }, /* Door Lock (server): cluster revision */ \
{ 0x0000, ZAP_TYPE(ENUM8), 1, 0, { (uint8_t *) 2 } }, /* Door Lock (server): lock state */ \
{ 0x0001, ZAP_TYPE(ENUM8), 1, 0, { (uint8_t *) 0 } }, /* Door Lock (server): lock type */ \
}, /* IAS Zone (server): IAS CIE address */ \
{ 0x0011, ZAP_TYPE(INT8U), 1, 0, { (uint8_t *) 0xff } }, /* IAS Zone (server): Zone ID */ \
{ 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Low Power (server): cluster revision */ \
- { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Application Basic (server): cluster revision */ \
{ \
0x0000, ZAP_TYPE(OCTET_STRING), 32, 0, { (uint8_t *) ZAP_LONG_DEFAULTS_INDEX(522) } \
}, /* Application Basic (server): vendor name */ \
{ 0x0001, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0 } }, /* Application Basic (server): vendor id */ \
{ \
0x0002, ZAP_TYPE(OCTET_STRING), 32, 0, { (uint8_t *) ZAP_LONG_DEFAULTS_INDEX(554) } \
- }, /* Application Basic (server): application name */ \
- { 0x0003, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0 } }, /* Application Basic (server): product id */ \
+ }, /* Application Basic (server): application name */ \
+ { 0x0003, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0 } }, /* Application Basic (server): product id */ \
+ { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Application Basic (server): cluster revision */ \
{ \
0x0005, ZAP_TYPE(OCTET_STRING), 32, 0, { (uint8_t *) ZAP_LONG_DEFAULTS_INDEX(586) } \
}, /* Application Basic (server): application id */ \
{ 0x0006, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0 } }, /* Application Basic (server): catalog vendor id */ \
{ 0x0007, ZAP_TYPE(ENUM8), 1, 0, { (uint8_t *) 0x01 } }, /* Application Basic (server): application satus */ \
{ 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Binding (server): cluster revision */ \
- { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Media Playback (server): cluster revision */ \
{ 0x0000, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0 } }, /* Media Playback (server): current state */ \
+ { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Media Playback (server): cluster revision */ \
{ 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Content Launch (server): cluster revision */ \
{ 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 2 } }, /* On/off (server): cluster revision */ \
{ 0x0000, ZAP_TYPE(BOOLEAN), 1, 0, { (uint8_t *) 0x00 } }, /* On/off (server): on/off */ \
};
#define ZAP_CLUSTER_MASK(mask) CLUSTER_MASK_##mask
-#define GENERATED_CLUSTER_COUNT 19
+#define GENERATED_CLUSTER_COUNT 20
#define GENERATED_CLUSTERS \
{ \
{ 0x0003, \
{ \
0x0030, ZAP_ATTRIBUTE_INDEX(26), 3, 18, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: General Commissioning (server) */ \
+ { \
+ 0x0031, ZAP_ATTRIBUTE_INDEX(29), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
+ }, /* Endpoint: 1, Cluster: Network Commissioning (server) */ \
{ 0x0101, \
- ZAP_ATTRIBUTE_INDEX(29), \
+ ZAP_ATTRIBUTE_INDEX(30), \
4, \
5, \
ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(ATTRIBUTE_CHANGED_FUNCTION), \
chipFuncArrayDoorLockServer }, /* Endpoint: 1, Cluster: Door Lock (server) */ \
{ \
- 0x0103, ZAP_ATTRIBUTE_INDEX(33), 5, 7, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0x0103, ZAP_ATTRIBUTE_INDEX(34), 5, 7, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Barrier Control (server) */ \
{ 0x0300, \
- ZAP_ATTRIBUTE_INDEX(38), \
+ ZAP_ATTRIBUTE_INDEX(39), \
51, \
336, \
ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION), \
chipFuncArrayColorControlServer }, /* Endpoint: 1, Cluster: Color Control (server) */ \
{ \
- 0x0402, ZAP_ATTRIBUTE_INDEX(89), 4, 8, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0x0402, ZAP_ATTRIBUTE_INDEX(90), 4, 8, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Temperature Measurement (server) */ \
{ 0x0500, \
- ZAP_ATTRIBUTE_INDEX(93), \
+ ZAP_ATTRIBUTE_INDEX(94), \
6, \
16, \
ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION) | ZAP_CLUSTER_MASK(PRE_ATTRIBUTE_CHANGED_FUNCTION) | \
ZAP_CLUSTER_MASK(MESSAGE_SENT_FUNCTION), \
chipFuncArrayIasZoneServer }, /* Endpoint: 1, Cluster: IAS Zone (server) */ \
{ \
- 0x0508, ZAP_ATTRIBUTE_INDEX(99), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0x0508, ZAP_ATTRIBUTE_INDEX(100), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Low Power (server) */ \
{ \
- 0x050D, ZAP_ATTRIBUTE_INDEX(100), 8, 105, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0x050D, ZAP_ATTRIBUTE_INDEX(101), 8, 105, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Application Basic (server) */ \
{ \
- 0xF000, ZAP_ATTRIBUTE_INDEX(108), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0xF000, ZAP_ATTRIBUTE_INDEX(109), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Binding (server) */ \
{ \
- 0xF001, ZAP_ATTRIBUTE_INDEX(109), 2, 4, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0xF001, ZAP_ATTRIBUTE_INDEX(110), 2, 4, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Media Playback (server) */ \
{ \
- 0xF002, ZAP_ATTRIBUTE_INDEX(111), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0xF002, ZAP_ATTRIBUTE_INDEX(112), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Content Launch (server) */ \
{ 0x0006, \
- ZAP_ATTRIBUTE_INDEX(112), \
+ ZAP_ATTRIBUTE_INDEX(113), \
2, \
3, \
ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION), \
chipFuncArrayOnOffServer }, /* Endpoint: 2, Cluster: On/off (server) */ \
{ \
- 0x0028, ZAP_ATTRIBUTE_INDEX(114), 12, 254, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0x0028, ZAP_ATTRIBUTE_INDEX(115), 12, 254, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 2, Cluster: Basic (server) */ \
}
// This is an array of EmberAfEndpointType structures.
#define GENERATED_ENDPOINT_TYPES \
{ \
- { ZAP_CLUSTER_INDEX(0), 17, 780 }, { ZAP_CLUSTER_INDEX(17), 2, 257 }, \
+ { ZAP_CLUSTER_INDEX(0), 18, 782 }, { ZAP_CLUSTER_INDEX(18), 2, 257 }, \
}
// Largest attribute size is needed for various buffers
#define ATTRIBUTE_SINGLETONS_SIZE (508)
// Total size of attribute storage
-#define ATTRIBUTE_MAX_SIZE (1037)
+#define ATTRIBUTE_MAX_SIZE (1039)
// Number of fixed endpoints
#define FIXED_ENDPOINT_COUNT (2)
// Array of EmberAfCommandMetadata structs.
#define ZAP_COMMAND_MASK(mask) COMMAND_MASK_##mask
-#define EMBER_AF_GENERATED_COMMAND_COUNT (115)
+#define EMBER_AF_GENERATED_COMMAND_COUNT (132)
#define GENERATED_COMMANDS \
{ \
{ 0x0003, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Identify (server): Identify */ \
{ 0x0030, 0x06, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* General Commissioning (server): CommissioningComplete */ \
{ 0x0030, 0x07, \
ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* General Commissioning (server): CommissioningCompleteResponse */ \
+ { 0x0031, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): ScanNetworks */ \
+ { 0x0031, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): ScanNetworksResponse */ \
+ { 0x0031, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): AddWiFiNetwork */ \
+ { 0x0031, 0x03, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): AddWiFiNetworkResponse */ \
+ { 0x0031, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): UpdateWiFiNetwork */ \
+ { 0x0031, 0x05, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): UpdateWiFiNetworkResponse */ \
+ { 0x0031, 0x06, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): AddThreadNetwork */ \
+ { 0x0031, 0x07, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): AddThreadNetworkResponse */ \
+ { 0x0031, 0x08, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): UpdateThreadNetwork */ \
+ { 0x0031, 0x09, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): UpdateThreadNetworkResponse */ \
+ { 0x0031, 0x0A, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): RemoveNetwork */ \
+ { 0x0031, 0x0B, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): RemoveNetworkResponse */ \
+ { 0x0031, 0x0C, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): EnableNetwork */ \
+ { 0x0031, 0x0D, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): EnableNetworkResponse */ \
+ { 0x0031, 0x0E, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): DisableNetwork */ \
+ { 0x0031, 0x0F, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): DisableNetworkResponse */ \
+ { 0x0031, 0x10, \
+ ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): GetLastNetworkCommissioningResult */ \
{ 0x0101, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Door Lock (server): LockDoor */ \
{ 0x0101, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Door Lock (server): LockDoorResponse */ \
{ 0x0101, 0x01, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Door Lock (server): UnlockDoor */ \
#define EMBER_AF_LEVEL_CONTROL_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_LOW_POWER_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_MEDIA_PLAYBACK_CLUSTER_SERVER_ENDPOINT_COUNT (1)
+#define EMBER_AF_NETWORK_COMMISSIONING_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_ON_OFF_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_SCENES_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_TEMP_MEASUREMENT_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_PLUGIN_MEDIA_PLAYBACK_SERVER
#define EMBER_AF_PLUGIN_MEDIA_PLAYBACK
+// Use this macro to check if the server side of the Network Commissioning cluster is included
+#define ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER
+#define EMBER_AF_PLUGIN_NETWORK_COMMISSIONING_SERVER
+#define EMBER_AF_PLUGIN_NETWORK_COMMISSIONING
+
// Use this macro to check if the server side of the On/off cluster is included
#define ZCL_USING_ON_OFF_CLUSTER_SERVER
#define EMBER_AF_PLUGIN_ON_OFF_SERVER
#define CHIP_PRINTCLUSTER_GENERAL_COMMISSIONING_CLUSTER
#endif
+#if defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER { ZCL_NETWORK_COMMISSIONING_CLUSTER_ID, 49, "Network Commissioning" },
+#else
+#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER
+#endif
+
#if defined(ZCL_USING_SHADE_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_SHADE_CONFIG_CLUSTER_CLIENT)
#define CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER { ZCL_SHADE_CONFIG_CLUSTER_ID, 256, "Shade Configuration" },
#else
#define CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER
#endif
-#if defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_CLIENT)
-#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER { ZCL_NETWORK_COMMISSIONING_CLUSTER_ID, 43690, "Network Commissioning" },
-#else
-#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER
-#endif
-
#if defined(ZCL_USING_BINDING_CLUSTER_SERVER) || defined(ZCL_USING_BINDING_CLUSTER_CLIENT)
#define CHIP_PRINTCLUSTER_BINDING_CLUSTER { ZCL_BINDING_CLUSTER_ID, 61440, "Binding" },
#else
CHIP_PRINTCLUSTER_KEEPALIVE_CLUSTER \
CHIP_PRINTCLUSTER_BASIC_CLUSTER \
CHIP_PRINTCLUSTER_GENERAL_COMMISSIONING_CLUSTER \
+ CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER \
CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER \
CHIP_PRINTCLUSTER_DOOR_LOCK_CLUSTER \
CHIP_PRINTCLUSTER_WINDOW_COVERING_CLUSTER \
CHIP_PRINTCLUSTER_ELECTRICAL_MEASUREMENT_CLUSTER \
CHIP_PRINTCLUSTER_DIAGNOSTICS_CLUSTER \
CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER \
- CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER \
CHIP_PRINTCLUSTER_BINDING_CLUSTER \
CHIP_PRINTCLUSTER_MEDIA_PLAYBACK_CLUSTER \
CHIP_PRINTCLUSTER_CONTENT_LAUNCH_CLUSTER \
../third_party/connectedhomeip/src/app/clusters/content-launch-server \
../third_party/connectedhomeip/src/app/clusters/low-power-server \
../third_party/connectedhomeip/src/app/clusters/media-playback-server \
+ ../third_party/connectedhomeip/src/app/clusters/network-commissioning \
../third_party/connectedhomeip/src/app/clusters/temperature-measurement-server \
../third_party/connectedhomeip/src/app/clusters/scenes \
../third_party/connectedhomeip/src/app/clusters/basic \
"${chip_root}/src/app/clusters/basic/basic.cpp",
"${chip_root}/src/app/clusters/bindings/bindings.cpp",
"${chip_root}/src/app/clusters/level-control/level-control.cpp",
+ "${chip_root}/src/app/clusters/network-commissioning/network-commissioning-ember.cpp",
+ "${chip_root}/src/app/clusters/network-commissioning/network-commissioning.cpp",
"${chip_root}/src/app/clusters/on-off-server/on-off.cpp",
"${chip_root}/src/app/reporting/reporting-default-configuration.cpp",
"${chip_root}/src/app/reporting/reporting.cpp",
{
- "writeTime": "Tue Feb 16 2021 18:07:17 GMT+0100 (Central European Standard Time)",
+ "writeTime": "Fri Mar 12 2021 15:17:33 GMT+0800 (China Standard Time)",
"featureLevel": 11,
"creator": "zap",
"keyValuePairs": [
"deviceTypeProfileId": 260,
"clusters": [
{
- "name": "Basic",
- "code": 40,
+ "name": "Identify",
+ "code": 3,
"mfgCode": null,
- "define": "BASIC_CLUSTER",
+ "define": "IDENTIFY_CLUSTER",
"side": "client",
"enabled": 0,
- "commands": [],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "3",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ]
- },
- {
- "name": "Basic",
- "code": 40,
- "mfgCode": null,
- "define": "BASIC_CLUSTER",
- "side": "server",
- "enabled": 1,
"commands": [
{
- "name": "StartUp",
+ "name": "Identify",
"code": 0,
"mfgCode": null,
- "source": "server",
+ "source": "client",
"incoming": 1,
- "outgoing": 1
+ "outgoing": 0
},
{
- "name": "ShutDown",
+ "name": "IdentifyQuery",
"code": 1,
"mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "Leave",
- "code": 2,
- "mfgCode": null,
- "source": "server",
+ "source": "client",
"incoming": 1,
- "outgoing": 1
+ "outgoing": 0
}
],
"attributes": [
"name": "cluster revision",
"code": 65533,
"mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "3",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "InteractionModelVersion",
- "code": 0,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "VendorName",
- "code": 1,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "VendorID",
- "code": 2,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "ProductName",
- "code": 3,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "ProductID",
- "code": 4,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "UserLabel",
- "code": 5,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "Location",
- "code": 6,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "HardwareVersion",
- "code": 7,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "HardwareVersionString",
- "code": 8,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "SoftwareVersion",
- "code": 9,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "SoftwareVersionString",
- "code": 10,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ]
- },
- {
- "name": "Identify",
- "code": 3,
- "mfgCode": null,
- "define": "IDENTIFY_CLUSTER",
- "side": "client",
- "enabled": 0,
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
"side": "client",
"included": 1,
"storageOption": "RAM",
"maxInterval": 65344,
"reportableChange": 0
}
- ],
- "commands": [
- {
- "name": "Identify",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "IdentifyQuery",
- "code": 1,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- }
]
},
{
"define": "IDENTIFY_CLUSTER",
"side": "server",
"enabled": 0,
- "commands": [
- {
- "name": "IdentifyQueryResponse",
- "code": 0,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- }
- ],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
+ ],
+ "commands": [
+ {
+ "name": "IdentifyQueryResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ }
]
},
{
"define": "GROUPS_CLUSTER",
"side": "client",
"enabled": 0,
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
"commands": [
{
"name": "AddGroup",
"incoming": 1,
"outgoing": 0
}
- ],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "3",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
]
},
{
"maxInterval": 65344,
"reportableChange": 0
}
- ]
- },
- {
- "name": "Scenes",
- "code": 5,
- "mfgCode": null,
- "define": "SCENES_CLUSTER",
- "side": "server",
- "enabled": 0,
+ ]
+ },
+ {
+ "name": "Scenes",
+ "code": 5,
+ "mfgCode": null,
+ "define": "SCENES_CLUSTER",
+ "side": "server",
+ "enabled": 0,
+ "commands": [
+ {
+ "name": "AddSceneResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "ViewSceneResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveSceneResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveAllScenesResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "StoreSceneResponse",
+ "code": 4,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "GetSceneMembershipResponse",
+ "code": 6,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ }
+ ],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
- ],
- "commands": [
- {
- "name": "AddSceneResponse",
- "code": 0,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "ViewSceneResponse",
- "code": 1,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "RemoveSceneResponse",
- "code": 2,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "RemoveAllScenesResponse",
- "code": 3,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "StoreSceneResponse",
- "code": 4,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "GetSceneMembershipResponse",
- "code": 6,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- }
]
},
{
"reportableChange": 0
}
]
- }
- ]
- },
- {
- "name": "Anonymous Endpoint Type",
- "deviceTypeName": "LO-colordimmablelight",
- "deviceTypeCode": 258,
- "deviceTypeProfileId": 260,
- "clusters": [
+ },
{
"name": "Basic",
"code": 40,
"reportableChange": 0
}
]
- },
+ }
+ ]
+ },
+ {
+ "name": "Anonymous Endpoint Type",
+ "deviceTypeName": "LO-colordimmablelight",
+ "deviceTypeCode": 258,
+ "deviceTypeProfileId": 260,
+ "clusters": [
{
"name": "Identify",
"code": 3,
"define": "IDENTIFY_CLUSTER",
"side": "client",
"enabled": 0,
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "2",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ],
"commands": [
{
"name": "Identify",
"incoming": 1,
"outgoing": 0
}
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "2",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
]
},
{
"defaultValue": "4",
"reportable": 0,
"minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ]
- },
- {
- "name": "Color Control",
- "code": 768,
- "mfgCode": null,
- "define": "COLOR_CONTROL_CLUSTER",
- "side": "client",
- "enabled": 0,
- "commands": [
- {
- "name": "MoveToHue",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "MoveHue",
- "code": 1,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "StepHue",
- "code": 2,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "MoveToSaturation",
- "code": 3,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "MoveSaturation",
- "code": 4,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "StepSaturation",
- "code": 5,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "MoveToHueAndSaturation",
- "code": 6,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "MoveToColor",
- "code": 7,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "MoveColor",
- "code": 8,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "StepColor",
- "code": 9,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "EnhancedMoveToHue",
- "code": 64,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "EnhancedMoveHue",
- "code": 65,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "EnhancedStepHue",
- "code": 66,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "EnhancedMoveToHueAndSaturation",
- "code": 67,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "ColorLoopSet",
- "code": 68,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "StopMoveStep",
- "code": 71,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
+ "maxInterval": 65344,
+ "reportableChange": 0
}
- ],
+ ]
+ },
+ {
+ "name": "Basic",
+ "code": 40,
+ "mfgCode": null,
+ "define": "BASIC_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "commands": [],
"attributes": [
{
"name": "cluster revision",
"side": "client",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
"defaultValue": "3",
"reportable": 0,
]
},
{
- "name": "Color Control",
- "code": 768,
+ "name": "Basic",
+ "code": 40,
"mfgCode": null,
- "define": "COLOR_CONTROL_CLUSTER",
+ "define": "BASIC_CLUSTER",
"side": "server",
- "enabled": 0,
- "commands": [],
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "StartUp",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ShutDown",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "Leave",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
"attributes": [
{
"name": "cluster revision",
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
"defaultValue": "3",
"reportable": 0,
"reportableChange": 0
},
{
- "name": "current hue",
+ "name": "InteractionModelVersion",
"code": 0,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "0x00",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "current saturation",
+ "name": "VendorName",
"code": 1,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "0x00",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "remaining time",
+ "name": "VendorID",
"code": 2,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "0x0000",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "current x",
+ "name": "ProductName",
"code": 3,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "0x616B",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "current y",
+ "name": "ProductID",
"code": 4,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "0x607D",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "color temperature",
- "code": 7,
+ "name": "UserLabel",
+ "code": 5,
"mfgCode": null,
"side": "server",
- "included": 0,
+ "included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "0x00FA",
- "reportable": 1,
+ "defaultValue": "",
+ "reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "color mode",
- "code": 8,
+ "name": "Location",
+ "code": 6,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "0x01",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "color control options",
- "code": 15,
+ "name": "HardwareVersion",
+ "code": 7,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
"defaultValue": "0x00",
"reportable": 0,
"reportableChange": 0
},
{
- "name": "number of primaries",
- "code": 16,
+ "name": "HardwareVersionString",
+ "code": 8,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
"defaultValue": "",
"reportable": 0,
"reportableChange": 0
},
{
- "name": "primary 1 x",
- "code": 17,
+ "name": "SoftwareVersion",
+ "code": 9,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "SoftwareVersionString",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
"bounded": 0,
"defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Color Control",
+ "code": 768,
+ "mfgCode": null,
+ "define": "COLOR_CONTROL_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "commands": [
+ {
+ "name": "MoveToHue",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "MoveHue",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "StepHue",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "MoveToSaturation",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "MoveSaturation",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "StepSaturation",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "MoveToHueAndSaturation",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "MoveToColor",
+ "code": 7,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "MoveColor",
+ "code": 8,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "StepColor",
+ "code": 9,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "EnhancedMoveToHue",
+ "code": 64,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "EnhancedMoveHue",
+ "code": 65,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "EnhancedStepHue",
+ "code": 66,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "EnhancedMoveToHueAndSaturation",
+ "code": 67,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
},
{
- "name": "primary 1 y",
- "code": 18,
+ "name": "ColorLoopSet",
+ "code": 68,
"mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
},
{
- "name": "primary 1 intensity",
- "code": 19,
+ "name": "StopMoveStep",
+ "code": 71,
"mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ }
+ ],
+ "attributes": [
{
- "name": "primary 2 x",
- "code": 21,
+ "name": "cluster revision",
+ "code": 65533,
"mfgCode": null,
- "side": "server",
+ "side": "client",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "3",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
- },
+ }
+ ]
+ },
+ {
+ "name": "Color Control",
+ "code": 768,
+ "mfgCode": null,
+ "define": "COLOR_CONTROL_CLUSTER",
+ "side": "server",
+ "enabled": 0,
+ "commands": [],
+ "attributes": [
{
- "name": "primary 2 y",
- "code": 22,
+ "name": "cluster revision",
+ "code": 65533,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "3",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "primary 2 intensity",
- "code": 23,
+ "name": "current hue",
+ "code": 0,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0x00",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "primary 3 x",
- "code": 25,
+ "name": "current saturation",
+ "code": 1,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0x00",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "primary 3 y",
- "code": 26,
+ "name": "remaining time",
+ "code": 2,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0x0000",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "primary 3 intensity",
- "code": 27,
+ "name": "current x",
+ "code": 3,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0x616B",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "primary 4 x",
- "code": 32,
+ "name": "current y",
+ "code": 4,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0x607D",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "primary 4 y",
- "code": 33,
+ "name": "color temperature",
+ "code": 7,
"mfgCode": null,
"side": "server",
- "included": 1,
+ "included": 0,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
- "reportable": 0,
+ "defaultValue": "0x00FA",
+ "reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "primary 4 intensity",
- "code": 34,
+ "name": "color mode",
+ "code": 8,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0x01",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "primary 5 x",
- "code": 36,
+ "name": "color control options",
+ "code": 15,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0x00",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "primary 5 y",
- "code": 37,
+ "name": "number of primaries",
+ "code": 16,
"mfgCode": null,
"side": "server",
"included": 1,
"reportableChange": 0
},
{
- "name": "primary 5 intensity",
- "code": 38,
+ "name": "primary 1 x",
+ "code": 17,
"mfgCode": null,
"side": "server",
"included": 1,
"reportableChange": 0
},
{
- "name": "primary 6 x",
- "code": 40,
+ "name": "primary 1 y",
+ "code": 18,
"mfgCode": null,
"side": "server",
"included": 1,
"reportableChange": 0
},
{
- "name": "primary 6 y",
- "code": 41,
+ "name": "primary 1 intensity",
+ "code": 19,
"mfgCode": null,
"side": "server",
"included": 1,
"reportableChange": 0
},
{
- "name": "primary 6 intensity",
- "code": 42,
+ "name": "primary 2 x",
+ "code": 21,
"mfgCode": null,
"side": "server",
"included": 1,
"reportableChange": 0
},
{
- "name": "couple color temp to level min-mireds",
- "code": 16397,
+ "name": "primary 2 y",
+ "code": 22,
"mfgCode": null,
"side": "server",
"included": 1,
"reportableChange": 0
},
{
- "name": "start up color temperature mireds",
- "code": 16400,
+ "name": "primary 2 intensity",
+ "code": 23,
"mfgCode": null,
"side": "server",
"included": 1,
"reportableChange": 0
},
{
- "name": "enhanced current hue",
- "code": 16384,
+ "name": "primary 3 x",
+ "code": 25,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0x0000",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "enhanced color mode",
- "code": 16385,
+ "name": "primary 3 y",
+ "code": 26,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0x01",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "color loop active",
- "code": 16386,
+ "name": "primary 3 intensity",
+ "code": 27,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0x00",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "color loop direction",
- "code": 16387,
+ "name": "primary 4 x",
+ "code": 32,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0x00",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "color loop time",
- "code": 16388,
+ "name": "primary 4 y",
+ "code": 33,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0x0019",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "color loop start enhanced hue",
- "code": 16389,
+ "name": "primary 4 intensity",
+ "code": 34,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0x2300",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "color loop stored enhanced hue",
- "code": 16390,
+ "name": "primary 5 x",
+ "code": 36,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0x0000",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "color capabilities",
- "code": 16394,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x0000",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ]
- },
- {
- "name": "Occupancy Sensing",
- "code": 1030,
- "mfgCode": null,
- "define": "OCCUPANCY_SENSING_CLUSTER",
- "side": "client",
- "enabled": 0,
- "commands": [],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "2",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ]
- },
- {
- "name": "Occupancy Sensing",
- "code": 1030,
- "mfgCode": null,
- "define": "OCCUPANCY_SENSING_CLUSTER",
- "side": "server",
- "enabled": 0,
- "commands": [],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
+ "name": "primary 5 y",
+ "code": 37,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "occupancy",
- "code": 0,
+ "name": "primary 5 intensity",
+ "code": 38,
"mfgCode": null,
"side": "server",
"included": 1,
"singleton": 0,
"bounded": 0,
"defaultValue": "",
- "reportable": 1,
+ "reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "occupancy sensor type",
- "code": 1,
+ "name": "primary 6 x",
+ "code": 40,
"mfgCode": null,
"side": "server",
"included": 1,
"reportableChange": 0
},
{
- "name": "occupancy sensor type bitmap",
- "code": 2,
+ "name": "primary 6 y",
+ "code": 41,
"mfgCode": null,
"side": "server",
"included": 1,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
- }
- ]
- },
- {
- "name": "ZLL Commissioning",
- "code": 4096,
- "mfgCode": null,
- "define": "ZLL_COMMISSIONING_CLUSTER",
- "side": "client",
- "enabled": 0,
- "commands": [
- {
- "name": "ScanRequest",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "DeviceInformationRequest",
- "code": 2,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "IdentifyRequest",
- "code": 6,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "ResetToFactoryNewRequest",
- "code": 7,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "NetworkStartRequest",
- "code": 16,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "NetworkJoinRouterRequest",
- "code": 18,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "NetworkJoinEndDeviceRequest",
- "code": 20,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "NetworkUpdateRequest",
- "code": 22,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "GetGroupIdentifiersRequest",
- "code": 65,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
},
{
- "name": "GetEndpointListRequest",
- "code": 66,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- }
- ],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
+ "name": "primary 6 intensity",
+ "code": 42,
"mfgCode": null,
- "side": "client",
+ "side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0x0001",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
- }
- ]
- },
- {
- "name": "ZLL Commissioning",
- "code": 4096,
- "mfgCode": null,
- "define": "ZLL_COMMISSIONING_CLUSTER",
- "side": "server",
- "enabled": 0,
- "commands": [
- {
- "name": "ScanResponse",
- "code": 1,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "DeviceInformationResponse",
- "code": 3,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "NetworkStartResponse",
- "code": 17,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "NetworkJoinRouterResponse",
- "code": 19,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "NetworkJoinEndDeviceResponse",
- "code": 21,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "EndpointInformation",
- "code": 64,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "GetGroupIdentifiersResponse",
- "code": 65,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
},
{
- "name": "GetEndpointListResponse",
- "code": 66,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- }
- ],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
+ "name": "couple color temp to level min-mireds",
+ "code": 16397,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0x0001",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
- }
- ]
- }
- ]
- },
- {
- "name": "Anonymous Endpoint Type",
- "deviceTypeName": "LO-colortemperaturelight",
- "deviceTypeCode": 268,
- "deviceTypeProfileId": 260,
- "clusters": [
- {
- "name": "Basic",
- "code": 0,
- "mfgCode": null,
- "define": "BASIC_CLUSTER",
- "side": "client",
- "enabled": 0,
- "commands": [],
- "attributes": [
+ },
{
- "name": "cluster revision",
- "code": 65533,
+ "name": "start up color temperature mireds",
+ "code": 16400,
"mfgCode": null,
- "side": "client",
+ "side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "3",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
- }
- ]
- },
- {
- "name": "Basic",
- "code": 0,
- "mfgCode": null,
- "define": "BASIC_CLUSTER",
- "side": "server",
- "enabled": 0,
- "commands": [],
- "attributes": [
+ },
{
- "name": "cluster revision",
- "code": 65533,
+ "name": "enhanced current hue",
+ "code": 16384,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "3",
+ "defaultValue": "0x0000",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "ZCL version",
- "code": 0,
+ "name": "enhanced color mode",
+ "code": 16385,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "0x08",
+ "defaultValue": "0x01",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "application version",
- "code": 1,
+ "name": "color loop active",
+ "code": 16386,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
"defaultValue": "0x00",
"reportable": 0,
"reportableChange": 0
},
{
- "name": "stack version",
- "code": 2,
+ "name": "color loop direction",
+ "code": 16387,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
"defaultValue": "0x00",
"reportable": 0,
"reportableChange": 0
},
{
- "name": "hardware version",
- "code": 3,
+ "name": "color loop time",
+ "code": 16388,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "0x00",
+ "defaultValue": "0x0019",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "manufacturer name",
- "code": 4,
+ "name": "color loop start enhanced hue",
+ "code": 16389,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0x2300",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "model identifier",
- "code": 5,
+ "name": "color loop stored enhanced hue",
+ "code": 16390,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0x0000",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "date code",
- "code": 6,
+ "name": "color capabilities",
+ "code": 16394,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0x0000",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
- },
+ }
+ ]
+ },
+ {
+ "name": "Occupancy Sensing",
+ "code": 1030,
+ "mfgCode": null,
+ "define": "OCCUPANCY_SENSING_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "commands": [],
+ "attributes": [
{
- "name": "power source",
- "code": 7,
+ "name": "cluster revision",
+ "code": 65533,
"mfgCode": null,
- "side": "server",
+ "side": "client",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "0x00",
+ "defaultValue": "2",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
- },
+ }
+ ]
+ },
+ {
+ "name": "Occupancy Sensing",
+ "code": 1030,
+ "mfgCode": null,
+ "define": "OCCUPANCY_SENSING_CLUSTER",
+ "side": "server",
+ "enabled": 0,
+ "commands": [],
+ "attributes": [
{
- "name": "generic device class",
- "code": 8,
+ "name": "cluster revision",
+ "code": 65533,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "0xFF",
+ "defaultValue": "2",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "generic device type",
- "code": 9,
+ "name": "occupancy",
+ "code": 0,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "0xFF",
- "reportable": 0,
+ "defaultValue": "",
+ "reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "product code",
- "code": 10,
+ "name": "occupancy sensor type",
+ "code": 1,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
"defaultValue": "",
"reportable": 0,
"reportableChange": 0
},
{
- "name": "product url",
- "code": 11,
+ "name": "occupancy sensor type bitmap",
+ "code": 2,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
"defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "ZLL Commissioning",
+ "code": 4096,
+ "mfgCode": null,
+ "define": "ZLL_COMMISSIONING_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "commands": [
+ {
+ "name": "ScanRequest",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
},
{
- "name": "sw build id",
- "code": 16384,
+ "name": "DeviceInformationRequest",
+ "code": 2,
"mfgCode": null,
- "side": "server",
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "IdentifyRequest",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "ResetToFactoryNewRequest",
+ "code": 7,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "NetworkStartRequest",
+ "code": 16,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "NetworkJoinRouterRequest",
+ "code": 18,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "NetworkJoinEndDeviceRequest",
+ "code": 20,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "NetworkUpdateRequest",
+ "code": 22,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "GetGroupIdentifiersRequest",
+ "code": 65,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "GetEndpointListRequest",
+ "code": 66,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0x0001",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
]
},
{
- "name": "Identify",
- "code": 3,
+ "name": "ZLL Commissioning",
+ "code": 4096,
"mfgCode": null,
- "define": "IDENTIFY_CLUSTER",
- "side": "client",
+ "define": "ZLL_COMMISSIONING_CLUSTER",
+ "side": "server",
"enabled": 0,
+ "commands": [
+ {
+ "name": "ScanResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "DeviceInformationResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "NetworkStartResponse",
+ "code": 17,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "NetworkJoinRouterResponse",
+ "code": 19,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "NetworkJoinEndDeviceResponse",
+ "code": 21,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "EndpointInformation",
+ "code": 64,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "GetGroupIdentifiersResponse",
+ "code": 65,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "GetEndpointListResponse",
+ "code": 66,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ }
+ ],
"attributes": [
{
"name": "cluster revision",
"code": 65533,
"mfgCode": null,
- "side": "client",
+ "side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": "0x0001",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
}
- ],
+ ]
+ }
+ ]
+ },
+ {
+ "name": "Anonymous Endpoint Type",
+ "deviceTypeName": "LO-colortemperaturelight",
+ "deviceTypeCode": 268,
+ "deviceTypeProfileId": 260,
+ "clusters": [
+ {
+ "name": "Identify",
+ "code": 3,
+ "mfgCode": null,
+ "define": "IDENTIFY_CLUSTER",
+ "side": "client",
+ "enabled": 0,
"commands": [
{
"name": "Identify",
"incoming": 1,
"outgoing": 0
}
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "2",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
]
},
{
"define": "IDENTIFY_CLUSTER",
"side": "server",
"enabled": 0,
- "commands": [
- {
- "name": "IdentifyQueryResponse",
- "code": 0,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- }
- ],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
+ ],
+ "commands": [
+ {
+ "name": "IdentifyQueryResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ }
]
},
{
"define": "GROUPS_CLUSTER",
"side": "client",
"enabled": 0,
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
"commands": [
{
"name": "AddGroup",
"incoming": 1,
"outgoing": 0
}
- ],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "3",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
]
},
{
"deviceTypeProfileId": 43981,
"clusters": [
{
- "name": "Basic",
- "code": 0,
+ "name": "Network Commissioning",
+ "code": 49,
"mfgCode": null,
- "define": "BASIC_CLUSTER",
+ "define": "NETWORK_COMMISSIONING_CLUSTER",
"side": "client",
"enabled": 0,
- "commands": [
- {
- "name": "ResetToFactoryDefaults",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- }
- ],
"attributes": [
{
"name": "cluster revision",
"side": "client",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "3",
+ "defaultValue": "0x0001",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
}
+ ],
+ "commands": [
+ {
+ "name": "ScanNetworks",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "AddWiFiNetwork",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "UpdateWiFiNetwork",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "AddThreadNetwork",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "UpdateThreadNetwork",
+ "code": 8,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "RemoveNetwork",
+ "code": 10,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "EnableNetwork",
+ "code": 12,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "DisableNetwork",
+ "code": 14,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetLastNetworkCommissioningResult",
+ "code": 16,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ }
]
},
{
- "name": "Basic",
- "code": 0,
+ "name": "Network Commissioning",
+ "code": 49,
"mfgCode": null,
- "define": "BASIC_CLUSTER",
+ "define": "NETWORK_COMMISSIONING_CLUSTER",
"side": "server",
"enabled": 1,
- "commands": [],
- "attributes": [
+ "commands": [
{
- "name": "cluster revision",
- "code": 65533,
+ "name": "ScanNetworksResponse",
+ "code": 1,
"mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "3",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
},
{
- "name": "ZCL version",
- "code": 0,
+ "name": "AddWiFiNetworkResponse",
+ "code": 3,
"mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "0x08",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
},
{
- "name": "power source",
+ "name": "UpdateWiFiNetworkResponse",
+ "code": 5,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "AddThreadNetworkResponse",
"code": 7,
"mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "UpdateThreadNetworkResponse",
+ "code": 9,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveNetworkResponse",
+ "code": 11,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "EnableNetworkResponse",
+ "code": 13,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "DisableNetworkResponse",
+ "code": 15,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "0x00",
+ "defaultValue": "0x0001",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"networkId": 0
}
]
-}
+}
\ No newline at end of file
@end
/**
+ * Cluster Network Commissioning
+ *
+ */
+@interface CHIPNetworkCommissioning : CHIPCluster
+
+- (void)addThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)addWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)disableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)enableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)getLastNetworkCommissioningResult:(uint32_t)timeoutMs completionHandler:(ResponseHandler)completionHandler;
+- (void)removeNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)scanNetworks:(NSData *)ssid
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)updateThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)updateWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+
+- (void)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+@end
+
+/**
* Cluster On/off
*
*/
#import "CHIPDevice.h"
#import "CHIPDevice_Internal.h"
-#import "ChipError.h"
+#import "CHIPError.h"
#import "gen/CHIPClientCallbacks.h"
#import "gen/CHIPClustersObjc.h"
bool mKeepAlive;
};
+class CHIPInt64uAttributeCallbackBridge : public Callback::Callback<Int64uAttributeCallback> {
+public:
+ CHIPInt64uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+ : Callback::Callback<Int64uAttributeCallback>(CallbackFn, this)
+ , mHandler(handler)
+ , mQueue(queue)
+ , mKeepAlive(keepAlive)
+ {
+ }
+
+ ~CHIPInt64uAttributeCallbackBridge() {};
+
+ static void CallbackFn(void * context, uint64_t value)
+ {
+ CHIPInt64uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt64uAttributeCallbackBridge *>(context);
+ if (callback && callback->mQueue) {
+ dispatch_async(callback->mQueue, ^{
+ callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedLongLong:value] });
+ if (!callback->mKeepAlive) {
+ callback->Cancel();
+ delete callback;
+ }
+ });
+ }
+ };
+
+private:
+ ResponseHandler mHandler;
+ dispatch_queue_t mQueue;
+ bool mKeepAlive;
+};
+
class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
public:
CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
@end
+@interface CHIPNetworkCommissioning ()
+@property (readonly) Controller::NetworkCommissioningCluster cppCluster;
+@end
+
+@implementation CHIPNetworkCommissioning
+
+- (Controller::ClusterBase *)getCluster
+{
+ return &_cppCluster;
+}
+
+- (void)addThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterAddThreadNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterAddThreadNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.AddThreadNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) operationalDataset.bytes, operationalDataset.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)addWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterAddWiFiNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterAddWiFiNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.AddWiFiNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) ssid.bytes, ssid.length),
+ chip::ByteSpan((const uint8_t *) credentials.bytes, credentials.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)disableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterDisableNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterDisableNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.DisableNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) networkID.bytes, networkID.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)enableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterEnableNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterEnableNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.EnableNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) networkID.bytes, networkID.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)getLastNetworkCommissioningResult:(uint32_t)timeoutMs completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.GetLastNetworkCommissioningResult(onSuccess->Cancel(), onFailure->Cancel(), timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)removeNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterRemoveNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterRemoveNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.RemoveNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) networkID.bytes, networkID.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)scanNetworks:(NSData *)ssid
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterScanNetworksResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterScanNetworksResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.ScanNetworks(
+ onSuccess->Cancel(), onFailure->Cancel(), chip::ByteSpan((const uint8_t *) ssid.bytes, ssid.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)updateThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterUpdateThreadNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterUpdateThreadNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.UpdateThreadNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) operationalDataset.bytes, operationalDataset.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)updateWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterUpdateWiFiNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterUpdateWiFiNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.UpdateWiFiNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) ssid.bytes, ssid.length),
+ chip::ByteSpan((const uint8_t *) credentials.bytes, credentials.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+
+- (void)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+ CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+
+@end
+
@interface CHIPOnOff ()
@property (readonly) Controller::OnOffCluster cppCluster;
@end
} // namespace LevelControl
+namespace NetworkCommissioning {
+
+void DispatchServerCommand(app::Command * command, CommandId commandId, EndpointId endpointId, TLV::TLVReader & dataTlv)
+{
+ {
+ switch (commandId)
+ {
+ case ZCL_ADD_THREAD_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(operationalDataset);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterAddThreadNetworkCallback(const_cast<uint8_t *>(operationalDataset), breadcrumb,
+ timeoutMs);
+ break;
+ }
+ case ZCL_ADD_WI_FI_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * ssid;
+ const uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(ssid);
+ break;
+ case 1:
+ TLVError = dataTlv.GetDataPtr(credentials);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 3:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterAddWiFiNetworkCallback(const_cast<uint8_t *>(ssid),
+ const_cast<uint8_t *>(credentials), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_DISABLE_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(networkID);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterDisableNetworkCallback(const_cast<uint8_t *>(networkID), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_ENABLE_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(networkID);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterEnableNetworkCallback(const_cast<uint8_t *>(networkID), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterGetLastNetworkCommissioningResultCallback(timeoutMs);
+ break;
+ }
+ case ZCL_REMOVE_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * NetworkID;
+ uint64_t Breadcrumb;
+ uint32_t TimeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(NetworkID);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(Breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(TimeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterRemoveNetworkCallback(const_cast<uint8_t *>(NetworkID), Breadcrumb, TimeoutMs);
+ break;
+ }
+ case ZCL_SCAN_NETWORKS_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * ssid;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(ssid);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterScanNetworksCallback(const_cast<uint8_t *>(ssid), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(operationalDataset);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterUpdateThreadNetworkCallback(const_cast<uint8_t *>(operationalDataset), breadcrumb,
+ timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * ssid;
+ const uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(ssid);
+ break;
+ case 1:
+ TLVError = dataTlv.GetDataPtr(credentials);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 3:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterUpdateWiFiNetworkCallback(const_cast<uint8_t *>(ssid),
+ const_cast<uint8_t *>(credentials), breadcrumb, timeoutMs);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ // TODO: Encode response for command not found
+ ChipLogError(Zcl, "Unknown command %" PRIx16 " for cluster %" PRIx16, commandId, ZCL_NETWORK_COMMISSIONING_CLUSTER_ID);
+ break;
+ }
+ }
+ }
+}
+
+} // namespace NetworkCommissioning
+
namespace OnOff {
void DispatchServerCommand(app::Command * command, CommandId commandId, EndpointId endpointId, TLV::TLVReader & dataTlv)
case ZCL_LEVEL_CONTROL_CLUSTER_ID:
clusters::LevelControl::DispatchServerCommand(apCommandObj, aCommandId, aEndPointId, aReader);
break;
+ case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
+ clusters::NetworkCommissioning::DispatchServerCommand(apCommandObj, aCommandId, aEndPointId, aReader);
+ break;
case ZCL_ON_OFF_CLUSTER_ID:
clusters::OnOff::DispatchServerCommand(apCommandObj, aCommandId, aEndPointId, aReader);
break;
#define ZCL_FABRIC_ID_ATTRIBUTE_ID (0x0000)
#define ZCL_BREADCRUMB_ATTRIBUTE_ID (0x0001)
+// Attribute ids for cluster: Network Commissioning
+
+// Client attributes
+
+// Server attributes
+
// Attribute ids for cluster: Shade Configuration
// Client attributes
// Server attributes
-// Attribute ids for cluster: Network Commissioning
-
-// Client attributes
-
-// Server attributes
-
// Attribute ids for cluster: Binding
// Client attributes
EmberAfStatus emberAfBasicClusterServerCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfLevelControlClusterServerCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfNetworkCommissioningClusterServerCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfOnOffClusterServerCommandParse(EmberAfClusterCommand * cmd);
static EmberAfStatus status(bool wasHandled, bool clusterExists, bool mfgSpecific)
case ZCL_LEVEL_CONTROL_CLUSTER_ID:
result = emberAfLevelControlClusterServerCommandParse(cmd);
break;
+ case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
+ result = emberAfNetworkCommissioningClusterServerCommandParse(cmd);
+ break;
case ZCL_ON_OFF_CLUSTER_ID:
result = emberAfOnOffClusterServerCommandParse(cmd);
break;
}
return status(wasHandled, true, cmd->mfgSpecific);
}
+EmberAfStatus emberAfNetworkCommissioningClusterServerCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_ADD_THREAD_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ operationalDataset = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(operationalDataset) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterAddThreadNetworkCallback(operationalDataset, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_ADD_WI_FI_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * ssid;
+ uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ ssid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(ssid) + 1u);
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ credentials = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(credentials) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterAddWiFiNetworkCallback(ssid, credentials, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_DISABLE_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ networkID = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(networkID) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterDisableNetworkCallback(networkID, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_ENABLE_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ networkID = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(networkID) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterEnableNetworkCallback(networkID, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterGetLastNetworkCommissioningResultCallback(timeoutMs);
+ break;
+ }
+ case ZCL_REMOVE_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * NetworkID;
+ uint64_t Breadcrumb;
+ uint32_t TimeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ NetworkID = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(NetworkID) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ Breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ TimeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterRemoveNetworkCallback(NetworkID, Breadcrumb, TimeoutMs);
+ break;
+ }
+ case ZCL_SCAN_NETWORKS_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * ssid;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ ssid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(ssid) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterScanNetworksCallback(ssid, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ operationalDataset = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(operationalDataset) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterUpdateThreadNetworkCallback(operationalDataset, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * ssid;
+ uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ ssid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(ssid) + 1u);
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ credentials = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(credentials) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterUpdateWiFiNetworkCallback(ssid, credentials, breadcrumb, timeoutMs);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
EmberAfStatus emberAfOnOffClusterServerCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
case ZCL_LEVEL_CONTROL_CLUSTER_ID:
emberAfLevelControlClusterInitCallback(endpoint);
break;
+ case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
+ emberAfNetworkCommissioningClusterInitCallback(endpoint);
+ break;
case ZCL_ON_OFF_CLUSTER_ID:
emberAfOnOffClusterInitCallback(endpoint);
break;
// To prevent warning
(void) endpoint;
}
+void __attribute__((weak)) emberAfNetworkCommissioningClusterInitCallback(EndpointId endpoint)
+{
+ // To prevent warning
+ (void) endpoint;
+}
void __attribute__((weak)) emberAfOnOffClusterInitCallback(EndpointId endpoint)
{
// To prevent warning
*/
void emberAfLevelControlClusterInitCallback(chip::EndpointId endpoint);
+/** @brief Network Commissioning Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfNetworkCommissioningClusterInitCallback(chip::EndpointId endpoint);
+
/** @brief On/off Cluster Init
*
* Cluster Init
void emberAfLevelControlClusterServerTickCallback(chip::EndpointId endpoint);
//
+// Network Commissioning Cluster server
+//
+
+/** @brief Network Commissioning Cluster Server Init
+ *
+ * Server Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfNetworkCommissioningClusterServerInitCallback(chip::EndpointId endpoint);
+
+/** @brief Network Commissioning Cluster Server Attribute Changed
+ *
+ * Server Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfNetworkCommissioningClusterServerAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Network Commissioning Cluster Server Manufacturer Specific Attribute Changed
+ *
+ * Server Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfNetworkCommissioningClusterServerManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Network Commissioning Cluster Server Message Sent
+ *
+ * Server Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfNetworkCommissioningClusterServerMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Network Commissioning Cluster Server Pre Attribute Changed
+ *
+ * server Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfNetworkCommissioningClusterServerPreAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Network Commissioning Cluster Server Tick
+ *
+ * server Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfNetworkCommissioningClusterServerTickCallback(chip::EndpointId endpoint);
+
+//
// On/off Cluster server
//
bool emberAfLevelControlClusterStopWithOnOffCallback();
/**
+ * @brief Network Commissioning Cluster AddThreadNetwork Command callback
+ * @param operationalDataset
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterAddThreadNetworkCallback(uint8_t * operationalDataset, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster AddWiFiNetwork Command callback
+ * @param ssid
+ * @param credentials
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterAddWiFiNetworkCallback(uint8_t * ssid, uint8_t * credentials, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster DisableNetwork Command callback
+ * @param networkID
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterDisableNetworkCallback(uint8_t * networkID, uint64_t breadcrumb, uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster EnableNetwork Command callback
+ * @param networkID
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterEnableNetworkCallback(uint8_t * networkID, uint64_t breadcrumb, uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster GetLastNetworkCommissioningResult Command callback
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterGetLastNetworkCommissioningResultCallback(uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster RemoveNetwork Command callback
+ * @param networkID
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterRemoveNetworkCallback(uint8_t * NetworkID, uint64_t Breadcrumb, uint32_t TimeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster ScanNetworks Command callback
+ * @param ssid
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterScanNetworksCallback(uint8_t * ssid, uint64_t breadcrumb, uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster UpdateThreadNetwork Command callback
+ * @param operationalDataset
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterUpdateThreadNetworkCallback(uint8_t * operationalDataset, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster UpdateWiFiNetwork Command callback
+ * @param ssid
+ * @param credentials
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterUpdateWiFiNetworkCallback(uint8_t * ssid, uint8_t * credentials, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
* @brief On/off Cluster Off Command callback
*/
\
ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+/** @brief Command description for ScanNetworks
+ *
+ * Command: ScanNetworks
+ * @param ssid OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterScanNetworks(ssid, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_NETWORKS_COMMAND_ID, "uuu", ssid, breadcrumb, timeoutMs);
+
+/** @brief Command description for ScanNetworksResponse
+ *
+ * Command: ScanNetworksResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ * @param wifiScanResults WiFiInterfaceScanResult []
+ * @param wifiScanResultsLen int
+ * @param threadScanResults ThreadInterfaceScanResult []
+ * @param threadScanResultsLen int
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterScanNetworksResponse(errorCode, debugText, wifiScanResults, wifiScanResultsLen, threadScanResults, \
+ threadScanResultsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID, "uubb", errorCode, debugText, wifiScanResults, \
+ wifiScanResultsLen, threadScanResults, threadScanResultsLen);
+
+/** @brief Command description for AddWiFiNetwork
+ *
+ * Command: AddWiFiNetwork
+ * @param ssid OCTET_STRING
+ * @param credentials OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
+
+/** @brief Command description for AddWiFiNetworkResponse
+ *
+ * Command: AddWiFiNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddWiFiNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for UpdateWiFiNetwork
+ *
+ * Command: UpdateWiFiNetwork
+ * @param ssid OCTET_STRING
+ * @param credentials OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
+
+/** @brief Command description for UpdateWiFiNetworkResponse
+ *
+ * Command: UpdateWiFiNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateWiFiNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for AddThreadNetwork
+ *
+ * Command: AddThreadNetwork
+ * @param operationalDataset OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
+
+/** @brief Command description for AddThreadNetworkResponse
+ *
+ * Command: AddThreadNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddThreadNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for UpdateThreadNetwork
+ *
+ * Command: UpdateThreadNetwork
+ * @param operationalDataset OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
+
+/** @brief Command description for UpdateThreadNetworkResponse
+ *
+ * Command: UpdateThreadNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateThreadNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for RemoveNetwork
+ *
+ * Command: RemoveNetwork
+ * @param NetworkID OCTET_STRING
+ * @param Breadcrumb INT64U
+ * @param TimeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterRemoveNetwork(NetworkID, Breadcrumb, TimeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_NETWORK_COMMAND_ID, "uuu", NetworkID, Breadcrumb, TimeoutMs);
+
+/** @brief Command description for RemoveNetworkResponse
+ *
+ * Command: RemoveNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterRemoveNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for EnableNetwork
+ *
+ * Command: EnableNetwork
+ * @param networkID OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterEnableNetwork(networkID, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
+
+/** @brief Command description for EnableNetworkResponse
+ *
+ * Command: EnableNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterEnableNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for DisableNetwork
+ *
+ * Command: DisableNetwork
+ * @param networkID OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterDisableNetwork(networkID, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
+
+/** @brief Command description for DisableNetworkResponse
+ *
+ * Command: DisableNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterDisableNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for GetLastNetworkCommissioningResult
+ *
+ * Command: GetLastNetworkCommissioningResult
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterGetLastNetworkCommissioningResult(timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID, "u", timeoutMs);
+
/** @brief Command description for LockDoor
*
* Command: LockDoor
ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID, "uuuub", startIndex, total, startIndex, count, \
endpointInformationRecordList, endpointInformationRecordListLen);
-/** @brief Command description for ScanNetworks
- *
- * Command: ScanNetworks
- * @param ssid OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterScanNetworks(ssid, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_SCAN_NETWORKS_COMMAND_ID, "uuu", ssid, breadcrumb, timeoutMs);
-
-/** @brief Command description for ScanNetworksResponse
- *
- * Command: ScanNetworksResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- * @param wifiScanResults WiFiInterfaceScanResult []
- * @param wifiScanResultsLen int
- * @param threadScanResults ThreadInterfaceScanResult []
- * @param threadScanResultsLen int
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterScanNetworksResponse(errorCode, debugText, wifiScanResults, wifiScanResultsLen, threadScanResults, \
- threadScanResultsLen) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID, "uubb", errorCode, debugText, wifiScanResults, \
- wifiScanResultsLen, threadScanResults, threadScanResultsLen);
-
-/** @brief Command description for AddWiFiNetwork
- *
- * Command: AddWiFiNetwork
- * @param ssid OCTET_STRING
- * @param credentials OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
-
-/** @brief Command description for AddWiFiNetworkResponse
- *
- * Command: AddWiFiNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddWiFiNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for UpdateWiFiNetwork
- *
- * Command: UpdateWiFiNetwork
- * @param ssid OCTET_STRING
- * @param credentials OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
-
-/** @brief Command description for UpdateWiFiNetworkResponse
- *
- * Command: UpdateWiFiNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateWiFiNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for AddThreadNetwork
- *
- * Command: AddThreadNetwork
- * @param operationalDataset OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
-
-/** @brief Command description for AddThreadNetworkResponse
- *
- * Command: AddThreadNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddThreadNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for UpdateThreadNetwork
- *
- * Command: UpdateThreadNetwork
- * @param operationalDataset OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
-
-/** @brief Command description for UpdateThreadNetworkResponse
- *
- * Command: UpdateThreadNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateThreadNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for RemoveNetwork
- *
- * Command: RemoveNetwork
- * @param NetworkID OCTET_STRING
- * @param Breadcrumb INT64U
- * @param TimeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterRemoveNetwork(NetworkID, Breadcrumb, TimeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_REMOVE_NETWORK_COMMAND_ID, "uuu", NetworkID, Breadcrumb, TimeoutMs);
-
-/** @brief Command description for RemoveNetworkResponse
- *
- * Command: RemoveNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterRemoveNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for EnableNetwork
- *
- * Command: EnableNetwork
- * @param networkID OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterEnableNetwork(networkID, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ENABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
-
-/** @brief Command description for EnableNetworkResponse
- *
- * Command: EnableNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterEnableNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for DisableNetwork
- *
- * Command: DisableNetwork
- * @param networkID OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterDisableNetwork(networkID, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_DISABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
-
-/** @brief Command description for DisableNetworkResponse
- *
- * Command: DisableNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterDisableNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for GetLastNetworkCommissioningResult
- *
- * Command: GetLastNetworkCommissioningResult
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterGetLastNetworkCommissioningResult(timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID, "u", timeoutMs);
-
/** @brief Command description for Bind
*
* Command: Bind
// Definitions for cluster: General Commissioning
#define ZCL_GENERAL_COMMISSIONING_CLUSTER_ID (0x0030)
+// Definitions for cluster: Network Commissioning
+#define ZCL_NETWORK_COMMISSIONING_CLUSTER_ID (0x0031)
+
// Definitions for cluster: Shade Configuration
#define ZCL_SHADE_CONFIG_CLUSTER_ID (0x0100)
// Definitions for cluster: ZLL Commissioning
#define ZCL_ZLL_COMMISSIONING_CLUSTER_ID (0x1000)
-// Definitions for cluster: Network Commissioning
-#define ZCL_NETWORK_COMMISSIONING_CLUSTER_ID (0xAAAA)
-
// Definitions for cluster: Binding
#define ZCL_BINDING_CLUSTER_ID (0xF000)
#define ZCL_COMMISSIONING_COMPLETE_COMMAND_ID (0x06)
#define ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID (0x07)
+// Commands for cluster: Network Commissioning
+#define ZCL_SCAN_NETWORKS_COMMAND_ID (0x00)
+#define ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_ADD_WI_FI_NETWORK_COMMAND_ID (0x02)
+#define ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID (0x04)
+#define ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_ADD_THREAD_NETWORK_COMMAND_ID (0x06)
+#define ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID (0x08)
+#define ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_REMOVE_NETWORK_COMMAND_ID (0x0A)
+#define ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID (0x0B)
+#define ZCL_ENABLE_NETWORK_COMMAND_ID (0x0C)
+#define ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_DISABLE_NETWORK_COMMAND_ID (0x0E)
+#define ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID (0x0F)
+#define ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID (0x10)
+
// Commands for cluster: Door Lock
#define ZCL_LOCK_DOOR_COMMAND_ID (0x00)
#define ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID (0x00)
#define ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID (0x42)
#define ZCL_GET_ENDPOINT_LIST_RESPONSE_COMMAND_ID (0x42)
-// Commands for cluster: Network Commissioning
-#define ZCL_SCAN_NETWORKS_COMMAND_ID (0x00)
-#define ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID (0x01)
-#define ZCL_ADD_WI_FI_NETWORK_COMMAND_ID (0x02)
-#define ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x03)
-#define ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID (0x04)
-#define ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x05)
-#define ZCL_ADD_THREAD_NETWORK_COMMAND_ID (0x06)
-#define ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x07)
-#define ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID (0x08)
-#define ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x09)
-#define ZCL_REMOVE_NETWORK_COMMAND_ID (0x0A)
-#define ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID (0x0B)
-#define ZCL_ENABLE_NETWORK_COMMAND_ID (0x0C)
-#define ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID (0x0D)
-#define ZCL_DISABLE_NETWORK_COMMAND_ID (0x0E)
-#define ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID (0x0F)
-#define ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID (0x10)
-
// Commands for cluster: Binding
#define ZCL_BIND_COMMAND_ID (0x00)
#define ZCL_UNBIND_COMMAND_ID (0x01)
#define ZAP_ATTRIBUTE_MASK(mask) ATTRIBUTE_MASK_##mask
// This is an array of EmberAfAttributeMetadata structures.
-#define GENERATED_ATTRIBUTE_COUNT 50
+#define GENERATED_ATTRIBUTE_COUNT 51
#define GENERATED_ATTRIBUTES \
{ \
- { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 2 } }, /* On/off (server): cluster revision */ \
+ { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Network Commissioning (server): cluster revision */ \
+ { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 2 } }, /* On/off (server): cluster revision */ \
{ 0x0000, ZAP_TYPE(BOOLEAN), 1, 0, { (uint8_t *) 0x00 } }, /* On/off (server): on/off */ \
{ 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 3 } }, /* Level Control (server): cluster revision */ \
{ 0x0000, ZAP_TYPE(INT8U), 1, 0, { (uint8_t *) 0x00 } }, /* Level Control (server): current level */ \
};
#define ZAP_CLUSTER_MASK(mask) CLUSTER_MASK_##mask
-#define GENERATED_CLUSTER_COUNT 8
+#define GENERATED_CLUSTER_COUNT 9
#define GENERATED_CLUSTERS \
{ \
{ \
- 0x0006, \
- ZAP_ATTRIBUTE_INDEX(0), \
- 2, \
- 3, \
- ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION), \
- chipFuncArrayOnOffServer \
- }, /* Endpoint: 1, Cluster: On/off (server) */ \
+ 0x0031, ZAP_ATTRIBUTE_INDEX(0), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
+ }, /* Endpoint: 0, Cluster: Network Commissioning (server) */ \
+ { 0x0006, \
+ ZAP_ATTRIBUTE_INDEX(1), \
+ 2, \
+ 3, \
+ ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION), \
+ chipFuncArrayOnOffServer }, /* Endpoint: 1, Cluster: On/off (server) */ \
{ 0x0008, \
- ZAP_ATTRIBUTE_INDEX(2), \
+ ZAP_ATTRIBUTE_INDEX(3), \
2, \
3, \
ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION), \
chipFuncArrayLevelControlServer }, /* Endpoint: 1, Cluster: Level Control (server) */ \
{ \
- 0x0028, ZAP_ATTRIBUTE_INDEX(4), 12, 254, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0x0028, ZAP_ATTRIBUTE_INDEX(5), 12, 254, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Basic (server) */ \
{ 0x0006, \
- ZAP_ATTRIBUTE_INDEX(16), \
+ ZAP_ATTRIBUTE_INDEX(17), \
6, \
9, \
ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION), \
chipFuncArrayOnOffServer }, /* Endpoint: 2, Cluster: On/off (server) */ \
{ 0x0008, \
- ZAP_ATTRIBUTE_INDEX(22), \
+ ZAP_ATTRIBUTE_INDEX(23), \
5, \
7, \
ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION), \
chipFuncArrayLevelControlServer }, /* Endpoint: 2, Cluster: Level Control (server) */ \
{ \
- 0x0028, ZAP_ATTRIBUTE_INDEX(27), 12, 254, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0x0028, ZAP_ATTRIBUTE_INDEX(28), 12, 254, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 2, Cluster: Basic (server) */ \
{ 0x0006, \
- ZAP_ATTRIBUTE_INDEX(39), \
+ ZAP_ATTRIBUTE_INDEX(40), \
6, \
9, \
ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION), \
chipFuncArrayOnOffServer }, /* Endpoint: 3, Cluster: On/off (server) */ \
{ 0x0008, \
- ZAP_ATTRIBUTE_INDEX(45), \
+ ZAP_ATTRIBUTE_INDEX(46), \
5, \
7, \
ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION), \
// This is an array of EmberAfEndpointType structures.
#define GENERATED_ENDPOINT_TYPES \
{ \
- { ZAP_CLUSTER_INDEX(0), 0, 0 }, { ZAP_CLUSTER_INDEX(0), 3, 260 }, { ZAP_CLUSTER_INDEX(3), 3, 270 }, \
- { ZAP_CLUSTER_INDEX(6), 2, 16 }, \
+ { ZAP_CLUSTER_INDEX(0), 1, 2 }, { ZAP_CLUSTER_INDEX(1), 3, 260 }, { ZAP_CLUSTER_INDEX(4), 3, 270 }, \
+ { ZAP_CLUSTER_INDEX(7), 2, 16 }, \
}
// Largest attribute size is needed for various buffers
#define ATTRIBUTE_SINGLETONS_SIZE (508)
// Total size of attribute storage
-#define ATTRIBUTE_MAX_SIZE (546)
+#define ATTRIBUTE_MAX_SIZE (548)
// Number of fixed endpoints
#define FIXED_ENDPOINT_COUNT (4)
// Array of EmberAfCommandMetadata structs.
#define ZAP_COMMAND_MASK(mask) COMMAND_MASK_##mask
-#define EMBER_AF_GENERATED_COMMAND_COUNT (45)
+#define EMBER_AF_GENERATED_COMMAND_COUNT (62)
#define GENERATED_COMMANDS \
{ \
{ 0x0006, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* On/off (server): Off */ \
{ 0x0028, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Basic (server): ShutDown */ \
{ 0x0028, 0x02, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Basic (server): Leave */ \
{ 0x0028, 0x02, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Basic (server): Leave */ \
+ { 0x0031, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): ScanNetworks */ \
+ { 0x0031, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): ScanNetworksResponse */ \
+ { 0x0031, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): AddWiFiNetwork */ \
+ { 0x0031, 0x03, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): AddWiFiNetworkResponse */ \
+ { 0x0031, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): UpdateWiFiNetwork */ \
+ { 0x0031, 0x05, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): UpdateWiFiNetworkResponse */ \
+ { 0x0031, 0x06, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): AddThreadNetwork */ \
+ { 0x0031, 0x07, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): AddThreadNetworkResponse */ \
+ { 0x0031, 0x08, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): UpdateThreadNetwork */ \
+ { 0x0031, 0x09, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): UpdateThreadNetworkResponse */ \
+ { 0x0031, 0x0A, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): RemoveNetwork */ \
+ { 0x0031, 0x0B, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): RemoveNetworkResponse */ \
+ { 0x0031, 0x0C, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): EnableNetwork */ \
+ { 0x0031, 0x0D, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): EnableNetworkResponse */ \
+ { 0x0031, 0x0E, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): DisableNetwork */ \
+ { 0x0031, 0x0F, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): DisableNetworkResponse */ \
+ { 0x0031, 0x10, \
+ ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): GetLastNetworkCommissioningResult */ \
}
// Array of EmberAfManufacturerCodeEntry structures for commands.
/**** Cluster endpoint counts ****/
#define EMBER_AF_BASIC_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_LEVEL_CONTROL_CLUSTER_SERVER_ENDPOINT_COUNT (3)
+#define EMBER_AF_NETWORK_COMMISSIONING_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_ON_OFF_CLUSTER_SERVER_ENDPOINT_COUNT (3)
/**** Cluster Plugins ****/
#define EMBER_AF_PLUGIN_LEVEL_CONTROL_MINIMUM_LEVEL 0
#define EMBER_AF_PLUGIN_LEVEL_CONTROL_RATE 0
+// Use this macro to check if the server side of the Network Commissioning cluster is included
+#define ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER
+#define EMBER_AF_PLUGIN_NETWORK_COMMISSIONING_SERVER
+#define EMBER_AF_PLUGIN_NETWORK_COMMISSIONING
+
// Use this macro to check if the server side of the On/off cluster is included
#define ZCL_USING_ON_OFF_CLUSTER_SERVER
#define EMBER_AF_PLUGIN_ON_OFF_SERVER
#define CHIP_PRINTCLUSTER_GENERAL_COMMISSIONING_CLUSTER
#endif
+#if defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER { ZCL_NETWORK_COMMISSIONING_CLUSTER_ID, 49, "Network Commissioning" },
+#else
+#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER
+#endif
+
#if defined(ZCL_USING_SHADE_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_SHADE_CONFIG_CLUSTER_CLIENT)
#define CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER { ZCL_SHADE_CONFIG_CLUSTER_ID, 256, "Shade Configuration" },
#else
#define CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER
#endif
-#if defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_CLIENT)
-#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER { ZCL_NETWORK_COMMISSIONING_CLUSTER_ID, 43690, "Network Commissioning" },
-#else
-#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER
-#endif
-
#if defined(ZCL_USING_BINDING_CLUSTER_SERVER) || defined(ZCL_USING_BINDING_CLUSTER_CLIENT)
#define CHIP_PRINTCLUSTER_BINDING_CLUSTER { ZCL_BINDING_CLUSTER_ID, 61440, "Binding" },
#else
CHIP_PRINTCLUSTER_KEEPALIVE_CLUSTER \
CHIP_PRINTCLUSTER_BASIC_CLUSTER \
CHIP_PRINTCLUSTER_GENERAL_COMMISSIONING_CLUSTER \
+ CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER \
CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER \
CHIP_PRINTCLUSTER_DOOR_LOCK_CLUSTER \
CHIP_PRINTCLUSTER_WINDOW_COVERING_CLUSTER \
CHIP_PRINTCLUSTER_ELECTRICAL_MEASUREMENT_CLUSTER \
CHIP_PRINTCLUSTER_DIAGNOSTICS_CLUSTER \
CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER \
- CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER \
CHIP_PRINTCLUSTER_BINDING_CLUSTER \
CHIP_PRINTCLUSTER_MEDIA_PLAYBACK_CLUSTER \
CHIP_PRINTCLUSTER_CONTENT_LAUNCH_CLUSTER \
return err;
}
-void PersistentStorage::SetDelegate(PersistentStorageResultDelegate * delegate) {}
+void PersistentStorage::SetStorageDelegate(PersistentStorageResultDelegate * delegate) {}
-void PersistentStorage::GetKeyValue(const char * key) {}
+void PersistentStorage::AsyncGetKeyValue(const char * key) {}
-CHIP_ERROR PersistentStorage::GetKeyValue(const char * key, char * value, uint16_t & size)
+CHIP_ERROR PersistentStorage::SyncGetKeyValue(const char * key, char * value, uint16_t & size)
{
CHIP_ERROR err = CHIP_NO_ERROR;
std::string iniValue;
return err;
}
-void PersistentStorage::SetKeyValue(const char * key, const char * value)
+void PersistentStorage::AsyncSetKeyValue(const char * key, const char * value)
{
auto section = mConfig.sections[kDefaultSectionName];
section[key] = std::string(value);
CommitConfig();
}
-void PersistentStorage::DeleteKeyValue(const char * key)
+void PersistentStorage::AsyncDeleteKeyValue(const char * key)
{
auto section = mConfig.sections[kDefaultSectionName];
section.erase(key);
char value[6];
uint16_t size = static_cast<uint16_t>(sizeof(value));
- err = GetKeyValue(kPortKey, value, size);
+ err = SyncGetKeyValue(kPortKey, value, size);
if (CHIP_NO_ERROR == err)
{
uint16_t tmpValue;
char value[9];
uint16_t size = static_cast<uint16_t>(sizeof(value));
- err = GetKeyValue(kLoggingKey, value, size);
+ err = SyncGetKeyValue(kLoggingKey, value, size);
if (CHIP_NO_ERROR == err)
{
if (strcasecmp(value, "none") == 0)
CHIP_ERROR Init();
/////////// PersistentStorageDelegate Interface /////////
- void SetDelegate(chip::PersistentStorageResultDelegate * delegate) override;
- void GetKeyValue(const char * key) override;
- CHIP_ERROR GetKeyValue(const char * key, char * value, uint16_t & size) override;
- void SetKeyValue(const char * key, const char * value) override;
- void DeleteKeyValue(const char * key) override;
+ void SetStorageDelegate(chip::PersistentStorageResultDelegate * delegate) override;
+ void AsyncGetKeyValue(const char * key) override;
+ CHIP_ERROR SyncGetKeyValue(const char * key, char * value, uint16_t & size) override;
+ void AsyncSetKeyValue(const char * key, const char * value) override;
+ void AsyncDeleteKeyValue(const char * key) override;
uint16_t GetListenPort();
chip::Logging::LogCategory GetLoggingLevel();
#import "CHIPDevice.h"
#import "CHIPDevice_Internal.h"
-#import "ChipError.h"
+#import "CHIPError.h"
#import "gen/CHIPClientCallbacks.h"
#import "gen/CHIPClustersObjc.h"
bool mKeepAlive;
};
+class CHIPInt64uAttributeCallbackBridge : public Callback::Callback<Int64uAttributeCallback> {
+public:
+ CHIPInt64uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+ : Callback::Callback<Int64uAttributeCallback>(CallbackFn, this)
+ , mHandler(handler)
+ , mQueue(queue)
+ , mKeepAlive(keepAlive)
+ {
+ }
+
+ ~CHIPInt64uAttributeCallbackBridge() {};
+
+ static void CallbackFn(void * context, uint64_t value)
+ {
+ CHIPInt64uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt64uAttributeCallbackBridge *>(context);
+ if (callback && callback->mQueue) {
+ dispatch_async(callback->mQueue, ^{
+ callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedLongLong:value] });
+ if (!callback->mKeepAlive) {
+ callback->Cancel();
+ delete callback;
+ }
+ });
+ }
+ };
+
+private:
+ ResponseHandler mHandler;
+ dispatch_queue_t mQueue;
+ bool mKeepAlive;
+};
+
class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
public:
CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
#define ZCL_FABRIC_ID_ATTRIBUTE_ID (0x0000)
#define ZCL_BREADCRUMB_ATTRIBUTE_ID (0x0001)
+// Attribute ids for cluster: Network Commissioning
+
+// Client attributes
+
+// Server attributes
+
// Attribute ids for cluster: Shade Configuration
// Client attributes
// Server attributes
-// Attribute ids for cluster: Network Commissioning
-
-// Client attributes
-
-// Server attributes
-
// Attribute ids for cluster: Binding
// Client attributes
\
ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+/** @brief Command description for ScanNetworks
+ *
+ * Command: ScanNetworks
+ * @param ssid OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterScanNetworks(ssid, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_NETWORKS_COMMAND_ID, "uuu", ssid, breadcrumb, timeoutMs);
+
+/** @brief Command description for ScanNetworksResponse
+ *
+ * Command: ScanNetworksResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ * @param wifiScanResults WiFiInterfaceScanResult []
+ * @param wifiScanResultsLen int
+ * @param threadScanResults ThreadInterfaceScanResult []
+ * @param threadScanResultsLen int
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterScanNetworksResponse(errorCode, debugText, wifiScanResults, wifiScanResultsLen, threadScanResults, \
+ threadScanResultsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID, "uubb", errorCode, debugText, wifiScanResults, \
+ wifiScanResultsLen, threadScanResults, threadScanResultsLen);
+
+/** @brief Command description for AddWiFiNetwork
+ *
+ * Command: AddWiFiNetwork
+ * @param ssid OCTET_STRING
+ * @param credentials OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
+
+/** @brief Command description for AddWiFiNetworkResponse
+ *
+ * Command: AddWiFiNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddWiFiNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for UpdateWiFiNetwork
+ *
+ * Command: UpdateWiFiNetwork
+ * @param ssid OCTET_STRING
+ * @param credentials OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
+
+/** @brief Command description for UpdateWiFiNetworkResponse
+ *
+ * Command: UpdateWiFiNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateWiFiNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for AddThreadNetwork
+ *
+ * Command: AddThreadNetwork
+ * @param operationalDataset OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
+
+/** @brief Command description for AddThreadNetworkResponse
+ *
+ * Command: AddThreadNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddThreadNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for UpdateThreadNetwork
+ *
+ * Command: UpdateThreadNetwork
+ * @param operationalDataset OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
+
+/** @brief Command description for UpdateThreadNetworkResponse
+ *
+ * Command: UpdateThreadNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateThreadNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for RemoveNetwork
+ *
+ * Command: RemoveNetwork
+ * @param NetworkID OCTET_STRING
+ * @param Breadcrumb INT64U
+ * @param TimeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterRemoveNetwork(NetworkID, Breadcrumb, TimeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_NETWORK_COMMAND_ID, "uuu", NetworkID, Breadcrumb, TimeoutMs);
+
+/** @brief Command description for RemoveNetworkResponse
+ *
+ * Command: RemoveNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterRemoveNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for EnableNetwork
+ *
+ * Command: EnableNetwork
+ * @param networkID OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterEnableNetwork(networkID, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
+
+/** @brief Command description for EnableNetworkResponse
+ *
+ * Command: EnableNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterEnableNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for DisableNetwork
+ *
+ * Command: DisableNetwork
+ * @param networkID OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterDisableNetwork(networkID, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
+
+/** @brief Command description for DisableNetworkResponse
+ *
+ * Command: DisableNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterDisableNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for GetLastNetworkCommissioningResult
+ *
+ * Command: GetLastNetworkCommissioningResult
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterGetLastNetworkCommissioningResult(timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID, "u", timeoutMs);
+
/** @brief Command description for LockDoor
*
* Command: LockDoor
ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID, "uuuub", startIndex, total, startIndex, count, \
endpointInformationRecordList, endpointInformationRecordListLen);
-/** @brief Command description for ScanNetworks
- *
- * Command: ScanNetworks
- * @param ssid OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterScanNetworks(ssid, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_SCAN_NETWORKS_COMMAND_ID, "uuu", ssid, breadcrumb, timeoutMs);
-
-/** @brief Command description for ScanNetworksResponse
- *
- * Command: ScanNetworksResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- * @param wifiScanResults WiFiInterfaceScanResult []
- * @param wifiScanResultsLen int
- * @param threadScanResults ThreadInterfaceScanResult []
- * @param threadScanResultsLen int
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterScanNetworksResponse(errorCode, debugText, wifiScanResults, wifiScanResultsLen, threadScanResults, \
- threadScanResultsLen) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID, "uubb", errorCode, debugText, wifiScanResults, \
- wifiScanResultsLen, threadScanResults, threadScanResultsLen);
-
-/** @brief Command description for AddWiFiNetwork
- *
- * Command: AddWiFiNetwork
- * @param ssid OCTET_STRING
- * @param credentials OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
-
-/** @brief Command description for AddWiFiNetworkResponse
- *
- * Command: AddWiFiNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddWiFiNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for UpdateWiFiNetwork
- *
- * Command: UpdateWiFiNetwork
- * @param ssid OCTET_STRING
- * @param credentials OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
-
-/** @brief Command description for UpdateWiFiNetworkResponse
- *
- * Command: UpdateWiFiNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateWiFiNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for AddThreadNetwork
- *
- * Command: AddThreadNetwork
- * @param operationalDataset OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
-
-/** @brief Command description for AddThreadNetworkResponse
- *
- * Command: AddThreadNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddThreadNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for UpdateThreadNetwork
- *
- * Command: UpdateThreadNetwork
- * @param operationalDataset OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
-
-/** @brief Command description for UpdateThreadNetworkResponse
- *
- * Command: UpdateThreadNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateThreadNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for RemoveNetwork
- *
- * Command: RemoveNetwork
- * @param NetworkID OCTET_STRING
- * @param Breadcrumb INT64U
- * @param TimeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterRemoveNetwork(NetworkID, Breadcrumb, TimeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_REMOVE_NETWORK_COMMAND_ID, "uuu", NetworkID, Breadcrumb, TimeoutMs);
-
-/** @brief Command description for RemoveNetworkResponse
- *
- * Command: RemoveNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterRemoveNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for EnableNetwork
- *
- * Command: EnableNetwork
- * @param networkID OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterEnableNetwork(networkID, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ENABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
-
-/** @brief Command description for EnableNetworkResponse
- *
- * Command: EnableNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterEnableNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for DisableNetwork
- *
- * Command: DisableNetwork
- * @param networkID OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterDisableNetwork(networkID, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_DISABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
-
-/** @brief Command description for DisableNetworkResponse
- *
- * Command: DisableNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterDisableNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for GetLastNetworkCommissioningResult
- *
- * Command: GetLastNetworkCommissioningResult
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterGetLastNetworkCommissioningResult(timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID, "u", timeoutMs);
-
/** @brief Command description for Bind
*
* Command: Bind
// Definitions for cluster: General Commissioning
#define ZCL_GENERAL_COMMISSIONING_CLUSTER_ID (0x0030)
+// Definitions for cluster: Network Commissioning
+#define ZCL_NETWORK_COMMISSIONING_CLUSTER_ID (0x0031)
+
// Definitions for cluster: Shade Configuration
#define ZCL_SHADE_CONFIG_CLUSTER_ID (0x0100)
// Definitions for cluster: ZLL Commissioning
#define ZCL_ZLL_COMMISSIONING_CLUSTER_ID (0x1000)
-// Definitions for cluster: Network Commissioning
-#define ZCL_NETWORK_COMMISSIONING_CLUSTER_ID (0xAAAA)
-
// Definitions for cluster: Binding
#define ZCL_BINDING_CLUSTER_ID (0xF000)
#define ZCL_COMMISSIONING_COMPLETE_COMMAND_ID (0x06)
#define ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID (0x07)
+// Commands for cluster: Network Commissioning
+#define ZCL_SCAN_NETWORKS_COMMAND_ID (0x00)
+#define ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_ADD_WI_FI_NETWORK_COMMAND_ID (0x02)
+#define ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID (0x04)
+#define ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_ADD_THREAD_NETWORK_COMMAND_ID (0x06)
+#define ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID (0x08)
+#define ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_REMOVE_NETWORK_COMMAND_ID (0x0A)
+#define ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID (0x0B)
+#define ZCL_ENABLE_NETWORK_COMMAND_ID (0x0C)
+#define ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_DISABLE_NETWORK_COMMAND_ID (0x0E)
+#define ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID (0x0F)
+#define ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID (0x10)
+
// Commands for cluster: Door Lock
#define ZCL_LOCK_DOOR_COMMAND_ID (0x00)
#define ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID (0x00)
#define ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID (0x42)
#define ZCL_GET_ENDPOINT_LIST_RESPONSE_COMMAND_ID (0x42)
-// Commands for cluster: Network Commissioning
-#define ZCL_SCAN_NETWORKS_COMMAND_ID (0x00)
-#define ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID (0x01)
-#define ZCL_ADD_WI_FI_NETWORK_COMMAND_ID (0x02)
-#define ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x03)
-#define ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID (0x04)
-#define ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x05)
-#define ZCL_ADD_THREAD_NETWORK_COMMAND_ID (0x06)
-#define ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x07)
-#define ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID (0x08)
-#define ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x09)
-#define ZCL_REMOVE_NETWORK_COMMAND_ID (0x0A)
-#define ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID (0x0B)
-#define ZCL_ENABLE_NETWORK_COMMAND_ID (0x0C)
-#define ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID (0x0D)
-#define ZCL_DISABLE_NETWORK_COMMAND_ID (0x0E)
-#define ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID (0x0F)
-#define ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID (0x10)
-
// Commands for cluster: Binding
#define ZCL_BIND_COMMAND_ID (0x00)
#define ZCL_UNBIND_COMMAND_ID (0x01)
#define CHIP_PRINTCLUSTER_GENERAL_COMMISSIONING_CLUSTER
#endif
+#if defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER { ZCL_NETWORK_COMMISSIONING_CLUSTER_ID, 49, "Network Commissioning" },
+#else
+#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER
+#endif
+
#if defined(ZCL_USING_SHADE_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_SHADE_CONFIG_CLUSTER_CLIENT)
#define CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER { ZCL_SHADE_CONFIG_CLUSTER_ID, 256, "Shade Configuration" },
#else
#define CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER
#endif
-#if defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_CLIENT)
-#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER { ZCL_NETWORK_COMMISSIONING_CLUSTER_ID, 43690, "Network Commissioning" },
-#else
-#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER
-#endif
-
#if defined(ZCL_USING_BINDING_CLUSTER_SERVER) || defined(ZCL_USING_BINDING_CLUSTER_CLIENT)
#define CHIP_PRINTCLUSTER_BINDING_CLUSTER { ZCL_BINDING_CLUSTER_ID, 61440, "Binding" },
#else
CHIP_PRINTCLUSTER_KEEPALIVE_CLUSTER \
CHIP_PRINTCLUSTER_BASIC_CLUSTER \
CHIP_PRINTCLUSTER_GENERAL_COMMISSIONING_CLUSTER \
+ CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER \
CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER \
CHIP_PRINTCLUSTER_DOOR_LOCK_CLUSTER \
CHIP_PRINTCLUSTER_WINDOW_COVERING_CLUSTER \
CHIP_PRINTCLUSTER_ELECTRICAL_MEASUREMENT_CLUSTER \
CHIP_PRINTCLUSTER_DIAGNOSTICS_CLUSTER \
CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER \
- CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER \
CHIP_PRINTCLUSTER_BINDING_CLUSTER \
CHIP_PRINTCLUSTER_MEDIA_PLAYBACK_CLUSTER \
CHIP_PRINTCLUSTER_CONTENT_LAUNCH_CLUSTER \
#define FACTORY_RESET_TRIGGER_TIMEOUT 3000
#define FACTORY_RESET_CANCEL_WINDOW_TIMEOUT 3000
-#define APP_TASK_STACK_SIZE (4096)
+#define APP_TASK_STACK_SIZE (2048)
#define APP_TASK_PRIORITY 2
#define APP_EVENT_QUEUE_SIZE 10
#define EXAMPLE_VENDOR_ID 0xcafe
--- /dev/null
+# Copyright (c) 2020 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.
+
+import("//build_overrides/build.gni")
+
+# The location of the build configuration file.
+buildconfig = "${build_root}/config/BUILDCONFIG.gn"
+
+# CHIP uses angle bracket includes.
+check_system_includes = true
+
+default_args = {
+ target_cpu = "arm"
+ target_os = "freertos"
+
+ import("//args.gni")
+}
--- /dev/null
+# 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.
+
+import("//build_overrides/chip.gni")
+import("//build_overrides/k32w_sdk.gni")
+import("//build_overrides/openthread.gni")
+
+import("${k32w_sdk_build_root}/k32w_executable.gni")
+import("${k32w_sdk_build_root}/k32w_sdk.gni")
+
+assert(current_os == "freertos")
+
+k32w_platform_dir = "${chip_root}/examples/platform/k32w"
+
+k32w_sdk("sdk") {
+ include_dirs = [
+ "main/include",
+ "main",
+ "${k32w_platform_dir}/app/project_include",
+ "${k32w_platform_dir}/app/support",
+ "${chip_root}/examples/lighting-app/lighting-common",
+ "${chip_root}/src/app/util",
+ "${chip_root}/src/app/server",
+ "${k32w_platform_dir}/util/include",
+ ]
+
+ sources = [
+ "${k32w_platform_dir}/app/project_include/CHIPProjectConfig.h",
+ "${k32w_platform_dir}/app/project_include/FreeRTOSConfig.h",
+ "${k32w_platform_dir}/app/project_include/OpenThreadConfig.h",
+ "main/include/app_config.h",
+ ]
+
+ public_deps =
+ [ "${chip_root}/third_party/openthread/platforms:libopenthread-platform" ]
+
+ defines = []
+ if (is_debug) {
+ defines += [ "BUILD_RELEASE=0" ]
+ } else {
+ defines += [ "BUILD_RELEASE=1" ]
+ }
+}
+
+k32w_executable("light_app") {
+ output_name = "chip-k32w061-light-example"
+
+ sources = [
+ "${k32w_platform_dir}/util/LEDWidget.cpp",
+ "${k32w_platform_dir}/util/include/LEDWidget.h",
+ "main/AppTask.cpp",
+ "main/LightingManager.cpp",
+ "main/ZclCallbacks.cpp",
+ "main/include/AppEvent.h",
+ "main/include/AppTask.h",
+ "main/include/LightingManager.h",
+ "main/main.cpp",
+ ]
+
+ deps = [
+ ":sdk",
+ "${chip_root}/examples/common/QRCode",
+ "${chip_root}/examples/lighting-app/lighting-common",
+ "${chip_root}/src/lib",
+ "${chip_root}/third_party/mbedtls:mbedtls",
+ "${k32w_platform_dir}/app/support:freertos_mbedtls_utils",
+ "${openthread_root}:libopenthread-cli-ftd",
+ "${openthread_root}:libopenthread-ftd",
+ ]
+
+ output_dir = root_out_dir
+
+ ldscript = "${k32w_platform_dir}/app/ldscripts/chip-k32w061-linker.ld"
+
+ ldflags = [ "-T" + rebase_path(ldscript, root_build_dir) ]
+}
+
+group("k32w") {
+ deps = [ ":light_app" ]
+}
+
+group("default") {
+ deps = [ ":k32w" ]
+}
--- /dev/null
+# CHIP K32W061 Lighting Example Application
+
+The Project CHIP K32W061 Lighting Example demonstrates how to remotely control a
+light bulb. The light bulb is simulated using one of the LEDs from the expansion
+board. It uses buttons to test turn on/turn off of the light bulb. You can use
+this example as a reference for creating your own application.
+
+The example is based on
+[Project CHIP](https://github.com/project-chip/connectedhomeip) and the NXP K32W
+SDK, and supports remote access and control of a light bulb over a low-power,
+802.15.4 Thread network.
+
+The example behaves as a Project CHIP accessory, that is a device that can be
+paired into an existing Project CHIP network and can be controlled by this
+network.
+
+<hr>
+
+- [CHIP K32W Lighting Example Application](#chip-k32w-lighting-example-application) -
+- [Introduction](#introduction)
+ - [Bluetooth LE Advertising](#bluetooth-le-advertising)
+ - [Bluetooth LE Rendezvous](#bluetooth-le-rendezvous)
+- [Device UI](#device-ui)
+- [Building](#building)
+- [Flashing and debugging](#flashdebug)
+- [Testing the example](#testing-the-example)
+
+<hr>
+
+<a name="intro"></a>
+
+## Introduction
+
+![K32W061 DK6](../../platform/k32w/doc/images/k32w-dk6.jpg)
+
+The K32W lighting example application provides a working demonstration of a
+light bulb device, built using the Project CHIP codebase and the NXP K32W061
+SDK. The example supports remote access (e.g.: using CHIP Tool from a mobile
+phone) and control of a light bulb over a low-power, 802.15.4 Thread network. It
+is capable of being paired into an existing Project CHIP network along with
+other Project CHIP-enabled devices.
+
+The example targets the
+[NXP K32W061 DK6](https://www.nxp.com/products/wireless/thread/k32w061-41-high-performance-secure-and-ultra-low-power-mcu-for-zigbeethread-and-bluetooth-le-5-0-with-built-in-nfc-option:K32W061_41)
+development kit, but is readily adaptable to other K32W-based hardware.
+
+The CHIP device that runs the lighting application is controlled by the CHIP
+controller device over the Thread protocol. By default, the CHIP device has
+Thread disabled, and it should be paired over Bluetooth LE with the CHIP
+controller and obtain configuration from it. The actions required before
+establishing full communication are described below.
+
+The example also comes with a test mode, which allows to start Thread with the
+default settings by pressing a button. However, this mode does not guarantee
+that the device will be able to communicate with the CHIP controller and other
+devices.
+
+### Bluetooth LE Advertising
+
+In this example, to commission the device onto a Project CHIP network, it must
+be discoverable over Bluetooth LE. Bluetooth LE advertising is started
+automatically when the device is powered up.
+
+### Bluetooth LE Rendezvous
+
+In this example, the commissioning procedure (called rendezvous) is done over
+Bluetooth LE between a CHIP device and the CHIP controller, where the controller
+has the commissioner role.
+
+To start the rendezvous, the controller must get the commissioning information
+from the CHIP device. The data payload is encoded within a QR code, printed to
+the UART console.
+
+### Thread Provisioning
+
+Last part of the rendezvous procedure, the provisioning operation involves
+sending the Thread network credentials from the CHIP controller to the CHIP
+device. As a result, device is able to join the Thread network and communicate
+with other Thread devices in the network.
+
+## Device UI
+
+The example application provides a simple UI that depicts the state of the
+device and offers basic user control. This UI is implemented via the
+general-purpose LEDs and buttons built in to the OM15082 Expansion board
+attached to the DK6 board.
+
+**LED D2** shows the overall state of the device and its connectivity. Four
+states are depicted:
+
+- _Short Flash On (50ms on/950ms off)_ — The device is in an
+ unprovisioned (unpaired) state and is waiting for a commissioning
+ application to connect.
+
+* _Rapid Even Flashing (100ms on/100ms off)_ — The device is in an
+ unprovisioned state and a commissioning application is connected via BLE.
+
+- _Short Flash Off (950ms on/50ms off)_ — The device is full
+ provisioned, but does not yet have full network (Thread) or service
+ connectivity.
+
+* _Solid On_ — The device is fully provisioned and has full network and
+ service connectivity.
+
+**LED D3** shows the state of the simulated light bulb. When the LED is lit the
+light bulb is on; when not lit, the light bulb is off.
+
+**Button SW2** can be used to change the state of the simulated light bulb. This
+can be used to mimic a user manually operating a switch. The button behaves as a
+toggle, swapping the state every time it is pressed.
+
+**Button SW3** can be used to reset the device to a default state. Pressing and
+holding Button SW3 for 6 seconds initiates a factory reset. After an initial
+period of 3 seconds, LED2 D2 and D3 will flash in unison to signal the pending
+reset. Holding the button past 6 seconds will cause the device to reset its
+persistent configuration and initiate a reboot. The reset action can be
+cancelled by releasing the button at any point before the 6 second limit.
+
+**Button SW4** can be used for joining a predefined Thread network advertised by
+a Border Router. Default parameters for a Thread network are hard-coded and are
+being used if this button is pressed.
+
+The remaining two LEDs (D1/D2) and button (SW1) are unused.
+
+<a name="building"></a>
+
+## Building
+
+In order to build the Project CHIP example, we recommend using a Linux
+distribution (the demo-application was compiled on Ubuntu 20.04).
+
+- Download [K32W061 SDK 2.6.2 for Project CHIP](https://mcuxpresso.nxp.com/).
+ Creating an nxp.com account is required before being able to download the
+ SDK. Once the account is created, login and follow the steps for downloading
+ SDK_2.6.2_K32W061DK6. The SDK Builder UI selection should be similar with
+ the one from the image below.
+ ![MCUXpresso SDK Download](../../platform/k32w/doc/images/mcux-sdk-download.JPG)
+
+- Start building the application
+
+```
+user@ubuntu:~/Desktop/git/connectedhomeip$ export K32W061_SDK_ROOT=/home/user/Desktop/SDK_2.6.2_K32W061DK6/
+user@ubuntu:~/Desktop/git/connectedhomeip$ ./third_party/k32w_sdk/mr2_fixes/patch_k32w_mr2_sdk.sh
+user@ubuntu:~/Desktop/git/connectedhomeip$ source ./scripts/activate.sh
+user@ubuntu:~/Desktop/git/connectedhomeip/third_party/openthread/repo$ cd examples/lighting-app/k32w/
+user@ubuntu:~/Desktop/git/connectedhomeip/examples/lighting-app/k32w$ gn gen out/debug --args="k32w_sdk_root=\"${K32W061_SDK_ROOT}\" is_debug=true"
+user@ubuntu:~/Desktop/git/connectedhomeip/examples/lightin-app/k32w$ ninja -C out/debug
+user@ubuntu:~/Desktop/git/connectedhomeip/examples/lighting-app/k32w$ $K32W061_SDK_ROOT/tools/imagetool/sign_images.sh out/debug/
+```
+
+Note that "patch_k32w_mr2_sdk.sh" script must be run for patching the K32W061
+SDK 2.6.2.
+
+In case signing errors are encountered when running the "sign_images.sh" script
+install the recommanded packages (python version > 3, pip3, pycrypto,
+pycryptodome):
+
+```
+user@ubuntu:~$ python3 --version
+Python 3.8.2
+user@ubuntu:~$ pip3 --version
+pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
+user@ubuntu:~$ pip3 list | grep -i pycrypto
+pycrypto 2.6.1
+pycryptodome 3.9.8
+```
+
+The resulting output file can be found in out/debug/chip-k32w061-light-example.
+
+<a name="flashdebug"></a>
+
+## Flashing and debugging
+
+Program the firmware using the official
+[OpenThread Flash Instructions](https://github.com/openthread/openthread/blob/master/examples/platforms/k32w/k32w061/README.md#flash-binaries).
+
+All you have to do is to replace the Openthread binaries from the above
+documentation with _out/debug/chip-k32w061-light-example.bin_ if DK6Programmer
+is used or with _out/debug/chip-k32w061-light-example_ if MCUXpresso is used.
+
+## Testing the example
+
+The app can be deployed against any generic OpenThread Border Router. See the
+guide
+[Commissioning NXP K32W using Android CHIPTool](../../../docs/guides/nxp_k32w_android_commissioning.md)
+for step-by-step instructions.
--- /dev/null
+# Copyright (c) 2020 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.
+
+import("//build_overrides/chip.gni")
+import("${chip_root}/examples/platform/k32w/args.gni")
+
+# SDK target. This is overriden to add our SDK app_config.h & defines.
+k32w_sdk_target = get_label_info(":sdk", "label_no_toolchain")
--- /dev/null
+../../build_overrides/
\ No newline at end of file
--- /dev/null
+/*
+ *
+ * Copyright (c) 2021 Project CHIP Authors
+ * Copyright (c) 2021 Google LLC.
+ * All rights reserved.
+ *
+ * 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 "AppTask.h"
+#include "AppEvent.h"
+#include "Server.h"
+#include "support/ErrorStr.h"
+
+#include "QRCodeUtil.h"
+#include <platform/CHIPDeviceLayer.h>
+#include <platform/internal/DeviceNetworkInfo.h>
+
+#include "attribute-storage.h"
+#include "gen/attribute-id.h"
+#include "gen/attribute-type.h"
+#include "gen/cluster-id.h"
+
+#include "Keyboard.h"
+#include "LED.h"
+#include "LEDWidget.h"
+#include "TimersManager.h"
+#include "app_config.h"
+
+#define FACTORY_RESET_TRIGGER_TIMEOUT 6000
+#define FACTORY_RESET_CANCEL_WINDOW_TIMEOUT 3000
+#define APP_TASK_STACK_SIZE (4096)
+#define APP_TASK_PRIORITY 2
+#define APP_EVENT_QUEUE_SIZE 10
+
+TimerHandle_t sFunctionTimer; // FreeRTOS app sw timer.
+
+static QueueHandle_t sAppEventQueue;
+
+static LEDWidget sStatusLED;
+static LEDWidget sLightLED;
+
+static bool sIsThreadProvisioned = false;
+static bool sIsThreadEnabled = false;
+static bool sHaveBLEConnections = false;
+static bool sHaveServiceConnectivity = false;
+
+static uint32_t eventMask = 0;
+
+using namespace ::chip::DeviceLayer;
+
+AppTask AppTask::sAppTask;
+
+int AppTask::StartAppTask()
+{
+ int err = CHIP_NO_ERROR;
+
+ sAppEventQueue = xQueueCreate(APP_EVENT_QUEUE_SIZE, sizeof(AppEvent));
+ if (sAppEventQueue == NULL)
+ {
+ err = CHIP_ERROR_MAX;
+ K32W_LOG("Failed to allocate app event queue");
+ assert(err == CHIP_NO_ERROR);
+ }
+
+ return err;
+}
+
+int AppTask::Init()
+{
+ CHIP_ERROR err = CHIP_NO_ERROR;
+
+ // Init ZCL Data Model and start server
+ InitServer();
+
+ // QR code will be used with CHIP Tool
+ PrintQRCode(chip::RendezvousInformationFlags::kBLE);
+
+ TMR_Init();
+
+ /* HW init leds */
+ LED_Init();
+
+ /* start with all LEDS turnedd off */
+ sStatusLED.Init(SYSTEM_STATE_LED);
+
+ sLightLED.Init(LIGHT_STATE_LED);
+ sLightLED.Set(LightingMgr().IsTurnedOff());
+
+ /* intialize the Keyboard and button press calback */
+ KBD_Init(KBD_Callback);
+
+ // Create FreeRTOS sw timer for Function Selection.
+ sFunctionTimer = xTimerCreate("FnTmr", // Just a text name, not used by the RTOS kernel
+ 1, // == default timer period (mS)
+ false, // no timer reload (==one-shot)
+ (void *) this, // init timer id = app task obj context
+ TimerEventHandler // timer callback handler
+ );
+ if (sFunctionTimer == NULL)
+ {
+ K32W_LOG("app_timer_create() failed");
+ assert(err == CHIP_NO_ERROR);
+ }
+
+ err = LightingMgr().Init();
+ if (err != CHIP_NO_ERROR)
+ {
+ K32W_LOG("LightingMgr().Init() failed");
+ assert(err == CHIP_NO_ERROR);
+ }
+
+ LightingMgr().SetCallbacks(ActionInitiated, ActionCompleted);
+
+ // Print the current software version
+ char currentFirmwareRev[ConfigurationManager::kMaxFirmwareRevisionLength + 1] = { 0 };
+ size_t currentFirmwareRevLen;
+ err = ConfigurationMgr().GetFirmwareRevision(currentFirmwareRev, sizeof(currentFirmwareRev), currentFirmwareRevLen);
+ if (err != CHIP_NO_ERROR)
+ {
+ K32W_LOG("Get version error");
+ assert(err == CHIP_NO_ERROR);
+ }
+
+ K32W_LOG("Current Firmware Version: %s", currentFirmwareRev);
+
+ return err;
+}
+
+void AppTask::AppTaskMain(void * pvParameter)
+{
+ int err;
+ AppEvent event;
+
+ err = sAppTask.Init();
+ if (err != CHIP_NO_ERROR)
+ {
+ K32W_LOG("AppTask.Init() failed");
+ assert(err == CHIP_NO_ERROR);
+ }
+
+ while (true)
+ {
+ BaseType_t eventReceived = xQueueReceive(sAppEventQueue, &event, pdMS_TO_TICKS(10));
+ while (eventReceived == pdTRUE)
+ {
+ sAppTask.DispatchEvent(&event);
+ eventReceived = xQueueReceive(sAppEventQueue, &event, 0);
+ }
+
+ // Collect connectivity and configuration state from the CHIP stack. Because the
+ // CHIP event loop is being run in a separate task, the stack must be locked
+ // while these values are queried. However we use a non-blocking lock request
+ // (TryLockChipStack()) to avoid blocking other UI activities when the CHIP
+ // task is busy (e.g. with a long crypto operation).
+ if (PlatformMgr().TryLockChipStack())
+ {
+ sIsThreadProvisioned = ConnectivityMgr().IsThreadProvisioned();
+ sIsThreadEnabled = ConnectivityMgr().IsThreadEnabled();
+ sHaveBLEConnections = (ConnectivityMgr().NumBLEConnections() != 0);
+ sHaveServiceConnectivity = ConnectivityMgr().HaveServiceConnectivity();
+ PlatformMgr().UnlockChipStack();
+ }
+
+ // Update the status LED if factory reset has not been initiated.
+ //
+ // If system has "full connectivity", keep the LED On constantly.
+ //
+ // If thread and service provisioned, but not attached to the thread network yet OR no
+ // connectivity to the service OR subscriptions are not fully established
+ // THEN blink the LED Off for a short period of time.
+ //
+ // If the system has ble connection(s) uptill the stage above, THEN blink the LEDs at an even
+ // rate of 100ms.
+ //
+ // Otherwise, blink the LED ON for a very short time.
+ if (sAppTask.mFunction != kFunction_FactoryReset)
+ {
+ if (sHaveServiceConnectivity)
+ {
+ sStatusLED.Set(true);
+ }
+ else if (sIsThreadProvisioned && sIsThreadEnabled)
+ {
+ sStatusLED.Blink(950, 50);
+ }
+ else if (sHaveBLEConnections)
+ {
+ sStatusLED.Blink(100, 100);
+ }
+ else
+ {
+ sStatusLED.Blink(50, 950);
+ }
+ }
+
+ sStatusLED.Animate();
+ sLightLED.Animate();
+
+ HandleKeyboard();
+ }
+}
+
+void AppTask::ButtonEventHandler(uint8_t pin_no, uint8_t button_action)
+{
+ if ((pin_no != RESET_BUTTON) && (pin_no != LIGHT_BUTTON) && (pin_no != JOIN_BUTTON))
+ {
+ return;
+ }
+
+ AppEvent button_event;
+ button_event.Type = AppEvent::kEventType_Button;
+ button_event.ButtonEvent.PinNo = pin_no;
+ button_event.ButtonEvent.Action = button_action;
+
+ if (pin_no == RESET_BUTTON)
+ {
+ button_event.Handler = ResetActionEventHandler;
+ }
+ else if (pin_no == LIGHT_BUTTON)
+ {
+ button_event.Handler = LightActionEventHandler;
+ }
+ else if (pin_no == JOIN_BUTTON)
+ {
+ button_event.Handler = JoinHandler;
+ }
+
+ sAppTask.PostEvent(&button_event);
+}
+
+void AppTask::KBD_Callback(uint8_t events)
+{
+ eventMask = eventMask | (uint32_t)(1 << events);
+}
+
+void AppTask::HandleKeyboard(void)
+{
+ uint8_t keyEvent = 0xFF;
+ uint8_t pos = 0;
+
+ while (eventMask)
+ {
+ for (pos = 0; pos < (8 * sizeof(eventMask)); pos++)
+ {
+ if (eventMask & (1 << pos))
+ {
+ keyEvent = pos;
+ eventMask = eventMask & ~(1 << pos);
+ break;
+ }
+ }
+
+ switch (keyEvent)
+ {
+ case gKBD_EventPB1_c:
+ ButtonEventHandler(RESET_BUTTON, RESET_BUTTON_PUSH);
+ break;
+ case gKBD_EventPB2_c:
+ ButtonEventHandler(LIGHT_BUTTON, LIGHT_BUTTON_PUSH);
+ break;
+ case gKBD_EventPB3_c:
+ ButtonEventHandler(JOIN_BUTTON, JOIN_BUTTON_PUSH);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void AppTask::TimerEventHandler(TimerHandle_t xTimer)
+{
+ AppEvent event;
+ event.Type = AppEvent::kEventType_Timer;
+ event.TimerEvent.Context = (void *) xTimer;
+ event.Handler = FunctionTimerEventHandler;
+ sAppTask.PostEvent(&event);
+}
+
+void AppTask::FunctionTimerEventHandler(AppEvent * aEvent)
+{
+ if (aEvent->Type != AppEvent::kEventType_Timer)
+ return;
+
+ K32W_LOG("Device will factory reset...");
+
+ // Actually trigger Factory Reset
+ ConfigurationMgr().InitiateFactoryReset();
+}
+
+void AppTask::ResetActionEventHandler(AppEvent * aEvent)
+{
+ if (aEvent->ButtonEvent.PinNo != RESET_BUTTON)
+ return;
+
+ if (sAppTask.mResetTimerActive)
+ {
+ sAppTask.CancelTimer();
+ sAppTask.mFunction = kFunction_NoneSelected;
+
+ /* restore initial state for the LED indicating Lighting state */
+ if (LightingMgr().IsTurnedOff())
+ {
+ sLightLED.Set(false);
+ }
+ else
+ {
+ sLightLED.Set(true);
+ }
+
+ K32W_LOG("Factory Reset was cancelled!");
+ }
+ else
+ {
+ uint32_t resetTimeout = FACTORY_RESET_TRIGGER_TIMEOUT;
+
+ if (sAppTask.mFunction != kFunction_NoneSelected)
+ {
+ K32W_LOG("Another function is scheduled. Could not initiate Factory Reset!");
+ return;
+ }
+
+ K32W_LOG("Factory Reset Triggered. Push the RESET button within %u ms to cancel!", resetTimeout);
+ sAppTask.mFunction = kFunction_FactoryReset;
+
+ /* LEDs will start blinking to signal that a Factory Reset was scheduled */
+ sStatusLED.Set(false);
+ sLightLED.Set(false);
+
+ sStatusLED.Blink(500);
+ sLightLED.Blink(500);
+
+ sAppTask.StartTimer(FACTORY_RESET_TRIGGER_TIMEOUT);
+ }
+}
+
+void AppTask::LightActionEventHandler(AppEvent * aEvent)
+{
+ LightingManager::Action_t action;
+ int err = CHIP_NO_ERROR;
+ int32_t actor = 0;
+ bool initiated = false;
+
+ if (sAppTask.mFunction != kFunction_NoneSelected)
+ {
+ K32W_LOG("Another function is scheduled. Could not initiate ON/OFF Light command!");
+ return;
+ }
+
+ if (aEvent->Type == AppEvent::kEventType_TurnOn)
+ {
+ action = static_cast<LightingManager::Action_t>(aEvent->LightEvent.Action);
+ actor = aEvent->LightEvent.Actor;
+ }
+ else if (aEvent->Type == AppEvent::kEventType_Button)
+ {
+ if (LightingMgr().IsTurnedOff())
+ {
+ action = LightingManager::TURNON_ACTION;
+ }
+ else
+ {
+ action = LightingManager::TURNOFF_ACTION;
+ }
+ }
+ else
+ {
+ err = CHIP_ERROR_MAX;
+ }
+
+ if (err == CHIP_NO_ERROR)
+ {
+ initiated = LightingMgr().InitiateAction(actor, action);
+
+ if (!initiated)
+ {
+ K32W_LOG("Action is already in progress or active.");
+ }
+ }
+}
+
+void AppTask::ThreadStart()
+{
+ chip::DeviceLayer::Internal::DeviceNetworkInfo networkInfo;
+
+ memset(networkInfo.ThreadNetworkName, 0, chip::DeviceLayer::Internal::kMaxThreadNetworkNameLength + 1);
+ memcpy(networkInfo.ThreadNetworkName, "OpenThread", 10);
+
+ networkInfo.ThreadExtendedPANId[0] = 0xde;
+ networkInfo.ThreadExtendedPANId[1] = 0xad;
+ networkInfo.ThreadExtendedPANId[2] = 0x00;
+ networkInfo.ThreadExtendedPANId[3] = 0xbe;
+ networkInfo.ThreadExtendedPANId[4] = 0xef;
+ networkInfo.ThreadExtendedPANId[5] = 0x00;
+ networkInfo.ThreadExtendedPANId[6] = 0xca;
+ networkInfo.ThreadExtendedPANId[7] = 0xfe;
+
+ networkInfo.ThreadMasterKey[0] = 0x00;
+ networkInfo.ThreadMasterKey[1] = 0x11;
+ networkInfo.ThreadMasterKey[2] = 0x22;
+ networkInfo.ThreadMasterKey[3] = 0x33;
+ networkInfo.ThreadMasterKey[4] = 0x44;
+ networkInfo.ThreadMasterKey[5] = 0x55;
+ networkInfo.ThreadMasterKey[6] = 0x66;
+ networkInfo.ThreadMasterKey[7] = 0x77;
+ networkInfo.ThreadMasterKey[8] = 0x88;
+ networkInfo.ThreadMasterKey[9] = 0x99;
+ networkInfo.ThreadMasterKey[10] = 0xAA;
+ networkInfo.ThreadMasterKey[11] = 0xBB;
+ networkInfo.ThreadMasterKey[12] = 0xCC;
+ networkInfo.ThreadMasterKey[13] = 0xDD;
+ networkInfo.ThreadMasterKey[14] = 0xEE;
+ networkInfo.ThreadMasterKey[15] = 0xFF;
+
+ networkInfo.ThreadPANId = 0xabcd;
+ networkInfo.ThreadChannel = 15;
+
+ networkInfo.FieldPresent.ThreadExtendedPANId = true;
+ networkInfo.FieldPresent.ThreadMeshPrefix = false;
+ networkInfo.FieldPresent.ThreadPSKc = false;
+ networkInfo.NetworkId = 0;
+ networkInfo.FieldPresent.NetworkId = true;
+
+ ThreadStackMgr().SetThreadEnabled(false);
+ ThreadStackMgr().SetThreadProvision(networkInfo);
+ ThreadStackMgr().SetThreadEnabled(true);
+}
+
+void AppTask::JoinHandler(AppEvent * aEvent)
+{
+ if (aEvent->ButtonEvent.PinNo != JOIN_BUTTON)
+ return;
+
+ if (sAppTask.mFunction != kFunction_NoneSelected)
+ {
+ K32W_LOG("Another function is scheduled. Could not initiate Thread Join!");
+ return;
+ }
+
+ /* hard-code Thread Commissioning Parameters for the moment.
+ * In a future PR, these parameters will be sent via BLE.
+ */
+ ThreadStart();
+}
+
+void AppTask::CancelTimer()
+{
+ if (xTimerStop(sFunctionTimer, 0) == pdFAIL)
+ {
+ K32W_LOG("app timer stop() failed");
+ }
+
+ mResetTimerActive = false;
+}
+
+void AppTask::StartTimer(uint32_t aTimeoutInMs)
+{
+ if (xTimerIsTimerActive(sFunctionTimer))
+ {
+ K32W_LOG("app timer already started!");
+ CancelTimer();
+ }
+
+ // timer is not active, change its period to required value (== restart).
+ // FreeRTOS- Block for a maximum of 100 ticks if the change period command
+ // cannot immediately be sent to the timer command queue.
+ if (xTimerChangePeriod(sFunctionTimer, aTimeoutInMs / portTICK_PERIOD_MS, 100) != pdPASS)
+ {
+ K32W_LOG("app timer start() failed");
+ }
+
+ mResetTimerActive = true;
+}
+
+void AppTask::ActionInitiated(LightingManager::Action_t aAction, int32_t aActor)
+{
+ // start flashing the LEDs rapidly to indicate action initiation.
+ if (aAction == LightingManager::TURNON_ACTION)
+ {
+ K32W_LOG("Turn on Action has been initiated")
+ }
+ else if (aAction == LightingManager::TURNOFF_ACTION)
+ {
+ K32W_LOG("Turn off Action has been initiated")
+ }
+
+ sAppTask.mFunction = kFunctionTurnOnTurnOff;
+}
+
+void AppTask::ActionCompleted(LightingManager::Action_t aAction)
+{
+ // Turn on the light LED if in a TURNON state OR
+ // Turn off the light LED if in a TURNOFF state.
+ if (aAction == LightingManager::TURNON_ACTION)
+ {
+ K32W_LOG("Turn on action has been completed")
+ sLightLED.Set(true);
+ }
+ else if (aAction == LightingManager::TURNOFF_ACTION)
+ {
+ K32W_LOG("Turn off action has been completed")
+ sLightLED.Set(false);
+ }
+
+ sAppTask.mFunction = kFunction_NoneSelected;
+}
+
+void AppTask::PostTurnOnActionRequest(int32_t aActor, LightingManager::Action_t aAction)
+{
+ AppEvent event;
+ event.Type = AppEvent::kEventType_TurnOn;
+ event.LightEvent.Actor = aActor;
+ event.LightEvent.Action = aAction;
+ event.Handler = LightActionEventHandler;
+ PostEvent(&event);
+}
+
+void AppTask::PostEvent(const AppEvent * aEvent)
+{
+ if (sAppEventQueue != NULL)
+ {
+ if (!xQueueSend(sAppEventQueue, aEvent, 1))
+ {
+ K32W_LOG("Failed to post event to app task event queue");
+ }
+ }
+}
+
+void AppTask::DispatchEvent(AppEvent * aEvent)
+{
+ if (aEvent->Handler)
+ {
+ aEvent->Handler(aEvent);
+ }
+ else
+ {
+ K32W_LOG("Event received with no handler. Dropping event.");
+ }
+}
+
+void AppTask::UpdateClusterState(void)
+{
+ uint8_t newValue = !LightingMgr().IsTurnedOff();
+
+ // write the new on/off value
+ EmberAfStatus status = emberAfWriteAttribute(1, ZCL_ON_OFF_CLUSTER_ID, ZCL_ON_OFF_ATTRIBUTE_ID, CLUSTER_MASK_SERVER,
+ (uint8_t *) &newValue, ZCL_BOOLEAN_ATTRIBUTE_TYPE);
+ if (status != EMBER_ZCL_STATUS_SUCCESS)
+ {
+ ChipLogError(NotSpecified, "ERR: updating on/off %x", status);
+ }
+}
--- /dev/null
+/*
+ *
+ * Copyright (c) 2021 Project CHIP Authors
+ * Copyright (c) 2019 Google LLC.
+ * All rights reserved.
+ *
+ * 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 "LightingManager.h"
+
+#include "AppTask.h"
+#include "FreeRTOS.h"
+
+#include "app_config.h"
+
+LightingManager LightingManager::sLight;
+
+TimerHandle_t sLightTimer; // FreeRTOS app sw timer.
+
+int LightingManager::Init()
+{
+ int err = CHIP_NO_ERROR;
+
+ // Create FreeRTOS sw timer for light timer.
+
+ sLightTimer = xTimerCreate("LightTmr", // Just a text name, not used by the RTOS kernel
+ 1, // == default timer period (mS)
+ false, // no timer reload (==one-shot)
+ (void *) this, // init timer id = light obj context
+ TimerEventHandler // timer callback handler
+ );
+
+ if (sLightTimer == NULL)
+ {
+ K32W_LOG("light timer create failed");
+ assert(0);
+ }
+
+ mState = kState_TurnOffCompleted;
+ mAutoTurnOnTimerArmed = false;
+ mAutoTurnOn = false;
+ mAutoTurnOnDuration = 0;
+
+ return err;
+}
+
+void LightingManager::SetCallbacks(Callback_fn_initiated aActionInitiated_CB, Callback_fn_completed aActionCompleted_CB)
+{
+ mActionInitiated_CB = aActionInitiated_CB;
+ mActionCompleted_CB = aActionCompleted_CB;
+}
+
+bool LightingManager::IsActionInProgress()
+{
+ return (mState == kState_TurnOnInitiated || mState == kState_TurnOffInitiated) ? true : false;
+}
+
+bool LightingManager::IsTurnedOff()
+{
+ return (mState == kState_TurnOffCompleted) ? true : false;
+}
+
+void LightingManager::EnableAutoTurnOn(bool aOn)
+{
+ mAutoTurnOn = aOn;
+}
+
+void LightingManager::SetAutoTurnOnDuration(uint32_t aDurationInSecs)
+{
+ mAutoTurnOnDuration = aDurationInSecs;
+}
+
+bool LightingManager::InitiateAction(int32_t aActor, Action_t aAction)
+{
+ bool action_initiated = false;
+ State_t new_state;
+
+ // Initiate ON/OFF Action only when the previous one is complete.
+ if (mState == kState_TurnOnCompleted && aAction == TURNOFF_ACTION)
+ {
+ action_initiated = true;
+
+ new_state = kState_TurnOffInitiated;
+ }
+ else if (mState == kState_TurnOffCompleted && aAction == TURNON_ACTION)
+ {
+ action_initiated = true;
+
+ new_state = kState_TurnOnInitiated;
+ }
+
+ if (action_initiated)
+ {
+ if (mAutoTurnOnTimerArmed && new_state == kState_TurnOnInitiated)
+ {
+ // If auto turnon timer has been armed and someone initiates turn on the ligth,
+ // cancel the timer and continue as normal.
+ mAutoTurnOnTimerArmed = false;
+
+ CancelTimer();
+ }
+
+ StartTimer(ACTUATOR_MOVEMENT_PERIOS_MS);
+
+ // Since the timer started successfully, update the state and trigger callback
+ mState = new_state;
+
+ if (mActionInitiated_CB)
+ {
+ mActionInitiated_CB(aAction, aActor);
+ }
+ }
+
+ return action_initiated;
+}
+
+void LightingManager::StartTimer(uint32_t aTimeoutMs)
+{
+ if (xTimerIsTimerActive(sLightTimer))
+ {
+ K32W_LOG("light timer already started!");
+ // appError(err);
+ CancelTimer();
+ }
+
+ // timer is not active, change its period to required value.
+ // This also causes the timer to start. FreeRTOS- Block for a maximum of
+ // 100 ticks if the change period command cannot immediately be sent to the
+ // timer command queue.
+ if (xTimerChangePeriod(sLightTimer, aTimeoutMs / portTICK_PERIOD_MS, 100) != pdPASS)
+ {
+ K32W_LOG("light timer start() failed");
+ // appError(err);
+ }
+}
+
+void LightingManager::CancelTimer(void)
+{
+ if (xTimerStop(sLightTimer, 0) == pdFAIL)
+ {
+ K32W_LOG("light timer stop() failed");
+ // appError(err);
+ }
+}
+
+void LightingManager::TimerEventHandler(TimerHandle_t xTimer)
+{
+ // Get light obj context from timer id.
+ LightingManager * light = static_cast<LightingManager *>(pvTimerGetTimerID(xTimer));
+
+ // The timer event handler will be called in the context of the timer task
+ // once sLightTimer expires. Post an event to apptask queue with the actual handler
+ // so that the event can be handled in the context of the apptask.
+ AppEvent event;
+ event.Type = AppEvent::kEventType_Timer;
+ event.TimerEvent.Context = light;
+
+ if (light->mAutoTurnOnTimerArmed)
+ {
+ event.Handler = AutoReTurnOnTimerEventHandler;
+ GetAppTask().PostEvent(&event);
+ }
+ else
+ {
+ event.Handler = ActuatorMovementTimerEventHandler;
+ GetAppTask().PostEvent(&event);
+ }
+}
+
+void LightingManager::AutoReTurnOnTimerEventHandler(AppEvent * aEvent)
+{
+ LightingManager * light = static_cast<LightingManager *>(aEvent->TimerEvent.Context);
+ int32_t actor = 0;
+
+ // Make sure auto light timer is still armed.
+ if (!light->mAutoTurnOnTimerArmed)
+ {
+ return;
+ }
+
+ light->mAutoTurnOnTimerArmed = false;
+
+ K32W_LOG("Auto Turn On has been triggered!");
+
+ light->InitiateAction(actor, TURNON_ACTION);
+}
+
+void LightingManager::ActuatorMovementTimerEventHandler(AppEvent * aEvent)
+{
+ Action_t actionCompleted = INVALID_ACTION;
+
+ LightingManager * light = static_cast<LightingManager *>(aEvent->TimerEvent.Context);
+
+ if (light->mState == kState_TurnOnInitiated)
+ {
+ light->mState = kState_TurnOnCompleted;
+ actionCompleted = TURNON_ACTION;
+ }
+ else if (light->mState == kState_TurnOffInitiated)
+ {
+ light->mState = kState_TurnOffCompleted;
+ actionCompleted = TURNOFF_ACTION;
+ }
+
+ if (actionCompleted != INVALID_ACTION)
+ {
+ if (light->mActionCompleted_CB)
+ {
+ light->mActionCompleted_CB(actionCompleted);
+ }
+
+ if (light->mAutoTurnOn && actionCompleted == TURNOFF_ACTION)
+ {
+ // Start the timer for auto turn on
+ light->StartTimer(light->mAutoTurnOnDuration * 1000);
+
+ light->mAutoTurnOnTimerArmed = true;
+
+ K32W_LOG("Auto Turn On enabled. Will be triggered in %u seconds", light->mAutoTurnOnDuration);
+ }
+ }
+}
--- /dev/null
+/*
+ *
+ * Copyright (c) 2021 Project CHIP Authors
+ * All rights reserved.
+ *
+ * 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 <support/logging/CHIPLogging.h>
+
+#include "AppTask.h"
+#include "LightingManager.h"
+
+#include "af.h"
+#include "gen/attribute-id.h"
+#include "gen/cluster-id.h"
+#include <app/util/af-types.h>
+
+using namespace ::chip;
+
+void emberAfPostAttributeChangeCallback(EndpointId endpoint, ClusterId clusterId, AttributeId attributeId, uint8_t mask,
+ uint16_t manufacturerCode, uint8_t type, uint8_t size, uint8_t * value)
+{
+ if (clusterId != ZCL_ON_OFF_CLUSTER_ID)
+ {
+ ChipLogProgress(Zcl, "Unknown cluster ID: %d", clusterId);
+ return;
+ }
+
+ if (attributeId != ZCL_ON_OFF_ATTRIBUTE_ID)
+ {
+ ChipLogProgress(Zcl, "Unknown attribute ID: %d", attributeId);
+ return;
+ }
+
+ LightingMgr().InitiateAction(0, *value ? LightingManager::TURNON_ACTION : LightingManager::TURNOFF_ACTION);
+}
+
+/** @brief OnOff Cluster Init
+ *
+ * This function is called when a specific cluster is initialized. It gives the
+ * application an opportunity to take care of cluster initialization procedures.
+ * It is called exactly once for each endpoint where cluster is present.
+ *
+ * @param endpoint Ver.: always
+ *
+ * TODO Issue #3841
+ * emberAfOnOffClusterInitCallback happens before the stack initialize the cluster
+ * attributes to the default value.
+ * The logic here expects something similar to the deprecated Plugins callback
+ * emberAfPluginOnOffClusterServerPostInitCallback.
+ *
+ */
+void emberAfOnOffClusterInitCallback(EndpointId endpoint)
+{
+ GetAppTask().UpdateClusterState();
+}
--- /dev/null
+/*
+ *
+ * Copyright (c) 2021 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * 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
+
+struct AppEvent;
+typedef void (*EventHandler)(AppEvent *);
+
+struct AppEvent
+{
+ enum AppEventTypes
+ {
+ kEventType_Button = 0,
+ kEventType_Timer,
+ kEventType_TurnOn,
+ kEventType_Install,
+ };
+
+ uint16_t Type;
+
+ union
+ {
+ struct
+ {
+ uint8_t PinNo;
+ uint8_t Action;
+ } ButtonEvent;
+ struct
+ {
+ void * Context;
+ } TimerEvent;
+ struct
+ {
+ uint8_t Action;
+ int32_t Actor;
+ } LightEvent;
+ };
+
+ EventHandler Handler;
+};
--- /dev/null
+/*
+ *
+ * Copyright (c) 2021 Google LLC.
+ * All rights reserved.
+ *
+ * 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 <stdbool.h>
+#include <stdint.h>
+
+#include "AppEvent.h"
+#include "LightingManager.h"
+
+#include <platform/CHIPDeviceLayer.h>
+
+#include "FreeRTOS.h"
+#include "timers.h"
+
+class AppTask
+{
+public:
+ int StartAppTask();
+ static void AppTaskMain(void * pvParameter);
+
+ void PostTurnOnActionRequest(int32_t aActor, LightingManager::Action_t aAction);
+ void PostEvent(const AppEvent * event);
+
+ void UpdateClusterState(void);
+
+private:
+ friend AppTask & GetAppTask(void);
+
+ int Init();
+
+ static void ActionInitiated(LightingManager::Action_t aAction, int32_t aActor);
+ static void ActionCompleted(LightingManager::Action_t aAction);
+
+ void CancelTimer(void);
+
+ void DispatchEvent(AppEvent * event);
+
+ static void FunctionTimerEventHandler(AppEvent * aEvent);
+ static void KBD_Callback(uint8_t events);
+ static void HandleKeyboard(void);
+ static void JoinHandler(AppEvent * aEvent);
+ static void LightActionEventHandler(AppEvent * aEvent);
+ static void ResetActionEventHandler(AppEvent * aEvent);
+ static void InstallEventHandler(AppEvent * aEvent);
+
+ static void ButtonEventHandler(uint8_t pin_no, uint8_t button_action);
+ static void TimerEventHandler(TimerHandle_t xTimer);
+
+ static void ThreadStart();
+ void StartTimer(uint32_t aTimeoutInMs);
+
+ enum Function_t
+ {
+ kFunction_NoneSelected = 0,
+ kFunction_SoftwareUpdate = 0,
+ kFunction_FactoryReset,
+ kFunctionTurnOnTurnOff,
+
+ kFunction_Invalid
+ } Function;
+
+ Function_t mFunction;
+ bool mResetTimerActive;
+
+ static AppTask sAppTask;
+};
+
+inline AppTask & GetAppTask(void)
+{
+ return AppTask::sAppTask;
+}
--- /dev/null
+/*
+ *
+ * Copyright (c) 2021 Google LLC.
+ * All rights reserved.
+ *
+ * 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 <stdbool.h>
+#include <stdint.h>
+
+#include "AppEvent.h"
+
+#include "FreeRTOS.h"
+#include "timers.h" // provides FreeRTOS timer support
+
+class LightingManager
+{
+public:
+ enum Action_t
+ {
+ TURNON_ACTION = 0,
+ TURNOFF_ACTION,
+
+ INVALID_ACTION
+ } Action;
+
+ enum State_t
+ {
+ kState_TurnOnInitiated = 0,
+ kState_TurnOnCompleted,
+ kState_TurnOffInitiated,
+ kState_TurnOffCompleted,
+ } State;
+
+ int Init();
+ bool IsTurnedOff();
+ void EnableAutoTurnOn(bool aOn);
+ void SetAutoTurnOnDuration(uint32_t aDurationInSecs);
+ bool IsActionInProgress();
+ bool InitiateAction(int32_t aActor, Action_t aAction);
+
+ typedef void (*Callback_fn_initiated)(Action_t, int32_t aActor);
+ typedef void (*Callback_fn_completed)(Action_t);
+ void SetCallbacks(Callback_fn_initiated aActionInitiated_CB, Callback_fn_completed aActionCompleted_CB);
+
+private:
+ friend LightingManager & LightingMgr(void);
+ State_t mState;
+
+ Callback_fn_initiated mActionInitiated_CB;
+ Callback_fn_completed mActionCompleted_CB;
+
+ bool mAutoTurnOn;
+ uint32_t mAutoTurnOnDuration;
+ bool mAutoTurnOnTimerArmed;
+
+ void CancelTimer(void);
+ void StartTimer(uint32_t aTimeoutMs);
+
+ static void TimerEventHandler(TimerHandle_t xTimer);
+ static void AutoReTurnOnTimerEventHandler(AppEvent * aEvent);
+ static void ActuatorMovementTimerEventHandler(AppEvent * aEvent);
+
+ static LightingManager sLight;
+};
+
+inline LightingManager & LightingMgr(void)
+{
+ return LightingManager::sLight;
+}
--- /dev/null
+/*
+ *
+ * Copyright (c) 2021 Google LLC.
+ * All rights reserved.
+ *
+ * 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 "LED.h"
+
+#pragma once
+
+// ---- Light Example App Config ----
+
+#define RESET_BUTTON 1
+#define LIGHT_BUTTON 2
+#define JOIN_BUTTON 3
+
+#define RESET_BUTTON_PUSH 1
+#define LIGHT_BUTTON_PUSH 2
+#define JOIN_BUTTON_PUSH 3
+
+#define APP_BUTTON_PUSH 1
+
+#define SYSTEM_STATE_LED LED1
+#define LIGHT_STATE_LED LED2
+
+// Time it takes for the light to switch on/off
+#define ACTUATOR_MOVEMENT_PERIOS_MS 50
+
+// ---- Light Example SWU Config ----
+#define SWU_INTERVAl_WINDOW_MIN_MS (23 * 60 * 60 * 1000) // 23 hours
+#define SWU_INTERVAl_WINDOW_MAX_MS (24 * 60 * 60 * 1000) // 24 hours
+
+// ---- Thread Polling Config ----
+#define THREAD_ACTIVE_POLLING_INTERVAL_MS 100
+#define THREAD_INACTIVE_POLLING_INTERVAL_MS 1000
+
+#if K32W_LOG_ENABLED
+#define K32W_LOG(...) otPlatLog(OT_LOG_LEVEL_NONE, OT_LOG_REGION_API, ##__VA_ARGS__);
+#else
+#define K32W_LOG(...)
+#endif
--- /dev/null
+/*
+ *
+ * Copyright (c) 2021 Google LLC.
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+// ================================================================================
+// Main Code
+// ================================================================================
+
+#include "openthread/platform/logging.h"
+#include "openthread/platform/uart.h"
+#include <mbedtls/platform.h>
+#include <openthread-system.h>
+#include <openthread/cli.h>
+#include <openthread/error.h>
+#include <openthread/heap.h>
+
+#include <core/CHIPError.h>
+#include <platform/CHIPDeviceLayer.h>
+#include <platform/ThreadStackManager.h>
+#include <support/CHIPMem.h>
+#include <support/logging/CHIPLogging.h>
+
+#include "FreeRtosMbedtlsUtils.h"
+#include "app_config.h"
+
+#include "radio.h"
+
+using namespace ::chip;
+using namespace ::chip::Inet;
+using namespace ::chip::DeviceLayer;
+using namespace ::chip::Logging;
+
+extern "C" void * pvPortCallocRtos(size_t num, size_t size);
+
+#include <AppTask.h>
+
+typedef void (*InitFunc)(void);
+extern InitFunc __init_array_start;
+extern InitFunc __init_array_end;
+
+/* needed for FreeRtos Heap 4 */
+uint8_t __attribute__((section(".heap"))) ucHeap[0xF000];
+
+extern "C" void main_task(void const * argument)
+{
+ CHIP_ERROR ret = CHIP_ERROR_MAX;
+
+ /* Call C++ constructors */
+ InitFunc * pFunc = &__init_array_start;
+ for (; pFunc < &__init_array_end; ++pFunc)
+ {
+ (*pFunc)();
+ }
+
+ mbedtls_platform_set_calloc_free(pvPortCallocRtos, vPortFree);
+
+ /* Used for HW initializations */
+ otSysInit(0, NULL);
+
+ /* UART needs to be enabled so early for getting the Weave Init Logs.
+ * Otherwise, some logs are lost because the UART gets enabled later
+ * during the initialization of the Thread stack */
+ otPlatUartEnable();
+
+ K32W_LOG("Welcome to NXP Lighting Demo App");
+
+ /* Mbedtls Threading support is needed because both
+ * Thread and Weave tasks are using it */
+ freertos_mbedtls_mutex_init();
+
+ // Init Chip memory management before the stack
+ chip::Platform::MemoryInit();
+
+ ret = PlatformMgr().InitChipStack();
+ if (ret != CHIP_NO_ERROR)
+ {
+ K32W_LOG("Error during PlatformMgr().InitWeaveStack()");
+ goto exit;
+ }
+
+ ret = ThreadStackMgr().InitThreadStack();
+ if (ret != CHIP_NO_ERROR)
+ {
+ K32W_LOG("Error during ThreadStackMgr().InitThreadStack()");
+ goto exit;
+ }
+
+ ret = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_SleepyEndDevice);
+ if (ret != CHIP_NO_ERROR)
+ {
+ goto exit;
+ }
+
+ // Configure the Thread polling behavior for the device.
+ {
+ ConnectivityManager::ThreadPollingConfig pollingConfig;
+ pollingConfig.Clear();
+ pollingConfig.ActivePollingIntervalMS = THREAD_ACTIVE_POLLING_INTERVAL_MS;
+ pollingConfig.InactivePollingIntervalMS = THREAD_INACTIVE_POLLING_INTERVAL_MS;
+
+ ret = ConnectivityMgr().SetThreadPollingConfig(pollingConfig);
+ if (ret != CHIP_NO_ERROR)
+ {
+ K32W_LOG("Error during ConnectivityMgr().SetThreadPollingConfig(pollingConfig)");
+ goto exit;
+ }
+ }
+
+ ret = PlatformMgr().StartEventLoopTask();
+ if (ret != CHIP_NO_ERROR)
+ {
+ K32W_LOG("Error during PlatformMgr().StartEventLoopTask();");
+ goto exit;
+ }
+
+ // Start OpenThread task
+ ret = ThreadStackMgrImpl().StartThreadTask();
+ if (ret != CHIP_NO_ERROR)
+ {
+ K32W_LOG("Error during ThreadStackMgrImpl().StartThreadTask()");
+ goto exit;
+ }
+
+ ret = GetAppTask().StartAppTask();
+ if (ret != CHIP_NO_ERROR)
+ {
+ K32W_LOG("Error during GetAppTask().StartAppTask()");
+ goto exit;
+ }
+
+ GetAppTask().AppTaskMain(NULL);
+
+exit:
+ return;
+}
--- /dev/null
+../../../..
\ No newline at end of file
#import "CHIPDevice.h"
#import "CHIPDevice_Internal.h"
-#import "ChipError.h"
+#import "CHIPError.h"
#import "gen/CHIPClientCallbacks.h"
#import "gen/CHIPClustersObjc.h"
bool mKeepAlive;
};
+class CHIPInt64uAttributeCallbackBridge : public Callback::Callback<Int64uAttributeCallback> {
+public:
+ CHIPInt64uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+ : Callback::Callback<Int64uAttributeCallback>(CallbackFn, this)
+ , mHandler(handler)
+ , mQueue(queue)
+ , mKeepAlive(keepAlive)
+ {
+ }
+
+ ~CHIPInt64uAttributeCallbackBridge() {};
+
+ static void CallbackFn(void * context, uint64_t value)
+ {
+ CHIPInt64uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt64uAttributeCallbackBridge *>(context);
+ if (callback && callback->mQueue) {
+ dispatch_async(callback->mQueue, ^{
+ callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedLongLong:value] });
+ if (!callback->mKeepAlive) {
+ callback->Cancel();
+ delete callback;
+ }
+ });
+ }
+ };
+
+private:
+ ResponseHandler mHandler;
+ dispatch_queue_t mQueue;
+ bool mKeepAlive;
+};
+
class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
public:
CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
#define ZCL_FABRIC_ID_ATTRIBUTE_ID (0x0000)
#define ZCL_BREADCRUMB_ATTRIBUTE_ID (0x0001)
+// Attribute ids for cluster: Network Commissioning
+
+// Client attributes
+
+// Server attributes
+
// Attribute ids for cluster: Shade Configuration
// Client attributes
// Server attributes
-// Attribute ids for cluster: Network Commissioning
-
-// Client attributes
-
-// Server attributes
-
// Attribute ids for cluster: Binding
// Client attributes
\
ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+/** @brief Command description for ScanNetworks
+ *
+ * Command: ScanNetworks
+ * @param ssid OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterScanNetworks(ssid, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_NETWORKS_COMMAND_ID, "uuu", ssid, breadcrumb, timeoutMs);
+
+/** @brief Command description for ScanNetworksResponse
+ *
+ * Command: ScanNetworksResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ * @param wifiScanResults WiFiInterfaceScanResult []
+ * @param wifiScanResultsLen int
+ * @param threadScanResults ThreadInterfaceScanResult []
+ * @param threadScanResultsLen int
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterScanNetworksResponse(errorCode, debugText, wifiScanResults, wifiScanResultsLen, threadScanResults, \
+ threadScanResultsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID, "uubb", errorCode, debugText, wifiScanResults, \
+ wifiScanResultsLen, threadScanResults, threadScanResultsLen);
+
+/** @brief Command description for AddWiFiNetwork
+ *
+ * Command: AddWiFiNetwork
+ * @param ssid OCTET_STRING
+ * @param credentials OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
+
+/** @brief Command description for AddWiFiNetworkResponse
+ *
+ * Command: AddWiFiNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddWiFiNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for UpdateWiFiNetwork
+ *
+ * Command: UpdateWiFiNetwork
+ * @param ssid OCTET_STRING
+ * @param credentials OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
+
+/** @brief Command description for UpdateWiFiNetworkResponse
+ *
+ * Command: UpdateWiFiNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateWiFiNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for AddThreadNetwork
+ *
+ * Command: AddThreadNetwork
+ * @param operationalDataset OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
+
+/** @brief Command description for AddThreadNetworkResponse
+ *
+ * Command: AddThreadNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddThreadNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for UpdateThreadNetwork
+ *
+ * Command: UpdateThreadNetwork
+ * @param operationalDataset OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
+
+/** @brief Command description for UpdateThreadNetworkResponse
+ *
+ * Command: UpdateThreadNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateThreadNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for RemoveNetwork
+ *
+ * Command: RemoveNetwork
+ * @param NetworkID OCTET_STRING
+ * @param Breadcrumb INT64U
+ * @param TimeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterRemoveNetwork(NetworkID, Breadcrumb, TimeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_NETWORK_COMMAND_ID, "uuu", NetworkID, Breadcrumb, TimeoutMs);
+
+/** @brief Command description for RemoveNetworkResponse
+ *
+ * Command: RemoveNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterRemoveNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for EnableNetwork
+ *
+ * Command: EnableNetwork
+ * @param networkID OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterEnableNetwork(networkID, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
+
+/** @brief Command description for EnableNetworkResponse
+ *
+ * Command: EnableNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterEnableNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for DisableNetwork
+ *
+ * Command: DisableNetwork
+ * @param networkID OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterDisableNetwork(networkID, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
+
+/** @brief Command description for DisableNetworkResponse
+ *
+ * Command: DisableNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterDisableNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for GetLastNetworkCommissioningResult
+ *
+ * Command: GetLastNetworkCommissioningResult
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterGetLastNetworkCommissioningResult(timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID, "u", timeoutMs);
+
/** @brief Command description for LockDoor
*
* Command: LockDoor
ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID, "uuuub", startIndex, total, startIndex, count, \
endpointInformationRecordList, endpointInformationRecordListLen);
-/** @brief Command description for ScanNetworks
- *
- * Command: ScanNetworks
- * @param ssid OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterScanNetworks(ssid, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_SCAN_NETWORKS_COMMAND_ID, "uuu", ssid, breadcrumb, timeoutMs);
-
-/** @brief Command description for ScanNetworksResponse
- *
- * Command: ScanNetworksResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- * @param wifiScanResults WiFiInterfaceScanResult []
- * @param wifiScanResultsLen int
- * @param threadScanResults ThreadInterfaceScanResult []
- * @param threadScanResultsLen int
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterScanNetworksResponse(errorCode, debugText, wifiScanResults, wifiScanResultsLen, threadScanResults, \
- threadScanResultsLen) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID, "uubb", errorCode, debugText, wifiScanResults, \
- wifiScanResultsLen, threadScanResults, threadScanResultsLen);
-
-/** @brief Command description for AddWiFiNetwork
- *
- * Command: AddWiFiNetwork
- * @param ssid OCTET_STRING
- * @param credentials OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
-
-/** @brief Command description for AddWiFiNetworkResponse
- *
- * Command: AddWiFiNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddWiFiNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for UpdateWiFiNetwork
- *
- * Command: UpdateWiFiNetwork
- * @param ssid OCTET_STRING
- * @param credentials OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
-
-/** @brief Command description for UpdateWiFiNetworkResponse
- *
- * Command: UpdateWiFiNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateWiFiNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for AddThreadNetwork
- *
- * Command: AddThreadNetwork
- * @param operationalDataset OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
-
-/** @brief Command description for AddThreadNetworkResponse
- *
- * Command: AddThreadNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddThreadNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for UpdateThreadNetwork
- *
- * Command: UpdateThreadNetwork
- * @param operationalDataset OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
-
-/** @brief Command description for UpdateThreadNetworkResponse
- *
- * Command: UpdateThreadNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateThreadNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for RemoveNetwork
- *
- * Command: RemoveNetwork
- * @param NetworkID OCTET_STRING
- * @param Breadcrumb INT64U
- * @param TimeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterRemoveNetwork(NetworkID, Breadcrumb, TimeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_REMOVE_NETWORK_COMMAND_ID, "uuu", NetworkID, Breadcrumb, TimeoutMs);
-
-/** @brief Command description for RemoveNetworkResponse
- *
- * Command: RemoveNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterRemoveNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for EnableNetwork
- *
- * Command: EnableNetwork
- * @param networkID OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterEnableNetwork(networkID, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ENABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
-
-/** @brief Command description for EnableNetworkResponse
- *
- * Command: EnableNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterEnableNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for DisableNetwork
- *
- * Command: DisableNetwork
- * @param networkID OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterDisableNetwork(networkID, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_DISABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
-
-/** @brief Command description for DisableNetworkResponse
- *
- * Command: DisableNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterDisableNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for GetLastNetworkCommissioningResult
- *
- * Command: GetLastNetworkCommissioningResult
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterGetLastNetworkCommissioningResult(timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID, "u", timeoutMs);
-
/** @brief Command description for Bind
*
* Command: Bind
// Definitions for cluster: General Commissioning
#define ZCL_GENERAL_COMMISSIONING_CLUSTER_ID (0x0030)
+// Definitions for cluster: Network Commissioning
+#define ZCL_NETWORK_COMMISSIONING_CLUSTER_ID (0x0031)
+
// Definitions for cluster: Shade Configuration
#define ZCL_SHADE_CONFIG_CLUSTER_ID (0x0100)
// Definitions for cluster: ZLL Commissioning
#define ZCL_ZLL_COMMISSIONING_CLUSTER_ID (0x1000)
-// Definitions for cluster: Network Commissioning
-#define ZCL_NETWORK_COMMISSIONING_CLUSTER_ID (0xAAAA)
-
// Definitions for cluster: Binding
#define ZCL_BINDING_CLUSTER_ID (0xF000)
#define ZCL_COMMISSIONING_COMPLETE_COMMAND_ID (0x06)
#define ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID (0x07)
+// Commands for cluster: Network Commissioning
+#define ZCL_SCAN_NETWORKS_COMMAND_ID (0x00)
+#define ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_ADD_WI_FI_NETWORK_COMMAND_ID (0x02)
+#define ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID (0x04)
+#define ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_ADD_THREAD_NETWORK_COMMAND_ID (0x06)
+#define ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID (0x08)
+#define ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_REMOVE_NETWORK_COMMAND_ID (0x0A)
+#define ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID (0x0B)
+#define ZCL_ENABLE_NETWORK_COMMAND_ID (0x0C)
+#define ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_DISABLE_NETWORK_COMMAND_ID (0x0E)
+#define ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID (0x0F)
+#define ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID (0x10)
+
// Commands for cluster: Door Lock
#define ZCL_LOCK_DOOR_COMMAND_ID (0x00)
#define ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID (0x00)
#define ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID (0x42)
#define ZCL_GET_ENDPOINT_LIST_RESPONSE_COMMAND_ID (0x42)
-// Commands for cluster: Network Commissioning
-#define ZCL_SCAN_NETWORKS_COMMAND_ID (0x00)
-#define ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID (0x01)
-#define ZCL_ADD_WI_FI_NETWORK_COMMAND_ID (0x02)
-#define ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x03)
-#define ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID (0x04)
-#define ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x05)
-#define ZCL_ADD_THREAD_NETWORK_COMMAND_ID (0x06)
-#define ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x07)
-#define ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID (0x08)
-#define ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x09)
-#define ZCL_REMOVE_NETWORK_COMMAND_ID (0x0A)
-#define ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID (0x0B)
-#define ZCL_ENABLE_NETWORK_COMMAND_ID (0x0C)
-#define ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID (0x0D)
-#define ZCL_DISABLE_NETWORK_COMMAND_ID (0x0E)
-#define ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID (0x0F)
-#define ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID (0x10)
-
// Commands for cluster: Binding
#define ZCL_BIND_COMMAND_ID (0x00)
#define ZCL_UNBIND_COMMAND_ID (0x01)
0x0028, ZAP_ATTRIBUTE_INDEX(4), 12, 254, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Basic (server) */ \
{ \
- 0xAAAA, ZAP_ATTRIBUTE_INDEX(16), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0x0031, ZAP_ATTRIBUTE_INDEX(16), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Network Commissioning (server) */ \
}
{ 0x0028, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Basic (server): StartUp */ \
{ 0x0028, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Basic (server): ShutDown */ \
{ 0x0028, 0x02, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Basic (server): Leave */ \
- { 0xAAAA, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): ScanNetworks */ \
- { 0xAAAA, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): ScanNetworksResponse */ \
- { 0xAAAA, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): AddWiFiNetwork */ \
- { 0xAAAA, 0x03, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): AddWiFiNetworkResponse */ \
- { 0xAAAA, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): UpdateWiFiNetwork */ \
- { 0xAAAA, 0x05, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): UpdateWiFiNetworkResponse */ \
- { 0xAAAA, 0x06, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): AddThreadNetwork */ \
- { 0xAAAA, 0x07, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): AddThreadNetworkResponse */ \
- { 0xAAAA, 0x08, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): UpdateThreadNetwork */ \
- { 0xAAAA, 0x09, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): UpdateThreadNetworkResponse */ \
- { 0xAAAA, 0x0A, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): RemoveNetwork */ \
- { 0xAAAA, 0x0B, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): RemoveNetworkResponse */ \
- { 0xAAAA, 0x0C, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): EnableNetwork */ \
- { 0xAAAA, 0x0D, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): EnableNetworkResponse */ \
- { 0xAAAA, 0x0E, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): DisableNetwork */ \
- { 0xAAAA, 0x0F, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): DisableNetworkResponse */ \
- { 0xAAAA, 0x10, \
+ { 0x0031, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): ScanNetworks */ \
+ { 0x0031, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): ScanNetworksResponse */ \
+ { 0x0031, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): AddWiFiNetwork */ \
+ { 0x0031, 0x03, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): AddWiFiNetworkResponse */ \
+ { 0x0031, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): UpdateWiFiNetwork */ \
+ { 0x0031, 0x05, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): UpdateWiFiNetworkResponse */ \
+ { 0x0031, 0x06, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): AddThreadNetwork */ \
+ { 0x0031, 0x07, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): AddThreadNetworkResponse */ \
+ { 0x0031, 0x08, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): UpdateThreadNetwork */ \
+ { 0x0031, 0x09, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): UpdateThreadNetworkResponse */ \
+ { 0x0031, 0x0A, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): RemoveNetwork */ \
+ { 0x0031, 0x0B, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): RemoveNetworkResponse */ \
+ { 0x0031, 0x0C, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): EnableNetwork */ \
+ { 0x0031, 0x0D, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): EnableNetworkResponse */ \
+ { 0x0031, 0x0E, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): DisableNetwork */ \
+ { 0x0031, 0x0F, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): DisableNetworkResponse */ \
+ { 0x0031, 0x10, \
ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): GetLastNetworkCommissioningResult */ \
}
#define CHIP_PRINTCLUSTER_GENERAL_COMMISSIONING_CLUSTER
#endif
+#if defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER { ZCL_NETWORK_COMMISSIONING_CLUSTER_ID, 49, "Network Commissioning" },
+#else
+#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER
+#endif
+
#if defined(ZCL_USING_SHADE_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_SHADE_CONFIG_CLUSTER_CLIENT)
#define CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER { ZCL_SHADE_CONFIG_CLUSTER_ID, 256, "Shade Configuration" },
#else
#define CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER
#endif
-#if defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_CLIENT)
-#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER { ZCL_NETWORK_COMMISSIONING_CLUSTER_ID, 43690, "Network Commissioning" },
-#else
-#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER
-#endif
-
#if defined(ZCL_USING_BINDING_CLUSTER_SERVER) || defined(ZCL_USING_BINDING_CLUSTER_CLIENT)
#define CHIP_PRINTCLUSTER_BINDING_CLUSTER { ZCL_BINDING_CLUSTER_ID, 61440, "Binding" },
#else
CHIP_PRINTCLUSTER_KEEPALIVE_CLUSTER \
CHIP_PRINTCLUSTER_BASIC_CLUSTER \
CHIP_PRINTCLUSTER_GENERAL_COMMISSIONING_CLUSTER \
+ CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER \
CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER \
CHIP_PRINTCLUSTER_DOOR_LOCK_CLUSTER \
CHIP_PRINTCLUSTER_WINDOW_COVERING_CLUSTER \
CHIP_PRINTCLUSTER_ELECTRICAL_MEASUREMENT_CLUSTER \
CHIP_PRINTCLUSTER_DIAGNOSTICS_CLUSTER \
CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER \
- CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER \
CHIP_PRINTCLUSTER_BINDING_CLUSTER \
CHIP_PRINTCLUSTER_MEDIA_PLAYBACK_CLUSTER \
CHIP_PRINTCLUSTER_CONTENT_LAUNCH_CLUSTER \
{
- "writeTime": "Fri Feb 26 2021 15:33:11 GMT+0800 (China Standard Time)",
+ "writeTime": "Fri Mar 12 2021 15:18:57 GMT+0800 (China Standard Time)",
"featureLevel": 11,
"creator": "zap",
"keyValuePairs": [
"deviceTypeProfileId": 260,
"clusters": [
{
- "name": "Basic",
- "code": 40,
+ "name": "Identify",
+ "code": 3,
"mfgCode": null,
- "define": "BASIC_CLUSTER",
+ "define": "IDENTIFY_CLUSTER",
"side": "client",
"enabled": 0,
- "commands": [],
"attributes": [
{
"name": "cluster revision",
"side": "client",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "3",
+ "defaultValue": "2",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
}
- ]
- },
- {
- "name": "Basic",
- "code": 40,
- "mfgCode": null,
- "define": "BASIC_CLUSTER",
- "side": "server",
- "enabled": 1,
+ ],
"commands": [
{
- "name": "StartUp",
+ "name": "Identify",
"code": 0,
"mfgCode": null,
- "source": "server",
+ "source": "client",
"incoming": 1,
- "outgoing": 1
+ "outgoing": 0
},
{
- "name": "ShutDown",
+ "name": "IdentifyQuery",
"code": 1,
"mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "Leave",
- "code": 2,
- "mfgCode": null,
- "source": "server",
+ "source": "client",
"incoming": 1,
- "outgoing": 1
+ "outgoing": 0
}
- ],
+ ]
+ },
+ {
+ "name": "Identify",
+ "code": 3,
+ "mfgCode": null,
+ "define": "IDENTIFY_CLUSTER",
+ "side": "server",
+ "enabled": 0,
"attributes": [
{
"name": "cluster revision",
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "3",
+ "defaultValue": "2",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "InteractionModelVersion",
+ "name": "identify time",
"code": 0,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0x0000",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
+ }
+ ],
+ "commands": [
+ {
+ "name": "IdentifyQueryResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ }
+ ]
+ },
+ {
+ "name": "Groups",
+ "code": 4,
+ "mfgCode": null,
+ "define": "GROUPS_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "commands": [
+ {
+ "name": "AddGroup",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
},
{
- "name": "VendorName",
+ "name": "ViewGroup",
"code": 1,
"mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
},
{
- "name": "VendorID",
+ "name": "GetGroupMembership",
"code": 2,
"mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
},
{
- "name": "ProductName",
+ "name": "RemoveGroup",
"code": 3,
"mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
},
{
- "name": "ProductID",
+ "name": "RemoveAllGroups",
"code": 4,
"mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
},
{
- "name": "UserLabel",
+ "name": "AddGroupIfIdentifying",
"code": 5,
"mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ }
+ ],
+ "attributes": [
{
- "name": "Location",
- "code": 6,
+ "name": "cluster revision",
+ "code": 65533,
"mfgCode": null,
- "side": "server",
+ "side": "client",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "3",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Groups",
+ "code": 4,
+ "mfgCode": null,
+ "define": "GROUPS_CLUSTER",
+ "side": "server",
+ "enabled": 0,
+ "commands": [
+ {
+ "name": "AddGroupResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
},
{
- "name": "HardwareVersion",
- "code": 7,
+ "name": "ViewGroupResponse",
+ "code": 1,
"mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
},
{
- "name": "HardwareVersionString",
- "code": 8,
+ "name": "GetGroupMembershipResponse",
+ "code": 2,
"mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
},
{
- "name": "SoftwareVersion",
- "code": 9,
+ "name": "RemoveGroupResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "0x00",
+ "defaultValue": "3",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "SoftwareVersionString",
- "code": 10,
+ "name": "name support",
+ "code": 0,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
"defaultValue": "",
"reportable": 0,
]
},
{
- "name": "Identify",
- "code": 3,
+ "name": "Scenes",
+ "code": 5,
"mfgCode": null,
- "define": "IDENTIFY_CLUSTER",
+ "define": "SCENES_CLUSTER",
"side": "client",
"enabled": 0,
"commands": [
{
- "name": "Identify",
+ "name": "AddScene",
"code": 0,
"mfgCode": null,
"source": "client",
"outgoing": 0
},
{
- "name": "IdentifyQuery",
+ "name": "ViewScene",
"code": 1,
"mfgCode": null,
"source": "client",
"incoming": 1,
"outgoing": 0
+ },
+ {
+ "name": "RemoveScene",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "RemoveAllScenes",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "StoreScene",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "RecallScene",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "GetSceneMembership",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
}
],
"attributes": [
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": "3",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
]
},
{
- "name": "Identify",
- "code": 3,
+ "name": "Scenes",
+ "code": 5,
"mfgCode": null,
- "define": "IDENTIFY_CLUSTER",
+ "define": "SCENES_CLUSTER",
"side": "server",
"enabled": 0,
"commands": [
{
- "name": "IdentifyQueryResponse",
+ "name": "AddSceneResponse",
"code": 0,
"mfgCode": null,
"source": "server",
"incoming": 0,
"outgoing": 1
+ },
+ {
+ "name": "ViewSceneResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveSceneResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveAllScenesResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "StoreSceneResponse",
+ "code": 4,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "GetSceneMembershipResponse",
+ "code": 6,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
}
],
"attributes": [
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": "3",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "identify time",
+ "name": "scene count",
"code": 0,
"mfgCode": null,
"side": "server",
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0x0000",
+ "defaultValue": "0x00",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
- }
- ]
- },
- {
- "name": "Groups",
- "code": 4,
- "mfgCode": null,
- "define": "GROUPS_CLUSTER",
- "side": "client",
- "enabled": 0,
- "commands": [
- {
- "name": "AddGroup",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
},
{
- "name": "ViewGroup",
+ "name": "current scene",
"code": 1,
"mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
},
{
- "name": "GetGroupMembership",
+ "name": "current group",
"code": 2,
"mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
},
{
- "name": "RemoveGroup",
- "code": 3,
+ "name": "scene valid",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "name support",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "On/off",
+ "code": 6,
+ "mfgCode": null,
+ "define": "ON_OFF_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "commands": [
+ {
+ "name": "Off",
+ "code": 0,
"mfgCode": null,
"source": "client",
"incoming": 1,
"outgoing": 0
},
{
- "name": "RemoveAllGroups",
- "code": 4,
+ "name": "On",
+ "code": 1,
"mfgCode": null,
"source": "client",
"incoming": 1,
"outgoing": 0
},
{
- "name": "AddGroupIfIdentifying",
- "code": 5,
+ "name": "Toggle",
+ "code": 2,
"mfgCode": null,
"source": "client",
"incoming": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "3",
+ "defaultValue": "2",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
]
},
{
- "name": "Groups",
- "code": 4,
+ "name": "On/off",
+ "code": 6,
"mfgCode": null,
- "define": "GROUPS_CLUSTER",
+ "define": "ON_OFF_CLUSTER",
"side": "server",
- "enabled": 0,
- "commands": [
- {
- "name": "AddGroupResponse",
- "code": 0,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "ViewGroupResponse",
- "code": 1,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "GetGroupMembershipResponse",
- "code": 2,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "RemoveGroupResponse",
- "code": 3,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- }
- ],
+ "enabled": 1,
+ "commands": [],
"attributes": [
{
"name": "cluster revision",
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "3",
+ "defaultValue": "2",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "name support",
+ "name": "on/off",
"code": 0,
"mfgCode": null,
"side": "server",
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "",
- "reportable": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
]
},
{
- "name": "Scenes",
- "code": 5,
+ "name": "Level Control",
+ "code": 8,
"mfgCode": null,
- "define": "SCENES_CLUSTER",
+ "define": "LEVEL_CONTROL_CLUSTER",
"side": "client",
"enabled": 0,
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
"commands": [
{
- "name": "AddScene",
+ "name": "MoveToLevel",
"code": 0,
"mfgCode": null,
"source": "client",
"outgoing": 0
},
{
- "name": "ViewScene",
+ "name": "Move",
"code": 1,
"mfgCode": null,
"source": "client",
"outgoing": 0
},
{
- "name": "RemoveScene",
+ "name": "Step",
"code": 2,
"mfgCode": null,
"source": "client",
"outgoing": 0
},
{
- "name": "RemoveAllScenes",
+ "name": "Stop",
"code": 3,
"mfgCode": null,
"source": "client",
"outgoing": 0
},
{
- "name": "StoreScene",
+ "name": "MoveToLevelWithOnOff",
"code": 4,
"mfgCode": null,
"source": "client",
"outgoing": 0
},
{
- "name": "RecallScene",
+ "name": "MoveWithOnOff",
"code": 5,
"mfgCode": null,
"source": "client",
"outgoing": 0
},
{
- "name": "GetSceneMembership",
+ "name": "StepWithOnOff",
"code": 6,
"mfgCode": null,
"source": "client",
"incoming": 1,
"outgoing": 0
+ },
+ {
+ "name": "StopWithOnOff",
+ "code": 7,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
}
- ],
+ ]
+ },
+ {
+ "name": "Level Control",
+ "code": 8,
+ "mfgCode": null,
+ "define": "LEVEL_CONTROL_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [],
"attributes": [
{
"name": "cluster revision",
"code": 65533,
"mfgCode": null,
- "side": "client",
+ "side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
+ },
+ {
+ "name": "current level",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
}
]
},
{
- "name": "Scenes",
- "code": 5,
+ "name": "Basic",
+ "code": 40,
"mfgCode": null,
- "define": "SCENES_CLUSTER",
- "side": "server",
+ "define": "BASIC_CLUSTER",
+ "side": "client",
"enabled": 0,
- "commands": [
- {
- "name": "AddSceneResponse",
- "code": 0,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "ViewSceneResponse",
- "code": 1,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "RemoveSceneResponse",
- "code": 2,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "RemoveAllScenesResponse",
- "code": 3,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "StoreSceneResponse",
- "code": 4,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
+ "attributes": [
{
- "name": "GetSceneMembershipResponse",
- "code": 6,
+ "name": "cluster revision",
+ "code": 65533,
"mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
}
],
+ "commands": []
+ },
+ {
+ "name": "Basic",
+ "code": 40,
+ "mfgCode": null,
+ "define": "BASIC_CLUSTER",
+ "side": "server",
+ "enabled": 1,
"attributes": [
{
"name": "cluster revision",
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
"defaultValue": "3",
"reportable": 0,
"reportableChange": 0
},
{
- "name": "scene count",
+ "name": "InteractionModelVersion",
"code": 0,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "0x00",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "current scene",
+ "name": "VendorName",
"code": 1,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "VendorID",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ProductName",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "0x00",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "current group",
- "code": 2,
+ "name": "ProductID",
+ "code": 4,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "0x0000",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "scene valid",
- "code": 3,
+ "name": "UserLabel",
+ "code": 5,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "0x00",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "name support",
- "code": 4,
+ "name": "Location",
+ "code": 6,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
"defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
- }
- ]
- },
- {
- "name": "On/off",
- "code": 6,
- "mfgCode": null,
- "define": "ON_OFF_CLUSTER",
- "side": "client",
- "enabled": 0,
- "commands": [
- {
- "name": "Off",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "On",
- "code": 1,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
},
{
- "name": "Toggle",
- "code": 2,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- }
- ],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
+ "name": "HardwareVersion",
+ "code": 7,
"mfgCode": null,
- "side": "client",
+ "side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": "0x00",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
- }
- ]
- },
- {
- "name": "On/off",
- "code": 6,
- "mfgCode": null,
- "define": "ON_OFF_CLUSTER",
- "side": "server",
- "enabled": 1,
- "commands": [],
- "attributes": [
+ },
{
- "name": "cluster revision",
- "code": 65533,
+ "name": "HardwareVersionString",
+ "code": 8,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "on/off",
- "code": 0,
+ "name": "SoftwareVersion",
+ "code": 9,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
"defaultValue": "0x00",
- "reportable": 1,
+ "reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
- }
- ]
- },
- {
- "name": "Level Control",
- "code": 8,
- "mfgCode": null,
- "define": "LEVEL_CONTROL_CLUSTER",
- "side": "client",
- "enabled": 0,
- "attributes": [
+ },
{
- "name": "cluster revision",
- "code": 65533,
+ "name": "SoftwareVersionString",
+ "code": 10,
"mfgCode": null,
- "side": "client",
+ "side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "3",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
],
"commands": [
{
- "name": "MoveToLevel",
+ "name": "StartUp",
"code": 0,
"mfgCode": null,
- "source": "client",
+ "source": "server",
"incoming": 1,
- "outgoing": 0
+ "outgoing": 1
},
{
- "name": "Move",
+ "name": "ShutDown",
"code": 1,
"mfgCode": null,
- "source": "client",
+ "source": "server",
"incoming": 1,
- "outgoing": 0
+ "outgoing": 1
},
{
- "name": "Step",
+ "name": "Leave",
"code": 2,
"mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "Stop",
- "code": 3,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "MoveToLevelWithOnOff",
- "code": 4,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "MoveWithOnOff",
- "code": 5,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "StepWithOnOff",
- "code": 6,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "StopWithOnOff",
- "code": 7,
- "mfgCode": null,
- "source": "client",
+ "source": "server",
"incoming": 1,
- "outgoing": 0
- }
- ]
- },
- {
- "name": "Level Control",
- "code": 8,
- "mfgCode": null,
- "define": "LEVEL_CONTROL_CLUSTER",
- "side": "server",
- "enabled": 1,
- "commands": [],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "3",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "current level",
- "code": 0,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
+ "outgoing": 1
}
]
},
{
"name": "Network Commissioning",
- "code": 43690,
+ "code": 49,
"mfgCode": null,
"define": "NETWORK_COMMISSIONING_CLUSTER",
"side": "client",
},
{
"name": "Network Commissioning",
- "code": 43690,
+ "code": 49,
"mfgCode": null,
"define": "NETWORK_COMMISSIONING_CLUSTER",
"side": "server",
"enabled": 1,
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x0001",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ],
"commands": [
{
"name": "ScanNetworksResponse",
"incoming": 1,
"outgoing": 1
}
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
]
}
]
#define FACTORY_RESET_TRIGGER_TIMEOUT 3000
#define FACTORY_RESET_CANCEL_WINDOW_TIMEOUT 3000
-#define APP_TASK_STACK_SIZE (4096)
+#define APP_TASK_STACK_SIZE (2048)
#define APP_TASK_PRIORITY 2
#define APP_EVENT_QUEUE_SIZE 10
output_dir = root_out_dir
- ldscript = "${k32w_platform_dir}/app/ldscripts/chip-k32w061-lock-example.ld"
+ ldscript = "${k32w_platform_dir}/app/ldscripts/chip-k32w061-linker.ld"
ldflags = [ "-T" + rebase_path(ldscript, root_build_dir) ]
}
#include "TimersManager.h"
#include "app_config.h"
-#define FACTORY_RESET_TRIGGER_TIMEOUT 6000
-#define FACTORY_RESET_CANCEL_WINDOW_TIMEOUT 3000
-#define APP_TASK_STACK_SIZE (4096)
-#define APP_TASK_PRIORITY 2
-#define APP_EVENT_QUEUE_SIZE 10
+constexpr uint32_t kFactoryResetTriggerTimeout = 6000;
+constexpr uint8_t kAppEventQueueSize = 10;
TimerHandle_t sFunctionTimer; // FreeRTOS app sw timer.
{
int err = CHIP_NO_ERROR;
- sAppEventQueue = xQueueCreate(APP_EVENT_QUEUE_SIZE, sizeof(AppEvent));
+ sAppEventQueue = xQueueCreate(kAppEventQueueSize, sizeof(AppEvent));
if (sAppEventQueue == NULL)
{
- err = CHIP_ERROR_MAX;
K32W_LOG("Failed to allocate app event queue");
- assert(err == CHIP_NO_ERROR);
+ assert(false);
}
return err;
}
else
{
- uint32_t resetTimeout = FACTORY_RESET_TRIGGER_TIMEOUT;
+ uint32_t resetTimeout = kFactoryResetTriggerTimeout;
if (sAppTask.mFunction != kFunction_NoneSelected)
{
sStatusLED.Blink(500);
sLockLED.Blink(500);
- sAppTask.StartTimer(FACTORY_RESET_TRIGGER_TIMEOUT);
+ sAppTask.StartTimer(kFactoryResetTriggerTimeout);
}
}
source_set("lock-common") {
sources = [
"${chip_root}/src/app/clusters/bindings/bindings.cpp",
+ "${chip_root}/src/app/clusters/network-commissioning/network-commissioning-ember.cpp",
+ "${chip_root}/src/app/clusters/network-commissioning/network-commissioning.cpp",
"${chip_root}/src/app/clusters/on-off-server/on-off.cpp",
"${chip_root}/src/app/reporting/reporting-default-configuration.cpp",
"${chip_root}/src/app/reporting/reporting.cpp",
@end
/**
+ * Cluster Network Commissioning
+ *
+ */
+@interface CHIPNetworkCommissioning : CHIPCluster
+
+- (void)addThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)addWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)disableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)enableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)getLastNetworkCommissioningResult:(uint32_t)timeoutMs completionHandler:(ResponseHandler)completionHandler;
+- (void)removeNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)scanNetworks:(NSData *)ssid
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)updateThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)updateWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+
+- (void)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+@end
+
+/**
* Cluster On/off
*
*/
#import "CHIPDevice.h"
#import "CHIPDevice_Internal.h"
-#import "ChipError.h"
+#import "CHIPError.h"
#import "gen/CHIPClientCallbacks.h"
#import "gen/CHIPClustersObjc.h"
bool mKeepAlive;
};
+class CHIPInt64uAttributeCallbackBridge : public Callback::Callback<Int64uAttributeCallback> {
+public:
+ CHIPInt64uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+ : Callback::Callback<Int64uAttributeCallback>(CallbackFn, this)
+ , mHandler(handler)
+ , mQueue(queue)
+ , mKeepAlive(keepAlive)
+ {
+ }
+
+ ~CHIPInt64uAttributeCallbackBridge() {};
+
+ static void CallbackFn(void * context, uint64_t value)
+ {
+ CHIPInt64uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt64uAttributeCallbackBridge *>(context);
+ if (callback && callback->mQueue) {
+ dispatch_async(callback->mQueue, ^{
+ callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedLongLong:value] });
+ if (!callback->mKeepAlive) {
+ callback->Cancel();
+ delete callback;
+ }
+ });
+ }
+ };
+
+private:
+ ResponseHandler mHandler;
+ dispatch_queue_t mQueue;
+ bool mKeepAlive;
+};
+
class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
public:
CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
@end
+@interface CHIPNetworkCommissioning ()
+@property (readonly) Controller::NetworkCommissioningCluster cppCluster;
+@end
+
+@implementation CHIPNetworkCommissioning
+
+- (Controller::ClusterBase *)getCluster
+{
+ return &_cppCluster;
+}
+
+- (void)addThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterAddThreadNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterAddThreadNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.AddThreadNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) operationalDataset.bytes, operationalDataset.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)addWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterAddWiFiNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterAddWiFiNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.AddWiFiNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) ssid.bytes, ssid.length),
+ chip::ByteSpan((const uint8_t *) credentials.bytes, credentials.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)disableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterDisableNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterDisableNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.DisableNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) networkID.bytes, networkID.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)enableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterEnableNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterEnableNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.EnableNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) networkID.bytes, networkID.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)getLastNetworkCommissioningResult:(uint32_t)timeoutMs completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.GetLastNetworkCommissioningResult(onSuccess->Cancel(), onFailure->Cancel(), timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)removeNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterRemoveNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterRemoveNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.RemoveNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) networkID.bytes, networkID.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)scanNetworks:(NSData *)ssid
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterScanNetworksResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterScanNetworksResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.ScanNetworks(
+ onSuccess->Cancel(), onFailure->Cancel(), chip::ByteSpan((const uint8_t *) ssid.bytes, ssid.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)updateThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterUpdateThreadNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterUpdateThreadNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.UpdateThreadNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) operationalDataset.bytes, operationalDataset.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)updateWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterUpdateWiFiNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterUpdateWiFiNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.UpdateWiFiNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) ssid.bytes, ssid.length),
+ chip::ByteSpan((const uint8_t *) credentials.bytes, credentials.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+
+- (void)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+ CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+
+@end
+
@interface CHIPOnOff ()
@property (readonly) Controller::OnOffCluster cppCluster;
@end
namespace clusters {
+namespace NetworkCommissioning {
+
+void DispatchServerCommand(app::Command * command, CommandId commandId, EndpointId endpointId, TLV::TLVReader & dataTlv)
+{
+ {
+ switch (commandId)
+ {
+ case ZCL_ADD_THREAD_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(operationalDataset);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterAddThreadNetworkCallback(const_cast<uint8_t *>(operationalDataset), breadcrumb,
+ timeoutMs);
+ break;
+ }
+ case ZCL_ADD_WI_FI_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * ssid;
+ const uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(ssid);
+ break;
+ case 1:
+ TLVError = dataTlv.GetDataPtr(credentials);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 3:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterAddWiFiNetworkCallback(const_cast<uint8_t *>(ssid),
+ const_cast<uint8_t *>(credentials), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_DISABLE_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(networkID);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterDisableNetworkCallback(const_cast<uint8_t *>(networkID), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_ENABLE_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(networkID);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterEnableNetworkCallback(const_cast<uint8_t *>(networkID), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterGetLastNetworkCommissioningResultCallback(timeoutMs);
+ break;
+ }
+ case ZCL_REMOVE_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * NetworkID;
+ uint64_t Breadcrumb;
+ uint32_t TimeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(NetworkID);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(Breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(TimeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterRemoveNetworkCallback(const_cast<uint8_t *>(NetworkID), Breadcrumb, TimeoutMs);
+ break;
+ }
+ case ZCL_SCAN_NETWORKS_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * ssid;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(ssid);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterScanNetworksCallback(const_cast<uint8_t *>(ssid), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(operationalDataset);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterUpdateThreadNetworkCallback(const_cast<uint8_t *>(operationalDataset), breadcrumb,
+ timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * ssid;
+ const uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(ssid);
+ break;
+ case 1:
+ TLVError = dataTlv.GetDataPtr(credentials);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 3:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterUpdateWiFiNetworkCallback(const_cast<uint8_t *>(ssid),
+ const_cast<uint8_t *>(credentials), breadcrumb, timeoutMs);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ // TODO: Encode response for command not found
+ ChipLogError(Zcl, "Unknown command %" PRIx16 " for cluster %" PRIx16, commandId, ZCL_NETWORK_COMMISSIONING_CLUSTER_ID);
+ break;
+ }
+ }
+ }
+}
+
+} // namespace NetworkCommissioning
+
namespace OnOff {
void DispatchServerCommand(app::Command * command, CommandId commandId, EndpointId endpointId, TLV::TLVReader & dataTlv)
Compatibility::SetupEmberAfObjects(apCommandObj, aClusterId, aCommandId, aEndPointId);
switch (aClusterId)
{
+ case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
+ clusters::NetworkCommissioning::DispatchServerCommand(apCommandObj, aCommandId, aEndPointId, aReader);
+ break;
case ZCL_ON_OFF_CLUSTER_ID:
clusters::OnOff::DispatchServerCommand(apCommandObj, aCommandId, aEndPointId, aReader);
break;
#define ZCL_FABRIC_ID_ATTRIBUTE_ID (0x0000)
#define ZCL_BREADCRUMB_ATTRIBUTE_ID (0x0001)
+// Attribute ids for cluster: Network Commissioning
+
+// Client attributes
+
+// Server attributes
+
// Attribute ids for cluster: Shade Configuration
// Client attributes
// Server attributes
-// Attribute ids for cluster: Network Commissioning
-
-// Client attributes
-
-// Server attributes
-
// Attribute ids for cluster: Binding
// Client attributes
using namespace chip;
EmberAfStatus emberAfBasicClusterServerCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfNetworkCommissioningClusterServerCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfOnOffClusterServerCommandParse(EmberAfClusterCommand * cmd);
static EmberAfStatus status(bool wasHandled, bool clusterExists, bool mfgSpecific)
// No commands are enabled for cluster Basic
result = status(false, true, cmd->mfgSpecific);
break;
+ case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
+ result = emberAfNetworkCommissioningClusterServerCommandParse(cmd);
+ break;
case ZCL_ON_OFF_CLUSTER_ID:
result = emberAfOnOffClusterServerCommandParse(cmd);
break;
// Cluster specific command parsing
+EmberAfStatus emberAfNetworkCommissioningClusterServerCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_ADD_THREAD_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ operationalDataset = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(operationalDataset) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterAddThreadNetworkCallback(operationalDataset, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_ADD_WI_FI_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * ssid;
+ uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ ssid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(ssid) + 1u);
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ credentials = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(credentials) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterAddWiFiNetworkCallback(ssid, credentials, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_DISABLE_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ networkID = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(networkID) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterDisableNetworkCallback(networkID, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_ENABLE_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ networkID = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(networkID) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterEnableNetworkCallback(networkID, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterGetLastNetworkCommissioningResultCallback(timeoutMs);
+ break;
+ }
+ case ZCL_REMOVE_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * NetworkID;
+ uint64_t Breadcrumb;
+ uint32_t TimeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ NetworkID = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(NetworkID) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ Breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ TimeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterRemoveNetworkCallback(NetworkID, Breadcrumb, TimeoutMs);
+ break;
+ }
+ case ZCL_SCAN_NETWORKS_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * ssid;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ ssid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(ssid) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterScanNetworksCallback(ssid, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ operationalDataset = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(operationalDataset) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterUpdateThreadNetworkCallback(operationalDataset, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * ssid;
+ uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ ssid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(ssid) + 1u);
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ credentials = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(credentials) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterUpdateWiFiNetworkCallback(ssid, credentials, breadcrumb, timeoutMs);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
EmberAfStatus emberAfOnOffClusterServerCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
case ZCL_BASIC_CLUSTER_ID:
emberAfBasicClusterInitCallback(endpoint);
break;
+ case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
+ emberAfNetworkCommissioningClusterInitCallback(endpoint);
+ break;
case ZCL_ON_OFF_CLUSTER_ID:
emberAfOnOffClusterInitCallback(endpoint);
break;
// To prevent warning
(void) endpoint;
}
+void __attribute__((weak)) emberAfNetworkCommissioningClusterInitCallback(EndpointId endpoint)
+{
+ // To prevent warning
+ (void) endpoint;
+}
void __attribute__((weak)) emberAfOnOffClusterInitCallback(EndpointId endpoint)
{
// To prevent warning
*/
void emberAfBasicClusterInitCallback(chip::EndpointId endpoint);
+/** @brief Network Commissioning Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfNetworkCommissioningClusterInitCallback(chip::EndpointId endpoint);
+
/** @brief On/off Cluster Init
*
* Cluster Init
void emberAfBasicClusterServerTickCallback(chip::EndpointId endpoint);
//
+// Network Commissioning Cluster server
+//
+
+/** @brief Network Commissioning Cluster Server Init
+ *
+ * Server Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfNetworkCommissioningClusterServerInitCallback(chip::EndpointId endpoint);
+
+/** @brief Network Commissioning Cluster Server Attribute Changed
+ *
+ * Server Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfNetworkCommissioningClusterServerAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Network Commissioning Cluster Server Manufacturer Specific Attribute Changed
+ *
+ * Server Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfNetworkCommissioningClusterServerManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Network Commissioning Cluster Server Message Sent
+ *
+ * Server Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfNetworkCommissioningClusterServerMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Network Commissioning Cluster Server Pre Attribute Changed
+ *
+ * server Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfNetworkCommissioningClusterServerPreAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Network Commissioning Cluster Server Tick
+ *
+ * server Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfNetworkCommissioningClusterServerTickCallback(chip::EndpointId endpoint);
+
+//
// On/off Cluster server
//
// Cluster Commands Callback
/**
+ * @brief Network Commissioning Cluster AddThreadNetwork Command callback
+ * @param operationalDataset
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterAddThreadNetworkCallback(uint8_t * operationalDataset, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster AddWiFiNetwork Command callback
+ * @param ssid
+ * @param credentials
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterAddWiFiNetworkCallback(uint8_t * ssid, uint8_t * credentials, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster DisableNetwork Command callback
+ * @param networkID
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterDisableNetworkCallback(uint8_t * networkID, uint64_t breadcrumb, uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster EnableNetwork Command callback
+ * @param networkID
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterEnableNetworkCallback(uint8_t * networkID, uint64_t breadcrumb, uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster GetLastNetworkCommissioningResult Command callback
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterGetLastNetworkCommissioningResultCallback(uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster RemoveNetwork Command callback
+ * @param networkID
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterRemoveNetworkCallback(uint8_t * NetworkID, uint64_t Breadcrumb, uint32_t TimeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster ScanNetworks Command callback
+ * @param ssid
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterScanNetworksCallback(uint8_t * ssid, uint64_t breadcrumb, uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster UpdateThreadNetwork Command callback
+ * @param operationalDataset
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterUpdateThreadNetworkCallback(uint8_t * operationalDataset, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster UpdateWiFiNetwork Command callback
+ * @param ssid
+ * @param credentials
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterUpdateWiFiNetworkCallback(uint8_t * ssid, uint8_t * credentials, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
* @brief On/off Cluster Off Command callback
*/
\
ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+/** @brief Command description for ScanNetworks
+ *
+ * Command: ScanNetworks
+ * @param ssid OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterScanNetworks(ssid, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_NETWORKS_COMMAND_ID, "uuu", ssid, breadcrumb, timeoutMs);
+
+/** @brief Command description for ScanNetworksResponse
+ *
+ * Command: ScanNetworksResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ * @param wifiScanResults WiFiInterfaceScanResult []
+ * @param wifiScanResultsLen int
+ * @param threadScanResults ThreadInterfaceScanResult []
+ * @param threadScanResultsLen int
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterScanNetworksResponse(errorCode, debugText, wifiScanResults, wifiScanResultsLen, threadScanResults, \
+ threadScanResultsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID, "uubb", errorCode, debugText, wifiScanResults, \
+ wifiScanResultsLen, threadScanResults, threadScanResultsLen);
+
+/** @brief Command description for AddWiFiNetwork
+ *
+ * Command: AddWiFiNetwork
+ * @param ssid OCTET_STRING
+ * @param credentials OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
+
+/** @brief Command description for AddWiFiNetworkResponse
+ *
+ * Command: AddWiFiNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddWiFiNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for UpdateWiFiNetwork
+ *
+ * Command: UpdateWiFiNetwork
+ * @param ssid OCTET_STRING
+ * @param credentials OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
+
+/** @brief Command description for UpdateWiFiNetworkResponse
+ *
+ * Command: UpdateWiFiNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateWiFiNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for AddThreadNetwork
+ *
+ * Command: AddThreadNetwork
+ * @param operationalDataset OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
+
+/** @brief Command description for AddThreadNetworkResponse
+ *
+ * Command: AddThreadNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddThreadNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for UpdateThreadNetwork
+ *
+ * Command: UpdateThreadNetwork
+ * @param operationalDataset OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
+
+/** @brief Command description for UpdateThreadNetworkResponse
+ *
+ * Command: UpdateThreadNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateThreadNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for RemoveNetwork
+ *
+ * Command: RemoveNetwork
+ * @param NetworkID OCTET_STRING
+ * @param Breadcrumb INT64U
+ * @param TimeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterRemoveNetwork(NetworkID, Breadcrumb, TimeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_NETWORK_COMMAND_ID, "uuu", NetworkID, Breadcrumb, TimeoutMs);
+
+/** @brief Command description for RemoveNetworkResponse
+ *
+ * Command: RemoveNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterRemoveNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for EnableNetwork
+ *
+ * Command: EnableNetwork
+ * @param networkID OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterEnableNetwork(networkID, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
+
+/** @brief Command description for EnableNetworkResponse
+ *
+ * Command: EnableNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterEnableNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for DisableNetwork
+ *
+ * Command: DisableNetwork
+ * @param networkID OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterDisableNetwork(networkID, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
+
+/** @brief Command description for DisableNetworkResponse
+ *
+ * Command: DisableNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterDisableNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for GetLastNetworkCommissioningResult
+ *
+ * Command: GetLastNetworkCommissioningResult
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterGetLastNetworkCommissioningResult(timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID, "u", timeoutMs);
+
/** @brief Command description for LockDoor
*
* Command: LockDoor
ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID, "uuuub", startIndex, total, startIndex, count, \
endpointInformationRecordList, endpointInformationRecordListLen);
-/** @brief Command description for ScanNetworks
- *
- * Command: ScanNetworks
- * @param ssid OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterScanNetworks(ssid, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_SCAN_NETWORKS_COMMAND_ID, "uuu", ssid, breadcrumb, timeoutMs);
-
-/** @brief Command description for ScanNetworksResponse
- *
- * Command: ScanNetworksResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- * @param wifiScanResults WiFiInterfaceScanResult []
- * @param wifiScanResultsLen int
- * @param threadScanResults ThreadInterfaceScanResult []
- * @param threadScanResultsLen int
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterScanNetworksResponse(errorCode, debugText, wifiScanResults, wifiScanResultsLen, threadScanResults, \
- threadScanResultsLen) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID, "uubb", errorCode, debugText, wifiScanResults, \
- wifiScanResultsLen, threadScanResults, threadScanResultsLen);
-
-/** @brief Command description for AddWiFiNetwork
- *
- * Command: AddWiFiNetwork
- * @param ssid OCTET_STRING
- * @param credentials OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
-
-/** @brief Command description for AddWiFiNetworkResponse
- *
- * Command: AddWiFiNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddWiFiNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for UpdateWiFiNetwork
- *
- * Command: UpdateWiFiNetwork
- * @param ssid OCTET_STRING
- * @param credentials OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
-
-/** @brief Command description for UpdateWiFiNetworkResponse
- *
- * Command: UpdateWiFiNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateWiFiNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for AddThreadNetwork
- *
- * Command: AddThreadNetwork
- * @param operationalDataset OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
-
-/** @brief Command description for AddThreadNetworkResponse
- *
- * Command: AddThreadNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddThreadNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for UpdateThreadNetwork
- *
- * Command: UpdateThreadNetwork
- * @param operationalDataset OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
-
-/** @brief Command description for UpdateThreadNetworkResponse
- *
- * Command: UpdateThreadNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateThreadNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for RemoveNetwork
- *
- * Command: RemoveNetwork
- * @param NetworkID OCTET_STRING
- * @param Breadcrumb INT64U
- * @param TimeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterRemoveNetwork(NetworkID, Breadcrumb, TimeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_REMOVE_NETWORK_COMMAND_ID, "uuu", NetworkID, Breadcrumb, TimeoutMs);
-
-/** @brief Command description for RemoveNetworkResponse
- *
- * Command: RemoveNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterRemoveNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for EnableNetwork
- *
- * Command: EnableNetwork
- * @param networkID OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterEnableNetwork(networkID, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ENABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
-
-/** @brief Command description for EnableNetworkResponse
- *
- * Command: EnableNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterEnableNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for DisableNetwork
- *
- * Command: DisableNetwork
- * @param networkID OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterDisableNetwork(networkID, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_DISABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
-
-/** @brief Command description for DisableNetworkResponse
- *
- * Command: DisableNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterDisableNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for GetLastNetworkCommissioningResult
- *
- * Command: GetLastNetworkCommissioningResult
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterGetLastNetworkCommissioningResult(timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID, "u", timeoutMs);
-
/** @brief Command description for Bind
*
* Command: Bind
// Definitions for cluster: General Commissioning
#define ZCL_GENERAL_COMMISSIONING_CLUSTER_ID (0x0030)
+// Definitions for cluster: Network Commissioning
+#define ZCL_NETWORK_COMMISSIONING_CLUSTER_ID (0x0031)
+
// Definitions for cluster: Shade Configuration
#define ZCL_SHADE_CONFIG_CLUSTER_ID (0x0100)
// Definitions for cluster: ZLL Commissioning
#define ZCL_ZLL_COMMISSIONING_CLUSTER_ID (0x1000)
-// Definitions for cluster: Network Commissioning
-#define ZCL_NETWORK_COMMISSIONING_CLUSTER_ID (0xAAAA)
-
// Definitions for cluster: Binding
#define ZCL_BINDING_CLUSTER_ID (0xF000)
#define ZCL_COMMISSIONING_COMPLETE_COMMAND_ID (0x06)
#define ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID (0x07)
+// Commands for cluster: Network Commissioning
+#define ZCL_SCAN_NETWORKS_COMMAND_ID (0x00)
+#define ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_ADD_WI_FI_NETWORK_COMMAND_ID (0x02)
+#define ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID (0x04)
+#define ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_ADD_THREAD_NETWORK_COMMAND_ID (0x06)
+#define ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID (0x08)
+#define ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_REMOVE_NETWORK_COMMAND_ID (0x0A)
+#define ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID (0x0B)
+#define ZCL_ENABLE_NETWORK_COMMAND_ID (0x0C)
+#define ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_DISABLE_NETWORK_COMMAND_ID (0x0E)
+#define ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID (0x0F)
+#define ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID (0x10)
+
// Commands for cluster: Door Lock
#define ZCL_LOCK_DOOR_COMMAND_ID (0x00)
#define ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID (0x00)
#define ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID (0x42)
#define ZCL_GET_ENDPOINT_LIST_RESPONSE_COMMAND_ID (0x42)
-// Commands for cluster: Network Commissioning
-#define ZCL_SCAN_NETWORKS_COMMAND_ID (0x00)
-#define ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID (0x01)
-#define ZCL_ADD_WI_FI_NETWORK_COMMAND_ID (0x02)
-#define ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x03)
-#define ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID (0x04)
-#define ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x05)
-#define ZCL_ADD_THREAD_NETWORK_COMMAND_ID (0x06)
-#define ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x07)
-#define ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID (0x08)
-#define ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x09)
-#define ZCL_REMOVE_NETWORK_COMMAND_ID (0x0A)
-#define ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID (0x0B)
-#define ZCL_ENABLE_NETWORK_COMMAND_ID (0x0C)
-#define ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID (0x0D)
-#define ZCL_DISABLE_NETWORK_COMMAND_ID (0x0E)
-#define ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID (0x0F)
-#define ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID (0x10)
-
// Commands for cluster: Binding
#define ZCL_BIND_COMMAND_ID (0x00)
#define ZCL_UNBIND_COMMAND_ID (0x01)
#define ZAP_ATTRIBUTE_MASK(mask) ATTRIBUTE_MASK_##mask
// This is an array of EmberAfAttributeMetadata structures.
-#define GENERATED_ATTRIBUTE_COUNT 14
+#define GENERATED_ATTRIBUTE_COUNT 15
#define GENERATED_ATTRIBUTES \
{ \
{ 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 2 } }, /* On/off (server): cluster revision */ \
}, /* Basic (server): SoftwareVersion */ \
{ \
0x000A, ZAP_TYPE(CHAR_STRING), 64, ZAP_ATTRIBUTE_MASK(SINGLETON), { (uint8_t *) ZAP_LONG_DEFAULTS_INDEX(180) } \
- }, /* Basic (server): SoftwareVersionString */ \
+ }, /* Basic (server): SoftwareVersionString */ \
+ { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Network Commissioning (server): cluster revision */ \
}
// This is an array of EmberAfCluster structures.
};
#define ZAP_CLUSTER_MASK(mask) CLUSTER_MASK_##mask
-#define GENERATED_CLUSTER_COUNT 2
+#define GENERATED_CLUSTER_COUNT 3
#define GENERATED_CLUSTERS \
{ \
{ \
{ \
0x0028, ZAP_ATTRIBUTE_INDEX(2), 12, 254, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Basic (server) */ \
+ { \
+ 0x0031, ZAP_ATTRIBUTE_INDEX(14), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
+ }, /* Endpoint: 1, Cluster: Network Commissioning (server) */ \
}
#define ZAP_CLUSTER_INDEX(index) ((EmberAfCluster *) (&generatedClusters[index]))
// This is an array of EmberAfEndpointType structures.
#define GENERATED_ENDPOINT_TYPES \
{ \
- { ZAP_CLUSTER_INDEX(0), 2, 257 }, \
+ { ZAP_CLUSTER_INDEX(0), 3, 259 }, \
}
// Largest attribute size is needed for various buffers
#define ATTRIBUTE_SINGLETONS_SIZE (254)
// Total size of attribute storage
-#define ATTRIBUTE_MAX_SIZE (257)
+#define ATTRIBUTE_MAX_SIZE (259)
// Number of fixed endpoints
#define FIXED_ENDPOINT_COUNT (1)
// Array of EmberAfCommandMetadata structs.
#define ZAP_COMMAND_MASK(mask) COMMAND_MASK_##mask
-#define EMBER_AF_GENERATED_COMMAND_COUNT (6)
+#define EMBER_AF_GENERATED_COMMAND_COUNT (23)
#define GENERATED_COMMANDS \
{ \
{ 0x0006, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* On/off (server): Off */ \
{ 0x0028, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Basic (server): StartUp */ \
{ 0x0028, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Basic (server): ShutDown */ \
{ 0x0028, 0x02, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Basic (server): Leave */ \
+ { 0x0031, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): ScanNetworks */ \
+ { 0x0031, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): ScanNetworksResponse */ \
+ { 0x0031, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): AddWiFiNetwork */ \
+ { 0x0031, 0x03, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): AddWiFiNetworkResponse */ \
+ { 0x0031, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): UpdateWiFiNetwork */ \
+ { 0x0031, 0x05, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): UpdateWiFiNetworkResponse */ \
+ { 0x0031, 0x06, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): AddThreadNetwork */ \
+ { 0x0031, 0x07, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): AddThreadNetworkResponse */ \
+ { 0x0031, 0x08, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): UpdateThreadNetwork */ \
+ { 0x0031, 0x09, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): UpdateThreadNetworkResponse */ \
+ { 0x0031, 0x0A, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): RemoveNetwork */ \
+ { 0x0031, 0x0B, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): RemoveNetworkResponse */ \
+ { 0x0031, 0x0C, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): EnableNetwork */ \
+ { 0x0031, 0x0D, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): EnableNetworkResponse */ \
+ { 0x0031, 0x0E, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): DisableNetwork */ \
+ { 0x0031, 0x0F, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): DisableNetworkResponse */ \
+ { 0x0031, 0x10, \
+ ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): GetLastNetworkCommissioningResult */ \
}
// Array of EmberAfManufacturerCodeEntry structures for commands.
/**** Cluster endpoint counts ****/
#define EMBER_AF_BASIC_CLUSTER_SERVER_ENDPOINT_COUNT (1)
+#define EMBER_AF_NETWORK_COMMISSIONING_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_ON_OFF_CLUSTER_SERVER_ENDPOINT_COUNT (1)
/**** Cluster Plugins ****/
#define EMBER_AF_PLUGIN_BASIC_SERVER
#define EMBER_AF_PLUGIN_BASIC
+// Use this macro to check if the server side of the Network Commissioning cluster is included
+#define ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER
+#define EMBER_AF_PLUGIN_NETWORK_COMMISSIONING_SERVER
+#define EMBER_AF_PLUGIN_NETWORK_COMMISSIONING
+
// Use this macro to check if the server side of the On/off cluster is included
#define ZCL_USING_ON_OFF_CLUSTER_SERVER
#define EMBER_AF_PLUGIN_ON_OFF_SERVER
#define CHIP_PRINTCLUSTER_GENERAL_COMMISSIONING_CLUSTER
#endif
+#if defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER { ZCL_NETWORK_COMMISSIONING_CLUSTER_ID, 49, "Network Commissioning" },
+#else
+#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER
+#endif
+
#if defined(ZCL_USING_SHADE_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_SHADE_CONFIG_CLUSTER_CLIENT)
#define CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER { ZCL_SHADE_CONFIG_CLUSTER_ID, 256, "Shade Configuration" },
#else
#define CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER
#endif
-#if defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_CLIENT)
-#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER { ZCL_NETWORK_COMMISSIONING_CLUSTER_ID, 43690, "Network Commissioning" },
-#else
-#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER
-#endif
-
#if defined(ZCL_USING_BINDING_CLUSTER_SERVER) || defined(ZCL_USING_BINDING_CLUSTER_CLIENT)
#define CHIP_PRINTCLUSTER_BINDING_CLUSTER { ZCL_BINDING_CLUSTER_ID, 61440, "Binding" },
#else
CHIP_PRINTCLUSTER_KEEPALIVE_CLUSTER \
CHIP_PRINTCLUSTER_BASIC_CLUSTER \
CHIP_PRINTCLUSTER_GENERAL_COMMISSIONING_CLUSTER \
+ CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER \
CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER \
CHIP_PRINTCLUSTER_DOOR_LOCK_CLUSTER \
CHIP_PRINTCLUSTER_WINDOW_COVERING_CLUSTER \
CHIP_PRINTCLUSTER_ELECTRICAL_MEASUREMENT_CLUSTER \
CHIP_PRINTCLUSTER_DIAGNOSTICS_CLUSTER \
CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER \
- CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER \
CHIP_PRINTCLUSTER_BINDING_CLUSTER \
CHIP_PRINTCLUSTER_MEDIA_PLAYBACK_CLUSTER \
CHIP_PRINTCLUSTER_CONTENT_LAUNCH_CLUSTER \
{
- "writeTime": "Tue Mar 02 2021 13:36:08 GMT-0500 (Eastern Standard Time)",
+ "writeTime": "Fri Mar 12 2021 15:19:34 GMT+0800 (China Standard Time)",
"featureLevel": 11,
"creator": "zap",
"keyValuePairs": [
"define": "DEVICE_TEMP_CLUSTER",
"side": "server",
"enabled": 0,
+ "commands": [],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
- ],
- "commands": []
+ ]
},
{
"name": "Identify",
"define": "IDENTIFY_CLUSTER",
"side": "client",
"enabled": 0,
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "2",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
"commands": [
{
"name": "Identify",
"incoming": 1,
"outgoing": 0
}
- ],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "2",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
]
},
{
"define": "ON_OFF_CLUSTER",
"side": "server",
"enabled": 1,
+ "commands": [],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
- ],
- "commands": []
+ ]
},
{
"name": "Alarms",
"define": "ALARM_CLUSTER",
"side": "client",
"enabled": 0,
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x0001",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ],
"commands": [
{
"name": "ResetAlarm",
"incoming": 1,
"outgoing": 0
}
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
]
},
{
]
},
{
+ "name": "Network Commissioning",
+ "code": 49,
+ "mfgCode": null,
+ "define": "NETWORK_COMMISSIONING_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "commands": [
+ {
+ "name": "ScanNetworks",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "AddWiFiNetwork",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "UpdateWiFiNetwork",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "AddThreadNetwork",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "UpdateThreadNetwork",
+ "code": 8,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "RemoveNetwork",
+ "code": 10,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "EnableNetwork",
+ "code": 12,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "DisableNetwork",
+ "code": 14,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetLastNetworkCommissioningResult",
+ "code": 16,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Network Commissioning",
+ "code": 49,
+ "mfgCode": null,
+ "define": "NETWORK_COMMISSIONING_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "ScanNetworksResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "AddWiFiNetworkResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "UpdateWiFiNetworkResponse",
+ "code": 5,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "AddThreadNetworkResponse",
+ "code": 7,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "UpdateThreadNetworkResponse",
+ "code": 9,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveNetworkResponse",
+ "code": 11,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "EnableNetworkResponse",
+ "code": 13,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "DisableNetworkResponse",
+ "code": 15,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
"name": "Occupancy Sensing",
"code": 1030,
"mfgCode": null,
"define": "OCCUPANCY_SENSING_CLUSTER",
"side": "server",
"enabled": 0,
+ "commands": [],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
- ],
- "commands": []
+ ]
}
]
}
target_include_directories(app PRIVATE
main/include
+ ${CHIP_ROOT}/src/app
${LOCK_COMMON}
${NRFCONNECT_COMMON}/util/include
${NRFCONNECT_COMMON}/app/include)
${CHIP_ROOT}/src/app/util/process-global-message.cpp
${CHIP_ROOT}/src/app/util/util.cpp
${CHIP_ROOT}/src/app/clusters/bindings/bindings.cpp
+ ${CHIP_ROOT}/src/app/clusters/network-commissioning/network-commissioning-ember.cpp
+ ${CHIP_ROOT}/src/app/clusters/network-commissioning/network-commissioning.cpp
${CHIP_ROOT}/src/app/clusters/on-off-server/on-off.cpp)
{
streamer_printf(stream, "Usage: ping [options] <destination>\n\nOptions:\n");
- streamer_printf(stream,
- " -h print help information\n"
- " -u use UDP (default)\n"
- " -t use TCP\n"
- " -p <port> echo server port\n"
- " -i <interval> ping interval time in seconds\n"
- " -c <count> stop after <count> replies\n"
- " -r <1|0> enalbe/disable CRMP\n");
+ // Need to split the help info to prevent overflowing the streamer_printf
+ // buffer (CONSOLE_DEFAULT_MAX_LINE 256)
+ streamer_printf(stream, " -h print help information\n");
+ streamer_printf(stream, " -u use UDP (default)\n");
+ streamer_printf(stream, " -t use TCP\n");
+ streamer_printf(stream, " -p <port> echo server port\n");
+ streamer_printf(stream, " -i <interval> ping interval time in seconds\n");
+ streamer_printf(stream, " -c <count> stop after <count> replies\n");
+ streamer_printf(stream, " -r <1|0> enable or disable CRMP\n");
}
int cmd_ping(int argc, char ** argv)
../third_party/connectedhomeip/src/app/reporting \
../third_party/connectedhomeip/src/app/clusters/basic \
../third_party/connectedhomeip/src/app/clusters/bindings \
+ ../third_party/connectedhomeip/src/app/clusters/network-commissioning \
../third_party/connectedhomeip/src/app/clusters/temperature-measurement-server \
@end
/**
+ * Cluster Network Commissioning
+ *
+ */
+@interface CHIPNetworkCommissioning : CHIPCluster
+
+- (void)addThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)addWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)disableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)enableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)getLastNetworkCommissioningResult:(uint32_t)timeoutMs completionHandler:(ResponseHandler)completionHandler;
+- (void)removeNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)scanNetworks:(NSData *)ssid
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)updateThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)updateWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+
+- (void)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+@end
+
+/**
* Cluster Temperature Measurement
*
*/
#import "CHIPDevice.h"
#import "CHIPDevice_Internal.h"
-#import "ChipError.h"
+#import "CHIPError.h"
#import "gen/CHIPClientCallbacks.h"
#import "gen/CHIPClustersObjc.h"
bool mKeepAlive;
};
+class CHIPInt64uAttributeCallbackBridge : public Callback::Callback<Int64uAttributeCallback> {
+public:
+ CHIPInt64uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+ : Callback::Callback<Int64uAttributeCallback>(CallbackFn, this)
+ , mHandler(handler)
+ , mQueue(queue)
+ , mKeepAlive(keepAlive)
+ {
+ }
+
+ ~CHIPInt64uAttributeCallbackBridge() {};
+
+ static void CallbackFn(void * context, uint64_t value)
+ {
+ CHIPInt64uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt64uAttributeCallbackBridge *>(context);
+ if (callback && callback->mQueue) {
+ dispatch_async(callback->mQueue, ^{
+ callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedLongLong:value] });
+ if (!callback->mKeepAlive) {
+ callback->Cancel();
+ delete callback;
+ }
+ });
+ }
+ };
+
+private:
+ ResponseHandler mHandler;
+ dispatch_queue_t mQueue;
+ bool mKeepAlive;
+};
+
class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
public:
CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
@end
+@interface CHIPNetworkCommissioning ()
+@property (readonly) Controller::NetworkCommissioningCluster cppCluster;
+@end
+
+@implementation CHIPNetworkCommissioning
+
+- (Controller::ClusterBase *)getCluster
+{
+ return &_cppCluster;
+}
+
+- (void)addThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterAddThreadNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterAddThreadNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.AddThreadNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) operationalDataset.bytes, operationalDataset.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)addWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterAddWiFiNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterAddWiFiNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.AddWiFiNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) ssid.bytes, ssid.length),
+ chip::ByteSpan((const uint8_t *) credentials.bytes, credentials.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)disableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterDisableNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterDisableNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.DisableNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) networkID.bytes, networkID.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)enableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterEnableNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterEnableNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.EnableNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) networkID.bytes, networkID.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)getLastNetworkCommissioningResult:(uint32_t)timeoutMs completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.GetLastNetworkCommissioningResult(onSuccess->Cancel(), onFailure->Cancel(), timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)removeNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterRemoveNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterRemoveNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.RemoveNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) networkID.bytes, networkID.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)scanNetworks:(NSData *)ssid
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterScanNetworksResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterScanNetworksResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.ScanNetworks(
+ onSuccess->Cancel(), onFailure->Cancel(), chip::ByteSpan((const uint8_t *) ssid.bytes, ssid.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)updateThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterUpdateThreadNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterUpdateThreadNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.UpdateThreadNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) operationalDataset.bytes, operationalDataset.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)updateWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterUpdateWiFiNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterUpdateWiFiNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.UpdateWiFiNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) ssid.bytes, ssid.length),
+ chip::ByteSpan((const uint8_t *) credentials.bytes, credentials.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+
+- (void)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+ CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+
+@end
+
@interface CHIPTemperatureMeasurement ()
@property (readonly) Controller::TemperatureMeasurementCluster cppCluster;
@end
namespace clusters {
+namespace NetworkCommissioning {
+
+void DispatchServerCommand(app::Command * command, CommandId commandId, EndpointId endpointId, TLV::TLVReader & dataTlv)
+{
+ {
+ switch (commandId)
+ {
+ case ZCL_ADD_THREAD_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(operationalDataset);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterAddThreadNetworkCallback(const_cast<uint8_t *>(operationalDataset), breadcrumb,
+ timeoutMs);
+ break;
+ }
+ case ZCL_ADD_WI_FI_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * ssid;
+ const uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(ssid);
+ break;
+ case 1:
+ TLVError = dataTlv.GetDataPtr(credentials);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 3:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterAddWiFiNetworkCallback(const_cast<uint8_t *>(ssid),
+ const_cast<uint8_t *>(credentials), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_DISABLE_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(networkID);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterDisableNetworkCallback(const_cast<uint8_t *>(networkID), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_ENABLE_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(networkID);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterEnableNetworkCallback(const_cast<uint8_t *>(networkID), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterGetLastNetworkCommissioningResultCallback(timeoutMs);
+ break;
+ }
+ case ZCL_REMOVE_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * NetworkID;
+ uint64_t Breadcrumb;
+ uint32_t TimeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(NetworkID);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(Breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(TimeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterRemoveNetworkCallback(const_cast<uint8_t *>(NetworkID), Breadcrumb, TimeoutMs);
+ break;
+ }
+ case ZCL_SCAN_NETWORKS_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * ssid;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(ssid);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterScanNetworksCallback(const_cast<uint8_t *>(ssid), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(operationalDataset);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterUpdateThreadNetworkCallback(const_cast<uint8_t *>(operationalDataset), breadcrumb,
+ timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * ssid;
+ const uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(ssid);
+ break;
+ case 1:
+ TLVError = dataTlv.GetDataPtr(credentials);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 3:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterUpdateWiFiNetworkCallback(const_cast<uint8_t *>(ssid),
+ const_cast<uint8_t *>(credentials), breadcrumb, timeoutMs);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ // TODO: Encode response for command not found
+ ChipLogError(Zcl, "Unknown command %" PRIx16 " for cluster %" PRIx16, commandId, ZCL_NETWORK_COMMISSIONING_CLUSTER_ID);
+ break;
+ }
+ }
+ }
+}
+
+} // namespace NetworkCommissioning
+
} // namespace clusters
void DispatchSingleClusterCommand(chip::ClusterId aClusterId, chip::CommandId aCommandId, chip::EndpointId aEndPointId,
Compatibility::SetupEmberAfObjects(apCommandObj, aClusterId, aCommandId, aEndPointId);
switch (aClusterId)
{
+ case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
+ clusters::NetworkCommissioning::DispatchServerCommand(apCommandObj, aCommandId, aEndPointId, aReader);
+ break;
default:
// Unrecognized cluster ID, error status will apply.
// TODO: Encode response for Cluster not found
#define ZCL_FABRIC_ID_ATTRIBUTE_ID (0x0000)
#define ZCL_BREADCRUMB_ATTRIBUTE_ID (0x0001)
+// Attribute ids for cluster: Network Commissioning
+
+// Client attributes
+
+// Server attributes
+
// Attribute ids for cluster: Shade Configuration
// Client attributes
// Server attributes
-// Attribute ids for cluster: Network Commissioning
-
-// Client attributes
-
-// Server attributes
-
// Attribute ids for cluster: Binding
// Client attributes
using namespace chip;
EmberAfStatus emberAfBasicClusterServerCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfNetworkCommissioningClusterServerCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfTemperatureMeasurementClusterServerCommandParse(EmberAfClusterCommand * cmd);
static EmberAfStatus status(bool wasHandled, bool clusterExists, bool mfgSpecific)
// No commands are enabled for cluster Basic
result = status(false, true, cmd->mfgSpecific);
break;
+ case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
+ result = emberAfNetworkCommissioningClusterServerCommandParse(cmd);
+ break;
case ZCL_TEMP_MEASUREMENT_CLUSTER_ID:
// No commands are enabled for cluster Temperature Measurement
result = status(false, true, cmd->mfgSpecific);
}
// Cluster specific command parsing
+
+EmberAfStatus emberAfNetworkCommissioningClusterServerCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_ADD_THREAD_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ operationalDataset = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(operationalDataset) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterAddThreadNetworkCallback(operationalDataset, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_ADD_WI_FI_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * ssid;
+ uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ ssid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(ssid) + 1u);
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ credentials = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(credentials) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterAddWiFiNetworkCallback(ssid, credentials, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_DISABLE_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ networkID = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(networkID) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterDisableNetworkCallback(networkID, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_ENABLE_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ networkID = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(networkID) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterEnableNetworkCallback(networkID, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterGetLastNetworkCommissioningResultCallback(timeoutMs);
+ break;
+ }
+ case ZCL_REMOVE_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * NetworkID;
+ uint64_t Breadcrumb;
+ uint32_t TimeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ NetworkID = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(NetworkID) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ Breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ TimeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterRemoveNetworkCallback(NetworkID, Breadcrumb, TimeoutMs);
+ break;
+ }
+ case ZCL_SCAN_NETWORKS_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * ssid;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ ssid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(ssid) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterScanNetworksCallback(ssid, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ operationalDataset = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(operationalDataset) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterUpdateThreadNetworkCallback(operationalDataset, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * ssid;
+ uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ ssid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(ssid) + 1u);
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ credentials = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(credentials) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterUpdateWiFiNetworkCallback(ssid, credentials, breadcrumb, timeoutMs);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
case ZCL_BASIC_CLUSTER_ID:
emberAfBasicClusterInitCallback(endpoint);
break;
+ case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
+ emberAfNetworkCommissioningClusterInitCallback(endpoint);
+ break;
case ZCL_TEMP_MEASUREMENT_CLUSTER_ID:
emberAfTemperatureMeasurementClusterInitCallback(endpoint);
break;
// To prevent warning
(void) endpoint;
}
+void __attribute__((weak)) emberAfNetworkCommissioningClusterInitCallback(EndpointId endpoint)
+{
+ // To prevent warning
+ (void) endpoint;
+}
void __attribute__((weak)) emberAfTemperatureMeasurementClusterInitCallback(EndpointId endpoint)
{
// To prevent warning
*/
void emberAfBasicClusterInitCallback(chip::EndpointId endpoint);
+/** @brief Network Commissioning Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfNetworkCommissioningClusterInitCallback(chip::EndpointId endpoint);
+
/** @brief Temperature Measurement Cluster Init
*
* Cluster Init
void emberAfBasicClusterServerTickCallback(chip::EndpointId endpoint);
//
+// Network Commissioning Cluster server
+//
+
+/** @brief Network Commissioning Cluster Server Init
+ *
+ * Server Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfNetworkCommissioningClusterServerInitCallback(chip::EndpointId endpoint);
+
+/** @brief Network Commissioning Cluster Server Attribute Changed
+ *
+ * Server Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfNetworkCommissioningClusterServerAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Network Commissioning Cluster Server Manufacturer Specific Attribute Changed
+ *
+ * Server Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfNetworkCommissioningClusterServerManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Network Commissioning Cluster Server Message Sent
+ *
+ * Server Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfNetworkCommissioningClusterServerMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Network Commissioning Cluster Server Pre Attribute Changed
+ *
+ * server Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfNetworkCommissioningClusterServerPreAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Network Commissioning Cluster Server Tick
+ *
+ * server Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfNetworkCommissioningClusterServerTickCallback(chip::EndpointId endpoint);
+
+//
// Temperature Measurement Cluster server
//
// Cluster Commands Callback
+/**
+ * @brief Network Commissioning Cluster AddThreadNetwork Command callback
+ * @param operationalDataset
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterAddThreadNetworkCallback(uint8_t * operationalDataset, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster AddWiFiNetwork Command callback
+ * @param ssid
+ * @param credentials
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterAddWiFiNetworkCallback(uint8_t * ssid, uint8_t * credentials, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster DisableNetwork Command callback
+ * @param networkID
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterDisableNetworkCallback(uint8_t * networkID, uint64_t breadcrumb, uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster EnableNetwork Command callback
+ * @param networkID
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterEnableNetworkCallback(uint8_t * networkID, uint64_t breadcrumb, uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster GetLastNetworkCommissioningResult Command callback
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterGetLastNetworkCommissioningResultCallback(uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster RemoveNetwork Command callback
+ * @param networkID
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterRemoveNetworkCallback(uint8_t * NetworkID, uint64_t Breadcrumb, uint32_t TimeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster ScanNetworks Command callback
+ * @param ssid
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterScanNetworksCallback(uint8_t * ssid, uint64_t breadcrumb, uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster UpdateThreadNetwork Command callback
+ * @param operationalDataset
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterUpdateThreadNetworkCallback(uint8_t * operationalDataset, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster UpdateWiFiNetwork Command callback
+ * @param ssid
+ * @param credentials
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterUpdateWiFiNetworkCallback(uint8_t * ssid, uint8_t * credentials, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
//
// Non-Cluster Related Callbacks
//
\
ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+/** @brief Command description for ScanNetworks
+ *
+ * Command: ScanNetworks
+ * @param ssid OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterScanNetworks(ssid, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_NETWORKS_COMMAND_ID, "uuu", ssid, breadcrumb, timeoutMs);
+
+/** @brief Command description for ScanNetworksResponse
+ *
+ * Command: ScanNetworksResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ * @param wifiScanResults WiFiInterfaceScanResult []
+ * @param wifiScanResultsLen int
+ * @param threadScanResults ThreadInterfaceScanResult []
+ * @param threadScanResultsLen int
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterScanNetworksResponse(errorCode, debugText, wifiScanResults, wifiScanResultsLen, threadScanResults, \
+ threadScanResultsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID, "uubb", errorCode, debugText, wifiScanResults, \
+ wifiScanResultsLen, threadScanResults, threadScanResultsLen);
+
+/** @brief Command description for AddWiFiNetwork
+ *
+ * Command: AddWiFiNetwork
+ * @param ssid OCTET_STRING
+ * @param credentials OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
+
+/** @brief Command description for AddWiFiNetworkResponse
+ *
+ * Command: AddWiFiNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddWiFiNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for UpdateWiFiNetwork
+ *
+ * Command: UpdateWiFiNetwork
+ * @param ssid OCTET_STRING
+ * @param credentials OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
+
+/** @brief Command description for UpdateWiFiNetworkResponse
+ *
+ * Command: UpdateWiFiNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateWiFiNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for AddThreadNetwork
+ *
+ * Command: AddThreadNetwork
+ * @param operationalDataset OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
+
+/** @brief Command description for AddThreadNetworkResponse
+ *
+ * Command: AddThreadNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddThreadNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for UpdateThreadNetwork
+ *
+ * Command: UpdateThreadNetwork
+ * @param operationalDataset OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
+
+/** @brief Command description for UpdateThreadNetworkResponse
+ *
+ * Command: UpdateThreadNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateThreadNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for RemoveNetwork
+ *
+ * Command: RemoveNetwork
+ * @param NetworkID OCTET_STRING
+ * @param Breadcrumb INT64U
+ * @param TimeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterRemoveNetwork(NetworkID, Breadcrumb, TimeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_NETWORK_COMMAND_ID, "uuu", NetworkID, Breadcrumb, TimeoutMs);
+
+/** @brief Command description for RemoveNetworkResponse
+ *
+ * Command: RemoveNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterRemoveNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for EnableNetwork
+ *
+ * Command: EnableNetwork
+ * @param networkID OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterEnableNetwork(networkID, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
+
+/** @brief Command description for EnableNetworkResponse
+ *
+ * Command: EnableNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterEnableNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for DisableNetwork
+ *
+ * Command: DisableNetwork
+ * @param networkID OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterDisableNetwork(networkID, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
+
+/** @brief Command description for DisableNetworkResponse
+ *
+ * Command: DisableNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterDisableNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for GetLastNetworkCommissioningResult
+ *
+ * Command: GetLastNetworkCommissioningResult
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterGetLastNetworkCommissioningResult(timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID, "u", timeoutMs);
+
/** @brief Command description for LockDoor
*
* Command: LockDoor
ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID, "uuuub", startIndex, total, startIndex, count, \
endpointInformationRecordList, endpointInformationRecordListLen);
-/** @brief Command description for ScanNetworks
- *
- * Command: ScanNetworks
- * @param ssid OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterScanNetworks(ssid, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_SCAN_NETWORKS_COMMAND_ID, "uuu", ssid, breadcrumb, timeoutMs);
-
-/** @brief Command description for ScanNetworksResponse
- *
- * Command: ScanNetworksResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- * @param wifiScanResults WiFiInterfaceScanResult []
- * @param wifiScanResultsLen int
- * @param threadScanResults ThreadInterfaceScanResult []
- * @param threadScanResultsLen int
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterScanNetworksResponse(errorCode, debugText, wifiScanResults, wifiScanResultsLen, threadScanResults, \
- threadScanResultsLen) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID, "uubb", errorCode, debugText, wifiScanResults, \
- wifiScanResultsLen, threadScanResults, threadScanResultsLen);
-
-/** @brief Command description for AddWiFiNetwork
- *
- * Command: AddWiFiNetwork
- * @param ssid OCTET_STRING
- * @param credentials OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
-
-/** @brief Command description for AddWiFiNetworkResponse
- *
- * Command: AddWiFiNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddWiFiNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for UpdateWiFiNetwork
- *
- * Command: UpdateWiFiNetwork
- * @param ssid OCTET_STRING
- * @param credentials OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
-
-/** @brief Command description for UpdateWiFiNetworkResponse
- *
- * Command: UpdateWiFiNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateWiFiNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for AddThreadNetwork
- *
- * Command: AddThreadNetwork
- * @param operationalDataset OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
-
-/** @brief Command description for AddThreadNetworkResponse
- *
- * Command: AddThreadNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddThreadNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for UpdateThreadNetwork
- *
- * Command: UpdateThreadNetwork
- * @param operationalDataset OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
-
-/** @brief Command description for UpdateThreadNetworkResponse
- *
- * Command: UpdateThreadNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateThreadNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for RemoveNetwork
- *
- * Command: RemoveNetwork
- * @param NetworkID OCTET_STRING
- * @param Breadcrumb INT64U
- * @param TimeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterRemoveNetwork(NetworkID, Breadcrumb, TimeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_REMOVE_NETWORK_COMMAND_ID, "uuu", NetworkID, Breadcrumb, TimeoutMs);
-
-/** @brief Command description for RemoveNetworkResponse
- *
- * Command: RemoveNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterRemoveNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for EnableNetwork
- *
- * Command: EnableNetwork
- * @param networkID OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterEnableNetwork(networkID, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ENABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
-
-/** @brief Command description for EnableNetworkResponse
- *
- * Command: EnableNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterEnableNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for DisableNetwork
- *
- * Command: DisableNetwork
- * @param networkID OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterDisableNetwork(networkID, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_DISABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
-
-/** @brief Command description for DisableNetworkResponse
- *
- * Command: DisableNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterDisableNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for GetLastNetworkCommissioningResult
- *
- * Command: GetLastNetworkCommissioningResult
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterGetLastNetworkCommissioningResult(timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID, "u", timeoutMs);
-
/** @brief Command description for Bind
*
* Command: Bind
// Definitions for cluster: General Commissioning
#define ZCL_GENERAL_COMMISSIONING_CLUSTER_ID (0x0030)
+// Definitions for cluster: Network Commissioning
+#define ZCL_NETWORK_COMMISSIONING_CLUSTER_ID (0x0031)
+
// Definitions for cluster: Shade Configuration
#define ZCL_SHADE_CONFIG_CLUSTER_ID (0x0100)
// Definitions for cluster: ZLL Commissioning
#define ZCL_ZLL_COMMISSIONING_CLUSTER_ID (0x1000)
-// Definitions for cluster: Network Commissioning
-#define ZCL_NETWORK_COMMISSIONING_CLUSTER_ID (0xAAAA)
-
// Definitions for cluster: Binding
#define ZCL_BINDING_CLUSTER_ID (0xF000)
#define ZCL_COMMISSIONING_COMPLETE_COMMAND_ID (0x06)
#define ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID (0x07)
+// Commands for cluster: Network Commissioning
+#define ZCL_SCAN_NETWORKS_COMMAND_ID (0x00)
+#define ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_ADD_WI_FI_NETWORK_COMMAND_ID (0x02)
+#define ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID (0x04)
+#define ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_ADD_THREAD_NETWORK_COMMAND_ID (0x06)
+#define ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID (0x08)
+#define ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_REMOVE_NETWORK_COMMAND_ID (0x0A)
+#define ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID (0x0B)
+#define ZCL_ENABLE_NETWORK_COMMAND_ID (0x0C)
+#define ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_DISABLE_NETWORK_COMMAND_ID (0x0E)
+#define ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID (0x0F)
+#define ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID (0x10)
+
// Commands for cluster: Door Lock
#define ZCL_LOCK_DOOR_COMMAND_ID (0x00)
#define ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID (0x00)
#define ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID (0x42)
#define ZCL_GET_ENDPOINT_LIST_RESPONSE_COMMAND_ID (0x42)
-// Commands for cluster: Network Commissioning
-#define ZCL_SCAN_NETWORKS_COMMAND_ID (0x00)
-#define ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID (0x01)
-#define ZCL_ADD_WI_FI_NETWORK_COMMAND_ID (0x02)
-#define ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x03)
-#define ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID (0x04)
-#define ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x05)
-#define ZCL_ADD_THREAD_NETWORK_COMMAND_ID (0x06)
-#define ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x07)
-#define ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID (0x08)
-#define ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x09)
-#define ZCL_REMOVE_NETWORK_COMMAND_ID (0x0A)
-#define ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID (0x0B)
-#define ZCL_ENABLE_NETWORK_COMMAND_ID (0x0C)
-#define ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID (0x0D)
-#define ZCL_DISABLE_NETWORK_COMMAND_ID (0x0E)
-#define ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID (0x0F)
-#define ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID (0x10)
-
// Commands for cluster: Binding
#define ZCL_BIND_COMMAND_ID (0x00)
#define ZCL_UNBIND_COMMAND_ID (0x01)
#define ZAP_ATTRIBUTE_MASK(mask) ATTRIBUTE_MASK_##mask
// This is an array of EmberAfAttributeMetadata structures.
-#define GENERATED_ATTRIBUTE_COUNT 16
+#define GENERATED_ATTRIBUTE_COUNT 17
#define GENERATED_ATTRIBUTES \
{ \
{ 0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(SINGLETON), { (uint8_t *) 3 } }, /* Basic (server): cluster revision */ \
{ \
0x000A, ZAP_TYPE(CHAR_STRING), 64, ZAP_ATTRIBUTE_MASK(SINGLETON), { (uint8_t *) ZAP_LONG_DEFAULTS_INDEX(180) } \
}, /* Basic (server): SoftwareVersionString */ \
+ { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Network Commissioning (server): cluster revision */ \
{ 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 3 } }, /* Temperature Measurement (server): cluster revision */ \
{ 0x0000, ZAP_TYPE(INT16S), 2, 0, { (uint8_t *) 0x8000 } }, /* Temperature Measurement (server): measured value */ \
{ 0x0001, ZAP_TYPE(INT16S), 2, 0, { (uint8_t *) 0x8000 } }, /* Temperature Measurement (server): min measured value */ \
#define GENERATED_FUNCTION_ARRAYS
#define ZAP_CLUSTER_MASK(mask) CLUSTER_MASK_##mask
-#define GENERATED_CLUSTER_COUNT 2
+#define GENERATED_CLUSTER_COUNT 3
#define GENERATED_CLUSTERS \
{ \
{ 0x0028, ZAP_ATTRIBUTE_INDEX(0), 12, 254, ZAP_CLUSTER_MASK(SERVER), NULL }, /* Endpoint: 1, Cluster: Basic (server) */ \
{ \
- 0x0402, ZAP_ATTRIBUTE_INDEX(12), 4, 8, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0x0031, ZAP_ATTRIBUTE_INDEX(12), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
+ }, /* Endpoint: 1, Cluster: Network Commissioning (server) */ \
+ { \
+ 0x0402, ZAP_ATTRIBUTE_INDEX(13), 4, 8, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Temperature Measurement (server) */ \
}
// This is an array of EmberAfEndpointType structures.
#define GENERATED_ENDPOINT_TYPES \
{ \
- { ZAP_CLUSTER_INDEX(0), 2, 262 }, \
+ { ZAP_CLUSTER_INDEX(0), 3, 264 }, \
}
// Largest attribute size is needed for various buffers
#define ATTRIBUTE_SINGLETONS_SIZE (254)
// Total size of attribute storage
-#define ATTRIBUTE_MAX_SIZE (262)
+#define ATTRIBUTE_MAX_SIZE (264)
// Number of fixed endpoints
#define FIXED_ENDPOINT_COUNT (1)
// Array of EmberAfCommandMetadata structs.
#define ZAP_COMMAND_MASK(mask) COMMAND_MASK_##mask
-#define EMBER_AF_GENERATED_COMMAND_COUNT (3)
+#define EMBER_AF_GENERATED_COMMAND_COUNT (20)
#define GENERATED_COMMANDS \
{ \
{ 0x0028, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Basic (server): StartUp */ \
{ 0x0028, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Basic (server): ShutDown */ \
{ 0x0028, 0x02, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Basic (server): Leave */ \
+ { 0x0031, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): ScanNetworks */ \
+ { 0x0031, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): ScanNetworksResponse */ \
+ { 0x0031, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): AddWiFiNetwork */ \
+ { 0x0031, 0x03, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): AddWiFiNetworkResponse */ \
+ { 0x0031, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): UpdateWiFiNetwork */ \
+ { 0x0031, 0x05, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): UpdateWiFiNetworkResponse */ \
+ { 0x0031, 0x06, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): AddThreadNetwork */ \
+ { 0x0031, 0x07, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): AddThreadNetworkResponse */ \
+ { 0x0031, 0x08, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): UpdateThreadNetwork */ \
+ { 0x0031, 0x09, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): UpdateThreadNetworkResponse */ \
+ { 0x0031, 0x0A, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): RemoveNetwork */ \
+ { 0x0031, 0x0B, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): RemoveNetworkResponse */ \
+ { 0x0031, 0x0C, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): EnableNetwork */ \
+ { 0x0031, 0x0D, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): EnableNetworkResponse */ \
+ { 0x0031, 0x0E, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): DisableNetwork */ \
+ { 0x0031, 0x0F, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): DisableNetworkResponse */ \
+ { 0x0031, 0x10, \
+ ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): GetLastNetworkCommissioningResult */ \
}
// Array of EmberAfManufacturerCodeEntry structures for commands.
/**** Cluster endpoint counts ****/
#define EMBER_AF_BASIC_CLUSTER_SERVER_ENDPOINT_COUNT (1)
+#define EMBER_AF_NETWORK_COMMISSIONING_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_TEMP_MEASUREMENT_CLUSTER_SERVER_ENDPOINT_COUNT (1)
/**** Cluster Plugins ****/
#define EMBER_AF_PLUGIN_BASIC_SERVER
#define EMBER_AF_PLUGIN_BASIC
+// Use this macro to check if the server side of the Network Commissioning cluster is included
+#define ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER
+#define EMBER_AF_PLUGIN_NETWORK_COMMISSIONING_SERVER
+#define EMBER_AF_PLUGIN_NETWORK_COMMISSIONING
+
// Use this macro to check if the server side of the Temperature Measurement cluster is included
#define ZCL_USING_TEMP_MEASUREMENT_CLUSTER_SERVER
#define EMBER_AF_PLUGIN_TEMPERATURE_MEASUREMENT_SERVER
#define CHIP_PRINTCLUSTER_GENERAL_COMMISSIONING_CLUSTER
#endif
+#if defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER { ZCL_NETWORK_COMMISSIONING_CLUSTER_ID, 49, "Network Commissioning" },
+#else
+#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER
+#endif
+
#if defined(ZCL_USING_SHADE_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_SHADE_CONFIG_CLUSTER_CLIENT)
#define CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER { ZCL_SHADE_CONFIG_CLUSTER_ID, 256, "Shade Configuration" },
#else
#define CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER
#endif
-#if defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_CLIENT)
-#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER { ZCL_NETWORK_COMMISSIONING_CLUSTER_ID, 43690, "Network Commissioning" },
-#else
-#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER
-#endif
-
#if defined(ZCL_USING_BINDING_CLUSTER_SERVER) || defined(ZCL_USING_BINDING_CLUSTER_CLIENT)
#define CHIP_PRINTCLUSTER_BINDING_CLUSTER { ZCL_BINDING_CLUSTER_ID, 61440, "Binding" },
#else
CHIP_PRINTCLUSTER_KEEPALIVE_CLUSTER \
CHIP_PRINTCLUSTER_BASIC_CLUSTER \
CHIP_PRINTCLUSTER_GENERAL_COMMISSIONING_CLUSTER \
+ CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER \
CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER \
CHIP_PRINTCLUSTER_DOOR_LOCK_CLUSTER \
CHIP_PRINTCLUSTER_WINDOW_COVERING_CLUSTER \
CHIP_PRINTCLUSTER_ELECTRICAL_MEASUREMENT_CLUSTER \
CHIP_PRINTCLUSTER_DIAGNOSTICS_CLUSTER \
CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER \
- CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER \
CHIP_PRINTCLUSTER_BINDING_CLUSTER \
CHIP_PRINTCLUSTER_MEDIA_PLAYBACK_CLUSTER \
CHIP_PRINTCLUSTER_CONTENT_LAUNCH_CLUSTER \
{
- "writeTime": "Tue Nov 17 2020 19:19:54 GMT+0100 (Central European Standard Time)",
- "featureLevel": 4,
+ "writeTime": "Fri Mar 12 2021 15:20:19 GMT+0800 (China Standard Time)",
+ "featureLevel": 11,
"creator": "zap",
"keyValuePairs": [
{
"package": [
{
"pathRelativity": "relativeToZap",
- "path": "../../../../src/app/zap-templates/zcl/zcl.json",
+ "path": "../../../../../src/app/zap-templates/zcl/zcl.json",
"version": "ZCL Test Data",
"type": "zcl-properties"
},
{
"pathRelativity": "relativeToZap",
- "path": "../../../../src/app/zap-templates/app-templates.json",
+ "path": "../../../../../src/app/zap-templates/app-templates.json",
"version": "chip-v1",
"type": "gen-templates-json"
}
{
"name": "Anonymous Endpoint Type",
"deviceTypeName": "CBA-tempsensor",
- "deviceTypeCode": "0x0302",
- "deviceTypeProfileId": "0x105",
+ "deviceTypeCode": 770,
+ "deviceTypeProfileId": 261,
"clusters": [
{
- "name": "Basic",
- "code": 40,
- "mfgCode": null,
- "define": "BASIC_CLUSTER",
- "side": "client",
- "enabled": 0,
- "commands": [],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "3",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ]
- },
- {
- "name": "Basic",
- "code": 40,
- "mfgCode": null,
- "define": "BASIC_CLUSTER",
- "side": "server",
- "enabled": 1,
- "commands": [
- {
- "name": "StartUp",
- "code": 0,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "ShutDown",
- "code": 1,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "Leave",
- "code": 2,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- }
- ],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "3",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "InteractionModelVersion",
- "code": 0,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "VendorName",
- "code": 1,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "VendorID",
- "code": 2,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "ProductName",
- "code": 3,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "ProductID",
- "code": 4,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "UserLabel",
- "code": 5,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "Location",
- "code": 6,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "HardwareVersion",
- "code": 7,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "HardwareVersionString",
- "code": 8,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "SoftwareVersion",
- "code": 9,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "SoftwareVersionString",
- "code": 10,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 1,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ]
- },
- {
"name": "Power Configuration",
"code": 1,
"mfgCode": null,
"define": "POWER_CONFIG_CLUSTER",
"side": "client",
"enabled": 0,
+ "commands": [],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
- ],
- "commands": []
+ ]
},
{
"name": "Power Configuration",
"define": "POWER_CONFIG_CLUSTER",
"side": "server",
"enabled": 0,
+ "commands": [],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
- ],
- "commands": []
+ ]
},
{
"name": "Device Temperature Configuration",
"define": "DEVICE_TEMP_CLUSTER",
"side": "client",
"enabled": 0,
- "commands": [],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
- ]
+ ],
+ "commands": []
},
{
"name": "Device Temperature Configuration",
]
},
{
- "name": "Temperature Measurement",
- "code": 1026,
+ "name": "Basic",
+ "code": 40,
"mfgCode": null,
- "define": "TEMP_MEASUREMENT_CLUSTER",
+ "define": "BASIC_CLUSTER",
"side": "client",
"enabled": 0,
"commands": [],
"side": "client",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Basic",
+ "code": 40,
+ "mfgCode": null,
+ "define": "BASIC_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "StartUp",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ShutDown",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "Leave",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
"bounded": 0,
"defaultValue": "3",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
+ },
+ {
+ "name": "InteractionModelVersion",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "VendorName",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "VendorID",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ProductName",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ProductID",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "UserLabel",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "Location",
+ "code": 6,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "HardwareVersion",
+ "code": 7,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "HardwareVersionString",
+ "code": 8,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "SoftwareVersion",
+ "code": 9,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "SoftwareVersionString",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Network Commissioning",
+ "code": 49,
+ "mfgCode": null,
+ "define": "NETWORK_COMMISSIONING_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "commands": [
+ {
+ "name": "ScanNetworks",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "AddWiFiNetwork",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "UpdateWiFiNetwork",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "AddThreadNetwork",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "UpdateThreadNetwork",
+ "code": 8,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "RemoveNetwork",
+ "code": 10,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "EnableNetwork",
+ "code": 12,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "DisableNetwork",
+ "code": 14,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetLastNetworkCommissioningResult",
+ "code": 16,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Network Commissioning",
+ "code": 49,
+ "mfgCode": null,
+ "define": "NETWORK_COMMISSIONING_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
+ "commands": [
+ {
+ "name": "ScanNetworksResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "AddWiFiNetworkResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "UpdateWiFiNetworkResponse",
+ "code": 5,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "AddThreadNetworkResponse",
+ "code": 7,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "UpdateThreadNetworkResponse",
+ "code": 9,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveNetworkResponse",
+ "code": 11,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "EnableNetworkResponse",
+ "code": 13,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "DisableNetworkResponse",
+ "code": 15,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
}
]
},
"code": 1026,
"mfgCode": null,
"define": "TEMP_MEASUREMENT_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
+ "commands": []
+ },
+ {
+ "name": "Temperature Measurement",
+ "code": 1026,
+ "mfgCode": null,
+ "define": "TEMP_MEASUREMENT_CLUSTER",
"side": "server",
"enabled": 1,
- "commands": [],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
- ]
+ ],
+ "commands": []
}
]
}
"networkId": 0
}
]
-}
+}
\ No newline at end of file
"${chip_root}/src/app/clusters/level-control/level-control.cpp",
"${chip_root}/src/app/clusters/low-power-server/low-power-server.cpp",
"${chip_root}/src/app/clusters/media-playback-server/media-playback-server.cpp",
+ "${chip_root}/src/app/clusters/network-commissioning/network-commissioning-ember.cpp",
+ "${chip_root}/src/app/clusters/network-commissioning/network-commissioning.cpp",
"${chip_root}/src/app/clusters/on-off-server/on-off.cpp",
"${chip_root}/src/app/clusters/scenes-client/scenes-client.cpp",
"${chip_root}/src/app/clusters/scenes/scenes.cpp",
@end
/**
+ * Cluster Network Commissioning
+ *
+ */
+@interface CHIPNetworkCommissioning : CHIPCluster
+
+- (void)addThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)addWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)disableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)enableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)getLastNetworkCommissioningResult:(uint32_t)timeoutMs completionHandler:(ResponseHandler)completionHandler;
+- (void)removeNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)scanNetworks:(NSData *)ssid
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)updateThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+- (void)updateWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler;
+
+- (void)readAttributeClusterRevision:(ResponseHandler)completionHandler;
+
+@end
+
+/**
* Cluster On/off
*
*/
#import "CHIPDevice.h"
#import "CHIPDevice_Internal.h"
-#import "ChipError.h"
+#import "CHIPError.h"
#import "gen/CHIPClientCallbacks.h"
#import "gen/CHIPClustersObjc.h"
bool mKeepAlive;
};
+class CHIPInt64uAttributeCallbackBridge : public Callback::Callback<Int64uAttributeCallback> {
+public:
+ CHIPInt64uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+ : Callback::Callback<Int64uAttributeCallback>(CallbackFn, this)
+ , mHandler(handler)
+ , mQueue(queue)
+ , mKeepAlive(keepAlive)
+ {
+ }
+
+ ~CHIPInt64uAttributeCallbackBridge() {};
+
+ static void CallbackFn(void * context, uint64_t value)
+ {
+ CHIPInt64uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt64uAttributeCallbackBridge *>(context);
+ if (callback && callback->mQueue) {
+ dispatch_async(callback->mQueue, ^{
+ callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedLongLong:value] });
+ if (!callback->mKeepAlive) {
+ callback->Cancel();
+ delete callback;
+ }
+ });
+ }
+ };
+
+private:
+ ResponseHandler mHandler;
+ dispatch_queue_t mQueue;
+ bool mKeepAlive;
+};
+
class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
public:
CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
@end
+@interface CHIPNetworkCommissioning ()
+@property (readonly) Controller::NetworkCommissioningCluster cppCluster;
+@end
+
+@implementation CHIPNetworkCommissioning
+
+- (Controller::ClusterBase *)getCluster
+{
+ return &_cppCluster;
+}
+
+- (void)addThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterAddThreadNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterAddThreadNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.AddThreadNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) operationalDataset.bytes, operationalDataset.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)addWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterAddWiFiNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterAddWiFiNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.AddWiFiNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) ssid.bytes, ssid.length),
+ chip::ByteSpan((const uint8_t *) credentials.bytes, credentials.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)disableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterDisableNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterDisableNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.DisableNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) networkID.bytes, networkID.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)enableNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterEnableNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterEnableNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.EnableNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) networkID.bytes, networkID.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)getLastNetworkCommissioningResult:(uint32_t)timeoutMs completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.GetLastNetworkCommissioningResult(onSuccess->Cancel(), onFailure->Cancel(), timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)removeNetwork:(NSData *)networkID
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterRemoveNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterRemoveNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.RemoveNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) networkID.bytes, networkID.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)scanNetworks:(NSData *)ssid
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterScanNetworksResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterScanNetworksResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.ScanNetworks(
+ onSuccess->Cancel(), onFailure->Cancel(), chip::ByteSpan((const uint8_t *) ssid.bytes, ssid.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)updateThreadNetwork:(NSData *)operationalDataset
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterUpdateThreadNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterUpdateThreadNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.UpdateThreadNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) operationalDataset.bytes, operationalDataset.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+- (void)updateWiFiNetwork:(NSData *)ssid
+ credentials:(NSData *)credentials
+ breadcrumb:(uint64_t)breadcrumb
+ timeoutMs:(uint32_t)timeoutMs
+ completionHandler:(ResponseHandler)completionHandler
+{
+ CHIPNetworkCommissioningClusterUpdateWiFiNetworkResponseCallbackBridge * onSuccess
+ = new CHIPNetworkCommissioningClusterUpdateWiFiNetworkResponseCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.UpdateWiFiNetwork(onSuccess->Cancel(), onFailure->Cancel(),
+ chip::ByteSpan((const uint8_t *) ssid.bytes, ssid.length),
+ chip::ByteSpan((const uint8_t *) credentials.bytes, credentials.length), breadcrumb, timeoutMs);
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+
+- (void)readAttributeClusterRevision:(ResponseHandler)completionHandler
+{
+ CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onSuccess) {
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
+ if (!onFailure) {
+ delete onSuccess;
+ completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
+ return;
+ }
+
+ CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
+ if (err != CHIP_NO_ERROR) {
+ delete onSuccess;
+ delete onFailure;
+ completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
+ }
+}
+
+@end
+
@interface CHIPOnOff ()
@property (readonly) Controller::OnOffCluster cppCluster;
@end
} // namespace MediaPlayback
+namespace NetworkCommissioning {
+
+void DispatchServerCommand(app::Command * command, CommandId commandId, EndpointId endpointId, TLV::TLVReader & dataTlv)
+{
+ {
+ switch (commandId)
+ {
+ case ZCL_ADD_THREAD_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(operationalDataset);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterAddThreadNetworkCallback(const_cast<uint8_t *>(operationalDataset), breadcrumb,
+ timeoutMs);
+ break;
+ }
+ case ZCL_ADD_WI_FI_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * ssid;
+ const uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(ssid);
+ break;
+ case 1:
+ TLVError = dataTlv.GetDataPtr(credentials);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 3:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterAddWiFiNetworkCallback(const_cast<uint8_t *>(ssid),
+ const_cast<uint8_t *>(credentials), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_DISABLE_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(networkID);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterDisableNetworkCallback(const_cast<uint8_t *>(networkID), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_ENABLE_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(networkID);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterEnableNetworkCallback(const_cast<uint8_t *>(networkID), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterGetLastNetworkCommissioningResultCallback(timeoutMs);
+ break;
+ }
+ case ZCL_REMOVE_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * NetworkID;
+ uint64_t Breadcrumb;
+ uint32_t TimeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(NetworkID);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(Breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(TimeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterRemoveNetworkCallback(const_cast<uint8_t *>(NetworkID), Breadcrumb, TimeoutMs);
+ break;
+ }
+ case ZCL_SCAN_NETWORKS_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * ssid;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(ssid);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterScanNetworksCallback(const_cast<uint8_t *>(ssid), breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(operationalDataset);
+ break;
+ case 1:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterUpdateThreadNetworkCallback(const_cast<uint8_t *>(operationalDataset), breadcrumb,
+ timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID: {
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ const uint8_t * ssid;
+ const uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ while ((TLVError = dataTlv.Next()) == CHIP_NO_ERROR)
+ {
+ switch (TLV::TagNumFromTag(dataTlv.GetTag()))
+ {
+ case 0:
+ TLVError = dataTlv.GetDataPtr(ssid);
+ break;
+ case 1:
+ TLVError = dataTlv.GetDataPtr(credentials);
+ break;
+ case 2:
+ TLVError = dataTlv.Get(breadcrumb);
+ break;
+ case 3:
+ TLVError = dataTlv.Get(timeoutMs);
+ break;
+ default:
+ // Unsupported tag, ignore it.
+ ChipLogProgress(Zcl, "Unknown TLV tag during processing.");
+ break;
+ }
+ if (TLVError != CHIP_NO_ERROR)
+ {
+ ChipLogProgress(Zcl, "Failed to decode TLV data with tag %" PRIx32 ": %" PRId32,
+ TLV::TagNumFromTag(dataTlv.GetTag()), TLVError);
+ }
+ }
+ // TODO(#5098) We should pass the Command Object and EndpointId to the cluster callbacks.
+ emberAfNetworkCommissioningClusterUpdateWiFiNetworkCallback(const_cast<uint8_t *>(ssid),
+ const_cast<uint8_t *>(credentials), breadcrumb, timeoutMs);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ // TODO: Encode response for command not found
+ ChipLogError(Zcl, "Unknown command %" PRIx16 " for cluster %" PRIx16, commandId, ZCL_NETWORK_COMMISSIONING_CLUSTER_ID);
+ break;
+ }
+ }
+ }
+}
+
+} // namespace NetworkCommissioning
+
namespace OnOff {
void DispatchServerCommand(app::Command * command, CommandId commandId, EndpointId endpointId, TLV::TLVReader & dataTlv)
case ZCL_MEDIA_PLAYBACK_CLUSTER_ID:
clusters::MediaPlayback::DispatchServerCommand(apCommandObj, aCommandId, aEndPointId, aReader);
break;
+ case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
+ clusters::NetworkCommissioning::DispatchServerCommand(apCommandObj, aCommandId, aEndPointId, aReader);
+ break;
case ZCL_ON_OFF_CLUSTER_ID:
clusters::OnOff::DispatchServerCommand(apCommandObj, aCommandId, aEndPointId, aReader);
break;
#define ZCL_FABRIC_ID_ATTRIBUTE_ID (0x0000)
#define ZCL_BREADCRUMB_ATTRIBUTE_ID (0x0001)
+// Attribute ids for cluster: Network Commissioning
+
+// Client attributes
+
+// Server attributes
+
// Attribute ids for cluster: Shade Configuration
// Client attributes
// Server attributes
-// Attribute ids for cluster: Network Commissioning
-
-// Client attributes
-
-// Server attributes
-
// Attribute ids for cluster: Binding
// Client attributes
EmberAfStatus emberAfLevelControlClusterServerCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfLowPowerClusterServerCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfMediaPlaybackClusterServerCommandParse(EmberAfClusterCommand * cmd);
+EmberAfStatus emberAfNetworkCommissioningClusterServerCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfOnOffClusterServerCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfScenesClusterServerCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfTemperatureMeasurementClusterServerCommandParse(EmberAfClusterCommand * cmd);
case ZCL_MEDIA_PLAYBACK_CLUSTER_ID:
result = emberAfMediaPlaybackClusterServerCommandParse(cmd);
break;
+ case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
+ result = emberAfNetworkCommissioningClusterServerCommandParse(cmd);
+ break;
case ZCL_ON_OFF_CLUSTER_ID:
result = emberAfOnOffClusterServerCommandParse(cmd);
break;
}
return status(wasHandled, true, cmd->mfgSpecific);
}
+EmberAfStatus emberAfNetworkCommissioningClusterServerCommandParse(EmberAfClusterCommand * cmd)
+{
+ bool wasHandled = false;
+
+ if (!cmd->mfgSpecific)
+ {
+ switch (cmd->commandId)
+ {
+ case ZCL_ADD_THREAD_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ operationalDataset = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(operationalDataset) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterAddThreadNetworkCallback(operationalDataset, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_ADD_WI_FI_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * ssid;
+ uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ ssid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(ssid) + 1u);
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ credentials = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(credentials) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterAddWiFiNetworkCallback(ssid, credentials, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_DISABLE_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ networkID = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(networkID) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterDisableNetworkCallback(networkID, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_ENABLE_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * networkID;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ networkID = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(networkID) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterEnableNetworkCallback(networkID, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterGetLastNetworkCommissioningResultCallback(timeoutMs);
+ break;
+ }
+ case ZCL_REMOVE_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * NetworkID;
+ uint64_t Breadcrumb;
+ uint32_t TimeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ NetworkID = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(NetworkID) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ Breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ TimeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterRemoveNetworkCallback(NetworkID, Breadcrumb, TimeoutMs);
+ break;
+ }
+ case ZCL_SCAN_NETWORKS_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * ssid;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ ssid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(ssid) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterScanNetworksCallback(ssid, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * operationalDataset;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ operationalDataset = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(operationalDataset) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterUpdateThreadNetworkCallback(operationalDataset, breadcrumb, timeoutMs);
+ break;
+ }
+ case ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID: {
+ uint16_t payloadOffset = cmd->payloadStartIndex;
+ uint8_t * ssid;
+ uint8_t * credentials;
+ uint64_t breadcrumb;
+ uint32_t timeoutMs;
+
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ ssid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(ssid) + 1u);
+ if (cmd->bufLen < payloadOffset + 1u)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ credentials = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(credentials) + 1u);
+ if (cmd->bufLen < payloadOffset + 8)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
+ payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
+ if (cmd->bufLen < payloadOffset + 4)
+ {
+ return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
+ }
+ timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
+
+ wasHandled = emberAfNetworkCommissioningClusterUpdateWiFiNetworkCallback(ssid, credentials, breadcrumb, timeoutMs);
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ break;
+ }
+ }
+ }
+ return status(wasHandled, true, cmd->mfgSpecific);
+}
EmberAfStatus emberAfOnOffClusterServerCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
case ZCL_MEDIA_PLAYBACK_CLUSTER_ID:
emberAfMediaPlaybackClusterInitCallback(endpoint);
break;
+ case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
+ emberAfNetworkCommissioningClusterInitCallback(endpoint);
+ break;
case ZCL_ON_OFF_CLUSTER_ID:
emberAfOnOffClusterInitCallback(endpoint);
break;
// To prevent warning
(void) endpoint;
}
+void __attribute__((weak)) emberAfNetworkCommissioningClusterInitCallback(EndpointId endpoint)
+{
+ // To prevent warning
+ (void) endpoint;
+}
void __attribute__((weak)) emberAfOnOffClusterInitCallback(EndpointId endpoint)
{
// To prevent warning
*/
void emberAfMediaPlaybackClusterInitCallback(chip::EndpointId endpoint);
+/** @brief Network Commissioning Cluster Init
+ *
+ * Cluster Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfNetworkCommissioningClusterInitCallback(chip::EndpointId endpoint);
+
/** @brief On/off Cluster Init
*
* Cluster Init
void emberAfMediaPlaybackClusterServerTickCallback(chip::EndpointId endpoint);
//
+// Network Commissioning Cluster server
+//
+
+/** @brief Network Commissioning Cluster Server Init
+ *
+ * Server Init
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void emberAfNetworkCommissioningClusterServerInitCallback(chip::EndpointId endpoint);
+
+/** @brief Network Commissioning Cluster Server Attribute Changed
+ *
+ * Server Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ */
+void emberAfNetworkCommissioningClusterServerAttributeChangedCallback(chip::EndpointId endpoint, chip::AttributeId attributeId);
+
+/** @brief Network Commissioning Cluster Server Manufacturer Specific Attribute Changed
+ *
+ * Server Manufacturer Specific Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute that changed
+ * @param manufacturerCode Manufacturer Code of the attribute that changed
+ */
+void emberAfNetworkCommissioningClusterServerManufacturerSpecificAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ uint16_t manufacturerCode);
+
+/** @brief Network Commissioning Cluster Server Message Sent
+ *
+ * Server Message Sent
+ *
+ * @param type The type of message sent
+ * @param indexOrDestination The destination or address to which the message was sent
+ * @param apsFrame The APS frame for the message
+ * @param msgLen The length of the message
+ * @param message The message that was sent
+ * @param status The status of the sent message
+ */
+void emberAfNetworkCommissioningClusterServerMessageSentCallback(EmberOutgoingMessageType type, uint64_t indexOrDestination,
+ EmberApsFrame * apsFrame, uint16_t msgLen, uint8_t * message,
+ EmberStatus status);
+
+/** @brief Network Commissioning Cluster Server Pre Attribute Changed
+ *
+ * server Pre Attribute Changed
+ *
+ * @param endpoint Endpoint that is being initialized
+ * @param attributeId Attribute to be changed
+ * @param attributeType Attribute type
+ * @param size Attribute size
+ * @param value Attribute value
+ */
+EmberAfStatus emberAfNetworkCommissioningClusterServerPreAttributeChangedCallback(chip::EndpointId endpoint,
+ chip::AttributeId attributeId,
+ EmberAfAttributeType attributeType, uint8_t size,
+ uint8_t * value);
+
+/** @brief Network Commissioning Cluster Server Tick
+ *
+ * server Tick
+ *
+ * @param endpoint Endpoint that is being served
+ */
+void emberAfNetworkCommissioningClusterServerTickCallback(chip::EndpointId endpoint);
+
+//
// On/off Cluster server
//
bool emberAfMediaPlaybackClusterStopRequestCallback();
/**
+ * @brief Network Commissioning Cluster AddThreadNetwork Command callback
+ * @param operationalDataset
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterAddThreadNetworkCallback(uint8_t * operationalDataset, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster AddWiFiNetwork Command callback
+ * @param ssid
+ * @param credentials
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterAddWiFiNetworkCallback(uint8_t * ssid, uint8_t * credentials, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster DisableNetwork Command callback
+ * @param networkID
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterDisableNetworkCallback(uint8_t * networkID, uint64_t breadcrumb, uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster EnableNetwork Command callback
+ * @param networkID
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterEnableNetworkCallback(uint8_t * networkID, uint64_t breadcrumb, uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster GetLastNetworkCommissioningResult Command callback
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterGetLastNetworkCommissioningResultCallback(uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster RemoveNetwork Command callback
+ * @param networkID
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterRemoveNetworkCallback(uint8_t * NetworkID, uint64_t Breadcrumb, uint32_t TimeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster ScanNetworks Command callback
+ * @param ssid
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterScanNetworksCallback(uint8_t * ssid, uint64_t breadcrumb, uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster UpdateThreadNetwork Command callback
+ * @param operationalDataset
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterUpdateThreadNetworkCallback(uint8_t * operationalDataset, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
+ * @brief Network Commissioning Cluster UpdateWiFiNetwork Command callback
+ * @param ssid
+ * @param credentials
+ * @param breadcrumb
+ * @param timeoutMs
+ */
+
+bool emberAfNetworkCommissioningClusterUpdateWiFiNetworkCallback(uint8_t * ssid, uint8_t * credentials, uint64_t breadcrumb,
+ uint32_t timeoutMs);
+
+/**
* @brief On/off Cluster Off Command callback
*/
\
ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+/** @brief Command description for ScanNetworks
+ *
+ * Command: ScanNetworks
+ * @param ssid OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterScanNetworks(ssid, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_NETWORKS_COMMAND_ID, "uuu", ssid, breadcrumb, timeoutMs);
+
+/** @brief Command description for ScanNetworksResponse
+ *
+ * Command: ScanNetworksResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ * @param wifiScanResults WiFiInterfaceScanResult []
+ * @param wifiScanResultsLen int
+ * @param threadScanResults ThreadInterfaceScanResult []
+ * @param threadScanResultsLen int
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterScanNetworksResponse(errorCode, debugText, wifiScanResults, wifiScanResultsLen, threadScanResults, \
+ threadScanResultsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID, "uubb", errorCode, debugText, wifiScanResults, \
+ wifiScanResultsLen, threadScanResults, threadScanResultsLen);
+
+/** @brief Command description for AddWiFiNetwork
+ *
+ * Command: AddWiFiNetwork
+ * @param ssid OCTET_STRING
+ * @param credentials OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
+
+/** @brief Command description for AddWiFiNetworkResponse
+ *
+ * Command: AddWiFiNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddWiFiNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for UpdateWiFiNetwork
+ *
+ * Command: UpdateWiFiNetwork
+ * @param ssid OCTET_STRING
+ * @param credentials OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
+
+/** @brief Command description for UpdateWiFiNetworkResponse
+ *
+ * Command: UpdateWiFiNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateWiFiNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for AddThreadNetwork
+ *
+ * Command: AddThreadNetwork
+ * @param operationalDataset OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
+
+/** @brief Command description for AddThreadNetworkResponse
+ *
+ * Command: AddThreadNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddThreadNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for UpdateThreadNetwork
+ *
+ * Command: UpdateThreadNetwork
+ * @param operationalDataset OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
+
+/** @brief Command description for UpdateThreadNetworkResponse
+ *
+ * Command: UpdateThreadNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateThreadNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for RemoveNetwork
+ *
+ * Command: RemoveNetwork
+ * @param NetworkID OCTET_STRING
+ * @param Breadcrumb INT64U
+ * @param TimeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterRemoveNetwork(NetworkID, Breadcrumb, TimeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_NETWORK_COMMAND_ID, "uuu", NetworkID, Breadcrumb, TimeoutMs);
+
+/** @brief Command description for RemoveNetworkResponse
+ *
+ * Command: RemoveNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterRemoveNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for EnableNetwork
+ *
+ * Command: EnableNetwork
+ * @param networkID OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterEnableNetwork(networkID, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
+
+/** @brief Command description for EnableNetworkResponse
+ *
+ * Command: EnableNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterEnableNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for DisableNetwork
+ *
+ * Command: DisableNetwork
+ * @param networkID OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterDisableNetwork(networkID, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
+
+/** @brief Command description for DisableNetworkResponse
+ *
+ * Command: DisableNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterDisableNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for GetLastNetworkCommissioningResult
+ *
+ * Command: GetLastNetworkCommissioningResult
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterGetLastNetworkCommissioningResult(timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID, "u", timeoutMs);
+
/** @brief Command description for LockDoor
*
* Command: LockDoor
ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID, "uuuub", startIndex, total, startIndex, count, \
endpointInformationRecordList, endpointInformationRecordListLen);
-/** @brief Command description for ScanNetworks
- *
- * Command: ScanNetworks
- * @param ssid OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterScanNetworks(ssid, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_SCAN_NETWORKS_COMMAND_ID, "uuu", ssid, breadcrumb, timeoutMs);
-
-/** @brief Command description for ScanNetworksResponse
- *
- * Command: ScanNetworksResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- * @param wifiScanResults WiFiInterfaceScanResult []
- * @param wifiScanResultsLen int
- * @param threadScanResults ThreadInterfaceScanResult []
- * @param threadScanResultsLen int
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterScanNetworksResponse(errorCode, debugText, wifiScanResults, wifiScanResultsLen, threadScanResults, \
- threadScanResultsLen) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID, "uubb", errorCode, debugText, wifiScanResults, \
- wifiScanResultsLen, threadScanResults, threadScanResultsLen);
-
-/** @brief Command description for AddWiFiNetwork
- *
- * Command: AddWiFiNetwork
- * @param ssid OCTET_STRING
- * @param credentials OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
-
-/** @brief Command description for AddWiFiNetworkResponse
- *
- * Command: AddWiFiNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddWiFiNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for UpdateWiFiNetwork
- *
- * Command: UpdateWiFiNetwork
- * @param ssid OCTET_STRING
- * @param credentials OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
-
-/** @brief Command description for UpdateWiFiNetworkResponse
- *
- * Command: UpdateWiFiNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateWiFiNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for AddThreadNetwork
- *
- * Command: AddThreadNetwork
- * @param operationalDataset OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
-
-/** @brief Command description for AddThreadNetworkResponse
- *
- * Command: AddThreadNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddThreadNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for UpdateThreadNetwork
- *
- * Command: UpdateThreadNetwork
- * @param operationalDataset OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
-
-/** @brief Command description for UpdateThreadNetworkResponse
- *
- * Command: UpdateThreadNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateThreadNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for RemoveNetwork
- *
- * Command: RemoveNetwork
- * @param NetworkID OCTET_STRING
- * @param Breadcrumb INT64U
- * @param TimeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterRemoveNetwork(NetworkID, Breadcrumb, TimeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_REMOVE_NETWORK_COMMAND_ID, "uuu", NetworkID, Breadcrumb, TimeoutMs);
-
-/** @brief Command description for RemoveNetworkResponse
- *
- * Command: RemoveNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterRemoveNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for EnableNetwork
- *
- * Command: EnableNetwork
- * @param networkID OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterEnableNetwork(networkID, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ENABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
-
-/** @brief Command description for EnableNetworkResponse
- *
- * Command: EnableNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterEnableNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for DisableNetwork
- *
- * Command: DisableNetwork
- * @param networkID OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterDisableNetwork(networkID, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_DISABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
-
-/** @brief Command description for DisableNetworkResponse
- *
- * Command: DisableNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterDisableNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for GetLastNetworkCommissioningResult
- *
- * Command: GetLastNetworkCommissioningResult
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterGetLastNetworkCommissioningResult(timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID, "u", timeoutMs);
-
/** @brief Command description for Bind
*
* Command: Bind
// Definitions for cluster: General Commissioning
#define ZCL_GENERAL_COMMISSIONING_CLUSTER_ID (0x0030)
+// Definitions for cluster: Network Commissioning
+#define ZCL_NETWORK_COMMISSIONING_CLUSTER_ID (0x0031)
+
// Definitions for cluster: Shade Configuration
#define ZCL_SHADE_CONFIG_CLUSTER_ID (0x0100)
// Definitions for cluster: ZLL Commissioning
#define ZCL_ZLL_COMMISSIONING_CLUSTER_ID (0x1000)
-// Definitions for cluster: Network Commissioning
-#define ZCL_NETWORK_COMMISSIONING_CLUSTER_ID (0xAAAA)
-
// Definitions for cluster: Binding
#define ZCL_BINDING_CLUSTER_ID (0xF000)
#define ZCL_COMMISSIONING_COMPLETE_COMMAND_ID (0x06)
#define ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID (0x07)
+// Commands for cluster: Network Commissioning
+#define ZCL_SCAN_NETWORKS_COMMAND_ID (0x00)
+#define ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_ADD_WI_FI_NETWORK_COMMAND_ID (0x02)
+#define ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID (0x04)
+#define ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_ADD_THREAD_NETWORK_COMMAND_ID (0x06)
+#define ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID (0x08)
+#define ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_REMOVE_NETWORK_COMMAND_ID (0x0A)
+#define ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID (0x0B)
+#define ZCL_ENABLE_NETWORK_COMMAND_ID (0x0C)
+#define ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_DISABLE_NETWORK_COMMAND_ID (0x0E)
+#define ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID (0x0F)
+#define ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID (0x10)
+
// Commands for cluster: Door Lock
#define ZCL_LOCK_DOOR_COMMAND_ID (0x00)
#define ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID (0x00)
#define ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID (0x42)
#define ZCL_GET_ENDPOINT_LIST_RESPONSE_COMMAND_ID (0x42)
-// Commands for cluster: Network Commissioning
-#define ZCL_SCAN_NETWORKS_COMMAND_ID (0x00)
-#define ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID (0x01)
-#define ZCL_ADD_WI_FI_NETWORK_COMMAND_ID (0x02)
-#define ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x03)
-#define ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID (0x04)
-#define ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x05)
-#define ZCL_ADD_THREAD_NETWORK_COMMAND_ID (0x06)
-#define ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x07)
-#define ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID (0x08)
-#define ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x09)
-#define ZCL_REMOVE_NETWORK_COMMAND_ID (0x0A)
-#define ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID (0x0B)
-#define ZCL_ENABLE_NETWORK_COMMAND_ID (0x0C)
-#define ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID (0x0D)
-#define ZCL_DISABLE_NETWORK_COMMAND_ID (0x0E)
-#define ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID (0x0F)
-#define ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID (0x10)
-
// Commands for cluster: Binding
#define ZCL_BIND_COMMAND_ID (0x00)
#define ZCL_UNBIND_COMMAND_ID (0x01)
#define ZAP_ATTRIBUTE_MASK(mask) ATTRIBUTE_MASK_##mask
// This is an array of EmberAfAttributeMetadata structures.
-#define GENERATED_ATTRIBUTE_COUNT 111
+#define GENERATED_ATTRIBUTE_COUNT 112
#define GENERATED_ATTRIBUTES \
{ \
{ 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 2 } }, /* Identify (server): cluster revision */ \
}, /* Basic (server): SoftwareVersion */ \
{ \
0x000A, ZAP_TYPE(CHAR_STRING), 64, ZAP_ATTRIBUTE_MASK(SINGLETON), { (uint8_t *) ZAP_LONG_DEFAULTS_INDEX(180) } \
- }, /* Basic (server): SoftwareVersionString */ \
+ }, /* Basic (server): SoftwareVersionString */ \
+ { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Network Commissioning (server): cluster revision */ \
{ \
0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), { (uint8_t *) 3 } \
}, /* Door Lock (client): cluster revision */ \
}, /* IAS Zone (server): IAS CIE address */ \
{ 0x0011, ZAP_TYPE(INT8U), 1, 0, { (uint8_t *) 0xff } }, /* IAS Zone (server): Zone ID */ \
{ 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Low Power (server): cluster revision */ \
- { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Application Basic (server): cluster revision */ \
{ \
0x0000, ZAP_TYPE(OCTET_STRING), 32, 0, { (uint8_t *) ZAP_LONG_DEFAULTS_INDEX(506) } \
}, /* Application Basic (server): vendor name */ \
{ 0x0001, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0 } }, /* Application Basic (server): vendor id */ \
{ \
0x0002, ZAP_TYPE(OCTET_STRING), 32, 0, { (uint8_t *) ZAP_LONG_DEFAULTS_INDEX(538) } \
- }, /* Application Basic (server): application name */ \
- { 0x0003, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0 } }, /* Application Basic (server): product id */ \
+ }, /* Application Basic (server): application name */ \
+ { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Application Basic (server): cluster revision */ \
+ { 0x0003, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0 } }, /* Application Basic (server): product id */ \
{ \
0x0005, ZAP_TYPE(OCTET_STRING), 32, 0, { (uint8_t *) ZAP_LONG_DEFAULTS_INDEX(570) } \
}, /* Application Basic (server): application id */ \
{ 0x0006, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0 } }, /* Application Basic (server): catalog vendor id */ \
{ 0x0007, ZAP_TYPE(ENUM8), 1, 0, { (uint8_t *) 0x01 } }, /* Application Basic (server): application satus */ \
- { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Media Playback (server): cluster revision */ \
{ 0x0000, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0 } }, /* Media Playback (server): current state */ \
+ { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Media Playback (server): cluster revision */ \
{ 0xFFFD, ZAP_TYPE(INT16U), 2, 0, { (uint8_t *) 0x0001 } }, /* Content Launch (server): cluster revision */ \
}
};
#define ZAP_CLUSTER_MASK(mask) CLUSTER_MASK_##mask
-#define GENERATED_CLUSTER_COUNT 18
+#define GENERATED_CLUSTER_COUNT 19
#define GENERATED_CLUSTERS \
{ \
{ 0x0003, \
0x0028, ZAP_ATTRIBUTE_INDEX(14), 12, 254, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Basic (server) */ \
{ \
- 0x0101, ZAP_ATTRIBUTE_INDEX(26), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL \
+ 0x0031, ZAP_ATTRIBUTE_INDEX(26), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
+ }, /* Endpoint: 1, Cluster: Network Commissioning (server) */ \
+ { \
+ 0x0101, ZAP_ATTRIBUTE_INDEX(27), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL \
}, /* Endpoint: 1, Cluster: Door Lock (client) */ \
{ 0x0101, \
- ZAP_ATTRIBUTE_INDEX(27), \
+ ZAP_ATTRIBUTE_INDEX(28), \
4, \
5, \
ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(ATTRIBUTE_CHANGED_FUNCTION), \
chipFuncArrayDoorLockServer }, /* Endpoint: 1, Cluster: Door Lock (server) */ \
{ \
- 0x0103, ZAP_ATTRIBUTE_INDEX(31), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL \
+ 0x0103, ZAP_ATTRIBUTE_INDEX(32), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL \
}, /* Endpoint: 1, Cluster: Barrier Control (client) */ \
{ \
- 0x0103, ZAP_ATTRIBUTE_INDEX(32), 5, 7, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0x0103, ZAP_ATTRIBUTE_INDEX(33), 5, 7, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Barrier Control (server) */ \
{ \
- 0x0300, ZAP_ATTRIBUTE_INDEX(37), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL \
+ 0x0300, ZAP_ATTRIBUTE_INDEX(38), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL \
}, /* Endpoint: 1, Cluster: Color Control (client) */ \
{ 0x0300, \
- ZAP_ATTRIBUTE_INDEX(38), \
+ ZAP_ATTRIBUTE_INDEX(39), \
51, \
336, \
ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION), \
chipFuncArrayColorControlServer }, /* Endpoint: 1, Cluster: Color Control (server) */ \
{ \
- 0x0402, ZAP_ATTRIBUTE_INDEX(89), 4, 8, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0x0402, ZAP_ATTRIBUTE_INDEX(90), 4, 8, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Temperature Measurement (server) */ \
{ 0x0500, \
- ZAP_ATTRIBUTE_INDEX(93), \
+ ZAP_ATTRIBUTE_INDEX(94), \
6, \
16, \
ZAP_CLUSTER_MASK(SERVER) | ZAP_CLUSTER_MASK(INIT_FUNCTION) | ZAP_CLUSTER_MASK(PRE_ATTRIBUTE_CHANGED_FUNCTION) | \
ZAP_CLUSTER_MASK(MESSAGE_SENT_FUNCTION), \
chipFuncArrayIasZoneServer }, /* Endpoint: 1, Cluster: IAS Zone (server) */ \
{ \
- 0x0508, ZAP_ATTRIBUTE_INDEX(99), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0x0508, ZAP_ATTRIBUTE_INDEX(100), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Low Power (server) */ \
{ \
- 0x050D, ZAP_ATTRIBUTE_INDEX(100), 8, 105, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0x050D, ZAP_ATTRIBUTE_INDEX(101), 8, 105, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Application Basic (server) */ \
{ \
- 0xF001, ZAP_ATTRIBUTE_INDEX(108), 2, 4, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0xF001, ZAP_ATTRIBUTE_INDEX(109), 2, 4, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Media Playback (server) */ \
{ \
- 0xF002, ZAP_ATTRIBUTE_INDEX(110), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0xF002, ZAP_ATTRIBUTE_INDEX(111), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 1, Cluster: Content Launch (server) */ \
}
// This is an array of EmberAfEndpointType structures.
#define GENERATED_ENDPOINT_TYPES \
{ \
- { ZAP_CLUSTER_INDEX(0), 18, 766 }, \
+ { ZAP_CLUSTER_INDEX(0), 19, 768 }, \
}
// Largest attribute size is needed for various buffers
#define ATTRIBUTE_SINGLETONS_SIZE (254)
// Total size of attribute storage
-#define ATTRIBUTE_MAX_SIZE (766)
+#define ATTRIBUTE_MAX_SIZE (768)
// Number of fixed endpoints
#define FIXED_ENDPOINT_COUNT (1)
// Array of EmberAfCommandMetadata structs.
#define ZAP_COMMAND_MASK(mask) COMMAND_MASK_##mask
-#define EMBER_AF_GENERATED_COMMAND_COUNT (141)
+#define EMBER_AF_GENERATED_COMMAND_COUNT (158)
#define GENERATED_COMMANDS \
{ \
{ 0x0003, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Identify (server): Identify */ \
{ 0x0028, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Basic (server): StartUp */ \
{ 0x0028, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Basic (server): ShutDown */ \
{ 0x0028, 0x02, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Basic (server): Leave */ \
+ { 0x0031, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): ScanNetworks */ \
+ { 0x0031, 0x01, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): ScanNetworksResponse */ \
+ { 0x0031, 0x02, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): AddWiFiNetwork */ \
+ { 0x0031, 0x03, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): AddWiFiNetworkResponse */ \
+ { 0x0031, 0x04, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): UpdateWiFiNetwork */ \
+ { 0x0031, 0x05, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): UpdateWiFiNetworkResponse */ \
+ { 0x0031, 0x06, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): AddThreadNetwork */ \
+ { 0x0031, 0x07, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): AddThreadNetworkResponse */ \
+ { 0x0031, 0x08, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): UpdateThreadNetwork */ \
+ { 0x0031, 0x09, ZAP_COMMAND_MASK(OUTGOING_SERVER) }, /* Network Commissioning (server): UpdateThreadNetworkResponse */ \
+ { 0x0031, 0x0A, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): RemoveNetwork */ \
+ { 0x0031, 0x0B, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): RemoveNetworkResponse */ \
+ { 0x0031, 0x0C, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): EnableNetwork */ \
+ { 0x0031, 0x0D, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): EnableNetworkResponse */ \
+ { 0x0031, 0x0E, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): DisableNetwork */ \
+ { 0x0031, 0x0F, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Network Commissioning (server): DisableNetworkResponse */ \
+ { 0x0031, 0x10, \
+ ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Network Commissioning (server): GetLastNetworkCommissioningResult */ \
{ 0x0101, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Door Lock (client): LockDoor */ \
{ 0x0101, 0x00, ZAP_COMMAND_MASK(INCOMING_CLIENT) }, /* Door Lock (client): LockDoorResponse */ \
{ 0x0101, 0x00, ZAP_COMMAND_MASK(INCOMING_SERVER) }, /* Door Lock (server): LockDoor */ \
#define EMBER_AF_LEVEL_CONTROL_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_LOW_POWER_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_MEDIA_PLAYBACK_CLUSTER_SERVER_ENDPOINT_COUNT (1)
+#define EMBER_AF_NETWORK_COMMISSIONING_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_ON_OFF_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_SCENES_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_TEMP_MEASUREMENT_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_PLUGIN_MEDIA_PLAYBACK_SERVER
#define EMBER_AF_PLUGIN_MEDIA_PLAYBACK
+// Use this macro to check if the server side of the Network Commissioning cluster is included
+#define ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER
+#define EMBER_AF_PLUGIN_NETWORK_COMMISSIONING_SERVER
+#define EMBER_AF_PLUGIN_NETWORK_COMMISSIONING
+
// Use this macro to check if the server side of the On/off cluster is included
#define ZCL_USING_ON_OFF_CLUSTER_SERVER
#define EMBER_AF_PLUGIN_ON_OFF_SERVER
#define CHIP_PRINTCLUSTER_GENERAL_COMMISSIONING_CLUSTER
#endif
+#if defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER { ZCL_NETWORK_COMMISSIONING_CLUSTER_ID, 49, "Network Commissioning" },
+#else
+#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER
+#endif
+
#if defined(ZCL_USING_SHADE_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_SHADE_CONFIG_CLUSTER_CLIENT)
#define CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER { ZCL_SHADE_CONFIG_CLUSTER_ID, 256, "Shade Configuration" },
#else
#define CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER
#endif
-#if defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_CLIENT)
-#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER { ZCL_NETWORK_COMMISSIONING_CLUSTER_ID, 43690, "Network Commissioning" },
-#else
-#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER
-#endif
-
#if defined(ZCL_USING_BINDING_CLUSTER_SERVER) || defined(ZCL_USING_BINDING_CLUSTER_CLIENT)
#define CHIP_PRINTCLUSTER_BINDING_CLUSTER { ZCL_BINDING_CLUSTER_ID, 61440, "Binding" },
#else
CHIP_PRINTCLUSTER_KEEPALIVE_CLUSTER \
CHIP_PRINTCLUSTER_BASIC_CLUSTER \
CHIP_PRINTCLUSTER_GENERAL_COMMISSIONING_CLUSTER \
+ CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER \
CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER \
CHIP_PRINTCLUSTER_DOOR_LOCK_CLUSTER \
CHIP_PRINTCLUSTER_WINDOW_COVERING_CLUSTER \
CHIP_PRINTCLUSTER_ELECTRICAL_MEASUREMENT_CLUSTER \
CHIP_PRINTCLUSTER_DIAGNOSTICS_CLUSTER \
CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER \
- CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER \
CHIP_PRINTCLUSTER_BINDING_CLUSTER \
CHIP_PRINTCLUSTER_MEDIA_PLAYBACK_CLUSTER \
CHIP_PRINTCLUSTER_CONTENT_LAUNCH_CLUSTER \
{
- "writeTime": "Mon Mar 08 2021 19:19:58 GMT+0100 (Central European Standard Time)",
+ "writeTime": "Fri Mar 12 2021 15:20:50 GMT+0800 (China Standard Time)",
"featureLevel": 11,
"creator": "zap",
"keyValuePairs": [
"deviceTypeProfileId": 259,
"clusters": [
{
- "name": "Basic",
- "code": 40,
+ "name": "Identify",
+ "code": 3,
"mfgCode": null,
- "define": "BASIC_CLUSTER",
+ "define": "IDENTIFY_CLUSTER",
"side": "client",
"enabled": 0,
- "commands": [],
"attributes": [
{
"name": "cluster revision",
"side": "client",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "3",
+ "defaultValue": "2",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
}
- ]
- },
- {
- "name": "Basic",
- "code": 40,
- "mfgCode": null,
- "define": "BASIC_CLUSTER",
- "side": "server",
- "enabled": 1,
+ ],
"commands": [
{
- "name": "StartUp",
+ "name": "Identify",
"code": 0,
"mfgCode": null,
- "source": "server",
+ "source": "client",
"incoming": 1,
"outgoing": 1
},
{
- "name": "ShutDown",
+ "name": "IdentifyQuery",
"code": 1,
"mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "Leave",
- "code": 2,
- "mfgCode": null,
- "source": "server",
+ "source": "client",
"incoming": 1,
"outgoing": 1
}
- ],
+ ]
+ },
+ {
+ "name": "Identify",
+ "code": 3,
+ "mfgCode": null,
+ "define": "IDENTIFY_CLUSTER",
+ "side": "server",
+ "enabled": 1,
"attributes": [
{
"name": "cluster revision",
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "3",
+ "defaultValue": "2",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "InteractionModelVersion",
+ "name": "identify time",
"code": 0,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0x0000",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
- },
+ }
+ ],
+ "commands": [
{
- "name": "VendorName",
- "code": 1,
+ "name": "IdentifyQueryResponse",
+ "code": 0,
"mfgCode": null,
- "side": "server",
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ]
+ },
+ {
+ "name": "Groups",
+ "code": 4,
+ "mfgCode": null,
+ "define": "GROUPS_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "3",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
+ }
+ ],
+ "commands": [
+ {
+ "name": "AddGroup",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
},
{
- "name": "VendorID",
+ "name": "ViewGroup",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetGroupMembership",
"code": 2,
"mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveGroup",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveAllGroups",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "AddGroupIfIdentifying",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ]
+ },
+ {
+ "name": "Groups",
+ "code": 4,
+ "mfgCode": null,
+ "define": "GROUPS_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "AddGroupResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ViewGroupResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetGroupMembershipResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveGroupResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "3",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "ProductName",
- "code": 3,
+ "name": "name support",
+ "code": 0,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
"defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Scenes",
+ "code": 5,
+ "mfgCode": null,
+ "define": "SCENES_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "commands": [
+ {
+ "name": "AddScene",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
},
{
- "name": "ProductID",
+ "name": "ViewScene",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveScene",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveAllScenes",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "StoreScene",
"code": 4,
"mfgCode": null,
- "side": "server",
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RecallScene",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetSceneMembership",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "3",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Scenes",
+ "code": 5,
+ "mfgCode": null,
+ "define": "SCENES_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "AddSceneResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ViewSceneResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveSceneResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveAllScenesResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
},
{
- "name": "UserLabel",
- "code": 5,
+ "name": "StoreSceneResponse",
+ "code": 4,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetSceneMembershipResponse",
+ "code": 6,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "3",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "Location",
- "code": 6,
+ "name": "scene count",
+ "code": 0,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0x00",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "HardwareVersion",
- "code": 7,
+ "name": "current scene",
+ "code": 1,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
"defaultValue": "0x00",
"reportable": 0,
"reportableChange": 0
},
{
- "name": "HardwareVersionString",
- "code": 8,
+ "name": "current group",
+ "code": 2,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
- "defaultValue": "",
+ "defaultValue": "0x0000",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "SoftwareVersion",
- "code": 9,
+ "name": "scene valid",
+ "code": 3,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
"defaultValue": "0x00",
"reportable": 0,
"reportableChange": 0
},
{
- "name": "SoftwareVersionString",
- "code": 10,
+ "name": "name support",
+ "code": 4,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 1,
+ "singleton": 0,
"bounded": 0,
"defaultValue": "",
"reportable": 0,
]
},
{
- "name": "Identify",
- "code": 3,
+ "name": "On/off",
+ "code": 6,
"mfgCode": null,
- "define": "IDENTIFY_CLUSTER",
+ "define": "ON_OFF_CLUSTER",
"side": "client",
"enabled": 0,
"commands": [
{
- "name": "Identify",
+ "name": "Off",
"code": 0,
"mfgCode": null,
"source": "client",
"outgoing": 1
},
{
- "name": "IdentifyQuery",
+ "name": "On",
"code": 1,
"mfgCode": null,
"source": "client",
"incoming": 1,
"outgoing": 1
+ },
+ {
+ "name": "Toggle",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
}
],
"attributes": [
]
},
{
- "name": "Identify",
- "code": 3,
+ "name": "On/off",
+ "code": 6,
"mfgCode": null,
- "define": "IDENTIFY_CLUSTER",
+ "define": "ON_OFF_CLUSTER",
"side": "server",
"enabled": 1,
+ "commands": [],
"attributes": [
{
"name": "cluster revision",
"reportableChange": 0
},
{
- "name": "identify time",
+ "name": "on/off",
"code": 0,
"mfgCode": null,
"side": "server",
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0x0000",
- "reportable": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
}
- ],
- "commands": [
- {
- "name": "IdentifyQueryResponse",
- "code": 0,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- }
]
},
{
- "name": "Groups",
- "code": 4,
+ "name": "Level Control",
+ "code": 8,
"mfgCode": null,
- "define": "GROUPS_CLUSTER",
+ "define": "LEVEL_CONTROL_CLUSTER",
"side": "client",
"enabled": 0,
"commands": [
{
- "name": "AddGroup",
+ "name": "MoveToLevel",
"code": 0,
"mfgCode": null,
"source": "client",
"outgoing": 1
},
{
- "name": "ViewGroup",
+ "name": "Move",
"code": 1,
"mfgCode": null,
"source": "client",
"outgoing": 1
},
{
- "name": "GetGroupMembership",
+ "name": "Step",
"code": 2,
"mfgCode": null,
"source": "client",
"outgoing": 1
},
{
- "name": "RemoveGroup",
+ "name": "Stop",
"code": 3,
"mfgCode": null,
"source": "client",
"outgoing": 1
},
{
- "name": "RemoveAllGroups",
+ "name": "MoveToLevelWithOnOff",
"code": 4,
"mfgCode": null,
"source": "client",
"outgoing": 1
},
{
- "name": "AddGroupIfIdentifying",
+ "name": "MoveWithOnOff",
"code": 5,
"mfgCode": null,
"source": "client",
"incoming": 1,
"outgoing": 1
+ },
+ {
+ "name": "StepWithOnOff",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "StopWithOnOff",
+ "code": 7,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
}
],
"attributes": [
]
},
{
- "name": "Groups",
- "code": 4,
+ "name": "Level Control",
+ "code": 8,
"mfgCode": null,
- "define": "GROUPS_CLUSTER",
+ "define": "LEVEL_CONTROL_CLUSTER",
"side": "server",
"enabled": 1,
- "commands": [
- {
- "name": "AddGroupResponse",
- "code": 0,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "ViewGroupResponse",
- "code": 1,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "GetGroupMembershipResponse",
- "code": 2,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "RemoveGroupResponse",
- "code": 3,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- }
- ],
+ "commands": [],
"attributes": [
{
"name": "cluster revision",
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "3",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "name support",
- "code": 0,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ]
- },
- {
- "name": "Scenes",
- "code": 5,
- "mfgCode": null,
- "define": "SCENES_CLUSTER",
- "side": "client",
- "enabled": 0,
- "commands": [
- {
- "name": "AddScene",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "ViewScene",
- "code": 1,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "RemoveScene",
- "code": 2,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "RemoveAllScenes",
- "code": 3,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "StoreScene",
- "code": 4,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "RecallScene",
- "code": 5,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
},
{
- "name": "GetSceneMembership",
- "code": 6,
+ "name": "current level",
+ "code": 0,
"mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
}
- ],
+ ]
+ },
+ {
+ "name": "Basic",
+ "code": 40,
+ "mfgCode": null,
+ "define": "BASIC_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "commands": [],
"attributes": [
{
"name": "cluster revision",
"side": "client",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
"defaultValue": "3",
"reportable": 0,
]
},
{
- "name": "Scenes",
- "code": 5,
+ "name": "Basic",
+ "code": 40,
"mfgCode": null,
- "define": "SCENES_CLUSTER",
+ "define": "BASIC_CLUSTER",
"side": "server",
"enabled": 1,
"commands": [
{
- "name": "AddSceneResponse",
+ "name": "StartUp",
"code": 0,
"mfgCode": null,
"source": "server",
"outgoing": 1
},
{
- "name": "ViewSceneResponse",
+ "name": "ShutDown",
"code": 1,
"mfgCode": null,
"source": "server",
"outgoing": 1
},
{
- "name": "RemoveSceneResponse",
+ "name": "Leave",
"code": 2,
"mfgCode": null,
"source": "server",
"incoming": 1,
"outgoing": 1
- },
- {
- "name": "RemoveAllScenesResponse",
- "code": 3,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "StoreSceneResponse",
- "code": 4,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "GetSceneMembershipResponse",
- "code": 6,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
}
],
"attributes": [
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
"defaultValue": "3",
"reportable": 0,
"reportableChange": 0
},
{
- "name": "scene count",
+ "name": "InteractionModelVersion",
"code": 0,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "0x00",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "current scene",
+ "name": "VendorName",
"code": 1,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "0x00",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "current group",
+ "name": "VendorID",
"code": 2,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "0x0000",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "scene valid",
+ "name": "ProductName",
"code": 3,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
"bounded": 0,
- "defaultValue": "0x00",
+ "defaultValue": "",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
},
{
- "name": "name support",
+ "name": "ProductID",
"code": 4,
"mfgCode": null,
"side": "server",
"included": 1,
"storageOption": "RAM",
- "singleton": 0,
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "UserLabel",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "Location",
+ "code": 6,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "HardwareVersion",
+ "code": 7,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "HardwareVersionString",
+ "code": 8,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "SoftwareVersion",
+ "code": 9,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "SoftwareVersionString",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
"bounded": 0,
"defaultValue": "",
"reportable": 0,
]
},
{
- "name": "On/off",
- "code": 6,
+ "name": "Network Commissioning",
+ "code": 49,
"mfgCode": null,
- "define": "ON_OFF_CLUSTER",
+ "define": "NETWORK_COMMISSIONING_CLUSTER",
"side": "client",
"enabled": 0,
"commands": [
{
- "name": "Off",
+ "name": "ScanNetworks",
"code": 0,
"mfgCode": null,
"source": "client",
"outgoing": 1
},
{
- "name": "On",
- "code": 1,
+ "name": "AddWiFiNetwork",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "UpdateWiFiNetwork",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "AddThreadNetwork",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "UpdateThreadNetwork",
+ "code": 8,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "RemoveNetwork",
+ "code": 10,
"mfgCode": null,
"source": "client",
"incoming": 1,
"outgoing": 1
},
{
- "name": "Toggle",
- "code": 2,
+ "name": "EnableNetwork",
+ "code": 12,
"mfgCode": null,
"source": "client",
"incoming": 1,
"outgoing": 1
- }
- ],
- "attributes": [
+ },
{
- "name": "cluster revision",
- "code": 65533,
+ "name": "DisableNetwork",
+ "code": 14,
"mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "2",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetLastNetworkCommissioningResult",
+ "code": 16,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
}
- ]
- },
- {
- "name": "On/off",
- "code": 6,
- "mfgCode": null,
- "define": "ON_OFF_CLUSTER",
- "side": "server",
- "enabled": 1,
- "commands": [],
+ ],
"attributes": [
{
"name": "cluster revision",
"code": 65533,
"mfgCode": null,
- "side": "server",
+ "side": "client",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "2",
+ "defaultValue": "0x0001",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
- },
- {
- "name": "on/off",
- "code": 0,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
}
]
},
{
- "name": "Level Control",
- "code": 8,
+ "name": "Network Commissioning",
+ "code": 49,
"mfgCode": null,
- "define": "LEVEL_CONTROL_CLUSTER",
- "side": "client",
- "enabled": 0,
+ "define": "NETWORK_COMMISSIONING_CLUSTER",
+ "side": "server",
+ "enabled": 1,
"commands": [
{
- "name": "MoveToLevel",
- "code": 0,
+ "name": "ScanNetworksResponse",
+ "code": 1,
"mfgCode": null,
- "source": "client",
+ "source": "server",
"incoming": 1,
"outgoing": 1
},
{
- "name": "Move",
- "code": 1,
+ "name": "AddWiFiNetworkResponse",
+ "code": 3,
"mfgCode": null,
- "source": "client",
- "incoming": 1,
+ "source": "server",
+ "incoming": 0,
"outgoing": 1
},
{
- "name": "Step",
- "code": 2,
+ "name": "UpdateWiFiNetworkResponse",
+ "code": 5,
"mfgCode": null,
- "source": "client",
- "incoming": 1,
+ "source": "server",
+ "incoming": 0,
"outgoing": 1
},
{
- "name": "Stop",
- "code": 3,
+ "name": "AddThreadNetworkResponse",
+ "code": 7,
"mfgCode": null,
- "source": "client",
- "incoming": 1,
+ "source": "server",
+ "incoming": 0,
"outgoing": 1
},
{
- "name": "MoveToLevelWithOnOff",
- "code": 4,
+ "name": "UpdateThreadNetworkResponse",
+ "code": 9,
"mfgCode": null,
- "source": "client",
- "incoming": 1,
+ "source": "server",
+ "incoming": 0,
"outgoing": 1
},
{
- "name": "MoveWithOnOff",
- "code": 5,
+ "name": "RemoveNetworkResponse",
+ "code": 11,
"mfgCode": null,
- "source": "client",
+ "source": "server",
"incoming": 1,
"outgoing": 1
},
{
- "name": "StepWithOnOff",
- "code": 6,
+ "name": "EnableNetworkResponse",
+ "code": 13,
"mfgCode": null,
- "source": "client",
+ "source": "server",
"incoming": 1,
"outgoing": 1
},
{
- "name": "StopWithOnOff",
- "code": 7,
+ "name": "DisableNetworkResponse",
+ "code": 15,
"mfgCode": null,
- "source": "client",
+ "source": "server",
"incoming": 1,
"outgoing": 1
}
"name": "cluster revision",
"code": 65533,
"mfgCode": null,
- "side": "client",
+ "side": "server",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "3",
+ "defaultValue": "0x0001",
"reportable": 0,
"minInterval": 0,
"maxInterval": 65344,
]
},
{
- "name": "Level Control",
- "code": 8,
+ "name": "Door Lock",
+ "code": 257,
"mfgCode": null,
- "define": "LEVEL_CONTROL_CLUSTER",
- "side": "server",
+ "define": "DOOR_LOCK_CLUSTER",
+ "side": "client",
"enabled": 1,
"attributes": [
{
"name": "cluster revision",
"code": 65533,
"mfgCode": null,
- "side": "server",
+ "side": "client",
"included": 1,
"storageOption": "RAM",
"singleton": 0,
"minInterval": 0,
"maxInterval": 65344,
"reportableChange": 0
- },
- {
- "name": "current level",
- "code": 0,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x00",
- "reportable": 1,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
}
],
- "commands": []
- },
- {
- "name": "Door Lock",
- "code": 257,
- "mfgCode": null,
- "define": "DOOR_LOCK_CLUSTER",
- "side": "client",
- "enabled": 1,
"commands": [
{
"name": "LockDoor",
"incoming": 1,
"outgoing": 1
}
- ],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "3",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
]
},
{
"define": "COLOR_CONTROL_CLUSTER",
"side": "client",
"enabled": 1,
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
"commands": [
{
"name": "MoveToHue",
"incoming": 1,
"outgoing": 1
}
- ],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "3",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
]
},
{
"define": "COLOR_CONTROL_CLUSTER",
"side": "server",
"enabled": 1,
+ "commands": [],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
- ],
- "commands": []
+ ]
},
{
"name": "Temperature Measurement",
"define": "TEMP_MEASUREMENT_CLUSTER",
"side": "client",
"enabled": 0,
- "commands": [],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
- ]
+ ],
+ "commands": []
},
{
"name": "Temperature Measurement",
"define": "IAS_ZONE_CLUSTER",
"side": "server",
"enabled": 1,
- "commands": [
- {
- "name": "ZoneStatusChangeNotification",
- "code": 0,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "ZoneEnrollRequest",
- "code": 1,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- }
- ],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
+ ],
+ "commands": [
+ {
+ "name": "ZoneStatusChangeNotification",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "ZoneEnrollRequest",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ }
]
},
{
"define": "APPLICATION_BASIC_CLUSTER",
"side": "client",
"enabled": 0,
- "commands": [],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
- ]
+ ],
+ "commands": []
},
{
"name": "Application Basic",
"define": "CONTENT_LAUNCH_CLUSTER",
"side": "client",
"enabled": 0,
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
"commands": [
{
"name": "LaunchContent",
"incoming": 1,
"outgoing": 1
}
- ],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x0001",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
]
},
{
"networkId": 1
}
]
-}
+}
\ No newline at end of file
--- /dev/null
+ARG VERSION=latest
+FROM connectedhomeip/chip-build:${VERSION}
+
+# Setup the K32W SDK
+RUN set -x \
+ && apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y wget unzip \
+ && rm -rf /var/lib/apt/lists/ \
+ && mkdir -p /opt/sdk \
+ && cd /opt/sdk \
+ && wget https://mcuxpresso.nxp.com/eclipse/sdk/2.6.2/plugins/com.nxp.mcuxpresso.sdk.sdk_2.x_k32w061dk6_2.6.2.201911251446.jar \
+ && unzip com.nxp.mcuxpresso.sdk.sdk_2.x_k32w061dk6_2.6.2.201911251446.jar \
+ && rm -rf com.nxp.mcuxpresso.sdk.sdk_2.x_k32w061dk6_2.6.2.201911251446.jar \
+ && cd sdks \
+ && unzip bea4b051e4c58da8d3bff93011a97d1d.zip \
+ && rm -rf bea4b051e4c58da8d3bff93011a97d1d.zip \
+ && : # last line
+
+ENV K32W061_SDK_ROOT=/opt/sdk/sdks
--- /dev/null
+../../build.sh
\ No newline at end of file
--- /dev/null
+../../run.sh
\ No newline at end of file
--- /dev/null
+../chip-build/version
\ No newline at end of file
unzip \
wget \
libdbus-1-dev \
- libmbedtls-dev
+ libmbedtls-dev \
+ python3.8-dev \
+ python3.8-venv
if [[ ! -f 'ci-cache-persistent/openssl/open_ssl_1.1.1f_installed' ]]; then
mkdir -p ci-cache-persistent/openssl
| LevelControl | 0x0008 |
| LowPower | 0x0508 |
| MediaPlayback | 0xF001 |
-| NetworkCommissioning | 0xAAAA |
+| NetworkCommissioning | 0x0031 |
| OnOff | 0x0006 |
| Scenes | 0x0005 |
| TemperatureMeasurement | 0x0402 |
chip::EndpointId destinationEndpoint);
/*----------------------------------------------------------------------------*\
-| Cluster NetworkCommissioning | 0xAAAA |
+| Cluster NetworkCommissioning | 0x0031 |
|------------------------------------------------------------------------------|
| Commands: | |
| * AddThreadNetwork | 0x06 |
{
case NetworkType::kThread:
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
+ ReturnErrorOnFailure(DeviceLayer::ThreadStackMgr().SetThreadEnabled(false));
ReturnErrorOnFailure(
DeviceLayer::ThreadStackMgr().SetThreadProvision(network->mData.mThread.mDataset, network->mData.mThread.mDatasetLen));
ReturnErrorOnFailure(DeviceLayer::ThreadStackMgr().SetThreadEnabled(true));
| LevelControl | 0x0008 |
| LowPower | 0x0508 |
| MediaPlayback | 0xF001 |
-| NetworkCommissioning | 0xAAAA |
+| NetworkCommissioning | 0x0031 |
| OnOff | 0x0006 |
| Scenes | 0x0005 |
| TemperatureMeasurement | 0x0402 |
#define ZCL_START_OVER_REQUEST_COMMAND_ID (0x03)
#define ZCL_STOP_REQUEST_COMMAND_ID (0x02)
-#define NETWORK_COMMISSIONING_CLUSTER_ID 0xAAAA
+#define NETWORK_COMMISSIONING_CLUSTER_ID 0x0031
#define ZCL_ADD_THREAD_NETWORK_COMMAND_ID (0x06)
#define ZCL_ADD_WI_FI_NETWORK_COMMAND_ID (0x02)
#define ZCL_DISABLE_NETWORK_COMMAND_ID (0x0E)
}
/*----------------------------------------------------------------------------*\
-| Cluster NetworkCommissioning | 0xAAAA |
+| Cluster NetworkCommissioning | 0x0031 |
|------------------------------------------------------------------------------|
| Commands: | |
| * AddThreadNetwork | 0x06 |
ChipLogError(AppServer, "Failed to store the connection state"));
uint16_t nextKeyId = mRendezvousSession.GetNextKeyId();
- mStorage->SetKeyValue(kStorablePeerConnectionCountKey, &nextKeyId, sizeof(nextKeyId));
+ mStorage->SyncSetKeyValue(kStorablePeerConnectionCountKey, &nextKeyId, sizeof(nextKeyId));
}
void RendezvousServer::OnRendezvousStatusUpdate(Status status, CHIP_ERROR err)
class ServerStorageDelegate : public PersistentStorageDelegate
{
- void SetDelegate(PersistentStorageResultDelegate * delegate) override
+ void SetStorageDelegate(PersistentStorageResultDelegate * delegate) override
{
ChipLogError(AppServer, "ServerStorageDelegate does not support async operations");
chipDie();
}
- void GetKeyValue(const char * key) override
+ void AsyncGetKeyValue(const char * key) override
{
ChipLogError(AppServer, "ServerStorageDelegate does not support async operations");
chipDie();
}
- void SetKeyValue(const char * key, const char * value) override
+ void AsyncSetKeyValue(const char * key, const char * value) override
{
ChipLogError(AppServer, "ServerStorageDelegate does not support async operations");
chipDie();
}
- CHIP_ERROR GetKeyValue(const char * key, void * buffer, uint16_t & size) override
+ CHIP_ERROR SyncGetKeyValue(const char * key, void * buffer, uint16_t & size) override
{
return PersistedStorage::KeyValueStoreMgr().Get(key, buffer, size);
}
- CHIP_ERROR SetKeyValue(const char * key, const void * value, uint16_t size) override
+ CHIP_ERROR SyncSetKeyValue(const char * key, const void * value, uint16_t size) override
{
return PersistedStorage::KeyValueStoreMgr().Put(key, value, size);
}
- void DeleteKeyValue(const char * key) override { PersistedStorage::KeyValueStoreMgr().Delete(key); }
+ void AsyncDeleteKeyValue(const char * key) override { PersistedStorage::KeyValueStoreMgr().Delete(key); }
};
ServerStorageDelegate gServerStorage;
"output": "IMClusterCommandHandler.cpp"
},
{
- "path": "templates/chip/CHIPClustersObjc.zapt",
+ "path": "templates/app/CHIPClustersObjc.zapt",
"name": "Objc ZCL API Header",
"output": "CHIPClustersObjc.h"
},
{
- "path": "templates/chip/CHIPClustersObjc-src.zapt",
+ "path": "templates/app/CHIPClustersObjc-src.zapt",
"name": "Objc ZCL API",
"output": "CHIPClustersObjc.mm"
}
#import "CHIPDevice.h"
#import "CHIPDevice_Internal.h"
-#import "ChipError.h"
+#import "CHIPError.h"
#import "gen/CHIPClustersObjc.h"
#import "gen/CHIPClientCallbacks.h"
bool mKeepAlive;
};
+class CHIPInt64uAttributeCallbackBridge : public Callback::Callback<Int64uAttributeCallback> {
+public:
+ CHIPInt64uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+ : Callback::Callback<Int64uAttributeCallback>(CallbackFn, this)
+ , mHandler(handler)
+ , mQueue(queue)
+ , mKeepAlive(keepAlive)
+ {
+ }
+
+ ~CHIPInt64uAttributeCallbackBridge() {};
+
+ static void CallbackFn(void * context, uint64_t value)
+ {
+ CHIPInt64uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt64uAttributeCallbackBridge *>(context);
+ if (callback && callback->mQueue) {
+ dispatch_async(callback->mQueue, ^{
+ callback->mHandler(nil, @{ @"value": [NSNumber numberWithUnsignedLongLong:value] });
+ if (!callback->mKeepAlive)
+ {
+ callback->Cancel();
+ delete callback;
+ }
+ });
+ }
+ };
+
+private:
+ ResponseHandler mHandler;
+ dispatch_queue_t mQueue;
+ bool mKeepAlive;
+};
+
class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
public:
CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
<name>Network Commissioning</name>
<domain>CHIP</domain>
<description>TODO</description>
- <code>0xaaaa</code>
+ <code>0x0031</code>
<define>NETWORK_COMMISSIONING_CLUSTER</define>
<client tick="false" init="false">true</client>
<server tick="false" init="false">true</server>
"CHIPDevice.h",
"CHIPDeviceController.cpp",
"CHIPDeviceController.h",
- "CHIPDeviceController_deprecated.cpp",
- "CHIPDeviceController_deprecated.h",
"DeviceAddressUpdater.cpp",
"DeviceAddressUpdater.h",
]
constexpr ClusterId kLevelControlClusterId = 0x0008;
constexpr ClusterId kLowPowerClusterId = 0x0508;
constexpr ClusterId kMediaPlaybackClusterId = 0xF001;
-constexpr ClusterId kNetworkCommissioningClusterId = 0xAAAA;
+constexpr ClusterId kNetworkCommissioningClusterId = 0x0031;
constexpr ClusterId kOnOffClusterId = 0x0006;
constexpr ClusterId kScenesClusterId = 0x0005;
constexpr ClusterId kTemperatureMeasurementClusterId = 0x0402;
if (mStorageDelegate != nullptr)
{
- mStorageDelegate->SetDelegate(this);
+ mStorageDelegate->SetStorageDelegate(this);
}
mTransportMgr = chip::Platform::New<DeviceTransportMgr>();
if (mStorageDelegate != nullptr)
{
- mStorageDelegate->SetDelegate(nullptr);
+ mStorageDelegate->SetStorageDelegate(nullptr);
mStorageDelegate = nullptr;
}
VerifyOrExit(buffer != nullptr, err = CHIP_ERROR_INVALID_ARGUMENT);
PERSISTENT_KEY_OP(static_cast<uint64_t>(0), kPairedDeviceListKeyPrefix, key,
- err = mStorageDelegate->GetKeyValue(key, buffer, size));
+ err = mStorageDelegate->SyncGetKeyValue(key, buffer, size));
SuccessOrExit(err);
VerifyOrExit(size <= max_size, err = CHIP_ERROR_INVALID_DEVICE_DESCRIPTOR);
uint16_t size = sizeof(deviceInfo.inner);
PERSISTENT_KEY_OP(deviceId, kPairedDeviceKeyPrefix, key,
- err = mStorageDelegate->GetKeyValue(key, Uint8::to_char(deviceInfo.inner), size));
+ err = mStorageDelegate->SyncGetKeyValue(key, Uint8::to_char(deviceInfo.inner), size));
SuccessOrExit(err);
VerifyOrExit(size <= sizeof(deviceInfo.inner), err = CHIP_ERROR_INVALID_DEVICE_DESCRIPTOR);
return err;
}
-void DeviceController::OnValue(const char * key, const char * value) {}
+void DeviceController::OnPersistentStorageValue(const char * key, const char * value) {}
-void DeviceController::OnStatus(const char * key, Operation op, CHIP_ERROR err) {}
+void DeviceController::OnPersistentStorageStatus(const char * key, Operation op, CHIP_ERROR err) {}
DeviceCommissioner::DeviceCommissioner()
{
if (mStorageDelegate != nullptr)
{
- PERSISTENT_KEY_OP(remoteDeviceId, kPairedDeviceKeyPrefix, key, mStorageDelegate->DeleteKeyValue(key));
+ PERSISTENT_KEY_OP(remoteDeviceId, kPairedDeviceKeyPrefix, key, mStorageDelegate->AsyncDeleteKeyValue(key));
}
mPairedDevices.Remove(remoteDeviceId);
SerializedDevice serialized;
device->Serialize(serialized);
PERSISTENT_KEY_OP(device->GetDeviceId(), kPairedDeviceKeyPrefix, key,
- mStorageDelegate->SetKeyValue(key, Uint8::to_const_char(serialized.inner)));
+ mStorageDelegate->AsyncSetKeyValue(key, Uint8::to_const_char(serialized.inner)));
}
RendezvousCleanup(CHIP_NO_ERROR);
if (value != nullptr && requiredSize <= size)
{
PERSISTENT_KEY_OP(static_cast<uint64_t>(0), kPairedDeviceListKeyPrefix, key,
- mStorageDelegate->SetKeyValue(key, value));
+ mStorageDelegate->AsyncSetKeyValue(key, value));
mPairedDevicesUpdated = false;
}
chip::Platform::MemoryFree(serialized);
void OnConnectionExpired(SecureSessionHandle session, SecureSessionMgr * mgr) override;
//////////// PersistentStorageResultDelegate Implementation ///////////////
- void OnValue(const char * key, const char * value) override;
- void OnStatus(const char * key, Operation op, CHIP_ERROR err) override;
+ void OnPersistentStorageValue(const char * key, const char * value) override;
+ void OnPersistentStorageStatus(const char * key, Operation op, CHIP_ERROR err) override;
void ReleaseAllDevices();
+++ /dev/null
-/*
- *
- * Copyright (c) 2020 Project CHIP Authors
- * Copyright (c) 2013-2017 Nest Labs, Inc.
- * All rights reserved.
- *
- * 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.
- */
-
-/**
- * @file
- * Implementation of CHIP Device Controller, a common class
- * that implements discovery, pairing and provisioning of CHIP
- * devices.
- *
- */
-
-#ifndef __STDC_LIMIT_MACROS
-#define __STDC_LIMIT_MACROS
-#endif
-#ifndef __STDC_FORMAT_MACROS
-#define __STDC_FORMAT_MACROS
-#endif
-
-// module header, comes first
-#include <controller/CHIPDeviceController_deprecated.h>
-
-#if CONFIG_DEVICE_LAYER
-#include <platform/CHIPDeviceLayer.h>
-#endif
-
-#include <core/CHIPCore.h>
-#include <core/CHIPEncoding.h>
-#include <core/CHIPSafeCasts.h>
-#include <support/Base64.h>
-#include <support/CHIPMem.h>
-#include <support/CodeUtils.h>
-#include <support/ErrorStr.h>
-#include <support/TimeUtils.h>
-#include <support/logging/CHIPLogging.h>
-
-#include <errno.h>
-#include <inttypes.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <time.h>
-
-using namespace chip::Inet;
-using namespace chip::System;
-using namespace chip::Controller;
-
-namespace chip {
-namespace DeviceController {
-
-using namespace chip::Encoding;
-
-ChipDeviceController::ChipDeviceController()
-{
- mState = kState_NotInitialized;
- AppState = nullptr;
- mCurReqMsg = nullptr;
- mOnError = nullptr;
- mOnNewConnection = nullptr;
- mListenPort = CHIP_PORT;
- mLocalDeviceId = kUndefinedNodeId;
- mRemoteDeviceId = kUndefinedNodeId;
- mDevice = nullptr;
- mPairingWithoutSecurity = false;
- CHIP_ZERO_AT(mOnComplete);
-}
-
-ChipDeviceController::~ChipDeviceController() {}
-
-CHIP_ERROR ChipDeviceController::Init(NodeId localNodeId, DevicePairingDelegate * pairingDelegate,
- PersistentStorageDelegate * storageDelegate)
-{
- return mCommissioner.Init(localNodeId, storageDelegate, pairingDelegate);
-}
-
-CHIP_ERROR ChipDeviceController::Init(NodeId localNodeId, System::Layer * systemLayer, InetLayer * inetLayer,
- DevicePairingDelegate * pairingDelegate, PersistentStorageDelegate * storageDelegate)
-{
- return mCommissioner.Init(localNodeId, storageDelegate, pairingDelegate, systemLayer, inetLayer);
-}
-
-CHIP_ERROR ChipDeviceController::Shutdown()
-{
- return mCommissioner.Shutdown();
-}
-
-CHIP_ERROR ChipDeviceController::ConnectDevice(NodeId remoteDeviceId, RendezvousParameters & params, void * appReqState,
- NewConnectionHandler onConnected, MessageReceiveHandler onMessageReceived,
- ErrorHandler onError)
-{
- CHIP_ERROR err = mCommissioner.PairDevice(remoteDeviceId, params);
- SuccessOrExit(err);
-
- mState = kState_Initialized;
- mRemoteDeviceId = remoteDeviceId;
- mAppReqState = appReqState;
- mOnNewConnection = onConnected;
-
- mOnComplete.Response = onMessageReceived;
- mOnError = onError;
-
- // TODO: Should call mOnNewConnected when rendezvous completed
- mOnNewConnection(this, nullptr, mAppReqState);
-
-exit:
- return err;
-}
-
-CHIP_ERROR ChipDeviceController::ConnectDeviceWithoutSecurePairing(NodeId remoteDeviceId, const Transport::PeerAddress & deviceAddr,
- void * appReqState, NewConnectionHandler onConnected,
- MessageReceiveHandler onMessageReceived, ErrorHandler onError)
-{
- CHIP_ERROR err = mCommissioner.PairTestDeviceWithoutSecurity(remoteDeviceId, deviceAddr, mSerializedTestDevice);
- SuccessOrExit(err);
-
- mPairingWithoutSecurity = true;
-
- mState = kState_Initialized;
- mRemoteDeviceId = remoteDeviceId;
- mAppReqState = appReqState;
- mOnNewConnection = onConnected;
-
- mOnComplete.Response = onMessageReceived;
- mOnError = onError;
-
- if (mOnNewConnection)
- {
- mOnNewConnection(this, nullptr, mAppReqState);
- }
-
-exit:
- return err;
-}
-
-CHIP_ERROR ChipDeviceController::SetUdpListenPort(uint16_t listenPort)
-{
- if (mState != kState_Initialized)
- return CHIP_ERROR_INCORRECT_STATE;
- mListenPort = listenPort;
- return CHIP_NO_ERROR;
-}
-
-CHIP_ERROR ChipDeviceController::ServiceEvents()
-{
- return mCommissioner.ServiceEvents();
-}
-
-CHIP_ERROR ChipDeviceController::ServiceEventSignal()
-{
- return mCommissioner.ServiceEventSignal();
-}
-
-bool ChipDeviceController::IsConnected() const
-{
- return mState == kState_Initialized;
-}
-
-bool ChipDeviceController::GetIpAddress(Inet::IPAddress & addr)
-{
- if (!IsConnected())
- return false;
-
- if (mDevice == nullptr)
- InitDevice();
-
- uint16_t port;
- return mDevice != nullptr && mDevice->GetAddress(addr, port);
-}
-
-CHIP_ERROR ChipDeviceController::DisconnectDevice()
-{
- if (mDevice != nullptr)
- {
- mCommissioner.ReleaseDevice(mDevice);
- mDevice = nullptr;
- }
-
- return CHIP_NO_ERROR;
-}
-
-CHIP_ERROR ChipDeviceController::SendMessage(void * appReqState, PacketBufferHandle buffer, NodeId peerDevice)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
-
- VerifyOrExit(!buffer.IsNull(), err = CHIP_ERROR_INVALID_ARGUMENT);
-
- mAppReqState = appReqState;
-
- if (peerDevice != kUndefinedNodeId)
- {
- mRemoteDeviceId = peerDevice;
- }
- VerifyOrExit(mRemoteDeviceId != kUndefinedNodeId, err = CHIP_ERROR_INCORRECT_STATE);
-
- if (mDevice == nullptr)
- {
- SuccessOrExit(InitDevice());
- }
-
- VerifyOrExit(mDevice != nullptr, err = CHIP_ERROR_INVALID_ARGUMENT);
- mDevice->SetDelegate(this);
-
- err = mDevice->SendMessage(std::move(buffer));
-
-exit:
-
- return err;
-}
-
-CHIP_ERROR ChipDeviceController::SetDevicePairingDelegate(DevicePairingDelegate * pairingDelegate)
-{
- mCommissioner.SetDevicePairingDelegate(pairingDelegate);
- return CHIP_NO_ERROR;
-}
-
-void ChipDeviceController::OnMessage(System::PacketBufferHandle msgBuf)
-{
- if (mOnComplete.Response != nullptr)
- {
- mOnComplete.Response(this, mAppReqState, std::move(msgBuf));
- }
-}
-
-CHIP_ERROR ChipDeviceController::InitDevice()
-{
- return mPairingWithoutSecurity ? mCommissioner.GetDevice(mRemoteDeviceId, mSerializedTestDevice, &mDevice)
- : mCommissioner.GetDevice(mRemoteDeviceId, &mDevice);
-}
-
-} // namespace DeviceController
-} // namespace chip
+++ /dev/null
-/*
- *
- * Copyright (c) 2020 Project CHIP Authors
- * Copyright (c) 2013-2017 Nest Labs, Inc.
- * All rights reserved.
- *
- * 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.
- */
-
-/**
- * @file
- * Declaration of CHIP Device Controller, a common class
- * that implements connecting and messaging and will later
- * be expanded to support discovery, pairing and
- * provisioning of CHIP devices.
- *
- */
-
-#pragma once
-
-#include <controller/CHIPDeviceController.h>
-#include <core/CHIPCore.h>
-#include <core/CHIPPersistentStorageDelegate.h>
-#include <core/CHIPTLV.h>
-#include <support/DLLUtil.h>
-#include <transport/RendezvousSession.h>
-#include <transport/RendezvousSessionDelegate.h>
-#include <transport/SecureSessionMgr.h>
-#include <transport/raw/UDP.h>
-
-namespace chip {
-namespace DeviceController {
-
-constexpr uint16_t kPacketCacheMaxSize = 16;
-
-class ChipDeviceController;
-
-typedef void (*NewConnectionHandler)(ChipDeviceController * deviceController, const Transport::PeerConnectionState * state,
- void * appReqState);
-typedef void (*CompleteHandler)(ChipDeviceController * deviceController, void * appReqState);
-typedef void (*ErrorHandler)(ChipDeviceController * deviceController, void * appReqState, CHIP_ERROR err,
- const Inet::IPPacketInfo * pktInfo);
-typedef void (*MessageReceiveHandler)(ChipDeviceController * deviceController, void * appReqState,
- System::PacketBufferHandle payload);
-
-class DLL_EXPORT ChipDeviceController : public Controller::DeviceStatusDelegate
-{
- friend class ChipDeviceControllerCallback;
-
-public:
- ChipDeviceController();
- ~ChipDeviceController();
-
- void * AppState;
-
- /**
- * Init function to be used when there exists a device layer that takes care of initializing
- * System::Layer and InetLayer.
- */
- CHIP_ERROR Init(NodeId localDeviceId, Controller::DevicePairingDelegate * pairingDelegate = nullptr,
- PersistentStorageDelegate * storageDelegate = nullptr);
- /**
- * Init function to be used when already-initialized System::Layer and InetLayer are available.
- */
- CHIP_ERROR Init(NodeId localDeviceId, System::Layer * systemLayer, Inet::InetLayer * inetLayer,
- Controller::DevicePairingDelegate * pairingDelegate = nullptr,
- PersistentStorageDelegate * storageDelegate = nullptr);
- CHIP_ERROR Shutdown();
-
- CHIP_ERROR SetUdpListenPort(uint16_t listenPort);
-
- chip::Controller::DeviceController * GetDeviceController() { return &mCommissioner; }
-
- // ----- Connection Management -----
- /**
- * @brief
- * Connect to a CHIP device with the provided Rendezvous connection parameters
- *
- * @param[in] remoteDeviceId The remote device Id.
- * @param[in] params The Rendezvous connection parameters
- * @param[in] appReqState Application specific context to be passed back when a message is received or on error
- * @param[in] onConnected Callback for when the connection is established
- * @param[in] onMessageReceived Callback for when a message is received
- * @param[in] onError Callback for when an error occurs
- *
- * @return CHIP_ERROR The connection status
- */
- [[deprecated("Available until controller apps move to DeviceController/DeviceCommissioner API")]] CHIP_ERROR
- ConnectDevice(NodeId remoteDeviceId, RendezvousParameters & params, void * appReqState, NewConnectionHandler onConnected,
- MessageReceiveHandler onMessageReceived, ErrorHandler onError);
-
- /**
- * @brief
- * Connect to a CHIP device at a given address and an optional port. This is a test only API
- * that bypasses Rendezvous and Secure Pairing process.
- *
- * @param[in] remoteDeviceId The remote device Id.
- * @param[in] deviceAddr The address of the requested Device
- * @param[in] appReqState Application specific context to be passed back when a message is received or on error
- * @param[in] onConnected Callback for when the connection is established
- * @param[in] onMessageReceived Callback for when a message is received
- * @param[in] onError Callback for when an error occurs
- * @return CHIP_ERROR The connection status
- */
- [[deprecated("Available until Rendezvous is implemented")]] CHIP_ERROR
- ConnectDeviceWithoutSecurePairing(NodeId remoteDeviceId, const Transport::PeerAddress & deviceAddr, void * appReqState,
- NewConnectionHandler onConnected, MessageReceiveHandler onMessageReceived,
- ErrorHandler onError);
-
- /**
- * @brief
- * Disconnect from a connected device
- *
- * @return CHIP_ERROR If the device was disconnected successfully
- */
- CHIP_ERROR DisconnectDevice();
-
- /**
- * @brief
- * Check if there's an active connection
- *
- * @return bool If there is an active connection
- */
- bool IsConnected() const;
-
- /**
- * @brief
- * Get IP Address of the peer if the connection is active
- *
- * @return bool If IP Address was returned
- */
- bool GetIpAddress(Inet::IPAddress & addr);
-
- // ----- Messaging -----
- /**
- * @brief
- * Send a message to a connected CHIP device
- *
- * @param[in] appReqState Application specific context to be passed back when a message is received or on error
- * @param[in] buffer The Data Buffer to trasmit to the device
- * @param[in] peerDevice Device ID of the peer device
- * @return CHIP_ERROR The return status
- */
- CHIP_ERROR SendMessage(void * appReqState, System::PacketBufferHandle buffer, NodeId peerDevice = kUndefinedNodeId);
-
- // ----- IO -----
- /**
- * @brief
- * Start the event loop task within the CHIP stack
- * @return CHIP_ERROR The return status
- */
- CHIP_ERROR ServiceEvents();
-
- /**
- * @brief
- * Allow the CHIP Stack to process any pending events
- * This can be called in an event handler loop to tigger callbacks within the CHIP stack
- * @return CHIP_ERROR The return status
- */
- CHIP_ERROR ServiceEventSignal();
-
- // ----- Pairing -----
- /**
- * @brief
- * Set device pairing delegate after init, pass nullptr remove device delegate.
- * @return CHIP_ERROR The return status
- */
- CHIP_ERROR SetDevicePairingDelegate(Controller::DevicePairingDelegate * pairingDelegate);
-
- //////////// DeviceStatusDelegate Implementation ///////////////
- void OnMessage(System::PacketBufferHandle msg) override;
-
-private:
- CHIP_ERROR InitDevice();
-
- enum
- {
- kState_NotInitialized = 0,
- kState_Initialized = 1
- } mState;
-
- Controller::DeviceCommissioner mCommissioner;
- Controller::Device * mDevice;
-
- void * mAppReqState;
-
- union
- {
- CompleteHandler General;
- MessageReceiveHandler Response;
- } mOnComplete;
-
- ErrorHandler mOnError;
- NewConnectionHandler mOnNewConnection;
- System::PacketBuffer * mCurReqMsg;
-
- NodeId mLocalDeviceId;
- NodeId mRemoteDeviceId;
- uint16_t mListenPort;
-
- Controller::SerializedDevice mSerializedTestDevice;
- bool mPairingWithoutSecurity;
-
- void ClearRequestState();
- void ClearOpState();
-};
-
-} // namespace DeviceController
-} // namespace chip
{
- "writeTime": "Thu Mar 11 2021 17:28:29 GMT+0100 (Central European Standard Time)",
+ "writeTime": "Fri Mar 12 2021 15:15:13 GMT+0800 (China Standard Time)",
"featureLevel": 11,
"creator": "zap",
"keyValuePairs": [
"define": "GROUPS_CLUSTER",
"side": "client",
"enabled": 0,
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "3",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ],
"commands": [
{
"name": "AddGroup",
"incoming": 1,
"outgoing": 1
}
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
]
},
{
"define": "SCENES_CLUSTER",
"side": "client",
"enabled": 0,
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
"commands": [
{
"name": "AddScene",
"incoming": 1,
"outgoing": 1
}
- ],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "3",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
]
},
{
"define": "DOOR_LOCK_CLUSTER",
"side": "client",
"enabled": 0,
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
"commands": [
{
"name": "LockDoor",
"incoming": 1,
"outgoing": 1
}
- ],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "3",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
]
},
{
"define": "IDENTIFY_CLUSTER",
"side": "server",
"enabled": 1,
+ "commands": [
+ {
+ "name": "IdentifyQueryResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
- ],
- "commands": [
- {
- "name": "IdentifyQueryResponse",
- "code": 0,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- }
]
},
{
]
},
{
- "name": "Door Lock",
- "code": 257,
+ "name": "Network Commissioning",
+ "code": 49,
"mfgCode": null,
- "define": "DOOR_LOCK_CLUSTER",
+ "define": "NETWORK_COMMISSIONING_CLUSTER",
"side": "client",
"enabled": 0,
"commands": [
{
- "name": "LockDoor",
+ "name": "ScanNetworks",
"code": 0,
"mfgCode": null,
"source": "client",
"outgoing": 1
},
{
- "name": "UnlockDoor",
- "code": 1,
+ "name": "AddWiFiNetwork",
+ "code": 2,
"mfgCode": null,
"source": "client",
"incoming": 1,
- "outgoing": 1
+ "outgoing": 0
},
{
- "name": "UnlockWithTimeout",
- "code": 3,
+ "name": "UpdateWiFiNetwork",
+ "code": 4,
"mfgCode": null,
"source": "client",
"incoming": 1,
- "outgoing": 1
+ "outgoing": 0
},
{
- "name": "GetLogRecord",
- "code": 4,
+ "name": "AddThreadNetwork",
+ "code": 6,
"mfgCode": null,
"source": "client",
"incoming": 1,
- "outgoing": 1
+ "outgoing": 0
},
{
- "name": "SetPin",
- "code": 5,
+ "name": "UpdateThreadNetwork",
+ "code": 8,
"mfgCode": null,
"source": "client",
"incoming": 1,
- "outgoing": 1
+ "outgoing": 0
},
{
- "name": "GetPin",
- "code": 6,
+ "name": "RemoveNetwork",
+ "code": 10,
"mfgCode": null,
"source": "client",
"incoming": 1,
"outgoing": 1
},
{
- "name": "ClearPin",
- "code": 7,
+ "name": "EnableNetwork",
+ "code": 12,
"mfgCode": null,
"source": "client",
"incoming": 1,
"outgoing": 1
},
{
- "name": "ClearAllPins",
- "code": 8,
+ "name": "DisableNetwork",
+ "code": 14,
"mfgCode": null,
"source": "client",
"incoming": 1,
"outgoing": 1
},
{
- "name": "SetWeekdaySchedule",
- "code": 11,
+ "name": "GetLastNetworkCommissioningResult",
+ "code": 16,
"mfgCode": null,
"source": "client",
"incoming": 1,
"outgoing": 1
- },
+ }
+ ],
+ "attributes": [
{
- "name": "GetWeekdaySchedule",
- "code": 12,
+ "name": "cluster revision",
+ "code": 65533,
"mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Network Commissioning",
+ "code": 49,
+ "mfgCode": null,
+ "define": "NETWORK_COMMISSIONING_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
{
- "name": "ClearWeekdaySchedule",
- "code": 13,
+ "name": "ScanNetworksResponse",
+ "code": 1,
"mfgCode": null,
- "source": "client",
+ "source": "server",
"incoming": 1,
"outgoing": 1
},
{
- "name": "SetYeardaySchedule",
- "code": 14,
+ "name": "AddWiFiNetworkResponse",
+ "code": 3,
"mfgCode": null,
- "source": "client",
- "incoming": 1,
+ "source": "server",
+ "incoming": 0,
"outgoing": 1
},
{
- "name": "GetYeardaySchedule",
- "code": 15,
+ "name": "UpdateWiFiNetworkResponse",
+ "code": 5,
"mfgCode": null,
- "source": "client",
- "incoming": 1,
+ "source": "server",
+ "incoming": 0,
"outgoing": 1
},
{
- "name": "ClearYeardaySchedule",
- "code": 16,
+ "name": "AddThreadNetworkResponse",
+ "code": 7,
"mfgCode": null,
- "source": "client",
- "incoming": 1,
+ "source": "server",
+ "incoming": 0,
"outgoing": 1
},
{
- "name": "SetHolidaySchedule",
- "code": 17,
+ "name": "UpdateThreadNetworkResponse",
+ "code": 9,
"mfgCode": null,
- "source": "client",
- "incoming": 1,
+ "source": "server",
+ "incoming": 0,
"outgoing": 1
},
{
- "name": "GetHolidaySchedule",
- "code": 18,
+ "name": "RemoveNetworkResponse",
+ "code": 11,
"mfgCode": null,
- "source": "client",
+ "source": "server",
"incoming": 1,
"outgoing": 1
},
{
- "name": "ClearHolidaySchedule",
- "code": 19,
+ "name": "EnableNetworkResponse",
+ "code": 13,
"mfgCode": null,
- "source": "client",
+ "source": "server",
"incoming": 1,
"outgoing": 1
},
{
- "name": "SetUserType",
- "code": 20,
+ "name": "DisableNetworkResponse",
+ "code": 15,
"mfgCode": null,
- "source": "client",
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Door Lock",
+ "code": 257,
+ "mfgCode": null,
+ "define": "DOOR_LOCK_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "commands": [
+ {
+ "name": "LockDoor",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "UnlockDoor",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "UnlockWithTimeout",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetLogRecord",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "SetPin",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetPin",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ClearPin",
+ "code": 7,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ClearAllPins",
+ "code": 8,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "SetWeekdaySchedule",
+ "code": 11,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetWeekdaySchedule",
+ "code": 12,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ClearWeekdaySchedule",
+ "code": 13,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "SetYeardaySchedule",
+ "code": 14,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetYeardaySchedule",
+ "code": 15,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ClearYeardaySchedule",
+ "code": 16,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "SetHolidaySchedule",
+ "code": 17,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "GetHolidaySchedule",
+ "code": 18,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "ClearHolidaySchedule",
+ "code": 19,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "SetUserType",
+ "code": 20,
+ "mfgCode": null,
+ "source": "client",
"incoming": 1,
"outgoing": 1
},
"define": "DOOR_LOCK_CLUSTER",
"side": "server",
"enabled": 1,
- "commands": [
- {
- "name": "LockDoorResponse",
- "code": 0,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "UnlockDoorResponse",
- "code": 1,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- }
- ],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
+ ],
+ "commands": [
+ {
+ "name": "LockDoorResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "UnlockDoorResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
]
},
{
"define": "BARRIER_CONTROL_CLUSTER",
"side": "server",
"enabled": 1,
+ "commands": [],
"attributes": [
{
"name": "cluster revision",
"maxInterval": 65344,
"reportableChange": 0
}
- ],
- "commands": []
+ ]
},
{
"name": "Color Control",
"define": "COLOR_CONTROL_CLUSTER",
"side": "client",
"enabled": 0,
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "3",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ],
"commands": [
{
"name": "MoveToHue",
"incoming": 1,
"outgoing": 1
}
- ],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "3",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
]
},
{
]
},
{
- "name": "Network Commissioning",
- "code": 43690,
- "mfgCode": null,
- "define": "NETWORK_COMMISSIONING_CLUSTER",
- "side": "client",
- "enabled": 0,
- "commands": [
- {
- "name": "ScanNetworks",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "AddWiFiNetwork",
- "code": 2,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "UpdateWiFiNetwork",
- "code": 4,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "AddThreadNetwork",
- "code": 6,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "UpdateThreadNetwork",
- "code": 8,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "RemoveNetwork",
- "code": 10,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "EnableNetwork",
- "code": 12,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "DisableNetwork",
- "code": 14,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "GetLastNetworkCommissioningResult",
- "code": 16,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- }
- ],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x0001",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ]
- },
- {
- "name": "Network Commissioning",
- "code": 43690,
- "mfgCode": null,
- "define": "NETWORK_COMMISSIONING_CLUSTER",
- "side": "server",
- "enabled": 1,
- "commands": [
- {
- "name": "ScanNetworksResponse",
- "code": 1,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "AddWiFiNetworkResponse",
- "code": 3,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "UpdateWiFiNetworkResponse",
- "code": 5,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "AddThreadNetworkResponse",
- "code": 7,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "UpdateThreadNetworkResponse",
- "code": 9,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "RemoveNetworkResponse",
- "code": 11,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "EnableNetworkResponse",
- "code": 13,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "DisableNetworkResponse",
- "code": 15,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- }
- ],
- "attributes": [
- {
- "name": "cluster revision",
- "code": 65533,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x0001",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ]
- },
- {
"name": "Binding",
"code": 61440,
"mfgCode": null,
void AndroidDeviceControllerWrapper::OnStatusChange(void) {}
-void AndroidDeviceControllerWrapper::SetDelegate(PersistentStorageResultDelegate * delegate)
+void AndroidDeviceControllerWrapper::SetStorageDelegate(PersistentStorageResultDelegate * delegate)
{
mStorageResultDelegate = delegate;
}
-void AndroidDeviceControllerWrapper::GetKeyValue(const char * key)
+void AndroidDeviceControllerWrapper::AsyncGetKeyValue(const char * key)
{
- jstring keyString = NULL;
- jstring valueString = NULL;
- const char * valueChars = nullptr;
- CHIP_ERROR err = CHIP_NO_ERROR;
- jclass storageCls = GetPersistentStorageClass();
- jmethodID method = GetJavaEnv()->GetStaticMethodID(storageCls, "getKeyValue", "(Ljava/lang/String;)Ljava/lang/String;");
+ jstring keyString = NULL;
+ jstring valueString = NULL;
+ const char * valueChars = nullptr;
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ jclass storageCls = GetPersistentStorageClass();
+ jmethodID method = GetJavaEnv()->GetStaticMethodID(storageCls, "getKeyValue", "(Ljava/lang/String;)Ljava/lang/String;");
GetJavaEnv()->ExceptionClear();
if (mStorageResultDelegate)
{
valueChars = GetJavaEnv()->GetStringUTFChars(valueString, 0);
- mStorageResultDelegate->OnValue(key, valueChars);
+ mStorageResultDelegate->OnPersistentStorageValue(key, valueChars);
}
exit:
GetJavaEnv()->ExceptionClear();
- if (valueChars != nullptr) {
+ if (valueChars != nullptr)
+ {
GetJavaEnv()->ReleaseStringUTFChars(valueString, valueChars);
}
GetJavaEnv()->DeleteLocalRef(keyString);
GetJavaEnv()->DeleteLocalRef(valueString);
}
-CHIP_ERROR AndroidDeviceControllerWrapper::GetKeyValue(const char * key, char * value, uint16_t & size)
+CHIP_ERROR AndroidDeviceControllerWrapper::SyncGetKeyValue(const char * key, char * value, uint16_t & size)
{
- jstring keyString = NULL;
- jstring valueString = NULL;
- const char * valueChars = nullptr;
- CHIP_ERROR err = CHIP_NO_ERROR;
- jclass storageCls = GetPersistentStorageClass();
- jmethodID method = GetJavaEnv()->GetStaticMethodID(storageCls, "getKeyValue", "(Ljava/lang/String;)Ljava/lang/String;");
+ jstring keyString = NULL;
+ jstring valueString = NULL;
+ const char * valueChars = nullptr;
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ jclass storageCls = GetPersistentStorageClass();
+ jmethodID method = GetJavaEnv()->GetStaticMethodID(storageCls, "getKeyValue", "(Ljava/lang/String;)Ljava/lang/String;");
GetJavaEnv()->ExceptionClear();
if (value != nullptr)
{
valueChars = GetJavaEnv()->GetStringUTFChars(valueString, 0);
- size = strlcpy(value, GetJavaEnv()->GetStringUTFChars(valueString, 0), size);
+ size = strlcpy(value, GetJavaEnv()->GetStringUTFChars(valueString, 0), size);
}
else
{
exit:
GetJavaEnv()->ExceptionClear();
- if (valueChars != nullptr) {
+ if (valueChars != nullptr)
+ {
GetJavaEnv()->ReleaseStringUTFChars(valueString, valueChars);
}
GetJavaEnv()->DeleteLocalRef(keyString);
return err;
}
-void AndroidDeviceControllerWrapper::SetKeyValue(const char * key, const char * value)
+void AndroidDeviceControllerWrapper::AsyncSetKeyValue(const char * key, const char * value)
{
jclass storageCls = GetPersistentStorageClass();
jmethodID method = GetJavaEnv()->GetStaticMethodID(storageCls, "setKeyValue", "(Ljava/lang/String;Ljava/lang/String;)V");
if (mStorageResultDelegate)
{
- mStorageResultDelegate->OnStatus(key, PersistentStorageResultDelegate::Operation::kSET, CHIP_NO_ERROR);
+ mStorageResultDelegate->OnPersistentStorageStatus(key, PersistentStorageResultDelegate::Operation::kSET, CHIP_NO_ERROR);
}
exit:
GetJavaEnv()->DeleteLocalRef(valueString);
}
-void AndroidDeviceControllerWrapper::DeleteKeyValue(const char * key)
+void AndroidDeviceControllerWrapper::AsyncDeleteKeyValue(const char * key)
{
jclass storageCls = GetPersistentStorageClass();
jmethodID method = GetJavaEnv()->GetStaticMethodID(storageCls, "deleteKeyValue", "(Ljava/lang/String;)V");
if (mStorageResultDelegate)
{
- mStorageResultDelegate->OnStatus(key, PersistentStorageResultDelegate::Operation::kDELETE, CHIP_NO_ERROR);
+ mStorageResultDelegate->OnPersistentStorageStatus(key, PersistentStorageResultDelegate::Operation::kDELETE, CHIP_NO_ERROR);
}
exit:
void OnStatusChange(void) override;
// PersistentStorageDelegate implementation
- void SetDelegate(chip::PersistentStorageResultDelegate * delegate) override;
- void GetKeyValue(const char * key) override;
- CHIP_ERROR GetKeyValue(const char * key, char * value, uint16_t & size) override;
- void SetKeyValue(const char * key, const char * value) override;
- void DeleteKeyValue(const char * key) override;
+ void SetStorageDelegate(chip::PersistentStorageResultDelegate * delegate) override;
+ void AsyncGetKeyValue(const char * key) override;
+ CHIP_ERROR SyncGetKeyValue(const char * key, char * value, uint16_t & size) override;
+ void AsyncSetKeyValue(const char * key, const char * value) override;
+ void AsyncDeleteKeyValue(const char * key) override;
jlong ToJNIHandle()
{
cflags = [ "-Wno-deprecated-declarations" ]
}
-config("includes") {
- include_dirs =
- [ "${chip_root}/src/controller/CHIPDeviceController_deprecated.h" ]
-}
-
shared_library("ChipDeviceCtrl") {
output_name = "_ChipDeviceCtrl"
output_dir = "${target_out_dir}/chip"
namespace chip {
namespace Controller {
-void PythonPersistentStorageDelegate::SetDelegate(PersistentStorageResultDelegate * delegate)
+void PythonPersistentStorageDelegate::SetStorageDelegate(PersistentStorageResultDelegate * delegate)
{
mDelegate = delegate;
}
-void PythonPersistentStorageDelegate::GetKeyValue(const char * key)
+void PythonPersistentStorageDelegate::AsyncGetKeyValue(const char * key)
{
auto val = mStorage.find(key);
if (val == mStorage.end())
{
- mDelegate->OnStatus(key, PersistentStorageResultDelegate::Operation::kGET, CHIP_ERROR_KEY_NOT_FOUND);
+ mDelegate->OnPersistentStorageStatus(key, PersistentStorageResultDelegate::Operation::kGET, CHIP_ERROR_KEY_NOT_FOUND);
return;
}
- mDelegate->OnValue(key, val->second.c_str());
+ mDelegate->OnPersistentStorageValue(key, val->second.c_str());
}
-CHIP_ERROR PythonPersistentStorageDelegate::GetKeyValue(const char * key, char * value, uint16_t & size)
+CHIP_ERROR PythonPersistentStorageDelegate::SyncGetKeyValue(const char * key, char * value, uint16_t & size)
{
auto val = mStorage.find(key);
if (val == mStorage.end())
return CHIP_NO_ERROR;
}
-void PythonPersistentStorageDelegate::SetKeyValue(const char * key, const char * value)
+void PythonPersistentStorageDelegate::AsyncSetKeyValue(const char * key, const char * value)
{
mStorage[key] = value;
- ChipLogDetail(Controller, "SetKeyValue: %s=%s", key, value);
- mDelegate->OnStatus(key, PersistentStorageResultDelegate::Operation::kSET, CHIP_NO_ERROR);
+ ChipLogDetail(Controller, "AsyncSetKeyValue: %s=%s", key, value);
+ mDelegate->OnPersistentStorageStatus(key, PersistentStorageResultDelegate::Operation::kSET, CHIP_NO_ERROR);
}
-void PythonPersistentStorageDelegate::DeleteKeyValue(const char * key)
+void PythonPersistentStorageDelegate::AsyncDeleteKeyValue(const char * key)
{
mStorage.erase(key);
- mDelegate->OnStatus(key, PersistentStorageResultDelegate::Operation::kDELETE, CHIP_NO_ERROR);
+ mDelegate->OnPersistentStorageStatus(key, PersistentStorageResultDelegate::Operation::kDELETE, CHIP_NO_ERROR);
}
} // namespace Controller
{
public:
PythonPersistentStorageDelegate() {}
- void SetDelegate(PersistentStorageResultDelegate * delegate) override;
- void GetKeyValue(const char * key) override;
- CHIP_ERROR GetKeyValue(const char * key, char * value, uint16_t & size) override;
- void SetKeyValue(const char * key, const char * value) override;
- void DeleteKeyValue(const char * key) override;
+ void SetStorageDelegate(PersistentStorageResultDelegate * delegate) override;
+ void AsyncGetKeyValue(const char * key) override;
+ CHIP_ERROR SyncGetKeyValue(const char * key, char * value, uint16_t & size) override;
+ void AsyncSetKeyValue(const char * key, const char * value) override;
+ void AsyncDeleteKeyValue(const char * key) override;
private:
PersistentStorageResultDelegate * mDelegate;
chip-device-ctrl > connect -ble 1383 12345678
```
-## Thread Secure Session provisioning
+## Thread provisioning
-1. Run CHIP Device Controller
+1. Configure Thread border router. For example, follow
+ [Configuring Thread network on a Linux machine](../../../docs/guides/linux_thread_connectivity.md)
+ instruction to configure OpenThread Border Router on a Linux workstation.
+
+2. Run CHIP Device Controller
```
sudo chip-device-ctrl
```
-2. Set Thread credentials
+3. Set Thread credentials
```
set-pairing-thread-credential <channel> <pan id[HEX]> <master_key>
```
-3. BLE Connect to the device
+4. BLE Connect to the device
```
connect -ble <discriminator> <setup pin code> [<nodeid>]
class ServerStorageDelegate : public chip::PersistentStorageDelegate
{
public:
- void SetDelegate(chip::PersistentStorageResultDelegate * delegate) override { mAsyncDelegate = delegate; }
+ void SetStorageDelegate(chip::PersistentStorageResultDelegate * delegate) override { mAsyncDelegate = delegate; }
- void GetKeyValue(const char * key) override
+ void AsyncGetKeyValue(const char * key) override
{
// TODO: Async Get/Set are implemented synchronously here.
// We need to figure out a standard way to implement this - this implementation
// was based on an example that just returned and that seemed even less useful.
uint8_t buffer[kMaxKeyValueSize];
uint16_t bufferSize = sizeof(buffer) - 1;
- CHIP_ERROR err = GetKeyValue(key, buffer, bufferSize);
+ CHIP_ERROR err = SyncGetKeyValue(key, buffer, bufferSize);
if (err == CHIP_NO_ERROR)
{
buffer[bufferSize] = 0;
- mAsyncDelegate->OnValue(key, reinterpret_cast<const char *>(buffer));
+ mAsyncDelegate->OnPersistentStorageValue(key, reinterpret_cast<const char *>(buffer));
}
else
{
- mAsyncDelegate->OnStatus(key, chip::PersistentStorageResultDelegate::Operation::kGET, err);
+ mAsyncDelegate->OnPersistentStorageStatus(key, chip::PersistentStorageResultDelegate::Operation::kGET, err);
}
}
- void SetKeyValue(const char * key, const char * value) override
+ void AsyncSetKeyValue(const char * key, const char * value) override
{
- CHIP_ERROR err = SetKeyValue(key, value, strlen(value));
+ CHIP_ERROR err = SyncSetKeyValue(key, value, strlen(value));
if (err != CHIP_NO_ERROR)
{
- mAsyncDelegate->OnStatus(key, chip::PersistentStorageResultDelegate::Operation::kSET, err);
+ mAsyncDelegate->OnPersistentStorageStatus(key, chip::PersistentStorageResultDelegate::Operation::kSET, err);
}
}
CHIP_ERROR
- GetKeyValue(const char * key, void * buffer, uint16_t & size) override
+ SyncGetKeyValue(const char * key, void * buffer, uint16_t & size) override
{
return chip::DeviceLayer::PersistedStorage::KeyValueStoreMgr().Get(key, buffer, size);
}
- CHIP_ERROR SetKeyValue(const char * key, const void * value, uint16_t size) override
+ CHIP_ERROR SyncSetKeyValue(const char * key, const void * value, uint16_t size) override
{
return chip::DeviceLayer::PersistedStorage::KeyValueStoreMgr().Put(key, value, size);
}
- void DeleteKeyValue(const char * key) override { chip::DeviceLayer::PersistedStorage::KeyValueStoreMgr().Delete(key); }
+ void AsyncDeleteKeyValue(const char * key) override { chip::DeviceLayer::PersistedStorage::KeyValueStoreMgr().Delete(key); }
private:
static constexpr size_t kMaxKeyValueSize = 1024;
1EC4CE6025CC26E900D7304F /* CHIPClientCallbacks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE5C25CC26E900D7304F /* CHIPClientCallbacks.cpp */; };
1EC4CE6225CC271B00D7304F /* af-event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EC4CE6125CC271B00D7304F /* af-event.cpp */; };
1EC4CE6425CC276600D7304F /* CHIPClustersObjc.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EC4CE6325CC276600D7304F /* CHIPClustersObjc.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1ED0B8CC260125E100D19DB5 /* media-playback-client.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED0B8CB260125E100D19DB5 /* media-playback-client.cpp */; };
2C222AD0255C620600E446B9 /* CHIPDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C222ACE255C620600E446B9 /* CHIPDevice.h */; settings = {ATTRIBUTES = (Public, ); }; };
2C222AD1255C620600E446B9 /* CHIPDevice.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2C222ACF255C620600E446B9 /* CHIPDevice.mm */; };
2C222ADF255C811800E446B9 /* CHIPDevice_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C222ADE255C811800E446B9 /* CHIPDevice_Internal.h */; };
1EC4CE5C25CC26E900D7304F /* CHIPClientCallbacks.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CHIPClientCallbacks.cpp; path = gen/CHIPClientCallbacks.cpp; sourceTree = "<group>"; };
1EC4CE6125CC271B00D7304F /* af-event.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "af-event.cpp"; path = "../../../app/util/af-event.cpp"; sourceTree = "<group>"; };
1EC4CE6325CC276600D7304F /* CHIPClustersObjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CHIPClustersObjc.h; path = gen/CHIPClustersObjc.h; sourceTree = "<group>"; };
+ 1ED0B8CB260125E100D19DB5 /* media-playback-client.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "media-playback-client.cpp"; path = "../../../app/clusters/media-playback-client/media-playback-client.cpp"; sourceTree = "<group>"; };
2C222ACE255C620600E446B9 /* CHIPDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHIPDevice.h; sourceTree = "<group>"; };
2C222ACF255C620600E446B9 /* CHIPDevice.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CHIPDevice.mm; sourceTree = "<group>"; };
2C222ADE255C811800E446B9 /* CHIPDevice_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHIPDevice_Internal.h; sourceTree = "<group>"; };
1EC4CE3525CC259700D7304F /* CHIPApp */ = {
isa = PBXGroup;
children = (
+ 1ED0B8CB260125E100D19DB5 /* media-playback-client.cpp */,
1EC4CE6125CC271B00D7304F /* af-event.cpp */,
1EC4CE4925CC267700D7304F /* af-main-common.cpp */,
1EC4CE4125CC267600D7304F /* attribute-size.cpp */,
1EC4CE6225CC271B00D7304F /* af-event.cpp in Sources */,
1EC4CE4E25CC267700D7304F /* attribute-size.cpp in Sources */,
1EC4CE4D25CC267700D7304F /* process-global-message.cpp in Sources */,
+ 1ED0B8CC260125E100D19DB5 /* media-playback-client.cpp in Sources */,
1EC4CE5125CC267700D7304F /* message.cpp in Sources */,
1EC4CE5D25CC26E900D7304F /* CHIPClustersObjc.mm in Sources */,
B2E0D7B3245B0B5C003C5B48 /* CHIPError.mm in Sources */,
uint16_t idStringLen = 32;
char deviceIdString[idStringLen];
if (CHIP_NO_ERROR
- != _persistentStorageDelegateBridge->GetKeyValue(CHIP_COMMISSIONER_DEVICE_ID_KEY, deviceIdString, idStringLen)) {
+ != _persistentStorageDelegateBridge->SyncGetKeyValue(CHIP_COMMISSIONER_DEVICE_ID_KEY, deviceIdString, idStringLen)) {
_localDeviceId = arc4random();
_localDeviceId = _localDeviceId << 32 | arc4random();
CHIP_LOG_ERROR("Assigned %llx node ID to the controller", _localDeviceId);
- _persistentStorageDelegateBridge->SetKeyValue(
+ _persistentStorageDelegateBridge->AsyncSetKeyValue(
CHIP_COMMISSIONER_DEVICE_ID_KEY, [[NSString stringWithFormat:@"%llx", _localDeviceId] UTF8String]);
} else {
NSScanner * scanner = [NSScanner scannerWithString:[NSString stringWithUTF8String:deviceIdString]];
void setFrameworkDelegate(id<CHIPPersistentStorageDelegate> delegate, dispatch_queue_t queue);
- void SetDelegate(chip::PersistentStorageResultDelegate * delegate) override;
+ void SetStorageDelegate(chip::PersistentStorageResultDelegate * delegate) override;
- void GetKeyValue(const char * key) override;
+ void AsyncGetKeyValue(const char * key) override;
- CHIP_ERROR GetKeyValue(const char * key, char * value, uint16_t & size) override;
+ CHIP_ERROR SyncGetKeyValue(const char * key, char * value, uint16_t & size) override;
- void SetKeyValue(const char * key, const char * value) override;
+ void AsyncSetKeyValue(const char * key, const char * value) override;
- void DeleteKeyValue(const char * key) override;
+ void AsyncDeleteKeyValue(const char * key) override;
private:
id<CHIPPersistentStorageDelegate> mDelegate;
});
}
-void CHIPPersistentStorageDelegateBridge::SetDelegate(chip::PersistentStorageResultDelegate * delegate)
+void CHIPPersistentStorageDelegateBridge::SetStorageDelegate(chip::PersistentStorageResultDelegate * delegate)
{
dispatch_async(mWorkQueue, ^{
if (delegate) {
chip::PersistentStorageResultDelegate * callback = mCallback;
if (callback) {
dispatch_async(mWorkQueue, ^{
- callback->OnValue([key UTF8String], [value UTF8String]);
+ callback->OnPersistentStorageValue([key UTF8String], [value UTF8String]);
});
}
};
chip::PersistentStorageResultDelegate * callback = mCallback;
if (callback) {
dispatch_async(mWorkQueue, ^{
- callback->OnStatus([key UTF8String], chip::PersistentStorageResultDelegate::Operation::kSET,
- [CHIPError errorToCHIPErrorCode:status]);
+ callback->OnPersistentStorageStatus([key UTF8String],
+ chip::PersistentStorageResultDelegate::Operation::kSET, [CHIPError errorToCHIPErrorCode:status]);
});
}
};
chip::PersistentStorageResultDelegate * callback = mCallback;
if (callback) {
dispatch_async(mWorkQueue, ^{
- callback->OnStatus([key UTF8String], chip::PersistentStorageResultDelegate::Operation::kDELETE,
- [CHIPError errorToCHIPErrorCode:status]);
+ callback->OnPersistentStorageStatus([key UTF8String],
+ chip::PersistentStorageResultDelegate::Operation::kDELETE, [CHIPError errorToCHIPErrorCode:status]);
});
}
};
});
}
-void CHIPPersistentStorageDelegateBridge::GetKeyValue(const char * key)
+void CHIPPersistentStorageDelegateBridge::AsyncGetKeyValue(const char * key)
{
NSString * keyString = [NSString stringWithUTF8String:key];
dispatch_async(mWorkQueue, ^{
});
}
-CHIP_ERROR CHIPPersistentStorageDelegateBridge::GetKeyValue(const char * key, char * value, uint16_t & size)
+CHIP_ERROR CHIPPersistentStorageDelegateBridge::SyncGetKeyValue(const char * key, char * value, uint16_t & size)
{
__block CHIP_ERROR error = CHIP_NO_ERROR;
NSString * keyString = [NSString stringWithUTF8String:key];
return error;
}
-void CHIPPersistentStorageDelegateBridge::SetKeyValue(const char * key, const char * value)
+void CHIPPersistentStorageDelegateBridge::AsyncSetKeyValue(const char * key, const char * value)
{
NSString * keyString = [NSString stringWithUTF8String:key];
NSString * valueString = [NSString stringWithUTF8String:value];
});
}
-void CHIPPersistentStorageDelegateBridge::DeleteKeyValue(const char * key)
+void CHIPPersistentStorageDelegateBridge::AsyncDeleteKeyValue(const char * key)
{
NSString * keyString = [NSString stringWithUTF8String:key];
dispatch_async(mWorkQueue, ^{
#import "CHIPDevice.h"
#import "CHIPDevice_Internal.h"
-#import "ChipError.h"
+#import "CHIPError.h"
#import "gen/CHIPClientCallbacks.h"
#import "gen/CHIPClustersObjc.h"
bool mKeepAlive;
};
+class CHIPInt64uAttributeCallbackBridge : public Callback::Callback<Int64uAttributeCallback> {
+public:
+ CHIPInt64uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
+ : Callback::Callback<Int64uAttributeCallback>(CallbackFn, this)
+ , mHandler(handler)
+ , mQueue(queue)
+ , mKeepAlive(keepAlive)
+ {
+ }
+
+ ~CHIPInt64uAttributeCallbackBridge() {};
+
+ static void CallbackFn(void * context, uint64_t value)
+ {
+ CHIPInt64uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt64uAttributeCallbackBridge *>(context);
+ if (callback && callback->mQueue) {
+ dispatch_async(callback->mQueue, ^{
+ callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedLongLong:value] });
+ if (!callback->mKeepAlive) {
+ callback->Cancel();
+ delete callback;
+ }
+ });
+ }
+ };
+
+private:
+ ResponseHandler mHandler;
+ dispatch_queue_t mQueue;
+ bool mKeepAlive;
+};
+
class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
public:
CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
#define ZCL_FABRIC_ID_ATTRIBUTE_ID (0x0000)
#define ZCL_BREADCRUMB_ATTRIBUTE_ID (0x0001)
+// Attribute ids for cluster: Network Commissioning
+
+// Client attributes
+
+// Server attributes
+
// Attribute ids for cluster: Shade Configuration
// Client attributes
// Server attributes
-// Attribute ids for cluster: Network Commissioning
-
-// Client attributes
-
-// Server attributes
-
// Attribute ids for cluster: Binding
// Client attributes
\
ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+/** @brief Command description for ScanNetworks
+ *
+ * Command: ScanNetworks
+ * @param ssid OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterScanNetworks(ssid, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_NETWORKS_COMMAND_ID, "uuu", ssid, breadcrumb, timeoutMs);
+
+/** @brief Command description for ScanNetworksResponse
+ *
+ * Command: ScanNetworksResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ * @param wifiScanResults WiFiInterfaceScanResult []
+ * @param wifiScanResultsLen int
+ * @param threadScanResults ThreadInterfaceScanResult []
+ * @param threadScanResultsLen int
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterScanNetworksResponse(errorCode, debugText, wifiScanResults, wifiScanResultsLen, threadScanResults, \
+ threadScanResultsLen) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID, "uubb", errorCode, debugText, wifiScanResults, \
+ wifiScanResultsLen, threadScanResults, threadScanResultsLen);
+
+/** @brief Command description for AddWiFiNetwork
+ *
+ * Command: AddWiFiNetwork
+ * @param ssid OCTET_STRING
+ * @param credentials OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
+
+/** @brief Command description for AddWiFiNetworkResponse
+ *
+ * Command: AddWiFiNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddWiFiNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for UpdateWiFiNetwork
+ *
+ * Command: UpdateWiFiNetwork
+ * @param ssid OCTET_STRING
+ * @param credentials OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
+
+/** @brief Command description for UpdateWiFiNetworkResponse
+ *
+ * Command: UpdateWiFiNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateWiFiNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for AddThreadNetwork
+ *
+ * Command: AddThreadNetwork
+ * @param operationalDataset OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
+
+/** @brief Command description for AddThreadNetworkResponse
+ *
+ * Command: AddThreadNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterAddThreadNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for UpdateThreadNetwork
+ *
+ * Command: UpdateThreadNetwork
+ * @param operationalDataset OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
+
+/** @brief Command description for UpdateThreadNetworkResponse
+ *
+ * Command: UpdateThreadNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterUpdateThreadNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for RemoveNetwork
+ *
+ * Command: RemoveNetwork
+ * @param NetworkID OCTET_STRING
+ * @param Breadcrumb INT64U
+ * @param TimeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterRemoveNetwork(NetworkID, Breadcrumb, TimeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_NETWORK_COMMAND_ID, "uuu", NetworkID, Breadcrumb, TimeoutMs);
+
+/** @brief Command description for RemoveNetworkResponse
+ *
+ * Command: RemoveNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterRemoveNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for EnableNetwork
+ *
+ * Command: EnableNetwork
+ * @param networkID OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterEnableNetwork(networkID, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
+
+/** @brief Command description for EnableNetworkResponse
+ *
+ * Command: EnableNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterEnableNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for DisableNetwork
+ *
+ * Command: DisableNetwork
+ * @param networkID OCTET_STRING
+ * @param breadcrumb INT64U
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterDisableNetwork(networkID, breadcrumb, timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
+
+/** @brief Command description for DisableNetworkResponse
+ *
+ * Command: DisableNetworkResponse
+ * @param errorCode INT8U
+ * @param debugText CHAR_STRING
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterDisableNetworkResponse(errorCode, debugText) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
+
+/** @brief Command description for GetLastNetworkCommissioningResult
+ *
+ * Command: GetLastNetworkCommissioningResult
+ * @param timeoutMs INT32U
+ */
+#define emberAfFillCommandNetwork \
+ CommissioningClusterGetLastNetworkCommissioningResult(timeoutMs) \
+ emberAfFillExternalBuffer(mask, \
+ \
+ ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID, "u", timeoutMs);
+
/** @brief Command description for LockDoor
*
* Command: LockDoor
ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID, "uuuub", startIndex, total, startIndex, count, \
endpointInformationRecordList, endpointInformationRecordListLen);
-/** @brief Command description for ScanNetworks
- *
- * Command: ScanNetworks
- * @param ssid OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterScanNetworks(ssid, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_SCAN_NETWORKS_COMMAND_ID, "uuu", ssid, breadcrumb, timeoutMs);
-
-/** @brief Command description for ScanNetworksResponse
- *
- * Command: ScanNetworksResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- * @param wifiScanResults WiFiInterfaceScanResult []
- * @param wifiScanResultsLen int
- * @param threadScanResults ThreadInterfaceScanResult []
- * @param threadScanResultsLen int
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterScanNetworksResponse(errorCode, debugText, wifiScanResults, wifiScanResultsLen, threadScanResults, \
- threadScanResultsLen) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID, "uubb", errorCode, debugText, wifiScanResults, \
- wifiScanResultsLen, threadScanResults, threadScanResultsLen);
-
-/** @brief Command description for AddWiFiNetwork
- *
- * Command: AddWiFiNetwork
- * @param ssid OCTET_STRING
- * @param credentials OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
-
-/** @brief Command description for AddWiFiNetworkResponse
- *
- * Command: AddWiFiNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddWiFiNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for UpdateWiFiNetwork
- *
- * Command: UpdateWiFiNetwork
- * @param ssid OCTET_STRING
- * @param credentials OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateWiFiNetwork(ssid, credentials, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID, "uuuu", ssid, credentials, breadcrumb, timeoutMs);
-
-/** @brief Command description for UpdateWiFiNetworkResponse
- *
- * Command: UpdateWiFiNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateWiFiNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for AddThreadNetwork
- *
- * Command: AddThreadNetwork
- * @param operationalDataset OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
-
-/** @brief Command description for AddThreadNetworkResponse
- *
- * Command: AddThreadNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterAddThreadNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for UpdateThreadNetwork
- *
- * Command: UpdateThreadNetwork
- * @param operationalDataset OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateThreadNetwork(operationalDataset, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID, "uuu", operationalDataset, breadcrumb, timeoutMs);
-
-/** @brief Command description for UpdateThreadNetworkResponse
- *
- * Command: UpdateThreadNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterUpdateThreadNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for RemoveNetwork
- *
- * Command: RemoveNetwork
- * @param NetworkID OCTET_STRING
- * @param Breadcrumb INT64U
- * @param TimeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterRemoveNetwork(NetworkID, Breadcrumb, TimeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_REMOVE_NETWORK_COMMAND_ID, "uuu", NetworkID, Breadcrumb, TimeoutMs);
-
-/** @brief Command description for RemoveNetworkResponse
- *
- * Command: RemoveNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterRemoveNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for EnableNetwork
- *
- * Command: EnableNetwork
- * @param networkID OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterEnableNetwork(networkID, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ENABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
-
-/** @brief Command description for EnableNetworkResponse
- *
- * Command: EnableNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterEnableNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for DisableNetwork
- *
- * Command: DisableNetwork
- * @param networkID OCTET_STRING
- * @param breadcrumb INT64U
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterDisableNetwork(networkID, breadcrumb, timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_DISABLE_NETWORK_COMMAND_ID, "uuu", networkID, breadcrumb, timeoutMs);
-
-/** @brief Command description for DisableNetworkResponse
- *
- * Command: DisableNetworkResponse
- * @param errorCode INT8U
- * @param debugText CHAR_STRING
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterDisableNetworkResponse(errorCode, debugText) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID, "uu", errorCode, debugText);
-
-/** @brief Command description for GetLastNetworkCommissioningResult
- *
- * Command: GetLastNetworkCommissioningResult
- * @param timeoutMs INT32U
- */
-#define emberAfFillCommandNetwork \
- CommissioningClusterGetLastNetworkCommissioningResult(timeoutMs) \
- emberAfFillExternalBuffer(mask, \
- \
- ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID, "u", timeoutMs);
-
/** @brief Command description for Bind
*
* Command: Bind
// Definitions for cluster: General Commissioning
#define ZCL_GENERAL_COMMISSIONING_CLUSTER_ID (0x0030)
+// Definitions for cluster: Network Commissioning
+#define ZCL_NETWORK_COMMISSIONING_CLUSTER_ID (0x0031)
+
// Definitions for cluster: Shade Configuration
#define ZCL_SHADE_CONFIG_CLUSTER_ID (0x0100)
// Definitions for cluster: ZLL Commissioning
#define ZCL_ZLL_COMMISSIONING_CLUSTER_ID (0x1000)
-// Definitions for cluster: Network Commissioning
-#define ZCL_NETWORK_COMMISSIONING_CLUSTER_ID (0xAAAA)
-
// Definitions for cluster: Binding
#define ZCL_BINDING_CLUSTER_ID (0xF000)
#define ZCL_COMMISSIONING_COMPLETE_COMMAND_ID (0x06)
#define ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID (0x07)
+// Commands for cluster: Network Commissioning
+#define ZCL_SCAN_NETWORKS_COMMAND_ID (0x00)
+#define ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID (0x01)
+#define ZCL_ADD_WI_FI_NETWORK_COMMAND_ID (0x02)
+#define ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x03)
+#define ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID (0x04)
+#define ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x05)
+#define ZCL_ADD_THREAD_NETWORK_COMMAND_ID (0x06)
+#define ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x07)
+#define ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID (0x08)
+#define ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x09)
+#define ZCL_REMOVE_NETWORK_COMMAND_ID (0x0A)
+#define ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID (0x0B)
+#define ZCL_ENABLE_NETWORK_COMMAND_ID (0x0C)
+#define ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID (0x0D)
+#define ZCL_DISABLE_NETWORK_COMMAND_ID (0x0E)
+#define ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID (0x0F)
+#define ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID (0x10)
+
// Commands for cluster: Door Lock
#define ZCL_LOCK_DOOR_COMMAND_ID (0x00)
#define ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID (0x00)
#define ZCL_GET_ENDPOINT_LIST_REQUEST_COMMAND_ID (0x42)
#define ZCL_GET_ENDPOINT_LIST_RESPONSE_COMMAND_ID (0x42)
-// Commands for cluster: Network Commissioning
-#define ZCL_SCAN_NETWORKS_COMMAND_ID (0x00)
-#define ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID (0x01)
-#define ZCL_ADD_WI_FI_NETWORK_COMMAND_ID (0x02)
-#define ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x03)
-#define ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID (0x04)
-#define ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID (0x05)
-#define ZCL_ADD_THREAD_NETWORK_COMMAND_ID (0x06)
-#define ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x07)
-#define ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID (0x08)
-#define ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID (0x09)
-#define ZCL_REMOVE_NETWORK_COMMAND_ID (0x0A)
-#define ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID (0x0B)
-#define ZCL_ENABLE_NETWORK_COMMAND_ID (0x0C)
-#define ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID (0x0D)
-#define ZCL_DISABLE_NETWORK_COMMAND_ID (0x0E)
-#define ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID (0x0F)
-#define ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID (0x10)
-
// Commands for cluster: Binding
#define ZCL_BIND_COMMAND_ID (0x00)
#define ZCL_UNBIND_COMMAND_ID (0x01)
#define CHIP_PRINTCLUSTER_GENERAL_COMMISSIONING_CLUSTER
#endif
+#if defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_CLIENT)
+#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER { ZCL_NETWORK_COMMISSIONING_CLUSTER_ID, 49, "Network Commissioning" },
+#else
+#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER
+#endif
+
#if defined(ZCL_USING_SHADE_CONFIG_CLUSTER_SERVER) || defined(ZCL_USING_SHADE_CONFIG_CLUSTER_CLIENT)
#define CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER { ZCL_SHADE_CONFIG_CLUSTER_ID, 256, "Shade Configuration" },
#else
#define CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER
#endif
-#if defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_SERVER) || defined(ZCL_USING_NETWORK_COMMISSIONING_CLUSTER_CLIENT)
-#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER { ZCL_NETWORK_COMMISSIONING_CLUSTER_ID, 43690, "Network Commissioning" },
-#else
-#define CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER
-#endif
-
#if defined(ZCL_USING_BINDING_CLUSTER_SERVER) || defined(ZCL_USING_BINDING_CLUSTER_CLIENT)
#define CHIP_PRINTCLUSTER_BINDING_CLUSTER { ZCL_BINDING_CLUSTER_ID, 61440, "Binding" },
#else
CHIP_PRINTCLUSTER_KEEPALIVE_CLUSTER \
CHIP_PRINTCLUSTER_BASIC_CLUSTER \
CHIP_PRINTCLUSTER_GENERAL_COMMISSIONING_CLUSTER \
+ CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER \
CHIP_PRINTCLUSTER_SHADE_CONFIG_CLUSTER \
CHIP_PRINTCLUSTER_DOOR_LOCK_CLUSTER \
CHIP_PRINTCLUSTER_WINDOW_COVERING_CLUSTER \
CHIP_PRINTCLUSTER_ELECTRICAL_MEASUREMENT_CLUSTER \
CHIP_PRINTCLUSTER_DIAGNOSTICS_CLUSTER \
CHIP_PRINTCLUSTER_ZLL_COMMISSIONING_CLUSTER \
- CHIP_PRINTCLUSTER_NETWORK_COMMISSIONING_CLUSTER \
CHIP_PRINTCLUSTER_BINDING_CLUSTER \
CHIP_PRINTCLUSTER_MEDIA_PLAYBACK_CLUSTER \
CHIP_PRINTCLUSTER_CONTENT_LAUNCH_CLUSTER \
namespace DeviceLayer {
namespace Internal {
-class NetworkProvisioningServerImpl;
-template <class>
-class GenericNetworkProvisioningServerImpl;
template <class>
class GenericPlatformManagerImpl;
template <class>
friend class Internal::GenericPlatformManagerImpl_FreeRTOS;
template <class>
friend class Internal::GenericPlatformManagerImpl_POSIX;
- friend class Internal::NetworkProvisioningServerImpl;
- template <class>
- friend class Internal::GenericNetworkProvisioningServerImpl;
CHIP_ERROR Init();
void OnPlatformEvent(const ChipDeviceEvent * event);
class GenericThreadStackManagerImpl_OpenThread_LwIP;
template <class>
class GenericThreadStackManagerImpl_FreeRTOS;
-template <class>
-class GenericNetworkProvisioningServerImpl;
} // namespace Internal
/**
friend class Internal::GenericThreadStackManagerImpl_OpenThread_LwIP;
template <class>
friend class Internal::GenericThreadStackManagerImpl_FreeRTOS;
- template <class>
- friend class Internal::GenericNetworkProvisioningServerImpl;
void OnPlatformEvent(const ChipDeviceEvent * event);
bool IsThreadEnabled();
+++ /dev/null
-/*
- *
- * Copyright (c) 2020-2021 Project CHIP Authors
- * Copyright (c) 2018 Nest Labs, Inc.
- * All rights reserved.
- *
- * 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.
- */
-
-/**
- * @file
- * Contains non-inline method definitions for the
- * GenericNetworkProvisioningServerImpl<> template.
- */
-
-#ifndef GENERIC_NETWORK_PROVISIONING_SERVER_IMPL_CPP
-#define GENERIC_NETWORK_PROVISIONING_SERVER_IMPL_CPP
-
-#include <platform/internal/CHIPDeviceLayerInternal.h>
-#include <platform/internal/GenericNetworkProvisioningServerImpl.h>
-#include <platform/internal/NetworkProvisioningServer.h>
-#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
-#include <platform/ThreadStackManager.h>
-#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
-namespace chip {
-namespace DeviceLayer {
-namespace Internal {
-
-using namespace ::chip::TLV;
-
-using Profiles::kChipProfile_Common;
-using Profiles::kChipProfile_NetworkProvisioning;
-
-namespace {
-
-const char sLogPrefix[] = "NetworkProvisioningServer: ";
-
-} // unnamed namespace
-
-// Fully instantiate the generic implementation class in whatever compilation unit includes this file.
-template class GenericNetworkProvisioningServerImpl<NetworkProvisioningServerImpl>;
-
-template <class ImplClass>
-void GenericNetworkProvisioningServerImpl<ImplClass>::_StartPendingScan()
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
-
- // Do nothing if there's no pending ScanNetworks request outstanding, or if a scan is already in progress.
- if (mState != kState_ScanNetworks_Pending)
- {
- ExitNow();
- }
-
- switch (mScanNetworkType)
- {
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
- case kNetworkType_WiFi:
-
- // Defer the scan if the Connection Manager says the system is in a state
- // where a WiFi scan cannot be started (e.g. if the system is connecting to
- // an AP and can't scan and connect at the same time). The Connection Manager
- // is responsible for calling this method again when the system is read to scan.
- if (!ConnectivityMgr().CanStartWiFiScan())
- {
- ExitNow();
- }
-
- mState = kState_ScanNetworks_InProgress;
-
- // Delegate to the implementation subclass to initiate the WiFi scan operation.
- err = Impl()->InitiateWiFiScan();
- SuccessOrExit(err);
-
- break;
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
-#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- case kNetworkType_Thread:
-
- // TODO: implement this
- ExitNow(err = CHIP_ERROR_UNSUPPORTED_CHIP_FEATURE);
-
- break;
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- default:
- ExitNow(err = CHIP_ERROR_INCORRECT_STATE);
- }
-
-exit:
- // If an error occurred, send a Internal Error back to the requestor.
- if (err != CHIP_NO_ERROR)
- {
- SendStatusReport(kChipProfile_Common, kStatus_InternalError, err);
- mState = kState_Idle;
- }
-}
-
-template <class ImplClass>
-void GenericNetworkProvisioningServerImpl<ImplClass>::_OnPlatformEvent(const ChipDeviceEvent * event)
-{
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
- // Handle a change in Internet connectivity...
- if (event->Type == DeviceEventType::kInternetConnectivityChange)
- {
- // If a TestConnectivity operation is in progress for WiFi, re-evaluate the state
- // connectivity now.
- ContinueWiFiConnectivityTest();
- }
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
-#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- // Define some short-hands for various interesting event conditions.
- const bool threadConnChanged = (event->Type == DeviceEventType::kThreadConnectivityChange &&
- event->ThreadConnectivityChange.Result != kConnectivity_NoChange);
- const bool threadRoleChanged = (event->Type == DeviceEventType::kThreadStateChange && event->ThreadStateChange.RoleChanged);
- const bool threadChildrenChanged =
- (event->Type == DeviceEventType::kThreadStateChange && event->ThreadStateChange.ChildNodesChanged);
-
- // If the state of the Thread interface changed, OR if the Thread role changed, OR
- // if there was a change to the set of child nodes...
- if (threadConnChanged || threadRoleChanged || threadChildrenChanged)
- {
- // If a TestConnectivity operation is in progress for Thread, re-evaluate the state
- // connectivity now.
- ContinueThreadConnectivityTest();
- }
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD
-}
-
-template <class ImplClass>
-CHIP_ERROR GenericNetworkProvisioningServerImpl<ImplClass>::HandleScanNetworks(uint8_t networkType)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
- bool isAppControlled = false;
-
- VerifyOrExit(mState == kState_Idle, err = CHIP_ERROR_INCORRECT_STATE);
-
- switch (networkType)
- {
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
- case kNetworkType_WiFi:
- isAppControlled = ConnectivityMgr().IsWiFiStationApplicationControlled();
- break;
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
-#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- case kNetworkType_Thread:
- isAppControlled = ConnectivityMgr().IsThreadApplicationControlled();
- break;
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- default:
- err = SendStatusReport(kChipProfile_NetworkProvisioning, kStatusCode_UnsupportedNetworkType);
- ExitNow();
- }
-
- // Reject the request if the application is currently in control of the requested network.
- if (isAppControlled)
- {
- err = SendStatusReport(kChipProfile_Common, kStatus_NotAvailable);
- ExitNow();
- }
-
- // Enter the ScanNetworks Pending state and delegate to the implementation class to start the scan.
- mState = kState_ScanNetworks_Pending;
- mScanNetworkType = networkType;
- Impl()->StartPendingScan();
-
-exit:
- return err;
-}
-
-template <class ImplClass>
-CHIP_ERROR GenericNetworkProvisioningServerImpl<ImplClass>::DoInit()
-{
- CHIP_ERROR err;
-
- // Call init on the server base class.
- err = ServerBaseClass::Init(&::chip::DeviceLayer::ExchangeMgr);
- SuccessOrExit(err);
-
- // Set the pointer to the delegate object.
- SetDelegate(this);
-
- mState = kState_Idle;
- mScanNetworkType = kNetworkType_NotSpecified;
-
-exit:
- return err;
-}
-
-template <class ImplClass>
-CHIP_ERROR GenericNetworkProvisioningServerImpl<ImplClass>::HandleAddNetwork(PacketBuffer * networkInfoTLV)
-{
- return HandleAddUpdateNetwork(networkInfoTLV, false);
-}
-
-template <class ImplClass>
-CHIP_ERROR GenericNetworkProvisioningServerImpl<ImplClass>::HandleUpdateNetwork(PacketBuffer * networkInfoTLV)
-{
- return HandleAddUpdateNetwork(networkInfoTLV, true);
-}
-
-template <class ImplClass>
-CHIP_ERROR GenericNetworkProvisioningServerImpl<ImplClass>::HandleAddUpdateNetwork(PacketBuffer * networkInfoTLV, bool isUpdate)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
- DeviceNetworkInfo netInfo;
- uint32_t netId;
-
- VerifyOrExit(mState == kState_Idle, err = CHIP_ERROR_INCORRECT_STATE);
-
- // Parse the supplied network configuration info.
- {
- TLV::TLVReader reader;
- reader.Init(networkInfoTLV);
- err = netInfo.Decode(reader);
- SuccessOrExit(err);
- }
-
- // Discard the request buffer.
- PacketBuffer::Free(networkInfoTLV);
- networkInfoTLV = NULL;
-
- switch (netInfo.NetworkType)
- {
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
- case kNetworkType_WiFi:
-
- // If updating the provision, verify that the specified network is provisioned.
- if (isUpdate && !ConnectivityMgr().IsWiFiStationProvisioned())
- {
- err = SendStatusReport(kChipProfile_NetworkProvisioning, kStatusCode_UnknownNetwork);
- ExitNow();
- }
-
- // Reject the request if the application is currently in control of the WiFi station.
- if (ConnectivityMgr().IsWiFiStationApplicationControlled())
- {
- err = SendStatusReport(kChipProfile_Common, kStatus_NotAvailable);
- ExitNow();
- }
-
- // If updating the provision...
- if (isUpdate)
- {
- DeviceNetworkInfo existingNetInfo;
-
- // Delegate to the implementation subclass to get the existing station provision.
- err = Impl()->GetWiFiStationProvision(existingNetInfo, true);
- SuccessOrExit(err);
-
- // Override the existing provision with values specified in the update.
- err = netInfo.MergeTo(existingNetInfo);
- SuccessOrExit(err);
- memcpy(&netInfo, &existingNetInfo, sizeof(existingNetInfo));
- }
-
- // Check the validity of the new provision. If not acceptable, respond to the requestor
- // with an appropriate StatusReport.
- {
- uint32_t statusProfileId;
- uint16_t statusCode;
- err = Impl()->ValidateWiFiStationProvision(netInfo, statusProfileId, statusCode);
- if (err != CHIP_NO_ERROR)
- {
- err = SendStatusReport(statusProfileId, statusCode, err);
- ExitNow();
- }
- }
-
- // If the WiFi station is not already configured, disable the station interface. This
- // ensures that the device will not automatically connect to the new network until an
- // EnableNetwork request is received.
- if (!ConnectivityMgr().IsWiFiStationProvisioned())
- {
- err = ConnectivityMgr().SetWiFiStationMode(ConnectivityManager::kWiFiStationMode_Disabled);
- SuccessOrExit(err);
- }
-
- // Delegate to the implementation subclass to set the WiFi station provision.
- err = Impl()->SetWiFiStationProvision(netInfo);
- SuccessOrExit(err);
-
- // Tell the ConnectivityManager there's been a change to the station provision.
- ConnectivityMgr().OnWiFiStationProvisionChange();
-
- netId = kWiFiStationNetworkId;
-
- break;
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
-#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- case kNetworkType_Thread:
-
- // If updating the provision, verify that the Thread network is provisioned.
- if (isUpdate && !ThreadStackMgr().IsThreadProvisioned())
- {
- err = SendStatusReport(kChipProfile_NetworkProvisioning, kStatusCode_UnknownNetwork);
- ExitNow();
- }
-
- // Reject the request if the application is currently in control of the Thread network.
- if (ConnectivityMgr().IsThreadApplicationControlled())
- {
- err = SendStatusReport(kChipProfile_Common, kStatus_NotAvailable);
- ExitNow();
- }
-
- // Check the validity of the supplied Thread parameters. If not acceptable, respond to
- // the requestor with an appropriate StatusReport.
- {
- uint32_t statusProfileId;
- uint16_t statusCode;
- err = Impl()->ValidateThreadProvision(isUpdate, netInfo, statusProfileId, statusCode);
- if (err != CHIP_NO_ERROR)
- {
- err = SendStatusReport(statusProfileId, statusCode, err);
- ExitNow();
- }
- }
-
- // Apply suitable defaults for any parameters not supplied by the client.
- err = Impl()->SetThreadProvisionDefaults(isUpdate, netInfo);
- SuccessOrExit(err);
-
- // Store the Thread provision.
- err = ThreadStackMgr().SetThreadProvision(netInfo);
- SuccessOrExit(err);
-
- netId = kThreadNetworkId;
-
- break;
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- default:
-
- ChipLogProgress(DeviceLayer, "%sUnsupported network type: %d", sLogPrefix, netInfo.NetworkType);
- err = SendStatusReport(kChipProfile_NetworkProvisioning, kStatusCode_UnsupportedNetworkType, CHIP_ERROR_INVALID_ARGUMENT);
- ExitNow();
- }
-
- // Send an AddNetworkComplete message back to the requestor.
- SendAddNetworkComplete(netId);
-
-exit:
- PacketBuffer::Free(networkInfoTLV);
- return err;
-}
-
-template <class ImplClass>
-CHIP_ERROR GenericNetworkProvisioningServerImpl<ImplClass>::HandleRemoveNetwork(uint32_t networkId)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
-
- VerifyOrExit(mState == kState_Idle, err = CHIP_ERROR_INCORRECT_STATE);
-
- switch (networkId)
- {
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
- case kWiFiStationNetworkId:
-
- // Verify that the specified network exists.
- if (!ConnectivityMgr().IsWiFiStationProvisioned())
- {
- goto sendUnknownNetworkResp;
- }
-
- // Reject the request if the application is currently in control of the WiFi station.
- if (ConnectivityMgr().IsWiFiStationApplicationControlled())
- {
- err = SendStatusReport(kChipProfile_Common, kStatus_NotAvailable);
- ExitNow();
- }
-
- // Delegate to the implementation subclass to clear the WiFi station provision.
- err = Impl()->ClearWiFiStationProvision();
- SuccessOrExit(err);
-
- // Tell the ConnectivityManager there's been a change to the station provision.
- ConnectivityMgr().OnWiFiStationProvisionChange();
-
- break;
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
-#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- case kThreadNetworkId:
-
- // Verify that the specified network exists.
- if (!ThreadStackMgr().IsThreadProvisioned())
- {
- goto sendUnknownNetworkResp;
- }
-
- // Reject the request if the application is currently in control of the Thread network.
- if (ConnectivityMgr().IsThreadApplicationControlled())
- {
- err = SendStatusReport(kChipProfile_Common, kStatus_NotAvailable);
- ExitNow();
- }
-
- // Clear the Thread provision.
- ThreadStackMgr().ErasePersistentInfo();
-
- break;
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- default:
- sendUnknownNetworkResp:
-
- err = SendStatusReport(kChipProfile_NetworkProvisioning, kStatusCode_UnknownNetwork);
- ExitNow();
- }
-
- // Respond with a Success response.
- err = SendSuccessResponse();
- SuccessOrExit(err);
-
-exit:
- return err;
-}
-
-template <class ImplClass>
-CHIP_ERROR GenericNetworkProvisioningServerImpl<ImplClass>::HandleGetNetworks(uint8_t flags)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
- DeviceNetworkInfo netInfo[2];
- PacketBuffer * respBuf = NULL;
- uint8_t resultCount = 0;
- const bool includeCredentials = (flags & kGetNetwork_IncludeCredentials) != 0;
-
- VerifyOrExit(mState == kState_Idle, err = CHIP_ERROR_INCORRECT_STATE);
-
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
- // Delegate to the implementation subclass to get the WiFi station provision.
- err = Impl()->GetWiFiStationProvision(netInfo[resultCount], includeCredentials);
- if (err == CHIP_NO_ERROR)
- {
- resultCount++;
- }
- else if (err != CHIP_ERROR_INCORRECT_STATE)
- {
- ExitNow();
- }
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
-#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- // Delegate to the implementation subclass to get the Thread provision.
- err = ThreadStackMgr().GetThreadProvision(netInfo[resultCount], includeCredentials);
- if (err == CHIP_NO_ERROR)
- {
- resultCount++;
- }
- else if (err != CHIP_ERROR_INCORRECT_STATE)
- {
- ExitNow();
- }
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- // Allocate a buffer to hold the response.
- respBuf = PacketBufferHandle::New(PacketBuffer::kMaxSize);
- VerifyOrExit(respBuf != NULL, err = CHIP_ERROR_NO_MEMORY);
-
- // Encode the GetNetworks response data.
- {
- TLVWriter writer;
-
- writer.Init(respBuf);
-
- err = DeviceNetworkInfo::EncodeArray(writer, netInfo, resultCount);
- SuccessOrExit(err);
-
- err = writer.Finalize();
- SuccessOrExit(err);
- }
-
- // Send the response.
- err = SendGetNetworksComplete(resultCount, respBuf);
- respBuf = NULL;
- SuccessOrExit(err);
-
-exit:
- PacketBuffer::Free(respBuf);
- return err;
-}
-
-template <class ImplClass>
-CHIP_ERROR GenericNetworkProvisioningServerImpl<ImplClass>::HandleEnableNetwork(uint32_t networkId)
-{
- return HandleEnableDisableNetwork(networkId, true);
-}
-
-template <class ImplClass>
-CHIP_ERROR GenericNetworkProvisioningServerImpl<ImplClass>::HandleDisableNetwork(uint32_t networkId)
-{
- return HandleEnableDisableNetwork(networkId, false);
-}
-
-template <class ImplClass>
-CHIP_ERROR GenericNetworkProvisioningServerImpl<ImplClass>::HandleEnableDisableNetwork(uint32_t networkId, bool enable)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
-
- VerifyOrExit(mState == kState_Idle, err = CHIP_ERROR_INCORRECT_STATE);
-
- switch (networkId)
- {
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
- case kWiFiStationNetworkId:
-
- // Verify that the specified network exists.
- if (!ConnectivityMgr().IsWiFiStationProvisioned())
- {
- goto sendUnknownNetworkResp;
- }
-
- // Reject the request if the application is currently in control of the WiFi station.
- if (ConnectivityMgr().IsWiFiStationApplicationControlled())
- {
- err = SendStatusReport(kChipProfile_Common, kStatus_NotAvailable);
- ExitNow();
- }
-
- // Tell the ConnectivityManager to enable/disable the WiFi station interface.
- // Note that any effects of chaning the WiFi station mode happen asynchronously with this call.
- err = ConnectivityMgr().SetWiFiStationMode((enable) ? ConnectivityManager::kWiFiStationMode_Enabled
- : ConnectivityManager::kWiFiStationMode_Disabled);
- SuccessOrExit(err);
-
- break;
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
-#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- case kThreadNetworkId:
-
- // Verify that the specified network exists.
- if (!ThreadStackMgr().IsThreadProvisioned())
- {
- goto sendUnknownNetworkResp;
- }
-
- // Reject the request if the application is currently in control of the Thread network.
- if (ConnectivityMgr().IsThreadApplicationControlled())
- {
- err = SendStatusReport(kChipProfile_Common, kStatus_NotAvailable);
- ExitNow();
- }
-
- // Tell the ConnectivityManager to enable/disable the Thread network interface.
- // Note that any effects of changing the Thread mode happen asynchronously with this call.
- err = ThreadStackMgr().SetThreadEnabled(enable);
- SuccessOrExit(err);
-
- break;
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- default:
- sendUnknownNetworkResp:
-
- err = SendStatusReport(kChipProfile_NetworkProvisioning, kStatusCode_UnknownNetwork);
- ExitNow();
- }
-
- // Respond with a Success response.
- err = SendSuccessResponse();
- SuccessOrExit(err);
-
-exit:
- return err;
-}
-
-template <class ImplClass>
-CHIP_ERROR GenericNetworkProvisioningServerImpl<ImplClass>::HandleTestConnectivity(uint32_t networkId)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
-
- VerifyOrExit(mState == kState_Idle, err = CHIP_ERROR_INCORRECT_STATE);
-
- switch (networkId)
- {
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
- case kWiFiStationNetworkId:
-
- // Verify that the specified network exists.
- if (!ConnectivityMgr().IsWiFiStationProvisioned())
- {
- goto sendUnknownNetworkResp;
- }
-
- // Reject the request if the application is currently in control of the WiFi station.
- if (ConnectivityMgr().IsWiFiStationApplicationControlled())
- {
- err = SendStatusReport(kChipProfile_Common, kStatus_NotAvailable);
- ExitNow();
- }
-
- // Tell the ConnectivityManager to enable the WiFi station interface if it hasn't been done already.
- // Note that any effects of enabling the WiFi station interface (e.g. connecting to an AP) happen
- // asynchronously with this call.
- err = ConnectivityMgr().SetWiFiStationMode(ConnectivityManager::kWiFiStationMode_Enabled);
- SuccessOrExit(err);
-
- // Record that we're waiting for the WiFi station interface to establish connectivity
- // with the Internet and arm a timer that will generate an error if connectivity isn't established
- // within a certain amount of time.
- mState = kState_TestConnectivity_WaitWiFiConnectivity;
- SystemLayer.StartTimer(CHIP_DEVICE_CONFIG_WIFI_CONNECTIVITY_TIMEOUT, HandleConnectivityTestTimeOut, NULL);
-
- // Go check for connectivity now.
- Impl()->ContinueWiFiConnectivityTest();
-
- break;
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
-#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- case kThreadNetworkId:
-
- // Verify that the specified network exists.
- if (!ThreadStackMgr().IsThreadProvisioned())
- {
- goto sendUnknownNetworkResp;
- }
-
- // If the Thread interface is NOT already enabled...
- if (!ThreadStackMgr().IsThreadEnabled())
- {
- // Reject the request if the application is currently in control of the Thread network.
- if (ConnectivityMgr().IsThreadApplicationControlled())
- {
- err = SendStatusReport(kChipProfile_Common, kStatus_NotAvailable);
- ExitNow();
- }
-
- // Enable the Thread interface.
- err = ThreadStackMgr().SetThreadEnabled(true);
- SuccessOrExit(err);
- }
-
- // Record that we're waiting to establish Thread connectivity and arm a timer that will
- // generate an error if connectivity isn't established within a certain amount of time.
- mState = kState_TestConnectivity_WaitThreadConnectivity;
- SystemLayer.StartTimer(CHIP_DEVICE_CONFIG_THREAD_CONNECTIVITY_TIMEOUT, HandleConnectivityTestTimeOut, NULL);
-
- // Go check for connectivity now.
- Impl()->ContinueThreadConnectivityTest();
-
- break;
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- default:
- sendUnknownNetworkResp:
-
- err = SendStatusReport(kChipProfile_NetworkProvisioning, kStatusCode_UnknownNetwork);
- ExitNow();
- }
-
-exit:
- return err;
-}
-
-template <class ImplClass>
-CHIP_ERROR GenericNetworkProvisioningServerImpl<ImplClass>::HandleSetRendezvousMode(uint16_t rendezvousMode)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
-
- VerifyOrExit(mState == kState_Idle, err = CHIP_ERROR_INCORRECT_STATE);
-
- // Fail with Common:UnsupportedMessage if any unsupported modes were specified.
- {
- const uint16_t kSupportedModes = 0
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_AP
- | kRendezvousMode_EnableWiFiRendezvousNetwork
-#endif
-#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
- | kRendezvousMode_EnableThreadRendezvous
-#endif
- ;
-
- if ((rendezvousMode & ~kSupportedModes) != 0)
- {
- err = SendStatusReport(kChipProfile_Common, kStatus_UnsupportedMessage);
- ExitNow();
- }
- }
-
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_AP
-
- // If the request is to start the WiFi "rendezvous network" (a.k.a. the WiFi AP interface)...
- if ((rendezvousMode & kRendezvousMode_EnableWiFiRendezvousNetwork) != 0)
- {
- // Reject the request if the application is currently in control of the WiFi AP
- // OR if the AP interface has been expressly disabled by the application.
- const ConnectivityManager::WiFiAPMode apMode = ConnectivityMgr().GetWiFiAPMode();
- if (apMode == ConnectivityManager::kWiFiAPMode_ApplicationControlled || apMode == ConnectivityManager::kWiFiAPMode_Disabled)
- {
- err = SendStatusReport(kChipProfile_Common, kStatus_NotAvailable);
- ExitNow();
- }
-
- // Otherwise, request the ConnectivityManager to demand start the WiFi AP interface.
- // If the interface is already active this will have no immediate effect, except if the
- // interface is in the "demand" mode, in which case this will serve to extend the
- // active time.
- ConnectivityMgr().DemandStartWiFiAP();
- }
-
- // Otherwise the request is to stop the WiFi rendezvous network, so request the ConnectivityManager
- // to stop the AP interface if it has been demand started. This will have no effect if the
- // interface is already stopped, or if the application has expressly enabled the interface.
- else
- {
- ConnectivityMgr().StopOnDemandWiFiAP();
- }
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI_AP
-
-#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- // If the request is to enable Thread "rendezvous"--i.e. enable Thread joinable mode...
- if ((rendezvousMode & kRendezvousMode_EnableWiFiRendezvousNetwork) != 0)
- {
- // Reject the request if the application is currently in control of the Thread Network
- // OR if the Thread interface has been expressly disabled by the application
- // OR if the Thread network has not been provisioned.
- const ConnectivityManager::ThreadMode threadMode = ConnectivityMgr().GetThreadMode();
- if (threadMode == ConnectivityManager::kThreadMode_ApplicationControlled ||
- threadMode == ConnectivityManager::kThreadMode_Disabled || !ThreadStackMgr().IsThreadProvisioned())
- {
- err = SendStatusReport(kChipProfile_Common, kStatus_NotAvailable);
- ExitNow();
- }
-
- // TODO: implement this
- ExitNow(err = CHIP_ERROR_UNSUPPORTED_CHIP_FEATURE);
- }
-
- // Otherwise the request is to stop the Thread rendezvous...
- else
- {
-
- // TODO: implement this
- ExitNow(err = CHIP_ERROR_UNSUPPORTED_CHIP_FEATURE);
- }
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- // Respond with a Success response.
- err = SendSuccessResponse();
- SuccessOrExit(err);
-
-exit:
- return err;
-}
-
-template <class ImplClass>
-bool GenericNetworkProvisioningServerImpl<ImplClass>::IsPairedToAccount() const
-{
- return ConfigurationMgr().IsServiceProvisioned() && ConfigurationMgr().IsPairedToAccount();
-}
-
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
-template <class ImplClass>
-CHIP_ERROR GenericNetworkProvisioningServerImpl<ImplClass>::ValidateWiFiStationProvision(const DeviceNetworkInfo & netInfo,
- uint32_t & statusProfileId,
- uint16_t & statusCode)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
-
- if (netInfo.NetworkType != kNetworkType_WiFi)
- {
- ChipLogProgress(DeviceLayer, "%sUnsupported WiFi station network type: %d", sLogPrefix, netInfo.NetworkType);
- statusProfileId = kChipProfile_NetworkProvisioning;
- statusCode = kStatusCode_UnsupportedNetworkType;
- ExitNow(err = CHIP_ERROR_INVALID_ARGUMENT);
- }
-
- if (netInfo.WiFiSSID[0] == 0)
- {
- ChipLogProgress(DeviceLayer, "%sMissing WiFi station SSID", sLogPrefix);
- statusProfileId = kChipProfile_NetworkProvisioning;
- statusCode = kStatusCode_InvalidNetworkConfiguration;
- ExitNow(err = CHIP_ERROR_INVALID_ARGUMENT);
- }
-
- if (netInfo.WiFiMode != kWiFiMode_Managed)
- {
- if (netInfo.WiFiMode == kWiFiMode_NotSpecified)
- {
- ChipLogProgress(DeviceLayer, "%sMissing WiFi station mode", sLogPrefix);
- }
- else
- {
- ChipLogProgress(DeviceLayer, "%sUnsupported WiFi station mode: %d", sLogPrefix, netInfo.WiFiMode);
- }
- statusProfileId = kChipProfile_NetworkProvisioning;
- statusCode = kStatusCode_InvalidNetworkConfiguration;
- ExitNow(err = CHIP_ERROR_INVALID_ARGUMENT);
- }
-
- if (netInfo.WiFiRole != kWiFiRole_Station)
- {
- if (netInfo.WiFiRole == kWiFiRole_NotSpecified)
- {
- ChipLogProgress(DeviceLayer, "%sMissing WiFi station role", sLogPrefix);
- }
- else
- {
- ChipLogProgress(DeviceLayer, "%sUnsupported WiFi station role: %d", sLogPrefix, netInfo.WiFiRole);
- }
- statusProfileId = kChipProfile_NetworkProvisioning;
- statusCode = kStatusCode_InvalidNetworkConfiguration;
- ExitNow(err = CHIP_ERROR_INVALID_ARGUMENT);
- }
-
- // Defer to the implementation class to determine if the proposed security type is supported.
- if (!ImplClass::IsSupportedWiFiSecurityType(netInfo.WiFiSecurityType))
- {
- ChipLogProgress(DeviceLayer, "%sUnsupported WiFi station security type: %d", sLogPrefix, netInfo.WiFiSecurityType);
- statusProfileId = kChipProfile_NetworkProvisioning;
- statusCode = kStatusCode_UnsupportedWiFiSecurityType;
- ExitNow(err = CHIP_ERROR_INVALID_ARGUMENT);
- }
-
- if (netInfo.WiFiSecurityType != kWiFiSecurityType_None && netInfo.WiFiKeyLen == 0)
- {
- ChipLogProgress(DeviceLayer, "%sMissing WiFi Key", sLogPrefix);
- statusProfileId = kChipProfile_NetworkProvisioning;
- statusCode = kStatusCode_InvalidNetworkConfiguration;
- ExitNow(err = CHIP_ERROR_INVALID_ARGUMENT);
- }
-
-exit:
- return err;
-}
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
-#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
-template <class ImplClass>
-CHIP_ERROR
-GenericNetworkProvisioningServerImpl<ImplClass>::ValidateThreadProvision(bool isUpdate, const DeviceNetworkInfo & netInfo,
- uint32_t & statusProfileId, uint16_t & statusCode)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
-
- // Verify a valid Thread channel was specified.
- if (netInfo.ThreadChannel != kThreadChannel_NotSpecified)
- {
- if (netInfo.ThreadChannel < 11 && netInfo.ThreadChannel > 26)
- {
- statusProfileId = kChipProfile_NetworkProvisioning;
- statusCode = kStatusCode_InvalidNetworkConfiguration;
- ExitNow(err = CHIP_ERROR_INVALID_ARGUMENT);
- }
- }
-
-exit:
- return err;
-}
-
-template <class ImplClass>
-CHIP_ERROR GenericNetworkProvisioningServerImpl<ImplClass>::SetThreadProvisionDefaults(bool isUpdate, DeviceNetworkInfo & netInfo)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
-
- // Generate unique values for any Thread parameters not supplied by the client.
-
- // If extended PAN id was not specified, generate a random one.
- if (!netInfo.FieldPresent.ThreadExtendedPANId)
- {
- err = Platform::Security::GetSecureRandomData(netInfo.ThreadExtendedPANId, NetworkInfo::kThreadExtendedPANIdLength);
- SuccessOrExit(err);
- netInfo.FieldPresent.ThreadExtendedPANId = true;
- }
-
- // If network name was not specified, generate a default one. If the device is a member of a
- // Chip fabric, base part of the name on the fabric id.
- if (netInfo.ThreadNetworkName[0] == 0)
- {
- uint16_t nameSuffix = (::chip::DeviceLayer::FabricState.FabricId != kFabricIdNotSpecified)
- ? (uint16_t)::chip::DeviceLayer::FabricState.FabricId
- : Encoding::BigEndian::Get16(&netInfo.ThreadExtendedPANId[6]);
- snprintf(netInfo.ThreadNetworkName, sizeof(netInfo.ThreadNetworkName), "%s%04X",
- CHIP_DEVICE_CONFIG_DEFAULT_THREAD_NETWORK_NAME_PREFIX, nameSuffix);
- }
-
- // If a mesh prefix was not specified, generate one based on the extended PAN id.
- if (!netInfo.FieldPresent.ThreadMeshPrefix)
- {
- memset(netInfo.ThreadMeshPrefix, 0, sizeof(netInfo.ThreadMeshPrefix));
- netInfo.ThreadMeshPrefix[0] = 0xFD; // IPv6 ULA prefix
- memcpy(&netInfo.ThreadMeshPrefix[1], netInfo.ThreadExtendedPANId, 5);
- netInfo.FieldPresent.ThreadMeshPrefix = true;
- }
-
- // If the master key was not specified, generate a random key.
- if (!netInfo.FieldPresent.ThreadMasterKey)
- {
- err = Platform::Security::GetSecureRandomData(netInfo.ThreadMasterKey, NetworkInfo::kThreadMasterKeyLength);
- SuccessOrExit(err);
- netInfo.FieldPresent.ThreadMasterKey = true;
- }
-
- // If a PSKc was not specified, generate a random PSKc.
- if (!netInfo.FieldPresent.ThreadPSKc)
- {
- err = Platform::Security::GetSecureRandomData(netInfo.ThreadPSKc, NetworkInfo::kThreadPSKcLength);
- SuccessOrExit(err);
- netInfo.FieldPresent.ThreadPSKc = true;
- }
-
- // If a PAN Id was not specified, generate a random Id.
- if (netInfo.ThreadPANId == kThreadPANId_NotSpecified)
- {
- uint16_t randPANId;
- err = Platform::Security::GetSecureRandomData((uint8_t *) &randPANId, sizeof(randPANId));
- SuccessOrExit(err);
- netInfo.ThreadPANId = randPANId;
- }
-
- // If Thread channel not present, choose a random one.
- if (netInfo.ThreadChannel == kThreadChannel_NotSpecified)
- {
- err = Platform::Security::GetSecureRandomData((uint8_t *) &netInfo.ThreadChannel, sizeof(netInfo.ThreadChannel));
- SuccessOrExit(err);
- netInfo.ThreadChannel = (netInfo.ThreadChannel % 0xF) + 11; // Convert value to 11 thru 26
- }
-
-exit:
- return err;
-}
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
-template <class ImplClass>
-void GenericNetworkProvisioningServerImpl<ImplClass>::ContinueWiFiConnectivityTest(void)
-{
- // If waiting for Internet connectivity to be established ...
- if (mState == kState_TestConnectivity_WaitWiFiConnectivity)
- {
- // Check for IPv4 Internet connectivity. If available...
- if (ConnectivityMgr().HaveIPv4InternetConnectivity())
- {
- // TODO: perform positive test of connectivity to the Internet by pinging/connecting to
- // a well-known external server.
-
- // Send a Success result to the client.
- HandleConnectivityTestSuccess();
- }
-
- // Otherwise, arrange to return an appropriate error when the connectivity test times out.
- else
- {
- // TODO: Elaborate on the nature of the connectivity failure. Ideally the status
- // code would distinguish the following types of failures:
- // - Inability to connect to the local WiFi AP
- // - Lack of a suitable local address (RFC1918 for IPv4; Global address for IPv6)
- // - Lack of a default router
- // - Lack of a DNS server
- // - Inability to contact an external server.
- mTestConnectivityResult.mStatusProfileId = kChipProfile_NetworkProvisioning;
- mTestConnectivityResult.mStatusCode = kStatusCode_TestNetworkFailed;
- }
- }
-}
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-
-#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
-template <class ImplClass>
-void GenericNetworkProvisioningServerImpl<ImplClass>::ContinueThreadConnectivityTest(void)
-{
- // If waiting for Thread connectivity to be established...
- if (mState == kState_TestConnectivity_WaitThreadConnectivity)
- {
- // Check for connectivity to the Thread mesh. In this context, connectivity means
- // that this node knows of (i.e. has in its Thread neighbor table) another node
- // which is acting as a Thread router. If connectivity exists, send a Success
- // result to the client.
- if (ThreadStackMgr().HaveMeshConnectivity())
- {
- // TODO: perform positive test of connectivity to peer router node.
-
- // Send a Success result to the client.
- HandleConnectivityTestSuccess();
- }
-
- // If connectivity doesn't exist arrange to return an appropriate error when the
- // connectivity test times out.
- else
- {
- // TODO: Elaborate on the nature of the connectivity failure. Ideally the status
- // code would distinguish the following types of failures:
- // - Lack of a peer router detected in the Mesh (for end nodes, this means
- // lack of a parent router).
- // - Inability to contact/ping the peer router.
- mTestConnectivityResult.mStatusProfileId = kChipProfile_NetworkProvisioning;
- mTestConnectivityResult.mStatusCode = kStatusCode_NoRouterAvailable;
- }
- }
-}
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION || CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
-template <class ImplClass>
-void GenericNetworkProvisioningServerImpl<ImplClass>::HandleConnectivityTestSuccess(void)
-{
- // Reset the state.
- mState = kState_Idle;
- SystemLayer.CancelTimer(HandleConnectivityTestTimeOut, NULL);
-
- // Verify that the TestConnectivity request is still outstanding and if so,
- // send a Success response to the client
- if (GetCurrentOp() == kMsgType_TestConnectivity)
- {
- SendSuccessResponse();
- }
-}
-
-template <class ImplClass>
-void GenericNetworkProvisioningServerImpl<ImplClass>::HandleConnectivityTestTimeOut(::chip::System::Layer * aLayer,
- void * aAppState, ::chip::System::Error aError)
-{
- GenericNetworkProvisioningServerImpl<ImplClass> * self = &NetworkProvisioningSvrImpl();
-
- if (self->mState == kState_TestConnectivity_WaitWiFiConnectivity ||
- self->mState == kState_TestConnectivity_WaitThreadConnectivity)
- {
- const bool testingWiFi = (self->mState == kState_TestConnectivity_WaitWiFiConnectivity);
-
- ChipLogProgress(DeviceLayer, "%sTime out waiting for %s connectivity", sLogPrefix, (testingWiFi) ? "Internet" : "Thread");
-
- // Reset the state.
- self->mState = kState_Idle;
- SystemLayer.CancelTimer(HandleConnectivityTestTimeOut, NULL);
-
- // Verify that the TestConnectivity request is still outstanding; if so, send a StatusReport
- // to the client contain an appropriate error.
- if (self->GetCurrentOp() == kMsgType_TestConnectivity)
- {
- self->SendStatusReport(self->mTestConnectivityResult.mStatusProfileId, self->mTestConnectivityResult.mStatusCode);
- }
- }
-}
-
-#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION || CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
-} // namespace Internal
-} // namespace DeviceLayer
-} // namespace chip
-
-#endif // GENERIC_NETWORK_PROVISIONING_SERVER_IMPL_CPP
+++ /dev/null
-/*
- *
- * Copyright (c) 2020 Project CHIP Authors
- * Copyright (c) 2018 Nest Labs, Inc.
- * All rights reserved.
- *
- * 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 {
-namespace Internal {
-
-class NetworkProvisioningServerImpl;
-class DeviceNetworkInfo;
-
-template <class ImplClass>
-class GenericNetworkProvisioningServerImpl : public ::chip::Profiles::NetworkProvisioning::NetworkProvisioningServer,
- public ::chip::Profiles::NetworkProvisioning::NetworkProvisioningDelegate
-{
-protected:
- using ServerBaseClass = ::chip::Profiles::NetworkProvisioning::NetworkProvisioningServer;
- using NetworkInfo = ::chip::DeviceLayer::Internal::DeviceNetworkInfo;
- using NetworkType_t = ::chip::Profiles::NetworkProvisioning::NetworkType;
- using PacketBuffer = ::chip::System::PacketBuffer;
- using WiFiSecurityType_t = ::chip::Profiles::NetworkProvisioning::WiFiSecurityType;
-
- // ===== Members that implement the NetworkProvisioningServer abstract interface
-
- NetworkProvisioningDelegate * _GetDelegate(void);
- void _StartPendingScan(void);
- bool _ScanInProgress(void);
- void _OnPlatformEvent(const ChipDeviceEvent * event);
-
- // ===== Members that override virtual methods on NetworkProvisioningDelegate
-
- CHIP_ERROR HandleScanNetworks(uint8_t networkType) override;
- CHIP_ERROR HandleAddNetwork(PacketBuffer * networkInfoTLV) override;
- CHIP_ERROR HandleUpdateNetwork(PacketBuffer * networkInfoTLV) override;
- CHIP_ERROR HandleRemoveNetwork(uint32_t networkId) override;
- CHIP_ERROR HandleGetNetworks(uint8_t flags) override;
- CHIP_ERROR HandleEnableNetwork(uint32_t networkId) override;
- CHIP_ERROR HandleDisableNetwork(uint32_t networkId) override;
- CHIP_ERROR HandleTestConnectivity(uint32_t networkId) override;
- CHIP_ERROR HandleSetRendezvousMode(uint16_t rendezvousMode) override;
-
- // ===== Members that override virtual methods on NetworkProvisioningServer
-
- bool IsPairedToAccount(void) const override;
-
- // ===== Members for use by the NetworkProvisioningServer implementation
- // (both generic and platform-specific).
-
- enum State
- {
- kState_Idle = 0x00,
- kState_ScanNetworks_Pending = 0x01,
- kState_ScanNetworks_InProgress = 0x02,
- kState_TestConnectivity_WaitWiFiConnectivity = 0x03,
- kState_TestConnectivity_WaitThreadConnectivity = 0x03,
- };
-
- uint8_t mState;
- uint8_t mScanNetworkType;
- struct
- {
- uint32_t mStatusProfileId;
- uint16_t mStatusCode;
- } mTestConnectivityResult;
-
- CHIP_ERROR DoInit(void);
- int16_t GetCurrentOp(void) const;
- CHIP_ERROR HandleAddUpdateNetwork(PacketBuffer * networkInfoTLV, bool add);
- CHIP_ERROR HandleEnableDisableNetwork(uint32_t networkId, bool enable);
- CHIP_ERROR ValidateWiFiStationProvision(const DeviceNetworkInfo & netInfo, uint32_t & statusProfileId, uint16_t & statusCode);
- CHIP_ERROR ValidateThreadProvision(bool isUpdate, const DeviceNetworkInfo & netInfo, uint32_t & statusProfileId,
- uint16_t & statusCode);
- CHIP_ERROR SetThreadProvisionDefaults(bool isUpdate, DeviceNetworkInfo & netInfo);
- void ContinueWiFiConnectivityTest(void);
- void ContinueThreadConnectivityTest(void);
- void HandleConnectivityTestSuccess(void);
- static void HandleConnectivityTestTimeOut(::chip::System::Layer * aLayer, void * aAppState, ::chip::System::Error aError);
-
-private:
- ImplClass * Impl() { return static_cast<ImplClass *>(this); }
-};
-
-// Instruct the compiler to instantiate the template only when explicitly told to do so.
-extern template class GenericNetworkProvisioningServerImpl<NetworkProvisioningServerImpl>;
-
-template <class ImplClass>
-inline ::chip::Profiles::NetworkProvisioning::NetworkProvisioningDelegate *
-GenericNetworkProvisioningServerImpl<ImplClass>::_GetDelegate(void)
-{
- return this;
-}
-
-template <class ImplClass>
-inline int16_t GenericNetworkProvisioningServerImpl<ImplClass>::GetCurrentOp() const
-{
- return (mCurOp != NULL) ? mCurOpType : -1;
-}
-
-template <class ImplClass>
-inline bool GenericNetworkProvisioningServerImpl<ImplClass>::_ScanInProgress(void)
-{
- return mState == kState_ScanNetworks_InProgress;
-}
-
-} // namespace Internal
-} // namespace DeviceLayer
-} // namespace chip
+++ /dev/null
-/*
- *
- * Copyright (c) 2020 Project CHIP Authors
- * Copyright (c) 2018 Nest Labs, Inc.
- * All rights reserved.
- *
- * 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 {
-namespace Internal {
-
-class NetworkProvisioningServerImpl;
-
-/**
- * Provides network provisioning services for a CHIP Device.
- */
-class NetworkProvisioningServer
-{
- using ImplClass = NetworkProvisioningServerImpl;
-
-public:
- // Members for internal use by components within the CHIP Device Layer.
-
- CHIP_ERROR Init(void);
- // NetworkProvisioningDelegate * GetDelegate(void);
- void StartPendingScan(void);
- bool ScanInProgress(void);
- void OnPlatformEvent(const CHIPDeviceEvent * event);
-
-protected:
- // Construction/destruction limited to subclasses.
- NetworkProvisioningServer() = default;
- ~NetworkProvisioningServer() = default;
-
- // No copy, move or assignment.
- NetworkProvisioningServer(const NetworkProvisioningServer &) = delete;
- NetworkProvisioningServer(const NetworkProvisioningServer &&) = delete;
- NetworkProvisioningServer & operator=(const NetworkProvisioningServer &) = delete;
-};
-
-/**
- * Returns a reference to the public interface of the NetworkProvisioningServer singleton object.
- *
- * Internal components should use this to access features of the NetworkProvisioningServer object
- * that are common to all platforms.
- */
-extern NetworkProvisioningServer & NetworkProvisioningSvr();
-
-} // namespace Internal
-} // namespace DeviceLayer
-} // namespace chip
-
-/* Include a header file containing the implementation of the NetworkProvisioningServer
- * object for the selected platform.
- */
-#ifdef EXTERNAL_NETWORKPROVISIONINGSERVERIMPL_HEADER
-#include EXTERNAL_NETWORKPROVISIONINGSERVERIMPL_HEADER
-#elif defined(CHIP_DEVICE_LAYER_TARGET)
-#define NETWORKPROVISIONINGSERVERIMPL_HEADER <platform/CHIP_DEVICE_LAYER_TARGET/NetworkProvisioningServerImpl.h>
-#include NETWORKPROVISIONINGSERVERIMPL_HEADER
-#endif // defined(CHIP_DEVICE_LAYER_TARGET)
-
-namespace chip {
-namespace DeviceLayer {
-namespace Internal {
-
-inline CHIP_ERROR NetworkProvisioningServer::Init(void)
-{
- return static_cast<ImplClass *>(this)->_Init();
-}
-
-inline void NetworkProvisioningServer::StartPendingScan(void)
-{
- static_cast<ImplClass *>(this)->_StartPendingScan();
-}
-
-inline bool NetworkProvisioningServer::ScanInProgress(void)
-{
- return static_cast<ImplClass *>(this)->_ScanInProgress();
-}
-
-inline void NetworkProvisioningServer::OnPlatformEvent(const CHIPDeviceEvent * event)
-{
- static_cast<ImplClass *>(this)->_OnPlatformEvent(event);
-}
-
-} // namespace Internal
-} // namespace DeviceLayer
-} // namespace chip
#if CHIP_SYSTEM_CONFIG_USE_LWIP
+ if (!msg.HasSoleOwnership())
+ {
+ // when retaining a buffer, the caller expects the msg to be unmodified.
+ // LwIP stack will normally prepend the packet headers as the packet traverses
+ // the UDP/IP/netif layers, which normally modifies the packet. We need to clone
+ // msg into a fresh object in this case, and queues that for transmission, leaving
+ // the original msg available after return.
+ msg = msg.CloneData();
+ VerifyOrExit(!msg.IsNull(), res = INET_ERROR_NO_MEMORY);
+ }
+
// Lock LwIP stack
LOCK_TCPIP_CORE();
/**
* @brief
* Called when a value is returned from the storage.
- * This is useful for GetKeyValue() API call.
+ * This is useful for AsyncGetKeyValue() API call.
*
* @param[in] key Key for which the value is being returned
* @param[in] value Value or nullptr if not found.
*/
- virtual void OnValue(const char * key, const char * value) = 0;
+ virtual void OnPersistentStorageValue(const char * key, const char * value) = 0;
/**
* @brief
* @param[in] op Operation that was being performed on the key
* @param[in] result CHIP_NO_ERROR or corresponding error code
*/
- virtual void OnStatus(const char * key, Operation op, CHIP_ERROR result) = 0;
+ virtual void OnPersistentStorageStatus(const char * key, Operation op, CHIP_ERROR result) = 0;
};
class DLL_EXPORT PersistentStorageDelegate
*
* @param[in] delegate The callback object
*/
- virtual void SetDelegate(PersistentStorageResultDelegate * delegate) = 0;
+ virtual void SetStorageDelegate(PersistentStorageResultDelegate * delegate) = 0;
/**
* @brief
*
* @param[in] key Key to lookup
*/
- virtual void GetKeyValue(const char * key) = 0;
+ virtual void AsyncGetKeyValue(const char * key) = 0;
/**
* @brief
* The output size could be larger than input value. In
* such cases, the user should allocate the buffer large
* enough (>= output size), and call the API again. In this
- * case GetKeyValue will place as many bytes as it can in
+ * case SyncGetKeyValue will place as many bytes as it can in
* the buffer and return CHIP_ERROR_NO_MEMORY.
*
* If value is null, the input size is treated as 0.
* @return CHIP_ERROR_NO_MEMORY if the input buffer is not big enough for
* the value.
*/
- virtual CHIP_ERROR GetKeyValue(const char * key, char * value, uint16_t & size) { return CHIP_ERROR_NOT_IMPLEMENTED; }
+ virtual CHIP_ERROR SyncGetKeyValue(const char * key, char * value, uint16_t & size) { return CHIP_ERROR_NOT_IMPLEMENTED; }
/**
* @brief
* such cases, the user should allocate the buffer large
* enough (>= output length), and call the API again.
*/
- virtual CHIP_ERROR GetKeyValue(const char * key, void * buffer, uint16_t & size) { return CHIP_ERROR_NOT_IMPLEMENTED; }
+ virtual CHIP_ERROR SyncGetKeyValue(const char * key, void * buffer, uint16_t & size) { return CHIP_ERROR_NOT_IMPLEMENTED; }
/**
* @brief
* @param[in] key Key to be set
* @param[in] value Value to be set
*/
- virtual void SetKeyValue(const char * key, const char * value) = 0;
+ virtual void AsyncSetKeyValue(const char * key, const char * value) = 0;
/**
* @brief
* @param[in] value Value to be set
* @param[in] size Size of the Value
*/
- virtual CHIP_ERROR SetKeyValue(const char * key, const void * value, uint16_t size) { return CHIP_ERROR_NOT_IMPLEMENTED; }
+ virtual CHIP_ERROR SyncSetKeyValue(const char * key, const void * value, uint16_t size) { return CHIP_ERROR_NOT_IMPLEMENTED; }
/**
* @brief
*
* @param[in] key Key to be deleted
*/
- virtual void DeleteKeyValue(const char * key) = 0;
+ virtual void AsyncDeleteKeyValue(const char * key) = 0;
};
} // namespace chip
UnsolicitedMessageHandler * matchingUMH = nullptr;
bool sendAckAndCloseExchange = false;
- if (!IsMsgCounterSyncMessage(payloadHeader) && packetHeader.IsPeerGroupMsgIdNotSynchronized())
+ if (!IsMsgCounterSyncMessage(payloadHeader) && session.IsPeerGroupMsgIdNotSynchronized())
{
Transport::PeerConnectionState * state = mSessionMgr->GetPeerConnectionState(session);
VerifyOrReturn(state != nullptr);
"../include/platform/internal/GenericConnectivityManagerImpl_NoWiFi.h",
"../include/platform/internal/GenericConnectivityManagerImpl_Thread.h",
"../include/platform/internal/GenericConnectivityManagerImpl_WiFi.h",
- "../include/platform/internal/GenericNetworkProvisioningServerImpl.h",
"../include/platform/internal/GenericPlatformManagerImpl.h",
"../include/platform/internal/GenericPlatformManagerImpl_FreeRTOS.h",
"../include/platform/internal/GenericPlatformManagerImpl_POSIX.h",
"../include/platform/internal/GenericSoftwareUpdateManagerImpl.h",
"../include/platform/internal/GenericSoftwareUpdateManagerImpl_BDX.h",
- "../include/platform/internal/NetworkProvisioningServer.h",
"../include/platform/internal/testing/ConfigUnitTest.h",
"GeneralUtils.cpp",
"Globals.cpp",
"ESP32/Logging.cpp",
"ESP32/LwIPCoreLock.cpp",
"ESP32/MdnsImpl.cpp",
- "ESP32/NetworkProvisioningServerImpl.h",
"ESP32/PlatformManagerImpl.cpp",
"ESP32/PlatformManagerImpl.h",
"ESP32/ServiceProvisioning.cpp",
"K32W/KeyValueStoreManagerImpl.cpp",
"K32W/KeyValueStoreManagerImpl.h",
"K32W/Logging.cpp",
- "K32W/NetworkProvisioningServerImpl.h",
"K32W/PlatformManagerImpl.cpp",
"K32W/PlatformManagerImpl.h",
"K32W/SoftwareUpdateManagerImpl.h",
using namespace chip::Ble;
/**
- * Concrete implementation of the NetworkProvisioningServer singleton object for the EFR32 platforms.
+ * Concrete implementation of the BLEManager singleton object for the EFR32 platforms.
*/
class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePlatformDelegate, private BleApplicationDelegate
{
namespace chip {
namespace DeviceLayer {
-namespace Internal {
-class NetworkProvisioningServerImpl;
-}
-
/**
* Concrete implementation of the ConfigurationManager singleton object for the EFR32 platform.
*/
// ===== Members for internal use by the following friends.
- friend class Internal::NetworkProvisioningServerImpl;
friend ConfigurationManager & ConfigurationMgr(void);
friend ConfigurationManagerImpl & ConfigurationMgrImpl(void);
+++ /dev/null
-/*
- *
- * Copyright (c) 2020 Project CHIP Authors
- * Copyright (c) 2019 Nest Labs, Inc.
- *
- * 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.
- */
-/* this file behaves like a config.h, comes first */
-#include <platform/internal/CHIPDeviceLayerInternal.h>
-
-#include <platform/internal/NetworkProvisioningServer.h>
-
-#include <core/CHIPTLV.h>
-#include <platform/internal/DeviceNetworkInfo.h>
-#include <platform/internal/GenericNetworkProvisioningServerImpl.cpp>
-#include <protocols/Protocols.h>
-
-namespace chip {
-namespace DeviceLayer {
-namespace Internal {
-
-NetworkProvisioningServerImpl NetworkProvisioningServerImpl::sInstance;
-
-CHIP_ERROR NetworkProvisioningServerImpl::_Init(void)
-{
- return GenericNetworkProvisioningServerImpl<NetworkProvisioningServerImpl>::DoInit();
-}
-
-} // namespace Internal
-} // namespace DeviceLayer
-} // namespace chip
+++ /dev/null
-/*
- *
- * Copyright (c) 2020 Project CHIP Authors
- * Copyright (c) 2019 Nest Labs, Inc.
- *
- * 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/GenericNetworkProvisioningServerImpl.h>
-
-namespace chip {
-namespace DeviceLayer {
-namespace Internal {
-
-/**
- * Concrete implementation of the NetworkProvisioningServer singleton object for the
- * Silicon Labs EFR32 platforms.
- */
-class NetworkProvisioningServerImpl final : public NetworkProvisioningServer,
- public Internal::GenericNetworkProvisioningServerImpl<NetworkProvisioningServerImpl>
-{
- // Allow the NetworkProvisioningServer interface class to delegate method calls to
- // the implementation methods provided by this class.
- friend class Internal::NetworkProvisioningServer;
-
- // Allow the GenericNetworkProvisioningServerImpl base class to access helper methods
- // and types defined on this class.
- friend class Internal::GenericNetworkProvisioningServerImpl<NetworkProvisioningServerImpl>;
-
-private:
- // ===== Members that implement the NetworkProvisioningServer public interface.
-
- CHIP_ERROR _Init(void);
-
- // ===== Members for internal use by the following friends.
-
- friend ::chip::DeviceLayer::Internal::NetworkProvisioningServer & NetworkProvisioningSvr(void);
- friend NetworkProvisioningServerImpl & NetworkProvisioningSvrImpl(void);
-
- static NetworkProvisioningServerImpl sInstance;
-};
-
-/**
- * Returns a reference to the public interface of the NetworkProvisioningServer singleton object.
- *
- * Internal components should use this to access features of the NetworkProvisioningServer object
- * that are common to all platforms.
- */
-inline NetworkProvisioningServer & NetworkProvisioningSvr(void)
-{
- return NetworkProvisioningServerImpl::sInstance;
-}
-
-/**
- * Returns the platform-specific implementation of the NetworkProvisioningServer singleton object.
- *
- * Internal components can use this to gain access to features of the NetworkProvisioningServer
- * that are specific to the ESP32 platform.
- */
-inline NetworkProvisioningServerImpl & NetworkProvisioningSvrImpl(void)
-{
- return NetworkProvisioningServerImpl::sInstance;
-}
-
-} // namespace Internal
-} // namespace DeviceLayer
-} // namespace chip
#include "em_device.h"
#include "em_se.h"
+#include "sl_malloc.h"
/**
* Enable FreeRTOS threading support
#define MBEDTLS_CIPHER_MODE_CTR
#define MBEDTLS_TRNG_C
-/**
- * \def MBEDTLS_AES_ALT
- *
- * Enable hardware acceleration for the AES block cipher
- *
- * Module: sl_crypto/src/crypto_aes.c for devices with CRYPTO
- * sl_crypto/src/aes_aes.c for devices with AES
- *
- * See MBEDTLS_AES_C for more information.
- */
-#define MBEDTLS_AES_ALT
-
-#if defined(EFR32MG12)
-#define MBEDTLS_SHA1_C
-#define TRNG_PRESENT
-
-#if defined(CRYPTO_COUNT) && (CRYPTO_COUNT > 0)
-/**
- * \def MBEDTLS_ECP_INTERNAL_ALT
- * \def ECP_SHORTWEIERSTRASS
- * \def MBEDTLS_ECP_ADD_MIXED_ALT
- * \def MBEDTLS_ECP_DOUBLE_JAC_ALT
- * \def MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT
- * \def MBEDTLS_ECP_NORMALIZE_JAC_ALT
- *
- * Enable hardware acceleration for the elliptic curve over GF(p) library.
- *
- * Module: sl_crypto/src/crypto_ecp.c
- * Caller: library/ecp.c
- *
- * Requires: MBEDTLS_BIGNUM_C, MBEDTLS_ECP_C and at least one
- * MBEDTLS_ECP_DP_XXX_ENABLED and (CRYPTO_COUNT > 0)
- */
-#define MBEDTLS_ECP_INTERNAL_ALT
-#define ECP_SHORTWEIERSTRASS
-#define MBEDTLS_ECP_ADD_MIXED_ALT
-#define MBEDTLS_ECP_DOUBLE_JAC_ALT
-#define MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT
-#define MBEDTLS_ECP_NORMALIZE_JAC_ALT
-#define MBEDTLS_ECP_RANDOMIZE_JAC_ALT
-
-/**
- * \def MBEDTLS_SHA1_ALT
- *
- * Enable hardware acceleration for the SHA-224 and SHA-256 cryptographic
- * hash algorithms.
- * Module: sl_crypto/src/crypto_sha.c
- * Caller: library/mbedtls_md.c
- * library/ssl_cli.c
- * library/ssl_srv.c
- * library/ssl_tls.c
- * library/x509write_crt.c
- *
- * Requires: MBEDTLS_SHA1_C and (CRYPTO_COUNT > 0)
- * See MBEDTLS_SHA1_C for more information.
- */
-#define MBEDTLS_SHA1_ALT
-
-/**
- * \def MBEDTLS_SHA256_ALT
- *
- * Enable hardware acceleration for the SHA-224 and SHA-256 cryptographic
- * hash algorithms.
- *
- * Module: sl_crypto/src/crypto_sha.c
- * Caller: library/entropy.c
- * library/mbedtls_md.c
- * library/ssl_cli.c
- * library/ssl_srv.c
- * library/ssl_tls.c
- *
- * Requires: MBEDTLS_SHA256_C and (CRYPTO_COUNT > 0)
- * See MBEDTLS_SHA256_C for more information.
- */
-#define MBEDTLS_SHA256_ALT
-#endif
-
-#elif defined(EFR32MG21)
-#define MBEDTLS_SHA1_ALT
-#define MBEDTLS_SHA1_PROCESS_ALT
-#define MBEDTLS_SHA256_ALT
-#define MBEDTLS_SHA256_PROCESS_ALT
-#define MBEDTLS_SHA512_ALT
-#define MBEDTLS_SHA512_PROCESS_ALT
-
-#define MBEDTLS_CCM_ALT
-#define MBEDTLS_CMAC_ALT
-
-/* Turning on ECC acceleration is dependant on not requiring curve25519 when
- * running on EFR32xG21A devices */
-#if (defined(_SILICON_LABS_SECURITY_FEATURE) && (_SILICON_LABS_SECURITY_FEATURE == _SILICON_LABS_SECURITY_FEATURE_VAULT)) || \
- !defined(MBEDTLS_ECP_DP_CURVE25519_ENABLED)
-#define MBEDTLS_ECDH_GEN_PUBLIC_ALT
-#define MBEDTLS_ECDSA_GENKEY_ALT
-#define MBEDTLS_ECDH_COMPUTE_SHARED_ALT
-#define MBEDTLS_ECDSA_SIGN_ALT
-#define MBEDTLS_ECDSA_VERIFY_ALT
-#endif /* EFR32xG21B or curve25519 not enabled */
-#endif // Familiy Selection
-
#if defined(MBEDTLS_ECP_ALT) && !defined(MBEDTLS_ECP_RESTARTABLE)
typedef void mbedtls_ecp_restart_ctx;
#endif
#define MBEDTLS_AES_ROM_TABLES
#define MBEDTLS_ASN1_PARSE_C
#define MBEDTLS_ASN1_WRITE_C
+#define MBEDTLS_BASE64_C
#define MBEDTLS_BIGNUM_C
#define MBEDTLS_CCM_C
#define MBEDTLS_CIPHER_C
+#define MBEDTLS_CIPHER_MODE_CBC
+#define MBEDTLS_CIPHER_MODE_CFB
#define MBEDTLS_CMAC_C
#define MBEDTLS_CTR_DRBG_C
+#define MBEDTLS_ECDH_LEGACY_CONTEXT
+#define MBEDTLS_ECDSA_C
#define MBEDTLS_ECJPAKE_C
#define MBEDTLS_ECP_DP_SECP256R1_ENABLED
#define MBEDTLS_ECP_NIST_OPTIM
+#define MBEDTLS_ENTROPY_FORCE_SHA256
#define MBEDTLS_ENTROPY_HARDWARE_ALT
+#define MBEDTLS_ERROR_STRERROR_DUMMY
#define MBEDTLS_HAVE_ASM
+#define MBEDTLS_HKDF_C
#define MBEDTLS_HMAC_DRBG_C
+#define MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
#define MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED
+#define MBEDTLS_KEY_EXCHANGE_PSK_ENABLED
#define MBEDTLS_MD_C
#define MBEDTLS_NO_PLATFORM_ENTROPY
+#define MBEDTLS_OID_C
+#define MBEDTLS_PEM_PARSE_C
+#define MBEDTLS_PEM_WRITE_C
#define MBEDTLS_PK_C
#define MBEDTLS_PK_PARSE_C
#define MBEDTLS_PK_WRITE_C
+#define MBEDTLS_PKCS5_C
#define MBEDTLS_PLATFORM_C
#define MBEDTLS_PLATFORM_MEMORY
#define MBEDTLS_PLATFORM_NO_STD_FUNCTIONS
+#define MBEDTLS_PSA_CRYPTO_C
+#define MBEDTLS_PSA_CRYPTO_CONFIG
+#define MBEDTLS_PSA_CRYPTO_DRIVERS
+#define MBEDTLS_PSA_CRYPTO_BUILTIN_KEYS
+#define MBEDTLS_PSA_CRYPTO_STORAGE_C
#define MBEDTLS_SHA256_SMALLER
+#define MBEDTLS_SHA512_C
#define MBEDTLS_SSL_CLI_C
+#define MBEDTLS_SSL_COOKIE_C
#define MBEDTLS_SSL_DTLS_ANTI_REPLAY
#define MBEDTLS_SSL_DTLS_HELLO_VERIFY
#define MBEDTLS_SSL_EXPORT_KEYS
+#define MBEDTLS_SSL_KEEP_PEER_CERTIFICATE
#define MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
#define MBEDTLS_SSL_PROTO_TLS1_2
#define MBEDTLS_SSL_PROTO_DTLS
+#define MBEDTLS_SSL_SRV_C
#define MBEDTLS_SSL_TLS_C
-#define MBEDTLS_ERROR_STRERROR_DUMMY
-#define MBEDTLS_HKDF_C
#define MBEDTLS_X509_CREATE_C
#define MBEDTLS_X509_CSR_WRITE_C
-#define MBEDTLS_BASE64_C
-#define MBEDTLS_PEM_WRITE_C
-#define MBEDTLS_PKCS5_C
-
-#if OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE || OPENTHREAD_CONFIG_COMMISSIONER_ENABLE || OPENTHREAD_CONFIG_COAP_SECURE_API_ENABLE
-#define MBEDTLS_SSL_COOKIE_C
-#define MBEDTLS_SSL_SRV_C
-#endif
-
-#if OPENTHREAD_CONFIG_COAP_SECURE_API_ENABLE
-#define MBEDTLS_KEY_EXCHANGE_PSK_ENABLED
-#define MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
-#endif
-
-#ifdef MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
-#define MBEDTLS_BASE64_C
-#define MBEDTLS_ECDSA_C
-#define MBEDTLS_OID_C
-#define MBEDTLS_PEM_PARSE_C
-#define MBEDTLS_X509_USE_C
+#define MBEDTLS_X509_CRL_PARSE_C
#define MBEDTLS_X509_CRT_PARSE_C
-#endif
+#define MBEDTLS_X509_CSR_PARSE_C
+#define MBEDTLS_X509_USE_C
#define MBEDTLS_MPI_WINDOW_SIZE 1 /**< Maximum windows size used. */
#define MBEDTLS_MPI_MAX_SIZE 32 /**< Maximum number of bytes for usable MPIs. */
#define MBEDTLS_ECP_MAX_BITS 256 /**< Maximum bit size of groups */
#define MBEDTLS_ECP_WINDOW_SIZE 2 /**< Maximum window size used */
#define MBEDTLS_ECP_FIXED_POINT_OPTIM 0 /**< Enable fixed-point speed-up */
-#define MBEDTLS_ENTROPY_MAX_SOURCES 1 /**< Maximum number of sources supported */
+#define MBEDTLS_ENTROPY_MAX_SOURCES 2 /**< Maximum number of sources supported */
-#define MBEDTLS_PLATFORM_STD_CALLOC calloc /**< Default allocator to use, can be undefined */
-#define MBEDTLS_PLATFORM_STD_FREE free /**< Default free to use, can be undefined */
+#define MBEDTLS_PLATFORM_STD_CALLOC sl_calloc /**< Default allocator to use, can be undefined */
+#define MBEDTLS_PLATFORM_STD_FREE sl_free /**< Default free to use, can be undefined */
#if OPENTHREAD_CONFIG_COAP_SECURE_API_ENABLE
#define MBEDTLS_SSL_MAX_CONTENT_LEN 900 /**< Maxium fragment length in bytes */
#define MBEDTLS_SSL_CIPHERSUITES MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8
-#if defined(MBEDTLS_USER_CONFIG_FILE)
-#include MBEDTLS_USER_CONFIG_FILE
-#endif
+#include "config-device-acceleration.h"
+#include "mbedtls/check_config.h"
// Bluetooth task
#ifndef BLUETOOTH_STACK_SIZE
-#define BLUETOOTH_STACK_SIZE (2048)
+#define BLUETOOTH_STACK_SIZE (1024)
#endif
static void BluetoothTask(void * p_arg);
static TaskHandle_t BluetoothTaskHandle = NULL;
// Linklayer task
#ifndef LINKLAYER_STACK_SIZE
-#define LINKLAYER_STACK_SIZE (2048)
+#define LINKLAYER_STACK_SIZE (1024)
#endif
static void LinklayerTask(void * p_arg);
static TaskHandle_t LinklayerTaskHandle = NULL;
namespace Internal {
/**
- * Concrete implementation of the NetworkProvisioningServer singleton object for the ESP32 platform.
+ * Concrete implementation of the BLEManager singleton object for the ESP32 platform.
*/
class BLEManagerImpl final : public BLEManager,
private Ble::BleLayer,
namespace chip {
namespace DeviceLayer {
-namespace Internal {
-class NetworkProvisioningServerImpl;
-}
-
/**
* Concrete implementation of the ConfigurationManager singleton object for the ESP32 platform.
*/
// ===== Members for internal use by the following friends.
- friend class Internal::NetworkProvisioningServerImpl;
friend ConfigurationManager & ConfigurationMgr(void);
friend ConfigurationManagerImpl & ConfigurationMgrImpl(void);
class PlatformManagerImpl;
-namespace Internal {
-
-class NetworkProvisioningServerImpl;
-template <class ImplClass>
-class GenericNetworkProvisioningServerImpl;
-
-} // namespace Internal
-
/**
* Concrete implementation of the ConnectivityManager singleton object for the ESP32 platform.
*/
+++ /dev/null
-/*
- *
- * Copyright (c) 2020-2021 Project CHIP Authors
- * Copyright (c) 2018 Nest Labs, Inc.
- * All rights reserved.
- *
- * 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.
- */
-/* this file behaves like a config.h, comes first */
-#include <platform/internal/CHIPDeviceLayerInternal.h>
-
-#include <platform/internal/GenericNetworkProvisioningServerImpl.cpp>
-#include <platform/internal/NetworkProvisioningServer.h>
-
-#include <core/CHIPTLV.h>
-#include <platform/ESP32/ESP32Utils.h>
-#include <platform/internal/DeviceNetworkInfo.h>
-#include <system/TLVPacketBufferBackingStore.h>
-
-#include "esp_event.h"
-#include "esp_wifi.h"
-
-using namespace ::chip;
-using namespace ::chip::TLV;
-
-using Profiles::kChipProfile_Common;
-
-namespace chip {
-namespace DeviceLayer {
-namespace Internal {
-
-NetworkProvisioningServerImpl NetworkProvisioningServerImpl::sInstance;
-
-CHIP_ERROR NetworkProvisioningServerImpl::_Init(void)
-{
- return GenericNetworkProvisioningServerImpl<NetworkProvisioningServerImpl>::DoInit();
-}
-
-void NetworkProvisioningServerImpl::_OnPlatformEvent(const ChipDeviceEvent * event)
-{
- CHIP_ERROR err;
-
- // Handle ESP system events...
- if (event->Type == DeviceEventType::kESPSystemEvent)
- {
- switch (event->Platform.ESPSystemEvent.event_id)
- {
- case SYSTEM_EVENT_SCAN_DONE:
- ChipLogProgress(DeviceLayer, "SYSTEM_EVENT_SCAN_DONE");
- HandleScanDone();
- break;
- default:
- break;
- }
- }
-
- // Handle a change in WiFi connectivity...
- else if (event->Type == DeviceEventType::kWiFiConnectivityChange)
- {
- // Whenever WiFi connectivity is established, update the persisted WiFi
- // station security type to match that used by the connected AP.
- if (event->WiFiConnectivityChange.Result == kConnectivity_Established)
- {
- wifi_ap_record_t ap_info;
-
- err = esp_wifi_sta_get_ap_info(&ap_info);
- SuccessOrExit(err);
-
- WiFiSecurityType secType = ESP32Utils::WiFiAuthModeToChipWiFiSecurityType(ap_info.authmode);
-
- err = ConfigurationMgrImpl().UpdateWiFiStationSecurityType(secType);
- SuccessOrExit(err);
- }
- }
-
- // Propagate the event to the GenericNetworkProvisioningServerImpl<> base class so
- // that it can take action on specific events.
- GenericImplClass::_OnPlatformEvent(event);
-
-exit:
- return;
-}
-
-CHIP_ERROR NetworkProvisioningServerImpl::GetWiFiStationProvision(NetworkInfo & netInfo, bool includeCredentials)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
- wifi_config_t stationConfig;
-
- netInfo.Reset();
-
- err = esp_wifi_get_config(WIFI_IF_STA, &stationConfig);
- SuccessOrExit(err);
-
- VerifyOrExit(stationConfig.sta.ssid[0] != 0, err = CHIP_ERROR_INCORRECT_STATE);
-
- netInfo.NetworkId = kWiFiStationNetworkId;
- netInfo.FieldPresent.NetworkId = true;
- netInfo.NetworkType = kNetworkType_WiFi;
- memcpy(netInfo.WiFiSSID, stationConfig.sta.ssid, min(strlen((char *) stationConfig.sta.ssid) + 1, sizeof(netInfo.WiFiSSID)));
- netInfo.WiFiMode = kWiFiMode_Managed;
- netInfo.WiFiRole = kWiFiRole_Station;
-
- err = ConfigurationMgrImpl().GetWiFiStationSecurityType(netInfo.WiFiSecurityType);
- if (err == CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND)
- {
- err = CHIP_NO_ERROR;
- }
- SuccessOrExit(err);
-
- if (includeCredentials)
- {
- netInfo.WiFiKeyLen = min(strlen((char *) stationConfig.sta.password), sizeof(netInfo.WiFiKey));
- memcpy(netInfo.WiFiKey, stationConfig.sta.password, netInfo.WiFiKeyLen);
- }
-
-exit:
- return err;
-}
-
-CHIP_ERROR NetworkProvisioningServerImpl::SetWiFiStationProvision(const NetworkInfo & netInfo)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
- wifi_config_t wifiConfig;
-
- // Ensure that ESP station mode is enabled. This is required before esp_wifi_set_config(ESP_IF_WIFI_STA,...)
- // can be called.
- err = ESP32Utils::EnableStationMode();
- SuccessOrExit(err);
-
- // Initialize an ESP wifi_config_t structure based on the new provision information.
- memset(&wifiConfig, 0, sizeof(wifiConfig));
- memcpy(wifiConfig.sta.ssid, netInfo.WiFiSSID, min(strlen(netInfo.WiFiSSID) + 1, sizeof(wifiConfig.sta.ssid)));
- memcpy(wifiConfig.sta.password, netInfo.WiFiKey, min((size_t) netInfo.WiFiKeyLen, sizeof(wifiConfig.sta.password)));
- if (netInfo.WiFiSecurityType == kWiFiSecurityType_NotSpecified)
- {
- wifiConfig.sta.scan_method = WIFI_ALL_CHANNEL_SCAN;
- }
- else
- {
- wifiConfig.sta.scan_method = WIFI_FAST_SCAN;
- wifiConfig.sta.threshold.rssi = 0;
- switch (netInfo.WiFiSecurityType)
- {
- case kWiFiSecurityType_None:
- wifiConfig.sta.threshold.authmode = WIFI_AUTH_OPEN;
- break;
- case kWiFiSecurityType_WEP:
- wifiConfig.sta.threshold.authmode = WIFI_AUTH_WEP;
- break;
- case kWiFiSecurityType_WPAPersonal:
- wifiConfig.sta.threshold.authmode = WIFI_AUTH_WPA_PSK;
- break;
- case kWiFiSecurityType_WPA2Personal:
- wifiConfig.sta.threshold.authmode = WIFI_AUTH_WPA2_PSK;
- break;
- case kWiFiSecurityType_WPA2Enterprise:
- wifiConfig.sta.threshold.authmode = WIFI_AUTH_WPA2_ENTERPRISE;
- break;
- default:
- ExitNow(err = CHIP_ERROR_INVALID_ARGUMENT);
- }
- }
- wifiConfig.sta.sort_method = WIFI_CONNECT_AP_BY_SIGNAL;
-
- // Configure the ESP WiFi interface.
- err = esp_wifi_set_config(WIFI_IF_STA, &wifiConfig);
- if (err != ESP_OK)
- {
- ChipLogError(DeviceLayer, "esp_wifi_set_config() failed: %s", chip::ErrorStr(err));
- }
- SuccessOrExit(err);
-
- // Store the WiFi Station security type separately in NVS. This is necessary because the ESP wifi API
- // does not provide a way to query the configured WiFi auth mode.
- err = ConfigurationMgrImpl().UpdateWiFiStationSecurityType(netInfo.WiFiSecurityType);
- SuccessOrExit(err);
-
- ChipLogProgress(DeviceLayer, "WiFi station provision set (SSID: %s)", netInfo.WiFiSSID);
-
-exit:
- return err;
-}
-
-CHIP_ERROR NetworkProvisioningServerImpl::ClearWiFiStationProvision(void)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
- wifi_config_t stationConfig;
-
- // Clear the ESP WiFi station configuration.
- memset(&stationConfig, 0, sizeof(stationConfig));
- esp_wifi_set_config(WIFI_IF_STA, &stationConfig);
-
- // Clear the persisted WiFi station security type.
- ConfigurationMgrImpl().UpdateWiFiStationSecurityType(kWiFiSecurityType_NotSpecified);
-
- return err;
-}
-
-CHIP_ERROR NetworkProvisioningServerImpl::InitiateWiFiScan(void)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
- wifi_scan_config_t scanConfig;
-
- // Initiate an active scan using the default dwell times. Configure the scan to return hidden networks.
- memset(&scanConfig, 0, sizeof(scanConfig));
- scanConfig.show_hidden = 1;
- scanConfig.scan_type = WIFI_SCAN_TYPE_ACTIVE;
- err = esp_wifi_scan_start(&scanConfig, false);
- SuccessOrExit(err);
-
-#if CHIP_DEVICE_CONFIG_WIFI_SCAN_COMPLETION_TIMEOUT
- // Arm timer in case we never get the scan done event.
- SystemLayer.StartTimer(CHIP_DEVICE_CONFIG_WIFI_SCAN_COMPLETION_TIMEOUT, HandleScanTimeOut, NULL);
-#endif // CHIP_DEVICE_CONFIG_WIFI_SCAN_COMPLETION_TIMEOUT
-
-exit:
- return err;
-}
-
-void NetworkProvisioningServerImpl::HandleScanDone()
-{
- CHIP_ERROR err;
- wifi_ap_record_t * scanResults = NULL;
- uint16_t scanResultCount;
- uint16_t encodedResultCount;
-
- // If we receive a SCAN DONE event for a scan that we didn't initiate, simply ignore it.
- VerifyOrExit(mState == kState_ScanNetworks_InProgress, err = CHIP_NO_ERROR);
-
- mState = kState_Idle;
-
-#if CHIP_DEVICE_CONFIG_WIFI_SCAN_COMPLETION_TIMEOUT
- // Cancel the scan timeout timer.
- SystemLayer.CancelTimer(HandleScanTimeOut, NULL);
-#endif // CHIP_DEVICE_CONFIG_WIFI_SCAN_COMPLETION_TIMEOUT
-
- // Determine the number of scan results found.
- err = esp_wifi_scan_get_ap_num(&scanResultCount);
- SuccessOrExit(err);
-
- // Only return up to CHIP_DEVICE_CONFIG_MAX_SCAN_NETWORKS_RESULTS.
- scanResultCount = min(scanResultCount, (uint16_t) CHIP_DEVICE_CONFIG_MAX_SCAN_NETWORKS_RESULTS);
-
- // Allocate a buffer to hold the scan results array.
- scanResults = (wifi_ap_record_t *) chip::Platform::MemoryAlloc(scanResultCount * sizeof(wifi_ap_record_t));
- VerifyOrExit(scanResults != NULL, err = CHIP_ERROR_NO_MEMORY);
-
- // Collect the scan results from the ESP WiFi driver. Note that this also *frees*
- // the internal copy of the results.
- err = esp_wifi_scan_get_ap_records(&scanResultCount, scanResults);
- SuccessOrExit(err);
-
- // If the ScanNetworks request is still outstanding...
- if (GetCurrentOp() == kMsgType_ScanNetworks)
- {
- System::PacketBufferTLVWriter writer;
- TLVType outerContainerType;
-
- // Sort results by rssi.
- qsort(scanResults, scanResultCount, sizeof(*scanResults), ESP32Utils::OrderScanResultsByRSSI);
-
- // Allocate a packet buffer to hold the encoded scan results.
- PacketBufferHandle respBuf =
- System::PacketBufferHandle::New(PacketBuffer::kMaxSize - 1, System::PacketBuffer::kDefaultHeaderReserve + 1);
- VerifyOrExit(!respBuf.IsNull(), err = CHIP_ERROR_NO_MEMORY);
-
- // Encode the list of scan results into the response buffer. If the encoded size of all
- // the results exceeds the size of the buffer, encode only what will fit.
- writer.Init(std::move(respBuf));
- err = writer.StartContainer(AnonymousTag, kTLVType_Array, outerContainerType);
- SuccessOrExit(err);
- for (encodedResultCount = 0; encodedResultCount < scanResultCount; encodedResultCount++)
- {
- NetworkInfo netInfo;
- const wifi_ap_record_t & scanResult = scanResults[encodedResultCount];
-
- netInfo.Reset();
- netInfo.NetworkType = kNetworkType_WiFi;
- memcpy(netInfo.WiFiSSID, scanResult.ssid,
- min(strlen((char *) scanResult.ssid) + 1, (size_t) NetworkInfo::kMaxWiFiSSIDLength));
- netInfo.WiFiSSID[NetworkInfo::kMaxWiFiSSIDLength] = 0;
- netInfo.WiFiMode = kWiFiMode_Managed;
- netInfo.WiFiRole = kWiFiRole_Station;
- netInfo.WiFiSecurityType = ESP32Utils::WiFiAuthModeToChipWiFiSecurityType(scanResult.authmode);
- netInfo.WirelessSignalStrength = scanResult.rssi;
-
- {
- chip::TLV::TLVWriter savePoint = writer;
- err = netInfo.Encode(writer);
- if (err == CHIP_ERROR_BUFFER_TOO_SMALL)
- {
- writer = savePoint;
- break;
- }
- }
- SuccessOrExit(err);
- }
- err = writer.EndContainer(outerContainerType);
- SuccessOrExit(err);
- err = writer.Finalize(&respBuf);
- SuccessOrExit(err);
-
- // Send the scan results to the requestor. Note that this method takes ownership of the
- // buffer, success or fail.
- err = SendNetworkScanComplete(encodedResultCount, std::move(respBuf));
- SuccessOrExit(err);
- }
-
-exit:
- // If an error occurred and we haven't yet responded, send a Internal Error back to the
- // requestor.
- if (err != CHIP_NO_ERROR && GetCurrentOp() == kMsgType_ScanNetworks)
- {
- SendStatusReport(kChipProfile_Common, kStatus_InternalError, err);
- }
-
- // Tell the ConnectivityManager that the WiFi scan is now done. This allows it to continue
- // any activities that were deferred while the scan was in progress.
- ConnectivityMgr().OnWiFiScanDone();
-}
-
-#if CHIP_DEVICE_CONFIG_WIFI_SCAN_COMPLETION_TIMEOUT
-
-void NetworkProvisioningServerImpl::HandleScanTimeOut(::chip::System::Layer * aLayer, void * aAppState,
- ::chip::System::Error aError)
-{
- ChipLogError(DeviceLayer, "WiFi scan timed out");
-
- // Reset the state.
- sInstance.mState = kState_Idle;
-
- // Verify that the ScanNetworks request is still outstanding; if so, send a
- // Common:InternalError StatusReport to the client.
- if (sInstance.GetCurrentOp() == kMsgType_ScanNetworks)
- {
- sInstance.SendStatusReport(kChipProfile_Common, kStatus_InternalError, CHIP_ERROR_TIMEOUT);
- }
-
- // Tell the ConnectivityManager that the WiFi scan is now done.
- ConnectivityMgr().OnWiFiScanDone();
-}
-
-#endif // CHIP_DEVICE_CONFIG_WIFI_SCAN_COMPLETION_TIMEOUT
-
-bool NetworkProvisioningServerImpl::IsSupportedWiFiSecurityType(WiFiSecurityType_t wifiSecType)
-{
- return (wifiSecType == kWiFiSecurityType_None || wifiSecType == kWiFiSecurityType_WEP ||
- wifiSecType == kWiFiSecurityType_WPAPersonal || wifiSecType == kWiFiSecurityType_WPA2Personal ||
- wifiSecType == kWiFiSecurityType_WPA2Enterprise);
-}
-
-} // namespace Internal
-} // namespace DeviceLayer
-} // namespace chip
+++ /dev/null
-/*
- *
- * Copyright (c) 2020 Project CHIP Authors
- * Copyright (c) 2018 Nest Labs, Inc.
- * All rights reserved.
- *
- * 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/GenericNetworkProvisioningServerImpl.h>
-
-namespace chip {
-namespace DeviceLayer {
-namespace Internal {
-
-/**
- * Concrete implementation of the NetworkProvisioningServer singleton object for the ESP32 platform.
- */
-class NetworkProvisioningServerImpl final : public NetworkProvisioningServer,
- public GenericNetworkProvisioningServerImpl<NetworkProvisioningServerImpl>
-{
-private:
- using GenericImplClass = GenericNetworkProvisioningServerImpl<NetworkProvisioningServerImpl>;
-
- // Allow the NetworkProvisioningServer interface class to delegate method calls to
- // the implementation methods provided by this class.
- friend class ::chip::DeviceLayer::Internal::NetworkProvisioningServer;
-
- // Allow the GenericNetworkProvisioningServerImpl base class to access helper methods
- // and types defined on this class.
- friend class GenericNetworkProvisioningServerImpl<NetworkProvisioningServerImpl>;
-
- // ===== Members that implement the NetworkProvisioningServer public interface.
-
- CHIP_ERROR _Init(void);
- void _OnPlatformEvent(const ChipDeviceEvent * event);
-
- // NOTE: Other public interface methods are implemented by GenericNetworkProvisioningServerImpl<>.
-
- // ===== Members used by GenericNetworkProvisioningServerImpl<> to invoke platform-specific
- // operations.
-
- CHIP_ERROR GetWiFiStationProvision(NetworkInfo & netInfo, bool includeCredentials);
- CHIP_ERROR SetWiFiStationProvision(const NetworkInfo & netInfo);
- CHIP_ERROR ClearWiFiStationProvision(void);
- CHIP_ERROR InitiateWiFiScan(void);
- void HandleScanDone(void);
- static NetworkProvisioningServerImpl & Instance(void);
- static void HandleScanTimeOut(::chip::System::Layer * aLayer, void * aAppState, ::chip::System::Error aError);
- static bool IsSupportedWiFiSecurityType(WiFiSecurityType_t wifiSecType);
-
- // ===== Members for internal use by the following friends.
-
- friend ::chip::DeviceLayer::Internal::NetworkProvisioningServer & NetworkProvisioningSvr(void);
- friend NetworkProvisioningServerImpl & NetworkProvisioningSvrImpl(void);
-
- static NetworkProvisioningServerImpl sInstance;
-};
-
-/**
- * Returns a reference to the public interface of the NetworkProvisioningServer singleton object.
- *
- * Internal components should use this to access features of the NetworkProvisioningServer object
- * that are common to all platforms.
- */
-inline NetworkProvisioningServer & NetworkProvisioningSvr(void)
-{
- return NetworkProvisioningServerImpl::sInstance;
-}
-
-/**
- * Returns the platform-specific implementation of the NetworkProvisioningServer singleton object.
- *
- * Internal components can use this to gain access to features of the NetworkProvisioningServer
- * that are specific to the ESP32 platform.
- */
-inline NetworkProvisioningServerImpl & NetworkProvisioningSvrImpl(void)
-{
- return NetworkProvisioningServerImpl::sInstance;
-}
-
-} // namespace Internal
-} // namespace DeviceLayer
-} // namespace chip
using namespace chip::Ble;
/**
- * Concrete implementation of the NetworkProvisioningServer singleton object for the K32W platforms.
+ * Concrete implementation of the BLEManager singleton object for the K32W platforms.
*/
class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePlatformDelegate, private BleApplicationDelegate
{
namespace chip {
namespace DeviceLayer {
-namespace Internal {
-class NetworkProvisioningServerImpl;
-}
-
/**
* Concrete implementation of the ConfigurationManager singleton object for the K32W platform.
*/
// ===== Members for internal use by the following friends.
- friend class Internal::NetworkProvisioningServerImpl;
friend ConfigurationManager & ConfigurationMgr(void);
friend ConfigurationManagerImpl & ConfigurationMgrImpl(void);
+++ /dev/null
-/*
- *
- * Copyright (c) 2020 Project CHIP Authors
- * Copyright (c) 2020 Nest Labs, Inc.
- * All rights reserved.
- *
- * 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.
- */
-/* this file behaves like a config.h, comes first */
-#include <platform/internal/CHIPDeviceLayerInternal.h>
-
-#include <platform/internal/GenericNetworkProvisioningServerImpl.cpp>
-#include <platform/internal/NetworkProvisioningServer.h>
-
-#include <core/CHIPTLV.h>
-#include <platform/internal/DeviceNetworkInfo.h>
-
-namespace chip {
-namespace DeviceLayer {
-namespace Internal {
-
-NetworkProvisioningServerImpl NetworkProvisioningServerImpl::sInstance;
-
-CHIP_ERROR NetworkProvisioningServerImpl::_Init(void)
-{
- return GenericNetworkProvisioningServerImpl<NetworkProvisioningServerImpl>::DoInit();
-}
-
-} // namespace Internal
-} // namespace DeviceLayer
-} // namespace chip
+++ /dev/null
-/*
- *
- * Copyright (c) 2020 Project CHIP Authors
- * Copyright (c) 2020 Nest Labs, Inc.
- * All rights reserved.
- *
- * 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/GenericNetworkProvisioningServerImpl.h>
-
-namespace chip {
-namespace DeviceLayer {
-namespace Internal {
-
-/**
- * Concrete implementation of the NetworkProvisioningServer singleton object for the
- * NXP K32W platforms.
- */
-class NetworkProvisioningServerImpl final : public NetworkProvisioningServer,
- public Internal::GenericNetworkProvisioningServerImpl<NetworkProvisioningServerImpl>
-{
- // Allow the NetworkProvisioningServer interface class to delegate method calls to
- // the implementation methods provided by this class.
- friend class ::chip::DeviceLayer::Internal::NetworkProvisioningServer;
-
- // Allow the GenericNetworkProvisioningServerImpl base class to access helper methods
- // and types defined on this class.
- friend class GenericNetworkProvisioningServerImpl<NetworkProvisioningServerImpl>;
-
-private:
- // ===== Members that implement the NetworkProvisioningServer public interface.
-
- CHIP_ERROR _Init(void);
-
- // ===== Members for internal use by the following friends.
-
- friend ::chip::DeviceLayer::Internal::NetworkProvisioningServer & NetworkProvisioningSvr(void);
- friend NetworkProvisioningServerImpl & NetworkProvisioningSvrImpl(void);
-
- static NetworkProvisioningServerImpl sInstance;
-};
-
-/**
- * Returns a reference to the public interface of the NetworkProvisioningServer singleton object.
- *
- * Internal components should use this to access features of the NetworkProvisioningServer object
- * that are common to all platforms.
- */
-inline NetworkProvisioningServer & NetworkProvisioningSvr(void)
-{
- return NetworkProvisioningServerImpl::sInstance;
-}
-
-/**
- * Returns the platform-specific implementation of the NetworkProvisioningServer singleton object.
- *
- * Internal components can use this to gain access to features of the NetworkProvisioningServer
- * that are specific to the K32W platform.
- */
-inline NetworkProvisioningServerImpl & NetworkProvisioningSvrImpl(void)
-{
- return NetworkProvisioningServerImpl::sInstance;
-}
-
-} // namespace Internal
-} // namespace DeviceLayer
-} // namespace chip
VerifyOrExit(connection != nullptr, ChipLogError(DeviceLayer, "BluezConnection is NULL in %s", __func__));
VerifyOrExit(connection->mpC2 != nullptr, ChipLogError(DeviceLayer, "C2 is NULL in %s", __func__));
- bluez_gatt_characteristic1_call_start_notify(connection->mpC2, nullptr, UnsubscribeCharacteristicDone, connection);
+ bluez_gatt_characteristic1_call_stop_notify(connection->mpC2, nullptr, UnsubscribeCharacteristicDone, connection);
exit:
return G_SOURCE_REMOVE;
using namespace chip::Ble;
/**
- * Concrete implementation of the NetworkProvisioningServer singleton object for the platform.
+ * Concrete implementation of the BLEManager singleton object for the platform.
*/
class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePlatformDelegate, private BleApplicationDelegate
{
return PacketBufferHandle(head);
}
-PacketBufferHandle PacketBufferHandle::CloneData(uint16_t aAdditionalSize, uint16_t aReservedSize)
+PacketBufferHandle PacketBufferHandle::CloneData()
{
- if (!mBuffer->Next().IsNull())
+ PacketBufferHandle cloneHead;
+
+ for (PacketBuffer * original = mBuffer; original != nullptr; original = static_cast<PacketBuffer *>(original->next))
{
- // We do not clone an entire chain.
- return PacketBufferHandle();
+ uint16_t originalDataSize = original->MaxDataLength();
+ uint16_t originalReservedSize = original->ReservedSize();
+ PacketBufferHandle clone = PacketBufferHandle::New(originalDataSize, originalReservedSize);
+ if (clone.IsNull())
+ {
+ return PacketBufferHandle();
+ }
+ clone.mBuffer->tot_len = clone.mBuffer->len = original->len;
+ memcpy(reinterpret_cast<uint8_t *>(clone.mBuffer) + PacketBuffer::kStructureSize,
+ reinterpret_cast<uint8_t *>(original) + PacketBuffer::kStructureSize, originalDataSize + originalReservedSize);
+
+ if (cloneHead.IsNull())
+ {
+ cloneHead = std::move(clone);
+ }
+ else
+ {
+ cloneHead->AddToEnd(std::move(clone));
+ }
}
- return NewWithData(mBuffer->Start(), mBuffer->DataLength(), aAdditionalSize, aReservedSize);
+
+ return cloneHead;
}
} // namespace System
#endif
void AddRef();
+ bool HasSoleOwnership() const { return (this->ref == 1); }
static void Free(PacketBuffer * aPacket);
static PacketBuffer * FreeHead(PacketBuffer * aPacket);
bool IsNull() const { return mBuffer == nullptr; }
/**
+ * Test whether the PacketBuffer owned by this PacketBufferHandle has unique ownership.
+ *
+ * @return \c true if the PacketBuffer owned by this PacketBufferHandle is solely owned; return \c false if
+ * it has more than one ownership.
+ */
+ bool HasSoleOwnership() const { return mBuffer->HasSoleOwnership(); }
+
+ /**
* Detach and return the head of a buffer chain while updating this handle to point to the remaining buffers.
* The current buffer must be the head of the chain.
*
uint16_t aReservedSize = PacketBuffer::kDefaultHeaderReserve);
/**
- * Creates a copy of the data in this packet.
- *
- * Does NOT support chained buffers.
- *
- * @param[in] aAdditionalSize Size of additional application data space after the initial contents.
- * @param[in] aReservedSize Number of octets to reserve for protocol headers.
+ * Creates a copy of a packet buffer (or chain).
*
- * @returns empty handle on allocation failure.
+ * @returns empty handle on allocation failure. Otherwise, the returned buffer has the same sizes and contents as the original.
*/
- PacketBufferHandle CloneData(uint16_t aAdditionalSize = 0, uint16_t aReservedSize = PacketBuffer::kDefaultHeaderReserve);
+ PacketBufferHandle CloneData();
/**
* Perform an implementation-defined check on the validity of a PacketBufferHandle.
#define TO_LWIP_PBUF(x) (reinterpret_cast<struct pbuf *>(reinterpret_cast<void *>(x)))
#define OF_LWIP_PBUF(x) (reinterpret_cast<PacketBuffer *>(reinterpret_cast<void *>(x)))
+namespace {
+void ScrambleData(uint8_t * start, uint16_t length)
+{
+ for (uint16_t i = 0; i < length; ++i)
+ ++start[i];
+}
+} // namespace
+
/*
* An instance of this class created for the test suite.
* It is a friend class of `PacketBuffer` and `PacketBufferHandle` because some tests
static void CheckHandleHold(nlTestSuite * inSuite, void * inContext);
static void CheckHandleAdvance(nlTestSuite * inSuite, void * inContext);
static void CheckHandleRightSize(nlTestSuite * inSuite, void * inContext);
+ static void CheckHandleCloneData(nlTestSuite * inSuite, void * inContext);
static void CheckPacketBufferWriter(nlTestSuite * inSuite, void * inContext);
static void CheckBuildFreeList(nlTestSuite * inSuite, void * inContext);
#endif // CHIP_SYSTEM_PACKETBUFFER_HAS_RIGHT_SIZE
}
+void PacketBufferTest::CheckHandleCloneData(nlTestSuite * inSuite, void * inContext)
+{
+ struct TestContext * const theContext = static_cast<struct TestContext *>(inContext);
+ PacketBufferTest * const test = theContext->test;
+ NL_TEST_ASSERT(inSuite, test->mContext == theContext);
+
+ uint8_t lPayload[2 * PacketBuffer::kMaxSizeWithoutReserve];
+ for (size_t i = 0; i < sizeof(lPayload); ++i)
+ {
+ lPayload[i] = static_cast<uint8_t>(random());
+ }
+
+ for (auto & config_1 : test->configurations)
+ {
+ for (auto & config_2 : test->configurations)
+ {
+ if (&config_1 == &config_2)
+ {
+ continue;
+ }
+
+ test->PrepareTestBuffer(&config_1);
+ test->PrepareTestBuffer(&config_2);
+
+ const uint8_t * payload_1 = lPayload;
+ memcpy(config_1.handle->Start(), payload_1, config_1.handle->MaxDataLength());
+ config_1.handle->SetDataLength(config_1.handle->MaxDataLength());
+
+ const uint8_t * payload_2 = lPayload + config_1.handle->MaxDataLength();
+ memcpy(config_2.handle->Start(), payload_2, config_2.handle->MaxDataLength());
+ config_2.handle->SetDataLength(config_2.handle->MaxDataLength());
+
+ // Clone single buffer.
+ PacketBufferHandle clone_1 = config_1.handle.CloneData();
+ NL_TEST_ASSERT(inSuite, !clone_1.IsNull());
+ NL_TEST_ASSERT(inSuite, clone_1->DataLength() == config_1.handle->DataLength());
+ NL_TEST_ASSERT(inSuite, memcmp(clone_1->Start(), payload_1, clone_1->DataLength()) == 0);
+ if (clone_1->DataLength())
+ {
+ // Verify that modifying the clone does not affect the original.
+ ScrambleData(clone_1->Start(), clone_1->DataLength());
+ NL_TEST_ASSERT(inSuite, memcmp(clone_1->Start(), payload_1, clone_1->DataLength()) != 0);
+ NL_TEST_ASSERT(inSuite, memcmp(config_1.handle->Start(), payload_1, config_1.handle->DataLength()) == 0);
+ }
+
+ // Clone buffer chain.
+ config_1.handle->AddToEnd(config_2.handle.Retain());
+ NL_TEST_ASSERT(inSuite, config_1.handle->HasChainedBuffer());
+ clone_1 = config_1.handle.CloneData();
+ PacketBufferHandle clone_1_next = clone_1->Next();
+ NL_TEST_ASSERT(inSuite, !clone_1.IsNull());
+ NL_TEST_ASSERT(inSuite, clone_1->HasChainedBuffer());
+ NL_TEST_ASSERT(inSuite, clone_1->DataLength() == config_1.handle->DataLength());
+ NL_TEST_ASSERT(inSuite, clone_1->TotalLength() == config_1.handle->TotalLength());
+ NL_TEST_ASSERT(inSuite, clone_1_next->DataLength() == config_2.handle->DataLength());
+ NL_TEST_ASSERT(inSuite, memcmp(clone_1->Start(), payload_1, clone_1->DataLength()) == 0);
+ NL_TEST_ASSERT(inSuite, memcmp(clone_1_next->Start(), payload_2, clone_1_next->DataLength()) == 0);
+ if (clone_1->DataLength())
+ {
+ ScrambleData(clone_1->Start(), clone_1->DataLength());
+ NL_TEST_ASSERT(inSuite, memcmp(clone_1->Start(), payload_1, clone_1->DataLength()) != 0);
+ NL_TEST_ASSERT(inSuite, memcmp(config_1.handle->Start(), payload_1, config_1.handle->DataLength()) == 0);
+ }
+ if (clone_1_next->DataLength())
+ {
+ ScrambleData(clone_1_next->Start(), clone_1_next->DataLength());
+ NL_TEST_ASSERT(inSuite, memcmp(clone_1_next->Start(), payload_2, clone_1_next->DataLength()) != 0);
+ NL_TEST_ASSERT(inSuite, memcmp(config_2.handle->Start(), payload_2, config_2.handle->DataLength()) == 0);
+ }
+
+ config_1.handle = nullptr;
+ config_2.handle = nullptr;
+ }
+ }
+}
+
void PacketBufferTest::CheckPacketBufferWriter(nlTestSuite * inSuite, void * inContext)
{
struct TestContext * const theContext = static_cast<struct TestContext *>(inContext);
NL_TEST_DEF("PacketBuffer::HandleHold", PacketBufferTest::CheckHandleHold),
NL_TEST_DEF("PacketBuffer::HandleAdvance", PacketBufferTest::CheckHandleAdvance),
NL_TEST_DEF("PacketBuffer::HandleRightSize", PacketBufferTest::CheckHandleRightSize),
+ NL_TEST_DEF("PacketBuffer::HandleCloneData", PacketBufferTest::CheckHandleCloneData),
NL_TEST_DEF("PacketBuffer::PacketBufferWriter", PacketBufferTest::CheckPacketBufferWriter),
NL_TEST_SENTINEL()
info.mNodeId = Encoding::LittleEndian::HostSwap64(mNodeId);
info.mAdmin = Encoding::LittleEndian::HostSwap16(mAdmin);
- return kvs.SetKeyValue(key, &info, sizeof(info));
+ return kvs.SyncSetKeyValue(key, &info, sizeof(info));
}
CHIP_ERROR AdminPairingInfo::FetchFromKVS(PersistentStorageDelegate & kvs)
StorableAdminPairingInfo info;
uint16_t size = sizeof(info);
- ReturnErrorOnFailure(kvs.GetKeyValue(key, &info, size));
+ ReturnErrorOnFailure(kvs.SyncGetKeyValue(key, &info, size));
mNodeId = Encoding::LittleEndian::HostSwap64(info.mNodeId);
AdminId id = Encoding::LittleEndian::HostSwap16(info.mAdmin);
char key[KeySize()];
ReturnErrorOnFailure(GenerateKey(id, key, sizeof(key)));
- kvs.DeleteKeyValue(key);
+ kvs.AsyncDeleteKeyValue(key);
return CHIP_NO_ERROR;
}
void SecureSessionMgr::Shutdown()
{
+ CancelExpiryTimer();
+
mState = State::kNotReady;
mLocalNodeId = kUndefinedNodeId;
mSystemLayer = nullptr;
PacketBufferHandle origMsg;
PayloadHeader payloadHeader;
+ bool peerGroupMsgIdNotSynchronized = false;
Transport::AdminPairingInfo * admin = nullptr;
VerifyOrExit(!msg.IsNull(), ChipLogError(Inet, "Secure transport received NULL packet, discarding"));
// For all group messages, Set flag if peer group key message counter is not synchronized.
if (ChipKeyId::IsAppGroupKey(packetHeader.GetEncryptionKeyID()))
{
- const_cast<PacketHeader &>(packetHeader).SetPeerGroupMsgIdNotSynchronized(true);
+ peerGroupMsgIdNotSynchronized = true;
}
}
if (mCB != nullptr)
{
- mCB->OnMessageReceived(packetHeader, payloadHeader, { state->GetPeerNodeId(), state->GetPeerKeyID(), state->GetAdminId() },
- std::move(msg), this);
+ SecureSessionHandle session(state->GetPeerNodeId(), state->GetPeerKeyID(), state->GetAdminId());
+
+ session.SetPeerGroupMsgIdNotSynchronized(peerGroupMsgIdNotSynchronized);
+
+ mCB->OnMessageReceived(packetHeader, payloadHeader, session, std::move(msg), this);
}
exit:
Transport::AdminId GetAdminId() const { return mAdmin; }
void SetAdminId(Transport::AdminId adminId) { mAdmin = adminId; }
+ bool IsPeerGroupMsgIdNotSynchronized() const { return mPeerGroupMsgIdNotSynchronized; }
+ void SetPeerGroupMsgIdNotSynchronized(bool value) { mPeerGroupMsgIdNotSynchronized = value; }
+
bool operator==(const SecureSessionHandle & that) const
{
return mPeerNodeId == that.mPeerNodeId && mPeerKeyId == that.mPeerKeyId && mAdmin == that.mAdmin;
// to identify an approach that'll allow looking up the corresponding information for
// such sessions.
Transport::AdminId mAdmin;
+
+ bool mPeerGroupMsgIdNotSynchronized = false;
};
/**
char key[KeySize()];
ReturnErrorOnFailure(GenerateKey(mKeyId, key, sizeof(key)));
- return kvs.SetKeyValue(key, &mSession, sizeof(mSession));
+ return kvs.SyncSetKeyValue(key, &mSession, sizeof(mSession));
}
CHIP_ERROR StorablePeerConnection::FetchFromKVS(PersistentStorageDelegate & kvs, uint16_t keyId)
ReturnErrorOnFailure(GenerateKey(keyId, key, sizeof(key)));
uint16_t size = sizeof(mSession);
- return kvs.GetKeyValue(key, &mSession, size);
+ return kvs.SyncGetKeyValue(key, &mSession, size);
}
CHIP_ERROR StorablePeerConnection::DeleteFromKVS(PersistentStorageDelegate & kvs, uint16_t keyId)
char key[KeySize()];
ReturnErrorOnFailure(GenerateKey(keyId, key, sizeof(key)));
- kvs.DeleteKeyValue(key);
+ kvs.AsyncDeleteKeyValue(key);
return CHIP_NO_ERROR;
}
kExchangeFlag_VendorIdPresent = 0x10,
};
-enum class InternalFlagValues : uint8_t
-{
- // Header flag indicates that the peer's group key message counter is not synchronized.
- kPeerGroupMsgIdNotSynchronized = 0x01,
-};
-
enum class FlagValues : uint16_t
{
/// Header flag specifying that a destination node id is included in the header.
};
-using Flags = BitFlags<FlagValues>;
-using ExFlags = BitFlags<ExFlagValues>;
-using InternalFlags = BitFlags<InternalFlagValues>;
+using Flags = BitFlags<FlagValues>;
+using ExFlags = BitFlags<ExFlagValues>;
// Header is a 16-bit value of the form
// | 4 bit | 4 bit |8 bit Security Flags|
/** Check if it's a secure session control message. */
bool IsSecureSessionControlMsg() const { return mFlags.Has(Header::FlagValues::kSecureSessionControlMessage); }
- /** Check if the peer's group key message counter is not synchronized. */
- bool IsPeerGroupMsgIdNotSynchronized() const
- {
- return mInternalFlags.Has(Header::InternalFlagValues::kPeerGroupMsgIdNotSynchronized);
- }
-
Header::EncryptionType GetEncryptionType() const { return mEncryptionType; }
PacketHeader & SetSecureSessionControlMsg(bool value)
return *this;
}
- PacketHeader & SetPeerGroupMsgIdNotSynchronized(bool value)
- {
- mInternalFlags.Set(Header::InternalFlagValues::kPeerGroupMsgIdNotSynchronized, value);
- return *this;
- }
-
PacketHeader & SetSourceNodeId(NodeId id)
{
mSourceNodeId.SetValue(id);
/// Message flags read from the message.
Header::Flags mFlags;
- /// Message flags not encoded into the packet sent over wire.
- Header::InternalFlags mInternalFlags;
-
/// Represents encryption type used for encrypting current packet
Header::EncryptionType mEncryptionType = Header::EncryptionType::kAESCCMTagLen16;
};