打造一个通用性MCU架构,支持CX32/AT32/NRF51/NRF52等。 OS支持RTX4/RTX5/FreeRtos。 采用VsCode+GCC组合,VsCode+KEIL5,超强开发方式。 QQ群:524408033

LiSun

打造一个通用性MCU架构,支持CX32/AT32/NRF51/NRF52等。 OS支持RTX4/RTX5/FreeRtos。 采用VsCode+GCC组合,VsCode+KEIL5,超强开发方式。 QQ群:524408033

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

数据页面2是从ANT+自行车灯广播的主要数据页面之一。所有ANT+自行车灯应作为数据页循环的一部分并应控制器的要求发送此页。有关何时发送此数据页面的详细信息,请参见7.3节。该消息中的所有字段均应按照表7-8中的说明进行设置。
表7-8。数据页2格式–灯光功能
在这里插入图片描述

7.5.1 灯光属性
如下表所示设置由灯光属性位字段表示灯光能力。

Table 7-10. 灯光属性位字段
在这里插入图片描述
注意,#支持的模式字段包括标准模式数和支持的自定义模式数在灯光下。

7.5.2 # 支持的辅助灯
此字段指示网络中主灯能够连接的辅助灯的数量。该字段应包含有效值。请注意,所有ANT+自行车灯应至少支持4个辅助灯。
受支持的辅助灯的数量通常受该灯上可用内存的限制,并且应在假定每个辅助灯具有4个子灯的情况下进行指定。表7-11中的值显示了为每个指示灯和子指示灯存储数据页1和3所需的字节数。包含一个8字节的缓冲区,以允许对来自辅助灯的其他数据页的请求进行服务。每个辅助灯还包括一个1字节的额外缓冲区,用于比较数据页3中的更改触发位。

Table 7-11. 支持辅助灯所需的内存
在这里插入图片描述

7.5.3 灯光控制

7.5.4 支持的标准模式位字段
该位字段用于指示ANT+自行车灯支持哪些标准模式,如下表所述。

Table 7-12. 支持的标准模式位字段
在这里插入图片描述

7.5.5 电池容量
电池容量字段指示充满电后灯的电池容量。如果使用多个电池,则电池容量字段将反映灯可用的总容量。

7.5.6 支持的灯光类型
支持的灯光类型位字段指示可以将ANT+自行车灯配置为的灯光类型。如果控制器尝试将ANT+自行车灯配置为不支持的灯类型,则该灯应忽略该命令。控制器只能尝试以受支持的方式配置灯光。

Table 7-13. 支持的灯光类型位字段
在这里插入图片描述

/* 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.
 *
 */

/*************Light_State_ModeNum***支持的标准模式位字段************************
LSB:
0            保留以备将来使用。设置为0
1            常亮:81 - 100%亮度      0--不支持   1--支持
2            常亮:61 - 80%亮度       0--不支持   1--支持
3            常亮:41 - 60%亮度       0--不支持   1--支持
4            常亮:21 - 40%亮度       0--不支持   1--支持
5            常亮: 0 - 20%亮度       0--不支持   1--支持
6            慢闪烁                   0--不支持   1--支持
7            快速闪烁                 0--不支持   1--支持

MSB:
0            随机闪烁                 0--不支持   1--支持
1            自动                     0--不支持   1--支持
2         左转信号灯(自动取消)      0--不支持   1--支持
3         左转信号灯(持续)          0--不支持   1--支持
4         右转信号灯(自动取消)      0--不支持   1--支持
5         右转信号灯(持续)          0--不支持   1--支持
6         危险指示灯(左右指示灯连续闪烁) 0--不支持   1--支持
**********************************/

/*************Light_Properties_SupportedModes***灯光模式号************************
0            灯光关闭
1            常亮:81 - 100%亮度
2            常亮:61 - 80%亮度
3            常亮:41 - 60%亮度
4            常亮:21 - 40%亮度
5            常亮: 0 - 20%亮度
6            慢闪烁
7            快速闪烁
8            随机闪烁
9            自动
10           左转信号灯(自动取消)
11           左转信号灯(持续)
12           右转信号灯(自动取消)
13           右转信号灯(持续)
14           危险指示灯(左右指示灯连续闪烁)
15:47        保留以备将来使用。不要使用。
48           自定义模式48
X            自定义模式“X”
63           自定义模式63
**********************************/
/*************Supported_Light_Types***支持的灯光类型************************
位  灯光类型            值          描述
0      前灯            0/1       0:不支持   1:支持
1      保留             0             设为零
2      尾灯            0/1       0:不支持   1:支持
3    信号灯-可配置     0/1       0:不支持   1:支持
4     信号灯-左        0/1       0:不支持   1:支持
5     信号灯-右        0/1       0:不支持   1:支持
6      保留             0          设为零
7      其他            0/1       0:不支持   1:支持
**********************************/
#include "ant_BikeLight_page_2.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 灯光功能(0x02) 第2页数据布局结构. */
typedef struct
{
    uint8_t Light_Index;                             //灯光索引 0-63

    uint8_t Light_Properties_AutoIntensityMode: 1;   //灯光属性--自动亮度模式--0:不支持  1:支持
    uint8_t Light_Properties_Beam: 1;                //灯光属性--灯光类型    --0:不支持远/近关灯  1:支持远/近关灯
    uint8_t Light_Properties_SupportedModes: 6;      //灯光属性--支持的模式  --0:不支持灯光模式(仅限常亮灯光) 1:63---支持的模式总数

    uint8_t Battery_Capacity;                        //充满电的电池容量 单位:200mAh   范围: [0-50800mAh]

    uint8_t Supported_Secondary_Lights : 4;          //辅助照明 [4-63]
    uint8_t : 2;
    uint8_t Beam_Focus_Control: 1;                   //灯光聚焦控制   0--支持   1--不支持
    uint8_t Beam_Intensity_Control: 1;               //灯光亮度控制   0--不支持 1--支持

    uint8_t LSB;                                     //支持的标准模式位字段LSB(上面有注释)

    uint8_t MSB: 7;                                  //支持的标准模式位字段MSB(上面有注释)
    uint8_t BrakeLightLight: 1;                      //刹车灯光:0--不支持  1支持

    uint8_t Supported_Light_Types;                   //支持的灯光类型 0:前灯 2:尾灯 3:信号灯  4:信号灯-左  5:信号灯-右

} ant_BikeLight_page2_data_layout_t;


static void page2_data_log(ant_BikeLight_page2_data_t const *p_page_data)
{
//    SEGGER_RTT_printf(0, "Light_Index:             %d\r\n", (uint8_t)p_page_data->Light_Index);
//    SEGGER_RTT_printf(0, "AutoIntensityMode:       %d\r\n", (uint8_t)p_page_data->Light_Properties_AutoIntensityMode);
//    SEGGER_RTT_printf(0, "Beam:                    %d\r\n", (uint8_t)p_page_data->Light_Properties_Beam);
//    SEGGER_RTT_printf(0, "SupportedModes:          %d\r\n", (uint8_t)p_page_data->Light_Properties_SupportedModes);
//    SEGGER_RTT_printf(0, "Battery_Capacity:        %d\r\n", (uint8_t)p_page_data->Battery_Capacity);
}


void ant_BikeLight_page_2_encode(uint8_t                     *p_page_buffer,
                                 ant_BikeLight_page2_data_t const *p_page_data)
{
    ant_BikeLight_page2_data_layout_t *p_outcoming_data     = (ant_BikeLight_page2_data_layout_t *)p_page_buffer;

    memset(p_page_buffer, 0, sizeof(ant_BikeLight_page2_data_layout_t));
    p_outcoming_data->Light_Index                           = p_page_data->Light_Index;
    p_outcoming_data->Light_Properties_AutoIntensityMode    = p_page_data->Light_Properties_AutoIntensityMode;
    p_outcoming_data->Light_Properties_Beam                 = p_page_data->Light_Properties_Beam;
    p_outcoming_data->Light_Properties_SupportedModes       = p_page_data->Light_Properties_SupportedModes;
    p_outcoming_data->Battery_Capacity                      = p_page_data->Battery_Capacity;

    p_outcoming_data->Supported_Secondary_Lights            = p_page_data->Supported_Secondary_Lights;
    p_outcoming_data->Beam_Focus_Control                    = p_page_data->Beam_Focus_Control;
    p_outcoming_data->Beam_Intensity_Control                = p_page_data->Beam_Intensity_Control;
    p_outcoming_data->LSB                                   = p_page_data->LSB;
    p_outcoming_data->MSB                                   = p_page_data->MSB;
    p_outcoming_data->BrakeLightLight                       = p_page_data->BrakeLightLight;
    p_outcoming_data->Supported_Light_Types                 = p_page_data->Supported_Light_Types;
    page2_data_log(p_page_data);
}


void ant_BikeLight_page_2_decode(uint8_t const              *p_page_buffer,
                                 ant_BikeLight_page2_data_t *p_page_data,
                                 uint8_t const Channel)
{
    ant_BikeLight_page2_data_layout_t const *p_incoming_data =
        (ant_BikeLight_page2_data_layout_t *)p_page_buffer;
    if (Channel == 0)
    {
//        if (p_incoming_data->Light_Index == m_ant_BikeLight.page_1.Light_Index)//判断灯光索引
//        {
//            p_page_data->Light_Index                           = p_incoming_data->Light_Index;
    p_page_data->Light_Properties_AutoIntensityMode    = p_incoming_data->Light_Properties_AutoIntensityMode;
    p_page_data->Light_Properties_Beam                 = p_incoming_data->Light_Properties_Beam;
    p_page_data->Light_Properties_SupportedModes       = p_incoming_data->Light_Properties_SupportedModes;
//            p_page_data->Battery_Capacity                      = p_incoming_data->Battery_Capacity;

//            p_page_data->Supported_Secondary_Lights            = p_incoming_data->Supported_Secondary_Lights;
//            p_page_data->Beam_Focus_Control                    = p_incoming_data->Beam_Focus_Control;
//            p_page_data->Beam_Intensity_Control                = p_incoming_data->Beam_Intensity_Control;
//            p_page_data->LSB                                   = p_incoming_data->LSB;
//            p_page_data->MSB                                   = p_incoming_data->MSB;
//            p_page_data->BrakeLightLight                       = p_incoming_data->BrakeLightLight;
//            p_page_data->Supported_Light_Types                 = p_incoming_data->Supported_Light_Types;
//            page2_data_log(p_page_data);
//        }
//        else //不是自己的命令转发到共享通道
//        {
//            memcpy(ANT_message_payload_Shared_Wait, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//            ANT_Relay_New_Share_Page = 2; //发送指定页
//            ANT_Shared_Channel_sens_message_encode(ANT_message_payload_Shared_Wait, ANT_Relay_New_Share_Page);//对该命令进行重组
//        }
    }
    else if (Channel == BikeLight_Shared_CHANNEL_NUMBER) //共享通达发送过来的,需要转发到广播通道
    {
        if (m_ant_BikeLight.page_1.Light_Index == 1) //作为主灯则转发到主通道
        {
            if (p_incoming_data->Light_Index == 2)
            {
                memcpy(ANT_message_payload_Wait_2, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_2, 2);
            }
            else if (p_incoming_data->Light_Index == 3)
            {
                memcpy(ANT_message_payload_Wait_3, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_3, 1);
            }
            else if (p_incoming_data->Light_Index == 4)
            {
                memcpy(ANT_message_payload_Wait_4, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_4, 1);
            }
            else if (p_incoming_data->Light_Index == 5)
            {
                memcpy(ANT_message_payload_Wait_5, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_5, 1);
            }
            else if (p_incoming_data->Light_Index == 6)
            {
                memcpy(ANT_message_payload_Wait_6, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_6, 1);
            }
            else if (p_incoming_data->Light_Index == 7)
            {
                memcpy(ANT_message_payload_Wait_7, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_7, 1);
            }
            else if (p_incoming_data->Light_Index == 8)
            {
                memcpy(ANT_message_payload_Wait_8, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_8, 1);
            }
            else if (p_incoming_data->Light_Index == 9)
            {
                memcpy(ANT_message_payload_Wait_9, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_9, 1);
            }
            else if (p_incoming_data->Light_Index == 10)
            {
                memcpy(ANT_message_payload_Wait_10, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_10, 1);
            }
//            else if (p_incoming_data->Light_Index == 11)
//            {
//                memcpy(ANT_message_payload_Wait_11, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_11, 1);
//            }
//            else if (p_incoming_data->Light_Index == 12)
//            {
//                memcpy(ANT_message_payload_Wait_12, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_12, 1);
//            }
//            else if (p_incoming_data->Light_Index == 13)
//            {
//                memcpy(ANT_message_payload_Wait_13, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_13, 1);
//            }
//            else if (p_incoming_data->Light_Index == 14)
//            {
//                memcpy(ANT_message_payload_Wait_14, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_14, 1);
//            }
//            else if (p_incoming_data->Light_Index == 15)
//            {
//                memcpy(ANT_message_payload_Wait_15, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_15, 1);
//            }
//            else if (p_incoming_data->Light_Index == 16)
//            {
//                memcpy(ANT_message_payload_Wait_16, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_16, 1);
//            }
//            else if (p_incoming_data->Light_Index == 17)
//            {
//                memcpy(ANT_message_payload_Wait_17, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_17, 1);
//            }
//            else if (p_incoming_data->Light_Index == 18)
//            {
//                memcpy(ANT_message_payload_Wait_18, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_18, 1);
//            }
//            else if (p_incoming_data->Light_Index == 19)
//            {
//                memcpy(ANT_message_payload_Wait_19, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_19, 1);
//            }
//            else if (p_incoming_data->Light_Index == 20)
//            {
//                memcpy(ANT_message_payload_Wait_20, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_20, 1);
//            }
//            else if (p_incoming_data->Light_Index == 21)
//            {
//                memcpy(ANT_message_payload_Wait_21, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_21, 1);
//            }
//            else if (p_incoming_data->Light_Index == 22)
//            {
//                memcpy(ANT_message_payload_Wait_22, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_22, 1);
//            }
//            else if (p_incoming_data->Light_Index == 23)
//            {
//                memcpy(ANT_message_payload_Wait_23, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_23, 1);
//            }
//            else if (p_incoming_data->Light_Index == 24)
//            {
//                memcpy(ANT_message_payload_Wait_24, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_24, 1);
//            }
//            else if (p_incoming_data->Light_Index == 25)
//            {
//                memcpy(ANT_message_payload_Wait_25, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_25, 1);
//            }
//            else if (p_incoming_data->Light_Index == 26)
//            {
//                memcpy(ANT_message_payload_Wait_26, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_26, 1);
//            }
//            else if (p_incoming_data->Light_Index == 27)
//            {
//                memcpy(ANT_message_payload_Wait_27, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_27, 1);
//            }
//            else if (p_incoming_data->Light_Index == 28)
//            {
//                memcpy(ANT_message_payload_Wait_28, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_28, 1);
//            }
//            else if (p_incoming_data->Light_Index == 29)
//            {
//                memcpy(ANT_message_payload_Wait_29, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_29, 1);
//            }
//            else if (p_incoming_data->Light_Index == 30)
//            {
//                memcpy(ANT_message_payload_Wait_30, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_30, 1);
//            }
//            else if (p_incoming_data->Light_Index == 31)
//            {
//                memcpy(ANT_message_payload_Wait_31, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_31, 1);
//            }
//            else if (p_incoming_data->Light_Index == 32)
//            {
//                memcpy(ANT_message_payload_Wait_32, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_32, 1);
//            }
//            else if (p_incoming_data->Light_Index == 33)
//            {
//                memcpy(ANT_message_payload_Wait_33, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_33, 1);
//            }
//            else if (p_incoming_data->Light_Index == 34)
//            {
//                memcpy(ANT_message_payload_Wait_34, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_34, 1);
//            }
//            else if (p_incoming_data->Light_Index == 35)
//            {
//                memcpy(ANT_message_payload_Wait_35, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_35, 1);
//            }
//            else if (p_incoming_data->Light_Index == 36)
//            {
//                memcpy(ANT_message_payload_Wait_36, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_36, 1);
//            }
//            else if (p_incoming_data->Light_Index == 37)
//            {
//                memcpy(ANT_message_payload_Wait_37, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_37, 1);
//            }
//            else if (p_incoming_data->Light_Index == 38)
//            {
//                memcpy(ANT_message_payload_Wait_38, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_38, 1);
//            }
//            else if (p_incoming_data->Light_Index == 39)
//            {
//                memcpy(ANT_message_payload_Wait_39, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_39, 1);
//            }
//            else if (p_incoming_data->Light_Index == 40)
//            {
//                memcpy(ANT_message_payload_Wait_40, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_40, 1);
//            }
//            else if (p_incoming_data->Light_Index == 41)
//            {
//                memcpy(ANT_message_payload_Wait_41, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_41, 1);
//            }
//            else if (p_incoming_data->Light_Index == 42)
//            {
//                memcpy(ANT_message_payload_Wait_42, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_42, 1);
//            }
//            else if (p_incoming_data->Light_Index == 43)
//            {
//                memcpy(ANT_message_payload_Wait_43, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_43, 1);
//            }
//            else if (p_incoming_data->Light_Index == 44)
//            {
//                memcpy(ANT_message_payload_Wait_44, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_44, 1);
//            }
//            else if (p_incoming_data->Light_Index == 45)
//            {
//                memcpy(ANT_message_payload_Wait_45, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_45, 1);
//            }
//            else if (p_incoming_data->Light_Index == 46)
//            {
//                memcpy(ANT_message_payload_Wait_46, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_46, 1);
//            }
//            else if (p_incoming_data->Light_Index == 47)
//            {
//                memcpy(ANT_message_payload_Wait_47, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_47, 1);
//            }
//            else if (p_incoming_data->Light_Index == 48)
//            {
//                memcpy(ANT_message_payload_Wait_48, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_48, 1);
//            }
//            else if (p_incoming_data->Light_Index == 49)
//            {
//                memcpy(ANT_message_payload_Wait_49, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_49, 1);
//            }
//            else if (p_incoming_data->Light_Index == 50)
//            {
//                memcpy(ANT_message_payload_Wait_50, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_50, 1);
//            }
//            else if (p_incoming_data->Light_Index == 51)
//            {
//                memcpy(ANT_message_payload_Wait_51, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_51, 1);
//            }
//            else if (p_incoming_data->Light_Index == 52)
//            {
//                memcpy(ANT_message_payload_Wait_52, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_52, 1);
//            }
//            else if (p_incoming_data->Light_Index == 53)
//            {
//                memcpy(ANT_message_payload_Wait_53, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_53, 1);
//            }
//            else if (p_incoming_data->Light_Index == 54)
//            {
//                memcpy(ANT_message_payload_Wait_54, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_54, 1);
//            }
//            else if (p_incoming_data->Light_Index == 55)
//            {
//                memcpy(ANT_message_payload_Wait_55, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_55, 1);
//            }
//            else if (p_incoming_data->Light_Index == 56)
//            {
//                memcpy(ANT_message_payload_Wait_56, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_56, 1);
//            }
//            else if (p_incoming_data->Light_Index == 57)
//            {
//                memcpy(ANT_message_payload_Wait_57, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_57, 1);
//            }
//            else if (p_incoming_data->Light_Index == 58)
//            {
//                memcpy(ANT_message_payload_Wait_58, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_58, 1);
//            }
//            else if (p_incoming_data->Light_Index == 59)
//            {
//                memcpy(ANT_message_payload_Wait_59, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_59, 1);
//            }
//            else if (p_incoming_data->Light_Index == 60)
//            {
//                memcpy(ANT_message_payload_Wait_60, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_60, 1);
//            }
//            else if (p_incoming_data->Light_Index == 61)
//            {
//                memcpy(ANT_message_payload_Wait_61, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_61, 1);
//            }
//            else if (p_incoming_data->Light_Index == 62)
//            {
//                memcpy(ANT_message_payload_Wait_62, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_62, 1);
//            }
//            else if (p_incoming_data->Light_Index == 63)
//            {
//                memcpy(ANT_message_payload_Wait_63, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_63, 1);
//            }

            ANT_PAGE_NEW_Wait = 2; //发送指定页
        }
        else
        {
            if (SystemInit_Type.ANT_SHARED_CHANNEL == 1 && SystemReg.ANT_SHARED_CHANNEL == 2)
            {
                uint32_t err_code;
                memcpy(ANT_message_payload_Shared_Wait, p_incoming_data, sizeof(ant_BikeLight_page2_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Relay_New_Share_Page = 2; //发送指定页
                ANT_Shared_Channel_sens_message_encode(ANT_message_payload_Shared_Wait, 2);//对该命令进行重组
                err_code = ANT_Send_Message(BikeLight_Shared_CHANNEL_NUMBER, ANT_message_payload_Shared_Wait);
                SEGGER_RTT_printf(0, "[Channel1_Forward]---TX page_%02d: %02X %02X %02X %02X %02X %02X %02X %02X --err_code:%d\n\r", \
                                  2, Replace_Buff(ANT_message_payload_Shared_Wait), err_code); //打印发送共享命令
//                ANT_Relay_New_Share_Page = 0; //复位
            }
            else
            {
                SEGGER_RTT_printf(0, "No ININ ANT_SHARED_CHANNEL!!!\r\n");
            }
        }
    }
}


```c
/* 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_2_H__
#define ANT_BIKELIGHT_PAGE_2_H__
/*************Light_State_ModeNum***支持的标准模式位字段************************
LSB:
0            保留以备将来使用。设置为0
1            常亮:81 - 100%亮度      0--不支持   1--支持
2            常亮:61 - 80%亮度       0--不支持   1--支持
3            常亮:41 - 60%亮度       0--不支持   1--支持
4            常亮:21 - 40%亮度       0--不支持   1--支持
5            常亮: 0 - 20%亮度       0--不支持   1--支持
6            慢闪烁                   0--不支持   1--支持
7            快速闪烁                 0--不支持   1--支持

MSB:
0            随机闪烁                 0--不支持   1--支持
1            自动                     0--不支持   1--支持
2         左转信号灯(自动取消)      0--不支持   1--支持
3         左转信号灯(持续)          0--不支持   1--支持
4         右转信号灯(自动取消)      0--不支持   1--支持
5         右转信号灯(持续)          0--不支持   1--支持
6         危险指示灯(左右指示灯连续闪烁) 0--不支持   1--支持
**********************************/
/*************Light_Properties_SupportedModes***灯光模式号************************
0            灯光关闭
1            常亮:81 - 100%亮度
2            常亮:61 - 80%亮度
3            常亮:41 - 60%亮度
4            常亮:21 - 40%亮度
5            常亮: 0 - 20%亮度
6            慢闪烁
7            快速闪烁
8            随机闪烁
9            自动
10           左转信号灯(自动取消)
11           左转信号灯(持续)
12           右转信号灯(自动取消)
13           右转信号灯(持续)
14           危险指示灯(左右指示灯连续闪烁)
15:47        保留以备将来使用。不要使用。
48           自定义模式48
X            自定义模式“X”
63           自定义模式63
**********************************/

/*************Supported_Light_Types***支持的灯光类型************************
位  灯光类型            值          描述
0      前灯            0/1       0:不支持   1:支持
1      保留             0             设为零
2      尾灯            0/1       0:不支持   1:支持
3    信号灯-可配置     0/1       0:不支持   1:支持
4     信号灯-左        0/1       0:不支持   1:支持
5     信号灯-右        0/1       0:不支持   1:支持
6      保留             0          设为零
7      其他            0/1       0:不支持   1:支持
**********************************/
#include <stdint.h>

typedef struct
{
    uint8_t Light_Index;                             //灯光索引 0-63

    uint8_t Light_Properties_AutoIntensityMode: 1;   //灯光属性--自动亮度模式--0:不支持  1:支持
    uint8_t Light_Properties_Beam: 1;                //灯光属性--灯光类型    --0:不支持远/近关灯  1:支持远/近关灯
    uint8_t Light_Properties_SupportedModes: 6;      //灯光属性--支持的模式  --0:不支持灯光模式(仅限常亮灯光) 1:63---支持的模式总数

    uint8_t Battery_Capacity;                        //充满电的电池容量 单位:200mAh   范围: [0-50800mAh]

    uint8_t Supported_Secondary_Lights : 4;          //辅助照明 [4-63]
    uint8_t : 2;
    uint8_t Beam_Focus_Control: 1;                   //灯光聚焦控制   0--支持   1--不支持
    uint8_t Beam_Intensity_Control: 1;               //灯光亮度控制   0--不支持 1--支持

    uint8_t LSB;                                     //支持的标准模式位字段LSB(上面有注释)

    uint8_t MSB: 7;                                  //支持的标准模式位字段MSB(上面有注释)
    uint8_t BrakeLightLight: 1;                      //刹车灯光:0--不支持  1支持

    uint8_t Supported_Light_Types;                   //支持的灯光类型 0:前灯   2:尾灯

} ant_BikeLight_page2_data_t;


#define DEFAULT_ANT_BikeLight_PAGE2()            \
    (ant_BikeLight_page2_data_t)                 \
    {                                            \
        .Light_Index                     = 0,    \
        .Light_Properties_AutoIntensityMode = 1, \
        .Light_Properties_Beam           = 1,    \
        .Light_Properties_SupportedModes = 5,    \
        .Battery_Capacity                = 5,    \
        .Supported_Secondary_Lights      = 4,    \
        .Beam_Focus_Control              = 0,    \
        .Beam_Intensity_Control          = 1,    \
        .LSB                             = 0xDA, \
        .MSB                             = 0x0,  \
        .BrakeLightLight                 = 0,    \
        .Supported_Light_Types           = 1, \
    }

/**@brief 编码第2页的函数。
 *
 * @param[in]  p_page_data      Pointer to the page data.
 * @param[out] p_page_buffer    Pointer to the data buffer.
 */
void ant_BikeLight_page_2_encode(uint8_t                          *p_page_buffer,
                                 ant_BikeLight_page2_data_t const *p_page_data);

/**@brief Function for decoding page 2.
 *
 * @param[in]  p_page_buffer    Pointer to the data buffer.
 * @param[out] p_page_data      Pointer to the page data.
 */
void ant_BikeLight_page_2_decode(uint8_t const              *p_page_buffer,
                                 ant_BikeLight_page2_data_t *p_page_data,
                                 uint8_t const Channel);

#endif // ANT_BIKELIGHT_PAGE_2_H__
/** @} */


posted on 2022-08-13 11:01  xuejianqiang  阅读(65)  评论(0编辑  收藏  举报
打造一个通用性MCU架构,支持CX32/AT32/NRF51/NRF52等。 OS支持RTX4/RTX5/FreeRtos。 采用VsCode+GCC组合,VsCode+KEIL5,超强开发方式。 QQ群:524408033