Project

General

Profile

Statistics
| Revision:

root / trunk / code / projects / mapping / python / robots.c @ 918

History | View | Annotate | Download (1.41 KB)

1
#include <stdlib.h>
2
#include <wireless.h>
3
#include <string.h>
4
#include <stdio.h>
5
#include "robots.h"
6

    
7
#define CHANNEL 0xE
8

    
9
typedef struct Node {
10
     Packet *info;
11
     struct Node *next;
12
     struct Node *prev;
13
} Node;
14

    
15
Node *thead = NULL;
16

    
17
void enqueue(char typ, int src, unsigned char *wrds,int len);
18

    
19
void make_listener()
20
{ 
21
     PacketGroupHandler *receiver;
22
     printf("wl_init() returned %d\n", wl_init());
23
     wl_set_channel(CHANNEL);
24
     receiver = malloc(sizeof(PacketGroupHandler));
25
     receiver->groupCode = GROUP;
26
     receiver->handle_response = NULL;
27
     receiver->timeout_handler = NULL;
28
     receiver->handle_receive = enqueue;
29
     wl_register_packet_group(receiver);
30
}
31

    
32

    
33
void enqueue(char typ, int src, unsigned char *wrds,int len)
34
{
35
     Node *new = malloc(sizeof(Node));
36
     new->info = malloc(sizeof(Packet));
37
     new->info->source = src;
38
     new->info->length = len;
39
     new->info->type = typ;
40
     new->info->packet = malloc((strlen(wrds)+1)*sizeof(char));
41
     strcpy(new->info->packet, wrds);
42

    
43
     if (!thead)
44
          thead = new;
45
     else
46
     {
47
          new->next = thead;
48
          thead->prev = new;
49
          thead = new;
50
     }
51
}
52

    
53
Packet * dequeue()
54
{
55
     Node *iter;
56
     Packet *ret;
57
     if (!thead)
58
          return NULL;
59
     for (iter = thead; iter->next != NULL; iter = iter->next)
60
          ;
61
     ret = iter->info;
62
     if (iter->prev)
63
          (iter->prev)->next = NULL;
64
     else
65
          thead = NULL;
66
     free (iter);
67
     return ret;
68
}