Beispiel #1
0
/*	
	FunctionName:			fnFreeMemory
	FunctionModifiedTime:	20141019
	FunctionPurpose:		free memory
*/
errorCode CSingleton::fnFreeMemory(sBufData* bd)
{
	unsigned char* puiTestData = bd->pucData;
	if (puiTestData==NULL)
	{
		return err_MS_Memory_Free_Invalid;
	}
	DELETE_POINT(puiTestData);
	return err_Success;
}
Beispiel #2
0
static void cToLib_string(lib_string& des, const char* src)
{
	assert(nullptr != src);
#ifdef UNICODE

	LPTSTR p = nullptr;
	size_t len = strlen(src) + 1;
	size_t wSize = len * sizeof(wchar_t);
	p = new wchar_t[wSize];
	memset(p, 0, wSize);
	size_t converted = 0;
	mbstowcs_s(&converted, p, len, src, _TRUNCATE);

	des = lib_string(p);
	DELETE_POINT(p);
#else
	des = lib_string(src);
#endif
}
Beispiel #3
0
/*	
	FunctionName:			fnBuffRoute
	FunctionModifiedTime:	20141019
	FunctionPurpose:		route buff from processing to memory
*/
errorCode CSingleton::fnBuffRoute(unsigned char* m_ControlComd,int len,int* ComdID)
{
	if (len<0)
	{
		return err_MS_Memory_Route_Invalid;
	}
	int uicount = 0;
	unsigned char* buf = new unsigned char[len];
	if(buf == NULL)
		return err_MS_Memory_Route_Invalid;
	for (uicount = 0;uicount < len;uicount++)
	{
		*(buf+uicount) = *(m_ControlComd+uicount);
	}
	m_sCurMaster.pucData = buf;
	m_sCurMaster.iCmd = m_uicmdid;
	m_sCurMaster.iLength = len;
	MASTER_WAIT ;
	if(MASTER_IS_READY)
	{
		StatusMaster = InterfaceWrite;
		if(!fnIsAdvanceCMD(m_ControlComd))
			m_vBufMaster.push_back(m_sCurMaster);
		else 
			m_vBufAdvance.push_back(m_sCurMaster);
		*ComdID = m_uicmdid;
		m_uicmdid++;
		StatusMaster = Idle;	
		fnDelay();
		return err_Success;
	}else
	{
		DELETE_POINT(buf);
		return err_MS_Push_Invalid;
	}
}
Beispiel #4
0
errorCode CSingleton::fnSendMessageToWinform()
{
	BufData updateData;
	unsigned char ucVeryTimes = 0;
	ULONG ulAdvanceIsBusy;
	ULONG ulAdvanceIsCMD;
	ULONG ulAdvanceIsERR;
	ULONG ulAdvanceIsBTN;
	PCIPro.fnPciReadMem(BASE_ADDRESS + UPDATE_HIGH_BUSY_ADDRESS_OFFSET,ulAdvanceIsBusy);

	if(PCIPro.fnPciReadMem(BASE_ADDRESS + UPDATE_HIGH_CMD_ADDRESS_OFFSET,ulAdvanceIsCMD)
		&&PCIPro.fnPciReadMem(BASE_ADDRESS + UPDATE_HIGH_ERR_ADDRESS_OFFSET,ulAdvanceIsERR)
		&&PCIPro.fnPciReadMem(BASE_ADDRESS + UPDATE_HIGH_BTN_ADDRESS_OFFSET,ulAdvanceIsBTN))
	{
		PCIPro.fnPciWriteMem(BASE_ADDRESS + UPDATE_HIGH_BTN_ADDRESS_OFFSET,ULONG(0));
		PCIPro.fnPciWriteMem(BASE_ADDRESS + UPDATE_HIGH_ERR_ADDRESS_OFFSET,ULONG(0));
		PCIPro.fnPciWriteMem(BASE_ADDRESS + UPDATE_HIGH_CMD_ADDRESS_OFFSET,ULONG(0));

		if(BUSY == (ulAdvanceIsCMD&LOW16_MASK))
		{
			do{
				unsigned char* pucRemark = new unsigned char[REMARK_LENGTH];
				if(PCIPro.fnPciReadMem(BASE_ADDRESS + UPDATE_HIGH_REMARK_ADDRESS_OFFSET,REMARK_LENGTH,pucRemark))
				{
					updateData.iCmd =((DataRemark *)pucRemark)->ulCmdid;
					updateData.iLength = ((DataRemark *)pucRemark)->usLength;
					updateData.iCheckCode =(((DataRemark *)pucRemark)->usCheckCode)&0xFF;
				}else 
				{
					DELETE_POINT(pucRemark);
					//send fatal message
				}
				unsigned char* pucData = new unsigned char[updateData.iLength];
				if(PCIPro.fnPciReadMem(BASE_ADDRESS + UPDATE_HIGH_DATA_ADDRESS_OFFSET,updateData.iLength,pucData))
				{	
					if(true&&((fnGetVeryCode(pucData,updateData.iLength)) != updateData.iCheckCode))
					{
						ucVeryTimes++;
						DELETE_POINT(pucRemark);
						DELETE_POINT(pucData);
						if(ucVeryTimes >= READ_TRY)
						{
							m_bSynLock = WRITE;
							//send fatal message
						}			
					}
					else
					{
						ucVeryTimes = READ_TRY;
						updateData.pucData = pucData;
						SLAVE_WAIT ;
						if(SLAVE_IS_READY)
						{
							StatusSlave = RAMRead;
							if (m_vBufSlave.size()>BUF_SLAVE_SIZE)
							{
								fnBuffPop(m_vBufSlave[0].iCmd,&m_vBufSlave);
							}
							m_vBufSlave.push_back(updateData);
							StatusSlave = Idle;
							DELETE_POINT(pucRemark);
						}
						else 
						{
							DELETE_POINT(pucRemark);
							DELETE_POINT(pucData);
							//send fatal message
						}
						
					}
				}else  
				{
					DELETE_POINT(pucRemark);
					DELETE_POINT(pucData);
					m_ulReadRetry++;
					//send fatal message
				}
			}while(ucVeryTimes < READ_TRY);

			if(!fnMasterPop(updateData.iCmd))
				return err_MS_Memory_Trans_Invalid;

			m_ucInvalidRetry = 0;
			m_ucErrorRetry = 0;
			m_ulReadRetry = 0;
			m_bSynLock = WRITE;
		}

		ucVeryTimes = 0;
		if(BUSY == (ulAdvanceIsBTN&LOW16_MASK))
		{
			do{
				ULONG ulBTNLength;
				ULONG ulBTNVeryCode;
				if(PCIPro.fnPciReadMem(BASE_ADDRESS + UPDATE_BTN_LENGHT_ADDRESS_OFFSET,ulBTNLength)
					&&PCIPro.fnPciReadMem(BASE_ADDRESS + UPDATE_BTN_VERY_CODE_ADDRESS_OFFSET,ulBTNVeryCode))
				{
					unsigned char* pucData = new unsigned char[ulBTNLength&LOW8_MASK];
					if(PCIPro.fnPciReadMem(BASE_ADDRESS + UPDATE_BTN_ADDRESS_OFFSET,(ulBTNLength&LOW8_MASK),pucData))
					{	
						if(true&&((fnGetVeryCode(pucData,ulBTNLength&LOW8_MASK)) != (ulBTNVeryCode&LOW8_MASK)))
						{
							ucVeryTimes++;
							DELETE_POINT(pucData);
							if(ucVeryTimes >= READ_TRY)
							{
								m_bSynLock = WRITE;
								//send fatal message
							}			
						}
						else
						{
							ucVeryTimes = READ_TRY;
							//send message 
							DELETE_POINT(pucData);
						}
					}else  
					{
						DELETE_POINT(pucData);
						m_ulReadRetry++;
						//send fatal message
					}
				}else 
				{
					//send fatal message
				}	
			}while(ucVeryTimes < READ_TRY);
			m_ucInvalidRetry = 0;
			m_ucErrorRetry = 0;
			m_ulReadRetry = 0;
			m_bSynLock = WRITE;
		}

		ucVeryTimes = 0;
		if(BUSY == (ulAdvanceIsERR&LOW16_MASK))
		{

			do{
				unsigned char* pucRemark = new unsigned char[REMARK_LENGTH];
				if(PCIPro.fnPciReadMem(BASE_ADDRESS + UPDATE_ERROR_REMARK_ADDRESS_OFFSET,REMARK_LENGTH,pucRemark))
				{
					updateData.iCmd =((DataRemark *)pucRemark)->ulCmdid;
					updateData.iLength = ((DataRemark *)pucRemark)->usLength;
					updateData.iCheckCode =(((DataRemark *)pucRemark)->usCheckCode)&0xFF;
				}else 
				{
					DELETE_POINT(pucRemark);
					//send fatal message
				}
				unsigned char* pucData = new unsigned char[updateData.iLength];
				if(PCIPro.fnPciReadMem(BASE_ADDRESS + UPDATE_ERROR_ADDRESS_OFFSET,updateData.iLength,pucData))
				{	
					if(true&&((fnGetVeryCode(pucData,updateData.iLength)) != updateData.iCheckCode))
					{
						ucVeryTimes++;
						DELETE_POINT(pucRemark);
						DELETE_POINT(pucData);
						if(ucVeryTimes >= READ_TRY)
						{
							m_bSynLock = WRITE;
							//send fatal message
						}			
					}
					else
					{
						ucVeryTimes = READ_TRY;
						//send message
						updateData.pucData = pucData;
					}
				}else  
				{
					DELETE_POINT(pucRemark);
					DELETE_POINT(pucData);
					m_ulReadRetry++;
					//send fatal message
				}
			}while(ucVeryTimes < READ_TRY);

			m_ucInvalidRetry = 0;
			m_ucErrorRetry = 0;
			m_ulReadRetry = 0;
			m_bSynLock = WRITE;
		}
	}else
	{
		//send fatal message
	}
	//Read EXE
	
	return err_Success;
}
Beispiel #5
0
/*	
	FunctionName:			fnRead
	FunctionModifiedTime:	20141019
	FunctionPurpose:		read memory to get buffer
*/
errorCode CSingleton::fnRead(void)
{
	unsigned char ucVeryTimes = 0;
	BufData updateData;
	do{
		unsigned char* pucRemark = new unsigned char[REMARK_LENGTH];		
		if(PCIPro.fnPciReadMem(BASE_ADDRESS + UPDATE_REMARK_ADDRESS_OFFSET,REMARK_LENGTH,pucRemark))
		{
			updateData.iCmd =((DataRemark *)pucRemark)->ulCmdid;
			updateData.iLength = ((DataRemark *)pucRemark)->usLength;
			updateData.iCheckCode =(((DataRemark *)pucRemark)->usCheckCode)&0xFF;
		}else 
		{
			DELETE_POINT(pucRemark);
			return err_PCI_Read_Memory_Invalid;
		}
		unsigned char* pucData = new unsigned char[updateData.iLength];
		
		if(PCIPro.fnPciReadMem(BASE_ADDRESS + UPDATE_DATA_ADDRESS_OFFSET,updateData.iLength,pucData))
		{	
			if(true&&((fnGetVeryCode(pucData,updateData.iLength)) != updateData.iCheckCode))
			{
				ucVeryTimes++;
				DELETE_POINT(pucRemark);
				DELETE_POINT(pucData);
				if(ucVeryTimes >= READ_TRY)
				{			
					m_bSynLock = WRITE;
					return err_MS_Check_Code_Invalid;
				}			
			}
			else
			{
				ucVeryTimes = READ_TRY;
				updateData.pucData = pucData;
				SLAVE_WAIT ;
				if(SLAVE_IS_READY)
				{
					StatusSlave = RAMRead;
					if (m_vBufSlave.size()>BUF_SLAVE_SIZE)
					{
						fnBuffPop(m_vBufSlave[0].iCmd,&m_vBufSlave);
					}
					m_vBufSlave.push_back(updateData);
					StatusSlave = Idle;
					DELETE_POINT(pucRemark);
#ifdef WINTEST
					fnSetWindowText(fnGetCWnd(),updateData.iCmd,fnGetTextTimerSlaveID());
#endif
					//DELETE_POINT(pucData);
				}else 
				{
					DELETE_POINT(pucRemark);
					DELETE_POINT(pucData);
					return err_PCI_Read_Memory_Invalid;
				}
			}
		}else  
		{
			DELETE_POINT(pucRemark);
			DELETE_POINT(pucData);
			m_ulReadRetry++;
			return	err_PCI_Read_Memory_Invalid;
		}
	}while(ucVeryTimes < READ_TRY);
	

	if(!fnMasterPop(updateData.iCmd))
		return err_MS_Memory_Trans_Invalid;
	
	m_ucInvalidRetry = 0;
	m_ucErrorRetry = 0;
	m_ulReadRetry = 0;
	m_bSynLock = WRITE;
	return err_Success;
}