Changeset 35


Ignore:
Timestamp:
04/05/2007 03:52:53 PM (5 years ago)
Author:
zcs
Message:

Added all functionality of dsr only doesnt' compile just exists

Location:
nano-RK/src/net/dsr
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • nano-RK/src/net/dsr/dsr.c

    r20 r35  
    6464        util_pkt.type=ROUTE_REQUEST; 
    6565        util_pkt.len=_curr_hop_cnt;//how many hops to propogate the request upon time out goes up etc 
     66        util_pkt.src_cnt=0; 
    6667        util_pkt.src_route=&dsr_util_dest; 
    6768        util_pkt.payload=&dsr_util_route; 
     
    7172void dsr_tx_packet(uint8_t dest,uint8_t*payload,uint8_t len) 
    7273{ 
     74        RF_RX_INFO *pkt; 
     75        DSR_PKT_INFO *dsr_pkt; 
     76        uint8_t src_route[MAX_PATH_LEN]; 
     77        uint8_t len; 
     78        uint8_t i; 
     79        uint8_t j; 
     80        uint8_t rssi; 
     81        uint32_t mask; 
    7382        if(dsr_path_exist(dest)) 
    7483        { 
    7584                _dsr_tx_packet(dest,payload,len); 
    7685                nrk_event_signal(SIG(EVENT_DSR_PKT_TX)); 
     86                return; 
    7787        } 
    7888        else 
    7989        { 
    8090                dsr_util_dest=dest; 
    81                         while(dsr_path_exist(dest)||_curr_hop_cnt==MAX_HOP_COUNT) 
    82                         dsr_request_path(); 
    83                         nrk_event_wait(SIG(BMAC_RX_PKT_EVENT)|SIG(TASK_TIMEOUT_EVENT)| 
     91                while(dsr_path_exist(dest)||_curr_hop_cnt==MAX_HOP_COUNT) 
     92                { 
     93                        dsr_request_path();        //TODO CHECK AND SAVE OLD TIMEOUT STATE THEN AFTER REQUEST ETC DONE RESTORE OLD STATE 
     94                mask=nrk_event_wait(SIG(BMAC_RX_PKT_EVENT)|SIG(TASK_TIMEOUT_EVENT)); 
     95                        if(mask==SIG(TASK_TIMEOUT_EVENT)) 
     96                        { 
     97                                if(_curr_hop_cnt==DSR_MAX_HOP_COUNT) 
     98                                { 
     99                                        rate_adjust(0); //reset timeout rate on retransmission 
     100                                        nrk_event_signal(SIG(DSR_PACKET_TIMEOUT)); 
     101                                        return; 
     102                                } 
     103                                rate_adjust(1); //increase rate exponentially  
     104                        }                                                                                          
     105                        else   //get bmac packet 
     106                        {                                                                                          
     107                           pkt=bmac_rx_pkt_get(&len,&rssi); 
     108                           if(pkt!=NULL) 
     109                           { 
     110                                   dsr_pkt=(DSR_PKT_INFO*)pkt->pPayload; 
     111                                   if(dsr_pkt->type==ROUTE_RETURN) 
     112                                   { 
     113                                      for(i=dsr_pkt->src_cnt-1;i>=0;i--) 
     114                                      { 
     115                                      src_route[j]=dsr_pkt->src_route[i]; 
     116                                      j++; 
     117                                      } 
     118                                      dsr_add_path(&src_route); 
     119                                      bmac_rx_pkt_release();//done with the packet 
     120                                      _dsr_tx_packet(dest,payload,len); 
     121                                      nrk_event_signal(SIG(EVENT_DSR_PKT_TX)); 
     122                                      rate_adjust(0); //increase rate exponentially  
     123                                      return; 
     124                                   } 
     125                           } 
     126                        } 
    84127        } 
    85128        return; 
     129} 
     130 
     131void rate_adjust(uint8_t increase)//increase rate decrease timeout rate 
     132{ 
     133        if(!increase) 
     134        { 
     135                dsr_timeout_timer->nano_secs=NANOS_PER_MS * 500; 
     136                dsr_timeout_timer->secs=0;   
     137                _curr_hop_cnt=1; 
     138                nrk_set_task_timeout(dsr_timeout_timer);           
     139        } 
     140        else 
     141        { 
     142                if(_curr_hop_cnt%2==0) 
     143                        dsr_timeout_timer->nano_secs+=(2*dsr_timeout_timer->nano_secs)*( _curr_hop_cnt-1 ); 
     144                else 
     145                        dsr_timeout_timer->nano_secs+=(2*dsr_timeout_timer->nano_secs); 
     146                nrk_set_task_timeout(dsr_timeout_timer);           
     147        } 
     148 
     149} 
     150 
     151DSR_PKT_INFO *  dsr_rx_pkt() 
     152{ 
     153 
     154                RF_RX_INFO *pkt; 
     155                nrk_event_wait(SIG(DSR_RX_PKT)); 
     156                  pkt=bmac_rx_pkt_get(&len,&rssi); 
     157               return (DSR_PKT_INFO*)pkt->pPayload; 
     158 
    86159} 
    87160void dsr_update_clist()      //periodically clean cache frequency 
     
    110183        bmac_tx_packet(&rxtx_pkt,MAX_ROUTE+16); 
    111184} 
     185void dsr_network_task() 
     186{ 
     187                uint32_t mask; 
     188                uint8_t temp; 
     189                uint8_t len; 
     190                uint8_t rssi;   
     191                uint8_t i;  
     192                uint8_t j;  
     193                RF_RX_INFO *pkt; 
     194                DSR_PKT_INFO *dsr_pkt; 
     195                uint8_t path[MAX_ROUTE] 
     196                mask=nrk_event_wait(SIG(BMAC_RX_PKT_EVENT)); 
     197                pkt=bmac_rx_pkt_get(&len,&rssi);  
     198                dsr_pkt=(DSR_PKT_INFO*)pkt->pPayload; 
     199 
     200                if(dsr_pkt->type==DATA_PACKET) 
     201                   if(dsr_pkt->src_route[[dsr_pkt->src_cnt]]==MYMAC) //Packet is for me 
     202                                 { 
     203                                  if(dest_cnt==dsr_pkt->src_cnt)   //@ final destination 
     204                                          nrk_signal_event(SIG(DSR_RX_PKT)); 
     205                                  else //forward packet along update its source pos 
     206                                  { 
     207                                          dsr_pkt->src_cnt++; 
     208                                          bmac_tx_packet(&pkt,MAX_ROUTE+16);// TODO  check node leaving case no longer exists case 
     209                                  } 
     210                                 } 
     211                if(dsr_pkt->type==ROUTE_REQUEST) 
     212                { 
     213                        if(dsr_pkt->hop_cnt>0) 
     214                        { 
     215                        if(dsr_path_exist(dsr_pkt->src_route))  //destination exists in your paths? 
     216                                { 
     217                                        j=0; 
     218                                   for(i=dsr_pkt->src_cnt;i>-1;i--) //BOUND THIS BY MAX_ROUTE 
     219                                   { 
     220                                            
     221                                       path[j]=dsr_pkt->payload[i];   //make new path 
     222                                    }   
     223                                    for(i=j+1;i<MAX_ROUTE;i++) 
     224                                    { 
     225                                   path[i]= dsr_src_route_path[dsr_src_route_table[dsr_pkt->src_route]]; 
     226                                    if(path[i]==dsr_pkt->src_route) 
     227                                            break; 
     228                                     } 
     229                                     dsr_pkt->src_route=&path; 
     230                                     dsr_pkt->type=ROUTE_RETURN; 
     231                                     dsr_pkt->src_cnt=0; 
     232                                     bmac_tx_packet(&pkt,MAX_ROUTE+16);// TODO  check node leaving case no longer exists case 
     233                                } 
     234                                else 
     235                                { 
     236                                     dsr_pkt->payload[dsr_pkt->src_cnt]=MYMAC; 
     237                                     dsr_pkt->src_cnt++; 
     238                                     dsr_pkt->hop_cnt--; 
     239                                     dsr_pkt->type=ROUTE_RETURN; 
     240                                     bmac_tx_packet(&pkt,MAX_ROUTE+16);// TODO  check node leaving case no longer exists case 
     241                                } 
     242                        } 
     243                        if(dsr_pkt->type==ROUTE_RETURN) 
     244                        { 
     245                                 if(dsr_pkt->src_route[[dsr_pkt->src_cnt]]!=MYMAC) //Packet is for me 
     246                                 { 
     247                                         dsr_pkt->src_cnt++; 
     248                                     bmac_tx_packet(&pkt,MAX_ROUTE+16);// TODO  check node leaving case no longer exists case 
     249                                 } 
     250                        } 
     251} 
  • nano-RK/src/net/dsr/dsr.h

    r20 r35  
    33#define DSR_PKT_TX_EVENT 13 
    44#define DSR_PATH_FOUND_EVENT 12 
    5 #define DSR_MAX_HOP_COUNT 5 
     5#define DSR_PACKET_TIMEOUT  11 
     6#define DSR_MAX_HOP_COUNT 10 
    67#define MAX_ROUTE  16 
    78#define MAX_PATH_LEN 16 
     
    2526uint8_t dsr_get_path(uint8_t mac); 
    2627uint8_t dsr_request_path(); 
     28void dsr_network_task(); 
    2729typedef struct  DSR_PKT 
    2830{ 
     
    3436  uint8_t *payload; 
    3537}DSR_PKT_INFO; 
     38 typedef struct  DSR_PKT 
     39{ 
     40  uint8_t *src_route; 
     41  uint8_t src_cnt;//your theo pos in the route 
     42  uint8_t dest_cnt;// how far in the pos is final destination 
     43  uint8_t type; // type of packet 
     44  uint8_t len;//length of your packet 
     45  uint8_t *payload; 
     46}DSR_PKT_INFO; 
     47 
    3648DSR_PKT_INFO rxtx_pkt; 
    3749DSR_PKT_INFO util_pkt; 
    38  
     50nrk_time_t dsr_timeout_timer; 
Note: See TracChangeset for help on using the changeset viewer.