void CPacketPool::CopyFromAnotherPool(CPacketPool & pAp) { CPacket * pPkt; for(u32 i=0; i< pAp.GetPacketCunt(); i ++) { pPkt = NewPacket(); memcpy(pPkt->GetPktData() , pAp.GetPacket(i)->GetPktData(),pPkt->PacketSize); } }
HRESULT CTsTeleportShellExt::AnnounceTransfer(__in_z LPTSTR szPartial, BOOL bDir) { HRESULT hr; PTELEP_PACKET_HEADER pPacket = NULL; // // Send start packet for file or dir // size_t Len = _tcslen(szPartial); USHORT DataLen; hr = SizeTToUShort(Len, &DataLen); LEAVE_IF_FAILED("SizeTToUShort (0x%Ix) failed", Len); hr = UShortAdd(DataLen, 1, &DataLen); LEAVE_IF_FAILED("UShortAdd (0x%4x, 1) failed", DataLen); hr = UShortMult(DataLen, sizeof(TCHAR), &DataLen); LEAVE_IF_FAILED("UShortMult (0x%4x, %d) failed", DataLen, sizeof(TCHAR)); hr = UShortAdd(DataLen, sizeof(TELEP_PACKET_HEADER), &DataLen); LEAVE_IF_FAILED("UShortMult (0x%4x, %d) failed", DataLen, sizeof(TELEP_PACKET_HEADER)); USHORT Flags = 0; if (bDir) { Flags |= TELET_FLAG_DIRECTORY; } pPacket = NewPacket(PacketTypeFileStart, DataLen, Flags); // throwing! LPWSTR pData = (LPWSTR) (pPacket+1); CopyMemory(pData, szPartial, pPacket->PacketSize); hr = SendPacket(pPacket); LEAVE_IF_FAILED("SendPacket (Start, %s) failed", szPartial); _Function_Exit: if (pPacket) { delete [] pPacket; } return hr; }
HRESULT CTsTeleportShellExt::TeleportFile(__in_z LPTSTR szFile) { HRESULT hr = S_OK; HANDLE hFile = INVALID_HANDLE_VALUE; PTELEP_PACKET_HEADER pPacket = NULL; try { OutputDebugString(szFile); OutputDebugString(TEXT("\n")); size_t Len = _tcslen(szFile); LPTSTR szPartial = szFile + Len - 1; while (szPartial > szFile && szPartial[-1] != TEXT('\\')) szPartial--; ASSERT(szPartial != szFile); hFile = CreateFile(szFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, // so that we can open dir (as well) NULL); if (INVALID_HANDLE_VALUE == hFile) { hr = HRESULT_FROM_WIN32(GetLastError()); } LEAVE_IF_FAILED("CreateFile (%s) failed", szFile); BY_HANDLE_FILE_INFORMATION fi; BOOL bRet = GetFileInformationByHandle(hFile, &fi); if (!bRet) { hr = HRESULT_FROM_WIN32(GetLastError()); } LEAVE_IF_FAILED("GetFileInformation (%s) failed", szFile); if (FILE_ATTRIBUTE_DIRECTORY == fi.dwFileAttributes) { hr = AnnounceTransfer(szPartial, TRUE); // true for dir LEAVE_IF_FAILED("AnnounceTransfer (%s) failed", szPartial); hr = TeleportDirectory(szFile); // telep files in dir LEAVE_IF_FAILED("TeleportDirectory (%s) failed", szPartial); hr = AnnounceEndTransfer(TRUE); LEAVE_IF_FAILED("AnnounceEndTransfer (%s) failed", szPartial); } else { hr = AnnounceTransfer(szPartial, FALSE); // false for file LEAVE_IF_FAILED("AnnounceTransfer (%s) failed", szPartial); // // Compute file size // ULONG64 FileSize; FileSize = fi.nFileSizeHigh; FileSize <<= 32; FileSize |= fi.nFileSizeLow; pPacket = NewPacket(PacketTypeFileData, DATA_PACKET_SIZE); // throwing! // // File size is not changing since we only share reads // while (FileSize) { ULONG BytesRead = 0; if (FileSize < pPacket->PacketSize) { pPacket->PacketSize = (USHORT) FileSize; } bRet = ReadFile(hFile, (PBYTE) (pPacket+1), pPacket->PacketSize, &BytesRead, NULL); if (!bRet) { ASSERT(!BytesRead); hr = HRESULT_FROM_WIN32(GetLastError()); } LEAVE_IF_FAILED("ReadFile (%s) failed, %d outstanding", szPartial, FileSize); // // Send data // hr = SendPacket(pPacket); LEAVE_IF_FAILED("SendPacket (%s) failed, %d outstanding", szPartial, FileSize); FileSize -= BytesRead; } hr = AnnounceEndTransfer(FALSE); LEAVE_IF_FAILED("AnnounceEndTransfer (%s) failed", szPartial); } } catch (std::bad_alloc&) { hr = E_OUTOFMEMORY; } catch (std::exception&) { hr = E_UNEXPECTED; } _Function_Exit: // // Cleanup // if (INVALID_HANDLE_VALUE != hFile) { CloseHandle(hFile); } if (pPacket) { delete [] pPacket; } return hr; }
int main(void) { // don;t want to fire on power up ! P2SEL = 0; P2SEL2 = 0; P3OUT = 0; P2OUT = 0; P3DIR = 0xff; //WDTCTL = WDTPW + WDTHOLD; WDTCTL = WDT_ARST_250; // sET UP aclk BCSCTL3 |= LFXT1S_2; // Set all pins to output to stop floating P1DIR = 0xC0; P2DIR = 0xFF; P3DIR = 0xFF; // device running at 16MHz BCSCTL1= CALBC1_16MHZ; DCOCTL = CALDCO_16MHZ; Green(); bRGBValues[0] = 97; bRGBValues[1] = 97; bRGBValues[2] = 97; bRGBValues[3] = 97; bRGBValues[4] = 97; bRGBValues[5] = 97; LoadConfig(); DoSWPWM(); initXBus(); _EINT(); int i = 0; while (1) { if (NewPacket()) { bLastMessage = 0; ParsePacket(); bRGBValues[0] = RCScale(Channel((RGB1_RED))); bRGBValues[1] = RCScale(Channel((RGB1_GREEN))); bRGBValues[2] = RCScale(Channel((RGB1_BLUE))); bRGBValues[3] = RCScale(Channel((RGB2_RED))); bRGBValues[4] = RCScale(Channel((RGB2_GREEN))); bRGBValues[5] = RCScale(Channel((RGB2_BLUE))); BlackoutCheck(); // check for pyro fire P2OUT &= ~BIT5; P2OUT &= ~BIT4; if (Channel(PYRO1_FIRE) == 0xDE) { P2OUT |= BIT5; } if (Channel(PYRO2_FIRE) == 0xDE) { P2OUT |= BIT4; } if (i) { Red(); i = 0; } else { Green(); i = 1; } } if (bLastMessage > 5000) { bRGBValues[0] = 0xff; bRGBValues[1] = 0; bRGBValues[2] = 0xff; bRGBValues[3] = 0xff; bRGBValues[4] = 0; bRGBValues[5] = 0xff; bLastMessage = 0; Red(); } WDTCTL = WDT_ARST_250; } }