?? 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 + -