Esempio n. 1
0
/**
  * @brief  push_buffer
  *         pushes the data structure onto the circular buffer (queues it)
  * @param  *buffer : pointer to event buffer
  * @param  data : data to be Queued in event_buffer
  * @retval None
  */
void push_eventbuffer_queue(wifi_event_buffer *buffer, wifi_event_TypeDef data) 
{
  int bufsize;
  uint32_t index;
  
  if (event_full(buffer))
    {
      return;
    } 
  else 
    {
      index=buffer->end/ELEMENT_SIZE;
      buffer->element[index].data_length = data.data_length;
      buffer->element[index].wind64_pending_packet_no = data.wind64_pending_packet_no;
      buffer->element[index].socket_id = data.socket_id;
      buffer->element[index].server_id = data.server_id;
      buffer->element[index].wind = data.wind;
      buffer->element[index].event = data.event;
      buffer->count++;
      buffer->end = buffer->end + ELEMENT_SIZE;
      
      //wrap around if max size is reached
      bufsize = (buffer->size);
      buffer->end %= bufsize;
    }
}
Esempio n. 2
0
void event_push(struct event e)
{
	// full ? don't push
	if (event_full()) return; 
	*evt_in++ = e;
	// end of line ? rewind
	if (evt_in==&evt_queue[EVT_QUEUE_SIZE]) {
		evt_in=&evt_queue[0];
	}
}
Esempio n. 3
0
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");
	}