Skip to content

Commit c299178

Browse files
Platform Applications v2.6.0
1 parent fa9e1b7 commit c299178

File tree

15 files changed

+1191
-1
lines changed

15 files changed

+1191
-1
lines changed

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
# Silicon Labs Platform Applications #
1515

16-
[![Version Badge](https://img.shields.io/badge/-v2.5.0-green)](https://github.com/SiliconLabs/bluetooth_applications/releases)
16+
[![Version Badge](https://img.shields.io/badge/-v2.6.0-green)](https://github.com/SiliconLabs/bluetooth_applications/releases)
1717
[![GSDK Badge](https://img.shields.io/badge/GSDK-v4.4.4-green)](https://github.com/SiliconLabs/gecko_sdk/releases)
1818
![License badge](https://img.shields.io/badge/License-Zlib-green)
1919

@@ -83,6 +83,9 @@ This repository provides both SLCP projects (as External Repositories) and SLS p
8383
| 56 | Platform - IADC scan multiple external inputs |[Click Here](./platform_iadc_scan_multiple_external_input) |
8484
| 57 | Platform - LDMA trigger with TIMER |[Click Here](./platform_ldma_trigger_with_timer) |
8585
| 58 | Platform - Multi channel PWM |[Click Here](./platform_multi_channel_pwm)
86+
| 59 | Platform - BLDC Motor Controller |[Click Here](./platform_bldc_motor_controller)
87+
| 60 | Platform - KeyScan |[Click Here](./platform_keyscan)
88+
8689

8790
## Requirements ##
8891

platform_keyscan/README.md

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
2+
# Platform - KeyScan #
3+
![Type badge](https://img.shields.io/badge/dynamic/json?url=https://raw.githubusercontent.com/SiliconLabs/application_examples_ci/master/platform_applications/platform_keyscan_common.json&label=Type&query=type&color=green)
4+
![Technology badge](https://img.shields.io/badge/dynamic/json?url=https://raw.githubusercontent.com/SiliconLabs/application_examples_ci/master/platform_applications/platform_keyscan_common.json&label=Technology&query=technology&color=green)
5+
![License badge](https://img.shields.io/badge/dynamic/json?url=https://raw.githubusercontent.com/SiliconLabs/application_examples_ci/master/platform_applications/platform_keyscan_common.json&label=License&query=license&color=green)
6+
![SDK badge](https://img.shields.io/badge/dynamic/json?url=https://raw.githubusercontent.com/SiliconLabs/application_examples_ci/master/platform_applications/platform_keyscan_common.json&label=SDK&query=sdk&color=green)
7+
[![Required board](https://img.shields.io/badge/Adafruit-3%20%204%20Matrix%20Keypad-green)](https://www.adafruit.com/product/3845)
8+
![Build badge](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/SiliconLabs/application_examples_ci/master/platform_applications/platform_keyscan_build_status.json)
9+
![Flash badge](https://img.shields.io/badge/dynamic/json?url=https://raw.githubusercontent.com/SiliconLabs/application_examples_ci/master/platform_applications/platform_keyscan_common.json&label=Flash&query=flash&color=blue)
10+
![RAM badge](https://img.shields.io/badge/dynamic/json?url=https://raw.githubusercontent.com/SiliconLabs/application_examples_ci/master/platform_applications/platform_keyscan_common.json&label=RAM&query=ram&color=blue)
11+
12+
## Overview ##
13+
14+
This project demonstrates the use of the KEYSCAN driver. The MCU operates in a low-power sleep mode between key presses, conserving power while remaining ready for user input. When a key is pressed, the device wakes up, identifies the key and displays its value on the Wireless Pro Kit's LCD screen, providing immediate feedback to the user. This integration highlights the effectiveness of the KEYSCAN driver in managing key detection and event handling.
15+
16+
## SDK version ##
17+
18+
- GSDK v4.4.4
19+
20+
## Hardware Required ##
21+
- [Si-MB4002A Wireless Pro Kit Mainboard](https://www.silabs.com/development-tools/wireless/wireless-pro-kit-mainboard?tab=overview)
22+
- [EFR32xG24 Wireless 2.4 GHz +10 dBm Radio Board](https://www.silabs.com/development-tools/wireless/xg24-rb4186c-efr32xg24-wireless-gecko-radio-board?tab=overview)
23+
- [3 * 4 Matrix Keypad](https://www.adafruit.com/product/3845)
24+
25+
**Note:**
26+
27+
- Tested boards for working with this example:
28+
29+
| Board ID | Description |
30+
| ---------------------- | ------ |
31+
| BRD4210a | [EFR32XG23 868-915 MHz +20 dBm Radio Board](https://www.silabs.com/development-tools/wireless/xg23-rb4210a-efr32xg23-868-915-mhz-20-dbm-radio-board?tab=overview)|
32+
| BRD4186c | [EFR32xG24 Wireless 2.4 GHz +10 dBm Radio Board](https://www.silabs.com/development-tools/wireless/xg24-rb4186c-efr32xg24-wireless-gecko-radio-board?tab=overview)|
33+
| BRD4400c | [EFR32xG28 2.4 GHz BLE and +14 dBm Radio Board](https://www.silabs.com/development-tools/wireless/xg28-rb4400c-efr32xg28-2-4-ghz-ble-and-14-dbm-radio-board?tab=overview)|
34+
35+
## Connections Required ##
36+
37+
Connect the board via the connector cable to your PC to flash the example.
38+
39+
Connect the keyboard to the board using the Expander header.
40+
41+
### Connection: ###
42+
![connections](image/keyboard_connection.png)
43+
44+
| Pin Name | BRD4210A | BRD4186C| BRD4400C |
45+
| --- | --- | --- | --- |
46+
| COL_OUT_0 | EXP5 (PA00) | EXP5 (PA00) | EXP5 (PA12) |
47+
| COL_OUT_1 | EXP3 (PA10) | EXP3 (PB05) | EXP3 (PA11)|
48+
| COL_OUT_2 | EXP15 (PC05) | EXP15 (PC05) | EXP15 (PC05) |
49+
| COL_OUT_3 | EXP16 (PC07) | EXP16 (PC07) | EXP16 (PC07) |
50+
| ROW_SENSE_0| EXP7 (PA05) | EXP7 (PA05) | EXP7 (PA13) |
51+
| ROW_SENSE_1| EXP11 (PA06) | EXP11 (PA06) | EXP11 (PB4) |
52+
| ROW_SENSE_2| EXP13 (PA07) | EXP13 (PA07) | EXP13 (PB5) |
53+
54+
## Setup ##
55+
56+
To test the application, you can either create a project based on an example or start with an "Empty C Project" project based on your hardware.
57+
58+
### Creating a project based on an example ###
59+
60+
1. Make sure that this repository is added to [Preferences > Simplicity Studio > External Repos](https://docs.silabs.com/simplicity-studio-5-users-guide/latest/ss-5-users-guide-about-the-launcher/welcome-and-device-tabs).
61+
62+
2. From the Launcher Home, add your product name to My Products, click on it, and click on the **EXAMPLE PROJECTS & DEMOS** tab. Find the example project filtering by "tailgating".
63+
64+
3. Click the **Create** button on **Platform - KeyScan** example. Example project creation dialog pops up -> click Create and Finish and the project should be generated.
65+
66+
![create_project](image/create_app.png)
67+
68+
4. Build and flash this example to the board.
69+
70+
### Start with an "Empty C Project" project ###
71+
72+
1. Create an **Empty C Project** project for your hardware using Simplicity Studio 5.
73+
74+
2. Copy all files in the `inc` and `src` folders into the project root folder (overwriting the existing file).
75+
76+
3. Install the software components:
77+
78+
3.1. Open the .slcp file in the project
79+
80+
3.2. Select the SOFTWARE COMPONENTS tab
81+
82+
3.3. Install the following components:
83+
84+
- [Platform][Driver][KeyScan][Keyscan]
85+
86+
- [Platform][Driver][GLIB Graphics Library]
87+
88+
- [Platform][Driver][GLIB driver for Memory LCD]
89+
90+
- [Platform][Board Drivers][Memory LCD][Display Driver][Monochrome Sharp Memory LCD]
91+
92+
- [Platform][Board Drivers][Memory LCD][Peripheral Driver][Memory LCD with usart SPI driver]
93+
94+
- [Services][Power Manager][Power Manager]
95+
96+
- [Services][Power Manager][Power Manager: Deepsleep]
97+
98+
4. Configure the Keyscan with the proper pin settings
99+
- [Platform][Driver][KeyScan][Keyscan]
100+
101+
![keyscan](image/keyscan_config.png)
102+
6. Build and flash the project to your board.
103+
104+
## How It Works ##
105+
The MCU begins by initializing the necessary peripherals and displaying a welcome screen on the Wireless Pro Kit's LCD, signalling that it is ready for use. If no button is pressed, the unit enters EM2 mode to save power. When a key is pressed, the Keyscan driver detects the event and wakes the device from sleep. The driver identifies the key pressed and its value is displayed on the Wireless Pro Kit's LCD screen, providing immediate feedback to the user. After processing the button press and updating the display, the device returns to sleep mode, ready to efficiently process the next button press.
106+
107+
![working](image/working.gif)
108+
109+
By default, the unit operates in single mode, which generates an interrupt when a button is pressed. Since this mode is designed for single button presses, if several keys are pressed simultaneously, the application will only display the first key.
110+
111+
If you modify the highlighted switch in the keyscan configuration tab, you can try the multiscan mode
112+
![multiscan_mode](image/multiscan_config.png)
113+
114+
The sample application also supports multi-scan mode, which can be enabled by changing the settings in the Keyscan Configration tab. This provides flexibility for scenarios where simultaneous keypress detection is required. When using multi-scan mode the application stops scanning at the first column with a detected keypress and displays all the rows pressed for that column. Scanning does not resume until all keys are released, ensuring consistent and predictable behaviour.
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# Silicon Labs Project Configuration Tools: slcp, v0, Component selection file.
2+
project_name: platform_keyscan
3+
label: platform_keyscan
4+
5+
description: |
6+
This example demonstate the usage of the Keyscan driver.
7+
8+
category: Example|Platform
9+
package: Platform
10+
quality: experimental
11+
12+
filter:
13+
- name: Device Type
14+
value: [SoC]
15+
- name: MCU
16+
value: [32-bit MCU]
17+
- name: Project Difficulty
18+
value: [Beginner]
19+
20+
readme:
21+
- path: ../README.md
22+
source:
23+
- path: ../src/app.c
24+
- path: ../src/main.c
25+
26+
include:
27+
- path: ../inc
28+
file_list:
29+
- path: app.h
30+
31+
component:
32+
- id: sl_system
33+
- id: device_init
34+
- id: keyscan_driver
35+
- id: power_manager
36+
- id: glib
37+
- id: ls013b7dh03
38+
- id: memlcd_usart
39+
40+
41+
config_file:
42+
- override:
43+
component: keyscan_driver
44+
file_id: keyscan_driver_config
45+
path: ../config/brd4186c/keyscan_driver_config.h
46+
condition: [brd4186c]
47+
- override:
48+
component: keyscan_driver
49+
file_id: keyscan_driver_config
50+
path: ../config/brd4210a/keyscan_driver_config.h
51+
condition: [brd4210a]
52+
- override:
53+
component: keyscan_driver
54+
file_id: keyscan_driver_config
55+
path: ../config/brd4400c/keyscan_driver_config.h
56+
condition: [brd4400c]
57+
58+
59+
define:
60+
- name: DEBUG_EFM
61+
62+
other_file:
63+
- path: ../image/keyboard_connection.png
64+
directory: "image"
65+
- path: ../image/keyscan_config.png
66+
directory: "image"
67+
- path: ../image/create_app.png
68+
directory: "image"
69+
- path: ../image/working.gif
70+
directory: "image"
71+
- path: ../image/multiscan_config.png
72+
directory: "image"
73+
74+
ui_hints:
75+
highlight:
76+
- path: README.md
77+
focus: true
78+
Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
/***************************************************************************//**
2+
* @file
3+
* @brief KEYSCAN driver configuration.
4+
*******************************************************************************
5+
* # License
6+
* <b>Copyright 2018 Silicon Laboratories Inc. www.silabs.com</b>
7+
*******************************************************************************
8+
*
9+
* SPDX-License-Identifier: Zlib
10+
*
11+
* The licensor of this software is Silicon Laboratories Inc.
12+
*
13+
* This software is provided 'as-is', without any express or implied
14+
* warranty. In no event will the authors be held liable for any damages
15+
* arising from the use of this software.
16+
*
17+
* Permission is granted to anyone to use this software for any purpose,
18+
* including commercial applications, and to alter it and redistribute it
19+
* freely, subject to the following restrictions:
20+
*
21+
* 1. The origin of this software must not be misrepresented; you must not
22+
* claim that you wrote the original software. If you use this software
23+
* in a product, an acknowledgment in the product documentation would be
24+
* appreciated but is not required.
25+
* 2. Altered source versions must be plainly marked as such, and must not be
26+
* misrepresented as being the original software.
27+
* 3. This notice may not be removed or altered from any source distribution.
28+
*
29+
******************************************************************************/
30+
31+
// <<< Use Configuration Wizard in Context Menu >>>
32+
#ifndef KEYSCAN_DRIVER_CONFIG_H
33+
#define KEYSCAN_DRIVER_CONFIG_H
34+
35+
// <o SL_KEYSCAN_DRIVER_COLUMN_NUMBER> Number of columns in keyscan <1-8>
36+
// <i> Default: 1
37+
#define SL_KEYSCAN_DRIVER_COLUMN_NUMBER 4
38+
39+
// <o SL_KEYSCAN_DRIVER_ROW_NUMBER> Number of rows in keyscan <3-6>
40+
// <i> Default: 3
41+
#define SL_KEYSCAN_DRIVER_ROW_NUMBER 3
42+
43+
// <o SL_KEYSCAN_DRIVER_SCAN_DELAY_MS> Scan Delay
44+
// <SL_HAL_KEYSCAN_DELAY_2MS=> 2ms
45+
// <SL_HAL_KEYSCAN_DELAY_4MS=> 4ms
46+
// <SL_HAL_KEYSCAN_DELAY_6MS=> 6ms
47+
// <SL_HAL_KEYSCAN_DELAY_8MS=> 8ms
48+
// <SL_HAL_KEYSCAN_DELAY_10MS=> 10ms
49+
// <SL_HAL_KEYSCAN_DELAY_12MS=> 12ms
50+
// <SL_HAL_KEYSCAN_DELAY_14MS=> 14ms
51+
// <SL_HAL_KEYSCAN_DELAY_16MS=> 16ms
52+
// <SL_HAL_KEYSCAN_DELAY_18MS=> 18ms
53+
// <SL_HAL_KEYSCAN_DELAY_20MS=> 20ms
54+
// <SL_HAL_KEYSCAN_DELAY_22MS=> 22ms
55+
// <SL_HAL_KEYSCAN_DELAY_24MS=> 24ms
56+
// <SL_HAL_KEYSCAN_DELAY_26MS=> 26ms
57+
// <SL_HAL_KEYSCAN_DELAY_28MS=> 28ms
58+
// <SL_HAL_KEYSCAN_DELAY_30MS=> 30ms
59+
// <SL_HAL_KEYSCAN_DELAY_32MS=> 32ms
60+
// <i> Duration of the scan period per column
61+
// <i> Default: SL_HAL_KEYSCAN_DELAY_2MS
62+
#define SL_KEYSCAN_DRIVER_SCAN_DELAY_MS SL_HAL_KEYSCAN_DELAY_2MS
63+
64+
// <o SL_KEYSCAN_DRIVER_DEBOUNCE_DELAY_MS> Debounce Delay
65+
// <SL_HAL_KEYSCAN_DELAY_2MS=> 2ms
66+
// <SL_HAL_KEYSCAN_DELAY_4MS=> 4ms
67+
// <SL_HAL_KEYSCAN_DELAY_6MS=> 6ms
68+
// <SL_HAL_KEYSCAN_DELAY_8MS=> 8ms
69+
// <SL_HAL_KEYSCAN_DELAY_10MS=> 10ms
70+
// <SL_HAL_KEYSCAN_DELAY_12MS=> 12ms
71+
// <SL_HAL_KEYSCAN_DELAY_14MS=> 14ms
72+
// <SL_HAL_KEYSCAN_DELAY_16MS=> 16ms
73+
// <SL_HAL_KEYSCAN_DELAY_18MS=> 18ms
74+
// <SL_HAL_KEYSCAN_DELAY_20MS=> 20ms
75+
// <SL_HAL_KEYSCAN_DELAY_22MS=> 22ms
76+
// <SL_HAL_KEYSCAN_DELAY_24MS=> 24ms
77+
// <SL_HAL_KEYSCAN_DELAY_26MS=> 26ms
78+
// <SL_HAL_KEYSCAN_DELAY_28MS=> 28ms
79+
// <SL_HAL_KEYSCAN_DELAY_30MS=> 30ms
80+
// <SL_HAL_KEYSCAN_DELAY_32MS=> 32ms
81+
// <i> Duration of debounce period once a key press is detected.
82+
// <i> Default: SL_HAL_KEYSCAN_DELAY_2MS
83+
#define SL_KEYSCAN_DRIVER_DEBOUNCE_DELAY_MS SL_HAL_KEYSCAN_DELAY_2MS
84+
85+
// <o SL_KEYSCAN_DRIVER_STABLE_DELAY_MS> Stable Delay
86+
// <SL_HAL_KEYSCAN_DELAY_2MS=> 2ms
87+
// <SL_HAL_KEYSCAN_DELAY_4MS=> 4ms
88+
// <SL_HAL_KEYSCAN_DELAY_6MS=> 6ms
89+
// <SL_HAL_KEYSCAN_DELAY_8MS=> 8ms
90+
// <SL_HAL_KEYSCAN_DELAY_10MS=> 10ms
91+
// <SL_HAL_KEYSCAN_DELAY_12MS=> 12ms
92+
// <SL_HAL_KEYSCAN_DELAY_14MS=> 14ms
93+
// <SL_HAL_KEYSCAN_DELAY_16MS=> 16ms
94+
// <SL_HAL_KEYSCAN_DELAY_18MS=> 18ms
95+
// <SL_HAL_KEYSCAN_DELAY_20MS=> 20ms
96+
// <SL_HAL_KEYSCAN_DELAY_22MS=> 22ms
97+
// <SL_HAL_KEYSCAN_DELAY_24MS=> 24ms
98+
// <SL_HAL_KEYSCAN_DELAY_26MS=> 26ms
99+
// <SL_HAL_KEYSCAN_DELAY_28MS=> 28ms
100+
// <SL_HAL_KEYSCAN_DELAY_30MS=> 30ms
101+
// <SL_HAL_KEYSCAN_DELAY_32MS=> 32ms
102+
// <i> Duration of the stable period after the debounce stage.
103+
// <i> Default: SL_HAL_KEYSCAN_DELAY_2MS
104+
#define SL_KEYSCAN_DRIVER_STABLE_DELAY_MS SL_HAL_KEYSCAN_DELAY_2MS
105+
106+
// <q SL_KEYSCAN_DRIVER_SINGLEPRESS> keyscan single-press functionality
107+
// <i> Enable or disable single-press functionality.
108+
// <i> Default: 0
109+
#define SL_KEYSCAN_DRIVER_SINGLEPRESS 1
110+
111+
// <<< end of configuration section >>>
112+
113+
// <<< sl:start pin_tool >>>
114+
// <keyscan
115+
// signal=COL_OUT_0,(COL_OUT_1),(COL_OUT_2),(COL_OUT_3),(COL_OUT_4),(COL_OUT_5),(COL_OUT_6),(COL_OUT_7),ROW_SENSE_0,ROW_SENSE_1,ROW_SENSE_2,(ROW_SENSE_3),(ROW_SENSE_4),(ROW_SENSE_5)>
116+
// SL_KEYSCAN_DRIVER_KEYSCAN
117+
// $[KEYSCAN_SL_KEYSCAN_DRIVER_KEYSCAN]
118+
#ifndef SL_KEYSCAN_DRIVER_KEYSCAN_PERIPHERAL
119+
#define SL_KEYSCAN_DRIVER_KEYSCAN_PERIPHERAL KEYSCAN
120+
#endif
121+
122+
// KEYSCAN COL_OUT_0 on PA00
123+
#ifndef SL_KEYSCAN_DRIVER_KEYSCAN_COL_OUT_0_PORT
124+
#define SL_KEYSCAN_DRIVER_KEYSCAN_COL_OUT_0_PORT gpioPortA
125+
#endif
126+
#ifndef SL_KEYSCAN_DRIVER_KEYSCAN_COL_OUT_0_PIN
127+
#define SL_KEYSCAN_DRIVER_KEYSCAN_COL_OUT_0_PIN 0
128+
#endif
129+
130+
// KEYSCAN COL_OUT_1 on PB05
131+
#ifndef SL_KEYSCAN_DRIVER_KEYSCAN_COL_OUT_1_PORT
132+
#define SL_KEYSCAN_DRIVER_KEYSCAN_COL_OUT_1_PORT gpioPortB
133+
#endif
134+
#ifndef SL_KEYSCAN_DRIVER_KEYSCAN_COL_OUT_1_PIN
135+
#define SL_KEYSCAN_DRIVER_KEYSCAN_COL_OUT_1_PIN 5
136+
#endif
137+
138+
// KEYSCAN COL_OUT_2 on PC05
139+
#ifndef SL_KEYSCAN_DRIVER_KEYSCAN_COL_OUT_2_PORT
140+
#define SL_KEYSCAN_DRIVER_KEYSCAN_COL_OUT_2_PORT gpioPortC
141+
#endif
142+
#ifndef SL_KEYSCAN_DRIVER_KEYSCAN_COL_OUT_2_PIN
143+
#define SL_KEYSCAN_DRIVER_KEYSCAN_COL_OUT_2_PIN 5
144+
#endif
145+
146+
// KEYSCAN COL_OUT_3 on PC07
147+
#ifndef SL_KEYSCAN_DRIVER_KEYSCAN_COL_OUT_3_PORT
148+
#define SL_KEYSCAN_DRIVER_KEYSCAN_COL_OUT_3_PORT gpioPortC
149+
#endif
150+
#ifndef SL_KEYSCAN_DRIVER_KEYSCAN_COL_OUT_3_PIN
151+
#define SL_KEYSCAN_DRIVER_KEYSCAN_COL_OUT_3_PIN 7
152+
#endif
153+
154+
// KEYSCAN ROW_SENSE_0 on PA05
155+
#ifndef SL_KEYSCAN_DRIVER_KEYSCAN_ROW_SENSE_0_PORT
156+
#define SL_KEYSCAN_DRIVER_KEYSCAN_ROW_SENSE_0_PORT gpioPortA
157+
#endif
158+
#ifndef SL_KEYSCAN_DRIVER_KEYSCAN_ROW_SENSE_0_PIN
159+
#define SL_KEYSCAN_DRIVER_KEYSCAN_ROW_SENSE_0_PIN 5
160+
#endif
161+
162+
// KEYSCAN ROW_SENSE_1 on PA06
163+
#ifndef SL_KEYSCAN_DRIVER_KEYSCAN_ROW_SENSE_1_PORT
164+
#define SL_KEYSCAN_DRIVER_KEYSCAN_ROW_SENSE_1_PORT gpioPortA
165+
#endif
166+
#ifndef SL_KEYSCAN_DRIVER_KEYSCAN_ROW_SENSE_1_PIN
167+
#define SL_KEYSCAN_DRIVER_KEYSCAN_ROW_SENSE_1_PIN 6
168+
#endif
169+
170+
// KEYSCAN ROW_SENSE_2 on PA07
171+
#ifndef SL_KEYSCAN_DRIVER_KEYSCAN_ROW_SENSE_2_PORT
172+
#define SL_KEYSCAN_DRIVER_KEYSCAN_ROW_SENSE_2_PORT gpioPortA
173+
#endif
174+
#ifndef SL_KEYSCAN_DRIVER_KEYSCAN_ROW_SENSE_2_PIN
175+
#define SL_KEYSCAN_DRIVER_KEYSCAN_ROW_SENSE_2_PIN 7
176+
#endif
177+
178+
// [KEYSCAN_SL_KEYSCAN_DRIVER_KEYSCAN]$
179+
// <<< sl:end pin_tool >>>
180+
181+
#endif /* KEYSCAN_DRIVER_CONFIG_H */

0 commit comments

Comments
 (0)