int gfasWriteRecurrentCycles(GFASHandle handle, unsigned short channel, long nRecurrences) { static const int registerId = RECURR_CYCLES_ID; int16_t registerValue = nRecurrences; int registerDepth = 0; int registerElementSize = 0; int registerSize = 0; int rc = 0; rc = getRegisterSize(handle, registerId, ®isterDepth, ®isterElementSize); if(rc <= 0) { return rc; } registerSize = rc; rc = DaSetRegister(handle, registerId, ®isterValue, registerSize); if (rc <= 0) { return -GFAS_DAL_ERR; } if (rc != registerDepth) { return -GFAS_ERR; } return 0; }
int gfasDisableAllFunctions(GFASHandle handle, unsigned short channel) { static const int registerId = FUNC_DISABLE_ID; uint32_t registerValue = ~0; int registerDepth = 0; int registerElementSize = 0; int registerSize = 0; int rc = 0; rc = getRegisterSize(handle, registerId, ®isterDepth, ®isterElementSize); /* printf("Handle: %d; registerId: %d; registerDepth: %d; registerElementSize: %d\n", (int)handle, registerId, registerDepth, registerElementSize); */ if(rc <= 0) { return rc; } registerSize = rc; rc = DaSetRegister(handle, registerId, ®isterValue, registerSize); if (rc <= 0) { return -GFAS_DAL_ERR; } if (rc != registerDepth) { return -GFAS_ERR; } return 0; }
int gfasReadFunction(GFASHandle handle, unsigned short channel, unsigned short slot, GFASFunction* function) { const int registerId = functionRegisterIDs[slot]; void* registerValue = (void*)function; int registerDepth = 0; int registerElementSize = 0; int registerSize = 0; int rc = 0; rc = getRegisterSize(handle, registerId, ®isterDepth, ®isterElementSize); if(rc <= 0) { return rc; } registerSize = rc; rc = DaGetRegister(handle, registerId, registerValue, registerSize); if (rc <= 0) { return -GFAS_DAL_ERR; } if (rc != registerDepth) { return -GFAS_ERR; } return 0; }
/** * @brief writeRegister Method to append a whole registry. Add new element to database. * @param pFileName is the name of database file to add to. * @param pColumnData it's what to append. * @param columnPos is where to append it. */ bool writefile::writeRegister(string pFileName, array<char*>* pColumnData , array<char*>* pColumnNam){ int currSeek = file.tellg(); string standardDir = createNewFile(pFileName); file.open(standardDir.c_str()); bool isOpen = true; if(!file.is_open()){ cout << "NED " + pFileName << endl; return false; } file.seekg(K->ZE_ROW); int spacesToMove; int Csize; int lon = pColumnNam->getLenght(); array<char*> tempCDataArr = *pColumnData; array<char*> tempNames = *pColumnNam; array<int> ColumnPos (lon); string registerToWrite = K->EMPTY_STRING; string Cdata; const char* charT ; for (int i = K->ZE_ROW ; i < lon ; i++){ charT = tempNames[i]; string strToAdd(charT); ColumnPos[i] = getColumnNumber(&pFileName, &strToAdd); } //Get the register and fill the blanks. fillString (®isterToWrite , getRegisterSize()); for (int i = 0 ; i < ColumnPos.getLenght() ; i++){ Cdata = tempCDataArr[i]; checkString(&Cdata); Csize = columnSize(ColumnPos[i]); //Not sure spacesToMove = sizeUntilColumn(ColumnPos[i]); fillString(&Cdata ,Csize); registerToWrite.replace(spacesToMove , Csize , Cdata.c_str()); } if (file.is_open()){ file.seekg(K->ZE_ROW , ios::end); file << registerToWrite; } file.seekg(currSeek); file.close(); return isOpen; }
int gfasConfigure(GFASHandle handle, unsigned short channel, GFASConfig config) { static const int registerId = CONFIG_ID; GFASMode mode = config.mode; uint16_t registerValue = 0; int registerDepth = 0; int registerElementSize = 0; int registerSize = 0; int rc = 0; rc = getRegisterSize(handle, registerId, ®isterDepth, ®isterElementSize); /* printf("Handle: %d; registerId: %d; registerDepth: %d; registerElementSize: %d\n", (int)handle, registerId, registerDepth, registerElementSize); */ if(rc <= 0) { return rc; } registerSize = rc; switch (mode) { case GFAS_NORMAL: registerValue = 0; break; case GFAS_DAC: registerValue = 1; break; case GFAS_LOW_JITTER: registerValue = 2; break; case GFAS_NORMAL_RECURRENT: registerValue = 3; break; case GFAS_LOW_JITTER_RECURRENT: registerValue = 4; break; case GFAS_TEST1: registerValue = 5; break; case GFAS_TEST2: registerValue = 6; break; case GFAS_NO_FUNCTION_GENERATION: registerValue = 7; break; default: return -GFAS_OUT_OF_RANGE; } rc = DaSetRegister(handle, registerId, ®isterValue, registerSize); if (rc <= 0) { return -GFAS_DAL_ERR; } if (rc != registerDepth) { return -GFAS_ERR; } return 0; }
int gfasSelectFunction(GFASHandle handle, unsigned short channel, unsigned short slot) { int registerId = FUNC_SELECT_ID; uint16_t registerValue = 0; int registerDepth = 0; int registerElementSize = 0; int registerSize = 0; int rc = 0; rc = getRegisterSize(handle, registerId, ®isterDepth, ®isterElementSize); if(rc <= 0) { return rc; } registerSize = rc; registerValue = slot; rc = DaSetRegister(handle, registerId, ®isterValue, registerSize); if (rc <= 0) { return -GFAS_DAL_ERR; } if (rc != registerDepth) { return -GFAS_ERR; } registerId = SELECT_FUNC_ID; rc = getRegisterSize(handle, registerId, ®isterDepth, ®isterElementSize); if(rc <= 0) { return rc; } registerSize = rc; registerValue = 1; rc = DaSetRegister(handle, registerId, ®isterValue, registerSize); if (rc <= 0) { return -GFAS_DAL_ERR; } if (rc != registerDepth) { return -GFAS_ERR; } return 0; }
bool writefile::deleteRegister(string pFile, string pCName, string newData){ int currSeek = file.tellg(); int Column; int cSize; string standardDir; bool bowl = true; //Relative route + the name of the file if ( !(file.is_open()) ){ standardDir = createNewFile(pFile.c_str()); file.open(standardDir.c_str()); } if ( !(file.is_open()) ){ cout << "NED " + pFile << endl; return false; } Column = getColumnNumber(&standardDir , &pCName ); cSize = getRegisterSize(); int regQty = getRegisterQuantity(); string voidField = K->EMPTY_STRING; int sizeToColumn = sizeUntilColumn(Column); fillString(&voidField,cSize); cout << voidField.length() <<endl; for (int rowCounter = K->ONE_BYTE ; rowCounter <= regQty ; rowCounter++){ //Compare data. if (readField(pFile , rowCounter , Column) == newData){ placeSeekOn(&rowCounter , &Column, &sizeToColumn, &cSize); if (file.is_open()){ file << voidField; } else { bowl = false; } } } file.seekg(currSeek); if (file.is_open()){ file.close(); } return bowl; }
int gfasSendSoftwarePulse(GFASHandle handle, unsigned short channel, GFASInputPulse pulse) { int registerId = SOFT_START_ID; uint16_t registerValue = 0; int registerDepth = 0; int registerElementSize = 0; int registerSize = 0; int rc = 0; switch (pulse) { case GFAS_START: registerId = SOFT_START_ID; registerValue = 1; break; case GFAS_STOP: registerId = SOFT_START_ID; registerValue = 0; break; case GFAS_EVENT_START: registerId = SOFT_EV_START_ID; registerValue = 1; break; case GFAS_EVENT_STOP: registerId = SOFT_EV_START_ID; registerValue = 0; break; default: return -GFAS_ERR; } rc = getRegisterSize(handle, registerId, ®isterDepth, ®isterElementSize); if(rc <= 0) { return rc; } registerSize = rc; rc = DaSetRegister(handle, registerId, ®isterValue, registerSize); if (rc <= 0) { return -GFAS_DAL_ERR; } if (rc != registerDepth) { return -GFAS_ERR; } return 0; }
int gfasDisableFunction(GFASHandle handle, unsigned short channel, unsigned short slot) { static const int registerId = FUNC_DISABLE_ID; uint16_t registerValue = 0; int registerDepth = 0; int registerElementSize = 0; int registerSize = 0; int registerElementSize_bits = 0; long registerElementNo = 0; long nOffsetElements = 0; unsigned int nRegisterElements = 1; unsigned short bitNo = 0; uint16_t mask = 0; int rc = 0; rc = getRegisterSize(handle, registerId, ®isterDepth, ®isterElementSize); if (rc <= 0) { return rc; } registerSize = rc; registerElementSize_bits = registerElementSize * nBitsInByte; registerElementNo = slot / registerElementSize_bits; // Register element to which the bit corresponding to the 'slot' belongs nOffsetElements = registerDepth - registerElementNo - 1; rc = DaGetRegChunk(handle, registerId, nOffsetElements, nRegisterElements, ®isterValue, registerElementSize); if (rc <= 0) { return -GFAS_DAL_ERR; } if (rc != nRegisterElements) { return -GFAS_ERR; } bitNo = slot % registerElementSize_bits; mask = 0x0001 << bitNo; registerValue = registerValue | mask; rc = DaSetRegChunk(handle, registerId, nOffsetElements, nRegisterElements, ®isterValue, registerElementSize); if (rc <= 0) { return -GFAS_DAL_ERR; } if (rc != nRegisterElements) { return -GFAS_ERR; } return 0; }
int gfasLoadFunction(GFASHandle handle, unsigned short channel, unsigned short slot, const GFASFunction* function) { int registerId = functionRegisterIDs[slot]; /* void* registerValue = (void*)function; */ uint16_t registerValue = 0; int registerDepth = 0; int registerElementSize = 0; int registerSize = 0; int registerElementSize_bits = 0; long registerElementNo = 0; long nOffsetElements = 0; unsigned int nRegisterElements = 1; unsigned short bitNo = 0; uint16_t mask = 0; int rc = 0; // Write function to VME memory rc = getRegisterSize(handle, registerId, ®isterDepth, ®isterElementSize); if(rc <= 0) { return rc; } registerSize = rc; rc = DaSetRegister(handle, registerId, (void*)function, registerSize); if (rc <= 0) { return -GFAS_DAL_ERR; } if (rc != registerDepth) { return -GFAS_ERR; } // Set the conversion bit corresponding to the function registerId = FUNC_CONVERT_ID; rc = getRegisterSize(handle, registerId, ®isterDepth, ®isterElementSize); if (rc <= 0) { return rc; } registerSize = rc; registerElementSize_bits = registerElementSize * nBitsInByte; registerElementNo = slot / registerElementSize_bits; // Register element to which the bit corresponding to the 'slot' belongs nOffsetElements = registerDepth - registerElementNo - 1; rc = DaGetRegChunk(handle, registerId, nOffsetElements, nRegisterElements, ®isterValue, registerElementSize); if (rc <= 0) { return -GFAS_DAL_ERR; } if (rc != nRegisterElements) { return -GFAS_ERR; } bitNo = slot % registerElementSize_bits; mask = 0x0001 << bitNo; registerValue = registerValue | mask; rc = DaSetRegChunk(handle, registerId, nOffsetElements, nRegisterElements, ®isterValue, registerElementSize); if (rc <= 0) { return -GFAS_DAL_ERR; } if (rc != nRegisterElements) { return -GFAS_ERR; } // Set conversion flag (function will be transfered from VME memory to GFAS memory at next start/stop (?) pulse) registerId = CONVERT_FUNC_ID; rc = getRegisterSize(handle, registerId, ®isterDepth, ®isterElementSize); if(rc <= 0) { return rc; } registerSize = rc; // TODO: First check that the flag is 0 registerValue = 1; rc = DaSetRegister(handle, registerId, ®isterValue, registerSize); if (rc <= 0) { return -GFAS_DAL_ERR; } if (rc != registerDepth) { return -GFAS_ERR; } return 0; }