/** * @brief pop_buffer_queue * dequeues the circular buffer * @param *buffer : pointer to event buffer * @retval None */ wifi_event_TypeDef * pop_eventbuffer_queue(wifi_event_buffer *buffer) { int bufsize; uint32_t index; if (event_empty(buffer)) { //printf("\r\Event Buffer Empty!!\r\n"); return NULL; } else { /* First in First Out*/ index=buffer->start/ELEMENT_SIZE; element.data_length = buffer->element[index].data_length; element.socket_id = buffer->element[index].socket_id; element.server_id = buffer->element[index].server_id; element.wind64_pending_packet_no = buffer->element[index].wind64_pending_packet_no; element.wind = buffer->element[index].wind; element.event = buffer->element[index].event; buffer->start = buffer->start + ELEMENT_SIZE; buffer->count--; bufsize = (buffer->size); buffer->start %= bufsize; return &element; } }
static void event_test() { // test vectors const int add[] = {0,2,3,10,6 ,4,0,16,0 ,16,16,16,16,16,16,0}; const int get[] = {2,0,6,0 ,16,0,4,0 ,16,0,0,0,0,0,0,16}; event_clear(); for (int i=0;i<sizeof(add)/sizeof(int);i++) { printf("round %d:+%d-%d:",i,add[i],get[i]); for (int j=0;j<add[i];j++) event_push((event){.raw=i}); for (int j=0;j<get[i];j++) printf("%2d ",event_get(i)); //printf("in: %p out:%p start:%p end:%p",evt_in, evt_out, QUEUE_START,QUEUE_END); if (event_full()) printf(" - now full "); if (event_empty()) printf("- now empty "); printf("\n"); }