Project

General

Profile

Statistics
| Revision:

root / branches / slam / code / projects / colonet / DataRequests / robot / data_response.c @ 294

History | View | Annotate | Download (1.89 KB)

1
#include "data_response.h"
2
#include "dragonfly_lib.h"
3
#include "wl_token_ring.h"
4
#include "wireless.h"
5
#include "serial.h"
6

    
7
PacketGroupHandler pgh;
8

    
9
void handle_receive(char type, int source, unsigned char* packet, int length);
10

    
11
int generate_bom_packet(char** buf);
12
int generate_IR_packet(char** buf);
13

    
14
void data_response_init(void){
15
  usb_init();
16
  usb_puts("USB initialized!\n\r");
17
  range_init();
18
  pgh.groupCode=DATA_REQUEST_GROUP; 
19
  pgh.timeout_handler = NULL;
20
  pgh.handle_response = NULL;
21
  pgh.handle_receive = handle_receive;
22
  pgh.unregister = NULL;
23
  wl_register_packet_group(&pgh);
24
  usb_puts("Packet Group Registered!\n\r");
25
}
26

    
27
void handle_receive(char type, int source, unsigned char* packet, int length){
28
  char buf[MAX_PACKET_LENGTH]; 
29
  int size;
30
  usb_puts("Got a packet!\n\r");
31
  switch(type){
32
  case BOM_TYPE:
33
    size = generate_bom_packet(&buf); 
34
    wl_send_robot_to_robot_global_packet(DATA_REQUEST_GROUP,BOM_TYPE,buf,size,source,0);
35
  case IR_TYPE:
36
    size = generate_IR_packet(&buf); 
37
    wl_send_robot_to_robot_global_packet(DATA_REQUEST_GROUP,IR_TYPE,buf,size,source,0);
38
  case ENCODER_TYPE:
39
    break; 
40
    //Not yet supported.
41
  }
42
}
43

    
44
int generate_bom_packet(char** buf){
45
  short int i=0, robot_id; 
46
  char bom_data;
47
  wl_token_iterator_begin();
48
  while(wl_token_iterator_has_next() && i<=96){
49
    robot_id = wl_token_iterator_next();
50
    (*buf)[i++] = (char)((robot_id>>8) & 0xFF);
51
    (*buf)[i++] = (char)(robot_id & 0xFF);
52
    (*buf)[i++] = (char)(wl_token_get_my_sensor_reading(robot_id));
53
  }
54
  //i is one greater than the index of the last byte... the size.
55
  return i;
56
}
57

    
58
int generate_IR_packet(char** buf){
59
  *buf[0] = range_read_distance(IR1);   
60
  delay_ms(20);
61
  *buf[1] = range_read_distance(IR2);   
62
  delay_ms(20);
63
  *buf[2] = range_read_distance(IR3);   
64
  delay_ms(20);
65
  *buf[3] = range_read_distance(IR4);   
66
  delay_ms(20);
67
  *buf[4] = range_read_distance(IR5); 
68
  char i;
69
  return 5;
70
}