HRESULT MessagePipe::WaitHeader(ITransferrable* &message) { STATIC_ASSERT(sizeof(MessageType) == sizeof(int)); if (!isOpen()) return E_ACCESSDENIED; HRESULT hr; // receive header int code; if(FAILED(hr = read(&code, sizeof code))) return hr; message = ResolveMessage(static_cast<MessageType>(code)); return message == 0 ? E_FAIL : S_OK; }
/* 名称: void DataResolve(uint8_t *Data, uint16_t Length) 功能: 数据分解 形参: *Data 数据指针, Length 数据长度 返回值:无 */ void DataResolve(String Data, uint16_t Length) { uint8_t RxDataBuffer[10][BUFFERSIZE] = {0}; uint16_t RxLength[10] = {0}; uint16_t Index = 0; uint16_t Recv, i; static uint8_t End = 0; for(i = 0; i < Length; i++) { Recv = Data[i]; if(End == 1) { if(Recv == '\n') { // RxDataBuffer[Index][0] = RxLength[Index]-1; Index++; } End = 0; } else { if(Recv == '\r') End = 1; else { // if(RxLength[Index] == 0) RxLength[Index]++; RxDataBuffer[Index][RxLength[Index]++] = Recv; if(RxLength[Index] > BUFFERSIZE-1) RxLength[Index] = 0; } } } for(i = 0; i < Index; i++) { ResolveMessage(RxDataBuffer[i]); #if 0 UART3_SendString(RxDataBuffer[i], RxLength[i]); #endif } Length = 0; Index = 0; }