打造一个通用性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

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

数据页1是ANT+自行车灯广播的主要数据页之一。所有ANT+自行车灯应在数据页旋转开始时和状态改变后立即发送此页(例如,当收到新命令时)。此信息中的所有字段应按表7-3所述进行设置。
Table 7-3. 数据页1格式-灯光状态1
在这里插入图片描述
Table 7-4. 数据公用格式第1页
在这里插入图片描述

/* 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***当前模式号************************
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
**********************************/
#include "ant_BikeLight_page_1.h"
#include "ant_BikeLight_utils.h"
#include "ant_BikeLight_page_logger.h"
#include "main.h"
/**@brief BikeLight 灯光状态(0x01) 第1页数据布局结构. */
typedef struct
{
    uint8_t Light_Index;               //灯光索引 0-63

    uint8_t                     : 1;   //保留
    uint8_t Bike_Radar_Support  : 1;   //自行车雷达支持  0:不支持  1:支持
    uint8_t Light_Type          : 3;   //灯光类型        0:前灯 2:尾灯 3:信号灯  4:信号灯-左  5:信号灯-右
    uint8_t Battery_Warnings    : 3;   //电池提示        1:新/满  2:良好  3:正常  4:低  5:极低   6:充电

    uint8_t Sub_lights_Num: 3;         //子灯数量        [0,4]
    uint8_t : 5;

    uint8_t Last_Sequence_Number;      //最近收到的命令页中包含的序列号。未初始化时设置为0xFF


    uint8_t Beam_Focus;                //灯光聚焦        [0,100]

    uint8_t Light_State_Beam    : 2;   //灯光类型        0--无效  1--关闭  2--近光灯(默认)  3:远光灯
    uint8_t Light_State_ModeNum : 6;   //当前模式号

    uint8_t Light_Intensity;           //灯光亮度        [0,100]
} ant_BikeLight_page1_data_layout_t;


static void page1_data_log(ant_BikeLight_page1_data_t const *p_page_data)
{
//    SEGGER_RTT_printf(0, "Light_Intensity:             %d\r\n", (uint8_t)p_page_data->Light_Intensity);
//    SEGGER_RTT_printf(0, "Light_State_ModeNum:         %d\r\n", (uint8_t)p_page_data->Light_State_ModeNum);
//    SEGGER_RTT_printf(0, "Battery_Warnings:            %d\r\n", (uint8_t)p_page_data->Battery_Warnings);
}


void ant_BikeLight_page_1_encode(uint8_t                     *p_page_buffer,
                                 ant_BikeLight_page1_data_t const *p_page_data)
{
    ant_BikeLight_page1_data_layout_t *p_outcoming_data = (ant_BikeLight_page1_data_layout_t *)p_page_buffer;

    memset(p_page_buffer, 0, sizeof(ant_BikeLight_page1_data_layout_t));
    p_outcoming_data->Light_Index          = p_page_data->Light_Index;
    p_outcoming_data->Bike_Radar_Support   = p_page_data->Bike_Radar_Support;
    p_outcoming_data->Light_Type           = p_page_data->Light_Type;

    p_outcoming_data->Battery_Warnings     = p_page_data->Battery_Warnings;
    p_outcoming_data->Sub_lights_Num       = p_page_data->Sub_lights_Num;
    p_outcoming_data->Last_Sequence_Number = p_page_data->Last_Sequence_Number;

    p_outcoming_data->Beam_Focus           = p_page_data->Beam_Focus;
    p_outcoming_data->Light_State_Beam     = p_page_data->Light_State_Beam;
    p_outcoming_data->Light_State_ModeNum  = p_page_data->Light_State_ModeNum;

    p_outcoming_data->Light_Intensity      = p_page_data->Light_Intensity;

    page1_data_log(p_page_data);


}


void ant_BikeLight_page_1_decode(uint8_t const              *p_page_buffer,
                                 ant_BikeLight_page1_data_t *p_page_data,
                                 uint8_t const Channel)
{
    ant_BikeLight_page1_data_layout_t const *p_incoming_data =
        (ant_BikeLight_page1_data_layout_t *)p_page_buffer;
    if (Channel == 0)
    {

    }
    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_page1_data_t));//复制非自身内容至共享通道缓存区
                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_2, 1);
            }
            else if (p_incoming_data->Light_Index == 3)
            {
                memcpy(ANT_message_payload_Wait_3, p_incoming_data, sizeof(ant_BikeLight_page1_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_page1_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_page1_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_page1_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_page1_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_page1_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_page1_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_page1_data_t));//复制非自身内容至共享通道缓存区
                ANT_Channel_sens_message_encode(ANT_message_payload_Wait_10, 1);
            }

            if (ANT_PAGE_NEW_Wait != 2)
            {
                ANT_PAGE_NEW_Wait = 1; //发送指定页
            }
        }
        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_page1_data_t));//复制非自身内容至共享通道缓存区
//                ANT_Relay_New_Share_Page = 1; //发送指定页
                ANT_Shared_Channel_sens_message_encode(ANT_message_payload_Shared_Wait, 1);//对该命令进行重组
                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", \
                                  1, 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");
            }
        }
    }
}


/* 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_1_H__
#define ANT_BIKELIGHT_PAGE_1_H__

#include <stdint.h>

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

    uint8_t                     : 1;   //保留
    uint8_t Bike_Radar_Support  : 1;   //自行车雷达支持  0:不支持  1:支持
    uint8_t Light_Type          : 3;   //灯光类型        0:前灯   2:尾灯
    uint8_t Battery_Warnings    : 3;   //电池提示        1:新/满  2:良好  3:正常  4:低  5:极低   6:充电

    uint8_t Sub_lights_Num: 3;         //子灯数量        [0,4]
    uint8_t : 5;

    uint8_t Last_Sequence_Number;      //最近收到的命令页中包含的序列号。未初始化时设置为0xFF


    uint8_t Beam_Focus;                //灯光聚焦        [0,100]

    uint8_t Light_State_Beam    : 2;   //灯光类型        0--无效  1--关闭  2--近光灯(默认)  3:远光灯
    uint8_t Light_State_ModeNum : 6;   //当前模式号

    uint8_t Light_Intensity;           //灯光亮度        [0,100]
} ant_BikeLight_page1_data_t;

#define DEFAULT_ANT_BikeLight_PAGE1()            \
    (ant_BikeLight_page1_data_t)                 \
    {                                            \
        .Light_Index                     = 0,    \
        .Bike_Radar_Support              = 0,    \
        .Light_Type                      = 0,    \
        .Battery_Warnings                = 2,    \
        .Sub_lights_Num                  = 0,    \
        .Last_Sequence_Number            = 0xFF, \
        .Beam_Focus                      = 0,    \
        .Light_State_Beam                = 2,    \
        .Light_State_ModeNum             = 0,    \
        .Light_Intensity                 = 0,    \
    }

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

/**@brief 解码功能第1页.
 *
 * @param[in]  p_page_buffer    Pointer to the data buffer.
 * @param[out] p_page_data      Pointer to the page data.
 */
void ant_BikeLight_page_1_decode(uint8_t const              *p_page_buffer,
                                 ant_BikeLight_page1_data_t *p_page_data,
                                 uint8_t const Channel);

#endif // ANT_BIKELIGHT_PAGE_1_H__
/** @} */

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