Skip to content
Snippets Groups Projects
Select Git revision
  • 455e46837e33b55a15451b97845e310534f23f50
  • master default protected
  • L2SS-1914-fix_job_dispatch
  • TMSS-3170
  • TMSS-3167
  • TMSS-3161
  • TMSS-3158-Front-End-Only-Allow-Changing-Again
  • TMSS-3133
  • TMSS-3319-Fix-Templates
  • test-fix-deploy
  • TMSS-3134
  • TMSS-2872
  • defer-state
  • add-custom-monitoring-points
  • TMSS-3101-Front-End-Only
  • TMSS-984-choices
  • SDC-1400-Front-End-Only
  • TMSS-3079-PII
  • TMSS-2936
  • check-for-max-244-subbands
  • TMSS-2927---Front-End-Only-PXII
  • Before-Remove-TMSS
  • LOFAR-Release-4_4_318 protected
  • LOFAR-Release-4_4_317 protected
  • LOFAR-Release-4_4_316 protected
  • LOFAR-Release-4_4_315 protected
  • LOFAR-Release-4_4_314 protected
  • LOFAR-Release-4_4_313 protected
  • LOFAR-Release-4_4_312 protected
  • LOFAR-Release-4_4_311 protected
  • LOFAR-Release-4_4_310 protected
  • LOFAR-Release-4_4_309 protected
  • LOFAR-Release-4_4_308 protected
  • LOFAR-Release-4_4_307 protected
  • LOFAR-Release-4_4_306 protected
  • LOFAR-Release-4_4_304 protected
  • LOFAR-Release-4_4_303 protected
  • LOFAR-Release-4_4_302 protected
  • LOFAR-Release-4_4_301 protected
  • LOFAR-Release-4_4_300 protected
  • LOFAR-Release-4_4_299 protected
41 results

test_utils.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    main.cpp 4.58 KiB
    #include <iostream>
    #include "apsctl/conf.h"
    //#include "structs.h"
    #include "drivers/drvbase.h"
    
    #include <capnp/message.h>
    #include <capnp/serialize-packed.h>
    #include "interface/pypcc.capnp.h"
    #include <fcntl.h>
    
    c_drivers drivers1;
    t_buffer buffer[3072]; 
    bool mask[96]; 
    int fd_out;
    
    void SetResult(int id,int lenbuffer,int lenmask){
      std::cout << "Set Result lenbuf="<<lenbuffer<<" lenmask="<<lenmask<<"\n";
      ::capnp::MallocMessageBuilder message;
      OPCUAset::Builder result = message.initRoot<OPCUAset>();
      result.setId(id);
      result.setType(InstType::VAR_SET);
      ::capnp::List<uint8_t>::Builder buf2=  result.initData(lenbuffer);
      for (int x=0;x<lenbuffer;x++) buf2.set(x,buffer[x]);
      ::capnp::List<bool>::Builder mask2=  result.initMask(lenmask);
      for (int x=0;x<lenmask;x++) mask2.set(x,mask[x]);
      std::cout << "Send result id=" << id << "\n";
      writePackedMessageToFd(fd_out,message);
    };
    
    void getvar(int varid,int lenmask){
       if ((varid<0) || (varid>number_vars)){
              std::cout << "get var: Invalid variable id!\n";
              return;
       };
       int drvnum=variables[varid].driver;
       std::cout << "getvar: id=" << varid << " name=" << variables[varid].name << " driver=" << drvnum << "\n"; 
       int lenbuffer=drivers1.d[drvnum]->getvar(varid,buffer,lenmask,mask);
       SetResult(varid,lenbuffer,lenmask);
    }
    
    void setvar(int varid,int lenbuffer,int lenmask){
       if ((varid<0) || (varid>number_vars)){
              std::cout << "Set var: Invalid variable id!\n";
              return;
       };
       int drvnum=variables[varid].driver;
       std::cout << "set variable call: Inst id=" << varid <<"=" << variables[varid].name << " len="<<lenbuffer<<"\n";
       //std::cout << "Mask=" << lenmask << "," << mask[0] << "," << mask[1] <<"\n"; 
    //       std::cout << "Driver " << drvnum << " lenbuffer="  << lenbuffer << " len mask" << lenmask <<"\n";
       drivers1.d[drvnum]->setvar(varid,lenbuffer,buffer,lenmask,mask);
    }
    
    void setdev(t_devreg devreg,int lenbuffer,int lenmask){
       std::cout << "setdev " << devreg.driver << ":"<<devreg.address <<":"<<devreg.register_W<<"\n";
       drivers1.d[devreg.driver]->setdevreg(devreg,lenbuffer,buffer,lenmask,mask);
    }
    
    void methodcall(int varid,int lenmask)
    {
       if ((varid<0) || (varid>number_methods)){
              std::cout << "Set var: Invalid method id!\n";
              return;
       };
       t_method method=method_config[varid];
       for (int x=0;x<method.len;x++)
       { t_instruction I=method.instructions[x];
         switch (I.type){
            case inst_setvar:
                 for (int x=0;x<I.len;x++) buffer[x]=I.data[x];
                 setvar(I.variable,I.len,lenmask);
                 getvar(I.variable,lenmask);
                 break;
            case inst_getvar:
                 getvar(I.variable,lenmask);
                 break;
            case inst_getvarall:
                 getvar(I.variable,0);
                 break;
            case inst_wait:
                 std::cout << "Sleep not implemented yet!!\n";
                 break;
            case inst_devreg:
                 for (int x=0;x<I.len;x++) buffer[x]=I.data[x];
                 setdev(I.devreg,I.len,lenmask);
                 break;
            case inst_method:
                 methodcall(I.variable,lenmask);
                 break;
         }
       }
    }
    
    
    int main(int argc, char *argv[])
    {
    //  driver
    //  std::cout << drivers1.d[0]->config.name << "\n";
    //  std::cout << drivers1.d[1]->config.name << "\n";
    //  std::cout << drivers1.d[1]->parent->config.name << "\n";
    //  c_i2c i2c1(I2C1);
    //  u_char buffer[32];
    //  for (int x=0;x<32;x++) buffer[x]=0; 
    //  for (int x=0;x<3;x++) buffer[x]=1; 
    //  buffer[2]=1;
    //  drivers1.d[1]->setvar(1,32,buffer);
    //  for (int x=0;x<3;x++) buffer[x]=x; 
    //  drivers1.d[1]->setvar(4,32,buffer);
    //  for (int x=0;x<number_vars;x++)
    //    std::cout << variables[x].name << "\n";
     for (int x=0;x<number_drivers;x++) drivers1.d[x]->drivers=drivers1.d;
     std::cout << "Open read pipe\n";
     int fd_in=open("serv_to_RCU",O_RDONLY);
     if (fd_in<0) return false;
     fd_out=open("RCU_to_serv",O_WRONLY);
     if (fd_out<0) return false;
     while (1) {
       ::capnp::PackedFdMessageReader message(fd_in);
    //   ::capnp::StreamFdMessageReader message(fd_in);
       OPCUAset::Reader Inst=message.getRoot<OPCUAset>();
      // int encoded_array=capnp::messageToFlatArray(Inst);
       int lenbuffer=0;
       for (uint8_t value: Inst.getData()) buffer[lenbuffer++]=value;
       int lenmask=0;
       for (bool value: Inst.getMask()) mask[lenmask++]=value;
       int varid=Inst.getId();
       if (Inst.getType()==InstType::METHOD){
          std::cout << "Method call: Inst id=" << int(Inst.getId()) <<"\n";
          methodcall(varid,lenmask);
          continue;
       } 
       if (Inst.getType()==InstType::VAR_SET) setvar(varid,lenbuffer,lenmask);
       getvar(varid,lenmask);
    
     };
    // fclose(fd);
    };