你好,我正在使用无代码现有服务,与智能手机通信。所以,我向ble芯片发送atl +“要沟通的信息”,它把这个信息写到这个特性上,我从我的智能手机上读取它。这个“要沟通的信息”的上限大约为120字节左右。我想问一下,我是否可以通过增加分配给这个特性的数据库空间来增加这个特性。你能告诉我,我需要在代码的什么地方进行修改才能实现这个目标吗?我能把它延伸到什么程度?
谢谢!
嗨krishnanag,
请配置DEF_CUST1_INBOUND_LEN和DEF_CUST1_OUTBOUND_LEN定义user_custs1_def.h头文件,以便用您喜欢的值增加为这个特征分配的数据库空间。根据BLE核心规范,一个属性值的最大长度应该是512字节。
谢谢,PM_Dialog
我将这两个定义都更改为500个,但是如果我发送atl +“string”,其中字符串有超过160个字符,那么就会发生一些溢出,只有少数字符被传输。你能帮我弄清楚为什么会这样吗?我确实遇到了CMD_BUFFER_SIZE,以及user_cmd_parser.h中的其他大小,但更改它们也没有帮助。我在给芯片的存储器编程。
能帮我换一下吗(uint8_t我= 0;< 160;我+ +)来(uint8_t我= 0;< 500;我+ +)在user_cmd_parser.c文件的extract_args()函数中?你现在能发送超过160字节吗?同样,您应该将DEF_CUST1_INBOUND_LEN、DEF_CUST1_OUTBOUND_LEN和CMD_BUFFER_SIZE定义为500字节。
是的,我改变了这一切。但是,当我发送超过160个字符时,它发送160个字符,然后回复ERROR,然后回复OK。我无法理解为什么。
你能澄清一下是哪一个错误的申请回复?
它只发送ERROR。当我发送atl +“字符串”,其中字符串是近160个字符。
我们正在研究它,以复制您的问题,并确保您能够发送超过160字节。我会尽快让你知道的。
我猜你是想利用ATr +打印= < >发送或者更简单的| < >发送同时从移动应用程序中编写该特性的价值。那是正确的吗?
我正在使用UART从微控制器发送ATrl+“字符串”到da14580。
你好,
CodeLess没有支持您正在使用的格式的扩展命令。ATI(或ATrI当用作远程命令时)是一个非扩展命令(意味着它没有“+”特性)。ATI应该被用作返回一组标识物理设备的硬件和软件的字符的请求。您是否在CodeLess中实现了自己的扩展命令?
如果您想使用CodeLess中已经定义的命令通过蓝牙发送数据,您应该使用
ATr +打印= <文本发送>
或者使用'|'或"pipe"字符的简化版本:
| <文本发送>
这两个命令都要求在发出命令时处于蓝牙连接状态。
/ MHv
哇!我不知道。不知何故ATrl +“字符串”作品。我试试你的方法,然后回来。
非常感谢。
它将“工作”,因为CodeLess将它留给智能手机应用程序来验证命令。所以除非你的应用检查语法,否则你不会意识到它是错误的。
CodeLess使用sprintf生成一些响应,将响应长度限制为255个字符。您可以按照下面提供的说明安全地扩展CodeLess以处理255个字符。你应该确保远程端(在你的情况下是智能手机应用)对微控制器的每一次数据传输都响应“OK”或“ERROR”。除非您使用上面描述的“管道”命令,否则CodeLess将期望在准备好进行下一次传输之前从远程端接收一个应答,在接收到应答之前,您可能无法发送任何新数据。使用“pipe”命令可以消除应答的需要。
下面是你如何改变实现来支持255个字符:
在da1458x_config_basic.h:
添加一个定义
#定义CMD_BUFFER_SIZE 255
(将定义移动到此文件允许我们全局访问它)
在user_cmd_parser.h:
注释掉旧的定义
#定义CMD_BUFFER_SIZE 160
像这样
/ / # define CMD_BUFFER_SIZE 160
在同一个文件中,更改:
#定义CMD_MAX_ARG_LENGTH 160
来
#定义CMD_MAX_ARG_LENGTH CMD_BUFFER_SIZE
在user_custs1_def.h
改变
#定义DEF_CUST1_INBOUND_LEN 160
#定义DEF_CUST1_INBOUND_LEN CMD_BUFFER_SIZE
并且,在同一个文件中,更改
#定义DEF_CUST1_OUTBOUND_LEN 160
#定义DEF_CUST1_OUTBOUND_LEN CMD_BUFFER_SIZE
在user_cmd_parser.c文件的extract_args()函数中
For (uint8_t i=0;i< 160;i++)
for(uint32_t i=0;i< CMD_BUFFER_SIZE;i++)
user_uart2.h文件的uart2_rec_data_avail_isr()函数
if(readData == 0x0D || bytesIn > 150)
if(readData == 0x0D || bytesIn > CMD_BUFFER_SIZE) / /读取数据
在user_cmd_interpreter的codeless_env_t结构中
char current_cmd [160];
char current_cmd [CMD_BUFFER_SIZE];
你可以将CMD_BUFFER_SIZE更改为512(我没有测试这个),但是所有来自CodeLess的回复将减少为'OK'或'ERROR'
谢谢!你帮了我很大的忙。对不起,我只有一个问题,当你说:“你应该确保远程端(在你的情况下是智能手机应用)对来自微控制器的每一次数据传输都做出‘OK’或‘ERROR’的响应。”除非您使用上面描述的“管道”命令,否则CodeLess将期望在准备好进行下一次传输之前从远程端接收一个应答,在接收到应答之前,您可能无法发送任何新数据。使用“pipe”命令消除了应答的需要在这里ATr+PRINT=文本工作,即使没有任何回复从智能手机。如果我用智能手机回复,我该怎么做?通过写作的特点之一?
虽然ATr+PRINT=看起来没有响应也能工作,但CodeLess很可能会混淆,因为它依赖于一个简化的消息流,以便跟踪响应应该通过蓝牙返回到本地UART还是远程对等体。使用'|'命令可以确保这不会导致问题。
从智能手机返回到设备的回复就像写入自定义服务的第一个特征一样简单(UUID = 914F8FB9-E8CD-411D-B7D1-14594DE45425)
顺便说一下:如果你在第三个特征上订阅它们(UUID = E2048B39-D4F9-4A45-9F25-1856C10D5639),智能手机将会收到一个通知。
嗨krishnanag,
请配置DEF_CUST1_INBOUND_LEN和DEF_CUST1_OUTBOUND_LEN定义user_custs1_def.h头文件,以便用您喜欢的值增加为这个特征分配的数据库空间。根据BLE核心规范,一个属性值的最大长度应该是512字节。
谢谢,PM_Dialog
我将这两个定义都更改为500个,但是如果我发送atl +“string”,其中字符串有超过160个字符,那么就会发生一些溢出,只有少数字符被传输。
你能帮我弄清楚为什么会这样吗?
我确实遇到了CMD_BUFFER_SIZE,以及user_cmd_parser.h中的其他大小,但更改它们也没有帮助。我在给芯片的存储器编程。
嗨krishnanag,
能帮我换一下吗(uint8_t我= 0;< 160;我+ +)来(uint8_t我= 0;< 500;我+ +)在user_cmd_parser.c文件的extract_args()函数中?你现在能发送超过160字节吗?同样,您应该将DEF_CUST1_INBOUND_LEN、DEF_CUST1_OUTBOUND_LEN和CMD_BUFFER_SIZE定义为500字节。
谢谢,PM_Dialog
是的,我改变了这一切。但是,当我发送超过160个字符时,它发送160个字符,然后回复ERROR,然后回复OK。
我无法理解为什么。
嗨krishnanag,
你能澄清一下是哪一个错误的申请回复?
谢谢,PM_Dialog
它只发送ERROR。当我发送atl +“字符串”,其中字符串是近160个字符。
嗨krishnanag,
我们正在研究它,以复制您的问题,并确保您能够发送超过160字节。我会尽快让你知道的。
谢谢,PM_Dialog
谢谢!
嗨krishnanag,
我猜你是想利用ATr +打印= < >发送或者更简单的| < >发送同时从移动应用程序中编写该特性的价值。那是正确的吗?
谢谢,PM_Dialog
我正在使用UART从微控制器发送ATrl+“字符串”到da14580。
你好,
CodeLess没有支持您正在使用的格式的扩展命令。ATI(或ATrI当用作远程命令时)是一个非扩展命令(意味着它没有“+”特性)。ATI应该被用作返回一组标识物理设备的硬件和软件的字符的请求。您是否在CodeLess中实现了自己的扩展命令?
如果您想使用CodeLess中已经定义的命令通过蓝牙发送数据,您应该使用
ATr +打印= <文本发送>
或者使用'|'或"pipe"字符的简化版本:
| <文本发送>
这两个命令都要求在发出命令时处于蓝牙连接状态。
/ MHv
哇!
我不知道。不知何故ATrl +“字符串”作品。
我试试你的方法,然后回来。
非常感谢。
它将“工作”,因为CodeLess将它留给智能手机应用程序来验证命令。所以除非你的应用检查语法,否则你不会意识到它是错误的。
/ MHv
CodeLess使用sprintf生成一些响应,将响应长度限制为255个字符。您可以按照下面提供的说明安全地扩展CodeLess以处理255个字符。你应该确保远程端(在你的情况下是智能手机应用)对微控制器的每一次数据传输都响应“OK”或“ERROR”。除非您使用上面描述的“管道”命令,否则CodeLess将期望在准备好进行下一次传输之前从远程端接收一个应答,在接收到应答之前,您可能无法发送任何新数据。使用“pipe”命令可以消除应答的需要。
下面是你如何改变实现来支持255个字符:
在da1458x_config_basic.h:
添加一个定义
#定义CMD_BUFFER_SIZE 255
(将定义移动到此文件允许我们全局访问它)
在user_cmd_parser.h:
注释掉旧的定义
#定义CMD_BUFFER_SIZE 160
像这样
/ / # define CMD_BUFFER_SIZE 160
在同一个文件中,更改:
#定义CMD_MAX_ARG_LENGTH 160
来
#定义CMD_MAX_ARG_LENGTH CMD_BUFFER_SIZE
在user_custs1_def.h
改变
#定义DEF_CUST1_INBOUND_LEN 160
来
#定义DEF_CUST1_INBOUND_LEN CMD_BUFFER_SIZE
并且,在同一个文件中,更改
#定义DEF_CUST1_OUTBOUND_LEN 160
来
#定义DEF_CUST1_OUTBOUND_LEN CMD_BUFFER_SIZE
在user_cmd_parser.c文件的extract_args()函数中
改变
For (uint8_t i=0;i< 160;i++)
来
for(uint32_t i=0;i< CMD_BUFFER_SIZE;i++)
user_uart2.h文件的uart2_rec_data_avail_isr()函数
改变
if(readData == 0x0D || bytesIn > 150)
来
if(readData == 0x0D || bytesIn > CMD_BUFFER_SIZE) / /读取数据
在user_cmd_interpreter的codeless_env_t结构中
改变
char current_cmd [160];
来
char current_cmd [CMD_BUFFER_SIZE];
你可以将CMD_BUFFER_SIZE更改为512(我没有测试这个),但是所有来自CodeLess的回复将减少为'OK'或'ERROR'
/ MHv
谢谢!
你帮了我很大的忙。
对不起,我只有一个问题,当你说:
“你应该确保远程端(在你的情况下是智能手机应用)对来自微控制器的每一次数据传输都做出‘OK’或‘ERROR’的响应。”除非您使用上面描述的“管道”命令,否则CodeLess将期望在准备好进行下一次传输之前从远程端接收一个应答,在接收到应答之前,您可能无法发送任何新数据。使用“pipe”命令消除了应答的需要
在这里ATr+PRINT=文本工作,即使没有任何回复从智能手机。
如果我用智能手机回复,我该怎么做?通过写作的特点之一?
虽然ATr+PRINT=看起来没有响应也能工作,但CodeLess很可能会混淆,因为它依赖于一个简化的消息流,以便跟踪响应应该通过蓝牙返回到本地UART还是远程对等体。使用'|'命令可以确保这不会导致问题。
从智能手机返回到设备的回复就像写入自定义服务的第一个特征一样简单(UUID = 914F8FB9-E8CD-411D-B7D1-14594DE45425)
顺便说一下:如果你在第三个特征上订阅它们(UUID = E2048B39-D4F9-4A45-9F25-1856C10D5639),智能手机将会收到一个通知。
/ MHv
谢谢!