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, &registerDepth, &registerElementSize);
  if(rc <= 0) {
    return rc;
  }
  registerSize = rc;
  rc = DaSetRegister(handle, registerId, &registerValue, 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, &registerDepth, &registerElementSize);
/*   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, &registerValue, 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, &registerDepth, &registerElementSize);
  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;
}
示例#4
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 (&registerToWrite , 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, &registerDepth, &registerElementSize);
/*   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, &registerValue, 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, &registerDepth, &registerElementSize);
  if(rc <= 0) {
    return rc;
  }
  registerSize = rc;
  registerValue = slot;
  rc = DaSetRegister(handle, registerId, &registerValue, registerSize);
  if (rc <= 0) {
    return -GFAS_DAL_ERR;
  }
  if (rc != registerDepth) {
    return -GFAS_ERR;
  }
  registerId = SELECT_FUNC_ID;
  rc = getRegisterSize(handle, registerId, &registerDepth, &registerElementSize);
  if(rc <= 0) {
    return rc;
  }
  registerSize = rc;
  registerValue = 1;
  rc = DaSetRegister(handle, registerId, &registerValue, registerSize);
  if (rc <= 0) {
    return -GFAS_DAL_ERR;
  }
  if (rc != registerDepth) {
    return -GFAS_ERR;
  }

  return 0;
}
示例#7
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, &registerDepth, &registerElementSize);
  if(rc <= 0) {
    return rc;
  }
  registerSize = rc;
  rc = DaSetRegister(handle, registerId, &registerValue, 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, &registerDepth, &registerElementSize);
  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, &registerValue, 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, &registerValue, 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, &registerDepth, &registerElementSize);
  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, &registerDepth, &registerElementSize);
  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, &registerValue, 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, &registerValue, 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, &registerDepth, &registerElementSize);
  if(rc <= 0) {
    return rc;
  }
  registerSize = rc;
  // TODO: First check that the flag is 0
  registerValue = 1;
  rc = DaSetRegister(handle, registerId, &registerValue, registerSize);
  if (rc <= 0) {
    return -GFAS_DAL_ERR;
  }
  if (rc != registerDepth) {
    return -GFAS_ERR;
  }

  return 0;
}