public static void InputMessage(byte[] data, int len) { int remain, temp; if (myRecieveMessageListener != null) { myRecieveMessageListener(null, data); } temp = rx_counter + len; if (temp > RX_BUF_SIZE) { remain = temp - RX_BUF_SIZE; rx_counter -= remain; CosLibs.Memcpy(rx_buf, remain, rx_buf, 0, rx_counter); } Array.Copy(data, 0, rx_buf, rx_counter, len); rx_counter += len; byte[] pkg = ReadPackage(); if (pkg != null) { int dlen = BtoU16(pkg, 1);//get data length byte[] pdata = CosLibs.GetSubBytes(pkg, 5, dlen); if (myRecieveCommandListener != null) { myRecieveCommandListener(pkg[3], pkg[4], pdata); } } }
public static byte[] ReadPackage() { int remain; int index = 0; int slen; while (index < rx_counter) { remain = (rx_counter - index); index = find_sof(rx_buf, index, remain); if (index >= 0) { if (check_package(rx_buf, index, remain) == 0) { slen = BtoU16(rx_buf, (index + 1)) + 6; byte[] buf = new byte[slen]; Array.Copy(rx_buf, index, buf, 0, slen); rx_counter -= slen; int clen = rx_counter - index; if ((clen >= RX_BUF_SIZE) || (clen < 0)) { rx_counter = 0; } else { CosLibs.Memcpy(rx_buf, (index + slen), rx_buf, index, clen); } return(buf); } else { index++;//move to next byte } } else { break; } } return(null); }