package com.netsdk.demo.customize;
|
|
import com.netsdk.demo.util.CaseMenu;
|
import com.netsdk.lib.NetSDKLib;
|
import com.netsdk.lib.NetSDKLib.EM_UPGRADE_TYPE;
|
import com.netsdk.lib.NetSDKLib.LLong;
|
import com.sun.jna.Pointer;
|
import com.sun.jna.ptr.IntByReference;
|
|
import java.io.File;
|
import java.text.NumberFormat;
|
|
public class RemoteUpgrade {
|
|
static NetSDKLib netsdkApi = NetSDKLib.NETSDK_INSTANCE;
|
|
// 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
|
public class HaveReConnect implements NetSDKLib.fHaveReConnect {
|
public void invoke(LLong loginHandle, String pchDVRIP, int nDVRPort,
|
Pointer dwUser) {
|
System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP,
|
nDVRPort);
|
}
|
}
|
|
// 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数
|
public class fDisConnectCB implements NetSDKLib.fDisConnect {
|
public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort,
|
Pointer dwUser) {
|
System.out.printf("Device[%s] Port[%d] Disconnect!\n", pchDVRIP,
|
nDVRPort);
|
}
|
}
|
|
String m_strIp = "172.23.200.201";
|
int m_nPort = 37777;
|
String m_strUser = "admin";
|
String m_strPassword = "admin123";
|
|
private LLong upgradeHandle = new LLong(0); //升级句柄
|
private NetSDKLib.NET_DEVICEINFO_Ex deviceinfo = new NetSDKLib.NET_DEVICEINFO_Ex();
|
private static LLong loginHandle = new LLong(0); //登陆句柄
|
|
private fDisConnectCB m_DisConnectCB = new fDisConnectCB();
|
private HaveReConnect haveReConnect = new HaveReConnect();
|
|
public void EndTest()
|
{
|
System.out.println("End Test");
|
if( loginHandle.longValue() != 0)
|
{
|
netsdkApi.CLIENT_Logout(loginHandle);
|
}
|
System.out.println("See You...");
|
|
netsdkApi.CLIENT_Cleanup();
|
System.exit(0);
|
}
|
|
public void InitTest()
|
{
|
//初始化SDK库
|
netsdkApi.CLIENT_Init(m_DisConnectCB, null);
|
|
// 设置断线重连回调接口,设置过断线重连成功回调函数后,当设备出现断线情况,SDK内部会自动进行重连操作
|
// 此操作为可选操作,但建议用户进行设置
|
netsdkApi.CLIENT_SetAutoReconnect(haveReConnect, null);
|
|
//设置登录超时时间和尝试次数,可选
|
int waitTime = 5000; //登录请求响应超时时间设置为5S
|
int tryTimes = 3; //登录时尝试建立链接3次
|
netsdkApi.CLIENT_SetConnectTime(waitTime, tryTimes);
|
|
// 设置更多网络参数,NET_PARAM的nWaittime,nConnectTryNum成员与CLIENT_SetConnectTime
|
// 接口设置的登录设备超时时间和尝试次数意义相同,可选
|
NetSDKLib.NET_PARAM netParam = new NetSDKLib.NET_PARAM();
|
netParam.nConnectTime = 10000; //登录时尝试建立链接的超时时间
|
netsdkApi.CLIENT_SetNetworkParam(netParam);
|
|
// 打开日志,可选
|
NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO();
|
|
File path = new File(".");
|
String logPath = path.getAbsoluteFile().getParent() + "\\sdk_log\\" + System.currentTimeMillis() + ".log";
|
|
setLog.bSetFilePath = 1;
|
System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length);
|
|
setLog.bSetPrintStrategy = 1;
|
setLog.nPrintStrategy = 0;
|
boolean bLogopen = netsdkApi.CLIENT_LogOpen(setLog);
|
if (!bLogopen) {
|
System.err.println("Failed to open NetSDK log !!!");
|
}
|
|
// 向设备登入
|
int nSpecCap = 0;
|
Pointer pCapParam = null;
|
IntByReference nError = new IntByReference(0);
|
loginHandle = netsdkApi.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser ,
|
m_strPassword ,nSpecCap,pCapParam, deviceinfo,nError);
|
|
if(loginHandle.longValue() != 0) {
|
System.out.printf("Login Device[%s] Port[%d]Success!\n" , m_strIp , m_nPort);
|
}
|
else {
|
System.out.printf("Login Device[%s] Port[%d]Fail.Last Error[0x%x]\n" , m_strIp , m_nPort , netsdkApi.CLIENT_GetLastError());
|
EndTest();
|
}
|
}
|
|
//升级回调,分两个阶段。第一阶段是文件发送,第二阶段是,写flash,既真正去升级。 这两个阶段在回调中通过nTotalSize和nSendSize的组合方式去区分。
|
private static class UpgradeCallBackEx implements NetSDKLib.fUpgradeCallBackEx {
|
private static class UpgradeHolder {
|
private static UpgradeCallBackEx intance = new UpgradeCallBackEx();
|
}
|
private UpgradeCallBackEx() {}
|
public static UpgradeCallBackEx getInstance() {
|
return UpgradeHolder.intance;
|
}
|
|
@Override
|
public void invoke(LLong lLoginID, LLong lUpgradechannel, int nTotalSize, int nSendSize, Pointer dwUserData) {
|
|
if ((-1 == nSendSize) && (0 == nTotalSize)) // 成功
|
{
|
System.out.printf("Upgrade Success!! \r\n");
|
}
|
else if ((-2 == nSendSize) && (0 == nTotalSize)) //升级失败
|
{
|
System.out.printf("Upgrade Failed!! \r\n");
|
}
|
else
|
{
|
if (nTotalSize != -1) //文件传输 进度
|
{
|
// 计算进度
|
NumberFormat ss = NumberFormat.getInstance();
|
ss.setMaximumFractionDigits(2);
|
String result = ss.format((float)nSendSize/(float)nTotalSize*100);
|
|
System.out.println("Upgrade file transmite pos:" + result+ "%");
|
}
|
else //升级进度
|
{
|
// 进度
|
System.out.printf("System Upgrade pos:%d !! \r\n", nSendSize);
|
}
|
}
|
}
|
}
|
|
/**
|
* start search devices
|
*/
|
public void startUpgrade() {
|
int emtype = (int)EM_UPGRADE_TYPE.DH_UPGRADE_BIOS_TYPE;
|
String buffer = "D:\\FeiQ\\General_ASI72XX_Chn_P_BSC_V1.000.0000000.8.R.20190423\\General_ASI72XX_Chn_P_BSC_V1.000.0000000.8.R.201904231.bin";
|
System.err.printf("filePath:[%s]\n", buffer);
|
upgradeHandle = netsdkApi.CLIENT_StartUpgradeEx(loginHandle, emtype, buffer, UpgradeCallBackEx.getInstance(), null);
|
|
if (upgradeHandle.longValue() != 0)
|
{
|
boolean ret = netsdkApi.CLIENT_SendUpgrade(upgradeHandle);
|
if (ret)
|
{
|
System.out.println("start to uppgrade...");
|
}
|
else
|
{
|
netsdkApi.CLIENT_StopUpgrade(upgradeHandle);
|
upgradeHandle.setValue(0);
|
System.err.printf("CLIENT_SendUpgrade Failed ! Last Error[%x]\n", netsdkApi.CLIENT_GetLastError());
|
|
EndTest();
|
}
|
}
|
else
|
{
|
System.err.printf("CLIENT_StartUpgradeEx Failed ! Last Error[%x]\n", netsdkApi.CLIENT_GetLastError());
|
EndTest();
|
}
|
}
|
|
public void stopUpgrade() {
|
if (upgradeHandle.longValue() != 0)
|
{
|
netsdkApi.CLIENT_StopUpgrade(upgradeHandle);
|
upgradeHandle.setValue(0);
|
System.out.printf("CLIENT_StopUpgrade upgradeHandle:%d:...", upgradeHandle);
|
}
|
}
|
|
public void RunTest() {
|
CaseMenu menu = new CaseMenu();
|
|
menu.addItem(new CaseMenu.Item(this , "startUpgrade", "startUpgrade"));
|
menu.addItem(new CaseMenu.Item(this , "stopUpgrade", "stopUpgrade"));
|
|
menu.run();
|
}
|
public static void main(String[]args) {
|
RemoteUpgrade demo = new RemoteUpgrade();
|
demo.InitTest();
|
demo.RunTest();
|
demo.EndTest();
|
}
|
}
|