remote update

This commit is contained in:
Nguyen Dinh Thuan
2024-09-19 06:55:27 +07:00
parent 56ba2b199b
commit a8cd442f91
5 changed files with 252 additions and 90 deletions
+128
View File
@@ -39,6 +39,7 @@ namespace SafeBagDE70
public static int TenantId = 0;
public static bool IsInternetOk = false;
static Task? resendTask = null;
static Task? commandTask = null;
public static DeviceStatus? _DeviceStatus = null;
public static DeviceStatus? DeviceStatus
{
@@ -315,6 +316,133 @@ namespace SafeBagDE70
Log.Error($"Resend could not start IsInTransaction: {AppData.IsInTransaction} IsInternetOk: {AppData.IsInternetOk}");
}
}
public static void GetandExecuteCommands()
{
if (IsInternetOk && (commandTask == null || commandTask.IsCompleted))
{
commandTask = Task.Run(async () =>
{
try
{
var commands= await APIModels.GetCommands();
if(commands != null && commands.Count()>0)
{
foreach (var command in commands)
{
bool bResult = false;
switch(command.CommandCode)
{
case 0:
break;
case 1:
Log.Information("Remote Reset CDM Error");
//Restart CDM
bResult=ResetCDMError();
break;
case 2:
Log.Information("Remote Reset CDM Counter");
bResult = ResetCDMCounter();
if (!bResult)
{
bResult = ResetCDMCounter();
}
break;
}
//
await APIModels.UpdateDeviceCommand(command.Id, bResult?1:-1);
}
}
}
catch (Exception ex)
{
Log.Fatal(ex, "GetandExecuteCommands failed");
}
});
}
else
{
var str = "";
if (commandTask != null && !commandTask.IsCompleted)
str += "Previous command state are running; ";
if (!IsInternetOk)
str += "No Internet Connection";
Log.Error("GetandExecuteCommands error: "+str);
}
}
public static bool ResetCDMCounter()
{
bool bResetOk = false;
if (AppData.cCmdRsp != null)
{
Log.Information("[ADMIN] reset counter");
CCmdRsp cCmdRsp = AppData.cCmdRsp;
cCmdRsp.SendDeSense();
Thread.Sleep(1000);
cCmdRsp.SendXXCmd((byte)Command.CMD_DE_UNLOCK);
Thread.Sleep(1000);
cCmdRsp.SendDeSense();
Thread.Sleep(1000);
//Event fix
var recvData = cCmdRsp.recv_dat;
if (recvData.dat[14] == recvData.dat[16])
{
cCmdRsp.SendLock();
}
else
{
cCmdRsp.SendEventFix(recvData.dat[16]);
cCmdRsp.SendLock();
}
var currentMode = cCmdRsp.GetLockParam().mode;
cCmdRsp.GetLockParam().mode = Mode.MODE_COLLECTION;
cCmdRsp.SendLock();
Thread.Sleep(10000);
cCmdRsp.SendDeSense();
Thread.Sleep(1000);
recvData = cCmdRsp.recv_dat;
if (recvData.dat[14] != recvData.dat[16])
{
AppData.GetCassetteData();
bResetOk = true;
}
}
return bResetOk;
}
public static bool ResetCDMError()
{
var cCmdRsp = AppData.cCmdRsp;
bool bSuccess = false;
if(cCmdRsp!=null && cCmdRsp.recv_dat!=null)
{
if(cCmdRsp.recv_dat.dat[1] == 0x1C && cCmdRsp.recv_dat.dat[2] == 0x4A)
{
cCmdRsp.SendXXCmd((byte)Command.CMD_DE_SENSE);
var recvData = cCmdRsp.recv_dat;
if (recvData.dat[14] == recvData.dat[16])
{
cCmdRsp.SendLock();
}
else
{
cCmdRsp.SendEventFix(recvData.dat[16]);
}
Thread.Sleep(1000);
cCmdRsp.SendXXCmd((byte)Command.CMD_DE_RESET);
Thread.Sleep(2000);
cCmdRsp.SendXXCmd((byte)Command.CMD_DE_SENSE);
if (cCmdRsp.recv_dat.dat[1] == 0x04 && cCmdRsp.recv_dat.dat[2] == 0x41)
{
bSuccess = true;
}
}
}
return bSuccess;
}
}
public class CustomerAccount