19个员额/ 0个新员额
最后发表
Sam123
离线
最后看到:6年2个月前
加入:2015-02-19 05:43
新增服务

嗨,对话框的团队,

我遵循AN-B-029文件,并成功地为我的服务添加了新的特性(通知/阅读)。然而,当我添加一个新的特征(写/读),我不能在其中写。每当我写东西的时候,它都显示“写作失败”。是否有AN-B-029这样的文件可以提供步骤?我被困在这里了。

但是,现在我想向现有的sample128添加新的服务。我的新服务应该包含这两个特点。我应该如何实现它?请帮助。

此致敬礼,
山姆

关键词:
设备:
维桑
离线
最后看到:5年11个月前
大师 主人
加入:2014-06-26 08:49
你好山姆,

你好山姆,
个人资料将收到GATTC_WRITE_CMD_IND消息。您需要在配置文件中附加此消息的处理程序函数,您可能已经这样做了吗?你能分享一下你的处理器的功能吗profilename_task.c

Sam123
离线
最后看到:6年2个月前
加入:2015-02-19 05:43
/**

嗨VesaN,

我正在尝试向现有样本128添加一个写/读特征。

/**
****************************************************************************************

* @file sample128_task.c

* @brief Sample128任务实现。

* @brief 128 UUID服务。示例代码

*版权所有(C) 2013 Dialog yabo国际娱乐Semiconductor GmbH及其附属公司,未发表的作品
*此计算机程序包含机密、专有信息,属于商业秘密
* Diayabo国际娱乐log Semiconductor GmbH及其附属公司。所有使用、披露和/或
*除非得到书面授权,否则不得复制。保留所有权利。

****************************************************************************************
*/

/*
*包含文件
****************************************************************************************
*/

# include“rwble_config.h”

#如果(BLE_SAMPLE128)

# include“gap.h”
# include“gapc.h”
# include“gattc_task.h”
# include“atts_util.h”
# include“sample128.h”
# include“sample128_task.h”
# include“attm_cfg.h”
# include“attm_db.h”
# include“prf_utils.h”

/*
*函数定义
****************************************************************************************
*/

/**
****************************************************************************************
* @brief处理接收@ref SAMPLE128_CREATE_DB_REQ消息。
* @param[in] msgid收到的消息的Id(可能未使用)。
*@param[in]指向消息参数的param指针。
*@param[in]接收任务实例的dest_id(可能未使用)。
*@param[in]发送任务实例的src_id。
* @return消息是否被消费。
****************************************************************************************
*/
静态int-sample128_-create_-db_-req_处理程序(ke_-msg_-id_-t-const-msgid,
结构样本128\u创建\u数据库\u请求常量*参数,
KEU task\u id\u t const dest\u id,
ke_任务id_t常量src_id)

/ /创建数据库的状态
uint8_t状态;

uint8_t nb_att_16;
uint8_t nb_att_128;
uint8_t nb_att_32;
uint16_t att_decl_svc = ATT_DECL_PRIMARY_SERVICE;
uint16_t att_decl_char = ATT_DECL_CHARACTERISTIC;
uint16_t att_decl_cfg = ATT_DESC_CLIENT_CHAR_CFG;
uint16_t val_hdl;
uint16_t char_hdl;

/ /保存概要文件ID
sample128_env.con_info.prf_id=TASK_sample128;

/*---------------------------------------------------*
Sample128服务创建
*---------------------------------------------------*/

//将服务添加到数据库

注意:附件16=5;//6…4 UUID16属性声明类型
注意:附件32=0;//0 UUID32属性声明类型
nb_att_128 = 3;// 2 UUID128属性声明类型

状态= attmdb_add_service(&(sample128_env.sample128_shdl),
TASK_SAMPLE128,
注意:附件16,
nb_att_32,
注意:附件128,
78
);

如果(状态==ATT\U ERR\U NO\U ERROR)

/ /添加的主要服务属性 /////////////////////////////////////////////////////////////////
状态= attmdb_add_attribute(sample128_env.sample128_shdl,// Attribute Handle
ATT_UUID_128_LEN, //数据大小= 16 (ATT_UUID_128_LEN)
ATT_UUID_16_LEN,//声明类型ID的大小
(uint8_t*)&att_decl_svc, // 0x2800主服务声明
PERM(RD, ENABLE), //权限
&(sample128_env.sample128_shdl) //属性句柄
);

//添加主服务属性(自定义UUID)的值
status=attmdb\u att\u set\u value(sample128\u env.sample128\u shdl,//属性句柄
ATT_UUID_128_LEN,//该值是服务的128位UUID
(uint8_t *) sample128_svc。uuid //服务的uuid
);

//特征1:////////////////////////////////////////////////////////////////////////////////

//添加特征声明属性到数据库
状态= attmdb_add_attribute(sample128_env.sample128_shdl,
ATT_UUID_128_LEN + 3, //数据大小= 19 (ATT_UUID_128_LEN + 3)
ATT_UUID_16_LEN,//声明类型ID的大小
(uint8_t*)&att_decl_char,//0x2803用于特征声明
PERM(RD, ENABLE), //权限
&(char_hdl) //特征声明的句柄
);

//添加特征值声明属性到数据库
状态= attmdb_add_attribute(sample128_env.sample128_shdl,
sizeof(uint8_t), //数据大小= 1字节
ATT_UUID_128_LEN,//自定义声明类型大小= 128bit
(uint8_t *) &sample128_1_val。uuid, //特征值的uuid
PERM(RD, ENABLE) | PERM(WR, ENABLE),//权限
&(val_hdl) // value属性句柄
);

//保存特征1的句柄
memcpy (sample128_1_char。attr_hdl &val_hdl, sizeof (uint16_t));

//设置特征1的初始值
状态= attmdb_att_set_value(char_hdl, sizeof(sample128_1_char), (uint8_t *)&sample128_1_char);

/ /特征2 : //////////////////////////////////////////////////////////////////////////////////

//添加特征声明属性到数据库
状态= attmdb_add_attribute(sample128_env.sample128_shdl,
ATT_UUID_128_LEN + 3, //数据大小= 19 (ATT_UUID_128_LEN + 3)
ATT_UUID_16_LEN,//声明类型ID的大小
(uint8_t*)&att_decl_char,//0x2803用于特征声明
烫(RD,启用),/ /权限
&(char_hdl) //特征声明的句柄
);

//添加特征值声明属性到数据库
状态= attmdb_add_attribute(sample128_env.sample128_shdl,
sizeof(uint8_t), //数据大小= 1字节
ATT_UUID_128_LEN,//自定义声明类型ID = 128bit的大小
(uint8_t *) &sample128_2_val。uuid, //特征值的uuid
PERM(RD,ENABLE)| PERM(NTF,ENABLE),//权限
&(val_hdl)//值属性的句柄
);

//保存特征2的句柄
memcpy (sample128_2_char。attr_hdl &val_hdl, sizeof (uint16_t));

//设置特征2的初始值
Status = attmdb_att_set_value(char_hdl, sizeof(sample128_2_char), (uint8_t *)&sample128_2_char);

//将客户端配置声明属性添加到数据库
状态= attmdb_add_attribute(sample128_env.sample128_shdl,
sizeof(uint16_t), //数据大小2字节(16位)
ATT_UUID_16_LEN,//客户端配置类型ID的大小
(uint8_t*) &att_decl_cfg, // 0x2902客户端配置声明类型UUID
PERM(RD, ENABLE) | PERM(WR, ENABLE), //权限
&(val_hdl) //值属性句柄
);

/ /写特点3 : ////////////////////////////////////////////////////////////////////////////////

//添加特征声明属性到数据库
状态= attmdb_add_attribute(sample128_env.sample128_shdl,
ATT_UUID_128_LEN + 3, //数据大小= 19 (ATT_UUID_128_LEN + 3)
ATT_UUID_16_LEN,//声明类型ID的大小
(uint8_t*)&att_decl_char,//0x2803用于特征声明
PERM(RD, ENABLE), //权限
&(char_hdl) //特征声明的句柄
);

//添加特征值声明属性到数据库
状态= attmdb_add_attribute(sample128_env.sample128_shdl,
sizeof(my_newer_t), //数据大小= 1字节
ATT_UUID_128_LEN,//自定义声明类型大小= 128bit
(uint8_t *) &sample128_3_val。uuid, //特征值的uuid
PERM(RD, ENABLE) | PERM(WR, ENABLE),//权限
&(val_hdl) // value属性句柄
);

//保存特征3的句柄
memcpy (sample128_3_char。attr_hdl &val_hdl, sizeof (uint16_t));

//设置特征值3的初始值
状态=attmdb_att_set_值(字符hdl、大小of(sample128_3_字符)、(uint8_t*)和sample128_3_字符);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/ /禁用sample128服务
attmdb_svc_set_权限(sample128_env.sample128_shdl,PERM(svc,DISABLE));

//如果我们在这里,数据库已完成与成功,转到空闲状态
ke_状态_集(任务_样本128,样本128_空闲);

//发送CFM申请
struct sample128_create_db_cfm * cfm = KE_MSG_ALLOC(sample128_create_db_cfm, src_id,
TASK_SAMPLE128 sample128_create_db_cfm);
cfm - >状态=状态;
ke_msg_send (cfm);

返回(已消耗的热量);

/**
****************************************************************************************
启用Sample128角色,在连接后使用。
* @param[in] msgid收到的消息的Id。
*@param[in]指向消息参数的param指针。
* @param[in] dest_id接收任务实例ID
*@param[in]发送任务实例的src_id。
* @return消息是否被消费。
****************************************************************************************
*/
Static int sample128_enable_req_handler(ke_msg_id_t const msgid,
Struct sample128_enable_req const *param,
KEU task\u id\u t const dest\u id,
ke_任务id_t常量src_id)

uint16温度=1;

//保留消息源,以便后续对其进行响应
sample128_env.con_info。appid = src_id;
//保存这个配置文件的连接句柄
sample128_env.con_info.conidx=gapc_get_conidx(param->conhdl);

//检查提供的连接是否存在
如果(sample128_env.con_info。conidx = = GAP_INVALID_CONIDX)

//连接不存在,请求被拒绝
prf_服务器错误指示发送((prf_环境结构*)和样本128_环境,不允许prf_错误请求,
SAMPLE128_ERROR_IND SAMPLE128_ENABLE_REQ);

其他的

// Sample128服务权限
attmdb_svc_set_permission (sample128_env。sample128_shdl param - > sec_lvl);

//将特征值1设置为指定值
attmdb_att_set_值(样本128_env.样本128_shdl+样本128_1_IDX_VAL,
sizeof(uint8_t),(uint8_t*)和参数->样本128_1_val);

//将特征值2设置为指定值
attmdb_att_set_value (sample128_env。sample128_shdl + SAMPLE128_2_IDX_VAL,
sizeof (uint8_t), (uint8_t *)参数- > sample128_2_val);

//将特征值3设置为指定值
attmdb_att_set_值(样本128_env.sample128_shdl+样本128_3_IDX_VAL,
sizeof (uint8_t), (uint8_t *)参数- > sample128_3_val);

sample128_env。特点=参数- >功能;

如果(! sample128_env.feature)

temp = 0;

attmdb_att_set_值(样本128_env.样本128_shdl+样本128_2_IDX_CFG,
尺寸(uint16、uint8*)和温度;

//转到连接状态
ke_state_set (TASK_SAMPLE128 SAMPLE128_CONNECTED);

返回(已消耗的热量);

/**
****************************************************************************************
* @brief更新feature 2的值。如果启用了属性,则向对等体发送通知。
* @param[in] msgid收到的消息的Id。
*@param[in]指向消息参数的param指针。
* @param[in] dest_id接收任务实例ID
*@param[in]发送任务实例的src_id。
* @return消息是否被消费。
****************************************************************************************
*/

静态int sample128_upd_char2_req_处理程序(ke_msg_id_t const msgid,
Struct sample128_upd_char2_req const *参数,
KEU task\u id\u t const dest\u id,
ke_任务id_t常量src_id)

uint8_t status = PRF_ERR_OK;

//检查提供的值
if(param->conhdl==gapc\u get\u conhdl(sample128\u env.con\u info.conidx))

//更新数据库中的值
attmdb_att_set_value (sample128_env。sample128_shdl + SAMPLE128_2_IDX_VAL,
sizeof (uint8_t), (uint8_t *)参数- > val);

如果(sample128_env。特性和PRF_CLI_START_NTF))
//通过关贸总协定发送通知
prf_server_send_event ((prf_env_struct *) &sample128_env假,
sample128_env。sample128_shdl + SAMPLE128_2_IDX_VAL);


其他的

状态= PRF_ERR_INVALID_PARAM;

if (status != PRF_ERR_OK)

样本128_upd_char2_cfm_send(状态);

返回(已消耗的热量);

/**
****************************************************************************************
* @brief接收@ref GATT_WRITE_CMD_IND消息。
* @param[in] msgid收到的消息的Id(可能未使用)。
*@param[in]指向消息参数的param指针。
*@param[in]接收任务实例的dest_id(可能未使用)。
*@param[in]发送任务实例的src_id。
* @return消息是否被消费。
****************************************************************************************
*/
Static int gattc_write_cmd_ind_handler(ke_msg_id_t const msgid,
Struct gattc_write_cmd_ind const *param,
KEU task\u id\u t const dest\u id,
ke_任务id_t常量src_id)

uint8_t char_code = SAMPLE128_ERR_CHAR;
uint8_t status = PRF_APP_ERROR;

if (KE_IDX_GET(src_id) == sample128_env.con_info.conidx); / /采样

If (param->handle == sample128_env. conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf。sample128_shdl + SAMPLE128_1_IDX_VAL)

char_code = SAMPLE128_1_CHAR;

如果(参数->句柄==sample128_env.sample128_shdl+sample128_2_IDX_CFG)

char_code=SAMPLE128_2_CFG;

If (param->handle == sample128_env. conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf。sample128_shdl + SAMPLE128_3_IDX_VAL)

char_code = SAMPLE128_3_CHAR;

if (char_code == SAMPLE128_1_CHAR)

//以DB为单位保存值
Attmdb_att_set_value (param->句柄,sizeof(uint8_t), (uint8_t *)¶m->值[0]);

如果(参数->上次)

sample128_send_val (param - >值[0]);

状态=PRF\U ERR\U OK;


else if (char_code == sample128_cfg)

/ /写价值
uint16_t ntf_cfg;

//检查前提取值
ntf_cfg=co_read16p(¶m->value[0]);

//仅在启用停止或通知值时更新配置
if ((ntsf_cfg == PRF_CLI_STOP_NTFIND) || (ntsf_cfg == PRF_CLI_START_NTF)) / / ntsf_cfg == PRF_CLI_START_NTF)

//以DB为单位保存值
Attmdb_att_set_value (param->句柄,sizeof(uint16_t), (uint8_t *)¶m->值[0]);

//在环境中保存信息
if (ntf_cfg == PRF_CLI_START_NTF) / /将文件上传

// Ntf cfg位设置为1
sample128_env。功能| = PRF_CLI_START_NTF;

其他的

// Ntf cfg位设置为0
sample128_env。& = ~ PRF_CLI_START_NTF特性;

状态=PRF\U ERR\U OK;


else if (char_code == SAMPLE128_3_CHAR)

//以DB为单位保存值
Attmdb_att_set_value (param->句柄,sizeof(uint8_t), (uint8_t *)¶m->值[0]);

如果(参数->上次)

sample128_send_val (param - >值[0]);

状态=PRF\U ERR\U OK;


//发送写响应
atts_write_rsp_send (sample128_env.con_info。conidx param - >处理、状态);

返回(已消耗的热量);

/**
****************************************************************************************
*@样本128的简短断开指示。
* @param[in] msgid收到的消息的Id。
*@param[in]指向消息参数的param指针。
* @param[in] dest_id接收任务实例ID
*@param[in]发送任务实例的src_id。
* @return消息是否被消费。
****************************************************************************************
*/
静态int gap_DISCONNECT_ind_处理程序(KEU msg_id_t const msgid,
Struct gapc_disconnect_ind const *param,
KEU task\u id\u t const dest\u id,
ke_任务id_t常量src_id)

//检查连接手柄
if (KE_IDX_GET(src_id) == sample128_env.con_info.conidx); / /采样

//在任何情况下,通知APP断开连接
sample128_disable ();

返回(已消耗的热量);

/*
*全局变量定义
****************************************************************************************
*/

//禁用状态处理器定义。
const struct ke_msg_handler sample128_已禁用[]=

{SAMPLE128_CREATE_DB_REQ, (ke_msg_func_t) sample128_create_db_req_handler},
{SAMPLE128_CREATE_DB_REQ3, (ke_msg_func_t) sample128_create_db_req_handler},
};

//空闲状态处理器定义。
Const struct ke_msg_handler sample128_idle[] =

{SAMPLE128_ENABLE_REQ, (ke_msg_func_t) sample128_enable_req_handler},

};

//连接状态处理器定义。
Const struct ke_msg_handler sample128_connected[] =

{GATTC_WRITE_CMD_IND,(ke_msg_func_t)GATTC_WRITE_CMD_IND_handler},
(ke_msg_func_t) sample128_upd_char2_req_handler}, {SAMPLE128_UPD_CHAR2_REQ
(ke_msg_func_t) gattc_write_cmd_ind_handler3}, {GATTC_WRITE_CMD_IND3

};

//默认状态处理器定义
Const struct ke_msg_handler sample128_default_state[] =

(ke_msg_func_t) gap_disconnnect_ind_handler}, {GAPC_DISCONNECT_IND
};

///指定每个输入状态的消息处理程序结构。
const struct ke_state_handler sample128_state_handler[SAMPLE128_STATE_MAX] =

[SAMPLE128_DISABLED] = KE_STATE_HANDLER (SAMPLE128_DISABLED),
[SAMPLE128_IDLE]=KE_STATE_HANDLER(SAMPLE128_IDLE),
[SAMPLE128_CONNECTED] = KE_STATE_HANDLER (SAMPLE128_CONNECTED),
};

///指定所有状态共有的消息处理程序。
const struct ke_state_handler sample128_default_handler = ke_state_handler (sample128_default_state);

///为所有任务实例的状态定义占位符。
ke_state_t sample128_state [SAMPLE128_IDX_MAX] __attribute__(((“retention_mem_area0”)部分,zero_init));

# endif / / BLE_SAMPLE128

维桑
离线
最后看到:5年11个月前
大师 主人
加入:2014-06-26 08:49
嗨Sam123,

嗨Sam123,

你不能有{GATTC_WRITE_CMD_IND3,(ke_msg_func_t)GATTC_WRITE_CMD_ind_handler3}. 您需要处理中的每个服务特性GATTC_WRITE_CMD_IND

通过检查消息参数的句柄值,可以看出每个特征之间的区别param在处理程序函数中。它具有以下结构

///通知对等设备已请求修改数据库。
结构gattc\u write\u cmd\u ind

///必须写入的属性的句柄
uint16_t手柄;
///要写入的数据长度
uint16_t长度;
//数据写入的偏移量
uint16_t抵消;
///如果目标任务为true,则返回写响应命令。
布尔反应;
///通知它是多重准备写入请求的最后一个请求。
bool去年;
///要写入属性数据库的数据
uint8_t值(__ARRAY_EMPTY);
};

换句话说,检查param->句柄的值。如。,可以为属性(特征值)创建开关大小写比较:
Switch (param->handle - your_profile_env.start_handle) {
案例CHAR1:休息;
案例CHAR2:休息;

对不起,这写得有点匆忙。没有测试,但我希望你能从中了解一些情况

谢谢!

redbear
离线
最后看到:6年1个月前
加入:2015-01-30 08:50
你好

你好
我只能在一个服务中添加8个特征,当我添加第9个时,它没有运行,有人试过吗?

MT_对话框
离线
最后看到:6个月2个星期前
工作人员
加入:2015-06-08 34
嗨redbear,

嗨redbear,

这取决于你在服务中添加的特征。软件支持每个服务32个属性。

由于MT_dialog

redbear
离线
最后看到:6年1个月前
加入:2015-01-30 08:50
嗨MT_dialog,

嗨MT_dialog,
nb_att_16 = 1 + 9 + 9;/ / 1 svc, 9 char、9 user_desc
nb_att_32=0;
nb_att_128 = 9;/ / val丙氨酸
我大致能理解,但28<32。

MT_对话框
离线
最后看到:6个月2个星期前
工作人员
加入:2015-06-08 34
嗨redbear,

嗨redbear,

你能调试你的应用程序,看看它是否通过app_adv_start()函数吗?

您可以在一个服务中拥有9个特征。请检查一下你的代码复制粘贴很容易出错误。

由于MT_dialog

anthony42
离线
最后看到:5年10个月前
加入:2015-07-17 08:21
嗨MT_dialog,

嗨MT_dialog,
“它不跑”的意思是我从浅蓝色看不见。
首先我写一个宏开关来添加两个字符,可能像你说的复制粘贴错误,
但现在我添加了两个宏开关,只添加了第8个。只加第9个,好的,这意味着代码是正确的。
加起来,我从浅蓝色看不清。

用我们的吗?
还有其他调试方法吗?

我觉得用户描述字符串有点长,
我现在把它改短了它正在工作!
但是极限是什么呢?

MT_对话框
离线
最后看到:6个月2个星期前
工作人员
加入:2015-06-08 34
嗨,安东尼,

嗨,安东尼,

我不明白你做了什么?你做了什么?

由于MT_dialog

anthony42
离线
最后看到:5年10个月前
加入:2015-07-17 08:21
嗨MT_dialog,

嗨MT_dialog,
我更改了CHAR\u USER\u描述长度,如下所示:
旧:
static const uint8_t beacon_user_desc_1[] = "Beacon UUID";
static const uint8_t beacon_user_desc_2[] = "主标识ID";
static const uint8_t beacon_user_desc_3[] = "次要身份ID";
...直到beacon_user_desc_9
新一:
static const uint8_t beacon_user_desc_1[] = "UUID";
static const uint8_t beacon_user_desc_2[] = "Major";
static const uint8_t beacon_user_desc_3[] = "次要";
...
它是有效的。

MT_对话框
离线
最后看到:6个月2个星期前
工作人员
加入:2015-06-08 34
嗨antony42,

嗨antony42,

您正在改变数据库或广告字符串的特征吗?广告字符串的最大有效载荷固定为29字节。这和数据库没有关系。

由于MT_dialog

anthony42
离线
最后看到:5年10个月前
加入:2015-07-17 08:21
嗨MT_dialog,

嗨MT_dialog,
数据库的特点,
ATT_DESC_CHAR_USER_DESCRIPTION,我把描述字符串缩短了,一个服务中有9个特征是可以的。

anthony42
离线
最后看到:5年10个月前
加入:2015-07-17 08:21
你好

你好
我添加了一些服务和28个特性,效果很好,
但我添加了另外两个特征,我可以从浅蓝色看到,但不能连接,
为什么以及一个项目最多有多少个特征?

MT_对话框
离线
最后看到:6个月2个星期前
工作人员
加入:2015-06-08 34
嗨,安东尼,

嗨,安东尼,

除了我在前一篇文章中提到的每个服务32个属性的限制外,理论上在特征的数量上没有其他限制。唯一的限制是数据库的内存大小,它由DB_HEAP_大小定义。

由于MT_dialog

anthony42
离线
最后看到:5年10个月前
加入:2015-07-17 08:21
嗨MT_dialog,

嗨MT_dialog,

我试过了,还是没用。
首先我增加了DB_HEAP_SZ的大小,甚至达到了1024*2,但不起作用,然后我增加了anthoner 3,没有任何变化。
#定义DB_HEAP_SZ (1024 + 256)
#定义ENV_HEAP_SZ 328
#定义MSG_HEAP_SZ 1312
#定义NON_RET_HEAP_SZ 1024

Undef下列之一,一切正常,添加这三个信标将不工作。
CFG\u信标\u配置\u结构
CFG_PRF_SPOTAR
CFG_PRF_ANTHONY

什么可能导致此问题?

非常感谢,
安东尼。

MT_对话框
离线
最后看到:6个月2个星期前
工作人员
加入:2015-06-08 34
嗨antony42,

嗨antony42,

当你在#undef任何#定义中提到你的设备正在用你想要的30个特性做广告?

由于MT_dialog

anthony42
离线
最后看到:5年10个月前
加入:2015-07-17 08:21
嗨MT_dialog,

嗨MT_dialog,
当我定义三个时,我无法从浅蓝色中看到,
撤销其中一个,没问题。

顺便问一下,你用skype吗?(id: electronicfan)

谢谢,
安东尼

MT_对话框
离线
最后看到:6个月2个星期前
工作人员
加入:2015-06-08 34
嗨antony42,

嗨antony42,

dialog当地团队的一名成员将很快与您联系,以支持您。

由于MT_dialog