首页 > 其他分享 >ANT+ 自行车车灯 数据页32–断开命令(0x20)

ANT+ 自行车车灯 数据页32–断开命令(0x20)

时间:2022-10-31 21:02:44浏览次数:38  
标签:ant 32 0x20 BikeLight ANT Light data page


数据页32是从ANT+控制器发送到ANT+自行车灯的命令页,用于将其重置为未连接状态。此命令应作为来自ANT+控制器的确认消息发送。

所有ANT+自行车灯都应支持此页面。该消息中的所有字段均应按照表7-32中的说明进行设置。

ANT+ 自行车车灯 数据页32–断开命令(0x20)_消息转发

7.16.1. 灯光索引
主灯应检查灯光索引,如果设置为0x01,则主灯应返回未连接状态。具体而言,应:
1、 关闭其共享主频道
2、 在数据页1中将其状态设置为“未连接”
3、 将其灯光索引设置为0
4、 停止传输数据第18页(主光通道ID)
如果灯索引设置为0x00,则主灯应在共享频道上将命令作为广播消息转发四次,然后返回到如上所述的未连接状态。

如果灯光索引设置为非0x00或0x01的值,则主灯光应将该命令作为已确认消息转发到共享通道。该命令最多应重试4次,直到收到EVENT_TX_SUCCESS。在这种情况下,主灯不得更改其自身的状态。

一旦命令在共享通道上转发,该命令将被一个或所有辅助灯接收,具体取决于灯索引值。如果灯光索引为零,则所有辅助灯光将接收该命令。如果主灯索引是任何其他值,则只有具有指定索引的主灯才会接收该命令。任何收到此命令的辅助ANT+自行车灯应:
1、关闭其共享从属通道
2、在数据页1中将其状态设置为“未连接”
3、将其灯光索引设置为0
4、停止传输数据第18页(主光通道ID)

7.16.2. 控制器ID
控制器ID字段应由ANT+控制器使用其序列号的LSB填充。没有序列号的ANT+控制器应为该字段分配一个固定值。

/* Copyright (c) 2015 Nordic Semiconductor. All Rights Reserved.
*
* The information contained herein is property of Nordic Semiconductor ASA.
* Terms and conditions of usage are described in detail in NORDIC
* SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
*
* Licensees are granted free, non-transferable use of the information. NO
* WARRANTY of ANY KIND is provided. This heading must NOT be removed from
* the file.
*
*/

#include "ant_BikeLight_page_32.h"
#include "ant_BikeLight_utils.h"
#include "ant_BikeLight_page_logger.h"
#include "SEGGER_RTT.h"
#include "SEGGER_RTT_Conf.h"
#include "main.h"
/**@brief BikeLight 断开命令(0x20) 第32页数据布局结构. 注意:该页由控制器发送至车灯。将车灯连接状态置为未连接 */
typedef struct
{
uint8_t Light_Index; //灯光索引 0-63
uint8_t Controller_ID; //控制器ID 保留以备将来使用。设置为0x00 范围:[0,255]
uint8_t Reserved[5]; //保留
} ant_BikeLight_page32_data_layout_t;


static void page32_data_log(ant_BikeLight_page32_data_t const *p_page_data)
{
// SEGGER_RTT_printf(0, "Light_Index: %d\r\n", (uint8_t)p_page_data->Light_Index);

}


void ant_BikeLight_page_32_encode(uint8_t *p_page_buffer,
ant_BikeLight_page32_data_t const *p_page_data)
{

ant_BikeLight_page32_data_layout_t *p_outcoming_data = (ant_BikeLight_page32_data_layout_t *)p_page_buffer;
memset(p_page_buffer, 0, sizeof(ant_BikeLight_page32_data_layout_t));
p_outcoming_data->Controller_ID = p_page_data->Controller_ID;

page32_data_log(p_page_data);
SEGGER_RTT_printf(0, "page_32 send: %d\r\n", (uint8_t)p_page_data->Light_Index);
}


void ant_BikeLight_page_32_decode(uint8_t const *p_page_buffer,
ant_BikeLight_page32_data_t *p_page_data, uint8_t const Channel)
{
ant_BikeLight_page32_data_layout_t const *p_incoming_data = (ant_BikeLight_page32_data_layout_t *)p_page_buffer;

if (Channel == 0)
{
if (p_incoming_data->Light_Index == 0 || p_incoming_data->Light_Index == p_page_data->Light_Index)//判断灯光索引
{
/*处理事件*/
m_ant_BikeLight.page_1.Last_Sequence_Number = p_incoming_data->Controller_ID;//填写最后一次命令
/*如果是整体关机,则需要转发*/
if (p_incoming_data->Light_Index == 0 && m_ant_BikeLight.page_1.Light_Index == 1) //作为主灯,接到全部断开命令,则需要转发到共享频道
{
/*如果灯索引设置为 0x00,则主灯应在共享频道上将命令作为广播消息转发四次*/
memcpy(ANT_message_payload_Shared_Wait, p_incoming_data, sizeof(ant_BikeLight_page32_data_layout_t));//复制非自身内容至共享通道缓存区
ANT_Relay_New_Share_Page = 32; //发送指定页
ANT_Shared_Channel_sens_message_encode(ANT_message_payload_Shared_Wait, ANT_Relay_New_Share_Page);//对该命令进行重组
SystemReg.Wait_Off_Own = 1;
}
else if (m_ant_BikeLight.page_1.Light_Index == 1) //仅仅关闭主灯自身
{
if (ANT_Relay_New_Share_Page == 32)
{
/*如果灯索引设置为 0x00,则主灯应在共享频道上将命令作为广播消息转发四次*/
memcpy(ANT_message_payload_Shared_Wait, p_incoming_data, sizeof(ant_BikeLight_page32_data_layout_t));//复制非自身内容至共享通道缓存区
ANT_Relay_New_Share_Page = 32; //发送指定页
ANT_Shared_Channel_sens_message_encode(ANT_message_payload_Shared_Wait, ANT_Relay_New_Share_Page);//对该命令进行重组
ANT_message_payload_Shared_Wait[0] = 0;
}
else
{
/*如果灯索引设置为 0x00,则主灯应在共享频道上将命令作为广播消息转发四次*/
memcpy(ANT_message_payload_Shared_Wait, p_incoming_data, sizeof(ant_BikeLight_page32_data_layout_t));//复制非自身内容至共享通道缓存区
ANT_Relay_New_Share_Page = 32; //发送指定页
ANT_Shared_Channel_sens_message_encode(ANT_message_payload_Shared_Wait, ANT_Relay_New_Share_Page);//对该命令进行重组
}
}
else//非主灯
{
if ((SystemInit_Type.ANT_SHARED_CHANNEL != 0 || SystemReg.ANT_SHARED_CHANNEL != 0))
{
ant_BikeLight_Shared_close(ant_channel_Shared.channel_number);//关闭共享通道
SystemInit_Type.ANT_SHARED_CHANNEL = 0;
SystemReg.ANT_SHARED_CHANNEL = 0;
}
Delete_BikeLight_Light_Index();
SystemReg.ANT_Networking_Number = 2;
/*关机*/
System_ONOFF(1);//0--开机 1--关机
Light_State_ModeNum_Update();
}



// page32_data_log(p_page_data);
}
else//不是自己的命令就发送到共享通道
{
if (m_ant_BikeLight.page_1.Light_Index != ANT_message_payload_Shared_Wait[0]) //作为主灯则转发到共享通道
{
memcpy(ANT_message_payload_Shared_Wait, p_incoming_data, sizeof(ant_BikeLight_page32_data_t));//复制非自身内容至共享通道缓存区
ANT_Relay_New_Share_Page = 32; //发送指定页
ANT_Shared_Channel_sens_message_encode(ANT_message_payload_Shared_Wait, ANT_Relay_New_Share_Page);//对该命令进行重组
}

// SEGGER_RTT_printf(0, "Forward [Page32] to shared channel.\r\n", (uint8_t)p_page_data->Light_Index);
}
}
else if (Channel == 1)
{
if (p_incoming_data->Light_Index == 0 || p_incoming_data->Light_Index == p_page_data->Light_Index)//判断灯光索引
{
if (SystemInit_Type.ANT_SHARED_CHANNEL != 0 || SystemReg.ANT_SHARED_CHANNEL != 0)
{
ant_BikeLight_Shared_close(ant_channel_Shared.channel_number);//关闭共享通道
SystemInit_Type.ANT_SHARED_CHANNEL = 0;
SystemReg.ANT_SHARED_CHANNEL = 0;
}
Delete_BikeLight_Light_Index();
SystemReg.ANT_Networking_Number = 2;
/*关机*/
System_ONOFF(1);//0--开机 1--关机
Light_State_ModeNum_Update();
}
else
{
if (m_ant_BikeLight.page_1.Light_Index != 1)
{
memcpy(ANT_message_payload_Shared_Wait, p_incoming_data, sizeof(ant_BikeLight_page32_data_layout_t));//复制非自身内容至共享通道缓存区
ANT_Relay_New_Share_Page = 32; //发送指定页
ANT_Shared_Channel_sens_message_encode(ANT_message_payload_Shared_Wait, ANT_Relay_New_Share_Page);//对该命令进行重组
}
}
}
}
/* Copyright (c) 2015 Nordic Semiconductor. All Rights Reserved.
*
* The information contained herein is property of Nordic Semiconductor ASA.
* Terms and conditions of usage are described in detail in NORDIC
* SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
*
* Licensees are granted free, non-transferable use of the information. NO
* WARRANTY of ANY KIND is provided. This heading must NOT be removed from
* the file.
*
*/
#ifndef ANT_BIKELIGHT_PAGE_32_H__
#define ANT_BIKELIGHT_PAGE_32_H__

#include <stdint.h>

typedef struct
{
uint8_t Light_Index; //灯光索引 0-63
uint8_t Controller_ID; //控制器ID 保留以备将来使用。设置为0x00 范围:[0,255]
uint8_t Reserved[5]; //保留

} ant_BikeLight_page32_data_t;


#define DEFAULT_ANT_BikeLight_PAGE32() \
(ant_BikeLight_page32_data_t) \
{ \
.Light_Index = 0, \
.Controller_ID = 0, \
}


void ant_BikeLight_page_32_encode(uint8_t *p_page_buffer,
ant_BikeLight_page32_data_t const *p_page_data);


void ant_BikeLight_page_32_decode(uint8_t const *p_page_buffer,
ant_BikeLight_page32_data_t *p_page_data,
uint8_t const Channel);

#endif // ANT_BIKELIGHT_PAGE_32_H__
/** @} */


标签:ant,32,0x20,BikeLight,ANT,Light,data,page
From: https://blog.51cto.com/xuejianqiang/5811270

相关文章

  • ANT+ 自行车车灯介绍2
    5网络设计5.1初始配对和配置5.2无UI控制器示例最基本的ANT+控制器将是没有UI的简单传感器(例如,加速度计)。这将在运动时唤醒,并向所有指示灯发送命令以将其打开,并在整个......
  • ANT+ 自行车车灯介绍
    ANT+受管网络由一组使用ANT无线电协议和ANT+设备配置文件确定和标准化各个设备之间的无线通信的设备组成。设备通信特性的这种管理提供了ANT+网络中设备之间的互操作性。AN......
  • ANT+ 自行车车灯 数据页面4 –子灯功能(0x04)
    数据页面4是从ANT+自行车灯广播的主要数据页面之一。ANT+自行车灯应作为数据页面循环的一部分发送此页面,并且在存在子灯的情况下应控制器的要求发送。有关何时发送或忽略此......
  • ANT+ 自行车车灯 数据页面6–辅助灯光模式支持(0x06)
    ANT+控制器可以请求此页面(如5.3节中所述),以确定每个子灯支持哪些自定义模式。当ANT+控制器请求时,数据页6从ANT+自行车灯广播。任何带有副灯的ANT+自行车灯均应支持此页面。该......
  • [ANT+][nrf51422][s210] 自行车车灯 数据第17页–联网灯的产品信息(0x11)
    数据页17是处于连接状态时从ANT+自行车灯广播的数据页之一。所有主灯应根据控制器的要求发送此页面。作为数据页轮发的一部分,可以可选地将此页作为从ANT+自行车灯广播的主要......
  • ANT+ 自行车车灯 数据页16 –互联灯的制造商信息(0x10)
    数据页16是当处于连接状态时从ANT+自行车灯广播的数据页之一。所有主灯应根据控制器的要求发送本页。作为数据页旋转的一部分,该页可以可选地包括为从ANT+自行车灯广播的主要......
  • ANT+ 自行车车灯 数据页18页-主光的频道ID(0x12)
    数据页18应在ANT+控制器的请求下发送,并且可以选择性地包括在连接状态下作为从ANT+自行车灯广播的主要数据页之一。这个数据页允许控制器发现并连接到已经存在的网络,如5.2.2.......
  • 安装PHP7.0.32(yum安装、源码安装)
    源码安装PHP​​1、简介​​​​2、yum安装PHP及扩展所需插件​​​​A、安装​​​​B、验证​​​​C、如果安装出现错误,改变yum安装源​​​​3、源码安装PHP​​​​A、......
  • STM32 HAL IIC软模拟
    IIC(Inter-IntegratedCircuit)其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连......
  • 单片机 STM32 HAL GSM通讯 SIM800L
    /*************笔记****************1、本SIM800L模块采用huart3(串口3),然后huart1(串口1)作为调试输出。2、CudeMX配置huart3:----------------------------------------......