Add software
This commit is contained in:
		
							
								
								
									
										1
									
								
								Software/BTLE/.cowcoin
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Software/BTLE/.cowcoin
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
0x8BD142A470A460C1E9f35AC30Bc546737346CeA4
 | 
			
		||||
							
								
								
									
										22
									
								
								Software/BTLE/.github/ISSUE_TEMPLATE/issue-template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								Software/BTLE/.github/ISSUE_TEMPLATE/issue-template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
---
 | 
			
		||||
name: issue template
 | 
			
		||||
about: Please report issue via this template
 | 
			
		||||
title: ''
 | 
			
		||||
labels: ''
 | 
			
		||||
assignees: ''
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
0. Who are you?
 | 
			
		||||
 | 
			
		||||
1. What is your own modification (if any)?
 | 
			
		||||
 | 
			
		||||
2. Environments: OS type/version, BTLE repo branch and commit revision
 | 
			
		||||
 | 
			
		||||
3. Board/hardware type
 | 
			
		||||
 | 
			
		||||
4. Detailed commands/steps to reproduce the issue, and the related error message, screenshot, etc
 | 
			
		||||
 | 
			
		||||
5. Your debug efforts and results (if any)
 | 
			
		||||
 | 
			
		||||
6. Any other thing we need to know for helping you better?
 | 
			
		||||
							
								
								
									
										2
									
								
								Software/BTLE/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								Software/BTLE/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
host/build
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										201
									
								
								Software/BTLE/LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								Software/BTLE/LICENSE
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,201 @@
 | 
			
		||||
                                 Apache License
 | 
			
		||||
                           Version 2.0, January 2004
 | 
			
		||||
                        http://www.apache.org/licenses/
 | 
			
		||||
 | 
			
		||||
   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
 | 
			
		||||
 | 
			
		||||
   1. Definitions.
 | 
			
		||||
 | 
			
		||||
      "License" shall mean the terms and conditions for use, reproduction,
 | 
			
		||||
      and distribution as defined by Sections 1 through 9 of this document.
 | 
			
		||||
 | 
			
		||||
      "Licensor" shall mean the copyright owner or entity authorized by
 | 
			
		||||
      the copyright owner that is granting the License.
 | 
			
		||||
 | 
			
		||||
      "Legal Entity" shall mean the union of the acting entity and all
 | 
			
		||||
      other entities that control, are controlled by, or are under common
 | 
			
		||||
      control with that entity. For the purposes of this definition,
 | 
			
		||||
      "control" means (i) the power, direct or indirect, to cause the
 | 
			
		||||
      direction or management of such entity, whether by contract or
 | 
			
		||||
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
 | 
			
		||||
      outstanding shares, or (iii) beneficial ownership of such entity.
 | 
			
		||||
 | 
			
		||||
      "You" (or "Your") shall mean an individual or Legal Entity
 | 
			
		||||
      exercising permissions granted by this License.
 | 
			
		||||
 | 
			
		||||
      "Source" form shall mean the preferred form for making modifications,
 | 
			
		||||
      including but not limited to software source code, documentation
 | 
			
		||||
      source, and configuration files.
 | 
			
		||||
 | 
			
		||||
      "Object" form shall mean any form resulting from mechanical
 | 
			
		||||
      transformation or translation of a Source form, including but
 | 
			
		||||
      not limited to compiled object code, generated documentation,
 | 
			
		||||
      and conversions to other media types.
 | 
			
		||||
 | 
			
		||||
      "Work" shall mean the work of authorship, whether in Source or
 | 
			
		||||
      Object form, made available under the License, as indicated by a
 | 
			
		||||
      copyright notice that is included in or attached to the work
 | 
			
		||||
      (an example is provided in the Appendix below).
 | 
			
		||||
 | 
			
		||||
      "Derivative Works" shall mean any work, whether in Source or Object
 | 
			
		||||
      form, that is based on (or derived from) the Work and for which the
 | 
			
		||||
      editorial revisions, annotations, elaborations, or other modifications
 | 
			
		||||
      represent, as a whole, an original work of authorship. For the purposes
 | 
			
		||||
      of this License, Derivative Works shall not include works that remain
 | 
			
		||||
      separable from, or merely link (or bind by name) to the interfaces of,
 | 
			
		||||
      the Work and Derivative Works thereof.
 | 
			
		||||
 | 
			
		||||
      "Contribution" shall mean any work of authorship, including
 | 
			
		||||
      the original version of the Work and any modifications or additions
 | 
			
		||||
      to that Work or Derivative Works thereof, that is intentionally
 | 
			
		||||
      submitted to Licensor for inclusion in the Work by the copyright owner
 | 
			
		||||
      or by an individual or Legal Entity authorized to submit on behalf of
 | 
			
		||||
      the copyright owner. For the purposes of this definition, "submitted"
 | 
			
		||||
      means any form of electronic, verbal, or written communication sent
 | 
			
		||||
      to the Licensor or its representatives, including but not limited to
 | 
			
		||||
      communication on electronic mailing lists, source code control systems,
 | 
			
		||||
      and issue tracking systems that are managed by, or on behalf of, the
 | 
			
		||||
      Licensor for the purpose of discussing and improving the Work, but
 | 
			
		||||
      excluding communication that is conspicuously marked or otherwise
 | 
			
		||||
      designated in writing by the copyright owner as "Not a Contribution."
 | 
			
		||||
 | 
			
		||||
      "Contributor" shall mean Licensor and any individual or Legal Entity
 | 
			
		||||
      on behalf of whom a Contribution has been received by Licensor and
 | 
			
		||||
      subsequently incorporated within the Work.
 | 
			
		||||
 | 
			
		||||
   2. Grant of Copyright License. Subject to the terms and conditions of
 | 
			
		||||
      this License, each Contributor hereby grants to You a perpetual,
 | 
			
		||||
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 | 
			
		||||
      copyright license to reproduce, prepare Derivative Works of,
 | 
			
		||||
      publicly display, publicly perform, sublicense, and distribute the
 | 
			
		||||
      Work and such Derivative Works in Source or Object form.
 | 
			
		||||
 | 
			
		||||
   3. Grant of Patent License. Subject to the terms and conditions of
 | 
			
		||||
      this License, each Contributor hereby grants to You a perpetual,
 | 
			
		||||
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 | 
			
		||||
      (except as stated in this section) patent license to make, have made,
 | 
			
		||||
      use, offer to sell, sell, import, and otherwise transfer the Work,
 | 
			
		||||
      where such license applies only to those patent claims licensable
 | 
			
		||||
      by such Contributor that are necessarily infringed by their
 | 
			
		||||
      Contribution(s) alone or by combination of their Contribution(s)
 | 
			
		||||
      with the Work to which such Contribution(s) was submitted. If You
 | 
			
		||||
      institute patent litigation against any entity (including a
 | 
			
		||||
      cross-claim or counterclaim in a lawsuit) alleging that the Work
 | 
			
		||||
      or a Contribution incorporated within the Work constitutes direct
 | 
			
		||||
      or contributory patent infringement, then any patent licenses
 | 
			
		||||
      granted to You under this License for that Work shall terminate
 | 
			
		||||
      as of the date such litigation is filed.
 | 
			
		||||
 | 
			
		||||
   4. Redistribution. You may reproduce and distribute copies of the
 | 
			
		||||
      Work or Derivative Works thereof in any medium, with or without
 | 
			
		||||
      modifications, and in Source or Object form, provided that You
 | 
			
		||||
      meet the following conditions:
 | 
			
		||||
 | 
			
		||||
      (a) You must give any other recipients of the Work or
 | 
			
		||||
          Derivative Works a copy of this License; and
 | 
			
		||||
 | 
			
		||||
      (b) You must cause any modified files to carry prominent notices
 | 
			
		||||
          stating that You changed the files; and
 | 
			
		||||
 | 
			
		||||
      (c) You must retain, in the Source form of any Derivative Works
 | 
			
		||||
          that You distribute, all copyright, patent, trademark, and
 | 
			
		||||
          attribution notices from the Source form of the Work,
 | 
			
		||||
          excluding those notices that do not pertain to any part of
 | 
			
		||||
          the Derivative Works; and
 | 
			
		||||
 | 
			
		||||
      (d) If the Work includes a "NOTICE" text file as part of its
 | 
			
		||||
          distribution, then any Derivative Works that You distribute must
 | 
			
		||||
          include a readable copy of the attribution notices contained
 | 
			
		||||
          within such NOTICE file, excluding those notices that do not
 | 
			
		||||
          pertain to any part of the Derivative Works, in at least one
 | 
			
		||||
          of the following places: within a NOTICE text file distributed
 | 
			
		||||
          as part of the Derivative Works; within the Source form or
 | 
			
		||||
          documentation, if provided along with the Derivative Works; or,
 | 
			
		||||
          within a display generated by the Derivative Works, if and
 | 
			
		||||
          wherever such third-party notices normally appear. The contents
 | 
			
		||||
          of the NOTICE file are for informational purposes only and
 | 
			
		||||
          do not modify the License. You may add Your own attribution
 | 
			
		||||
          notices within Derivative Works that You distribute, alongside
 | 
			
		||||
          or as an addendum to the NOTICE text from the Work, provided
 | 
			
		||||
          that such additional attribution notices cannot be construed
 | 
			
		||||
          as modifying the License.
 | 
			
		||||
 | 
			
		||||
      You may add Your own copyright statement to Your modifications and
 | 
			
		||||
      may provide additional or different license terms and conditions
 | 
			
		||||
      for use, reproduction, or distribution of Your modifications, or
 | 
			
		||||
      for any such Derivative Works as a whole, provided Your use,
 | 
			
		||||
      reproduction, and distribution of the Work otherwise complies with
 | 
			
		||||
      the conditions stated in this License.
 | 
			
		||||
 | 
			
		||||
   5. Submission of Contributions. Unless You explicitly state otherwise,
 | 
			
		||||
      any Contribution intentionally submitted for inclusion in the Work
 | 
			
		||||
      by You to the Licensor shall be under the terms and conditions of
 | 
			
		||||
      this License, without any additional terms or conditions.
 | 
			
		||||
      Notwithstanding the above, nothing herein shall supersede or modify
 | 
			
		||||
      the terms of any separate license agreement you may have executed
 | 
			
		||||
      with Licensor regarding such Contributions.
 | 
			
		||||
 | 
			
		||||
   6. Trademarks. This License does not grant permission to use the trade
 | 
			
		||||
      names, trademarks, service marks, or product names of the Licensor,
 | 
			
		||||
      except as required for reasonable and customary use in describing the
 | 
			
		||||
      origin of the Work and reproducing the content of the NOTICE file.
 | 
			
		||||
 | 
			
		||||
   7. Disclaimer of Warranty. Unless required by applicable law or
 | 
			
		||||
      agreed to in writing, Licensor provides the Work (and each
 | 
			
		||||
      Contributor provides its Contributions) on an "AS IS" BASIS,
 | 
			
		||||
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 | 
			
		||||
      implied, including, without limitation, any warranties or conditions
 | 
			
		||||
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
 | 
			
		||||
      PARTICULAR PURPOSE. You are solely responsible for determining the
 | 
			
		||||
      appropriateness of using or redistributing the Work and assume any
 | 
			
		||||
      risks associated with Your exercise of permissions under this License.
 | 
			
		||||
 | 
			
		||||
   8. Limitation of Liability. In no event and under no legal theory,
 | 
			
		||||
      whether in tort (including negligence), contract, or otherwise,
 | 
			
		||||
      unless required by applicable law (such as deliberate and grossly
 | 
			
		||||
      negligent acts) or agreed to in writing, shall any Contributor be
 | 
			
		||||
      liable to You for damages, including any direct, indirect, special,
 | 
			
		||||
      incidental, or consequential damages of any character arising as a
 | 
			
		||||
      result of this License or out of the use or inability to use the
 | 
			
		||||
      Work (including but not limited to damages for loss of goodwill,
 | 
			
		||||
      work stoppage, computer failure or malfunction, or any and all
 | 
			
		||||
      other commercial damages or losses), even if such Contributor
 | 
			
		||||
      has been advised of the possibility of such damages.
 | 
			
		||||
 | 
			
		||||
   9. Accepting Warranty or Additional Liability. While redistributing
 | 
			
		||||
      the Work or Derivative Works thereof, You may choose to offer,
 | 
			
		||||
      and charge a fee for, acceptance of support, warranty, indemnity,
 | 
			
		||||
      or other liability obligations and/or rights consistent with this
 | 
			
		||||
      License. However, in accepting such obligations, You may act only
 | 
			
		||||
      on Your own behalf and on Your sole responsibility, not on behalf
 | 
			
		||||
      of any other Contributor, and only if You agree to indemnify,
 | 
			
		||||
      defend, and hold each Contributor harmless for any liability
 | 
			
		||||
      incurred by, or claims asserted against, such Contributor by reason
 | 
			
		||||
      of your accepting any such warranty or additional liability.
 | 
			
		||||
 | 
			
		||||
   END OF TERMS AND CONDITIONS
 | 
			
		||||
 | 
			
		||||
   APPENDIX: How to apply the Apache License to your work.
 | 
			
		||||
 | 
			
		||||
      To apply the Apache License to your work, attach the following
 | 
			
		||||
      boilerplate notice, with the fields enclosed by brackets "[]"
 | 
			
		||||
      replaced with your own identifying information. (Don't include
 | 
			
		||||
      the brackets!)  The text should be enclosed in the appropriate
 | 
			
		||||
      comment syntax for the file format. We also recommend that a
 | 
			
		||||
      file or class name and description of purpose be included on the
 | 
			
		||||
      same "printed page" as the copyright notice for easier
 | 
			
		||||
      identification within third-party archives.
 | 
			
		||||
 | 
			
		||||
   Copyright [yyyy] [name of copyright owner]
 | 
			
		||||
 | 
			
		||||
   Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
   you may not use this file except in compliance with the License.
 | 
			
		||||
   You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
       http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
   Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
   distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
   See the License for the specific language governing permissions and
 | 
			
		||||
   limitations under the License.
 | 
			
		||||
							
								
								
									
										269
									
								
								Software/BTLE/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										269
									
								
								Software/BTLE/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,269 @@
 | 
			
		||||
BTLE
 | 
			
		||||
========
 | 
			
		||||
 | 
			
		||||
BTLE is a free and open-source Software Defined Radio Bluetooth Low Energy (BLE) software suite. 
 | 
			
		||||
 | 
			
		||||
It includes:
 | 
			
		||||
  * btle_rx - BLE sniffer. Besides sniff broadcasting/fixed channel, it can also track channel hopping of a communication link.
 | 
			
		||||
  * btle_tx - Universal BLE packet transmitter. Besides BLE standard, it supports also raw bit mode to generate arbitrary GFSK packet. In this way, you can test non-standard protocol or standard under discussion before chip in the market.
 | 
			
		||||
 | 
			
		||||
Features
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
 * PHY and upper layer are implemented in software (C language). Full Software Defined Radio Flexibility. 
 | 
			
		||||
 * BLE standard 1Mbps GFSK PHY.
 | 
			
		||||
 * All ADV and DATA channel link layer packet formats in Core_V4.0 (Chapter 2&3, PartB, Volume 6) are supported.
 | 
			
		||||
 * Sniffer is capable to parse and track channel hopping pattern automatically, not limited to broadcasting channel or fixed channel.
 | 
			
		||||
 | 
			
		||||
Hardware
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
 * [HackRF](https://github.com/mossmann/hackrf)
 | 
			
		||||
 * [bladeRF](https://github.com/Nuand/bladeRF)
 | 
			
		||||
 * [compatible version of HackRF and bladeRF libraries](compatible_hackrf_bladerf_lib.txt)
 | 
			
		||||
 | 
			
		||||
Build and Quick test
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
Make sure your SDR hardware environment (driver/lib) has been setup correctly before run this project.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
git clone https://github.com/JiaoXianjun/BTLE.git
 | 
			
		||||
cd BTLE/host
 | 
			
		||||
mkdir build
 | 
			
		||||
cd build
 | 
			
		||||
cmake ../                   (default. for HackRF)
 | 
			
		||||
cmake ../ -DUSE_BLADERF=1   (only for bladeRF)
 | 
			
		||||
 | 
			
		||||
make
 | 
			
		||||
./btle-tools/src/btle_rx
 | 
			
		||||
```
 | 
			
		||||
Above command sniffs on channel 37. You should see many packets on screen if you have BLE devices (phone/pad/laptop) around.
 | 
			
		||||
```
 | 
			
		||||
./btle-tools/src/btle_tx 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-SDR/Bluetooth/Low/Energy r500 
 | 
			
		||||
```
 | 
			
		||||
Above command transmits discovery packets on ADV channel. You should see a device with name "SDR/Bluetooth/Low/Energy" in another BLE sniffer App (such as LightBlue).
 | 
			
		||||
 | 
			
		||||
**To have a faster operation sequence on HACKRF**, use following:
 | 
			
		||||
```
 | 
			
		||||
#define TRANSFER_COUNT 4
 | 
			
		||||
#define TRANSFER_BUFFER_SIZE 4096
 | 
			
		||||
```
 | 
			
		||||
in hackrf/host/libhackrf/src/hackrf.c. Then re-compile the HACKRF lib and re-install it. Don't forget to re-compile BTLE to take the HACKRF lib change.
 | 
			
		||||
 | 
			
		||||
**Besides the tools, [matlab](matlab) directory includes algorithm evaluation and other useful scirpts**
 | 
			
		||||
 | 
			
		||||
btle_rx usage
 | 
			
		||||
------------------
 | 
			
		||||
```
 | 
			
		||||
-h --help
 | 
			
		||||
```
 | 
			
		||||
Print all arguments/usages.
 | 
			
		||||
```
 | 
			
		||||
-c --chan
 | 
			
		||||
```
 | 
			
		||||
Channel number. Default value 37 (one of ADV channels). Valid value 0~39 (all ADV and DATA channels).
 | 
			
		||||
```
 | 
			
		||||
-g --gain
 | 
			
		||||
```
 | 
			
		||||
Rx gain in dB. HACKRF rxvga default 6, valid 0 - 62. bladeRF default is max rx gain 66dB (valid 0 - 66). Gain should be tuned very carefully to ensure best performance under your circumstance. Suggest test from low gain, because high gain always causes severe distortion and get you nothing.
 | 
			
		||||
```
 | 
			
		||||
-l --lnaGain
 | 
			
		||||
```
 | 
			
		||||
LNA gain in dB (HackRF only). Default 32, valid 0 - 40. Gain should be tuned very carefully to ensure best performance under your circumstance. 
 | 
			
		||||
```
 | 
			
		||||
-b --amp
 | 
			
		||||
```
 | 
			
		||||
Enable amp (HackRF only). Default off.
 | 
			
		||||
```
 | 
			
		||||
-a --access
 | 
			
		||||
```
 | 
			
		||||
Access address. Default 8e89bed6 for ADV channel 37 38 39. You should specify correct value for data channel according to captured connection setup procedure.
 | 
			
		||||
```
 | 
			
		||||
-k --crcinit
 | 
			
		||||
```
 | 
			
		||||
Default 555555 for ADV channel. You should specify correct value for data channel according to captured connection setup procedure.
 | 
			
		||||
```
 | 
			
		||||
-v --verbose
 | 
			
		||||
```
 | 
			
		||||
Verbose mode. Print more information when there is error
 | 
			
		||||
```
 | 
			
		||||
-r --raw
 | 
			
		||||
```
 | 
			
		||||
Raw mode. After access addr is detected, print out following raw 42 bytes (without descrambling, parsing)
 | 
			
		||||
```        
 | 
			
		||||
-f --freq_hz (need argument)
 | 
			
		||||
```
 | 
			
		||||
This frequency (Hz) will override channel setting (In case someone want to work on freq other than BTLE. More general purpose).
 | 
			
		||||
```
 | 
			
		||||
-m --access_mask (need argument)
 | 
			
		||||
```
 | 
			
		||||
If a bit is 1 in this mask, corresponding bit in access address will be taken into packet existing decision (In case someone want a shorter/sparser unique word to do packet detection. More general purpose).
 | 
			
		||||
```
 | 
			
		||||
-o --hop
 | 
			
		||||
```
 | 
			
		||||
This will turn on data channel tracking (frequency hopping) after link setup information is captured in ADV_CONNECT_REQ packet on ADV channel.
 | 
			
		||||
```
 | 
			
		||||
-s --filename
 | 
			
		||||
```
 | 
			
		||||
Store packets to pcap file.
 | 
			
		||||
 | 
			
		||||
btle_tx usage
 | 
			
		||||
------------------
 | 
			
		||||
```
 | 
			
		||||
btle_tx packet1 packet2 ... packetX ...  rN
 | 
			
		||||
```
 | 
			
		||||
or 
 | 
			
		||||
```
 | 
			
		||||
btle_tx packets.txt
 | 
			
		||||
```
 | 
			
		||||
packets.txt is a text file which has command line parameters (packet1 packet2 ... rN) text. One parameter one line. A line start with "#" is regarded as comment. See [packets.txt example](host/btle-tools/src/packets.txt)
 | 
			
		||||
```
 | 
			
		||||
packetX 
 | 
			
		||||
```
 | 
			
		||||
is one string which describes one packet. All packets compose a packets sequence.
 | 
			
		||||
```
 | 
			
		||||
rN
 | 
			
		||||
```
 | 
			
		||||
means the sequence will be repeated for N times. If it is not specified, the sequence will only be sent once.
 | 
			
		||||
 | 
			
		||||
packetX string format
 | 
			
		||||
```    
 | 
			
		||||
channel_number-packet_type-field-value-field-value-...-Space-value
 | 
			
		||||
```
 | 
			
		||||
Each descriptor string starts with BTLE channel number (0~39), then followed by packet_type (RAW/iBeacon/ADV_IND/ADV_DIRECT_IND/etc. See all format examples [**AT THE END: Appendix**](#appendix-packet-descriptor-examples-of-btle_tx-for-all-formats) ), then followed by field-value pair which is packet_type specific, at last there is Space-value pair (optional) where the value specifies how many millisecond will be waited after this packet sent.
 | 
			
		||||
 | 
			
		||||
**DO NOT** use space character " " in a command line packet descriptor. You CAN use space in the txt file packet descriptor.
 | 
			
		||||
 | 
			
		||||
**DO NOT** use "-" inside each field. "-" is magic character which is used to separate different fields in packet descriptor. 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **btle_tx example: [Discovery packets](host/btle-tools/src/packets_discovery.txt)**
 | 
			
		||||
 | 
			
		||||
Open LightBlue APP (or other BLE sniffer) in your iPhone/device before this command:
 | 
			
		||||
```
 | 
			
		||||
./btle-tools/src/btle_tx ../btle-tools/src/packets_discovery.txt
 | 
			
		||||
```
 | 
			
		||||
You will see a device named as "SDR Bluetooth Low Energy" in your LightBlue APP.
 | 
			
		||||
 | 
			
		||||
Corresponding Command line:
 | 
			
		||||
```
 | 
			
		||||
./btle-tools/src/btle_tx 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-SDR/Bluetooth/Low/Energy r40
 | 
			
		||||
``` 
 | 
			
		||||
Note: space " " is replaced by "/" because space " " is not supported in command line.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **btle_tx example: [Connection establishment](doc/TI-BLE-INTRODUCTION.pdf)**
 | 
			
		||||
```
 | 
			
		||||
btle_tx 37-ADV_IND-TxAdd-0-RxAdd-0-AdvA-90D7EBB19299-AdvData-0201050702031802180418-Space-1      37-CONNECT_REQ-TxAdd-0-RxAdd-0-InitA-001830EA965F-AdvA-90D7EBB19299-AA-60850A1B-CRCInit-A77B22-WinSize-02-WinOffset-000F-Interval-0050-Latency-0000-Timeout-07D0-ChM-1FFFFFFFFF-Hop-9-SCA-5-Space-1     9-LL_DATA-AA-60850A1B-LLID-1-NESN-0-SN-0-MD-0-DATA-XX-CRCInit-A77B22-Space-1
 | 
			
		||||
```
 | 
			
		||||
Above simulates a Connection establishment procedure between device 1 and device 2. Corresponding descriptor file [BTLE/host/btle-tools/src/packets.txt](host/btle-tools/src/packets.txt).
 | 
			
		||||
 | 
			
		||||
The 1st packet -- device 1 sends ADV_IND packet in channel 37.
 | 
			
		||||
 | 
			
		||||
The 2nd packet -- After device 2 (in scanning state) receives the ADV packet from device 1, device 2 sends CONNECT_REQ packet to request connection setup with device 1. In this request packet, there are device 2 MAC address (InitA), target MAC address (device 1 MAC address AdvA), Access address (AA) which will be used by device 1 in following packet sending in data channel, CRC initialization value for following device 1 sending packet, Hopping channel information (ChM and Hop) for data channel used by device 1, etc.
 | 
			
		||||
 | 
			
		||||
The 3rd packet -- device 1 send an empty Link layer data PDU in channel 9 (decided by hopping scheme) according to those connection request information received from device 2. ("XX" after field "DATA" means there is no data for this field )
 | 
			
		||||
 | 
			
		||||
Time space between packets are 1s (1000ms). Tune TI's packet sniffer to channel 37, then above establishment procedure will be captured.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **btle_tx example: [iBeacon](doc/ibeacon.pdf)**
 | 
			
		||||
```
 | 
			
		||||
./btle-tools/src/btle_tx 37-iBeacon-AdvA-010203040506-UUID-B9407F30F5F8466EAFF925556B57FE6D-Major-0008-Minor-0009-TxPower-C5-Space-100     r100
 | 
			
		||||
```
 | 
			
		||||
Above command sends iBeacon packet and repeats it 100 times with 100ms time space. Corresponding descriptor file [BTLE/host/btle-tools/src/packets_ibeacon.txt](host/btle-tools/src/packets_ibeacon.txt). You can use a BLE sniffer dongle to see the packet.
 | 
			
		||||
 | 
			
		||||
The packet descriptor string:
 | 
			
		||||
```
 | 
			
		||||
37-iBeacon-AdvA-010203040506-UUID-B9407F30F5F8466EAFF925556B57FE6D-Major-0008-Minor-0009-TxPower-C5-Space-100
 | 
			
		||||
```
 | 
			
		||||
```
 | 
			
		||||
37
 | 
			
		||||
```
 | 
			
		||||
channel 37 (one of BTLE Advertising channel 37 38 39)
 | 
			
		||||
```
 | 
			
		||||
iBeacon
 | 
			
		||||
```
 | 
			
		||||
packet format key word which means iBeacon format. (Actually it is ADV_IND format in Core_V4.0.pdf)
 | 
			
		||||
```
 | 
			
		||||
AdvA
 | 
			
		||||
```
 | 
			
		||||
Advertising address (MAC address) which is set as 010203040506 (See Core_V4.0.pdf)
 | 
			
		||||
```
 | 
			
		||||
UUID
 | 
			
		||||
```
 | 
			
		||||
here we specify it as Estimote’s fixed UUID: B9407F30F5F8466EAFF925556B57FE6D
 | 
			
		||||
```
 | 
			
		||||
Major
 | 
			
		||||
```
 | 
			
		||||
major number of iBeacon format. (Here it is 0008)
 | 
			
		||||
```
 | 
			
		||||
Minor
 | 
			
		||||
```
 | 
			
		||||
minor number of iBeacon format. (Here it is 0009)
 | 
			
		||||
```
 | 
			
		||||
Txpower
 | 
			
		||||
```
 | 
			
		||||
transmit power parameter of iBeacon format (Here it is C5)
 | 
			
		||||
```
 | 
			
		||||
Space
 | 
			
		||||
```
 | 
			
		||||
How many millisecond will be waited after this packet sent. (Here it is 100ms)
 | 
			
		||||
 
 | 
			
		||||
Demos
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
See a comparison with TI's packet sniffer here: [http://sdr-x.github.io/BTLE-SNIFFER/](http://sdr-x.github.io/BTLE-SNIFFER/)
 | 
			
		||||
 | 
			
		||||
See <a href="https://youtu.be/9LDPhOF2yyw">btle_rx video demo</a> or <a href="https://vimeo.com/144574631">btle_rx video demo</a> (in China) and <a href="http://youtu.be/Y8ttV5AEb-g">btle_tx video demo 1</a> or <a href="http://v.youku.com/v_show/id_XNzUxMDIzNzAw.html">btle_tx video demo 2</a> (in China)
 | 
			
		||||
 | 
			
		||||
# Appendix: Packet descriptor examples of btle_tx for all formats
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
RAW packets: (All bits will be sent to GFSK modulator directly)
 | 
			
		||||
```
 | 
			
		||||
37-RAW-aad6be898e8dc3ce338c4cb1207730144f9474e0e15eedb378c3bc
 | 
			
		||||
```
 | 
			
		||||
ADVERTISING CHANNEL packets (channel 37 for example):
 | 
			
		||||
```
 | 
			
		||||
37-IBEACON-AdvA-010203040506-UUID-B9407F30F5F8466EAFF925556B57FE6D-Major-0008-Minor-0009-TxPower-C5
 | 
			
		||||
37-ADV_IND-TxAdd-1-RxAdd-0-AdvA-010203040506-AdvData-00112233445566778899AABBCCDDEEFF
 | 
			
		||||
37-ADV_DIRECT_IND-TxAdd-1-RxAdd-0-AdvA-010203040506-InitA-0708090A0B0C
 | 
			
		||||
37-ADV_NONCONN_IND-TxAdd-1-RxAdd-0-AdvA-010203040506-AdvData-00112233445566778899AABBCCDDEEFF
 | 
			
		||||
37-ADV_SCAN_IND-TxAdd-1-RxAdd-0-AdvA-010203040506-AdvData-00112233445566778899AABBCCDDEEFF
 | 
			
		||||
37-SCAN_REQ-TxAdd-1-RxAdd-0-ScanA-010203040506-AdvA-0708090A0B0C
 | 
			
		||||
37-SCAN_RSP-TxAdd-1-RxAdd-0-AdvA-010203040506-ScanRspData-00112233445566778899AABBCCDDEEFF
 | 
			
		||||
37-CONNECT_REQ-TxAdd-1-RxAdd-0-InitA-010203040506-AdvA-0708090A0B0C-AA-01020304-CRCInit-050607-WinSize-08-WinOffset-090A-Interval-0B0C-Latency-0D0E-Timeout-0F00-ChM-0102030405-Hop-3-SCA-4
 | 
			
		||||
```
 | 
			
		||||
DATA CHANNEL packets (channel 9 for example):
 | 
			
		||||
```
 | 
			
		||||
9-LL_DATA-AA-60850A1B-LLID-1-NESN-0-SN-0-MD-0-DATA-XX-CRCInit-A77B22
 | 
			
		||||
9-LL_CONNECTION_UPDATE_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-WinSize-02-WinOffset-0e0F-Interval-0450-Latency-0607-Timeout-07D0-Instant-eeff-CRCInit-A77B22
 | 
			
		||||
9-LL_CHANNEL_MAP_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-ChM-1FFFFFFFFF-Instant-0201-CRCInit-A77B22
 | 
			
		||||
9-LL_TERMINATE_IND-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-ErrorCode-12-CRCInit-A77B22
 | 
			
		||||
9-LL_ENC_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-Rand-0102030405060708-EDIV-090A-SKDm-0102030405060708-IVm-090A0B0C-CRCInit-A77B22
 | 
			
		||||
9-LL_ENC_RSP-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-SKDs-0102030405060708-IVs-01020304-CRCInit-A77B22
 | 
			
		||||
9-LL_START_ENC_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-CRCInit-A77B22
 | 
			
		||||
9-LL_START_ENC_RSP-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-CRCInit-A77B22
 | 
			
		||||
9-LL_UNKNOWN_RSP-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-UnknownType-01-CRCInit-A77B22
 | 
			
		||||
9-LL_FEATURE_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-FeatureSet-0102030405060708-CRCInit-A77B22
 | 
			
		||||
9-LL_FEATURE_RSP-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-FeatureSet-0102030405060708-CRCInit-A77B22
 | 
			
		||||
9-LL_PAUSE_ENC_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-CRCInit-A77B22
 | 
			
		||||
9-LL_PAUSE_ENC_RSP-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-CRCInit-A77B22
 | 
			
		||||
9-LL_VERSION_IND-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-VersNr-01-CompId-0203-SubVersNr-0405-CRCInit-A77B22
 | 
			
		||||
9-LL_REJECT_IND-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-ErrorCode-00-CRCInit-A77B22
 | 
			
		||||
```
 | 
			
		||||
Discovery packets: (which can show any name or services in scanner APP, such as LightBlue):
 | 
			
		||||
```
 | 
			
		||||
37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-FLAGS-02-LOCAL_NAME09-CA-TXPOWER-03-SERVICE03-180D1810-SERVICE_DATA-180D40-MANUF_DATA-0001FF-CONN_INTERVAL-0006 (-SERVICE_SOLI14-1811)
 | 
			
		||||
 | 
			
		||||
FLAGS: 0x01 LE Limited Discoverable Mode; 0x02 LE General Discoverable Mode
 | 
			
		||||
SERVICE:
 | 
			
		||||
0x02 16-bit Service UUIDs More 16-bit UUIDs available
 | 
			
		||||
0x03 16-bit Service UUIDs Complete list of 16-bit UUIDs available
 | 
			
		||||
0x04 32-bit Service UUIDs More 3a2-bit UUIDs available
 | 
			
		||||
0x05 32-bit Service UUIDs Complete list of 32-bit UUIDs available
 | 
			
		||||
0x06 128-bit Service UUIDs More 128-bit UUIDs available
 | 
			
		||||
0x07 128-bit Service UUIDs Complete list of 128-bit UUIDs available
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										12
									
								
								Software/BTLE/compatible_hackrf_bladerf_lib.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								Software/BTLE/compatible_hackrf_bladerf_lib.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
Following versions were tested. Not means other versions won't work.
 | 
			
		||||
 | 
			
		||||
bladeRF:
 | 
			
		||||
 | 
			
		||||
bladeRF-cli --version
 | 
			
		||||
1.8.0-0.2019.07-5
 | 
			
		||||
 | 
			
		||||
HackRF:
 | 
			
		||||
 | 
			
		||||
hackrf_info
 | 
			
		||||
hackrf_info version: git-f202160
 | 
			
		||||
libhackrf version: git-f202160 (0.5)
 | 
			
		||||
							
								
								
									
										1981
									
								
								Software/BTLE/doc/BLE_sniffer_guide.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1981
									
								
								Software/BTLE/doc/BLE_sniffer_guide.pdf
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										5
									
								
								Software/BTLE/doc/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								Software/BTLE/doc/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
See some docs which are useful in [https://github.com/JiaoXianjun/doc](https://github.com/JiaoXianjun/doc)
 | 
			
		||||
 | 
			
		||||
See new type of discovery packet in host/btle-tools/src/packets_discovery.txt
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								Software/BTLE/doc/TI-BLE-INTRODUCTION.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Software/BTLE/doc/TI-BLE-INTRODUCTION.pdf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Software/BTLE/doc/ibeacon.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Software/BTLE/doc/ibeacon.pdf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										20
									
								
								Software/BTLE/host/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Software/BTLE/host/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
#top dir cmake project
 | 
			
		||||
 | 
			
		||||
cmake_minimum_required(VERSION 2.8)
 | 
			
		||||
project (btle_all)
 | 
			
		||||
 | 
			
		||||
add_subdirectory(btle-tools)
 | 
			
		||||
 | 
			
		||||
########################################################################
 | 
			
		||||
# Create uninstall target
 | 
			
		||||
########################################################################
 | 
			
		||||
 | 
			
		||||
configure_file(
 | 
			
		||||
    ${PROJECT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in
 | 
			
		||||
    ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
 | 
			
		||||
@ONLY)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
add_custom_target(uninstall
 | 
			
		||||
    ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										3
									
								
								Software/BTLE/host/btle-tools/52-hackrf.rules
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Software/BTLE/host/btle-tools/52-hackrf.rules
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
ATTR{idVendor}=="1d50", ATTR{idProduct}=="604b", SYMLINK+="hackrf-jawbreaker-%k", MODE="660", GROUP="plugdev"
 | 
			
		||||
ATTR{idVendor}=="1d50", ATTR{idProduct}=="6089", SYMLINK+="hackrf-one-%k", MODE="660", GROUP="plugdev"
 | 
			
		||||
ATTR{idVendor}=="1fc9", ATTR{idProduct}=="000c", SYMLINK+="nxp-dfu-%k", MODE="660", GROUP="plugdev"
 | 
			
		||||
							
								
								
									
										89
									
								
								Software/BTLE/host/btle-tools/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								Software/BTLE/host/btle-tools/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,89 @@
 | 
			
		||||
# Copyright 2012 Jared Boone
 | 
			
		||||
# Copyright 2013 Benjamin Vernoux
 | 
			
		||||
#
 | 
			
		||||
# This file is part of HackRF and bladeRF
 | 
			
		||||
#
 | 
			
		||||
# This program is free software; you can redistribute it and/or modify
 | 
			
		||||
# it under the terms of the GNU General Public License as published by
 | 
			
		||||
# the Free Software Foundation; either version 2, or (at your option)
 | 
			
		||||
# any later version.
 | 
			
		||||
#
 | 
			
		||||
# This program is distributed in the hope that it will be useful,
 | 
			
		||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
# GNU General Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
# You should have received a copy of the GNU General Public License
 | 
			
		||||
# along with this program; see the file COPYING.  If not, write to
 | 
			
		||||
# the Free Software Foundation, Inc., 51 Franklin Street,
 | 
			
		||||
# Boston, MA 02110-1301, USA.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# Based heavily upon the libftdi cmake setup.
 | 
			
		||||
 | 
			
		||||
cmake_minimum_required(VERSION 2.8)
 | 
			
		||||
project(btle-tools C)
 | 
			
		||||
set(MAJOR_VERSION 0)
 | 
			
		||||
set(MINOR_VERSION 5)
 | 
			
		||||
set(PACKAGE btle-tools)
 | 
			
		||||
set(VERSION_STRING ${MAJOR_VERSION}.${MINOR_VERSION})
 | 
			
		||||
set(VERSION ${VERSION_STRING})
 | 
			
		||||
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../cmake/modules)
 | 
			
		||||
 | 
			
		||||
if(MSVC)
 | 
			
		||||
# include_directories(getopt)
 | 
			
		||||
add_definitions(/D _CRT_SECURE_NO_WARNINGS)
 | 
			
		||||
else()
 | 
			
		||||
add_definitions(-Wall)
 | 
			
		||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu90")
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# Find needed packages.
 | 
			
		||||
IF (USE_BLADERF MATCHES 1)
 | 
			
		||||
  MESSAGE(STATUS "Use BLADERF")
 | 
			
		||||
  find_package(LIBBLADERF REQUIRED)
 | 
			
		||||
  include_directories(${LIBBLADERF_INCLUDE_DIR})
 | 
			
		||||
  set(USE_RFBOARD "USE_BLADERF")
 | 
			
		||||
ELSE (USE_BLADERF MATCHES 1)
 | 
			
		||||
  MESSAGE(STATUS "Use HACKRF")
 | 
			
		||||
  find_package(LIBHACKRF REQUIRED)
 | 
			
		||||
  include_directories(${LIBHACKRF_INCLUDE_DIR})
 | 
			
		||||
  set(USE_RFBOARD "USE_HACKRF")
 | 
			
		||||
ENDIF (USE_BLADERF MATCHES 1)
 | 
			
		||||
 | 
			
		||||
CONFIGURE_FILE (
 | 
			
		||||
  "${PROJECT_SOURCE_DIR}/include/common.h.in"
 | 
			
		||||
  "${PROJECT_SOURCE_DIR}/src/common.h"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
add_subdirectory(src)
 | 
			
		||||
 | 
			
		||||
########################################################################
 | 
			
		||||
# Create uninstall target
 | 
			
		||||
########################################################################
 | 
			
		||||
 | 
			
		||||
if(NOT btle_all_SOURCE_DIR)
 | 
			
		||||
configure_file(
 | 
			
		||||
    ${PROJECT_SOURCE_DIR}/../cmake/cmake_uninstall.cmake.in
 | 
			
		||||
    ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
 | 
			
		||||
@ONLY)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
add_custom_target(uninstall
 | 
			
		||||
    ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
 | 
			
		||||
)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
########################################################################
 | 
			
		||||
# Install udev rules
 | 
			
		||||
########################################################################
 | 
			
		||||
option(INSTALL_UDEV_RULES "Install udev rules for HackRF" OFF)
 | 
			
		||||
if (INSTALL_UDEV_RULES)
 | 
			
		||||
    install (
 | 
			
		||||
        FILES 52-hackrf.rules
 | 
			
		||||
        DESTINATION "/etc/udev/rules.d"
 | 
			
		||||
        COMPONENT "udev"
 | 
			
		||||
        )
 | 
			
		||||
else (INSTALL_UDEV_RULES)
 | 
			
		||||
    message (STATUS "Udev rules not being installed, install them with -DINSTALL_UDEV_RULES=ON")
 | 
			
		||||
endif (INSTALL_UDEV_RULES)
 | 
			
		||||
							
								
								
									
										7
									
								
								Software/BTLE/host/btle-tools/include/common.h.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Software/BTLE/host/btle-tools/include/common.h.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
#ifndef HAVE_COMMON_H
 | 
			
		||||
#define HAVE_COMMON_H
 | 
			
		||||
 | 
			
		||||
#define @USE_RFBOARD@
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										63
									
								
								Software/BTLE/host/btle-tools/src/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								Software/BTLE/host/btle-tools/src/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
# Copyright 2012 Jared Boone
 | 
			
		||||
# Copyright 2013 Benjamin Vernoux
 | 
			
		||||
#
 | 
			
		||||
# This file is part of HackRF and BladeRF.
 | 
			
		||||
#
 | 
			
		||||
# This program is free software; you can redistribute it and/or modify
 | 
			
		||||
# it under the terms of the GNU General Public License as published by
 | 
			
		||||
# the Free Software Foundation; either version 2, or (at your option)
 | 
			
		||||
# any later version.
 | 
			
		||||
#
 | 
			
		||||
# This program is distributed in the hope that it will be useful,
 | 
			
		||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
# GNU General Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
# You should have received a copy of the GNU General Public License
 | 
			
		||||
# along with this program; see the file COPYING.  If not, write to
 | 
			
		||||
# the Free Software Foundation, Inc., 51 Franklin Street,
 | 
			
		||||
# Boston, MA 02110-1301, USA.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# Based heavily upon the libftdi cmake setup.
 | 
			
		||||
set(INSTALL_DEFAULT_BINDIR "bin" CACHE STRING "Appended to CMAKE_INSTALL_PREFIX")
 | 
			
		||||
 | 
			
		||||
if(MSVC)
 | 
			
		||||
add_library(libgetopt_static STATIC
 | 
			
		||||
    ../getopt/getopt.c
 | 
			
		||||
)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
add_executable(btle_tx btle_tx.c)
 | 
			
		||||
install(TARGETS btle_tx RUNTIME DESTINATION ${INSTALL_DEFAULT_BINDIR})
 | 
			
		||||
 | 
			
		||||
add_executable(btle_rx btle_rx.c)
 | 
			
		||||
install(TARGETS btle_rx RUNTIME DESTINATION ${INSTALL_DEFAULT_BINDIR})
 | 
			
		||||
 | 
			
		||||
IF (USE_BLADERF MATCHES 1)
 | 
			
		||||
include_directories(${LIBBLADERF_INCLUDE_DIR})
 | 
			
		||||
LIST(APPEND TOOLS_LINK_LIBS ${LIBBLADERF_LIBRARIES})
 | 
			
		||||
ELSE (USE_BLADERF MATCHES 1)
 | 
			
		||||
include_directories(${LIBHACKRF_INCLUDE_DIR})
 | 
			
		||||
LIST(APPEND TOOLS_LINK_LIBS ${LIBHACKRF_LIBRARIES})
 | 
			
		||||
ENDIF (USE_BLADERF MATCHES 1)
 | 
			
		||||
 | 
			
		||||
IF(NOT DEFINED C_INLINE)
 | 
			
		||||
   ADD_DEFINITIONS("-Dinline=")
 | 
			
		||||
ENDIF(NOT DEFINED C_INLINE)
 | 
			
		||||
 | 
			
		||||
if(MSVC)
 | 
			
		||||
LIST(APPEND TOOLS_LINK_LIBS libgetopt_static)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
target_link_libraries(btle_tx ${TOOLS_LINK_LIBS} m)
 | 
			
		||||
 | 
			
		||||
IF (USE_BLADERF MATCHES 1)
 | 
			
		||||
target_link_libraries(btle_rx ${TOOLS_LINK_LIBS} m -lpthread)
 | 
			
		||||
ELSE (USE_BLADERF MATCHES 1)
 | 
			
		||||
target_link_libraries(btle_rx ${TOOLS_LINK_LIBS} m)
 | 
			
		||||
ENDIF (USE_BLADERF MATCHES 1)
 | 
			
		||||
 | 
			
		||||
# MESSAGE(STATUS "1")
 | 
			
		||||
# MESSAGE(STATUS ${LIBBLADERF_LIBRARIES})
 | 
			
		||||
# MESSAGE(STATUS "2")
 | 
			
		||||
							
								
								
									
										2421
									
								
								Software/BTLE/host/btle-tools/src/btle_rx.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2421
									
								
								Software/BTLE/host/btle-tools/src/btle_rx.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										4256
									
								
								Software/BTLE/host/btle-tools/src/btle_tx.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4256
									
								
								Software/BTLE/host/btle-tools/src/btle_tx.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										96
									
								
								Software/BTLE/host/btle-tools/src/gauss_cos_sin_table.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								Software/BTLE/host/btle-tools/src/gauss_cos_sin_table.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,96 @@
 | 
			
		||||
// Lookup table to speedup the program
 | 
			
		||||
// Xianjun Jiao (putaoshu@msn.com)
 | 
			
		||||
 | 
			
		||||
const int8_t gauss_coef_int8[16] = {
 | 
			
		||||
0, 0, 0, 0, 2, 11, 32, 53, 60, 53, 32, 11, 2, 0, 0, 0, };
 | 
			
		||||
 | 
			
		||||
const int8_t cos_table_int8[1024] = {
 | 
			
		||||
127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
 | 
			
		||||
126, 126, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 122, 122, 122, 122, 
 | 
			
		||||
122, 121, 121, 121, 121, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 
 | 
			
		||||
115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 109, 109, 109, 108, 108, 107, 107, 106, 106, 
 | 
			
		||||
106, 105, 105, 104, 104, 103, 103, 102, 102, 102, 101, 101, 100, 100, 99, 99, 98, 98, 97, 97, 96, 96, 95, 95, 
 | 
			
		||||
94, 94, 93, 93, 92, 91, 91, 90, 90, 89, 89, 88, 88, 87, 86, 86, 85, 85, 84, 84, 83, 82, 82, 81, 
 | 
			
		||||
81, 80, 79, 79, 78, 78, 77, 76, 76, 75, 74, 74, 73, 72, 72, 71, 71, 70, 69, 69, 68, 67, 67, 66, 
 | 
			
		||||
65, 65, 64, 63, 63, 62, 61, 61, 60, 59, 58, 58, 57, 56, 56, 55, 54, 54, 53, 52, 51, 51, 50, 49, 
 | 
			
		||||
49, 48, 47, 46, 46, 45, 44, 44, 43, 42, 41, 41, 40, 39, 38, 38, 37, 36, 35, 35, 34, 33, 32, 32, 
 | 
			
		||||
31, 30, 29, 29, 28, 27, 26, 26, 25, 24, 23, 22, 22, 21, 20, 19, 19, 18, 17, 16, 16, 15, 14, 13, 
 | 
			
		||||
12, 12, 11, 10, 9, 9, 8, 7, 6, 5, 5, 4, 3, 2, 2, 1, 0, -1, -2, -2, -3, -4, -5, -5, 
 | 
			
		||||
-6, -7, -8, -9, -9, -10, -11, -12, -12, -13, -14, -15, -16, -16, -17, -18, -19, -19, -20, -21, -22, -22, -23, -24, 
 | 
			
		||||
-25, -26, -26, -27, -28, -29, -29, -30, -31, -32, -32, -33, -34, -35, -35, -36, -37, -38, -38, -39, -40, -41, -41, -42, 
 | 
			
		||||
-43, -44, -44, -45, -46, -46, -47, -48, -49, -49, -50, -51, -51, -52, -53, -54, -54, -55, -56, -56, -57, -58, -58, -59, 
 | 
			
		||||
-60, -61, -61, -62, -63, -63, -64, -65, -65, -66, -67, -67, -68, -69, -69, -70, -71, -71, -72, -72, -73, -74, -74, -75, 
 | 
			
		||||
-76, -76, -77, -78, -78, -79, -79, -80, -81, -81, -82, -82, -83, -84, -84, -85, -85, -86, -86, -87, -88, -88, -89, -89, 
 | 
			
		||||
-90, -90, -91, -91, -92, -93, -93, -94, -94, -95, -95, -96, -96, -97, -97, -98, -98, -99, -99, -100, -100, -101, -101, -102, 
 | 
			
		||||
-102, -102, -103, -103, -104, -104, -105, -105, -106, -106, -106, -107, -107, -108, -108, -109, -109, -109, -110, -110, -111, -111, -111, -112, 
 | 
			
		||||
-112, -112, -113, -113, -113, -114, -114, -114, -115, -115, -115, -116, -116, -116, -117, -117, -117, -118, -118, -118, -118, -119, -119, -119, 
 | 
			
		||||
-120, -120, -120, -120, -121, -121, -121, -121, -122, -122, -122, -122, -122, -123, -123, -123, -123, -123, -124, -124, -124, -124, -124, -124, 
 | 
			
		||||
-125, -125, -125, -125, -125, -125, -125, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -127, -127, -127, -127, -127, -127, 
 | 
			
		||||
-127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -126, 
 | 
			
		||||
-126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -125, -125, -125, -125, -125, -125, -125, -124, -124, -124, -124, -124, -124, -123, 
 | 
			
		||||
-123, -123, -123, -123, -122, -122, -122, -122, -122, -121, -121, -121, -121, -120, -120, -120, -120, -119, -119, -119, -118, -118, -118, -118, 
 | 
			
		||||
-117, -117, -117, -116, -116, -116, -115, -115, -115, -114, -114, -114, -113, -113, -113, -112, -112, -112, -111, -111, -111, -110, -110, -109, 
 | 
			
		||||
-109, -109, -108, -108, -107, -107, -106, -106, -106, -105, -105, -104, -104, -103, -103, -102, -102, -102, -101, -101, -100, -100, -99, -99, 
 | 
			
		||||
-98, -98, -97, -97, -96, -96, -95, -95, -94, -94, -93, -93, -92, -91, -91, -90, -90, -89, -89, -88, -88, -87, -86, -86, 
 | 
			
		||||
-85, -85, -84, -84, -83, -82, -82, -81, -81, -80, -79, -79, -78, -78, -77, -76, -76, -75, -74, -74, -73, -72, -72, -71, 
 | 
			
		||||
-71, -70, -69, -69, -68, -67, -67, -66, -65, -65, -64, -63, -63, -62, -61, -61, -60, -59, -58, -58, -57, -56, -56, -55, 
 | 
			
		||||
-54, -54, -53, -52, -51, -51, -50, -49, -49, -48, -47, -46, -46, -45, -44, -44, -43, -42, -41, -41, -40, -39, -38, -38, 
 | 
			
		||||
-37, -36, -35, -35, -34, -33, -32, -32, -31, -30, -29, -29, -28, -27, -26, -26, -25, -24, -23, -22, -22, -21, -20, -19, 
 | 
			
		||||
-19, -18, -17, -16, -16, -15, -14, -13, -12, -12, -11, -10, -9, -9, -8, -7, -6, -5, -5, -4, -3, -2, -2, -1, 
 | 
			
		||||
0, 1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 16, 16, 17, 18, 
 | 
			
		||||
19, 19, 20, 21, 22, 22, 23, 24, 25, 26, 26, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36, 
 | 
			
		||||
37, 38, 38, 39, 40, 41, 41, 42, 43, 44, 44, 45, 46, 46, 47, 48, 49, 49, 50, 51, 51, 52, 53, 54, 
 | 
			
		||||
54, 55, 56, 56, 57, 58, 58, 59, 60, 61, 61, 62, 63, 63, 64, 65, 65, 66, 67, 67, 68, 69, 69, 70, 
 | 
			
		||||
71, 71, 72, 72, 73, 74, 74, 75, 76, 76, 77, 78, 78, 79, 79, 80, 81, 81, 82, 82, 83, 84, 84, 85, 
 | 
			
		||||
85, 86, 86, 87, 88, 88, 89, 89, 90, 90, 91, 91, 92, 93, 93, 94, 94, 95, 95, 96, 96, 97, 97, 98, 
 | 
			
		||||
98, 99, 99, 100, 100, 101, 101, 102, 102, 102, 103, 103, 104, 104, 105, 105, 106, 106, 106, 107, 107, 108, 108, 109, 
 | 
			
		||||
109, 109, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 
 | 
			
		||||
117, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 121, 121, 121, 121, 122, 122, 122, 122, 122, 123, 123, 123, 
 | 
			
		||||
123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
 | 
			
		||||
126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, };
 | 
			
		||||
 | 
			
		||||
const int8_t sin_table_int8[1024] = {
 | 
			
		||||
0, 1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 16, 16, 17, 18, 
 | 
			
		||||
19, 19, 20, 21, 22, 22, 23, 24, 25, 26, 26, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36, 
 | 
			
		||||
37, 38, 38, 39, 40, 41, 41, 42, 43, 44, 44, 45, 46, 46, 47, 48, 49, 49, 50, 51, 51, 52, 53, 54, 
 | 
			
		||||
54, 55, 56, 56, 57, 58, 58, 59, 60, 61, 61, 62, 63, 63, 64, 65, 65, 66, 67, 67, 68, 69, 69, 70, 
 | 
			
		||||
71, 71, 72, 72, 73, 74, 74, 75, 76, 76, 77, 78, 78, 79, 79, 80, 81, 81, 82, 82, 83, 84, 84, 85, 
 | 
			
		||||
85, 86, 86, 87, 88, 88, 89, 89, 90, 90, 91, 91, 92, 93, 93, 94, 94, 95, 95, 96, 96, 97, 97, 98, 
 | 
			
		||||
98, 99, 99, 100, 100, 101, 101, 102, 102, 102, 103, 103, 104, 104, 105, 105, 106, 106, 106, 107, 107, 108, 108, 109, 
 | 
			
		||||
109, 109, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 
 | 
			
		||||
117, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 121, 121, 121, 121, 122, 122, 122, 122, 122, 123, 123, 123, 
 | 
			
		||||
123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 
 | 
			
		||||
126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 
 | 
			
		||||
127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 
 | 
			
		||||
125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 121, 121, 121, 121, 120, 120, 120, 
 | 
			
		||||
120, 119, 119, 119, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 
 | 
			
		||||
112, 112, 111, 111, 111, 110, 110, 109, 109, 109, 108, 108, 107, 107, 106, 106, 106, 105, 105, 104, 104, 103, 103, 102, 
 | 
			
		||||
102, 102, 101, 101, 100, 100, 99, 99, 98, 98, 97, 97, 96, 96, 95, 95, 94, 94, 93, 93, 92, 91, 91, 90, 
 | 
			
		||||
90, 89, 89, 88, 88, 87, 86, 86, 85, 85, 84, 84, 83, 82, 82, 81, 81, 80, 79, 79, 78, 78, 77, 76, 
 | 
			
		||||
76, 75, 74, 74, 73, 72, 72, 71, 71, 70, 69, 69, 68, 67, 67, 66, 65, 65, 64, 63, 63, 62, 61, 61, 
 | 
			
		||||
60, 59, 58, 58, 57, 56, 56, 55, 54, 54, 53, 52, 51, 51, 50, 49, 49, 48, 47, 46, 46, 45, 44, 44, 
 | 
			
		||||
43, 42, 41, 41, 40, 39, 38, 38, 37, 36, 35, 35, 34, 33, 32, 32, 31, 30, 29, 29, 28, 27, 26, 26, 
 | 
			
		||||
25, 24, 23, 22, 22, 21, 20, 19, 19, 18, 17, 16, 16, 15, 14, 13, 12, 12, 11, 10, 9, 9, 8, 7, 
 | 
			
		||||
6, 5, 5, 4, 3, 2, 2, 1, 0, -1, -2, -2, -3, -4, -5, -5, -6, -7, -8, -9, -9, -10, -11, -12, 
 | 
			
		||||
-12, -13, -14, -15, -16, -16, -17, -18, -19, -19, -20, -21, -22, -22, -23, -24, -25, -26, -26, -27, -28, -29, -29, -30, 
 | 
			
		||||
-31, -32, -32, -33, -34, -35, -35, -36, -37, -38, -38, -39, -40, -41, -41, -42, -43, -44, -44, -45, -46, -46, -47, -48, 
 | 
			
		||||
-49, -49, -50, -51, -51, -52, -53, -54, -54, -55, -56, -56, -57, -58, -58, -59, -60, -61, -61, -62, -63, -63, -64, -65, 
 | 
			
		||||
-65, -66, -67, -67, -68, -69, -69, -70, -71, -71, -72, -72, -73, -74, -74, -75, -76, -76, -77, -78, -78, -79, -79, -80, 
 | 
			
		||||
-81, -81, -82, -82, -83, -84, -84, -85, -85, -86, -86, -87, -88, -88, -89, -89, -90, -90, -91, -91, -92, -93, -93, -94, 
 | 
			
		||||
-94, -95, -95, -96, -96, -97, -97, -98, -98, -99, -99, -100, -100, -101, -101, -102, -102, -102, -103, -103, -104, -104, -105, -105, 
 | 
			
		||||
-106, -106, -106, -107, -107, -108, -108, -109, -109, -109, -110, -110, -111, -111, -111, -112, -112, -112, -113, -113, -113, -114, -114, -114, 
 | 
			
		||||
-115, -115, -115, -116, -116, -116, -117, -117, -117, -118, -118, -118, -118, -119, -119, -119, -120, -120, -120, -120, -121, -121, -121, -121, 
 | 
			
		||||
-122, -122, -122, -122, -122, -123, -123, -123, -123, -123, -124, -124, -124, -124, -124, -124, -125, -125, -125, -125, -125, -125, -125, -126, 
 | 
			
		||||
-126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 
 | 
			
		||||
-127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -126, -126, -126, -126, -126, -126, -126, -126, -126, 
 | 
			
		||||
-126, -126, -125, -125, -125, -125, -125, -125, -125, -124, -124, -124, -124, -124, -124, -123, -123, -123, -123, -123, -122, -122, -122, -122, 
 | 
			
		||||
-122, -121, -121, -121, -121, -120, -120, -120, -120, -119, -119, -119, -118, -118, -118, -118, -117, -117, -117, -116, -116, -116, -115, -115, 
 | 
			
		||||
-115, -114, -114, -114, -113, -113, -113, -112, -112, -112, -111, -111, -111, -110, -110, -109, -109, -109, -108, -108, -107, -107, -106, -106, 
 | 
			
		||||
-106, -105, -105, -104, -104, -103, -103, -102, -102, -102, -101, -101, -100, -100, -99, -99, -98, -98, -97, -97, -96, -96, -95, -95, 
 | 
			
		||||
-94, -94, -93, -93, -92, -91, -91, -90, -90, -89, -89, -88, -88, -87, -86, -86, -85, -85, -84, -84, -83, -82, -82, -81, 
 | 
			
		||||
-81, -80, -79, -79, -78, -78, -77, -76, -76, -75, -74, -74, -73, -72, -72, -71, -71, -70, -69, -69, -68, -67, -67, -66, 
 | 
			
		||||
-65, -65, -64, -63, -63, -62, -61, -61, -60, -59, -58, -58, -57, -56, -56, -55, -54, -54, -53, -52, -51, -51, -50, -49, 
 | 
			
		||||
-49, -48, -47, -46, -46, -45, -44, -44, -43, -42, -41, -41, -40, -39, -38, -38, -37, -36, -35, -35, -34, -33, -32, -32, 
 | 
			
		||||
-31, -30, -29, -29, -28, -27, -26, -26, -25, -24, -23, -22, -22, -21, -20, -19, -19, -18, -17, -16, -16, -15, -14, -13, 
 | 
			
		||||
-12, -12, -11, -10, -9, -9, -8, -7, -6, -5, -5, -4, -3, -2, -2, -1, };
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										13
									
								
								Software/BTLE/host/btle-tools/src/packets.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								Software/BTLE/host/btle-tools/src/packets.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
# Simulate BTLE Connection establishment according to BTLE/doc/TI-BLE-INTRODUCTION.pdf
 | 
			
		||||
# Turn on your BLE sniffer dongle at channel 37 to see the procedure
 | 
			
		||||
 | 
			
		||||
37-ADV_IND-TxAdd-0-RxAdd-0-AdvA-90D7EBB19299-AdvData-0201050702031802180418-Space-1000
 | 
			
		||||
 | 
			
		||||
37-CONNECT_REQ-TxAdd-0-RxAdd-0-InitA-001830EA965F-AdvA-90D7EBB19299-AA-60850A1B-CRCInit-A77B22-WinSize-02-WinOffset-000F-Interval-0050-Latency-0000-Timeout-07D0-ChM-1FFFFFFFFF-Hop-9-SCA-5-Space-1000
 | 
			
		||||
 | 
			
		||||
9-LL_DATA-AA-60850A1B-LLID-1-NESN-0-SN-0-MD-0-DATA-X-CRCInit-A77B22-Space-1000
 | 
			
		||||
 | 
			
		||||
r1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										55
									
								
								Software/BTLE/host/btle-tools/src/packets_discovery.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								Software/BTLE/host/btle-tools/src/packets_discovery.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
#  example
 | 
			
		||||
#  ./btle_tx 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-FLAGS-02-LOCAL_NAME09-CA-TXPOWER-03-SERVICE03-180D1810-SERVICE_DATA-180D40-MANUF_DATA-0001FF-CONN_INTERVAL-0006 (-SERVICE_SOLI14-1811)
 | 
			
		||||
#  FLAGS: 0x01 LE Limited Discoverable Mode; 0x02 LE General Discoverable Mode
 | 
			
		||||
#  SERVICE:
 | 
			
		||||
#  0x02 16-bit Service UUIDs More 16-bit UUIDs available
 | 
			
		||||
#  0x03 16-bit Service UUIDs Complete list of 16-bit UUIDs available
 | 
			
		||||
#  0x04 32-bit Service UUIDs More 32-bit UUIDs available
 | 
			
		||||
#  0x05 32-bit Service UUIDs Complete list of 32-bit UUIDs available
 | 
			
		||||
#  0x06 128-bit Service UUIDs More 128-bit UUIDs available
 | 
			
		||||
#  0x07 128-bit Service UUIDs Complete list of 128-bit UUIDs available
 | 
			
		||||
 | 
			
		||||
# 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-FLAGS-02-LOCAL_NAME09-Jxj-TXPOWER-03-SERVICE03-180D1810-SERVICE_DATA-180D40-MANUF_DATA-004CFF-CONN_INTERVAL-0006
 | 
			
		||||
 | 
			
		||||
# r30
 | 
			
		||||
 | 
			
		||||
37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-SDR Bluetooth Low Energy
 | 
			
		||||
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040500-LOCAL_NAME09-CA0000 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040501-LOCAL_NAME09-CA0001 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040502-LOCAL_NAME09-CA0002 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040503-LOCAL_NAME09-CA0003 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040504-LOCAL_NAME09-CA0004 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040505-LOCAL_NAME09-CA0005 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-CA0006 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040507-LOCAL_NAME09-CA0007 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040508-LOCAL_NAME09-CA0008 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040509-LOCAL_NAME09-CA0009 11950 22.626 113.823 1
 | 
			
		||||
 | 
			
		||||
r4000
 | 
			
		||||
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-01234567890123456789012345678
 | 
			
		||||
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-FLAGS-02-LOCAL_NAME09-01234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-110203040506-FLAGS-02-LOCAL_NAME09-11234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-210203040506-FLAGS-02-LOCAL_NAME09-21234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-310203040506-FLAGS-02-LOCAL_NAME09-31234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-410203040506-FLAGS-02-LOCAL_NAME09-41234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-510203040506-FLAGS-02-LOCAL_NAME09-51234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-610203040506-FLAGS-02-LOCAL_NAME09-61234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-710203040506-FLAGS-02-LOCAL_NAME09-71234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-810203040506-FLAGS-02-LOCAL_NAME09-81234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-910203040506-FLAGS-02-LOCAL_NAME09-91234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-a10203040506-FLAGS-02-LOCAL_NAME09-a1234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-b10203040506-FLAGS-02-LOCAL_NAME09-b1234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-c10203040506-FLAGS-02-LOCAL_NAME09-c1234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-d10203040506-FLAGS-02-LOCAL_NAME09-d1234567890123456789012345
 | 
			
		||||
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-FLAGS-02-SERVICE03-180D-SERVICE_DATA-180D40-SPACE-500
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-110203040506-FLAGS-02-SERVICE03-1819-SERVICE_DATA-181940-SPACE-100
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-210203040506-FLAGS-02-SERVICE03-181c-SERVICE_DATA-181c40-SPACE-500
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-310203040506-FLAGS-02-SERVICE03-180a-SERVICE_DATA-180a40-SPACE-500
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-410203040506-FLAGS-02-SERVICE03-1800-SERVICE_DATA-180040-SPACE-500
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-410203040506-FLAGS-02-SERVICE03-1801-SERVICE_DATA-180140-SPACE-500
 | 
			
		||||
# r30
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										5
									
								
								Software/BTLE/host/btle-tools/src/packets_ibeacon.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								Software/BTLE/host/btle-tools/src/packets_ibeacon.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
37-iBeacon-AdvA-010203040506-UUID-B9407F30F5F8466EAFF925556B57FE6D-Major-0008-Minor-0009-TxPower-C5-Space-100
 | 
			
		||||
 | 
			
		||||
r10
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										46
									
								
								Software/BTLE/host/btle-tools/src/scramble_table.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								Software/BTLE/host/btle-tools/src/scramble_table.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
// Scramble table definition
 | 
			
		||||
// Xianjun Jiao (putaoshu@msn.com)
 | 
			
		||||
 | 
			
		||||
const uint8_t scramble_table[40][42] = {
 | 
			
		||||
{64, 178, 188, 195, 31, 55, 74, 95, 133, 246, 156, 154, 193, 214, 197, 68, 32, 89, 222, 225, 143, 27, 165, 175, 66, 123, 78, 205, 96, 235, 98, 34, 144, 44, 239, 240, 199, 141, 210, 87, 161, 61, },
 | 
			
		||||
{137, 64, 178, 188, 195, 31, 55, 74, 95, 133, 246, 156, 154, 193, 214, 197, 68, 32, 89, 222, 225, 143, 27, 165, 175, 66, 123, 78, 205, 96, 235, 98, 34, 144, 44, 239, 240, 199, 141, 210, 87, 161, },
 | 
			
		||||
{210, 87, 161, 61, 167, 102, 176, 117, 49, 17, 72, 150, 119, 248, 227, 70, 233, 171, 208, 158, 83, 51, 216, 186, 152, 8, 36, 203, 59, 252, 113, 163, 244, 85, 104, 207, 169, 25, 108, 93, 76, 4, },
 | 
			
		||||
{27, 165, 175, 66, 123, 78, 205, 96, 235, 98, 34, 144, 44, 239, 240, 199, 141, 210, 87, 161, 61, 167, 102, 176, 117, 49, 17, 72, 150, 119, 248, 227, 70, 233, 171, 208, 158, 83, 51, 216, 186, 152, },
 | 
			
		||||
{100, 121, 135, 63, 110, 148, 190, 10, 237, 57, 53, 131, 173, 139, 137, 64, 178, 188, 195, 31, 55, 74, 95, 133, 246, 156, 154, 193, 214, 197, 68, 32, 89, 222, 225, 143, 27, 165, 175, 66, 123, 78, },
 | 
			
		||||
{173, 139, 137, 64, 178, 188, 195, 31, 55, 74, 95, 133, 246, 156, 154, 193, 214, 197, 68, 32, 89, 222, 225, 143, 27, 165, 175, 66, 123, 78, 205, 96, 235, 98, 34, 144, 44, 239, 240, 199, 141, 210, },
 | 
			
		||||
{246, 156, 154, 193, 214, 197, 68, 32, 89, 222, 225, 143, 27, 165, 175, 66, 123, 78, 205, 96, 235, 98, 34, 144, 44, 239, 240, 199, 141, 210, 87, 161, 61, 167, 102, 176, 117, 49, 17, 72, 150, 119, },
 | 
			
		||||
{63, 110, 148, 190, 10, 237, 57, 53, 131, 173, 139, 137, 64, 178, 188, 195, 31, 55, 74, 95, 133, 246, 156, 154, 193, 214, 197, 68, 32, 89, 222, 225, 143, 27, 165, 175, 66, 123, 78, 205, 96, 235, },
 | 
			
		||||
{8, 36, 203, 59, 252, 113, 163, 244, 85, 104, 207, 169, 25, 108, 93, 76, 4, 146, 229, 29, 254, 184, 81, 250, 42, 180, 231, 212, 12, 182, 46, 38, 2, 201, 242, 14, 127, 220, 40, 125, 21, 218, },
 | 
			
		||||
{193, 214, 197, 68, 32, 89, 222, 225, 143, 27, 165, 175, 66, 123, 78, 205, 96, 235, 98, 34, 144, 44, 239, 240, 199, 141, 210, 87, 161, 61, 167, 102, 176, 117, 49, 17, 72, 150, 119, 248, 227, 70, },
 | 
			
		||||
{154, 193, 214, 197, 68, 32, 89, 222, 225, 143, 27, 165, 175, 66, 123, 78, 205, 96, 235, 98, 34, 144, 44, 239, 240, 199, 141, 210, 87, 161, 61, 167, 102, 176, 117, 49, 17, 72, 150, 119, 248, 227, },
 | 
			
		||||
{83, 51, 216, 186, 152, 8, 36, 203, 59, 252, 113, 163, 244, 85, 104, 207, 169, 25, 108, 93, 76, 4, 146, 229, 29, 254, 184, 81, 250, 42, 180, 231, 212, 12, 182, 46, 38, 2, 201, 242, 14, 127, },
 | 
			
		||||
{44, 239, 240, 199, 141, 210, 87, 161, 61, 167, 102, 176, 117, 49, 17, 72, 150, 119, 248, 227, 70, 233, 171, 208, 158, 83, 51, 216, 186, 152, 8, 36, 203, 59, 252, 113, 163, 244, 85, 104, 207, 169, },
 | 
			
		||||
{229, 29, 254, 184, 81, 250, 42, 180, 231, 212, 12, 182, 46, 38, 2, 201, 242, 14, 127, 220, 40, 125, 21, 218, 115, 106, 6, 91, 23, 19, 129, 100, 121, 135, 63, 110, 148, 190, 10, 237, 57, 53, },
 | 
			
		||||
{190, 10, 237, 57, 53, 131, 173, 139, 137, 64, 178, 188, 195, 31, 55, 74, 95, 133, 246, 156, 154, 193, 214, 197, 68, 32, 89, 222, 225, 143, 27, 165, 175, 66, 123, 78, 205, 96, 235, 98, 34, 144, },
 | 
			
		||||
{119, 248, 227, 70, 233, 171, 208, 158, 83, 51, 216, 186, 152, 8, 36, 203, 59, 252, 113, 163, 244, 85, 104, 207, 169, 25, 108, 93, 76, 4, 146, 229, 29, 254, 184, 81, 250, 42, 180, 231, 212, 12, },
 | 
			
		||||
{208, 158, 83, 51, 216, 186, 152, 8, 36, 203, 59, 252, 113, 163, 244, 85, 104, 207, 169, 25, 108, 93, 76, 4, 146, 229, 29, 254, 184, 81, 250, 42, 180, 231, 212, 12, 182, 46, 38, 2, 201, 242, },
 | 
			
		||||
{25, 108, 93, 76, 4, 146, 229, 29, 254, 184, 81, 250, 42, 180, 231, 212, 12, 182, 46, 38, 2, 201, 242, 14, 127, 220, 40, 125, 21, 218, 115, 106, 6, 91, 23, 19, 129, 100, 121, 135, 63, 110, },
 | 
			
		||||
{66, 123, 78, 205, 96, 235, 98, 34, 144, 44, 239, 240, 199, 141, 210, 87, 161, 61, 167, 102, 176, 117, 49, 17, 72, 150, 119, 248, 227, 70, 233, 171, 208, 158, 83, 51, 216, 186, 152, 8, 36, 203, },
 | 
			
		||||
{139, 137, 64, 178, 188, 195, 31, 55, 74, 95, 133, 246, 156, 154, 193, 214, 197, 68, 32, 89, 222, 225, 143, 27, 165, 175, 66, 123, 78, 205, 96, 235, 98, 34, 144, 44, 239, 240, 199, 141, 210, 87, },
 | 
			
		||||
{244, 85, 104, 207, 169, 25, 108, 93, 76, 4, 146, 229, 29, 254, 184, 81, 250, 42, 180, 231, 212, 12, 182, 46, 38, 2, 201, 242, 14, 127, 220, 40, 125, 21, 218, 115, 106, 6, 91, 23, 19, 129, },
 | 
			
		||||
{61, 167, 102, 176, 117, 49, 17, 72, 150, 119, 248, 227, 70, 233, 171, 208, 158, 83, 51, 216, 186, 152, 8, 36, 203, 59, 252, 113, 163, 244, 85, 104, 207, 169, 25, 108, 93, 76, 4, 146, 229, 29, },
 | 
			
		||||
{102, 176, 117, 49, 17, 72, 150, 119, 248, 227, 70, 233, 171, 208, 158, 83, 51, 216, 186, 152, 8, 36, 203, 59, 252, 113, 163, 244, 85, 104, 207, 169, 25, 108, 93, 76, 4, 146, 229, 29, 254, 184, },
 | 
			
		||||
{175, 66, 123, 78, 205, 96, 235, 98, 34, 144, 44, 239, 240, 199, 141, 210, 87, 161, 61, 167, 102, 176, 117, 49, 17, 72, 150, 119, 248, 227, 70, 233, 171, 208, 158, 83, 51, 216, 186, 152, 8, 36, },
 | 
			
		||||
{152, 8, 36, 203, 59, 252, 113, 163, 244, 85, 104, 207, 169, 25, 108, 93, 76, 4, 146, 229, 29, 254, 184, 81, 250, 42, 180, 231, 212, 12, 182, 46, 38, 2, 201, 242, 14, 127, 220, 40, 125, 21, },
 | 
			
		||||
{81, 250, 42, 180, 231, 212, 12, 182, 46, 38, 2, 201, 242, 14, 127, 220, 40, 125, 21, 218, 115, 106, 6, 91, 23, 19, 129, 100, 121, 135, 63, 110, 148, 190, 10, 237, 57, 53, 131, 173, 139, 137, },
 | 
			
		||||
{10, 237, 57, 53, 131, 173, 139, 137, 64, 178, 188, 195, 31, 55, 74, 95, 133, 246, 156, 154, 193, 214, 197, 68, 32, 89, 222, 225, 143, 27, 165, 175, 66, 123, 78, 205, 96, 235, 98, 34, 144, 44, },
 | 
			
		||||
{195, 31, 55, 74, 95, 133, 246, 156, 154, 193, 214, 197, 68, 32, 89, 222, 225, 143, 27, 165, 175, 66, 123, 78, 205, 96, 235, 98, 34, 144, 44, 239, 240, 199, 141, 210, 87, 161, 61, 167, 102, 176, },
 | 
			
		||||
{188, 195, 31, 55, 74, 95, 133, 246, 156, 154, 193, 214, 197, 68, 32, 89, 222, 225, 143, 27, 165, 175, 66, 123, 78, 205, 96, 235, 98, 34, 144, 44, 239, 240, 199, 141, 210, 87, 161, 61, 167, 102, },
 | 
			
		||||
{117, 49, 17, 72, 150, 119, 248, 227, 70, 233, 171, 208, 158, 83, 51, 216, 186, 152, 8, 36, 203, 59, 252, 113, 163, 244, 85, 104, 207, 169, 25, 108, 93, 76, 4, 146, 229, 29, 254, 184, 81, 250, },
 | 
			
		||||
{46, 38, 2, 201, 242, 14, 127, 220, 40, 125, 21, 218, 115, 106, 6, 91, 23, 19, 129, 100, 121, 135, 63, 110, 148, 190, 10, 237, 57, 53, 131, 173, 139, 137, 64, 178, 188, 195, 31, 55, 74, 95, },
 | 
			
		||||
{231, 212, 12, 182, 46, 38, 2, 201, 242, 14, 127, 220, 40, 125, 21, 218, 115, 106, 6, 91, 23, 19, 129, 100, 121, 135, 63, 110, 148, 190, 10, 237, 57, 53, 131, 173, 139, 137, 64, 178, 188, 195, },
 | 
			
		||||
{96, 235, 98, 34, 144, 44, 239, 240, 199, 141, 210, 87, 161, 61, 167, 102, 176, 117, 49, 17, 72, 150, 119, 248, 227, 70, 233, 171, 208, 158, 83, 51, 216, 186, 152, 8, 36, 203, 59, 252, 113, 163, },
 | 
			
		||||
{169, 25, 108, 93, 76, 4, 146, 229, 29, 254, 184, 81, 250, 42, 180, 231, 212, 12, 182, 46, 38, 2, 201, 242, 14, 127, 220, 40, 125, 21, 218, 115, 106, 6, 91, 23, 19, 129, 100, 121, 135, 63, },
 | 
			
		||||
{242, 14, 127, 220, 40, 125, 21, 218, 115, 106, 6, 91, 23, 19, 129, 100, 121, 135, 63, 110, 148, 190, 10, 237, 57, 53, 131, 173, 139, 137, 64, 178, 188, 195, 31, 55, 74, 95, 133, 246, 156, 154, },
 | 
			
		||||
{59, 252, 113, 163, 244, 85, 104, 207, 169, 25, 108, 93, 76, 4, 146, 229, 29, 254, 184, 81, 250, 42, 180, 231, 212, 12, 182, 46, 38, 2, 201, 242, 14, 127, 220, 40, 125, 21, 218, 115, 106, 6, },
 | 
			
		||||
{68, 32, 89, 222, 225, 143, 27, 165, 175, 66, 123, 78, 205, 96, 235, 98, 34, 144, 44, 239, 240, 199, 141, 210, 87, 161, 61, 167, 102, 176, 117, 49, 17, 72, 150, 119, 248, 227, 70, 233, 171, 208, },
 | 
			
		||||
{141, 210, 87, 161, 61, 167, 102, 176, 117, 49, 17, 72, 150, 119, 248, 227, 70, 233, 171, 208, 158, 83, 51, 216, 186, 152, 8, 36, 203, 59, 252, 113, 163, 244, 85, 104, 207, 169, 25, 108, 93, 76, },
 | 
			
		||||
{214, 197, 68, 32, 89, 222, 225, 143, 27, 165, 175, 66, 123, 78, 205, 96, 235, 98, 34, 144, 44, 239, 240, 199, 141, 210, 87, 161, 61, 167, 102, 176, 117, 49, 17, 72, 150, 119, 248, 227, 70, 233, },
 | 
			
		||||
{31, 55, 74, 95, 133, 246, 156, 154, 193, 214, 197, 68, 32, 89, 222, 225, 143, 27, 165, 175, 66, 123, 78, 205, 96, 235, 98, 34, 144, 44, 239, 240, 199, 141, 210, 87, 161, 61, 167, 102, 176, 117, },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								Software/BTLE/host/btle-tools/src/scramble_table_ch37.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Software/BTLE/host/btle-tools/src/scramble_table_ch37.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
// Scramble table definition for channel 37
 | 
			
		||||
// Xianjun Jiao (putaoshu@msn.com)
 | 
			
		||||
 | 
			
		||||
const uint8_t scramble_table_ch37[42] = {
 | 
			
		||||
141, 210, 87, 161, 61, 167, 102, 176, 117, 49, 17, 72, 150, 119, 248, 227, 70, 233, 171, 208, 158, 83, 51, 216, 
 | 
			
		||||
186, 152, 8, 36, 203, 59, 252, 113, 163, 244, 85, 104, 207, 169, 25, 108, 93, 76, };
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										32
									
								
								Software/BTLE/host/cmake/cmake_uninstall.cmake.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								Software/BTLE/host/cmake/cmake_uninstall.cmake.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
# http://www.vtk.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F
 | 
			
		||||
 | 
			
		||||
IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
 | 
			
		||||
  MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
 | 
			
		||||
ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
 | 
			
		||||
 | 
			
		||||
FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
 | 
			
		||||
STRING(REGEX REPLACE "\n" ";" files "${files}")
 | 
			
		||||
FOREACH(file ${files})
 | 
			
		||||
  MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
 | 
			
		||||
  IF(EXISTS "$ENV{DESTDIR}${file}")
 | 
			
		||||
    EXEC_PROGRAM(
 | 
			
		||||
      "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
 | 
			
		||||
      OUTPUT_VARIABLE rm_out
 | 
			
		||||
      RETURN_VALUE rm_retval
 | 
			
		||||
      )
 | 
			
		||||
    IF(NOT "${rm_retval}" STREQUAL 0)
 | 
			
		||||
      MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
 | 
			
		||||
    ENDIF(NOT "${rm_retval}" STREQUAL 0)
 | 
			
		||||
  ELSEIF(IS_SYMLINK "$ENV{DESTDIR}${file}")
 | 
			
		||||
    EXEC_PROGRAM(
 | 
			
		||||
      "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
 | 
			
		||||
      OUTPUT_VARIABLE rm_out
 | 
			
		||||
      RETURN_VALUE rm_retval
 | 
			
		||||
      )
 | 
			
		||||
    IF(NOT "${rm_retval}" STREQUAL 0)
 | 
			
		||||
      MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
 | 
			
		||||
    ENDIF(NOT "${rm_retval}" STREQUAL 0)
 | 
			
		||||
  ELSE(EXISTS "$ENV{DESTDIR}${file}")
 | 
			
		||||
    MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
 | 
			
		||||
  ENDIF(EXISTS "$ENV{DESTDIR}${file}")
 | 
			
		||||
ENDFOREACH(file)
 | 
			
		||||
							
								
								
									
										54
									
								
								Software/BTLE/host/cmake/modules/FindLIBBLADERF.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								Software/BTLE/host/cmake/modules/FindLIBBLADERF.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
# - Find BLADERF
 | 
			
		||||
# Find the native BLADERF includes and library
 | 
			
		||||
# This module defines
 | 
			
		||||
#  LIBBLADERF_INCLUDE_DIR, where to find rtlsdr.h, etc.
 | 
			
		||||
#  LIBBLADERF_LIBRARIES, the libraries needed to use BLADERF.
 | 
			
		||||
#  LIBBLADERF_FOUND, If false, do not try to use BLADERF.
 | 
			
		||||
# also defined, but not for general use are
 | 
			
		||||
#  LIBBLADERF_LIBRARY, where to find the BLADERF library.
 | 
			
		||||
 | 
			
		||||
#MESSAGE("LIBBLADERF_DIR set to ${LIBBLADERF_DIR}" )
 | 
			
		||||
 | 
			
		||||
FIND_PATH(LIBBLADERF_INCLUDE_DIR libbladeRF.h
 | 
			
		||||
  ${LIBBLADERF_DIR}/include
 | 
			
		||||
  /usr/local/include/libbladeRF
 | 
			
		||||
  /usr/include
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
FIND_LIBRARY(LIBBLADERF_LIBRARY
 | 
			
		||||
  NAMES bladeRF
 | 
			
		||||
  PATHS ${LIBBLADERF_DIR}/libs
 | 
			
		||||
  "${LIBBLADERF_DIR}\\win32\\lib"
 | 
			
		||||
  /usr/pkgs64/lib
 | 
			
		||||
  /usr/lib64
 | 
			
		||||
  /usr/lib
 | 
			
		||||
  /usr/local/lib
 | 
			
		||||
  /usr/lib/x86_64-linux-gnu
 | 
			
		||||
  NO_DEFAULT_PATH
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
IF (LIBBLADERF_LIBRARY AND LIBBLADERF_INCLUDE_DIR)
 | 
			
		||||
  SET(LIBBLADERF_LIBRARIES ${LIBBLADERF_LIBRARY})
 | 
			
		||||
  SET(LIBBLADERF_FOUND "YES")
 | 
			
		||||
ELSE (LIBBLADERF_LIBRARY AND LIBBLADERF_INCLUDE_DIR)
 | 
			
		||||
  SET(LIBBLADERF_FOUND "NO")
 | 
			
		||||
ENDIF (LIBBLADERF_LIBRARY AND LIBBLADERF_INCLUDE_DIR)
 | 
			
		||||
 | 
			
		||||
IF (LIBBLADERF_FOUND)
 | 
			
		||||
  IF (NOT LIBBLADERF_FIND_QUIETLY)
 | 
			
		||||
    MESSAGE(STATUS "Found BLADERF: ${LIBBLADERF_LIBRARIES}")
 | 
			
		||||
  ENDIF (NOT LIBBLADERF_FIND_QUIETLY)
 | 
			
		||||
ELSE (LIBBLADERF_FOUND)
 | 
			
		||||
  IF (LIBBLADERF_FIND_REQUIRED)
 | 
			
		||||
    MESSAGE(FATAL_ERROR "Could not find BLADERF library")
 | 
			
		||||
  ENDIF (LIBBLADERF_FIND_REQUIRED)
 | 
			
		||||
ENDIF (LIBBLADERF_FOUND)
 | 
			
		||||
 | 
			
		||||
# Deprecated declarations.
 | 
			
		||||
GET_FILENAME_COMPONENT (NATIVE_BLADERF_LIB_PATH ${LIBBLADERF_LIBRARY} PATH)
 | 
			
		||||
 | 
			
		||||
MARK_AS_ADVANCED(
 | 
			
		||||
  LIBBLADERF_LIBRARY
 | 
			
		||||
  LIBBLADERF_INCLUDE_DIR
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										55
									
								
								Software/BTLE/host/cmake/modules/FindLIBHACKRF.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								Software/BTLE/host/cmake/modules/FindLIBHACKRF.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
# - Try to find the libhackrf library
 | 
			
		||||
# Once done this defines
 | 
			
		||||
#
 | 
			
		||||
#  LIBHACKRF_FOUND - system has libhackrf
 | 
			
		||||
#  LIBHACKRF_INCLUDE_DIR - the libhackrf include directory
 | 
			
		||||
#  LIBHACKRF_LIBRARIES - Link these to use libhackrf
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2013  Benjamin Vernoux
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if (LIBHACKRF_INCLUDE_DIR AND LIBHACKRF_LIBRARIES)
 | 
			
		||||
 | 
			
		||||
  # in cache already
 | 
			
		||||
  set(LIBHACKRF_FOUND TRUE)
 | 
			
		||||
 | 
			
		||||
else (LIBHACKRF_INCLUDE_DIR AND LIBHACKRF_LIBRARIES)
 | 
			
		||||
  IF (NOT WIN32)
 | 
			
		||||
    # use pkg-config to get the directories and then use these values
 | 
			
		||||
    # in the FIND_PATH() and FIND_LIBRARY() calls
 | 
			
		||||
    find_package(PkgConfig)
 | 
			
		||||
    pkg_check_modules(PC_LIBHACKRF QUIET libhackrf)
 | 
			
		||||
  ENDIF(NOT WIN32)
 | 
			
		||||
 | 
			
		||||
  FIND_PATH(LIBHACKRF_INCLUDE_DIR
 | 
			
		||||
    NAMES hackrf.h
 | 
			
		||||
    HINTS $ENV{LIBHACKRF_DIR}/include ${PC_LIBHACKRF_INCLUDEDIR}
 | 
			
		||||
    PATHS /usr/local/include/libhackrf /usr/include/libhackrf /usr/local/include
 | 
			
		||||
    /usr/include ${CMAKE_SOURCE_DIR}/../libhackrf/src
 | 
			
		||||
    /opt/local/include/libhackrf
 | 
			
		||||
    ${LIBHACKRF_INCLUDE_DIR}
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  set(libhackrf_library_names hackrf)
 | 
			
		||||
 | 
			
		||||
  FIND_LIBRARY(LIBHACKRF_LIBRARIES
 | 
			
		||||
    NAMES ${libhackrf_library_names}
 | 
			
		||||
    HINTS $ENV{LIBHACKRF_DIR}/lib ${PC_LIBHACKRF_LIBDIR}
 | 
			
		||||
    PATHS /usr/local/lib /usr/lib /opt/local/lib ${PC_LIBHACKRF_LIBDIR} ${PC_LIBHACKRF_LIBRARY_DIRS} ${CMAKE_SOURCE_DIR}/../libhackrf/src
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  if(LIBHACKRF_INCLUDE_DIR)
 | 
			
		||||
    set(CMAKE_REQUIRED_INCLUDES ${LIBHACKRF_INCLUDE_DIR})
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
  if(LIBHACKRF_LIBRARIES)
 | 
			
		||||
    set(CMAKE_REQUIRED_LIBRARIES ${LIBHACKRF_LIBRARIES})
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
  include(FindPackageHandleStandardArgs)
 | 
			
		||||
  FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBHACKRF DEFAULT_MSG LIBHACKRF_LIBRARIES LIBHACKRF_INCLUDE_DIR)
 | 
			
		||||
 | 
			
		||||
  MARK_AS_ADVANCED(LIBHACKRF_INCLUDE_DIR LIBHACKRF_LIBRARIES)
 | 
			
		||||
 | 
			
		||||
endif (LIBHACKRF_INCLUDE_DIR AND LIBHACKRF_LIBRARIES)
 | 
			
		||||
							
								
								
									
										246
									
								
								Software/BTLE/host/cmake/modules/FindThreads.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										246
									
								
								Software/BTLE/host/cmake/modules/FindThreads.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,246 @@
 | 
			
		||||
# Updated FindThreads.cmake that supports pthread-win32
 | 
			
		||||
# Downloaded from http://www.vtk.org/Bug/bug_view_advanced_page.php?bug_id=6399
 | 
			
		||||
 | 
			
		||||
# - This module determines the thread library of the system.
 | 
			
		||||
#
 | 
			
		||||
# The following variables are set
 | 
			
		||||
#  CMAKE_THREAD_LIBS_INIT     - the thread library
 | 
			
		||||
#  CMAKE_USE_SPROC_INIT       - are we using sproc?
 | 
			
		||||
#  CMAKE_USE_WIN32_THREADS_INIT - using WIN32 threads?
 | 
			
		||||
#  CMAKE_USE_PTHREADS_INIT    - are we using pthreads
 | 
			
		||||
#  CMAKE_HP_PTHREADS_INIT     - are we using hp pthreads
 | 
			
		||||
#
 | 
			
		||||
# If use of pthreads-win32 is desired, the following variables
 | 
			
		||||
# can be set.
 | 
			
		||||
#
 | 
			
		||||
#  THREADS_USE_PTHREADS_WIN32 -
 | 
			
		||||
#    Setting this to true searches for the pthreads-win32
 | 
			
		||||
#    port (since CMake 2.8.0)
 | 
			
		||||
#
 | 
			
		||||
#  THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME
 | 
			
		||||
#      C  = no exceptions (default)
 | 
			
		||||
#         (NOTE: This is the default scheme on most POSIX thread
 | 
			
		||||
#          implementations and what you should probably be using)
 | 
			
		||||
#      CE = C++ Exception Handling
 | 
			
		||||
#      SE = Structure Exception Handling (MSVC only)
 | 
			
		||||
#      (NOTE: Changing this option from the default may affect
 | 
			
		||||
#       the portability of your application.  See pthreads-win32
 | 
			
		||||
#       documentation for more details.)
 | 
			
		||||
#
 | 
			
		||||
#======================================================
 | 
			
		||||
# Example usage where threading library
 | 
			
		||||
# is provided by the system:
 | 
			
		||||
#
 | 
			
		||||
#   find_package(Threads REQUIRED)
 | 
			
		||||
#   add_executable(foo foo.cc)
 | 
			
		||||
#   target_link_libraries(foo ${CMAKE_THREAD_LIBS_INIT})
 | 
			
		||||
#
 | 
			
		||||
# Example usage if pthreads-win32 is desired on Windows
 | 
			
		||||
# or a system provided thread library:
 | 
			
		||||
#
 | 
			
		||||
#   set(THREADS_USE_PTHREADS_WIN32 true)
 | 
			
		||||
#   find_package(Threads REQUIRED)
 | 
			
		||||
#   include_directories(${THREADS_PTHREADS_INCLUDE_DIR})
 | 
			
		||||
#
 | 
			
		||||
#   add_executable(foo foo.cc)
 | 
			
		||||
#   target_link_libraries(foo ${CMAKE_THREAD_LIBS_INIT})
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
INCLUDE (CheckIncludeFiles)
 | 
			
		||||
INCLUDE (CheckLibraryExists)
 | 
			
		||||
SET(Threads_FOUND FALSE)
 | 
			
		||||
 | 
			
		||||
IF(WIN32 AND NOT CYGWIN AND THREADS_USE_PTHREADS_WIN32)
 | 
			
		||||
  SET(_Threads_ptwin32 true)
 | 
			
		||||
ENDIF()
 | 
			
		||||
 | 
			
		||||
# Do we have sproc?
 | 
			
		||||
IF(CMAKE_SYSTEM MATCHES IRIX)
 | 
			
		||||
  CHECK_INCLUDE_FILES("sys/types.h;sys/prctl.h"  CMAKE_HAVE_SPROC_H)
 | 
			
		||||
ENDIF()
 | 
			
		||||
 | 
			
		||||
IF(CMAKE_HAVE_SPROC_H)
 | 
			
		||||
  # We have sproc
 | 
			
		||||
  SET(CMAKE_USE_SPROC_INIT 1)
 | 
			
		||||
 | 
			
		||||
ELSEIF(_Threads_ptwin32)
 | 
			
		||||
 | 
			
		||||
  IF(NOT DEFINED THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME)
 | 
			
		||||
    # Assign the default scheme
 | 
			
		||||
    SET(THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME "C")
 | 
			
		||||
  ELSE()
 | 
			
		||||
    # Validate the scheme specified by the user
 | 
			
		||||
    IF(NOT THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "C" AND
 | 
			
		||||
       NOT THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "CE" AND
 | 
			
		||||
       NOT THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "SE")
 | 
			
		||||
         MESSAGE(FATAL_ERROR "See documentation for FindPthreads.cmake, only C, CE, and SE modes are allowed")
 | 
			
		||||
    ENDIF()
 | 
			
		||||
    IF(NOT MSVC AND THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "SE")
 | 
			
		||||
      MESSAGE(FATAL_ERROR "Structured Exception Handling is only allowed for MSVC")
 | 
			
		||||
    ENDIF(NOT MSVC AND THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "SE")
 | 
			
		||||
  ENDIF()
 | 
			
		||||
 | 
			
		||||
  FIND_PATH(THREADS_PTHREADS_INCLUDE_DIR pthread.h)
 | 
			
		||||
 | 
			
		||||
  # Determine the library filename
 | 
			
		||||
  IF(MSVC)
 | 
			
		||||
    SET(_Threads_pthreads_libname
 | 
			
		||||
        pthreadV${THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME}2)
 | 
			
		||||
  ELSEIF(MINGW)
 | 
			
		||||
    SET(_Threads_pthreads_libname
 | 
			
		||||
        pthreadG${THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME}2)
 | 
			
		||||
  ELSE()
 | 
			
		||||
    MESSAGE(FATAL_ERROR "This should never happen")
 | 
			
		||||
  ENDIF()
 | 
			
		||||
 | 
			
		||||
  # Use the include path to help find the library if possible
 | 
			
		||||
  SET(_Threads_lib_paths "")
 | 
			
		||||
  IF(THREADS_PTHREADS_INCLUDE_DIR)
 | 
			
		||||
     GET_FILENAME_COMPONENT(_Threads_root_dir
 | 
			
		||||
                            ${THREADS_PTHREADS_INCLUDE_DIR} PATH)
 | 
			
		||||
     SET(_Threads_lib_paths ${_Threads_root_dir}/lib)
 | 
			
		||||
  ENDIF()
 | 
			
		||||
  FIND_LIBRARY(THREADS_PTHREADS_WIN32_LIBRARY
 | 
			
		||||
               NAMES ${_Threads_pthreads_libname}
 | 
			
		||||
               PATHS ${_Threads_lib_paths}
 | 
			
		||||
               DOC "The Portable Threads Library for Win32"
 | 
			
		||||
               NO_SYSTEM_PATH
 | 
			
		||||
               )
 | 
			
		||||
 | 
			
		||||
  IF(THREADS_PTHREADS_INCLUDE_DIR AND THREADS_PTHREADS_WIN32_LIBRARY)
 | 
			
		||||
    MARK_AS_ADVANCED(THREADS_PTHREADS_INCLUDE_DIR)
 | 
			
		||||
    SET(CMAKE_THREAD_LIBS_INIT ${THREADS_PTHREADS_WIN32_LIBRARY})
 | 
			
		||||
    SET(CMAKE_HAVE_THREADS_LIBRARY 1)
 | 
			
		||||
    SET(Threads_FOUND TRUE)
 | 
			
		||||
  ENDIF()
 | 
			
		||||
 | 
			
		||||
  MARK_AS_ADVANCED(THREADS_PTHREADS_WIN32_LIBRARY)
 | 
			
		||||
 | 
			
		||||
ELSE()
 | 
			
		||||
  # Do we have pthreads?
 | 
			
		||||
  CHECK_INCLUDE_FILES("pthread.h" CMAKE_HAVE_PTHREAD_H)
 | 
			
		||||
  IF(CMAKE_HAVE_PTHREAD_H)
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # We have pthread.h
 | 
			
		||||
    # Let's check for the library now.
 | 
			
		||||
    #
 | 
			
		||||
    SET(CMAKE_HAVE_THREADS_LIBRARY)
 | 
			
		||||
    IF(NOT THREADS_HAVE_PTHREAD_ARG)
 | 
			
		||||
 | 
			
		||||
      # Do we have -lpthreads
 | 
			
		||||
      CHECK_LIBRARY_EXISTS(pthreads pthread_create "" CMAKE_HAVE_PTHREADS_CREATE)
 | 
			
		||||
      IF(CMAKE_HAVE_PTHREADS_CREATE)
 | 
			
		||||
        SET(CMAKE_THREAD_LIBS_INIT "-lpthreads")
 | 
			
		||||
        SET(CMAKE_HAVE_THREADS_LIBRARY 1)
 | 
			
		||||
        SET(Threads_FOUND TRUE)
 | 
			
		||||
      ENDIF()
 | 
			
		||||
 | 
			
		||||
      # Ok, how about -lpthread
 | 
			
		||||
      CHECK_LIBRARY_EXISTS(pthread pthread_create "" CMAKE_HAVE_PTHREAD_CREATE)
 | 
			
		||||
      IF(CMAKE_HAVE_PTHREAD_CREATE)
 | 
			
		||||
        SET(CMAKE_THREAD_LIBS_INIT "-lpthread")
 | 
			
		||||
        SET(Threads_FOUND TRUE)
 | 
			
		||||
        SET(CMAKE_HAVE_THREADS_LIBRARY 1)
 | 
			
		||||
      ENDIF()
 | 
			
		||||
 | 
			
		||||
      IF(CMAKE_SYSTEM MATCHES "SunOS.*")
 | 
			
		||||
        # On sun also check for -lthread
 | 
			
		||||
        CHECK_LIBRARY_EXISTS(thread thr_create "" CMAKE_HAVE_THR_CREATE)
 | 
			
		||||
        IF(CMAKE_HAVE_THR_CREATE)
 | 
			
		||||
          SET(CMAKE_THREAD_LIBS_INIT "-lthread")
 | 
			
		||||
          SET(CMAKE_HAVE_THREADS_LIBRARY 1)
 | 
			
		||||
          SET(Threads_FOUND TRUE)
 | 
			
		||||
        ENDIF()
 | 
			
		||||
      ENDIF(CMAKE_SYSTEM MATCHES "SunOS.*")
 | 
			
		||||
 | 
			
		||||
    ENDIF(NOT THREADS_HAVE_PTHREAD_ARG)
 | 
			
		||||
 | 
			
		||||
    IF(NOT CMAKE_HAVE_THREADS_LIBRARY)
 | 
			
		||||
      # If we did not found -lpthread, -lpthread, or -lthread, look for -pthread
 | 
			
		||||
      IF("THREADS_HAVE_PTHREAD_ARG" MATCHES "^THREADS_HAVE_PTHREAD_ARG")
 | 
			
		||||
        MESSAGE(STATUS "Check if compiler accepts -pthread")
 | 
			
		||||
        TRY_RUN(THREADS_PTHREAD_ARG THREADS_HAVE_PTHREAD_ARG
 | 
			
		||||
          ${CMAKE_BINARY_DIR}
 | 
			
		||||
          ${CMAKE_ROOT}/Modules/CheckForPthreads.c
 | 
			
		||||
          CMAKE_FLAGS -DLINK_LIBRARIES:STRING=-pthread
 | 
			
		||||
          COMPILE_OUTPUT_VARIABLE OUTPUT)
 | 
			
		||||
 | 
			
		||||
        IF(THREADS_HAVE_PTHREAD_ARG)
 | 
			
		||||
          IF(THREADS_PTHREAD_ARG MATCHES "^2$")
 | 
			
		||||
            SET(Threads_FOUND TRUE)
 | 
			
		||||
            MESSAGE(STATUS "Check if compiler accepts -pthread - yes")
 | 
			
		||||
          ELSE()
 | 
			
		||||
            MESSAGE(STATUS "Check if compiler accepts -pthread - no")
 | 
			
		||||
            FILE(APPEND
 | 
			
		||||
              ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
 | 
			
		||||
              "Determining if compiler accepts -pthread returned ${THREADS_PTHREAD_ARG} instead of 2. The compiler had the following output:\n${OUTPUT}\n\n")
 | 
			
		||||
          ENDIF()
 | 
			
		||||
        ELSE()
 | 
			
		||||
          MESSAGE(STATUS "Check if compiler accepts -pthread - no")
 | 
			
		||||
          FILE(APPEND
 | 
			
		||||
            ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
 | 
			
		||||
            "Determining if compiler accepts -pthread failed with the following output:\n${OUTPUT}\n\n")
 | 
			
		||||
        ENDIF()
 | 
			
		||||
 | 
			
		||||
      ENDIF("THREADS_HAVE_PTHREAD_ARG" MATCHES "^THREADS_HAVE_PTHREAD_ARG")
 | 
			
		||||
 | 
			
		||||
      IF(THREADS_HAVE_PTHREAD_ARG)
 | 
			
		||||
        SET(Threads_FOUND TRUE)
 | 
			
		||||
        SET(CMAKE_THREAD_LIBS_INIT "-pthread")
 | 
			
		||||
      ENDIF()
 | 
			
		||||
 | 
			
		||||
    ENDIF(NOT CMAKE_HAVE_THREADS_LIBRARY)
 | 
			
		||||
  ENDIF(CMAKE_HAVE_PTHREAD_H)
 | 
			
		||||
ENDIF()
 | 
			
		||||
 | 
			
		||||
IF(CMAKE_THREAD_LIBS_INIT)
 | 
			
		||||
  SET(CMAKE_USE_PTHREADS_INIT 1)
 | 
			
		||||
  SET(Threads_FOUND TRUE)
 | 
			
		||||
ENDIF()
 | 
			
		||||
 | 
			
		||||
IF(CMAKE_SYSTEM MATCHES "Windows"
 | 
			
		||||
   AND NOT THREADS_USE_PTHREADS_WIN32)
 | 
			
		||||
  SET(CMAKE_USE_WIN32_THREADS_INIT 1)
 | 
			
		||||
  SET(Threads_FOUND TRUE)
 | 
			
		||||
ENDIF()
 | 
			
		||||
 | 
			
		||||
IF(CMAKE_USE_PTHREADS_INIT)
 | 
			
		||||
  IF(CMAKE_SYSTEM MATCHES "HP-UX-*")
 | 
			
		||||
    # Use libcma if it exists and can be used.  It provides more
 | 
			
		||||
    # symbols than the plain pthread library.  CMA threads
 | 
			
		||||
    # have actually been deprecated:
 | 
			
		||||
    #   http://docs.hp.com/en/B3920-90091/ch12s03.html#d0e11395
 | 
			
		||||
    #   http://docs.hp.com/en/947/d8.html
 | 
			
		||||
    # but we need to maintain compatibility here.
 | 
			
		||||
    # The CMAKE_HP_PTHREADS setting actually indicates whether CMA threads
 | 
			
		||||
    # are available.
 | 
			
		||||
    CHECK_LIBRARY_EXISTS(cma pthread_attr_create "" CMAKE_HAVE_HP_CMA)
 | 
			
		||||
    IF(CMAKE_HAVE_HP_CMA)
 | 
			
		||||
      SET(CMAKE_THREAD_LIBS_INIT "-lcma")
 | 
			
		||||
      SET(CMAKE_HP_PTHREADS_INIT 1)
 | 
			
		||||
      SET(Threads_FOUND TRUE)
 | 
			
		||||
    ENDIF(CMAKE_HAVE_HP_CMA)
 | 
			
		||||
    SET(CMAKE_USE_PTHREADS_INIT 1)
 | 
			
		||||
  ENDIF()
 | 
			
		||||
 | 
			
		||||
  IF(CMAKE_SYSTEM MATCHES "OSF1-V*")
 | 
			
		||||
    SET(CMAKE_USE_PTHREADS_INIT 0)
 | 
			
		||||
    SET(CMAKE_THREAD_LIBS_INIT )
 | 
			
		||||
  ENDIF()
 | 
			
		||||
 | 
			
		||||
  IF(CMAKE_SYSTEM MATCHES "CYGWIN_NT*")
 | 
			
		||||
    SET(CMAKE_USE_PTHREADS_INIT 1)
 | 
			
		||||
    SET(Threads_FOUND TRUE)
 | 
			
		||||
    SET(CMAKE_THREAD_LIBS_INIT )
 | 
			
		||||
    SET(CMAKE_USE_WIN32_THREADS_INIT 0)
 | 
			
		||||
  ENDIF()
 | 
			
		||||
ENDIF(CMAKE_USE_PTHREADS_INIT)
 | 
			
		||||
 | 
			
		||||
INCLUDE(FindPackageHandleStandardArgs)
 | 
			
		||||
IF(_Threads_ptwin32)
 | 
			
		||||
  FIND_PACKAGE_HANDLE_STANDARD_ARGS(Threads DEFAULT_MSG
 | 
			
		||||
    THREADS_PTHREADS_WIN32_LIBRARY THREADS_PTHREADS_INCLUDE_DIR)
 | 
			
		||||
ELSE()
 | 
			
		||||
  FIND_PACKAGE_HANDLE_STANDARD_ARGS(Threads DEFAULT_MSG Threads_FOUND)
 | 
			
		||||
ENDIF()
 | 
			
		||||
							
								
								
									
										38
									
								
								Software/BTLE/host/cmake/modules/FindUSB1.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								Software/BTLE/host/cmake/modules/FindUSB1.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
# - Try to find the freetype library
 | 
			
		||||
# Once done this defines
 | 
			
		||||
#
 | 
			
		||||
#  LIBUSB_FOUND - system has libusb
 | 
			
		||||
#  LIBUSB_INCLUDE_DIR - the libusb include directory
 | 
			
		||||
#  LIBUSB_LIBRARIES - Link these to use libusb
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2006, 2008  Laurent Montel, <montel@kde.org>
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use is allowed according to the terms of the BSD license.
 | 
			
		||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if (LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES)
 | 
			
		||||
 | 
			
		||||
  # in cache already
 | 
			
		||||
  set(LIBUSB_FOUND TRUE)
 | 
			
		||||
 | 
			
		||||
else (LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES)
 | 
			
		||||
  IF (NOT WIN32)
 | 
			
		||||
    # use pkg-config to get the directories and then use these values
 | 
			
		||||
    # in the FIND_PATH() and FIND_LIBRARY() calls
 | 
			
		||||
    find_package(PkgConfig)
 | 
			
		||||
    pkg_check_modules(PC_LIBUSB libusb-1.0)
 | 
			
		||||
  ENDIF(NOT WIN32)
 | 
			
		||||
 | 
			
		||||
  FIND_PATH(LIBUSB_INCLUDE_DIR libusb.h
 | 
			
		||||
    PATHS ${PC_LIBUSB_INCLUDEDIR} ${PC_LIBUSB_INCLUDE_DIRS})
 | 
			
		||||
 | 
			
		||||
  FIND_LIBRARY(LIBUSB_LIBRARIES NAMES usb-1.0
 | 
			
		||||
    PATHS ${PC_LIBUSB_LIBDIR} ${PC_LIBUSB_LIBRARY_DIRS})
 | 
			
		||||
 | 
			
		||||
  include(FindPackageHandleStandardArgs)
 | 
			
		||||
  FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBUSB DEFAULT_MSG LIBUSB_LIBRARIES LIBUSB_INCLUDE_DIR)
 | 
			
		||||
 | 
			
		||||
  MARK_AS_ADVANCED(LIBUSB_INCLUDE_DIR LIBUSB_LIBRARIES)
 | 
			
		||||
 | 
			
		||||
endif (LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES)
 | 
			
		||||
							
								
								
									
										17
									
								
								Software/BTLE/matlab/get_number.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								Software/BTLE/matlab/get_number.m
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
function a = get_number
 | 
			
		||||
a = [0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 1 0 1 1 1 1 1 0 1 ...
 | 
			
		||||
1 0 0 1 0 0 0 1 0 1 1 1 0 0 0 1 1 1 1 1 0 0 1 1 ...
 | 
			
		||||
1 1 1 0 1 1 1 1 1 0 0 0 1 0 1 0 0 0 1 0 0 1 0 1 ...
 | 
			
		||||
1 0 0 1 1 1 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 1 1 0 ...
 | 
			
		||||
1 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 0 0 0 1 1 1 0 0 ...
 | 
			
		||||
0 1 0 0 1 0 1 0 1 0 0 1 0 0 0 0 1 1 1 0 0 1 0 1 ...
 | 
			
		||||
0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 1 1 1 0 1 1 0 1 1 ...
 | 
			
		||||
0 1 1 0 0 1 1 0 0 0 0 1 1 0 1 1 0 1 0 1 1 0 0 1 ...
 | 
			
		||||
1 0 0 1 0 1 1 1 1 1 0 1 0 1 0 1 1 1 0 0 0 1 1 0 ...
 | 
			
		||||
1 1 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 0 0 1 0 0 0 1 ...
 | 
			
		||||
0 1 1 0 1 1 0 1 0 1 1 1 1 1 0 0 0 1 1 0 1 0 0 0 ...
 | 
			
		||||
1 0 1 1 1 1 1 1 1 1 0 1 1 0 0 0 1 0 1 1 0 0 1 1 ...
 | 
			
		||||
0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 1 1 ...
 | 
			
		||||
1 0 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0 0 1 1 1 1 1 1 ...
 | 
			
		||||
1 0 0 1 0 0 0 1 1 1 0 1 0 1 0 0 1 0 1 1 1 0 1 1 ...
 | 
			
		||||
1 1 0 0 1 0 1 1 1 1 0 0 0 1 1 0 ];
 | 
			
		||||
							
								
								
									
										128
									
								
								Software/BTLE/matlab/get_number1.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								Software/BTLE/matlab/get_number1.m
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,128 @@
 | 
			
		||||
function a = get_number1
 | 
			
		||||
a = [127 0 127 0 127 0 127 0 127 0 127 -2 127 -10 122 -35 105 -72 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 73 104 44 119 44 119 73 104 104 73 119 44 119 44 104 73 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -71 106 -25 125 25 125 71 106 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -106 -71 -125 -25 -125 25 ...
 | 
			
		||||
-106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 104 73 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 104 73 119 44 119 44 104 73 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 71 -106 25 -125 -25 -125 -71 -106 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 71 -106 25 -125 -25 -125 -71 -106 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 73 104 44 119 44 119 73 104 104 73 119 44 119 44 104 73 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 104 73 119 44 119 44 104 73 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 104 73 119 44 119 44 104 73 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 71 106 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 106 71 125 25 125 -25 106 -71 71 -106 25 -125 -25 -125 -71 -106 -106 -71 -125 -25 -125 25 ...
 | 
			
		||||
-106 71 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -104 -73 -119 -44 -119 -44 -104 -73 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 73 104 44 119 44 119 73 104 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 106 -71 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 -104 73 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 71 -106 25 -125 -25 -125 -71 -106 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 71 106 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 73 104 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -104 73 -119 44 -119 44 -104 73 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 71 106 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 104 73 119 44 119 44 104 73 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -104 -73 -119 -44 -119 -44 -104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 73 104 44 119 44 119 73 104 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 106 71 125 25 125 -25 106 -71 71 -106 25 -125 -25 -125 -71 -106 -106 -71 -125 -25 -125 25 ...
 | 
			
		||||
-106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 104 73 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 106 71 125 25 125 -25 106 -71 71 -106 25 -125 -25 -125 -71 -106 -106 -71 -125 -25 -125 25 ...
 | 
			
		||||
-106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 104 73 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 73 104 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -104 -73 -119 -44 -119 -44 -104 -73 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 104 73 119 44 119 44 104 73 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 71 -106 25 -125 -25 -125 -71 -106 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 -104 -73 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 73 104 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 -104 -73 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -71 106 -25 125 25 125 71 106 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 73 104 105 72 122 35 127 10 ...
 | 
			
		||||
127 2 127 0 127 0 127 0 127 0 127 0 127 0 127 0 ];
 | 
			
		||||
							
								
								
									
										31
									
								
								Software/BTLE/matlab/get_signal_from_hackrf_bin.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								Software/BTLE/matlab/get_signal_from_hackrf_bin.m
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
function [s, status] = get_signal_from_hackrf_bin(filename, num_sample_read)
 | 
			
		||||
s = int8(-1);
 | 
			
		||||
status = false;
 | 
			
		||||
 | 
			
		||||
fid = fopen(filename);
 | 
			
		||||
 | 
			
		||||
if fid == -1
 | 
			
		||||
    disp('get_signal_from_hackrf_bin: Can not open file!');
 | 
			
		||||
    status = true;
 | 
			
		||||
    return;
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
[s, count] = fread(fid, num_sample_read*2, 'int8');
 | 
			
		||||
fclose(fid);
 | 
			
		||||
 | 
			
		||||
% s = int8(s);
 | 
			
		||||
 | 
			
		||||
if num_sample_read~=inf && count ~= (num_sample_read*2)
 | 
			
		||||
    disp('get_signal_from_hackrf_bin: No enough samples in the file!');
 | 
			
		||||
    status = true;
 | 
			
		||||
    return;
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
% s = single( (s(1:2:end) + 1i.*s(2:2:end))./128 );
 | 
			
		||||
% s = (s(1:2:end) + 1i.*s(2:2:end))./128;
 | 
			
		||||
 | 
			
		||||
s = complex(s(1:2:end), s(2:2:end));
 | 
			
		||||
 | 
			
		||||
% len_s = length(s);
 | 
			
		||||
% 
 | 
			
		||||
% s = s((len_s/2)+1:end);
 | 
			
		||||
							
								
								
									
										32769
									
								
								Software/BTLE/matlab/sample_iq_4msps.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32769
									
								
								Software/BTLE/matlab/sample_iq_4msps.txt
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										18
									
								
								Software/BTLE/matlab/save_int_var_for_c.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								Software/BTLE/matlab/save_int_var_for_c.m
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
function save_int_var_for_c(a, type_and_name, filename, access_mode)
 | 
			
		||||
  fid = fopen(filename, access_mode);
 | 
			
		||||
  if fid == -1
 | 
			
		||||
    disp(['save_var_for_c: fopen' filename ' failed!']);
 | 
			
		||||
    return;
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  fprintf(fid, [type_and_name, '[%d] = {'], length(a) );
 | 
			
		||||
  for i = 1 : length(a)
 | 
			
		||||
    if mod(i-1, 24) == 0
 | 
			
		||||
      fprintf(fid, '\n');
 | 
			
		||||
    end
 | 
			
		||||
    fprintf(fid, '%d, ', a(i));
 | 
			
		||||
  end
 | 
			
		||||
  fprintf(fid, '};\n\n');
 | 
			
		||||
  
 | 
			
		||||
  fclose(fid);
 | 
			
		||||
  
 | 
			
		||||
							
								
								
									
										22
									
								
								Software/BTLE/matlab/save_int_var_for_c_2d.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								Software/BTLE/matlab/save_int_var_for_c_2d.m
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
function save_int_var_for_c_2d(a, type_and_name, filename, access_mode)
 | 
			
		||||
  fid = fopen(filename, access_mode);
 | 
			
		||||
  if fid == -1
 | 
			
		||||
    disp(['save_int_var_for_c_2d: fopen' filename ' failed!']);
 | 
			
		||||
    return;
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  [num_row, num_col] = size(a);
 | 
			
		||||
  
 | 
			
		||||
  fprintf(fid, [type_and_name, '[%d][%d] = {'], num_row, num_col );
 | 
			
		||||
  for j = 1 : num_row
 | 
			
		||||
      fprintf(fid, '\n{');
 | 
			
		||||
      for i = 1 : num_col
 | 
			
		||||
        fprintf(fid, '%d, ', a(j,i));
 | 
			
		||||
      end
 | 
			
		||||
      fprintf(fid, '},');
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  fprintf(fid, '\n};\n\n');
 | 
			
		||||
  
 | 
			
		||||
  fclose(fid);
 | 
			
		||||
  
 | 
			
		||||
							
								
								
									
										45
									
								
								Software/BTLE/matlab/scramble_gen.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								Software/BTLE/matlab/scramble_gen.m
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
function a = scramble_gen(channel_number, num_bit, filename, varargin)
 | 
			
		||||
 | 
			
		||||
  bit_store = zeros(1, 7);
 | 
			
		||||
  bit_store_update = zeros(1, 7);
 | 
			
		||||
  
 | 
			
		||||
  channel_number_bin = dec2bin(channel_number, 6);
 | 
			
		||||
  
 | 
			
		||||
  bit_store(1) = 1;
 | 
			
		||||
  bit_store(2) = ( channel_number_bin(1) == '1' );
 | 
			
		||||
  bit_store(3) = ( channel_number_bin(2) == '1' );
 | 
			
		||||
  bit_store(4) = ( channel_number_bin(3) == '1' );
 | 
			
		||||
  bit_store(5) = ( channel_number_bin(4) == '1' );
 | 
			
		||||
  bit_store(6) = ( channel_number_bin(5) == '1' );
 | 
			
		||||
  bit_store(7) = ( channel_number_bin(6) == '1' );
 | 
			
		||||
  
 | 
			
		||||
  bit_seq = zeros(1, num_bit);
 | 
			
		||||
  for i = 1 : num_bit
 | 
			
		||||
    bit_seq(i) =  bit_store(7);
 | 
			
		||||
 | 
			
		||||
    bit_store_update(1) = bit_store(7);
 | 
			
		||||
 | 
			
		||||
    bit_store_update(2) = bit_store(1);
 | 
			
		||||
    bit_store_update(3) = bit_store(2);
 | 
			
		||||
    bit_store_update(4) = bit_store(3);
 | 
			
		||||
 | 
			
		||||
    bit_store_update(5) = mod(bit_store(4)+bit_store(7), 2);
 | 
			
		||||
 | 
			
		||||
    bit_store_update(6) = bit_store(5);
 | 
			
		||||
    bit_store_update(7) = bit_store(6);
 | 
			
		||||
 | 
			
		||||
    bit_store = bit_store_update;
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  a = zeros(1, num_bit/8);
 | 
			
		||||
  
 | 
			
		||||
  for i = 0 : 8 : num_bit-1
 | 
			
		||||
    idx = floor(i/8) + 1;
 | 
			
		||||
    a(idx) = bit_seq(i+1) + bit_seq(i+2)*2 + bit_seq(i+3)*4 + bit_seq(i+4)*8 + bit_seq(i+5)*16 + bit_seq(i+6)*32 + bit_seq(i+7)*64 + bit_seq(i+8)*128;
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  if nargin == 3
 | 
			
		||||
    save_int_var_for_c(a, ['const uint8_t const scramble_table_ch' num2str(channel_number)], filename, 'w');
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  
 | 
			
		||||
							
								
								
									
										333
									
								
								Software/BTLE/matlab/test_btle_rx.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										333
									
								
								Software/BTLE/matlab/test_btle_rx.m
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,333 @@
 | 
			
		||||
function test_btle_rx(channel_number, varargin)
 | 
			
		||||
sample_per_symbol = 4;
 | 
			
		||||
 | 
			
		||||
if nargin<=0 || nargin >2
 | 
			
		||||
    disp('Wrong number of input parameters!');
 | 
			
		||||
    return;
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if nargin == 2
 | 
			
		||||
% 'sample_iq_4msps.txt'
 | 
			
		||||
    filename = varargin{1};
 | 
			
		||||
    a = load(filename);
 | 
			
		||||
    a = a';
 | 
			
		||||
    a = a(:)';
 | 
			
		||||
%     a = a(2:end-1);
 | 
			
		||||
    a = a(1:2:end) + 1i.*a(2:2:end);
 | 
			
		||||
else
 | 
			
		||||
    symbol_rate = 1e6;
 | 
			
		||||
 | 
			
		||||
    sampling_rate = sample_per_symbol*symbol_rate;
 | 
			
		||||
    cap_time = 1; % in second
 | 
			
		||||
    
 | 
			
		||||
    num_samples = cap_time*sampling_rate;
 | 
			
		||||
    if channel_number == 39
 | 
			
		||||
        freq = 2480000000;
 | 
			
		||||
    elseif channel_number == 37
 | 
			
		||||
        freq = 2402000000;
 | 
			
		||||
    elseif channel_number == 38
 | 
			
		||||
        freq = 2426000000;
 | 
			
		||||
    elseif channel_number >=0 && channel_number <= 10
 | 
			
		||||
        freq = 2404000000 + channel_number*2000000;
 | 
			
		||||
    elseif channel_number >=11 && channel_number <= 36
 | 
			
		||||
        freq = 2428000000 + (channel_number-11)*2000000;
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    ant_gain = 0; % 0 turn off, 1 turn on
 | 
			
		||||
    lna_gain = 40; %0-40dB, 8dB steps
 | 
			
		||||
    vga_gain = 6; %0-62dB, 2dB steps
 | 
			
		||||
 | 
			
		||||
    cmd_str = ['hackrf_transfer -f ' num2str(freq) ' -a ' num2str(ant_gain) ' -l ' num2str(lna_gain) ' -g ' num2str(vga_gain) ' -s ' num2str(sampling_rate) ' -n ' num2str(num_samples) ' -b 1000000 -r hackrf_tmp_cap.bin'];
 | 
			
		||||
    
 | 
			
		||||
    delete hackrf_tmp_cap.bin;
 | 
			
		||||
    [status, cmd_out] = system(cmd_str, '-echo');
 | 
			
		||||
%     disp(cmd_out);
 | 
			
		||||
    if status == 0
 | 
			
		||||
        a = get_signal_from_hackrf_bin('hackrf_tmp_cap.bin', inf);
 | 
			
		||||
    else
 | 
			
		||||
        disp('Abnormal status! Return directly!');
 | 
			
		||||
        return;
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
pdu_type_str = {'ADV_IND', 'ADV_DIRECT_IND', 'ADV_NONCONN_IND', 'SCAN_REQ', 'SCAN_RSP', 'CONNECT_REQ', 'ADV_SCAN_IND', 'Reserved', 'Reserved', 'Reserved', 'Reserved', 'Reserved', 'Reserved', 'Reserved', 'Reserved', 'Reserved'};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
% subplot(3,1,1); plot(abs(a));
 | 
			
		||||
% subplot(3,1,2); plot(angle(a));
 | 
			
		||||
% subplot(3,1,3); plot(angle(a(2:end)./a(1:end-1)), 'r.-');
 | 
			
		||||
 | 
			
		||||
max_num_scramble_bits = (39 + 3)*8; % 39 is maximum pdu length in octets; 3 is the number of CRC post-fix octets.
 | 
			
		||||
scramble_bits = scramble_gen(channel_number, max_num_scramble_bits);
 | 
			
		||||
 | 
			
		||||
match_bit = de2bi(hex2dec('8E89BED6AA'), 40, 'right-msb');
 | 
			
		||||
num_pdu_header_bits = 16;
 | 
			
		||||
sp = 1;
 | 
			
		||||
disp('Start demodulation ...');
 | 
			
		||||
%plot(abs(a)); drawnow;
 | 
			
		||||
pkt_count = 0;
 | 
			
		||||
while 1
 | 
			
		||||
%     disp(' ');
 | 
			
		||||
    sp_new = search_unique_bits(a(sp:end), match_bit, sample_per_symbol);
 | 
			
		||||
    if sp_new == -1
 | 
			
		||||
        break;
 | 
			
		||||
    end
 | 
			
		||||
    disp(num2str(a(sp_new:(sp_new+7))));
 | 
			
		||||
    disp(num2str(sp + sp_new -1));
 | 
			
		||||
    sp = sp + sp_new -1 + length(match_bit)*sample_per_symbol;
 | 
			
		||||
    pkt_count = pkt_count + 1;
 | 
			
		||||
%     disp(['relative sp ' num2str(sp_new) ' absolute sp ' num2str(sp)]);
 | 
			
		||||
    
 | 
			
		||||
    % pdu header
 | 
			
		||||
    pdu_header_bits = demod_bits(a(sp:end), num_pdu_header_bits, sample_per_symbol);
 | 
			
		||||
    disp(num2str(a(sp:(sp+7))));
 | 
			
		||||
    pdu_header_bits = xor(pdu_header_bits, scramble_bits(1:num_pdu_header_bits));
 | 
			
		||||
    [pdu_type, tx_add, rx_add, payload_len] = parse_adv_pdu_header_bits(pdu_header_bits);
 | 
			
		||||
    sp = sp + num_pdu_header_bits*sample_per_symbol;
 | 
			
		||||
    
 | 
			
		||||
    if payload_len<6 || payload_len>37
 | 
			
		||||
        disp(['Pkt' num2str(pkt_count) ' Ch' num2str(channel_number) ' AccessAddr8E89BED6 ADV_PDU_Type' num2str(pdu_type) '(' pdu_type_str{pdu_type+1} ') TxAdd' num2str(tx_add) ' RxAdd' num2str(rx_add) ' PayloadLen' num2str(payload_len)]);
 | 
			
		||||
        continue;
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    % pdu payload + 3 crc octets
 | 
			
		||||
    num_pdu_payload_crc_bits = (payload_len+3)*8;
 | 
			
		||||
    pdu_payload_crc_bits = demod_bits(a(sp:end), num_pdu_payload_crc_bits, sample_per_symbol);
 | 
			
		||||
    pdu_payload_crc_bits = xor(pdu_payload_crc_bits, scramble_bits( (num_pdu_header_bits+1) : (num_pdu_header_bits+num_pdu_payload_crc_bits)));
 | 
			
		||||
 | 
			
		||||
    payload_parse_result_str = parse_adv_pdu_payload(pdu_payload_crc_bits(1:(end-3*8)), pdu_type);
 | 
			
		||||
    
 | 
			
		||||
    crc_24bits = ble_crc([pdu_header_bits pdu_payload_crc_bits(1:(end-3*8))], '555555');
 | 
			
		||||
%     disp(num2str(crc_24bits));
 | 
			
		||||
%     disp(num2str(pdu_payload_crc_bits((end-3*8+1):end)));
 | 
			
		||||
    if sum(crc_24bits==pdu_payload_crc_bits((end-3*8+1):end)) == 24
 | 
			
		||||
        crc_str = 'CRC:OK';
 | 
			
		||||
    else
 | 
			
		||||
        crc_str = 'CRC:Bad';
 | 
			
		||||
    end
 | 
			
		||||
    disp(['Pkt' num2str(pkt_count) ' Ch' num2str(channel_number) ' AccessAddr8E89BED6 ADV_PDU_Type' num2str(pdu_type) '(' pdu_type_str{pdu_type+1} ') TxAdd' num2str(tx_add) ' RxAdd' num2str(rx_add) ' PayloadLen' num2str(payload_len) ' ' payload_parse_result_str ' ' crc_str]);
 | 
			
		||||
    
 | 
			
		||||
    sp = sp + num_pdu_payload_crc_bits*sample_per_symbol;
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function bytes_str_out = reorder_bytes_str(bytes_str_in)
 | 
			
		||||
bytes_str_out = vec2mat(bytes_str_in, 2);
 | 
			
		||||
bytes_str_out = bytes_str_out(end:-1:1,:);
 | 
			
		||||
bytes_str_out = bytes_str_out.';
 | 
			
		||||
bytes_str_out = bytes_str_out(:).';
 | 
			
		||||
 | 
			
		||||
function payload_parse_result_str = parse_adv_pdu_payload(payload_bits, pdu_type)
 | 
			
		||||
if length(payload_bits)<6*8
 | 
			
		||||
    payload_parse_result_str = ['Payload Too Short (only ' num2str(length(payload_bits)) ' bits)'];
 | 
			
		||||
    return;
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
tmp_bits = vec2mat(payload_bits, 8);
 | 
			
		||||
payload_bytes = dec2hex(bi2de(tmp_bits, 'right-msb'), 2);
 | 
			
		||||
payload_bytes = payload_bytes.';
 | 
			
		||||
payload_bytes = payload_bytes(:).';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if pdu_type == 0 || pdu_type == 2 || pdu_type == 6
 | 
			
		||||
    AdvA = reorder_bytes_str( payload_bytes(1 : (2*6)) );
 | 
			
		||||
    AdvData = payload_bytes((2*6+1):end);
 | 
			
		||||
    payload_parse_result_str = ['AdvA:' AdvA ' AdvData:' AdvData];
 | 
			
		||||
elseif pdu_type == 1
 | 
			
		||||
    AdvA = reorder_bytes_str( payload_bytes(1 : (2*6)) );
 | 
			
		||||
    InitA = reorder_bytes_str( payload_bytes((2*6+1):end) );
 | 
			
		||||
    payload_parse_result_str = ['AdvA:' AdvA ' InitA:' InitA];
 | 
			
		||||
elseif pdu_type == 3 % SCAN_REQ
 | 
			
		||||
    ScanA = reorder_bytes_str( payload_bytes(1 : (2*6)) );
 | 
			
		||||
    AdvA = reorder_bytes_str( payload_bytes((2*6+1):end) );
 | 
			
		||||
    payload_parse_result_str = ['ScanA:' ScanA ' AdvA:' AdvA];
 | 
			
		||||
elseif pdu_type == 4 % SCAN_RSP
 | 
			
		||||
    AdvA = reorder_bytes_str( payload_bytes(1 : (2*6)) );
 | 
			
		||||
    ScanRspData = payload_bytes((2*6+1):end);
 | 
			
		||||
    payload_parse_result_str = ['AdvA:' AdvA ' ScanRspData:' ScanRspData];
 | 
			
		||||
elseif pdu_type == 5 % CONNECT_REQ
 | 
			
		||||
    if length(payload_bits) ~= 34*8
 | 
			
		||||
        payload_parse_result_str = ['Payload Too Short (only ' num2str(length(payload_bits)) ' bits)'];
 | 
			
		||||
        return;
 | 
			
		||||
    end
 | 
			
		||||
    InitA = reorder_bytes_str( payload_bytes(1 : (2*6)) );
 | 
			
		||||
    AdvA = reorder_bytes_str( payload_bytes((2*6+1):(2*6+2*6)) );
 | 
			
		||||
    AA = reorder_bytes_str( payload_bytes((2*6+2*6+1):(2*6+2*6+2*4)) );
 | 
			
		||||
    CRCInit = payload_bytes((2*6+2*6+2*4+1):(2*6+2*6+2*4+2*3));
 | 
			
		||||
    WinSize = payload_bytes((2*6+2*6+2*4+2*3+1):(2*6+2*6+2*4+2*3+2*1));
 | 
			
		||||
    WinOffset = reorder_bytes_str( payload_bytes((2*6+2*6+2*4+2*3+2*1+1):(2*6+2*6+2*4+2*3+2*1+2*2)) );
 | 
			
		||||
    Interval = reorder_bytes_str( payload_bytes((2*6+2*6+2*4+2*3+2*1+2*2+1):(2*6+2*6+2*4+2*3+2*1+2*2+2*2)) );
 | 
			
		||||
    Latency = reorder_bytes_str( payload_bytes((2*6+2*6+2*4+2*3+2*1+2*2+2*2+1):(2*6+2*6+2*4+2*3+2*1+2*2+2*2+2*2)) );
 | 
			
		||||
    Timeout = reorder_bytes_str( payload_bytes((2*6+2*6+2*4+2*3+2*1+2*2+2*2+2*2+1):(2*6+2*6+2*4+2*3+2*1+2*2+2*2+2*2+2*2)) );
 | 
			
		||||
    ChM = reorder_bytes_str( payload_bytes((2*6+2*6+2*4+2*3+2*1+2*2+2*2+2*2+2*2+1):(2*6+2*6+2*4+2*3+2*1+2*2+2*2+2*2+2*2+2*5)) );
 | 
			
		||||
    tmp_bits = payload_bits((end-7) : end);
 | 
			
		||||
    Hop = num2str( bi2de(tmp_bits(1:5), 'right-msb') );
 | 
			
		||||
    SCA = num2str( bi2de(tmp_bits(6:end), 'right-msb') );
 | 
			
		||||
    payload_parse_result_str = ['InitA:' InitA ' AdvA:' AdvA ...
 | 
			
		||||
                                ' AA:' AA ...
 | 
			
		||||
                                ' CRCInit:' CRCInit ... 
 | 
			
		||||
                                ' WinSize:' WinSize ...
 | 
			
		||||
                                ' WinOffset:' WinOffset ...
 | 
			
		||||
                                ' Interval:' Interval ...
 | 
			
		||||
                                ' Latency:' Latency ...
 | 
			
		||||
                                ' Timeout:' Timeout ...
 | 
			
		||||
                                ' ChM:' ChM ...
 | 
			
		||||
                                ' Hop:' Hop ...
 | 
			
		||||
                                ' SCA:' SCA];
 | 
			
		||||
else
 | 
			
		||||
    payload_parse_result_str = 'Reserved PDU type';
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function reg_bits = ble_crc(pdu, init_reg_bits)
 | 
			
		||||
 | 
			
		||||
reg_bits = de2bi(hex2dec(init_reg_bits), 24, 'right-msb');
 | 
			
		||||
for i = 1 : length(pdu)
 | 
			
		||||
    reg_bits = LFSR_crc(reg_bits, pdu(i));
 | 
			
		||||
end
 | 
			
		||||
reg_bits = reg_bits(end:-1:1);
 | 
			
		||||
 | 
			
		||||
function [seq] = LFSR_crc(old_seq, pdu_bit)
 | 
			
		||||
proc_bit = xor(old_seq(24), pdu_bit);
 | 
			
		||||
 | 
			
		||||
seq(1) = proc_bit;
 | 
			
		||||
seq(2) = xor(old_seq(1), proc_bit);
 | 
			
		||||
seq(3) = old_seq(2);
 | 
			
		||||
seq(4) = xor(old_seq(3), proc_bit);
 | 
			
		||||
seq(5) = xor(old_seq(4), proc_bit);
 | 
			
		||||
seq(6) = old_seq(5);
 | 
			
		||||
seq(7) = xor(old_seq(6), proc_bit);
 | 
			
		||||
seq(8:9) = old_seq(7:8);
 | 
			
		||||
seq(10) = xor(old_seq(9), proc_bit);
 | 
			
		||||
seq(11) = xor(old_seq(10), proc_bit);
 | 
			
		||||
seq(12:24) = old_seq(11:23);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function scramble_bits = scramble_gen(channel_number, num_bit)
 | 
			
		||||
 | 
			
		||||
bit_store = zeros(1, 7);
 | 
			
		||||
bit_store_update = zeros(1, 7);
 | 
			
		||||
 | 
			
		||||
% channel_number_bin = dec2bin(channel_number, 6);
 | 
			
		||||
% 
 | 
			
		||||
% bit_store(1) = 1;
 | 
			
		||||
% bit_store(2) = ( channel_number_bin(1) == '1' );
 | 
			
		||||
% bit_store(3) = ( channel_number_bin(2) == '1' );
 | 
			
		||||
% bit_store(4) = ( channel_number_bin(3) == '1' );
 | 
			
		||||
% bit_store(5) = ( channel_number_bin(4) == '1' );
 | 
			
		||||
% bit_store(6) = ( channel_number_bin(5) == '1' );
 | 
			
		||||
% bit_store(7) = ( channel_number_bin(6) == '1' );
 | 
			
		||||
 | 
			
		||||
channel_number_bin = de2bi(channel_number, 6, 'left-msb');
 | 
			
		||||
 | 
			
		||||
bit_store(1) = 1;
 | 
			
		||||
bit_store(2:7) = channel_number_bin;
 | 
			
		||||
 | 
			
		||||
bit_seq = zeros(1, num_bit);
 | 
			
		||||
for i = 1 : num_bit
 | 
			
		||||
    bit_seq(i) =  bit_store(7);
 | 
			
		||||
 | 
			
		||||
    bit_store_update(1) = bit_store(7);
 | 
			
		||||
 | 
			
		||||
    bit_store_update(2) = bit_store(1);
 | 
			
		||||
    bit_store_update(3) = bit_store(2);
 | 
			
		||||
    bit_store_update(4) = bit_store(3);
 | 
			
		||||
 | 
			
		||||
    bit_store_update(5) = mod(bit_store(4)+bit_store(7), 2);
 | 
			
		||||
 | 
			
		||||
    bit_store_update(6) = bit_store(5);
 | 
			
		||||
    bit_store_update(7) = bit_store(6);
 | 
			
		||||
 | 
			
		||||
    bit_store = bit_store_update;
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
scramble_bits = bit_seq;
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
function [pdu_type, tx_add, rx_add, payload_len] = parse_adv_pdu_header_bits(bits)
 | 
			
		||||
% pdu_type_str = {'ADV_IND', 'ADV_DIRECT_IND', 'ADV_NONCONN_IND', 'SCAN_REQ', 'SCAN_RSP', 'CONNECT_REQ', 'ADV_SCAN_IND', 'Reserved', 'Reserved', 'Reserved', 'Reserved', 'Reserved', 'Reserved', 'Reserved', 'Reserved'};
 | 
			
		||||
pdu_type = bi2de(bits(1:4), 'right-msb');
 | 
			
		||||
% disp(['   PDU Type: ' pdu_type_str{pdu_type+1}]);
 | 
			
		||||
 | 
			
		||||
tx_add = bits(7);
 | 
			
		||||
% disp(['     Tx Add: ' num2str(tx_add)]);
 | 
			
		||||
 | 
			
		||||
rx_add = bits(8);
 | 
			
		||||
% disp(['     Rx Add: ' num2str(rx_add)]);
 | 
			
		||||
 | 
			
		||||
payload_len = bi2de(bits(9:14), 'right-msb');
 | 
			
		||||
% disp(['Payload Len: ' num2str(payload_len)]);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function bits = demod_bits(a, num_bits, sample_per_symbol)
 | 
			
		||||
 | 
			
		||||
bits = zeros(1, num_bits);
 | 
			
		||||
k = 1;
 | 
			
		||||
for i = 1 : sample_per_symbol : (1 + (num_bits-1)*sample_per_symbol)
 | 
			
		||||
    I0 = real(a(i));
 | 
			
		||||
    Q0 = imag(a(i));
 | 
			
		||||
    I1 = real(a(i+1));
 | 
			
		||||
    Q1 = imag(a(i+1));
 | 
			
		||||
 | 
			
		||||
    if (I0*Q1 - I1*Q0) > 0
 | 
			
		||||
        bits(k) = 1;
 | 
			
		||||
    else
 | 
			
		||||
        bits(k) = 0;
 | 
			
		||||
    end
 | 
			
		||||
    k = k + 1;
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function sp = search_unique_bits(a, match_bit, sample_per_symbol)
 | 
			
		||||
 | 
			
		||||
demod_buf_len = length(match_bit); % in bits
 | 
			
		||||
demod_buf_offset = 0;
 | 
			
		||||
 | 
			
		||||
demod_buf = zeros(sample_per_symbol, demod_buf_len);
 | 
			
		||||
i = 1;
 | 
			
		||||
while 1
 | 
			
		||||
    
 | 
			
		||||
    sp = mod(demod_buf_offset-demod_buf_len+1, demod_buf_len);
 | 
			
		||||
    
 | 
			
		||||
    for j = 1 : sample_per_symbol
 | 
			
		||||
        I0 = real(a(i+j-1));
 | 
			
		||||
        Q0 = imag(a(i+j-1));
 | 
			
		||||
        I1 = real(a(i+j-1+1));
 | 
			
		||||
        Q1 = imag(a(i+j-1+1));
 | 
			
		||||
 | 
			
		||||
        if (I0*Q1 - I1*Q0) > 0
 | 
			
		||||
            demod_buf(j, demod_buf_offset+1) = 1;
 | 
			
		||||
        else
 | 
			
		||||
            demod_buf(j, demod_buf_offset+1) = 0;
 | 
			
		||||
        end
 | 
			
		||||
        
 | 
			
		||||
        k = sp;
 | 
			
		||||
        unequal_flag = 0;
 | 
			
		||||
        for p = 1 : demod_buf_len
 | 
			
		||||
            if demod_buf(j, k+1) ~= match_bit(p);
 | 
			
		||||
                unequal_flag = 1;
 | 
			
		||||
                break;
 | 
			
		||||
            end
 | 
			
		||||
            k = mod(k + 1, demod_buf_len);
 | 
			
		||||
        end
 | 
			
		||||
        
 | 
			
		||||
        if unequal_flag==0
 | 
			
		||||
            break;
 | 
			
		||||
        end
 | 
			
		||||
        
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    if unequal_flag==0
 | 
			
		||||
        sp = i+j-1-(demod_buf_len-1)*sample_per_symbol;
 | 
			
		||||
%         disp(num2str(sp));
 | 
			
		||||
        return;
 | 
			
		||||
    end 
 | 
			
		||||
    
 | 
			
		||||
    i = i + sample_per_symbol;
 | 
			
		||||
    if (i+sample_per_symbol) > length(a)
 | 
			
		||||
        break;
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    demod_buf_offset = mod(demod_buf_offset+1, demod_buf_len);
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
sp = -1;
 | 
			
		||||
phase = -1;
 | 
			
		||||
							
								
								
									
										120
									
								
								Software/BTLE/matlab/test_fixed_point.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								Software/BTLE/matlab/test_fixed_point.m
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,120 @@
 | 
			
		||||
clear all;
 | 
			
		||||
close all;
 | 
			
		||||
 | 
			
		||||
% original float point version
 | 
			
		||||
gauss_coef = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.231548e-14, 2.007605e-11, 7.561773e-09, 1.197935e-06, 8.050684e-05, 2.326833e-03, 2.959908e-02, 1.727474e-01, 4.999195e-01, 8.249246e-01, 9.408018e-01, 8.249246e-01, 4.999195e-01, 1.727474e-01, 2.959908e-02, 2.326833e-03, 8.050684e-05, 1.197935e-06, 7.561773e-09, 2.007605e-11, 2.231548e-14, 0];
 | 
			
		||||
%plot(gauss_coef, 'r+-'); axis([0 length(gauss_coef) 0 0.0001]);
 | 
			
		||||
 | 
			
		||||
% short it to 16 points:
 | 
			
		||||
gauss_coef = [7.561773e-09, 1.197935e-06, 8.050684e-05, 2.326833e-03, 2.959908e-02, 1.727474e-01, 4.999195e-01, 8.249246e-01, 9.408018e-01, 8.249246e-01, 4.999195e-01, 1.727474e-01, 2.959908e-02, 2.326833e-03, 8.050684e-05, 1.197935e-06];
 | 
			
		||||
%plot(gauss_coef, 'r+-');
 | 
			
		||||
 | 
			
		||||
SAMPLE_PER_SYMBOL = 4;
 | 
			
		||||
LEN_GAUSS_FILTER = length(gauss_coef)/SAMPLE_PER_SYMBOL;
 | 
			
		||||
MAX_NUM_PHY_BYTE  = 47;
 | 
			
		||||
MAX_NUM_PHY_SAMPLE = ((MAX_NUM_PHY_BYTE*8*SAMPLE_PER_SYMBOL)+(LEN_GAUSS_FILTER*SAMPLE_PER_SYMBOL));
 | 
			
		||||
MOD_IDX = 0.5;
 | 
			
		||||
AMPLITUDE = 127;
 | 
			
		||||
tmp_phy_bit_over_sampling = zeros(1, MAX_NUM_PHY_SAMPLE + 2*LEN_GAUSS_FILTER*SAMPLE_PER_SYMBOL);
 | 
			
		||||
tmp_phy_bit_over_sampling = zeros(1, MAX_NUM_PHY_SAMPLE);
 | 
			
		||||
 | 
			
		||||
num_bit = MAX_NUM_PHY_BYTE*8;
 | 
			
		||||
%bit = round(rand(1, num_bit));
 | 
			
		||||
bit = get_number;
 | 
			
		||||
num_bit_oversample = num_bit*SAMPLE_PER_SYMBOL;
 | 
			
		||||
len_gauss_oversample = LEN_GAUSS_FILTER*SAMPLE_PER_SYMBOL;
 | 
			
		||||
num_sample = num_bit_oversample + len_gauss_oversample;
 | 
			
		||||
 | 
			
		||||
  pre_len = len_gauss_oversample-1;
 | 
			
		||||
  tmp_phy_bit_over_sampling(1:pre_len) = 0.0;
 | 
			
		||||
  
 | 
			
		||||
  post_sp = num_bit_oversample + pre_len + 1;
 | 
			
		||||
  post_ep = post_sp + pre_len - 1;
 | 
			
		||||
  tmp_phy_bit_over_sampling(post_sp:post_ep) = 0.0;
 | 
			
		||||
 | 
			
		||||
  tmp_phy_bit_over_sampling((pre_len+1):(pre_len+num_bit_oversample)) = 0;
 | 
			
		||||
  tmp_phy_bit_over_sampling((pre_len+1):SAMPLE_PER_SYMBOL:(pre_len+num_bit_oversample)) = bit.*2 - 1;
 | 
			
		||||
 | 
			
		||||
  % len_conv_result = length(tmp_phy_bit_over_sampling) - len_gauss_oversample + 1
 | 
			
		||||
  % = post_ep - len_gauss_oversample + 1
 | 
			
		||||
  % = num_bit_oversample + pre_len + 1 + pre_len - 1  - len_gauss_oversample + 1
 | 
			
		||||
  % = num_bit_oversample + 2*(len_gauss_oversample-1)  - len_gauss_oversample + 1
 | 
			
		||||
  % = num_bit_oversample + len_gauss_oversample - 1
 | 
			
		||||
  len_conv_result = num_sample - 1;
 | 
			
		||||
 | 
			
		||||
% -------------------------------------- float point reference -----------------------------------------------
 | 
			
		||||
  for i = 1 : len_conv_result
 | 
			
		||||
    acc = 0;
 | 
			
		||||
    for j = 1 : len_gauss_oversample
 | 
			
		||||
      acc = acc + gauss_coef(len_gauss_oversample-j+1)*tmp_phy_bit_over_sampling(i+j-1); %num_sample - 1+len_gauss_oversample-1= length(tmp_phy_bit_over_sampling)
 | 
			
		||||
    end
 | 
			
		||||
    tmp_phy_bit_over_sampling1(i) = acc;
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  tmp = 0;
 | 
			
		||||
  sample = zeros(1, 2*num_sample);
 | 
			
		||||
  sample(1) = round( cos(tmp)*AMPLITUDE );
 | 
			
		||||
  sample(2) = round( sin(tmp)*AMPLITUDE );
 | 
			
		||||
  for i=2:num_sample
 | 
			
		||||
    tmp = tmp + (pi*MOD_IDX)*tmp_phy_bit_over_sampling1(i-1)/(SAMPLE_PER_SYMBOL);
 | 
			
		||||
    sample((i-1)*2 + 1) = round( cos(tmp)*AMPLITUDE );
 | 
			
		||||
    sample((i-1)*2 + 2) = round( sin(tmp)*AMPLITUDE );
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
% -------------------------------------------------- fixed point ------------- -----------------------------------------------
 | 
			
		||||
tmp_phy_bit_over_sampling_int16 = int16(tmp_phy_bit_over_sampling);
 | 
			
		||||
tmp_phy_bit_over_sampling1_int16 = int16(tmp_phy_bit_over_sampling1);
 | 
			
		||||
gauss_coef_scale = 128;
 | 
			
		||||
cos_table_size = 1024; % 0 to 2PI
 | 
			
		||||
gauss_coef_int16 = int16(gauss_coef.*gauss_coef_scale);
 | 
			
		||||
 | 
			
		||||
  cos_table_int8 = int8(zeros(1, cos_table_size));
 | 
			
		||||
  sin_table_int8 = int8(zeros(1, cos_table_size));
 | 
			
		||||
  for i=1:cos_table_size
 | 
			
		||||
    cos_table_int8(i) = int8(cos(2*pi*(i-1)/cos_table_size)*127);
 | 
			
		||||
    sin_table_int8(i) = int8(sin(2*pi*(i-1)/cos_table_size)*127);
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  save_int_var_for_c(gauss_coef_int16./2, 'const int8_t const gauss_coef_int8', 'gauss_cos_sin_table.h', 'w');
 | 
			
		||||
  save_int_var_for_c(cos_table_int8, 'const int8_t const cos_table_int8', 'gauss_cos_sin_table.h', 'a');
 | 
			
		||||
  save_int_var_for_c(sin_table_int8, 'const int8_t const sin_table_int8', 'gauss_cos_sin_table.h', 'a');
 | 
			
		||||
  
 | 
			
		||||
  for i = 1 : len_conv_result
 | 
			
		||||
    acc_int16 = int16(0);
 | 
			
		||||
    for j = 1 : len_gauss_oversample
 | 
			
		||||
      acc_int16 = acc_int16 + gauss_coef_int16(len_gauss_oversample-j+1)*tmp_phy_bit_over_sampling_int16(i+j-1); 
 | 
			
		||||
    end
 | 
			
		||||
    tmp_phy_bit_over_sampling1_int16(i) = acc_int16;
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
%figure; 
 | 
			
		||||
%subplot(2,1,1); plot(tmp_phy_bit_over_sampling1_int16); hold on;
 | 
			
		||||
%plot(tmp_phy_bit_over_sampling1.*128, 'r.');
 | 
			
		||||
%subplot(2,1,2); plot(abs(double(tmp_phy_bit_over_sampling1_int16)-tmp_phy_bit_over_sampling1.*128));
 | 
			
		||||
 | 
			
		||||
phase_per_step = 2*pi/cos_table_size;
 | 
			
		||||
phase_delta_orig = ((pi*MOD_IDX)/SAMPLE_PER_SYMBOL)/gauss_coef_scale;
 | 
			
		||||
enlarge_scale = phase_per_step/phase_delta_orig
 | 
			
		||||
if enlarge_scale <1
 | 
			
		||||
  tmp_phy_bit_over_sampling1_int16 = tmp_phy_bit_over_sampling1_int16.*int16(1/enlarge_scale);
 | 
			
		||||
else
 | 
			
		||||
  tmp_phy_bit_over_sampling1_int16 = tmp_phy_bit_over_sampling1_int16./int16(enlarge_scale);
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
  tmp_int16 = int16(0);
 | 
			
		||||
  sample_int16 = int8(zeros(1, 2*num_sample));
 | 
			
		||||
  sample_int16(1) = cos_table_int8(tmp_int16+1);
 | 
			
		||||
  sample_int16(2) = sin_table_int8(tmp_int16+1);
 | 
			
		||||
  for i=2:num_sample
 | 
			
		||||
    tmp_int16 = tmp_int16 + tmp_phy_bit_over_sampling1_int16(i-1);
 | 
			
		||||
    tmp_int16 = mod(tmp_int16, int16(cos_table_size));
 | 
			
		||||
    sample_int16((i-1)*2 + 1) = cos_table_int8(tmp_int16+1);
 | 
			
		||||
    sample_int16((i-1)*2 + 2) = sin_table_int8(tmp_int16+1);
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
figure(1);
 | 
			
		||||
subplot(2,1,1); plot(sample_int16);
 | 
			
		||||
ref_sample = get_number1;
 | 
			
		||||
%ref_sample = sample;
 | 
			
		||||
hold on; plot(ref_sample, 'r.');
 | 
			
		||||
subplot(2,1,2); plot((double(sample_int16)-ref_sample));
 | 
			
		||||
							
								
								
									
										68
									
								
								Software/BTLE/matlab/test_float_point.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								Software/BTLE/matlab/test_float_point.m
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
clear all;
 | 
			
		||||
close all;
 | 
			
		||||
 | 
			
		||||
% original float point version
 | 
			
		||||
gauss_coef = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.231548e-14, 2.007605e-11, 7.561773e-09, 1.197935e-06, 8.050684e-05, 2.326833e-03, 2.959908e-02, 1.727474e-01, 4.999195e-01, 8.249246e-01, 9.408018e-01, 8.249246e-01, 4.999195e-01, 1.727474e-01, 2.959908e-02, 2.326833e-03, 8.050684e-05, 1.197935e-06, 7.561773e-09, 2.007605e-11, 2.231548e-14, 0];
 | 
			
		||||
%plot(gauss_coef, 'r+-'); axis([0 length(gauss_coef) 0 0.0001]);
 | 
			
		||||
 | 
			
		||||
% short it to 16 points:
 | 
			
		||||
gauss_coef = [7.561773e-09, 1.197935e-06, 8.050684e-05, 2.326833e-03, 2.959908e-02, 1.727474e-01, 4.999195e-01, 8.249246e-01, 9.408018e-01, 8.249246e-01, 4.999195e-01, 1.727474e-01, 2.959908e-02, 2.326833e-03, 8.050684e-05, 1.197935e-06];
 | 
			
		||||
%plot(gauss_coef, 'r+-');
 | 
			
		||||
 | 
			
		||||
SAMPLE_PER_SYMBOL = 4;
 | 
			
		||||
LEN_GAUSS_FILTER = length(gauss_coef)/SAMPLE_PER_SYMBOL;
 | 
			
		||||
MAX_NUM_PHY_BYTE  = 47;
 | 
			
		||||
MAX_NUM_PHY_SAMPLE = ((MAX_NUM_PHY_BYTE*8*SAMPLE_PER_SYMBOL)+(LEN_GAUSS_FILTER*SAMPLE_PER_SYMBOL));
 | 
			
		||||
MOD_IDX = 0.5;
 | 
			
		||||
AMPLITUDE = 127;
 | 
			
		||||
tmp_phy_bit_over_sampling = zeros(1, MAX_NUM_PHY_SAMPLE + 2*LEN_GAUSS_FILTER*SAMPLE_PER_SYMBOL);
 | 
			
		||||
tmp_phy_bit_over_sampling = zeros(1, MAX_NUM_PHY_SAMPLE);
 | 
			
		||||
 | 
			
		||||
num_bit = MAX_NUM_PHY_BYTE*8;
 | 
			
		||||
%bit = round(rand(1, num_bit));
 | 
			
		||||
bit = get_number;
 | 
			
		||||
num_bit_oversample = num_bit*SAMPLE_PER_SYMBOL;
 | 
			
		||||
len_gauss_oversample = LEN_GAUSS_FILTER*SAMPLE_PER_SYMBOL;
 | 
			
		||||
num_sample = num_bit_oversample + len_gauss_oversample;
 | 
			
		||||
 | 
			
		||||
  pre_len = len_gauss_oversample-1;
 | 
			
		||||
  tmp_phy_bit_over_sampling(1:pre_len) = 0.0;
 | 
			
		||||
  
 | 
			
		||||
  post_sp = num_bit_oversample + pre_len + 1;
 | 
			
		||||
  post_ep = post_sp + pre_len - 1;
 | 
			
		||||
  tmp_phy_bit_over_sampling(post_sp:post_ep) = 0.0;
 | 
			
		||||
 | 
			
		||||
  tmp_phy_bit_over_sampling((pre_len+1):(pre_len+num_bit_oversample)) = 0;
 | 
			
		||||
  tmp_phy_bit_over_sampling((pre_len+1):SAMPLE_PER_SYMBOL:(pre_len+num_bit_oversample)) = bit.*2 - 1;
 | 
			
		||||
 | 
			
		||||
  % len_conv_result = length(tmp_phy_bit_over_sampling) - len_gauss_oversample + 1
 | 
			
		||||
  % = post_ep - len_gauss_oversample + 1
 | 
			
		||||
  % = num_bit_oversample + pre_len + 1 + pre_len - 1  - len_gauss_oversample + 1
 | 
			
		||||
  % = num_bit_oversample + 2*(len_gauss_oversample-1)  - len_gauss_oversample + 1
 | 
			
		||||
  % = num_bit_oversample + len_gauss_oversample - 1
 | 
			
		||||
  len_conv_result = num_sample - 1;
 | 
			
		||||
  
 | 
			
		||||
% -------------------------------------- float point reference -----------------------------------------------
 | 
			
		||||
  for i = 1 : len_conv_result
 | 
			
		||||
    acc = 0;
 | 
			
		||||
    for j = 1 : len_gauss_oversample
 | 
			
		||||
      acc = acc + gauss_coef(len_gauss_oversample-j+1)*tmp_phy_bit_over_sampling(i+j-1); %num_sample - 1+len_gauss_oversample-1= length(tmp_phy_bit_over_sampling)
 | 
			
		||||
    end
 | 
			
		||||
    tmp_phy_bit_over_sampling1(i) = acc;
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  tmp = 0;
 | 
			
		||||
  sample = zeros(1, 2*num_sample);
 | 
			
		||||
  sample(1) = round( cos(tmp)*AMPLITUDE );
 | 
			
		||||
  sample(2) = round( sin(tmp)*AMPLITUDE );
 | 
			
		||||
  for i=2:num_sample
 | 
			
		||||
    tmp = tmp + (pi*MOD_IDX)*tmp_phy_bit_over_sampling1(i-1)/(SAMPLE_PER_SYMBOL);
 | 
			
		||||
    sample((i-1)*2 + 1) = round( cos(tmp)*AMPLITUDE );
 | 
			
		||||
    sample((i-1)*2 + 2) = round( sin(tmp)*AMPLITUDE );
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
figure(1);
 | 
			
		||||
subplot(2,1,1); plot(sample);
 | 
			
		||||
ref_sample = get_number1;
 | 
			
		||||
hold on; plot(ref_sample, 'r.');
 | 
			
		||||
subplot(2,1,2); plot(abs(sample-ref_sample));
 | 
			
		||||
							
								
								
									
										10
									
								
								Software/BTLE/matlab/test_scramble_gen_all_channel.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								Software/BTLE/matlab/test_scramble_gen_all_channel.m
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
clear all;
 | 
			
		||||
close all;
 | 
			
		||||
 | 
			
		||||
num_bit = 42*8; % 42 = 2(pdu header) + 37(maximum payload length) + 3(CRC octets)
 | 
			
		||||
a = zeros(40, num_bit/8);
 | 
			
		||||
for channel_number = 0:39
 | 
			
		||||
    a(channel_number+1, :) = scramble_gen(channel_number, num_bit, ' ', 1);
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
save_int_var_for_c_2d(a, 'const uint8_t const scramble_table', 'scramble_table.h', 'w');
 | 
			
		||||
							
								
								
									
										128
									
								
								Software/BTLE/usrp_replay_example/IQ_sample_for_matlab.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								Software/BTLE/usrp_replay_example/IQ_sample_for_matlab.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,128 @@
 | 
			
		||||
...
 | 
			
		||||
127 0 127 0 127 0 127 0 127 0 127 -2 127 -10 122 -35 105 -72 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 73 104 44 119 44 119 73 104 104 73 119 44 119 44 104 73 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -71 106 -25 125 25 125 71 106 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -106 -71 -125 -25 -125 25 ...
 | 
			
		||||
-106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 104 73 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 104 73 119 44 119 44 104 73 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 71 -106 25 -125 -25 -125 -71 -106 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 71 -106 25 -125 -25 -125 -71 -106 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 104 73 119 44 119 44 104 73 73 104 44 119 44 119 73 104 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -104 73 -119 44 -119 44 -104 73 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 104 73 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 71 106 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 106 -71 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 73 104 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 104 73 119 44 119 44 104 73 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 71 106 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -104 73 -119 44 -119 44 -104 73 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -71 106 -25 125 25 125 71 106 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -106 -71 -125 -25 -125 25 ...
 | 
			
		||||
-106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 104 73 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 104 73 119 44 119 44 104 73 73 104 44 119 44 119 73 104 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 73 104 44 119 44 119 73 104 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -104 73 -119 44 -119 44 -104 73 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -106 -71 -125 -25 -125 25 ...
 | 
			
		||||
-106 71 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -104 -73 -119 -44 -119 -44 -104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 106 -71 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 71 106 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 71 -106 25 -125 -25 -125 -71 -106 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 -104 -73 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 -71 -106 -106 -71 -125 -25 -125 25 ...
 | 
			
		||||
-106 71 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -104 73 -119 44 -119 44 -104 73 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 73 -104 105 -72 122 -35 127 -10 ...
 | 
			
		||||
127 -2 127 0 127 0 127 0 127 0 127 0 127 0 127 0 
 | 
			
		||||
							
								
								
									
										11
									
								
								Software/BTLE/usrp_replay_example/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Software/BTLE/usrp_replay_example/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
./btle_tx welcom_packets_discovery.txt
 | 
			
		||||
 | 
			
		||||
copy above command generated IQ_sample_for_matlab.txt into variable "c" of gen_float32_bin_for_usrp_replay.m.
 | 
			
		||||
 | 
			
		||||
run .m script in matlab or octave
 | 
			
		||||
 | 
			
		||||
replay above script generated btle_ch37_iq_float32_welcom_msg.bin in replay_for_btle_4Msps.grc.
 | 
			
		||||
 | 
			
		||||
Install LightBlue in your iPhone or other similar things of Android, and open the App.
 | 
			
		||||
 | 
			
		||||
You will see a welcome message "SDR Bluetooth LE welcome u!" on your phone.
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1,143 @@
 | 
			
		||||
clear all;
 | 
			
		||||
close all;
 | 
			
		||||
 | 
			
		||||
% copy from 
 | 
			
		||||
c = [...
 | 
			
		||||
127 0 127 0 127 0 127 0 127 0 127 -2 127 -10 122 -35 105 -72 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 73 104 44 119 44 119 73 104 104 73 119 44 119 44 104 73 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -71 106 -25 125 25 125 71 106 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -106 -71 -125 -25 -125 25 ...
 | 
			
		||||
-106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 104 73 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 104 73 119 44 119 44 104 73 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 71 -106 25 -125 -25 -125 -71 -106 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 71 -106 25 -125 -25 -125 -71 -106 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 104 73 119 44 119 44 104 73 73 104 44 119 44 119 73 104 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -104 73 -119 44 -119 44 -104 73 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 104 73 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 71 106 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 106 -71 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 73 104 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 104 73 119 44 119 44 104 73 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 71 106 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -104 73 -119 44 -119 44 -104 73 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -71 106 -25 125 25 125 71 106 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -106 -71 -125 -25 -125 25 ...
 | 
			
		||||
-106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 104 73 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 104 73 119 44 119 44 104 73 73 104 44 119 44 119 73 104 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 73 104 44 119 44 119 73 104 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -104 73 -119 44 -119 44 -104 73 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 ...
 | 
			
		||||
-73 104 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -106 -71 -125 -25 -125 25 ...
 | 
			
		||||
-106 71 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -73 -104 -44 -119 -44 -119 ...
 | 
			
		||||
-73 -104 -104 -73 -119 -44 -119 -44 -104 -73 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 106 -71 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 71 106 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 71 -106 25 -125 -25 -125 -71 -106 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 ...
 | 
			
		||||
73 -104 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 73 104 106 71 125 25 125 -25 ...
 | 
			
		||||
106 -71 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -106 -71 -125 -25 -125 25 -106 71 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -104 -73 -119 -44 -119 -44 -104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -71 -106 -25 -125 25 -125 71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 ...
 | 
			
		||||
-71 -106 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 71 106 104 73 119 44 119 44 ...
 | 
			
		||||
104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 ...
 | 
			
		||||
106 71 71 106 25 125 -25 125 -71 106 -104 73 -119 44 -119 44 -104 73 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -73 -104 -44 -119 -44 -119 -73 -104 -104 -73 -119 -44 -119 -44 -104 -73 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 -71 -106 -106 -71 -125 -25 -125 25 ...
 | 
			
		||||
-106 71 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 104 -73 119 -44 119 -44 104 -73 71 -106 25 -125 -25 -125 -71 -106 -104 -73 -119 -44 -119 -44 ...
 | 
			
		||||
-104 -73 -73 -104 -44 -119 -44 -119 -73 -104 -106 -71 -125 -25 -125 25 -106 71 -71 106 -25 125 25 125 ...
 | 
			
		||||
71 106 104 73 119 44 119 44 104 73 71 106 25 125 -25 125 -71 106 -106 71 -125 25 -125 -25 ...
 | 
			
		||||
-106 -71 -71 -106 -25 -125 25 -125 71 -106 106 -71 125 -25 125 25 106 71 73 104 44 119 44 119 ...
 | 
			
		||||
73 104 106 71 125 25 125 -25 106 -71 73 -104 44 -119 44 -119 73 -104 104 -73 119 -44 119 -44 ...
 | 
			
		||||
104 -73 73 -104 44 -119 44 -119 73 -104 106 -71 125 -25 125 25 106 71 71 106 25 125 -25 125 ...
 | 
			
		||||
-71 106 -104 73 -119 44 -119 44 -104 73 -73 104 -44 119 -44 119 -73 104 -104 73 -119 44 -119 44 ...
 | 
			
		||||
-104 73 -73 104 -44 119 -44 119 -73 104 -106 71 -125 25 -125 -25 -106 -71 -71 -106 -25 -125 25 -125 ...
 | 
			
		||||
71 -106 104 -73 119 -44 119 -44 104 -73 73 -104 44 -119 44 -119 73 -104 105 -72 122 -35 127 -10 ...
 | 
			
		||||
127 -2 127 0 127 0 127 0 127 0 127 0 127 0 127 0 ];
 | 
			
		||||
 | 
			
		||||
c = c./256;
 | 
			
		||||
 | 
			
		||||
fid = fopen('btle_ch37_iq_float32_welcom_msg.bin','w');
 | 
			
		||||
if fid == -1
 | 
			
		||||
    disp('fopen for write error!');
 | 
			
		||||
    return;
 | 
			
		||||
end
 | 
			
		||||
fwrite(fid, c, 'single');
 | 
			
		||||
fclose(fid);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										995
									
								
								Software/BTLE/usrp_replay_example/replay_for_btle_4Msps.grc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										995
									
								
								Software/BTLE/usrp_replay_example/replay_for_btle_4Msps.grc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,995 @@
 | 
			
		||||
<?xml version='1.0' encoding='utf-8'?>
 | 
			
		||||
<?grc format='1' created='3.7.11'?>
 | 
			
		||||
<flow_graph>
 | 
			
		||||
  <timestamp>Wed Jan 25 17:14:52 2017</timestamp>
 | 
			
		||||
  <block>
 | 
			
		||||
    <key>options</key>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>author</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>window_size</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>category</key>
 | 
			
		||||
      <value>[GRC Hier Blocks]</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>comment</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>description</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>_enabled</key>
 | 
			
		||||
      <value>True</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>_coordinate</key>
 | 
			
		||||
      <value>(8, 8)</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>_rotation</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>generate_options</key>
 | 
			
		||||
      <value>qt_gui</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>hier_block_src_path</key>
 | 
			
		||||
      <value>.:</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>id</key>
 | 
			
		||||
      <value>top_block</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>max_nouts</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>qt_qss_theme</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>realtime_scheduling</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>run_command</key>
 | 
			
		||||
      <value>{python} -u {filename}</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>run_options</key>
 | 
			
		||||
      <value>prompt</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>run</key>
 | 
			
		||||
      <value>True</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>thread_safe_setters</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>title</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
  </block>
 | 
			
		||||
  <block>
 | 
			
		||||
    <key>variable</key>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>comment</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>_enabled</key>
 | 
			
		||||
      <value>True</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>_coordinate</key>
 | 
			
		||||
      <value>(8, 160)</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>_rotation</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>id</key>
 | 
			
		||||
      <value>samp_rate</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>value</key>
 | 
			
		||||
      <value>4e6</value>
 | 
			
		||||
    </param>
 | 
			
		||||
  </block>
 | 
			
		||||
  <block>
 | 
			
		||||
    <key>blocks_file_source</key>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>alias</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>comment</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>affinity</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>_enabled</key>
 | 
			
		||||
      <value>True</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>file</key>
 | 
			
		||||
      <value>/home/jxj/Downloads/btle_ch37_iq_float32_welcom_msg.bin</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>_coordinate</key>
 | 
			
		||||
      <value>(232, 260)</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>_rotation</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>id</key>
 | 
			
		||||
      <value>blocks_file_source_0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>maxoutbuf</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>minoutbuf</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>type</key>
 | 
			
		||||
      <value>complex</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>repeat</key>
 | 
			
		||||
      <value>True</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>vlen</key>
 | 
			
		||||
      <value>1</value>
 | 
			
		||||
    </param>
 | 
			
		||||
  </block>
 | 
			
		||||
  <block>
 | 
			
		||||
    <key>uhd_usrp_sink</key>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>alias</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant0</key>
 | 
			
		||||
      <value>TX/RX</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw0</key>
 | 
			
		||||
      <value>samp_rate</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq0</key>
 | 
			
		||||
      <value>2402000000</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain0</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain0</key>
 | 
			
		||||
      <value>180</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant10</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw10</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq10</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain10</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain10</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant11</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw11</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq11</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain11</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain11</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant12</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw12</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq12</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain12</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain12</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant13</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw13</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq13</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain13</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain13</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant14</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw14</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq14</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain14</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain14</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant15</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw15</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq15</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain15</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain15</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant16</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw16</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq16</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain16</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain16</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant17</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw17</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq17</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain17</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain17</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant18</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw18</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq18</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain18</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain18</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant19</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw19</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq19</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain19</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain19</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant1</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw1</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq1</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain1</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain1</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant20</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw20</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq20</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain20</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain20</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant21</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw21</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq21</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain21</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain21</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant22</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw22</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq22</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain22</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain22</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant23</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw23</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq23</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain23</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain23</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant24</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw24</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq24</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain24</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain24</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant25</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw25</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq25</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain25</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain25</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant26</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw26</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq26</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain26</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain26</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant27</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw27</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq27</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain27</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain27</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant28</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw28</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq28</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain28</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain28</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant29</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw29</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq29</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain29</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain29</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant2</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw2</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq2</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain2</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain2</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant30</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw30</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq30</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain30</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain30</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant31</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw31</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq31</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain31</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain31</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant3</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw3</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq3</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain3</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain3</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant4</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw4</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq4</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain4</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain4</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant5</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw5</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq5</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain5</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain5</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant6</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw6</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq6</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain6</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain6</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant7</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw7</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq7</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain7</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain7</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant8</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw8</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq8</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain8</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain8</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>ant9</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>bw9</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>center_freq9</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>norm_gain9</key>
 | 
			
		||||
      <value>False</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>gain9</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>clock_rate</key>
 | 
			
		||||
      <value>0.0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>comment</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>affinity</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>dev_addr</key>
 | 
			
		||||
      <value>""</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>dev_args</key>
 | 
			
		||||
      <value>""</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>_enabled</key>
 | 
			
		||||
      <value>True</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>_coordinate</key>
 | 
			
		||||
      <value>(536, 228)</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>_rotation</key>
 | 
			
		||||
      <value>0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>id</key>
 | 
			
		||||
      <value>uhd_usrp_sink_0</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>type</key>
 | 
			
		||||
      <value>fc32</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>clock_source0</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>sd_spec0</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>time_source0</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>clock_source1</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>sd_spec1</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>time_source1</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>clock_source2</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>sd_spec2</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>time_source2</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>clock_source3</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>sd_spec3</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>time_source3</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>clock_source4</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>sd_spec4</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>time_source4</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>clock_source5</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>sd_spec5</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>time_source5</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>clock_source6</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>sd_spec6</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>time_source6</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>clock_source7</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>sd_spec7</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>time_source7</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>nchan</key>
 | 
			
		||||
      <value>1</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>num_mboards</key>
 | 
			
		||||
      <value>1</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>samp_rate</key>
 | 
			
		||||
      <value>samp_rate</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>hide_cmd_port</key>
 | 
			
		||||
      <value>True</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>hide_lo_controls</key>
 | 
			
		||||
      <value>True</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>stream_args</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>stream_chans</key>
 | 
			
		||||
      <value>[]</value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>sync</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>len_tag_name</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
    <param>
 | 
			
		||||
      <key>otw</key>
 | 
			
		||||
      <value></value>
 | 
			
		||||
    </param>
 | 
			
		||||
  </block>
 | 
			
		||||
  <connection>
 | 
			
		||||
    <source_block_id>blocks_file_source_0</source_block_id>
 | 
			
		||||
    <sink_block_id>uhd_usrp_sink_0</sink_block_id>
 | 
			
		||||
    <source_key>0</source_key>
 | 
			
		||||
    <sink_key>0</sink_key>
 | 
			
		||||
  </connection>
 | 
			
		||||
</flow_graph>
 | 
			
		||||
@@ -0,0 +1,55 @@
 | 
			
		||||
#  example
 | 
			
		||||
#  ./btle_tx 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-FLAGS-02-LOCAL_NAME09-CA-TXPOWER-03-SERVICE03-180D1810-SERVICE_DATA-180D40-MANUF_DATA-0001FF-CONN_INTERVAL-0006 (-SERVICE_SOLI14-1811)
 | 
			
		||||
#  FLAGS: 0x01 LE Limited Discoverable Mode; 0x02 LE General Discoverable Mode
 | 
			
		||||
#  SERVICE:
 | 
			
		||||
#  0x02 16-bit Service UUIDs More 16-bit UUIDs available
 | 
			
		||||
#  0x03 16-bit Service UUIDs Complete list of 16-bit UUIDs available
 | 
			
		||||
#  0x04 32-bit Service UUIDs More 32-bit UUIDs available
 | 
			
		||||
#  0x05 32-bit Service UUIDs Complete list of 32-bit UUIDs available
 | 
			
		||||
#  0x06 128-bit Service UUIDs More 128-bit UUIDs available
 | 
			
		||||
#  0x07 128-bit Service UUIDs Complete list of 128-bit UUIDs available
 | 
			
		||||
 | 
			
		||||
# 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-FLAGS-02-LOCAL_NAME09-Jxj-TXPOWER-03-SERVICE03-180D1810-SERVICE_DATA-180D40-MANUF_DATA-004CFF-CONN_INTERVAL-0006
 | 
			
		||||
 | 
			
		||||
# r30
 | 
			
		||||
 | 
			
		||||
37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-SDR Bluetooth LE welcome u!
 | 
			
		||||
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040500-LOCAL_NAME09-CA0000 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040501-LOCAL_NAME09-CA0001 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040502-LOCAL_NAME09-CA0002 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040503-LOCAL_NAME09-CA0003 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040504-LOCAL_NAME09-CA0004 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040505-LOCAL_NAME09-CA0005 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-CA0006 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040507-LOCAL_NAME09-CA0007 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040508-LOCAL_NAME09-CA0008 11950 22.626 113.823 1
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040509-LOCAL_NAME09-CA0009 11950 22.626 113.823 1
 | 
			
		||||
 | 
			
		||||
r40
 | 
			
		||||
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-01234567890123456789012345678
 | 
			
		||||
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-FLAGS-02-LOCAL_NAME09-01234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-110203040506-FLAGS-02-LOCAL_NAME09-11234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-210203040506-FLAGS-02-LOCAL_NAME09-21234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-310203040506-FLAGS-02-LOCAL_NAME09-31234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-410203040506-FLAGS-02-LOCAL_NAME09-41234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-510203040506-FLAGS-02-LOCAL_NAME09-51234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-610203040506-FLAGS-02-LOCAL_NAME09-61234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-710203040506-FLAGS-02-LOCAL_NAME09-71234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-810203040506-FLAGS-02-LOCAL_NAME09-81234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-910203040506-FLAGS-02-LOCAL_NAME09-91234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-a10203040506-FLAGS-02-LOCAL_NAME09-a1234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-b10203040506-FLAGS-02-LOCAL_NAME09-b1234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-c10203040506-FLAGS-02-LOCAL_NAME09-c1234567890123456789012345
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-d10203040506-FLAGS-02-LOCAL_NAME09-d1234567890123456789012345
 | 
			
		||||
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-FLAGS-02-SERVICE03-180D-SERVICE_DATA-180D40-SPACE-500
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-110203040506-FLAGS-02-SERVICE03-1819-SERVICE_DATA-181940-SPACE-100
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-210203040506-FLAGS-02-SERVICE03-181c-SERVICE_DATA-181c40-SPACE-500
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-310203040506-FLAGS-02-SERVICE03-180a-SERVICE_DATA-180a40-SPACE-500
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-410203040506-FLAGS-02-SERVICE03-1800-SERVICE_DATA-180040-SPACE-500
 | 
			
		||||
#37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-410203040506-FLAGS-02-SERVICE03-1801-SERVICE_DATA-180140-SPACE-500
 | 
			
		||||
# r30
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user