This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Master Emulator Scan Response Packet

How do I get data from a scan response packet using master emulator?

I do know about

BtScanParameters scanParams = new BtScanParameters();
scanParams.ScanType = BtScanType.ActiveScanning;

But this doesn't seem to be enough.

I am working off of the example code from the "HealthThermoDemo" I want to access the ManufacturerSpecificData from a scan response packet so that I can use that data to add to the list of available devices in the OnDeviceDiscovered function.

What do I need to do?

(Note: the ManufacturerSpecificData is only in scan response packet not in both places so I don't have to worry about this)

Edit: This is my OnDeviceDiscovered() function:

void OnDeviceDiscovered(object sender, ValueEventArgs<BtDevice> e)
        {
            this.BeginInvoke((MethodInvoker)delegate()
            {
                dgvDeviceDiscovery.Enabled = true;
                dgvDeviceDiscovery.Visible = true;

                BtDevice dev = e.Value;
                string deviceName = "";
                IDictionary<DeviceInfoType, string> deviceInfo = dev.DeviceInfo;
                if (deviceInfo.ContainsKey(DeviceInfoType.CompleteLocalName))
                {
                    deviceName = deviceInfo[DeviceInfoType.CompleteLocalName];
                }
                else if (deviceInfo.ContainsKey(DeviceInfoType.ShortenedLocalName))
                {
                    deviceName = deviceInfo[DeviceInfoType.ShortenedLocalName];
                }
                else
                {
                    return;
                }

                string manufData = "";
                if (deviceInfo.ContainsKey(DeviceInfoType.ManufacturerSpecificData))
                {
                    manufData = deviceInfo[DeviceInfoType.ManufacturerSpecificData];
                }


                string key = deviceName + " (adr: " + dev.DeviceAddress + ")" + " (MSD: " + manufData + ")";
                discoveredDevicesList[key] = dev;
                dgvDeviceDiscovery.RowCount = discoveredDevicesList.Count;

            });
        }
Parents
  • Hi,

    If you only have Manufacturer Specific Data in scan response, you should be able to access it like this (will print the raw MSD to log field):

    if(deviceInfo.ContainsKey(DeviceInfoType.ManufacturerSpecificData))
    {
        log.Add(new StringValue(deviceInfo[DeviceInfoType.ManufacturerSpecificData]));
    }
    

    Best regards,

    Jørgen

  • Do your device advertise CompleteLocalName or ShortenedLocalName? If not, the onDeviceDiscovered function will return after the first if-setting. Can you try this code, to see if the ManufacturerSpecificData is displayed in the log field?

    void OnDeviceDiscovered(object sender, ValueEventArgs<BtDevice> e)
    {
    	this.BeginInvoke((MethodInvoker)delegate()
    	{
    		dgvDeviceDiscovery.Enabled = true;
    		dgvDeviceDiscovery.Visible = true;
    
    		BtDevice dev = e.Value;
    		string deviceName = "";
    		IDictionary<DeviceInfoType, string> deviceInfo = dev.DeviceInfo;
    		if(deviceInfo.ContainsKey(DeviceInfoType.ManufacturerSpecificData))
    		{
    			log.Add(new StringValue(deviceInfo[DeviceInfoType.ManufacturerSpecificData]));
    		}
    		if (deviceInfo.ContainsKey(DeviceInfoType.CompleteLocalName))
    		{
    			deviceName = deviceInfo[DeviceInfoType.CompleteLocalName];
    		}
    		else if (deviceInfo.ContainsKey(DeviceInfoType.ShortenedLocalName))
    		{
    			deviceName = deviceInfo[DeviceInfoType.ShortenedLocalName];
    		}
    		else
    		{
    			return;
    		}
    
    		string key = deviceName + " (adr: " + dev.DeviceAddress + ")";
    		discoveredDevicesList[key] = dev;
    		dgvDeviceDiscovery.RowCount = discoveredDevicesList.Count;
    
    	});
    }
    
Reply
  • Do your device advertise CompleteLocalName or ShortenedLocalName? If not, the onDeviceDiscovered function will return after the first if-setting. Can you try this code, to see if the ManufacturerSpecificData is displayed in the log field?

    void OnDeviceDiscovered(object sender, ValueEventArgs<BtDevice> e)
    {
    	this.BeginInvoke((MethodInvoker)delegate()
    	{
    		dgvDeviceDiscovery.Enabled = true;
    		dgvDeviceDiscovery.Visible = true;
    
    		BtDevice dev = e.Value;
    		string deviceName = "";
    		IDictionary<DeviceInfoType, string> deviceInfo = dev.DeviceInfo;
    		if(deviceInfo.ContainsKey(DeviceInfoType.ManufacturerSpecificData))
    		{
    			log.Add(new StringValue(deviceInfo[DeviceInfoType.ManufacturerSpecificData]));
    		}
    		if (deviceInfo.ContainsKey(DeviceInfoType.CompleteLocalName))
    		{
    			deviceName = deviceInfo[DeviceInfoType.CompleteLocalName];
    		}
    		else if (deviceInfo.ContainsKey(DeviceInfoType.ShortenedLocalName))
    		{
    			deviceName = deviceInfo[DeviceInfoType.ShortenedLocalName];
    		}
    		else
    		{
    			return;
    		}
    
    		string key = deviceName + " (adr: " + dev.DeviceAddress + ")";
    		discoveredDevicesList[key] = dev;
    		dgvDeviceDiscovery.RowCount = discoveredDevicesList.Count;
    
    	});
    }
    
Children
No Data
Related