void ieee802frame154_dump( TiFrame * f ) { int8 len; TiIEEE802Frame154Descriptor meta; len = frame_length(f); if (len > 0) { dbc_putchar( '>' ); dbc_n8toa( len ); ieee802frame154_open( &meta ); if (ieee802frame154_parse(&meta, frame_startptr(f), frame_length(f))) { dbc_putchar( ':' ); dbc_write_n8toa( frame_startptr(f), len ); dbc_putchar( 0xFC ); dbc_putchar( '\r' ); dbc_putchar( '\n' ); } else{ // if parsing failed, then we also output the data dbc_putchar( 0xFC ); dbc_write_n8toa( frame_startptr(f), len ); dbc_putchar( '\r' ); dbc_putchar( '\n' ); } } else{ // If the f doesn't contain any data, then still output some flag for indication. dbc_putchar( 0xFB ); dbc_putchar( 0xFB ); } }
void _aloha_listener( void * owner, TiEvent * e ) { TiAloha * mac = &m_aloha; TiFrame * frame = (TiFrame *)m_rxbufmem; uint8 len; dbc_putchar( 0xF4 ); led_toggle( LED_RED ); while (1) { len = aloha_recv( mac, frame, 0x00 ); if (len > 0) { frame_moveouter( frame ); _output_frame( frame, NULL ); frame_moveinner( rxbuf ); led_toggle( LED_RED ); /* warning: You cannot wait too long in the listener. Because in the * current version, the listener is still run in interrupt mode. * you may encounter unexpect error at the application error in real-time * systems. However, the program should still work properly even the * delay time is an arbitrary value here. No error are allowed in this case. * * => That's why we cannot use hal_delay() to control the LED to make * it observable for human eye. */ // hal_delay( 500 ); break; } } }
void ieee802frame154_dump( TiFrame * frame ) { static TiIEEE802Frame154Descriptor m_desc; TiIEEE802Frame154Descriptor * desc; if (frame_length(frame) > 0) { dbc_putchar( '>' ); dbc_n8toa( frame_length(frame) ); /* desc = ieee802frame154_open( &m_desc ); if (ieee802frame154_parse(desc, frame_startptr(frame), frame_length(frame))) { // if the frame received is parsed successfully, then output it to the // computer through debugging channel //ieee802frame154_sequence( desc ); //ieee802frame154_panto( desc ); //ieee802frame154_shortaddrto( desc ); //ieee802frame154_panfrom( desc ); //ieee802frame154_shortaddrfrom( desc ); // todo: you can output more // reference frame_dump() in rtl_frame.c dbc_n8toa( ieee802frame154_sequence(desc) ); dbc_putchar( ':' ); dbc_write( frame_startptr(frame), frame_length(frame) ); } else{ // if the frame received is parsed failed, then output the error frame // to the computer through debugging channel dbc_putchar( 'X' ); dbc_putchar( ':' ); dbc_write( frame_startptr(frame), frame_length(frame) ); } */ //dbc_write( frame_startptr(frame), frame_length(frame) ); dbc_write( frame_buffer(frame), frame_buffercapacity(frame) ); //dbc_mem( frame_startptr(rxbuf), frame_length(rxbuf) ); //dbc_write( frame_startptr(frame), frame_capacity(frame) ); dbc_putchar( '\n' ); } }
void ieee802frame154_dumpmembuf( char * buf, int len ) { TiIEEE802Frame154Descriptor * desc; if (len > 0) { dbc_putchar( '>' ); dbc_n8toa( len ); desc = ieee802frame154_open( &m_desc ); if (ieee802frame154_parse(desc, buf, len)) { // if the frame received is parsed successfully, then output it to the // computer through debugging channel //ieee802frame154_set_sequence( desc, seqid ++ ); //ieee802frame154_set_panto( desc, CONFIG_ALOHA_DEFAULT_PANID ); //ieee802frame154_set_shortaddrto( desc, CONFIG_ALOHA_REMOTE_ADDRESS ); //ieee802frame154_set_panfrom( desc, CONFIG_ALOHA_PANID); //ieee802frame154_set_shortaddrfrom( desc, CONFIG_ALOHA_LOCAL_ADDRESS ); // todo: you can output more // reference frame_dump() in rtl_frame.c dbc_n8toa( ieee802frame154_sequence(desc) ); dbc_putchar( ':' ); dbo_write( buf, len ); } else{ // if the frame received is parsed failed, then output the error frame // to the computer through debugging channel dbc_putchar( 'X' ); dbc_putchar( ':' ); dbo_write( buf, len ); } dbc_putchar( '\n' ); } }
void ieee802frame154_dump( TiFrame * f ) { int8 len; TiIEEE802Frame154Descriptor meta; len = frame_length(f); if (len > 0) { dbc_putchar( 0xFA ); dbc_putchar( 0xFA ); dbc_putchar( frame_curlayer(f) ); dbc_putchar( len ); // if the frame received is parsed successfully, then output it to the // computer through debugging channel // ieee802frame154_open( &meta ); if (ieee802frame154_parse(&meta, frame_startptr(f), frame_length(f))) { // todo: you can output more // reference frame_dump() in rtl_frame.c dbc_putchar( 0xFB ); dbc_write( frame_startptr(f), len ); dbc_putchar( 0xFC ); } else{ // if parsing failed, then we also output the data dbc_putchar( 0xFC ); dbc_write( frame_startptr(f), len ); } } else{ // If the f doesn't contain any data, then still output some flag for indication. dbc_putchar( 0xFB ); dbc_putchar( 0xFB ); } }
void _tinymac_listener( void * owner, TiEvent * e ) { TiTinyMac * mac = &m_tiny; TiFrame * frame = (TiFrame *)m_rxbufmem; uint8 len; dbc_putchar( 0xF4 ); led_toggle( LED_RED ); while (1) { len = tinymac_recv( mac, frame, 0x00 ); if (len > 0) { frame_moveouter( frame ); _output_frame( frame, NULL ); frame_moveinner( rxbuf ); led_toggle( LED_RED ); // hal_delay( 500 ); break; } } }
void _output_frame( TiFrame * frame, TiUartAdapter * uart ) { static TiIEEE802Frame154Descriptor m_desc; TiIEEE802Frame154Descriptor * desc; if (frame_totallength(frame) > 0) { dbc_putchar( '>' ); dbc_n8toa( frame_totallength(frame) ); desc = ieee802frame154_open( &m_desc ); // ? if (ieee802frame154_parse(desc, frame_startptr(frame), frame_length(frame))) if (ieee802frame154_parse(desc, frame_startptr(frame), frame_capacity(frame))) { // if the frame received is parsed successfully, then output it to the // computer through debugging channel //ieee802frame154_set_sequence( desc, seqid ++ ); //ieee802frame154_set_panto( desc, CONFIG_ALOHA_DEFAULT_PANID ); //ieee802frame154_set_shortaddrto( desc, CONFIG_ALOHA_REMOTE_ADDRESS ); //ieee802frame154_set_panfrom( desc, CONFIG_ALOHA_PANID); //ieee802frame154_set_shortaddrfrom( desc, CONFIG_ALOHA_LOCAL_ADDRESS ); // todo: you can output more // reference frame_dump() in rtl_frame.c dbc_n8toa( ieee802frame154_sequence(desc) ); dbc_putchar( ':' ); dbc_write( frame_startptr(frame), frame_capacity(frame) ); } else{ // if the frame received is parsed failed, then output the error frame // to the computer through debugging channel dbc_putchar( 'X' ); dbc_putchar( ':' ); dbc_write( frame_startptr(frame), frame_capacity(frame) ); } dbc_putchar( '\r' ); dbc_putchar( '\n' ); } }
void tinymac_recvnode(void) { TiCc2420Adapter * cc; TiFrameRxTxInterface * rxtx;; TiTinyMAC * mac; TiTimerAdapter *timer; TiFrame * rxbuf; char * msg = "welcome to tinymac recv test..."; int len=0; target_init(); // flash the led to indicate the software is successfully running now. // led_open(); led_on( LED_ALL ); hal_delay( 500 ); led_off( LED_ALL ); led_on( LED_RED ); // initialize the runtime library for debugging input/output and assertion // hal_assert_report is defined in module "hal_assert" // //dbo_open( 38400 ); rtl_init( (void *)dbio_open(38400), (TiFunDebugIoPutChar)dbio_putchar, (TiFunDebugIoGetChar)dbio_getchar, hal_assert_report ); dbc_putchar( 0xF0 ); dbc_mem( msg, strlen(msg) ); cc = cc2420_construct( (void *)(&m_cc), sizeof(TiCc2420Adapter) ); mac = tinymac_construct((char *)(&m_tiny), sizeof(TiTinyMAC)); timer= timer_construct((char *)(&m_timer),sizeof(TiTimerAdapter)); #ifdef CONFIG_TSET_LISTENER // cc = cc2420_open( cc, 0, _aloha_listener, NULL, 0x00 ); cc = cc2420_open( cc, 0, tinymac_evolve, mac, 0x00 ); rxtx = cc2420_interface( cc, &m_rxtx ); mac = tinymac_open( mac, rxtx, CONFIG_CHANNEL, CONFIG_PANID, CONFIG_LOCAL_ADDRESS, timer, _tinymac_listener, NULL,0x00 ); #endif #ifndef CONFIG_TSET_LISTENER cc = cc2420_open( cc, 0, NULL, NULL, 0x00 ); rxtx = cc2420_interface( cc, &m_rxtx ); mac = tinymac_open( mac, rxtx, CONFIG_CHANNEL, CONFIG_PANID, CONFIG_LOCAL_ADDRESS, NULL, NULL,0x00 ); #endif cc2420_setchannel( cc, CONFIG_CHANNEL ); cc2420_setrxmode( cc ); // enable RX mode cc2420_setpanid( cc, CONFIG_PANID ); // network identifier, seems no use in sniffer mode cc2420_setshortaddress( cc, CONFIG_LOCAL_ADDRESS ); // in network address, seems no use in sniffer mode cc2420_enable_autoack( cc ); #ifdef CONFIG_TEST_ADDRESSRECOGNITION cc2420_enable_addrdecode( cc ); #else cc2420_disable_addrdecode( cc ); #endif #ifdef CONFIG_TEST_ACK cc2420_enable_autoack( cc ); #endif rxbuf = frame_open( (char*)(&m_rxbufmem), FRAME_HOPESIZE(MAX_IEEE802FRAME154_SIZE), 3, 20, 0 ); #ifdef CONFIG_TEST_ACK //fcf = OPF_DEF_FRAMECONTROL_DATA_ACK; #else //fcf = OPF_DEF_FRAMECONTROL_DATA_NOACK; #endif hal_enable_interrupts(); /* Wait for listener action. The listener function will be called by the TiCc2420Adapter * object when a frame arrives */ #ifdef CONFIG_TEST_LISTENER while (1) {} #endif /* Query the TiCc2420Adapter object if there's no listener */ #ifndef CONFIG_TEST_LISTENER while(1) { frame_reset( rxbuf, 3, 20, 0 ); len = tinymac_recv( mac, rxbuf, 0x00 ); if (len > 0) { dbc_putchar( 0xF3 ); dbc_mem( frame_startptr(rxbuf), frame_length(rxbuf) ); //frame_moveouter( rxbuf ); //_output_frame( rxbuf, NULL ); //frame_moveinner( rxbuf ); led_off( LED_RED ); /* warning: You shouldn't wait too long in the while loop, or else * you may encounter frame loss. However, the program should still * work properly even the delay time is an arbitrary value. No error * are allowed in this case. */ //hal_delay( 500 ); led_toggle( LED_RED ); //hal_delay( 500 ); } tinymac_evolve(mac, NULL ); } #endif frame_close( rxbuf ); tinymac_close( mac ); cc2420_close( cc ); }
void recvnode(void) { TiCc2420Adapter * cc; TiFrameRxTxInterface * rxtx; TiNioAcceptor * nac; TiAloha * mac; TiTimerAdapter *timer; TiTimerManager * vtm; TiTimer * mac_timer; TiFrame * rxbuf; char * msg = "welcome to aloha recv test..."; int len=0; target_init(); // flash the led to indicate the software is successfully running now. // led_open(); led_on( LED_ALL ); hal_delay( 500 ); led_off( LED_ALL ); //led_on( LED_RED ); // initialize the runtime library for debugging input/output and assertion // hal_assert_report is defined in module "hal_assert" // //dbo_open( 38400 ); rtl_init( (void *)dbio_open(38400), (TiFunDebugIoPutChar)dbio_putchar, (TiFunDebugIoGetChar)dbio_getchar, hal_assert_report ); dbc_putchar( 0xF0 ); dbc_mem( msg, strlen(msg) ); cc = cc2420_construct( (void *)(&m_cc), sizeof(TiCc2420Adapter) ); nac = nac_construct( &m_nacmem[0], NAC_SIZE ); mac = aloha_construct( (char *)(&m_aloha), sizeof(TiAloha) ); timer= timer_construct(( char *)(&m_timer),sizeof(TiTimerAdapter)); vtm = vtm_construct( (void*)&m_vtm, sizeof(m_vtm) ); timer = timer_open( timer, 2, NULL, NULL, 0x00 ); vtm = vtm_open( vtm, timer, VTM_RESOLUTION ); mac_timer = vtm_apply( vtm ); vti_open( mac_timer, NULL, NULL ); #ifdef CONFIG_TSET_LISTENER // cc = cc2420_open( cc, 0, _aloha_listener, NULL, 0x00 ); cc = cc2420_open( cc, 0, aloha_evolve, mac, 0x00 ); rxtx = cc2420_interface( cc, &m_rxtx ); mac = aloha_open( mac, rxtx, CONFIG_ALOHA_CHANNEL, CONFIG_ALOHA_PANID, CONFIG_ALOHA_LOCAL_ADDRESS, mac_timer, _aloha_listener, NULL,0x00 ); #endif #ifndef CONFIG_TSET_LISTENER cc = cc2420_open( cc, 0, NULL, NULL, 0x00 ); rxtx = cc2420_interface( cc, &m_rxtx ); nac_open( nac, rxtx, CONFIG_NIOACCEPTOR_RXQUE_CAPACITY, CONFIG_NIOACCEPTOR_TXQUE_CAPACITY); mac = aloha_open( mac, rxtx, nac,CONFIG_ALOHA_CHANNEL, CONFIG_ALOHA_PANID, CONFIG_ALOHA_LOCAL_ADDRESS, mac_timer, NULL, NULL,0x00 ); #endif cc2420_setchannel( cc, CONFIG_ALOHA_CHANNEL ); cc2420_setrxmode( cc ); // enable RX mode cc2420_setpanid( cc, CONFIG_ALOHA_PANID ); // network identifier, seems no use in sniffer mode cc2420_setshortaddress( cc, CONFIG_ALOHA_LOCAL_ADDRESS ); // in network address, seems no use in sniffer mode cc2420_enable_autoack( cc ); cc2420_settxpower( cc, CC2420_POWER_1);//cc2420_settxpower( cc, CC2420_POWER_2);CC2420_POWER_1 #ifdef CONFIG_TEST_ADDRESSRECOGNITION cc2420_enable_addrdecode( cc ); #else cc2420_disable_addrdecode( cc ); #endif #ifdef CONFIG_TEST_ACK cc2420_enable_autoack( cc ); #endif rxbuf = frame_open( (char*)(&m_rxbufmem), FRAME_HOPESIZE(MAX_IEEE802FRAME154_SIZE), 3, 20, 0 ); dbc_putchar(0x11); #ifdef CONFIG_TEST_ACK //fcf = OPF_DEF_FRAMECONTROL_DATA_ACK; #else //fcf = OPF_DEF_FRAMECONTROL_DATA_NOACK; #endif hal_enable_interrupts(); /* Wait for listener action. The listener function will be called by the TiCc2420Adapter * object when a frame arrives */ #ifdef CONFIG_TEST_LISTENER while (1) {} #endif /* Query the TiCc2420Adapter object if there's no listener */ #ifndef CONFIG_TEST_LISTENER while(1) { char * ptr;//todo for testing frame_reset( rxbuf, 3, 20, 0 ); len = aloha_recv( mac, rxbuf, 0x00 ); if (len > 0) { frame_moveouter( rxbuf ); _output_frame( rxbuf, NULL ); frame_moveinner( rxbuf ); /* dbc_write( frame_startptr( rxbuf),frame_length( rxbuf));//todo for testing ptr = frame_startptr( rxbuf);//todo for testing dbc_putchar( 0xff);//todo for testing dbc_uint8( ptr[ (frame_length( rxbuf)-2)]);//todo for testing dbc_putchar( 0xff);//todo for testing frame_moveinner( rxbuf );//todo for testing*/ //led_off( LED_RED ); /* warning: You shouldn't wait too long in the while loop, or else * you may encounter frame loss. However, the program should still * work properly even the delay time is an arbitrary value. No error * are allowed in this case. */ //hal_delay( 500 ); led_toggle( LED_RED ); } aloha_evolve(mac, NULL ); } #endif frame_close( rxbuf ); aloha_close( mac ); cc2420_close( cc ); }