Exemplo n.º 1
0
void respondToDeviceSearch (char *message, unsigned int length, char dataErr)
{

  // First check if the message has a correct CRC
  if (dataErr == 0) { // && txFilterEnabled == 1) {
    // MySentry Message
    if ( (message[0] == 0xA2) &&
         (message[1] == pumpID[0]) &&
         (message[2] == pumpID[1]) &&
         (message[3] == pumpID[2]) ) {
           switch(message[4]) {
              
           case 0x09:
           case 0x0A:
           case 0x08:
           case 0x04:
           case 0x0B:
             uartTxBuffer[0]  = 0xA2;
             uartTxBuffer[1]  = message[1];
             uartTxBuffer[2]  = message[2];
             uartTxBuffer[3]  = message[3];
             uartTxBuffer[4]  = 0x06;
             uartTxBuffer[5]  = message[5] & 0x7F;
             uartTxBuffer[6]  = message[1];
             uartTxBuffer[7]  = message[2];
             uartTxBuffer[8]  = message[3];
             uartTxBuffer[9]  = 0x00;
             uartTxBuffer[10] = message[4];
             switch (message[4]){
               case 0x09: uartTxBuffer[11] = 0x0A; break; 
               case 0x0A: uartTxBuffer[11] = 0x08; break;
               case 0x08: uartTxBuffer[11] = 0x0B; break;
               case 0x0B: uartTxBuffer[11] = 0x04; break;
               default:   uartTxBuffer[11] = 0x00; break; //txFilterEnabled = 0; break;
             }
             uartTxBuffer[12] = 0x00;
             uartTxBuffer[13] = 0x00;
             uartTxBuffer[14] = crc8(uartTxBuffer,14);
             uartTxLength = 15;
             sendMedtronicMessage(uartTxBuffer,uartTxLength,1);
             
           default:
             break;
           }
      
    }
  }
}
Exemplo n.º 2
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;
    }
    }