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

C++ ALOGE_IF函数代码示例

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

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



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

示例1: gralloc_unregister_buffer

int gralloc_unregister_buffer(gralloc_module_t const* module,
        buffer_handle_t handle)
{
    if (private_handle_t::validate(handle) < 0)
        return -EINVAL;

    /*
     * If the buffer has been mapped during a lock operation, it's time
     * to un-map it. It's an error to be here with a locked buffer.
     * NOTE: the framebuffer is handled differently and is never unmapped.
     */

    private_handle_t* hnd = (private_handle_t*)handle;
    
    ALOGE_IF(hnd->lockState & private_handle_t::LOCK_STATE_READ_MASK,
            "[unregister] handle %p still locked (state=%08x)",
            hnd, hnd->lockState);

    // never unmap buffers that were created in this process
    if (hnd->pid != getpid()) {
        if (hnd->lockState & private_handle_t::LOCK_STATE_MAPPED) {
            gralloc_unmap(module, handle);
        }
        hnd->base = 0;
        hnd->lockState  = 0;
        hnd->writeOwner = 0;
    }
    return 0;
}
开发者ID:DESHONOR,项目名称:hardware_qcom_msm7k,代码行数:29,代码来源:mapper.cpp


示例2: ALOGW_IF

status_t StreamOutHalHidl::write(const void *buffer, size_t bytes, size_t *written) {
    if (mStream == 0) return NO_INIT;
    *written = 0;

    if (bytes == 0 && !mDataMQ) {
        // Can't determine the size for the MQ buffer. Wait for a non-empty write request.
        ALOGW_IF(mCallback.unsafe_get(), "First call to async write with 0 bytes");
        return OK;
    }

    status_t status;
    if (!mDataMQ && (status = prepareForWriting(bytes)) != OK) {
        return status;
    }

    return callWriterThread(
            WriteCommand::WRITE, "write", static_cast<const uint8_t*>(buffer), bytes,
            [&] (const WriteStatus& writeStatus) {
                *written = writeStatus.reply.written;
                // Diagnostics of the cause of b/35813113.
                ALOGE_IF(*written > bytes,
                        "hal reports more bytes written than asked for: %lld > %lld",
                        (long long)*written, (long long)bytes);
            });
}
开发者ID:freak97,项目名称:frameworks_av,代码行数:25,代码来源:StreamHalHidl.cpp


示例3: Hwmsen

sensors_poll_context_t::sensors_poll_context_t()
{
    mSensors[hwmsen] = new Hwmsen();
    mPollFds[hwmsen].fd = mSensors[hwmsen]->getFd();
    mPollFds[hwmsen].events = POLLIN;
    mPollFds[hwmsen].revents = 0;

	mSensors[accel] = new AccelerationSensor();
    mPollFds[accel].fd = mSensors[accel]->getFd();
    mPollFds[accel].events = POLLIN;
    mPollFds[accel].revents = 0;

	mSensors[magnetic] = new MagneticSensor();
    mPollFds[magnetic].fd = mSensors[magnetic]->getFd();
    mPollFds[magnetic].events = POLLIN;
    mPollFds[magnetic].revents = 0;

    int wakeFds[2];
    int result = pipe(wakeFds);
    ALOGE_IF(result<0, "error creating wake pipe (%s)", strerror(errno));
    fcntl(wakeFds[0], F_SETFL, O_NONBLOCK);
    fcntl(wakeFds[1], F_SETFL, O_NONBLOCK);
    mWritePipeFd = wakeFds[1];

    mPollFds[wake].fd = wakeFds[0];
    mPollFds[wake].events = POLLIN;
    mPollFds[wake].revents = 0;
}
开发者ID:PixNDom,项目名称:android_hardware_mediatek,代码行数:28,代码来源:nusensors.cpp


示例4: open

int SensorBase::open_fifo_device(){
	if (fifo_fd < 0 && fifo_name) {
        fifo_fd = open(fifo_name, O_RDONLY);
        ALOGE_IF(fifo_fd < 0, "Couldn't  open %s (%s)", fifo_name, strerror(errno));
    }
	return 0;
}
开发者ID:PDi-Communication-Systems-Inc,项目名称:lollipop_hardware_imx,代码行数:7,代码来源:SensorBase.cpp


示例5: mlock

void TimeInterpolator::seek(int64_t media_time)
{
    Mutex::Autolock mlock(m_mutex);
    ALOGV("TimeInterpolator::seek(media_time=%lld)", media_time);

    if (m_state == STOPPED || m_state == PAUSED) {
        m_pos0 = media_time;
        m_read = media_time;
        m_queued = 0;
        m_t0 = get_system_usecs();
        m_Tf = 0;
        m_last = media_time;
        m_now_last = 0;
    } else {
        ALOGE_IF(m_state != ROLLING, "TimeInterpolator logic error: "
                "state is not rolling in seek()");
        m_read = media_time;
        m_pos0 = m_read - m_latency;
        m_queued = 0;
        m_t0 = get_system_usecs();
        m_Tf = 1.0;
        m_last = m_pos0;
        m_now_last = 0;
    }
}
开发者ID:qqedfr,项目名称:kitkat-2,代码行数:25,代码来源:TimeInterpolator.cpp


示例6: ALOGD

int sensors_poll_context_t::activate(int handle, int enabled) 
{
	ALOGD( "activate handle =%d, enable = %d",handle, enabled );
	int err=0;
	
	int index = handleToDriver(handle);

	//
	if(ID_ORIENTATION == handle)
	{
	     //ALOGD( "fwq1111" );
		((AccelerationSensor*)(mSensors[accel]))->enableNoHALDataAcc(enabled);
		((Hwmsen*)(mSensors[hwmsen]))->enableNoHALDataAcc(enabled);
	}
	
	if(NULL != mSensors[index] && index >0 )
	{
	   ALOGD( "use new sensor index=%d, mSensors[index](%x)", index, mSensors[index]);
	   err =  mSensors[index]->enable(handle, enabled);
	}
	
	if(err || index<0 )
	{
  		ALOGD("use old sensor err(%d),index(%d) go to old hwmsen\n",err,index);
		// notify to hwmsen sensor to support old architecture
		err =  mSensors[hwmsen]->enable(handle, enabled);
	}
	
    if (enabled && !err) {
        const char wakeMessage(WAKE_MESSAGE);
        int result = write(mWritePipeFd, &wakeMessage, 1);
        ALOGE_IF(result<0, "error sending wake message (%s)", strerror(errno));
    }
    return err;
}
开发者ID:PixNDom,项目名称:android_hardware_mediatek,代码行数:35,代码来源:nusensors.cpp


示例7: open

int Kxtf9Sensor::setDelay(int32_t handle, int64_t ns)
{
    int err = 0;

    if (mEnabled) {
        if (ns < 0)
            return -EINVAL;

        unsigned long delay = ns / 1000000;

        // ok we need to set our enabled state
        int fd = open(KXTF9_DELAY_FILE, O_WRONLY);
        if(fd >= 0) {
            char buffer[20];
            int bytes = sprintf(buffer, "%d\n", delay);
            err = write(fd, buffer, bytes);
            err = err < 0 ? -errno : 0;
        } else {
            err = -errno;
        }

        ALOGE_IF(err < 0, "Error setting delay of kxtf9 accelerometer (%s)", strerror(-err));
    }

    return err;
}
开发者ID:priyanob,项目名称:bowser_hd_7,代码行数:26,代码来源:Kxtf9.cpp


示例8: teardownWfd

static void teardownWfd(hwc_context_t* ctx) {
    // Teardown WFD display
    ALOGD_IF(UEVENT_DEBUG,"Received HDMI connection request when WFD is "
            "active");
    {
        Locker::Autolock _l(ctx->mDrawLock);
        clear(ctx, HWC_DISPLAY_VIRTUAL);
        ctx->dpyAttr[HWC_DISPLAY_VIRTUAL].connected = false;
        ctx->dpyAttr[HWC_DISPLAY_VIRTUAL].isActive = false;
    }

    ctx->mVirtualDisplay->teardown();

    /* Need to send hotplug only when connected WFD in proprietary path */
    if(ctx->mVirtualonExtActive) {
        ALOGE_IF(UEVENT_DEBUG,"%s: Sending EXTERNAL OFFLINE"
                "hotplug event for wfd display", __FUNCTION__);
        ctx->proc->hotplug(ctx->proc, HWC_DISPLAY_EXTERNAL,
                EXTERNAL_OFFLINE);
        {
            Locker::Autolock _l(ctx->mDrawLock);
            ctx->mVirtualonExtActive = false;
        }
    }

    ctx->mWfdSyncLock.lock();
    ALOGD_IF(HWC_WFDDISPSYNC_LOG,
            "%s: Waiting for wfd-teardown to be signalled",__FUNCTION__);
    ctx->mWfdSyncLock.wait();
    ALOGD_IF(HWC_WFDDISPSYNC_LOG,
            "%s: Teardown signalled. Completed waiting in uevent thread",
            __FUNCTION__);
    ctx->mWfdSyncLock.unlock();
}
开发者ID:Dm47021,项目名称:android_hardware_qcom,代码行数:34,代码来源:hwc_uevents.cpp


示例9: KionixSensor

sensors_poll_context_t::sensors_poll_context_t()
{
    mSensors[accel_kxtj9] = new KionixSensor();
    mPollFds[accel_kxtj9].fd = mSensors[accel_kxtj9]->getFd();
    mPollFds[accel_kxtj9].events = POLLIN;
    mPollFds[accel_kxtj9].revents = 0;
    
    mSensors[light_cm3212] = new LightSensor();
    mPollFds[light_cm3212].fd = mSensors[light_cm3212]->getFd();
    mPollFds[light_cm3212].events = POLLIN;
    mPollFds[light_cm3212].revents = 0;

    mSensors[compass_ami30x] = new AmiSensor();
    mPollFds[compass_ami30x].fd = mSensors[compass_ami30x]->getFd();
    mPollFds[compass_ami30x].events = POLLIN;
    mPollFds[compass_ami30x].revents = 0;
	
    mSensors[accel_dmard06] = new Dmard06Sensor();
    mPollFds[accel_dmard06].fd = mSensors[accel_dmard06]->getFd();
    mPollFds[accel_dmard06].events = POLLIN;
    mPollFds[accel_dmard06].revents = 0;
    int wakeFds[2];
    int result = pipe(wakeFds);
    ALOGE_IF(result<0, "error creating wake pipe (%s)", strerror(errno));
    fcntl(wakeFds[0], F_SETFL, O_NONBLOCK);
    fcntl(wakeFds[1], F_SETFL, O_NONBLOCK);
    mWritePipeFd = wakeFds[1];

    mPollFds[wake].fd = wakeFds[0];
    mPollFds[wake].events = POLLIN;
    mPollFds[wake].revents = 0;
}
开发者ID:SandPox,项目名称:android_hardware_nufront,代码行数:32,代码来源:nusensors.cpp


示例10: gralloc_free_pmem

int gralloc_free_pmem(alloc_device_t* dev,
        struct hwmem_gralloc_buf_handle_t* hnd)
{
    if (hnd->flags & PRIV_FLAGS_FRAMEBUFFER) {
        // free this buffer
        struct hwmem_gralloc_module_t* m = (struct hwmem_gralloc_module_t*)
                dev->common.module;
        const size_t bufferSize = m->finfo.line_length * m->info.yres;
        int index = (hnd->base_addr - m->framebuffer->base_addr) / bufferSize;
        m->bufferMask &= ~(1<<index);
    } else {
#if HAVE_ANDROID_OS
        if (hnd->flags & PRIV_FLAGS_USES_PMEM) {
            if (hnd->fd >= 0) {
                struct pmem_region sub = { hnd->offset, hnd->size };
                int err = ioctl(hnd->fd, PMEM_UNMAP, &sub);
                ALOGE_IF(err<0, "PMEM_UNMAP failed (%s), "
                        "fd=%d, sub.offset=%i, sub.size=%i",
                        strerror(errno), hnd->fd, hnd->offset, hnd->size);
            }
        }
#endif // HAVE_ANDROID_OS
        terminateBuffer(NULL, hnd); /* NULL is ok here as the parameter is not used by terminateBuffer */
    }

    close(hnd->fd);
    free(hnd);
    return 0;
}
开发者ID:Agontuk,项目名称:android_hardware_ste-sony,代码行数:29,代码来源:hwmem_gralloc_pmem.c


示例11: terminateBuffer

static int terminateBuffer(gralloc_module_t const* module,
        struct hwmem_gralloc_buf_handle_t* hnd)
{
    /*
     * If the buffer has been mapped during a lock operation, it's time
     * to un-map it. It's an error to be here with a locked buffer.
     */

    ALOGE_IF(hnd->lockState & LOCK_STATE_READ_MASK,
            "[terminate] handle %p still locked (state=%08x)",
            hnd, hnd->lockState);

    if (hnd->lockState & LOCK_STATE_MAPPED) {
        // this buffer was mapped, unmap it now
        if ((hnd->flags & PRIV_FLAGS_USES_PMEM) &&
            (hnd->pid == getpid())) {
            // ... unless it's a "master" pmem buffer, that is a buffer
            // mapped in the process it's been allocated.
            // (see gralloc_alloc_buffer())
        } else {
            gralloc_unmap(module, hnd);
        }
    }

    return 0;
}
开发者ID:Agontuk,项目名称:android_hardware_ste-sony,代码行数:26,代码来源:hwmem_gralloc_pmem.c


示例12: terminateBuffer

int terminateBuffer(gralloc_module_t const* module,
        private_handle_t* hnd)
{
    /*
     * If the buffer has been mapped during a lock operation, it's time
     * to un-map it. It's an error to be here with a locked buffer.
     */

    ALOGE_IF(hnd->lockState & private_handle_t::LOCK_STATE_READ_MASK,
            "[terminate] handle %p still locked (state=%08x)",
            hnd, hnd->lockState);

    if (hnd->lockState & private_handle_t::LOCK_STATE_MAPPED) {
        // this buffer was mapped, unmap it now
        if (hnd->flags & (private_handle_t::PRIV_FLAGS_USES_PMEM |
                          private_handle_t::PRIV_FLAGS_USES_PMEM_ADSP |
                          private_handle_t::PRIV_FLAGS_USES_ASHMEM)) {
            if (hnd->pid != getpid()) {
                // ... unless it's a "master" pmem buffer, that is a buffer
                // mapped in the process it's been allocated.
                // (see gralloc_alloc_buffer())
                gralloc_unmap(module, hnd);
            }
        } else {
            LOGE("terminateBuffer: unmapping a non pmem/ashmem buffer flags = 0x%x", hnd->flags);
            gralloc_unmap(module, hnd);
        }
    }

    return 0;
}
开发者ID:DESHONOR,项目名称:hardware_qcom_msm7k,代码行数:31,代码来源:mapper.cpp


示例13: mAllocMod

GraphicBufferMapper::GraphicBufferMapper()
    : mAllocMod(0)
{
    hw_module_t const* module;
    int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module);
    ALOGE_IF(err, "FATAL: can't find the %s module", GRALLOC_HARDWARE_MODULE_ID);
    if (err == 0) {
        mAllocMod = (gralloc_module_t const *)module;
    }

    // [MTK] {{{
    // 20120918: gralloc extra device for internal purpose
    mExtraDev = NULL;
    if (err == 0) {
        gralloc_extra_open(module, &mExtraDev);
    }

    char value[PROPERTY_VALUE_MAX];
    property_get("debug.gbuf.callstack", value, "0");
    mIsDumpCallStack = atoi(value);
    if (true == mIsDumpCallStack) {
        XLOGI("!!! dump GraphicBufferMapper callstack for pid:%d !!!", getpid());
    }
    // [MTK] }}}
}
开发者ID:Proshivalskiy,项目名称:MT6582_kernel_source,代码行数:25,代码来源:GraphicBufferMapper.cpp


示例14: Lsm303dlhGSensor

sensors_poll_context_t::sensors_poll_context_t()
{
    mSensors[lsm303dlh_acc] = new Lsm303dlhGSensor();
    mPollFds[lsm303dlh_acc].fd = mSensors[lsm303dlh_acc]->getFd();
    mPollFds[lsm303dlh_acc].events = POLLIN;
    mPollFds[lsm303dlh_acc].revents = 0;

    mSensors[lsm303dlh_mag] = new Lsm303dlhMagSensor();
    mPollFds[lsm303dlh_mag].fd = mSensors[lsm303dlh_mag]->getFd();
    mPollFds[lsm303dlh_mag].events = POLLIN;
    mPollFds[lsm303dlh_mag].revents = 0;

    mSensors[isl29023_als] = new LightSensor();
    mPollFds[isl29023_als].fd = mSensors[isl29023_als]->getFd();
    mPollFds[isl29023_als].events = POLLIN;
    mPollFds[isl29023_als].revents = 0;

    mSensors[mpu3050] = new MPLSensor();
    mPollFds[mpu3050].fd = mSensors[mpu3050]->getFd();
    mPollFds[mpu3050].events = POLLIN;
    mPollFds[mpu3050].revents = 0;

    int wakeFds[2];
    int result = pipe(wakeFds);
    ALOGE_IF(result<0, "error creating wake pipe (%s)", strerror(errno));
    fcntl(wakeFds[0], F_SETFL, O_NONBLOCK);
    fcntl(wakeFds[1], F_SETFL, O_NONBLOCK);
    mWritePipeFd = wakeFds[1];

    mPollFds[wake].fd = wakeFds[0];
    mPollFds[wake].events = POLLIN;
    mPollFds[wake].revents = 0;
}
开发者ID:jshafer817,项目名称:cm11_device_hp_tenderloin34,代码行数:33,代码来源:nusensors.cpp


示例15: ALOGE_IF

bool GenericPipe::init()
{
    ALOGE_IF(DEBUG_OVERLAY, "GenericPipe init");
    mRotDownscaleOpt = false;

    int fbNum = Overlay::getFbForDpy(mDpy);
    if( fbNum < 0 ) {
        ALOGE("%s: Invalid FB for the display: %d",__FUNCTION__, mDpy);
        return false;
    }

    ALOGD_IF(DEBUG_OVERLAY,"%s: mFbNum:%d",__FUNCTION__, fbNum);


    if(!mCtrlData.ctrl.init(fbNum)) {
        ALOGE("GenericPipe failed to init ctrl");
        return false;
    }

    if(!mCtrlData.data.init(fbNum)) {
        ALOGE("GenericPipe failed to init data");
        return false;
    }

    return true;
}
开发者ID:ProtoDroidDevs,项目名称:android_hardware_qcom_display-caf,代码行数:26,代码来源:overlayGenPipe.cpp


示例16: ALOGV

// establish binder interface to MediaPlayerService
/*static*/const sp<IMediaPlayerService>&
IMediaDeathNotifier::getMediaPlayerService()
{
    ALOGV("getMediaPlayerService");
    Mutex::Autolock _l(sServiceLock);
    if (sMediaPlayerService == 0) {
        sp<IServiceManager> sm = defaultServiceManager();
        sp<IBinder> binder;
        do {
            binder = sm->getService(String16("media.player"));
            if (binder != 0) {
                break;
            }
            ALOGW("Media player service not published, waiting...");
            usleep(500000); // 0.5 s
        } while (true);

        if (sDeathNotifier == NULL) {
        sDeathNotifier = new DeathNotifier();
    }
    binder->linkToDeath(sDeathNotifier);
    sMediaPlayerService = interface_cast<IMediaPlayerService>(binder);
    }
    ALOGE_IF(sMediaPlayerService == 0, "no media player service!?");
    return sMediaPlayerService;
}
开发者ID:0-t,项目名称:android_frameworks_av,代码行数:27,代码来源:IMediaDeathNotifier.cpp


示例17: ALOGE_IF

void BootAnimation::onFirstRef() {
    status_t err = mSession->linkToComposerDeath(this);
    ALOGE_IF(err, "linkToComposerDeath failed (%s) ", strerror(-err));
    if (err == NO_ERROR) {
        run("BootAnimation", PRIORITY_DISPLAY);
    }
}
开发者ID:1477584437,项目名称:platform_frameworks_base,代码行数:7,代码来源:BootAnimation.cpp


示例18: open

int SensorBase::openDevice() {
    if ((mDevFd < 0) && mDevName) {
        mDevFd = open(mDevName, O_RDONLY);
        ALOGE_IF(mDevFd < 0, "Couldn't open %s (%s)", mDevName, strerror(errno));
    }
    return 0;
}
开发者ID:capnkrunch,项目名称:android_device_samsung_manta,代码行数:7,代码来源:SensorBase.cpp


示例19: teardownWfd

static void teardownWfd(hwc_context_t* ctx) {
    // Teardown WFD display
    ALOGD_IF(UEVENT_DEBUG,"Received HDMI connection request when WFD is "
            "active");
    {
        Locker::Autolock _l(ctx->mDrawLock);
        clear(ctx, HWC_DISPLAY_VIRTUAL);
        ctx->dpyAttr[HWC_DISPLAY_VIRTUAL].connected = false;
        ctx->dpyAttr[HWC_DISPLAY_VIRTUAL].isActive = false;
    }

    ctx->mVirtualDisplay->teardown();

    /* Need to send hotplug only when connected WFD in proprietary path */
    if(ctx->mVirtualonExtActive) {
        ALOGE_IF(UEVENT_DEBUG,"%s: Sending EXTERNAL OFFLINE"
                "hotplug event for wfd display", __FUNCTION__);
        ctx->proc->hotplug(ctx->proc, HWC_DISPLAY_EXTERNAL,
                EXTERNAL_OFFLINE);
        {
            Locker::Autolock _l(ctx->mDrawLock);
            ctx->mVirtualonExtActive = false;
        }
    }
    /* Wait for few frames for SF to tear down the WFD session. */
    usleep(ctx->dpyAttr[HWC_DISPLAY_PRIMARY].vsync_period
            * 2 / 1000);
}
开发者ID:AdrianoMartins,项目名称:platform_hardware_qcom_display,代码行数:28,代码来源:hwc_uevents.cpp


示例20: sm

sensors_poll_context_t::sensors_poll_context_t()
{
	int number;
	int i;
	const struct sensor_t *slist;
	const struct SensorContext *context;
	NativeSensorManager& sm(NativeSensorManager::getInstance());

	number = sm.getSensorList(&slist);

	/* use the dynamic sensor list */
	for (i = 0; i < number; i++) {
		context = sm.getInfoByHandle(slist[i].handle);

		mPollFds[i].fd = (context == NULL) ? -1 : context->data_fd;
		mPollFds[i].events = POLLIN;
		mPollFds[i].revents = 0;
	}

	ALOGI("The avaliable sensor handle number is %d",i);
	int wakeFds[2];
	int result = pipe(wakeFds);
	ALOGE_IF(result<0, "error creating wake pipe (%s)", strerror(errno));
	fcntl(wakeFds[0], F_SETFL, O_NONBLOCK);
	fcntl(wakeFds[1], F_SETFL, O_NONBLOCK);
	mWritePipeFd = wakeFds[1];

	mPollFds[number].fd = wakeFds[0];
	mPollFds[number].events = POLLIN;
	mPollFds[number].revents = 0;
}
开发者ID:AndroidXX,项目名称:android_device_huawei_g760-caf,代码行数:31,代码来源:sensors.cpp



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


鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
C++ ALOGI函数代码示例发布时间:2022-05-30
下一篇:
C++ ALOGD_IF函数代码示例发布时间: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