📄 lcitemnode.cpp
字号:
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 + -