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

📄 ccd_commcenter.c

📁 串口传输文件device端实例
💻 C
📖 第 1 页 / 共 3 页
字号:
 /*************************************************************************/
/*                                                                       */
/*   Copyright (c) 1993-2002 YULONG COMPUTER                             */
/*                           TELECOMMUNICATION SCIENTIFIC CO.,LTD.       */
/*           宇龙计算机通信科技(深圳)有限公司  版权所有 1993-2002        */
/* PROPRIETARY RIGHTS of eWayCyber Technologies are involved in the      */
/* subject matter of this material.  All manufacturing, reproduction,    */
/* use, and sales rights pertaining to this subject matter are governed  */
/* by the license agreement.  The recipient of this software implicitly  */
/* accepts the terms of the license.                                     */
/* 本软件文档资料是宇龙计算机通信科技(深圳)有限公司的资产,任何人士阅读和 */
/* 使用本资料必须获得相应的书面授权,承担保密责任和接受相应的法律约束.    */
/*                                                                       */
/*************************************************************************/


//===========================================================================
//	                                                                        
//  Product    : YuLong PDA application Example for EOS                      
//  Module     : RecvFile.c                                                 
//  Version    : 1.00                                                      
//                                                                           
//---------------------------------------------------------------------------
//                                                                           
//  Description : 应用程序的基本例子            
//                                     
//---------------------------------------------------------------------------
//                                                                           
//  Author         :                        
//  developed on   :                                            
//                                                                           
//===========================================================================
#include "config.h" 
#ifdef _MNT_
#include "noatom.h"
#endif

//* some standard include files
#include "eosgui.h" 

#ifndef _MNT_
#include "Eos_Uart.h"
#endif

#ifdef _MNT_
#include "socket.h"
#else
#include "socket\pda_socket.h"
#endif

//* some standard include files
#include "nucleus.h"
#include "guisys.h" 

#include "AppReg.h"

#ifdef _MNT_
#include "Eos_Uart.h"
#endif

#include "stdio.h"
#include "fs.h"
#include "hwdev.h"

#include "AT_Messages.h"
#ifdef _MNT_
    #include "sys_misc.h"
#endif
#include "TerminalInfo.h"

#include "..\\imagetoolkit\\imagetools.h"

#include ".\\res\\Comm_h.h" 
#include ".\\res\\Comm_def.h" 
#include ".\\res\\Comm_C.h" 

#include "CRC.h"
#include "CCD_CommCenter.h"


WinHandle g__winP = NULL;


////////////////////////////////////////////////////////////////////////////////////////////
static Char *CommCenter__ErrText[] = //串口文件传输错误信息
{
		(Char *)" 正确接收",							//0x00000000
		(Char *)" 串口发生错误",						//0x00000001
		(Char *)" 报头错误",							//0x00000002
		(Char *)" 报文CRC校验错误",						//0x00000003
		(Char *)" 文件传输顺序错误",					//0x00000004
		(Char *)" 打开或创建文件错误",					//0x00000005
		(Char *)" 文件错误",							//0x00000006
		(Char *)" 其它错误",							//0x00000007
};


static const ResourceRegisterEntry ResRegList_CommCenterApp[] = 
{	
    FORM_RESOURCE_DEFINE
    MENU_RESOURCE_DEFINE
    ALERT_RESOURCE_DEFINE
    BITMAP_RESOURCE_DEFINE
};

const AppResourceEntry CCD_CommCenterAppResourceEntry = 
{
     (void *)ResRegList_CommCenterApp, // res list in this app
     sizeof(ResRegList_CommCenterApp)/sizeof(ResourceRegisterEntry), //number of item in res
	 0,         // 普通图标ID
     0,         // 按下时的图标ID
     0,         // 有焦点时的图标ID
	 0,         // 组ID,表明应用所属的组,0表示放在主桌面上
    -1,         // 应用在组内的Index,这个Index确定应用的图标在窗口内的行列位置,-1表示不指定
    "串口下载", // 应用的简要描述(相当于用户看到的应用名字)
};
//////////////////////////////////////////////////////////////////////////////////////////


//加入报头
static void CommCenter_AddHeadPacket(Char *pszPacketHead, Int16 nTAG, Char cFC, Char cPC, Int32 cSEQ, Int32 clen)
{
/*	CommCenter_PACKETHEADType *pHead = (CommCenter_PACKETHEADType *)pszPacketHead;

	MemSet(pHead, 0, sizeof(CommCenter_PACKETHEADType));

	pHead->cTAG		 = CommCenter_htons(nTAG);	
	pHead->cVersion1 = 0x01;
	pHead->cVersion2 = 0x01;
	pHead->cFC       = cFC;
	pHead->cPC       = cPC;
	pHead->cSIGN	 = 0x00000000;
	pHead->cSEQ	  	 = CommCenter_htonl(cSEQ);
	pHead->clen      = CommCenter_htonl(clen);
	pHead->cCRC      = CommCenter_htons( Get_CRC16(pszPacketHead, sizeof(CommCenter_PACKETHEADType) + clen) ); */


	CommCenter_PACKETHEADType *pHead = (CommCenter_PACKETHEADType *)pszPacketHead;

	MemSet(pHead, 0, sizeof(CommCenter_PACKETHEADType)); 

	pHead->cTAG		 = CommCenter_htons(nTAG);
	pHead->cVersion1 = 0x01;
	pHead->cVersion2 = 0x01;
	pHead->cFC       = cFC;
	pHead->cPC       = cPC;
	pHead->cSIGN	 = 0x00000000;
	pHead->cSEQ	  	 = CommCenter_htonl(cSEQ);
	pHead->clen      = CommCenter_htonl(clen);
	pHead->cCRC      = CommCenter_htonl( Get_CRC16(pszPacketHead, sizeof(CommCenter_PACKETHEADType) + clen) );
}


//封装准备接收文件响应DATA(ESN、SIM)报文
Int32	CommCenter_RspSendFileEvent(CommCenter_DEMOGVRType *CommCenterVar)
{
	Int32 ESNlen, SIMlen;
	Char  szINT[4], szSIM[50 + 1], szESN[50 + 1], *pszPotPtr, szRspPtr[sizeof(CommCenter_PACKETHEADType) + sizeof(UInt32)+50 + sizeof(UInt32)+50 + 10];


	MemSet(szESN, 0, sizeof(szESN));
	MemSet(szSIM, 0, sizeof(szSIM));

	Sys_GetElecSeqNo(szESN); 
	
	ESNlen = StrLen(szESN);
	szINT[0] = (Char)((ESNlen&0xff000000)>>24);
	szINT[1] = (Char)((ESNlen&0x00ff0000)>>16);
	szINT[2] = (Char)((ESNlen&0x0000ff00)>> 8);
	szINT[3] = (Char)((ESNlen&0x000000ff));

	pszPotPtr = szRspPtr + sizeof(CommCenter_PACKETHEADType);
	MemCopy(pszPotPtr+0, szINT, 4);	
	MemCopy(pszPotPtr+4, szESN, ESNlen);


	StrCopy(szSIM, CC_GetCCID()); //for 828/858

	SIMlen = StrLen(szSIM);
	szINT[0] = (Char)((SIMlen&0xff000000)>>24);
	szINT[1] = (Char)((SIMlen&0x00ff0000)>>16);
	szINT[2] = (Char)((SIMlen&0x0000ff00)>> 8);
	szINT[3] = (Char)((SIMlen&0x000000ff));

	pszPotPtr = szRspPtr + sizeof(CommCenter_PACKETHEADType) + sizeof(UInt32) + ESNlen;
	MemCopy(pszPotPtr+0, szINT, 4);	
	MemCopy(pszPotPtr+4, szSIM, SIMlen);

	CommCenter_AddHeadPacket(szRspPtr, (Int16)0xfff0, 0x07, 0x01, 0, sizeof(UInt32)+ESNlen + sizeof(UInt32)+SIMlen);

	return Write(CommCenterVar->comId, szRspPtr, sizeof(CommCenter_PACKETHEADType) + sizeof(UInt32)+ESNlen + sizeof(UInt32)+SIMlen);
}


//封装错误汇报响应DATA(code, 错误详细信息)	  
static Int32 CommCenter_Creat_RspError(CommCenter_DEMOGVRType *CommCenterVar, Char *RspBufferPtr, Int32 ErrorCode, Char *pszErrDesc, Int32 cSEQ)
{
	CommCenter_DWSTRINGInfo *pWdInfo = (CommCenter_DWSTRINGInfo *)(RspBufferPtr + sizeof(CommCenter_PACKETHEADType));

	pWdInfo->nlen = CommCenter_htonl(ErrorCode);
	sprintf((char *)pWdInfo->szData, (char *)"文件%s:%s", CommCenterVar->fcb.Path, pszErrDesc);
		
	CommCenter_AddHeadPacket(RspBufferPtr, (Int16)0xfff0, 0x01, 0x01, cSEQ, sizeof(Int32) + StrLen(pWdInfo->szData));
//	CommCenter_AddHeadPacket(RspBufferPtr, (Int16)0xfff0, 0x01, 0x01, cSEQ, sizeof(Int32));

#ifdef debug_modul
	EOS_Write(CommCenterVar->deBugfp, (Char *)"==== 错误汇报 ==== \n", StrLen((Char *)"==== 错误汇报 ==== \n"));
//	EOS_Write(CommCenterVar->deBugfp, RspBufferPtr, sizeof(CommCenter_PACKETHEADType) + sizeof(UInt32) + StrLen(pWdInfo->szData));
	EOS_Write(CommCenterVar->deBugfp, RspBufferPtr, sizeof(CommCenter_PACKETHEADType) + sizeof(UInt32));
#endif

	return sizeof(CommCenter_PACKETHEADType) + sizeof(pWdInfo->nlen) + StrLen(pWdInfo->szData);
//	return sizeof(CommCenter_PACKETHEADType) + sizeof(pWdInfo->nlen);
}

Int32 CommCenter_ntohl(Int32 x)
{
	Char szNet[4];
	
	szNet[0] = (Char)((x&0xff000000)>>24);
	szNet[1] = (Char)((x&0x00ff0000)>>16);
	szNet[2] = (Char)((x&0x0000ff00)>> 8);
	szNet[3] = (Char)((x&0x000000ff));

	return *((Int32 *)szNet);
}

Int16 CommCenter_ntohs(Int16 x)
{
	Char szNet[2];
	
	szNet[0] = (Char)((x&0xff00)>> 8);
	szNet[1] = (Char)((x&0x00ff));
	
	return *((Int16 *)szNet);
}

Int32 CommCenter_htonl(Int32 x)
{
	Char szNet[4];
	
	szNet[0] = (Char)((x&0xff000000)>>24);
	szNet[1] = (Char)((x&0x00ff0000)>>16);
	szNet[2] = (Char)((x&0x0000ff00)>> 8);
	szNet[3] = (Char)((x&0x000000ff));
	
	return *((Int32 *)szNet);
}

Int16 CommCenter_htons(Int16 x)
{
	Char szNet[2];
	
	szNet[0] = (Char)((x&0xff00)>> 8);
	szNet[1] = (Char)((x&0x00ff));

	return *((Int16 *)szNet);
}

Int32 CommCenter_strtol(Char *pdata)
{
	Char szInt[4];

	MemCopy(szInt, pdata, 4);

	return (*((Int32 *)(szInt)));
}

Int16 CommCenter_strtos(Char *pdata)
{
	Char szInt[2];

	MemCopy(szInt, pdata, 2);

	return (*((Int16 *)(szInt)));
}


//打开并初始化串口
Boolean CommCenter_OpenInitCom( CommCenter_DEMOGVRType *CommCenterVar)
{
//	Handle fd = -1;
	DCB    dcb;
//	Char   szInfo[256 + 1], *pszInfo1 = szInfo, *pszInfo2 = NULL;
	Int32  BaudRate = CBR_115200, comId = DRIVER_UART2_ID; //for 828/858
//	Int32  BaudRate = CBR_115200, comId = DRIVER_UART1_ID; //for 688
	

/*	fd = EOS_Open((Char *)"C:\\COMM.CFG", PO_RDONLY, PS_IREAD);
	if(0 > fd) {
		fd = EOS_Open((Char *)"C:\\COMM.CFG", PO_CREAT|PO_TRUNC|PO_BINARY|PO_RDWR, PS_IWRITE|PS_IREAD);
		if(0 <= fd) {
			sprintf((char *)szInfo, (char *)"%d %d", comId, BaudRate);
			EOS_Write(fd, szInfo, StrLen(szInfo));
			EOS_Close(fd);
		}
	} else {
		MemSet(szInfo, 0, sizeof(szInfo));
		EOS_Read(fd, szInfo, 256);
		pszInfo2 = StrChr(pszInfo1, ' ');
		comId = StrAToI(pszInfo1); BaudRate = StrAToI(pszInfo2+1);
		EOS_Close(fd);
	} */

	if(0 <= CommCenterVar->comId) {
		Close(CommCenterVar->comId);
		CommCenterVar->comId = -1;	
	}
	
//	CommCenterVar->comId = CreateFile((Int16)comId, 0, 0); //for 688 
	CommCenterVar->comId = CreateFile(comId, 0, 0); //for 828/858
	if(0 > CommCenterVar->comId) {
		//发送消息到串口通信界面,显示日志记录
		WinShowSystemPromptDialog(0, (Char *)"文件下载", (Char*)"打开串口出错1!");
		return FALSE;
	}

	if(!GetCommState(CommCenterVar->comId, &dcb)) {
		WinShowSystemPromptDialog(0, (Char *)"文件下载", (Char*)"打开串口出错2!");
		return FALSE;
	}
	
			dcb.BaudRate = BaudRate;
//			dcb.ByteSize = 8;
//			dcb.Parity   = NOPARITY;
//			dcb.StopBits = ONESTOPBIT;
//			dcb.fDsrSensitivity = FALSE;
//			dcb.fOutxCtsFlow = FALSE;
//			dcb.fOutxDsrFlow = FALSE;
//			dcb.fOutX    = TRUE;
//			dcb.fInX     = TRUE;
//			dcb.XonChar  = 0x11;
//			dcb.XoffChar = 0x13;
//			dcb.XoffLim  = 512;
//			dcb.XonLim   = 512;
	if(!SetCommState(CommCenterVar->comId, &dcb)) {
		WinShowSystemPromptDialog(0, (Char *)"文件下载", (Char*)"打开串口出错3!");
		return FALSE;
	}
	

⌨️ 快捷键说明

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