⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcitemnode.cpp

📁 使用器件TI DSP TMS320C5402
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				fpos_t tempos;
				fgetpos(m_fpCurFile, &tempos);
				m_dCurPlay = (double)tempos / 1000;	

				m_byReadLink = ITEM_LINK_NEEDREAD;
			}

			m_iSpeedFlag = 0;
		}
		break;

	case COMM_TYPE_PAUSE:		// Pause control
//		if(byArrt==COMM_ARRT_MENU)
//		{
//			;
//		}
//		else
//		{
			m_iPlayFlag = 0;
//			SendCommToItem(DN_COMM_TYPE_FROOZE, 0);
//		}
		break;
	case COMM_TYPE_PAGE:
		{
			PageTo(byArrt);		
		}
		break;

	case COMM_TYPE_FF:		// FF control
		if(m_byCurType==COMM_ARRT_TXT||m_byCurType==COMM_ARRT_MENU)
		{
			PageDN();
		}
		else
		{
			time(&m_tStartTime);
			m_iSpeedFlag = 1;

		// Clear buffer!
			SendCommToItem(DN_COMM_TYPE_FROOZE, 0);
			SendCommToItem(DN_COMM_TYPE_CLEAR, 0);

		}

		break;

	case COMM_TYPE_FREW:		// Frew control
		if(m_byCurType==COMM_ARRT_TXT||m_byCurType==COMM_ARRT_MENU)
		{
			PageUP();
		}
		else
		{
			time(&m_tStartTime);
			m_iSpeedFlag = -1;

		// Clear buffer!

			SendCommToItem(DN_COMM_TYPE_FROOZE, 0);
			SendCommToItem(DN_COMM_TYPE_CLEAR, 0);
		}
		
		break;

	case COMM_TYPE_SEEK:		// Seek control
		{
			if(m_fpCurFile == NULL)break;
			
			BYTE bySec1 = m_byBuf[4];
			BYTE bySec2 = m_byBuf[5];
			BYTE bySec3 = m_byBuf[6];
			BYTE bySec4 = m_byBuf[7];

			long lskip = bySec1;
			lskip = lskip * 256 + bySec2;			
			long mskip = bySec3;
			mskip = mskip * 256 + bySec4;

			switch(byArrt)
			{
			case COMM_ARRT_MPEG:
				lskip *= NET_DATA_SEEK_MP3;
				mskip *= NET_DATA_SEEK_MP3;
				lskip += mskip / 1000;
				break;
			case COMM_ARRT_PCM:
				lskip *= NET_DATA_SEEK_PCM;
				mskip *= NET_DATA_SEEK_PCM;
				lskip += mskip / 1000;
				break;
			default:
				lskip *= NET_DATA_SEEK_MPEG;
				mskip *= NET_DATA_SEEK_MPEG;
				lskip += mskip / 1000;
				break;
			}
			fseek(m_fpCurFile, lskip, SEEK_SET);
//(((			
			memset(m_pSendBuf2 + NET_DATA_FRAME_HEADLEN, 0, 
				sizeof(BYTE) * NET_DATA_FRAME_LEN * NET_DATA_SEND_FRAMES * NET_DATA_READ_BLOCKS);
			if(m_fpCurFile)
				fread(m_pSendBuf2 + NET_DATA_FRAME_HEADLEN, sizeof(BYTE), 
				NET_DATA_FRAME_LEN * NET_DATA_SEND_FRAMES * NET_DATA_READ_BLOCKS, m_fpCurFile);		
			m_iCurPointer=0;

			SendCommToItem((char)DN_COMM_TYPE_CLEAR, 0);

//)))
			if(m_byReadLink != ITEM_LINK_NONE)
			{
				fpos_t tempos;
				fgetpos(m_fpCurFile, &tempos);
				m_dCurPlay = (double)tempos / 1000;	

				m_byReadLink = ITEM_LINK_NEEDREAD;
			}
		}
		break;

	case COMM_TYPE_RECB:		// Record begin control		


		if(m_fpCurFile != NULL)
		{
			fclose(m_fpCurFile);
			m_fpCurFile = NULL;
		}

		if(m_fpCurLink != NULL)
		{
			fclose(m_fpCurLink);
			m_fpCurLink = NULL;
		}		

		if(m_fpRecFile == NULL)
		{
			sscanf(m_byBuf + 4, "%s", strFileName);
			if(strFileName == "")break;
			m_fpRecFile = fopen(strFileName, "wb");
			if(m_fpRecFile == NULL)break;			
		}
		else
			fseek(m_fpRecFile, 0, SEEK_SET);

		SendCommToItem(DN_COMM_TYPE_RECB, 0);
		break;

	case COMM_TYPE_RECE:		// Record stop control
		SendCommToItem(DN_COMM_TYPE_RECE, 0);

		if(m_fpRecFile != NULL)
		{
			fclose(m_fpRecFile);
			m_fpRecFile = NULL;
		}
		break;

	default:
		break;
	}

	return TRUE;
} 

// Send command to item
BOOL LCItemNode::SendCommToItem(BYTE byCommand, BYTE byParam)
{
	SOCKADDR_IN		socRemote;
	socRemote.sin_family = AF_INET;
	socRemote.sin_addr.s_addr = inet_addr(strIP.GetBuffer(strIP.GetLength()));
	socRemote.sin_port = htons(NET_REMOTE_DATA_PORT);

	BYTE pCommand[20];
	memset(pCommand, 0, sizeof(BYTE) * 20);
	pCommand[0] = byCommand;
	pCommand[1] = byParam;
	int err = sendto(m_soSend, (char*)pCommand, 20,
		0, (PSOCKADDR)&socRemote, sizeof(socRemote));
	if ( err == SOCKET_ERROR)
	{
		AfxMessageBox("Send Data failed!");
		return FALSE;
	}
	//TRACE("\nSend a frame to %s : %d, Command: %d", strIP, uPort, byCommand);
	
	return TRUE;
}

// Send some data to item

BOOL LCItemNode::SendDataToItem()
{
	PBYTE pPointer;
	int ct,i;
	switch(m_byComm)
	{
	case DN_COMM_TYPE_MENU:		// Menu data
//		if(m_iMenuMode==MENU_MODE_TXT)
		if(m_iMenuMode==MENU_MODE_AUDIO)
		{
			if(m_bFileEnd)return TRUE;
			if(m_iSpeedFlag != 0)return TRUE;
			if(m_iCurPointer > 0 && m_iCurPointer < NET_DATA_READ_BLOCKS)
			{
				pPointer = m_pSendBuf1 + m_iCurPointer * NET_DATA_FRAME_LEN * NET_DATA_SEND_FRAMES;
				m_iCurPointer++;
			}
			else
			{
				pPointer = m_pSendBuf2;
				m_pSendBuf2 = m_pSendBuf1;
				m_pSendBuf1 = pPointer;
				m_iCurPointer = 1;
		
				if(!PostThreadMessage(m_dwReadThreadID, SOCKET_READ_FILE, (WPARAM)m_iThisNumber, (LPARAM)0))
				TRACE("\n Can't Post Message to %d !!!!!!", m_dwReadThreadID);		
			}
		}
		pPointer = m_sendbufMenu + m_uMenuPointer - NET_DATA_FRAME_HEADLEN;
		
		break;

	case DN_COMM_TYPE_DATA:		// Media data
	case DN_COMM_TYPE_MENUA:
		if(m_bFileEnd)return TRUE;
//?try ff
	//if(m_iSpeedFlag != 0)return TRUE;
		ct=1;
		if(m_iSpeedFlag == 1)ct=3;
		if(m_iSpeedFlag == -1)ct=0;
		for(i=0;i<ct;i++)
		{
		if(m_iCurPointer > 0 && m_iCurPointer < NET_DATA_READ_BLOCKS)
		{
			pPointer = m_pSendBuf1 + m_iCurPointer * NET_DATA_FRAME_LEN * NET_DATA_SEND_FRAMES;
			m_iCurPointer++;
		}
		else
		{
			pPointer = m_pSendBuf2;
			m_pSendBuf2 = m_pSendBuf1;
			m_pSendBuf1 = pPointer;
			m_iCurPointer = 1;
		
			if(!PostThreadMessage(m_dwReadThreadID, SOCKET_READ_FILE, (WPARAM)m_iThisNumber, (LPARAM)0))
				TRACE("\n Can't Post Message to %d !!!!!!", m_dwReadThreadID);		
		}
		}
		break;

	case DN_COMM_TYPE_MIX:		// Mix data
		if(m_bFileEnd)return TRUE;

		if(m_bNeedPCMStart)
		{
			SendCommToItem(DN_COMM_TYPE_START, 0);
			m_bNeedPCMStart = FALSE;
		}

		//if(m_iSpeedFlag != 0)
		//{
		//	if(!PostThreadMessage(m_dwReadThreadID, SOCKET_READ_FILE, (WPARAM)m_iThisNumber, (LPARAM)0))
		//		TRACE("\n Can't Post Message to %d !!!!!!", m_dwReadThreadID);			
		//	return TRUE;
		//}

		// Post message
		if(m_byReadLink == ITEM_LINK_HAVEREAD)	// Maybe we need send images.
		{
			double dbTempLink = m_iCurLink[1];
			dbTempLink = dbTempLink / 1000 + m_iCurLink[0];
			dbTempLink *= 21.6;//dbTempLink为当前文本页时间
			if(dbTempLink < m_dCurPlay)//发送文本数据
			{
				pPointer = m_sendbufMenu + m_uMenuPointer - NET_DATA_FRAME_HEADLEN;
				m_byReadLink = ITEM_LINK_BEGINSND;
				m_byType = DN_COMM_WORD_MPEG;				
			}
			else//继续发送音频
			{
				if(m_iCurPointer > 0 && m_iCurPointer < NET_DATA_READ_BLOCKS)
				{
					pPointer = m_pSendBuf1 + m_iCurPointer * NET_DATA_FRAME_LEN * NET_DATA_SEND_FRAMES;
					m_iCurPointer++;
				}
				else
				{
					pPointer = m_pSendBuf2;
					m_pSendBuf2 = m_pSendBuf1;
					m_pSendBuf1 = pPointer;
					m_iCurPointer = 1;
				
					if(!PostThreadMessage(m_dwReadThreadID, SOCKET_READ_FILE, (WPARAM)m_iThisNumber, (LPARAM)0))
						TRACE("\n Can't Post Message to %d !!!!!!", m_dwReadThreadID);		
				}				
			}
		}
		else if(m_byReadLink == ITEM_LINK_BEGINSND)
		{
			pPointer = m_sendbufMenu + m_uMenuPointer - NET_DATA_FRAME_HEADLEN;		
		}
		else
		{
			if(m_iCurPointer > 0 && m_iCurPointer < NET_DATA_READ_BLOCKS)
			{
				pPointer = m_pSendBuf1 + m_iCurPointer * NET_DATA_FRAME_LEN * NET_DATA_SEND_FRAMES;
				m_iCurPointer++;
			}
			else
			{
				pPointer = m_pSendBuf2;
				m_pSendBuf2 = m_pSendBuf1;
				m_pSendBuf1 = pPointer;
				m_iCurPointer = 1;
			
				if(!PostThreadMessage(m_dwReadThreadID, SOCKET_READ_FILE, (WPARAM)m_iThisNumber, (LPARAM)0))
					TRACE("\n Can't Post Message to %d !!!!!!", m_dwReadThreadID);		
			}			
		}				
		break;

	default:
		return FALSE;
		break;
	}

//? try ff
		if(m_iSpeedFlag != 0)return TRUE;


	SOCKADDR_IN		socRemote,socBC;
	socRemote.sin_family = AF_INET;
	socRemote.sin_addr.s_addr = inet_addr(strIP.GetBuffer(strIP.GetLength()));
	socRemote.sin_port = htons(NET_REMOTE_DATA_PORT);

	CString strIPBC;
	strIPBC.Format("192.168.1.255");

	socBC.sin_family = AF_INET;
	socBC.sin_addr.s_addr = inet_addr(strIPBC.GetBuffer(strIPBC.GetLength()));
	socBC.sin_port = htons(NET_REMOTE_DATA_PORT);

	// Send some frames
	int iRealSendFrame = NET_DATA_SEND_FRAMES;
	if((m_byComm == DN_COMM_TYPE_MENU &&m_iMenuMode==MENU_MODE_TXT)|| m_byReadLink == ITEM_LINK_BEGINSND)		// Menu data
		iRealSendFrame = 1;
	UINT iRealMaxFrame = 0;
	for(i = 0; i < iRealSendFrame; i++, pPointer += NET_DATA_FRAME_LEN)
	{
		if(m_byReadLink == ITEM_LINK_BEGINSND)
		{
			m_uMenuPointer += NET_DATA_FRAME_LEN;
			m_uMenuFrames ++;
			if(m_uMenuFrames > iRealMaxFrame)
			{
				m_byReadLink = ITEM_LINK_NEEDREAD;
				m_byType = DN_COMM_WORD_PCM;
				m_bNeedPCMStart = TRUE;
				SendCommToItem(DN_COMM_TYPE_SWITCH, 0);
				return TRUE;
			}
			if(m_uMenuPointer > BMP_MAX_SANQU * 4 * 2352)
			{
				m_uMenuPointer = NET_DATA_FRAME_HEADLEN;
				return TRUE;
			}
		}
		else if(m_byComm == DN_COMM_TYPE_MENU)// Menu data
		{
			if(m_iMenuMode==MENU_MODE_TXT)
			{
				m_uMenuPointer += NET_DATA_FRAME_LEN;
				m_uMenuFrames ++;
				if(m_uMenuFrames >=iRealMaxFrame)
				{
					if(m_fpCurFile)
	//				m_iMenuMode=MENU_MODE_AUDIO;
					m_byComm=DN_COMM_TYPE_MENUA;
					if(m_fpCurFile)
					SendCommToItem(DN_COMM_TYPE_SWITCH, 0);

					return TRUE;
				}
				if(m_uMenuPointer > BMP_MAX_SANQU * 4 * 2352)
				{
					m_uMenuPointer = NET_DATA_FRAME_HEADLEN;
	//				if(m_fpCurFile)
	//				m_iMenuMode=MENU_MODE_AUDIO;
	//				m_byComm=DN_COMM_TYPE_MENUA;
	//				SendCommToItem(DN_COMM_TYPE_SWITCH, 0);
					return TRUE;
				}			
			}
			else if(m_iMenuMode==MENU_MODE_AUDIO)
			{
				;
			}
		}		
		else if(m_byReadLink == ITEM_LINK_HAVEREAD)
		{
			double dbTmep = NET_DATA_FRAME_LEN;
			m_dCurPlay += dbTmep / 1000;					
		}
		
		pPointer[0] = m_byComm;
		pPointer[1] = m_byType;
		pPointer[2] = m_byPara[0];
		pPointer[3] = m_byPara[1];

//		if(m_iMenuMode==MENU_MODE_AUDIO||m_byComm==DN_COMM_TYPE_MENUA)
		if(m_byComm==DN_COMM_TYPE_MENUA)
		{
			pPointer[0]=DN_COMM_TYPE_DATA;
			pPointer[1] =DN_COMM_WORD_PCM;
		}

		int err;
		if(m_iBC)
		{
			err = sendto(m_soSend, (char*)pPointer, NET_DATA_FRAME_LEN + NET_DATA_FRAME_HEADLEN,
			0, (PSOCKADDR)&socBC, sizeof(socBC));
		}
		else
		{
			err = sendto(m_soSend, (char*)pPointer, NET_DATA_FRAME_LEN + NET_DATA_FRAME_HEADLEN,
			0, (PSOCKADDR)&socRemote, sizeof(socRemote));
		}
		if ( err == SOCKET_ERROR)
		{
			AfxMessageBox("Send Data failed!");
			return FALSE;
		}						
		//TRACE("Command = %d, type = %d, Frames = %d\n", m_byComm, m_byType, m_uMenuFrames);
	}
	
	return TRUE;
}

// Page changed
BOOL LCItemNode::ChangeMenuPage(UINT uLevel, UINT uPage)
{
//	return 0;
	//?
//	if(strIP!="192.168.1.65"&&strIP!="192.168.1.1"&&strIP!="192.168.1.2"&&strIP!="192.168.1.3"&&strIP!="192.168.1.4")return 0;
	SendCommToItem(COMM_TYPE_IMG,0);

	try
	{
		CFile file("c:\\main.rst",CFile::modeRead);
	DWORD len=file.GetLength()+1000;

	char* buffer=new char[len];

	char SendBuffer[NET_DATA_DATA_LEN];
	memset(SendBuffer,0,sizeof(char)*NET_DATA_DATA_LEN);

	file.ReadHuge(buffer,len);


//	for(int j=0;j<2;j++)
	for(int i=0;i<43;i++)
	{
		SendBuffer[0]=(char)0x83;
		SendBuffer[1]=1;
		SendBuffer[2]=i;
		memcpy(&SendBuffer[4],buffer+28+i*NET_DATA_FRAME_LEN,NET_DATA_FRAME_LEN);
		SendData((BYTE*)SendBuffer,NET_DATA_DATA_LEN,strIP,9802);
			if(i%10==0)
				Sleep(1);
	}
	delete buffer;
	}
	catch(...)
	{
		return 0;
	}

}


int LCItemNode::PageUP()
{
	if(m_iCurPage>0)
	{
		m_iCurPage--;
		m_byReadLink=ITEM_LINK_SET;
		ShowMenuPage(m_iCurPage);
	}
	
	return 1;
}

int LCItemNode::PageDN()
{
//	if(m_iCurPage>=0)
	{
		m_iCurPage++;
//		m_byReadLink=ITEM_LINK_SET;
		ShowMenuPage(m_iCurPage);
	}
	return 1;
}

int LCItemNode::ShowMenuPage(int iPage)
{
//?
//	if(strIP!="192.168.1.65"&&strIP!="192.168.1.1"&&strIP!="192.168.1.2"&&strIP!="192.168.1.3"&&strIP!="192.168.1.4")return 0;
	if(m_iBC!=1)
		SendCommToItem(COMM_TYPE_IMG,0);
	else
	{
		CString strIPold=strIP;
		strIP=STR_IP_BRORDCAST;
		SendCommToItem(COMM_TYPE_IMG,0);
		strIP=strIPold;		
	}

	m_iPlayFlag=0;
	if(m_fpCurLink != NULL)
	{
		if(fseek(m_fpCurLink, 28+(sizeof(int)*2+BMP_MAX_SANQU * 2352)*iPage, SEEK_SET))
		{
			m_iPlayFlag=1;
			return 0;
		}

		char* buffer=new char[BMP_MAX_SANQU * 2352+1000];
		fread(buffer, sizeof(BYTE), BMP_MAX_SANQU * 2352,m_fpCurLink);		
		m_iCurPage=iPage;

		char SendBuffer[NET_DATA_DATA_LEN];
		memset(SendBuffer,0,sizeof(char)*NET_DATA_DATA_LEN);
	//	Sleep(100);
		SendBuffer[0]=(char)0x83;
		SendBuffer[1]=1;
		for(int i=0;i<43;i++)
		{
			SendBuffer[2]=i;
			memcpy(&SendBuffer[4],buffer+i*NET_DATA_FRAME_LEN,NET_DATA_FRAME_LEN);
			if(m_iBC!=1)
				SendData((BYTE*)SendBuffer,NET_DATA_DATA_LEN,strIP,9802);
			else
				SendData((BYTE*)SendBuffer,NET_DATA_DATA_LEN,STR_IP_BRORDCAST,9802);

			if(i%5==0)
				Sleep(2);
		}
		delete buffer;
		m_iMenuMode=MENU_MODE_AUDIO;
	}
	Sleep(200);
	m_iPlayFlag=1;
	return 1;

}

int LCItemNode::PageTo(int iPage)
{
	m_iCurPage=iPage;
	ShowMenuPage(m_iCurPage);
	return 1;
}


int LCItemNode::SendData(BYTE* buffer, int len, CString strIP, UINT port)
{
	SOCKADDR_IN		socRemote;
	socRemote.sin_family = AF_INET;
	socRemote.sin_addr.s_addr = inet_addr(strIP.GetBuffer(strIP.GetLength()));
	socRemote.sin_port = htons(port);

	int err = sendto(m_soSend, (char*)buffer,len,
			0, (PSOCKADDR)&socRemote, sizeof(socRemote));
		if ( err == SOCKET_ERROR)
		{
			AfxMessageBox("Send Data failed!");
			return 0;
		}						
	return 1;
}



void LCItemNode::test1()
{
	if(strIP!="192.168.1.65")return;
		CFile file("c:\\main.rst",CFile::modeRead);
	DWORD len=file.GetLength()+1000;


	char* buffer=new char[len];

	char SendBuffer[NET_DATA_DATA_LEN];
	memset(SendBuffer,0,sizeof(char)*NET_DATA_DATA_LEN);

	file.Read(buffer,20*2352);

	Sleep(100);

	SendCommToItem(COMM_TYPE_IMG,0);

	SendBuffer[0]=(char)0x83;
	SendBuffer[1]=1;

//	for(int j=0;j<4;j++)
	for(int i=0;i<43;i++)
	{
		SendBuffer[2]=i;
		memcpy(&SendBuffer[4],buffer+28+i*NET_DATA_FRAME_LEN,NET_DATA_FRAME_LEN);
		SendData((BYTE*)SendBuffer,NET_DATA_DATA_LEN,strIP,9802);
	}
	delete buffer;
} 

LCItemNode::test2()
{
	if(strIP!="192.168.1.65")return 1;
		CFile file("c:\\main1.rst",CFile::modeRead);
	DWORD len=file.GetLength()+1000;

	char* buffer=new char[len];

	char SendBuffer[NET_DATA_DATA_LEN];
	memset(SendBuffer,0,sizeof(char)*NET_DATA_DATA_LEN);

	file.ReadHuge(buffer,len);

	SendCommToItem(COMM_TYPE_IMG,0);

	SendBuffer[0]=(char)0x83;
	SendBuffer[1]=1;

	for(int i=0;i<43;i++)
	{
		SendBuffer[2]=i;
		memcpy(&SendBuffer[4],buffer+28+i*NET_DATA_FRAME_LEN,NET_DATA_FRAME_LEN);
		SendData((BYTE*)SendBuffer,NET_DATA_DATA_LEN,strIP,9802);

	}

	delete buffer;
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -