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; } } } }
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; } }