예제 #1
0
void openserial_startOutput() {
   //schedule a task to get new status in the output buffer
   uint8_t temp_openserial_debugPrintCounter; //to avoid many atomics
   __disable_interrupt();
   openserial_debugPrintCounter=(openserial_debugPrintCounter+1)%13;
   temp_openserial_debugPrintCounter = openserial_debugPrintCounter;
   __enable_interrupt();
   switch (temp_openserial_debugPrintCounter) {
//      case  0: if(stupidmac_debugPrint()    == TRUE) {break;};
//      case  1: if(neighbors_debugPrint()    == TRUE) {break;};
//      case  2: if(nores_debugPrint()        == TRUE) {break;};
//      case  3: if(iphc_debugPrint()         == TRUE) {break;};
//      case  4: if(forwarding_debugPrint()   == TRUE) {break;};
//      case  5: if(icmpv6_debugPrint()       == TRUE) {break;};
//      case  6: if(icmpv6echo_debugPrint()   == TRUE) {break;};
//      case  7: if(icmpv6router_debugPrint() == TRUE) {break;};
//      case  8: if(icmpv6rpl_debugPrint()    == TRUE) {break;};
//      case  9: if(idmanager_debugPrint()    == TRUE) {break;};
//      case 10: if(openqueue_debugPrint()    == TRUE) {break;};
//      case 11: if(openserial_debugPrint()   == TRUE) {break;};
//      case 12: if(openbridge_debugPrint()   == TRUE) {break;};
      default:
         __disable_interrupt();
         openserial_debugPrintCounter=0;
         __enable_interrupt();
   }
   //print out what's in the buffer now
   UC1IFG   &= ~(UCA1TXIFG | UCA1RXIFG);          // clear possible pending interrupts
   UC1IE    |=  (UCA1RXIE  | UCA1TXIE);           // Enable USCI_A1 TX & RX interrupt
   __disable_interrupt();
   openserial_mode=MODE_OUTPUT;
   if (openserial_somethingInOutputBuffer) {
      UCA1TXBUF = openserial_output_buffer[output_buffer_index_read_increment()];
   } else {
      openserial_stop();
   }
   __enable_interrupt();
}
예제 #2
0
//executed in ISR, called from scheduler.c
void isr_openserial_tx() {
    switch (openserial_vars.mode) {
    case MODE_INPUT:
        openserial_vars.input_command_index++;
        if (openserial_vars.input_command_index<sizeof(openserial_vars.input_command)) {
            uart_writeByte(openserial_vars.input_command[openserial_vars.input_command_index]);
        } else {
            openserial_vars.ready_receive_command = TRUE;
        }
        break;
    case MODE_OUTPUT:
        if (openserial_vars.output_buffer_index_write==openserial_vars.output_buffer_index_read) {
            openserial_vars.somethingInOutputBuffer=FALSE;
        }
        if (openserial_vars.somethingInOutputBuffer) {
            uart_writeByte(openserial_vars.output_buffer[output_buffer_index_read_increment()]);
        }
        break;
    case MODE_OFF:
    default:
        break;
    }
}
예제 #3
0
//executed in ISR, called from scheduler.c
void openserial_txInterrupt() {
   UC1IFG &= ~UCA1TXIFG; // TODO: do not clear, but disable when done
   switch (openserial_mode) {
      case MODE_INPUT:
         openserial_input_command_index++;
         if (openserial_input_command_index<sizeof(openserial_input_command)) {
            UCA1TXBUF = openserial_input_command[openserial_input_command_index];
         } else {
            openserial_ready_receive_command = TRUE;
         }
         break;
      case MODE_OUTPUT:
         if (openserial_output_buffer_index_write==openserial_output_buffer_index_read) {
            openserial_somethingInOutputBuffer=FALSE;
         }
         if (openserial_somethingInOutputBuffer) {
            UCA1TXBUF = openserial_output_buffer[output_buffer_index_read_increment()];
         }
         break;
      case MODE_OFF:
      default:
         break;
   }
}
예제 #4
0
void openserial_startOutput() {
    //schedule a task to get new status in the output buffer
    uint8_t temp_openserial_debugPrintCounter; //to avoid many atomics
    INTERRUPT_DECLARATION();
    DISABLE_INTERRUPTS();
    openserial_vars.debugPrintCounter=(openserial_vars.debugPrintCounter+1)%STATUS_MAX;
    temp_openserial_debugPrintCounter = openserial_vars.debugPrintCounter;
    ENABLE_INTERRUPTS();
    switch (temp_openserial_debugPrintCounter) {
    case STATUS_ISSYNC:
        if (debugPrint_isSync()==TRUE) {
            break;
        }
    case STATUS_ID:
        if (debugPrint_id()==TRUE) {
            break;
        }
    case STATUS_DAGRANK:
        if (debugPrint_myDAGrank()==TRUE) {
            break;
        }
    case STATUS_OUTBUFFERINDEXES:
        if(debugPrint_outBufferIndexes()==TRUE) {
            break;
        }
    case STATUS_ASN:
        if(debugPrint_asn()==TRUE) {
            break;
        }
    case STATUS_MACSTATS:
        if (debugPrint_macStats()==TRUE) {
            break;
        }
    case STATUS_SCHEDULE:
        if(debugPrint_schedule()==TRUE) {
            break;
        }
    case STATUS_QUEUE:
        if(debugPrint_queue()==TRUE) {
            break;
        }
    case STATUS_NEIGHBORS:
        if(debugPrint_neighbors()==TRUE) {
            break;
        }
    default:
        DISABLE_INTERRUPTS();
        openserial_vars.debugPrintCounter=0;
        ENABLE_INTERRUPTS();
    }
    //print out what's in the buffer now
    uart_clearTxInterrupts();
    uart_clearRxInterrupts();          // clear possible pending interrupts
    uart_enableInterrupts();           // Enable USCI_A1 TX & RX interrupt
    DISABLE_INTERRUPTS();
    openserial_vars.mode=MODE_OUTPUT;
    if (openserial_vars.somethingInOutputBuffer) {
        uart_writeByte(openserial_vars.output_buffer[output_buffer_index_read_increment()]);
    } else {
        openserial_stop();
    }
    ENABLE_INTERRUPTS();
}