CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide

CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide
CY5672
PRoC™ BLE Remote Control
Reference Design Kit Guide
Doc. No. 001-97071 Rev. *A
Cypress Semiconductor
198 Champion Court
San Jose, CA 95134-1709
http://www.cypress.com
Copyrights
Copyrights
© Cypress Semiconductor Corporation, 2015-2017. This document is the property of Cypress Semiconductor
Corporation and its subsidiaries, including Spansion LLC (“Cypress”). This document, including any software or firmware
included or referenced in this document (“Software”), is owned by Cypress under the intellectual property laws and treaties
of the United States and other countries worldwide. Cypress reserves all rights under such laws and treaties and does not,
except as specifically stated in this paragraph, grant any license under its patents, copyrights, trademarks, or other
intellectual property rights. If the Software is not accompanied by a license agreement and you do not otherwise have a
written agreement with Cypress governing the use of the Software, then Cypress hereby grants you a personal, nonexclusive, nontransferable license (without the right to sublicense) (1) under its copyright rights in the Software (a) for
Software provided in source code form, to modify and reproduce the Software solely for use with Cypress hardware
products, only internally within your organization, and (b) to distribute the Software in binary code form externally to end
users (either directly or indirectly through resellers and distributors), solely for use on Cypress hardware product units, and
(2) under those claims of Cypress’s patents that are infringed by the Software (as provided by Cypress, unmodified) to
make, use, distribute, and import the Software solely for use with Cypress hardware products. Any other use, reproduction,
modification, translation, or compilation of the Software is prohibited.
TO THE EXTENT PERMITTED BY APPLICABLE LAW, CYPRESS MAKES NO WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, WITH REGARD TO THIS DOCUMENT OR ANY SOFTWARE OR ACCOMPANYING HARDWARE,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE. To the extent permitted by applicable law, Cypress reserves the right to make changes to this
document without further notice. Cypress does not assume any liability arising out of the application or use of any product
or circuit described in this document. Any information provided in this document, including any sample design information
or programming code, is provided only for reference purposes. It is the responsibility of the user of this document to
properly design, program, and test the functionality and safety of any application made of this information and any resulting
product. Cypress products are not designed, intended, or authorized for use as critical components in systems designed or
intended for the operation of weapons, weapons systems, nuclear installations, life-support devices or systems, other
medical devices or systems (including resuscitation equipment and surgical implants), pollution control or hazardous
substances management, or other uses where the failure of the device or system could cause personal injury, death, or
property damage (“Unintended Uses”). A critical component is any component of a device or system whose failure to
perform can be reasonably expected to cause the failure of the device or system, or to affect its safety or effectiveness.
Cypress is not liable, in whole or in part, and you shall and hereby do release Cypress from any claim, damage, or other
liability arising from or related to all Unintended Uses of Cypress products. You shall indemnify and hold Cypress harmless
from and against all claims, costs, damages, and other liabilities, including claims for personal injury or death, arising from
or related to any Unintended Uses of Cypress products.
Cypress, the Cypress logo, Spansion, the Spansion logo, and combinations thereof, WICED, PSoC, CapSense, EZ-USB,
F-RAM, and Traveo are trademarks or registered trademarks of Cypress in the United States and other countries. For a
more complete list of Cypress trademarks, visit cypress.com. Other names and brands may be claimed as property of their
respective owners.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
2
Contents
Safety Information.................................................................................................................................................................. 6
1.
Introduction.................................................................................................................................................................... 8
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
2.
Installation.................................................................................................................................................................... 15
2.1
2.2
2.3
3.
Kit Contents ........................................................................................................................................................... 8
PRoC BLE Remote Control Details ....................................................................................................................... 9
PSoC Creator ...................................................................................................................................................... 11
Getting Started .................................................................................................................................................... 12
Additional Learning Resources ............................................................................................................................ 12
1.5.1 Beginner Resources ............................................................................................................................... 12
1.5.2 Component Datasheets .......................................................................................................................... 12
1.5.3 Learning from Peers: Cypress Developer Community Forums ............................................................... 12
1.5.4 Other Kits ................................................................................................................................................ 13
Technical Support ................................................................................................................................................ 13
Document Conventions ....................................................................................................................................... 13
Acronyms ............................................................................................................................................................ 14
Before You Begin ................................................................................................................................................ 15
Install Software .................................................................................................................................................... 15
Uninstall Software................................................................................................................................................ 18
Kit Operation ................................................................................................................................................................ 19
3.1 Connecting the PRoC BLE Remote Control with the CySmart USB Dongle to Communicate with PC ............... 19
3.2 Connecting the PRoC BLE Remote Control with the CySmart USB Dongle to Communicate with
the CySmart Software .................................................................................................................................................. 20
3.2.1 Connecting the CY5672 Remote Control RDK to CySmart Software ..................................................... 21
3.3 Programming and Debugging .............................................................................................................................. 25
3.3.1 Programming and Debugging PRoC BLE on the Remote Control and Dongle ...................................... 25
3.3.2 Programming PRoC BLE on the Remote Control and Dongle Using PSoC Programmer ..................... 25
3.3.3 Programming and Debugging PRoC BLE on Remote Control and Dongle Using PSoC Creator .......... 28
3.3.4 Programming PSoC 5LP on the CySmart USB Dongle .......................................................................... 32
4.
Hardware ...................................................................................................................................................................... 35
4.1
4.2
4.3
Board Details ....................................................................................................................................................... 35
Theory of Operation ............................................................................................................................................. 38
4.2.1 Overview of the PRoC BLE Remote Control .......................................................................................... 38
4.2.2 Overview of CySmart Dongle ................................................................................................................. 39
Functional Description – PRoC BLE Remote Control .......................................................................................... 40
4.3.1 Power Supply ......................................................................................................................................... 40
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
3
Contents
4.4
5.
Firmware ...................................................................................................................................................................... 55
5.1
5.2
6.
4.3.2 Clock and Reset ..................................................................................................................................... 41
4.3.3 Program and Debug Circuit .................................................................................................................... 42
4.3.4 PRoC BLE Device .................................................................................................................................. 42
4.3.5 LED......................................................................................................................................................... 43
4.3.6 Button Matrix .......................................................................................................................................... 44
4.3.7 IR LED .................................................................................................................................................... 44
4.3.8 Motion Sensor ........................................................................................................................................ 45
4.3.9 Battery Monitoring................................................................................................................................... 46
4.3.10 Audio Input Device.................................................................................................................................. 46
4.3.11 Trackpad Interface .................................................................................................................................. 47
4.3.12 Test Points .............................................................................................................................................. 48
Functional Description – CySmart USB Dongle................................................................................................... 49
4.4.1 Power Supply System and Protection Circuitry ...................................................................................... 49
4.4.2 Clock and Reset ..................................................................................................................................... 49
4.4.3 Program and Debug Circuit .................................................................................................................... 50
4.4.4 PRoC BLE .............................................................................................................................................. 51
4.4.5 PSoC 5 LP .............................................................................................................................................. 52
4.4.6 LEDs and Buttons ................................................................................................................................... 53
4.4.7 USB Plug ................................................................................................................................................ 54
Firmware for PRoC BLE on the Remote Control ................................................................................................. 55
5.1.1 Firmware Architecture............................................................................................................................. 56
5.1.2 Watchdog Timer Subsystem ................................................................................................................... 64
5.1.3 BLE Subsystem ...................................................................................................................................... 65
5.1.4 Trackpad Subsystem .............................................................................................................................. 73
5.1.5 Motion Sensor Subsystem ...................................................................................................................... 82
5.1.6 Button Subsystem................................................................................................................................... 92
5.1.7 Keyboard Subsystem.............................................................................................................................. 95
5.1.8 Timer Subsystem .................................................................................................................................... 98
5.1.9 Battery Monitoring Subsystem ................................................................................................................ 98
5.1.10 Audio Subsystem .................................................................................................................................. 100
5.1.11 IR LED Subsystem ............................................................................................................................... 108
5.1.12 LED Subsystem .................................................................................................................................... 113
5.1.13 Flash Subsystem .................................................................................................................................. 115
5.1.14 Debug Subsystem ................................................................................................................................ 115
Firmware for the PRoC BLE and PSoC 5LP on the CySmart USB Dongle ....................................................... 116
5.2.1 Firmware Architecture........................................................................................................................... 116
5.2.2 BLE Subsystem .................................................................................................................................... 124
5.2.3 LED Subsystem .................................................................................................................................... 126
5.2.4 Button Subsystem................................................................................................................................. 127
5.2.5 UART Subsystem ................................................................................................................................. 127
5.2.6 USB Subsystem.................................................................................................................................... 135
Advanced Topics ....................................................................................................................................................... 138
6.1
Connecting PRoC the BLE Remote Control with a Bluetooth Smart Ready Device .......................................... 138
6.1.1 Windows 8.1 PC ................................................................................................................................... 138
6.1.2 MacBook Pro ........................................................................................................................................ 139
6.1.3 Android ................................................................................................................................................. 139
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
4
Contents
6.2
6.3
Current Measurement ........................................................................................................................................ 140
6.2.1 Measure System Current Consumption ................................................................................................ 140
6.2.2 Measure PRoC BLE Current Consumption .......................................................................................... 140
6.2.3 Measure Voltage................................................................................................................................... 141
Assembling and Disassembling the Remote Control ......................................................................................... 142
6.3.1 Disassembly Procedure ........................................................................................................................ 142
6.3.2 Assembly Procedure............................................................................................................................. 142
Appendix A. Schematics and FAQ ................................................................................................................................... 143
A.1 Schematics............................................................................................................................................................ 143
A.1.1 Remote Control ........................................................................................................................................ 143
A.1.2 Dongle ...................................................................................................................................................... 148
A.2 FAQ ....................................................................................................................................................................... 150
A.3 Troubleshooting and FAQ for Interoperability Issues with Bluetooth Smart Ready Devices ................................. 152
Revision History ................................................................................................................................................................. 153
Document Revision History ......................................................................................................................................... 153
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
5
Safety Information
The CY5672 PRoC™ BLE Remote Control Reference Design Kit (RDK) is intended for use as a development,
demonstration, and evaluation platform for hardware or software in a laboratory environment. The kit is not intended for
general consumer use. It generates, uses, and can radiate radio frequency energy. It has not been tested for compliance
with the limits applicable under any standard. Operation of the equipment may cause interference with radio
communications, in which case users, at their expense, will be required to take whatever measures may be required to
correct this interference. Cypress recommends that the kit be used only in a shielded room.
The CY5672 PRoC BLE Remote Control RDK boards contain electrostatic discharge (ESD)sensitive devices. Electrostatic charges readily accumulate on the human body and any
equipment, which can cause a discharge without detection. Permanent damage may occur to
devices subjected to high-energy discharges. Proper ESD precautions are recommended to
avoid performance degradation or loss of functionality. Store unused CY5672 PRoC BLE
Remote Control RDK boards in the protective shipping package.
End-of-Life/Product Recycling
The end-of-life cycle for this kit is five years from the date of manufacture mentioned on the back
of the box. Contact the nearest recycler to discard the kit.
General Safety Instructions
ESD Protection
ESD can damage boards and associated components. Cypress recommends that the user perform procedures only at an
ESD workstation. If an ESD workstation is not available, use appropriate ESD protection by wearing an antistatic wrist strap
attached to the chassis ground (any unpainted metal surface) on the board when handling parts.
Handling Boards
The boards provided with CY5672 are sensitive to ESD. This also applies to the boards that are provided with a plastic
casing when they are removed from the casing. Hold the boards only by the edges. After removing a board from the
box/casing, place it on a grounded, static-free surface. Use a conductive foam pad, if available. Do not slide the board over
any surface.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
6
Safety Information
Battery Care and Use

Use the correct size and type of battery specified in this guide.

Keep battery contact surfaces and battery compartment contacts clean by rubbing them with a clean pencil eraser or a
rough cloth each time you replace the batteries.

Remove the battery from a device when it is not expected to be used for several months.

Make sure that you insert the battery into your device properly, with the + (plus) and – (minus) terminals aligned
correctly.

Do not place the battery next to metallic objects such as keys and coins.

Never throw the battery into a fire.

Do not open up the battery.

Do not short the battery.

Do not subject the battery to high temperatures or high humidity.

Store the battery in a dry place.

Do not recharge a battery unless it is marked "rechargeable."
Battery Disposal
Batteries can be safely disposed of with normal household waste. Never dispose of batteries in a fire because they can
explode.
It is important not to dispose of large amounts of batteries in a group. Used batteries are often not completely “dead.”
Grouping used batteries together can bring the “live” batteries into contact with one another, creating safety risks.
Regulatory Compliance Information
This kit contains devices that transmit and receive radio signals in accordance with the spectrum regulations for the
2.4-GHz unlicensed frequency range. This kit has passed precompliance tests for the following regulatory standards:

CE

FCC Part 15

Canadian RSS-210

EU EN 300 328
Contact Cypress technical support at bleapps@cypress.com for further details.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
7
1. Introduction
Thank you for your interest in the CY5672 PRoC™ BLE Remote Control Reference Design Kit (RDK). This kit provides an
implementation of a Bluetooth LE (BLE), or Bluetooth Smart, remote control using the PRoC BLE single-chip solution.
PRoC BLE is a true single-chip solution that integrates Cypress’s industry-leading capacitive touch sensing, an energyefficient ARM® CortexTM-M0 CPU core, Bluetooth 4.1–compliant Bluetooth Smart connectivity, and a balun to minimize
external components for a wide variety of applications.
The kit includes a CySmart™ USB dongle, which can be used to connect the remote control to devices like PCs, laptops,
tablets, and smartphones. The dongle acts as a serial-USB bridge and can either pass data directly to the PC’s HID drivers
or it can interface with the CySmart tool for more detailed application analysis and debugging. The remote control and the
dongle can be programmed, enabling users to customize and evaluate firmware per their requirements. Schematics, layout
files, ready-to-use firmware, and source code are provided with the kit to enable PC peripheral designers to build their own
remote control designs.
1.1 Kit Contents
The CY5672 PRoC BLE Remote Control RDK includes the following items, as shown in Figure 1-1.
1.
PRoC BLE remote control
2.
CySmart USB dongle
3.
MiniProg3 programmer/debugger
4.
10-pin ribbon cable
5.
Two M2 X 5mm screws
6.
Two AAA batteries
7.
Phillips head screwdriver
8.
USB 2.0 standard A to mini-B cable
The kit also includes a quick start guide to enable users to connect the PRoC BLE remote control to a PC using the
CySmart USB dongle.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
8
Introduction
Figure 1-1. Kit Contents
Note: The color of the remote control received as part of the kit may differ from the color shown in Figure 1-1.
If any part of the kit is missing, contact your nearest Cypress sales office for help: www.cypress.com/go/support.
1.2 PRoC BLE Remote Control Details
This section details the blocks and explains the features of the PRoC BLE remote control.
Note: Figure 1-2 shows the PRoC BLE remote control without the back cover, so you can see all its features.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
9
Figure 1-2. PRoC BLE Remote Control Features
The PRoC BLE remote control can be connected to a host device like a PC, a smart TV, a tablet, or a smartphone using
Bluetooth Smart or USB (using the CySmart USB dongle). The quick start guide provided with the kit details the procedure
to connect the PRoC BLE remote control to a PC using the CySmart USB dongle. You can connect the PRoC BLE remote
control to any Bluetooth Smart or Bluetooth Smart Ready host device. Details for this procedure are available in the
Connecting PRoC the BLE Remote Control with a Bluetooth Smart Ready Device section.
Once connected (via Bluetooth Smart or via USB), the PRoC BLE remote control provides features that can be directly
used with a PC, smart TV, tablet, or smartphone.
Features supported on a PC or smart TV include the following:

Gestures on trackpad

Single-finger tracking for mouse cursor movement

Single-finger tap for left-click and double-tap for double-click

Two-finger tap for right-click

Two-finger pinch in/out for zoom out/in

Single-finger swipe at right and bottom edges for vertical and horizontal scrolling respectively

Single-finger swipe down on top edge to navigate to Start screen in Windows 8 or later and to open Start menu
in previous Windows versions
Note: The behavior of this gesture on a smart TV, tablet, or smartphone varies based on the model and
operating system)

Buttons for left-click and right-click

Volume control buttons to adjust the volume
Advanced features supported on a smart TV or supported via the CySmart tool on a PC include the following:

Power button to switch on or switch off the smart TV

Channel control buttons to change channels

Source button to switch across audio-video inputs

Return button for going back to previous view on a smart TV
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
10
Introduction
When used with the CySmart USB dongle, the onboard microphone can be used to stream voice data to the PC, smart TV,
and so on. The CySmart USB dongle enumerates as a USB microphone. A tool like a sound recorder can be used on the
PC to record the voice data coming from the remote. This feature cannot be used when directly connected to a Bluetooth
Smart Ready device since Bluetooth 4.0/4.1 does not specify standard audio profiles. The audio data is transmitted from the
remote to the dongle using the HID Over GATT Profile (HOGP).
Note: When using the CySmart USB dongle, these features are dependent upon the operating system supporting the
generic desktop and consumer usage pages of the human interface device (HID) class as well as the audio device class,
over USB. When the PRoC BLE remote control is directly connected to a Bluetooth Smart Ready device, these features
depend on the support available for the HOGP over Bluetooth Smart.
The PRoC BLE remote control also provides IR-based wireless connectivity. IR enables the PRoC BLE remote control to be
backward compatible with legacy host devices such as TVs that do not support Bluetooth Smart or USB. The following
features are supported over IR:

Power button to switch on or switch off the TV

Volume control buttons to adjust the volume

Channel control buttons to change channels

Source button to switch across audio-video inputs

Return button for going back to previous view on a smart TV
The remote control also provides LED-based notifications:

Red LED is on when remote control is advertising over Bluetooth Smart. It blinks three times and then switches off after
successful connection.

Red LED blinks on user activity when the remote control has lost the BLE link and it is trying to connect back to the
previously connected host such as a PC or smart TV. This typically occurs when the remote control goes out of range.

Red LED shows a slow breathing effect on user activity when the battery level is low (that is, the battery voltage is
below 2.0 V).

Red LED shows a fast breathing effect on user activity if the remote control is not connected to the CySmart USB
dongle or a Bluetooth Smart Ready host device.
Moreover, the remote control offers the ability to:

Debug and program the onboard PRoC BLE device using the 10-pin header

Measure the current consumed by PRoC BLE
1.3 PSoC Creator
PSoC Creator™ is a state-of-the-art, easy-to-use integrated design environment (IDE). It introduces a revolutionary
hardware and software co-design platform, powered by a library of verified and characterized PSoC Components™.
With PSoC Creator, you can:

Drag and drop PSoC Components to build a schematic of your custom design

Automatically place and route Components and configure GPIOs

Develop and debug firmware using the included Component APIs
PSoC Creator also enables you to tap into an entire tool ecosystem, including integrated compiler chains and production
programmers for PSoC® devices. For more information, visit www.cypress.com/creator.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
11
1.4 Getting Started
This guide will help you get acquainted with the CY5672 PRoC BLE Remote Control RDK.

The Kit Contents section details the contents of the kit.

The quick start guide shipped with the kit provides instructions on how to start using the PRoC BLE remote control.

The PRoC BLE Remote Control Details section details the features of the remote control.

The Installation chapter describes the installation of the kit software. This includes the PSoC Creator IDE for
development, programming, and debugging; PSoC Programmer for programming hex files; and the CySmart tool for
Bluetooth LE host emulation

The Kit Operation chapter describes common procedures like programming and debugging the PRoC BLE remote
control and the CySmart USB dongle. It also introduces the CySmart tool for Bluetooth LE host emulation.

The Hardware chapter describes the hardware contents of the kit.

The Firmware chapter describes the firmware on the PRoC BLE remote control and the CySmart USB dongle.

The Advanced Topics chapter explains topics like connecting the remote control to Bluetooth Smart Ready devices,
assembling and disassembling the remote control, and measuring current/voltage on the remote control.

Appendix A. Schematics and FAQ provides schematics and a list of frequently asked questions (FAQs) for
troubleshooting.
1.5 Additional Learning Resources
Visit www.cypress.com/PRoCBLE for additional learning resources in the form of datasheets, technical reference manuals,
and application notes.
1.5.1 Beginner Resources
PSoC Creator Training: www.cypress.com/go/creatorstart/creatortraining
1.5.2 Component Datasheets
To view the datasheet of a Component from PSoC Creator, right-click on the Component and select Open Datasheet (see
Figure 1-3).
Figure 1-3. Opening Component Datasheet
1.5.3 Learning from Peers: Cypress Developer Community Forums
Visit www.cypress.com/forums to interact with Cypress applications support teams.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
12
Introduction
1.5.4 Other Kits
Other kits available for PRoC BLE include the following.

CY8CKIT-042-BLE Bluetooth Low Energy Pioneer Kit (www.cypress.com/CY8CKIT-042-BLE)

CY5682 PRoC BLE Touch Mouse RDK (www.cypress.com/CY5682)

CY5671 PRoC BLE Module (www.cypress.com/CY5671)

CY5670 CySmart USB Dongle (www.cypress.com/CY5670)

CY5674 PRoC BLE SMA Module (www.cypress.com/CY5674)
1.6 Technical Support
For assistance, visit Cypress Support or contact customer support at +1(800) 541-4736 Ext. 2 (in the USA) or +1 (408) 9432600 Ext. 2 (International).
1.7 Document Conventions
Table 1-1. Document Conventions for Guides
Convention
Usage
Courier New
Displays file locations, user-entered text, and source code:
C:\ ...cd\icc\
Italics
Displays file names and reference documentation:
Read about the sourcefile.hex file in the PSoC Designer User Guide.
[Bracketed, Bold]
Displays keyboard commands in procedures:
[Enter] or [Ctrl] [C]
File > Open
Represents menu paths:
File > Open > New Project
Bold
Displays commands, menu paths, and icon names in procedures:
Click the File icon and then click Open.
Times New Roman
Displays an equation:
2+2=4
Text in gray boxes
Describes Cautions or unique functionality of the product.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
13
1.8 Acronyms
Table 1-2. Acronyms Used in This Document
Acronym
Definition
ADC
Analog-to-digital converter
AML
Air Motion Library
API
Application programming interface
BD address
Bluetooth device address
BLE
Bluetooth Low Energy
CDC
Communications Device Class
ESD
Electrostatic discharge
GAP
Generic Access Profile
GATT
Generic Attribute Profile
GPIO
General-purpose I/O
GUI
Graphical user interface
HID
Human-interface device
HOGP
HID over GATT Profile
I2C
Inter-integrated circuit
IAS
Immediate Alert Service
IDAC
Interconnecting digital-analog converter
IDE
Integrated development environment
LED
Light-emitting diode
MTU
Maximum transmission unit
PHY
Physical layer
PrISM
Precise Illumination Signal Modulation
PRoC
Programmable Radio-on-Chip
PSoC
Programmable System-on-Chip
PWM
Pulse-width modulator
QFN
Quad flat no-lead (package)
SAR
Successive approximation register (ADC)
SWD
Serial wire debug
UART
Universal asynchronous receiver transmitter
UUID
Universally Unique Identifier
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
14
2. Installation
This chapter describes the steps to install the software tools and packages on a PC for the CY5672 PRoC BLE Remote
Control RDK. The kit installer will install the following software tools and associated documentation on your PC.

PSoC Creator: IDE used to view, develop, and build firmware for PRoC BLE based devices.

PSoC Programmer: Software used to download a hex file to the PRoC BLE device.

CySmart: A Bluetooth LE host emulation tool for windows PCs. The tool works with the CySmart USB dongle and
provides an easy-to-use GUI to enable customers to evaluate and debug Bluetooth LE peripheral applications. Refer to
the section Connecting the CY5672 Remote Control RDK to CySmart Software for more details on how to use the
CySmart tool.

Documentation: Includes kit documentation files, hardware schematics, layout, and BOM.
2.1 Before You Begin
All Cypress software installations require administrator privileges. Administrator privileges are not required to execute the
software after installation. Before you install the kit software, close any other Cypress software that is currently running.
2.2 Install Software
Follow these steps to install the CY5672 PRoC BLE Remote Control RDK software:
1.
2.
Download the CY5672 PRoC BLE Remote Control RDK software from www.cypress.com/CY5672. The kit software is
available in three formats for download:
a.
CY5672 Kit Setup: This installation package contains all files related to the kit as well as PSoC Creator, PSoC
Programmer, and CySmart software. However, it does not include the Windows Installer or Microsoft .NET
framework packages. If these packages are not on your computer, the installer directs you to download and install
them from the Internet.
b.
CY5672 Kit Only: This executable file installs only the kit contents, which include kit source code and firmware,
hardware files, and user documents. This package can be used if all the software prerequisites (PSoC Creator,
PSoC Programmer, and CySmart) are installed on your PC.
c.
CY5672 DVD ISO: This file is a complete package, stored in a DVD-ROM image format, that can be used to
create a DVD or extract using an ISO extraction program such as WinRAR. The file can also be mounted like a
virtual DVD using virtual drive programs such as Virtual CloneDrive and MagicISO. This file includes all the
required software, utilities, drivers, hardware files, and user documents.
If you have downloaded the ISO file, mount it in a virtual drive. Extract the ISO contents if you do not have a virtual
drive to mount. Double-click cyautorun.exe in the root directory of the extracted content or mounted ISO if “Autorun
from CD/DVD” is not enabled on the PC. The installation window will appear automatically.
Note: If you are using the CY5672 Kit Setup or CY5672 Kit Only file, then double-click on the file and go to step 4.
3.
Click Install CY5672 PRoC BLE RDK, shown in Figure 2-1, to start the kit installation.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
15
Installation
Figure 2-1. Kit Installer Screen
4.
Select the folder in which you want to install the kit-related files by clicking Change, as shown in Figure 2-2. Choose
the directory and click Next.
Figure 2-2. CY5672 PRoC BLE RDK – InstallShield Wizard
5.
Choose the “Typical,” “Custom,” or “Complete” installation type in the Product Installation Overview window, as
shown in Figure 2-3. Click Next after you select the installation type.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
16
Installation
Figure 2-3. Product Installation Overview
6.
Read the license agreement and select I accept the terms in the license agreement to continue with the installation.
Click Next. When you click Next, the installer automatically installs the required software, if it is not present on your
computer. Following are the required software:

PSoC Creator 3.1 or later: Download from www.cypress.com/psoccreator.

PSoC Programmer 3.22 or later: Download from www.cypress.com/programmer.

CySmart 1.0 or later: Download from www.cypress.com/CySmart.
Note: If you are using the CY5672 Kit Only package, you must download and install the software manually.
7.
The installation begins by presenting the list of packages on the installation page. A green check mark appears next to
each package after successful installation.
8.
Enter your contact information or select the option Continue Without Contact Information, as shown in Figure 2-4.
Click Finish to complete the kit installation.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
17
Installation
Figure 2-4. Installer Asking for Contact Information
Note: The PSoC Creator version number displayed in the figure may vary depending upon the latest PSoC Creator
packaged in the installer.
9.
After the installation is complete, the kit contents are available at the following location:
<Install_Directory>\CY5672 PRoC BLE RC RDK
Default location:
Windows 7 (64-bit):
C:\Program Files (x86)\Cypress
Windows 7 (32-bit):
C:\Program Files\Cypress
Note: For Windows 7/8/8.1 users, the installed files and the folder are read only.
2.3 Uninstall Software
The software can be uninstalled using one of the following methods:

Go to Start > All Programs > Cypress > Cypress Update Manager > Cypress Update Manager; click the Uninstall
button for the appropriate software package.

Go to Start > Control Panel > Programs and Features; click the Uninstall/Change button for the appropriate
software package.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
18
3. Kit Operation
This chapter introduces the features of the CY5672 PRoC BLE Remote Control RDK that will be used as part of the kit
operation. Topics include:

Connecting the PRoC BLE Remote Control with the CySmart USB Dongle

Connecting the PRoC BLE Remote Control with the CySmart USB Dongle to Communicate with the CySmart Software

Programming and Debugging
3.1 Connecting the PRoC BLE Remote Control with the CySmart USB
Dongle to Communicate with PC
The first use for the dongle is to allow the remote control to interact with a PC, which may not necessarily have the built-in
Bluetooth Smart capability. In such a case, the dongle receives the BLE packets from the remote control, converts them to
standard USB HID packets, and sends them to the PC.
In this document, “connecting” refers to establishing a Bluetooth Smart wireless link between the PRoC BLE remote control
and the CySmart USB dongle. The process of establishing the connection for the first time involves “bonding,” which refers
to storing encryption information from the remote control in the nonvolatile memory of the CySmart USB dongle. This stored
information forms the “whitelist,” which is used by Bluetooth Smart and Bluetooth Smart Ready devices to scan and search
for subsequent connections.
The PRoC BLE remote control is factory-bonded with the CySmart USB dongle. Therefore, when the dongle is plugged in, it
begins to search for the bonded remote control (that is, remote control unit that is present in the dongle’s whitelist). After
both AAA batteries are inserted, any user activity on the PRoC BLE remote control connects it to the dongle. Refer to step 1
in the Assembling and Disassembling the Remote Control section for instructions on removing the back cover to insert the
two AAA batteries.
The remote control needs to be reconnected to the CySmart USB dongle whenever the remote control or the dongle is
reprogrammed. The steps to reconnect the PRoC BLE remote control with the CySmart USB dongle are as follows.
Note: Making changes to the remote control firmware or CySmart USB dongle firmware that impact the connection
establishment behavior may invalidate the following steps.
Ensure that the two AAA batteries provided with the kit are inserted into the battery holder at the back of the remote control
before following these steps.
1.
Insert the dongle into a USB port on the PC. The red power LED on the dongle glows to show that the dongle is
powered on, and the green status LED on the dongle glows to show that enumeration is complete on the dongle side.
The blue user LED on the dongle shows a slow breathing effect to indicate that the dongle is scanning for bonded
devices.
Notes:

The time taken to complete enumeration on the PC side for the first time can vary based on driver installation time.

2.
The blue user LED on the CySmart USB dongle does not show a slow breathing effect if the dongle is
reprogrammed. In this case, press the user button (SW2) on the CySmart USB dongle to start scanning. The blue
LED shows the fast breathing effect.
Press the connect button on the remote control. The red LED on the remote control glows to show that the remote
control is now in advertising mode. The remote control will try connecting to the CySmart USB dongle for a maximum
interval of 30 seconds.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
19
Kit Operation
3.
When a successful connection is established, the red LED on the remote control blinks three times and then switches
off, while the blue user LED on the CySmart USB dongle glows continuously. When the connection is unsuccessful, the
LED switches off after a 30-second timeout. In this event, repeat the sequence starting from step 2 to establish a
connection.
Note: Do not turn off the remote control while the red LED is blinking after a successful connection is established.
4.
Place and move your finger on the trackpad surface. If the connection is successful, the mouse cursor on the PC will
follow your finger movement.
3.2 Connecting the PRoC BLE Remote Control with the CySmart USB
Dongle to Communicate with the CySmart Software
The second use for the dongle is as an interface to the CySmart software. CySmart is a Bluetooth LE host emulation tool for
Windows PCs. This tool provides an easy-to-use GUI that enables you to test and debug your Bluetooth LE peripheral
applications. It supports device discovery, connection establishment, and pairing and bonding. It also provides the ability to
access the Generic Attribute Profile (GATT) server database for the PRoC BLE remote control.
When plugged into a USB port, the CySmart USB dongle enumerates, exposing the USB interfaces. Figure 3-1 and Figure
3-2 show the drivers for the CySmart USB dongle installation on a Windows 7 PC.
Figure 3-1. Driver Installation in Progress for CySmart USB Dongle on Windows 7
Figure 3-2. Driver Installation Complete for CySmart USB Dongle on Windows 7
Note: The appearance of the windows shown in and Figure 3-1 and Figure 3-2 may differ across operating systems and
based on settings.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
20
Kit Operation
3.2.1
1.
Connecting the CY5672 Remote Control RDK to CySmart Software
Plug the CySmart USB dongle into the PC, as shown in Figure 3-3.
Figure 3-3. CySmart USB Dongle Connected to Laptop
2.
Open CySmart and click the Select Dongle button. A window appears, as shown in Figure 3-4.
Figure 3-4. BLE Dongle Target Window
3.
Click the Refresh button and verify that the Cypress BLE HID dongle is listed, as shown in Figure 3-5. Click on
Cypress BLE HID Dongle (…), and click the Connect button. The CySmart tool appears as shown in Figure 3-6.
Figure 3-5. BLE Dongle Target Window
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
21
Kit Operation
Figure 3-6. CySmart Window
Note: The Blue LED on the dongle turns OFF once the connection with CySmart tool is established. It will remain in the
OFF state as long as the communication with the CySmart tool is active.
4.
Insert two AAA batteries into the battery holder of the remote control.
5.
Press the Connect button on the remote control. The red LED glows to indicate that the remote control is now in
advertising mode.
6.
Click the Start Scan button on the CySmart tool to start scanning for BLE devices that are advertising. Verify that
“CY5672” is listed under Discovered Devices, as shown in Figure 3-7.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
22
Kit Operation
Figure 3-7. CySmart Discovered Devices Window
7.
Double-click on “CY5672.” Click Yes in the dialog box to activate the remote emulator tab.
Figure 3-8. CySmart Remote Emulation View Dialog Box
8.
The remote emulator tab is displayed on the CySmart tool, as shown in Figure 3-9. This will take several seconds as
the attributes are read from the remote. This tab allows you to test the features of the PRoC BLE remote control
described in the PRoC BLE Remote Control Details section.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
23
Kit Operation
Figure 3-9. RDK Emulator in CySmart
9.
Invoke the remote control features. The invoked features are highlighted on the emulator tab. For example, when you
press VOL + on the remote control, the VOL + button on the remote control emulator is highlighted, as shown in Figure
3-10 as long as the VOL + button remains pressed on the remote control.
Figure 3-10. Testing Remote Control Features Using RDK Emulator
For more information on using the CySmart tool and the RDK Emulation View, download the guide for the CySmart tool
from www.cypress.com/go/CySmartUserGuide.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
24
Kit Operation
3.3 Programming and Debugging
3.3.1 Programming and Debugging PRoC BLE on the Remote Control and Dongle
The PRoC BLE remote control and the CySmart USB dongle support programming and debugging using the MiniProg3
programmer/debugger provided with the kit. Both expose a 10-pin connector. Figure 3-11 is a block diagram showing the
header and associated connections.
Figure 3-11. Programming/Debugging PRoC BLE
Notes:

Remove the warning sticker before using MiniProg3.

Before trying to program or debug the device, make sure that PSoC Creator and PSoC Programmer are installed on
the PC.
You can program the remote control either with PSoC Programmer or directly from PSoC Creator.
3.3.2 Programming PRoC BLE on the Remote Control and Dongle Using
PSoC Programmer
To program the remote control using PSoC Programmer, follow these steps.
1. Connect MiniProg3 to the PC using the USB A to mini-B cable provided with the kit. When it is properly connected, the
four LEDs on the MiniProg3 turn on for a few seconds.
2.
Connect one end of the 10-pin ribbon cable, provided with the kit, to the 10-pin header on the MiniProg3.
3.
Connect the other end of the 10-pin ribbon cable to the 10-pin connector (J3 on the remote control or J2 on the
CySmart USB dongle). Programming headers on both the remote control and the CySmart USB dongle (J3 and J2
respectively) are polarized. Do not apply excessive force; instead, ensure that the connectors are plugged in the
correct orientation.
4.
Run PSoC Programmer by choosing Start > All Programs > Cypress > PSoC Programmer.
Note: Ensure that only one instance of PSoC Programmer is running on the PC.
5.
To establish the connection with a programmer, select either the “MiniProg3” device from the Port Selection list box or
the Connect/Disconnect icon, as shown in Figure 3-12.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
25
Kit Operation
Figure 3-12. PSoC Programmer
6.
If the connection is successful, the green status LED on MiniProg3 lights up. A blue square with rounded corners
appears next to “MiniProg3” in the Port Selection list box. Also, the status in the lower right corner of the PSoC
Programmer window turns green and displays Connected.
7.
Ensure that the settings under Programming Parameters in the Programmer tab are set to the values specified in
Table 3-1.
Table 3-1. Programming Parameters
Programming
Parameter
Programming Mode
Setting
Remote Control: Reset (only if batteries are inserted) or Power Cycle
Dongle: Reset (if plugged into and powered via USB port) or Power Cycle ( when unplugged
from USB port)
Verification
On
AutoDetection
On
Connector
10p
Clock Speed
1.6 MHz
Note: Reset mode can be used even when batteries are not inserted if the Toggle Power button shown in Figure 3-12
is pressed before step 9.
8.
Ensure that the parameters under Programmer Characteristics are set to the values specified in Table 3-2.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
26
Kit Operation
Table 3-2. Programmer Characteristics
Programmer Characteristics
Setting
Protocol
SWD (Serial Wire Debug)
Voltage
2.5 V
Note: The value of 5 V for Voltage in the Programmer Characteristics section is not supported, as it is beyond the
operating voltage of the remote control. The remote control contains an overvoltage protection circuit to prevent
damage to the kit if 5 V is selected.
9.
Click on the File Load icon. A dialog box appears. Browse to the location of the hex file to be programmed and select
the hex file. The selected file appears as the “File Path” in the Programmer tab. The hex file for the firmware provided
with the kit is as follows:

PRoC BLE remote control: <Install_Directory>\CY5672 PRoC BLE RC RDK\1.0\Firmware\Hex Files\Remote
Control\CY5672_Remote_Control.hex

CySmart
USB
dongle:
<Install_Directory>\CY5672
Files\Dongle\BLE_HID_CySmart_Dongle.hex
PRoC
BLE
RC
RDK\1.0\Firmware\Hex
10. Click the Program icon to program the PRoC BLE device on the remote control or the CySmart USB dongle with the
selected hex file. After successful programming, the “Programming Succeeded” message will be displayed in the log
area, as shown in Figure 3-13. Also the status in the lower right corner of the PSoC Programmer window turns green
and shows PASS.
Figure 3-13. Programmer Window after Successful Programming
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
27
Kit Operation
3.3.3 Programming and Debugging PRoC BLE on Remote Control and Dongle Using
PSoC Creator
To program and debug PRoC BLE on the remote control or CySmart USB dongle using PSoC Creator, follow these steps.
1.
Run PSoC Creator by choosing Start > All Programs > Cypress > PSoC Creator.
2.
Go to the Start page, expand Kits > CY5672 Remote Control RDK, and then click on the project that you want to
open.
Figure 3-14. Opening a project in PSoC Creator
This allows you to save an editable copy of the project to the location of your choice. After the project is saved it is
opened by the PSoC Creator for editing.
3.
Note that the debug option is disabled by default in the remote control firmware to minimize power consumption. You
can enable the debug option using the following procedure:
a.
Open CY5672_Remote_Control.cydwr from the Workspace Explorer, which is located by default along the lefthand side of the PSoC Creator window.
b.
Click the System tab.
c.
Choose the “SWD” option under Debug Select, as shown in Figure 3-15.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
28
Kit Operation
Figure 3-15. Enabling Debug Option in PSoC Creator
4.
Build the project by choosing Build > Build <project name>, as shown in Figure 3-16.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
29
Kit Operation
Figure 3-16. Building the Project in PSoC Creator
The Output window in PSoC Creator and the status bar display any errors encountered during the build process.
Ensure that the project builds without errors.
5.
Connect the MiniProg3 to the PC using the USB A to mini-B cable provided with the kit. When it is properly connected,
the four LEDs on the MiniProg3 turn on for a few seconds.
6.
Connect one end of the 10-pin ribbon cable, provided with the kit, to the 10-pin header on the MiniProg3.
7.
Connect the other end of the 10-pin ribbon cable to the 10-pin connector on the remote control (J3) or on the CySmart
USB dongle (J2).
8.
Start programming by choosing Debug > Program, as shown in Figure 3-17. This will bring up the Select Debug
Target window.
Figure 3-17. Programming via PSoC Creator
9.
In the Select Debug Target window, click the Port Setting button and set the configuration options, as shown in
Figure 3-18.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
30
Kit Operation
Figure 3-18. Port Settings
Notes:

Acquire Mode can be set to “Reset” only if batteries are inserted. Otherwise, set it to “Power Cycle” and choose
the Power setting as 1.8 V, 2.5 V, or 3.3 V.

The External selection for the Power setting works only if batteries are inserted, regardless of the Acquire Mode
selection.
10. In the Select Debug Target window, select the PRoC BLE device and click Connect, as shown in Figure 3-19. Then
click OK.
Figure 3-19. Select Debug Target
11. Check the Output window and the status bar to verify if programming is completed successfully.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
31
Kit Operation
12. If you need to debug, choose Debug > Debug, as shown in Figure 3-20, or press [F5] in PSoC Creator. In debug
mode, you can set the breakpoints and step through the code as required. Note that you must enable debugging in the
project for this to work, as shown in Figure 3-15.
Figure 3-20. Debugging via PSoC Creator
Detailed PSoC Creator tutorials are available at: www.cypress.com/training.
3.3.4 Programming PSoC 5LP on the CySmart USB Dongle
The PSoC 5LP controller on the CySmart USB dongle acts as a UART-to-USB bridge, which transfers the data received
from PRoC BLE over UART to the USB interfaces listed in Table 3-3. The PSoC 5LP controller provides USB bootloader
support to enable users to change the firmware.
Table 3-3. Exposed CySmart USB Dongle Interfaces
Interface
Description
USB Composite Device
Generic USB device that supports multiple interfaces
USBUART (COM Port)
USB-UART bridge to work with CySmart tool
Mouse
Standard mouse device for generic mouse functionality
Keyboard
Keyboard device for Windows based shortcuts
Cypress Digital Audio
Microphone to stream voice data
Follow these steps to download the bootloadable project onto the PSoC 5LP device.
1.
2.
Keep the reset switch (SW1) pressed and insert the CySmart USB dongle into a USB port on the PC. If the switch
is pressed for more than 100 ms, the PSoC 5LP on the dongle enters bootloader mode. This is indicated by a
blinking green LED on the dongle.
Open the Bootloader Host tool from PSoC Creator by choosing Tools > Bootloader Host, as shown in Figure 3-21.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
32
Kit Operation
Figure 3-21. Open Bootloader Host Tool from PSoC Creator
3.
In the Bootloader Host tool, click Filters and add a filter to identify the USB device. Set VID as “0x04B4” and PID
as “0xF13B”, and then click OK, as shown in Figure 3-22. Click on “USB Human Interface Device” under Ports.
Figure 3-22. Port Filters Tab in Bootloader Host Tool
4.
In the Bootloader Host tool, click the Open File button (shown in Figure 3-23) to browse to the location of the
bootloadable file (*.cyacd), as shown in Figure 3-24. The bootloadable file for the firmware provided with the kit is
<Install_Directory>\CY5672 PRoC BLE RC RDK\1.0\Firmware\Hex Files\Dongle\CY5672_Dongle_Bridge.cyacd
Note: The *.cyacd file is generated on building the project for PSoC 5LP, provided as part of the kit installable. This
project
is
<Install_Directory>\CY5672 PRoC BLE RC
RDK\1.0\Firmware\Dongle\CY5672_Dongle_Bridge\
CY5672_Dongle_Bridge.cywrk.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
33
Kit Operation
Figure 3-23. Open/Program Bootloadable File from Bootloader Host Tool
Open file
button
Program
button
Figure 3-24. Select Bootloadable File from Bootloader Host
5.
6.
Click the Program button in the Bootloader Host tool to program the device, as shown in Figure 3-23.
If the bootload is successful, the log of the tool displays “Successful”; otherwise, it displays “Failed” with a statement
describing the failure.
For additional information on bootloaders, refer to Cypress application note AN73503 – USB HID Bootloader for PSoC 3
and PSoC 5LP.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
34
4. Hardware
This chapter describes the CY5672 RDK hardware such as the PRoC BLE remote control, the CySmart USB dongle, and
its constituent blocks.
Note: “Module” in this chapter refers to a self-contained assembly of electronics components and circuitry, for example, the
trackpad module.
4.1 Board Details
The PRoC BLE remote control has two boards connected via an 18-pin connector:

Main board

Trackpad module
The main board consists of the following components:

CYBL10563-56LQXI PRoC BLE controller

Buck-boost converter with two AAA batteries in series

IR LED for sending commands

Overvoltage protection circuit

10-pin SWD header for programming and debugging the PRoC BLE controller

Onboard antenna for the BLE

One red LED to indicate system status

MEMS microphone for voice input

Inertial motion sensor

3 × 3 button matrix + 3 additional buttons

Battery monitoring circuit

18-pin male connector to connect to the trackpad module

24-MHz and 32.768-kHz crystals

Wiggle antenna and matching network
The trackpad module board consists of the following key components:

Trackpad sensors

18-pin female connector to connect to the main board
Top and bottom views of the main board and the trackpad module, with several key components marked, are shown in
Figure 4-1 and Figure 4-2 respectively.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
35
Hardware
Figure 4-1. CY5672 PRoC BLE Remote Control Main Board and Trackpad Module Top View
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
36
Hardware
Figure 4-2. CY5672 PRoC BLE Remote Control Main Board and Trackpad Module Bottom View
The CySmart USB dongle board consists of the following key components, as shown in Figure 4-3:

CYBL10162-56LQXI PRoC BLE controller

Hardware reset and button switch
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
37
Hardware

CY8C5868LTI-LP039 PSoC 5LP controller

10-pin header for programming and debugging PRoC BLE using SWD

Onboard antenna for BLE

USB 2.0 connector

User and Reset buttons

LEDs (User, Status & Power)

24-MHz and 32.768-kHz crystals

Power and decoupling capacitor circuit

Wiggle antenna and matching network
Figure 4-3. CySmart USB Dongle Description
4.2 Theory of Operation
The CY5672 RDK contains a PRoC BLE-based remote control device and a PRoC BLE-based CySmart USB dongle.
4.2.1 Overview of the PRoC BLE Remote Control
Figure 4-4 shows the block diagram for the PRoC BLE remote control (including the PRoC BLE remote control main board
and trackpad module).
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
38
Hardware
Figure 4-4. Block Diagram of PRoC BLE Remote Control
4.2.2 Overview of CySmart Dongle
The CySmart USB dongle is a Bluetooth Smart-to-USB bridge for USB-enabled devices (PCs, smart TVs, tablets, and so
on). The dongle includes a PRoC BLE device, which is programmed to receive data from the remote control over a
Bluetooth Smart link. It also contains a PSoC 5LP device, which functions as a serial-to-USB bridge by transferring the data
received from PRoC BLE over UART to the PC over USB, as shown in Figure 4-5.
Figure 4-5. CySmart Dongle Block Diagram
The dongle is based on the CYBL10162-56LQXI PRoC BLE controller. It is intended to make it as easy as possible for
Cypress customers/distributors to get started with Cypress’s PRoC BLE-based reference designs (CY5672 PRoC BLE
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
39
Hardware
Remote Control RDK and CY5682 PRoC BLE Touch Mouse RDK). The dongle can be connected to any device like a PC or
a smart TV that supports HID over USB. Note that the PRoC BLE remote control can also be directly connected to any
Bluetooth Smart Ready device; see the Connecting PRoC the BLE Remote Control with a Bluetooth Smart Ready Device
section for details.
The CySmart dongle has a USB A-type plug to connect the PSoC 5LP device to the USB port of the host PC. The PSoC
5LP device then communicates with the PRoC BLE device over UART. The firmware provided with the kit installer uses the
UART interface. The dongle has an onboard printed wiggle antenna. It also has a user LED, a user button, and a reset
button for the PRoC BLE device. The CySmart USB dongle is powered directly through the USB port (VBUS) at 5.0 V.
PSoC 5LP enables bootloading over USB to change the firmware for PSoC 5LP. See the Programming PSoC 5LP on the
CySmart USB Dongle section for details on bootloading the PSoC 5LP.
4.3 Functional Description – PRoC BLE Remote Control
4.3.1 Power Supply
The remote control is powered using two AAA batteries connected in series to provide a maximum output voltage of 3 V.
Figure 4-6 shows the DC-DC (buck-boost) converter circuit that regulates the output voltage at 2.2 V. This voltage is further
dropped to 2.1 V because of the reverse protection diode, D1. The entire remote control circuit operates at 2.1 V.
Figure 4-6. Power Supply Circuit
The overvoltage protection circuit shown in Figure 4-7 ensures that using MiniProg3 at 5 V for programming does not
damage the system components.
Figure 4-7. Overvoltage Protection Circuit
The current consumption for the PRoC BLE device, IR LED, audio device, and motion sensor can be measured by using
the circuits shown in Figure 4-8. For more information on how to measure the current consumption, refer to the Current
Measurement section.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
40
Hardware
Figure 4-8. Current Measurement Circuits
4.3.2 Clock and Reset
The PRoC BLE device requires two crystal oscillators, one running at 24 MHz and the other at 32.768 kHz, for its operation,
as shown in Figure 4-9. Both oscillators are in the Pierce configuration. The 24-MHz oscillator is used by the Bluetooth
Smart radio in the Active state, whereas the 32.768-kHz crystal is used to maintain Bluetooth Smart link timing in various
Sleep modes.
Figure 4-9. Clock Design
The RC reset circuit shown in Figure 4-10 provides the power-on reset pulse for the PRoC BLE device.
Figure 4-10. Reset Circuit
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
41
Hardware
4.3.3 Program and Debug Circuit
PRoC BLE exposes the SWD interface on the 10-pin header J3, as shown in Figure 4-11. The Programming and
Debugging PRoC BLE on the Remote Control and Dongle section describes how to use the J3 header to debug or program
PRoC BLE on the remote control.
Figure 4-11. SWD Debug Header
4.3.4 PRoC BLE Device
The CYBL10563-56LQXI PRoC BLE is a 32-bit, 48-MHz ARM Cortex-M0 solution with CapSense®, a 12-bit SAR ADC, 4
Timer Counter Pulse Width Modulators (TCPWMs), 36 GPIOs, 2 Serial Communication Blocks (SCBs), an LCD direct drive,
inter-IC Sound Bus (I2S), and an integrated Bluetooth Smart radio with a balun. PRoC BLE includes a royalty-free BLE
stack compatible with Bluetooth 4.1 and provides a complete, programmable, and flexible solution for HID. In addition,
PRoC BLE provides a simple, low-cost way to add BLE connectivity to any existing system.
GPIOs and serial interfaces are used to interface the essential components for a working remote control—such as the
microphone, motion sensor, trackpad, buttons, LEDs, and so on—with PRoC BLE. The data collected from these
components is transmitted over the air using the Bluetooth Smart link. The PRoC BLE device is connected to a wiggle
antenna through an LC filter circuit for optimum RF performance, as shown in Figure 4-12.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
42
Hardware
Figure 4-12. PRoC BLE Connections
4.3.5 LED
This section describes the hardware circuit for the red LED, shown in Figure 4-13, is used to show a notification for different
firmware states.
Figure 4-13. LED
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
43
Hardware
4.3.6 Button Matrix
This section describes the hardware circuit button matrix in CY5672. A button matrix provides most of the required remote
control key functionalities. A custom implementation is provided for two more buttons (Figure 4-14): a button to enable the
motion sensor and the return button. These two buttons use GPIOs that are also assigned to rows in the keyboard matrix. A
description of how these buttons are scanned is located in the Keyboard Subsystem section. An additional button is
provided on the remote control, as shown in Figure 4-18. In the firmware provided with this kit, this button is used to switch
between voice and normal remote control operation.
Figure 4-14. Button Matrix
4.3.7 IR LED
The IR LED onboard the remote control is used to implement the NEC and Samsung IR transmission protocols. These
protocols are used to operate a TV in a traditional manner. The circuit uses a P-MOS (Q4) to switch the IR LED (LED1)
shown in Figure 4-15. The switch is required because the IR LED operates at 30 mA (approximately), which is higher than
the PRoC BLE ports can drive/sink.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
44
Hardware
Figure 4-15. IR LED Circuitry
4.3.8 Motion Sensor
An inertial (motion) sensor (MPU-6500) is used to detect the movement and rotation information in 6 degrees of freedom (X,
Y and Z coordinates relative to the previous location). The motion sensor then provides an interrupt using INT pin
(MOTION_INT), which is connected to pin 0.5 of the PRoC BLE device as shown in Figure 4-16 and Figure 4-17. On
receiving the interrupt, PRoC BLE reads the gyroscope and accelerometer data over the I2C interface, as shown in Figure
4-17. Finally, PRoC BLE processes this information to derive the X, and Y coordinates and sends it over the Bluetooth
Smart link.
Figure 4-16. Motion Sensor
Figure 4-17. I2C Connection between PRoC BLE and Motion Sensor
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
45
Hardware
4.3.9 Battery Monitoring
Figure 4-18 shows the battery monitoring circuit along with the microphone enable or voice enable button. Note that the
PRoC BLE pin P3[4] is used for following two purposes:

To read the state of the microphone enable button

To enable the battery voltage monitoring circuit
Figure 4-18. Battery Monitoring and Voice Enable Circuit
4.3.10
Audio Input Device
This section describes the hardware circuit implementation for sampling voice on the remote control in voice mode, as
shown in Figure 4-19. This circuit utilizes a MEMS sensor–based single-chip solution (INMP441). It acts as the microphone
and also implements signal conditioning, an analog-to-digital converter, anti-aliasing filters, and power management. The
audio input device is interfaced with the PRoC BLE via I2S.
Figure 4-19. Audio Circuit
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
46
Hardware
4.3.11
Trackpad Interface
This section describes the implementation of the trackpad module and its interface with the PRoC BLE device, as shown in
Figure 4-20. The capacitive sensor array from the trackpad module is connected to the PRoC BLE GPIOs through series
resistors, and they are internally configured as CapSense input lines. The CapSense Gesture Component in PRoC BLE
scans and processes these lines to determine the coordinates for finger movement on the trackpad.
Figure 4-20. Trackpad Circuit
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
47
Hardware
4.3.12
Test Points
Table 4-1 lists the test points available on the CY5672 remote control hardware and the associated signal names.
Table 4-1. Test Points on Remote Control
Test Point
Signal Name
TP1
VBAT
TP2
VDD_IR
TP3
VDD_AUDIO
TP4
System power VDD
TP5
System power GND
TP6
VDD_MOTION
TP7
PRoC BLE device power VDDD
TP8
PRoC BLE device power GND
TP9
VREF
TP11
AGND
TP12
AUDIO_WS
TP13
AUDIO_SD
TP14
AUDIO_SCK
TP15
AUDIO_CHIPEN
TP16
MOTION_I2C_SDA
TP17
MOTION_I2C_SCL
TP18
MOTION_INT
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
48
Hardware
4.4 Functional Description – CySmart USB Dongle
4.4.1 Power Supply System and Protection Circuitry
All devices on the CySmart USB dongle are powered using the 5-V power supply from USB (VBUS). The decoupling
capacitors are shown in Figure 4-21. The decoupling capacitors decouple the noise in the power supply.
Figure 4-21. Decoupling Capacitors
4.4.2 Clock and Reset
The PRoC BLE device requires two crystal oscillators, one running at 24 MHz and the other at 32.768 kHz, for its operation,
as shown in Figure 4-22. Both oscillators are in the Pierce configuration. The 24-MHz oscillator is used by the Bluetooth
Smart radio in the Active state, whereas the 32.768-kHz crystal is used to maintain Bluetooth Smart link timing in various
Sleep modes.
Figure 4-22. Crystal Circuit
The RC reset circuit for PRoC BLE, including the reset button SW1, is shown in Figure 4-23. The PRoC BLE device is reset
when SW1 is pressed.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
49
Hardware
Figure 4-23. Reset Circuit
4.4.3 Program and Debug Circuit
PRoC BLE exposes the SWD interface on the 10-pin header J2, as shown in Figure 4-24. The Programming and
Debugging PRoC BLE on the Remote Control and Dongle section describes how to use the J2 header to debug or program
the PRoC BLE on the CySmart dongle.
Figure 4-24. SWD Debug Header
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
50
Hardware
4.4.4 PRoC BLE
The CYBL10162-56LQXI PRoC BLE is a 32-bit, 48-MHz ARM Cortex-M0 solution with CapSense, a 12-bit SAR ADC, 4
TCPWMs, 36 GPIOs, 2 SCBs, LCD direct drive, I2S, and an integrated Bluetooth Smart radio with a balun. PRoC BLE
includes a royalty-free BLE stack compatible with Bluetooth 4.1 and provides a complete, programmable, and flexible
solution for HID. In addition, PRoC BLE provides a simple, low-cost way to add BLE connectivity to any existing system.
The PRoC BLE device on the CySmart dongle receives the data transmitted from the remote control over the Bluetooth
Smart link and sends it to the PC over USB through the PSoC 5 LP device. The PRoC BLE device is connected to a wiggle
antenna through an LC filter circuit for optimum RF performance. Figure 4-25 shows the hardware connections for the
PRoC BLE device.
Figure 4-25. PRoC BLE Connections
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
51
Hardware
4.4.5 PSoC 5 LP
The PSoC 5LP acts as a USB to UART bridge between PRoC BLE and the host device (PC, smart TV, and so on). In
addition to the UART connection, there are SPI and I2C connections between the PSoC 5LP and the PRoC BLE devices.
Figure 4-26 shows the hardware connections for the PSoC 5LP device. The I2C bus contains firmware-controlled pull-ups
using FET, which can be enabled or disabled using PSoC 5LP pins, as shown in Figure 4-27. Note that in the firmware
provided as part of the kit, only the UART connection between PSoC 5LP and PRoC BLE is used.
Figure 4-26. PSoC 5LP Connections
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
52
Hardware
Figure 4-27. I2C Connection between PRoC BLE and PSoC 5LP
4.4.6 LEDs and Buttons
There are three LEDs for different status indications and a switch for providing input to the PRoC BLE device, as shown in
Figure 4-28. In the example firmware provided with the kit, the switch (SW2 or user button) is used as a bind initiation input
button. The red LED is for power indication. This LED is always on when the dongle is plugged into the USB port. The
green LED turns on after enumeration is complete on the device side (that is, on the CySmart dongle). The blue LED
indicates various Bluetooth Smart states. The behavior of the green and blue LEDs is controlled by the firmware on the
PSoC 5LP and PRoC BLE devices respectively.
Note: Enumeration completion on the device side is not same as on the host device, like a PC. The green LED stays on
when enumeration is complete from the device side. The host may take additional time to load drivers and make the device
available for use with other applications.
Figure 4-28. LEDs and Buttons
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
53
Hardware
4.4.7 USB Plug
The CySmart dongle uses the USB port to communicate with the PC and for its power supply, as shown in Figure 4-29. The
USB differential lines are connected with PSoC 5LP. PSoC 5LP acts as a bridge between the PC and the PRoC BLE
device.
Figure 4-29. USB Connector Circuit
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
54
5. Firmware
This chapter explains the firmware provided with the CY5672 RDK. Topics covered include the following:

Firmware for PRoC BLE on the Remote Control

Firmware for the PRoC BLE and PSoC 5LP on the CySmart USB Dongle
Note: “Subsystem” in this chapter refers to self-contained firmware that enables complete functionality for a hardware
feature such as the UART subsystem. Multiple subsystems are integrated to form the complete firmware for an application
like a mouse or remote control.
Table 5-1 lists the firmware project names for the Remote Control and the CySmart USB Dongle. Note that there are two
firmware projects for CySmart USB Dongle given that the hardware includes both PRoC BLE and PSoC 5LP silicon.
Table 5-1. CY5672 Remote Control RDK Firmware Projects
Hardware
Silicon
Part
Remote
Control
PRoC BLE
CySmart
USB Dongle
PRoC BLE
Associated Project Name and Project File Location
Project Name: CY5672_Remote_Control.cywrk
Project Path: <Install Dir>\CY5672 PRoC BLE RC RDK\1.0\Firmware\RemoteControl
Project Name: BLE_HID_CySmart_Dongle.cywrk
Project Path: <Install Dir>\CY5672 PRoC BLE RC RDK\1.0\Firmware\Dongle\BLE_HID_CySmart_Dongle
PSoC 5LP
Project Name: CY5672_Dongle_Bridge.cywrk
Project Path: <Install Dir>\CY5672 PRoC BLE RC RDK\1.0\Firmware\Dongle\CY5672_Dongle_Bridge
5.1 Firmware for PRoC BLE on the Remote Control
The PRoC BLE device is the heart of the remote control. The
(CY5672_Remote_Control.cywrk) runs on PRoC BLE and controls the following:

System power states

Bluetooth Smart and IR-based wireless communication

Trackpad scanning and gesture detection

Motion sensor

Button scanning

Audio acquisition

LED indications

Battery monitoring
remote
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
control
firmware
project
55
Firmware
5.1.1 Firmware Architecture
The remote control device firmware implements a state machine that has five states, as shown in Figure 5-1.
Figure 5-1. State Machine for Remote Control

Device Init state: The remote control firmware enters this state after the device is powered on. All subsystems (motion
sensor, ISR for buttons, and trackpad) in the remote control firmware are initialized in this state. The firmware
transitions to the Active state after the initialization process is complete.

Active state: The remote control firmware enters this state:

After device initialization from the Device Init state

On user activity from the Idle state

On user activity from the Sleep state
The remote control application demands a report rate of 100 Hz in the Active state; to satisfy this requirement, every
input subsystem (such as the motion sensor, trackpad, and buttons) in the remote control is polled at 10 ms interval.
The firmware detects user activity and collects the data from the corresponding input subsystems. The device, in the
connected state, sends this data over the Bluetooth Smart link per the HOGP specification.
When the device is not connected to a peer device (such as a CySmart dongle), it starts advertising to re-establish a
connection. While trying to establish the reconnection, the remote control will also send a valid TV control command via
the IR LED using the Samsung IR protocol. If the remote control is connected to the dongle and link loss occurs, the
user will receive a red LED fast blinking notification on a user activity (such as pressing a button).
The firmware transitions to the Idle state if there is no user activity for three seconds.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
56
Firmware
The battery voltage is monitored every 3 seconds to save power. When the firmware detects a low-voltage condition (at
approximately 2.0 V), it initiates a red LED slow blinking indication to notify the user about the battery condition. The
firmware transitions to the Shutdown state when it detects a battery voltage below the critical voltage of 1.8 V.

Idle state: The remote control firmware enters this state from the Active state if there is no user activity for 3 seconds.
In this state, the firmware polls for user activity from the trackpad at a poll interval of 125 ms to save power. All other
modules will interrupt if any user activity is present. The firmware also maintains the Bluetooth Smart link with a 10-ms
connection interval and a slave latency of 100. The firmware returns to the Active state if any user activity is detected.
The firmware transitions to the Sleep state if there is no activity for 10 seconds or to the Shutdown state if the battery
voltage is below the critical voltage of 1.8 V.

Sleep state: The remote control firmware enters this state from the Idle state if there is no user activity for 10 seconds.
In this state, the firmware polls the trackpad every 250 ms. The firmware maintains the Bluetooth Smart link with a
10-ms connection interval and a slave latency of 100.
While in this state, all other modules will generate interrupts on user activity, which wakes up the MCU and transitions
the firmware to the Active state. The firmware transitions to the Shutdown state if the battery voltage is below the
critical voltage of 1.8 V.
The system power consumption is considerably lower in this state compared to that in the Active and Idle states.

Shutdown state: The remote control firmware enters the Shutdown state when the battery voltage is below the critical
voltage of 1.8 V. In this state, the firmware shuts down all input and output subsystems, including the BLE subsystem,
and enters the MCU stop mode (PRoC BLE stop mode). This effectively renders the remote control nonfunctional. The
user is expected to replace the batteries in this state to make the remote control operational again. That is, power must
be removed from the system in this state before the remote control operates again.
In all the states except Shutdown, the battery is monitored every 3 seconds, and the MCU (PRoC BLE) is put into a Deep
Sleep state at every possible opportunity.
The remote control firmware implements these states in an application framework with the help of the PSoC Creator
Components noted in Figure 5-2. The input subsystems can detect and record any user activity. The output subsystems
either transmit the data or provide an indication to the user. The framework implements the modes described previously.
Figure 5-2. Firmware Architecture
The following subsystems are present in the remote control device:

Watchdog timer subsystem: Restores the mechanism to reset the remote control if any subsystem enters an unknown
state

BLE subsystem: Sends data over the air using the BLE HOGP
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
57
Firmware

LED subsystem: Indicates to the user certain activity by blinking or by glowing the red LED

IR LED subsystem: Sends the multimedia key over IR

Trackpad subsystem: Scans the trackpad for user activity and translates the user activity into the appropriate gesture

Battery monitoring subsystem: Detects the battery voltage and calculates the battery level

Button subsystem: Detects the user input to determine whether to enable audio input; also allows the user to switch
between the trackpad and motion sensor.

Keyboard matrix subsystem: Detects any key press to provide multimedia control functionality

Motion sensor subsystem: Scans the motion sensor/gyro/accelerometer to detect user activity when the remote is
moved and converts it into cursor movement

Audio subsystem: Takes input from the microphone connected to the INMP441 codec

Debug subsystem: Sends debug print using the UART
The IR LED subsystem, BLE subsystem, and LED subsystem are output subsystems, and the rest of the subsystems are
input subsystems. These subsystems use PSoC Creator Components. Figure 5-3 gives a schematic view of the PRoC BLE
remote control device.
Figure 5-3. PSoC Creator Schematic View of PRoC BLE Remote Control
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
58
Firmware
Table 5-2 lists the file structure used by the remote control project and the key functions implemented in each file.
Table 5-2. File Structure for the Remote Control Project
File Name
main.c
Details
This file is the top-level application, which initializes the system and handles the switching between
power states based on user activity.
This file has the following functions:
device.c
timer.c
watchdog_timer.c

main() – The main function for the application.

Device_FW_Init() – Initializes all system blocks.

Device_FW_Active() – Watchdog timer counter 1 is configured to trigger an interrupt every 1 ms.
All subsystem blocks are polled every 10 ms, and notifications are sent to connected host when
data is available.

Device_FW_Idle() – Watchdog timer counter 1 is configured to trigger an interrupt every 125 ms.
All system blocks are polled every 125 ms.

Device_FW_Sleep() – Watchdog timer counter 1 is disabled and system blocks are put into a
low-power mode.

Device_FW_Stop() – All blocks are disabled and system is put into the hibernate mode.
This file handles the initialization of individual system blocks, time keeping, polling for events, lowpower mode implementation, and sending notifications to the connected host when data is available.

Device_Init() – Initializes all system blocks.

Device_Active () – Polls the data (based on activity) from all system blocks every 10 ms and
sends a notification to the connected host.

Device_Low_Power_State() – Polls the data from button, battery monitoring, and trackpad (if
enabled) every 125 and 250 ms in idle and sleep mode respectively. Other modules should raise
the interrupt if any activity is detected.

Device_Timer_Callback() – This function is a callback from watchdog timer counter 1. The
compare value for the Prism_Led (pseudo random PWM) is incremented. This is used to
accomplish the breathing LED effect.

Device_ShutDown () – Disables all system blocks.
This file handles initialization and generation of a timer tick every 1 ms.

Timer_Init() – Initializes the timer block.

Timer_Get_Time_Stamp() – Returns the current timestamp.

Timer_Time_Elapsed() – Returns true if the time exceeded an interval specified as one of
parameters.

Timer_Set_Period() – Sets the time period between timer interrupts.

Timer_CallBack() – Increments the tick timer by a value equal to the tick increment. The tick
increment depends on the state of the system.
This file handles watchdog timer reset functionality. Watchdog timer system reset is configured to
occur after 6 seconds.

Watch_Dog_Timer_Init() – Initializes the watchdog timer counter 0 and configures it to trigger a
reset interrupt.

Watch_Dog_Timer_Clear() – Clears the watchdog timer counter 0.

Watch_Dog_Timer_Disable() – Disables the watchdog timer counter 0.

Watch_Dog_Timer_Enable() – Enables the watchdog timer counter 0.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
59
Firmware
File Name
ble.c
trackpad.c
trackpad_gesture_mapping.c
Details
This file handles BLE initialization, configuration, advertisement, notifications, and responses to BLE
events.





Ble_Init() – Initializes the BLE Component.

Ble_Disconnect_Audio_Channel() – Disconnects the audio channel by sending the audio
command to the dongle.










Ble_Send_Battery_Data() – Sends the battery data to a connected client.






Ble_AppCallBack() – Callback to get GAP, GATT, and L2CAP events from the BLE Component.
Ble_Is_Init_Completed() – Returns the status of BLE initialization.
Ble_Configure() – Configures the BLE Component after the BLE stack on event.
Ble_Set_Address() – Sets the public BLE address for the device.
Ble_Create_Audio_Channel() – Creates an audio channel by sending the audio command to
the dongle.
Ble_Send_Data() – Sends the mouse/keyboard report to a connected client.
Ble_StartAdvertisement() – Starts a directed/undirected advertisement.
Ble_StopAdvertisement() – Stops a directed/undirected advertisement.
Ble_Get_State() – Returns the current state of BLE.
Ble_Set_State() – Sets the state of BLE based on the system state.
Ble_Stop() – Stops the BLE block.
Ble_Enter_LowPowerMode() – Puts BLE into deep sleep mode.
Ble_WriteBondedList() – Writes the bond information into flash for future retrieval.
Ble_Update_Serial_Number_String() – Updates the serial number string in the device
information service with the silicon ID.
Ble_BasCallBack() – Callback registered with the Battery Service.
Ble_ScpsCallBack() – Callback registered with the Scan Parameters Service.
Ble_HidsCallBack() – Callback registered with the HID service.
Ble_IasCallBack() – Callback registered with the Immediate Alert Service.
Ble_LinkLossCallBack()
–
Callback
registered
with
the
Link
Ble_TxPowerCallBack() – Callback registered with the Tx Power Service.
Loss
Service.
This file handles trackpad initialization, configuration, polling, centroid calculation, and gesture
detection.







Trackpad_Init() – Initializes the trackpad module.

Trackpad_Stop() – Stops trackpad scanning.
Trackpad_Start_Poll() – Starts the trackpad sensor scanning.
Trackpad_IsComplete() – Returns the status of trackpad sensor scanning.
Trackpad_Poll() – Detects the number of fingers and decodes the gestures on the trackpad.
Trackpad_Get_Report() – Generates the report for gestures on the trackpad.
Trackpad_Set_State() – Sets the state of the trackpad module based on the system state.
Trackpad_IsActive() – Returns the user activity on the trackpad; returns true if the finger is
present on the trackpad.
This file maps the detected trackpad gestures with the appropriate HID commands that are recognized
by the PC.

Trackpad_Gesture_Map() – Maps trackpad gestures to the appropriate HID report format.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
60
Firmware
File Name
trackpad_custom_gesture.c
Details
This file handles the detection of custom gestures that are not available in the CSD Component.


keyboard.c
button.c
Trackpad_Custom_Gesture_Init() – Initializes various parameters required for custom
gestures
Trackpad_Custom_Gesture_Detection() – Decodes custom gestures such as top-to-bottom
swipe, vertical scroll, and horizontal scroll.

Trackpad_Custom_PointerMovement_Calulation() – Calculates pointer movement and fills
the appropriate HID report format

Trackpad_Custom_PointerMovement_Reset() – Resets the pointer movement parameters
This file handles GPIO initialization for reading the buttons that are connected in the matrix. It also
detects changes in button status and decodes to the appropriate HID codes. All buttons except for the
microphone enable/disable, motion sensor switch and return buttons are handled by this module.

Keyboard_Init() – Initializes the keyboard module.

Keyboard_Poll() – Polls the keyboard for activity.

Keyboard_Get_Report() – Fills the HID data depending upon the button pressed.

Keyboard_Set_State() – Modifies the configuration of the keyboard module based on the system
state (for example, enabling and disabling interrupts).

Keyboard_IsActive() – Checks if any key is pressed in the keyboard matrix.

Keyboard_Stop() – Stops the keyboard module by disabling the interrupts and changing the state
of the GPIOs to Highz.

Keyboard_Scan() – Scans the keyboard matrix if any key is pressed.

Keyboard_Scan_Column() – Scans the columns by exciting one row at a time.

Keyboard_Detect_Ghost() – Detects a condition where three buttons are pressed between two
rows and two columns and the algorithm detects that four keys are pressed.

Keyboard_Detect_Keys() – Identifies the keys that have been pressed.

Keyboard_Count_Active_Keys() – Counts the number of active columns.

Keyboard_Add_Queue() – Adds the corresponding button to the queue.

Keyboard_Update_Queue() – Updates the debounce value of the button that is present in the
queue.

Keyboard_Update_Release_Key_State() – Updates the key status for the key that is released.

Keyboard_Remove_Queue() – Removes the button from the queue.

Keyboard_Interrupt_Callbck() – Interrupt callback function when there is a button status change
in idle or sleep mode.

Keyboard_Update_BackChannel_Data() – Updates the status of the LED that can be used for
keys such as Caps Lock, Num Lock, and Scroll Lock. This is disabled for the remote control
project.
This file handles GPIO initialization for buttons and decodes the state transition of buttons. This
module only handles the microphone enable/disable, motion sensor switch and return buttons.

Button_Init() – Initializes the GPIO and configures the interrupts.

Button_Poll() – Polls for the button status.

Button_Set_State() – Modifies the configuration of buttons based on the system state (enabling
and disabling interrupts).

Button_Get_Report() – Returns the button report only when there is a transition in button state.

Button_Stop() – Stops the button module. All button interrupts are disabled.

Button_Debounce() – Handles button debouncing and provides the correct button status.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
61
Firmware
File Name
audio.c
motion_sensor.c
motion_sensor_hal.c
battery.c
led.c
Details
This file handles I2S initialization for streaming audio.

Audio_ADPCM_Encode() – Encodes audio data using ADPCM compression.

Audio_CallBack() – Callback function when data is available in the audio module.

Audio_Init() – Initializes the audio module by starting the I2S Component.

Audio_Start() – Starts reading the audio data from the codec.

Audio_Poll() – Polls if any audio data is available.

Audio_Get_Report() – Packetizes the audio data if available.

Audio_Stop() – Stops the audio module by stopping the I2S Component.

Motion_Sensor_Init() – Initializes/configures the motion sensor.

Motion_Sensor_Start_Sampling() – Starts the sampling of data inside the motion sensor.

Motion_Sensor_Poll() – Checks if the motion sensor has some movement detected.

Motion_Sensor_Stop_Sampling() – Stops the sampling of data inside the motion sensor.

Motion_Sensor_Set_Resolution() – Updates the resolution of mouse movement

Motion_Sensor_Set_State() – Sets the enable/disable state of the motion sensor depending
upon the state.

Motion_Sensor_Get_Report() – Calculates the mouse position shift and updates the HID report
passed as a parameter.

MotionSensor_IsMotionDetectedLowPower() –- Polls for the motion sensor activity in lowpower mode.

Motion_Sensor_IsActive() – Checks if the motion sensor is active or not.

Motion_Sensor_Stop() – Changes the motion sensor’s state to low-power mode.

Motion_Sensor_CallBack() – Callback function called when motion sensor interrupt is triggered

Motion_Sensor_Hal_Init() – Initializes the motion sensor by calling the motion sensor driver.

Motion_Sensor_Hal_GetGyroData() – Collects the gyro data.


Motion_Sensor_Hal_GetAccData() – Collects the accelerometer data.

Motion_Sensor_Hal_Disable_LowPowerMode() – Disables the motion sensor low-power mode
and restores the default configuration

Motion_Sensor_Hal_CallBack() – Provides call back to an interrupt from the motion sensor
Motion_Sensor_Hal_Enable_LowPowerMode() – Puts the motion sensor in low-power mode
by disabling the gyro and enabling the accerolometer.
This file handles initialization of the ADC and the measurement of battery voltage using the ADC.

Battery_Init() – Starts the battery module by starting the ADC Component.

Battery_Get_Value() – Measures and returns battery voltage.

Battery_Stop() – Stops the battery module by stopping the ADC Component.

Battery_No_Battery_Connected() – Changes drives modes of the battery enable pin. This is
enabled if macro ENABLE_MINIPROG_NO_BATTERY_WORKAROUND is enabled.
This file handles LED initialization and the creation of various effects in glowing LEDs.

Led_Init() – Initializes the LED block.

Led_Blinking() – Creates a specific LED effect based on the configuration of the LED breathing
effect.

Led_On() – Keeps the LED in the ON state with a specific intensity.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
62
Firmware
File Name
flash.c
debug.c
platform.h
Details

Led_Update() – This function is a callback function. The compare value for the Prism_Led
(pseudo random PWM) is incremented in this function.

Led_IsComplete() – Returns the status of the LED breathing effect (complete/not complete).

Led_Stop() – Stops the LED module and resets all variables.
This file handles storage/retrieval of bond information to/from flash.

Flash_Save() – Stores the information into the flash.

Flash_Load() – Restores the information from flash and copies it into the RAM buffer.
This file handles print debug messages (logs) over the UART.

Putc() – This function is used to print a character on the UART.

Byte_To_ASCII() – This function is used to map a byte to its corresponding ASCII value.

Debug_Print_Start() – This function is used to initialize debug functionality.

Debug_Print() – This function is used to print a message (logs) on the UART.
This file contains macros that control various options in the firmware related to debug, touchpad
tuning, use of MCU power states, manufacturing test kit (MTK), and BLE power states.

DEVICE_BATTERY_PARALLEL – Enables the macro if the battery terminal is of a parallel type;
otherwise, the battery terminal is expected to be in series.

ENABLE_SYSTEM_DEEP_SLEEP – Enables deep sleep mode. BLE will be disconnected when
it enters this mode.

MCU_DEEP_SLEEP_DISABLED – Disables the MCU deep sleep.

ENABLE_DEBUG_PIN – Enables the macro for toggling GPIO. Make sure the Debug_Pin
component is enabled in the TopDesign schematic.

DEBUG_PRINT – Enables debug prints.

SOFTWARE_UART – Make sure to enable SW_Tx_UART component in the TopDesign after
defining the SOFTWARE_UART macro. Else enable Debug_UART component. Debug_UART
provides faster data transfer compared to SW_Tx_UART. However Debug_UART can be routed
only to specific pins

DISABLE_TIMER – Disables the timer module. It not recommended to disable the timer block,
as much of the functionality of this application depends upon it.

DISABLE_FLASH – Disables the flash module.

DISABLE_WATCH_DOG – Disables the watchdog reset function but not the use of watchdog as
a 1-ms timer

DISABLE_BATTERY – Disables the battery module.

ENABLE_HARDWARE_WORKAROUND_MINIPROG - Enables the drive mode of the
BatteryEn_Voice_Button GPIO from Open Drain to Pull Up when powered using MiniProg3 and
batteries are not connected. This is required as battery enable and voice button are mapped to
the same GPIO. If this macro is not enabled and MiniProg3 is connected without batteries, there
is a possibility of firmware sensing a voice button press even though it is not actually pressed.

DISABLE_AUDIO – Disables the audio module.

AUDIO_RUN_ON_ECO – Defines the macro to run the I2S on ECO, not on IMO.

AUDIO_SEND_FREQUENT_SYNC_PACKET – Enables the logic to send the sync packet
frequently.

DISABLE_LED – Disables the LED module.

DISABLE_MOTION_SENSOR – Disables the motion sensor module.

DISABLE_MOTION_SENSOR_PINREAD – Disables reading the pin status and he motion
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
63
Firmware
File Name
Details
sensor register to detect user activity from the motion sensor in low-power mode.

ENABLE_MOTION_SENSOR_FLASH_WRITE – Enables the logic to store the gyro offset on
the flash.

DISABLE_IR – Disables the IR module.

NEC_PROTOCOL – Defines the macro for sending IR data in the NEC protocol format;
otherwise, the custom IR format will be used for sending data.

IR_PIN_TOGGLE – Defines the macro for bit banging the IR data by toggling the GPIO.
Otherwise, TCPWM will be used for this purpose. Note: Please check the comment in the
TopDesign.cysch file.

DISABLE_BUTTON – Disables the button module.

DISABLE_KEYBOARD – Defines the macro for disabling the keyboard module. Note: When
DISABLE_KEYBOARD is defined, then BLE will advertise when powered on.

KEYBOARD_MULTIMEDIA_SUPPORT – Defines the macro for supporting multimedia keys.

ENABLE_IR_CODES – Enables support for IR key codes in the Keyboard module.

DISABLE_KEYBOARD_INTER_COLUMN_BUTTON – Defines the macro for disabling button
scanning between the rows.

DISABLE_BLE – Defines the macro for disabling the BLE module.

ENABLE_BLE_LOW_POWER_MODE – Defines the macro for enabling BLE low-power mode.
Note: If ENABLE_BLE_LOW_POWER_MODE is disabled, then the power of the remote will go
high.

ENABLE_CONNECTION_UPDATE_DISCONNECT – Defines the macro for disconnecting from
the peer device if the L2CAP parameter update is rejected.

ENABLE_BLESS_CLOCK_CONFIGURATION – Enables the logic to set the BLE clock
configuration. Note: This needs to be set depending upon the WCO clocks.

ENABLE_BONDING – Defines the ENABLE_BONDING macro for storing the bond information
in the flash.

BLE_GET_STACK_VERSION – Enables the code to get the version of the BLE stack being
used in the firmware.

DISABLE_TRACKPAD –Disables the trackpad module.

TOUCHPAD_TUNER – Enables the logic for the trackpad to enter into tuner mode. The pins are
available by default at P0[0] and P0[1].

DISABLE_TRACKPAD_SLEEP – Defines the DISABLE_TRACKPAD_SLEEP macro for
disabling the trackpad sleep.

TRACKPAD_TEMPERATURE_VARIATION – Enables a logic to maintain the sensor baseline
when the device is exposed to sudden temperature variation

DISABLE_CUSTOM_POINTER_MOVEMENT – Enables the logic to disable the use of the
ballistic movement from the BallisticMovement.a library.

DISABLE_CUSTOM_SCROLL_GESTURE – Enables the logic to disable the use of the scroll
gesture from the scrollgesture.a library.

DISABLE_EDGE_SWIPE_TOP – Enables the logic to disable the top-edge swipe gesture.

DISABLE_CLICK_DETECTION_POINTER_MOVEMENT – Enables the logic to stop the pointer
movement when click detection is in progress.
5.1.2 Watchdog Timer Subsystem
The Watchdog Timer subsystem provides a recovery mechanism from any undesired firmware behavior. It resets if the
watchdog timer subsystem is not cleared. This subsystem uses the PRoC BLE counter 0 of the watchdog timer hardware
block for this functionality. (Note: The PRoC BLE watchdog timer has two 16-bit counters (counter 0 and counter 1) and
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
64
Firmware
one 32-bit counter (counter 2). These counters can be configured to work independently or in cascade). In this project,
counter 1 is used as a tick timer, which is described separately in the Timer Subsystem section.
Counter 0 is configured to generate a system reset interrupt after three continuous unhandled interrupts. A counter 0
interrupt is generated on reaching the specified terminal count. The terminal count value of the remote control firmware is
set to 0xFFFF, which converts to approximately a 2-second time interval. Based on this terminal count setting, a system
interrupt is generated approximately 6 seconds after three continuous interrupts are unhandled.
A system reset interrupt will cause the MCU to reset, and firmware execution will start from the beginning. To prevent a
system reset, counter 0 must be cleared at least once in a 6-second time period. This is done in firmware in
Device_Active() and Device_Low_Power_State() functions of device.c.
5.1.3 BLE Subsystem
The BLE subsystem transmits data provided by the application framework over a Bluetooth Smart link. It implements the
HOGP and proximity profile (PXP) for the remote control. Figure 5-4 shows the flow chart for the BLE subsystem. The
HOGP provides the following services:

One HID service for transmitting the mouse, keyboard, multimedia, audio and power reports

Battery service for transmitting the battery status to the peer device

Device information service that exposes manufacturer and/or vendor information about a device

Scan parameter service that enables a GATT client to store the Bluetooth LE scan parameters it is using on a GATT
server device so that the GATT server can use the information to adjust the behavior to optimize power consumption
and/or reconnection latency
PXP is used to check the link loss status between the remote control and host device. The PXP provides the following
services:

Link Loss Service (LLS) that defines behavior when a link is lost between two devices

Immediate Alert Service (IAS) that exposes a control point to allow a peer device to cause the device to alert
immediately

Tx Power Service (TPS) that exposes a device’s current transmit power level in a connection
The IAS and TPS are used to determine path loss occurrence by monitoring the RSSI.
In all the firmware states, the BLE Component connection interval is set to 10 ms, and the slave latency is set to 100 ms.
The subsystem enters the Deep Sleep state when it is disconnected or if no peer device is found.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
65
Firmware
Figure 5-4. BLE Subsystem Flow Chart
Entry
Is Connect button
pressed?
YES
Is Device
connected?
YES
NO
NO
Start undirected
Advertisement
User activity
detected ?
Exit
NO
YES
Bond information
available?
Is Device
connected?
NO
NO
YES
YES
Start Directed Advertisement
Transmit packet
Exit
The BLE subsystem is built using the BLE Component (Figure 5-5) provided in PSoC Creator.
Figure 5-5. BLE Component in PSoC Creator
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
66
Firmware
5.1.3.1 Device Role/Profile Settings
The BLE Component is configured for multiple profiles and roles, as shown in Figure 5-6.
Figure 5-6. General Tab of BLE Component
The settings used for a remote control for the BLE subsystem General tab are as follows:

Profile: “HID over GATT” is selected for the remote control, as it is acts as an HID.

Profile role: “HID Device (GATT Server)” is selected for the remote control. It acts as a GATT server, which sends
data over notification to the GATT client whenever data is available.

GAP role: “Peripheral” is selected based on the profile and profile role for remote control.
5.1.3.2 Profiles Settings
The Profiles tab of the BLE Component is shown in Figure 5-7. It consists of set of services, characteristics, and
descriptors, which are described in Table 5-3.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
67
Firmware
Figure 5-7. Profiles Tab of BLE Component
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
68
Firmware
Table 5-3. BLE Component Profile Details
Services
Characteristic
Details
Generic Access
Service
Device Name
Configure the value of this characteristic as “CY5672 Remote Control RDK.”
Appearance
Configure the value of this characteristic as “Human Interface Device (HID).”
Peripheral Preferred
Connection
Parameters
Characteristic values are automatically populated by the Component based on
advertisement settings configured in the GAP Settings tab of the BLE Component.
Generic Attribute
Service
The default BLE configuration of this service is used for remote control.
Human Interface
Device Service
Protocol Mode
The default BLE configuration of this characteristic is used for the remote control.
Report Map
The Report Map characteristic defines the HID descriptor for the remote control. The
report map for the remote control consists of mouse, keyboard, power, multimedia, and
audio report structure.
HID Information
The default BLE configuration of this characteristic is used for the remote control.
HID Control Point
The default BLE configuration of this characteristic is used for the remote control.
Boot Mouse Input
Report
The default BLE configuration of this characteristic is used for the remote control.
Boot Keyboard Input
Report
The default BLE configuration of this characteristic is used for the remote control.
Boot Keyboard Output
Report
The default BLE configuration of this characteristic is used for the remote control.
Report Mouse
Modify the read permissions to “Encryption Required” and configure the report ID of the
report reference descriptor to “1”. The rest of the parameters are left as the default values
set by the BLE Component.
Report Keyboard
Modify the read permissions to “Encryption Required” and configure the report ID of the
report reference descriptor to “2”. The rest of the parameters are left as the default values
set by the BLE Component.
Report Multimedia
Modify the read permissions to “Encryption Required” and configure the report ID of the
report reference descriptor to “3”. The rest of the parameters are left as the default values
set by the BLE Component.
Report Power
Modify the read permissions to “Encryption Required” and configure the report ID of the
report reference descriptor to “4”. The rest of the parameters are left as the default values
set by the BLE Component.
Report Audio Control
Modify the read permissions to “Encryption Required” and configure the report ID of the
report reference descriptor to “31”. The rest of the parameters are left as the default
values set by the BLE Component.
Report Audio Data
Modify the read permissions to “Encryption Required” and configure the report ID of the
report reference descriptor to “30”. The rest of the parameters are left as the default
values set by the BLE component.
Manufacturer String
Name
Configure the value as “Cypress Semiconductor.”
Firmware Revision
String
Configure the value as “1.0.0.0”
PnP ID
Configure Vendor ID as “0x4B4,” Product ID as “0x5673,” and Product Version as
“0x0001.”
Hardware Revision
String
Configure the value as “1.0”
Serial Number String
This value is over written by firmware with the BD Address generated using the silicon ID.
Software Revision
String
Configure the value as “PSoC Creator.”
Model String Number
Configure the value as “CY5672.”
Device Information
Service
Battery Service
Configure the value as “100”; the rest of the values are the default values of the BLE Component.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
69
Firmware
Scan Parameter
Service
The default BLE configuration of this service is used for the remote control.
Link Loss Service
The default BLE configuration of this service is used for the remote control.
Immediate Alert
Service
The default BLE configuration of this service is used for the remote control.
TX Power Service
Configure the Tx Power Level as “0”. The remaining default BLE configuration of this service is left as the default
values.
5.1.3.3 GAP Settings
The BLE Component supports different types of discovery modes. This application uses the limited discovery mode so that
battery power is not wasted when the user presses the advertisement button. The advertising type is chosen to connect to
any host that is HOGP-compliant. In the case of the remote control, the report rate expected is approximately 100 Hz. This
means that the data must be sent out approximately every 10 ms. Thus, the firmware maintains the connection interval at
10 ms. Figure 5-9 shows the advertisement settings, and Figure 5-9 shows the security options chosen for the remote
control firmware.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
70
Firmware
Figure 5-8. GAP Settings Tab of BLE Component Showing Advertisement Settings
The settings used for a remote control for the BLE subsystem GAP Settings > Advertisement settings are as follows:

Discovery mode: This mode is used by devices that need to be discoverable only for a limited period of time or
for a specified event. The timeout duration is defined by the applicable advertising timeout parameter. The remote
control configures this parameter as “Limited” so that it advertises for a limited period of time when the connect button
is pressed.

Advertising type: This parameter defines the advertising type to be used by the link layer of PRoC BLE. The remote
control configures it as “Connectable undirected advertising,” which allows any other device to connect to it.

Filter policy: This parameter defines how the scan and connection requests are filtered. The remote control configures
it as ”Scan request: Any | Connection request: Any,” which allows it to process connection requests and scan requests
from all devices.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
71
Firmware

Advertising channel map: This parameter is used to enable a specific advertisement channel. The remote control
configures it as “All channels” so that it allows advertisement on all three possible BLE advertisement channels.

Advertising interval: This parameter defines the interval between two advertising events.

Fast advertising interval: This advertisement interval results in a faster connection.


Minimum (ms): This parameter defines the minimum interval for advertising the data and establishing a
connection. It is configured to increment in multiples of 0.625 ms. The valid range is from 20 ms to 10240 ms. A
minimum value of “20” is configured for the remote control.

Maximum (ms): This parameter defines the maximum interval for advertising the data and establishing a
connection. It is configured to increment in multiples of 0.625 ms. The valid range is from 20 ms to 10240 ms. A
maximum value of “30” is configured for the remote control.

Timeout (s): This parameter defines the timeout value of advertising with fast advertising interval parameters. A
timeout interval of “30” is configured for the remote control.
Connection parameters: These parameters define the connection event timing for a central device communicating
with the remote control. Consecutive connection events are separated by the defined Connection interval.

Minimum (ms): This parameter is the minimum permissible connection time value to be used during a connection
event. It is configured in steps of 1.25 ms. The range is from 7.5 ms to 4000 ms. A minimum connection interval of
“10” is configured for the remote control to achieve a report rate above 100 Hz.

Maximum (ms): This parameter is the maximum permissible connection time value to be used during a
connection event. It is configured in steps of 1.25 ms. The range is from 7.5 ms to 4000 ms. A maximum
connection interval of “10” is configured for the remote control to achieve a report rate above 100 Hz.

Slave latency: This parameter defines the latency of the slave in responding to a connection event in consecutive
connection events. It is expressed in terms of multiples of connection intervals, where only one connection event is
allowed per interval. The range is from 0 to 499 events. A slave latency of “100” is configured for the remote control.

Connection supervision timeout (ms): This parameter defines the link supervision timeout interval. It defines the
timeout duration for which a link needs to be sustained in case of no response from a peer device over the LE link. The
time interval is configured in multiples of 10 ms. The range is from 100 ms to 32000 ms. A connection supervision
timeout of “3000” is configured for the remote control.
Figure 5-9. GAP Settings Tab of BLE Component Showing Security Options
The settings used for a remote control application for the BLE subsystem GAP Settings > Security are as follows:

Security mode: This parameter defines the GAP security modes for the Component. This mode is configured as
“Mode 1” for the remote control. Mode 1 is chosen when data encryption is required.

Security level: This parameter is configured as “Unauthenticated pairing with encryption.” With this level of security,
the remote control will send encrypted data after establishing a connection with the client device.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
72
Firmware

I/O capabilities: This parameter refers to the device's input and output capability that can enable or restrict a particular
pairing method or security level. It is configured as “No Input No Output,” as the remote control does not have the
capability to enter and display authentication key data.

Pairing method: This parameter is configured as “Just works” for the remote control. The device will use the simple
pairing procedure without authentication. With this method, transferred data is vulnerable to “man in the middle”
attacks.

Bonding requirement: This parameter is used to configure the bonding requirements. The purpose of bonding is to
create a relation between two Bluetooth devices based on a common link key (a bond). The link key is created and
exchanged (pairing) during the bonding procedure and is expected to be stored by both Bluetooth devices, to be used
for future authentication. This parameter is configured as “Bonding” for the remote control. The remote control will store
the link key of a connection after pairing with the client device. It uses a previously stored key for the connection when
the connection is lost and then re-established.

Encryption key size (bytes): This parameter defines the encryption key size based on the profile requirement. The
valid values of encryption key size are 7 to 16 bytes. This parameter is configured as “16” for the remote control.
The datasheet details the APIs supported by the BLE Component. To go to the datasheet, click the Datasheet button at the
bottom left corner of the BLE Component GUI, as shown in Figure 5-9.
5.1.4 Trackpad Subsystem
The trackpad for the remote control is composed of eight rows and eight columns of sensors. The firmware detects and
generates key codes for the different gestures and reports them to the application framework.
The CapSense Gesture Component provided in PSoC Creator supports capacitive touch sensor (trackpad) scanning,
centroid calculation, and gesture detection. It provides an API for each of these functionalities. The trackpad subsystem
calls the relevant APIs to detect user activity. The trackpad subsystem is executed every 10 ms in the Active state, every
125 ms in the Idle state, and every 250 ms in the Sleep state. The flow chart in Figure 5-10 shows the how the trackpad
subsystem operates.
Figure 5-10. Trackpad Subsystem Flow Chart
Entry
Scan Capacitive Touch
sensors
Centroid calculation
(finger position
detection)
Gesture detection
Map gestures to key
codes
Exit

Scan: Detecting the trackpad activity involves scanning the capacitive touch sensors. The presence of a finger on the
trackpad will result in non-zero values for signals on those particular sensors.

Centroid calculation: Signal values from the scanning stage are used as inputs for the centroid calculation algorithm.
This algorithm estimates the total number of fingers and their position on the trackpad.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
73
Firmware

Gesture detection: The number of fingers and finger positions calculated in the centroid calculation stage are used as
inputs to the gesture detection algorithm. Table 5-4 shows the gestures detected by firmware and the corresponding
key codes sent over BLE.
Table 5-4. List of Supported Gestures
Gesture
Action Performed
Key Code
Left-click
Single-finger single tap
Left-click (0th bit in 0th byte of the mouse report)
Right-click
Two-finger single tap
Right-click (1st bit in 0th byte of the mouse report)
Double-click
Single-finger double tap
Left-click will be sent twice (0th bit in 0th byte of the mouse report)
Pointer movement
Single-finger movement on
trackpad area
Single-finger movement in a
top/down motion on right edge
Single-finger movement in a
left/right motion on bottom edge
Single-finger swipe in top/down
direction starting from top edge
Two-finger pinch
X, Y (1st and 2nd byte of the mouse report)
Vertical scroll
Horizontal scroll
Home screen
Zoom in/out
Z-wheel (3rd byte of the mouse report)
H-wheel (4th byte of the mouse report)
Window key (3rd bit of the 0th byte of the keyboard report)
Ctrl key (0th bit of the 0th byte of the keyboard report) + Z-wheel
(fourth byte of the mouse report)
Figure 5-11 shows the CapSense Gesture Component. The following sections describe its configuration for the remote
control.
Figure 5-11. CapSense Gesture Component in PSoC Creator
5.1.4.1 General Tab
Figure 5-12 shows the General tab of the CapSense Gesture Component.
Figure 5-12. General Tab of CapSense Gesture Component
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
74
Firmware

Tuning method: This parameter is configured as “Manual with run-time tuning” for the remote control. This option
allows run-time tuning of the CSD_Touchpad Component.

Raw data noise filter: This parameter selects the raw data filter. Only one filter can be selected, which is applied to all
sensors. The filter is used to reduce the effect of noise during sensor scans. This parameter is configured as “None” for
the remote control.

Compensation IDAC: This mode provides increased sensitivity and SNR. The Compensation IDAC is connected to
the AMUX bus full-time during CapSense operation and is intended to compensate for the sensor’s parasitic
capacitance. This parameter is configured as “Enabled” for the remote control.

Auto calibration: This option allows IDAC auto-calibration, and it is enabled for the remote control.
5.1.4.2 Widgets Config Tab
The Trackpad with gestures widget is added as shown in Figure 5-13.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
75
Firmware
Figure 5-13. Widgets Config Tab of CapSense Gesture Component


Number of sensor rows/Number of sensor columns: These parameters depend on the number of sensors along the
X and Y axis. Their values are set based on the trackpad design. These parameters are configured as “8” rows and “8”
columns for the remote control.
Column Tuning/Row Tuning: The tuning parameters for the remote control are selected to achieve optimum touch
performance.
5.1.4.3 Gestures Tab
The General gesture, Clicks, Zoom and Edge swipes options are selected. The configuration of these gesture
parameters shown in Figure 5-14 is the default.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
76
Firmware
Figure 5-14. Gestures Tab of CapSense Gesture Component
5.1.4.4 Scan Order Tab
The settings in the Scan Order tab are shown in Figure 5-15. The sense clock divider is modified to “2”. All other
parameters are left at their default settings.
The datasheet provides a detailed table for the selection of the sense clock divider in the Sense clock divider section. To
go to the datasheet, click the Datasheet button at the bottom left corner of the CapSense Gesture Component GUI.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
77
Firmware
Figure 5-15. Scan Order Tab of CapSense Gesture Component
5.1.4.5 Advanced Tab
The settings in this tab are not modified; that is, the default settings are retained, as shown in Figure 5-16.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
78
Firmware
Figure 5-16. Advanced Tab of CapSense Gesture Component
5.1.4.6 Trackpad Subsystem Tuning
The trackpad of the remote control RDK is already tuned; therefore, it is not necessary to repeat the tuning exercise. Tuning
of the trackpad is required during the development phase. Every new design needs tuning to ensure optimal performance.
The following steps provide guidance for connecting to the tuner.
1.
Enable the TOUCHPAD_TUNER macro in the platform.h file.
2.
Enable the DISABLE_MOTION_SENSOR macro in the platform.h file.
3.
Right-click on the “CSD_Touchpad_Tuner” Component and select “Enable” to enable the Component.
4.
Right-click on the “Motion_Sensor_I2C” Component and select “Disable” to disable the Component.
5.
Click the Tune Helper tab of the CSD_Touchpad Component and select the “Enable tune helper” option, as shown in
Figure 5-17 .
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
79
Firmware
Figure 5-17. Tune Helper Tab of CapSense Gesture Component
6.
The CSD_Touchpad_Tuner:scl and CSD_Touchpad_Tuner:sda pins appear in the CY5672_Remote_Control.cydwr,
as shown in Figure 5-18. Verify that the pins are assigned as P0[0] for SDA and P0[1] for SCL.
Figure 5-18. CY5672_Remote_Control.cydwr view
7.
Rebuild the remote control by choosing Build > Clean and Build CY5672_Remote_Control. Program the hex into
the remote control.
8.
Solder four wires from the remote control to a five-pin male connector in the following order: VDD (TP7), GND (TP8),
no connect, Pin0[1], and Pin0[0].
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
80
Firmware
9.
Connect the five-pin male header to the five-pin female header of MiniProg3.
10. Connect MiniProg3 to a PC or laptop using a USB cable.
11. Right-click on the CSD_Touchpad Component and select “Launch Tuner.”
12. The tuner tool pops up, as shown in Figure 5-19.
Figure 5-19. Tuner Tool
13. Click the Configuration button to invoke the Tuner Communication Setup window. Configure the settings as shown
in Figure 5-20.
Figure 5-20. Tuner Communication Setup
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
81
Firmware
14. Ensure that two AAA batteries are placed in the remote control.
15. Click the Start button and observe that tuner starts running. For more information on how to use the tuner GUI,
refer to the PSoC 4 CapSense Tuning Guide.
The datasheet provides the APIs supported by the CapSense Gesture Component. It also provides documentation on all
the configurable parameters mentioned previously in this section. To go to the datasheet, click the Datasheet button at the
bottom left corner of the CapSense Gesture Component GUI, as shown in Figure 5-16.
5.1.5 Motion Sensor Subsystem
5.1.5.1 Motion Sensor Usage in the Remote Control RDK
The motion sensor subsystem implements the motion mouse feature in the remote control. The firmware detects the
direction and magnitude of movement of the remote control and converts the device movement to mouse pointer
movement. The change in mouse pointer position is sent to the BLE host through the HID report. The requirement of the
motion mouse is to enable the user to use the remote for moving the mouse pointer through his or her gesture. It is similar
to using a laser pointer (instead of a trackpad mouse) to point at a location on a screen. Now imagine how a laser pointer
produces movement onscreen.
To move the laser pointer in the X direction of the screen, the presenter/user will either move himself laterally in the X
direction of the device or rotate the pointing device around the Z axis of the device, as shown in Figure 5-21.
Figure 5-21. Moving Laser Pointer in X Direction
Similarly, to move the laser pointer in the Y direction of the screen, the presenter/user will either move himself laterally in
the Z direction of the device or rotate the pointing device around the X axis of the device, as shown in Figure 5-22.
Figure 5-22. Moving Laser Pointer in Y Direction
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
82
Firmware
Practically, the user will remain steady in one place and use rotation of the device to move the pointer rather than moving
around to laterally shift the device. Hence, while implementing the similar operation in the remote control RDK, you want
only the rotation to control the pointer movement, and not the shift in position of the device.
Note that with the PRoC BLE remote control, the later shift also produces a pointer movement, but this is the result of
unintended, unnoticeable rotation produced due to imperfect motion caused by the hand movement.
Thus the objectives can be summarized as follows:

Measure the angle of rotation of the remote about the Z-axis of the remote.

Map it to the pointer movement on the screen in the X direction of the screen.

Measure the angle of rotation of the remote about the X-axis of the remote control.

Map it to the pointer movement on the screen in the Y direction of the screen.
The motion sensor used in the remote control RDK for these measurements is MPU6500 from Invensense. It has three axis
accelerometers and three axis gyroscopes. The output of the six sensors is read by PRoC BLE using the I2C bus. The
output of the accelerometers and gyroscopes is 16-bit signed data for each sensor. The sampled output data from the
motion sensor is converted to the mouse pointer movement in the form of a change in mouse pointer position in the X and Y
direction of the screen.
A third-party library from Invensense, called the Air Motion Library (AML), is used to process the accelerometer and
gyroscope data, as shown in Figure 5-23. The data from the motion sensor is polled every connection interval and passed
to the AML processing API. The API returns the delta X and delta Y for the mouse pointer, which are used to produce the
mouse HID report. The polling routine is performed every 10 ms, as the connection interval is set to 10 ms for the remote.
Thus, the sampling frequency of the motion sensor is set to 100 samples per second.
Figure 5-23. Processing of Accelerometer and Gyroscope Data
5.1.5.2 Interfacing the Motion Sensor
The MPU6500 motion sensor provides two options for a communication interface: I2C and SPI. In the Remote RDK, the I2C
interface is used for the communication. The reasons for choosing I2C are as follows:

I2C needs only two I/O s.

The Sampling speed required for the application is 100 samples per second, which is easily sufficed by I2C data rate.
The I2C Component in PSoC Creator is to be configured for the I2C communication with MUP6500. Currently, the design
uses a 100-kHz I2C clock. The figure below shows how the I2C Component is configured.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
83
Firmware
Figure 5-24. Configuration Tab of I2C Component Configuration
Figure 5-25. I2C Basic Tab of I2C Component Configuration
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
84
Firmware
Figure 5-26. Advanced Tab of I2C Component Configuration
After configuring the I2C Component, allocate the SCL and SDA lines to specific pins of PRoC. The I/O Allocation is done in
the Pins tab of .cydwr file as shown below.
Figure 5-27. Pins Tab of .cydwr File Used to Select I/Os for I2C
Note that only a few specific pairs of I/Os can be routed to I2C lines. If some other I/Os are allocated for the I2C lines, the
build process would give an error stating that those I/O could not be routed in the design. The INT pin of MPU6500 is
connected to P0.5 to trigger an interrupt. The INT pin can be used in two ways as follows:
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
85
Firmware
1)
The MPU6500, when configured in Low Power Motion detect mode, any motion of the device will assert a level
triggered interrupt on INT pin of MPU6500. On the PRoC side, this will cause an interrupt on P0.5 and will wake up
the PRoC if it is in deep sleep mode and trigger an interrupt and its ISR will be serviced. The ISR would lead to
reading of sampled sensor data which will clear the INT pin of MPU6500.
2)
When the MPU6500 is in normal sampling mode, the availability of samples in FIFO will trigger a level-trigger
interrupt on INT pin of MPU6500. On PRoC interrupt on P0.5 will be disabled and will be polled as a input signal. If
the pin is asserted, the polling routine will read the samples in FIO and the interrupt on INT pin of MPU6500 will be
cleared.
5.1.5.3 Using AML: Hardware Abstraction Level
Figure 5-28 shows the motion sensor axis orientation with respect to the chip packaging. The rotation of the device that
produces a positive output on the corresponding gyroscope is indicated by the curved arrows.
Figure 5-28. Motion Sensor Axis Orientation
However, according to the placement of the motion sensor device on the remote PCBA, the motion sensor axis orientation
is different than that shown in Figure 5-28. The chip is flipped about the Y axis and rotated around the Z axis, while the
remote is held in a pointing position. The axes of the sensor mounted on the PCB is changed as shown in Figure 5-29.
Figure 5-29. Placement of Motion Sensor on Remote PCBA
The AML is designed assuming the following referential conventions:

A clockwise rotation around the gyroscope Y-axis generates positive values, that is, negative delta Y onscreen (cursor
moves to the top).

A clockwise rotation around the gyroscope Z-axis generates positive values, that is, positive delta X onscreen (cursor
moves to the right).

When the device lies flat on its back, the accelerometer must see +1G on the Z-axis.

When the device lies on its right side, the accelerometer must see +1G on the Y-axis.

When the device is held vertically pointing down, the accelerometer must see +1G on the X-axis.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
86
Firmware
Considering these effective orientations of the motion sensor axes, it is concluded that the motion sensor mounted on the
Remote Control RDK produces positive output on the Z-axis while the cursor is moved to the right, as shown in Figure 5-30,
thus meeting AML convention 1.
Figure 5-30. Cursor Movement in X Direction
The motion sensor mounted on the Remote Control RDK produces a positive output on the Y axis while the cursor is moved
to the top, as shown in Figure 5-31, thus meeting AML convention 2.
Figure 5-31. Cursor Movement in Y Direction
Conventions 3, 4, and 5 will not be met because the directions of the accelerometer axes are reversed due to flipping the
chip for mounting. Hence, to meet conventions 3, 4, and 5, the reversed direction of the accelerometer axes will be
compensated for by negating the output of the accelerometer.
When using other motion sensors and motion processing libraries, there may be a need to process the data read from the
motion sensor to meet the conventions of the data processing library. This processing is part of the hardware abstraction
layer of the firmware, so in the Remote Control RDK firmware, it is implemented in Motion_Sensor_Hal_GetAccData()
and Motion_Sensor_Hal_GetGyroData()in the motion_sensor_hal.c.
5.1.5.4 Using Air Motion Library at Application Level
The AML exposes the following two APIs.

AIR_MOTION_Init(): This function is used to initialize the processing logic with various configuration parameters.
These parameters are passed to the function through a structure. The elements of this structure and their significance
are as follows:

DeltaGain: Delta gain values for X and Y axes. More gain results in more pointer displacement for the same
angular change.

GyroOffsets: Initial gyroscope offset values. Specifying the correct offsets eliminates the time consumed
during calibration.

GyroStaticMaxNoise: Gyroscope maximum value per axis for the device to be considered currently static.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
87
Firmware

StaticSamples: Number of consecutive “static” samples for the device to be considered fully static.

SwipeMinDist: Minimum distance, as deltas sum, for a swipe to be detected (‘0’ means no processing). Used
only if gestures are enabled.

SwipeMaxNoise: Maximum noise level, as deltas sum, for a swipe to be rejected. Used only if gestures are
enabled.

StartupSamples: Number of samples to discard before starting computation. It should be equal to the time
taken by the gyroscopes to stabilize after powering up.

ClickStillSamples: Maximum number of null pointing samples after a button press. This should be equal to
the time for which a button press can move the mouse pointer.

ClickStillTolerance: Stillness tolerance level, as maximum movement quantity, for pointing samples to be
forced null after a click press.

IsRollCompEnabled: Activate roll compensation feature.

Acc1gLsb: Norm value read from the accelerometer when the device is static (Earth's gravitational acceleration).
Specify this value according to the full-scale range of the accelerometer set by the motion sensor driver.

GyroSensitivity: Gyroscope sensitivity as “16*LSB / °/s.” Specify this value according to the full-scale range
of the gyroscope set by the motion sensor driver.
These parameters should be tuned properly to achieve an optimal performance of the motion mouse. Default values of
the parameters used in the RDK firmware may need to be changed on the actual end-product depending on its
structure and ergonomic characteristics.

AIR_MOTION_ProcessDelta(): This function processes the motion sensor data. Motion sensor data is passed as
parameters through a structure. The elements of the structure are as follows:

GyroSamples: Gyroscope samples

AccSamples: Accelerometer samples

ClickSample: Click buttons state sample. It notifies the library that a button is pressed. This information is used
by the click tolerance logic to avoid wiggling of the mouse on button press.

This function returns the computed deltas for the mouse pointer and updated gyroscope offsets through a
structure. Elements of this structure are the following:

Status: Status bits of the last sample processing. Holds the status of the device notifying and if the device is
steady, if new gyroscope offsets are computed, and if the mouse delta is computed.

GyroOffsets: Value of gyroscope offsets

Delta: Computed delta values

SwipesDetected: Bit field of detected swipes. This element is used only if gesture recognition is used.
The AIR_MOTION_Init() function is called while initializing the library or performance parameters such as gyroscope
offsets, delta gain, and so on. The AIR_MOTION_ProcessDelta() function is called as part of the polling routine for the
motion sensor. The structure returned by this API is used to generate the mouse report and update the gyroscope offsets.
The APIs exposed by the AML are independent of the motion sensor used and therefore can be used in the application
layer of the motion sensor module for a motion sensor. The code corresponding to the application layer is organized in
motion_sensor.c.
5.1.5.5 AML Features
Apart from the computation of mouse pointer movement, the AML also implements features that improve the user
experience and performance of the air mouse.

Auto-calibration of gyroscopes: The function of the auto-calibration feature is to eliminate gyroscope offset and drifts.
The calibration is automatically carried out when the motion sensor samples are passed to
AIR_MOTION_ProcessDelta()as part of polling routine. At the application layer, the generation of mouse
reports stops until calibration is in progress. When the calibration is complete, the function indicates this fact through
the NewGyroOffset element of t_struct_AIR_MOTION_Status. It also keeps updating the offsets automatically
without interfering with the mouse movement computation (once calibration is successful). First-time calibration takes
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
88
Firmware
time corresponding to the initalization value of StaticSamples. Once the offsets of gyro are calculated, they can
be saved in nonvolatile memory such as EEPROM or flash memory. These offsets can be used thereafter directly for
initialization of the AML. Passing the gyroscope offsets saved in nonvolatile memory to the initialization structure of
AIR_MOTION_Init() at the beginning of device initialization bypasses the calibration, which enables seamless
mouse operation after powering up the device.
Note: For the first time after the RDK is programmed, gyroscope offsets are not computed, so the default offsets used
to initialize the AML are passed as 0x0000. This triggers auto-calibration at the beginning of motion sensor polling. The
calibration logic waits for the device to be steady for StaticSamples amount of time before computing offsets and
then starts the calibration. Hence, the RDK should be kept still for StaticSamples amount of time for the completion
of calibration; otherwise, calibration will not take place. If the calibration is not completed, the application will not
generate mouse reports and the mouse pointer will be kept stalled.

Roll compensation: If the user holds the remote in a tilted manner, the gyroscope axes will also be tilted by the same
angle. This angle is called the “roll” of the remote. The roll angle would tilt the x-y direction of pointer movement by a
roll angle, resulting in horizontal movement of the remote to produce a tilted pointer movement, as shown in Figure
5-32.
Figure 5-32. Roll Compensation
The roll compensation features eliminates this issue. It rotates the x-y direction of the pointer movement by the same
angle in which the remote is tilted, but in the opposite direction. The angle of the tilt is computed using accelerometer
data. The accelerometer in a steady state is acted upon by acceleration due to gravity, which produces nonzero
acceleration output on all the axes of the accelerometer, depending on the angles made by the motion sensor axes
with the direction of gravity. Thus, the measurement from the accelerometer is used to calculate the orientation of the
device and hence the roll angle, as depicted in Figure 5-33.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
89
Firmware
Figure 5-33. Estimation of Roll Using Accelerometer Output
The AML uses this roll angle to nullify the effect of roll in the mouse pointer movement, called “roll compensation.”
However, the calculation of roll is performed only when the mouse pointer is steady. So, only the roll of the remote at
the beginning of pointer movement is compensated for. The compensation logic does not take into account the tilt
introduced in the discourse of movement.
The roll compensation feature is enabled by assigning the value of IsRollCompEnabled to 1 while initializing the
AML using AIR_MOTION_Init().

Click tolerance: When a button is being pressed on the remote, the remote moves a bit and causes unintended pointer
movement. This movement creates difficulties when the user is trying to click on a specific location. The click tolerance
feature resolves this issue. In this feature, the button press is reported to AIR_MOTION_ProcessDelta() by
assigning parameter ClickSample to 1 when a button press or release is detected. As soon as a button press is
detected, the AML logic keep reporting zero delta for X and Y mouse pointer movement for a configurable time interval.
The time interval is configured using ClickStillSamples parameter, which is passed to AIR_MOTION_Init().
Typically this time is 300 ms. However, the movement of mouse is frozen only if the movement is within the level of
ClickStillTolerance. This tolerance level is also set in the firmware while initializing the AML library.
5.1.5.6 Power Management in Motion Sensing Mode
The most current-consuming process for the motion sensor module is sampling the motion sensor data when all the
gyroscopes and accelerometers are active. Hence, polling is carried out in the Active state of the firmware state machine
during the motion sensor polling routine. If the remote is steady, HID reports for the mouse are not generated, as delta X
and delta Y are 0. If no mouse reports are generated for 3 seconds, it implies that the user is not making any activity, so the
firmware moves into the Idle state.
In the Idle state, the firmware puts the motion sensor in the low-power motion detect mode. In this mode, the gyroscopes
are turned off. Accelerometers are turned on and are sampled at a low frequency, typically eight samples per second. The
internal motion detect logic present in MPU6500 is enabled. This logic detects the motion of the device and generates an
interrupt on the INT pin of MPU6500, triggered when the accelerometer output data exceeds a programmable threshold
level. This threshold is configured using the WOM_Threshold[7:0] register of MPU6500. In the RDK firmware, the threshold
value is defined as MOTION_WAKEUP_THRESHOLD in MPU6500.h. This threshold value needs to be configured in the
firmware by the developers per the performance requirement.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
90
Firmware
5.1.5.7 Tuning Parameters for Good Performance:
While deploying the motion mouse in the end product, the user experience for mouse handling needs to be optimized via
the following parameters:

ClickStillTolerance
Description: This parameter determines the quantity of movement that should be tolerated during a button press.
Value: This parameter can be assigned three values:
o AirMotionLow
o AirMotionNorma
o AirMotionHigh.
Considerations: if this parameter is set to high (AirMotionHigh), a greater movement in pointer is tolerated as a
button press activity. However, a greater movement is required for pointer to start moving after the button press is
complete. The effect of a high tolerance level would reflect in the click-and-drag action, which would show a jerk in
pointer movement after the click action. Thus, an appropriate level needs to be decided that is suitable for the desired
user experience.
Firmware details: Macro AIR_MOTION_DEFAULT_CLICKSTILLTOLERANCE in motion_sensor.h

ClickStillSamples
Description: This parameter determines the time for which the pointer needs to be frozen after a button press is
detected.
Value: Can be any uint8 number. Typically, this value is 10 to 80 corresponding to a time duration of 100 to 800 ms.
Considerations: The optimal value for this parameter depends mostly on the mechanical and ergonomic aspect of the
end product design. If the buttons of the remote are very soft for presses, the movement produced due to a button
press will be small and of a shorter duration. On the other hand, if the buttons on the remote are harder, the movement
produced by a button press would be of a longer duration. Therefore, this parameter should be set to a value that is
high enough to last until the movement of the button press stops and low enough to report an immediate user activity
after a button press.
Firmware details: Macro AIR_MOTION_DEFAULT_CLICKSTILLSAMPLES in motion_sensor.h

Motion Detect threshold
Description: This parameter specifies the value of the MPU6500 register used by the Motion Detect logic of the
sensor.
Value: Any uint8 number. Typically, the value can be from 1 to 50.
Considerations: This parameter determines the amount of acceleration in milli-gravity (mg) that would be considered
as movement of the device. The detection of motion would raise an interrupt to the firmware and move the firmware
state machine from Idle or Low Power state to Active State. This threshold should be sufficiently low to detect a small
amount of movement caused when the user picks up the remote from the desk. However, it should be high enough not
to detect taps or vibrations on desk, if the threshold is low, and the remote wakes up due to vibration. This will not
affect user experience, but it will cause the remote to spend more amount of time in the Active State and turn on the
gyroscopes and process its data. This will increase average current consumption of the device, leading to reduced
battery life.
Firmware details: Macro MOTION_WAKEUP_THRESHOLD in mpu6500.h

DeltaGain
Description: This parameter specifies the gain values that determine the sensitivity of the pointer to the movement of
the device.
Value: Can be any int8 number. Typically, it ranges from 10 to 20.
Considerations: More gain results in greater pointer displacement for the same angular change. The end user
experience is the only factor that can be used to tune this parameter.
Firmware details: Macro AIR_MOTION_DEFAULT_GAIN_DELTA_X, AIR_MOTION_DEFAULT_GAIN_DELTA_Y in
motion_sensor.h
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
91
Firmware

GyroStaticMaxNoise
Description: This parameter specifies the amount of peak variations in the gyroscope output when the device is
steady.
Value: Any uint8 number
Consideration: The value determines how much change in gyroscope output should the AML consider as noise. The
value should be determined by separately analyzing the gyroscope output samples collected when the device is steady
and determining the peak noise in the gyroscope output for a period of at least 1 second. Setting this parameter to
more than the actual noise in the gyroscope output will not produce any movement when device is moved slowly. On
the other hand, if this value is set to lower than the noise in the gyroscope output, an erroneous pointer movement can
be observed when the mouse is steady.
Firmware details: Macro AIR_MOTION_DEFAULT_GYROSTATIC_NOISE in motion_sensor.h

StaticSamples:
Description: This parameter specifies the number of consecutive samples from the sensor for AML to conclude that
the device is at rest.
Value: It can be any uint16 number. It can vary from 5 to 4000 depending on the use case.
Considerations: The value of static samples is used to update gyroscope offsets of the AML. Calling the
AIR_MOTION_ProcessDelta() function for SaticSamples number of times when the device is static results in an
update in gyroscope offsets. The updated offsets are returned by this function in the form of the GyroOffsets
element of the returned structure. Also Status.NewGyroOffset is set to TRUE in the same returned structure. Thus,
a small value of the static sample will result in fast updates in the gyroscope offsets. If the firmware is writing the offsets
into a nonvolatile memory when new offsets are available, the memory writes will be frequent. This may result in
reduced age for the memory. On the other hand, if the value of the StaticSamples id very large, the gyroscope offsets
will not be calculated for long durations. If the offsets are not updated frequently, the drifts in the gyroscope due to
temperature changes and other possible reasons will not be compensated, which may result in unnecessary pointer
movements.
Firmware details: Macro AIR_MOTION_DEFAULT_STATIC_SAMPLES in motion_sensor.h
5.1.6 Button Subsystem
The button subsystem checks the status of the following buttons:

Voice button: Activates the voice mode

Motion button: Activates the motion sensor and subsystem

Return button: Sends the return keyboard code of 0x9E over BLE
Figure 5-34 shows how the voice button is scanned. The voice button is connected to a dedicated GPIO, which is also used
in battery monitoring. For more information on the hardware, see the Battery Monitoring section.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
92
Firmware
Figure 5-34. Voice Button Flow Chart
Start
Update button debounce
value based on GPIO
status
Is debounce value
> high threshold
Yes
No
Is debounce value
< low threshold
No
Yes
Update voice button
status as pressed
Update voice button
status released
End
The button subsystem uses the cy_pins Component shown in Figure 5-35.
Figure 5-35. cy_pins Component for Button Module
The cy_pins Component for the voice button is configured as a Digital output with Open drain, and Digital input as
shown in Figure 5-36. The digital output function is used to drive the pin LOW during battery voltage measurement.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
93
Firmware
Figure 5-36. Pins Tab Configuration Settings
The motion and return button are multiplexed between the rows of the keyboard matrix. Figure 5-37 shows the flow chart for
scanning these buttons.
Figure 5-37. Keyboard Matrix Button Flow Chart
Start
Are keyboard rows
activated?
No
Yes
Yes
Are keyboard columns
activated?
No
Read button status by
asserting row 1 and reading
status on other rows
Map the button to the
appropriate code
End
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
94
Firmware
5.1.7 Keyboard Subsystem
The keyboard subsystem is configured for three-row and three-column button matrix operation. The keyboard subsystem
scans and debounces any activated keys in the keyboard matrix. The activated keys can be one of the following types:
standard, multimedia, or power keys. The information from this subsystem is passed to the application framework. Figure
5-38 shows the flow chart for the keyboard subsystem operation.
Figure 5-38. Keyboard Flow Chart
Start
Scan for keys in
the keyboard
matrix
Any new
key pressed?
Yes
Yes
No
Any Key
released?
Yes
No
Any Key
remains
pressed?
No
Yes
Ghost
detected?
No
Add to
queue
Keep Alive
packet Timeout
occurs
No
Yes
Decrement the
debounce value
for the elements
in the queue
No
Debounce
value == 0
Yes
Send the
keys
detected
End
To scan the keys, all the rows are pulled down to logic 0 first. Then, each column is pulled to logic 1 through a resistive pullup and its status is read after a 20-µs delay. If any button on a given column is pressed, the firmware will read a logic 0 on
that column. In this case, the firmware identifies the pressed button by pulling a row to logic 0 while keeping all other rows
at logic 1 and reading the column status. If the pressed button is located on a given row, the firmware will read logic 0.
If a new key press is detected, the subsystem checks if it is a ghost key. A ghost key condition is detected when three
physical keys are pressed but four keys are detected. If the identified key is not a ghost key, add the detected key to the
queue for denouncing. After denouncing is complete, the detected keys are passed to the application framework. Refer to
Table 5-5 for a complete list of key codes implemented in the kit firmware.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
95
Firmware
Table 5-5. Keyboard Matrix Key Mappings
Key
Key Codes
Volume Up
0x00E9 (0th word of the of the multimedia report)
Volume Down
0x00EA (0th word of the of the multimedia report)
Channel Up
0x009C (0th word of the of the multimedia report)
Channel Down
0x009D (0th word of the of the multimedia report)
Source
0x0087 (0th word of the of the multimedia report)
On/Off
0x0030 (0th word of the of the multimedia report)
Left button
Left-click (0th bit of the 0th byte of the mouse report)
Right button
Right-click (1st bit of the 0th byte of the mouse report)
Connect
Nothing is sent over BLE
The keyboard subsystem uses the cy_pins Component (Figure 5-39) to interface with the key matrix. Separate sets of pins
are used for rows and columns.
Figure 5-39. cy_pins Component for Keyboard Module
The row and column cy_pins Components are configured as follows. Since the keyboard is an input device, all column and
row pins are configured as input, as shown in Figure 5-40 and Figure 5-41.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
96
Firmware
Figure 5-40. cy_pins Component Settings for Columns
Figure 5-41. cy_pins Component Settings for Rows
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
97
Firmware
5.1.8 Timer Subsystem
The timer subsystem is implemented using the watchdog timer. The PRoC BLE watchdog timer has two 16-bit counters
(counter 0 and counter 1) and one 32-bit counter (counter 2). These counters can be configured to work independently or in
cascade.
The watchdog timer uses the 32767-Hz clock for its operations. It is the only timer that is available when the MCU is in
Deep Sleep. The watchdog timer is configured to generate an interrupt every 1 ms in the Active state, every 125 ms in the
Idle state, and every 250 ms in the Sleep state.
The remote firmware utilizes counter 1 for generating interrupts at a regular interval. The application framework uses this
timer value to switch between states. Figure 5-42 shows the flow chart for the timer subsystem.
Figure 5-42. Timer Module Flow Chart
Entry
Increment timer
Exit
5.1.9 Battery Monitoring Subsystem
The battery monitoring subsystem measures the voltage at the battery terminal. This subsystem is polled every 3 seconds.
The Sequencing SAR ADC Component provided in PSoC Creator is used to measure the battery voltage. Figure 5-43
shows the flow chart for this subsystem.
Figure 5-43. Battery Monitoring Module Flow Chart
Entry
Measure voltage
Exit
Figure 5-44 shows the schematic of the Sequencing SAR ADC Component. The following sections describe the
configuration settings.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
98
Firmware
Figure 5-44. Sequencing SAR ADC Component in PSoC Creator
5.1.9.1 General Tab
The Clock frequency and other parameters shown in Figure 5-45 are selected to achieve a sampling rate of 3,906
samples per second.
Figure 5-45. General Tab of Sequencing SAR ADC Component
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
99
Firmware
5.1.9.2 Channels Tab
The ADC operates with a single 12-bit resolution channel input. The clock is set to “A clks” to get a conversion time of
256 µs, as shown in Figure 5-46.
Figure 5-46. Channels Tab of Sequencing SAR ADC Component
The datasheet provides a list of APIs supported by the Sequencing SAR ADC Component. To go to the datasheet, click the
Datasheet button at the bottom left corner of the Sequencing SAR ADC Component GUI shown in Figure 5-46.
5.1.10
Audio Subsystem
The CY5672 remote control supports audio capability to enable voice recognition function on the host device (PC or Smart
TV). The audio data (voice commands) are transferred over air to the host with voice recognition capability, which decodes
the voice commands and triggers the corresponding action. Figure 5-47 provides the system level view of voice command
transfer from the remote control.
Figure 5-47. Voice Recognition Using CY5672 Remote Control
The firmware data flow for the audio data on the remote control is illustrated in Figure 5-48.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
100
Firmware
Figure 5-48. Firmware Data Flow for Audio Feature
I2S
ADPCM
Encoding
Circular
Buffer
4:1 Compression
40 ms
BLE Stack
In the host side, the audio data is received as a HID report, depending on the host side implementation it can use a
standard driver to collect the HID data and send to voice recognition software like Google voice or Nuance for decoding the
voice command. When a CySmart dongle is used in the host system, the audio data received over BLE is sent to the
dongle, which enumerates as an USB audio device to the host device.
The audio subsystem collects audio data from the INMP441 codec (16 bit, 16 kHz) over the I2S interface. The subsystem
uses the I2S Component. The I2S interrupts when it receives audio data in the PCM format. The received data is read from
the I2S Component and stored in a local buffer. The subsystem compresses the audio data in the buffer using the ADPCM
algorithm (compressing 16-bit audio data to 4-bit). Figure 5-49 shows the flow chart for the audio subsystem.
Figure 5-49. Audio Subsystem Flow Chart
Start
Is voice button
pressed?
No
Yes
Yes
Was voice button
in pressed state during
previous poll?
No
Initialize the audio
codec
Was voice button
in released state in previous
poll?
Yes
No
Stop the audio codec
ADPCM Encode
End
5.1.10.1 Quality of Voice Required for Voice Recognition
A typical voice recognition software requires a threshold signal-to-noise ratio (SNR) for the recognition of voice syllables
correctly By using ADPCM as compression, the raw SNR is reduced as the 16-bit data is effectively reduced to 4 bits. The
effective SNR after compression hovers around 20 dB.
Most of the prevalent voice recognition software like Google voice and Nuance operates well around 15 dB -20 dB SNR.
Figure 5-50 shows the SNR value for a frequency range of 100 Hz to 8000 Hz for the voice data processed using ADPCM
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
101
Firmware
coding. The value of SNR is observed to be more than 15 dB. Typically, voices stay in the range of 200 Hz to 6000 Hz.
Thus, the ADPCM coding is still sufficient to enable voice recognition.
Figure 5-50. SNR for Voice Data Processed Using ADPCM Coding
5.1.10.2 ADPCM Encoding
The ADPCM algorithm takes advantage of the high correlation between consecutive speech samples, which enables future
sample values to be predicted. Instead of encoding the speech sample, ADPCM encodes the difference between a
predicted sample and the speech sample. This method provides more efficient compression with a reduction in the number
of bits per sample, yet preserves the overall quality of the speech signal. Figure 5-51 is the flow chart for the ADPCM
encoding algorithm.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
102
Firmware
Figure 5-51. ADPCM Algorithm Flow Chart
Start
Restore previous iteration predicted
sample and step size index
Get the step size from lookup table
Calculate the difference between
actual and predicted sample values
No
Is difference >= 0?
Set the sign bit of the ADPCM
code, find absolute value of
difference
Yes
Save quantizer step size value in a
temporary variable, Quantize the
difference into ADPCM code using
quantizer step size.
Inverse quantize the ADPCM code into a
predicted difference using the quantizer
step size
Compute fixed predictor sample value
Check for the overflow of the new
predicted sample
Find the new step size index
Save new predicted sample and step
size index for next iteration, return
ADPCM code
Stop
5.1.10.3 Voice Performance of the Firmware
This section explains the key scientific audio quality parameters measured on the remote control. Note that the audio quality
measurements were done by placing the speaker and remote in an anechoic box. This document does report the usual
measurement in a normal environment instead of a professional acoustic measurement. Depending on the microphone and
the speaker used with a particular enclosure, the results can vary. The measurement is more illustrative of the end-to-end
system than as a reference benchmark.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
103
Firmware
Figure 5-52. Audio Quality Measurement Setup
Prism Software
Mic
Codec
I2S
PRoC BLE
PRoC BLE
UART
PSoC5LP
USB
USB
Prism Audio Analyzer Hardware
The three important considerations for voice subsystem are as follows:
1.
Input Output characteristics
2.
Frequency response
3.
SNR
The measurement is done through Prism Audio Analyzer. The Prism audio analyzer drives the speaker that is kept at a
distance of 4 inches from the microphone of the remote. The USB audio output is observed through Prism Audio analyzer.
Input –Output Test
In this test, the Prism Audio Analyzer hardware feeds the data to the remote control’s microphone using a speaker. The
data received on the CySmart dongle is received over USB by the Prism software running on the PC. Figure 5-53 shows
the audio data received on the PC in dB full-scale. The output is expected to track linearly.
Figure 5-53. Audio Input-Output Test
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
104
Firmware
Signal-to-Noise Ratio
The signal-to-noise ratio test specifies how much noise rides over the signal. This is a specification for many voice
recognition systems. For this test the Speaker input was varied from 2 V to 20 µV from Prism Generator. The sound
generated is in the normal voice level (96-20 dbSPL). The output total harmonic distortion and noise are read from the
Prism software. This is the negative of SNR.
Figure 5-54. SNR Plot
As seen from the graph, the SNR maximizes around 27 dB. This is expected from an ADPCM type encoding and decoding
scheme. The linearity range observed t be approximately 33 dB.
The discontinuity in low-range, and occasionally in the mid-range points to the step adjustment of the ADPCM algorithm
with RF disturbances. This is not a repeatable measurement and depending on the sweep of the input amplitude and the
ADPCM seed, the result will vary. This only shows the maximum THD-N that we can get in a ADPCM system. To get a
better idea, the experiment should be performed without a sweep of amplitude from the audio generator and the THD-N
should be observed for a single amplitude over a period of time and the plot should be reconstructed.
Frequency Sensitivity of Voice Input
The aim of this experiment is to observe if there is any frequency selectivity with ADPCM coding and I2S codec. It is
observed that in frequency range from 8000 Hz to 200 Hz, the maximum deviation is -8 dBFS to 3 dBFS.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
105
Firmware
Figure 5-55. Signal-to-Noise Ratio Plot
The frequency response is dominated by the frequency response of the speaker. The electrical frequency response with
I2S input at the BLE chip and digital output at the USB audio device will be better than this as the speaker non linearity will
be out of the system.
FFT Response
The FFT response shows any artifacts that arise from the coding or audio codec configuration. For the test, a 1-V, 1-K tone
from Prism Audio Analyzer is applied to the speaker and the output spectrum is observed on the data received from USB.
FFT is performed on this digital data. The spectrum does not show any spurious tone.
Summary
The following table describes the critical scientific audio quality parameters, their pass criteria values to ensure optimal
voice recognition performance, and the measured values on CY5672 remote control.
Table 5-6. Audio Quality Parameters: Pass Criteria and CY5672 Values
Parameter
Pass Criteria for Typical Voice Recognition
Implementation
Measured Results on CY5672 Remote
Control
Linearity
20 dB
30 dB
SNR
>15 dB
15-20 dB
Frequency response
100-4 K
100-7 K
As specified in the above table, the CY5672 remote control implementation meets the pass criteria for the scientific audio
quality parameters required to ensure optimal voice recognition performance.
The following sections explain the I2S Component (Figure 5-56) configuration settings for remote control.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
106
Firmware
Figure 5-56. I2S Component for Audio Subsystem
5.1.10.4 General Tab
The RX only direction is selected (Figure 5-57), since the remote control contains only a microphone.
Figure 5-57. General Tab of I2S Component
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
107
Firmware
5.1.10.5 Advanced Tab
The Number of channels is set as “Mono left” and the Interrupt source as “FIFO 0 not empty,” as shown in Figure 5-58.
Figure 5-58. Advanced Tab of I2S Component
5.1.11
IR LED Subsystem
When the remote control cannot communicate with the host over a Bluetooth LE link (for example, in the case of a legacy
TV that is not Bluetooth Smart Ready and does not have a USB port), the IR subsystem is used to send commands.
Regular TV control commands like volume controls, channel controls, source, power, and return command are sent via this
IR subsystem. The IR subsystem sends key codes over the IR LED interface using the Samsung or NEC IR protocols. A
compile time switch (NEC_PROTOCOL) selects between the Samsung and NEC IR protocol implementation. By default,
the Samsung TV IR protocol is enabled in the firmware supplied with the kit. Figure 5-59 shows the flow chart for the IR
subsystem.
Figure 5-59. IR Subsystem Flow Chart
Start
BLE
Connected?
Yes
Use BLE
Module to
send data
No
IR Start
No
Is
Command
Valid?
Yes
Send Command
through IR
Stop
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
108
Firmware
5.1.11.1 Samsung Protocol
The Samsung protocol uses pulse-distance encoding of the bits, containing a 16-bit address and 8-bit command, followed
by an 8-bit command inverse. Each pulse is a 624-µs long, 38-kHz carrier burst (about 21 cycles). A logical ‘1’ takes
2.25 ms to transmit, while a logical ‘0’ takes only half that time: 1.125 ms. The recommended carrier duty cycle is 1/4 or 1/3.
Figure 5-60 shows the Samsung protocol pulse train.
Figure 5-60. Samsung Protocol Pulse Train
MSB LSB
LSB
Leader
Custom
MSB LSB
Custom
MSB LSB
MSB
Data
End
Bit
Data
4.5ms
4.5ms
0.624ms 0.876ms
Data: 0
Leader
8.8us
0.624ms
1.626ms
Data: 1
17.6us
Carrier frequency: 37.9kHz
5.1.11.2 NEC Protocol
The NEC protocol uses pulse distance encoding of the bits, which contains an 8-bit address followed by an 8-bit address
inverse, and an 8-bit command followed by an 8-bit command inverse. Each pulse is a 562.5-µs long, 38-kHz carrier burst
(about 21 cycles). A logical ‘1’ takes 2.25 ms to transmit, while a logical ‘0’ takes only half that time: 1.125 ms. The
recommended carrier duty cycle is 1/4 or 1/3. Figure 5-61 shows the NEC protocol pulse train.
Figure 5-61. NEC Protocol Pulse Train
MSB LSB
LSB
Start bit
9ms
Address
MSB LSB
Address
MSB
MSB LSB
Command
Command
4.5ms
Start
bit
0.56ms 0.56ms
Data: 0
1.69ms
0.56ms
Data: 1
17.6us
8.8us
Carrier frequency: 37.9kHz
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
109
Firmware
5.1.11.3 Implementation of the IR Protocol Using PWMs
Both the Samsung and NEC IR protocols require a pulse train at 38 kHz. To generate the required binary pattern (which
includes the leader/start, custom/address, and data/command in Samsung and NEC protocols respectively), the 38-kHz
pulse train must be turned ON and OFF for certain durations. Refer to Figure 5-60 and Figure 5-61 for the timing details.
Two PWMs are used in the firmware to generate the required binary pattern:

Pwm_IR: This PWM is used to generate the 38-kHz pulse train.

Pwm_IR_Timer: This PWM is used to maintain the timing for transmitting a bit of information over IR. For example, to
send one command bit of value ‘0’ using the Samsung IR protocol, the 38-KHz pulse train should be turned ON for
0.624 ms in the span of 1.125 ms as shown in Figure 5-60. The Pwm_IR_Timer configuraton is modified dynamically
depending on the value of the bit to be transmitted. Note that with Pwm_IR_Timer, there are the following two types of
interrupts:

On terminal count : This interrupt is used to detect the completion of transmission of a bit. For a '0,' the value is set
to 1.125 ms and for '1,' the value is set to 2.25 ms.

On compare/capture count : This interrupt is used to detect the completion of transmission of the 38-KHz pulse
train for a given bit and IR protocol.
The following sections discuss the configuration of the PWM Components.
Figure 5-62 Pwm_IR Component
Figure 5-63. Configuration Tab of Pwm_IR Component
In the PWM tab, the initial period and compare values are set as shown in Figure 5-63. These values will generate a 38-kHz
pulse train with a 50-percent duty cycle. The interrupts for On terminal count and On compare/capture count are
disabled.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
110
Firmware
Figure 5-64. PWM Tab of Pwm_IR Component
See the Component datasheet for information on the APIs supported by the PWM Component. Click the Datasheet button
at the bottom left corner of the PWM Component GUI shown in Figure 5-64 to access the datasheet.
Figure 5-65. Pwm_IR_Timer Component
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
111
Firmware
Figure 5-66. Configuration Tab of Pwm_IR_Timer Component
In the PWM tab, the Interrupts for On terminal count and On compare/capture count are enabled, as shown in Figure
5-64.
Figure 5-67. PWM Tab of Pwm_IR_Timer Component
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
112
Firmware
Note that there is an alternate implementation of the IR protocol that uses bit banging. Do the following to enable it:
1.
Enable IR_PIN_TOGGLE macro in platform.h.
2.
Remove the existing Pwm_IR Component and its associated GPIO and clock.
3.
Rename Pwm_IR_1 to Pwm_IR. Also, rename the associated GPIO and clock in the Schematics Editor.
5.1.11.4 List of IR Key Codes
Table 5-7 lists the IR key codes used for the Samsung and NEC protocols.
Table 5-7. IR Key Codes for NEC Protocol
Key
IR Key Codes for Samsung Protocol
IR Key Codes for NEC protocol
Volume Up
0x07
0x1F
Volume Down
0x0B
0x40
Channel Up
0x12
0x49
Channel Down
0x10
0x4A
Source
0x01
0x02
Return
0x58
0x16
On/Off
0x02
0x00
5.1.12
LED Subsystem
The LED subsystem shows device notifications to the user through the red LED and supports the breathing effect (at
different rates). The LED subsystem provides the following LED effects:

LED ON: The LED is continuously in the ON state. The intensity can be varied by using PWM control. This indication is
used to notify undirected advertisement (behavior is observed when the connect button is pressed on the remote
control).

LED breathing effect: The LED gradually increases in brightness and goes to the maximum brightness state. From the
maximum brightness state, it goes back gradually to the OFF state. The entire LED brightness behavior is displayed in
Figure 5-68. This effect supports different blink rates (slow and fast). A slow breathing effect is used to indicate a low
battery, and a fast breathing effect is used to indicate directed advertisement to the host or undirected advertisement to
the devices that is already present in the whitelist (behavior is observed if the remote control was bonded to at least
one device earlier, and it is either out of range or received a disconnect).
Figure 5-68. Timing Diagram for Breathing Effect
REPEAT
RISE TIME
ON TIME
FALL TIME
OFF TIME
RISE TIME: Time in milliseconds for rise time
ON TIME: Time in milliseconds for high standby time
FALLTIME: Time in milliseconds for fall time
OFF TIME: Time in milliseconds for low standby time
REPEAT: Repeating the above pattern
The blinking or breathing effect on the LEDs is generated via the PWM Component (Figure 5-69) provided in PSoC Creator.
The following sections explain the configuration of the PWM Component.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
113
Firmware
Figure 5-69. PWM Component
5.1.12.1 Configuration Tab
The PWM option is selected by default, as shown in Figure 5-70.
Figure 5-70. Configuration Tab of TCPWM Component
5.1.12.2 PWM Tab
The PWM mode is set as “Pseudo random PWM.” The Period and Compare values are set to “32767” and “1000”
respectively, as shown in Figure 5-71.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
114
Firmware
Figure 5-71. PWM Tab of TCPWM Component
The datasheet provides a list of APIs supported by the TCPWM Component. To go to the datasheet, click the Datasheet
button at the bottom left corner of the TCPWM Component GUI shown in Figure 5-71.
5.1.13
Flash Subsystem
The flash subsystem supports storing and retrieving of the peer device BD (Bluetooth Device) address and the motion
sensor gyro offset data. The remote control receives the BD address of the peer device on a connection event. This
address is stored in flash memory. The peer device BD address is needed for directed advertisement; therefore, it is
retrieved from flash every time the remote control system power is reset.
The data stored in the flash by the firmware is protected using a 8-bit checksum. The firmware provides an option to disable
writes to flash by disabling the macro DISABLE_FLASH in the platform.h file.
5.1.14
Debug Subsystem
The debug subsystem is used to print debug information on the UART terminal. This subsystem is disabled by default. The
firmware provides an option to enable debug by enabling the DEBUG_PRINT or SOFTWARE_UART macro in the
platform.h file. If the DEBUG_PRINT macro is enabled, you should enable the SCB UART Component in the schematic
view of PSoC Creator (Debug_Uart). If the SOFTWARE_UART macro is enabled, enable the software Transmit UART
Component (SW_Tx_UART). In addition, assign the corresponding pins from these Components to the appropriate GPIOs
in CY5672_Remote_Control.cydwr.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
115
Firmware
The debug subsystem provides an option to print the selected debug logs by setting the appropriate debug level. For
example, if the default debug level is set to ‘0’, during Device_FW_Init(), the debug prints with a setting greater than ‘0’ are
printed.
5.2 Firmware for the PRoC BLE and PSoC 5LP on the CySmart USB
Dongle
The CySmart USB dongle firmware comprises the firmware for both PRoC BLE and PSoC 5LP devices. Note that these two
devices each have their own separate PSoC Creator projects as listed Table 5-8, although they are described together in
the following section.
Table 5-8. CySmart USB Dongle Projects
Silicon Part
Associated Project Name
PRoC BLE
BLE_HID_CySmart_Dongle.cywrk
PSoC 5LP
CY5672_Dongle_Bridge.cywrk
The CySmart USB dongle has two modes of operation. The dongle can only operate in one mode at a time:

HID host: In this mode, the dongle acts as the HID host and transfers the BLE data to USB. This is the normal
operating mode.

CySmart emulator: In this mode, the dongle performs all BLE operations triggered via the CySmart tool. This is used for
examining the BLE data directly.
When powered on, the dongle is in the HID host mode and communicates with the HOGP-complaint BLE device. On
connecting the dongle to the CySmart tool, the dongle switches to the CySmart emulator mode.
On disconnection from CySmart tool, the dongle switches back to the HID mode.
5.2.1 Firmware Architecture
The firmware for the CySmart USB dongle consists of the framework (on PRoC BLE and PSoC 5 LP) and various
input/output subsystems, as shown in Figure 5-72.
Figure 5-72. PRoC BLE Firmware Architecture for CySmart USB Dongle
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
116
Firmware
In HID mode, only the audio interface and HID interface will be active. The PRoC BLE device will format the HID/audio
packet along with a report ID and send it to PSoC 5LP with a unique code for each HID endpoint. For audio, PSoC 5LP will
perform ADCPM decompression on an audio packet and send it to the USB audio interface.
In CySmart mode, only the UART interface will be used; other interfaces will be inactive. PSoC 5LP sends the UART data
to the PC using a virtual COM port via the USB interface.
The dongle firmware includes the following subsystems:

BLE subsystem (PRoC BLE)

LED subsystem (PRoC BLE and PSoC 5LP)

Button subsystem (PRoC BLE)

UART subsystem (PRoC BLE and PSoC 5LP)

USB subsystem (PSoC 5LP)
These subsystems use PSoC Components. Figure 5-73 shows a schematic view of the PRoC BLE device, and Figure 5-74
shows a schematic view of the PSoC 5LP device.
Figure 5-73. Schematic View of BLE HID CySmart Dongle Firmware (PRoC BLE)
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
117
Firmware
Figure 5-74. Schematic View of CY5672 Dongle Bridge Firmware (PSoC 5LP)
The GPIOs are configured per the dongle hardware connections, as shown in Figure 5-75 and Figure 5-76.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
118
Firmware
Figure 5-75. GPIO Configuration of BLE HID CySmart Dongle Firmware (PRoC BLE)
Figure 5-76. GPIO Configuration of CY5672 Dongle Bridge Firmware (PSoC 5LP)
Table 5-9 describes the file structure used by the projects and lists the key functions implemented in each file.
Table 5-9. File Structure and Key Functions
File Name
Project:
BLE_HID_CySmart_Dongle
(PRoC)
main.c
Details
This is the top-level application file. It initializes the system and runs the main loop.

main() – The main function for the application, which handles the switching between HID mode
and CySmart mode

Device_Init() – Initializes all the blocks (BLE, UART, LED, Timer, and GPIOs) of the system

Device_Timer_Callback() – Handles the timer interrupt configured for the LED module
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
119
Firmware
File Name
Details
Project:
BLE_HID_CySmart_Dongle
(PRoC BLE)
This file handles the HID mode functionality of the project. It handles the BLE events and the state
machine of the HID host.

BLE_Init() – Handles the BLE-specific initialization and registers the callback functions for
each profile. The BLE Component is started with HID mode configuration.
Application.c

BLE_DeInit() – De-registers the callback functions for each profile and stops the HID mode
BLE Component.

Dongle_Ble_State_Handler() – Handles the state machines for BLE scanning, connection,
GATT discovery, and profile-level configurations.

FilterScanResponsePackets() – Parses the advertisement packet from the device and filters
the packets for the HID service Universally Unique Identifier (UUID). The dongle will connect to
devices containing the HID service or to devices sending a directed advertisement to the
dongle.

SendEmptyReports() – Sends a dummy report on BLE disconnection. If any key down packet
is sent by the device before disconnection, this dummy report will ensure that the key press
state is reverted.

BleCallBack() – Handles general events from the BLE stack such as disconnect, timeout, scan
response, authentication events, and so on.

HidsCallBack() – Handles the HID-specific events. This function gathers the report IDs of each
report reference descriptor to match with the notification data. On receiving HID notification,
this function matches it to the expected report ID and sends the report to the USB Bridge
controller.

BasCallBack() – Handles the BAS-specific events for notification enable and notification
events. The Battery notification will be sent as an HID feature report to the USB interface.

Process_Suspend_Command() – Handles the USB suspend command from the USB Bridge
controller. The system will go into sleep mode as long as the suspend command is active. This
function also sends the HID Suspend command to the HID device if it is connected. This will
inform the device to enter sleep mode.
Project:
BLE_HID_CySmart_Dongle
(PRoC BLE)
This module is same as described in the remote control project. See the LED Subsystem section.
led.c
Project:
BLE_HID_CySmart_Dongle
(PRoC BLE)
timer.c
Project:
CY5672_Dongle_Bridge
(PsoC 5LP)
main.c
This module is same as described in the remote control project. See the Timer Subsystem section.
The watchdog timer–based tick timer is used by default. The firmware has a provision to use the
Timer_HW Component instead of the watchdog timer by doing the following:

Enable the ENABLE_TIMER_COMPONENT macro in Timer.h.

Disable the ENABLE_WDT_TIMER macro in Timer.h.

Right-click on the Timer_HW Component in the schematic view and select “enable”.
This is the top-level application file. It initializes the system and runs the main loop.

main() – Handles the USB reset and runs the main loop to monitor UART and USB data
transfers.

Device_Init() – Initializes all the blocks of the system, waits for the USB enumeration, and sets
the enumeration LED. This function also resets PRoC BLE after system initialization to ensure
that both the controllers are in sync.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
120
Firmware
File Name
Project:
CY5672_Dongle_Bridge
(PsoC 5LP)
USB_Interface.c
Details
This file handles the bridge functionality between the USB and UART interfaces.

UARTTransmit() – Checks for USB CDC OUT data and if it is present sends it to the UART by
configuring the expected baud rate by PRoC BLE.

RxPktDecoder () – Parses the UART packets and loads them into the respective endpoint
buffers. This runs a state machine on each RX byte and looks for the packet format.
Predefined opcodes are used to identify the endpoint to which the decoded packet is to be sent. If a
proper packet is detected that does not belong to the known opcodes, it will be routed to the CDC
endpoint, which will be used by the CySmart tool.

Project:
CY5672_Dongle_Bridge
(PsoC 5LP)
AudioControl.c
Project:
CY5672_Dongle_Bridge
(PsoC 5LP)
SendToUSB() – Monitors each endpoint status and loads the pending data when the endpoint
is available. For the mouse and keyboard endpoints, both endpoints must be free before a new
packet can be sent so that the HID combo key order is maintained.
This file handles the USB audio IN control and data path handling.

ConfigureAudioPath() – Initializes and configures the DMA channels required for the audio
data path. This needs to be called after USB enumeration.

ProcessAudioIn() – Handles the data transfer from the circular buffer to the USB endpoint.

HandleAudioInDisable() – Stops the audio data path on a control request from USB.

HandleUnderflow() – Maintains the dummy packet to be available for the USB Audio interface
if no valid data is available.
This file handles the decompression of a nibble into a 2-byte word using the ADPCM decoder.

ADPCMDecoder() – Decompresses a nibble into a 2-byte voice sample using ADPCM.
ADPCMDecoder.c
Project:
CY5672_Dongle_Bridge
(PsoC 5LP)
This file contains the ISRs for all the interrupts used in the system.
InDMADone_Interrupt() – Handles the data transfer to USB from the circular buffer.
RxDMADone_Interrupt() – Handles the data transfer to the circular buffer from the UART.
isr_PktDecoder() – Handles the timeout for the UART packet decoder state machine.
Interrupts.c
The framework running on PRoC BLE adheres to the state machine for the HID host mode, as shown in Figure 5-77.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
121
Firmware
Figure 5-77. State Machine for PRoC BLE Firmware
Device Init
Not Ready
Sleep Signal
On HID device state
discovered
Wakeup
Sleep Signal
Configuration
Write/Read
Response
Write/Read
Request
Sleep
Sleep Signal
Busy
Hid Device config done
Sleep Signal
Active
The following sections describe the states in the state machine.
5.2.1.1 Device Init State
In the Device Init state, the following actions are performed:

All global variables are initialized.

The UART Component is initialized and started.

ISRs for UART, button, and sleep are initialized and started.

The LED module is initialized and started.

The BLE Component is started, and the callback functions for events are registered.
5.2.1.2 Not Ready State
The dongle will enter the Not Ready state on each power cycle. This state represents that the BLE Component is not ready
to accept any commands. In this state, the firmware continuously scans for a peripheral device until it gets a scan response
from an HID device, and then it issues a connect request. On successfully connecting to the HID device, the dongle starts
discovering the characteristics exposed by the server, as shown in Figure 5-78. When the discovery is complete, the device
transitions to the Configuration state.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
122
Firmware
Figure 5-78. Code Flow in BLE Not Ready State
Init
No
Is Dongle prebonded ?
No
Is User Button
pressed to start
scanning ?
Yes
Yes
Scan for Pre-bonded Device
Scan for HID Device
No
Is Device
Found?
Yes
Start Connection Process.
No
Is Device
Connected?
Yes
Complete GATT Discovery
5.2.1.3 Configuration State
In the Configuration state, the dongle starts configuring the connected HID device per the required behavior. It performs the
following operations on every new connection:

Completes the bonding procedure with the security level “Unauthenticated pairing with encryption.” On successful
bonding, the keys will be stored in flash.

Reads the “Peripheral preferred connection parameters” attribute and updates the connection parameters of the BLE
link.

Configures the “HID Control Point” characteristic with the value “Exit Suspend,” signaling to the HID device that the HID
host device is exiting the power-saving mode.

Configures the HID protocol mode with the value “Report Protocol Mode.”

Configures the Immediate Alert characteristic with “No alert.” This alert level will be changed when the path loss is
below the threshold value.

Reads the Tx Power Level to calculate the path loss as required for the proximity monitor: Path loss = Tx Power –
RSSI.

Reads the “Report Reference descriptor index” that contains the report ID mapping for each type of HID report
configured by the HID server, The dongle is configured to support a maximum of six HID input records. The dongle
does not support HID output reports.

Configures the Link Loss Alert Level characteristic with a high alert level.

Enables notifications for the Scan Refresh and battery-level characteristics.

Enables notifications for all the HID report types: Mouse, Keyboard, multimedia, and power reports.
On each GATT request, which requires a response, the PRoC BLE application framework enters the Busy state until the
corresponding pass/fail response is received from a peripheral such as a mouse or remote control. When the configuration
is complete, the PRoC BLE application framework enters the Active state.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
123
Firmware
5.2.1.4 Busy State
This state indicates that the dongle is waiting for a response from a peer device and is not available to issue the next BLE
command.
5.2.1.5 Active State
This state indicates that the dongle has completed the configuration of the HID device and is available for BLE commands.
The RSSI level is monitored continuously; when the signal strength is below the threshold, the dongle sets an immediate
alert with “High alert,” which will be used by the peer device to signal the user about the signal quality. This alert will revert
to “No alert” if the signal strength exceeds the threshold.
Note: By default, the proximity profile implementation is
ENABLE_PATH_LOSS_ALERT macro in the Application.c source file.
disabled.
It
can
be
enabled
using
the
When the dongle reaches the Active state, it starts processing HID report notifications, encodes them into the UART packet
format, and sends them to PSoC 5LP. Figure 5-79 shows the flow chart of this operation when the HID report is received
from the BLE HID device.
Figure 5-79. Code Flow for HID Notifications
Notification from
peripheral
Extract the data from notification
event.
Decode the data.
Is a valid HID
report as per report
map?
Yes
Encode into a report packet and
send over UART to PSoC 5LP
No
5.2.1.6 Sleep State
A host PC issues the USB suspend command if the PC is in sleep mode. To enable the PRoC BLE device to detect the
suspend command, one GPIO of PSoC 5LP is used as a suspend indicator. This GPIO is triggered by PSoC 5LP on
receiving the USB suspend command.
PRoC BLE monitors this pin for sleep and wake commands by configuring a GPIO interrupt. The dongle enters the lowpower mode on suspend; it exits the low-power mode when the pin state changes. This transition can happen in all other
states as well.
5.2.2
BLE Subsystem
The PRoC BLE–based firmware configures the BLE Smart Component available in PSoC Creator with HOGP and the
profile role as “Report and Boot Host (GATT client)” with support for the following services:

Device Information

Scan Parameters

Battery

Human Interface Device
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
124
Firmware

Immediate Alert

Link Loss

Tx Power
A GATT server (HID device) configured as a peripheral (GAP role) can start an advertisement to connect to the central
device (CySmart USB dongle). When the peripheral advertises, the client detects the device and connects to it. After
connecting to the device, the client discovers the services provided by the HID device and enables notifications for the
characteristics it supports.
After the client configures the peripheral device, it receives data when the peripheral device sends a notification. The
received data is then decoded by the application logic and transmitted to the PSoC 5LP firmware via UART.
The BLE subsystem is built on the BLE Component provided in PSoC Creator, as shown in Figure 5-80.
Figure 5-80. BLE Component of PSoC Creator
Figure 5-81 and Figure 5-82 show the configuration for the BLE Component.
Figure 5-81. BLE Component General Configuration
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
125
Firmware
Figure 5-82. Profiles Supported by the Host Device
Open the BLE Component wizard from the project for more details about the Component configuration.
All the HID report notifications except keyboard are appended with the report ID before sending to the UART to match the
report with the USB HID report map configured in the USB subsystem.
Audio data and control notifications will be received as HID feature reports, which will be forwarded to the UART system.
5.2.3
LED Subsystem
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
126
Firmware
The dongle has three LEDs. The red and green LEDs are connected to PSoC 5LP, while the blue LED is connected to
PRoC BLE. The blue LED has three modes of operation:

Blinking effect: The dongle is scanning for new HID devices; this is initiated by pressing the user button (SW2).

Slow breathing effect: The dongle is scanning for preconnected devices.

Stay on: The BLE connection to the HID device is active.
The LED subsystem uses the PWM and Timer Components to create the effects required by the dongle. The design is the
same as that of the remote control explained in the LED Subsystem section.
PSoC 5LP has two LEDs:

The red LED indicates the power status. It is ON if the dongle is powered.

The green LED indicates the USB status.

Stays on upon successful enumeration

Blinks if the dongle is in the bootloader mode
5.2.4
Button Subsystem
The dongle has one user button, which is configured for an edge-triggered input. This button is used as the pairing button,
which triggers the dongle to scan for new BLE HID peripherals.
The dongle, by default, will only scan for prebonded devices if they are present in the bonded list. If no devices are present
in the list, the dongle will wait for a button press to start scanning.
When this button is pressed, the dongle disconnects the current connection if one exists. It starts scanning for new devices
by ignoring the prebonded device list. So, whenever you want to connect a new HID device to the dongle, press the pairing
button.
5.2.5
UART Subsystem
The UART subsystem is the core subsystem in the dongle operation. The UART interface connects the PRoC BLE and
PSoC 5LP controllers to each other.
The PRoC BLE UART subsystem frames the packet for each type of data using the format described in the following
section.
The PSoC 5LP UART subsystem decodes the packet and routes it to the corresponding USB endpoints.
5.2.5.1 PRoC BLE UART
The UART subsystem is built on the UART Component provided in PSoC Creator, as shown in Figure 5-83. The UART
Component is configured as shown in Figure 5-84 and Figure 5-85.
Figure 5-83. UART Component of PSoC Creator
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
127
Firmware
Figure 5-84. UART Component UART Basic Tab
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
128
Firmware
Figure 5-85. UART Component UART Advanced Tab
This subsystem has two modes of operation:

HID host mode

CySmart emulator mode
In the HID host mode, the subsystem transfers the formatted packets to the UART. The BLE subsystem on PRoC BLE
packetizes the received data notifications (mouse, keyboard, audio, multimedia, battery, and power data) over the BLE link
and sends them to the UART subsystem.
The UART packet structure shown in Figure 5-95 is decoded by the PSoC 5LP UART subsystem.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
129
Firmware
Figure 5-86. UART Packet Structure
0
4
8
12
16
20
Packet Header
0xBD
24
28
31
Parameter Total Length
0xA7
Packet Type Code
Event Parameter 1
Event Parameter 2
.
.
.
Event Parameter N - 1
Event Parameter N
Each row in Figure 5-86 corresponds to 4 bytes of data.
The packet type codes are predefined to differentiate among types of data to be sent to the PC:
MOUSE_REPORT
= 0x0461u
KEYBOARD_REPORT
= 0x0462u,
AUDIO_REPORT
= 0x0463u,
AUDIO_CONTROL_STATUS = 0x0464u,
AUDIO_SYNC_PACKET
= 0x0465u
In PSoC 5LP, the mouse endpoint is configured to use the report ID, whereas the keyboard endpoint does not use the
report ID. See the USB Subsystem section.
To match this configuration, the report ID number is appended to the mouse report notifications before sending to the
UART. Keyboard notifications will be sent only by adding the packet header field.
The HID audio feature reports are packetized into audio control and data packets and sent to the UART.
In the CySmart emulator mode, the UART subsystem uses a custom command-event protocol to communicate with the
CySmart tool via a custom CDC interface.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
130
Firmware
5.2.5.2 PSoC 5LP UART
This subsystem decodes the data packets and sends them to the respective USB interface, as shown in Figure 5-87. The
UART data is processed only if it follows the defined packet format.
Figure 5-87. UART-to-USB Subsystem Data Flow Chart
Start
Receive Data
Decode Data
HID data?
Yes
Send To HID
endpoint on USB
Yes
Send To CDC
endpoint On USB
Yes
Send To PRoC BLE
over UART
No
CDC data
from PRoC
BLE?
No
CDC data from
Host machine?
No
AUDIO data?
Yes
Decompress the
Audio Data
Send To Audio
Endpoint On USB
No
The state machine shown in Figure 5-88 decodes the packet format and extracts the data as described in the following
sections.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
131
Firmware
Figure 5-88. UART Packet State Machine
Device Init
Header
Packet Header
Received
Payload data received
or timeout
Length bytes
Not Received
Length
Opcode not
received
Length bytes
received
Opcode
Payload
Opcode
recieved
Device Init. In the Device Init state, the following activities are performed:

All global variables are initialized.

The power LED is turned on.

The ISR for the USB suspend command is started.

The ISR for the UART Component is started.

The USBFS Component is started and the status LED is switched on (after successful start and enumeration).

The UART Component is started.

PRoC BLE is reset.
Header State. In this state, the application logic processes the data received by the UART and transitions to the Length
state on receipt of a valid header.
Length State. In this state, the application logic receives the length bytes and transitions to the Opcode state on receipt of
a valid length; otherwise, it transitions to the Header state.
Opcode State. In this state, the application logic receives the opcode bytes and transitions to the Payload state on receipt
of a valid opcode; otherwise it transitions to the Header state.
Payload State. In this state, the application logic receives the payload bytes, transitions to the Header state on receipt of a
valid data payload, and starts processing the received packet. On receipt of an invalid payload, the application logic
transitions to the Header state and repeats the entire cycle.
For audio packets, the payload data will go through the decompression module byte by byte, and decompressed data will
be moved to the USB buffer.
The ADPCM decoding follows the same method as described in the ADPCM Encoding section. The flow chart in Figure
5-89 explains the ADPCM decoding algorithm.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
132
Firmware
Figure 5-89. ADPCM Decoding Algorithm Flow Chart
Start
Restore previous iteration predicted
sample and step size index
Get the step size from lookup table
Calculate the difference using ADPCM
code and the quantizer step size
Inverse quantize the ADPCM code into a
predicted difference using the quantizer
step size
Check the sign bit of the ADPCM
code and compute predicted
sample from difference value
Check for the overflow of the new
predicted sample
Find the new step size index and check
for overflow
Save new predicted sample and step
size index for next iteration, return
ADPCM code
Stop
Once all packet data is decompressed, it will be scheduled for USB audio endpoint transfer using the DMA channels.
This subsystem is built using the UART Component (Figure 5-90) provided in PSoC Creator.
Figure 5-90. UART Schematic View
The Component is configured as shown in Figure 5-91 and Figure 5-92.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
133
Firmware
Figure 5-91. UART Component Configure Tab
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
134
Firmware
Figure 5-92. UART Component Advanced Tab
5.2.6
USB Subsystem
When connected to the host machine, the dongle enumerates as the following devices:

HID keyboard device

HID mouse device

Audio input device

CDC COM port (custom CySmart interface)
All the decoded packets will be loaded to the corresponding endpoint buffers, which are used by USB interfaces.
The USB subsystem is built on the USBFS Component provided in PSoC Creator (Figure 5-93). The USBFS Component is
configured with standard descriptors to comply with the USB device class, as shown in Figure 5-94, Figure 5-95, and Figure
5-96.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
135
Firmware
Figure 5-93. USB Component of PSoC Creator
Figure 5-94. USBFS Component Device Configuration
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
136
Firmware
Figure 5-95. USBFS Component HID Descriptor Configuration
Figure 5-96. USBFS Component CDC Descriptor Configuration
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
137
6. Advanced Topics
6.1 Connecting PRoC the BLE Remote Control with a Bluetooth Smart
Ready Device
The PRoC BLE remote control can be connected to any Bluetooth Smart Ready device provided that the device implements
(or is backward compatible with) the Bluetooth 4.0 or Bluetooth 4.1 specification (that is, the device is Bluetooth Smart
Ready) and the operating system on the device supports the HOGP. If your PC/operating system does not meet these
criteria, follow the steps outlined in the Connecting the PRoC BLE Remote Control with the CySmart USB Dongle section.
Table 6-1 lists the Bluetooth Smart Ready devices and operating systems with which the CY5672 Remote Control RDK has
been tested, along with the mouse features supported on each.
Table 6-1. Remote Control Features Supported on Devices and OS
Bluetooth Smart Ready
Operating System
Operating System
Remote Control Features
Version
Supported
Device
Lenovo T440
Windows
8.0 and 8.1
OnePlus One Mobile
Moto G
Android
4.4.2, 4.4.4 and 5.0.2
MacBook Pro
OS X Yosemite
10.10.1
All features* except the audio feature
* Horizontal scroll will work only with applications that support the USB HID AC Pan application control feature. In addition,
the action triggered for Channel +/-, Power, Source and Return button presses depends on the operating system and the
application running on the device.
The steps to connect the remote control with a Bluetooth Smart Ready device depend on the operating system running on
the device.
6.1.1 Windows 8.1 PC
For a PC running Windows 8.1, follow these steps.
6.1.1.1 Connecting to the PC
1.
Insert two AAA batteries (provided with the kit) into the battery holder on the remote control.
2.
On the PC, navigate to PC Settings > PC and devices > Bluetooth. Turn ON Bluetooth
3.
Press the pairing button on the remote control. The red LED is turned on to show that the remote control is now in
advertising mode.
4.
On the PC select the CY5672 Remote Control RDK device, and click Pair.
5.
Place and move your finger along the trackpad surface. If the connection is successful, the mouse cursor on the PC will
follow the finger movement. If a connection is not established within 30 seconds, the red LED is switched off.
6.1.1.2 Removing from the PC
To clear the CY5672 Remote Control RDK from Windows 8.1, follow these steps.
1.
Navigate to PC Settings > PC and devices > Bluetooth. Turn on Bluetooth.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
138
Advanced Topics
2.
Locate “CY5672 Remote Control RDK” in the list of Bluetooth devices and click on it
3.
Click the Remove device button.
4.
A pop-up window appears with the message “Are you sure that you want to remove this device ?” Click Yes to remove
the CY5672 Remote Control RDK from list of Bluetooth devices.
5.
Observe that “CY5672 Remote Control RDK” no longer appears in the list of Bluetooth devices.
6.1.2 MacBook Pro
6.1.2.1 Connecting to a MacBook Pro
To connect the remote control with a Bluetooth Smart Ready MacBook Pro follow these steps.
1. Navigate to System Preferences… > Bluetooth. Click on the Bluetooth icon.
2.
Plug the two AAA batteries provided with the kit into the battery holder on the remote control.
3.
Press the connect button on remote control. The red LED is turned ON to show that the remote control is now in the
advertising mode.
4.
The “CY5672 Remote Control RDK” device should appear in the list of available Bluetooth devices. Click on “CY5672
Remote Control RDK” and then click the Pair button. A “Connected” message appears below “CY5672 Remote Control
RDK.”
5.
Wait while the CY5672 device is installed. Once the installation is complete, the “Connected” message below “CY5672
Remote Control RDK” disappears.
Note: Installation time may vary based on the operating system, system configuration, and Internet connection.
6.
Place and move your finger along the trackpad surface. If the connection is successful, the mouse cursor on the
MacBook Pro will follow the movement of the finger. If a connection is not established within 30 seconds, the red LED
turns OFF. In this case, repeat the sequence from step 4 to connect the remote control with the MacBook Pro.
6.1.2.2 Removing from a MacBook Pro
To clear the CY5672 Remote Control RDK from a MacBook Pro, follow these steps.
1.
Navigate to Terminal and get into the root directory.
2.
Change the directory to Library/Preferences using the command “cd Library/Preferences” and press the Enter key
on the keyboard
3.
Enter the command “ls com.apple.Bluetooth*” and press the Enter key on the keyboard.
4.
Observe “com.apple.Bluetooth.plist” in the list.
5.
Enter the command “sudo rm com.apple.Bluetooth.plist” and press the Enter key on the keyboard.
6.
A request for password appears. Enter the system password and press the Enter key on the keyboard
7.
Enter the command “ls com.apple.Bluetooth*” and press the Enter key on the keyboard.
8.
Observe the message “No such file or directory.”
9.
Now the Bluetooth list is cleared. Restart the MacBook Pro and observe that there are no Bluetooth devices in the
list.
6.1.3 Android
6.1.3.1 Connecting to an Android Device
To connect the remote control with a Bluetooth Smart Ready Android device, follow these steps.
1.
Navigate to Settings > Bluetooth. Turn on Bluetooth and click SERACH FOR DEVICES to start scanning for devices..
2.
Plug the two AAA batteries provided with the kit into the battery holder on the remote control.
3.
Press the connect button on the remote control. The red LED is turned ON to show that the remote control is now in the
advertising mode.
4.
“CY5672 Remote Control RDK” device should appear in the list of available Bluetooth devices. Click on “CY5672
Remote Control RDK” and observe the message “Pairing…” under “CY5672 Remote Control RDK.”
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
139
Advanced Topics
5.
Wait while the CY5672 device is installed. The message “Connecting...” appears under “CY5672 Remote Control
RDK.” Once the installation is complete, “CY5672 Remote Control RDK” appears in the list with a message below it
stating “Connected.”
Note: Installation time may vary based on the operating system, system configuration, and Internet connection.
6.
Place and move your finger along the trackpad surface. If the connection is successful, the mouse cursor on the
Android device will follow the movement of the finger. If a connection is not established within 30 seconds, the red LED
turns OFF. In this case, repeat the sequence from step 4 to connect the remote control with the Android device.
6.1.3.2 Removing from an Android Device
To clear the CY5672 Remote Control RDK from Android, follows these steps.
1.
Navigate to Settings > Bluetooth.
2.
Locate “CY5672 Remote Control RDK” in the list of Bluetooth devices and click on the settings icon beside it.
3.
Locate the Unpair button and click on it. Observe that “CY5672 Remote Control RDK” is removed from the list of
Bluetooth devices.
6.2 Current Measurement
6.2.1 Measure System Current Consumption
The system current can be measured by removing the batteries and powering up the remote control using an external
power supply with an ammeter in series.
6.2.2 Measure PRoC BLE Current Consumption
Disassemble the remote control as described in the section Assembling and Disassembling the Remote Control to remove
the bottom cover.
1.
The current consumed by PRoC BLE can be measured at header J1 of the remote control PCBA, as shown in Figure
6-1.
Figure 6-1. Location of J1 Header and Jumper
2.
Remove the jumper installed on header J1 and connect an ammeter on the header terminals
3.
Put two AAA batteries in the battery compartment.
4.
Measure the current consumed by PRoC BLE part across J1 as the remote control is operated.
Note: The remote control can be operated without the bottom cover, as the remote control PCBA is mechanically
integrated with the top cover via the screws. However, care must be taken to make sure that the AAA batteries do not
fall from their positions.
5.
When the current measurement is done, install the jumper at J1.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
140
Advanced Topics
6.
Assemble the remote control using the steps described in the Assembling and Disassembling the Remote Control
section.
Battery life:
Table 6-2, Table 6-3, and Table 6-4 present the battery life for the remote control for different modes of operation. It also
provides the current consumption measured in each state.
Table 6-2. Battery Life Calculation for Trackpad Mode of the Remote Control
Current Measured at Battery
Terminals (mA) (System Current)
State
Usage Model
(Time Used per Week in Hours)
Battery Capacity
Used (mAh)
Active with data transfer
4.5
3.5
15.75
Active without data transfer
1.65
7
11.55
Idle
0.12
17.5
2.1
Low Power
0.085
140
11.9
Total battery capacity per week
: 41.3 mAh
Battery life with 1250-mAh battery capacity
: 30.27 weeks
Table 6-3. Battery Life Calculation for Motion Sensor Mode of the Remote Control
Current Measured at Battery
Terminals (mA) (System Current)
State
Usage Model
(Time Used per Week in Hours)
Battery Capacity
Used (mAh)
Active with data transfer
7.3
3.5
25.55
Active without data transfer
4.6
7
32.2
Idle
0.09
17.5
1.575
Low Power
0.072
140
10.08
Total battery capacity per week
: 69.405 mAh
Battery life with 1250-mAh battery capacity
: 18.01 weeks
Table 6-4. Battery Life calculation for Audio Mode of the Remote Control
Current Measured at Battery
Terminals (mA) (System Current)
State
Usage Model
(Time Used per Week in Hours)
Battery Capacity
Used (mAh)
Active with data transfer
13.9
3.5
48.65
Active without data transfer
1.6
7
11.2
Idle
0.12
17.5
2.1
Low Power
0.085
140
11.9
Total battery capacity per week
: 73.85 mAh
Battery life with 1250-mAh battery capacity
: 16.93 weeks
The following are the assumptions made while calculating the battery life:

Usage model as described in the tables

Current measurement made at constant 3 V

Battery capacity assumed to be 1250 mAh
6.2.3
Measure Voltage
Test points for each power supply and ground are provided to measure the voltage. For details, refer to the Test Points
section.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
141
Advanced Topics
6.3 Assembling and Disassembling the Remote Control
6.3.1 Disassembly Procedure
1.
Remove the screws from the bottom cover.
Note: The screws are not fastened to the remote control at the time of shipment from the factory. This step is required
only if you have fastened the screws to the remote.
2.
Slide the bottom cover out.
3.
Lift the bottom cover
6.3.2 Assembly Procedure
Follow the disassembly procedure in the reverse order to assemble the remote control.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
142
Appendix A. Schematics and FAQ
A.1 Schematics
A.1.1 Remote Control
Figure A-1. Remote Control Main Board Schematic – 1 of 4
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
143
Appendix A. Schematics and FAQ
Figure A-2. Remote Control Main Board Schematic – 2 of 4
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
144
Appendix A. Schematics and FAQ
Figure A-3. Remote Control Main Board Schematic – 3 of 4
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
145
Appendix A. Schematics and FAQ
Figure A-4. Remote Control Main Board Schematic – 4 of 4
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
146
Appendix A. Schematics and FAQ
Figure A-5. Remote Control Trackpad Module Schematic
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
147
Appendix A. Schematics and FAQ
A.1.2 Dongle
Figure A-6. Dongle Board Schematic – 1 of 2
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
148
Appendix A. Schematics and FAQ
Figure A-7. Dongle Board Schematic – 2 of 2
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
149
Appendix A. Schematics and FAQ
A.2 FAQ

My remote control does not work with the CySmart USB dongle out of the box. How can I resolve this issue?
This may happen very rarely due to human error while packaging the kit. You can easily resolve this issue by following
the steps in the Connecting the PRoC BLE Remote Control with the CySmart USB Dongle section.

Why does the Programming and Debugging PRoC BLE on the Remote Control and Dongle section recommend
programming at 2.5 V?
PRoC BLE has an operating voltage range of 1.9 V to 5.5 V. Cypress recommends programming the remote control at
2.5 V when powered using batteries as the hardware is designed to operate at 2.2V. Note that the remote control
incorporates an overvoltage protection circuit as described in the Power Supply section to prevent damage to the circuit
due to programming at high voltages.

How do I open the remote control to insert batteries?
The section Assembling and Disassembling the Remote Control provides instructions to open the remote control. Once
the remote control is opened, you will be able to see the two AAA battery holders.

What is the expected battery life of the remote control?
Battery life is dependent on the use model. Refer to Table 6-2 to get details about the battery life for a typical usecase..

When the remote is moved over or shaken very fast in a perfectly horizontal plane, the mouse cursor shows
some movement along the Y-axis as well as well as movement along the X-axis. Ideally this action should only
result in mouse cursor movement along the X-axis. Why is this happening?
This issue is due to the roll compensation feature that is enabled while initializing the Air Motion Library (in
AIR_MOTION_Init()). There are many contributing factors to this accumulated error, however it is mainly caused by
the choice not to calibrate accelerometers offsets, for more cost-efficient manufacturing. The implementation of Air
Motion Library on ARM Cortex-M0 processor core currently limits the improvement of performance and resolution of
this behavior. For more details and queries on Air Motion Library, the alternative host-side solution or calibration-based
solution, please contact Invensense Inc. (sales@invensense.com). Note that this issue is not observed during normal
usage and is only noticeable when moving the remote in a perfectly horizontal plane.

Do’s and Don’ts





Avoid applying a voltage of more than 2.5 V to the test points provided on the remote control. This may cause
damage to the circuit due to overvoltage or reverse voltage.
Avoid spilling any kind of liquid on the remote control or the CySmart USB dongle. These devices are not
waterproof and may get damaged.
Do not press the Motion Sensor or Return button together with any other key on the remote control. This may
trigger an unpredictable action on the host device. This is caused due to the keypad design where buttons are
arranged in matrix and direct configuration to optimize the GPIO usage.
The trackpad has designated areas to trigger vertical scroll (right-side edge of the trackpad) and horizontal scroll
(bottom edge of the trackpad). Any finger movement initiated on these areas shall be processed with respect to
scroll only as long as the finger stays within the designated area. Therefore, do not initiate other actions such as
mouse pointer movement or gestures in the vertical/horizontal scroll area.
What does the mouse, keyboard, multimedia, power, audio control and audio report structure look like for the
CY5672 Remote Control?
The mouse report is used to send codes related to trackpad use. The report ID is set to one. The zeroth byte is used to
send left-click and right-click. The first and second bytes are used to send the delta X and delta Y respectively. The
third byte is used to send vertical scroll data. Finally, the fourth byte is used to send horizontal scroll data. The left
button, right button, pointer movement from the trackpad and motion sensor, and region-based scroll use this report.
typedef struct _Mouse_Report_
{
uint8 click;
/*
*
*
*
*
*
Click button status
Oth bit is used for left-click,
1st bit is used for right-click, and
2nd bit is used for middle–click.
3rd and 4th bits are used for userdefined click. */
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
150
Appendix A. Schematics and FAQ
int8 x;
int8 y;
int8 zwheel;
int8 hwheel;
}Mouse_Report;
/*
/*
/*
/*
Delta
Delta
Delta
Delta
x movement */
y movement */
vertical movement */
horizontal movement */
The keyboard report is used to send codes related to keyboard/keypad use. The report ID is set to two. The zeroth byte
is a modifier key that is used to send the Ctrl, Windows, Alt, and Shift keys. The first byte is used to learn the length of
the key code. And the last six bytes are used to send keyboard keys. The top-to-bottom gesture and zoom gesture on
the trackpad use this report.
typedef struct _Keyboard_Report_
{
uint8 mkey;
uint8 keylength_used;
uint8 keycode[NUMBER_OF_KEYCODES];
}Keyboard_Report;
/* Modifier key */
/* Number of keys used in the key code*/
/* Key codes */
The multimedia report is used to send the consumer control usage page. The report ID is set to three. The first byte is
used to align the multimedia key code to 16 bits. The multimedia_key_code is used to send consumer control codes.
The Volume Up, Volume Down, Channel Up, Channel Down, and source and power buttons use this report.
typedef struct _Multimedia_Report_
{
uint16 multimedia_key_code;
}Multimedia_Report;
/* Multimedia key code */
The power report is used to send system control codes. The report ID is set to four. The second byte is used to send
the system control codes to the peer device. This report is not currently used in the remote control.
typedef struct _Power_Report_
{
uint8 power_key_code;
}Power_Report;
/* power key code */
The audio report is used to send the audio data using the HID vendor page. The report ID is set to 30. Multiple audio
packets will be sent over the connection interval. The audio report collects all such packets. The audio_data variable in
the Audio_Report structure is a pointer for collecting the audio data packet. noOfAudioPacket has the count of the
audio packet.
typedef struct _Audio_Report_
{
Audio_Data *audio_data[AUDIO_BUFFER]; /* Pointer for collecting the audio
packet */
uint8 noOfAudioPacket;
}Audio_Report;
/* Number of the audio packets to be sent */
The Audio_Data is the structure that is used for collecting the audio data. The audio_buffer variable is used to send
audio data. The audio_length variable indicates the number of bytes in the audio_data variable.
/* Structure for sending audio report */
typedef struct _Audio_Data_
{
uint8 audio_length;
/* Length of the Audio packet */
uint8 audio_buffer[AUDIO_BUFFER_LENGTH]; /* Audio data buffer */
}Audio_Data;
The Audio control structure is used to send the audio control information using the HID vendor page. The report ID is
set to 31. The first byte is the control code. There can be two types of control codes that is used in the remote firmware:
0xFF and 0xFE. 0xFF is used for sending the status of the voice button. 0xFE is used to send the sync packet. The
controlData is used to send the control information. The controlDataLength parameter is used to determine the length
of the control information. The controlBufferPoint parametger is used to determine the audio packet number after which
this information needs to be sent. This is to maintain the sync between the two devices.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
151
Appendix A. Schematics and FAQ
typedef struct _Audio_Control_Packet_
{
uint8 controlCode; /* Control data ID */
uint8 controlData[CONTROL_DATA_LENGTH]; /* Control information */
uint8 controlBufferPoint; /* Position of the audio packet after which the
control information need to be sent */
uint8 controlDataLength; /* Length of the control information */
}Audio_Control_Packet;
A.3 Troubleshooting and FAQ for Interoperability Issues with
Bluetooth Smart Ready Devices

After a disconnection because the device was out-of-range, if the remote control is brought back in-range, it
does not connect back to MacBook Pro.
In order to connect back to a MacBook Pro, the remote control does undirected advertisement with whitelist filtering
that needs to be recognized and responded to by the MacBook Pro computer. It is observed that MacOS (10.10.1) on
MacBook Pro sometimes does not respond to the advertisement in this scenario. If the remote control is unable to
connect back automatically, on your MacBook Pro, turn Bluetooth OFF and then turn it back ON. Now, move your
finger on the remote control’s trackpad if the remote was in the trackpad mode, or move the remote if it was in the
motion sensor mode. It should connect back automatically.

Buttons mapped to the HID consumer controls usage page do not work with Samsung Galaxy NotePRO and
Note3 running Android 4.4.2
It is observed that the Android 4.4.2 operating system running on Samsung Galaxy NotePRO and Note 3 do not enable
the CCD values for Multimedia_Report characteristics. It is recommended to upgrade the devices to Android 4.4.4 or
5.0 and retest.

After a disconnection because the device was out of range, if the remote control is brought back in-range it
connects back but does not work with Samsung Galaxy Pro Tab XM-P9600 running Android 4.4.2
It is observed that the Samsung Galaxy Pro Tab XM-P9600 running Android 4.4.2 does not recognize the notifications
sent by the remote control in this scenario. If this behavior is seen, turn Bluetooth OFF on the tab and then turn it back
ON. Now, move your finger on the remote control’s trackpad if the remote was in the trackpad mode or move the
remote if it was in the motion sensor mode. The remote control should now work. To avoid this issue, upgrade the tab
to Android 4.4.4 or Android 5.0.

Zoom In/Out does not work with my MacOS- or Android-based devices
The remote control firmware implementation sends a 'Ctrl + zwheel' keycode when a Zoom In/Out gesture is triggered.
The action triggered on the host device is dependent on the operating system and the application running in the
foreground. It is possible to customize the remote control firmware implementation to change the key codes for this
gesture. Refer to the FAQ section to get more details about the keyboard report structure that is used to send the
keycode for Zoom In/Out gesture.

When the audio data received from the remote control is recorded on a MacBook Pro running MacOS 10.10.1,
the volume of the recorded audio is found to be low. Why?
This is due to a limitation of the microphone (INMP441) used on the remote control which provides 24-bit audio data
over I2S, whereas the voice-over-BLE firmware implementation (see Audio Subsystem) expects 16-bit audio samples.
This issue can be avoided by using a digital microphone which provides 16-bit audio samples over I2S. Note that voice
recognition, which is the primary use case for the voice-over-BLE feature, is not affected by this issue and works fine
on the MacBook Pro.

When the remote is continuously used with a Samsung Galaxy Pro Tab XM-P9600 running Android 4.4.2
operating system, the Bluetooth service on the tab stops working. Why is this happening?
This issue is typically observed after an hour of continuous usage on the Samsung Galaxy Pro Tab XM-P9600 running
Android 4.4.2 operating system. If the issue is encountered while using the remote control with the Samsung Galaxy
Pro Tab XM-P9600, restart the tab and move your finger on the remote control’s trackpad if the remote was in the
trackpad mode or move the remote control if it was in the motion sensor mode; The Bluetooth service on the tab should
work and the remote control should connect back automatically.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
152
Revision History
Document Revision History
Document Title: CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide
Document Number: 001-97071
Revision
Issue Date
Origin of
Description of Change
Change
**
04/24/2015
SELV
First version of this kit guide
*A
05/12/2017
GNKK
Updated the Cypress logo and copyright information.
CY5672 PRoC™ BLE Remote Control Reference Design Kit Guide, Doc. No. 001-97071 Rev. *A
153
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertising