📄 _bcmd232.c
字号:
/****************************************************************
* *
* Program : _BCMD232.C *
* *
* Purpose : Proc RS232 command. *
* *
* Compile : HEW2 Ver7.0 *
* *
* Version : 1.0 *
* *
* Create : 2003-07-05 Saturday By Kim Won Myong *
* *
* Copyright (C) 2003 Amnokgang Technology Development Corp. *
* All Rights Reserved. *
* *
****************************************************************/
#include "_MyType.h"
#include "_Bios.h"
/* Test command */
#define BCMD_FlashWriter 0x01
#define BCMD_Execute 0x02
#define BCMD_DataFromPC 0x03
#define BCMD_Image256ToPC 0x04
#define BCMD_Image256FromPC 0x05
#define BCMD_DataToPC 0x06
#define BCMD_Image512ToPC 0x07
#define BCMD_Image512FromPC 0x08
#define BCMD_SetupInfoToPC 0x0B
#define BCMD_SetupInfoFromPC 0x0C
#define BCMD_SetTime 0x0F
#define BCMD_FpGetVersion 0x13
#define BCMD_GetTime 0x14
#define BCMD_ClearData 0x16
#define BCMD_ClearFlash 0x17
#define BCMD_NewMonitorWrite 0x18
#define BCMD_Download 0x19
#define BCMD_BMP1Write 0x1A
#define BCMD_BMP2Write 0x1B
#define BCMD_GetVersion2 0x79
/*========================================================================
Function : RemoteWriteFlash
Description : Down load from SCI0 and write to flash.
Return type : int
Argument
(In/Out) : void *apDst
(In/Out) : void *apCommand
// Create : 2003-07-07 17:15:23 By Kim Won Myong
========================================================================*/
int RemoteWriteFlash( void *apDst, int aBlock_Number, int aBlock_Size )
{
register BYTE *vpDstAddr;
char vBuff[BLOCK_SIZE];
if( aBlock_Number == 0xffff ) return TRUE;
if( !RecBlockData232( vBuff, sizeof(vBuff), 0, aBlock_Size ) ) return FALSE;
vpDstAddr = (BYTE*)apDst + BLOCK_SIZE*aBlock_Number;
if( !WriteFlash( vBuff, vpDstAddr, aBlock_Size ) ) return FALSE;
if( memcmp( vBuff, vpDstAddr, aBlock_Size ) != 0 ) return FALSE;
return TRUE;
}
/*========================================================================
Function : RS232CommandProc
Description : Process command from RS232.
Return type : int
Argument
(In/Out) : void
// Create : 2003-07-09 16:29:46 By Kim Won Myong
========================================================================*/
int RS232BCommandProc( void )
{
int vResult;
int vCommand, vBlock_Number, vBlock_Size;
long vInParam;
if( !GetCommand232( &vCommand, &vInParam, &vBlock_Number, &vBlock_Size ) ) return FALSE;
SendCmdAck232();
switch( vCommand ){
case BCMD_FlashWriter:
SendExeResult232( RemoteWriteFlash( (void*)vInParam, vBlock_Number, vBlock_Size ), 0 );
break;
case BCMD_Execute:
SendExeResult232( TRUE, 0 );
{
register void (*vpMonitorAddr)(void) = (void (*)(void))vInParam;
(*vpMonitorAddr)();
} break;
case BCMD_DataToPC:
if( ( vInParam < PROGRAM_MSZ ) ||
(0x0C000000 <= vInParam && vInParam<(0x0C000000 + PROGRAM_MSZ))){
SendExeResult232( FALSE, 0 );
}
else{
SendExeResult232( TRUE, 0 );
SendBlockData232( (void *)(vInParam), 512*1024, vBlock_Number, vBlock_Size );
}
break;
case BCMD_DataFromPC:
vResult = RecBlockData232( (void *)(vInParam), 512*1024, vBlock_Number, vBlock_Size );
SendExeResult232( vResult, 0 );
break;
case BCMD_Image256ToPC:
// if( vBlock_Number == 0 ) DeviceInactive();
// if( vBlock_Number == 255 ) DeviceActive();
if( vBlock_Number == 0 ) ReadFpImage256();
SendExeResult232( TRUE, 0 );
SendBlockData232( GetFpImage256(), 256*256, vBlock_Number, vBlock_Size );
break;
case BCMD_Image256FromPC:
RecBlockData232( GetFpImage256(), 256*256, vBlock_Number, vBlock_Size );
SendExeResult232( TRUE, 0 );
break;
case BCMD_Image512ToPC:
if( vBlock_Number == 0 ) ReadFpImage512();
SendExeResult232( TRUE, 0 );
SendBlockData232( GetFpImage512(), 512*512, vBlock_Number, vBlock_Size );
break;
case BCMD_Image512FromPC:
RecBlockData232( GetFpImage512(), 512*512, vBlock_Number, vBlock_Size );
SendExeResult232( TRUE, 0 );
break;
}
return TRUE;
}
/****************************************************************
*
* End of file : _BCMD232.C
*
****************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -