Example #1
0
/***********************************************************************************
* @fn          appLoopbackTask
*
* @brief       Checks if new bytes have arrived from the UART and echo them back.
*
* @param       none
*
* @return      none
*/
static void appLoopbackTask(void)
{
    uint8 nBytes, n;

    nBytes = halUartGetNumRxBytes();

    if( nBytes>0 ) {
        n= MIN(sizeof(pTxData),nBytes);
        halUartRead(pTxData,n);
        halUartWrite(pTxData,n);
    }
}
Example #2
0
/***********************************************************************************
* @fn          appRfSenderTask
*
* @brief       Checks if new bytes have arrived from the UART. If there
*              are enough bytes to fill a maximal sized packet, or if the UART
*              is idle, the  bytes are transmitted on the air.
*
* @param       none
*
* @return      none
*/
static void appRfSenderTask(void)
{
    uint8 nBytes;
    uint8 payloadLength;
    uint8 bytesToRead;

    nBytes = halUartGetNumRxBytes();
    payloadLength= 0;
    bytesToRead= 0;

    if(nBytes >= APP_PAYLOAD_LENGTH || (appUartRxIdle && nBytes>0) ) {
        // Signal PC not to send on UART, while sending on air.
        halUartEnableRxFlow(FALSE);
        // Wait for PC to respond
        halMcuWaitUs(1000);

        bytesToRead = MIN(nBytes, APP_PAYLOAD_LENGTH);
        halUartRead(pTxData,bytesToRead);
        payloadLength+= bytesToRead;

        halLedToggle(3);
        if( (mrfiLinkSend(pTxData, payloadLength,N_RETRIES)) != MRFI_TX_RESULT_SUCCESS) {
            nTxErr++;
            appUpdateDisplay();
        }

        // Signal RX flow on
        halUartEnableRxFlow(TRUE);

        // Restart idle timer
        halTimer32kRestart();
        halTimer32kIntEnable();
        // Reset idle fimer flag
        appUartRxIdle = FALSE;
    }
}
Example #3
0
void usbReceiveData (void) {
  uint8_t tempData[128] = { 0 };
  size_t uartRxIndex = 0;
  bool txCalcCRC8 = false;
  bool txCalcCRC16 = false;
  uint8_t txLength = 0;
  static uint8_t uartRxBuffer[SIZE_OF_UART_RX_BUFFER] = { 0 };
  uint8_t txTimes = 0;
  uint16_t nBytes = halUartGetNumRxBytes();
  size_t i = 0;

  for( i=0; i<nBytes; i=i+48) {
    uint16_t readBytes;
    if (nBytes-i > 48) {
      readBytes = 48;
    } else {
      readBytes = nBytes-i;
    }
    halUartRead( &tempData[i], readBytes);
    usbUartProcess();
  }



  for( i=0; i<nBytes; i++) {

    // Read Rx buffer
    uartRxBuffer[uartRxIndex] = tempData[i];

    switch( uartRxIndex ) {
    case 0: {
      switch( uartRxBuffer[0] ) {
      case 0x01:
        uartRxIndex++;
        txCalcCRC8   = false;
        txCalcCRC16 = false;
        enableTimerInt();
        break;
      case 0x81:
        uartRxIndex++;
        txCalcCRC8   = true;
        txCalcCRC16 = false;
        enableTimerInt();
        break;
      case 0xC1:
        uartRxIndex++;
        txCalcCRC8   = false;
        txCalcCRC16 = true;
        enableTimerInt();
        break;
      case 0x03:
      case 0x13:
        txFilterEnabled = true;
        P1_1 = 0;
        uartRxBuffer[0] = 0x03;
        halUartWrite(uartRxBuffer,1);
        break;
      case 0x00:
        uartRxBuffer[0] = _MMCOMMANDER_VERSION_ ;
        halUartWrite(uartRxBuffer,1);
        break;
      }
      break;
    }
    case 1: {
      txLength = uartRxBuffer[1];
      uartRxIndex++;
      resetTimerCounter();
      break;
    }
    case 2: {
      txTimes = uartRxBuffer[2];
      uartRxIndex++;
      resetTimerCounter();
      break;
    }
    default: {
      resetTimerCounter();
      if (uartRxIndex == (txLength + 2)) {
        stopTimerInt();
        if (txCalcCRC8 ) {
          uartRxBuffer[++uartRxIndex] = crc8(&uartRxBuffer[3], (size_t)(txLength));
          txLength++;
        }
        if (txCalcCRC16 ) {
          uint16_t const tmpCRC16 = crc16 (&uartRxBuffer[3],(size_t)(txLength));
          uartRxBuffer[++uartRxIndex] = (uint8_t)((tmpCRC16 >> 8) & 0x00FF);
          uartRxBuffer[++uartRxIndex] = (uint8_t)(tmpCRC16 & 0x00FF);
          txLength += 2;
        }

        if (txFilter(&uartRxBuffer[3],txLength) == 0) {
          sendMedtronicMessage(&uartRxBuffer[3],txLength,txTimes);
          halUartWrite( uartRxBuffer, 3 );
          uartRxIndex=0;
        } else {
          uartRxBuffer[1]=0x00;
          uartRxBuffer[2]=0x00;
          halUartWrite( uartRxBuffer, 3 );
          uartRxIndex=0;
        }
      } else {
        uartRxIndex++;
      }
      break;
    }
    }