提交 e01d7680 作者: wysheng

TCU升级接收函数

上级 2e38ebd1
...@@ -150,10 +150,12 @@ void TCURequestIntervalHandle(StructTCUSend * pPgnRecv) ...@@ -150,10 +150,12 @@ void TCURequestIntervalHandle(StructTCUSend * pPgnRecv)
} }
} }
u8 TcuUpDateBuffer[1024];
u32 PackageAddr = 0;
void TCUStartPackageHandle(StructTCUSend * pPgnRecv) void TCUStartPackageHandle(StructTCUSend * pPgnRecv)
{ {
u8 addr = 0; u8 addr = 0;
u32 PackageAddr = 0;
u8 Date[8] = {0}; u8 Date[8] = {0};
if (pPgnRecv->DA == ChargerCont1939Addr) if (pPgnRecv->DA == ChargerCont1939Addr)
{ {
...@@ -170,7 +172,7 @@ void TCUStartPackageHandle(StructTCUSend * pPgnRecv) ...@@ -170,7 +172,7 @@ void TCUStartPackageHandle(StructTCUSend * pPgnRecv)
} }
} }
u8 TcuUpDateBuffer[1024];
void TCUSendDateHandle(StructTCUSend * pPgnRecv) void TCUSendDateHandle(StructTCUSend * pPgnRecv)
{ {
u8 addr = 0; u8 addr = 0;
...@@ -190,15 +192,107 @@ void TCUSendDateHandle(StructTCUSend * pPgnRecv) ...@@ -190,15 +192,107 @@ void TCUSendDateHandle(StructTCUSend * pPgnRecv)
} }
} }
u32 TCUGetPackageChecksum(void)
{}
u32 TCUGetProgramChecksum(void)
{}
void TCUCompletePackageHandle(StructTCUSend * pPgnRecv) void TCUCompletePackageHandle(StructTCUSend * pPgnRecv)
{ {
u8 addr = 0;
u32 checksum = 0;
int ret = 0;
u8 Date[8] = {0};
if (pPgnRecv->DA == ChargerCont1939Addr)
{
if(pPgnRecv->Data[1] == 0x01 )//0x01 --- 直流充电控制器
{
addr = pPgnRecv->Data[2];
memcpy(&checksum,&(pPgnRecv->Data[3]),4);
Date[1] = 0x01;
Date[2] = addr;
if(checksum == TCUGetPackageChecksum())
{
Date[3] = 0xaa;//0xAA:校验成功
//write to flash
ret = CopyCode(BakStartAddr+PackageAddr,(u32)TcuUpDateBuffer, 1024);
if(ret == 0)
{
memcpy(&Date[4],&(PackageAddr),4);
}
else
{
Date[3] = 0xff;//0xFF:擦除失败
}
}
else
{
Date[3] = 0x55;//0x55:校验失败
memcpy(&Date[4],&(PackageAddr),4);
}
TCUSinglePackSendMsg(Date, 8, eCmd_CompletePackageAck, 4, ChargerCont1939Addr);
}
}
} }
void TCUProgramVerificationHandle(StructTCUSend * pPgnRecv) void TCUProgramVerificationHandle(StructTCUSend * pPgnRecv)
{ {
u8 addr = 0;
u32 ProgramChecksum = 0;
u8 Date[8] = {0};
if (pPgnRecv->DA == ChargerCont1939Addr)
{
if(pPgnRecv->Data[1] == 0x01 )//0x01 --- 直流充电控制器
{
addr = pPgnRecv->Data[2];
memcpy(&ProgramChecksum,&(pPgnRecv->Data[3]),4);
Date[1] = 0x01;
Date[2] = addr;
if(ProgramChecksum == TCUGetProgramChecksum())
{
}
else
{
Date[3] = 0x01;//01H:失败
}
TCUSinglePackSendMsg(Date, 8, eCmd_ProgramVerificationAck, 4, ChargerCont1939Addr);
}
}
} }
void TCUResetHandle(StructTCUSend * pPgnRecv) void TCUResetHandle(StructTCUSend * pPgnRecv)
{ {
u8 addr = 0;
u8 Date[8] = {0};
if (pPgnRecv->DA == ChargerCont1939Addr)
{
if(pPgnRecv->Data[1] == 0x01 )//0x01 --- 直流充电控制器
{
addr = pPgnRecv->Data[2];
Date[1] = 0x01;
Date[2] = addr;
if(pPgnRecv->Data[2] == 0xAA)//AAH:代表立即重启
{
Date[2] = 0xAA;//
}
TCUSinglePackSendMsg(Date, 8, eCmd_resetAck, 4, ChargerCont1939Addr);
}
}
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论