Code APP3

Dependencies:   mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial

Fork of APP3_Lab by Jean-Philippe Fournier

xbee.h

Committer:
Cheroukee
Date:
2017-09-30
Revision:
2:a9bb12eefc08
Parent:
1:ea1b52d0a8a3
Child:
5:9e6a09a38785

File content as of revision 2:a9bb12eefc08:

/***
*   xbee.h - en-tete de lib xbee - fouj1807 - mcgj2701
*/

#pragma once

#include "mbed.h"

extern Serial xbee;

typedef enum {
    ATCommand = 0x08,
    ATCommandQueue = 0x09,
    TransmitRequest = 0x10,
    ExplicitAddressing = 0x11,
    RemoteCommandRequest = 0x17,
    CreateSourceRoute = 0x21,
    ATCommandResponse = 0x88,
    ModemStatus = 0x8A,
    ZigBeeTransmitStatus = 0x8B,
    ZigBeeReceivePacket = 0x90,
    ZigBeeExplicitRxIndicator = 0x91,
    ZigBeeIODataSampleRxIndicator = 0x92,
    XBeeSensorReadIndicator = 0x94,
    NodeIndentificationIndicator = 0x95,
    RemoteCommandResponse = 0x97,
    OverTheAirFirmwareUpdateStatus = 0xA0,
    RouteRecordIndicator = 0xA1,
    ManyToOneRouteRequestIndicator = 0xA3
} frame_type_t;

typedef struct {
    char addr_0;    // MSB
    char addr_1;
    char addr_2;
    char addr_3;

    char addr_4;
    char addr_5;
    char addr_6;
    char addr_7;    // LSB
} zigbee_addr_64_t;

typedef struct {
    char addr_msb;
    char addr_lsb;
} zigbee_addr_16_t;

typedef enum {
    // INSERT AT COMMAND LIST
} at_command_t;

typedef struct {
    unsigned short length;
    frame_type_t frame_type;
    char frame_id;    
} frame_t;


#define FRAME_DELIMITER_POS 0
#define FRAME_LEN_MSB_POS 1
#define FRAME_LEN_LSB_POS 2

#define FRAME_CHEKSUM_POS 3 + frame_data_size

#define API_FRAME_TYPE_POS 3
#define API_FRAME_ID_POS 4

#define TRANSMIT_REQ_ADDR64_MSB_POS 5
#define TRANSMIT_REQ_ADDR16_MSB_POS 13
#define TRANSMIT_REQ_RADIUS_POS 15

#define TRANSMIT_REQ_DATA_START 17
#define TRANSMIT_REQ_OVERHEAD_LENGTH 14

#define DECLARE_ADDR16_UNKNOWN_OR_BCAST zigbee_addr_16_t def_addr16_bcast = { 0xFF, 0xFE };
#define USE_ADDR16_UNKNOWN_OR_BCAST def_addr16_bcast
#define DECLARE_ADDR64_COORD zigbee_addr_64_t def_addr64_coord = { 0, 0, 0, 0, 0, 0, 0, 0 };
#define USE_ADDR64_COORD def_addr64_coord
#define DECLARE_ADDR64_BCAST zigbee_addr_64_t def_addr64_bcast = { 0, 0, 0, 0, 0, 0, 0xFF, 0xFE };
#define USE_ADDR64_BCAST def_addr64_bcast

#define ZIGBEE_DELIMITER 0x7E


extern char TransmitBuffer[2048];
extern char ReceiveBuffer[2048];

void xbee_init();

bool set_pan_id(long pan_id);
long get_pan_id();

int receive_buffer(char* buffer, int max_length);

void build_api_frame_header(int frame_data_size);
void build_api_frame_checksum(int frame_data_size);

void set_api_frame_type(frame_type_t frame_type);
void set_api_frame_id(int id);

void set_at_command(int at_command);
void set_64_addr(long address);
void set_16_addr(int address);

void set_broadcast_radius(int position, char radius);
void set_transmit_request_options(int position, char options);

void set_transmit_request_data(char* data, int data_length);

bool transmit_request_64(char* buffer, int data_length, char options, zigbee_addr_64_t destination);
bool transmit_request_16(char* buffer, int data_length, char options, zigbee_addr_16_t destination);
bool transmit_request(char* buffer, int data_length, char options, zigbee_addr_64_t destination64, zigbee_addr_16_t destination16);


void transmit(int packet_length);