Showing posts with label Bluetooth. Show all posts
Showing posts with label Bluetooth. Show all posts

Wednesday, 19 March 2014

SmartSoles offer tracking technology for Alzheimer's patients



If you have a family member diagnosed with Alzheimer's disease, dementia or autism, and who has a history of wandering, the Smartsoles technology might be the one thing to offer some peace of mind.

The Bluetooth SmartSoles is a footwear system that consists of an embedded Bluetooth chip. The SmartSoles look like regular insoles and are designed to fit nearly every size shoe, as they can be trimmed to fit. An email or text message is sent to a caregiver when a wearer leaves a pre-set area, such as a room or building. They can be used in a personal home or assisted living facilities.


In addition to a tracking portal for desktops, laptops and tablets, a free Smart Locator mobile app will available for Android and Apple devices. The cost is expected to be under $50, with a rechargeable battery that'll last up to five days on a single charge and is rated to last over a year before needing to be replaced.

The SmartSoles are manufactured by GTX Corp., a developer of wearable technology, and are expected to be available in the second quarter of this year.

According to the company, this technology could be the solution for tracking loved ones with cognitive memory disorders.

Visit us on Facebook | Follow on Twitter | LifeFlicks' National and World news

Sunday, 16 February 2014

BLE for developers in Windows 8.1 Part I

    For who doesn't know Bluetooth Smart/Low Energy devices are devices optimized for low power consumption. Devices can act as an GATT Server, GATT client or both at the same time. In Server mode the device exposes one or more services. Each service has one or more characteristics with properties attached to it (read, write, notify, broadcast,...). The GATT Client connects to the Server and "consumes" its services.

   Windows 8.1 has added support for communicating with Bluetooth devices from the store applications. This opened the development for a lot of accessories including the Bluetooth Low Energy devices. Windows 8.1 supports only GATT client mode. This is the first iteration of the Bluetooth api and, from some points of view, it is not complete and kinda rushed out to be available. Here are some missing features:

  1. The User eXperience when connecting to an Bluetooth device is bad. The common scenario for this kind of device is that you buy the device you see the application for the Windows Store is available, download it and run the app to play with the device. Here comes the "fun" part: form inside the store application you cannot connect to devices that were not previously paired from PC Settings - Devices - Bluetooth. So, for the first connection, when the user launches the application and you don't find any device to connect to, you will have to find a way to explain and convince the user to open Settings ->Change PC Settings->.... Bluetooth and then come back to your application. Also it is not possible to launch the  Bluetooth screen directly like in Windows Phone case.
  2. For the BLE devices the whole idea of the application is to consume less but have a connection between the device (server) and the application (client). Too bad that is there is no to make teh application run in the background or receive notifications from the devices when the application is suspended. This missing feature "kills" a little bit the BLE principles and without it the protocol from the app side is not better than the classical SPP. The application should be able to connect, receive notifications in the background, be aware when the device disconnects and to be able to reconnect when available again.
  3. Without being able to connect to devices that were not previously paired beacon scenarios are not possible.
  4. Missing api's to discover the services and the characteristics of each service for any BLE device. 
     Beside that let's have a first look at how the new apis work. I have bought several BLE devices: The Texas Instruments CC2541 SensorTAG, Estimote tag,  Kensington Proximo TAG. (I actually bought the devices in inverse order: Kensington, Estimote TI ).
       If you want to start testing/demo the BLE api I think the SensorTAG  is the best choice. The Texas Instruments chipset CC2540/1 is one of the most used chipset in BLE devices and the price of this kit is around 25$. It includes 6 sensors inside: IR temperature Sensor, Humidity Sensor, Pressure Sensor, Accelerometer, Gyroscope, Magnetometer so you can simulate various scenarios.
     The first step would be to understand if your system supports BLE devices. For this you will have to open Device Manager-> Bluetooth and see if the "Microsoft Bluetooth LE Enumerator" is present. If it is your system can connect to Bluetooth Smart devices. 


  The second step would be to pair with the device (actually you could skip the first step and if you don't see your device in the list see if your system supports BLE). To make the device visible for pairing just push the button on the left side of the device.



    If the device you are looking for is present pair with it (used 0000 as pin). The system configures all the GATT services internally.  Here is how your windows Bluetooth devices look internally before and after the pair:


    You can actually see that we have new GATT services added to our system.

    When using the GATT api you will actually have to know the service you want to connect to and also the characteristics that the service exposes. There are several ways to do that:

  1. The most obvious one you have the documentation of the device and see all the services and their characteristics. Here is the pdf of the TI Development KIT
  2. You can actually get the Service UUID's from the Device Manager:


and then you could hope it is one of the standard BLE profiles so you could have the characteristics for that service. In the picture above the UUID of the GATT service is f000aa40-0451-4000-b000-000000000000 and it doesn't fit any standard profile. The standard profiles fit this pattern: 0000XXXX-0000-1000-8000-00805f9b34fb where XXXX is the id of the profile (for example 0x1800 is the generic access profile). There are some GATT Services that are not showed in the Device List even if present and, as far as I tested,  these are the Generic Access 0x1800 and  Generic Attribute 0x1801 and Device Information 0x180A. You can  always try to add these services to the list of services you want to connect to as it will enable you to have more information on the device you are connecting to.

    So here is the list of the GATT services exposed by the SensorTAG:
Custom:
Thermometer "f000aa00-0451-4000-b000-000000000000"
Accelerometer "f000aa10-0451-4000-b000-000000000000"
Humidity "f000aa20-0451-4000-b000-000000000000"
Magnetometer "f000aa30-0451-4000-b000-000000000000"
Barometer "f000aa40-0451-4000-b000-000000000000"
Gyroscope "f000aa50-0451-4000-b000-000000000000"
Standard:
Key Service "0000ffe0-0000-1000-8000-00805f9b34fb"
+ standard and hidden in device manager:
Generic Access: 00001800-0000-1000-8000-00805f9b34fb
Generic Attribute: 00001801-0000-1000-8000-00805f9b34fb
Device Information: 0000180A-0000-1000-8000-00805f9b34fb

     Now that we know what services our device exposes we can start creating the Store Application and add the necessary capabilities which will enable us to connect to the device. Start Visual Studio and create an Windows Store application then edit the Package.appxmanifest file using View Code option. Add the following capabilities:

 <Capabilities>  
<Capability Name="internetClient" />
<m2:DeviceCapability Name="bluetooth.genericAttributeProfile">
<m2:Device Id="any">
<m2:Function Type="serviceId:f000aa00-0451-4000-b000-000000000000"/>
<m2:Function Type="serviceId:F000AA10-0451-4000-B000-000000000000"/>
<m2:Function Type="serviceId:F000AA20-0451-4000-B000-000000000000"/>
<m2:Function Type="serviceId:F000AA30-0451-4000-B000-000000000000"/>
<m2:Function Type="serviceId:F000AA40-0451-4000-B000-000000000000"/>
<m2:Function Type="serviceId:F000AA50-0451-4000-B000-000000000000"/>
<m2:Function Type="serviceId:0000ffe0-0000-1000-8000-00805f9b34fb"/>
<m2:Function Type="serviceId:00001800-0000-1000-8000-00805f9b34fb"/>
<m2:Function Type="serviceId:00001801-0000-1000-8000-00805f9b34fb"/>
<m2:Function Type="serviceId:0000180A-0000-1000-8000-00805f9b34fb"/>
</m2:Device>
</m2:DeviceCapability>
</Capabilities>

  When interacting with the device you will have to find the devices that expose the services we want to connect to and then connect to the desired service. For this we will call Enumeration.DeviceInformation.FindAllAsync passing an AQS string to filter the devices. Let's say we want to connect to the devices that expose the Generic Access Service as it is an standard service. We can actually generate the AQS in 3 different ways for this service:

  1. Using the the standard implemented GattServiceUuids GetDeviceSelectorFromUuid(GattServiceUuids.GenericAccess)
  2. Generating an standard UUID from an shortID GetDeviceSelectorFromShortId(0x1800) -what it actually does is to add  "-0000-1000-8000-00805f9b34fb" to the id
  3. When the service is not a standard one you will have to use GetDeviceSelectorFromUuid(new Guid(serviceGuid)) and pass the custom service guid in our case serviceGuid="00001800-0000-1000-8000-00805f9b34fb"
   The code below shows how to read the device name using the Generic Access Service of the Sensor Tag. Here are the standard characteristics of the generic access service link.

       //Find the devices that expose the service  
var devices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(GattDeviceService.GetDeviceSelectorFromUuid(GattServiceUuids.GenericAccess));
if (devices.Count==0)
return;
//Connect to the service
var service = await GattDeviceService.FromIdAsync(devices[0].Id);
if (service == null)
return;
//Obtain the characteristic we want to interact with
var characteristic = service.GetCharacteristics(GattCharacteristic.ConvertShortIdToUuid(0x2A00))[0];
//Read the value
var deviceNameBytes=(await characteristic.ReadValueAsync()).Value.ToArray();
//Convert to string
var deviceName=Encoding.UTF8.GetString(deviceNameBytes,0,deviceNameBytes.Length);

   Now let's see how to interact with an non standard service and a characteristic that notifies when changing. I've chosen the accelerometer service of the SensorTAG:

       //Find the devices that expose the service  
var devices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(GattDeviceService.GetDeviceSelectorFromUuid(new Guid("F000AA10-0451-4000-B000-000000000000")));
if (devices.Count==0)
return;
//Connect to the service
var accService = await GattDeviceService.FromIdAsync(devices[0].Id);
if (accService == null)
return;
//Get the accelerometer data characteristic
var accData = accService.GetCharacteristics(new Guid("F000AA11-0451-4000-B000-000000000000"))[0];
//Subcribe value changed
accData.ValueChanged += accData_ValueChanged;
//Set configuration to notify
await accData.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify);
//Get the accelerometer configuration characteristic
var accConfig = accService.GetCharacteristics(new Guid("F000AA12-0451-4000-B000-000000000000"))[0];
//Write 1 to start accelerometer sensor
await accConfig.WriteValueAsync((new byte[]{1}).AsBuffer());

In this case we connect to the service, we subscribe to the data characteristic notifications (we also ensure that the characteristic is in notify mode), and then we start the accelerometer sensor. Once the sensor starts it will notify us every 1000 ms. (default value that can be changed).

 async void accData_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args)  
{
var values = (await sender.ReadValueAsync()).Value.ToArray();
var x = values[0];
var y = values[1];
var z = values[2];
}

We can do the same with all the other services exposed by the device.

Till next post NAMASTE!



Saturday, 28 December 2013

Samsung Galaxy S3: How to Share Internet Connection Using Bluetooth

An insider has leave his comment here to ask why he can't share the internet connection using Bluetooth, though he was able to transfer file with the paired device. For those of you who didn't already know, aside for transfer files you can also use this to share the internet connection with another Bluetooth-enabled devices. This methods commonly referred as Bluetooth tethering. To make the steps

Saturday, 21 December 2013

Samsung Galaxy S3: How to Fix Can't Change Bluetooth Name on Android 4.3

One more, an insider named Maureen has dropped her question to me through the email to ask why her phone shows the device name as SGH-I747 instead of a different name as she had configured before she did update the phone to the Android 4.3 when she use the phone to transfer contact files with her friend using the Bluetooth connection. As we all know that Bluetooth is one of the most used mode of

Friday, 13 September 2013

Samsung Galaxy S3: How to Share Selected Text in the Web Page

Web search is one of the option available when you're selecting text in the web. By using this option you can search whatever the text selected directly from the web, and you will find the search result be displayed in the default search engine page.

See also: How to Search Selected Text on the Web Page on Samsung Galaxy S3

While you selecting text in the web, you can also find another option

Wednesday, 11 September 2013

Samsung Galaxy S3: How to Share Contact via Bluetooth

There are some methods that you can use to transfer contact from your Samsung Galaxy SIII to another device. One of the possible methods to do is by using Bluetooth. To make you be able to do so, first of all make sure you have enabled Bluetooth on your device, as well as the another device you want to share the contact to.

See also: How to Enable or Disable Bluetooth on Samsung Galaxy S3

Once

Thursday, 25 July 2013

Samsung Galaxy S3: How to Increase Bluetooth Visibility Time

Once you've upgrading your Galaxy SIII to Android Jelly Bean, your phone will get some new features inside it. One of which is blocking mode option which will allow you to block all or certain of notifications, calls, texts and messages.

See also: How to Enable or Disable Blocking Mode on Samsung Galaxy S3

Another feature that you will find after upgrading is the option to increase the time of

Thursday, 29 November 2012

Bluetooth Service's UUIDs

If you are developing on Windows Phone 8 and trying to communicate with a Bluetooth device using a StreamSocket these UUID's might come in handy:


ServiceDiscoveryServerServiceClassID= '{00001000-0000-1000-8000-00805F9B34FB}';
BrowseGroupDescriptorServiceClassID = '{00001001-0000-1000-8000-00805F9B34FB}';
PublicBrowseGroupServiceClass = '{00001002-0000-1000-8000-00805F9B34FB}';
SerialPortServiceClass = '{00001101-0000-1000-8000-00805F9B34FB}';
LANAccessUsingPPPServiceClass = '{00001102-0000-1000-8000-00805F9B34FB}';
DialupNetworkingServiceClas = '{00001103-0000-1000-8000-00805F9B34FB}';
IrMCSyncServiceClass = '{00001104-0000-1000-8000-00805F9B34FB}';
OBEXObjectPushServiceClass= '{00001105-0000-1000-8000-00805F9B34FB}';
OBEXFileTransferServiceClass = '{00001106-0000-1000-8000-00805F9B34FB}';
IrMCSyncCommandServiceClass= '{00001107-0000-1000-8000-00805F9B34FB}';
HeadsetServiceClass = '{00001108-0000-1000-8000-00805F9B34FB}';
CordlessTelephonyServiceClass = '{00001109-0000-1000-8000-00805F9B34FB}';
AudioSourceServiceClass = '{0000110A-0000-1000-8000-00805F9B34FB}';
AudioSinkServiceClass= '{0000110B-0000-1000-8000-00805F9B34FB}';
AVRemoteControlTargetServiceClass = '{0000110C-0000-1000-8000-00805F9B34FB}';
AdvancedAudioDistributionServiceClass = '{0000110D-0000-1000-8000-00805F9B34FB}';
AVRemoteControlServiceClass= '{0000110E-0000-1000-8000-00805F9B34FB}';
VideoConferencingServiceClass = '{0000110F-0000-1000-8000-00805F9B34FB}';
IntercomServiceClass = '{00001110-0000-1000-8000-00805F9B34FB}';
FaxServiceClass = '{00001111-0000-1000-8000-00805F9B34FB}';
HeadsetAudioGatewayServiceClass= '{00001112-0000-1000-8000-00805F9B34FB}';  
WAPServiceClass = '{00001113-0000-1000-8000-00805F9B34FB}';
WAPClientServiceClass = '{00001114-0000-1000-8000-00805F9B34FB}';
PANUServiceClass = '{00001115-0000-1000-8000-00805F9B34FB}';
NAPServiceClass = '{00001116-0000-1000-8000-00805F9B34FB}';
GNServiceClass = '{00001117-0000-1000-8000-00805F9B34FB}';
DirectPrintingServiceClass = '{00001118-0000-1000-8000-00805F9B34FB}';
ReferencePrintingServiceClass = '{00001119-0000-1000-8000-00805F9B34FB}';
ImagingServiceClass= '{0000111A-0000-1000-8000-00805F9B34FB}';
ImagingResponderServiceClass = '{0000111B-0000-1000-8000-00805F9B34FB}';
ImagingAutomaticArchiveServiceClass = '{0000111C-0000-1000-8000-00805F9B34FB}';
ImagingReferenceObjectsServiceClass = '{0000111D-0000-1000-8000-00805F9B34FB}';
HandsfreeServiceClass = '{0000111E-0000-1000-8000-00805F9B34FB}';
HandsfreeAudioGatewayServiceClass = '{0000111F-0000-1000-8000-00805F9B34FB}';
DirectPrintingReferenceObjectsServiceClass = '{00001120-0000-1000-8000-00805F9B34FB}';
ReflectedUIServiceClass = '{00001121-0000-1000-8000-00805F9B34FB}';
BasicPringingServiceClass = '{00001122-0000-1000-8000-00805F9B34FB}';
PrintingStatusServiceClass= '{00001123-0000-1000-8000-00805F9B34FB}';
HumanInterfaceDeviceServiceClass = '{00001124-0000-1000-8000-00805F9B34FB}';
HardcopyCableReplacementServiceClass = '{00001125-0000-1000-8000-00805F9B34FB}';
HCRPrintServiceClas = '{00001126-0000-1000-8000-00805F9B34FB}';
HCRScanServiceClass= '{00001127-0000-1000-8000-00805F9B34FB}';
CommonISDNAccessServiceClass = '{00001128-0000-1000-8000-00805F9B34FB}';
VideoConferencingGWServiceClass = '{00001129-0000-1000-8000-00805F9B34FB}';
UDIMTServiceClass = '{0000112A-0000-1000-8000-00805F9B34FB}';
UDITAServiceClass = '{0000112B-0000-1000-8000-00805F9B34FB}';
AudioVideoServiceClass = '{0000112C-0000-1000-8000-00805F9B34FB}';
SIMAccessServiceClass = '{0000112D-0000-1000-8000-00805F9B34FB}';
PnPInformationServiceClass= '{00001200-0000-1000-8000-00805F9B34FB}';
GenericNetworkingServiceClass = '{00001201-0000-1000-8000-00805F9B34FB}';
GenericFileTransferServiceClass = '{00001202-0000-1000-8000-00805F9B34FB}';
GenericAudioServiceClass= '{00001203-0000-1000-8000-00805F9B34FB}';
GenericTelephonyServiceClass = '{00001204-0000-1000-8000-00805F9B34FB}';