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

C++ AM_DEBUG函数代码示例

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

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



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

示例1: AM_LocalConnect

/**\brief 通过本地socket连接到服务
 * \param[in] name 服务名称
 * \param[out] fd 返回socket
 * \return
 *   - AM_SUCCESS 成功
 *   - 其他值 错误代码
 */
AM_ErrorCode_t AM_LocalConnect(const char *name, int *fd)
{
	struct sockaddr_un addr;
	int s, ret;
#if 0	
	assert(name && fd);
	
	s = socket(AF_LOCAL, SOCK_STREAM, 0);
	if(s==-1)
	{
		AM_DEBUG(1, "cannot create local socket \"%s\"", strerror(errno));
		return AM_FAILURE;
	}
	
	addr.sun_family = AF_LOCAL;
        strncpy(addr.sun_path, name, sizeof(addr.sun_path)-1);
        
        ret = connect(s, (struct sockaddr*)&addr, SUN_LEN(&addr));
        if(ret==-1)
        {
        	AM_DEBUG(1, "connect to \"%s\" failed \"%s\"", name, strerror(errno));
        	close(s);
		return AM_FAILURE;
        }
        
        *fd = s;
#endif
        return AM_SUCCESS;
}
开发者ID:S-trace,项目名称:android_device_jxd_s7300b,代码行数:36,代码来源:am_misc.c


示例2: AM_OSD_MapPixel

/**\brief 将像素映射为颜色
 * \param[in] fmt 图形模式 
 * \param[in] pix 像素值
 * \param[out] col 返回映射的颜色值 
 * \return
 *   - AM_SUCCESS 成功
 *   - 其他值 错误代码(见am_osd.h)
 */
AM_ErrorCode_t AM_OSD_MapPixel(AM_OSD_PixelFormat_t *fmt, uint32_t pix, AM_OSD_Color_t *col)
{
	assert(fmt && col);
	
	if(AM_OSD_PIXEL_FORMAT_TYPE_IS_PALETTE(fmt->type))
	{
		if(pix>=fmt->palette.color_count)
		{
			AM_DEBUG(1, "illegal pixel, must in (0~%d)", fmt->palette.color_count-1);
			return AM_OSD_ERR_ILLEGAL_PIXEL;
		}
		
		*col = fmt->palette.colors[pix];
	}
	else if(AM_OSD_PIXEL_FORMAT_TYPE_IS_YUV(fmt->type))
	{
		AM_DEBUG(1, "cannot map YUV pixel to color");
		return AM_OSD_ERR_NOT_SUPPORTED;
	}
	else
	{
		AM_RGB_PIXEL_TO_COLOR(fmt, pix, col);
	}
	
	return AM_SUCCESS;
}
开发者ID:felipemogollon,项目名称:dvb,代码行数:34,代码来源:am_osd.c


示例3: AM_LocalSendCmd

/**\brief 通过本地socket发送命令
 * \param fd socket
 * \param[in] cmd 命令字符串
 * \return
 *   - AM_SUCCESS 成功
 *   - 其他值 错误代码
 */
AM_ErrorCode_t AM_LocalSendCmd(int fd, const char *cmd)
{
	AM_ErrorCode_t ret;
	int len;
	
	assert(cmd);
	
	len = strlen(cmd)+1;
	
	ret = try_write(fd, (const char*)&len, sizeof(int));
	if(ret!=AM_SUCCESS)
	{
		AM_DEBUG(1, "write local socket failed");
		return ret;
	}
	
	ret = try_write(fd, cmd, len);
	if(ret!=AM_SUCCESS)
	{
		AM_DEBUG(1, "write local socket failed");
		return ret;
	}
	
	AM_DEBUG(2, "write cmd: %s", cmd);
	
	return AM_SUCCESS;
}
开发者ID:S-trace,项目名称:android_device_jxd_s7300b,代码行数:34,代码来源:am_misc.c


示例4: dvb_open

/****************************************************************************
 * Functions
 ***************************************************************************/
static AM_ErrorCode_t dvb_open (AM_FEND_Device_t *dev, const AM_FEND_OpenPara_t *para)
{
	char name[PATH_MAX];
	int fd;
	
#if 1
	snprintf(name, sizeof(name), "/dev/dvb0.frontend%d", dev->dev_no);
	

	fd = open(name, O_RDWR);
	if(fd==-1)
	{
		AM_DEBUG(1, "cannot open %s, error:%s", name, strerror(errno));
		return AM_FEND_ERR_CANNOT_OPEN;
	}
	
	if(ioctl(fd, FE_GET_INFO, &dev->info))
	{
		close(fd);
		AM_DEBUG(1, "cannot get frontend's infomation, error:%s", strerror(errno));
		return AM_FEND_ERR_IO;
	}
	
	dev->drv_data = (void*)fd;
#endif
	return AM_SUCCESS;
}
开发者ID:S-trace,项目名称:android_device_jxd_s7300b,代码行数:30,代码来源:linux_dvb.c


示例5: AM_LocalGetResp

/**\brief 通过本地socket接收响应字符串
 * \param fd socket
 * \param[out] buf 缓冲区
 * \param len 缓冲区大小
 * \return
 *   - AM_SUCCESS 成功
 *   - 其他值 错误代码
 */
AM_ErrorCode_t AM_LocalGetResp(int fd, char *buf, int len)
{
	AM_ErrorCode_t ret;
	int bytes;
	
	assert(buf);
	
	ret = try_read(fd, (char*)&bytes, sizeof(int));
	if(ret!=AM_SUCCESS)
	{
		AM_DEBUG(1, "read local socket failed");
		return ret;
	}
	
	if(len<bytes)
	{
		AM_DEBUG(1, "respond buffer is too small");
		return AM_FAILURE;
	}
	
	ret = try_read(fd, buf, bytes);
	if(ret!=AM_SUCCESS)
	{
		AM_DEBUG(1, "read local socket failed");
		return ret;
	}
	
	return AM_SUCCESS;
}
开发者ID:S-trace,项目名称:android_device_jxd_s7300b,代码行数:37,代码来源:am_misc.c


示例6: dvb_sec_begin_cb

static AM_ErrorCode_t dvb_sec_begin_cb (void *user_data, const char *sec)
{
	AM_DVBConfig_t *conf=(AM_DVBConfig_t*)user_data;
	
	if(conf->in_service_sec)
	{
		AM_DEBUG(1, "unknown section");
		return AM_CFG_ERR_SYNTAX;
	}
	
	if(!strcmp(sec, "service"))
	{
		if(conf->service_count<MAX_SERVICE_COUNT)
		{
			conf->service_count++;
		}
		else
		{
			AM_DEBUG(1, "too many services");
		}
		conf->in_service_sec = 1;
		return AM_SUCCESS;
	}
	return AM_CFG_ERR_UNKNOWN_TAG;
}
开发者ID:felipemogollon,项目名称:dvb,代码行数:25,代码来源:am_cfg_test.c


示例7: vol_update

static int vol_update (DTV_Window_t *win, AM_OSD_Surface_t *s)
{
	AM_ErrorCode_t ret = AM_SUCCESS;
	AM_OSD_Rect_t sr, dr;
	int i =0 ,tmp;

	ret = AM_AOUT_GetVolume(DTV_AOUT_DEV_NO, &(vol.cur_vol_value));
	if(ret!=AM_SUCCESS)
	{
		printf("AM_AOUT_SetVolume fail!\n");
	}
	else
	{	
		AM_DEBUG(1, "vol_value = %d",vol.cur_vol_value);
	}

	//draw vol bar
	
	sr.x = 0;
	sr.y = 0;
	sr.w = gfx.volume_img->width;
	sr.h = gfx.volume_img->height;
	
	dr.x = 300;
	dr.y = 450;
	dr.w = gfx.volume_img->width;
	dr.h = gfx.volume_img->height;

	
	AM_OSD_Blit(gfx.volume_img, &sr, s, &dr, NULL);

	if(tmp = vol.cur_vol_value / VOL_VALUE_STEP)

		AM_DEBUG(1, "%d\n",tmp);
	
	for(i=0;i<tmp;i++)
	{
		sr.x = 0;
		sr.w = 0;
		sr.w = gfx.volume_value_img->width;
		sr.h = gfx.volume_value_img->height;
		
		dr.x = 376 + ( i * (gfx.volume_value_img->width + 4));
		dr.y = 459;
		dr.w = gfx.volume_value_img->width;
		dr.h = gfx.volume_value_img->height;
		
		AM_OSD_Blit(gfx.volume_value_img, &sr, s, &dr, NULL);
	
	}

	AM_TIME_GetClock(&now);

	
	return 0;
}
开发者ID:felipemogollon,项目名称:dvb,代码行数:56,代码来源:vol_win.c


示例8: dump_bytes

static void dump_bytes(int dev_no, int fid, const uint8_t *data, int len, void *user_data)
{
	FILE *fp;
	int did = data[8];
	int sec = data[6];
	
	
#if 0
	if(did!=3)
		return;
	
	if(sections[sec].got)
	{
		if((sections[sec].len!=len) || memcmp(sections[sec].data, data, len))
		{
			AM_DEBUG(1, "SECTION %d MISMATCH LEN: %d", sec, len);
		}
	}
	else
	{
		sections[sec].len = len;
		sections[sec].got = 1;
		memcpy(sections[sec].data, data, len);
		AM_DEBUG(1, "GET SECTION %d LEN: %d", sec, len);
	}
#endif
#if 0
	int did = data[8];
	int bid = (data[9]<<24)|(data[10]<<16)|(data[11]<<8)|data[12];
	int sec = data[6];
	
	if(did!=3)
		return;
	if(sec_mask[sec])
		return;
	
	sec_mask[sec] = 1;
	AM_DEBUG(1, "get section %d", sec);
	
	fseek(fp, bid*4030, SEEK_SET);
	fwrite(data+13, 1, len-17, fp);
#endif
#if 1
	int i;
	
	printf("section:\n");
	for(i=0;i<len;i++)
	{
		printf("%02x ", data[i]);
		if(((i+1)%16)==0) printf("\n");
	}
	
	if((i%16)!=0) printf("\n");
#endif
}
开发者ID:felipemogollon,项目名称:dvb,代码行数:55,代码来源:am_dmx_test.c


示例9: si_section_callback

static void si_section_callback(int dev_no, int fid, const uint8_t *data, int len, void *user_data)
{
	int hsi;
	int t;
	AM_SI_SectionHeader_t header;
	void *p_table;
	
	AM_DEBUG(1, "GET A SECTION LEN: %d", len);

	t = get_sec_by_hfilter(fid);
	if (t == -1)
	{
		AM_DEBUG(1, "Unknown filter id 0x%x", fid);
		return;
	}

	/*Copy the data*/
	memcpy(si_sections[t].data, data, len);
	
	AM_SI_Create(&hsi);
	AM_SI_GetSectionHeader(hsi, (uint8_t*)si_sections[t].data, (uint16_t)len, &header);

	/*Print the header*/
	AM_DEBUG(1, "SectionHeader::\n\ttable_id\t\t0x%x\n\tsyntax_indicator\t0x%x\n\tprv_indicator\t\t0x%x\n\tlength\t\t\t0x%x\n\textension\t\t0x%x\n\tverion\t\t\t0x%x\n\tcur_next\t\t0x%x\n\tsec_num\t\t\t0x%x\n\tlast_sec_num\t\t0x%x",
	header.table_id,header.syntax_indicator,header.private_indicator,
	header.length, header.extension, header.version, 
	header.cur_next_indicator, header.sec_num, header.last_sec_num);

	/*Decode*/
	if (AM_SI_DecodeSection(hsi, si_sections[t].pid, 
							(uint8_t*)si_sections[t].data, 
							(uint16_t)len, &p_table) == AM_SUCCESS)
	{
		AM_DEBUG(1, "Section Successfully decoded");
		/*Print detail*/
		if (si_sections[t].print)
			si_sections[t].print(p_table);
		AM_SI_ReleaseSection(hsi, p_table->i_table_id, (void*)p_table);
	}
	else
	{
		AM_DEBUG(1, "Section  decoded failed");
	}
		
	AM_SI_Destroy(hsi);

	si_sections[t].last_sec = header.last_sec_num;
	
	/*Start next section receive*/
	si_test_table_start_next_section(t);
}
开发者ID:felipemogollon,项目名称:dvb,代码行数:51,代码来源:am_si_test.c


示例10: AM_CFG_Value2Int

/**\brief 将字符串值转化为整数
 * \param[in] value 字符串值
 * \param[out] pv 输出整数的指针
 * \return
 *   - AM_SUCCESS 成功
 *   - 其他值 错误代码(见am_cfg.h)
 */
AM_ErrorCode_t AM_CFG_Value2Int(const char *value, int *pv)
{
	int rc;
	
	assert(value && pv);
	
	if(value[0]=='0')
	{
		if((value[1]=='x')||(value[1]=='X'))
		{
			rc = sscanf(value+2, "%x", pv);
		}
		else
		{
			rc = sscanf(value, "%o", pv);
		}
	}
	else
	{
		rc = sscanf(value, "%d", pv);
	}
	
	if(rc!=1)
	{
		AM_DEBUG(1, "key is not an integer");
		return AM_CFG_ERR_BAD_FOTMAT;
	}
	
	return AM_SUCCESS;
}
开发者ID:felipemogollon,项目名称:dvb,代码行数:37,代码来源:am_cfg_input.c


示例11: AM_EVT_Subscribe

/**\brief 注册一个事件回调函数
 * \param dev_no 回调函数对应的设备ID
 * \param event_type 回调函数对应的事件类型
 * \param cb 回调函数指针
 * \param data 传递给回调函数的用户定义参数
 * \return
 *   - AM_SUCCESS 成功
 *   - 其他值 错误代码
 */
AM_ErrorCode_t AM_EVT_Subscribe(int dev_no, int event_type, AM_EVT_Callback_t cb, void *data)
{
	AM_Event_t *evt;
	int pos;
	
	assert(cb);
	
	/*分配事件*/
	evt = malloc(sizeof(AM_Event_t));
	if(!evt)
	{
		AM_DEBUG(1, "not enough memory");
		return AM_EVT_ERR_NO_MEM;
	}
	
	evt->dev_no = dev_no;
	evt->type   = event_type;
	evt->cb     = cb;
	evt->data   = data;
	
	pos = event_type%AM_EVT_BUCKET_COUNT;
	
	/*加入事件哈希表中*/
	pthread_mutex_lock(&lock);
	
	evt->next   = events[pos];
	events[pos] = evt;
	
	pthread_mutex_unlock(&lock);
	
	return AM_SUCCESS;
}
开发者ID:S-trace,项目名称:android_device_jxd_s7300b,代码行数:41,代码来源:am_evt.c


示例12: table_cell_create

/**\brief 创建一个单元格控件*/
static AM_ErrorCode_t table_cell_create(AM_GUI_Table_t *tab, AM_GUI_Widget_t **cell, int row, int col, int hspan, int vspan)
{
	AM_GUI_TableCell_t *c;
	AM_ErrorCode_t ret;
	
	c = (AM_GUI_TableCell_t*)malloc(sizeof(AM_GUI_TableCell_t));
	if(!cell)
	{
		AM_DEBUG(1, "not enough memory");
		return AM_GUI_ERR_NO_MEM;
	}
	
	ret = AM_GUI_WidgetInit(AM_GUI_WIDGET(tab)->gui, AM_GUI_WIDGET(c));
	if(ret!=AM_SUCCESS)
	{
		free(c);
		return ret;
	}
	
	AM_GUI_WIDGET(c)->type = AM_GUI_WIDGET_TABLE_CELL;
	
	c->row   = row;
	c->col   = col;
	c->hspan = hspan;
	c->vspan = vspan;
	
	*cell = AM_GUI_WIDGET(c);
	return AM_SUCCESS;
}
开发者ID:felipemogollon,项目名称:dvb,代码行数:30,代码来源:am_gui_table.c


示例13: dvb_set_source

static AM_ErrorCode_t dvb_set_source(AM_DMX_Device_t *dev, AM_DMX_Source_t src)
{
	char buf[32];
	char *cmd;
	
	snprintf(buf, sizeof(buf), "/sys/class/stb/demux%d_source", dev->dev_no);
	
	switch(src)
	{
		case AM_DMX_SRC_TS0:
			cmd = "ts0";
		break;
		case AM_DMX_SRC_TS1:
			cmd = "ts1";
		break;
		case AM_DMX_SRC_TS2:
			cmd = "ts2";
		break;

		case AM_DMX_SRC_HIU:
			cmd = "hiu";
		break;
		default:
			AM_DEBUG(1, "do not support demux source %d", src);
		return AM_DMX_ERR_NOT_SUPPORTED;
	}
	
	return AM_FileEcho(buf, cmd);
}
开发者ID:S-trace,项目名称:android_device_jxd_s7300b,代码行数:29,代码来源:linux_dvb.c


示例14: aml_write

AM_ErrorCode_t aml_write (AM_SMC_Device_t *dev, const uint8_t *data, int *len, int timeout)
{
	struct pollfd pfd;
	int fd = (int)dev->drv_data;
	int ret;
	
	pfd.fd = fd;
	pfd.events = POLLOUT;
	
	ret = poll(&pfd, 1, timeout);
	if(ret!=1)
	{
		return AM_SMC_ERR_TIMEOUT;
	}
	
	ret = write(fd, data, *len);
	if(ret<0)
	{
		AM_DEBUG(1, "card write error %s", strerror(errno));
		return AM_SMC_ERR_IO;
	}
	
	*len = ret;
	return AM_SUCCESS;
}
开发者ID:felipemogollon,项目名称:dvb,代码行数:25,代码来源:aml.c


示例15: AM_FEND_IBlindScanAPI_Start

/**\brief Performs a blind scan operation.*/
static AM_ErrorCode_t  AM_FEND_IBlindScanAPI_Start(int dev_no)
{	
	AM_FEND_Device_t *dev = NULL;
	AM_ErrorCode_t ret = AM_SUCCESS;

	fend_get_openned_dev(dev_no, &dev);
	
	if(!dev->drv->blindscan_scan)
	{
		AM_DEBUG(1, "fronend %d no not support blindscan_scan", dev_no);
		return AM_FEND_ERR_NOT_SUPPORTED;
	}	

	pthread_mutex_lock(&dev->lock);	
	
	struct dvbsx_blindscanpara * pbsPara = &(dev->bs_setting.bsPara);

	/*driver need to set in blindscan mode*/
	ret = dev->drv->blindscan_scan(dev, pbsPara);
	if(ret != AM_SUCCESS)
	{
		ret = AM_FEND_ERR_BLINDSCAN;
		pthread_mutex_unlock(&dev->lock);
		return ret;	
	}
	
	pthread_mutex_unlock(&dev->lock);
	
	return ret;
}
开发者ID:felipemogollon,项目名称:dvb,代码行数:31,代码来源:am_fend.c


示例16: dvb_read

static AM_ErrorCode_t dvb_read(AM_DMX_Device_t *dev, AM_DMX_Filter_t *filter, uint8_t *buf, int *size)
{
	int fd = (int)filter->drv_data;
	int len = *size;
	int ret;
	struct pollfd pfd;
	
	if(fd==-1)
		return AM_DMX_ERR_NOT_ALLOCATED;
	
	pfd.events = POLLIN|POLLERR;
	pfd.fd     = fd;
	
	ret = poll(&pfd, 1, 0);
	if(ret<=0)
		return AM_DMX_ERR_NO_DATA;
	
	ret = read(fd, buf, len);
	if(ret<=0)
	{
		if(errno==ETIMEDOUT)
			return AM_DMX_ERR_TIMEOUT;
		AM_DEBUG(1, "read demux failed (%s) %d", strerror(errno), errno);
		return AM_DMX_ERR_SYS;
	}
	
	*size = ret;
	return AM_SUCCESS;
}
开发者ID:S-trace,项目名称:android_device_jxd_s7300b,代码行数:29,代码来源:linux_dvb.c


示例17: AM_CFG_Input

AM_ErrorCode_t AM_CFG_Input(const char *path,
	AM_CFG_SecBeginCb_t sec_begin_cb,
	AM_CFG_KeyCb_t key_cb,
	AM_CFG_SecEndCb_t sec_end_cb,
	void *user_data)
{
	AM_CFG_Parser_t parser;
	FILE *fp;
	AM_ErrorCode_t ret;
	
	assert(path);
	
	if (!(fp = fopen(path, "r")))
	{
		AM_DEBUG(1, "%s", strerror(errno));
		return AM_CFG_ERR_CANNOT_OPEN_FILE;
	}
	
	memset(&parser, 0, sizeof(AM_CFG_Parser_t));
	
	parser.path = path;
	parser.line = 1;
	parser.fp = fp;
	parser.sec_begin_cb = sec_begin_cb;
	parser.sec_end_cb = sec_end_cb;
	parser.key_cb = key_cb;
	parser.user_data = user_data;
	
	ret = cfg_parse(&parser);
	
	if(parser.sec_stack)
	{
		AM_DEBUG(1, "\'}\' mismatch");
		cfg_error(&parser);
	}
	
	while(parser.sec_stack)
	{
		cfg_pop_sec(&parser);
	}
	
	if(parser.buffer)
		AM_MEM_Free(parser.buffer);
	
	fclose(fp);
	return ret;
}
开发者ID:felipemogollon,项目名称:dvb,代码行数:47,代码来源:am_cfg_input.c


示例18: fend_get_dev

/**\brief 根据设备号取得设备结构指针*/
static AM_INLINE AM_ErrorCode_t fend_get_dev(int dev_no, AM_FEND_Device_t **dev)
{
	if((dev_no<0) || (dev_no>=FEND_DEV_COUNT))
	{
		AM_DEBUG(1, "invalid frontend device number %d, must in(%d~%d)", dev_no, 0, FEND_DEV_COUNT-1);
		return AM_FEND_ERR_INVALID_DEV_NO;
	}
	
	*dev = &fend_devices[dev_no];
	return AM_SUCCESS;
}
开发者ID:S-trace,项目名称:android_device_jxd_s7300b,代码行数:12,代码来源:am_fend.c


示例19: dmx_get_dev

/**\brief 根据设备号取得设备结构指针*/
static AM_INLINE AM_ErrorCode_t dmx_get_dev(int dev_no, AM_DMX_Device_t **dev)
{
    if((dev_no<0) || (dev_no>=DMX_DEV_COUNT))
    {
        AM_DEBUG(1, "invalid demux device number %d, must in(%d~%d)", dev_no, 0, DMX_DEV_COUNT-1);
        return AM_DMX_ERR_INVALID_DEV_NO;
    }

    *dev = &dmx_devices[dev_no];
    return AM_SUCCESS;
}
开发者ID:takitr,项目名称:dvb,代码行数:12,代码来源:am_dmx.c


示例20: vout_get_dev

/**\brief 根据设备号取得设备结构*/
static AM_INLINE AM_ErrorCode_t vout_get_dev(int dev_no, AM_VOUT_Device_t **dev)
{
	if((dev_no<0) || (dev_no>=VOUT_DEV_COUNT))
	{
		AM_DEBUG(1, "invalid vout device number %d, must in(%d~%d)", dev_no, 0, VOUT_DEV_COUNT-1);
		return AM_VOUT_ERR_INVALID_DEV_NO;
	}
	
	*dev = &vout_devices[dev_no];
	return AM_SUCCESS;
}
开发者ID:felipemogollon,项目名称:dvb,代码行数:12,代码来源:am_vout.c



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


鲜花

握手

雷人

路过

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

请发表评论

全部评论

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