A libery to connect to telegesis zigbee module. Bassed on implemtation of XBEE
Fork of xbee_lib by
telegesis.cpp
- Committer:
- gert_lauritsen
- Date:
- 2013-10-13
- Revision:
- 8:4682155753ec
- Parent:
- 7:45511c3d2950
- Child:
- 9:c8e4339ccc29
File content as of revision 8:4682155753ec:
#include "telegesis.h" zigbee::zigbee(PinName tx, PinName rx, PinName reset) { _tx = tx; _rx = rx; _reset = reset; } zigbee::~zigbee() { } int zigbee::GetSerial(int *serial_no) { /** comes with something like this Telegesis ETRX357-LRS R305C 000D6F0000D5F06A OK */ Serial DATA(_tx,_rx); wait_ms(50); DATA.printf("ATI \r"); DATA.scanf("Telegesis ",); DATA.scanf ("%*s"); DATA.scanf ("%X",serial_no); return 1; } int zigbee::SetKey(char* key) { return 1; } int zigbee::WriteSettings() { return 1; } void zigbee::RecieveData(char *data_buf, int numchar) { int count=0; if(numchar == 0) { numchar = sizeof(data_buf); } Serial DATA(_tx,_rx); while(numchar!=count) { if(DATA.readable()) { *data_buf = DATA.getc(); data_buf+=1; count++; } } } int zigbee::ATI() { Serial DATA(_tx,_rx); wait_ms(5); DATA.printf("ATI\r"); DATA.scanf ("%*s"); return 1; } int zigbee::PingOut() { Serial DATA(_tx,_rx); wait_ms(5); DATA.printf("AT+ANNCE\r"); DATA.scanf ("%*s"); return 1; } int zigbee::PanScan() { Serial DATA(_tx,_rx); wait_ms(5); DATA.printf("AT+PANSCAN\r"); DATA.scanf ("%*s"); return 1; } int zigbee::Establish_Network() { Serial DATA(_tx,_rx); wait_ms(5); DATA.printf("AT+EN\r"); DATA.scanf ("%*s"); return 1; } int zigbee::JoinNetwork() { Serial DATA(_tx,_rx); wait_ms(5); DATA.printf("AT+JN\r"); DATA.scanf ("%*s"); return 1; } int zigbee::ScanNetwork() { Serial DATA(_tx,_rx); wait_ms(5); DATA.printf("AT+SN\r"); DATA.scanf ("%*s"); return 1; } int zigbee::NetworkInfo() { //Return something like this "+N=COO,12,-11,29F0,55C0E0DCE605C522" Serial DATA(_tx,_rx); wait_ms(5); DATA.printf("AT+N\r"); DATA.scanf ("+N=%s,%d,%d,%4X,%X",Devicetype,&channel,&NodeID,&EPID); return 1; } void zigbee::UniCast(char *adr,char *payload) //Ascii mode with null terminated string { Serial DATA(_tx,_rx); wait_ms(5); DATA.printf("AT+UCAST:%s=%s\r",adr,payload); DATA.scanf ("UCAST:%X,%X=%s ",&EUI64,&framesize,Zdata); return 1; } void zigbee::UniCastb(char *adr,char *payload, char payloadSize) //sends data in binary format { Serial DATA(_tx,_rx); wait_ms(5); DATA.printf("AT+UCASTB:%X,%s\r",adr,payloadSize); DATA.scanf ("%*s"); return 1; } void zigbee::Reset() { DigitalOut rst(_reset); rst = 0; wait_ms(10); rst = 1; wait_ms(1); } //-----------------------Håndtere indkommende data------------------------------ unsigned long zigbee::hexToLong(const char *hex) { //return 32 bit unsigned long result = 0; while (*hex) { //så længe det ikke er null if (*hex >= '0' && *hex <= '9') result += (*hex - '0'); else if (*hex >= 'A' && *hex <= 'F') result += (*hex - 'A' +10); else if (*hex >= 'a' && *hex <= 'f') result += (*hex - 'a'+ 10); if (*++hex) //hvis den næstee ikke er null result <<= 4; } return result; } unsigned int zigbee::hexToInt(const char *hex) { //return 16 bit unsigned int result = 0; while (*hex) { //så længe det ikke er null if (*hex >= '0' && *hex <= '9') result += (*hex - '0'); else if (*hex >= 'A' && *hex <= 'F') result += (*hex - 'A' +10); else if (*hex >= 'a' && *hex <= 'f') result += (*hex - 'a'+ 10); if (*++hex) //hvis den næstee ikke er null result <<= 4; } return result; } //---------------------------------------------------------------