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; } } }
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; }
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); }