Project

General

Profile

Statistics
| Revision:

root / trunk / code / projects / libwireless / lib / wl_basic.c @ 1396

History | View | Annotate | Download (2.91 KB)

1
/**
2
 * @file wl_basic.c
3
 * @brief High Level Wireless Packet Sending-Receiving Functions
4
 *
5
 * Abstracted wireless functionality for sending and receiving packets
6
 *
7
 * @author Christopher Mar, Colony Project, CMU Robotics Club
8
 **/
9

    
10
#include <wireless.h>
11
#include "wl_basic.h"
12

    
13
/**
14
 * Wrapper for wl_init().
15
 * Initializes wireless and registers a
16
 * packet handler function for Basic Group.
17
 *
18
 * @param handle_receive function pointer to handler function for Basic Group
19
 * @return 0 on success, -1 on error 
20
 **/
21
int wl_basic_init( void(*handle_receive) (char type, int source,
22
                   unsigned char* packet, int length) ) {
23
    int returnme = wl_init();
24
    wl_basic_register_handler(handle_receive);
25
    current_packet.new_flag = 0;
26
    return returnme;
27
}
28

    
29
/**
30
 *
31
 *
32
 **/
33
int wl_basic_init_default( ) {
34
    return wl_basic_init(&wl_basic_packet_receive_handler);
35
}
36

    
37
/**
38
 * Internal function to register a packet group handler for Basic Group
39
 *
40
 * @param handle_receive function pointer to handler function for Basic Group
41
 **/
42
void wl_basic_register_handler( void (*handle_receive) (char type, int source,
43
                        unsigned char* packet, int length)) {
44
    wl_basic_group_handler.groupCode = WL_BASIC_GROUP;
45
    wl_basic_group_handler.timeout_handler = 0;
46
    wl_basic_group_handler.handle_response = 0;
47
    wl_basic_group_handler.handle_receive = handle_receive;
48
    wl_basic_group_handler.unregister = 0;
49

    
50
    wl_register_packet_group(&wl_basic_group_handler);
51
}
52

    
53
/**
54
 * Send a packet to a single robot in Basic Group
55
 *
56
 * @param type Packet type
57
 * @param data Packet buffer, data you want to send
58
 * @param len Length of the data buffer in bytes
59
 * @dest Robot ID of the destination robot
60
 **/
61
void wl_basic_send_robot_packet( char type, char* data, int len, int dest ) {
62
    wl_send_robot_to_robot_global_packet(WL_BASIC_GROUP, type, data, len, dest, 0);
63
}
64

    
65
/**
66
 * Send a packet to all robots in Basic Group
67
 *
68
 * @param type Packet type
69
 * @param data Packet buffer, data you want to send
70
 * @param len Length of the data buffer in bytes
71
 **/
72
void wl_basic_send_global_packet( char type, char* data, int len ) {
73
    wl_send_global_packet(WL_BASIC_GROUP, type, data, len, 0);
74
}
75

    
76
/**
77
 * Default packet handler used if none is specified on init
78
 *
79
 * @param type Packet type
80
 * @param data Packet buffer, data you received
81
 * @param length Length of the data buffer in bytes
82
 **/
83
void wl_basic_packet_receive_handler( char type, int source, unsigned char* packet, int length ) {
84
    current_packet.new_flag = 1;
85
    current_packet.type = type;
86
    current_packet.source = source;
87
    current_packet.pointer = packet;
88
    current_packet.length = length;
89
}
90

    
91
/**
92
 * Wrapper for wl_do()
93
 *
94
 * @return pointer to the data of the packet just received
95
 **/
96
unsigned char* wl_basic_do( void ) {
97
    wl_do();
98
    if (current_packet.new_flag == 1) { 
99
        current_packet.new_flag = 0;
100
        return current_packet.pointer;
101
    }
102
    return 0;
103
}
104