Project

General

Profile

Revision 1790

wireless: fixing no ack state

View differences:

branches/wireless/code/projects/libwireless/wireless_send.c
395 395
      } else {
396 396
        // remove packet
397 397
        WL_DEBUG_PRINT_P("|remove packet");
398
        num = val+len;
398
        if (val+len >= PACKET_BUFFER_SIZE)
399
          num = val+len-PACKET_BUFFER_SIZE;
400
        else
401
          num = val+len;
399 402
        val = (val<2)?PACKET_BUFFER_SIZE+val-2:val-2;
400
        if (num >= PACKET_BUFFER_SIZE)
401
          num -= PACKET_BUFFER_SIZE;
402 403
        while(num != send_buf_last) {
403 404
          if (send_buf_add(&val,send_buf_get(&num)) != WL_SUCCESS)
404 405
            return; // error
......
437 438
        }
438 439
      } else {
439 440
        // check attempts on packet
440
        num = val+len-1; // set to end of packet
441
        if (num >= PACKET_BUFFER_SIZE)
442
          num -= PACKET_BUFFER_SIZE;
441
        if (val+len-1 >= PACKET_BUFFER_SIZE)
442
          num = val+len-1-PACKET_BUFFER_SIZE;
443
        else
444
          num = val+len-1; // set to end of packet
443 445
        if (send_buf[num] < NUM_RETRIES) {
444 446
          val = (val<2)?PACKET_BUFFER_SIZE+val-2:val-2; // set to start of this packet
445 447
          // retry sending
446 448
          send_buf[num]++; // increment retries
449
          send_buf[val+1] = nextframe; // reset frame number
450
          nextframe = (nextframe == 0xFF)?1:nextframe+1; // increment frame number
451
          
447 452
          val = (val==0)?PACKET_BUFFER_SIZE-1:val-1; // go back one byte
448 453
          if (xbee_send_header(len+1) != WL_SUCCESS) {
449 454
            WL_DEBUG_PRINT_P("Error sending packet from ackhandle function\r\n");

Also available in: Unified diff