将底层的封装统一为相同的格式

This commit is contained in:
NeoZeng
2022-11-28 17:54:07 +08:00
parent 8332422eac
commit f1301ab7de
17 changed files with 75 additions and 63 deletions

View File

@@ -55,28 +55,30 @@ static void CANServiceInit()
HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO1_MSG_PENDING);
}
/* -----------------------two extern callable function -----------------------*/
/* ----------------------- two extern callable function -----------------------*/
void CANRegister(can_instance *ins, can_instance_config_s* config)
can_instance* CANRegister(can_instance_config_s* config)
{
static uint8_t idx;
if (!idx)
{
CANServiceInit();
}
instance[idx] = ins;
instance[idx] = (can_instance*)malloc(sizeof(can_instance));
memset(instance[idx],0,sizeof(can_instance));
instance[idx]->txconf.StdId = config->tx_id;
instance[idx]->txconf.IDE = CAN_ID_STD;
instance[idx]->txconf.RTR = CAN_RTR_DATA;
instance[idx]->txconf.DLC = 0x08;
instance[idx]->txconf.DLC = 0x08; // 默认发送长度为8
instance[idx]->can_handle = config->can_handle;
instance[idx]->tx_id = config->tx_id;
instance[idx]->rx_id = config->rx_id;
instance[idx]->can_module_callback = config->can_module_callback;
CANAddFilter(instance[idx++]);
CANAddFilter(instance[idx]);
return instance[idx++];
}
void CANTransmit(can_instance *_instance)

View File

@@ -51,7 +51,7 @@ void CANTransmit(can_instance *_instance);
* @param config init config
* @return can_instance* can instance owned by module
*/
void CANRegister(can_instance *instance, can_instance_config_s *config);
can_instance* CANRegister(can_instance_config_s *config);
/**
* @brief 修改CAN发送报文的数据帧长度;注意最大长度为8,在没有进行修改的时候,默认长度为8

View File

@@ -31,11 +31,19 @@ static void USARTServiceInit(usart_instance *_instance)
__HAL_DMA_DISABLE_IT(_instance->usart_handle->hdmarx, DMA_IT_HT);
}
void USARTRegister(usart_instance *_instance)
usart_instance* USARTRegister(USART_Init_Config_s *init_config)
{
static uint8_t instance_idx;
USARTServiceInit(_instance);
instance[instance_idx++] = _instance;
static uint8_t idx;
instance[idx]=(usart_instance*)malloc(sizeof(usart_instance));
memset(instance[idx],0,sizeof(usart_instance));
instance[idx]->module_callback=init_config->module_callback;
instance[idx]->recv_buff_size=init_config->recv_buff_size;
instance[idx]->usart_handle=init_config->usart_handle;
USARTServiceInit(instance[idx]);
return instance[idx++];
}
/* @todo 当前仅进行了形式上的封装,后续要进一步考虑是否将module的行为与bsp完全分离 */

View File

@@ -20,12 +20,20 @@ typedef struct
usart_module_callback module_callback; // 解析收到的数据的回调函数
} usart_instance;
/* usart 初始化配置结构体 */
typedef struct
{
uint8_t recv_buff_size; // 模块接收一包数据的大小
UART_HandleTypeDef *usart_handle; // 实例对应的usart_handle
usart_module_callback module_callback; // 解析收到的数据的回调函数
} USART_Init_Config_s;
/**
* @brief 注册一个串口实例.
*
* @param _instance 传入一个由module拥有的串口实例,注意在传入前进行基本信息的配置,详见usart_instance的struct定义
* @param init_config 传入串口初始化结构体
*/
void USARTRegister(usart_instance *_instance);
usart_instance* USARTRegister(USART_Init_Config_s *init_config);
/**
* @todo 是否需要进一步封装发送buff和size,并创建一个串口任务以一定频率自动发送?