Project

General

Profile

Revision 1218

Fixing Station/Robot communication

View differences:

main.c
5 5
#include "../common/comm_station_robot.h"
6 6
#include "../../../lib/include/libdragonfly/encoders.h"
7 7

  
8

  
9
// **********************
10
// ** Command handlers **
11
// **********************
12

  
8 13
static void message_set_orbs (int length, uint8_t *data)
9 14
{
10 15
	if (length>=6)
......
53 58
	}
54 59
}
55 60

  
56
static void message_send_encoders (int length, uint8_t *data){
57
	int left = encoder_read(LEFT);
58
	int right = encoder_read(RIGHT);
59
	int vals[2];
60
	vals[0] = left;
61
	vals[1] = right;
62
	wl_send_global_packet (robot_station_group, robot_station_data_encoders, (char*)vals, 8, 0);
61

  
62
// **********************
63
// ** Request handlers **
64
// **********************
65

  
66
static void message_send_encoders (int length, uint8_t *data)
67
{
68
	int16_t left, right;
69
	
70
	SYNC
71
	{
72
		left = encoder_read (LEFT);
73
		right = encoder_read (RIGHT);
74
	}
75
	
76
	char senddata[4];
77
	senddata[0]=WORD_BYTE_0 (left);
78
	senddata[1]=WORD_BYTE_1 (left);
79
	senddata[2]=WORD_BYTE_0 (right);
80
	senddata[3]=WORD_BYTE_1 (right);
81

  
82
	wl_send_global_packet (robot_station_group, robot_station_data_encoders, senddata, 4, 0);
63 83
}
64 84

  
65
void station_robot_receive(char type, int source, unsigned char* packet, int length)
85

  
86
// ***********************
87
// ** Receive callbacks **
88
// ***********************
89

  
90
// TODO: different group for commands and requests
91
static void station_robot_receive (char type, int source, unsigned char* packet, int length)
66 92
{
93
	// TODO why does it keep receiving 0 messages?
94
	//if (type==0) return;
95

  
96
	// Dump the raw packet
97
	usb_puts ("Recvd [");
98
	for (uint8_t i=0; i<length; ++i)
99
	{
100
		if (i!=0) usb_putc (' ');
101
		usb_puti (packet[i]);
102
	}
103
	usb_puts ("]\r\n");
104

  
105

  
106
	
107
	orb_set (0, 0, 255);
108

  
109
	usb_puts ("Received a message: ");
110
	usb_puti (type);
111
	usb_puts ("\r\n");
112
	
67 113
	switch (type)
68 114
	{
115
		// Command messages
69 116
		case station_robot_set_orbs:        message_set_orbs        (length, packet); break;
70 117
		case station_robot_set_motors:      message_set_motors      (length, packet); break;
71 118
		case station_robot_set_bom:         message_set_bom         (length, packet); break;
72 119
		case station_robot_set_motors_off:  message_set_motors_off  (length, packet); break;
73 120
		case station_robot_set_motors_time: message_set_motors_time (length, packet); break;
121
		
122
		// Request messages
74 123
		case station_robot_read_encoders:	message_send_encoders	(length, packet); break;
75 124
	}
125
	
126
	orb_set (255, 127, 0);
76 127
}
77 128

  
129
// **********
130
// ** Main **
131
// **********
78 132

  
79 133
int main(void) {
80
    dragonfly_init(ALL_ON);
134
    dragonfly_init(0);
81 135

  
136
	encoders_init ();
137

  
82 138
    usb_init ();
83 139
    usb_puts ("Diagnostic station robot starting up\r\n");
84 140

  
......
89 145
	wl_init();
90 146
	orb2_set (255, 127, 0);
91 147
	
92
	//usb_puts ("PAN ID: ");  usb_puti (xbee_get_pan_id ());  usb_puts ("\r\n");	// -1
93
	//usb_puts ("Channel: "); usb_puti (xbee_get_channel ()); usb_puts ("\r\n");	// 0
94
	//usb_puts ("Address: "); usb_puti (xbee_get_address ()); usb_puts ("\r\n");	// 4/8
148
	usb_puts ("PAN ID: ");  usb_puti (xbee_get_pan_id ());  usb_puts ("\r\n");	// -1
149
	usb_puts ("Channel: "); usb_puti (xbee_get_channel ()); usb_puts ("\r\n");	// 0
150
	usb_puts ("Address: "); usb_puti (xbee_get_address ()); usb_puts ("\r\n");	// 4/8
95 151
	
96 152
	PacketGroupHandler receive_handler = {station_robot_group, NULL, NULL, &station_robot_receive, NULL};
97 153
	wl_register_packet_group(&receive_handler);

Also available in: Unified diff