• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C++ read_register函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中read_register函数的典型用法代码示例。如果您正苦于以下问题:C++ read_register函数的具体用法?C++ read_register怎么用?C++ read_register使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了read_register函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: read_val12

static uint16_t read_val12(spi_device dev, adxl362_axis_t axis)
{
        adxl362_reg_t reg_h, reg_l;
        uint8_t val_h, val_l;

        switch (axis) {
        case ADXL362_AXIS_X:
                reg_h = ADXL362_REG_XDATA_H;
                reg_l = ADXL362_REG_XDATA_L;
                break;
        case ADXL362_AXIS_Y:
                reg_h = ADXL362_REG_YDATA_H;
                reg_l = ADXL362_REG_YDATA_L;
                break;
        case ADXL362_AXIS_Z:
                reg_h = ADXL362_REG_ZDATA_H;
                reg_l = ADXL362_REG_ZDATA_L;
                break;
        default:
                return 0xFFFF;
        }

        val_h = read_register(dev, reg_h);
        val_l = read_register(dev, reg_l);

        return create_value12(val_h, val_l);
}
开发者ID:mikewang01,项目名称:hicling_replant,代码行数:27,代码来源:demo_sensors.c


示例2: read_register

// read latest values from sensor and fill in x,y and totals
void
AP_OpticalFlow_ADNS3080::update(uint32_t now)
{
    uint8_t motion_reg;
    surface_quality = read_register(ADNS3080_SQUAL);
    hal.scheduler->delay_microseconds(50);

    // check for movement, update x,y values
    motion_reg = read_register(ADNS3080_MOTION);
    // check if we've had an overflow
    _overflow = ((motion_reg & 0x10) != 0);
    if( (motion_reg & 0x80) != 0 ) {
        raw_dx = ((int8_t)read_register(ADNS3080_DELTA_X));
        hal.scheduler->delay_microseconds(50);
        raw_dy = ((int8_t)read_register(ADNS3080_DELTA_Y));
        _motion = true;
    }else{
        raw_dx = 0;
        raw_dy = 0;
    }

    last_update = hal.scheduler->millis();

    apply_orientation_matrix();
}
开发者ID:Kirbyrc,项目名称:ardupilot,代码行数:26,代码来源:AP_OpticalFlow_ADNS3080.cpp


示例3: set_shutter_speed_auto

// set_shutter_speed_auto - set shutter speed to auto (true), or manual (false)
void
AP_OpticalFlow_ADNS3080::set_shutter_speed(unsigned int shutter_speed)
{
    NumericIntType aNum;
    aNum.uintValue = shutter_speed;

    // set shutter speed to manual
    set_shutter_speed_auto(false);
    delayMicroseconds(50);      // small delay

    // set specific shutter speed
    write_register(ADNS3080_SHUTTER_MAX_BOUND_LOWER,aNum.byteValue[0]);
    delayMicroseconds(50);      // small delay
    write_register(ADNS3080_SHUTTER_MAX_BOUND_UPPER,aNum.byteValue[1]);
    delayMicroseconds(50);      // small delay

    // larger delay
    delay(50);

    // need to update frame period to cause shutter value to take effect
    aNum.byteValue[1] = read_register(ADNS3080_FRAME_PERIOD_UPPER);
    delayMicroseconds(50);      // small delay
    aNum.byteValue[0] = read_register(ADNS3080_FRAME_PERIOD_LOWER);
    delayMicroseconds(50);      // small delay
    write_register(ADNS3080_FRAME_PERIOD_MAX_BOUND_LOWER,aNum.byteValue[0]);
    delayMicroseconds(50);      // small delay
    write_register(ADNS3080_FRAME_PERIOD_MAX_BOUND_UPPER,aNum.byteValue[1]);
    delayMicroseconds(50);      // small delay
}
开发者ID:Bieghe,项目名称:Arduino,代码行数:30,代码来源:AP_OpticalFlow_ADNS3080.cpp


示例4: delayMicroseconds

// read latest values from sensor and fill in x,y and totals
bool
AP_OpticalFlow_ADNS3080::update()
{
    byte motion_reg;
    surface_quality = (unsigned int)read_register(ADNS3080_SQUAL);
    delayMicroseconds(50);      // small delay

    // check for movement, update x,y values
    motion_reg = read_register(ADNS3080_MOTION);
    _overflow = ((motion_reg & 0x10) != 0);      // check if we've had an overflow
    if( (motion_reg & 0x80) != 0 ) {
        raw_dx = ((char)read_register(ADNS3080_DELTA_X));
        delayMicroseconds(50);          // small delay
        raw_dy = ((char)read_register(ADNS3080_DELTA_Y));
        _motion = true;
    }else{
        raw_dx = 0;
        raw_dy = 0;
    }

    last_update = millis();

    apply_orientation_matrix();

    return true;
}
开发者ID:Bieghe,项目名称:Arduino,代码行数:27,代码来源:AP_OpticalFlow_ADNS3080.cpp


示例5: em8300_setregblock

int em8300_setregblock(struct em8300_s *em, int offset, int val, int len)
{
	int i;

	for (i = 1000; i; i--) {
		if (!read_register(0x1c1a)) {
			break;
		}
		if (!i) {
			return -ETIME;
		}
	}
#if 0 /* FIXME: was in the zeev01 branch, verify if it is necessary */
	val = val | (val << 8) | (val << 16) | (val << 24);
#endif

	writel(offset & 0xffff, &em->mem[0x1c11]);
	writel((offset >> 16) & 0xffff, &em->mem[0x1c12]);
	writel(len, &em->mem[0x1c13]);
	writel(len, &em->mem[0x1c14]);
	writel(0, &em->mem[0x1c15]);
	writel(1, &em->mem[0x1c16]);
	writel(1, &em->mem[0x1c17]);
	writel(offset & 0xffff, &em->mem[0x1c18]);
	writel(0, &em->mem[0x1c19]);

	writel(1, &em->mem[0x1c1a]);

	for (i = 0; i < len / 4; i++) {
		writel(val, &em->mem[0x11800]);
	}

	switch (len % 4) {
	case 1:
		writel(val, &em->mem[0x10000]);
		break;
	case 2:
		writel(val, &em->mem[0x10800]);
		break;
	case 3:
		writel(val, &em->mem[0x11000]);
		break;
	}

	for (i = 1000; i; i--) {
		if (!read_register(0x1c1a)) {
			break;
		}
		if (!i) {
			return -ETIME;
		}
	}

#if 0 /* FIXME: was in zeev01 branch, verify if it is necessary */
	if (em8300_waitfor(em, 0x1c1a, 0, 1))
		return -ETIME;
#endif

	return 0;
}
开发者ID:austriancoder,项目名称:v4l2-em8300-old,代码行数:60,代码来源:em8300_misc.c


示例6: write_register

void Radio::startListening(void) {
  write_register(CONFIG, read_register(CONFIG) | _BV(PRIM_RX));
  write_register(STATUS, _BV(RX_DR) | _BV(TX_DS) | _BV(MAX_RT));

  if (read_register(FEATURE) & _BV(EN_ACK_PAY)) {
    flush_tx();
  }
}
开发者ID:vargin,项目名称:scout-rf,代码行数:8,代码来源:radio.cpp


示例7: io_mcp_get_pin_info

irom io_error_t io_mcp_get_pin_info(string_t *dst, const struct io_info_entry_T *info, io_data_pin_entry_t *pin_data, const io_config_pin_entry_t *pin_config, int pin)
{
	int bank, bankpin, tv;
	int io, olat, cached;
	mcp_data_pin_t *mcp_pin_data;

	bank = (pin & 0x08) >> 3;
	bankpin = pin & 0x07;

	mcp_pin_data = &mcp_data_pin_table[info->instance][pin];

	switch(pin_config->llmode)
	{
		case(io_pin_ll_input_analog):
		{
			if(read_register(dst, info->address, GPIO(bank), &tv) != io_ok)
				return(io_error);

			string_format(dst, "current io: %s", onoff(tv & (1 << bankpin)));

			break;
		}

		case(io_pin_ll_counter):
		{
			if(read_register(dst, info->address, GPIO(bank), &tv) != io_ok)
				return(io_error);

			string_format(dst, "current io: %s, debounce: %d", onoff(tv & (1 << bankpin)), mcp_pin_data->debounce);

			break;
		}

		case(io_pin_ll_output_digital):
		{
			if(read_register(dst, info->address, GPIO(bank), &tv) != io_ok)
				return(io_error);

			io = tv & (1 << bankpin);

			if(read_register(dst, info->address, OLAT(bank), &tv) != io_ok)
				return(io_error);

			olat = tv & (1 << bankpin);
			cached = pin_output_cache[bank] & (1 << bankpin);

			string_format(dst, "current latch: %s, io: %s, cache: %s", onoff(io), onoff(olat), onoff(cached));

			break;
		}

		default:
		{
		}
	}

	return(io_ok);
}
开发者ID:ESP32DE,项目名称:esp8266-universal-io-bridge,代码行数:58,代码来源:io_mcp.c


示例8: read_register

// get frame period
unsigned int
AP_OpticalFlow_ADNS3080::get_frame_period()
{
    NumericIntType aNum;
    aNum.byteValue[1] = read_register(ADNS3080_FRAME_PERIOD_UPPER);
    delayMicroseconds(50);      // small delay
    aNum.byteValue[0] = read_register(ADNS3080_FRAME_PERIOD_LOWER);
    return aNum.uintValue;
}
开发者ID:Bieghe,项目名称:Arduino,代码行数:10,代码来源:AP_OpticalFlow_ADNS3080.cpp


示例9: reset

// Public Methods //////////////////////////////////////////////////////////////
// init - initialise sensor
// assumes SPI bus has been initialised but will attempt to initialise 
// nonstandard SPI3 bus if required
bool
AP_OpticalFlow_ADNS3080::init()
{
    int8_t retry = 0;
    bool retvalue = false;

    // suspend timer while we set-up SPI communication
    hal.scheduler->suspend_timer_procs();

    if( _reset_pin != 0)
        hal.gpio->pinMode(_reset_pin, GPIO_OUTPUT);
    // reset the device
    reset();

    // check 3 times for the sensor on standard SPI bus
    _spi = hal.spi->device(AP_HAL::SPIDevice_ADNS3080_SPI0);
    if (_spi == NULL) {
        retvalue = false; goto finish;
    }

    while( retvalue == false && retry < 3 ) {
        if( read_register(ADNS3080_PRODUCT_ID) == 0x17 ) {
            retvalue = true;
            goto finish;
        }
        retry++;
    }

    // if not found, check 3 times on SPI3
    _spi = hal.spi->device(AP_HAL::SPIDevice_ADNS3080_SPI3);
    if (_spi == NULL) {
        retvalue = false; goto finish;
    }
    retry = 0;
    while( retvalue == false && retry < 3 ) {
        if( read_register(ADNS3080_PRODUCT_ID) == 0x17 ) {
            retvalue = true;
        }
        retry++;
    }
    // If we fail to find on SPI3, no connection available.
    retvalue = false;
    _spi = NULL;

finish:
    // resume timer
    hal.scheduler->resume_timer_procs();

    // if device is working register the global static read function to
    // be called at 1khz
    if( retvalue ) {
        hal.scheduler->register_timer_process( AP_OpticalFlow_ADNS3080::read );
    }

    return retvalue;
}
开发者ID:sumtyme,项目名称:babyg-4ever,代码行数:60,代码来源:AP_OpticalFlow_ADNS3080.cpp


示例10: single_step

void
single_step ()
{
  branch_type br, isannulled();
  CORE_ADDR pc;
  long pc_instruction;

  if (!one_stepped)
    {
      /* Always set breakpoint for NPC.  */
      next_pc = read_register (NPC_REGNUM);
      npc4 = next_pc + 4; /* branch not taken */

      target_insert_breakpoint (next_pc, break_mem[0]);
      /* printf ("set break at %x\n",next_pc); */

      pc = read_register (PC_REGNUM);
      pc_instruction = read_memory_integer (pc, sizeof(pc_instruction));
      br = isannulled (pc_instruction, pc, &target);
      brknpc4 = brktrg = 0;

      if (br == bicca)
	{
	  /* Conditional annulled branch will either end up at
	     npc (if taken) or at npc+4 (if not taken).
	     Trap npc+4.  */
	  brknpc4 = 1;
	  target_insert_breakpoint (npc4, break_mem[1]);
	}
      else if (br == baa && target != next_pc)
	{
	  /* Unconditional annulled branch will always end up at
	     the target.  */
	  brktrg = 1;
	  target_insert_breakpoint (target, break_mem[2]);
	}

      /* We are ready to let it go */
      one_stepped = 1;
      return;
    }
  else
    {
      /* Remove breakpoints */
      target_remove_breakpoint (next_pc, break_mem[0]);

      if (brknpc4)
	target_remove_breakpoint (npc4, break_mem[1]);

      if (brktrg)
	target_remove_breakpoint (target, break_mem[2]);

      one_stepped = 0;
    }
}
开发者ID:npe9,项目名称:sprite,代码行数:55,代码来源:sparc-tdep.c


示例11: read_params

params read_params()
{
  params read_params;

  read_params.feedback = read_register(FEEDBACK_ADDR);
  read_params.commanded_freq = read_register(COMMANDED_FREQ_ADDR);
  read_params.output_current = read_register(OUTPUT_CURRENT_ADDR);
  read_params.output_voltage = read_register(OUTPUT_VOLTAGE_ADDR);

  return read_params;
}
开发者ID:alansalinas,项目名称:appchallenge,代码行数:11,代码来源:modbus_master.c


示例12: init

int Sonar::read() {
    if(!this->has_init) {
        init();
    }
    set_mode(SINGLE_SHOT);
    if(sonar_mode == METRIC) {
        return read_register(RESULT_1);
    }
    else {
        return ( (read_register(RESULT_1))  * 3937)/1000;
    }
}
开发者ID:nobody,项目名称:magiclegoblimps,代码行数:12,代码来源:sonar.cpp


示例13: ni_tio_rinsn

int ni_tio_rinsn(struct ni_gpct *counter, struct comedi_insn *insn,
		 unsigned int *data)
{
	struct ni_gpct_device *counter_dev = counter->counter_dev;
	const unsigned channel = CR_CHAN(insn->chanspec);
	unsigned first_read;
	unsigned second_read;
	unsigned correct_read;

	if (insn->n < 1)
		return 0;
	switch (channel) {
	case 0:
		ni_tio_set_bits(counter,
				NITIO_Gi_Command_Reg(counter->counter_index),
				Gi_Save_Trace_Bit, 0);
		ni_tio_set_bits(counter,
				NITIO_Gi_Command_Reg(counter->counter_index),
				Gi_Save_Trace_Bit, Gi_Save_Trace_Bit);
		/* The count doesn't get latched until the next clock edge, so it is possible the count
		   may change (once) while we are reading.  Since the read of the SW_Save_Reg isn't
		   atomic (apparently even when it's a 32 bit register according to 660x docs),
		   we need to read twice and make sure the reading hasn't changed.  If it has,
		   a third read will be correct since the count value will definitely have latched by then. */
		first_read =
		    read_register(counter,
				  NITIO_Gi_SW_Save_Reg(counter->counter_index));
		second_read =
		    read_register(counter,
				  NITIO_Gi_SW_Save_Reg(counter->counter_index));
		if (first_read != second_read)
			correct_read =
			    read_register(counter,
					  NITIO_Gi_SW_Save_Reg(counter->
							       counter_index));
		else
			correct_read = first_read;
		data[0] = correct_read;
		return 0;
		break;
	case 1:
		data[0] =
		    counter_dev->
		    regs[NITIO_Gi_LoadA_Reg(counter->counter_index)];
		break;
	case 2:
		data[0] =
		    counter_dev->
		    regs[NITIO_Gi_LoadB_Reg(counter->counter_index)];
		break;
	}
	return 0;
}
开发者ID:CSCLOG,项目名称:beaglebone,代码行数:53,代码来源:ni_tio.c


示例14: _delay_us

void Radio::stopListening(void) {
  if (read_register(FEATURE) & _BV(EN_ACK_PAY)) {
    _delay_us(155);
    flush_tx();
  }

  write_register(CONFIG, (read_register(CONFIG)) & ~_BV(PRIM_RX));

  // for 3 pins solution TX mode is only left with additional powerDown/powerUp cycle.
  powerDown();
  powerUp();
}
开发者ID:vargin,项目名称:scout-rf,代码行数:12,代码来源:radio.cpp


示例15: lem_interrupt

int lem_interrupt(void)
{
	uint16_t cycles = 0;
	uint16_t b = read_register(REG_B);

	switch (read_register(REG_A)) {
	case 0:
		if (b) {
			if (connected == 0) {
				clock_gettime(CLOCK_REALTIME, &tp_prev);
				// TODO don't start up for ~1s
			}
			connected = 1;
			vram = b;
		} else {
			connected = 0;
		}
		break;
	case 1:
		if (b) {
			custom_font = 1;
			font_ram = b;
		} else {
			custom_font = 1;
		}
		break;
	case 2:
		if (b) {
			custom_pal = 1;
			pal_ram = b;
		} else {
			custom_pal = 1;
		}
		break;
	case 3:
		border_col = b;
		break;
	case 4:
		write_memory(b, FONT_LEN, font);
		cycles = 256;
		break;
	case 5:
		write_memory(b, PAL_LEN, pal);
		cycles = 16;
		break;
	default:
		break;
	}

	return cycles;
}
开发者ID:jjonir,项目名称:jpd16s,代码行数:51,代码来源:lem1802.c


示例16: csnHigh

bool Radio::setup(void) {
  HalfDuplexSPI::setup();

  csnHigh();

  // Must allow the radio time to settle else configuration bits will not necessarily stick.
  // This is actually only required following power up but some settling time also appears to
  // be required after resets too. For full coverage, we'll always assume the worst.
  // Enabling 16b CRC is by far the most obvious case if the wrong timing is used - or skipped.
  // Technically we require 4.5ms + 14us as a worst case. We'll just call it 5ms for good measure.
  // WARNING: Delay is based on P-variant whereby non-P *may* require different timing.
  _delay_ms(5);

  // Reset CONFIG and enable 16-bit CRC.
  write_register(CONFIG, 0 | _BV(EN_CRC) | _BV(CRCO));

  // Set 1500uS (minimum for 32B payload in [email protected]) timeouts, to make testing a little easier
  // WARNING: If this is ever lowered, either 250KBS mode with AA is broken or maximum packet
  // sizes must never be used. See documentation for a more complete explanation.
  setRetries(5, 15);

  uint8_t setup = read_register(RF_SETUP);

  // Then set the data rate to the slowest (and most reliable) speed supported by all
  // hardware.
  setDataRate(DataRate::RATE_1MBPS);

  write_register(FEATURE, 0);
  write_register(DYNPD, 0);

  // Reset current status
  // Notice reset and flush is the last thing we do
  write_register(STATUS, _BV(RX_DR) | _BV(TX_DS) | _BV(MAX_RT));

  setChannel(76);

  // Flush buffers
  flush_rx();
  flush_tx();

  //Power up by default when setup() is called.
  powerUp();

  // Enable PTX, do not write CE high so radio will remain in standby I mode ( 130us max to transition to RX or TX
  // instead of 1500us from powerUp ) PTX should use only 22uA of power.
  write_register(CONFIG, (read_register(CONFIG)) & ~_BV(PRIM_RX));

  // If setup is 0 or ff then there was no response from module.
  return setup != 0 && setup != 0xff;
}
开发者ID:vargin,项目名称:scout-rf,代码行数:50,代码来源:radio.cpp


示例17: read_register

float MAX44009::get_lux(void)
{
	int luxHigh = read_register(0x03);
	
	int luxLow = read_register(0x04);
	
	int exponent = (luxHigh & 0xf0) >> 4;
	
	int mant = (luxHigh & 0x0f) << 4 | luxLow;
	
	
	return (float)(((0x00000001 << exponent) * (float)mant) * 0.045);
	//return (float)((pow(2,exponent) * mant) * 0.045);
 
}
开发者ID:dantudose,项目名称:MAX44009,代码行数:15,代码来源:MAX44009.cpp


示例18: set_time

void set_time(struct tm *t)
{
  int regA, regB;

  if (Wflag) {
	/* Set A and B registers to their proper values according to the AT
	 * reference manual.  (For if it gets messed up, but the BIOS doesn't
	 * repair it.)
	 */
	write_register(RTC_REG_A, RTC_A_DV_OK | RTC_A_RS_DEF);
	write_register(RTC_REG_B, RTC_B_24);
  }

  /* Inhibit updates. */
  regB= read_register(RTC_REG_B);
  write_register(RTC_REG_B, regB | RTC_B_SET);

  t->tm_mon++;	/* Counts from 1. */

  if (y2kflag) {
	/* Set the clock back 20 years to avoid Y2K bug, good until 2020. */
	if (t->tm_year >= 100) t->tm_year -= 20;
  }

  if ((regB & 0x04) == 0) {
	/* Convert binary to BCD (default RTC mode) */
	t->tm_year = dec_to_bcd(t->tm_year % 100);
	t->tm_mon = dec_to_bcd(t->tm_mon);
	t->tm_mday = dec_to_bcd(t->tm_mday);
	t->tm_hour = dec_to_bcd(t->tm_hour);
	t->tm_min = dec_to_bcd(t->tm_min);
	t->tm_sec = dec_to_bcd(t->tm_sec);
  }
  write_register(RTC_YEAR, t->tm_year);
  write_register(RTC_MONTH, t->tm_mon);
  write_register(RTC_MDAY, t->tm_mday);
  write_register(RTC_HOUR, t->tm_hour);
  write_register(RTC_MIN, t->tm_min);
  write_register(RTC_SEC, t->tm_sec);

  /* Stop the clock. */
  regA= read_register(RTC_REG_A);
  write_register(RTC_REG_A, regA | RTC_A_DV_STOP);

  /* Allow updates and restart the clock. */
  write_register(RTC_REG_B, regB);
  write_register(RTC_REG_A, regA);
}
开发者ID:BiancoZandbergen,项目名称:RTMINIX3,代码行数:48,代码来源:backup.c


示例19: read_register

/*
 * Reads current pressure value
 */
long SCP1000::pressure()
{
	unsigned long pressure;
	
	// Pressure value is in 19-bit unsigned format
	// Value = Pa * 4
	pressure = read_register(PRESSURE, 1);  // Read MSB
	pressure &= 0b00000111;					// mask unused bits
	pressure <<= 16;						// shift into upper word
	
	pressure  |= read_register(PRESSURE_LSB, 2); // read low word
	
	// Convert to real pressure in hPa
	return pressure>>2;
	
}
开发者ID:12019,项目名称:libraries,代码行数:19,代码来源:SCP1000D01.cpp


示例20: ecompass_init

void
ecompass_init(void)
{
    DECO("Starting ecompass init...");
    write_register(CTRL_REG1, 0x37);
    transfer(ECOMPASS_ID);
    // Acceleromter data ready on int1
    //write_register(CTRL_REG3, 1 << 2); 
    // Magnometer data ready on int2
    //write_register(CTRL_REG4, 1 << 2);

    write_register(CTRL_REG5, 0x8);
    transfer(ECOMPASS_ID);
    write_register(CTRL_REG7, 0x0);
    transfer(ECOMPASS_ID);
	udelay(400000);

    int ret;
    int ret_i = read_register(WHO_AM_I_REG | READ_MASK);
    transfer(ECOMPASS_ID); 
    if ((ret = get_data(ret_i)) != WHO_AM_I) {
        DECO("E-Comapss initilisation failed (who_am_i is %d)\n", ret);
    } else {
        DECO("Init success!\n");
    }

    //udelay(500000);
    //calibrate();
}
开发者ID:BertrandBev,项目名称:Quadcopter,代码行数:29,代码来源:ecompass.c



注:本文中的read_register函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ read_request函数代码示例发布时间:2022-05-30
下一篇:
C++ read_reg_v2函数代码示例发布时间:2022-05-30
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap