//组包处理 //1.mPackageSetup_ReadBuf考虑删除? NemoUsbHid.Package Handle_PackageSetupProcess(byte[] datas) { //Debug.Log(" count:" + datas.Length + " read:" + NemoUsbHid.ByteArrayToString(datas)); int readNum = mPackageSetup_RestNum + datas.Length; //Debug.Log("datas.Length = " + datas.Length.ToString() + " mPackageSetup_RestNum = " + mPackageSetup_RestNum); System.Array.Copy(datas, 0, mPackageSetup_ReadBuf, mPackageSetup_RestNum, datas.Length); //Debug.Log("Handle_PackageSetupProcess readNum = " + readNum + " mPackageSetup_ReadBuf.l = " + mPackageSetup_ReadBuf.Length); for (int i = 0; i != readNum; ++i) { byte b = mPackageSetup_ReadBuf[i]; switch (mReadPackStage) { case ReadPackageStage.NotStart: { if (b == 0xFB) { mPackageSetup_Readed.Add(b); mReadPackStage = ReadPackageStage.Head; //Debug.Log("NotStart to Head"); } } break; case ReadPackageStage.Head: { mPackageSetup_Readed.Add(b); //Debug.Log("Head mPackageSetup_Readed.length = " + mPackageSetup_Readed.Count + "b = " + b); if (mPackageSetup_Readed.Count == 5) { //mPackSetupingID = 256 * mPackageSetup_Readed[1] + mPackageSetup_Readed[2]; mPackSetupingLen = 256 * mPackageSetup_Readed[3] + mPackageSetup_Readed[4]; mReadPackStage = ReadPackageStage.DataToEnd; //Debug.Log("Head to DataToEnd"); } } break; case ReadPackageStage.DataToEnd: { mPackageSetup_Readed.Add(b); if (mPackageSetup_Readed.Count == mPackSetupingLen + 5 + 1) { if (mPackageSetup_Readed[mPackageSetup_Readed.Count - 1] == (mPackageSetup_Readed[1] ^ mPackageSetup_Readed[2])) //结尾副符合-组包完成 { mReadPackStage = ReadPackageStage.NotStart; System.Array.Copy(mPackageSetup_ReadBuf, i + 1, mPackageSetup_ReadBuf, 0, readNum - i - 1); //Debug.Log("package setuping:" + NemoUsbHid.ByteArrayToString(mPackageSetup_Readed.ToArray())); //test Start //byte[] testBytes = new byte[readNum - i - 1]; //System.Array.Copy(mPackageSetup_ReadBuf, testBytes, readNum - i - 1); //Debug.Log("package setuping:"+NemoUsbHid.ByteArrayToString(testBytes)); //test End mPackageSetup_RestNum = readNum - i - 1; NemoUsbHid.Package p = new NemoUsbHid.Package(); p.data = mPackageSetup_Readed.ToArray(); mPackageSetup_Readed.Clear(); //Debug.Log("package : " + NemoUsbHid.ByteArrayToString(p.data)); return(p); } else //有错误包出现 { //test Start //Debug.Log("package erro msg:" + NemoUsbHid.ByteArrayToString(mPackageSetup_Readed.ToArray())); //test End mReadPackStage = ReadPackageStage.NotStart; mPackageSetup_Readed.Clear(); Debug.LogWarning("[ArcadeIO_Cheng] Wrong package appear in PackageSetup!"); return(null); } } } break; } } mPackageSetup_RestNum = 0; return(null); }
/// <summary> /// ������� /// </summary> /// <param name="datas"></param> /// <returns></returns> List<NemoUsbHid.Package> Handle_PackageSetupProcess2(byte[] datas) { List<NemoUsbHid.Package> packsOut = new List<NemoUsbHid.Package>(); //int readNum = mPackageSetup_RestNum + datas.Length; //System.Array.Copy(datas, 0, mPackageSetup_ReadBuf, mPackageSetup_RestNum, datas.Length); //for (int i = 0; i != datas.Length; ++i) foreach(byte b in datas) { switch (mReadPackStage) { case ReadPackageStage.NotStart: { if (b == 0xFB) { mPackageSetup_Readed.Add(b); mReadPackStage = ReadPackageStage.Head; } } break; case ReadPackageStage.Head: { mPackageSetup_Readed.Add(b); if (mPackageSetup_Readed.Count == 5) { mPackSetupingLen = 256 * mPackageSetup_Readed[3] + mPackageSetup_Readed[4]; mReadPackStage = ReadPackageStage.DataToEnd; if (mPackSetupingLen > 256) { mReadPackStage = ReadPackageStage.NotStart; mPackageSetup_Readed.Clear(); Debug.LogWarning("[ArcadeIO_Cheng] PackSetupingLen > 256,pack may wrong!"); //return packsOut; } } } break; case ReadPackageStage.DataToEnd: { mPackageSetup_Readed.Add(b); if (mPackageSetup_Readed.Count == mPackSetupingLen + 5 + 1) { if (mPackageSetup_Readed[mPackageSetup_Readed.Count - 1] == (mPackageSetup_Readed[1] ^ mPackageSetup_Readed[2]))//��β������-������ { mReadPackStage = ReadPackageStage.NotStart; //System.Array.Copy(mPackageSetup_ReadBuf, i + 1, mPackageSetup_ReadBuf, 0, readNum - i - 1); //mPackageSetup_RestNum = readNum - i - 1; NemoUsbHid.Package pOut = new NemoUsbHid.Package(); pOut.data = mPackageSetup_Readed.ToArray(); mPackageSetup_Readed.Clear(); packsOut.Add(pOut); } else//�д�������� { mReadPackStage = ReadPackageStage.NotStart; mPackageSetup_Readed.Clear(); Debug.LogWarning("[ArcadeIO_Cheng] Wrong package appear in PackageSetup!"); //return packsOut; } } } break; } } //Debug.Log("outpack num = " + packsOut.Count.ToString()); return packsOut; }
/// <summary> /// 组包处理 /// </summary> /// <param name="datas"></param> /// <returns></returns> List <NemoUsbHid.Package> Handle_PackageSetupProcess2(byte[] datas) { List <NemoUsbHid.Package> packsOut = new List <NemoUsbHid.Package>(); //int readNum = mPackageSetup_RestNum + datas.Length; //System.Array.Copy(datas, 0, mPackageSetup_ReadBuf, mPackageSetup_RestNum, datas.Length); //for (int i = 0; i != datas.Length; ++i) foreach (byte b in datas) { switch (mReadPackStage) { case ReadPackageStage.NotStart: { if (b == 0xFB) { mPackageSetup_Readed.Add(b); mReadPackStage = ReadPackageStage.Head; } } break; case ReadPackageStage.Head: { mPackageSetup_Readed.Add(b); if (mPackageSetup_Readed.Count == 5) { mPackSetupingLen = 256 * mPackageSetup_Readed[3] + mPackageSetup_Readed[4]; mReadPackStage = ReadPackageStage.DataToEnd; if (mPackSetupingLen > 256) { mReadPackStage = ReadPackageStage.NotStart; mPackageSetup_Readed.Clear(); Debug.LogWarning("[ArcadeIO_Cheng] PackSetupingLen > 256,pack may wrong!"); //return packsOut; } } } break; case ReadPackageStage.DataToEnd: { mPackageSetup_Readed.Add(b); if (mPackageSetup_Readed.Count == mPackSetupingLen + 5 + 1) { if (mPackageSetup_Readed[mPackageSetup_Readed.Count - 1] == (mPackageSetup_Readed[1] ^ mPackageSetup_Readed[2])) //结尾副符合-组包完成 { mReadPackStage = ReadPackageStage.NotStart; //System.Array.Copy(mPackageSetup_ReadBuf, i + 1, mPackageSetup_ReadBuf, 0, readNum - i - 1); //mPackageSetup_RestNum = readNum - i - 1; NemoUsbHid.Package pOut = new NemoUsbHid.Package(); pOut.data = mPackageSetup_Readed.ToArray(); mPackageSetup_Readed.Clear(); packsOut.Add(pOut); } else //有错误包出现 { mReadPackStage = ReadPackageStage.NotStart; mPackageSetup_Readed.Clear(); Debug.LogWarning("[ArcadeIO_Cheng] Wrong package appear in PackageSetup!"); //return packsOut; } } } break; } } //Debug.Log("outpack num = " + packsOut.Count.ToString()); return(packsOut); }
//������� //1.mPackageSetup_ReadBuf����ɾ��? NemoUsbHid.Package Handle_PackageSetupProcess(byte[] datas) { //Debug.Log(" count:" + datas.Length + " read:" + NemoUsbHid.ByteArrayToString(datas)); int readNum = mPackageSetup_RestNum + datas.Length; //Debug.Log("datas.Length = " + datas.Length.ToString() + " mPackageSetup_RestNum = " + mPackageSetup_RestNum); System.Array.Copy(datas, 0, mPackageSetup_ReadBuf, mPackageSetup_RestNum, datas.Length); //Debug.Log("Handle_PackageSetupProcess readNum = " + readNum + " mPackageSetup_ReadBuf.l = " + mPackageSetup_ReadBuf.Length); for (int i = 0; i != readNum; ++i ) { byte b = mPackageSetup_ReadBuf[i]; switch (mReadPackStage) { case ReadPackageStage.NotStart: { if (b == 0xFB) { mPackageSetup_Readed.Add(b); mReadPackStage = ReadPackageStage.Head; //Debug.Log("NotStart to Head"); } } break; case ReadPackageStage.Head: { mPackageSetup_Readed.Add(b); //Debug.Log("Head mPackageSetup_Readed.length = " + mPackageSetup_Readed.Count + "b = " + b); if (mPackageSetup_Readed.Count == 5) { //mPackSetupingID = 256 * mPackageSetup_Readed[1] + mPackageSetup_Readed[2]; mPackSetupingLen = 256 * mPackageSetup_Readed[3] + mPackageSetup_Readed[4]; mReadPackStage = ReadPackageStage.DataToEnd; //Debug.Log("Head to DataToEnd"); } } break; case ReadPackageStage.DataToEnd: { mPackageSetup_Readed.Add(b); if (mPackageSetup_Readed.Count == mPackSetupingLen + 5 + 1) { if (mPackageSetup_Readed[mPackageSetup_Readed.Count - 1] == (mPackageSetup_Readed[1] ^ mPackageSetup_Readed[2]))//��β������-������ { mReadPackStage = ReadPackageStage.NotStart; System.Array.Copy(mPackageSetup_ReadBuf, i+1, mPackageSetup_ReadBuf,0, readNum - i -1); //Debug.Log("package setuping:" + NemoUsbHid.ByteArrayToString(mPackageSetup_Readed.ToArray())); //test Start //byte[] testBytes = new byte[readNum - i - 1]; //System.Array.Copy(mPackageSetup_ReadBuf, testBytes, readNum - i - 1); //Debug.Log("package setuping:"+NemoUsbHid.ByteArrayToString(testBytes)); //test End mPackageSetup_RestNum = readNum - i - 1; NemoUsbHid.Package p = new NemoUsbHid.Package(); p.data = mPackageSetup_Readed.ToArray(); mPackageSetup_Readed.Clear(); //Debug.Log("package : " + NemoUsbHid.ByteArrayToString(p.data)); return p; } else//�д�������� { //test Start //Debug.Log("package erro msg:" + NemoUsbHid.ByteArrayToString(mPackageSetup_Readed.ToArray())); //test End mReadPackStage = ReadPackageStage.NotStart; mPackageSetup_Readed.Clear(); Debug.LogWarning("[ArcadeIO_Cheng] Wrong package appear in PackageSetup!"); return null; } } } break; } } mPackageSetup_RestNum = 0; return null; }