Difference between revisions of "FriendlyThings APIs"
(→APIs in libfriendlyarm-things.so Library) |
|||
(8 intermediate revisions by the same user not shown) | |||
Line 306: | Line 306: | ||
|} | |} | ||
− | === | + | === I2C APIs=== |
− | ''' | + | '''Applicable Platforms: All''' |
− | + | Before you invoke any of the following APIs make sure to invoke the open function to open an I2C device. After finish operations make sure to invoke the HardwareControler.close function to close the device:<br /> | |
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
int fd = HardwareControler.open("/dev/i2c-0", FileCtlEnum.O_RDWR); | int fd = HardwareControler.open("/dev/i2c-0", FileCtlEnum.O_RDWR); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | The following APIs need to take a file descriptor as a parameter:<br /> | |
::{| class="wikitable" | ::{| class="wikitable" | ||
|- | |- | ||
− | | style="background: PaleTurquoise; color: black" | ''' | + | | style="background: PaleTurquoise; color: black" | '''API Name''' |
− | | style="background: PaleTurquoise; color: black" |''' | + | | style="background: PaleTurquoise; color: black" |'''Parameters and Return Value''' |
− | | style="background: PaleTurquoise; color: black" |''' | + | | style="background: PaleTurquoise; color: black" |'''Function''' |
|- | |- | ||
| | | | ||
Line 324: | Line 324: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | fd: | + | fd: I2C device's file descriptor<br /> |
− | slave: | + | slave: I2C device's address. For example in general an EEPROM's device address is 0x50<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns 0 if it is a success otherwise returns -1<br /> | |
|| | || | ||
− | + | Sets an I2C device's address. For example in general an EEPROM's device address is 0x50. | |
|- | |- | ||
Line 340: | Line 340: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | fd: | + | fd: I2C device's file descriptor<br /> |
− | timeout: | + | timeout: timeout<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns 0 if it is a success otherwise returns -1<br /> | |
<br /> | <br /> | ||
|| | || | ||
− | + | Sets timeout(ioctl I2C_TIMEOUT) | |
|- | |- | ||
Line 357: | Line 357: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | fd: | + | fd: I2C device's file descriptor<br /> |
− | retries: | + | retries: number of retries<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns 0 if it is a success otherwise returns -1<br /> | |
<br /> | <br /> | ||
|| | || | ||
− | + | Sets the number of retries(ioctl I2C_RETRIES) | |
|- | |- | ||
Line 377: | Line 377: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | fd: | + | fd: I2C device's file descriptor<br /> |
− | pos: | + | pos: position to write data to<br /> |
− | byteData: | + | byteData: data to be written to<br /> |
− | wait_ms: | + | wait_ms: wait time in millisecond<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns 0 if it is a success otherwise returns -1<br /> | |
<br /> | <br /> | ||
|| | || | ||
− | + | Writes a byte to the specified position of an I2C device in the specified wait time(in millisecond). | |
|- | |- | ||
Line 398: | Line 398: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | fd: | + | fd: I2C device's file descriptor<br /> |
− | pos: | + | pos: position to write data to<br /> |
− | wait_ms: | + | wait_ms: wait time in millisecond<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns 0 if it is a success otherwise returns -1<br /> | |
<br /> | <br /> | ||
|| | || | ||
− | + | Reads a byte from the specified position of an I2C device in the specified wait time(in millisecond). | |
|- | |- | ||
|} | |} | ||
− | === | + | ===SPI APIs=== |
− | ''' | + | '''Applicable Platforms: All''' |
− | + | Before you invoke any of the following APIs make sure to invoke the open function to open an SPI device. After finish operations make sure to invoke the HardwareControler.close function to close the device:<br /> | |
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
int spi_fd = HardwareControler.open("/dev/spidev1.0", FileCtlEnum.O_RDWR ); | int spi_fd = HardwareControler.open("/dev/spidev1.0", FileCtlEnum.O_RDWR ); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | The following APIs need to take a file descriptor spi_fd as a parameter:<br /> | |
::{| class="wikitable" | ::{| class="wikitable" | ||
|- | |- | ||
− | | style="background: PaleTurquoise; color: black" | ''' | + | | style="background: PaleTurquoise; color: black" | '''API Name''' |
− | | style="background: PaleTurquoise; color: black" |''' | + | | style="background: PaleTurquoise; color: black" |'''Parameters and Return Value''' |
− | | style="background: PaleTurquoise; color: black" |''' | + | | style="background: PaleTurquoise; color: black" |'''Function''' |
|- | |- | ||
| | | | ||
Line 430: | Line 430: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | spi_fd: | + | spi_fd: SPI device's file descriptor<br /> |
− | bits: | + | bits: number of bits<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns 0 if it is a success otherwise returns a negative number<br /> | |
<br /> | <br /> | ||
|| | || | ||
− | + | Sets the number of bits to read.<br /> | |
− | + | In general the number of bits to read is either 8 or 16 but there are exceptions in which you need to set the number of bits to read.<br /> | |
− | + | If this parameter is set to 0 it reads 8 bits (ioctl SPI_IOC_WR_BITS_PER_WORD). | |
|- | |- | ||
Line 450: | Line 450: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | spi_fd: | + | spi_fd: SPI device's file descriptor<br /> |
− | bits: | + | bits: number of bits<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns 0 if it is a success otherwise returns a negative number.<br /> | |
<br /> | <br /> | ||
|| | || | ||
− | + | Sets the number of bits to read from an SPI device(ioctl SPI_IOC_RD_BITS_PER_WORD) | |
|- | |- | ||
Line 468: | Line 468: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | spi_fd: | + | spi_fd: SPI device's file descriptor<br /> |
− | order: | + | order: SPIEnum.MSBFIRST or SPIEnum.LSBFIRST<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns 0 if it is a success otherwise returns a negative number<br /> | |
|| | || | ||
− | + | Sets either most significant bits(SPIEnum.MSBFIRST) or least significant bits(SPIEnum.LSBFIRST) to be transmitted first. | |
|- | |- | ||
Line 485: | Line 485: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | spi_fd: | + | spi_fd: SPI device's file descriptor<br /> |
− | divider: | + | divider: a clock divider which should be a value specified in SPIEnum.java and starts with "SPI_CLOCK_" e.g.<br /> |
SPIEnum.SPI_CLOCK_DIV128<br /> | SPIEnum.SPI_CLOCK_DIV128<br /> | ||
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns 0 if it is a success otherwise returns a negative number.<br /> | |
|| | || | ||
− | + | Sets an SPI clock divider. | |
|- | |- | ||
Line 503: | Line 503: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | spi_fd: | + | spi_fd: SPI device's file descriptor<br /> |
− | mode: | + | mode: SPI device's data mode. It can be any value among SPIEnum.SPI_MODE0 ~ SPIEnum.SPI_MODE3<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns 0 if it is a success otherwise returns a negative number.<br /> | |
|| | || | ||
− | + | Sets SPI's data mode | |
|- | |- | ||
Line 523: | Line 523: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | spi_fd: | + | spi_fd: SPI device's file descriptor<br /> |
− | byteData: | + | byteData: data to be written to an SPI device<br /> |
− | spi_delay: | + | spi_delay: delay time<br /> |
− | spi_speed: | + | spi_speed: transfer speed<br /> |
− | spi_bits: | + | spi_bits: number of bits<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns read data if it is a success otherwise returns a negative number<br /> | |
<br /> | <br /> | ||
|| | || | ||
− | + | Transfers and receives a byte simultaneously. e.g. | |
int byteRet = SPItransferOneByte(spi_fd | int byteRet = SPItransferOneByte(spi_fd | ||
, 0xAA | , 0xAA | ||
Line 554: | Line 554: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | spi_fd: | + | spi_fd: SPI device's file descriptor<br /> |
− | writeData: | + | writeData: data to be written to a device<br /> |
− | readBuff: | + | readBuff: buffer to store read data<br /> |
− | spi_delay: | + | spi_delay: delay time<br /> |
− | spi_speed: | + | spi_speed: transfer speed<br /> |
− | spi_bits: | + | spi_bits: number of bits<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns 0 if it is a success otherwise returns a negative number.<br /> | |
<br /> | <br /> | ||
|| | || | ||
− | + | Transfers and receives multiple bytes simultaneously. | |
|- | |- | ||
Line 579: | Line 579: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | spi_fd: | + | spi_fd: SPI device's file descriptor<br /> |
− | writeData: | + | writeData: data to be written to a device<br /> |
− | spi_delay: | + | spi_delay: delay time<br /> |
− | spi_speed: | + | spi_speed: transfer speed<br /> |
− | spi_bits: | + | spi_bits: number of bits<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns 0 if it is a success otherwise returns a negative number<br /> | |
<br /> | <br /> | ||
|| | || | ||
− | + | Writes multiple bytes to an SPI device. | |
|- | |- | ||
Line 603: | Line 603: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | readBuff: | + | readBuff: buffer to store read data<br /> |
− | spi_delay: | + | spi_delay: delay time<br /> |
− | spi_speed: | + | spi_speed: transfer speed<br /> |
− | spi_bits: | + | spi_bits: number of bits<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns 0 if it is a success otherwise returns a negative number.<br /> | |
<br /> | <br /> | ||
|| | || | ||
− | + | Reads multiple bytes from an SPI device. | |
|- | |- | ||
|} | |} | ||
− | === | + | ===GPIO APIs=== |
− | ''' | + | '''Applicable Platforms: All''' |
::{| class="wikitable" | ::{| class="wikitable" | ||
|- | |- | ||
− | | style="background: PaleTurquoise; color: black" | ''' | + | | style="background: PaleTurquoise; color: black" | '''API Name''' |
− | | style="background: PaleTurquoise; color: black" |''' | + | | style="background: PaleTurquoise; color: black" |'''Parameters and Return Value''' |
− | | style="background: PaleTurquoise; color: black" |''' | + | | style="background: PaleTurquoise; color: black" |'''Function''' |
|- | |- | ||
Line 632: | Line 632: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | pin: | + | pin: GPIO Pin<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns 0 if it is a success otherwise returns a negative number.<br /> | |
|| | || | ||
− | + | Tells system to export a GPIO pin<br /> | |
− | + | It is identical to run "echo pin > /sys/class/gpio/export" | |
|- | |- | ||
Line 648: | Line 648: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | pin: | + | pin: GPIO Pin<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns 0 if it is a success otherwise returns a negative number.<br /> | |
|| | || | ||
− | + | Tells system to unexport a GPIO pin<br /> | |
− | + | It is identical to run "echo pin > /sys/class/gpio/unexport" | |
|- | |- | ||
Line 664: | Line 664: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | pin: | + | pin: GPIO Pin<br /> |
− | value: | + | value: it is either GPIOEnum.LOW which means a LOW level or GPIOEnum.HIGH which means a HIGH level<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns 0 if it is a success otherwise returns a negative number.<br /> | |
|| | || | ||
− | + | Sets a HIGH or LOW to a GPIO pin | |
|- | |- | ||
Line 680: | Line 680: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | pin: | + | pin: GPIO Pin<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns either GPIOEnum.LOW <br /> | |
− | + | or GPIOEnum.HIGH if it is a success otherwise returns a negative number.<br /> | |
|| | || | ||
− | + | Gets a GPIO pin's status(HIGH or LOW) | |
|- | |- | ||
Line 696: | Line 696: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | pin: | + | pin: GPIO Pin<br /> |
− | direction: | + | direction: it is either GPIOEnum.IN which means the direction is INPUT <br /> |
− | GPIOEnum. | + | or GPIOEnum.OUT which means the direction is OUTPUT<br /> |
<br /> | <br /> | ||
− | + | Return Value:<br /> | |
− | + | Returns 0 if it is a success otherwise returns a negative number.<br /> | |
|| | || | ||
− | + | Sets a GPIO pin's direction. | |
|- | |- | ||
Line 713: | Line 713: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Parameter:<br /> | |
− | pin: | + | pin: GPIO Pin<br /> |
<br /> | <br /> | ||
− | + | Returns either GPIOEnum.IN or<br /> | |
− | + | GPIOEnum.OUT if it is a success otherwise returns a negative number.<br /> | |
|| | || | ||
− | + | Gets a GPIO pin's direction(either OUTPUT or INPUT) | |
|- | |- | ||
|} | |} | ||
− | === | + | ===APIs for Checking Board Type=== |
::{| class="wikitable" | ::{| class="wikitable" | ||
|- | |- | ||
− | | style="background: PaleTurquoise; color: black" | ''' | + | | style="background: PaleTurquoise; color: black" | '''API Name''' |
− | | style="background: PaleTurquoise; color: black" |''' | + | | style="background: PaleTurquoise; color: black" |'''Parameters and Return Value''' |
− | | style="background: PaleTurquoise; color: black" |''' | + | | style="background: PaleTurquoise; color: black" |'''Function''' |
|- | |- | ||
| | | | ||
Line 735: | Line 735: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| | || | ||
− | + | Returns a board type which is a number and <br /> | |
− | + | is defined in BoardType.java if it is a success<br /> | |
− | + | otherwise returns a negative number.<br /> | |
|| | || | ||
− | + | Here is a code sample:<br /> | |
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
private int mBoardType = HardwareControler.getBoardType(); | private int mBoardType = HardwareControler.getBoardType(); | ||
Line 749: | Line 749: | ||
|} | |} | ||
− | == | + | ==Code Samples== |
{{FriendlyThings Android8 Demos}} | {{FriendlyThings Android8 Demos}} | ||
{{FriendlyThings Android7 Demos}} | {{FriendlyThings Android7 Demos}} | ||
{{FriendlyThings Earlier version of Android Demos}} | {{FriendlyThings Earlier version of Android Demos}} |
Latest revision as of 14:57, 28 December 2018
1 Introduction
FriendlyThings is an Android SDK developed by FriendlyElec to access hardware. Users can use it to access various hardware resources Uart, SPI, I2C, GPIO etc on a FriendlyElec ARM board under Android. This SDK is based on Android-NDK. Users can use it to develop popular IoT applications without directly interacting with drivers.
Template:FriendlyThings Installation Guides
2 APIs in libfriendlyarm-things.so Library
Here is a list of HardwareControler APIs and these APIs are class interfaces and can be used directly, and you don't need to create a HardwareControler instance:
2.1 GPIO APIs
Applicable Platforms: All
API Name Parameters and Return Values Function int open( String devName , int flags)
Parameters:
devName: device that data will be written to
flags: access mode, e.g. read-only,read/write etc. You can refer to FileCtlEnum.java
Return Value:
Returns a file descriptor if it is a success or returns -1 if it is a failure.
Opens a device
int ioctlWithIntValue ( int fd, int cmd, int value)
Parameters:
fd: device's file descriptor
cmd: ioctl command
value: parameter that will be used by the command. It can only be an integer.
Return Value:
Returns 0 if it is a success or returns -1 if it is a failure.
Commands ioctl operations
ioctl(int fd, int cmd , byte[] buf)
Parameters:
fd: device's file descriptor
cmd: ioctl command
buf: parameter that will be used by the command
Return Value:
Returns 0 if it is a success or returns -1 if it is a failure.
Commands ioctl operations
if ioctl is a struct
you need to convert the struct to a byte stream
int write( int fd, byte[] data)
Parameters:
fd: device's file descriptor
data: data to be written to device
Return Value:
Returns the number of bytes written to the device if it is a success or returns -1 if it is a failure.
Writes characters to an opened device or file.
int read( int fd, byte[] buf, int len)
Parameters:
fd: device's file descriptor
buf: buffer to store data
len: number of bytes to be read
Return Value:
Returns the number of bytes that are read from the device if it is a success or returns -1 if it is a failure. Returns 0 if the file pointer already points to the end of the file.
Reads data from an opened device or file.
int select( int fd, int sec, int usec)
Parameters:
fd: file descriptor
sen: wait time in second
usec: wait time in nanosecond
Return Value:
If the file has data it returns 1. If the file doesn't have data it returns 0. If this operation fails it returns -1.
Checks if an opened device or file has data for reading.
void close(int fd)
Parameters:
fd: file descriptor.
Return Value:
No
Closes a file
2.2 APIs for Serial Communication
Applicable Platforms: All
API Name Parameters and Return Value Function int openSerialPortEx( String devName, long baud, int dataBits, int stopBits, String parityBit, String flowCtrl )
Parameters:
devName: device name
baud: baud rate
dataBits: databits(range of value: 5 ~ 8, 8 by default)
stopBits: stopbits(range of value: 1 ~ 2, 1 by default)
parityBit: paritybit(range of value: O means odd check, E means even check and N means no check)
flowCtrl: flow control(range of value: H means hardware flow control, S means software flow control and N means no flow control.)
Return Value:
Returns a file descriptor if it is a success. This file descriptor can be used in the functions of read, write, select and etc. It returns -1 if it is a failure.
Opens a serial device and returns a file descriptor.
Comments:
You need to open a serial device by invoking the openSerialPortEx function, poll the device's status by invoking the select function and read data from it if the device has data.
To write data to a device you can invoke the write function.
If no operations need to be performed on the device you need to invoke the close function to close it.
2.3 Onboad LED APIs
Applicable Platforms: FriendlyElec's Tiny and Smart CPU boards e.g. Tiny4412, Smart4412, Smart4418 and etc
API Name Parameters and Return Value Function int setLedState( int ledID, int ledState )
Parameters:
ledID: LED index(value range: 0 ~ 3)
ledState: 1 means on and 0 means off
Return Value:
Returns 0 if it is a success or returns -1 if it is a failure.
Turns on/off LED.
2.4 PWM Buzzer APIs
Applicable Platforms: All FriendlyElec's Tiny and Smart carrier boards which have a PWM buzzer, e.g. Tiny4412, Smart4412 ,Smart4418 and etc
API Name Parameters and Return Value Function int PWMPlay(int frequency);
Parameter:
frequency: sound frequency
Return Value:
Returns 0 if it is a success or returns -1 if it is a failure
Turns on a PWM buzzer to make sounds at a set frequency
int PWMStop();
Parameter:
No
Return Value:
Returns 0 if it is a success or returns -1 if it is -1
Turn off a PWM buzzer.
2.5 ADC APIs
Applicable Platforms: 6410, 210 and 4412
API Name Parameters and Return Value Function int readADC()
Parameter:
No
Return Value:
Returns a value if it is a success otherwise returns -1
Reads the value of the first channel of ADC.
int readADCWithChannel(int channel)
Parameters:
channel: ADC channel
Return Value:
Returns a value if it is a success otherwise returns -1
Reads the value of a specified channel of ADC
int[] readADCWithChannels(int[] channels);
Parameter:
channels: array of channels
Return Value:
Returns an array of values from specified channels if it is a success otherwise returns NULL.
Reads values of an array of channels
2.6 I2C APIs
Applicable Platforms: All
Before you invoke any of the following APIs make sure to invoke the open function to open an I2C device. After finish operations make sure to invoke the HardwareControler.close function to close the device:
int fd = HardwareControler.open("/dev/i2c-0", FileCtlEnum.O_RDWR);
The following APIs need to take a file descriptor as a parameter:
API Name Parameters and Return Value Function int setI2CSlave(int fd, int slave);
Parameter:
fd: I2C device's file descriptor
slave: I2C device's address. For example in general an EEPROM's device address is 0x50
Return Value:
Returns 0 if it is a success otherwise returns -1
Sets an I2C device's address. For example in general an EEPROM's device address is 0x50.
int setI2CTimeout(int fd, int timeout)
Parameter:
fd: I2C device's file descriptor
timeout: timeout
Return Value:
Returns 0 if it is a success otherwise returns -1
Sets timeout(ioctl I2C_TIMEOUT)
int setI2CRetries(int fd, int retries)
Parameter:
fd: I2C device's file descriptor
retries: number of retries
Return Value:
Returns 0 if it is a success otherwise returns -1
Sets the number of retries(ioctl I2C_RETRIES)
int writeByteToI2C(int fd , int pos byte byteData , int wait_ms)
Parameter:
fd: I2C device's file descriptor
pos: position to write data to
byteData: data to be written to
wait_ms: wait time in millisecond
Return Value:
Returns 0 if it is a success otherwise returns -1
Writes a byte to the specified position of an I2C device in the specified wait time(in millisecond).
int readByteFromI2C(int fd , int pos , int wait_ms);
Parameter:
fd: I2C device's file descriptor
pos: position to write data to
wait_ms: wait time in millisecond
Return Value:
Returns 0 if it is a success otherwise returns -1
Reads a byte from the specified position of an I2C device in the specified wait time(in millisecond).
2.7 SPI APIs
Applicable Platforms: All
Before you invoke any of the following APIs make sure to invoke the open function to open an SPI device. After finish operations make sure to invoke the HardwareControler.close function to close the device:
int spi_fd = HardwareControler.open("/dev/spidev1.0", FileCtlEnum.O_RDWR );
The following APIs need to take a file descriptor spi_fd as a parameter:
API Name Parameters and Return Value Function int setSPIWriteBitsPerWord( int spi_fd, int bits )
Parameter:
spi_fd: SPI device's file descriptor
bits: number of bits
Return Value:
Returns 0 if it is a success otherwise returns a negative number
Sets the number of bits to read.
In general the number of bits to read is either 8 or 16 but there are exceptions in which you need to set the number of bits to read.
If this parameter is set to 0 it reads 8 bits (ioctl SPI_IOC_WR_BITS_PER_WORD).int setSPIReadBitsPerWord( int spi_fd , int bits )
Parameter:
spi_fd: SPI device's file descriptor
bits: number of bits
Return Value:
Returns 0 if it is a success otherwise returns a negative number.
Sets the number of bits to read from an SPI device(ioctl SPI_IOC_RD_BITS_PER_WORD)
int setSPIBitOrder( int spi_fd , int order)
Parameter:
spi_fd: SPI device's file descriptor
order: SPIEnum.MSBFIRST or SPIEnum.LSBFIRST
Return Value:
Returns 0 if it is a success otherwise returns a negative number
Sets either most significant bits(SPIEnum.MSBFIRST) or least significant bits(SPIEnum.LSBFIRST) to be transmitted first.
int setSPIClockDivider( int spi_fd , int divider)
Parameter:
spi_fd: SPI device's file descriptor
divider: a clock divider which should be a value specified in SPIEnum.java and starts with "SPI_CLOCK_" e.g.
SPIEnum.SPI_CLOCK_DIV128
Return Value:
Returns 0 if it is a success otherwise returns a negative number.
Sets an SPI clock divider.
int setSPIDataMode( int spi_fd , int mode)
Parameter:
spi_fd: SPI device's file descriptor
mode: SPI device's data mode. It can be any value among SPIEnum.SPI_MODE0 ~ SPIEnum.SPI_MODE3
Return Value:
Returns 0 if it is a success otherwise returns a negative number.
Sets SPI's data mode
int SPItransferOneByte( int spi_fd , byte byteData , int spi_delay , int spi_speed , int spi_bits)
Parameter:
spi_fd: SPI device's file descriptor
byteData: data to be written to an SPI device
spi_delay: delay time
spi_speed: transfer speed
spi_bits: number of bits
Return Value:
Returns read data if it is a success otherwise returns a negative number
Transfers and receives a byte simultaneously. e.g. int byteRet = SPItransferOneByte(spi_fd , 0xAA , 0 /*delay*/ , 500000/*speed*/ ,8/*bits*/)
int SPItransferBytes(int spi_fd , byte[] writeData , byte[] readBuff , int spi_delay , int spi_speed , int spi_bits)
Parameter:
spi_fd: SPI device's file descriptor
writeData: data to be written to a device
readBuff: buffer to store read data
spi_delay: delay time
spi_speed: transfer speed
spi_bits: number of bits
Return Value:
Returns 0 if it is a success otherwise returns a negative number.
Transfers and receives multiple bytes simultaneously.
int writeBytesToSPI(int spi_fd , byte[] writeData , int spi_delay , int spi_speed , int spi_bits)
Parameter:
spi_fd: SPI device's file descriptor
writeData: data to be written to a device
spi_delay: delay time
spi_speed: transfer speed
spi_bits: number of bits
Return Value:
Returns 0 if it is a success otherwise returns a negative number
Writes multiple bytes to an SPI device.
int readBytesFromSPI(int spi_fd , byte[] readBuff , int spi_delay , int spi_speed , int spi_bits)
Parameter:
readBuff: buffer to store read data
spi_delay: delay time
spi_speed: transfer speed
spi_bits: number of bits
Return Value:
Returns 0 if it is a success otherwise returns a negative number.
Reads multiple bytes from an SPI device.
2.8 GPIO APIs
Applicable Platforms: All
API Name Parameters and Return Value Function int exportGPIOPin(int pin)
Parameter:
pin: GPIO Pin
Return Value:
Returns 0 if it is a success otherwise returns a negative number.
Tells system to export a GPIO pin
It is identical to run "echo pin > /sys/class/gpio/export"int unexportGPIOPin(int pin)
Parameter:
pin: GPIO Pin
Return Value:
Returns 0 if it is a success otherwise returns a negative number.
Tells system to unexport a GPIO pin
It is identical to run "echo pin > /sys/class/gpio/unexport"int setGPIOValue(int pin, int value)
Parameter:
pin: GPIO Pin
value: it is either GPIOEnum.LOW which means a LOW level or GPIOEnum.HIGH which means a HIGH level
Return Value:
Returns 0 if it is a success otherwise returns a negative number.
Sets a HIGH or LOW to a GPIO pin
int getGPIOValue(int pin)
Parameter:
pin: GPIO Pin
Return Value:
Returns either GPIOEnum.LOW
or GPIOEnum.HIGH if it is a success otherwise returns a negative number.
Gets a GPIO pin's status(HIGH or LOW)
int setGPIODirection(int pin, int direction)
Parameter:
pin: GPIO Pin
direction: it is either GPIOEnum.IN which means the direction is INPUT
or GPIOEnum.OUT which means the direction is OUTPUT
Return Value:
Returns 0 if it is a success otherwise returns a negative number.
Sets a GPIO pin's direction.
int getGPIODirection(int pin)
Parameter:
pin: GPIO Pin
Returns either GPIOEnum.IN or
GPIOEnum.OUT if it is a success otherwise returns a negative number.
Gets a GPIO pin's direction(either OUTPUT or INPUT)
2.9 APIs for Checking Board Type
API Name Parameters and Return Value Function int getBoardType()
Returns a board type which is a number and
is defined in BoardType.java if it is a success
otherwise returns a negative number.
Here is a code sample:
private int mBoardType = HardwareControler.getBoardType(); if (mBoardType == BoardType.NanoPC_T4) { // do something... }
3 Code Samples
3.1 Android8.1
3.1.1 Applicable Boards
- NanoPC-T4/NanoPi-M4/NanoPi-NEO4
Android8.1 Demos Serial Port GPIO ADC https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/ADCDemo
PWM https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/vendor/friendlyelec/apps/PWMDemo
I2C RTC Watch dog SPI
3.2 Android7.1.2
3.2.1 Applicable Boards
- NanoPC-T4/NanoPi-M4/NanoPi-NEO4
Android7.1.2 Demos Serial Port GPIO ADC https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/ADCDemo
PWM https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/vendor/friendlyelec/apps/PWMDemo
I2C RTC Watch dog SPI
3.3 Earlier version of Android
3.3.1 Applicable Boards & OS
- NanoPC-T3/NanoPi-M3: Android 5
- Smart4418 SDK/SOM-4418/NanoPC-T2/NanoPi-M2/NanoPi S2: Android 5, Android 4.4
- Tiny4412: Android 4.2, Android 5
- Tiny210/Smart210/Mini210: Android 4.2
- Tiny6410/Mini6410: Android 2.3