ST意法半导体
直播中

lalajie

8年用户 1228经验值
擅长:模拟技术 存储技术
私信 关注
[问答]

如何使用p2p-Service发送20字节的负载?

大家好,
我想修改 p2p-Service 以发送 20 个字节的有效负载,而不是默认情况下仅发送 2 个字节。
我唯一做的就是改变文件“p2p_stm.c”中的通知特性,如下所示:
  • COPY_P2P_NOtiFY_UUID(uuid16.Char_UUID_128);
  •     aci_gatt_add_char(aPeerToPeerContext.PeerToPeerSvcHdle,
  •                       UUID_TYPE_128, &uuid16,
  •                       20,
  •                       CHAR_PROP_NOTIFY,
  •                       ATTR_PERMISSION_NONE,
  •                       GATT_NOTIFY_ATTRIBUTE_WRITE, /* gattEvtMask */
  •                       10, /* encryKeySize */
  •                       1, /* isVariable: 1 */
  •                       &(aPeerToPeerContext.P2PNotifyServerToClientCharHdle));

在那里,我只将第 4 行中的有效负载从 2 更改为 20。是否需要对任何文件中的代码进行进一步修改,以执行我想要的操作?这是我在“p2p_server_app.c”中的 typedef 结构:
  • typedef struct{
  •     uint8_t             Device_Led_Selection;
  •     uint8_t             Led1;
  • }P2P_LedCharValue_t;
  • typedef struct{
  •     uint8_t             Device_Selection;
  •     uint8_t             Button_State;
  •    uint8_t                Value_X_Axis_H;
  •    uint8_t                Value_X_Axis_L;
  •    uint8_t                Value_Y_Axis_H;
  •    uint8_t                Value_Y_Axis_L;
  •    uint8_t                Value_Z_Axis_H;
  •    uint8_t                Value_Z_Axis_L;
  •    uint32_t        Timestamp;
  • }P2P_ButtonCharValue_t;
  • typedef struct
  • {
  •   uint8_t                            Notification_Status;
  •   P2P_LedCharValue_t    LedControl;
  •   uint16_t                           Parameter;
  •   P2P_ButtonCharValue_t     Acceleration;
  •   uint16_t                          ConnectionHandle;
  • } P2P_Button_LED_App_Context_t;
正如您将看到的,我发送了 3 轴的加速度数据,还尝试以微秒为单位发送 32 位时间戳。发送加速数据效果很好,但时间戳不是。看起来,时间戳将大约每 15 秒发送一次。这是我发送数据的方式:
  • void calculate_timestamp(void){
  •         uint8_t time_micro32_1 = time_micro32 & 0xFF;
  •         uint8_t time_micro32_2 = (time_micro32 >> 8) & 0xFF;
  •         uint8_t time_micro32_3 = (time_micro32 >> 16) & 0xFF;
  •         uint8_t time_micro32_4 = (time_micro32 >> 24) & 0xFF;
  •            P2P_Server_App_Context.Acceleration.Timestamp = time_micro32_1;
  •            P2P_Server_App_Context.Acceleration.Timestamp = time_micro32_2;
  •         P2P_Server_App_Context.Acceleration.Timestamp = time_micro32_3;
  •         P2P_Server_App_Context.Acceleration.Timestamp = time_micro32_4;
  • }
  • void get_acceleration(void){
  •                     P2P_Server_App_Context.Acceleration.Value_X_Axis_H = sendbuf[0];
  •                     P2P_Server_App_Context.Acceleration.Value_X_Axis_L = sendbuf[1];
  •                     P2P_Server_App_Context.Acceleration.Value_Y_Axis_H = sendbuf[2];
  •                     P2P_Server_App_Context.Acceleration.Value_Y_Axis_L = sendbuf[3];
  •                     P2P_Server_App_Context.Acceleration.Value_Z_Axis_H = sendbuf[4];
  •                     P2P_Server_App_Context.Acceleration.Value_Z_Axis_L = sendbuf[5];
我在每次运行中调用方法 get_acceleration() 和 calculate_timestamp()。
知道为什么发送时间戳不起作用吗?是像我想的那样是有效负载,还是有其他原因?
谢谢...








回帖(1)

陈苏文

2023-1-9 11:05:53
你写了 4 次时间戳值,最后用微秒除以大约 16,000 ,000

它是一个 32 位值,只需使用 time_micro32 设置一次即可。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分