WORD API_CmdAnswer(PACKET * P, WORD _Error)

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;
}