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 |
} |