📄 ccd_commcenter.c
字号:
/*************************************************************************/
/* */
/* 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 + -