Difference between revisions of "Device (Java)"
NateColeman (talk | contribs) (→See also) |
NateColeman (talk | contribs) (→See also) |
||
Line 342: | Line 342: | ||
==See also== | ==See also== | ||
[[NeuroMD SDK Manual]] | [[NeuroMD SDK Manual]] | ||
+ | |||
[[Device (C++)]] | [[Device (C++)]] |
Latest revision as of 03:42, 1 May 2018
ru.neuromd.neurosdk
Class Device
Contents
Related Classes
ru.neuromd.neurosdk.DeviceScanner
Classes hierarchy
- java.lang.Object
- ru.neuromd.neurosdk.Device
Class definition
public class Device
The Device class is an abstraction for NeuroMD BLE devices. This abstraction provides functions for changing of device state by executing commands and setting parameters. Each device have different sets of supported commands and parameters, Device class has functions designed to get information about these sets. Callibri and Braibit devices has different parameters sets and provides different ways to access them. Device class hides all differences behind its interface and provides universal way to read and write parameters, execute commands and receive biopotential signals.
Fields Summary
Modifier and Type | Field and Description |
SubscribersNotifier<ParameterName> | parameterChanged
Subscribe this event to receive notifications about changes of device parameters |
Constructor Summary
You are not able to create Device directly. Use DeviceScanner to find and create devices
Methods Summary
Modifier and Type | Method and Description |
void | connect()
Establishes connection with device services |
void | disconnect()
Disconnects from device |
ChannelInfo[] | channels()
Returns information about supported channels. Check this information before creation of channel. If device does not support channel, channel object won't be initialized. |
Command[] | commands()
Returns supported commands of a device |
Parameter[] | parameters()
Returns all available parameters of device, their types and access rights |
boolean | execute()
Tries to execute command and returns value indicating operation success. |
boolean | setParam()
Sets value for specified parameter and returns value indicating success of operation. |
<ParamType>
ParamType |
readParam()
Return value of specified parameter of device. |
Field Detail
parameterChanged
public final SubscribersNotifier<ParameterName> parameterChanged
Subscribe this event to receive notifications about changes of device parameters
Method Detail
connect
public void connect()
Tries to establish connection with device. Check DeviceState parameter or subscribe parameterChanged event for operation result.
disconnect
public void disconnect()
Disconnects from device. Check DeviceState parameter or subscribe parameterChanged event for operation result
channels
public ChannelInfo[] channels()
Returns information about supported channels.
Check this information before creation of channel. If device does not support channel, channel object won't be initialized with it.
- Returns:
- Array of channel info objects
commands
public Command[] commands()
Returns supported commands of device
- Returns:
- Array of supported commands
parameters
public Parameter[] parameters()
Returns all available parameters of device, their types and access rights
- Returns:
- Array of available parameters
execute
public boolean execute(Command cmd)
Tries to execute command and returns value indicating operations success.
Will throw if device does not support specified command. To get supported commands call commands() method.
- Parameters:
- cmd - Command to execute
- Returns:
- Operation success indicator
- Throws:
- java.lang.UnsupportedOperationException
readParam
public<ParamType> ParamType readParam(ParameterName param)
Return value of specified parameter of device.
Will throw if parameter does not present in device. To get supported parameters and type information for parameter call parameters() method. It returns Parameter object which consists of parameter name, type and access mode.
- Parameters:
- param - ParameterName to read
- Returns:
- Parameter value
- Throws:
- java.lang.UnsupportedOperationException
setParam
public boolean setParam(ParameterName param, Object value)
Sets value for specified parameter and returns value indicating success of operation.
Will throw if parameter does not present in device or has only Read access mode. To get supported parameters and type information for parameter call parameters() method. It returns Parameter object which consists of parameter name, type and access mode
- Parameters:
- param - Name of parameter to set
- value - Parameter value
- Returns:
- Operation success indicator
- Throws:
- java.lang.UnsupportedOperationException
Example
This example shows how to find devices and list their features
import com.neuromd.common.INotificationCallback; import com.neuromd.neurosdk.Device; import com.neuromd.neurosdk.DeviceScanner; import com.neuromd.neurosdk.channels.ChannelInfo; import com.neuromd.neurosdk.parameters.Command; import com.neuromd.neurosdk.parameters.Parameter; import com.neuromd.neurosdk.parameters.ParameterName; import com.neuromd.neurosdk.parameters.types.DeviceState; public class DeviceInfoActivity extends AppCompatActivity { private DeviceScanner mScanner; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_device_info); requestPermissions(); enableBtAndGeolocation(); initScanner(); initButtons(); } private void initScanner() { mScanner = new DeviceScanner(getApplicationContext()); mScanner.scanStateChanged.subscribe(new INotificationCallback<Boolean>() { @Override public void onNotify(Object o, final Boolean isScanning) { runOnUiThread(new Runnable() { @Override public void run() { Button startButton = findViewById(R.id.startScanButton); Button stopButton = findViewById(R.id.stopScanButton); startButton.setEnabled(!isScanning); stopButton.setEnabled(isScanning); } }); } }); mScanner.deviceFound.subscribe(new INotificationCallback<Device>() { @Override public void onNotify(Object o, Device device) { onDeviceFound(device); } }); } private void requestPermissions(){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); } } private void enableBtAndGeolocation(){ Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, 1); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE ); if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) { Intent enableGeoIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivityForResult(enableGeoIntent, 1); } } } private void initButtons() { Button startButton = findViewById(R.id.startScanButton); startButton.setEnabled(true); startButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mScanner.startScan(0); //zero is for infinity } }); Button stopButton = findViewById(R.id.stopScanButton); stopButton.setEnabled(false); stopButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mScanner.stopScan(); } }); } private void onDeviceFound(final Device device) { device.parameterChanged.subscribe(new INotificationCallback<ParameterName>() { @Override public void onNotify(Object o, ParameterName parameterName) { if (parameterName == ParameterName.State){ DeviceState state = device.readParam(ParameterName.State); if (state == DeviceState.Connected){ runOnUiThread(new Runnable() { @Override public void run() { onDeviceConnected(device); } }); } } } }); device.connect(); } private void onDeviceConnected(Device device) { EditText deviceInfoText = findViewById(R.id.infoText); String deviceName = device.readParam(ParameterName.Name); String deviceAddress = device.readParam(ParameterName.Address); deviceInfoText.append(String.format("Found device: %s [%s]\n", deviceName, deviceAddress)); deviceInfoText.append("Supported params:\n"); Parameter[] deviceParams = device.parameters(); for (Parameter param : deviceParams) { String paramName = param.getName().toString(); String accessMode = param.getAccess().toString(); deviceInfoText.append(String.format("-%s {%s}\n", paramName, accessMode)); } deviceInfoText.append("\nSupported commands:\n"); Command[] deviceCommands = device.commands(); for (Command cmd : deviceCommands) { deviceInfoText.append(String.format("-%s \n", cmd.toString())); } deviceInfoText.append("\nSupported channels:\n"); ChannelInfo[] deviceChannels = device.channels(); for (ChannelInfo channel : deviceChannels) { String channelName = channel.getName(); deviceInfoText.append(String.format("-%s \n", channelName)); } } }
Possible output: