コード例 #1
0
 protected void removeDataFromInputBuffer(int start, int count)
 {
     if (mInputDataSize >= start + count)
     {
         BinaryUtility.memmove(ref mInputBuffer, start, start + count, mInputDataSize - start - count);
         mInputDataSize -= count;
     }
 }
コード例 #2
0
    protected bool receiveThread()
    {
        if (!isDeviceConnect())
        {
            return(true);
        }
        const int MaxRecvCount = 32;

        if (mRecvBytes == null)
        {
            mRecvBytes = new byte[MaxRecvCount];
        }
        // 只接收23个字节,如果不是23个字节,则丢弃该数据
        int readCount = mHIDDevice.read(ref mRecvBytes, 23);

        if (readCount != 0)
        {
            BinaryUtility.memmove(ref mRecvBytes, 0, 1, MaxRecvCount - 1);
            readCount -= 4;
            // 去除第一个字节和最后3个字节
            mInputBufferLock.waitForUnlock();
            addDataToInputBuffer(mRecvBytes, readCount);
            mInputBufferLock.unlock();
        }

        // 先同步发送列表
        mSendPacketLock.waitForUnlock();
        int count = mSendPacket.Count;

        for (int i = 0; i < count; ++i)
        {
            mOutputBufferList.Add(mSendPacket[i].toBytes());
        }
        mSendPacket.Clear();
        mSendPacketLock.unlock();
        // 发送所有需要发送的数据
        int sendCount = mOutputBufferList.Count;

        for (int i = 0; i < sendCount; ++i)
        {
            if (mOutputBufferList[i] != null)
            {
                mHIDDevice.write(mOutputBufferList[i]);
            }
        }
        mOutputBufferList.Clear();
        return(true);
    }
コード例 #3
0
 public void setRecordData(short[] data, int dataSize)
 {
     // 检测数据量是否正确
     if (mBlockBufferSize != dataSize)
     {
         return;
     }
     // 由于缓冲区大小和每次获取的数据数量都是固定的,所以只要有数据就需要移动
     // 将已有的数据移到缓冲区头部,然后将新的数据加入尾部
     if (mAllPCMCount > 0)
     {
         BinaryUtility.memmove(mAllPCMData, 0, dataSize, mRecorderDataBlockSize - dataSize);
         BinaryUtility.memcpy(mAllPCMData, data, mRecorderDataBlockSize - dataSize, 0, dataSize);
     }
     else
     {
         BinaryUtility.memset(mAllPCMData, (short)0, mRecorderDataBlockSize);
         BinaryUtility.memcpy(mAllPCMData, data, 0, 0, dataSize);
         mAllPCMCount = dataSize;
     }
 }