📄 filemakerdlg.cpp
字号:
ClearDataFlag = FALSE;
}
}
if ( TheFlagResetDevice )
{ if ( session.TransferSetupPacket(0x33, 0x3a, 0xc2, 0, buffer) )
{ Sleep(50);
TheFlagResetDevice = FALSE;
}
}
*/
if ( TheFlagVideoStartUp )
{
if ( TheDeviceSampleState )
{ if ( !session.SampleFinished )
{ if ( session.TransferSetupPacket(SYSTEM_SET, CTRL_CMD, 0xaa, 0, session.hDataBuffer) )
{
Sleep(40);
//TheDeviceSampleState = FALSE;
}
}
else
{
if ( session.TransferSetupPacket(SYSTEM_SET, CTRL_CMD, 0x55, 0, session.hDataBuffer) )
{
//Sleep(10);
TheFlagDataTranfer = TRUE;
TheFlagVideoStartUp = FALSE;
}
}
}
else
TheFlagVideoStartUp = FALSE;
}
if ( TheFlagDataTranfer )
{
TheWholeReadEnable = TRUE;
//PostMessage(TheHandleFileMakerDlg,MW_SOMEONEMSG, 2, 0 );
TheFlagDataTranfer = FALSE;
TheViewStartPoint = 0;
PostMessage(TheHandleFileMakerDlg,MW_SOMEONEMSG, 3, 1 );
}
/*
if ( TheFlagStartPlay )
{ if ( session.TransferSetupPacket(0x33, 0x35, Stop_ISO_WRITE ? 0xc2:0xc1, 0, buffer) )
{ Sleep(50);
TheFlagStartPlay = FALSE;
}
}
*/
//if ( !TheWholeReadIsReady || !TheWholeReadEnable )
// WaitForSingleObject(hResumeThreadEvent,200);
if ( !TheWholeReadIsReady && TheWholeReadEnable ) //读取未启动
{
TheDataReadLength = 128;
//TheWholeReadIsReady = FALSE;
TheWholeReadIsReady = session.TransferSetupPacket (DATA_RDREQ,
( TheViewStartPoint & 0x00ff00 ) >> 8,
( TheViewStartPoint & 0xff0000 ) >> 16,
TheDataReadLength,session.hDataBuffer);
}
if ( TheWholeReadIsReady && TheWholeReadEnable )
{
if ( !session.TransferSetupPacket (TEST_CMD,0,0,0,session.hDataBuffer) )
{ Sleep(10);
continue;
}
if ( session.StateOfReadReady == 3 || session.StateOfReadReady == 0 )
{
TheWholeReadIsReady = FALSE;
}
else
if ( session.StateOfReadReady == 1 )
{
TheWholeReadIsReady = FALSE;
pBuffer = pReadBuffer;
if ( session.TransferSetupPacket (DATA_RD,0,0,TheDataReadLength,session.hDataBuffer) )
{
if( session.DoRead ( TheDataReadLength * 256 ,pBuffer ) )
{
memcpy( TheViewDataBuffer + TheViewStartPoint , pBuffer , TheDataReadLength * 256 );
TheViewStartPoint += TheDataReadLength * 256;
if ( TheViewStartPoint >= 128*1024 )
{
TheWholeReadEnable = FALSE;
//draw
PostMessage(TheHandleFileMakerDlg,MW_SOMEONEMSG, 2, 0 );
TheFlagVideoStartUp = TRUE;
//TheFlagDataTranfer = TRUE;
}
}
session.DoResetPipe (0x85);
}
}
else
{ //session.StateOfReadReady == 2 (即将接受的数据正在准备中,故等待)
Sleep(10);
}
}
if ( TheCurrentUpdateMode != session.UpdateDataMode ) //数据更新模式
{
/*pSendBuffer[0] = 0x0b;
pSendBuffer[1] = 0x06;
pSendBuffer[2] = 0x09;
pSendBuffer[3] = 0x09;
temp = (unsigned int )session.DataCRCcheck(4, pSendBuffer ); //CRC校验
unsigned int tt = temp;
*/
if ( !session.TransferSetupPacket (SYSTEM_SET,MODE_SET,TheCurrentUpdateMode > 0 ? 0xa3:0x00,0,session.hDataBuffer) )
{ Sleep(10);
continue;
}
TheUpdateDownLoadStep = 1; //更新数据下载完成步骤
}
if ( TheCurrentUpdateMode > 0 && TheUpdateDataReady )
{
//if ( !TheDataWriteDone )
// WaitForSingleObject(MyDevice.ResumeThreadEvent,50);
switch( TheUpdateDownLoadStep )
{
case 1 : //启动FLASH校验(验证数据是否完成)
if ( session.StateOfDateCheck != 2)
{
if ( !session.TransferSetupPacket (DATA_CHK ,TheUpdateDataAddress & 0x00ff, (TheUpdateDataAddress & 0xff00 ) >> 8, TheUpdateDataLength ,session.hDataBuffer) )
{ Sleep(10); // 起点地址低8位 起点地址高8位 数据总数
break;
}
TheUpdateDownLoadStep = 2;
TheCounterError = 0;
}
break;
case 2 : //检查FLASH校验结果
if ( session.StateOfDateCheck == 1)
{
if ( !session.TransferSetupPacket (SYSTEM_SET,SHAK_CMD,0x3a, TheUpdateDataLength ,session.hDataBuffer) )
{ Sleep(10); // 起点地址低8位 起点地址高8位 数据总数
if ( session.ErrorCommond )
TheUpdateDownLoadStep = 1;
}
else
{
temp = session.DataCRCcheck( TheUpdateDataLength << 8 , TheUpdateDataBuffer ); //CRC校验
if ( (temp & 0x00ff) == session.hDataBuffer[6] && ( (temp & 0xff00)>>8 ) == session.hDataBuffer[7] )
{
TheUpdateDownLoadStep = 1;
TRACE("check completed.\n");
}
else
{ //下载数据块
TRACE("下载数据块\tcheck = 0x%02x 0x%02x\twill = 0x%02x 0x%02x\n",session.hDataBuffer[6],session.hDataBuffer[7],(temp & 0x00ff),( (temp & 0xff00)>>8 ));
TheUpdateDownLoadStep = 3;
UpdateStartAddress = 0;
TheDataDownloading = TRUE; //暂停使用缓冲区
TheDataWriteDone = FALSE;
TheCounterError = 0;
if ( TheUpdateDataLength < _MAX_DOWNLOADBUFPKG_NUM_ )
UpdateDataPackageNum = TheUpdateDataLength;
else
UpdateDataPackageNum = _MAX_DOWNLOADBUFPKG_NUM_; //每次传输(默认) 32 * 64 = 2048 字节
}
}
}
else
if ( session.StateOfDateCheck == 3 || session.StateOfDateCheck == 0)
{
TheUpdateDownLoadStep = 1;
}
else
{
if ( TheCounterError++ > 10 ) //校验超时
TheUpdateDownLoadStep = 1;
}
break;
case 3: //启动BUFFER改写
if ( UpdateStartAddress < TheUpdateDataLength ) //有数据未传完
{ if ( !TheDataWriteDone ) //并且数据写入未启动
{
memcpy ( pSendBuffer , TheUpdateDataBuffer + ( UpdateStartAddress << 8 ), UpdateDataPackageNum << 8 );
pBuffer = pSendBuffer ; //每次传输 32 * 256 = 8k 字节(可变)
temp = session.DataCRCcheck( UpdateDataPackageNum << 8 , pBuffer ); //生成CRC校验
TRACE2("StartAdd = %d CRC = 0x%04x\n",UpdateStartAddress,temp);
pBuffer[UpdateDataPackageNum << 8] = temp & 0x00ff;
pBuffer[(UpdateDataPackageNum << 8) + 1] = (temp & 0xff00) >> 8;
if(session.TransferSetupPacket (DATA_WR,(BYTE)( UpdateStartAddress & 0x00ff ),(BYTE)( (UpdateStartAddress & 0xff00) >> 8 ),UpdateDataPackageNum,session.hDataBuffer ))
{
if ( session.DoWrite ( (UpdateDataPackageNum << 8) + 64,(unsigned char *)pBuffer) )
{ total = 0;
session.StateOfDateCheck = 0;
session.TransferTimeOut = FALSE;
do
{
Sleep(10);
if ( session.TransferSetupPacket (0,0,0,0,session.hDataBuffer) )
{ if ( session.StateOfDateCheck != 0 || session.TransferTimeOut )
{
TRACE("传输启动或超时!\n");
break; //传输启动或超时
}
}
else
TRACE("session.TransferSetupPacket Error!\n");
total++;
}
while ( total<3 && !AllthreadQuit);
if(AllthreadQuit)
{ free(pSendBuffer);
free(pReadBuffer);
return 0; //如果线程结束标志置位,则退出线程。
}
if ( total <= 3 && session.StateOfDateCheck != 0)
{
TheDataWriteDone = TRUE;
TRACE1("UpdateStartAddress = 0x%04x\n",UpdateStartAddress);
}
}
else
TRACE("DoWrite Error!\n");
}
else
TRACE("TransferSetupPacket Error!\n");
}
else
{
if ( !session.TransferSetupPacket (TEST_CMD,0,0,0,session.hDataBuffer) )
{ Sleep(10);
continue;
}
if ( session.StateOfDateCheck == 3 || session.StateOfDateCheck == 0 )
//写操作意外中断
{
TRACE("写操作意外中断! %d\n",session.StateOfDateCheck);
TheDataWriteDone = FALSE; //UpdateStartAddress不变(以原有数据重新写入一次)
}
else
if ( session.StateOfDateCheck == 1 ) //写操作正确完成
{
TheDataWriteDone = FALSE; //无回送标志则恢复初态,开始下一次操作
UpdateStartAddress += UpdateDataPackageNum ;
if ( ( UpdateStartAddress + _MAX_DOWNLOADBUFPKG_NUM_ ) <= TheUpdateDataLength )
UpdateDataPackageNum = _MAX_DOWNLOADBUFPKG_NUM_;
else
UpdateDataPackageNum = TheUpdateDataLength - UpdateStartAddress +1; //剩余数据包数,由下一次操作
TheCounterError = 0;
TRACE("写操作正确完成!\n");
}
else //session.StateOfDateCheck == 2 (已经写入的数据正在解析过程中,故等待)
if ( TheCounterError++ > 50 ) //解析过程超时
{
TRACE("解析过程超时!\n");
TheUpdateDownLoadStep = 1;
}
Sleep(10);
}
}
else //数据下载完成,进行启动擦除FLASH
{
TheUpdateDownLoadStep = 4;
TRACE("数据下载完成,进行启动改写FLASH!\n");
}
break;
case 4: //启动擦除FLASH
if ( session.StateOfDateCheck != 2)
{
if ( !session.TransferSetupPacket (SYSTEM_SET, FLASH_ERASE ,(TheUpdateDataAddress & 0x0f80) >> 4, 0 ,session.hDataBuffer) )
{ Sleep(10);
break;
}
TheUpdateDownLoadStep = 5;
TheCounterError = 0;
}
break;
case 5 : //检查擦除结果
if ( session.StateOfDateCheck == 1)
{
//启动改写FLASH
if ( !session.TransferSetupPacket (FLASH_WR ,TheUpdateDataAddress & 0x00ff, (TheUpdateDataAddress & 0xff00 ) >> 8, TheUpdateDataLength ,session.hDataBuffer) )
{ Sleep(10); // 起点地址低8位 起点地址高8位 数据总数
break;
}
TheUpdateDownLoadStep = 6;
TheCounterError = 0;
}
else
if ( session.StateOfDateCheck == 3 || session.StateOfDateCheck == 0)
{
TheUpdateDownLoadStep = 4;
}
else
{
TheCounterError++;
//if ( TheCounterError++ > 10 ) //超时
// TheUpdateDownLoadStep = 1;
}
break;
case 6 : //检查改写结果
if ( session.StateOfDateCheck == 1)
{
TheUpdateDownLoadStep = 1;
}
else
if ( session.StateOfDateCheck == 3 || session.StateOfDateCheck == 0)
{
TheUpdateDownLoadStep = 4;
}
else
{
TheCounterError++;
//if ( TheCounterError++ > 20 ) //校验超时
// TheUpdateDownLoadStep = 1;
}
break;
}
}
Sleep(10);
}
free(pSendBuffer);
free(pReadBuffer);
return 0;
}
void CFileMakerDlg::OnButtonClear()
{
// TODO: Add your control notification handler code here
m_MessageList.ResetContent();
//Stop_ISO_Audio = TRUE;
}
void CFileMakerDlg::OnButtonReset()
{
// TODO: Add your control notification handler code here
TheFlagResetDevice = TRUE;
CString MsgStr;
MsgStr.Format("参数复位,可以接受新数据。");
m_MessageList.AddString(MsgStr);
}
void CFileMakerDlg::OnCheck4()
{
// TODO: Add your control notification handler code here
int i=0;
UpdateData(TRUE);
if ( m_FlashUpdateMode )
{
m_ButtonUpdate.EnableWindow(TRUE);
m_FileNameCtrl.EnableWindow(TRUE);
m_FlashUpdateAddrCtrl.EnableWindow(TRUE);
TheUpdateDataReady = FALSE;
TheCurrentUpdateMode = 1;
}
else
{
m_ButtonUpdate.EnableWindow(FALSE);
m_FileNameCtrl.EnableWindow(FALSE);
m_FlashUpdateAddrCtrl.EnableWindow(FALSE);
TheCurrentUpdateMode = 0;
};
}
void CFileMakerDlg::OnCheckStartUp()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if ( m_SampleState != TheDeviceSampleState )
{ TheDeviceSampleState = m_SampleState;
TheFlagVideoStartUp = TRUE;
}
}
void CFileMakerDlg::OnChangeEdit1()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
UpdateData(TRUE);
UpdateData(FALSE);
}
void CFileMakerDlg::OnChangeEdit2()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_CommondDataSend.EnableWindow(TRUE);
UpdateData(FALSE);
}
char TheCommondDataSend[32];
int TheCommondDataLength = 0;
int TheCommondDataNextSend = 0;
void CFileMakerDlg::OnCommondDataSend()
{
// TODO: Add your control notification handler code here
}
void CFileMakerDlg::OnChangeEdit3()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
UpdateData(TRUE);
int i,l=m_FlashUpdateAddr.GetLength();
if ( l > 0 )
{ unsigned char ch = m_FlashUpdateAddr.GetAt(l-1);
if ( l<=6 && ( ( ch>='0' && ch<='9' || ch >='A' && ch<='F' ) && l<6 || (l==6 && ch=='H') ) )
{
if (l==6)
{ TheUpdateStartAddress = 0;
for (i=0;i<l-1;i++)
TheUpdateStartAddress += chtoint(m_FlashUpdateAddr.GetAt(l-2-i)) << (i*4) ;
}
}
else
{ m_FlashUpdateAddr = m_FlashUpdateAddr.Left( l - 1 );
UpdateData(FALSE);
m_FlashUpdateAddrCtrl.SetSel(l,-1);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -