process.c
上传用户:shyuanyi
上传日期:2008-05-24
资源大小:69k
文件大小:2k
源码类别:

RFID编程

开发平台:

C/C++

  1. /*************************************************/
  2. #include  "My_head.h"
  3. /*************************************************/
  4. static  BYTE  idata  Cur_State=IDEL_STATUS;
  5. void  SetCurState(BYTE stat) // (状态切换)
  6. {
  7.    if(stat>=MY_MAX_STATUS)return;
  8.    Cur_State = stat;
  9. }
  10. BYTE  GetCurState(void)
  11. {
  12.    return(Cur_State);
  13. }
  14. static  QUEUE_MESSAGE  idata  queue_message;
  15. /*-----------------------------------------------------------*/
  16. void  Message_Clear(void)
  17. {
  18.   queue_message.head=queue_message.tail=0;
  19. }
  20. /*-----------------------------------------------------------*/
  21. /*                                                           */
  22. /*-----------------------------------------------------------*/
  23. bit  PostMessage(BYTE Code, BYTE Dat)
  24. {
  25.    BYTE  head=queue_message.head;
  26.    if(++head>=MESSAGE_SIZE)head = 0;
  27.    if(head == queue_message.tail)return FALSE;
  28.    queue_message.array[queue_message.head].Code = Code;
  29.    queue_message.array[queue_message.head].Dat  = Dat;
  30.    queue_message.head = head;
  31.    return TRUE;
  32. }
  33. /*-----------------------------------------------------------*/
  34. /*                                                           */
  35. /*-----------------------------------------------------------*/
  36. bit  GetMessage(MESSAGE *Message)
  37. {
  38.    if(queue_message.tail == queue_message.head)return FALSE;
  39.    Message->Code = queue_message.array[queue_message.tail].Code;
  40.    Message->Dat = queue_message.array[queue_message.tail].Dat;
  41.    if(++queue_message.tail>=MESSAGE_SIZE)queue_message.tail= 0;
  42.    return TRUE;
  43. }
  44. /*--------------------------------------------------------*/
  45. //#include  "even_tab.c"
  46. extern  BYTE   code  *code  Status_Even_Tab[];
  47. extern  BYTE  (code  *code  EventFunc_Tab[])(BYTE);
  48. /*--------------------------------------------------------*/
  49. void  Do_Process(MESSAGE  Message)
  50. {
  51.    BYTE   (code *func)(BYTE);
  52.    BYTE   i,*Even_Tab = Status_Even_Tab[Cur_State];
  53.    for(i=0;Even_Tab[i]<OTHER_UNKNOW_ENVENT;i+=2)
  54.      if(Message.Code == Even_Tab[i])
  55.        {
  56.     i=Even_Tab[i+1];
  57.     //if(i > sizeof(EventFunc_Tab)/sizeof(func))break;
  58.         func = EventFunc_Tab[i];
  59.     if(func)i=func(Message.Dat);
  60. //if(i)send_for_test(i);
  61.     break; //must!!
  62.        }
  63. }
  64. /*
  65. void  Init_Message(void)
  66. {
  67.    SetCurState(IDEL_STATUS);
  68.    Message_Clear();
  69. }
  70. */