WORD API_CmdAnswer(PACKET * P, WORD _Error)
{
REAL_TIME mRtccSw;
DWORD_VAL dwvTemp;
WORD_VAL wvTemp;
WORD w;
if(_Error == ERR_OK){
for(w=0; w<MAX_EVENT_ALL; w++){
if(TableEventDataPointer[w].Event.Val == (P->Command.Val | ANSWER_FLAG)) break;
}
if(P->DataLength.Val < MAX_EVENT_DATA && w < MAX_EVENT_ALL){
API_PutEvent(P->Receiver.Val, P->Command.Val | ANSWER_FLAG, P->bData, P->DataLength.Val);
}
if( API_SendPacket( P->Receiver.Val, P->Sender.Val, P->Command.Val | ANSWER_FLAG, P->bData, P->DataLength.Val ) ) {
API_Error( Packet.Receiver.Val, ERR_CmdAnswer_SEND_DATA );
return ERR_CmdAnswer_SEND_DATA;
}
}
else{
mRtccSw = API_GetRTCC();
P->DataLength.Val = 11;
dwvTemp.Val=mRtccSw.Time.Days;
memcpy_back(&P->bData[0], &dwvTemp.byte.MB, 4);
P->bData[4]=mRtccSw.Time.Hour;
P->bData[5]=mRtccSw.Time.Minute;
P->bData[6]=mRtccSw.Time.Second;
wvTemp.Val = mRtccSw.Time.Thousandth;
memcpy_back(&P->bData[7], &wvTemp.byte.HB, 2);
wvTemp.Val= _Error;
memcpy_back(&P->bData[9], &wvTemp.byte.HB, 2);
if(API_SendPacket(P->Receiver.Val, P->Sender.Val, P->Command.Val | ERROR_FLAG | ANSWER_FLAG, P->bData, P->DataLength.Val)){
API_Error( Packet.Receiver.Val, ERR_CmdAnswer_SEND_DATA );
return ERR_CmdAnswer_SEND_DATA;
}
}
return ERR_OK;
}