📄 ppsmext.c
字号:
#include <string.h>
#include <asixsys.h>
#include <sys\ppsmtype.h>
#include <sys\ppsmmsg.h>
/* they are defined in rtc.c */
extern void TK_Scan_Start(void);
extern void TK_Scan_Stop(void);
STATUS AdvSendMessage(U32 taskId, P_MESSAGE msg, U8 flag)
{
int id, i;
if( msg == NULL )
return PPSM_ERROR;
i = (SYSTCB *)taskId - (SYSTCB *)gSysTcbTbl;
id = i+1;
if( (id < 1) || (id > TASKNUM) )
return PPSM_ERR_TASK_ID;
if( SysSendMessage((ID)id, (PMSG)msg) == SYS_OK )
return PPSM_OK;
else
return PPSM_ERROR;
return PPSM_OK;
}
STATUS AdvTaskCreate(P_U32 taskId,
P_VOID procAddr,
S16 xSrc, S16 ySrc, S16 xDest, S16 yDest,
S32 stackSize,
U16 newScreen,
U16 screenWidth, U16 screenHeight,
P_U8 bitmap )
{
int i;
TASKDESCRIPTIONLIST *ptskdsp = TaskDescription;
i = 0;
while((ptskdsp!=NULL)&&(ptskdsp->desp->entry != procAddr) )
{
ptskdsp = ptskdsp->next;
i++;
}
if(i == TASKNUM)
return PPSM_ERROR;
*taskId = (U32)&gSysTcbTbl[APP_ID_BEGIN+i-1];
return PPSM_OK;
}
STATUS TaskHook(U32 taskId, P_VOID entryCallback, P_VOID exitCallback)
{
SYSTCB *pTcb;
int id, i;
/* check parameters */
if(entryCallback == NULL || exitCallback == NULL)
return PPSM_ERROR;
i = (SYSTCB *)taskId - (SYSTCB *)gSysTcbTbl;
id = i+1;
if( (id < 1) || (id > TASKNUM) )
return PPSM_ERROR;
pTcb = (SYSTCB *)taskId;
pTcb->entryCallback = entryCallback;
pTcb->exitCallback = exitCallback;
return PPSM_OK;
}
STATUS AdvMessageDelete(U32 taskId, U16 type, U32 shortData)
{
T_MSG **ppk_msg, *pmsg;
ID mbxid, id;
int status, i;
i = (SYSTCB *)taskId - (SYSTCB *)gSysTcbTbl;
id = i+1;
if( (id < 1) || (id > TASKNUM) )
return PPSM_ERROR;
ppk_msg = &pmsg;
mbxid = id;
while(1)
{
pmsg = NULL;
status = trcv_msg( ppk_msg, mbxid, 0 );
if(status == E_TMOUT)
break;
if(pmsg)
SysLfree(*ppk_msg);
}
return PPSM_OK;
}
STATUS TaskTerminate(U32 taskId)
{
ID id, i;
MSG msg;
i = (SYSTCB *)taskId - (SYSTCB *)gSysTcbTbl;
id = i+1;
if( (id < 1) || (id > TASKNUM) )
return PPSM_ERROR;
msg.message = SM_END;
msg.lparam = id;
if(SysSendMessage(SYSTASK_ID, &msg) == SYS_OK)
return PPSM_OK;
return PPSM_ERROR;
}
STATUS MoveBlock(P_U32 srcAddr, P_U32 destAddr, U32 size)
{
char *sa, *da, *oa;
char *srcaddr, *destaddr;
U32 oversize=0;
if((srcAddr == NULL) || (destAddr == NULL))
return PPSM_ERROR;
if((size > 20000) || (size == 0))
return PPSM_ERROR;
if(srcAddr == destAddr)
return PPSM_OK;
srcaddr = (char *)srcAddr;
destaddr = (char *)destAddr;
if(srcaddr > destaddr)
{
sa = destaddr, da = srcaddr;
}else{
sa = srcaddr, da = destaddr;
}
if(sa + size <= da)
{
memcpy(destaddr, srcaddr, size);
return PPSM_OK;
}
oversize = sa + size - da;
oa = (char *)SysLmalloc(oversize);
if(oa == NULL)
return PPSM_ERROR;
if(srcaddr > destaddr)
{
memcpy(oa, srcaddr, oversize);
memcpy(destaddr, oa, oversize);
memcpy(destaddr+oversize, srcaddr+oversize, size - oversize);
}else{
memcpy(oa, destaddr, oversize);
memcpy(destaddr+size-oversize, oa, oversize);
memcpy(destaddr, srcaddr, size - oversize);
}
SysLfree(oa);
return PPSM_OK;
}
STATUS TaskStart(U32 taskId)
{
MSG msg;
ID i,id;
i = (SYSTCB *)taskId - (SYSTCB *)gSysTcbTbl;
id = i+1;
if( (id < 1) || (id > TASKNUM) )
return PPSM_ERROR;
memset( &msg, 0, sizeof(MSG) );
msg.message = SM_START;
msg.lparam = id;
if(SysSendMessage(SYSTASK_ID, &msg) == SYS_OK)
return PPSM_OK;
return PPSM_ERROR;
}
// following functions defined in pendev.c
/*
void PenIrptEnable(void)
{
// TK_Scan_Start();
}
void PenIrptDisable(void)
{
// TK_Scan_Stop();
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -