/* 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; }
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 }
/* 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; } }
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; }
/* 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; }