![JAR search and dependency download from the Maven repository](/logo.png)
com.embeddedunveiled.serial.vendor.SerialComSLabsCP210xRuntime Maven / Gradle / Ivy
Show all versions of scm Show documentation
/*
* Author : Rishi Gupta
*
* This file is part of 'serial communication manager' library.
* Copyright (C) <2014-2016>
*
* This 'serial communication manager' is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* The 'serial communication manager' 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with 'serial communication manager'. If not, see .
*/
package com.embeddedunveiled.serial.vendor;
import java.io.File;
import java.io.FileNotFoundException;
import com.embeddedunveiled.serial.SerialComException;
import com.embeddedunveiled.serial.SerialComLoadException;
import com.embeddedunveiled.serial.SerialComUnexpectedException;
import com.embeddedunveiled.serial.internal.SerialComCP210xRuntimeJNIBridge;
import com.embeddedunveiled.serial.internal.SerialComSystemProperty;
/**
* Silicon labs provides libraries to communicate with their USB-UART devices. More information can
* be found here : https://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx
*
*
* - The data types used in java layer may be bigger in size than the native layer. For example; if native
* function returns 16 bit signed integer, than java method will return 32 bit integer. This is done to make
* sure that no data loss occur. This library take care of sign and their applicability internally.
*
* Developers are requested to check with vendor library documentation if a particular function is supported
* for desired platform or not and also how does a particular API will behave. Also consider paying attention to
* valid values and range when passing arguments to a method.
*
* - The application note for CP210XRuntime library is here :
* https://www.silabs.com/Support%20Documents/TechnicalDocs/an223.pdf
*
* SCM version 1.0.4 is linked to v3.4.0.0 version of CP210xRuntime library (CP210xRuntime.dll).
*
*
* @author Rishi Gupta
*/
public final class SerialComSLabsCP210xRuntime extends SerialComVendorLib {
/**Bit mask to represent mask and latch definition for GPIO0 in CP210X terminology.
*/
public static final int CP210x_GPIO_0 = 0x0001;
/**Bit mask to represent mask and latch definition for GPIO1 in CP210X terminology.
*/
public static final int CP210x_GPIO_1 = 0x0002;
/**Bit mask to represent mask and latch definition for GPIO2 in CP210X terminology.
*/
public static final int CP210x_GPIO_2 = 0x0004;
/**Bit mask to represent mask and latch definition for GPIO3 in CP210X terminology.
*/
public static final int CP210x_GPIO_3 = 0x0008;
/**Bit mask to represent mask and latch definition for GPIO4 in CP210X terminology.
*/
public static final int CP210x_GPIO_4 = 0x0010;
/**Bit mask to represent mask and latch definition for GPIO5 in CP210X terminology.
*/
public static final int CP210x_GPIO_5 = 0x0020;
/**Bit mask to represent mask and latch definition for GPIO6 in CP210X terminology.
*/
public static final int CP210x_GPIO_6 = 0x0040;
/**Bit mask to represent mask and latch definition for GPIO7 in CP210X terminology.
*/
public static final int CP210x_GPIO_7 = 0x0080;
/**Bit mask to represent mask and latch definition for GPIO8 in CP210X terminology.
*/
public static final int CP210x_GPIO_8 = 0x0100;
/**Bit mask to represent mask and latch definition for GPIO9 in CP210X terminology.
*/
public static final int CP210x_GPIO_9 = 0x0200;
/**Bit mask to represent mask and latch definition for GPIO10 in CP210X terminology.
*/
public static final int CP210x_GPIO_10 = 0x0400;
/**Bit mask to represent mask and latch definition for GPIO11 in CP210X terminology.
*/
public static final int CP210x_GPIO_11 = 0x0800;
/**Bit mask to represent mask and latch definition for GPIO12 in CP210X terminology.
*/
public static final int CP210x_GPIO_12 = 0x1000;
/**Bit mask to represent mask and latch definition for GPIO13 in CP210X terminology.
*/
public static final int CP210x_GPIO_13 = 0x2000;
/**Bit mask to represent mask and latch definition for GPIO14 in CP210X terminology.
*/
public static final int CP210x_GPIO_14 = 0x4000;
/**Bit mask to represent mask and latch definition for GPIO15 in CP210X terminology.
*/
public static final int CP210x_GPIO_15 = 0x8000;
private final SerialComCP210xRuntimeJNIBridge mSerialComCP210xRuntimeJNIBridge;
/**
* Allocates a new SerialComSLabsCP210xRuntime object and extract and load shared libraries as
* required.
*
* @param libDirectory directory in which native library will be extracted and vendor library will
* be found.
* @param vlibName name of vendor library to load and link.
* @param cpuArch architecture of CPU this library is running on.
* @param osType operating system this library is running on.
* @param serialComSystemProperty instance of SerialComSystemProperty to get required java properties.
* @throws SerialComUnexpectedException if a critical java system property is null in system.
* @throws SecurityException if any java system property can not be accessed.
* @throws FileNotFoundException if the vendor library file is not found.
* @throws SerialComLoadException if any file system related issue occurs.
* @throws UnsatisfiedLinkError if loading/linking shared library fails.
* @throws SerialComException if initializing native library fails.
*/
public SerialComSLabsCP210xRuntime(File libDirectory, String vlibName, int cpuArch, int osType,
SerialComSystemProperty serialComSystemProperty) throws UnsatisfiedLinkError, SerialComLoadException,
SerialComUnexpectedException, SecurityException, FileNotFoundException {
mSerialComCP210xRuntimeJNIBridge = new SerialComCP210xRuntimeJNIBridge();
SerialComCP210xRuntimeJNIBridge.loadNativeLibrary(libDirectory, vlibName, cpuArch, osType,
serialComSystemProperty);
}
/**
* Executes CP210xRT_ReadLatch function of CP210XRuntime library.
*
* Gets the current port latch value from the device.
*
* @param handle handle of the opened COM port.
* @return bit mask of constant(s) CP210x_GPIO_XX.
* @throws SerialComException if an I/O error occurs.
*/
public long readLatch(final long handle) throws SerialComException {
long ret = mSerialComCP210xRuntimeJNIBridge.readLatch(handle);
if(ret < 0) {
throw new SerialComException("Could not read the port latch value for given device. Please retry !");
}
return ret;
}
/**
* Executes CP210xRT_WriteLatch function of CP210XRuntime library.
*
* Sets the current port latch value for the device.
*
* @param handle handle of the opened COM port.
* @param mask determines which pins to change [Change = 1, Leave = 0].
* @param latchValue bit mask value to write to GPIO latch [Logic High = 1, Logic Low = 0].
* @return true if value gets set successfully.
* @throws SerialComException if an I/O error occurs.
*/
public boolean writeLatch(final long handle, long mask, long latchValue) throws SerialComException {
int ret = mSerialComCP210xRuntimeJNIBridge.writeLatch(handle, mask, latchValue);
if(ret < 0) {
throw new SerialComException("Could not write the given latch value on the given device. Please retry !");
}
return true;
}
/**
* Executes CP210xRT_GetPartNumber function of CP210XRuntime library.
*
* Gets the part number of the current device.
*
* @param handle handle of the opened COM port.
* @return part number string of the current device.
* @throws SerialComException if an I/O error occurs.
*/
public String getPartNumber(final long handle) throws SerialComException {
String ret = mSerialComCP210xRuntimeJNIBridge.getPartNumber(handle);
if(ret == null) {
throw new SerialComException("Could not get the part number of the current device. Please retry !");
}
return ret;
}
/**
* Executes CP210xRT_GetDeviceProductString function of CP210XRuntime library.
*
* Gets the product string in the current device.
*
* @param handle handle of the opened COM port.
* @return product string.
* @throws SerialComException if an I/O error occurs.
*/
public String getDeviceProductString(final long handle) throws SerialComException {
String ret = mSerialComCP210xRuntimeJNIBridge.getDeviceProductString(handle);
if(ret == null) {
throw new SerialComException("Could not get the product string of the current device. Please retry !");
}
return ret;
}
/**
* Executes CP210xRT_GetDeviceSerialNumber function of CP210XRuntime library.
*
* Gets the serial number in the current device.
*
* @param handle handle of the opened COM port.
* @return serial number string.
* @throws SerialComException if an I/O error occurs.
*/
public String getDeviceSerialNumber(final long handle) throws SerialComException {
String ret = mSerialComCP210xRuntimeJNIBridge.getDeviceSerialNumber(handle);
if(ret == null) {
throw new SerialComException("Could not get the serial number of the current device. Please retry !");
}
return ret;
}
/**
* Executes CP210xRT_GetDeviceInterfaceString function of CP210XRuntime library.
*
* Gets the interface string of the current device.
*
* @param handle handle of the opened COM port.
* @return interface string.
* @throws SerialComException if an I/O error occurs.
*/
public String getDeviceInterfaceString(final long handle) throws SerialComException {
String ret = mSerialComCP210xRuntimeJNIBridge.getDeviceInterfaceString(handle);
if(ret == null) {
throw new SerialComException("Could not get the interface string of the current device. Please retry !");
}
return ret;
}
}