event.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. //
  2. // Created by macheng on 2018/5/2.
  3. //
  4. #include "event.h"
  5. event_data_t dw_event_g;
  6. int peekEvent(const event_queue* evtQueue)
  7. {
  8. return evtQueue->stEvents[evtQueue->dwEvtPeek].type; //return the type of event that is in front of the queue
  9. }
  10. void saveEvent(event_queue* evtQueue, event_data_t newEvent, uint8_t eType)
  11. {
  12. evtQueue->stSavedEvent = newEvent;
  13. evtQueue->stSavedEvent.type = eType;
  14. }
  15. event_data_t getSavedEvent(event_queue* evtQueue)
  16. {
  17. return evtQueue->stSavedEvent;
  18. }
  19. void putEvent(event_queue* evtQueue, event_data_t newEvent, uint8_t eType)
  20. {
  21. //newevent.eventtime = portGetTickCnt();
  22. newEvent.gotIt = 0 ; //newevent.eventtimeclr = 0;
  23. //copy event
  24. evtQueue->stEvents[evtQueue->dwEvtIdxIn] = newEvent;
  25. //set type - this makes it a new event (making sure the event data is copied before event is set as new)
  26. //to make sure that the get event function does not get an incomplete event
  27. evtQueue->stEvents[evtQueue->dwEvtIdxIn].type = eType;
  28. evtQueue->dwEvtIdxIn++;
  29. if(MAX_EVENT_NUMBER == evtQueue->dwEvtIdxIn)
  30. {
  31. evtQueue->dwEvtIdxIn = 0;
  32. }
  33. }
  34. event_data_t* getEvent(event_queue* evtQueue, int x)
  35. {
  36. int indexOut = evtQueue->dwEvtIdxOut;
  37. if (0 == evtQueue->stEvents[indexOut].type) //exit with "no event"
  38. {
  39. dw_event_g.type = 0;
  40. dw_event_g.typeSave = 0;
  41. return &dw_event_g;
  42. }
  43. //copy the event
  44. dw_event_g.typeSave = evtQueue->stEvents[indexOut].typeSave ;
  45. dw_event_g.typePend = evtQueue->stEvents[indexOut].typePend ;
  46. dw_event_g.rxLength = evtQueue->stEvents[indexOut].rxLength ;
  47. dw_event_g.timeStamp = evtQueue->stEvents[indexOut].timeStamp ;
  48. dw_event_g.timeStamp32l = evtQueue->stEvents[indexOut].timeStamp32l ;
  49. dw_event_g.timeStamp32h = evtQueue->stEvents[indexOut].timeStamp32h ;
  50. dw_event_g.uTimeStamp = evtQueue->stEvents[indexOut].uTimeStamp ;
  51. //dw_event_g.eventtime = instance_data[instance].dwevent[indexOut].eventtime ;
  52. //dw_event_g.eventtimeclr = instance_data[instance].dwevent[indexOut].eventtimeclr ;
  53. //dw_event_g.gotit = instance_data[instance].dwevent[indexOut].gotit ;
  54. memcpy(&dw_event_g.msgUnion, &(evtQueue->stEvents[indexOut].msgUnion), sizeof(evtQueue->stEvents[indexOut].msgUnion));
  55. dw_event_g.type = evtQueue->stEvents[indexOut].type ;
  56. evtQueue->stEvents[indexOut].gotIt = x;
  57. //instance_data[instance].dwevent[indexOut].eventtimeclr = portGetTickCnt();
  58. evtQueue->stEvents[indexOut].type = 0; //clear the event
  59. evtQueue->dwEvtIdxOut++;
  60. if(MAX_EVENT_NUMBER == evtQueue->dwEvtIdxOut) //wrap the counter
  61. {
  62. evtQueue->dwEvtIdxOut = 0;
  63. }
  64. evtQueue->dwEvtPeek = evtQueue->dwEvtIdxOut; //set the new peek value
  65. //if(dw_event.type) printf("get %d - in %d out %d @ %d\n", dw_event.type, instance_data[instance].dweventCntIn, instance_data[instance].dweventCntOut, ptime);
  66. //eventOutcount++;
  67. return &dw_event_g;
  68. }
  69. void clearEvents(event_queue* evtQueue)
  70. {
  71. int i = 0;
  72. for(i=0; i<MAX_EVENT_NUMBER; i++)
  73. {
  74. memset(&(evtQueue->stEvents[i]), 0, sizeof(event_data_t));
  75. }
  76. evtQueue->dwEvtIdxIn = 0;
  77. evtQueue->dwEvtIdxOut = 0;
  78. evtQueue->dwEvtPeek = 0;
  79. }