Skip to content

Commit

Permalink
Infineon CYW30739 - lock-app support. (#14012)
Browse files Browse the repository at this point in the history
  • Loading branch information
ItoddchouFX authored and pull[bot] committed Jul 22, 2023
1 parent 92d228e commit 4090399
Show file tree
Hide file tree
Showing 23 changed files with 1,197 additions and 0 deletions.
6 changes: 6 additions & 0 deletions .github/workflows/examples-cyw30739.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,12 @@ jobs:
cyw30739 cyw930739m2evb_01 light \
out/artifacts/cyw30739-cyw930739m2evb_01-light/chip-cyw30739-lighting-example.elf \
/tmp/bloat_reports/
- name: Build example CYW30739 Lock App
timeout-minutes: 10
run: |
scripts/examples/gn_build_example.sh examples/lock-app/cyw30739 out/lock_app
.environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py cyw30739 CYW30739 lock-app \
out/lock_app/chip-cyw30739-lock-example.elf /tmp/bloat_reports/
- name: Uploading Size Reports
uses: actions/upload-artifact@v2
if: ${{ !env.ACT }}
Expand Down
28 changes: 28 additions & 0 deletions examples/lock-app/cyw30739/.gn
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# 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 = "cyw30739"

import("//args.gni")
}
68 changes: 68 additions & 0 deletions examples/lock-app/cyw30739/BUILD.gn
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# 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")
import("//build_overrides/chip.gni")
import("//build_overrides/cyw30739_sdk.gni")

import("${cyw30739_sdk_build_root}/cyw30739_executable.gni")
import("${cyw30739_sdk_build_root}/cyw30739_sdk.gni")

cyw30739_project_dir = "${chip_root}/examples/lock-app/cyw30739"

declare_args() {
setupPinCode = 0
setupDiscriminator = 0
}

cyw30739_sdk("sdk") {
sources = [ "${cyw30739_project_dir}/include/CHIPProjectConfig.h" ]

include_dirs = [ "${cyw30739_project_dir}/include" ]

defines = [
"CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE=${setupPinCode}",
"CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR=${setupDiscriminator}",
]
}

cyw30739_executable("lock_app") {
output_name = "chip-cyw30739-lock-example.elf"

sources = [
"src/AppShellCommands.cpp",
"src/BoltLockManager.cpp",
"src/ButtonHandler.cpp",
"src/ZclCallbacks.cpp",
"src/main.cpp",
]

deps = [
":sdk",
"${chip_root}/examples/lock-app/lock-common",
"${chip_root}/examples/shell/shell_common:shell_common",
"${chip_root}/src/lib",
"${chip_root}/third_party/openthread/repo:libopenthread-ftd",
]

include_dirs = [ "include" ]
}

group("cyw30739") {
deps = [ ":lock_app" ]
}

group("default") {
deps = [ ":cyw30739" ]
}
104 changes: 104 additions & 0 deletions examples/lock-app/cyw30739/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# Matter CYW30739 Lock Example

An example showing the use of Matter on the Infineon CYW30739 platform.

---

## Table of Contents

- [CHIP CYW30739 Lock Example](#matter-cyw30739-lock-example)
- [Introduction](#introduction)
- [Building](#building)
- [Flashing the Application](#flashing-the-application)
- [Running the Complete Example](#running-the-complete-example)

---

## Introduction

The CYW30739 lock example provides a baseline demonstration of a Light control
device, built using Matter and the Infineon Modustoolbox SDK. It can be
controlled by a Matter controller over Openthread network.

The CYW30739 device can be commissioned over Bluetooth Low Energy where the
device and the Matter controller will exchange security information with the
Rendez-vous procedure. Thread Network credentials are then provided to the
CYW30739 device which will then join the network.

## Building

- Build the example application:

```bash
$ cd ~/connectedhomeip
$ git submodule update --init
$ ./scripts/examples/gn_build_example.sh examples/lock-app/cyw30739 out/lock-app
```

- To delete generated executable, libraries and object files use:

```bash
$ cd ~/connectedhomeip
$ rm -rf ./out/
```

- OR use GN/Ninja directly

```bash
$ cd ~/connectedhomeip/examples/lock-app/cyw30739
$ git submodule update --init
$ source third_party/connectedhomeip/scripts/activate.sh
$ gn gen out/debug
$ ninja -C out/debug
```

- To delete generated executable, libraries and object files use:

```bash
$ cd ~/connectedhomeip/examples/lock-app/cyw30739
$ rm -rf out/
```

## Flashing the Application

### Enter Recovery Mode

Put the CYW30739 in to the recovery mode before running the flash script.

1. Press and hold the `RECOVERY` button on the board.
2. Press and hold the `RESET` button on the board.
3. Release the `RESET` button.
4. After one second, release the `RECOVERY` button.

### Run Flash Script

- On the command line:

```bash
$ cd ~/connectedhomeip/examples/lock-app/cyw30739
$ python3 out/debug/chip-cyw30739-lock-example.flash.py
```

## Running the Complete Example

- It is assumed here that you already have an OpenThread border router
configured and running. If not see the following guide
[Openthread_border_router](https://github.com/project-chip/connectedhomeip/blob/master/docs/guides/openthread_border_router_pi.md)
for more information on how to setup a border router on a raspberryPi.

- You can provision and control the Chip device using the python controller,
Chip tool standalone, Android or iOS app

[Python Controller](https://github.com/project-chip/connectedhomeip/blob/master/src/controller/python/README.md)

Here is an example with the Python controller:

```bash
$ chip-device-ctrl
chip-device-ctrl > connect -ble 3840 20202021 1234
chip-device-ctrl > zcl NetworkCommissioning AddThreadNetwork 1234 0 0 operationalDataset=hex:0e080000000000000000000300000b35060004001fffe00208dead00beef00cafe0708fddead00beef000005108e11d8ea8ffaa875713699f59e8807e0030a4f70656e5468726561640102c2980410edc641eb63b100b87e90a9980959befc0c0402a0fff8 breadcrumb=0 timeoutMs=1000
chip-device-ctrl > zcl NetworkCommissioning EnableNetwork 1234 0 0 networkID=hex:dead00beef00cafe breadcrumb=0 timeoutMs=1000
chip-device-ctrl > close-ble
chip-device-ctrl > resolve 1234
chip-device-ctrl > zcl OnOff Toggle 1234 1 0
```
18 changes: 18 additions & 0 deletions examples/lock-app/cyw30739/args.gni
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# 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}/src/platform/CYW30739/args.gni")

cyw30739_sdk_target = get_label_info(":sdk", "label_no_toolchain")
1 change: 1 addition & 0 deletions examples/lock-app/cyw30739/build_overrides
22 changes: 22 additions & 0 deletions examples/lock-app/cyw30739/include/AppShellCommands.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/*
*
* 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.
*/

#pragma once

void RegisterAppShellCommands();
86 changes: 86 additions & 0 deletions examples/lock-app/cyw30739/include/BoltLockManager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
/*
*
* 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.
*/

#pragma once

#include <chip_lock.h>
#include <lib/core/CHIPError.h>
#include <wiced_timer.h>

class BoltLockManager
{
public:
enum Action_t
{
LOCK_ACTION = 0,
UNLOCK_ACTION,

INVALID_ACTION
} Action;

enum State_t
{
kState_LockingInitiated = 0,
kState_LockingCompleted,
kState_UnlockingInitiated,
kState_UnlockingCompleted,
} State;

enum Actor_t
{
ACTOR_ZCL_CMD = 0,
ACTOR_APP_CMD,
ACTOR_BUTTON,
} Actor;

CHIP_ERROR Init();
bool IsUnlocked();
void EnableAutoRelock(bool aOn);
void SetAutoLockDuration(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 BoltLockManager & BoltLockMgr(void);
State_t mState;

Callback_fn_initiated mActionInitiated_CB;
Callback_fn_completed mActionCompleted_CB;

bool mAutoRelock;
uint32_t mAutoLockDuration;
bool mAutoLockTimerArmed;

void CancelTimer(void);
void StartTimer(uint32_t aTimeoutMs);

static void TimerEventHandler(WICED_TIMER_PARAM_TYPE cb_params);
static int AutoReLockTimerEventHandler(void * aEvent);
static int ActuatorMovementTimerEventHandler(void * aEvent);

static BoltLockManager sLock;
};

inline BoltLockManager & BoltLockMgr(void)
{
return BoltLockManager::sLock;
}
28 changes: 28 additions & 0 deletions examples/lock-app/cyw30739/include/ButtonHandler.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
*
* 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 "wiced.h"

typedef enum
{
ON_OFF_BUTTON,
APP_MAX_BUTTON,
} application_button_t;
#define APP_MAX_BUTTON_DEF 1 // define for preprocessor

wiced_result_t app_button_init(void);
Loading

0 comments on commit 4090399

Please sign in to comment.