FireflyApi2 1.Overview FireflyApi2 provides some system interfaces and encapsulates the functional interface that users need, so that users can use the system's common interfaces in an easy and simple way. This document is only a brief description of the interface. For specific use, please refer to Source code of FireflyApi2Demo. Support all series models of rk3568/rk3566 Android11 platform. Support all series models of rk3588 Android12 platform. 2.Resources download and usage When using FireflyApi2, first check whether the firmware of the machine is the latest version. The latest version of the firmware has built-in FireflyApi2Demo application based on FireflyApi2. You can find the corresponding model on the Resource Download page to view and download the latest firmware. At the same time, you can also synchronize the SDK to the latest submission. The specific steps are as follows: first, select the corresponding wiki , then find the synchronized method in the Android "Development"-> "Build the Android Firmware". FireflyApi2Demo source code download: FireflyApi2Demo The demo mainly contains fireflyapi2.aar, the source code of FireflyApi2Demo. Its structure directory is as follows: fireflyapi2demo/ ├── app │   ├── build.gradle │   ├── libs │   │   └── fireflyapi2.aar │   ├── proguard-rules.pro │   └── src ├── build.gradle ├── gradle ├── gradle.properties ├── gradlew ├── gradlew.bat ├── local.properties └── settings.gradle 2.1 Brief introduction of FireflyApi2Demo application FireflyApi2Demo is a demo program based on the interface of FireflyApi2. Users can refer to the source code of the demo to realize the required functions. The application is as shown in the figure: After clicking to enter the application, there will be a corresponding interface implementation list, as shown in the figure: 2.2 FireflyApi2 Usage 2.2.1 Android Studio Android studio is an Android integrated development tool launched by Google. Based on IntelliJ IDEA and similar to eclipse ADT, Android Studio provides integrated Android development tools for development and debugging. 2.2.2 Import fireflyapi2.aar in the project FireflyApi2Demo presents the corresponding functions of the interface to the user. If needs to write own application, it can put fireflyapi2.aar in the "libs" directory: app/ ├── build.gradle ├── libs │   └── fireflyapi2.aar Then configure build.gradle file, you can customize your application with FireflyApi2. dependencies { ...... + implementation files('libs/fireflyapi2.aar') } 3.FireflyApi2 interface description To use the interface of FireflyApi2, you need to import the dependency and obtain the instantiated object: import com.firefly.api2.FireflyApi2; public class *** { ...... private static FireflyApi2 mFireflyApi2 = FireflyApi2.getInstance(); ...... } 3.1 System information 1. FireflyApi2 version information Function:public String getFireflyApiVersion() Description:FireflyApi2 version information Example: String version = mFireflyApi2.getFireflyApiVersion(); 2. Get device model Function:public String getAndroidModel() Description:Get device model Example: String model= mFireflyApi2.getAndroidModel(); 3. Get device Android system version Function:public String getAndroidVersion() Description:Get device Android system version Example: String version= mFireflyApi2.getAndroidVersion(); 4. Get device RAM size(MB) Function:public long getRamSpace() Description:Get device RAM size, unit is MB Return:Returns the RAM size in MB Example: long ram = mFireflyApi2.getRamSpace(); 5. Get device RAM size(GB) Function:public String getFormattedRamSpace() Description:Get device RAM size and format it as String Return:Device RAM size, String format (1.5GB) Example: String ram = mFireflyApi2.getFormattedRamSpace(); 6. Get the built-in Flash size of the device(MB) Function:public long getFlashSpace() Description:Get the built-in Flash size of the device,unit is MB Return:Returns the Flash size in MB Example: long flash = mFireflyApi2.getFlashSpace(); 7. Get the built-in Flash size of the device(GB) Function:public String getFormattedFlashSpace() Description:Get the built-in Flash size of the device,and format it as String Return:The Flash size of the device, String format (15.5GB) Example: String ram = mFireflyApi2.getFormattedFlashSpace(); 8. Get the firmware kernel version of the device Function:public String getFormattedKernelVersion() Description:Get the firmware kernel version of the device Return:Kernel version Example: String kernel_version= mFireflyApi2.getFormattedKernelVersion(); 9. Get the firmware system version of the device Function:public String getAndroidDisplay() Description:Get the firmware system version of the device Return:Firmware system version Example: String version= mFireflyApi2.getAndroidDisplay(); 3.2 System settings 1. System shutdown Function:public void shutDown(boolean showConfirm) Description:System shutdown Parameters:showConfirm Does showConfirm display the shutdown box(true/false) Example: mFireflyApi2.shutDown(false); 2. System reboot Function:public void reboot() Description:System reboot Example: mFireflyApi2.reboot(); 3. System sleep Function:public void sleep() Description:System sleep Example: mFireflyApi2.sleep(); 4. Screenshot Function:public boolean takeScreenshot(String path,String name) Description:Take a screenshot and save it to the specified path Parameters:path Storage path       name File stored name (available only in PNG format) Return: Whether a screenshot is successfully captured true/false Example: mFireflyApi2.takeScreenshot("/sdcard/","123.png"); 5. Screen rotation Function:public boolean setRotation(int rotation) Description:Screen rotation Screen parameters:rotation Screen direction    Surface.ROTATION_0    Surface.ROTATION_90    Surface.ROTATION_180    Surface.ROTATION_270   Example:mFireflyApi2.setRotation(Surface.ROTATION_0); 6. Get the screen direction Function:public int getRotation() Description:Get the screen direction Return:rotation Screen direction    Surface.ROTATION_0    Surface.ROTATION_90    Surface.ROTATION_180    Surface.ROTATION_270 Example: int rotation = mFireflyApi2.getRotation(); 7. Set system date Function:public boolean setSysDate( int year, int month, int day) Description:Set system date Parameters:year, month, day Return:true(success)/false(fail) Example: mFireflyApi2.setSysDate(2022,7,21); 8. Set system time Function:public boolean setSysTime( int hour,int minute,int second) Description:Set system time Parameters:hour, minute, second Return:true(success)/false(fail) Example: mFireflyApi2.setSysTime(5,30,45); 9. Synchronize NTP server time Function:public boolean syncNtpTime( String ntpServer, int timeout) Description:Synchronize NTP server time Parameters:ntpServer Server       timeout Timeout Return:true(success)/false(fail) Example: mFireflyApi2.syncNtpTime("time.windows.com", 30000); 10. Silent installation Function:public boolean silentInstal(String path, IPackageInstallObserver observer) Description:Silent installation Parameters:path Apk file path       IPackageInstallObserver Process the returned install result Return:true(success)/false(fail) Example: mFireflyApi2.silentInstall("/sdcard/***.apk", new IPackageInstallObserver.Stub(){ @Override public void packageInstalled(String packageName, int returnCode) { Log.v("debug", "packageInstalled packageName:" + packageName + ",returnCode:" + returnCode); } }); 11. Silent installation Function:public boolean silentUnInstall(String package_name, IPackageDeleteObserver observer) Description:Silent installation Parameters:package_name Is the package name of the application to be uninstalled       IPackageDeleteObserver Process the returned uninstall result Return:true(success)/false(fail) Remark:Only supports apps installed manually, but not for built-in apps Example: mFireflyApi2.silentUnInstall("com.android.settings", new IPackageDeleteObserver.Stub() { @Override public void packageDeleted(String packageName, int returnCode) { Log.v("debug", "packageDeleted packageName:" + packageName + ",returnCode:" + returnCode); } }); 12. Execute shell command Function:public Command execCmd(String cmd) Description:Execute shell command Parameters:cmd shell command Return:Command input Input command         output Output result         exitStatus Shell running status, 0 is normal exit Example: mFireflyApi2.execCmd("ls"); 13. su permission to run shell command Function:public static Command execSuCmd(String cmd) Description:su permission to run shell command Parameters:cmd shell command Return:Command input Input command         output Output result         exitStatus Shell running status, 0 is normal exit Example: mFireflyApi2.execSuCmd("cat init.rk30board.rc");//init.rk30board.rc Default permission 750 14. Application startup Function:public void setAppStartup(String packageName) Description:The third-party application starts up automatically Parameters:packageName App package name Example: mFireflyApi2.setAppStartup("com.tchip.testscheduleonoff"); 15. Cancel application startup Function:public void cleanAppStartup() Description:Cancel application startup Example: mFireflyApi2.cleanAppStartup(); 3.3 Hardware interface 3.3.1 GPIO 1. Gpio control Function:public boolean gpioCtrl(int gpio, String direction, int value) Description:Control gpio Parameters:gpio Gpio number       direction in, out       value 1/0 Return:true (success)/ false(false) Example: boolean success = mFireflyApi2.gpioCtrl(150,"out",1);//GPIO4_C6 gpio the node is 150 2. Read the value of gpio Function:public int gpioRead(int gpio) Description:Read the value of gpio Parameters:gpio Gpio number Return:Returns -1 when the read fails Example: int gpioValue = mFireflyApi2.gpioRead(150);//GPIO4_C6 gpio the node is 150 3. Check if the gpio port is occupied by the system Function:public boolean isGpioOccupied(int gpio) Description:Check if the gpio port is occupied by the system Parameters:gpio Gpio number Return:true(occupied)/false(free) Example: boolean occupied = mFireflyApi2.isGpioOccupied(150);//GPIO4_C6 gpio the node is 150 4. Parse the node value of gpio Function:public int gpioParse(String gpioStr) Description:Parse the node value of gpio, for example GPIO4_C6 is converted to node 150 Parameters:gpioStr Return:Returns -1 when the parse fails Example: int gpioValue= mFireflyApi2.gpioParse("GPIO4_C6");//GPIO4_C6 gpio the node is 150 3.3.2 Serial port usage Import header file import com.firefly.api2.serialport.SerialHelper2; Open the serial port according to the path and baud rate, and set the callback function private SerialHelper2 serialHelper; private boolean openSerialPort(String path,int baudrate) { ...... serialHelper = new SerialHelper2(path, baudrate) { @Override protected void onDataReceived(final byte[] data) { //Hexadecimal Log.v(TAG,serialHelper.getPort()+" onDataReceived:"+ ByteUtil.ByteArrToHex(data).trim()); //Strings Log.v(TAG,serialHelper.getPort()+" onDataReceived-String:"+ new String(data, 0,data.length).trim()); } }; try { serialHelper.open(); return serialHelper.isOpen(); } catch (IOException e) { e.printStackTrace(); } return false; } Send a string to the serial port serialHelper.sendTxt("112233445566"); Send hexadecimal to serial port //such as 0x11,0x22,0x33,0x44,0x55,0x66 serialHelper.sendHex("112233445566"); Close the serial port serialHelper.close(); 3.3.3 CAN usage Before using, you need to understand the main functions and usage of "CanFilter", "CanMessage", "CanMessageListener" and "CanSocket". CanFilter Constructor:public CanFilter(final int mask, final int filter) Description:Used filter the received frame information Parameters:mask Mask       filter Frame ID Example: //No filtering CanFilter[] nofilters = new CanFilter[0]; //Only frames with ID 0x400 and 0x410 are received CanFilter[] filters = new CanFilter[]{new CanFilter(0xfff, 0x400), new CanFilter(0xfff, 0x410)}; CanMessage Constructor:public CanMessage(final boolean isEFF, final boolean isRTR, final int id, final byte[] data) Description:Used to store frame information Parameters:isEFF true(Extended frame)/false(Standard frame)       isRTR true(Remote frame)/false( Data frame)       id Frame Id       data Frame Data Example: //Store one frame of information, id is 0x100, Standard frame, Data frame, //Data are {0x01,0x02,0x03,0x04,0x05,0x6,0x7}, Frame information with length of 7 boolean isEFF = false; boolean isRTR = false; int canid = 0x100; byte[] data = new byte[] {(byte)1, (byte)2, (byte)3, (byte)4, (byte)5, (byte)6,(byte)7}; CanMessage message = new CanMessage(isEFF, isRTR, canid, data); Get the ID of frame information Function:public final int getRawId() Description:Get the ID of frame information Example: int can_id = message.getRawId(); Get the data of frame information Function:public final byte[] getData() Description:Get the data of frame information Example: byte[] data = message.getData(); Frame information strings Function:public final String toString() Description:Frame information strings Example: Log.i("debug", message.toString()); CanMessageListener Function:public void rxedCanMessage() Description:Processing interface function for receiving can information Example: public class TestCanHelper implements CanMessageListener { public final void rxedCanMessage(final CanMessage message) { Log.i(TAG, message.toString()); } } CanSocket Open CAN device Function:public int canDeviceOpen(final String canDevice)throws IOException Description:Open CAN device,get socket Para:canDevice CAN device Return:socket, return -1 if failed Example : int socket = mCanSocket.canDeviceOpen("can0"); Initialize receive task Function:public void initReceiveTask(final int socket, CanFilter[] filters) Description:Initialize receive task Parameters:socket Socket       filters Filters Example: mCanSocket.initReceiveTask(mRxSocket, filters); Start receive task Function:public boolean startReceiveTask() Description:Start receive task Return:true(success)/false(fail) Example: boolean result = mCanSocket.startReceiveTask(); Stop receive task Function:public boolean stopReceiveTask() Description:Stop receive task Return:true(success)/false(fail) Example: boolean result = mCanSocket.stopReceiveTask(); Send frame information Function:public void transmit(CanMessage message, int socket)throws IOException Description:Send frame information Parameters:message Frame information       socket Socket Example: mCanSocket.transmit(message, mTxSocket); Get the Status of receiving task Function:public boolean RxTaskState() Description:Get the Status of receiving task Return: true Receive task is running     false Receive task is stopped Example: boolean state = mCanSocket.RxTaskState(); Close CAN device Function:public void closeDevice(final int socket, final String canDevice) Description:Close CAN device Parameters: canDevice CAN device Example: mCanSocket.closeDevice(socket, "can0"); Add receive listener Function:public void addMessageListener(final CanMessageListener canMessageListener) Description:Add receive listener Parameters:canMessageListener Receive listener Example: mCanSocket.addMessageListener(this); Remove receive listener Function:public void removeMessageListener(final CanMessageListener canMessageListener) Description:Remove receive listener Parameters:canMessageListener Receive listener Example: mCanSocket.removeMessageListener(this); Clear receive listener Function:public void clearMessageListeners() Description:Clear receive listener Example: mCanSocket.clearMessageListeners(); Set baud rate Function:public static boolean setCanBaudRate(String canDevice, String baudrate) Description:Set baud rate Parameters: canDevice CAN device       baudrate baud rate Return: true(success)/false(fail) Example: boolean result = CanSocket.setCanBaudRate("can0", "500000"); // can0 baud rate is 500Kbps Get CAN device Function:public static String[] getCanDeviceArr() Description:Get CAN device Return:Available CAN devices Example: String[] canDeviceArr = CanSocket.getCanDeviceArr(); Simple usage example import android.util.Log; import com.firefly.api2.can.CanFilter; import com.firefly.api2.can.CanMessage; import com.firefly.api2.can.CanMessageListener; import com.firefly.api2.can.CanSocket; import java.io.IOException; public class CanTest implements CanMessageListener { private static String TAG = "CanTest"; private CanSocket mCanSocket = new CanSocket(); private int txSocket, rxSocket; public CanTest(){} public void send()throws IOException { boolean isEFF = false; boolean isRTR = false; int id = 0x100; byte[] data = new byte[] {(byte)1, (byte)2, (byte)3, (byte)4, (byte)5, (byte)6,(byte)7, (byte)8}; CanMessage message = new CanMessage(isEFF, isRTR, id, data); CanSocket.setCanBaudRate("can0", "500000"); txSocket = mCanSocket.canDeviceOpen("can0"); mCanSocket.transmit(message,txSocket); mCanSocket.closeDevice(txSocket, "can0"); } public void receive()throws IOException{ CanFilter[] filter = new CanFilter[0]; CanSocket.setCanBaudRate("can1", "500000"); int rxSocket = mCanSocket.canDeviceOpen("can1"); mCanSocket.initReceiveTask(rxSocket, filter); mCanSocket.clearMessageListeners(); mCanSocket.addMessageListener(this); mCanSocket.startReceiveTask(); } public void stopTask(){ mCanSocket.stopReceiveTask(); mCanSocket.removeMessageListener(this); mCanSocket.closeDevice(rxSocket, "can1"); } @Override public void rxedCanMessage(final CanMessage message){ Log.d(TAG, "rxedCanMessage: " + message.toString()); } } 3.4 Installation upgrade 1. Local ota package upgrade Function:public void installPackage(String path) Description:Restart the ota package upgrade. Currently, it only supports to put in the built-in storage root directory, i.e./sdcard/ Parameter:path Absolute path to the ota package Example: mFireflyApi2.installPackage("/sdcard/update.zip"); 3.5 Network The network feature needs to add the following permissions: 3.5.1 Ethernet 1. Whether it is a dual Ethernet port Function:public boolean isDualEth(){ Description:Get whether the device is a dual Ethernet port Return:true Dual Ethernet port     false Single Ethernet port Example: boolean isDual = = mFireflyApi2.isDualEth(); 2. Get the MAC address of the device's main Ethernet Function:public String getEthMacAddress() Description:Get the MAC address of the device's main Ethernet Return:Returns null if failed Example: String ethMac = mFireflyApi2.getEthMacAddress(); 3. Get device's main Ethernet information Function:public EthernetInfo getEthConfiguration() Description:Get device's main Ethernet information(including:ip,netmask,gateway,dns1,dns2) Example: IpConfig info = mFireflyApi2.getEthConfiguration(); debug("IpAddress:"+info.getIpAddress()+"\n"); debug("Netmask:"+info.getNetmask()+"\n"); debug("Gateway:"+info.getGateway()+"\n"); debug("Dns1:"+info.getDns1()+"\n"); debug("Dns2:"+info.getDns2()+"\n"); 4. Set the IP address of the device's main Ethernet Function:public boolean setEthConfiguration(boolean isStatic,String ipaddressStr,String maskStr,String gatewayStr,String dns1Str,String dns2Str) Description:Set the IP address of the device's main Ethernet Parameters:isStatic When true is set to static ip, other parameters are valid, otherwise, when false is set to dynamic ip, it will automatically obtain ip address Return:Returns false if failed Example: boolean set_static_ip = mFireflyApi2.setEthConfiguration(true,"192.168.1.3",.....); boolean set_dhcp_ip = mFireflyApi2.setEthConfiguration(false,null,null,null,null,null); 5. Set main Ethernet on/off Function:public boolean setEthEnable(boolean enabled) Description:Set main Ethernet on/off Parameters:enabled true(on)/false(off) Example: boolean connect = mFireflyApi2.setEthEnable(); 6. Get the MAC address of the device's secondary Ethernet Function:public String getEthAuxMacAddress() Description:Get the MAC address of the device's secondary Ethernet Return:Returns null if failed Example: String auxEthMac = mFireflyApi2.getEthAuxMacAddress(); 7. Get device's secondary Ethernet information Function:public EthernetInfo getEthAuxConfiguration() Description:Get device's main Ethernet information(including:ip,netmask,gateway,dns1,dns2) Example: IpConfig info = mFireflyApi2.getEthAuxConfiguration(); debug("IpAddress:"+info.getIpAddress()+"\n"); debug("Netmask:"+info.getNetmask()+"\n"); debug("Gateway:"+info.getGateway()+"\n"); debug("Dns1:"+info.getDns1()+"\n"); debug("Dns2:"+info.getDns2()+"\n"); 8. Set the IP address of the device's secondary Ethernet 函数:public boolean setEthAuxConfiguration(boolean isStatic,String ipaddressStr,String maskStr,String gatewayStr,String dns1Str,String dns2Str) Description:Set the IP address of the device's secondary Ethernet Parameters:isStatic When true is set to static ip, other parameters are valid, otherwise, when false is set to dynamic ip, it will automatically obtain ip address Return:Returns false if failed Example: boolean set_static_ip = mFireflyApi2.setEthAuxConfiguration(true,"192.168.1.3",.....); boolean set_dhcp_ip = mFireflyApi2.setEthAuxConfiguration(false,null,null,null,null,null); 3.5.2 Wireless network 1. Open device hotspot Function:public void startTethering(ITetheringCallback callback) Description:Open device hotspot Parameter:callback Event callbacks Example: mFireflyApi2.startTethering(new ITetheringCallback.Stub (){ @Override public void onTetheringStarted() throws RemoteException { Log.v(TAG,"onTetheringStarted"); } @Override public void onTetheringFailed() throws RemoteException { Log.v(TAG,"onTetheringFailed"); } }); 2. Close device hotspot Function:public void stopTethering() Description:Close device hotspot Example: mFireflyApi2.stopTethering(); 3. Is the device hotspot turned on Function:public boolean isWifiHotspotEnabled() Description:Is the device hotspot turned on Return:true(on)/false(off) Example: boolean isEnabled = mFireflyApi2.isWifiHotspotEnabled(); 4. Get device hotspot configuration information Function:public SoftApConfiguration getWifiHotspotConfig() Description:Get device hotspot configuration information Return:SoftApConfiguration Example: SoftApConfiguration config = mFireflyApi2.getWifiHotspotConfig(); 5. Configure device hotspot information Function:public void configWifiHotspot(String ssid, String password) Description:Configure device hotspot information(Hotspot name, password) Parameters:ssid Hotspot name       password password Return:SoftApConfiguration Example: mFireflyApi2.configWifiHotspot("AndroidAP_Test","12345678"); 6. Automatically shutdown device hotspot Function:public void setWifiHotspotAutoShutdownEnabled(boolean enabled) Description:Automatically shutdown device hotspot(No device connection) Parameters:enabled true(on)/false(off) Example: mFireflyApi2.setWifiHotspotAutoShutdownEnabled(true); 7. whether the automatic shutdown function is enabled for the hotspot Function:public boolean isWifiHotspotAutoShutdownEnabled() Description:whether the automatic shutdown function is enabled for the hotspot Return:true(on)/false(off) Example: boolean mAutoOff = mFireflyApi2.isWifiHotspotAutoShutdownEnabled(); 8. The device hotspot uses a fixed IP address Function:public void setWifiHostspotUseFixedIfaceAddr(boolean use) Description:The device hotspot uses a fixed IP address Parameters:use true(on)/false(off) Example: mFireflyApi2.setWifiHostspotUseFixedIfaceAddr("true"); 3.6 Scheduled task 1. Set a scheduled startup Function:public void setSchedulePowerOn(int id, boolean enabled, long alarm_time) Description:Specify the UTC time, set the scheduled startup, only once without repetition Parameters:id Timed boot ID       enabled true(on)/false(off)       alarm_time Startup time (UTC time) Example: //Set start up in one minute, id is 11002 mFireflyApi2.setSchedulePowerOn(11002,true,System.currentTimeMillis()+60); //Cancel operation with ID 11002 mFireflyApi2.setSchedulePowerOn(11002,false,0); 2. Set a scheduled shutdown Function:public void setSchedulePowerOff(int id, boolean enabled, long alarm_time) Description:Specify the UTC time, set the scheduled shutdown, only once without repetition Parameters:id Scheduled shutdown ID       enabled true(on)/false(off)       alarm_time Shutdown time (UTC time) Example: //Set shutdown after 1 minute, id is 11001 mFireflyApi2.setPowerOffAlarm(11001, true,System.currentTimeMillis()+60); //Cancel operation with ID 11001 mFireflyApi2.setPowerOffAlarm(11001, false,0); 3. Set a scheduled reboot Function:public void setSchedulePowerReboot(int id, boolean enabled, long alarm_time) Description:Specify the UTC time, set the scheduled reboot, only once without repetition Parameters:id Scheduled reboot ID       enabled true(on)/false(off)       alarm_time Reboot time (UTC time) Example: //Set reboot after 1 minute, id is 11003 mFireflyApi2.setSchedulePowerReboot(11003, true,System.currentTimeMillis()+60); //Cancel operation with ID 11003 mFireflyApi2.setSchedulePowerReboot(11003, false,0); If the above functions do not meet your needs, you can use the interface to achieve the desired functions through the programming. This interface is only the most basic scheduled task function, it is controlled on/off by the incoming ID. It is invalid after reboot and needs to be manually reset .