int main(int argc,char **argv){

    byte com=0;                                 // シリアルCOMポート番号
    byte dev[8];                                // XBee子機デバイスのアドレス
    float value;                                // 受信データの代入用
    XBEE_RESULT xbee_result;                    // 受信データ(詳細)

    if(argc==2) com=(byte)atoi(argv[1]);        // 引数があれば変数comに代入する
    xbee_init( com );                           // XBee用COMポートの初期化
    xbee_atnj( 0xFF );                          // 子機XBeeデバイスを常に参加受け入れ
    printf("Waiting for XBee Commissoning\n");  // 待ち受け中の表示

    while(1){
        /* データ受信(待ち受けて受信する) */
        xbee_rx_call( &xbee_result );               // データを受信
        switch( xbee_result.MODE ){                 // 受信したデータの内容に応じて
            case MODE_GPIN:                         // 子機XBeeの自動送信の受信
                // 照度測定結果をvalueに代入してprintfで表示する
                value = (float)xbee_result.ADCIN[1] * 3.55;
                printf("%.1f Lux\n" , value );
                break;
            case MODE_IDNT:                         // 新しいデバイスを発見
                printf("Found a New Device\n");
                xbee_atnj(0);                       // 子機XBeeデバイスの参加を不許可へ
                bytecpy(dev, xbee_result.FROM, 8);  // 発見したアドレスをdevにコピーする
                set_ports( dev );                   // 子機のGPIOポートの設定
                break;
        }
    }
}
Esempio n. 2
0
int main(int argc,char **argv){

    byte com=0;                                     // シリアルCOMポート番号
    byte dev[8];                                    // XBee子機デバイスのアドレス
    byte id=0;                                      // パケット送信番号
    byte trig=0xFF;                                 // データ要求するタイミング調整用
    float value;                                    // 受信データの代入用
    XBEE_RESULT xbee_result;                        // 受信データ(詳細)

    if(argc==2) com=(byte)atoi(argv[1]);            // 引数があれば変数comに代入する
    xbee_init( com );                               // XBee用COMポートの初期化
    xbee_atnj( 0xFF );                              // 親機に子機のジョイン許可を設定
    printf("Waiting for XBee Commissoning\n");      // 待ち受け中の表示
    
    while(1){
        /* データ送信 */
        if( trig == 0){
            id = xbee_force( dev );                 // 子機へデータ要求を送信
            trig = FORCE_INTERVAL;
        }
        if( trig != 0xFF ) trig--;                  // 変数trigが0xFF以外の時に値を1減算

        /* データ受信(待ち受けて受信する) */
        xbee_rx_call( &xbee_result );               // データを受信
        switch( xbee_result.MODE ){                 // 受信したデータの内容に応じて
            case MODE_RESP:                         // xbee_forceに対する応答の時
                if( id == xbee_result.ID ){         // 送信パケットIDが一致
                    // 照度測定結果をvalueに代入してprintfで表示する
                    value = xbee_sensor_result( &xbee_result, LIGHT);
                    printf("%.1f Lux, " , value );
                    // 温度測定結果をvalueに代入してprintfで表示する
                    value = xbee_sensor_result( &xbee_result, TEMP);
                    value -= TEMP_OFFSET;
                    printf("%.1f degC\n" , value );
                }
                break;
            case MODE_IDNT:                         // 新しいデバイスを発見
                printf("Found a New Device\n");
                bytecpy(dev, xbee_result.FROM, 8);  // 発見したアドレスをdevにコピーする
                xbee_atnj(0);                       // 親機XBeeに子機の受け入れ制限
                xbee_ratnj(dev,0);                  // 子機に対して孫機の受け入れを制限
                set_ports( dev );                   // 子機のGPIOポートの設定
                trig = 0;                           // 子機へデータ要求を開始
                break;
        }
    }
}
bool FlashFunctions::LoadThing(void *in_dst, const void *in_src, unsigned int length)
{
	if ((u32)in_src >= 0x10000)
	{
		SetBank(1);
	}
	else
	{
		SetBank(0);
	}

	bytecpy(in_dst, (const void*)(MEM_SRAM + (u32)in_src), length, false);

    if(byteverify(in_dst, (const void*)(MEM_SRAM + (u32)in_src), length))
	{
		return true;
	}
	return false;
}
Esempio n. 4
0
int main(int argc,char **argv){
	int i;
	char c;
	int send_flag=0;							// IR送信フラグ(1:送信中)
	int read_flag=0;							// IR読み込みフラグ(1:読み取り中)
	int quit_flag=0;							// 終了フラグ
	byte com=0;									// シリアルCOMポート番号
	byte dev[8]={0,0,0,0,0xff,0xff,0xff,0xff};	// XBee子機デバイスのアドレス
	XBEE_RESULT xbee_result;					// 受信データ(詳細)
	int len;									// 受信データ長

	if(argc==2) com=(byte)atoi(argv[1]);		// 引数があれば変数comに代入する
	xbee_init( com );							// XBee用COMポートの初期化
	xbee_at("ATSP0AF0");						// SP = 28 sec(最大値)
	xbee_at("ATSN0E10");						// SN = 3600回
	xbee_atnj(0xFF);							// デバイスの参加受け入れを開始

	while(!quit_flag){
		/* キーボード受信 */
		if( kbhit() ){
			c = getchar();
			printf(" -> Accepted\n");
			switch( c ){
				case 'a':
					printf("Set AEHA mode\n");	xbee_bytes(dev,SET_IR_MODE[0],5);
					break;
				case 'n':
					printf("Set NEC mode\n");	xbee_bytes(dev,SET_IR_MODE[1],5);
					break;
				case 's':
					printf("Set SIRC mode\n");	xbee_bytes(dev,SET_IR_MODE[2],5);
					break;
				case '\n': case '\r':
					printf("Send IR\n");
					send_flag=1;
					break;
				case 'r':
					printf("Read IR\n");
					read_flag=1;
					break;
				case 'p':
					i=(int)xbee_ping(dev);
					if(i != 0xFF ) printf("Ping OK (%02X)\n",i);
					else printf("Ping ERROR\n");
					break;
				case 'j':
					printf("Join Enable\n");
					xbee_atcb(2);
					break;
				case '+':
					printf("AQOUS Vol. Up\n");
					ir_data[3]=0; ir_data[4]=6;			// AEHA  6バイト
					bytecpy(&ir_data[5],IR_DATA_SHARP_TV[13],6);
					send_flag=1;
					break;
				case '-':
					printf("AQOUS Vol. Down\n");
					ir_data[3]=0; ir_data[4]=6;			// AEHA  6バイト
					bytecpy(&ir_data[5],IR_DATA_SHARP_TV[14],6);
					send_flag=1;
					break;
				case 'Q': case 'q': case 'Z': case '!':
					printf("Read IR\n");
					quit_flag=1;
					break;
				default:
					if( isdigit((int)c) ){
						i=(int)(c - '0');
						printf("AQOUS Ch = %d\n",i);
						ir_data[3]=0; ir_data[4]=6;		// AEHA  6バイト
						bytecpy(&ir_data[5],IR_DATA_SHARP_TV[i],6);
						send_flag=1;
					}else{
						printf("Error\n");
						printf("Usage : s=send r=read q=quit\n");
					}
					break;
			}
		}
		if(send_flag && !read_flag){
			xbee_bytes(dev,ir_data,ir_data[4]+5);
			printf("Send IR [%2d] :",ir_data[4]+5);
			for(i=0;i<ir_data[4]+5;i++) printf(" %02X",ir_data[i]); printf("\n");
			send_flag=0;
		}
		/* XBee データ受信 */
		len = xbee_rx_call( &xbee_result );		// データを受信
		switch(xbee_result.MODE){
			case MODE_UART:
				printf("Recieved[%2d] : ",len);
				for(i=0;i<len;i++) printf("%02X ",xbee_result.DATA[i]);
				for(i=0;i<len;i++) if(isgraph(xbee_result.DATA[i])) putchar(xbee_result.DATA[i]); else putchar('.'); printf("\n");
				if(	read_flag &&
					xbee_result.DATA[0]==0x1B &&
					xbee_result.DATA[1]==(byte)'I' &&
					xbee_result.DATA[2]==(byte)'R' &&
					xbee_result.DATA[4]+5 <= len &&
					len <= DATA_LEN
				){
					printf("Stored Read IR Data\n");
					bytecpy(ir_data,xbee_result.DATA,len);
					printf("Recieved[%2d] :",len);
					for(i=0;i<len;i++) printf(" %02X",ir_data[i]); printf("\n");
					read_flag=0;
				}else if(len==2 &&						// strncnp(xbee_result.DATA,"OK",2)
					xbee_result.DATA[0]==(byte)'O' &&
					xbee_result.DATA[1]==(byte)'K'
				){
					printf("Done Send IR\n");
					send_flag=0;
				}else if(len >= 3 &&						// strncnp(xbee_result.DATA,"ERR",3)
					xbee_result.DATA[0]==(byte)'E' &&
					xbee_result.DATA[1]==(byte)'R' &&
					xbee_result.DATA[2]==(byte)'R'
				){
					printf("Send IR ERROR\n");
					send_flag=0;
				}
				break;
			case MODE_IDNT:
				printf("Found a Dev. :");
				bytecpy(dev,xbee_result.FROM,8);
				for(i=0;i<8;i++) printf(" %02X",dev[i]); printf("\n");
				xbee_atnj(10);
				break;
			
		}
	}
	printf("Done\n");
	return(0);
}