ZB Coord API for XBee: This XBee library drives Digi XBee ZB Modules in API Operation mode. Most commands include remote communication's are supported by the functions of this library. You can control XBee devices through the API software modules in this, without using any AT commands. Please refer to the following page and some of sample codes:

Dependents:   sample02_sw xbee_aging sample01_led sample04_sens

XBee library 'ZB Coord API'

/media/uploads/bokunimowakaru/nucleoboard.jpg

Nucleo Board + Arduino Wireless Shield + XBee ZB Module + LCD

This XBee liblary is developed for Digi XBee ZB Modules on Nucleo F401RE Micro Computer Board through Arduino Wireless Shield.

Quote:

When you will use this liblary for anything other than Nucleo microcomputer board, please change the 4th line of xbee/xbee.cpp. The above code is only for STM32 Nucleo board.

  • RawSerial _xbee_serial(SERIAL_TX, SERIAL_RX);

/media/uploads/bokunimowakaru/nucleo_xbee.jpg

Hardware Jumper Settings

The hardware soldering jumper setting for the serial ports is necessary for Nucleo board.

  • Set OPEN for SB14(TX)
  • Set SHORT jumper for SB62
  • Set SHORT jumper for SB63

/media/uploads/bokunimowakaru/nucleo_jp.jpg

Examples

Sample Code 01 LED

An XBee ZB Coordinator on a Nucleo Board controls LEDs on the other XBee ZB device.

#include "xbee.h"
DigitalOut myled(LED1);
 
int main(){
    // Please set MAC Address to access your remote XBee device.
    byte dev_gpio[]   = {0x00,0x13,0xA2,0x00,0x40,0x30,0xC1,0x6F};
    
    myled = 1;                          // set Higher Level(3.3V) for LED port on NUCLEO
    xbee_init( 0 );                     // Initialize XBee COM Port Settings
    xbee_atnj( 0xFF );                  // Enable Network Join
    myled = 0;                          // set Lower Level(0.0V) for LED port on NUCLEO
    
    while(1){ 
        myled = 1;                      // set Higher Level(3.3V) for LED port on NUCLEO
        xbee_gpo(dev_gpio,11,1);        // set H Level for GPO port 11 on remote xbee
        xbee_gpo(dev_gpio,12,1);        // set H Level for GPO port 12 on remote xbee
        wait(1);
        myled = 0;                      // set Lower Level(0.0V) for LED port on NUCLEO
        xbee_gpo(dev_gpio,11,0);        // set L Level for GPO port 11 on remote xbee
        xbee_gpo(dev_gpio,12,0);        // set L Level for GPO port 12 on remote xbee
        wait(1);
    }
}

http://mbed.org/users/bokunimowakaru/code/sample01_led/

Sample Code 02 Switch

To push buttons (or switches) on an XBee ZB device report the conditions of input ports on it to a Nucleo board, and display them on a LCD.

#include "xbee.h"
#include "TextLCD.h"
TextLCD lcd(PA_9, PC_7, PB_5, PB_4, PB_10, PA_8); // rs, e, d4-d7
  
int main(){
    byte data;
    int i;
    XBEE_RESULT xbee_result;
    byte dev_gpio[]   = {0x00,0x13,0xA2,0x00,0x40,0x30,0xC1,0x6F};
    
    lcd.cls(); lcd.printf("Sample 2 SW");
    xbee_init( 0x00 ); 
    lcd.cls(); lcd.printf("ATNJ");
    xbee_atnj( 0xFF ); 
    lcd.cls(); lcd.printf("gpio init");
    xbee_gpio_init(dev_gpio);           // Send GPIO mode settings to remote device.
    lcd.cls(); lcd.printf("DONE");
    
    while(1){
        data = xbee_rx_call( &xbee_result );
        if( xbee_result.MODE == MODE_GPIN){     // When a GPIO packet is recieved,
            lcd.cls();
            for( i=7; i>=0 ; i--) lcd.printf( "%c",(char)( (int)'0' + ((data>>i) & 0x01) ) );
                                        // Display the recieved data.
        }
    }
}

http://mbed.org/users/bokunimowakaru/code/sample02_sw/

Sample Code 04 Sensor

Measured results of an XBee wireless sensor device are displayed a LCD on Nucleo board with an XBee coordinator which is in API mode.

#include <xbee.h>
#include "TextLCD.h"
#define FORCE_INTERVAL  100
TextLCD lcd(PA_9, PC_7, PB_5, PB_4, PB_10, PA_8); // rs, e, d4-d7
byte dev_sens[8];   // IEEE Address
 
int main(){
    int i;
    int dev_en = 0;                 // Device Detection Flag
    XBEE_RESULT xbee_result;            // Stracture for recieved data
    int trig=0;
    float value;

    lcd.cls(); lcd.printf("Sample 4 SENS");
    xbee_init( 0x00 ); 
    lcd.cls(); lcd.printf("Searching:SENSOR");
    if( xbee_atnj(10) ){                // Enable Network Join during 10 seconds.
        lcd.cls(); lcd.printf("Found a device");
        xbee_from( dev_sens );          // Get address of remote device. 
        dev_en = 1;
        xbee_gpio_config( dev_sens, 1 , AIN ); // Analog Input mode to port 1 on remote device
        xbee_gpio_config( dev_sens, 2 , AIN ); // Analog Input mode to port 2 on remote device
    }else{
        lcd.cls(); lcd.printf("Failed:no dev.");
    }
    wait(1);
    lcd.cls();
    
    while(1){
        if(dev_en){ 
            if(trig<=0){
                lcd.locate(12,0); lcd.printf("Trig"); wait(0.1);
                xbee_force(dev_sens);           // Send a request command to remote device.
                trig = FORCE_INTERVAL;
                lcd.locate(12,0); lcd.printf("    ");
            }
        }else{
            lcd.cls(); lcd.printf("Waiting for XBee");
            wait(0.5);
            lcd.cls();
        }
        trig--;
 
        xbee_rx_call( &xbee_result );       // Check a recieved packet.
        switch( xbee_result.MODE ){         // Check the packet type.
            case MODE_RESP:                 // the responce for the request in xbee_force().
            case MODE_GPIN:                 // Report data from remote xbee device.
                if( bytecmp( dev_sens , &(xbee_result.FROM[0]) ,8 ) == 0 && xbee_result.STATUS == STATUS_OK ){
                    value = xbee_sensor_result( &xbee_result, LIGHT);
                    lcd.locate(0,0); lcd.printf( "%.1f Lux   ",value);
                    value = xbee_sensor_result( &xbee_result, TEMP);
                    lcd.locate(0,1); lcd.printf( "%.1f C   ",value);
                }
                break;
            case MODE_IDNT:             // Commissioning Button Report is recieved.
                lcd.cls(); lcd.printf("found a new dev");
                for( i=0;i<8;i++ ) dev_sens[i]=xbee_result.FROM[i];
                                        // Save MAC address of reported device.
                dev_en = 1;             // Flag on (A sensor is detected.)
                trig = 0;
                xbee_gpio_config( dev_sens, 1 , AIN ); // Set Analog Mode to port 1 on remote XBee
                xbee_gpio_config( dev_sens, 2 , AIN ); // Set Analog Mode to port 2 on remote XBee
                lcd.cls();
                break;
            default:
                break;
        }
    }
}

http://mbed.org/users/bokunimowakaru/code/sample04_sens/

xbee.h

Committer:
bokunimowakaru
Date:
2014-09-23
Revision:
0:d72830877d98
Child:
5:6ce45b34d3f0

File content as of revision 0:d72830877d98:

#define ARM_MBED
//#define ARM_MBED
/*********************************************************************
本ソースリストおよびソフトウェアは、ライセンスフリーです。
利用、編集、再配布等が自由に行えますが、著作権表示の改変は禁止します。

							   Copyright (c) 2010-2014 Wataru KUNINO
							   http://www.geocities.jp/bokunimowakaru/
*********************************************************************/

/*********************************************************************
インポート処理				   ※ライブラリ xbee.inoに必要な宣言です
*********************************************************************/
#ifndef XBEE_H
#define XBEE_H

#ifndef LCD_TYPE_H
	#define LCD_TYPE_H
	#ifdef ARDUINO
		#if defined(__AVR_ATmega32U4__)
			#define LEONARDO	// Arduino LEONARDを使用する場合に自動的に定義されます。
		#endif
	//	#define LCD_H		// 本ライブラリ動作を液晶表示する場合に定義する
	//	#define ADAFRUIT	// 使用する液晶が Adafruit LCD Sheild の時に定義する
	#else // H8 or ARM or PC
		#ifndef ARM_MBED	// H8 or PC
			#define LCD_H
		#endif
	#endif
//	#define XBEE_WIFI	// XBee Wi-Fiを使用するときに定義する
//	#define XBEE_WIFI_DEBUG
//	#define LITE		// ライトモード(メモリ節約・機能制限)の時に定義する
	#define EASY_GPI	// xbee_gpi関数(リモートGPIO)を使用するときに定義する
	#define EASY_ADC	// xbee_adc関数(リモートADC)を使用するときに定義する
#endif

#ifndef XB_IMPORT_H
	#ifdef H3694
		#ifndef __3694_H__
			#include <3694.h>
		#endif
		#ifdef LCD_H
			#ifndef LCD_ROW_1
				#include "lcd_h8.c"
			#endif
		#endif
		/*	// lcd_h8ライブラリの関数
		void lcd_delay(unsigned int data);
		void lcd_toggle_E(void);
		void lcd_cls(void);
		void lcd_home(void);
		void lcd_control(unsigned char disonoff, unsigned char curonoff, unsigned char curblink);
		void lcd_goto(unsigned char mesto);
		void lcd_shift(unsigned char data);
		void lcd_putch(char data);
		void lcd_putstr(const char *data);
		void lcd_disp_bin(unsigned char x);
		void lcd_disp_hex(unsigned char i);
		void lcd_disp_1(unsigned int x);
		void lcd_disp_2(unsigned int x);
		void lcd_disp_3(unsigned int x);
		void lcd_disp_5(unsigned int x);
		void lcd_init(void);
		*/
	#elif ARDUINO
		//	#include <inttypes.h>
		#include "Arduino.h"
		//	#include "WProgram.h"	// #if ARDUINO < 100
		#ifdef LCD_H
			#ifndef ADAFRUIT
				// 通常のキャラクタLCDの場合
				#include <LiquidCrystal.h>
			#else
				// Adafruit I2C接続LCDの場合(Adafruit_RGBLCDShieldライブラリが必要)
				#include <Wire.h>
				#include <Adafruit_MCP23017.h>
				#include <Adafruit_RGBLCDShield.h>
			#endif
		#endif
		#ifdef XBEE_WIFI
			#include <SPI.h>
			#include <Ethernet.h>
			#include <EthernetUdp.h>
		#endif
		#ifndef LCD_ROW_1
			#define 	LCD_ROW_1		0x00	//1行目先頭アドレス
			#define 	LCD_ROW_2		0x40	//2行目先頭アドレス
			#define 	LCD_ROW_3		0x14	//3行目先頭アドレス
			#define 	LCD_ROW_4		0x54	//4行目先頭アドレス
		#endif
	#else
		#ifdef ARM_MBED // ARM
			#include "mbed.h"
			#ifdef DEBUG
				#define LCD_H
				#define ERRLOG
				#define 	LCD_ROW_1		0x00	//1行目先頭アドレス
				#define 	LCD_ROW_2		0x40	//2行目先頭アドレス
				#define 	LCD_ROW_3		0x14	//3行目先頭アドレス
				#define 	LCD_ROW_4		0x54	//4行目先頭アドレス
			#endif
		#else // PC
			#include <stdio.h>
			#include <stdlib.h>
			#include <string.h>
			#include <termios.h>
			#include <sys/signal.h>
			#include <sys/time.h>
			#include <fcntl.h>
			#include <unistd.h>
			#include <arpa/inet.h>
			#ifdef XBEE_WIFI
				#include <sys/types.h>
				#include <sys/socket.h>
				#include <netinet/in.h>
				#include <ctype.h>
				#include <sys/ioctl.h>
				#include <string.h>
			#endif
			#define BAUDRATE B9600
			#ifndef LCD_ROW_1
				#include "lcd_pc.c"
			#endif
			#include <time.h>			// クロックタイマー用
		#endif
	#endif
	#define xbee_set_myaddress(adr) xbee_ratd_myaddress(adr)
#endif

/*********************************************************************
定数の設定						 ※ライブラリ xbee.inoに必要な宣言です
*********************************************************************/
#ifndef XB_DEFINE_H
	#define XB_DEFINE_H
	#ifndef NAME
		#ifdef LITE // BeeBee Lite by 蘭
			#define 	NAME		"BeeBee Lite"
			#define 	COPYRIGHT	"by Wataru & Ran"
		#else
			#define 	NAME		"ZB Coord"
			#define 	COPYRIGHT	"by Wataru KUNINO"
		#endif
	#endif

	#ifdef H3694
		#define ERRLOG
		#define LED1_OUT	IO.PDR8.BIT.B0	// LED赤の接続ポート(エラー用)
		#define LED2_OUT	IO.PDR8.BIT.B1	// LED緑の接続ポート(動作確認用)
		#define LCD_EN		IO.PDR8.BIT.B6	// 液晶用電源
		#define BUTN		IO.PDR8.BIT.B2	// ボタンの接続ポート
		#define SCI_SIZE	256 			// シリアルデータ長(大きすぎるとRAMが不足する)
		#define API_SIZE	128 			// 受信用APIデータ長(32~255)
		#define API_TXSIZE	64				// 送信用APIデータ長(32~255)兼シリアル送信最大長
		#define CALL_SIZE	32				// xbee_rx_call用戻りデータ(10~256)
		#define XB_AT_SIZE	32				// ATコマンドの最大長
	#elif ARDUINO
	//	#define LED1_OUT	15				// 赤色LED(エラー用)用デジタルポート(15=analog 1)
	//	#define LED2_OUT	16				// 緑色LED(動作確認用)用デジタルポート(16=analog 2)
	//	#define LCD_EN		 6				// 液晶用電源デジタルポート
	//	#define BUTN		14				// ボタンの接続ポート(14 = analog 0)
		#ifdef LITE
			#define 	API_SIZE	48		// 受信用APIデータ長(32~255)
			#define 	API_TXSIZE	34		// 送信用APIデータ長(32~255)
			#define 	CALL_SIZE	16		// xbee_rx_call用戻りデータ(10~256)
			#define 	XB_AT_SIZE	16		// ATコマンドの最大長
		#else
			#define 	CACHE_RES	2		// 応答時のキャッシュ数(無効にするには定義を消す)
			#define 	API_SIZE	64		// 受信用APIデータ長(32~255)
			#define 	API_TXSIZE	64		// 送信用APIデータ長(32~255)
			#define 	CALL_SIZE	32		// xbee_rx_call用戻りデータ(10~256)
			#define 	XB_AT_SIZE	32		// ATコマンドの最大長
		#endif
		#define LIGHT			1
		#define TEMP			2
		#define HUMIDITY		3
		#define WATT			4
		#define BATT			5
		#define DISABLE 		0
		#define VENDER			1
		#define AIN 			2
		#define DIN 			3
		#define DOUT_L			4
		#define DOUT_H			5
	#else
		#ifdef ARM_MBED // ARM		<条件は調整していない。ほぼArduinoのまま>
			#define 	CACHE_RES	3		// 応答時のキャッシュ数(無効にするには定義を消す)
			#define 	API_SIZE	64		// 受信用APIデータ長(32~255)
			#define 	API_TXSIZE	64		// 送信用APIデータ長(32~255)
			#define 	CALL_SIZE	32		// xbee_rx_call用戻りデータ(10~256)
			#define 	XB_AT_SIZE	32		// ATコマンドの最大長
			#define 	delay(ms)		wait_millisec(ms)	// 関数名の複製
			#define LIGHT			1
			#define TEMP			2
			#define HUMIDITY		3
			#define WATT			4
			#define BATT			5
			#define DISABLE 		0
			#define VENDER			1
			#define AIN 			2
			#define DIN 			3
			#define DOUT_L			4
			#define DOUT_H			5
		#else // PC
			// #define DEBUG					// デバッグモード
			// #define DEBUG_TX 				// 送信パケットの表示
			// #define DEBUG_RX 				// 受信パケットの表示
			#define 	ERRLOG					// エラー時にログを出力
		//	#define 	XBEE_ERROR_TIME 		// エラー時のログに日時を付与
			#ifdef LITE
				#define 	API_SIZE	48		// 受信用APIデータ長(32~255)
				#define 	API_TXSIZE	34		// 送信用APIデータ長(32~255)
				#define 	CALL_SIZE	16		// xbee_rx_call用戻りデータ(10~256)
				#define 	XB_AT_SIZE	16		// ATコマンドの最大長
			#else
				#define 	CACHE_RES	5			// 応答時のキャッシュ数(無効にするには定義を消す)
				#define 	API_SIZE	128 		// 受信用APIデータ長(32~255)
				#define 	API_TXSIZE	64			// 送信用APIデータ長(32~255)
				#define 	CALL_SIZE	64			// xbee_rx_call用戻りデータ(10~256)
				#define 	XB_AT_SIZE	32			// ATコマンドの最大長
				#define 	delay(ms)		wait_millisec(ms)	// 関数名の複製
			#endif
		#endif
	#endif
	#define 	TIME_DEL	3				// デリミタ検出のタイムアウト時間(秒)
	#define 	MODE_AUTO	0x00			// 自動受信モード
	#define 	MODE_GPIN	0x92			// GPI data を受信するモード
	#define 	MODE_UART	0x90			// UART data を受信するモード
	#define 	MODE_UAR2	0x91			// UART data を受信するモード2(AO=1)
	#define 	MODE_SENS	0x94			// XB Sensorを受信するモード(1wire専用→通常のSensorはATISを使用)
	#define 	MODE_IDNT	0x95			// Node Identifyを受信するモード
	#define 	MODE_RES	0x88			// ローカルATコマンドの結果を受信
	#define 	MODE_RESP	0x97			// リモートATコマンドの結果を受信(仕様書はATNDで説明ATISもこれ)
	#define 	MODE_MODM	0x8A			// Modem Statusを受信
	#define 	MODE_TXST	0x8B			// UART Transmit Status を受信
	#define 	MODE_BATT	0xE1			// (独自定義)バッテリステータス RAT%Vの応答時
				// XBeeのFrame Typeに準拠する。
				// 注意:モードを増やしたときはxbee_from_acumとxbee_rx_call内の対応を追加すること
				// 独自定義の時はxbee_rx_call内のみ。
				// MODE値はenum定義にしない。
				
	#define 	STATUS_OK		0x00		// ATコマンドの結果がOK
	#define 	STATUS_ERR		0x01		// ATコマンドの結果がERROR
	#define 	STATUS_ERR_AT	0x02		// 指定されたATコマンドに誤りがある
	#define 	STATUS_ERR_PARM 0x03		// 指定されたパラメータに誤りがある
	#define 	STATUS_ERR_AIR	0x04		// リモートATコマンドの送信の失敗(相手が応答しない)
	
	#define 	MODM_RESET		0x01		// ローカルのXBeeがリセットした
	#define 	MODM_WATCHDOG	0x02		// ローカルのXBeeがWatch dogタイマーによってリセットした
	#define 	MODM_JOINED 	0x03		// (RouterまたはEnd Deviceで使用しているときに)ネットワークJoinした
	#define 	MODM_LEFT		0x04		// ネットワークからdis_assosiateした
	#define 	MODM_STARTED	0x06		// (coordinatorで使用しているときに)Coordinatorを開始した
	
	#define 	DEV_TYPE_XBEE	0x00		// XBeeモジュール
	#define 	DEV_TYPE_RS232	0x05		// RS-232Cアダプタ
	#define 	DEV_TYPE_SENS	0x07		// Sensor (1wire専用)
	#define 	DEV_TYPE_WALL	0x08		// Wall Router
	#define 	DEV_TYPE_SEN_LT 	0x0E		// Sensor (照度・温度)
	#define 	DEV_TYPE_SEN_LTH	0x0D		// Sensor (照度・温度・湿度)
	#define 	DEV_TYPE_PLUG	0x0F		// Smart Plug
	
	#define 	ZB_TYPE_COORD	0x21		// ZigBee Coordinator
	#define 	ZB_TYPE_ROUTER	0x23		// ZigBee Router
	#define 	ZB_TYPE_ENDDEV	0x29		// ZigBee End Device
	#define 	XB_TYPE_NULL	0x00		// XBee Wi-Fi バージョン未取得
	#define 	XB_TYPE_WIFI10	0x10		// XBee Wi-Fi Ver. 10xx
	#define 	XB_TYPE_WIFI20	0x20		// XBee Wi-Fi Ver. 20xx

	#define 	NET_ADR 	FFFE			// ネットワークアドレス
#endif


/*********************************************************************
型の定義
*********************************************************************/

#ifdef ARDUINO
typedef struct{
public:
	byte MODE;				// 受信モード(Frame Type)
	byte FROM[8];			// 送信元IEEEアドレス
	byte AT[2]; 			// ATコマンド
	byte ID;				// 応答パケットID(Frame ID)
	byte STATUS;			// 応答結果(0:OK 1:ERROR)/AT結果/UART状態
	union { 				// GPIOデータ
		byte BYTE[2];
		struct {			// バイト毎に下位ビットから代入(リトルエンディアン)
			byte D0 :1; byte D1 :1; byte D2 :1; byte D3 :1; // BYTE[1]
			byte D4 :1; byte D5 :1; byte D6 :1; byte D7 :1;
			byte	:1; byte	:1; byte D10:1; byte D11:1; // BYTE[0]
			byte D12:1; byte	:1; byte	:1; byte	:1;
		} PORT;
	} GPI;
	//	byte GPI[2];			// GPIOデータ
	unsigned int ADCIN[4];	// ADCデータ
	byte DATA[CALL_SIZE];	// ペイロードデータ/ZCLヘッダ+受信データ
} XBEE_RESULT;				// 構造体の型名
#endif
#ifdef ARM_MBED
typedef unsigned char byte;
typedef struct{
public:
	byte MODE;				// 受信モード(Frame Type)
	byte FROM[8];			// 送信元IEEEアドレス
	byte AT[2]; 			// ATコマンド
	byte ID;				// 応答パケットID(Frame ID)
	byte STATUS;			// 応答結果(0:OK 1:ERROR)/AT結果/UART状態
	union { 				// GPIOデータ
		byte BYTE[2];
		struct {			// バイト毎に下位ビットから代入(リトルエンディアン)
			byte D0 :1; byte D1 :1; byte D2 :1; byte D3 :1; // BYTE[1]
			byte D4 :1; byte D5 :1; byte D6 :1; byte D7 :1;
			byte	:1; byte	:1; byte D10:1; byte D11:1; // BYTE[0]
			byte D12:1; byte	:1; byte	:1; byte	:1;
		} PORT;
	} GPI;
	//	byte GPI[2];			// GPIOデータ
	unsigned int ADCIN[4];	// ADCデータ
	byte DATA[CALL_SIZE];	// 受信データ
} XBEE_RESULT;				// 構造体の型名
#endif

/*********************************************************************
アプリ向け hardware 提供関数
*********************************************************************/

/* GPIO */
	#ifndef ARDUINO
	#ifndef ARM_MBED
	byte led_red( const byte in );
	byte led_green( const byte in );
	byte button( void );
	#endif
	#endif

/* Timer */
	#ifndef ARDUINO
	#ifndef ARM_MBED
	void wait_millisec( const int ms );
	#endif
	#endif

/* misc */
	byte bytecmp(byte *s1, const byte *s2, byte size);
	#ifndef ARDUINO
	#ifndef ARM_MBED
		void strcopy(char *s1, const char *s2);
		void bytecpy(byte *s1, const byte *s2, byte size);
	#endif
	#endif

/* LCD */
	#ifdef LCD_H
		void lcd_cls(void);
		void lcd_home(void);
		void lcd_control(byte disonoff, byte curonoff, byte curblink);
		void lcd_goto(const byte mesto);
		void lcd_shift(const byte data);
		void lcd_putch(const char data);
		void lcd_putstr(const char *data);
		void lcd_disp_bin(const byte x);
		void lcd_disp_hex(const byte i);
		void lcd_disp_1(const unsigned int x);
		void lcd_disp_2(unsigned int x);
		void lcd_disp_3(unsigned int x);
		void lcd_disp_5(unsigned int x);
		void lcd_init(void);
		void lcd_disp( const char *s );
	#endif
	
/*********************************************************************
private xbee ドライバ関数
*********************************************************************/

/* XBeeドライバ関数 */
/*	byte xbee_at_tx(const char *at, const byte *value, const byte value_len);
	byte xbee_at_rx(byte *data);
	byte xbee_from_acum( const byte *data );
	byte xbee_gpi_acum( byte *data );
	byte xbee_uart_acum( byte *data );
	#ifdef EASY
		float xbee_sensor_acum( const byte *data, const enum xbee_sensor_type type );
	#endif
	byte xbee_tx_rx(const char *at, byte *data, byte len);
	void xbee_reset( void );
*/

/* XBee用 UART出力API */
	#ifndef LITE
		byte xbee_putch( const char c );
	#endif
	byte xbee_putstr( const char *s );
	#ifndef LITE
		void xbee_disp_hex( const unsigned char i );
		void xbee_disp_1( const unsigned int x );
		void xbee_disp_2( unsigned int x );
		void xbee_disp_3(unsigned int x);
		void xbee_disp_5(unsigned int x);
	#endif
	void xbee_log( byte level, const char *err , const byte x );

/*********************************************************************
アプリ向け xbee 提供関数
*********************************************************************/

	byte xbee_myaddress( byte *address );
	void xbee_address( const byte *address );
	byte xbee_atd( const byte *address );
	byte xbee_ratd(const byte *dev_address, const byte *set_address );
	byte xbee_ratd_myaddress(const byte *address);
	#define xbee_set_myaddress(adr) xbee_ratd_myaddress(adr)
	void xbee_from( byte *address );
	byte xbee_at(const char *in);
	byte xbee_rat(const byte *address, const char *in);
	byte xbee_rat_force(const byte *address, const char *in);
	byte xbee_uart(const byte *address, const char *in);
	byte xbee_bytes(const byte *address, const byte *in, byte len);
	byte xbee_atvr( void );
	byte xbee_atai( void );
	byte xbee_atcb( byte cb );
	unsigned short xbee_atop(byte *pan_id);
	byte xbee_atee_on(const char *key );
	byte xbee_atee_off( void );
	byte xbee_atnc( void );
	byte xbee_ratnc( const byte *address );
	byte xbee_atnj( const byte timeout );
	byte xbee_ratnj( const byte *address, const byte timeout );
	byte xbee_ping( const byte *address );
	int xbee_batt(const byte *address );
	byte xbee_batt_force(const byte *address );
	#ifdef ARDUINO	// Arduino用
		byte xbee_gpio_config(const byte *address, const byte port, const byte type );
	#else
		#ifdef ARM_MBED
			byte xbee_gpio_config(const byte *address, const byte port, const byte type );
		#else // PC/H8用
			byte xbee_gpio_config(const byte *address, const byte port, const enum xbee_port_type type );
		#endif
	#endif
	byte xbee_gpio_init( const byte *address );
	byte xbee_gpo( const byte *address, const byte port,const byte out );
	#ifdef EASY_GPI
		byte xbee_gpi(const byte *address, const byte port);
	#endif
	#ifdef EASY_ADC
		unsigned int xbee_adc(const byte *address, const byte port);
	#endif
	byte xbee_force( const byte *address );
	#ifdef ARDUINO	// Arduino用
		float xbee_sensor_result( XBEE_RESULT *xbee_result, const byte type);
	#else
		#ifdef ARM_MBED
			float xbee_sensor_result( XBEE_RESULT *xbee_result, const byte type);
		#else // PC/H8用
			float xbee_sensor_result( XBEE_RESULT *xbee_result, const enum xbee_sensor_type type );
			#ifdef EASY_SENSOR
				xbee_sensor(const byte *address, const enum xbee_sensor_type type );
			#endif
		#endif
	#endif
	byte xbee_rx_call( XBEE_RESULT *xbee_result );
	void xbee_clear_cache(void);
	byte xbee_init( const byte port );
	byte xbee_reset( void );
	byte xbee_end_device(const byte *address, byte sp, byte ir, const byte pin);
	#ifndef LITE
		byte xbee_i2c_init(const byte *address);
		byte xbee_i2c_read(const byte *address, byte adr, byte *rx, byte len);
		byte xbee_i2c_write(const byte *address, byte adr, byte *rx, byte len);
	#endif
	byte xbee_delay(unsigned int ms);
#endif // XBEE_H