// // Created by macheng on 2018/5/2. // #include "event.h" event_data_t dw_event_g; int peekEvent(const event_queue* evtQueue) { return evtQueue->stEvents[evtQueue->dwEvtPeek].type; //return the type of event that is in front of the queue } void saveEvent(event_queue* evtQueue, event_data_t newEvent, uint8_t eType) { evtQueue->stSavedEvent = newEvent; evtQueue->stSavedEvent.type = eType; } event_data_t getSavedEvent(event_queue* evtQueue) { return evtQueue->stSavedEvent; } void putEvent(event_queue* evtQueue, event_data_t newEvent, uint8_t eType) { //newevent.eventtime = portGetTickCnt(); newEvent.gotIt = 0 ; //newevent.eventtimeclr = 0; //copy event evtQueue->stEvents[evtQueue->dwEvtIdxIn] = newEvent; //set type - this makes it a new event (making sure the event data is copied before event is set as new) //to make sure that the get event function does not get an incomplete event evtQueue->stEvents[evtQueue->dwEvtIdxIn].type = eType; evtQueue->dwEvtIdxIn++; if(MAX_EVENT_NUMBER == evtQueue->dwEvtIdxIn) { evtQueue->dwEvtIdxIn = 0; } } event_data_t* getEvent(event_queue* evtQueue, int x) { int indexOut = evtQueue->dwEvtIdxOut; if (0 == evtQueue->stEvents[indexOut].type) //exit with "no event" { dw_event_g.type = 0; dw_event_g.typeSave = 0; return &dw_event_g; } //copy the event dw_event_g.typeSave = evtQueue->stEvents[indexOut].typeSave ; dw_event_g.typePend = evtQueue->stEvents[indexOut].typePend ; dw_event_g.rxLength = evtQueue->stEvents[indexOut].rxLength ; dw_event_g.timeStamp = evtQueue->stEvents[indexOut].timeStamp ; dw_event_g.timeStamp32l = evtQueue->stEvents[indexOut].timeStamp32l ; dw_event_g.timeStamp32h = evtQueue->stEvents[indexOut].timeStamp32h ; dw_event_g.uTimeStamp = evtQueue->stEvents[indexOut].uTimeStamp ; //dw_event_g.eventtime = instance_data[instance].dwevent[indexOut].eventtime ; //dw_event_g.eventtimeclr = instance_data[instance].dwevent[indexOut].eventtimeclr ; //dw_event_g.gotit = instance_data[instance].dwevent[indexOut].gotit ; memcpy(&dw_event_g.msgUnion, &(evtQueue->stEvents[indexOut].msgUnion), sizeof(evtQueue->stEvents[indexOut].msgUnion)); dw_event_g.type = evtQueue->stEvents[indexOut].type ; evtQueue->stEvents[indexOut].gotIt = x; //instance_data[instance].dwevent[indexOut].eventtimeclr = portGetTickCnt(); evtQueue->stEvents[indexOut].type = 0; //clear the event evtQueue->dwEvtIdxOut++; if(MAX_EVENT_NUMBER == evtQueue->dwEvtIdxOut) //wrap the counter { evtQueue->dwEvtIdxOut = 0; } evtQueue->dwEvtPeek = evtQueue->dwEvtIdxOut; //set the new peek value //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); //eventOutcount++; return &dw_event_g; } void clearEvents(event_queue* evtQueue) { int i = 0; for(i=0; istEvents[i]), 0, sizeof(event_data_t)); } evtQueue->dwEvtIdxIn = 0; evtQueue->dwEvtIdxOut = 0; evtQueue->dwEvtPeek = 0; }