Project

General

Profile

Statistics
| Revision:

root / trunk / code / projects / hunter_prey / ref / main.c @ 1466

History | View | Annotate | Download (2.36 KB)

1
#include <stdlib.h>
2
#include <stdio.h>
3
#include <time.h>
4
#include <unistd.h>
5
#include "../../libwireless/lib/wl_basic.h"
6
#include "../../libwireless/lib/wireless.h"
7
#include "../hunter_prey.h"
8

    
9
#define TYPE 42        // packet type for wireless communication
10
#define ROBOTID 255 // make up a robot id because the PC doesn't have one
11

    
12
void packet_receive(char type, int source, unsigned char* packet, int length);
13

    
14
volatile unsigned int preyTime[20];
15
volatile int preyBot=-1;
16

    
17
void waitKey(void) {
18
  unsigned char buf[10];
19

    
20
  //read from stdin
21
   while(read(0, buf, 10)==10) {
22
     printf("!");
23
     fflush(stdout);
24
   }
25

    
26
  while(getchar()==-1);
27
}
28

    
29
void print_stats(void) {
30

    
31
  int i=0;
32

    
33
  for(i=0;i<20;i++) {
34
    printf("%5d ", preyTime[i]);
35
  }
36

    
37
  printf("\n");
38

    
39
}
40

    
41
int main(int argc, char *argv[])
42
{
43
    char send_buffer[2];    // holds data to send
44
    int data_length;        // length of data received
45
    unsigned char *packet_data;        // data received
46
    int ret;
47
    int i;
48

    
49
    unsigned int channel = 0xF;
50

    
51
    struct timespec delay, rem;
52

    
53
    delay.tv_sec = 0;
54
    delay.tv_nsec = 100000000;
55

    
56

    
57
    if(argc > 1) {
58
      channel = atoi(argv[1]);
59
    }
60

    
61
    printf("using wireless channel %d\n", channel);
62

    
63
    wl_set_com_port("/dev/ttyUSB0");
64
    // set up wireless
65
    ret = wl_basic_init(&packet_receive);
66

    
67
    if(ret) {
68
      printf("ERROR: wl_basic_init failed. %d\n", ret);
69
      return ret;
70
    }
71
    //wl_set_channel(channel);
72

    
73
    for(i=0;i<16;i++) {
74
      preyTime[i]=0;
75
    }
76

    
77
    ret = 0;    
78
    i=0;
79

    
80
    printf("ready\n");
81

    
82
    //TODO: use rtc to make this more accurate
83
    while(1) {
84
      wl_do();
85

    
86
      if(ret==0) {
87
        ret = nanosleep(&delay, &rem);
88
      }
89
      else {
90
        ret = nanosleep(&rem, &rem);
91
      }
92

    
93
      //update counts when we have waited at least enough time
94
      if(ret == 0 && preyBot >= 0) {
95
        preyTime[preyBot]++;
96
        i++;
97
      }
98

    
99
      if(i%10==0) {
100
        print_stats();
101
      }
102
    }
103

    
104
    return 0;
105
}
106

    
107
void packet_receive(char type, int source, unsigned char* packet, int length)
108
{
109

    
110
  if(type==42 && length>=2){
111
    if(packet[0] == HUNTER_PREY_ACTION_TAG) {
112
      //TODO: check tag
113

    
114
    }
115
    else if(packet[0] == HUNTER_PREY_ACTION_ACK) {
116

    
117
      preyBot = packet[1];
118
      printf("bot %d is prey!\n", preyBot);
119

    
120
    }
121
    else {
122
      printf("got invalid packet! %c%d\n", packet[0], packet[1]);
123
    }
124
  }
125
  else {
126
    printf("got unknown packet! type=%d, length=%d\n", type, length);
127
  }
128
}
129