I'm learning about Bluetooth (and LE), and I'm writing simple desktop application for Windows 10 to communicate with different kinds of BLE fitness devices.
I have Bluetooth up and running and I can send and receive data, but I have a small problem; sometimes I don't get correct manufacturer name from "Manufacturer Name String". I need to know the manufacturer so that I can send manufacturer specific commands to the devices.
The problem seems to be related to different computer hardware and/or drivers, because the problem happens only on my friends computers, not on my computers. The devices I use don't support "PnP ID" and "System ID" so I can't use those to get needed information.
I also read somewhere that I can use MAC address to know the manufacturer, but the devices I use don't give me the address in a format that can be used to get Company Identifier.
What else can I use to get the manufacturer name and/or code?
If the advertising data contains a manufacturer data record, the 16-bit manufacturer id can be looked up here:
https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers
Looking at the MAC address will probably be very unreliable, as many BTLE devices use a random MAC address for privacy reasons.
However, there is also the UUID of the individual BTLE characteristics, which contains a manufacturer code. See here for a list: https://www.bluetooth.com/specifications/assigned-numbers/16-bit-uuids-for-members (note that this applies to shortened 16-bit UUIDs, not to the full 128-bit ones).
Considering most of the fitness devices follow GATT specification, 0x2A29 uuid corresponds to org.bluetooth.characteristic.manufacturer_name_string.
https://www.bluetooth.com/specifications/gatt/characteristics/
Related
I am looking into persona devices as described in Appendix G of the Redhawk manual.
Is there a detailed "how to" for this anywhere?
In my scenario my 'Programmable Device' would be a Redhawk FEI device that interfaces with a kernel API that controls tuners, fans, gps, buttons and LCD displays. I would like to break this out into three or four persona devices that interface with the main FEI Device.
Thought I'd ask.
If you head to Geon's github and look at the RFNoC_ProgrammableDevice and RFNoC_DefaultPersona, you can get an idea of how these Devices interact with one another. It should be noted that these Devices are still under development. Unfortunately, the manual appendix you mentioned and these examples are really the closest thing to a "how to" there is right now.
That being said, this pattern is generally reserved for FPGAs, with the programmable Device controlling access to the programmable hardware (and FEI functionality, if present) and the persona(s) controlling access to specific bit file capabilities. If you're not interacting with an FPGA, then the pattern will most likely be more trouble than it's worth to obtain modularity.
I've been searching in articles for some simple device that is able to do that(title), but I didnt find any. I am looking for a simple device that is able to get RSSI from some unique beacon in range and then pass it (reveiced RSSI value) to the smartphone(via bluetooth).
I thought about some "smart beacon" that is able to work bidirectional (Get signal from another beacon, then pass it to the smartphone). Has it ever been done?(If yes I would be grateful for any articles).
If I wouldn't find anything I will use another smartphone as that device.
I am unaware of any commercially available products that do this. A more common solution might be a device that scans for other beacons in the vicinity and reports them directly to a server.
The reason that reporting scanned beacons to a smartphone over BLE isn't a common solution is because it would be simpler for the phone to do the scanning itself. Why would you need a separate hardware device to do this?
Such a solution you propose might have the advantage of extending the range of the smartphone, but probably not by much. Consider that if the reliable range of BLE is 40 meters, then a phone 40 meters away from the device you suggest might be able to pick up beacons at most 80 meters away in the same direction. Practically speaking this would rarely even double the scan area covered by the phone simply working by itself.
I was wondering if it is possible to modify the contents of a BLE beacon to include extra information. If you insert an extra bit at the end you could potentially broadcast a boolean in one direction. Theoretically, if you modified your device to read the extra bit of information this would work. Given existing protocols though it sounds like this would be a lot of work. Is there something out there like this already?
For info, I'm working on the mbed platform where you can modify your own bluetooth beacon payload.
Yes, you can do this with the new AltBeacon specification. There is a one byte manufacturer reserved field which you can use for whatever you want (tied to your manufacturer ID).
There are reference implementations of the specification available for Linux to show you how it works, and there is no reason you cannot implement it on the mbed platform.
I'm using my iPhone to scan in a complex 2D barcode. Problem is, the iPhone camera doesn't do so well at very close distances (less than 3 inches).
I was wondering if there were a way I could affix a Bluetooth low energy "sticker" to a piece of paper. The idea being instead of using the camera to scan a 2D barcode, I could just put my iPhone near the paper and "scan" it.
I'm extremely new to Bluetooth tech, so it's quite possible that what I'm asking for is completely ridiculous. Please forgive me, if that is the case.
Unlike NFC, Bluetooth Low-Energy devices need a power source, so it's imposible to just "print" them. They need a BLE chip and a battery to operate. So while you could use BLE same way you use NFC (proximity-based actions), you won't be able to do it with just a sticker.
Register at bluetooth sig for manufactorer id. Then put manufacturer id in advertisement package 0xff with id (16 bit) followed by the data. You must be sure your length is correct or iOS can't decode it.
For NFC, your scanner must be pretty close to the tag. But BLE devices work within several tens of meters without any problem. This is like an active RFID chip.
Of course, you need a power source for it. But if you print this BLE tag to a piece of expensive equipment, the cost of the tag and the battery is not a problem. You can use a button cell battery to power the BLE tag up. Let is broadcast/advertise some info once a second. Of course, you have to add some security mechanism if you want to be away from any replay attacks.
We are considering using the vendor and product ID of a USB device (obtained via IOKit) to unlock certain features of an application. I'm aware that these values can be spoofed, but I'm not sure how easily it can be done on OSX. What is involved in spoofing the vendor and product ID? Is it something that a non-programmer can do fairly easily?
I suspect it would be fairly easy (for a programmer) to create a kext that creates a reasonably realistic IOUSBDevice object in kernel space. However, once done anyone would be able to load it.
It may also be possible to build a codeless kext using AppleUSBMergeNub to masquerade a device as another (though I haven't tested this, it looks like it might work, assuming you only try to match the IOUSBDevice without actually using it).
It would probably be easier to just hijack your API calls in userspace and give your software the answers it expects.
A non-programmer cannot do that. What you can do is writing a kernel extension (an IOKit driver) for the device, that has a matching dictionary matching the real vendor-/product-ID of the device, which causes the system to automatically load the kernel extension when this device is connected and pass a reference to the device object. The driver is now responsible for initializing the device and create all necessary user space information that is necessary for the IOKit framework (the user space library) to communicate with the device. Usually Apple has default IOKit drivers for most USB device classes (that's why you don't need an extra driver for every USB mouse or keyboard for example), but if there is a more specific driver found, then this driver will be used instead. And when creating the user space data, of course the driver may lie about the vendor-/product-ID, causing the user space program to see false values. Since IOKit is written in C++ and heavily depends upon objects and object inheritance, it is not even necessary to write the driver from scratch, but instead it can inherit from Apple's default driver and just override some methods and otherwise rely upon the super implementation. However, writing IOKit kernel drivers is not that easy and even people developing Mac software for years may have no idea how to do that and the IOKit documentation is one of the worst ones Apple is offering.
So to answer your question: Is it possible? Yes. Is it fairly easy? No. Can non-programmers do it? Certainly not, unless someone else has written a ready to use extension for them, that they only need to install.
It's actually rather EASY, and I'm definitely not a programmer!
Found the guide here
http://rolande.wordpress.com/2012/10/25/getting-the-aten-usb-serial-adapter-working-with-mac-osx-lion
Thanks, Rolande!
I was able to change the IDs of a USB Ethernet adaptor I bought on eBay to use another driver with Mac OS X 10.8.
Since nobody has answered so far, I've stumbled across a page which basically says that you can get an Arduino and program it to return any VID/PID/serial that you want. I still can't find any software-only way to do this.
I can create A OCX in Delphi code to do that
And supply infomation to send/receive data to the USB with other states like:- is it still connected.
Natraly I need a little more detail than that in case that same chip is connected from another product.
example frendly name, device desription.............