A libery to connect to telegesis zigbee module. Bassed on implemtation of XBEE

Fork of xbee_lib by Tristan Hughes

Committer:
gert_lauritsen
Date:
Fri Oct 18 16:49:02 2013 +0000
Revision:
18:10fcddf238c9
Parent:
17:5a3f81b10a61
Child:
19:78f44233a12f
changed so that when we run with ethernet, can run it in a non irq mode

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gert_lauritsen 11:18ff088287ea 1 #ifndef telegesis_h
gert_lauritsen 11:18ff088287ea 2 #define telegesis_h
gert_lauritsen 11:18ff088287ea 3
tristanjph 0:2656fb225c5d 4 #include "mbed.h"
tristanjph 0:2656fb225c5d 5
gert_lauritsen 13:1b557befdeff 6 /**Eksemple
gert_lauritsen 13:1b557befdeff 7 #include "telegesis.h"
gert_lauritsen 13:1b557befdeff 8 zigbee ZB(p9,p10);
gert_lauritsen 13:1b557befdeff 9
gert_lauritsen 13:1b557befdeff 10 int main() {
gert_lauritsen 13:1b557befdeff 11 ZB.Reset();
gert_lauritsen 13:1b557befdeff 12 wait(1);
gert_lauritsen 13:1b557befdeff 13 ZB.GetSerial();
gert_lauritsen 13:1b557befdeff 14 while(1) {
gert_lauritsen 13:1b557befdeff 15 ZB.GetSerial();
gert_lauritsen 13:1b557befdeff 16 ZB.RecieveData(read_data,0);
gert_lauritsen 13:1b557befdeff 17 ZB.UniCast("0000","tester forbindelse");
gert_lauritsen 13:1b557befdeff 18 if (ZB.Zdat) {
gert_lauritsen 13:1b557befdeff 19 ZB.Zdat=0;
gert_lauritsen 13:1b557befdeff 20 printf(ZB.Zdata);
gert_lauritsen 13:1b557befdeff 21 }
gert_lauritsen 13:1b557befdeff 22 }
gert_lauritsen 13:1b557befdeff 23 }
gert_lauritsen 13:1b557befdeff 24
gert_lauritsen 13:1b557befdeff 25 */
gert_lauritsen 7:45511c3d2950 26 /** Zigbee interface class for configuring, sending and recieving data using an telegesis zigbee */
gert_lauritsen 11:18ff088287ea 27 #define START_BYTE 0x7e
gert_lauritsen 11:18ff088287ea 28 #define ESCAPE 0x7d
gert_lauritsen 11:18ff088287ea 29 #define MAX_FRAME_DATA_SIZE 110
gert_lauritsen 11:18ff088287ea 30
gert_lauritsen 7:45511c3d2950 31 class zigbee
tristanjph 2:cb627ea9b817 32 {
tristanjph 0:2656fb225c5d 33 private:
tristanjph 0:2656fb225c5d 34 PinName _tx;
tristanjph 0:2656fb225c5d 35 PinName _rx;
tristanjph 3:682615a0717e 36 PinName _reset;
tristanjph 0:2656fb225c5d 37 public:
gert_lauritsen 7:45511c3d2950 38
gert_lauritsen 11:18ff088287ea 39 zigbee(PinName tx, PinName rx);
gert_lauritsen 7:45511c3d2950 40 ~zigbee();
gert_lauritsen 7:45511c3d2950 41
gert_lauritsen 7:45511c3d2950 42
gert_lauritsen 7:45511c3d2950 43 /** Gets the serial number/mac address of the zigbee and places it into serial_no.
gert_lauritsen 7:45511c3d2950 44 * @param serial_no array to store the serial of zigbee (must be 8 long).
tristanjph 2:cb627ea9b817 45 * @return Returns 1 on success.
tristanjph 2:cb627ea9b817 46 */
gert_lauritsen 11:18ff088287ea 47 int GetSerial();
tristanjph 6:6455a079bdb3 48 /** Sets the encryption key. This should be a 128-bit key.
tristanjph 2:cb627ea9b817 49 * @param key Pointer to the network key to set.
tristanjph 2:cb627ea9b817 50 * @return Returns 1 on success.
tristanjph 1:c3d9bdcb0b03 51 */
tristanjph 5:714651141a83 52 int SetKey(char*);
gert_lauritsen 7:45511c3d2950 53
tristanjph 2:cb627ea9b817 54 /** Recieves data sent to the xbee.
tristanjph 2:cb627ea9b817 55 * @param data_buf Pointer to the buffer to put recieved data into.
tristanjph 2:cb627ea9b817 56 * @param numchar Number of characters to read. If 0, will use the size of data_buf.
tristanjph 2:cb627ea9b817 57 */
tristanjph 2:cb627ea9b817 58 void RecieveData(char*, int);
gert_lauritsen 10:263f7251c111 59 /** Get hw version and local ID (64bit uniq number)
gert_lauritsen 10:263f7251c111 60 *
gert_lauritsen 10:263f7251c111 61 */
gert_lauritsen 7:45511c3d2950 62 int ATI();
gert_lauritsen 10:263f7251c111 63 /** Sends a ping to Coo or any other adresse
gert_lauritsen 8:4682155753ec 64 *
gert_lauritsen 7:45511c3d2950 65 */
gert_lauritsen 7:45511c3d2950 66 int PingOut();
gert_lauritsen 10:263f7251c111 67 /** Scan the Pan for nodes
gert_lauritsen 7:45511c3d2950 68 */
gert_lauritsen 7:45511c3d2950 69 int PanScan();
gert_lauritsen 10:263f7251c111 70 /** Make a new network. It then gets the role as coordinator
gert_lauritsen 7:45511c3d2950 71 */
gert_lauritsen 7:45511c3d2950 72 int Establish_Network();
gert_lauritsen 10:263f7251c111 73 /** Join a pan
gert_lauritsen 7:45511c3d2950 74 */
gert_lauritsen 7:45511c3d2950 75 int JoinNetwork();
gert_lauritsen 10:263f7251c111 76 /**
gert_lauritsen 10:263f7251c111 77 * Scan network
gert_lauritsen 7:45511c3d2950 78 */
gert_lauritsen 7:45511c3d2950 79 int ScanNetwork();
gert_lauritsen 10:263f7251c111 80 /**
gert_lauritsen 10:263f7251c111 81 *Give info on what role the modem has in the network
gert_lauritsen 7:45511c3d2950 82 */
gert_lauritsen 10:263f7251c111 83
gert_lauritsen 7:45511c3d2950 84 int NetworkInfo();
gert_lauritsen 10:263f7251c111 85 /**
gert_lauritsen 7:45511c3d2950 86 */
gert_lauritsen 12:debf76f0c0bf 87 int Reset();
gert_lauritsen 8:4682155753ec 88 /** Sends data using the ascii mode
gert_lauritsen 10:263f7251c111 89 */
gert_lauritsen 9:c8e4339ccc29 90 int UniCast(char *adr,char *payload);
gert_lauritsen 8:4682155753ec 91 /** Sends data using the binary mode
gert_lauritsen 8:4682155753ec 92 */
gert_lauritsen 9:c8e4339ccc29 93 int UniCastb(char *adr,char *payload, char payloadSize);
gert_lauritsen 11:18ff088287ea 94
gert_lauritsen 10:263f7251c111 95
gert_lauritsen 9:c8e4339ccc29 96 /** converts a string to a long
gert_lauritsen 9:c8e4339ccc29 97 */
gert_lauritsen 11:18ff088287ea 98 unsigned long hextolong(const char *hex);
gert_lauritsen 8:4682155753ec 99 /** convertes a string to a int
gert_lauritsen 8:4682155753ec 100 */
gert_lauritsen 11:18ff088287ea 101 unsigned int hextoint(const char *hex);
gert_lauritsen 9:c8e4339ccc29 102 /**
gert_lauritsen 9:c8e4339ccc29 103 */
gert_lauritsen 7:45511c3d2950 104 int EUI64;
gert_lauritsen 9:c8e4339ccc29 105 /** COO or FBB
gert_lauritsen 9:c8e4339ccc29 106 */
gert_lauritsen 7:45511c3d2950 107 char Devicetype[3];
gert_lauritsen 9:c8e4339ccc29 108 /** Gives type of HW
gert_lauritsen 9:c8e4339ccc29 109 */
gert_lauritsen 9:c8e4339ccc29 110 char HWType[15];
gert_lauritsen 9:c8e4339ccc29 111 /** incomming data
gert_lauritsen 9:c8e4339ccc29 112 */
gert_lauritsen 18:10fcddf238c9 113 char Zdata[80];
gert_lauritsen 11:18ff088287ea 114 /**
gert_lauritsen 11:18ff088287ea 115
gert_lauritsen 11:18ff088287ea 116 */
gert_lauritsen 18:10fcddf238c9 117 char LocalID[17];
gert_lauritsen 11:18ff088287ea 118 /**
gert_lauritsen 11:18ff088287ea 119 * indication of incoming data
gert_lauritsen 11:18ff088287ea 120 */
gert_lauritsen 11:18ff088287ea 121 uint8_t Zdat;
gert_lauritsen 11:18ff088287ea 122 /**
gert_lauritsen 11:18ff088287ea 123 * Indicator on that we have got a ack on a packet
gert_lauritsen 11:18ff088287ea 124 */
gert_lauritsen 11:18ff088287ea 125 uint8_t PacketAck;
gert_lauritsen 11:18ff088287ea 126
gert_lauritsen 11:18ff088287ea 127 int channel, NodeID, EPID,framesize, PanOnline;
gert_lauritsen 17:5a3f81b10a61 128 /**
gert_lauritsen 17:5a3f81b10a61 129 */
gert_lauritsen 17:5a3f81b10a61 130 uint8_t ErrorCode;
gert_lauritsen 11:18ff088287ea 131 /**
gert_lauritsen 11:18ff088287ea 132 * Reads all available serial bytes until a packet is parsed, an error occurs, or the buffer is empty.
gert_lauritsen 11:18ff088287ea 133 * You may call <i>xbee</i>.getResponse().isAvailable() after calling this method to determine if
gert_lauritsen 11:18ff088287ea 134 * a packet is ready, or <i>xbee</i>.getResponse().isError() to determine if
gert_lauritsen 11:18ff088287ea 135 * a error occurred.
gert_lauritsen 11:18ff088287ea 136 * <p/>
gert_lauritsen 11:18ff088287ea 137 * This method should always return quickly since it does not wait for serial data to arrive.
gert_lauritsen 11:18ff088287ea 138 * You will want to use this method if you are doing other timely stuff in your loop, where
gert_lauritsen 11:18ff088287ea 139 * a delay would cause problems.
gert_lauritsen 11:18ff088287ea 140 * NOTE: calling this method resets the current response, so make sure you first consume the
gert_lauritsen 11:18ff088287ea 141 * current response
gert_lauritsen 11:18ff088287ea 142 */
gert_lauritsen 11:18ff088287ea 143 void readPacket();
gert_lauritsen 11:18ff088287ea 144 /**Looks for a packet but dont wait
gert_lauritsen 11:18ff088287ea 145 */
gert_lauritsen 12:debf76f0c0bf 146 void SeePacket();
gert_lauritsen 18:10fcddf238c9 147 /**
gert_lauritsen 18:10fcddf238c9 148 * Non blocking check og data. To be used in NON IRQ mode
gert_lauritsen 18:10fcddf238c9 149 */
gert_lauritsen 18:10fcddf238c9 150 void Work();
gert_lauritsen 11:18ff088287ea 151
gert_lauritsen 11:18ff088287ea 152 private:
gert_lauritsen 11:18ff088287ea 153 uint8_t b;
gert_lauritsen 11:18ff088287ea 154 int SeqNumber;
gert_lauritsen 12:debf76f0c0bf 155 uint8_t GotFrame; //indicate that a frame has been recieved
gert_lauritsen 11:18ff088287ea 156 // buffer for incoming RX packets. holds only the api specific frame data, starting after the api id byte and prior to checksum
gert_lauritsen 11:18ff088287ea 157 char _responseFrameString[MAX_FRAME_DATA_SIZE];
gert_lauritsen 18:10fcddf238c9 158 Serial _zbee;
gert_lauritsen 12:debf76f0c0bf 159 bool wait4OK();
gert_lauritsen 11:18ff088287ea 160 };
gert_lauritsen 11:18ff088287ea 161
gert_lauritsen 11:18ff088287ea 162 #endif