FireflyApi2

1.概述

FireflyApi2 提供了部分系统接口以及封装了部分用户需要的功能接口,主要是为了让用户容易和简单的使用系统常用接口, 此文档只是对接口进行简单的说明,具体的使用参考 FireflyApi2Demo 的源码。

  • 支持 rk3568/rk3566 Android11 平台所有系列机型

  • 支持 rk3588 Android12 平台所有系列机型

2.资源下载和使用

使用 FireflyApi2 时先检查一下机器的固件是否是最新版本,最新版本的固件内置了基于 FireflyApi2 实现的 FireflyApi2Demo 应用,可以在[资源下载] 页面找到对应的机型查看并下载最新固件,同时也可以同步SDK到最新提交,具体先选择对应机型的[wiki],然后在Android开发->编译Android固件里面找到同步的方式。

FireflyApi2Demo 源码下载:

Demo 主要包含 fireflyapi2.aar 和 FireFlyApi2Demo 的源码,其结构目录如下:

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 FireflyApi2Demo 应用简述

FireflyApi2Demo 是基于 FireflyApi2 的接口实现的 Demo 程序,用户可参考 Demo 的源码实现自己所需的功能。 当使用最新版本的固件时,里面会内置 FireflyApi2Demo 的应用。

  • 应用如图

_images/fireflyapi2demo.png

  • 点击进入应用后会有相应的接口实现列表如图

_images/fireflyapi2demo_ui.png

2.2 FireflyApi2的使用

2.2.1 Android Studio

Android Studio 是谷歌推出的一个 Android 集成开发工具,基于IntelliJ IDEA,类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试。

2.2.2 项目中导入fireflyapi2.aar

FireflyApi2Demo 是给用户呈现出接口相应的功能,用户如需要编写自己的应用程序,可将 fireflyapi2.aar 放在 libs 目录下:

app/
├── build.gradle
├── libs
│   └── fireflyapi2.aar

然后配置 build.gradle 文件,即可使用 FireflyApi2 定制应用程序。

dependencies {
    ......
+   implementation files('libs/fireflyapi2.aar')
}

3.FireflyApi2 接口说明

要使用 FireflyApi2 的接口需要先导入依赖并获取实例化对象:

import com.firefly.api2.FireflyApi2;

public class *** {
	......
	private static FireflyApi2 mFireflyApi2 = FireflyApi2.getInstance();
	......
}

3.1 系统信息

1. FireflyApi2版本信息

函数:public String getFireflyApiVersion()
描述:FireflyApi2 版本信息
范例:
String version = mFireflyApi2.getFireflyApiVersion();

2. 获取设备型号

函数:public String getAndroidModel()
描述:获取设备型号
范例:
String model= mFireflyApi2.getAndroidModel();

3. 获取设备Android系统的版本

函数:public String getAndroidVersion()
描述:获取设备Android系统的版本
范例:
String version= mFireflyApi2.getAndroidVersion();

4. 获取设备RAM大小(MB)

函数:public long getRamSpace()
描述:获取设备RAM大小,单位为MB
返回:返回RAM大小,单位为MB
范例:
long ram = mFireflyApi2.getRamSpace();

5. 获取设备RAM大小(GB)

函数:public String getFormattedRamSpace()
描述:获取设备RAM大小,并格式化为String
返回:设备的RAM大小,String格式(1.5GB)
范例:
String ram = mFireflyApi2.getFormattedRamSpace();

6. 获取设备内置Flash大小(MB)

函数:public long getFlashSpace()
描述:获取设备内置Flash大小,单位为MB
返回:返回Flash大小,单位为MB
范例:
long flash = mFireflyApi2.getFlashSpace();

7. 获取设备内置Flash大小(GB)

函数:public String getFormattedFlashSpace()
描述:获取设备内置Flash大小,并格式化为String
返回:设备的Flash大小,String格式(15.5GB)
范例:
String ram = mFireflyApi2.getFormattedFlashSpace();

8. 获取设备固件内核版本

函数:public String getFormattedKernelVersion()
描述:获取设备固件内核版本
返回:内核版本
范例:
String kernel_version= mFireflyApi2.getFormattedKernelVersion();

9. 获取设备固件系统版本

函数:public String getAndroidDisplay()
描述:获取设备固件系统版本
返回:固件系统版本
范例:
String version= mFireflyApi2.getAndroidDisplay();

3.2 系统设置

1. 系统关机

函数:public void shutDown(boolean showConfirm)
描述:系统关机
参数:showConfirm 是否显示关机框
范例:
mFireflyApi2.shutDown(false);

2. 系统重启

函数:public void reboot()
描述:系统重启
范例:
mFireflyApi2.reboot();

3. 系统休眠

函数:public void sleep()
描述:系统休眠
范例:
mFireflyApi2.sleep();

4. 截屏

函数:public boolean  takeScreenshot(String path,String name)
描述:截图并存储到指定路径
参数:path 存储路径
   name 存储的文件名(暂时只支持png格式)
返回:截图是否成功true/false
范例:
mFireflyApi2.takeScreenshot("/sdcard/","123.png");

5. 屏幕旋转

函数:public boolean  setRotation(int rotation)
描述:屏幕旋转
屏幕参数:rotation 屏幕方向
   Surface.ROTATION_0
   Surface.ROTATION_90
   Surface.ROTATION_180
   Surface.ROTATION_270  
范例:mFireflyApi2.setRotation(Surface.ROTATION_0);

6. 获取屏幕方向

函数:public int  getRotation()
描述:获取屏幕方向
返回:rotation 屏幕方向
   Surface.ROTATION_0
   Surface.ROTATION_90
   Surface.ROTATION_180
   Surface.ROTATION_270
范例:
int rotation = mFireflyApi2.getRotation();

7. 设置系统日期

函数:public boolean setSysDate( int year, int month, int day)
描述:设置系统日期
参数:year 年
   month 月
   day 日
返回:为true设置成功,为false设置失败
范例:
mFireflyApi2.setSysDate(2022,7,21);

8. 设置系统时间

函数:public boolean setSysTime( int hour,int minute,int second)
描述:设置系统时间
参数:hour 时
   minute 分
   second 秒
返回:为true设置成功,为false设置失败
范例:
mFireflyApi2.setSysTime(5,30,45);

9. 同步NTP服务器时间

函数:public boolean syncNtpTime( String ntpServer, int timeout)
描述:同步NTP服务器时间
参数:ntpServer 服务器
   timeout 超时
返回:为true设置成功,为false设置失败
范例:
mFireflyApi2.syncNtpTime("time.windows.com", 30000);

10. 静默安装应用

函数:public boolean silentInstal(String path, IPackageInstallObserver observer)
描述:静默安装应用
参数:path apk路径
   IPackageInstallObserver 处理返回的安装结果
返回:为true安装成功
范例:
mFireflyApi2.silentInstall("/sdcard/***.apk", new IPackageInstallObserver.Stub(){
    @Override
    public void packageInstalled(String packageName, int returnCode) {
        Log.v("debug", "packageInstalled packageName:" + packageName + ",returnCode:" + returnCode);
    }
});

11. 静默卸载应用

函数:public boolean silentUnInstall(String package_name, IPackageDeleteObserver observer)
描述:静默卸载应用
参数:package_name 为需要卸载应用的包名
   IPackageDeleteObserver   处理返回的卸载结果
返回:卸载成功返回true,卸载失败返回false
备注:只支持卸载安装的应用,不支持卸载内置应用
范例:
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. 运行shell命令

函数:public Command execCmd(String cmd)
描述:运行shell命令
参数:cmd shell命令
返回:Command input 输入命令
   output 输出结果
   exitStatus shell运行状态,为0是正常退出
范例:
mFireflyApi2.execCmd("ls");

13. su权限运行shell命令

函数:public static Command execSuCmd(String cmd)
描述:su权限运行shell命令
参数:cmd shell命令
返回:Command input 输入命令
   output 输出结果
   exitStatus shell运行状态,为0是正常退出
范例:
mFireflyApi2.execSuCmd("cat init.rk30board.rc");//init.rk30board.rc 默认权限750

14. 应用开机自启动

函数:public void setAppStartup(String packageName)
描述:第三方应用开机自启动
参数:packageName app 包名
范例:
mFireflyApi2.setAppStartup("com.tchip.testscheduleonoff");

15. 取消应用开机自启动

函数:public void cleanAppStartup()
描述:取消应用开机自启动
范例:
mFireflyApi2.cleanAppStartup();

3.3 硬件接口

3.3.1 GPIO

1. gpio 控制
函数:public boolean gpioCtrl(int gpio, String direction, int value)
描述:控制 gpio
参数:gpio gpio 编号
   direction in, out
   value 1/0
返回:true (成功)/ false(失败)
范例:
boolean success = mFireflyApi2.gpioCtrl(150,"out",1);//GPIO4_C6的 gpio 节点为150
2. gpio 读值
函数:public int gpioRead(int gpio)
描述:读取 gpio 的值
参数:gpio gpio 编号
返回:读取失败时返回-1
范例:
int gpioValue = mFireflyApi2.gpioRead(150);//GPIO4_C6的 gpio 节点为150
3. 检查gpio口是否被系统占用
函数:public boolean isGpioOccupied(int gpio)
描述:检查 gpio 口是否被系统占用
参数:gpio gpio 编号
返回:true(被占用)/false(空闲)
范例:
boolean occupied  = mFireflyApi2.isGpioOccupied(150);//GPIO4_C6的 gpio 节点为150
4. 解析gpio的节点值
函数:public int gpioParse(String gpioStr)
描述:解析 gpio 的节点值,例 GPIO4_C6 转换为节点150
参数:gpioStr
返回:解析失败返回-1
范例:
int gpioValue= mFireflyApi2.gpioParse("GPIO4_C6");//GPIO4_C6的 gpio 节点为150

3.3.2 串口使用

  • 导入头文件

    import com.firefly.api2.serialport.SerialHelper2;
    
  • 根据路径和波特率打开串口,并设置回调函数

    private SerialHelper2 serialHelper;
    private boolean openSerialPort(String path,int baudrate)
    {
        ......
        serialHelper = new SerialHelper2(path, baudrate) {
            @Override
            protected void onDataReceived(final byte[] data) {
                //16进制
                Log.v(TAG,serialHelper.getPort()+" onDataReceived:"+ ByteUtil.ByteArrToHex(data).trim());
                //字符串
                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;
    }
    
  • 向串口发送字符串

    serialHelper.sendTxt("112233445566");
    
  • 向串口发送16进制

    // 0x11,0x22,0x33,0x44,0x55,0x66
    serialHelper.sendHex("112233445566");
    
  • 关闭串口

    serialHelper.close();
    

3.3.3 CAN使用

在使用之前需要了解 CanFilter,CanMessage,CanMessageListener,CanSocket 四个类的主要作用和用法。

CanFilter
构造函数:public CanFilter(final int mask, final int filter)
描述:用于存储过滤接收帧信息
参数:mask 掩码
   filter 帧id
范例:
//无接收过滤信息
CanFilter[] nofilters = new CanFilter[0];

//仅接收id为 0x400 和 0x410的帧
CanFilter[] filters = new CanFilter[]{new CanFilter(0xfff, 0x400), new CanFilter(0xfff, 0x410)};
CanMessage
构造函数:public CanMessage(final boolean isEFF, final boolean isRTR, final int id, final byte[] data)
描述:用于存储帧信息
参数:isEFF true 为扩展帧,false 为标准帧
   isRTR true 为远程帧,false 为数据帧
   id 帧ID
   data 帧数据
范例:
存储一帧信息,id 为0x100, 标准帧,数据帧,数据为{0x01,0x02,0x03,0x04,0x05,0x6,0x7},长度为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);
  • 获取帧信息 ID

    函数:public final int getRawId()
    描述:获取帧 ID
    范例:
    int can_id = message.getRawId();
    
  • 获取帧信息数据

    函数:public final byte[] getData()
    描述:获取帧信息
    范例:
    byte[] data = message.getData();
    
  • 帧信息

    函数:public final String toString()
    描述:帧信息
    范例:
    Log.i("debug", message.toString());
    
CanMessageListener
函数:public void rxedCanMessage()
描述:用于接收到 can 信息的处理接口函数
范例:
public class TestCanHelper implements CanMessageListener {
    public final void rxedCanMessage(final CanMessage message)
    {
        Log.i(TAG, message.toString());
    }
}
CanSocket
  • 打开can设备

    函数:public int canDeviceOpen(final String canDevice)throws IOException
    描述:打开 can 设备,获取 socket 套接字
    参数:canDevice can通道
    返回:socket 套接字,失败返回-1
    范例:
    int socket = mCanSocket.canDeviceOpen("can0");
    
  • 初始化接收任务

    函数:public void initReceiveTask(final int socket, CanFilter[] filters)
    描述:初始化接收任务
    参数:socket 套接字
       filters  过滤器
    范例:
    mCanSocket.initReceiveTask(mRxSocket, filters);
    
  • 开始接收任务

    函数:public boolean startReceiveTask()
    描述:开始接收任务
    返回:true(成功)/false(失败)
    范例:
    boolean result =  mCanSocket.startReceiveTask();
    
  • 停止接收任务

    函数:public boolean stopReceiveTask()
    描述:停止接收任务
    返回:true(成功)/false(失败)
    范例:
    boolean result =  mCanSocket.stopReceiveTask();
    
  • 发送帧信息

    函数:public void transmit(CanMessage message, int socket)throws IOException
    描述:发送帧信息
    参数:message 帧信息
       socket 套接字
    范例:
    mCanSocket.transmit(message, mTxSocket);
    
  • 获取接收任务状态

    函数:public boolean RxTaskState()
    描述:获取接收任务状态
    返回:true 接收任务处于运行状态
       false 接收任务处于停止状态
    范例:
    boolean state = mCanSocket.RxTaskState();
    
  • 关闭can设备

    函数:public void closeDevice(final int socket, final String canDevice)
    描述:关闭can设备
    参数:canDevice can通道
    范例:
    mCanSocket.closeDevice(socket, "can0");
    
  • 添加接收监听器

    函数:public void addMessageListener(final CanMessageListener canMessageListener)
    描述:添加接收监听器
    参数:canMessageListener 接收监听器
    范例:
    mCanSocket.addMessageListener(this);
    
  • 移除接收监听器

    函数:public void removeMessageListener(final CanMessageListener canMessageListener)
    描述:移除接收监听器
    参数:canMessageListener 接收监听器
    范例:
    mCanSocket.removeMessageListener(this);
    
  • 清空接收监听器

    函数:public void clearMessageListeners()
    描述:清空接收监听器
    范例:
    mCanSocket.clearMessageListeners();
    
  • 设置波特率

    函数:public static boolean setCanBaudRate(String canDevice, String baudrate)
    描述:设置波特率
    参数:canDevice can设备
       baudrate 波特率
    返回:true(成功)/false(失败)
    范例:
    boolean result = CanSocket.setCanBaudRate("can0", "500000"); // can0波特率为500Kbps
    
  • 获取can设备

    函数:public static String[] getCanDeviceArr()
    描述:获取can设备
    返回:可用的can设备
    范例:
    String[] canDeviceArr = CanSocket.getCanDeviceArr();
    
简单使用范例
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 安装升级

1. 本地ota包升级

函数:public void installPackage(String path)
描述:将重启进行ota包升级,目前仅支持放置在内置存储根目录,即/sdcard/下
参数:path ota包的绝对路径
范例:
mFireflyApi2.installPackage("/sdcard/update.zip");

3.5 网络

网络功能需要添加以下权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

3.5.1 以太网

1. 判断是否为双以太网口
函数:public boolean isDualEth(){
描述:获取设备是否为双以太网口
返回:true 双以太网口
   false 单以太网口
范例:
boolean isDual =  = mFireflyApi2.isDualEth();
2. 获取设备主以太网口的MAC地址
函数:public  String getEthMacAddress()
描述:获取设备主以太网口的MAC地址
返回:失败返回null
范例:
String ethMac  = mFireflyApi2.getEthMacAddress();
3. 获取设备主以太网口的信息
函数:public EthernetInfo getEthConfiguration()
描述:获取设备主以太网口的信息(包含:ip,netmask,gateway,dns1,dns2)
范例:
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. 设置设备主以太网口的IP地址
函数:public boolean setEthConfiguration(boolean isStatic,String ipaddressStr,String maskStr,String gatewayStr,String dns1Str,String dns2Str)
描述:设置设备以太网口的IP地址
参数:isStatic true 为静态 IP 时其他参数才有效,否则 false 时为动态 IP 自动获取 IP
返回:失败返回 false
范例:
boolean set_static_ip  = mFireflyApi2.setEthConfiguration(true,"192.168.1.3",.....);
boolean set_dhcp_ip  = mFireflyApi2.setEthConfiguration(false,null,null,null,null,null);
5. 设置主以太网口开启/关闭
函数:public boolean setEthEnable(boolean enabled)
描述:设置主以太网开启/关闭
参数:enabled true(开启)/false(关闭)
范例:
boolean connect  = mFireflyApi2.setEthEnable();
6. 获取设备副以太网口的MAC地址
函数:public  String getEthAuxMacAddress()
描述:获取设备副以太网口的 MAC 地址
返回:失败返回 null
范例:
String auxEthMac  = mFireflyApi2.getEthAuxMacAddress();
7. 获取设备副以太网口的信息
函数:public EthernetInfo getEthAuxConfiguration()
描述:获取设备副以太网口的信息(包含:ip,netmask,gateway,dns1,dns2)
范例:
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. 设置设备副以太网口的IP地址
函数:public boolean setEthAuxConfiguration(boolean isStatic,String ipaddressStr,String maskStr,String gatewayStr,String dns1Str,String dns2Str)
描述:设置设备副以太网的IP地址
参数:isStatic true 为静态 IP 时其他参数才有效,否则false时为动态 IP 自动获取 IP
返回:失败返回false
范例:
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 无线网络

1. 打开设备热点
函数:public void startTethering(ITetheringCallback callback)
描述:打开设备热点
参数:callback 事件回调
范例:
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. 关闭设备热点
函数:public void stopTethering()
描述:关闭设备热点
范例:
mFireflyApi2.stopTethering();
3. 判断设备热点是否已经打开
函数:public boolean isWifiHotspotEnabled()
描述:判断设备热点是否已经打开
返回:true(开启)/false(关闭)
范例:
boolean isEnabled  = mFireflyApi2.isWifiHotspotEnabled();
4. 获取设备热点配置信息
函数:public SoftApConfiguration getWifiHotspotConfig()
描述:获取设备热点配置信息
返回:SoftApConfiguration
范例:
SoftApConfiguration config = mFireflyApi2.getWifiHotspotConfig();
5. 配置设备热点信息
函数:public void configWifiHotspot(String ssid, String password)
描述:配置设备热点信息(热点名称,密码)
参数:ssid 热点名称
   password 密码
返回:SoftApConfiguration
范例:
mFireflyApi2.configWifiHotspot("AndroidAP_Test","12345678");
6. 自动关闭设备热点
函数:public void setWifiHotspotAutoShutdownEnabled(boolean enabled)
描述:自动关闭设备热点(无设备连接)
参数:enabled true(开启)/false(关闭)
范例:
mFireflyApi2.setWifiHotspotAutoShutdownEnabled(true);
7. 判断设置热点是否开启自动关闭功能
函数:public boolean isWifiHotspotAutoShutdownEnabled()
描述:判断设置热点是否开启自动关闭功能
返回:true(开启)/false(关闭)
范例:
boolean mAutoOff = mFireflyApi2.isWifiHotspotAutoShutdownEnabled();
8. 设备热点使用固定IP地址
函数:public void setWifiHostspotUseFixedIfaceAddr(boolean use)
描述:设备热点使用固定IP地址
参数:use true(开启)/false(关闭)
范例:
mFireflyApi2.setWifiHostspotUseFixedIfaceAddr("true");

3.6 定时开关机

1. 设置一次定时开机

函数:public void setSchedulePowerOn(int id, boolean enabled, long alarm_time)
描述:指定UTC时间,设置定时开机,仅一次不会重复
参数:id 定时开机id
   enabled true(开启)/false(关闭)
   alarm_time 开机时间(UTC时间)
范例:
//设置1分钟后开机,id为11002
mFireflyApi2.setSchedulePowerOn(11002,true,System.currentTimeMillis()+60);
//取消id为11002的操作
mFireflyApi2.setSchedulePowerOn(11002,false,0);

2. 设置一次定时关机

函数:public void setSchedulePowerOff(int id, boolean enabled, long alarm_time)
描述:指定UTC时间,设置定时关机,仅一次不会重复
参数:id 定时关机id
   enabled true(开启)/false(关闭)
   alarm_time 关机时间(UTC时间)
范例:
//设置1分钟后关机,id为11001
mFireflyApi2.setPowerOffAlarm(11001, true,System.currentTimeMillis()+60);
//取消id为11001的操作
mFireflyApi2.setPowerOffAlarm(11001, false,0);

3. 设置一次定时重启

函数:public void setSchedulePowerReboot(int id, boolean enabled, long alarm_time)
描述:指定UTC时间,设置定时重启,仅一次不会重复
参数:id 定时重启id
   enabled true(开启)/false(关闭)
   alarm_time 重启时间(UTC时间)
范例:
//设置1分钟后重启,id 为11003
mFireflyApi2.setSchedulePowerReboot(11003, true,System.currentTimeMillis()+60);
//取消id 为11003的操作
mFireflyApi2.setSchedulePowerReboot(11003, false,0);

如果以上的功能无法满足您的需求,可以使用一下接口,自己做逻辑实现功能。此接口只是最基本的定时开关机功能,由传入的id控制开启/关闭,重启后失效需要手动再次设置