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

📄 gsmmodem.cpp

📁 使用gsm收发短信的方式传递文件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
//			char mapname[50],lvlname[21];
//			for(int i=0;i < nFileNameLength;i++)
//			{
//				int j;
//				if(cFileName[i]=='_')
//				{
//					for(j=0;j<i;j++)
//					{
//						mapname[j]=cFileName[j];
//					}
//					mapname[i]=0;
//
//					type=JudgeMapType(cFileName,i+1);
//
//					for(j=i+2;j<nFileNameLength;j++)//?
//					{
//						lvlname[j-i-2]=cFileName[j];
//					}
//					int k=j-i-2;
//					for(k;k<21;k++)
//					{
//						lvlname[k]=0;
//					}
//					break;
//				}
//			}
//
//			//保存所有的数据到文件中
//			int nFileCountLength;
//			char*  pMemData=NULL;				
//			//写入数据
//			nFileCountLength = GetAllMsg(pMemData,nMsgIndex);
//
//			//打开lvl文件,加入新图层
//			CString fileName;//子目录名或文件名
//			CFile tempfile;		
//
//			fileName=g_SysStatus->strCurDirect;
//			fileName+=_T("\\record\\Data\\");
//			fileName+=mapname;
//			fileName+=_T(".lvl"); 					
//			int ContentNo=0;
//			//int tempNumm=0;				
//				
//			if(tempfile.Open(fileName,CFile::modeReadWrite) == NULL)//新的文件
//			{
//				tempfile.Open(fileName,CFile::modeReadWrite|CFile::modeCreate);
//			}
//			else
//			{
//				char Content[21];
//				tempfile.Read(&ContentNo,sizeof(int));
//				int num;
//				for(i=0;i<ContentNo;i++)
//				{
//					tempfile.Read(&num,sizeof(int));
//					tempfile.Read(Content,sizeof(char)*21);
//					if(strcmp(Content,lvlname)==0)
//					{
//						tempfile.Close();
//						goto lable1;
//					}
//
//				}
//			}
//
//			ContentNo++;
//			tempfile.SeekToBegin();
//			tempfile.Write(&ContentNo,sizeof(int));
//			tempfile.SeekToEnd();
//			tempfile.Write(&ContentNo,sizeof(int));
//			tempfile.Write(lvlname,sizeof(char)*21);
//			tempfile.Close();
//			
//			//产生PLA数据文件
//			fileName=g_SysStatus->strCurDirect;
//			fileName+=_T("\\record\\Data\\");
//			fileName+=mapname;
//			fileName+=_T("_P");				
//			fileName+=lvlname;
//			fileName+=_T(".dat");
//			tempfile.Open(fileName,CFile::modeCreate|CFile::modeReadWrite);
//			tempfile.Close();	
//
//			fileName=g_SysStatus->strCurDirect;
//			fileName+=_T("\\record\\Data\\");
//			fileName+=mapname;
//			fileName+=_T("_L");				
//			fileName+=lvlname;
//			fileName+=_T(".dat");
//			tempfile.Open(fileName,CFile::modeCreate|CFile::modeReadWrite);
//			//tempfile.Write(&tempNumm,sizeof(int));
//			tempfile.Close();	
//
//			fileName=g_SysStatus->strCurDirect;
//			fileName+=_T("\\record\\Data\\");
//			fileName+=mapname;
//			fileName+=_T("_A");				
//			fileName+=lvlname;
//			fileName+=_T(".dat");
//			tempfile.Open(fileName,CFile::modeCreate|CFile::modeReadWrite);
//			//tempfile.Write(&tempNumm,sizeof(int));
//			tempfile.Close();	
//
//
//lable1:
//			//判断要素的类型
//			switch(type)
//			{
//			case 0:
//				{
//	
//				CFile PointRecordFile;
//				struct tagPointRecord PointRecord;
//				int num;
//
//				//坐标纪录
//				CString fileName;
//
//				//为记录路径的根目录赋值
//				fileName=g_SysStatus->strCurDirect;
//				fileName+=_T("\\record\\Data\\");
//				fileName+=mapname;
//				fileName+=_T("_P");				
//				fileName+=lvlname;
//				fileName+=_T(".dat");
//
//				PointRecordFile.Open(fileName,CFile::modeReadWrite);
///*
//				num=PointRecordFile.GetLength()/sizeof(tagPointRecord);//已纪录的数据点数
//				PointRecordFile.SeekToEnd();//从最后位置开始记录增长文件,无用
//				PointRecord.ZbID=num+1;
//*/
//				
//				//lwgboy 2003-12-18
//				
//				num=PointRecordFile.GetLength()/sizeof(tagPointRecord);
//				if(num>0)
//                {
//                  PointRecordFile.Seek(-sizeof(tagPointRecord),CFile::end);  
//				  PointRecordFile.Read(&num,sizeof(int));
//				}
//				num++;
//				PointRecord.ZbID=num;				
//				PointRecordFile.SeekToEnd();
//
//
//
//				ComPointRecord tempRecord;
//				
//				memcpy(&tempRecord,pMemData,sizeof(ComPointRecord));
//
//				TCHAR* tempchar=new TCHAR[tempRecord.Length+1];
//				for(int i=0;i<tempRecord.Length+1;i++)
//					tempchar[i]=0;
//
//				memcpy(tempchar,pMemData+sizeof(ComPointRecord),tempRecord.Length);
//
//				tagBL tempBL;
//
//				memcpy(&tempBL,pMemData+sizeof(ComPointRecord)+tempRecord.Length,8);
//
//								
//				PointRecord.ZbL=tempBL.ZbL;//经度					
//				PointRecord.ZbB=tempBL.ZbB;//纬度
//				PointRecord.ZbSX=tempRecord.ZbSX;
//
//				for(int t=0;t<tempRecord.Length+1;t++)
//				{
//					PointRecord.Info[t]=tempchar[t];
//				}
//				delete tempchar;
//
//				PointRecordFile.Write(&PointRecord,sizeof(PointRecord));
//				
//				PointRecordFile.Close();
//
//			}	
//				break;
//			case 2:
//				{
//					
//					CFile AreaRecordFile;
//					struct tagAreaRecord AreaRecord;
//					CFile fp;
//					CString name;		
//
//					CString fileName;
//					fileName=g_SysStatus->strCurDirect;
//					fileName+=_T("\\record\\Data\\");
//					fileName+=mapname;
//					fileName+=_T("_A");				
//					fileName+=lvlname;
//					fileName+=_T(".dat");
//
//					int num=0;
//					AreaRecordFile.Open(fileName,CFile::modeReadWrite);
//					AreaRecordFile.Read(&num,sizeof(int));
//					num++;
//					
//					AreaRecordFile.SeekToBegin();
//					AreaRecordFile.Write(&num,sizeof(int));
//					
//					ComAreaRecord tempRecord;
//					memcpy(&tempRecord,pMemData,sizeof(ComAreaRecord));
//					
//					for(int t=0;t<128;t++)
//							AreaRecord.Info[t]=0;
//
//					if (tempRecord.Length > 0)
//					{
//						TCHAR* tempchar=new TCHAR[tempRecord.Length+1];
//					
//						for(int i=0;i<tempRecord.Length+1;i++)
//							tempchar[i]=0;
//					
//						memcpy(tempchar,pMemData+sizeof(ComAreaRecord),tempRecord.Length);	
//						
//						for(t=0;t<tempRecord.Length+1;t++)			
//							AreaRecord.Info[t]=tempchar[t];
//
//						delete tempchar;
//					}
//
//					
//					AreaRecord.ZbOffset=AreaRecordFile.GetLength()+sizeof(tagAreaRecord);
//					AreaRecord.ZbNum=tempRecord.ZbNum;
//					AreaRecord.ZbID=num;
//					AreaRecord.ZbSX=tempRecord.ZbSX;					
//					
//					AreaRecord.ZbMaxL=tempRecord.ZbMaxL;//经度					
//					AreaRecord.ZbMaxB=tempRecord.ZbMaxB;//纬度
//					AreaRecord.ZbMinL=tempRecord.ZbMinL;//经度					
//					AreaRecord.ZbMinB=tempRecord.ZbMinB;//纬度
//
//					AreaRecordFile.SeekToEnd();//从最后位置开始记录增长文件
//					AreaRecordFile.Write(&AreaRecord,sizeof(tagAreaRecord));
//	
//					tagBL tempBL;
//					
//					for(i=0;i<tempRecord.ZbNum;i++)
//					{		
//						struct tagBL pointBL;
//						memcpy(&tempBL,pMemData+sizeof(ComAreaRecord)+
//							tempRecord.Length+sizeof(tagBL)*i,sizeof(tagBL));	
//						
//						pointBL.ZbL=tempBL.ZbL;//经度					
//						pointBL.ZbB=tempBL.ZbB;//纬度
//						AreaRecordFile.Write(&pointBL,sizeof(tagBL));						
//					}
//					AreaRecordFile.Close();
//				}
//				
//				break;
//			case 1:
//				{
//					CFile LineRecordFile;
//					struct tagAreaRecord LineRecord;					
//					CFile fp;
//					CString name;		
//
//					CString fileName;
//					fileName=g_SysStatus->strCurDirect;
//					fileName+=_T("\\record\\Data\\");
//					fileName+=mapname;
//					fileName+=_T("_L");				
//					fileName+=lvlname;
//					fileName+=_T(".dat");
//
//					int num=0;
//					LineRecordFile.Open(fileName,CFile::modeReadWrite);
//					LineRecordFile.Read(&num,sizeof(int));
//					num++;
//					
//					LineRecordFile.SeekToBegin();
//					LineRecordFile.Write(&num,sizeof(int));
//					
//					ComLineRecord tempRecord;
//					memcpy(&tempRecord,pMemData,sizeof(ComLineRecord));					
//			
//					for(int t=0;t<128;t++)
//							LineRecord.Info[t]=0;
//					
//					LineRecord.ZbOffset=LineRecordFile.GetLength()+sizeof(tagLineRecord);
//					LineRecord.ZbNum=tempRecord.ZbNum;
//					LineRecord.ZbID=num;
//					LineRecord.ZbSX=tempRecord.ZbSX;
//					
//					if (tempRecord.Length > 0)
//					{
//						TCHAR* tempchar=new TCHAR[tempRecord.Length+1];
//					
//						for(int i=0;i<tempRecord.Length+1;i++)
//							tempchar[i]=0;
//					
//						memcpy(tempchar,pMemData+sizeof(ComAreaRecord),tempRecord.Length);	
//						
//						for(int t=0;t<tempRecord.Length+1;t++)			
//							LineRecord.Info[t]=tempchar[t];
//
//						delete tempchar;
//					}
//
//					LineRecord.ZbMaxL=tempRecord.ZbMaxL;//经度					
//					LineRecord.ZbMaxB=tempRecord.ZbMaxB;//纬度
//					LineRecord.ZbMinL=tempRecord.ZbMinL;//经度					
//					LineRecord.ZbMinB=tempRecord.ZbMinB;//纬度
//
//					LineRecordFile.SeekToEnd();//从最后位置开始记录增长文件
//					LineRecordFile.Write(&LineRecord,sizeof(tagLineRecord));
//	
//					tagBL tempBL;
//					
//					for(i=0;i<tempRecord.ZbNum;i++)
//					{
//						struct tagBL pointBL;
//						memcpy(&tempBL,pMemData+sizeof(ComLineRecord)+
//							tempRecord.Length+sizeof(tagBL)*i,sizeof(tagBL));	
//						
//						pointBL.ZbL=tempBL.ZbL;//经度					
//						pointBL.ZbB=tempBL.ZbB;//纬度
//						LineRecordFile.Write(&pointBL,sizeof(tagBL));
//					}
//
//					LineRecordFile.Close();
//
//
//				}
//				break;
//			default:
//				break;
//			}
//			delete pMemData;
//			nReturn = 2;
//
//		}
////		::AfxMessageBox("短消息接受成功");
//	}

	return nReturn;
}
	//根据图层名称判断该要素是点,线,面
	//点=0,线=1,面=2;
int CGsmModem::JudgeMapType(char* strname,int i)
{
	CString str(strname);
	if(str.Mid(i,1)=="A")
		return 2;
	if(str.Mid(i,1)=="L")
		return 1;
	if(str.Mid(i,1)=="P")
		return 0;
	return 0;
}
//所有的短消息已经传送
BOOL CGsmModem::GetMsgComplete(int nMsgIndex)
{
	for(int i = 0; i < m_SaveMsg[nMsgIndex].nCount; i++)
	{
		if (!m_SaveMsg[nMsgIndex].bAccess[i])
		{
			return FALSE;
		}
	}

	return TRUE;
}

//得到所有的字符串
int CGsmModem::GetAllMsg(char* &pChar,int nMsgIndex)
{
	int nCount = 0;
	for(int i = 0; i < m_SaveMsg[nMsgIndex].nCount; i++)
	{
		nCount += m_SaveMsg[nMsgIndex].nLength[i];
	}

	pChar = new char[nCount];
	
	nCount = 0;
	for(i = 0; i < m_SaveMsg[nMsgIndex].nCount; i++)
	{
		memcpy(pChar+nCount,m_SaveMsg[nMsgIndex].msg[i],m_SaveMsg[nMsgIndex].nLength[i]);
		nCount += m_SaveMsg[nMsgIndex].nLength[i];
		delete m_SaveMsg[nMsgIndex].msg[i];
		m_SaveMsg[nMsgIndex].msg[i]=NULL;
	}

	m_SaveMsg[nMsgIndex].nFlag=-1;

	return nCount;
}

void CGsmModem::ReleateMsg(int nMsgIndex)
{
	for(int i = 0; i < m_SaveMsg[nMsgIndex].nCount; i++)
	{
		if(m_SaveMsg[nMsgIndex].msg[i])
		delete m_SaveMsg[nMsgIndex].msg[i];

	}

	m_SaveMsg[nMsgIndex].nCount = -1;
	m_SaveMsg[nMsgIndex].nFlag = -1;
}

int CGsmModem::ReadMsgFromSIMX(int nMsgIndex, char *pReadPool)
{

  return ReadMsgFromSIM(nMsgIndex,pReadPool);

}

SHORTMSGINFO* CGsmModem::getAllSMS()
{
	int nTimeOut=0;
	int nDataLen=0;
	char pAtCmd[64];
	int nReturn=0;
	
	strcpy(pAtCmd,"AT+CMGL");
	strcat(pAtCmd,"\r");
	ClearCommBuf(0);
	SendATCmd(pAtCmd);

	while(nTimeOut<200)
	{
		DelayTimer(300);
		nDataLen=GetCommEvent(0);
		if(nDataLen>0)
		{
			ReadDataFromPort(m_pReadPool,nDataLen,1);
			if(strstr(m_pReadPool,"OK")!=NULL)
			{
				nReturn=1;
				break;
			}
			ClearCommBuf(0);
			SendATCmd(pAtCmd);
		}
		nTimeOut++;
	}
	DecodeShortMsg(m_pReadPool,1);
	return m_pShortMsgInfo;
}


int CGsmModem::WriteComm(const char*pWritePool,long nWriteLen)
{
   return WriteDataToPort(pWritePool,nWriteLen);
}

int CGsmModem::ReadComm(char *pReadPool,long nReadLen)
{
   return ReadDataFromPort(pReadPool,nReadLen,0);
}

long CGsmModem::ReadLong(char *pPool)
{
	long lNumber=0;
	memcpy(&lNumber,pPool,sizeof(long));
	return lNumber;
}

double CGsmModem::ReadDouble(char *pPool)
{
	double dNumber=0.0;
	memcpy(&dNumber,pPool,sizeof(double));
	return dNumber;
}

double CGsmModem::ReadChar(char *pPool)
{
	char cNumber=0.0;
	memcpy(&cNumber,pPool,sizeof(char));
	return cNumber;
}
CGsmModem g_GsmModem;

⌨️ 快捷键说明

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