Ejemplo n.º 1
0
// returns diff from uppper left corner
void VoxelImage::cutBorders()
{
    AGPainter p(mSurface);
    int minx,miny,maxx,maxy;
    bool found=false;

    minx=maxx=miny=maxy=0;

    cdebug(mSurface.width()<<"///"<<mSurface.height());
    for(int x=0; x<mSurface.width(); x++)
        for(int y=0; y<mSurface.height(); y++)
        {
            AGColor c=p.getPixel(x,y);
            if(c.a>0)
            {
                if(found)
                {
                    minx=std::min(minx,x);
                    miny=std::min(miny,y);
                    maxx=std::max(maxx,x);
                    maxy=std::max(maxy,y);
                    //cdebug("x:"<<x<<" y:"<<y);
                    //cdebug(minx<<"/"<<maxx<<","<<miny<<",m:"<<maxy);
                }
                else
                {
                    minx=maxx=x;
                    miny=maxy=y;
                    found=true;
                }
            }

        }

    cdebug(minx<<";"<<maxx<<";"<<miny<<";"<<maxy);
    cdebug(mSurface.width()<<"///"<<mSurface.height());

    if(!found)
    {
        maxx=maxy=5;
        minx=miny=0;
    }
    int w=maxx-minx+1;
    int h=maxy-miny+1;

    w=std::max(10,w); // workaround for bad libpng calls
    h=std::max(10,h);

    if(w<=0 || h<=0)
        std::cerr<<"Error cutting! "<<w<<","<<h<<std::endl;

    AGSurface ns(w,h);
    AGPainter p2(ns);
    p2.blit(mSurface,AGRect(0,0,w,h),AGRect(minx,miny,w,h));
    mSurface=ns;
    mCenter=mCenter-Pos2D(minx,miny);

    if(w==0 || h==0)
        mSurface=AGSurface(1,1); // FIXME: this is some workaround
}
Ejemplo n.º 2
0
void AntargisMap::loadXML(const xmlpp::Node &node)
{
  xmlpp::Node::const_iterator i=node.begin();
  for(;i!=node.end();i++)
    {
      TRACE;
      AntEntity *e=0;
      if(i->getName()=="heightMap")
        {
          CTRACE;
          cdebug("content:"<<i->getContent());
          cdebug("---");
          std::istringstream hmaps;
          hmaps.str(i->getContent());
          // parse height map
          float h;
          cdebug("mH:"<<mH);
          cdebug("mW:"<<mW);
          for(int j=0;j<mH;j++)
            {
              for(int i=0;i<mW;i++)
                {
                  hmaps>>h;
                  mHeight.setPoint(i,j,h);
                }
              cdebug("j:"<<j);
            }
        }
      else if((e=loadEntity(*i)))
Ejemplo n.º 3
0
/*
*1-on,0-off
*/
int setFanRunLed(int runStatus)
{
	int ret = 0 ;
     	unsigned char data[2];
	data[0] = 0x00;
	if (runStatus==0)
	  	data[1] = 0x00;
	else
	  	data[1] = 0x01;
	
	int fd = open(FPGADRVDIR, O_RDWR);
	if (fd < 0)
	{
		cdebug("open /dev/spidev0.0 is error");
    	return (-1);
	}
	if(ioctl(fd, SPI_IOC_OPER_FPGA, NULL))
	{
		cdebug("ioctl SPI_IOC_OPER_FPGA error\n");
	}

	lseek(fd, FAN_LED_ADDR, SEEK_SET);
	ret = write(fd , data , 2) ;
	if(ioctl(fd, SPI_IOC_OPER_FPGA_DONE, NULL))
	{
		cdebug("ioctl SPI_IOC_OPER_FPGA error\n");
	}
   	close(fd);
	return 0;
}
Ejemplo n.º 4
0
int getFanInfo(int index, struct sdm_ce_fan_running_info *fan)
{
  int is_raise_alarm =0 ;
  unsigned short fan_speed[2];
  cdebug("Start fan getFanInfo\n");
  if(index != 1)    // For 1610, There are one fan module with 3 subunit 
  {
    cdebug("Error Fan index %d. \n", index);
    return (-1);
  }

  //if(NULL == fan || NULL == fan[0].SubUnitHwState || NULL == fan[0].RunSpeed)
  if(NULL == fan)
  {
    cdebug("The parameter in function getFanInfo is NULL\n");
    return (-1);
  }
  memset(fan, 0, sizeof(struct sdm_ce_fan_running_info));
  if(getFanSpeed(fan_speed)<0)
  {
  	 cdebug("Can not get the fan speed\n");
  	return (-1);
  }
  fan[0].RunSpeed[0] = fan_speed[0];
  if (fan_speed[0]<=FAN_SPEED_THRESH)
	is_raise_alarm = 1 ;
  fan[0].RunSpeed[1] = fan_speed[1];
  if (fan_speed[1]<=FAN_SPEED_THRESH)
	is_raise_alarm = 1 ;  

//  cdebug("The fan speed in function getFanInfo is: \n");
//  pdata((unsigned char *)fan[0].RunSpeed,4);
//  setFanRunLed(is_raise_alarm);
  return 0;
}
Ejemplo n.º 5
0
bool EditIsoView::selectSize(const std::string&,const AGEvent *,AGMessageObject *pCaller)
{
  CTRACE;
  cdebug(dynamic_cast<AGWidget*>(pCaller)->getName());
  editSize=toInt(dynamic_cast<AGWidget*>(pCaller)->getName().substr(4,std::string::npos));//mEditButtons[pCaller];
  cdebug(editSize);
  mAddEntity="";
  return true;
}
Ejemplo n.º 6
0
    void do_test(const TestOpts& opts) {
        std::cout << "Testing with parameters: " << opts.to_string() << std::endl;

        std::vector<std::thread> threads;
        TestContext ctx(opts);

        std::cout << "Running workers ... " << std::endl;
        threads.emplace_back([&ctx] {
            ctx.barrier_start.wait();

            for (size_t i = 1; i <= ctx.opts.n_additions + ctx.opts.n_elements; ++i) {
                while (!ctx.buffer.enqueue(i)) {
                    std::this_thread::yield();
                }
                cdebug("added " << i);
            }
        });

        threads.emplace_back([&ctx] {
            ctx.barrier_start.wait();

            for (size_t i = 1; i <= ctx.opts.n_additions; ++i) {
                size_t result = -1;
                while (!ctx.buffer.dequeue(result)) {
                    std::this_thread::yield();
                }
                cdebug("checking " << i);
                test_assert(result == i, "expected to get " << i << " << as next result, got " << result);
            }
        });

        std::cout << "Done" << std::endl;

        std::cout << "Joining workers ... " << std::endl;
        for (auto& t : threads) {
            if (t.joinable()) {
                t.join();
            }
        }

        for (size_t i = 1; i <= ctx.opts.n_elements; ++i) {
            size_t result = -1;
            test_assert(ctx.buffer.dequeue(result), "could not get result");
            cdebug("checking " << i);
            test_assert(result == i + ctx.opts.n_additions, "expected to get " << i + ctx.opts.n_additions << " << as next result, got " << result);
        }

        std::cout << "Done" << std::endl;
        std::cout << "OK" << std::endl;
    }
Ejemplo n.º 7
0
/*write data to fpga */
int write_fpga_data(int fd, struct fpga_msg *msg, int step)
{
    if(fd < 0) 
        return (-1);
    lseek(fd, (*msg).addr, SEEK_SET);
    cdebug("step %d begin ==== write %d bytes at 0x%04x:", step, (*msg).len, (unsigned short)(*msg).addr);
    if (write(fd, (*msg).buf, (*msg).len) == (*msg).len){
        pdata((*msg).buf, (*msg).len);
        cdebug("\nstep %d done\n", step);
    } else{
        cdebug(" step %d error\n", step);
        return (-1);
    }
    return 1;
}
Ejemplo n.º 8
0
/*********************************************
  *
  *从缓冲器中获取光模块信息
  *
  *
  *
  *********************************************/
int get_sfpEnvInfo_by_port(int port, struct sfpxfpenvinfo_ *sfpPtr)
{

	/*
	struct sfpxfpenvinfo_ sfpinfo;
	
	if(sfpPtr == NULL) 
	{
		//cdebug("get_sfpEnvInfo_by_port input address err\n");
		return (-1);
	}

	if(port > SFPXFP_PORT_NUM)
	{
	 	//cdebug("get_sfpEnvInfo_by_port input port err\n");
		return (-1);
	}
	extern struct sfpxfpenvinfo_ *sfpinfo_table;

	memcpy(sfpPtr, sfpinfo_table[port-1], sizeof(sfpinfo));
	*/

	if(get_sfpEnvInfo_by_port_from_sxfp(port, sfpPtr) != 0)
  {
    cdebug("Error to get_sfpEnvInfo_by_port_from_sxfp()\n");
  }
	
	return 0;
	 
}
Ejemplo n.º 9
0
IsoView::IsoView(AGWidget *parent,AGRect r,Pos3D p,AntargisMap *map):
  AntargisView(parent,r,p,false),MapListener(),mMap(map),mRain(r.w,r.h,0),shallUpdate(false),maxPos(0,0,0)
{
  cdebug("IsoView-Rect:"<<r);
  inited=false;
  initTileCache();
}
Ejemplo n.º 10
0
Pos3D randDir(Pos3D dir,float angle)
{
  return getRandDirOrtho(dir);
  cdebug("dir:"<<dir);
  dir=dir.normalized();
  cdebug("dir:"<<dir);
  Pos3D normal=getRandDirOrtho(dir).normalized();
  cdebug("normal:"<<normal);

  cdebug("*:"<<normal*dir);

  Pos3D res=rotVector(dir,normal,angle);

  cdebug("res:"<<res);

  return res;
}
Ejemplo n.º 11
0
void AntargisMap::saveXML(xmlpp::Node &node) const
  {
    CTRACE;
    cdebug("node:"<<&node);
    // height and grass map
    xmlpp::Node &hmap=*node.add_child("heightMap");
    xmlpp::Node &gmap=*node.add_child("grassMap");
    hmap.set("width",toString(mW));
    hmap.set("height",toString(mH));
    gmap.set("width",toString(mW));
    gmap.set("height",toString(mH));
    std::ostringstream hmaps,gmaps;
    for(int j=0;j<mH;j++)
      {
        for(int i=0;i<mW;i++)
          {
            hmaps<<(int)(mHeight.getPoint(i,j))<<" ";
            gmaps<<(int)(mGrass.getPoint(i,j))<<" ";
          }
        hmaps<<std::endl;
        gmaps<<std::endl;
      }
    cdebug(hmaps.str());
    hmap.setContent(hmaps.str());
    gmap.setContent(gmaps.str());
    
    // players
    /*    std::set<AntPlayer*>::const_iterator k=mPlayers.begin();
    
    for(;k!=mPlayers.end();k++)
    {
      xmlpp::Node &child=node.newChild("player");
      (*k)->saveXML(child);
      }*/

    // entities
    std::list<AntEntity*>::const_iterator i=mEntList.begin();
    for(;i!=mEntList.end();i++)
      {
        xmlpp::Node &child=node.newChild((*i)->xmlName());
        (*i)->saveXML(child);
      }

  }
Ejemplo n.º 12
0
bool EditIsoView::addEntity(const std::string&,const AGEvent *,AGMessageObject *pCaller)
{
  AGWidget *b=dynamic_cast<AGWidget*>(pCaller);
  if(b)
  {
    std::string n=b->getName();
    mAddEntity=n;
    cdebug(mAddEntity);
  }
  return true;
}
Ejemplo n.º 13
0
/*****
*  Enable fan edit by lidingcheng2015-05-12 for on-off fan
*	1-enable,0-disable
*/
int enableFan(const short on_off)
{
  int fanState, ret = 0;
  unsigned char data[4]={0};
  if (on_off==1)
	{
	  data[2] = 0x00;
	  data[3] = 0x00;
	}
	else
	{
	    data[2] = 0xff;
	    data[3] = 0xff;
	}

	int fd = open(FPGADRVDIR, O_RDWR);
	if (fd < 0) 
    	{
      		cdebug("open /dev/spidev0.0 is error") ;
      		return (-1);
    	}
	if(ioctl(fd, SPI_IOC_OPER_FPGA, NULL))
	{
		cdebug("ioctl SPI_IOC_OPER_FPGA error\n");
	}
	lseek(fd, FAN_ENABLE_ADDR, SEEK_SET);
	if(!(write(fd, data, 4) == 4))
	{
		cdebug("Write to enable FAN error!\n");
		ret = -1;
		goto END;
	}

END:
	if(ioctl(fd, SPI_IOC_OPER_FPGA_DONE, NULL))
	{
		cdebug("ioctl SPI_IOC_OPER_FPGA_DONE error\n");
	}
    close(fd);
    return ret;
}
Ejemplo n.º 14
0
int getFanSpeed(unsigned short *fan)
{

    int i, fd , ret = 0;
    struct fpga_msg fan_fpga_msg[2];

    fd=open(FPGADRVDIR,O_RDWR);

    if(fd<0)
    {
        cdebug("open /dev/spidev0.0 error\n");
        return(-1);
    }
	if(ioctl(fd, SPI_IOC_OPER_FPGA, NULL))
	{
		cdebug("ioctl SPI_IOC_OPER_FPGA error\n");
	}

    fan_fpga_msg[0].addr = FAN1_SPEED_ADDR;
    fan_fpga_msg[1].addr = FAN2_SPEED_ADDR;

    for(i=0; i<2; i++)
    {
        fan_fpga_msg[i].len = 4;
        ret = read_fpga_data(fd, (struct fpga_msg*)&fan_fpga_msg[i], 0) ;
		if (ret>0)	
        {
            	cdebug("read the %d fan successfully", i);
            	fan[i] = fan_fpga_msg[i].buf[2]<<8|fan_fpga_msg[i].buf[3];
		fan[i] /= 60; 
	    	cdebug("The fan[%d] is : %d\n", i, fan[i]);
        }
	else
	{
		cdebug("read the %d fan unsuccessfully", i);
        	fan[i] = 0;        // Rethink this value !!!

		if(ioctl(fd, SPI_IOC_OPER_FPGA_DONE, NULL))
		{
			cdebug("ioctl SPI_IOC_OPER_FPGA_DONE error\n");
		}
            	close(fd);
        }
    }

	if(ioctl(fd, SPI_IOC_OPER_FPGA_DONE, NULL))
	{
		cdebug("ioctl SPI_IOC_OPER_FPGA_DONE error\n");
	}
    close(fd);

    return 0;
}
Ejemplo n.º 15
0
int getFanState(unsigned short *fan)
{
  if(fan == NULL)
  {
    cdebug("Para pointer is NULL in function getFanState\n");
    return (-1);
  }
  //fan[0] = getFanRunState(); //edit by lidingcheng for plugin
  fan[0] =  getFanHwState();

  if(fan[0]==1 || fan[0]==0)
  	return 0;
  else
  	return -1;
}
Ejemplo n.º 16
0
void AntargisMap::insertEntity(AntEntity *e)
{
  cdebug("INSERTING:"<<e);
  mEntities.insert(e);
  mEntList.push_back(e);
  mEntityMap[e->getID()]=e;
  /*  if(e->mRubyObject)
    {
      VALUE rubyAnimal = e->mRUBY;

      //rb_gc_register_address(&rubyAnimal);
      //      rb_gc_mark(rubyAnimal);
      cdebug("mark:");
   }
  */
}
Ejemplo n.º 17
0
   int main(int argc, char * argv[])
   {

   struct sfpxfpenvinfo_ *sfpPtr;
   int i ;
   cdebug("Begin-----------\n");
   sfpPtr = malloc(sizeof(struct sfpxfpenvinfo_));
   if(sfpPtr == NULL)
   {
   printf("malloc error\n");
   return ;
   }
	for(i=1;i<21;i++)
	{
   if(get_sfpEnvInfo_by_port_from_sxfp(i,sfpPtr) == 0)
   {
   printf("------------------port %d-----------------\n",i);
   printf("Vendor Name=%s\n", sfpPtr->vendorName);
   printf("Vendor PN = %s \n", sfpPtr->vendorPN);
   printf("transceiverType = %s \n", sfpPtr->transceiverType);
   printf("connector type = %s\n", sfpPtr->connectorType);
   printf("opticalType = %s\n", sfpPtr->opticalType);
   printf("lineCoding = %s\n", sfpPtr->lineCoding);
   printf("vendorRev = %s\n", sfpPtr->vendorRev);
   printf("nominalBitRate = %s\n", sfpPtr->nominalBitRate);
   printf("linkLength = %s\n", sfpPtr->linkLength);
   printf("waveLength = %s\n", sfpPtr->waveLength);
   printf("maxBitRateMargin = %s\n", sfpPtr->maxBitRateMargin);
   printf("minBitRateMargin = %s\n", sfpPtr->minBitRateMargin);
   printf("vendorSerialNo = %s\n", sfpPtr->vendorSerialNo);
   printf("date = %s\n", sfpPtr->date);
   printf("temperature = %s\n", sfpPtr->temperature);
   printf("vccVoltage = %s\n", sfpPtr->vccVoltage);
   printf("TXBiasCurrent = %s\n", sfpPtr->TXBiasCurrent);
   printf("TXOutputPower = %s\n", sfpPtr->TXOutputPower);
   printf("RXInputPower = %s\n", sfpPtr->RXInputPower);

   }else{
   printf("\n get sfp info of port %d is error\n",i);
   }
	}
   free(sfpPtr);

   return 1;

   }
Ejemplo n.º 18
0
int  getFanHwState(void)      //There is only one fan module
{
    struct fpga_msg fan_state_msg;

    int fd = open(FPGADRVDIR, O_RDWR);
    if (fd < 0)
    {
        cdebug("open /dev/fpga is error");
        return (-1);
    }
	if(ioctl(fd, SPI_IOC_OPER_FPGA, NULL))
	{
		cdebug("ioctl SPI_IOC_OPER_FPGA error\n");
	}

    //fan_state_msg.addr = FAN_STATE_ADDR;
    fan_state_msg.addr = FAN_PLUG_IN_ADDR ;
    fan_state_msg.len = 4;

    lseek(fd, fan_state_msg.addr, SEEK_SET);
    if (read(fd, fan_state_msg.buf, fan_state_msg.len) == fan_state_msg.len)
    {
        cdebug("To get the fan Hw state");
    }
	else
    {
        cdebug("Error to get the fan state");
		if(ioctl(fd, SPI_IOC_OPER_FPGA_DONE, NULL))
		{
			cdebug("ioctl SPI_IOC_OPER_FPGA_DONE error\n");
		}
        close(fd);
        return (-1);
    }
	
	cdebug("In getFanHwState, register is: \n");

	if(ioctl(fd, SPI_IOC_OPER_FPGA_DONE, NULL))
	{
		cdebug("ioctl SPI_IOC_OPER_FPGA_DONE error\n");
	}

	close(fd);
	return (fan_state_msg.buf[3] & 0x01) ;

}
Ejemplo n.º 19
0
int get_bdinfo_port_num(struct bdinfo_ *ptr)
{
    if(ptr != NULL)
    {
        ptr->RJ45100M_num = switch_total_RJ45100M_port_num;
        ptr->SFP100M_num = switch_total_SFP100M_port_num;
        ptr->RJ451G_num = switch_total_RJ451G_port_num;
        ptr->SFP1G_num = switch_total_SFP1G_port_num;
        ptr->XFP10G_num = switch_total_XFP10G_port_num;
        ptr->total_num = switch_total_RJ45100M_port_num + switch_total_SFP100M_port_num + switch_total_RJ451G_port_num + \
                         switch_total_SFP1G_port_num + switch_total_XFP10G_port_num;


        cdebug("RJ45 100M port=%d  SFP 100M port=%d RJ45 1G port=%d SFP 1G port=%d XFP 10G port=%d total_port=%d\n", \
                switch_total_RJ45100M_port_num, switch_total_SFP100M_port_num,switch_total_RJ451G_port_num,\
                switch_total_SFP1G_port_num, switch_total_XFP10G_port_num, ptr->total_num);

        return 0;
    }
    else
        return(-1);
}
Ejemplo n.º 20
0
/*Check if the fiber module is plugged */
int is_fiber_plugged(int fd, int port)
{
    struct fpga_msg is_plugged_msg;
	unsigned short temp = 0;
	if(port<16)
	{
    	is_plugged_msg.addr = FPGA_SFP_PLUGGED;
	}
	else
	{
    	is_plugged_msg.addr = FPGA_SFPXFP_PLUGGED;			
	}
	is_plugged_msg.len = 2;
	cdebug("Check the addr 0x%x\n ", is_plugged_msg.addr);
	lseek(fd, is_plugged_msg.addr, SEEK_SET);
	if (read(fd, is_plugged_msg.buf, is_plugged_msg.len) == is_plugged_msg.len)
	{
	cdebug("Check if a fiber modue inserted at Port %d\n ", port);
	pdata(is_plugged_msg.buf,is_plugged_msg.len); 
	}else{
	cdebug("Can not read fpga when check if fiber is plugged");
	return (-1);
	}
	temp = (is_plugged_msg.buf[0] & 0xff)<<8;
	temp += is_plugged_msg.buf[1] & 0xff;
	cdebug("\ntemp is 0x%x\n",temp);
	if((temp>> (port<16?port:(port-16)))  & 0x01 ) //if 1, then return
	{
	cdebug("\n The fiber module is not plugged\n");
	return (-1);
	}
	cdebug("\nThe fiber module is inserted at port %d",port);

	return 1;

}
Ejemplo n.º 21
0
    void do_test(const TestOpts& opts) {
        std::cout << "Testing with parameters: " << opts.to_string() << std::endl;

        std::vector<std::thread> threads;
        TestContext ctx(opts);

        std::cout << "Running workers ... " << std::endl;
        for (size_t i = 0; i < opts.n_workers; ++i) {
            threads.emplace_back([i, &ctx] {
                ctx.barrier_start.wait();

                for (size_t j = 0; j < ctx.opts.n_additions; ++j) {
                    if ((j % ctx.opts.n_workers) != i) {
                        continue;
                    }

                    cdebug("!ctx.hash_set_a.contains(" << j << ") before add");
                    test_assert(!ctx.hash_set_a.contains(j), "expected not to contain " << j << " before test");

                    cdebug("!ctx.hash_set_b.contains(" << j << ") before add");
                    test_assert(!ctx.hash_set_b.contains(j), "expected not to contain " << j << " before test");

                    cdebug("ctx.hash_set_a.add(" << j << ")");
                    ctx.hash_set_a.add(j);
                    cdebug("ctx.hash_set_b.add(" << j << ")");
                    ctx.hash_set_b.add(j);

                    cdebug("ctx.hash_set_a.contains(" << j << ") after add");
                    test_assert(ctx.hash_set_a.contains(j), "expected to contain " << j << " after addition");
                    cdebug("ctx.hash_set_b.contains(" << j << ") after add");
                    test_assert(ctx.hash_set_b.contains(j), "expected to contain " << j << " after addition");

                    cdebug("ctx.hash_set_a.add(" << j << ") once more");
                    ctx.hash_set_a.add(j);
                    cdebug("ctx.hash_set_b.add(" << j << ") once more");
                    ctx.hash_set_b.add(j);

                    cdebug("ctx.hash_set_a.remove(" << j << ")");
                    ctx.hash_set_a.remove(j);
                    cdebug("ctx.hash_set_b.remove(" << j << ")");
                    ctx.hash_set_b.remove(j);

                    cdebug("!ctx.hash_set_a.contains(" << j << ") after remove");
                    test_assert(!ctx.hash_set_a.contains(j), "expected not to contain " << j << " after removal");
                    cdebug("!ctx.hash_set_b.contains(" << j << ") after remove");
                    test_assert(!ctx.hash_set_b.contains(j), "expected not to contain " << j << " after removal");

                    cdebug("ctx.hash_set_a.add(" << j << ") second time");
                    ctx.hash_set_a.add(j);
                    cdebug("ctx.hash_set_b.add(" << j << ") second time");
                    ctx.hash_set_b.add(j);

                    cdebug("ctx.hash_set_a.contains(" << j << ") after second add");
                    test_assert(ctx.hash_set_a.contains(j), "expected to contain " << j << " after addition");
                    cdebug("ctx.hash_set_b.contains(" << j << ") after second add");
                    test_assert(ctx.hash_set_b.contains(j), "expected to contain " << j << " after addition");

                    cdebug("finished testing on item " << j);
                }
            });
        }

        std::cout << "Done" << std::endl;

        std::cout << "Joining workers ... " << std::endl;
        for (auto& t : threads) {
            if (t.joinable()) {
                t.join();
            }
        }
        std::cout << "Done" << std::endl;
        std::cout << "OK" << std::endl;
    }
Ejemplo n.º 22
0
VoxelImage *makeTerrainTile(const SplineMapD &m,const SplineMapD &gm,int px,int py)
//ComplexVoxelImage *makeTerrainTile(const SplineMap<float> &m,const SplineMap<float> &gm,int px,int py)
{
    gDrawingTerrain=true;
    Uint32 t1=SDL_GetTicks();

    int w=TILE_WIDTH;
    FastVoxelView v(w,w*4,Pos3D(0,0,0),true);

    if(true)
    {
        for(int x=0; x<w; x++)
            for(int z=0; z<w; z++)
                //    for(int z=w/2-4;z<w/2;z++)
            {
                float mx=float(x*POINTS_PER_TILE)/w+px;
                float mz=float(z*POINTS_PER_TILE)/w+py;

                //  cdebug(mx<<" "<<mz);
                float h=m.get(mx,mz);
                for(int y=std::max(0,(int)(h-3)); y<h; y++)
                {
                    if(y>WATER_HEIGHT)
                    {
                        float a=std::min(1.0f,h-y);
                        int n=rand()%50;

                        v.set(Pos3D(x,y,z),Color(0xAA-n,0xAA-n,0,a));
                    }
                }

                // grass above


                int mgh=(int)gm.get(mx,mz);
                if(mgh>0)
                {
                    float gh=rand()%int(mgh);
                    if(gh>0)
                        for(int y=0; y<gh; y++)
                        {
                            float a=1.0f-(y/gh);
                            int mh=(int)(y+h);
                            //    cdebug(a);
                            if(mh>WATER_HEIGHT)
                                v.set(Pos3D(x,mh,z),Color(0,0xAA,0,a));
                        }
                }

                /*
                if(rand()%60<2)
                  {
                    int w=10;
                    int w2=w/2;
                    float x1=(rand()%w)-w2;
                    float z1=(rand()%w)-w2;
                    float x2=(rand()%w)-w2;
                    float z2=(rand()%w)-w2;

                    float steps=15;

                    // paint a longer leaf
                    for(int i=0;i<steps;i++)
                      {
                  int ax=(int)bezier2(i/steps,float(x),x1+x,x2+x);
                  int az=(int)bezier2(i/steps,float(z),z1+z,z2+z);
                  int ay=(int)bezier2(i/steps,0.0f,steps/4,steps/2);

                  v.set(Pos3D(ax,int(ay+h),az),Color(0,0xAA,0,i/steps));
                      }
                  }
                */
            }
        /*
            for(int x=0;x<8;x++)
        for(int y=0;y<8;y++)
         for(int z=0;z<8;z++)
           {
             int mx=x-4;
             int my=y-4;
             int mz=z-4;
             if(sqrt(mx*mx+my*my+mz*mz)<4)
        v.set(Pos3D(x+10,y+40,z+20),Color(0xAA,0,0));
           }

        */
    }


    /** add water **/

    srand(0);
    if(false) // skip water
    {
        float a=18;

        SplineMapD wh((int)a,(int)a,3,1,3,true);

        for(int x=0; x<w; x++)
            for(int z=0; z<w; z++)
            {
                float mx=x-z+w/2;
                float mz=x+z-w/2;

                mx/=w;
                mz/=w;
                while(mx>1)
                    mx-=1;
                while(mx<0)
                    mx+=1;
                while(mz>1)
                    mz-=1;
                while(mz<0)
                    mz+=1;

                float h=wh.get(a*float(mx),a*float(mz))+6;

                for(int y=0; y<h; y++)
                {
                    float f=std::min(1.0f,h-y);
                    v.set(Pos3D(x,y,z),Color(0,0,0xAA,f));
                }
            }
    }


    /** till here */

    Uint32 t2=SDL_GetTicks();

    cdebug("TIME:"<<t2-t1);

    AGSurface s= v.getSurface();

    t1=SDL_GetTicks();

    cdebug("TIME:"<<t1-t2);

    //  SDL_SaveBMP(s.surface(),"hupe.bmp");


    //return new ComplexVoxelImage(Pos3D(0,0,0),s,v.getDepthMap(),v.getShadowMap());

    gDrawingTerrain=false;
    return new VoxelImage(s,Pos3D(0,0,0));
}
Ejemplo n.º 23
0
bool CompleteIsoView::eventMouseClick(const AGEvent *m)
{
  const AGSDLEvent *e=reinterpret_cast<const AGSDLEvent*>(m);
  if(e)
    {
      if(e->getButton()==SDL_BUTTON_RIGHT)
        mSelected.clear();
      else if(getScreenRect().contains(e->getMousePosition()))
        {
          //clicked
          AGPoint p(e->getMousePosition());
          cdebug("clicked on "<<p.x<<","<<p.y);

          std::vector<AntEntity *> es=getEntity(p);
	  if(es.size())
	    clickEntities(toEntVector(es));
	  else
	    {
              IVTile t=getTile(p);
              cdebug(t.x<<","<<t.y);
	      Pos2D p2=getTilePos(t);
	      clickMap(p2);
	    }
	  /*
          if(es.size())
            {
              if(mSelected.size())
                {
                  // already something selected - so fight
                  for(std::set
                        <AVItem*>::iterator k=mSelected.begin();k!=mSelected.end();k++) // loop selected
                      {
                        AVItem *i=*k;

                        AntHero *h=dynamic_cast<AntHero*>(mEntities[i]);
                        if(isMyHero(h))
                          {
                            AntHero *otherHero=getHero(es);
                            if(otherHero)
                              h->fightHero(otherHero);
                            //h->setJob(new FightJob(*es.begin())); // FIXME: currently fighting first
                          }
                      }

                }
              else
                {
                  std::vector<AntEntity*>::iterator i=es.begin();
                  for(;i!=es.end();i++)
                    mSelected.insert(mEntitiesInv[*i]);
                }

            }
          else
            {

              IVTile t=getTile(p);
              cdebug(t.x<<","<<t.y);
	      Pos2D p2=getTilePos(t);

	      clickMap(p2);

              if(mSelected.size() && es.size()==0)
                {
                  for(std::set
                        <AVItem*>::iterator k=mSelected.begin();k!=mSelected.end();k++)
                      {
                        AVItem *i=*k;

                        AntEntity *h=mEntities[i];
                        if(isMyHero(h))
                          {
			    //                            h->goTo(1,getTilePos(t));
                            h->setJob(new MoveJob(0,getTilePos(t),0));
                          }
                      }
                }
		}*/
        }
    }
  return false;

}
Ejemplo n.º 24
0
int main(int argc,char *argv[])
{
  AGMain main;
  MyApp app;

  AntargisView *av=new AntargisView(0,AGRect(0,0,100,100),Pos3D(0,0,0));

  int x,y,z;

  int w=64;
  int s=0;

  Terrain t(16,16);

  AGSurface ms;

  int test=4;

  if(argc>1)
    test=atoi(argv[1]);

  if(test==1)
    {
      ms=test1();
      av->insert(new VoxelImage(ms,Pos3D(0,0,0)));
    }
  if(test==2)
    {
      ms=ball();
      av->insert(new VoxelImage(ms,Pos3D(0,0,0)));
    }
  else if(test==3)
    {
      ms=getTerrain(t.getInfo(2,0));
      av->insert(new VoxelImage(ms,Pos3D(0,0,0)));
    }
  else if(test==4)
    {
      ms=getTerrain(t.getInfo(1,0));
      av->insert(new VoxelImage(ms,Pos3D(0,0,0)));


      ms=getTerrain(t.getInfo(2,0));
      av->insert(new VoxelImage(ms,Pos3D(64,0,0)));


      ms=getTerrain(t.getInfo(1,1));
      av->insert(new VoxelImage(ms,Pos3D(32,0,-32)));

      ms=getTerrain(t.getInfo(2,1));
      av->insert(new VoxelImage(ms,Pos3D(64+32,0,-32)));
    }
  else if(test==5)
    {
      int x,y;
      for(int x=0;x<4;x++)
        for(int y=0;y<4;y++)
          {
            ms=getTerrain(t.getInfo(x,y));
            av->insert(new VoxelImage(ms,Pos3D(x*64+(y%2)*32,0,-y*32)));
          }
    }
  else if(test==6)
    {
      SplineMap<float> m(16,16,50);
      SplineMap<float> gm(16,16,20);
      int w=64;
      VoxelView v(w,w*2,Pos3D(0,0,0),true);

      for(int x=0;x<w;x++)
        for(int z=0;z<w;z++)
          {
            float mx=x/16.0;
            float mz=z/16.0;

            float h=m.get(mx,mz);
            for(int y=0;y<h;y++)
              {
                float a=std::min(1.0f,h-y);
                //    cdebug(a);
                v.set(Pos3D(x,y,z),Color(0xAA,0xAA,0,a));
              }

            // grass above

            float gh=rand()%int(gm.get(mx,mz));
            if(gh>0)
              for(int y=0;y<gh;y++)
                {
                  float a=1.0f-(y/gh);
                  //    cdebug(a);
                  v.set(Pos3D(x,y+h,z),Color(0,0xAA,0,a));
                }

          }

      /*



      // small ball above

      for(int x=0;x<8;x++)
      for(int y=0;y<8;y++)
      for(int z=0;z<8;z++)
      {
       int mx=x-4;
       int my=y-4;
       int mz=z-4;
       if(sqrt(mx*mx+my*my+mz*mz)<4)
      v.set(Pos3D(x+10,y+40,z+20),Color(0xAA,0,0));
      }

      */
      av->insert(new VoxelImage(v.getSurface(),Pos3D(0,0,0)));

    }

  else if(test==7)
    {
      float v0=-20;
      float v1=60;
      float v2=60;
      float v3=-20;
      float v4=0;
      float v5=0;
      float v6=0;
      int x;

      SDL_Surface *s=getScreen().surface();
      Color c(0,0,1);
      for(x=0;x<32;x++)
        {
          int y=spline2(x/32.0,v0,v1,v2);//,v3);
          sge_PutPixel(s,x,y+50,c.toColor(s));
        }
      for(x=0;x<32;x++)
        {
          int y=spline2(x/32.0,v1,v2,v3);//,v4);
          sge_PutPixel(s,x+32,y+50,c.toColor(s));
        }
      for(x=0;x<32;x++)
        {
          int y=spline2(x/32.0,v2,v3,v4);//,v5);
          sge_PutPixel(s,x+64,y+50,c.toColor(s));
        }
      for(x=0;x<32;x++)
        {
          int y=spline2(x/32.0,v3,v4,v5);//,v6);
          sge_PutPixel(s,x+96,y+50,c.toColor(s));
        }
      SDL_Flip(s);
      //      SDL_Delay(1000);
    }
  else if(test==8)
    {
      float v0=-20;
      float v1=60;
      float v2=60;
      float v3=-20;
      float v4=0;
      float v5=0;
      float v6=0;
      int x;

      SDL_Surface *s=getScreen().surface();
      Color c(1,0,1);
      for(x=0;x<32;x++)
        {
          int y=spline3(x/32.0,v0,v1,v2,v3);
          sge_PutPixel(s,x,y+50,c.toColor(s));
        }
      for(x=0;x<32;x++)
        {
          int y=spline3(x/32.0,v1,v2,v3,v4);
          sge_PutPixel(s,x+32,y+50,c.toColor(s));
        }
      for(x=0;x<32;x++)
        {
          int y=spline3(x/32.0,v2,v3,v4,v5);
          sge_PutPixel(s,x+64,y+50,c.toColor(s));
        }
      for(x=0;x<32;x++)
        {
          int y=spline3(x/32.0,v3,v4,v5,v6);
          sge_PutPixel(s,x+96,y+50,c.toColor(s));
        }
      SDL_Flip(s);
      //      SDL_Delay(1000);
    }
  else if(test==9)
    {
      SplineMap<float> m(64,64,50);
      int w=64;
      VoxelView v(w,w*2,Pos3D(0,0,0),false);

      int z=0;
      for(int x=0;x<w;x++)
        {
          float h=20+x/16.0;
          for(int y=0;y<h;y++)
            {
              float a=std::min(1.0f,h-y);
              //      if(a<1)
              if(a>0)
                {
                  cdebug(a);
                  v.set(Pos3D(x,y,z),Color(0xFF,0xFF,0xFF,a));//Color(0xAA*a,0xAA*a,0));//,a));
                }
            }
        }

      av->insert(new VoxelImage(v.getSurface(),Pos3D(0,0,0)));

    }
  else if(test==10)
    {
      SDL_Surface *s=getScreen().surface();
      for(int x=0;x<100;x++)
        {
          float h=20+x/16.0;
          for(int y=0;y<h;y++)
            {
              float a=std::min(1.0f,h-y);
              if(a>0)
                {
                  sge_PutPixelAlpha(s,x,100-y,SDL_MapRGBA(s->format,0xFF,0xFF,0xFF,a*0xFF),a*0xFF);
                }
            }
        }
      SDL_Flip(s);
      SDL_Delay(1000);
    }
  else if(test==11 || test==12)
    {
      int w=8;
      SplineMap<float> m(POINTS_PER_TILE*(w+2),POINTS_PER_TILE*(w+2),40);
      SplineMap<float> gm(POINTS_PER_TILE*(w+2),POINTS_PER_TILE*(w+2),10);

      if(test==12)
        w=2;

      for(int y=0;y<w;y++)
        for(int x=0;x<w;x++)
          {
            int mx=x*(POINTS_PER_TILE);
            int my=y*(POINTS_PER_TILE/2);
            if(y&1)
              mx+=(POINTS_PER_TILE/2);

            av->insert(new VoxelImage(makeTerrainTile(m,gm,mx,my),Pos3D(mx*TILE_WIDTH/POINTS_PER_TILE,0,my*TILE_WIDTH/POINTS_PER_TILE)));
          }
    }
  else if(test==13)
    {
      AGSurface s=makeWaterTile();
      av->insert(new VoxelImage(s,Pos3D(64,0,0)));
      av->insert(new VoxelImage(s,Pos3D(0,0,0)));
      av->insert(new VoxelImage(s,Pos3D(64+32,0,32)));
      av->insert(new VoxelImage(s,Pos3D(32,0,32)));
      av->insert(new VoxelImage(s,Pos3D(64+32,0,-32)));
      av->insert(new VoxelImage(s,Pos3D(32,0,-32)));
    }
  else if(test==14)
    {
      AGSurface s=makeWaterTile();
      std::string ms=toPNG(s.surface());
      s=fromPNG(ms);
      av->insert(new VoxelImage(s,Pos3D(64,0,0)));
    }

  app.setMainWidget(av);

  app.run();
}
Ejemplo n.º 25
0
void drawTree(FastVoxelView &vv,Pos3D base,float h)
{
  Pos3D p1(0,0,0),p2(0,0,0),p3(0,0,0);
  Color c(0x99,0x69,0);
  Color bc(0,0xAA,0);

  p1=base;
  p2=base+Pos3D(0,1,0)*h*0.25;
  p3=base+Pos3D(0,1,0)*h*0.5;

  cdebug(p1<<p2<<p3);

  Trunk t(p1,p2,p3,7,5);

  std::list<Trunk> tlist,nlist;

  tlist.push_back(t);

  int rw=h/4;

  float angle=M_PI/1.5; // 30 degrees

  int last=5;

  for(int i=0;i<=last;i++)
    {
      std::cout<<"_______________"<<std::endl;
      std::list<Trunk>::iterator k=tlist.begin();

      for(;k!=tlist.end();k++)
	{
	  Pos3D dir=k->p3 - k->p2;

	  int count=4;

	  std::list<Pos3D> l=splitDir(dir,count,angle,M_PI/count/8.0,0);//M_PI/count,angle/3);

	  std::list<Pos3D>::iterator j=l.begin();

	  for(;j!=l.end();j++)
	    {

	      Pos3D r=*j;


	      r=r*rw;

	      int mi=i+1;
	      // c=Color(mi&1,(mi>>1)&1,(mi>>2)&1);

	      /*	      drawBall(vv,k->p1,4,c);
	      drawBall(vv,k->p2,3,c);
	      drawBall(vv,k->p3,2,c);*/

	      	  
	      draw3Line(vv,k->p1,k->p2,k->p3,c,40,k->w1,k->w2);
	      if(i==last)
		draw3Line(vv,k->p1,k->p2,k->p2,bc,4,2,1);


	      
	      float start=0.6;

	      start+=getRandEq()*0.3;

	      Pos3D sp=bezier(start,
			       k->p1,k->p2,k->p3);
	      //	      Pos3D np(k->p3*2-k->p2+Pos3D(rx,ry,rz));
	      Pos3D np(k->p3*2-k->p2+r);
	      




	      Trunk nt(sp,
		       sp*0.5+np*0.5+getRandPos(rw),
		       np,
		       k->w2,k->w2-1);
	      nlist.push_back(nt);


	    }

	}
      rw*=0.9;
      tlist.clear();
      cdebug(nlist.size());
      tlist=nlist;
      nlist.clear();
    }


  // roots
  std::list<Pos3D> l=splitDir(Pos3D(0,-1,0),4,M_PI/4,0,0);
  
  std::list<Pos3D>::iterator j=l.begin();
  for(;j!=l.end();j++)
    {
      Pos3D n=*j * 10 + base;
      draw3Line(vv,base,base*0.5+n*0.5,n,c,40,t.w1,t.w2);
    }
  

}
Ejemplo n.º 26
0
/*********************************************
 *
 *从sfp/xfp模块中直接获取光模块信息
 * for 161x: port : 5-8
 * for 0800C port : 1-8
 * for 1604c port : 1-16 sfp 17-20 xfp
 *********************************************/
int get_sfpEnvInfo_by_port_from_sxfp(int port, struct sfpxfpenvinfo_ *sfpPtr)
{
    int m_type;
    unsigned char baseData[128];
    //unsigned char  tempData=0;
    //port -= 5;
    port -= 1;
    
	cdebug("start get_sfpEnvInfo_by_port_from_sxfp\n");
	
    if(sfpPtr == NULL) 
    {
        cdebug("get_sfpEnvInfo_by_port input address err\n");
        return (-1);
    }

    if(port>SFPXFP_PORT_NUM-1 || port<0)
    {
        cdebug("The port number exceed the ranger\n");
        return (-1);
    }
    memset(baseData, 0,128);

    if(readSfpXfpInfo(port, (char*)baseData) != 0)
    {
        cdebug("read sfp/xfp error\n");
        return (-1);		
    }
    if (SFP == baseData[SFP_IDENTIFIYER])
    {
        sprintf(sfpPtr->transceiverType,"%s", "SFP"); 
    }else{
        cdebug("Unsupported Identifiyer");
        return (-1);
    }
    memcpy(sfpPtr->vendorName, &baseData[SFP_VENDOR_NAME_START],16);
    sfpPtr->vendorName[15] = '\0';
    memcpy(sfpPtr->vendorPN, &baseData[SFP_VENDOR_PN_START],16);
    sfpPtr->vendorPN[15] = '\0';
    // CONNECTOR TYPE
    switch (baseData[CONNECTOR]) 
    {
        case 0x07:
            sprintf(sfpPtr->connectorType, "%s", "LC");
            break;
        case 0x01:
            sprintf(sfpPtr->connectorType,"%s", "SC");
            break;
        default:
            sprintf(sfpPtr->connectorType,"%s", "Unspecified");
            break;
    }

    // OPTICAL TYPE
    switch (baseData[TRANCEIVER_ETHERNET]) 
    {
        case 0x80:
            sprintf(sfpPtr->opticalType, "%s", "BASE-PX"); 
            break;
        case 0x40:
            sprintf(sfpPtr->opticalType, "%s", "BASE-BX10");
            break;
        case 0x20:
            sprintf(sfpPtr->opticalType, "%s",  "100BASE-FX");
            break;
        case 0x10:
            sprintf(sfpPtr->opticalType, "%s", "100BASE-LX"); 
            break;
        case 0x08:
            sprintf(sfpPtr->opticalType, "%s", "1000BASE-T");
            break;
        case 0x04:
            sprintf(sfpPtr->opticalType, "%s", "1000BASE-CX"); 
            break;
        case 0x02:
            sprintf(sfpPtr->opticalType, "%s", "1000BASE-LX"); 
            break;
        case 0x01:
            sprintf(sfpPtr->opticalType, "%s", "1000BASE-SX");
            break;
        default:
            sprintf(sfpPtr->opticalType, "%s", "Unspecified"); 
            break;
    }
    /* LINE CODING */
    switch (baseData[ENCODING]) 
    {
        case 0x01:
            sprintf(sfpPtr->lineCoding, "%s",  "8B10B");
            break;
        case 0x02:
            sprintf(sfpPtr->lineCoding, "%s",  "4B5B"); 
            break;
        case 0x03:
            sprintf(sfpPtr->lineCoding, "%s",  "NRZ"); 
            break;
        case 0x04:
            sprintf(sfpPtr->lineCoding, "%s",   "Manchester");
            break;
        case 0x05:
            sprintf(sfpPtr->lineCoding, "%s",  "SONET Scrambled"); 
            break;
        default:
            sprintf(sfpPtr->lineCoding, "%s",  "Unspecified"); 
            break;
    }
    /* Vendor Revison */
    memcpy(sfpPtr->vendorRev, &baseData[SFP_VENDOR_REV_START],3);
    sfpPtr->vendorRev[15] = '\0';

    /* Bit Rate Nominal */
    sprintf(sfpPtr->nominalBitRate, "%d%s", ((int)baseData[BR_NOMINAL])*100 , " MBit/sec");

    /* LinkLength for 9/125 fiber */
    if (baseData[LENGTH_9M_KM] == 0 && baseData[LENGTH_9M] == 0) 
    {
        sprintf(sfpPtr->linkLength , "%s", "Not Specified");
    } else {
        if (baseData[LENGTH_9M_KM] == 0) 
        {
            sprintf(sfpPtr->linkLength , "%d%s",(int)(baseData[LENGTH_9M]) , " m");
        } else {
            sprintf(sfpPtr->linkLength , "%d%s",(int)(baseData[LENGTH_9M_KM]), " km");
        }
    } 
    /* Wave Length */
    if (baseData[SFP_WAVE_LENGTH_START] == 0 && baseData[SFP_WAVE_LENGTH_STOP] == 0) 
    {
        sprintf(sfpPtr->waveLength ,"%s",  "Not Specified");
    } else {
        sprintf(sfpPtr->waveLength ,"%d%s", ((((unsigned int)baseData[SFP_WAVE_LENGTH_START])<<8) | baseData[SFP_WAVE_LENGTH_STOP]) ,  " nm");
    }

    /* Max Bit Rate Margin */
    if(baseData[SFP_BR_MAX] == 0) 
    {
        sprintf(sfpPtr->maxBitRateMargin ,"%s", "Not Specified");
    } else {

        sprintf(sfpPtr->maxBitRateMargin ,"%d%s",  (unsigned int) baseData[SFP_BR_MAX] ," %");
    }
    /* Min Bit Rate Margin */
    if(baseData[SFP_BR_MIN] == 0) 
    {
        sprintf(sfpPtr->minBitRateMargin ,"%s", "Not Specified");
    } else {
        sprintf(sfpPtr->minBitRateMargin ,"%d%s",  (unsigned int) baseData[SFP_BR_MIN] ," %");
    }

    /* Vendor Serial Number */
    memcpy(sfpPtr->vendorSerialNo, &baseData[SFP_SERIAL_NUMBER_START],16);
    sfpPtr->vendorSerialNo[15] = '\0';

    /* Vendor Date Code */
    sprintf(sfpPtr->date, "%c%c%s%c%c%s%c%c", baseData[SFP_DATE_CODE_START+4] , baseData[SFP_DATE_CODE_START+5] , "/"
            , baseData[SFP_DATE_CODE_START+2] , baseData[SFP_DATE_CODE_START+3] , "/20" 
            , baseData[SFP_DATE_CODE_START] , baseData[SFP_DATE_CODE_START+1]);

    /* SFP Temperature*/

    if((int)baseData[SFP_TEMPERATURE_MSB] & 0x80)
    {
    	sprintf(sfpPtr->temperature, "-%d.%d", ((int)baseData[SFP_TEMPERATURE_MSB] & 0x7f),(int)baseData[SFP_TEMPERATURE_LSB]/256);
    }
    else
    	sprintf(sfpPtr->temperature, "%d.%d", (int)baseData[SFP_TEMPERATURE_MSB],(int)baseData[SFP_TEMPERATURE_LSB]/256);

    /* SFP VCC*/
    sprintf(sfpPtr->vccVoltage, "%d.%d", (((int)baseData[SFP_VCC_MSB]<<8 | (int)baseData[SFP_VCC_LSB])/10000),(((int)baseData[SFP_VCC_MSB]<<8 | (int)baseData[SFP_VCC_LSB])/10000)) ;


 /* SFP TX BIAS*/
    //sprintf(sfpPtr->TXBiasCurrent, "%d", (int)baseData[SFP_TX_BIAS_MSB]);
    sprintf(sfpPtr->TXBiasCurrent, "%.3f mA", (float)((((int)baseData[SFP_TX_BIAS_MSB]<<8 | (int)baseData[SFP_TX_BIAS_LSB]))/500));

    /* SFP TX OUTPUT*/
    sprintf(sfpPtr->TXOutputPower, "%.3f dBm", 10 *  log10((double)((int)baseData[SFP_TX_POWER_MSB]<<8 | (int)baseData[SFP_TX_POWER_LSB]) / 10000));

    /* SFP RX OUTPUT*/
    sprintf(sfpPtr->RXInputPower, "%.3f dBm", 10 *  log10((double)((int)baseData[SFP_RX_POWER_MSB]<<8 | (int)baseData[SFP_RX_POWER_LSB]) / 10000));

    return 0;
}
Ejemplo n.º 27
0
/* read the sfp infomation */
int readSfpXfpInfo(int  port, char *basePtr)
{
    int fd,i;
    int delay_count = DELAY_COUNT;
    //unsigned char data[128] = {0};
    unsigned int addr_port;
    unsigned int addr_fiber_slave;
    struct fpga_rdwr_data fpga_data;
	
	cdebug("start readSfpXfpInfo....\n");

	if(basePtr == NULL)
    {
        cdebug("readSfpXfpInfo input address err\n");
        return (-1);
    }

    if(port > SFPXFP_PORT_NUM-1)
    {
        cdebug("readSfpXfpInfo input port err\n");
        return (-1);
    }

    fd=open(FPGADRVDIR,O_RDWR);

    if(fd<0)
    {
        cdebug("open %s error1\n",FPGADRVDIR);
        return(-1);
    }
	if(ioctl(fd, SPI_IOC_OPER_FPGA, NULL))
	{
	}

    // Check if the fiber module is plugged 
    if(is_fiber_plugged(fd,port)  != 1 )
    {
        goto ERROR;
    }

    //.
    fpga_data.nmsgs = 5;
    fpga_data.msgs = (struct fpga_msg*)malloc(fpga_data.nmsgs * sizeof(struct fpga_msg));
    if(NULL == fpga_data.msgs)
    {
        cdebug(" fpga_data.msgs is not allocated correctly!\n ");
        goto ERROR;
    }
    // The base address in the register
    addr_fiber_slave = SLAVE_ADDR_SFP;
    //addr_port = ((addr_fiber_slave>>4)+port)<<4; /* for 161x */
    addr_port = addr_fiber_slave ;
    cdebug("\naddr_port is %02x\n ", addr_port);
    // select the port 
    fpga_data.msgs[0].addr = 0xac;
    fpga_data.msgs[0].flags = 1; // write
    fpga_data.msgs[0].len = 2;
    fpga_data.msgs[0].buf[0] = 0;
    fpga_data.msgs[0].buf[1] = port;   
    write_fpga_data(fd,(struct fpga_msg*)&fpga_data.msgs[0],1);
    
    // write a4 a000
    fpga_data.msgs[0].addr = addr_port + FPGA_ADDR_OFFSET;
    fpga_data.msgs[0].flags = 1; // write
    fpga_data.msgs[0].len = 2;
    fpga_data.msgs[0].buf[0] = addr_fiber_slave + FPGA_WREN_OFFSET;

    //read a2 2 
    fpga_data.msgs[1].addr = addr_port + FPGA_RDEN_OFFSET;
    fpga_data.msgs[1].flags = 0; // read
    fpga_data.msgs[1].len = 2;

    //wrtie a2 0001(0000)  产生跳变沿
    fpga_data.msgs[2].addr = addr_port + FPGA_RDEN_OFFSET;
    fpga_data.msgs[2].flags = 1; // write
    fpga_data.msgs[2].len = 2;

    //read aa 2 
    fpga_data.msgs[3].addr = addr_port + FPGA_EN_OFFSET;
    fpga_data.msgs[3].flags = 0; // read
    fpga_data.msgs[3].len = 2;

    //read a8 2 
    fpga_data.msgs[4].addr = addr_port + FPGA_RDDATA_OFFSET;
    fpga_data.msgs[4].flags = 0; // read
    fpga_data.msgs[4].len = 2;
#if 0
struct  timeval    tv;
struct  timezone   tz;
    fpga_data.msgs[0].addr = 0xe;
    fpga_data.msgs[0].flags = 1; // write^M
    fpga_data.msgs[0].len = 2;
    fpga_data.msgs[0].buf[0] = 1;
        gettimeofday(&tv,&tz);
 printf("time:%d.%d\n",tv.tv_sec,tv.tv_usec);
        write_fpga_data(fd,(struct fpga_msg*)&fpga_data.msgs[0],1);
        gettimeofday(&tv,&tz);
 printf("time:%d.%d\n",tv.tv_sec,tv.tv_usec);
    fpga_data.msgs[0].addr = 0;
        read_fpga_data(fd,(struct fpga_msg*)&fpga_data.msgs[0],1);
        gettimeofday(&tv,&tz);
 printf("time:%d.%d\n",tv.tv_sec,tv.tv_usec);
#endif
    for(i=0; i<MAX_SXFP_INFO_OFFSET; i++)   //read the data of the register(0~93)
    //for(i=0; i<1; i++)   //read the data of the register(0~93)
    {
        fpga_data.msgs[0].buf[1] = (unsigned char)i;
        cdebug("+++++++++%d++++++++++++",i);
        //write a4 a000

        write_fpga_data(fd,(struct fpga_msg*)&fpga_data.msgs[0],1);
        //read a2 2 	
        read_fpga_data(fd, (struct fpga_msg*)&fpga_data.msgs[1],2);
        //wrtie a2 0001 
        fpga_data.msgs[2].buf[0] = 0x00;
        fpga_data.msgs[2].buf[1] = fpga_data.msgs[1].buf[1]^(0x01);		//跳变沿有效
        write_fpga_data(fd, (struct fpga_msg*)&fpga_data.msgs[2], 3);

        // To wait for the enable flag 
        delay_count = DELAY_COUNT;    // In fact, it needs 3 times to wait for the readable flag
        do
        {
            //read aa 2 
            read_fpga_data(fd, (struct fpga_msg*)&fpga_data.msgs[3], 4);
            if((unsigned char)fpga_data.msgs[3].buf[1] & 0x01)
                break;
        }while(delay_count--);
        cdebug("wait time is +++++++++%d+++++++++++++",delay_count);
        // check if the read flag is enabled 
        if((unsigned char)fpga_data.msgs[3].buf[1] & 0x01)
        {
            read_fpga_data(fd, (struct fpga_msg*)&fpga_data.msgs[4], 5);
            basePtr[i] = fpga_data.msgs[4].buf[1];  
        }else{
            cdebug("FPGA is not RDWR ENABLE!! \n");
            //free the memory and close fd.
            free(fpga_data.msgs);
            goto ERROR;
        }
    } 
 //       gettimeofday(&tv,&tz);
 //printf("time:%d.%d\n",tv.tv_sec,tv.tv_usec);

    // The base address in the register
    //addr_fiber_slave = 0xa2;
    addr_fiber_slave = 0xa0;
    //addr_port = ((addr_fiber_slave>>4)+port)<<4;
    addr_port = addr_fiber_slave ;
    cdebug("\naddr_port is %02x\n ", addr_port);
    // write a4 a000
    fpga_data.msgs[0].addr = addr_port + FPGA_ADDR_OFFSET;
    fpga_data.msgs[0].flags = 1; // write
    fpga_data.msgs[0].len = 2;
    fpga_data.msgs[0].buf[0] = addr_fiber_slave + FPGA_WREN_OFFSET;

    //read a2 2 
    fpga_data.msgs[1].addr = addr_port + FPGA_RDEN_OFFSET;
    fpga_data.msgs[1].flags = 0; // read
    fpga_data.msgs[1].len = 2;

    //wrtie a2 0001(0000)  靠靠?
    fpga_data.msgs[2].addr = addr_port + FPGA_RDEN_OFFSET;
    fpga_data.msgs[2].flags = 1; // write
    fpga_data.msgs[2].len = 2;

    //read aa 2 
    fpga_data.msgs[3].addr = addr_port + FPGA_EN_OFFSET;
    fpga_data.msgs[3].flags = 0; // read
    fpga_data.msgs[3].len = 2;

    //read a8 2 
    fpga_data.msgs[4].addr = addr_port + FPGA_RDDATA_OFFSET;
    fpga_data.msgs[4].flags = 0; // read
    fpga_data.msgs[4].len = 2;

    for(i=96; i<128; i++)   //read the data of the register(0~93)
    {
        fpga_data.msgs[0].buf[1] = (unsigned char)i;
        cdebug("+++++++++%d++++++++++++",i);
        //write a4 a000
        write_fpga_data(fd,(struct fpga_msg*)&fpga_data.msgs[0],1);
        //read a2 2 	
        read_fpga_data(fd, (struct fpga_msg*)&fpga_data.msgs[1],2);
        //wrtie a2 0001 
        fpga_data.msgs[2].buf[0] = 0x00;
        fpga_data.msgs[2].buf[1] = fpga_data.msgs[1].buf[1]^(0x01);		//靠靠?
        write_fpga_data(fd, (struct fpga_msg*)&fpga_data.msgs[2], 3);

        // To wait for the enable flag 
        delay_count = DELAY_COUNT;    // In fact, it needs 3 times to wait for the readable flag
        do
        {
            //read aa 2 
            read_fpga_data(fd, (struct fpga_msg*)&fpga_data.msgs[3], 4);
            if((unsigned char)fpga_data.msgs[3].buf[1] & 0x01)
                break;
        }while(delay_count--);
        cdebug("wait time is +++++++++%d+++++++++++++",delay_count);
        // check if the read flag is enabled 
        if((unsigned char)fpga_data.msgs[3].buf[1] & 0x01)
        {
            read_fpga_data(fd, (struct fpga_msg*)&fpga_data.msgs[4], 5);
            basePtr[i] = fpga_data.msgs[4].buf[1];  
        }else{
            cdebug("FPGA is not RDWR ENABLE!! \n");
            //free the memory and close fd.
            free(fpga_data.msgs);
            goto ERROR;
        }
    } 

	if(ioctl(fd, SPI_IOC_OPER_FPGA_DONE, NULL))
	{
	}

    close(fd);
    
    free(fpga_data.msgs);

    return(0) ;
ERROR:

	if(ioctl(fd, SPI_IOC_OPER_FPGA_DONE, NULL))
	{
	}

    close(fd);
	return -1;
}