后台中添加充电容量放电内阻以及充电温度上限和放电温度上限以及预留字段
2个文件已修改
978 ■■■■ 已修改文件
platforms/android/app/src/main/java/com/mode/BattTestParam.java 392 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platforms/android/app/src/main/java/io/hybird/jsbridge/JsInterface.java 586 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platforms/android/app/src/main/java/com/mode/BattTestParam.java
@@ -1,174 +1,218 @@
package com.mode;
import android.util.Log;
import com.util.FBS_ComBase;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.Arrays;
public class BattTestParam {
    private final int BYTE_LEN = 52;
    public String battName = "";        //电池组名称
    public byte[] byteName;                //电池组名称字节数组
    public int param_index;                //预置索引号
    //public int testMode;                //测试模式    0:离线        1:在线
    //public int powerOffAction;        //市电中断处理   0:继续放电    1:停止放电
    public int battStdCap;                //电池组标称容量
    public int hourState;                //放电小时率    1、2、3、4、5、6、7、8、9、10、20
    public double disChargeCurr;        //放电电流(0.1A)
    public int disChargeCap;            //放电容量(1AH)
    public int disTime;                    //放电时长(min)
    public double monVolLow;            //单体下限(0.01V)
    public double groupVolLow;            //组端下限(0.1V)
    public int monCount;                //每组单体数(每组电池节数)0~240
    public int groupCount;                //电池组组数(1~4)
    public int monVolLowCount;            //单体下限数量(0~240)
    //public int saveInterval;            //数据保存间隔min
    //public double dcVolHighLimit;        //升压上限(0.1V)
    public double mon_vol;              //单体电压
    //public double chargeCurr;            //充电电压(在线阈值)A
    public int testType;                //测试类型(0:恒电流    1:恒功率      2:恒电阻)
    public double dischargePower;        //预放功率(0.1kw)
    public double chargeCurr;            //充电电流(0.1A)
    public double chargeVol;            //充电电压(0.1V)
    public double floatVol;                //浮充电压(0.1V)
    //public double chargeCap;            //充电容量
    public int chargeTime;                //充电时长(min)
    public int floatTime;                //浮充时长(min)
    public double chargeStopCurr;        //截止电流(0.1A)
    public double groupHighVol;            //组端上限(0.1V)
    public double monHighVol;            //单体上限(0.01V)
    public int monHighVolCount;            //单体上限数量
    //public double chargeHighTmp;        //充电过温
    //public double dischargeHighTmp;    //放电过温
    public int cycleStart;                //活化起点     0放电 ,1充电
    public int cycleTimes;                //活化次数     1-50次
    public int waitdisTime;                //充完静置    0-500分钟
    public int waitchrTime;                //放完静置    0-500分钟
    public boolean putByteBuffer(ByteBuffer bf) {
        if(bf.limit()<BYTE_LEN) {
            Log.e("BattTestParam", bf.limit()+"putByteBuffer: "+BYTE_LEN);
            return false;
        }
        ByteBuffer tmpbuf = bf;
        tmpbuf.position(0);
        battStdCap = FBS_ComBase.changeShortToInt(bf.getShort());                //标称容量
        hourState  = FBS_ComBase.changeShortToInt(bf.getShort());                //小时率
        disChargeCurr = FBS_ComBase.changeShortToDouble(bf.getShort())/10;        //放电电流
        disChargeCap = FBS_ComBase.changeShortToInt(bf.getShort());                //放电容量
        disTime = FBS_ComBase.changeShortToInt(bf.getShort());                    //放电时长
        monVolLow = FBS_ComBase.changeShortToDouble(bf.getShort())/100;            //单体下限阀值
        groupVolLow = FBS_ComBase.changeShortToDouble(bf.getShort())/10;        //组端下限
        monCount = FBS_ComBase.changeShortToInt(bf.getShort());                    //每组单体数量
        groupCount = FBS_ComBase.changeShortToInt(bf.getShort());                //电池组组数
        monVolLowCount = FBS_ComBase.changeShortToInt(bf.getShort());            //单体下限数量
        //dcVolHighLimit = FBS_ComBase.changeShortToDouble(bf.getShort())/10;        //升压上限
        mon_vol = FBS_ComBase.changeShortToDouble(bf.getShort())/10;               //单体电压
        testType = FBS_ComBase.changeShortToInt(bf.getShort());                    //测试类型
        dischargePower = FBS_ComBase.changeShortToDouble(bf.getShort())/10;        //预放功率
        chargeCurr = FBS_ComBase.changeShortToDouble(bf.getShort())/10;            //充电电流
        chargeVol = FBS_ComBase.changeShortToDouble(bf.getShort())/10;            //充电电压
        floatVol = FBS_ComBase.changeShortToDouble(bf.getShort())/10;            //浮充电压
        chargeTime = FBS_ComBase.changeShortToInt(bf.getShort());                //充电时长
        floatTime = FBS_ComBase.changeShortToInt(bf.getShort());                //浮充时长
        chargeStopCurr = FBS_ComBase.changeShortToDouble(bf.getShort())/10;        //截止电流
        groupHighVol = FBS_ComBase.changeShortToDouble(bf.getShort())/10;        //组端上限
        monHighVol = FBS_ComBase.changeShortToDouble(bf.getShort())/100;        //单体上限
        monHighVolCount = FBS_ComBase.changeShortToInt(bf.getShort());            //单体上限数量
        cycleStart = FBS_ComBase.changeShortToInt(bf.getShort());                //活化起点
        cycleTimes = FBS_ComBase.changeShortToInt(bf.getShort());                //活化次数
        waitdisTime = FBS_ComBase.changeShortToInt(bf.getShort());                //充完静置
        waitchrTime = FBS_ComBase.changeShortToInt(bf.getShort());                //放完静置
        return true;
    }
    /**
     * 获取新建电池组的数据
     * @return
     */
    public ByteBuffer getNewBattByteBuffer() {
        byte[] b = null;
        try {
            b = battName.getBytes("utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        int byteCount = b.length<20?b.length:20;
        ByteBuffer tmpbuf = ByteBuffer.allocate(byteCount);
        tmpbuf.order(ByteOrder.LITTLE_ENDIAN);
        tmpbuf.position(0);
        for(int i = 0;i<b.length && i<20;i++) {
            tmpbuf.put(FBS_ComBase.changeIntToByte(b[i]));
        }
        //System.out.println(ComFn.bytesToHexString(b, b.length));;
        return tmpbuf;
    }
    public ByteBuffer getByteBuffer() {
        ByteBuffer tmpbuf = ByteBuffer.allocate(BYTE_LEN);
        tmpbuf.order(ByteOrder.LITTLE_ENDIAN);
        tmpbuf.position(0);
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(battStdCap));                //标称容量
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(hourState));                //小时率
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(disChargeCurr*10));        //放电电流
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(disChargeCap));            //放电容量
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(disTime));                    //放电时长
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(monVolLow*100));        //单体下限阀值
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(groupVolLow*10));        //组端下限
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(monCount));                //每组单体数量
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(groupCount));                //电池组组数
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(monVolLowCount));            //单体下限数量
        //tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(dcVolHighLimit*10));    //升压上限
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(mon_vol*10));                //单体电压
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(testType));                //测试类型
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(dischargePower*10));    //预放功率
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(chargeCurr*10));        //充电电流
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(chargeVol*10));            //充电电压
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(floatVol*10));            //浮充电压
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(chargeTime));                //充电时长
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(floatTime));                //浮充时长
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(chargeStopCurr*10));    //截止电流
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(groupHighVol*10));        //组端上限
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(monHighVol*100));        //单体上限
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(monHighVolCount));            //单体上限数量
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(cycleStart));                //活化起点
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(cycleTimes));                //活化次数
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(waitdisTime));                //充完静置
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(waitchrTime));                //放完静置
        tmpbuf.flip();
        return tmpbuf;
    }
    @Override
    public String toString() {
        return "DischargeParam [battName=" + battName + ", byteName=" + Arrays.toString(byteName) + ", param_index="
                + param_index + ", battStdCap=" + battStdCap + ", hourState=" + hourState + ", disChargeCurr="
                + disChargeCurr + ", disChargeCap=" + disChargeCap + ", disTime=" + disTime + ", monVolLow=" + monVolLow
                + ", groupVolLow=" + groupVolLow + ", monCount=" + monCount + ", groupCount=" + groupCount
                + ", monVolLowCount=" + monVolLowCount + ", mon_vol=" + mon_vol + ", testType=" + testType
                + ", dischargePower=" + dischargePower + ", chargeCurr=" + chargeCurr + ", chargeVol=" + chargeVol
                + ", floatVol=" + floatVol + ", chargeTime=" + chargeTime + ", floatTime=" + floatTime
                + ", chargeStopCurr=" + chargeStopCurr + ", groupHighVol=" + groupHighVol + ", monHighVol=" + monHighVol
                + ", monHighVolCount=" + monHighVolCount + ", cycleStart=" + cycleStart + ", cycleTimes=" + cycleTimes
                + ", waitdisTime=" + waitdisTime + ", waitchrTime=" + waitchrTime + "]";
    }
}
package com.mode;
import android.util.Log;
import com.util.FBS_ComBase;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.Arrays;
public class BattTestParam {
    private final int BYTE_LEN = 80;
    public String battName = "";        //电池组名称
    public byte[] byteName;                //电池组名称字节数组
    public int param_index;                //预置索引号
    //public int testMode;                //测试模式    0:离线        1:在线
    //public int powerOffAction;        //市电中断处理   0:继续放电    1:停止放电
    public int battStdCap;                //电池组标称容量
    public int hourState;                //放电小时率    1、2、3、4、5、6、7、8、9、10、20
    public double disChargeCurr;        //放电电流(0.1A)
    public int disChargeCap;            //放电容量(1AH)
    public int disTime;                    //放电时长(min)
    public double monVolLow;            //单体下限(0.01V)
    public double groupVolLow;            //组端下限(0.1V)
    public int monCount;                //每组单体数(每组电池节数)0~240
    public int groupCount;                //电池组组数(1~4)
    public int monVolLowCount;            //单体下限数量(0~240)
    //public int saveInterval;            //数据保存间隔min
    //public double dcVolHighLimit;        //升压上限(0.1V)
    public double mon_vol;              //单体电压
    //public double chargeCurr;            //充电电压(在线阈值)A
    public int testType;                //测试类型(0:恒电流    1:恒功率      2:恒电阻)
    public double dischargePower;        //预放功率(0.1kw)
    public double disPreRes;            //放电阻值(mΩ)
    public double chargeCurr;            //充电电流(0.1A)  [1-100A]
    public double chargeVol;            //充电电压(0.1V)[1-125]
    public double floatVol;                //浮充电压(0.1V)
    public int chargeCap;            //充电容量(AH)
    public int chargeTime;                //充电时长(min)
    public int floatTime;                //浮充时长(min)
    public double chargeStopCurr;        //截止电流(0.1A)
    public double groupHighVol;            //组端上限(0.1V)
    public double monHighVol;            //单体上限(0.01V)
    public int monHighVolCount;            //单体上限数量
    public int chargeHighTmp;        //充电过温
    public int dischargeHighTmp;        //放电过温
    public int cycleStart;                //活化起点     0放电 ,1充电
    public int cycleTimes;                //活化次数     1-50次
    public int waitdisTime;                //充完静置    0-500分钟
    public int waitchrTime;                //放完静置    0-500分钟
    public int backup1;
    public int backup2;
    public int backup3;
    public int backup4;
    public int backup5;
    public int backup6;
    public int backup7;
    public int backup8;
    public int backup9;
    public int backup10;
    public boolean putByteBuffer(ByteBuffer bf) {
        if(bf.limit()<BYTE_LEN) {
            Log.e("BattTestParam", bf.limit()+"putByteBuffer: "+BYTE_LEN);
            return false;
        }
        ByteBuffer tmpbuf = bf;
        tmpbuf.position(0);
        battStdCap = FBS_ComBase.changeShortToInt(bf.getShort());                //标称容量
        hourState  = FBS_ComBase.changeShortToInt(bf.getShort());                //小时率
        disChargeCurr = FBS_ComBase.changeShortToDouble(bf.getShort())/10;        //放电电流
        disChargeCap = FBS_ComBase.changeShortToInt(bf.getShort());                //放电容量
        disTime = FBS_ComBase.changeShortToInt(bf.getShort());                    //放电时长
        monVolLow = FBS_ComBase.changeShortToDouble(bf.getShort())/100;            //单体下限阀值
        groupVolLow = FBS_ComBase.changeShortToDouble(bf.getShort())/10;        //组端下限
        monCount = FBS_ComBase.changeShortToInt(bf.getShort());                    //每组单体数量
        groupCount = FBS_ComBase.changeShortToInt(bf.getShort());                //电池组组数
        monVolLowCount = FBS_ComBase.changeShortToInt(bf.getShort());            //单体下限数量
        //dcVolHighLimit = FBS_ComBase.changeShortToDouble(bf.getShort())/10;        //升压上限
        mon_vol = FBS_ComBase.changeShortToDouble(bf.getShort())/10;               //单体电压
        testType = FBS_ComBase.changeShortToInt(bf.getShort());                    //测试类型
        dischargePower = FBS_ComBase.changeShortToDouble(bf.getShort())/10;        //预放功率
        disPreRes =  FBS_ComBase.changeShortToInt(bf.getShort());               //放电阻值
        chargeCurr = FBS_ComBase.changeShortToDouble(bf.getShort())/10;            //充电电流
        chargeVol = FBS_ComBase.changeShortToDouble(bf.getShort())/10;            //充电电压
        floatVol = FBS_ComBase.changeShortToDouble(bf.getShort())/10;            //浮充电压
        chargeCap =  FBS_ComBase.changeShortToInt(bf.getShort());               //充电容量
        chargeTime = FBS_ComBase.changeShortToInt(bf.getShort());                //充电时长
        floatTime = FBS_ComBase.changeShortToInt(bf.getShort());                //浮充时长
        chargeStopCurr = FBS_ComBase.changeShortToDouble(bf.getShort())/10;        //截止电流
        groupHighVol = FBS_ComBase.changeShortToDouble(bf.getShort())/10;        //组端上限
        monHighVol = FBS_ComBase.changeShortToDouble(bf.getShort())/100;        //单体上限
        monHighVolCount = FBS_ComBase.changeShortToInt(bf.getShort());            //单体上限数量
        chargeHighTmp = FBS_ComBase.changeShortToInt(bf.getShort());            //充电过温
        dischargeHighTmp = FBS_ComBase.changeShortToInt(bf.getShort());         //放电过温
        cycleStart = FBS_ComBase.changeShortToInt(bf.getShort());                //活化起点
        cycleTimes = FBS_ComBase.changeShortToInt(bf.getShort());                //活化次数
        waitdisTime = FBS_ComBase.changeShortToInt(bf.getShort());                //充完静置
        waitchrTime = FBS_ComBase.changeShortToInt(bf.getShort());                //放完静置
        backup1 = FBS_ComBase.changeShortToInt(bf.getShort());                  //预留位1
        backup2 = FBS_ComBase.changeShortToInt(bf.getShort());                  //预留位1
        backup3 = FBS_ComBase.changeShortToInt(bf.getShort());                  //预留位1
        backup4 = FBS_ComBase.changeShortToInt(bf.getShort());                  //预留位1
        backup5 = FBS_ComBase.changeShortToInt(bf.getShort());                  //预留位1
        backup6 = FBS_ComBase.changeShortToInt(bf.getShort());                  //预留位1
        backup7 = FBS_ComBase.changeShortToInt(bf.getShort());                  //预留位1
        backup8 = FBS_ComBase.changeShortToInt(bf.getShort());                  //预留位1
        backup9 = FBS_ComBase.changeShortToInt(bf.getShort());                  //预留位1
        backup10 = FBS_ComBase.changeShortToInt(bf.getShort());                  //预留位10
        return true;
    }
    /**
     * 获取新建电池组的数据
     * @return
     */
    public ByteBuffer getNewBattByteBuffer() {
        byte[] b = null;
        try {
            b = battName.getBytes("utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        int byteCount = b.length<20?b.length:20;
        ByteBuffer tmpbuf = ByteBuffer.allocate(byteCount);
        tmpbuf.order(ByteOrder.LITTLE_ENDIAN);
        tmpbuf.position(0);
        for(int i = 0;i<b.length && i<20;i++) {
            tmpbuf.put(FBS_ComBase.changeIntToByte(b[i]));
        }
        //System.out.println(ComFn.bytesToHexString(b, b.length));;
        return tmpbuf;
    }
    public ByteBuffer getByteBuffer() {
        ByteBuffer tmpbuf = ByteBuffer.allocate(BYTE_LEN);
        tmpbuf.order(ByteOrder.LITTLE_ENDIAN);
        tmpbuf.position(0);
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(battStdCap));                //标称容量
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(hourState));                //小时率
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(disChargeCurr*10));        //放电电流
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(disChargeCap));            //放电容量
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(disTime));                    //放电时长
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(monVolLow*100));        //单体下限阀值
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(groupVolLow*10));        //组端下限
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(monCount));                //每组单体数量
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(groupCount));                //电池组组数
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(monVolLowCount));            //单体下限数量
        //tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(dcVolHighLimit*10));    //升压上限
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(mon_vol*10));                //单体电压
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(testType));                //测试类型
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(dischargePower*10));    //预放功率
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(disPreRes));                //放电阻值
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(chargeCurr*10));            //充电电流
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(chargeVol*10));            //充电电压
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(floatVol*10));            //浮充电压
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(chargeCap));                       //充电容量
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(chargeTime));                        //充电时长
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(floatTime));                        //浮充时长
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(chargeStopCurr*10));         //截止电流
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(groupHighVol*10));        //组端上限
        tmpbuf.putShort(FBS_ComBase.changeDoubleToShort(monHighVol*100));            //单体上限
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(monHighVolCount));                    //单体上限数量
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(chargeHighTmp));                   //充电过温
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(dischargeHighTmp));                //放电过温
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(cycleStart));                //活化起点
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(cycleTimes));                //活化次数
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(waitdisTime));                //充完静置
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(waitchrTime));                //放完静置
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(backup1));                 //预留位1
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(backup2));                 //预留位1
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(backup3));                 //预留位1
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(backup4));                 //预留位1
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(backup5));                 //预留位1
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(backup6));                 //预留位1
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(backup7));                 //预留位1
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(backup8));                 //预留位1
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(backup9));                 //预留位1
        tmpbuf.putShort(FBS_ComBase.changeIntToShort(backup10));                 //预留位1
        tmpbuf.flip();
        return tmpbuf;
    }
    @Override
    public String toString() {
        return "DischargeParam [battName=" + battName + ", byteName=" + Arrays.toString(byteName) + ", param_index="
                + param_index + ", battStdCap=" + battStdCap + ", hourState=" + hourState + ", disChargeCurr="
                + disChargeCurr + ", disChargeCap=" + disChargeCap + ", disTime=" + disTime + ", monVolLow=" + monVolLow
                + ", groupVolLow=" + groupVolLow + ", monCount=" + monCount + ", groupCount=" + groupCount
                + ", monVolLowCount=" + monVolLowCount + ", mon_vol=" + mon_vol + ", testType=" + testType
                + ", dischargePower=" + dischargePower + ", chargeCurr=" + chargeCurr + ", chargeVol=" + chargeVol
                + ", floatVol=" + floatVol + ", chargeTime=" + chargeTime + ", floatTime=" + floatTime
                + ", chargeStopCurr=" + chargeStopCurr + ", groupHighVol=" + groupHighVol + ", monHighVol=" + monHighVol
                + ", monHighVolCount=" + monHighVolCount + ", cycleStart=" + cycleStart + ", cycleTimes=" + cycleTimes
                + ", waitdisTime=" + waitdisTime + ", waitchrTime=" + waitchrTime + "]";
    }
}
platforms/android/app/src/main/java/io/hybird/jsbridge/JsInterface.java
@@ -1,293 +1,293 @@
package io.hybird.jsbridge;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Handler;
import android.os.Looper;
import android.os.SystemClock;
import android.util.Log;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.widget.Toast;
import com.google.gson.Gson;
import com.mode.ServiceModel;
import com.service.MyInteractionService;
import java.util.List;
public class JsInterface {
    public static final String TAG = "JsInterface";
    public static final String JS_INTERFACE_NAME = "JSInterface";//JS调用类名
    private Context mContext;
    private WebView webView;
    private Gson gson = new Gson();
    private MyInteractionService service = null;
    private Activity activity;
    public JsInterface(Context context, WebView webView, Activity activity) {
        this.mContext = context;
        this.webView = webView;
        this.activity = activity;
        String server_ip = readServerIp();
        //server_ip = "192.168.43.33";
        service = new MyInteractionService(server_ip,this);
    }
    @JavascriptInterface
    public void hello(String content) {
        Log.i("bqt", "JS 调用原生时是否发生在主线程:" + (Looper.myLooper() == Looper.getMainLooper()));//false
        new Handler(Looper.getMainLooper()).post(() -> //WebView等UI操作必须在主线程中进行
                Toast.makeText(mContext, "原生的hello方法被调用了:" + content, Toast.LENGTH_SHORT).show());
        SystemClock.sleep(3000);//模拟耗时操作
        String call = "javascript:javacalljs(" + System.currentTimeMillis() + ")";//格式很重要,大部分错误都是由于格式问题导致的
        new Handler(Looper.getMainLooper()).post(() -> webView.loadUrl(call));//WebView等UI操作必须在主线程中进行
    }
    //获取当前设备IP
    @JavascriptInterface
    public void obtainDeviceIp(){
        ServiceModel model = new ServiceModel();
        String server_ip = readServerIp();
        if(server_ip != null && server_ip.length()>0){
            model.code = 1;
            model.data = server_ip;
        }
        SendCallDataToJS("obtainDeviceIp",model);
    }
    //设置当前设备IP
    @JavascriptInterface
    public void setUpDeviceIp(String deviceIp){
        Log.e(TAG, "setUpDeviceIp: "+deviceIp );
        ServiceModel model = new ServiceModel();
        boolean flag = service.setUpDeviceIp(deviceIp);
        //writeServerIp(deviceIp);
        if(flag){
            model.code = 1;
        }
        SendCallDataToJS("setUpDeviceIp",model);
    }
    //测试连接
    @JavascriptInterface
    public void testDeviceIp(String deviceIp){
        // Android 4.0 之后不能在主线程中请求HTTP请求
        new Thread(new Runnable(){
            @Override
            public void run() {
                ServiceModel model = new ServiceModel();
                boolean flag = service.testDeviceIp(deviceIp);
                if(flag){
                    model.code = 1;
                }
                SendCallDataToJS("testDeviceIp",model);
            }
        }).start();
    }
    //获取电池组列表
    @JavascriptInterface
    public void  getBattNames(){
        // Android 4.0 之后不能在主线程中请求HTTP请求
        new Thread(new Runnable(){
            @Override
            public void run() {
                Log.e(TAG, "run: ###########################" );
                ServiceModel model = new ServiceModel();
                List list = service.getBattNames();
                if(list != null && list.size()>0){
                    model.code =1;
                    model.data = list;
                }
                Log.e(TAG, "run: ###########################" );
                SendCallDataToJS("getBattNames",model);
            }
        }).start();
    }
    //获取测试参数
    @JavascriptInterface
    public boolean getTestParam(){
        return service.getTestParam();
    }
    //新建电池组
    @JavascriptInterface
    public boolean newBatt(String battName){
        return service.newBatt(battName);
    }
    //切换电池组
    @JavascriptInterface
    public boolean changeBatt(String battName){
        return service.changeBatt(battName);
    }
    //删除电池组
    @JavascriptInterface
    public boolean delectBatt(String battName){
        return service.delectBatt(battName);
    }
    //获取单体实时数据
    @JavascriptInterface
    public boolean getBattRTData(){
        return service.getBattRTData();
    }
    //设置电池测试参数
    @JavascriptInterface
    public boolean setTestParam(String param){
        return service.setTestParam(param);
    }
    //启动放电
    @JavascriptInterface
    public boolean startDischarge(){
        return service.startDischarge();
    }
    //暂停放电
    @JavascriptInterface
    public boolean pauseDischarge(){
        return service.pauseDischarge();
    }
    //停止放电
    @JavascriptInterface
    public boolean stopDischarge(){
        return service.stopDischarge();
    }
    //获取放电数据
    @JavascriptInterface
    public boolean getTestData(){
        return service.getTestData();
    }
    //启动充电测试
    @JavascriptInterface
    public boolean startCharge(){
        return service.startCharge();
    }
    //暂停充电测试
    @JavascriptInterface
    public boolean pauseCharge(){
        return service.pauseCharge();
    }
    //停止充电测试
    @JavascriptInterface
    public boolean stopCharge(){
        return service.stopCharge();
    }
    //获取充电数据
    @JavascriptInterface
    public boolean getChargeData(){
        return service.getChargeData();
    }
    //获取当前选中的电池组以及当前的状态
    @JavascriptInterface
    public boolean getNowWorkBattState(){
        return service.getNowWorkBattState();
    }
    //清除所有的告警
    @JavascriptInterface
    public boolean clearAllAlarm(){
        return service.clearAllAlarm();
    }
    /**
     * 打开网络共享与热点设置页面
     */
    @JavascriptInterface
    public void openAndroidWifiUI() {
        Intent intent = new Intent();
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        //打开网络共享与热点设置页面
        ComponentName comp = new ComponentName("com.android.settings", "com.android.settings.Settings$TetherSettingsActivity");
        intent.setComponent(comp);
        mContext.startActivity(intent);
    }
    /**
     * 界面同步切换
     */
    @JavascriptInterface
    public void changeAppForm(String index){
        //Log.e(TAG, "changeAppForm: index="+index );
        service.changeAppForm(index);
    }
    //退出上位机连接
    @JavascriptInterface
    public void exitDeiviceConn(){
        service.exitDeiviceConn();
    }
    //启动活化测试
    @JavascriptInterface
    public void startHHTest(){
        service.startHHTest();
    }
    //暂停活化测试
    @JavascriptInterface
    public void pauseHHTest(){
        service.pauseHHTest();
    }
    //停止活化测试
    @JavascriptInterface
    public void stopHHTest(){
        service.stopHHTest();
    }
    //保存设备ip
    public boolean writeServerIp(String server_ip){
        SharedPreferences.Editor editor    = mContext.getSharedPreferences("data",Context.MODE_PRIVATE).edit();
        editor.putString("server_ip",server_ip);
        editor.apply();
        return true;
    }
    //获取设备ip
    public String readServerIp(){
        String server_ip = "127.0.0.1";
        if(mContext != null){
            SharedPreferences pref    = mContext.getSharedPreferences("data",    Context.MODE_PRIVATE);
            server_ip = pref.getString("server_ip","");
        }
        return  server_ip;
    }
    /**
     *  返回数据给前台js
     * @param funName
     * @param model
     */
    public void SendCallDataToJS(String funName,ServiceModel model){
        String call = "javascript:"+funName+"calljs(" + gson.toJson(model) + ")";
        new Handler(Looper.getMainLooper()).post(() -> webView.loadUrl(call));
    }
}
package io.hybird.jsbridge;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Handler;
import android.os.Looper;
import android.os.SystemClock;
import android.util.Log;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.widget.Toast;
import com.google.gson.Gson;
import com.mode.ServiceModel;
import com.service.MyInteractionService;
import java.util.List;
public class JsInterface {
    public static final String TAG = "JsInterface";
    public static final String JS_INTERFACE_NAME = "JSInterface";//JS调用类名
    private WebView webView;
    private Gson gson = new Gson();
    private MyInteractionService service = null;
    private Context mContext;
    private Activity activity;
    public JsInterface(Context context, WebView webView, Activity activity) {
        this.mContext = context;
        this.webView = webView;
        this.activity = activity;
        String server_ip = readServerIp();
        //server_ip = "192.168.43.33";
        service = new MyInteractionService(server_ip,this);
    }
    @JavascriptInterface
    public void hello(String content) {
        Log.i("bqt", "JS 调用原生时是否发生在主线程:" + (Looper.myLooper() == Looper.getMainLooper()));//false
        new Handler(Looper.getMainLooper()).post(() -> //WebView等UI操作必须在主线程中进行
                Toast.makeText(mContext, "原生的hello方法被调用了:" + content, Toast.LENGTH_SHORT).show());
        SystemClock.sleep(3000);//模拟耗时操作
        String call = "javascript:javacalljs(" + System.currentTimeMillis() + ")";//格式很重要,大部分错误都是由于格式问题导致的
        new Handler(Looper.getMainLooper()).post(() -> webView.loadUrl(call));//WebView等UI操作必须在主线程中进行
    }
    //获取当前设备IP
    @JavascriptInterface
    public void obtainDeviceIp(){
        ServiceModel model = new ServiceModel();
        String server_ip = readServerIp();
        if(server_ip != null && server_ip.length()>0){
            model.code = 1;
            model.data = server_ip;
        }
        SendCallDataToJS("obtainDeviceIp",model);
    }
    //设置当前设备IP
    @JavascriptInterface
    public void setUpDeviceIp(String deviceIp){
        Log.e(TAG, "setUpDeviceIp: "+deviceIp );
        ServiceModel model = new ServiceModel();
        boolean flag = service.setUpDeviceIp(deviceIp);
        //writeServerIp(deviceIp);
        if(flag){
            model.code = 1;
        }
        SendCallDataToJS("setUpDeviceIp",model);
    }
    //测试连接
    @JavascriptInterface
    public void testDeviceIp(String deviceIp){
        // Android 4.0 之后不能在主线程中请求HTTP请求
        new Thread(new Runnable(){
            @Override
            public void run() {
                ServiceModel model = new ServiceModel();
                boolean flag = service.testDeviceIp(deviceIp);
                if(flag){
                    model.code = 1;
                }
                SendCallDataToJS("testDeviceIp",model);
            }
        }).start();
    }
    //获取电池组列表
    @JavascriptInterface
    public void  getBattNames(){
        // Android 4.0 之后不能在主线程中请求HTTP请求
        new Thread(new Runnable(){
            @Override
            public void run() {
                Log.e(TAG, "run: ###########################" );
                ServiceModel model = new ServiceModel();
                List list = service.getBattNames();
                if(list != null && list.size()>0){
                    model.code =1;
                    model.data = list;
                }
                Log.e(TAG, "run: ###########################" );
                SendCallDataToJS("getBattNames",model);
            }
        }).start();
    }
    //获取测试参数
    @JavascriptInterface
    public boolean getTestParam(){
        return service.getTestParam();
    }
    //新建电池组
    @JavascriptInterface
    public boolean newBatt(String battName){
        return service.newBatt(battName);
    }
    //切换电池组
    @JavascriptInterface
    public boolean changeBatt(String battName){
        return service.changeBatt(battName);
    }
    //删除电池组
    @JavascriptInterface
    public boolean delectBatt(String battName){
        return service.delectBatt(battName);
    }
    //获取单体实时数据
    @JavascriptInterface
    public boolean getBattRTData(){
        return service.getBattRTData();
    }
    //设置电池测试参数
    @JavascriptInterface
    public boolean setTestParam(String param){
        return service.setTestParam(param);
    }
    //启动放电
    @JavascriptInterface
    public boolean startDischarge(){
        return service.startDischarge();
    }
    //暂停放电
    @JavascriptInterface
    public boolean pauseDischarge(){
        return service.pauseDischarge();
    }
    //停止放电
    @JavascriptInterface
    public boolean stopDischarge(){
        return service.stopDischarge();
    }
    //获取放电数据
    @JavascriptInterface
    public boolean getTestData(){
        return service.getTestData();
    }
    //启动充电测试
    @JavascriptInterface
    public boolean startCharge(){
        return service.startCharge();
    }
    //暂停充电测试
    @JavascriptInterface
    public boolean pauseCharge(){
        return service.pauseCharge();
    }
    //停止充电测试
    @JavascriptInterface
    public boolean stopCharge(){
        return service.stopCharge();
    }
    //获取充电数据
    @JavascriptInterface
    public boolean getChargeData(){
        return service.getChargeData();
    }
    //获取当前选中的电池组以及当前的状态
    @JavascriptInterface
    public boolean getNowWorkBattState(){
        return service.getNowWorkBattState();
    }
    //清除所有的告警
    @JavascriptInterface
    public boolean clearAllAlarm(){
        return service.clearAllAlarm();
    }
    /**
     * 打开网络共享与热点设置页面
     */
    @JavascriptInterface
    public void openAndroidWifiUI() {
        Intent intent = new Intent();
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        //打开网络共享与热点设置页面
        ComponentName comp = new ComponentName("com.android.settings", "com.android.settings.Settings$TetherSettingsActivity");
        intent.setComponent(comp);
        mContext.startActivity(intent);
    }
    /**
     * 界面同步切换
     */
    @JavascriptInterface
    public void changeAppForm(String index){
        //Log.e(TAG, "changeAppForm: index="+index );
        service.changeAppForm(index);
    }
    //退出上位机连接
    @JavascriptInterface
    public void exitDeiviceConn(){
        service.exitDeiviceConn();
    }
    //启动活化测试
    @JavascriptInterface
    public void startHHTest(){
        service.startHHTest();
    }
    //暂停活化测试
    @JavascriptInterface
    public void pauseHHTest(){
        service.pauseHHTest();
    }
    //停止活化测试
    @JavascriptInterface
    public void stopHHTest(){
        service.stopHHTest();
    }
    //保存设备ip
    public boolean writeServerIp(String server_ip){
        SharedPreferences.Editor editor    = mContext.getSharedPreferences("data",Context.MODE_PRIVATE).edit();
        editor.putString("server_ip",server_ip);
        editor.apply();
        return true;
    }
    //获取设备ip
    public String readServerIp(){
        String server_ip = "127.0.0.1";
        if(mContext != null){
            SharedPreferences pref    = mContext.getSharedPreferences("data",    Context.MODE_PRIVATE);
            server_ip = pref.getString("server_ip","");
        }
        return  server_ip;
    }
    /**
     *  返回数据给前台js
     * @param funName
     * @param model
     */
    public void SendCallDataToJS(String funName,ServiceModel model){
        String call = "javascript:"+funName+"calljs(" + gson.toJson(model) + ")";
        new Handler(Looper.getMainLooper()).post(() -> webView.loadUrl(call));
    }
}