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

📄 filesenddlg.cpp

📁 一个采用VC编写的
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// filesendDlg.cpp : implementation file
//

#include "stdafx.h"
#include "filesend.h"
#include "filesendDlg.h"
#include "bst_api.h"
#include	"UclDlg.h"

#define MAX_FILE_NUM 32	
#define L 175							//出去头文件头信息 剩余175字节
#define cardnumber 0					//发送卡卡号
#define frame 188						//定义小包格式为188
#define senddatalength   24064			//188*32*4  定义一次要发送24064字节的包

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

char buffer[188]={""};					//存取文件内容和头内容
char pbuffer[senddatalength]={""};		//大包

int ts_sendpacket=0;				//定义发送了好多包;
int ts_packettotal=0;				//初始化总包数为0;

UINT position=0;								//定义一个变量来与大包24064之间的比较 循环封装大包
int i=0;								//定义这个变量用来在循环发送中检测文件是否不够用到					
BOOL stop=FALSE;
long int yijingfasong=0;
//////////////////////////////////////////////////////////////////////
BYTE ts_top=0x47;						// 定义同步字节为0X47
BYTE ts_hiPID=0x00;						//PID号前面的四位为0;
BYTE ts_PID=0x55;						//PID号 为0X55	
BYTE ts_count[MAX_FILE_NUM];						//计数器的初始值为0到16
//BYTE count=0x10;

FILE *m_pSourceFile;	
int file_num=0;							//在程序中将获取文件的个数
float rate;								//定义发送卡的速率
CString filename[MAX_FILE_NUM];	
BYTE fileid[MAX_FILE_NUM];
int num=0;
int totalpacket[MAX_FILE_NUM];		//用来装每个文件的总包数

	CString m_packetsend;
	char ch1[10],ch2[10];	
	char ch3[10];

UINT filefasong(LPVOID param)
{		
		int temp;
		for(temp=0;temp<file_num;temp++)
		{
			ts_count[temp]=0x10;
		}
		if((m_pSourceFile=fopen(filename[0],"rb"))==NULL)
		{
			AfxMessageBox("文件无法打开");
			return 0;
		}
		::PostMessage((HWND)param,WM_totalpacket,0,0);//计算总包数
		/*CString  m_str="";
		char ch4[10];
		_itoa(totalpacket[num+1],ch4,10);
		m_str+=ch4;
		AfxMessageBox(m_str);*/
		if(bst_init(cardnumber)!=0)  //0成功 负数 失败     
		{	
			::PostMessage((HWND)param,WM_cardinitfail,0,0);
			return 0;
		}
		::PostMessage((HWND)param,WM_cardinitsuccess,0,0);
		if(bst_start_transmit(rate,frame,cardnumber)!=0) //返回值:0表示成功.负数表示失败.
		{   	
			::PostMessage((HWND)param,WM_cardtraminit,0,0);
			return 0;
		}
		///上面的就是对发送卡的初始化
	while(1)
	{
        while(position<senddatalength)
		{		//ts_count[num]=count;
				memcpy(buffer,&ts_top,1);   //把同步字节放在BUFFER的第1个字节中
				memcpy(buffer+1,&ts_hiPID,1);   //把PID字节放在BUFFER的第2个字节中
				memcpy(buffer+2,&ts_PID,1);   //把PID字节放在BUFFER的第3个字节中
				memcpy(buffer+4,&fileid[num],1);   //把文件标识放在第5的一个字节中 占一个
				memcpy(buffer+5,&totalpacket[num],4);//把总包数放在BUFFER的第6,7,8,9个字节中,占4个字节
				memcpy(buffer+3,&ts_count[num],1);   //把计数放在BUFFER的第4个字节中,占1个字节
				ts_count[num]++;
				if(ts_count[num]>0x1f)
					{
						count=0x10;
					}
				
				memcpy(buffer+9,&ts_sendpacket,4);  //把发送包数放在BUFFER的第10,11,12,13个字节中,占4个字节
				ts_sendpacket++;
				for(i=13;i<frame && !feof(m_pSourceFile);i++)
					buffer[i]=fgetc(m_pSourceFile);//把数据放入buffer中
				while(i<frame)					//若文件不够188字节就全部添为0
					{
						buffer[i]=0;
						i++;
					}		
				memcpy(&pbuffer[position],buffer,188);      //丢到大包里
				position=position+frame;

				if(feof(m_pSourceFile))//如果检测到文件已经结束(已经发送完)
				{
					if(m_pSourceFile)//如果源文件还处于打开状态
					{
						fclose(m_pSourceFile);//关闭filename[num-1]的文件
					}						
					ts_sendpacket=0;			
					num++;
					if(num==file_num)
					{
						num=0;
					}
					if((m_pSourceFile=fopen(filename[num],"rb"))==NULL)
					{
						AfxMessageBox("文件无法打开");
						return 0;
					}
				}
				if(stop)
				{
				::PostMessage((HWND)param,WM_cardend,0,0);//发送卡接结束
				if(m_pSourceFile)//如果源文件还处于打开状态
					 {
						fclose(m_pSourceFile);//关闭源文件
					 }	
					stop=FALSE;
					num=0;
					return 0;
				 }

		}
		
		int	fasong=bst_transmit(&pbuffer,senddatalength,cardnumber);
		yijingfasong+=fasong;
	
		if(fasong<=0)											// 返回多少字节是成功 负数失败
		{	
			::PostMessage((HWND)param,WM_cardtranmitfail,0,0);	//发送卡发送
			return 0;
		}	
			::Sleep(50);
			//::PostMessage((HWND)param,WM_pbufferwrite,0,0);//写到文件里面去
			::PostMessage((HWND)param,WM_sendpacket,0,0);
			
			//::PostMessage((HWND)param,WM_cardtranmitsuccess,0,0);//发送卡发送
			position=0;
			
		}
		
   return 0;

}
class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFilesendDlg dialog

CFilesendDlg::CFilesendDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CFilesendDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFilesendDlg)
	m_filename = _T("");
	m_rate = 6875000.0f;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CFilesendDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFilesendDlg)
	DDX_Control(pDX, IDC_BEIZHU, m_beizhu);
	DDX_Control(pDX, IDC_FILELIST, m_filelist);
	DDX_Control(pDX, IDC_BTSTOP, m_stop);
	DDX_Control(pDX, IDC_BTSEND, m_send);
	DDX_Text(pDX, IDC_FILENAME, m_filename);
	DDX_Text(pDX, IDC_RATE, m_rate);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CFilesendDlg, CDialog)
	//{{AFX_MSG_MAP(CFilesendDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BTLIULAN, OnBtliulan)
	ON_BN_CLICKED(IDC_BTLISTADD, OnBtlistadd)
	ON_BN_CLICKED(IDC_BTLISTDELETE, OnBtlistdelete)
	ON_BN_CLICKED(IDC_BTSEND, OnBtsend)
	ON_BN_CLICKED(IDC_BTSTOP, OnBtstop)
	ON_BN_CLICKED(IDC_BTUCLINFO, OnBtuclinfo)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_totalpacket,filetotalpacket)//求总包数函数的消息映射
	ON_MESSAGE(WM_sendpacket,filesendpacket)

	ON_MESSAGE(WM_cardinitfail,cardinitfail)
	ON_MESSAGE(WM_cardinitsuccess,cardinitsuccess)  //发送卡初始化函数的消息映射

	ON_MESSAGE(WM_cardend,cardend)           //发送卡结束函数的消息映射
	ON_MESSAGE(WM_cardtraminit,cardtraminit)	//发送发送前初始化的消息映射

	ON_MESSAGE(WM_cardtranmitfail,cardtranmitfail)
//	ON_MESSAGE(WM_cardtranmitsuccess,cardtranmitsuccess)//发送卡发送成功与失败的消息映射

	//ON_MESSAGE(WM_pbufferwrite,pbufferwrite)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFilesendDlg message handlers

BOOL CFilesendDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);

⌨️ 快捷键说明

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