# include "wk2114.h"
# include "usart.h"
static uint8_t reg_readout [ 1 ] = { 0 } ;
extern WK2114_Sub_Uart_TypeDef * sub_uart1 ;
extern uint8_t sub_uart1_receive_buf [ 1024 ] ;
extern uint8_t wk2xxx_rcvbuf [ 1024 ] ;
// extern UART_HandleTypeDef *pWK2114Uart;
extern osSemaphoreId_t wk2xxx_lockHandle ;
extern osSemaphoreId_t wk2xxx_irq_lockHandle ;
extern osEventFlagsId_t wk2114EventHandle ;
osSemaphoreId_t wk2xxx_lockHandle ;
const osSemaphoreAttr_t wk2xxx_lock_attributes = {
. name = " wk2xxx_lock " } ;
osSemaphoreId_t wk2xxx_sub_lockHandle ;
const osSemaphoreAttr_t wk2xxx_sub_lock_attributes = {
. name = " wk2xxx_sub_lock " } ;
// osMutexId_t wk2xxx_irq_MutexHandle;
// const osMutexAttr_t wk2xxx_irq_Mutex_attributes = {
// .name = "wk2xxx_irq_Mutex"
// };
osSemaphoreId_t wk2xxx_irq_lockHandle ;
const osSemaphoreAttr_t wk2xxx_irq_lock_attributes = {
. name = " wk2xxx_irq_lock " } ;
osSemaphoreId_t wk2xxx_idle_lockHandle ;
const osSemaphoreAttr_t wk2xxx_idle_lock_attributes = {
. name = " wk2xxx_idle_lock " } ;
osThreadId_t wk2114Handle ;
const osThreadAttr_t wk2114Handle_attributes = {
. name = " wk2114 " ,
. stack_size = 1024 ,
. priority = ( osPriority_t ) osPriorityBelowNormal ,
} ;
osEventFlagsId_t wk2114EventHandle ;
const osEventFlagsAttr_t wk2114Event_attributes = {
. name = " wk2114Event "
} ;
# define WK2114_Uart_IRQHandler USART3_IRQHandler
UART_HandleTypeDef * pWK2114Uart = & huart3 ;
int Sub_rcv_callback ( void * obj , uint8_t * buf , uint16_t len )
{
return 0 ;
}
void WK2XXX_IRQ_HANDLER ( void )
{
if ( __HAL_GPIO_EXTI_GET_IT ( WK2XXX_IRQ_PIN ) )
{
// log_i("EXTI9_5_IRQHandler..WK2XXX IRQ HANDLER .. " );
// osSemaphoreRelease(wk2xxx_irq_lockHandle);
osEventFlagsSet ( wk2114EventHandle , MODULE_WK2114_EVENT_EXTI_IRQ ) ;
// osMutexRelease(wk2xxx_irq_MutexHandle );
log_i ( " irq EXTI9_5_ PIN7 set flag ..... " ) ;
__HAL_GPIO_EXTI_CLEAR_IT ( WK2XXX_IRQ_PIN ) ;
}
// HAL_GPIO_EXTI_IRQHandler(WK2114_IRQ_Pin);
}
// TODO 何时开启接收, 在 wk2114_read_reg 的时候
void WK2114_Uart_IRQHandler ( void )
{
uint16_t count = 0 ;
uint16_t data_length = 0 ;
// send cplt
if ( __HAL_UART_GET_FLAG ( pWK2114Uart , UART_FLAG_TC ) ! = RESET )
{
// log_i("WK2114 ..huart TC callback .. " );
// wk2114_send_completed_callback( wk2114);
wk2114 - > flag & = ~ WK2114_G_FLAG_MASK_SENDING ;
osSemaphoreRelease ( wk2xxx_lockHandle ) ;
pWK2114Uart - > gState = HAL_UART_STATE_READY ;
__HAL_UART_CLEAR_FLAG ( pWK2114Uart , UART_FLAG_TC ) ;
}
if ( __HAL_UART_GET_FLAG ( pWK2114Uart , UART_FLAG_IDLE ) ! = RESET )
{
count = __HAL_DMA_GET_COUNTER ( pWK2114Uart - > hdmarx ) ;
// log_i("WK2114 ..huart IDLE ... %d", 1024 - count);
data_length = 1024 - count ;
if ( data_length > 0 )
{
wk2114 - > idle_receive_flag = 1 ;
wk2114 - > size_received = data_length ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
// osEventFlagsSet(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IDLE);
// wk2114_idle_callback(wk2114, wk2xxx_rcvbuf, data_length);
// wk2114_reg_recv_callback(wk2114);
// wk2114_recv_callback(wk2114, wk2xxx_rcvbuf, data_length );
// log_i("WK2114_ IDLE.. data_length %d %02X", data_length, wk2xxx_rcvbuf[0]);
}
__HAL_UART_CLEAR_IDLEFLAG ( pWK2114Uart ) ;
}
}
int WK2114_Add_Sub_Uart ( WK2114_TypeDef * wk2114 )
{
sub_uart1 = ( WK2114_Sub_Uart_TypeDef * ) malloc ( sizeof ( WK2114_Sub_Uart_TypeDef ) ) ;
if ( 0 ! = wk2114_sub_uart_register ( wk2114 , sub_uart1 , WK2114_S_UART_1 , sub_uart1_receive_buf , sizeof ( sub_uart1_receive_buf ) , & huart2 , Sub_rcv_callback ) )
{
log_e ( " sub-uart 1 register Failure ! " ) ;
} ;
if ( 0 ! = wk2114_sub_uart_init ( sub_uart1 , 115200 , WK2114_SUB_UART_MODE_MASK_TX | WK2114_SUB_UART_MODE_MASK_RX , WK2114_SUB_UART_FIFO_MODE_MASK_TX | WK2114_SUB_UART_FIFO_MODE_MASK_RX , WK2114_UART_PARITY_NONE , WK2114_UART_STOP_BITS_1 ) )
{
log_e ( " sub-uart 1 init Failure ! " ) ;
}
return 0 ;
}
int WK2114_Init ( )
{
GPIO_InitTypeDef GPIO_InitStruct = { 0 } ;
WK2XXX_RST_GPIO_CLK_ENABLE ( ) ;
WK2XXX_IRQ_GPIO_CLK_ENABLE ( ) ;
// wk2XXX rst
GPIO_InitStruct . Pin = WK2XXX_RST_PIN ;
GPIO_InitStruct . Mode = GPIO_MODE_OUTPUT_PP ;
GPIO_InitStruct . Pull = GPIO_PULLUP ;
GPIO_InitStruct . Speed = GPIO_SPEED_FREQ_LOW ;
HAL_GPIO_Init ( WK2XXX_RST_GPIO_PORT , & GPIO_InitStruct ) ;
// wk2XXX irq
GPIO_InitStruct . Pin = WK2XXX_IRQ_PIN ;
GPIO_InitStruct . Mode = GPIO_MODE_IT_FALLING ;
GPIO_InitStruct . Pull = GPIO_PULLDOWN ;
HAL_GPIO_Init ( WK2XXX_IRQ_GPIO_PORT , & GPIO_InitStruct ) ;
HAL_NVIC_SetPriority ( WK2XXX_IRQ_EXTI_IRQ , 5 , 0 ) ;
HAL_NVIC_EnableIRQ ( WK2XXX_IRQ_EXTI_IRQ ) ;
wk2114 = ( WK2114_TypeDef * ) malloc ( sizeof ( WK2114_TypeDef ) ) ;
wk2114 - > send_class = pWK2114Uart ;
wk2114 - > send_fun = HAL_UART_Transmit_DMA ;
// 命令队列 uint8_t cmd_buf[64][2] , 消息类型 2个uint8_t
wk2114 - > cmd_queue = osMessageQueueNew ( 64 , sizeof ( wk2114 - > cmd_queue_msg_put ) , NULL ) ;
if ( wk2114 - > cmd_queue = = NULL ) return - 1 ;
wk2114 - > cmd = 0 ;
wk2114 - > flag = 0 ;
wk2114 - > dev_clock_hz = WK2114_CLOCK_HZ ;
for ( size_t i = 0 ; i < 4 ; i + + ) {
wk2114 - > sub_uart [ i ] = NULL ;
wk2114 - > sub_uart_cfg [ i ] = NULL ;
}
// osSemaphoreRelease(wk2xxx_lockHandle);
// osSemaphoreRelease(wk2xxx_sub_lockHandle);
// // osSemaphoreRelease(wk2xxx_irq_lockHandle);
// osSemaphoreAcquire(wk2xxx_irq_lockHandle, osWaitForever);
wk2114 - > size_received = 0 ;
// wk2114->setbaud_ok = 0;
// wk2114->senf40_rcvF0_ok = 0;
wk2114 - > idle_receive_flag = 0 ;
wk2114 - > state = WK2114_WORK_STATE_WAIT ;
return 0 ;
}
void WK2114_Port ( )
{
wk2114Handle = osThreadNew ( WK2114_Task , ( void * ) ( & wk2114 - > state ) , & wk2114Handle_attributes ) ;
// wk2114EventHandle = osEventFlagsNew ( &wk2114Event_attributes );
// wk2xxx_irq_MutexHandle = osMutexNew(&wk2xxx_sub_lock_attributes);
wk2xxx_lockHandle = osSemaphoreNew ( 1 , 1 , & wk2xxx_lock_attributes ) ;
osSemaphoreRelease ( wk2xxx_lockHandle ) ;
// osSemaphoreAcquire(wk2xxx_lockHandle, osWaitForever);
wk2xxx_sub_lockHandle = osSemaphoreNew ( 1 , 1 , & wk2xxx_sub_lock_attributes ) ;
osSemaphoreRelease ( wk2xxx_sub_lockHandle ) ;
// osSemaphoreAcquire(wk2xxx_sub_lockHandle, osWaitForever);
wk2xxx_irq_lockHandle = osSemaphoreNew ( 1 , 1 , & wk2xxx_irq_lock_attributes ) ;
osSemaphoreRelease ( wk2xxx_irq_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_irq_lockHandle , osWaitForever ) ;
wk2xxx_idle_lockHandle = osSemaphoreNew ( 1 , 1 , & wk2xxx_idle_lock_attributes ) ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
// osMutexAcquire(wk2xxx_irq_MutexHandle, osWaitForever);
// wk2xxx_irq_MutexHandle = osMutexNew(&wk2xxx_sub_lock_attributes);
wk2114EventHandle = osEventFlagsNew ( & wk2114Event_attributes ) ;
osEventFlagsClear ( wk2114EventHandle , MODULE_WK2114_EVENT_EXTI_IRQ ) ;
osEventFlagsClear ( wk2114EventHandle , MODULE_WK2114_EVENT_EXTI_IDLE ) ;
// osEventFlagsClear(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IT_SOURCE_RECEIVED );
// osEventFlagsClear(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IT_TYPE_SENDING );
// osEventFlagsClear(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IT_TYPE_RECEIVED );
// osEventFlagsClear(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_RCV_FIFO_COUNT_RECEIVED );
// osEventFlagsClear(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_RCV_FIFO_BUF_RECEIVED );
}
void WK2114_Task ( void * argument )
{
WK2114_WORK_STATE_TypeDef * state = argument ;
static int err_con = 0 ;
static int state_ok_count = 0 ;
static uint8_t cmd ;
static uint8_t reg_readout ;
static uint8_t sub_uart_index ;
static uint8_t evt_flag = 0 ;
static uint32_t fifo_readout_count = 0 ;
static uint32_t subuart_sendqueue_count = 0 ;
static WK2114_Sub_Uart_TypeDef * p_sub_uart ;
static WK2114_Sub_Uart_CFG_TypeDef * p_sub_uart_cfg ;
for ( ; ; )
{
switch ( * state )
{
case WK2114_WORK_STATE_WAIT :
log_i ( " WK2114_wait .... " ) ;
osDelay ( 100 ) ;
break ;
case WK2114_WORK_STATE_START :
err_con = 0 ;
wk2114 - > timebase = osKernelGetTickCount ( ) ;
* state = WK2114_WORK_STATE_SET_BAUD ;
continue ;
case WK2114_WORK_STATE_SET_BAUD :
{
log_i ( " WK2114_WORK_STATE_SET_BAUD .... " ) ;
wk2114 - > cmd = 0x55 ;
reg_readout = 0xFF ;
wk2114 - > timebase = osKernelGetTickCount ( ) ;
wk2114_reset ( wk2114 ) ;
wk2114_mainport_rcv ( wk2114 , wk2xxx_rcvbuf , 1024 ) ;
wk2114_set_baud ( wk2114 ) ;
osDelay ( 1 ) ;
wk2114_set_baud ( wk2114 ) ;
* state = WK2114_WORK_STATE_SET_BAUD_OK ;
// osEventFlagsClear( wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IDLE );
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
continue ;
}
case WK2114_WORK_STATE_SET_BAUD_OK :
{
log_i ( " WK2114_WORK_STATE_SET_BAUD OK .... " ) ;
// osDelay(1);
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , 0xFF ) ;
* state = WK2114_WORK_STATE_IT_SOURCE_GETTING ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
if ( wk2xxx_rcvbuf [ 0 ] ! = 0x00 )
{
err_con + + ;
log_i ( " setbaud , retry %d times " , err_con ) ;
if ( err_con > 40 )
{
* state = WK2114_WORK_STATE_ERROR ;
break ;
}
HAL_UART_DMAStop ( pWK2114Uart ) ;
* state = WK2114_WORK_STATE_SET_BAUD ;
break ;
}
// osSemaphoreWait(wk2xxx_idle_lockHandle );
// uint32_t evt_flag = osEventFlagsWait(wk2114EventHandle,MODULE_WK2114_EVENT_EXTI_IDLE, 0, portMAX_DELAY);
// if ( evt_flag & MODULE_WK2114_EVENT_EXTI_IDLE != 0 ) {
// osEventFlagsClear( wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IDLE );
// *state = WK2114_WORK_STATE_IT_SOURCE_GETTING;
// HAL_UART_DMAStop( pWK2114Uart );
// continue;
// }else{
// *state = WK2114_WORK_STATE_ERROR;
// HAL_UART_DMAStop( pWK2114Uart );
// continue;
// }
// while (wk2114->idle_receive_flag!=1 || wk2xxx_rcvbuf[0] != 0x00)
// {
// if ( wk2114->timebase-osKernelGetTickCount() >200)
// {
// err_con++;
// log_i( " setbaud , retry %d times ", err_con );
// if (err_con>10)
// {
// *state = WK2114_WORK_STATE_ERROR;
// break;
// }
// HAL_UART_DMAStop(pWK2114Uart);
// *state = WK2114_WORK_STATE_SET_BAUD;
// break;
// }
// }
// log_d( "WK2114 SET_BAUD OK .... rcv0 0x%02X", wk2xxx_rcvbuf[0] );
HAL_UART_DMAStop ( pWK2114Uart ) ;
* state = WK2114_WORK_STATE_SEND_40_RCV_F0 ;
continue ;
}
case WK2114_WORK_STATE_SEND_40_RCV_F0 :
{
log_i ( " WK2114_WORK_STATE SEND_40 RCV_F0 ... " ) ;
wk2114 - > cmd = 0x40 ;
wk2114 - > timebase = osKernelGetTickCount ( ) ;
wk2114_mainport_rcv ( wk2114 , wk2xxx_rcvbuf , 1024 ) ;
wk2114 - > send_fun ( wk2114 - > send_class , & wk2114 - > cmd , 1 ) ;
* state = WK2114_WORK_STATE_SEND_40_RCV_F0_OK ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
continue ;
}
case WK2114_WORK_STATE_SEND_40_RCV_F0_OK :
{
log_d ( " WK2114_WORK_STATE SEND_40 RCV_F0 OK .... " ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , 0xFF ) ;
// *state = WK2114_WORK_STATE_IT_SOURCE_GETTING;
// osSemaphoreRelease(wk2xxx_idle_lockHandle );
if ( wk2xxx_rcvbuf [ 0 ] ! = 0xF0 )
{
err_con + + ;
log_i ( " SEND_40 RCV_F0 %d times " , err_con ) ;
if ( err_con > 40 )
{
* state = WK2114_WORK_STATE_ERROR ;
break ;
}
HAL_UART_DMAStop ( pWK2114Uart ) ;
* state = WK2114_WORK_STATE_SET_BAUD ;
break ;
}
HAL_UART_DMAStop ( pWK2114Uart ) ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
* state = WK2114_WORK_TEST_OK ;
}
case WK2114_WORK_TEST_OK :
{
log_i ( " WK2114_WORK_TEST_OK ... " ) ;
osDelay ( 20 ) ;
break ;
}
case WK2114_WORK_STATE_ADD_SUB_UART :
{
log_i ( " WK2114_WORK_STATE_ADD_SUB_UART .... " ) ;
WK2114_Add_Sub_Uart ( wk2114 ) ;
* state = WK2114_WORK_STATE_ADD_SUB_UART_OK ;
continue ;
}
case WK2114_WORK_STATE_ADD_SUB_UART_OK :
{
log_i ( " WK2114_WORK_STATE_ADD_SUB_UART OK .... ?? " ) ;
* state = WK2114_WORK_STATE_OK ;
osDelay ( 2 ) ;
continue ;
}
case WK2114_WORK_STATE_OK :
{
log_i ( " WK2114_WORK_STATE_OK --> wait irq exti " ) ;
// osSemaphoreAcquire(wk2xxx_irq_lockHandle, osWaitForever);
// *state = WK2114_WORK_STATE_IT_SOURCE_GETTING;
// osSemaphoreRelease(wk2xxx_irq_lockHandle);
// osSemaphoreAcquire(wk2xxx_irq_lockHandle, osWaitForever);
uint32_t evt_flag = osEventFlagsWait ( wk2114EventHandle ,
MODULE_WK2114_EVENT_EXTI_IRQ ,
0 ,
portMAX_DELAY ) ;
log_i ( " WK2114 IRQ exti happened ..... " ) ;
if ( evt_flag & MODULE_WK2114_EVENT_EXTI_IRQ ! = 0 ) {
osEventFlagsClear ( wk2114EventHandle , MODULE_WK2114_EVENT_EXTI_IRQ ) ;
* state = WK2114_WORK_STATE_IT_SOURCE_GETTING ;
continue ;
}
// *state = WK2114_WORK_STATE_IT_SOURCE_GETTING;
// osDelay(20);
continue ;
}
case WK2114_WORK_STATE_IT_SOURCE_GETTING :
{
wk2114 - > timebase = osKernelGetTickCount ( ) ;
wk2114 - > cmd = WK2114_G_REG_GIFR ;
cmd = WK2114_G_REG_GIFR ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
wk2114_read_global_reg ( wk2114 , wk2114 - > cmd ) ;
// wk2114->reg_gifr = wk2xxx_rcvbuf[0];
// log_i( " WK2114 IRQ irq source 0x%02X", wk2114->reg_gifr );
* state = WK2114_WORK_STATE_IT_TYPE_GETTING ;
continue ;
}
case WK2114_WORK_STATE_IT_TYPE_GETTING :
{
log_d ( " irq WK2114_WORK_STATE_IT_TYPE_GETTING .. by irq source 0x%02X " , wk2114 - > reg_gifr ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , 0xFF ) ;
// *state = WK2114_WORK_STATE_IT_SOURCE_GETTING;
HAL_UART_DMAStop ( pWK2114Uart ) ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
wk2114 - > reg_gifr = wk2xxx_rcvbuf [ 0 ] ;
wk2114 - > reg_readout = wk2114 - > reg_gifr ;
log_i ( " irq source 0x%02X " , wk2114 - > reg_gifr ) ;
switch ( wk2114 - > reg_readout )
{
case WK2114_G_REG_GIFR_MASK_UT1INT :
if ( wk2114 - > sub_uart [ WK2114_S_UART_1 ] ! = NULL ) {
wk2114 - > it_sub_uart_index = WK2114_S_UART_1 ;
}
break ;
case WK2114_G_REG_GIFR_MASK_UT2INT :
if ( wk2114 - > sub_uart [ WK2114_S_UART_2 ] ! = NULL ) {
wk2114 - > it_sub_uart_index = WK2114_S_UART_2 ;
}
break ;
case WK2114_G_REG_GIFR_MASK_UT3INT :
if ( wk2114 - > sub_uart [ WK2114_S_UART_3 ] ! = NULL ) {
wk2114 - > it_sub_uart_index = WK2114_S_UART_3 ;
}
break ;
case WK2114_G_REG_GIFR_MASK_UT4INT :
if ( wk2114 - > sub_uart [ WK2114_S_UART_4 ] ! = NULL ) {
wk2114 - > it_sub_uart_index = WK2114_S_UART_4 ;
}
break ;
default :
log_e ( " it source error ! " ) ;
* state = WK2114_WORK_STATE_OK ;
break ;
}
log_i ( " it_sub_uart_index source 0x%02X " , wk2114 - > it_sub_uart_index ) ;
p_sub_uart = wk2114 - > sub_uart [ wk2114 - > it_sub_uart_index ] ;
// 读子串口寄存器 it_type
p_sub_uart - > cmd = WK2114_S_REG_SIFR ;
cmd = WK2114_S_REG_SIFR ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
wk2114_read_subuart_reg ( wk2114 , wk2114 - > it_sub_uart_index , p_sub_uart - > cmd ) ;
* state = WK2114_WORK_STATE_PROCESS_IT_TYPE ;
continue ;
}
case WK2114_WORK_STATE_PROCESS_IT_TYPE :
{
log_d ( " WK2114_WORK_STATE_PROCESS_IT_TYPE .. subuart 0x%02X it_type 0x%02X " , wk2114 - > it_sub_uart_index , wk2xxx_rcvbuf [ 0 ] ) ;
// log_d("WK2114_WORK_STATE_PROCESS_IT_TYPE .. subuart 0x%02X it_type 0x%02X ", wk2114->it_sub_uart_index,wk2xxx_rcvbuf[0]);
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , 0xFF ) ;
HAL_UART_DMAStop ( pWK2114Uart ) ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
wk2114 - > reg_readout = wk2xxx_rcvbuf [ 0 ] ;
osDelay ( 1 ) ;
// wk2114->reg_readout = wk2114->sub_uart_cfg[wk2114->it_sub_uart_index]->reg_sifr;
p_sub_uart - > reg = wk2xxx_rcvbuf [ 0 ] ;
reg_readout = wk2xxx_rcvbuf [ 0 ] ;
log_d ( " subuart 0x%02X it_type 0x%02X 0x%02X " , wk2114 - > it_sub_uart_index , wk2114 - > reg_readout , wk2xxx_rcvbuf [ 0 ] ) ;
// log_d(" it_type 0x%02X ",wk2114->sub_uart_cfg[wk2114->it_sub_uart_index]->reg_sifr);
// 接收FIFO触点中断 ,接收FIFO中的数据个数大于设定的 128 ,0x01
if ( ( p_sub_uart - > reg & WK2114_S_REG_SIFR_MASK_RFTRIG_INT ) ! = 0 ) {
* state = WK2114_WORK_STATE_EXTI_PROCESS_RFTRIG_INT ;
continue ;
}
// 接收字节超时中断 读取字节数未满 且空闲4字节 0x02
if ( ( p_sub_uart - > reg & WK2114_S_REG_SIFR_MASK_RXOVT_INT ) ! = 0 ) {
* state = WK2114_WORK_STATE_EXTI_PROCESS_RXOVT_INT ;
continue ;
}
// 发送FIFO触点中断 ,当发送FIFO中的数据个数小于设定的128时,产生该中断 /0x04
if ( ( p_sub_uart - > reg & WK2114_S_REG_SIFR_MASK_TFTRIG_INT ) ! = 0 ) {
// log_d("_IT_ type .... %d", p_sub_uart->reg );
* state = WK2114_WORK_STATE_EXTI_PROCESS_TFTRIG_INT ;
continue ;
}
// FIFO触点发送为空中断 , FIFO ,当发送FIFO中没有数据,大约设定的128 中断清除 ,0x08
if ( ( p_sub_uart - > reg & WK2114_S_REG_SIFR_MASK_TFEMPTY_INT ) ! = 0 ) {
* state = WK2114_WORK_STATE_EXTI_PROCESS_TFEMPTY_INT ;
continue ;
}
// if( (p_sub_uart->reg&WK2114_S_REG_SIFR_MASK_TFEMPTY_INT)!=0
// && wk2114->sub_uart[wk2114->it_sub_uart_index]->send_buf_p==0xffffffff ) {
// *state = WK2114_WORK_STATE_EXTI_PROCESS_TFEMPTY_INT;
// continue;
// }
// 接收错误中断 0x80
if ( ( p_sub_uart - > reg & WK2114_S_REG_SIFR_MASK_FERR_INT ) ! = 0 ) {
* state = WK2114_WORK_STATE_EXTI_PROCESS_FERR_INT ;
continue ;
}
* state = WK2114_WORK_STATE_OK ;
break ;
}
case WK2114_WORK_STATE_EXTI_PROCESS_RXOVT_INT :
{
log_w ( " Rcv Fifo Byte Overtime Int .... " ) ;
p_sub_uart - > cmd = WK2114_S_REG_RFCNT ;
cmd = WK2114_S_REG_SIFR ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
wk2114_read_subuart_reg ( wk2114 , wk2114 - > it_sub_uart_index , p_sub_uart - > cmd ) ;
* state = WK2114_WORK_STATE_EXTI_PROCESS_GET_FIFO_COUNT ;
continue ;
}
case WK2114_WORK_STATE_EXTI_PROCESS_RFTRIG_INT :
{
log_i ( " Rcv Fifo Trigger .... read rcv fifo count " ) ;
// 读子串口寄存器 it_type
p_sub_uart - > cmd = WK2114_S_REG_RFCNT ;
cmd = WK2114_S_REG_SIFR ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
wk2114_read_subuart_reg ( wk2114 , wk2114 - > it_sub_uart_index , p_sub_uart - > cmd ) ;
* state = WK2114_WORK_STATE_EXTI_PROCESS_GET_FIFO_COUNT ;
continue ;
}
case WK2114_WORK_STATE_EXTI_PROCESS_TFEMPTY_INT :
{
log_w ( " Tx Fifo Empty Int.... " ) ;
if ( p_sub_uart - > send_buf_p = = 0xffffffff ) {
log_w ( " send fifo trigger == 0 " ) ;
p_sub_uart - > send_buf_p = 0 ;
uint8_t queue_count = osMessageQueueGetCount ( p_sub_uart - > send_queue ) ;
// 判断 子串口的 发送队列是否为空
// p_de=queue_get_de_index(&p_sub_uart->send_queue);
// if(p_de>=0){
if ( osMessageQueueGetCount ( p_sub_uart - > send_queue ) > = 0 ) {
if ( p_sub_uart - > send_record [ queue_count - 1 ] . size - p_sub_uart - > send_buf_p < = 256 ) {
struct wk2114_send_record record ;
osMessageQueueGet ( p_sub_uart - > send_queue , ( void * ) & record , sizeof ( record ) , portMAX_DELAY ) ;
wk2114_write_fifo ( wk2114 , sub_uart_index , record . p_data [ p_sub_uart - > send_buf_p ] , record . size - p_sub_uart - > send_buf_p - 1 ) ;
// wk2114_write_fifo(wk2114,i,&p_sub_uart->send_record[p_de].p_data[p_sub_uart->send_buf_p],p_sub_uart->send_record[p_de].size-p_sub_uart->send_buf_p-1);
p_sub_uart - > send_buf_p = 0xffffffff ;
// queue_dequeue(&p_sub_uart->send_queue,NULL);
}
else { // buff 大于256, 发送 256, 记录发送位置 p_sub_uart->send_buf_p
wk2114_write_fifo ( wk2114 , sub_uart_index , & p_sub_uart - > send_record [ queue_count - 1 ] . p_data [ p_sub_uart - > send_buf_p ] , 255 ) ;
wk2114_sub_uart_set_inter ( p_sub_uart , WK2114_S_REG_SIFR_MASK_RFTRIG_INT | WK2114_S_REG_SIFR_MASK_RXOVT_INT | WK2114_S_REG_SIFR_MASK_TFTRIG_INT | WK2114_S_REG_SIFR_MASK_TFEMPTY_INT | WK2114_S_REG_SIFR_MASK_FERR_INT ) ;
p_sub_uart - > send_buf_p + = 256 ;
}
}
else {
// 子串口队列无发送任务,取消发送出点为空中断
wk2114_sub_uart_set_inter ( p_sub_uart , WK2114_S_REG_SIFR_MASK_RFTRIG_INT | WK2114_S_REG_SIFR_MASK_RXOVT_INT | WK2114_S_REG_SIFR_MASK_FERR_INT ) ;
* state = WK2114_WORK_STATE_STOP ;
}
}
continue ;
}
// 发送FIFO触点中断 ,当发送FIFO中的数据个数小于设定的128时,产生该中断 /0x04
case WK2114_WORK_STATE_EXTI_PROCESS_TFTRIG_INT :
{
log_d ( " Tx Fifo Trigger Int TFTRIG ..... " ) ;
uint8_t size ;
uint8_t current_record_p = 0 ;
osSemaphoreAcquire ( wk2xxx_sub_lockHandle , osWaitForever ) ;
subuart_sendqueue_count = osMessageQueueGetCount ( p_sub_uart - > send_queue ) ;
// osDelay(20);
// log_w("Tx Fifo Trigger Int ..... subuart_sendqueue_count %d ",subuart_sendqueue_count);
if ( subuart_sendqueue_count > = 0 ) {
current_record_p = ( p_sub_uart - > send_record_p + 8 - subuart_sendqueue_count ) % 8 ;
// log_d(" p_sub_uart->send_buf_p %d" , p_sub_uart->send_buf_p);
// log_d(" record size %d" , p_sub_uart->send_record[current_record_p]);
// 当前record数据发完,取出队列, 状态回到 state_ok
if ( p_sub_uart - > send_buf_p > = p_sub_uart - > send_record [ current_record_p ] . size ) {
log_d ( " current record send cplt " ) ;
osMessageQueueGet ( p_sub_uart - > send_queue , ( void * ) & current_record_p , sizeof ( current_record_p ) , portMAX_DELAY ) ; // 发送完取出当前消息
wk2114 - > reg = WK2114_S_REG_SIFR_MASK_RFTRIG_INT | WK2114_S_REG_SIFR_MASK_RXOVT_INT | WK2114_S_REG_SIFR_MASK_TFEMPTY_INT | WK2114_S_REG_SIFR_MASK_FERR_INT ;
wk2114_write_subuart_reg ( wk2114 , wk2114 - > it_sub_uart_index , WK2114_S_REG_SIER , wk2114 - > reg ) ;
osSemaphoreAcquire ( wk2xxx_lockHandle , osWaitForever ) ;
osSemaphoreRelease ( wk2xxx_lockHandle ) ;
// wk2114_sub_uart_set_inter(p_sub_uart,wk2114->reg);
p_sub_uart - > send_buf_p = 0xffffffff ; // 计数复原
osSemaphoreRelease ( wk2xxx_sub_lockHandle ) ;
* state = WK2114_WORK_STATE_EXTI_READ_SUB_FSR ;
continue ;
}
// 当前record 没有发的小于 16
if ( p_sub_uart - > send_record [ current_record_p ] . size - p_sub_uart - > send_buf_p < = 16 ) {
// log_w(" < < 16 ......" );
size = p_sub_uart - > send_record [ current_record_p ] . size - p_sub_uart - > send_buf_p ;
// 快速写 128buf , 清除中断, 每次16
wk2114_write_fifo ( wk2114 ,
wk2114 - > it_sub_uart_index ,
& p_sub_uart - > send_record - > p_data [ current_record_p ] ,
size - 1 ) ;
p_sub_uart - > send_buf_p = 0xffffffff ;
wk2114 - > reg = WK2114_S_REG_SIFR_MASK_RFTRIG_INT | WK2114_S_REG_SIFR_MASK_RXOVT_INT | WK2114_S_REG_SIFR_MASK_TFEMPTY_INT | WK2114_S_REG_SIFR_MASK_FERR_INT ;
wk2114_write_subuart_reg ( wk2114 , wk2114 - > it_sub_uart_index , WK2114_S_REG_SIER , wk2114 - > reg ) ;
osSemaphoreAcquire ( wk2xxx_lockHandle , osWaitForever ) ;
osSemaphoreRelease ( wk2xxx_lockHandle ) ;
// wk2114_sub_uart_set_inter(p_sub_uart,wk2114->reg);
osSemaphoreRelease ( wk2xxx_sub_lockHandle ) ;
continue ;
}
else { // 计数大于128
// log_w(" > 16 ...... " );
wk2114_write_fifo ( wk2114 ,
wk2114 - > it_sub_uart_index ,
& p_sub_uart - > send_record - > p_data [ current_record_p ] ,
15 ) ;
p_sub_uart - > send_buf_p + = 16 ;
osSemaphoreRelease ( wk2xxx_sub_lockHandle ) ;
continue ;
}
}
else {
wk2114 - > reg = WK2114_S_REG_SIFR_MASK_RFTRIG_INT | WK2114_S_REG_SIFR_MASK_RXOVT_INT | WK2114_S_REG_SIFR_MASK_FERR_INT ;
wk2114_write_subuart_reg ( wk2114 , wk2114 - > it_sub_uart_index , WK2114_S_REG_SIER , wk2114 - > reg ) ;
// wk2114_sub_uart_set_inter(p_sub_uart,wk2114->reg);
osSemaphoreAcquire ( wk2xxx_lockHandle , osWaitForever ) ;
osSemaphoreRelease ( wk2xxx_lockHandle ) ;
osSemaphoreRelease ( wk2xxx_sub_lockHandle ) ;
* state = WK2114_WORK_STATE_OK ;
continue ;
}
// osSemaphoreRelease(wk2xxx_sub_lockHandle);
* state = WK2114_WORK_STATE_OK ;
continue ;
osDelay ( 20 ) ;
break ;
}
case WK2114_WORK_STATE_EXTI_PROCESS_FERR_INT :
{
log_e ( " Fifo Error .... " ) ;
__HAL_UART_ENABLE_IT ( pWK2114Uart , UART_IT_IDLE ) ;
HAL_UART_Receive_DMA ( pWK2114Uart , & wk2114 - > reg_readout , 1 ) ;
// HAL_UARTEx_ReceiveToIdle_DMA( pWK2114Uart, wk2xxx_rcvbuf, 1024);
wk2114_read_subuart_reg ( wk2114 , wk2114 - > it_sub_uart_index , WK2114_S_REG_LSR ) ;
* state = WK2114_WORK_STATE_STOP ;
break ;
}
case WK2114_WORK_STATE_EXTI_PROCESS_GET_FIFO_COUNT :
{
log_e ( " WK2114_WORK_STATE_EXTI_PROCESS GET_FIFO_COUNT ...%d " , wk2114 - > reg_readout ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , 0xFF ) ;
// *state = WK2114_WORK_STATE_IT_SOURCE_GETTING;
HAL_UART_DMAStop ( pWK2114Uart ) ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
wk2114 - > reg_readout = wk2xxx_rcvbuf [ 0 ] ;
// TODO 数量为0的情况处理
// wk2114->reg_readout = wk2xxx_rcvbuf[0];
log_i ( " fifo number : 0x%02X " , wk2114 - > reg_readout ) ;
* state = WK2114_WORK_STATE_EXTI_READ_FIFO_BY_COUNT ;
// osDelay(20);
continue ;
}
case WK2114_WORK_STATE_EXTI_READ_FIFO_BY_COUNT :
{
log_e ( " Read Fifo BUF by fifo , number -> 0x%02X " , wk2114 - > reg_readout ) ;
fifo_readout_count = wk2114 - > reg_readout ;
// 接收数量为0 ,
if ( fifo_readout_count > 16 ) {
p_sub_uart - > cmd = 16 - 1 ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
wk2114_read_fifo ( wk2114 , wk2114 - > it_sub_uart_index , p_sub_uart - > cmd ) ;
fifo_readout_count - = 16 ;
log_w ( " Fifo read out %d, remain %d " , p_sub_uart - > cmd + 1 , fifo_readout_count ) ;
} else {
p_sub_uart - > cmd = fifo_readout_count - 1 ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
wk2114_read_fifo ( wk2114 , wk2114 - > it_sub_uart_index , p_sub_uart - > cmd ) ;
fifo_readout_count = 0 ;
log_w ( " Fifo read cplt .... " ) ;
* state = WK2114_WORK_STATE_EXTI_DEAL_FIFO_READOUT ;
continue ;
}
* state = WK2114_WORK_STATE_EXTI_DEAL_FIFO_READOUT ;
// osDelay(1000);
continue ;
}
case WK2114_WORK_STATE_EXTI_DEAL_FIFO_READOUT :
{
log_e ( " Deal FIFO BUF " ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , 0xFF ) ;
// TODO 判断字节数量
if ( wk2114 - > size_received = = ( p_sub_uart - > cmd + 1 ) )
{
HAL_UART_DMAStop ( pWK2114Uart ) ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
} else {
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
}
log_i ( " deal buf : %d " , wk2114 - > size_received ) ;
log_i ( " deal buf : %02X %02X %02X %02X %02X %02X %02X %02X " ,
wk2xxx_rcvbuf [ 0 ] , wk2xxx_rcvbuf [ 1 ] , wk2xxx_rcvbuf [ 2 ] , wk2xxx_rcvbuf [ 3 ] , wk2xxx_rcvbuf [ 4 ] , wk2xxx_rcvbuf [ 5 ] , wk2xxx_rcvbuf [ 6 ] , wk2xxx_rcvbuf [ 7 ] ) ;
// TODO 接收数量为0 ,FSR判断是否有数据再处理
if ( fifo_readout_count = = 0 ) {
HAL_UART_DMAStop ( pWK2114Uart ) ;
* state = WK2114_WORK_STATE_EXTI_READ_SUB_FSR ;
}
else {
* state = WK2114_WORK_STATE_EXTI_READ_FIFO_BY_COUNT ;
}
continue ;
}
case WK2114_WORK_STATE_EXTI_READ_SUB_FSR :
log_e ( " WK2114_WORK_STATE_EXTI_READ_SUB_FSR FIFO Status .... " ) ;
p_sub_uart - > cmd = WK2114_S_REG_FSR ;
cmd = WK2114_S_REG_FSR ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
wk2114_read_subuart_reg ( wk2114 , wk2114 - > it_sub_uart_index , p_sub_uart - > cmd ) ;
// log_e("WK2114_S_REG_ FSR .... 0x%02X", wk2xxx_rcvbuf[0]);
* state = WK2114_WORK_STATE_EXTI_READ_SUB_LSR ;
break ;
case WK2114_WORK_STATE_EXTI_READ_SUB_LSR :
log_e ( " WK2114_WORK_STATE_EXTI_READ_SUB_FSR FIFO Status .... " ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , 0xFF ) ;
HAL_UART_DMAStop ( pWK2114Uart ) ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
log_d ( " WK2114_S_REG_ FSR .... 0x%02X " , wk2xxx_rcvbuf [ 0 ] ) ;
p_sub_uart - > cmd = WK2114_S_REG_LSR ;
cmd = WK2114_S_REG_LSR ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
wk2114_read_subuart_reg ( wk2114 , wk2114 - > it_sub_uart_index , p_sub_uart - > cmd ) ;
// log_e("WK2114_S_REG_ LSR .... 0x%02X", wk2xxx_rcvbuf[0]);
* state = WK2114_WORK_STATE_EXTI_DEAL_LSR ;
break ;
case WK2114_WORK_STATE_EXTI_DEAL_LSR :
log_e ( " WK2114_WORK_STATE_EXTI_READ_SUB_FSR FIFO Status .... " ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , 0xFF ) ;
HAL_UART_DMAStop ( pWK2114Uart ) ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
log_d ( " WK2114_S_REG_ LSR .... 0x%02X " , wk2xxx_rcvbuf [ 0 ] ) ;
* state = WK2114_WORK_STATE_EXTI_READ_REG ;
break ;
case WK2114_WORK_STATE_EXTI_READ_REG :
log_d ( " read reg for check .... " ) ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
wk2114 - > cmd = WK2114_S_REG_FCR ;
wk2114_read_global_reg ( wk2114 , wk2114 - > cmd ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , 0xFF ) ;
log_d ( " WK2114 subuart FCR .... 0x%02X " , wk2xxx_rcvbuf [ 0 ] ) ;
// // 写入FCR复位
// osSemaphoreRelease(wk2xxx_idle_lockHandle );
// osSemaphoreAcquire(wk2xxx_idle_lockHandle, osWaitForever);
// wk2114->cmd = WK2114_S_REG_FCR ;
// wk2114_write_global_reg( wk2114, wk2114->cmd, 0x0E );
// osSemaphoreAcquire(wk2xxx_idle_lockHandle, 0xFF);
// TODO 写入软复位 , 需要串口中断使能位,否则接收中断没了
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
wk2114 - > cmd = WK2114_G_REG_GRST ;
wk2114_write_global_reg ( wk2114 , wk2114 - > cmd , 1 < < wk2114 - > it_sub_uart_index ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , 0xFF ) ;
// TODO 写入子串口中断类型 接收 错误
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
wk2114 - > reg = WK2114_S_REG_SIER ;
wk2114 - > cmd = WK2114_S_REG_SIFR_MASK_RFTRIG_INT | WK2114_S_REG_SIFR_MASK_RXOVT_INT | WK2114_S_REG_SIFR_MASK_FERR_INT ; ;
wk2114_write_subuart_reg ( wk2114 , wk2114 - > it_sub_uart_index , wk2114 - > reg , wk2114 - > cmd ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , 0xFF ) ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
wk2114 - > cmd = WK2114_G_REG_GENA ;
wk2114_read_global_reg ( wk2114 , wk2114 - > cmd ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , 0xFF ) ;
log_d ( " WK2114 subuart enable .... 0x%02X " , wk2xxx_rcvbuf [ 0 ] ) ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
wk2114 - > cmd = WK2114_G_REG_GIER ;
wk2114_read_global_reg ( wk2114 , wk2114 - > cmd ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , 0xFF ) ;
log_d ( " WK2114 subuart it enable .... 0x%02X " , wk2xxx_rcvbuf [ 1 ] ) ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
wk2114 - > cmd = WK2114_G_REG_GRST ;
wk2114_read_global_reg ( wk2114 , wk2114 - > cmd ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , 0xFF ) ;
log_d ( " WK2114 subuart GRST .... 0x%02X " , wk2xxx_rcvbuf [ 2 ] ) ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , osWaitForever ) ;
wk2114 - > cmd = WK2114_S_REG_SIER ;
wk2114_read_subuart_reg ( wk2114 , wk2114 - > it_sub_uart_index , wk2114 - > cmd ) ;
osSemaphoreAcquire ( wk2xxx_idle_lockHandle , 0xFF ) ;
log_d ( " WK2114 subuart it type .... 0x%02X " , wk2xxx_rcvbuf [ 3 ] ) ; // 8B 发送触点中断确实被取消了
HAL_UART_DMAStop ( pWK2114Uart ) ;
osSemaphoreRelease ( wk2xxx_idle_lockHandle ) ;
// 子串口软复位
* state = WK2114_WORK_STATE_OK ;
break ;
case WK2114_WORK_STATE_ERROR :
log_e ( " WK2114_WORK STATE ERROR .... " ) ;
// TODO 重设Baud
// HAL_UART_DMAStop(pWK2114Uart);
osDelay ( 500 ) ;
// *state = WK2114_WORK_STATE_WAIT;
break ;
case WK2114_WORK_STATE_STOP :
log_e ( " WK2114_WORK_STATE STOP .... " ) ;
HAL_UART_DMAStop ( pWK2114Uart ) ;
* state = WK2114_WORK_STATE_WAIT ;
break ;
default :
break ;
}
osDelay ( 1 ) ;
}
}
void wk2114_FERR_INT_Handler ( WK2114_TypeDef * wk2114 , uint8_t it_type )
{
}
void wk2114_RXOVT_INT_Handler ( WK2114_TypeDef * wk2114 , uint8_t it_type )
{
}
void wk2114_RFTRIG_INT_Handler ( WK2114_TypeDef * wk2114 , uint8_t it_type )
{
}
void wk2114_TFEMPTY_INT_Handler ( WK2114_TypeDef * wk2114 , uint8_t it_type )
{
}
void wk2114_TFTRIG_INT_Handler ( WK2114_TypeDef * wk2114 , uint8_t it_type )
{
}
// void WK2114_Task2(void * argument )
// {
// WK2114_WORK_STATE_TypeDef *state = argument;
// static int err_con = 0;
// static int state_ok_count = 0;
// static uint8_t cmd;
// static uint8_t sub_uart_index;
// static uint8_t evt_flag = 0;
// static uint32_t fifo_readout_count = 0;
// static uint32_t subuart_sendqueue_count = 0;
// static WK2114_Sub_Uart_TypeDef *p_sub_uart;
// for ( ; ; )
// {
// // log_i( "WK2114 WORK .... %d", *state );
// switch (*state)
// {
// case WK2114_WORK_STATE_WAIT:
// log_i( "WK2114_wait .... %d" );
// osDelay(100);
// break;
// case WK2114_WORK_STATE_START:
// err_con = 0;
// wk2114->timebase = osKernelGetTickCount();
// // wk2114_set_baud(wk2114);
// *state = WK2114_WORK_STATE_SET_BAUD;
// continue;
// case WK2114_WORK_STATE_SET_BAUD:
// {
// log_i( "WK2114_WORK_STATE_SET_BAUD .... %d", wk2114->flag & WK2114_G_FLAG_MASK_SENDING);
// wk2114->timebase = osKernelGetTickCount();
// HAL_GPIO_WritePin(WK2XXX_IRQ_GPIO_PORT, WK2XXX_RST_PIN,GPIO_PIN_RESET);
// osDelay(10);
// HAL_GPIO_WritePin(WK2XXX_IRQ_GPIO_PORT, WK2XXX_RST_PIN,GPIO_PIN_SET);
// wk2114_set_baud(wk2114);
// osDelay(2);
// wk2114_set_baud(wk2114);
// osDelay(2);
// wk2114_set_baud(wk2114);
// osDelay(2);
// *state = WK2114_WORK_STATE_ADD_SUB_UART;
// continue;
// }
// case WK2114_WORK_STATE_ADD_SUB_UART:
// {
// // log_i( "WK2114_WORK_STATE_SUB_UART_REGISTER Init .... ");
// if ( (wk2114->flag & WK2114_G_FLAG_MASK_SENDING) == 0 )
// {
// err_con = 0;
// wk2114->timebase = osKernelGetTickCount();
// WK2114_Add_Sub_Uart( wk2114 );
// *state = WK2114_WORK_STATE_ADD_SUB_UART_OK;
// osDelay(2);
// continue;;
// }
// break;
// }
// case WK2114_WORK_STATE_ADD_SUB_UART_OK:
// {
// // log_i( "WK2114_WORK_STATE_SUB_UART_REGISTER Init .... ");
// if ( osMessageQueueGetCount(wk2114->cmd_queue) > 0 && (wk2114->flag & WK2114_G_FLAG_MASK_SENDING) == 0)
// {
// wk2114_send(wk2114);
// // osDelay(1);
// }
// if ( osMessageQueueGetCount(wk2114->cmd_queue) == 0 && (wk2114->flag & WK2114_G_FLAG_MASK_SENDING) == 0)
// {
// *state=WK2114_WORK_STATE_OK;
// continue;
// }
// break;
// }
// case WK2114_WORK_STATE_OK:
// {
// log_i( "WK2114_WORK_STATE_OK -->> wait exti ... " );
// // 等待外部中断
// uint32_t evt_flag = osEventFlagsWait(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IT_SOURCE_SENDING,0, portMAX_DELAY);
// if (evt_flag &MODULE_WK2114_EVENT_EXTI_IT_SOURCE_SENDING != 0) {
// log_d( " WK2114 IRQ exti happened ..... " );
// *state= WK2114_WORK_STATE_EXTI_IT_SOURCE_GETTING;
// }
// // 等待子串口的size>0
// continue;
// }
// // 外部中断
// case WK2114_WORK_STATE_EXTI_IT_SOURCE_GETTING:
// {
// log_i( " IT_SOURCE getting .... " );
// osEventFlagsClear(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IT_SOURCE_SENDING);
// err_con = 0;
// wk2114->size_received=0;
// // wk2114->flag|=WK2114_G_FLAG_MASK_INTER;
// wk2114->send_buf[0] = (WK2114_CMD_READ_REG<<6)+WK2114_G_REG_GIFR;
// wk2114->send_buf[1] = 0x00;
// // log_i( " IT_SOURCE SENDING.... sendbuf %02X " , wk2114->send_buf[0] );
// // // 开启接收中断
// memset(wk2xxx_rcvbuf, 0, 1024);
// __HAL_UART_ENABLE_IT(pWK2114Uart, UART_IT_IDLE);
// HAL_UART_Receive_DMA(pWK2114Uart, wk2xxx_rcvbuf, 1024);
// // HAL_UARTEx_ReceiveToIdle_DMA( pWK2114Uart, wk2xxx_rcvbuf, 1024);
// wk2114->send_fun(wk2114->send_class, wk2114->send_buf , 2);
// // wk2114_read_reg( wk2114, WK2114_G_REG_GIFR );
// p_sub_uart =NULL;
// *state = WK2114_WORK_STATE_EXTI_IT_SOURCE_RECEIVE ;
// continue;
// }
// case WK2114_WORK_STATE_EXTI_IT_SOURCE_RECEIVE:
// {
// evt_flag = osEventFlagsWait(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IT_SOURCE_RECEIVED,0, 0x200);
// if (evt_flag & MODULE_WK2114_EVENT_EXTI_IT_SOURCE_RECEIVED == 0) {
// log_i( " Get It SOurce ..... TimeOut " );
// *state = WK2114_WORK_STATE_ERROR;
// continue;
// }
// // log_i(" it source reg >>>>>>>>>>>>>>> %02X ", wk2xxx_rcvbuf[0] );
// // 处理接收到的中断源数据
// cmd = wk2114->send_buf[0]; // 上次发送buf第一位 send_buf[0]
// wk2114->send_buf[0] = 0;
// if( wk2114->size_received == 1 ){
// HAL_UART_DMAStop(pWK2114Uart);
// }
// if( !WK2114_CMD_IS_READ(cmd) ){
// *state=WK2114_WORK_STATE_ERROR;
// }
// if ( !WK2114_CMD_IS_REG(cmd)) {
// *state=WK2114_WORK_STATE_ERROR;
// }
// if(!WK2114_REG_IS_GLOBAL(cmd)){
// *state=WK2114_WORK_STATE_ERROR;
// }
// if(wk2114->cmd!=0xff){
// *state=WK2114_WORK_STATE_ERROR;
// }
// wk2114->cmd=cmd;
// wk2114->reg= wk2xxx_rcvbuf[0];
// wk2114->it_sub_uart_index = wk2114->reg&0x03 -1;
// p_sub_uart = wk2114->sub_uart[wk2114->it_sub_uart_index];
// // wk2114->it_sub_uart = wk2114->sub_uart[wk2114->it_sub_uart_index];
// if( (wk2114->reg&0x0F)==0 ) {
// *state = WK2114_WORK_STATE_OK;
// }else{
// wk2114->it_sub_uart_index = wk2114->reg&0x03 -1;
// p_sub_uart = wk2114->sub_uart[wk2114->it_sub_uart_index];
// // wk2114->it_sub_uart = wk2114->sub_uart[wk2114->it_sub_uart_index];
// *state = WK2114_WORK_STATE_EXTI_IT_TYPE_GETTING;
// }
// continue;
// }
// case WK2114_WORK_STATE_EXTI_IT_TYPE_GETTING:
// {
// log_i( "_IT_TYPE getting .... last rcv it_source --> subuart 0x%02X" , wk2114->reg);
// osEventFlagsClear(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IT_SOURCE_RECEIVED );
// wk2114->send_buf[0] = (WK2114_CMD_READ_REG<<6)
// + (wk2114->it_sub_uart_index<<4)
// + WK2114_S_REG_SIFR ;
// wk2114->send_buf[1] = 0x00;
// // // 开启接收中断
// memset(wk2xxx_rcvbuf, 0, 1024);
// __HAL_UART_ENABLE_IT(pWK2114Uart, UART_IT_IDLE );
// HAL_UART_Receive_DMA(pWK2114Uart, wk2xxx_rcvbuf, 1024);
// // HAL_UARTEx_ReceiveToIdle_DMA( pWK2114Uart, wk2xxx_rcvbuf, 1024);
// // wk2114_read_reg(wk2114, WK2114_BUILD_SUB_REG( wk2114->it_sub_uart_index, WK2114_S_REG_SIFR) );
// wk2114->send_fun( wk2114->send_class, wk2114->send_buf , 2 );
// *state = WK2114_WORK_STATE_EXTI_IT_TYPE_RECEIVE;
// continue;
// }
// case WK2114_WORK_STATE_EXTI_IT_TYPE_RECEIVE:
// {
// log_d( "_IT_TYPE _RECEIVE .... " );
// evt_flag = osEventFlagsWait( wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IT_TYPE_RECEIVED, 0, 0x800 );
// if ( (evt_flag & MODULE_WK2114_EVENT_EXTI_IT_TYPE_RECEIVED) == 0 ) {
// log_w( " GET IT TYPE ..... TimeOut ..... " );
// *state = WK2114_WORK_STATE_ERROR;
// continue;
// }
// // if (p_sub_uart==NULL ) {
// // log_w( " GET IT TYPE ..... p_sub_uart==NULL " );
// // *state = WK2114_WORK_STATE_ERROR;
// // }
// // log_d("_IT_TYPE reg >>>>>>>>>>>>>>> cmd 0x%02X ittype 0x%02X ", wk2114->send_buf[0], wk2xxx_rcvbuf[0] );
// // cmd = wk2114->send_buf[0]; // 上次发送内容第一位 send_buf[0]
// // wk2114->send_buf[0] = 0;
// // p_sub_uart->cmd = wk2114->send_buf[0];
// // p_sub_uart->reg = wk2xxx_rcvbuf[0];
// // log_d("_IT_TYPE reg >>>>>>>>>>>>>>> cmd 0x%02X ittype 0x%02X cmd 0x%02X", wk2114->send_buf[0], wk2xxx_rcvbuf[0] ,cmd);
// // if( wk2114->size_received == 1 ){
// // HAL_UART_DMAStop(pWK2114Uart);
// // }
// // if( !WK2114_CMD_IS_READ(cmd) ){
// // *state=WK2114_WORK_STATE_ERROR;
// // }
// // if ( !WK2114_CMD_IS_REG(cmd) ) {
// // *state=WK2114_WORK_STATE_ERROR;
// // }
// // if( WK2114_REG_IS_GLOBAL(cmd) ){
// // *state=WK2114_WORK_STATE_ERROR;
// // }
// // if( wk2114->cmd!=0xff ){
// // *state=WK2114_WORK_STATE_ERROR;
// // }
// *state = WK2114_WORK_STATE_EXTI_PROCESS;
// continue;
// }
// case WK2114_WORK_STATE_EXTI_PROCESS:
// {
// log_d("_IT_ PROCESS .... p_sub_uart->reg (it type) 0x%02X p_sub_uart->cmd 0x%02X",
// p_sub_uart->reg, p_sub_uart->cmd);
// if (p_sub_uart==NULL ) {
// *state = WK2114_WORK_STATE_ERROR;
// }
// // if ( (p_sub_uart->flag&WK2114_S_UART_FLAG_MASK_PAGE_D)==0 ) {
// // *state = WK2114_WORK_STATE_ERROR;
// // }
// // WK2114_S_REG_SIFR 子串口中断标志寄存器
// // if(WK2114_CMD_GET_ADDR(p_sub_uart->cmd)!=WK2114_BUILD_SUB_REG(wk2114->it_sub_uart_index,WK2114_S_REG_SIFR)){
// // *state=WK2114_WORK_STATE_ERROR;
// // }
// // log_d("_IT_ type .... %d state %d", p_sub_uart->reg,*state );
// // // 接收错误中断
// // if( (p_sub_uart->reg&WK2114_S_REG_SIFR_MASK_FERR_INT)!=0 ){
// // *state = WK2114_WORK_STATE_EXTI_PROCESS_FERR_INT;
// // continue;
// // }
// // // 接收字节超时中断 读取字节数
// // if( (p_sub_uart->reg&WK2114_S_REG_SIFR_MASK_RXOVT_INT)!=0 ){
// // *state = WK2114_WORK_STATE_EXTI_PROCESS_RXOVT_INT;
// // continue;
// // }
// // // 接收FIFO触点中断
// // if( (p_sub_uart->reg&WK2114_S_REG_SIFR_MASK_RFTRIG_INT)!=0 ){
// // *state = WK2114_WORK_STATE_EXTI_PROCESS_RFTRIG_INT;
// // continue;
// // }
// // // FIFO触点发送为空中断 发送子串口队列
// // if( (p_sub_uart->reg&WK2114_S_REG_SIFR_MASK_TFEMPTY_INT)!=0
// // && wk2114->sub_uart[wk2114->it_sub_uart_index]->send_buf_p==0xffffffff ) {
// // *state = WK2114_WORK_STATE_EXTI_PROCESS_TFEMPTY_INT;
// // continue;
// // }
// // // 发送FIFO触点中断 发送同一个字符串
// // // if((p_sub_uart->reg&WK2114_S_REG_SIFR_MASK_TFTRIG_INT)!=0){
// // if( (p_sub_uart->reg&WK2114_S_REG_SIFR_MASK_TFTRIG_INT)!=0 ){
// // log_d("_IT_ type .... %d", p_sub_uart->reg );
// // // *state = WK2114_WORK_STATE_EXTI_PROCESS_TFTRIG_INT;
// // continue;
// // }
// continue;
// }
// case WK2114_WORK_STATE_EXTI_PROCESS_RXOVT_INT:
// {
// log_w(" Rcv Fifo Byte Overtime Int .... ");
// wk2114->send_buf[0] = (WK2114_CMD_READ_REG<<6)
// + (wk2114->it_sub_uart_index<<4)
// + WK2114_S_REG_RFCNT ;
// wk2114->send_buf[1] = 0x00;
// // // 开启接收中断
// __HAL_UART_ENABLE_IT(pWK2114Uart, UART_IT_IDLE );
// HAL_UART_Receive_DMA(pWK2114Uart, wk2xxx_rcvbuf, 1024);
// // HAL_UARTEx_ReceiveToIdle_DMA( pWK2114Uart, wk2xxx_rcvbuf, 1024);
// // wk2114_read_reg( wk2114, WK2114_BUILD_SUB_REG( wk2114->it_sub_uart_index, WK2114_S_REG_RFCNT) );
// wk2114->send_fun( wk2114->send_class, wk2114->send_buf , 2 );
// *state = WK2114_WORK_STATE_EXTI_PROCESS_GET_FIFO_COUNT;
// continue;
// }
// case WK2114_WORK_STATE_EXTI_PROCESS_RFTRIG_INT:
// log_i("Rcv Fifo Trigger .... read rcv fifo count ");
// // // 开启接收中断
// __HAL_UART_ENABLE_IT(pWK2114Uart, UART_IT_IDLE );
// HAL_UART_Receive_DMA(pWK2114Uart, wk2xxx_rcvbuf, 1024);
// // HAL_UARTEx_ReceiveToIdle_DMA( pWK2114Uart, wk2xxx_rcvbuf, 1024);
// wk2114_read_fifo( wk2114, wk2114->it_sub_uart_index, 128-1 );
// *state = WK2114_WORK_STATE_EXTI_READ_FIFO_BY_COUNT;
// continue;
// case WK2114_WORK_STATE_EXTI_PROCESS_TFEMPTY_INT:
// log_w("TF Fifo Empty Int.... ");
// if((p_sub_uart->reg&WK2114_S_REG_SIFR_MASK_TFEMPTY_INT)!=0 && p_sub_uart->send_buf_p==0xffffffff){
// log_w(" send fifo trigger == 0");
// p_sub_uart->send_buf_p=0;
// uint8_t queue_count = osMessageQueueGetCount(p_sub_uart->send_queue);
// // 判断 子串口的 发送队列是否为空
// // p_de=queue_get_de_index(&p_sub_uart->send_queue);
// // if(p_de>=0){
// if (osMessageQueueGetCount(p_sub_uart->send_queue) >= 0){
// if(p_sub_uart->send_record[queue_count-1].size-p_sub_uart->send_buf_p <= 256){
// struct wk2114_send_record record;
// osMessageQueueGet(p_sub_uart->send_queue,(void*) &record,sizeof(record),portMAX_DELAY);
// wk2114_write_fifo(wk2114,sub_uart_index,record.p_data[p_sub_uart->send_buf_p],record.size-p_sub_uart->send_buf_p-1);
// // wk2114_write_fifo(wk2114,i,&p_sub_uart->send_record[p_de].p_data[p_sub_uart->send_buf_p],p_sub_uart->send_record[p_de].size-p_sub_uart->send_buf_p-1);
// p_sub_uart->send_buf_p=0xffffffff;
// // queue_dequeue(&p_sub_uart->send_queue,NULL);
// }
// else{ // buff 大于256, 发送 256, 记录发送位置 p_sub_uart->send_buf_p
// wk2114_write_fifo(wk2114,sub_uart_index,&p_sub_uart->send_record[queue_count-1].p_data[p_sub_uart->send_buf_p],255);
// wk2114_sub_uart_set_inter(p_sub_uart,WK2114_S_REG_SIFR_MASK_RFTRIG_INT|WK2114_S_REG_SIFR_MASK_RXOVT_INT|WK2114_S_REG_SIFR_MASK_TFTRIG_INT|WK2114_S_REG_SIFR_MASK_TFEMPTY_INT|WK2114_S_REG_SIFR_MASK_FERR_INT);
// p_sub_uart->send_buf_p+=256;
// }
// }
// else{
// // 子串口队列无发送任务,取消发送出点为空中断
// wk2114_sub_uart_set_inter(p_sub_uart,WK2114_S_REG_SIFR_MASK_RFTRIG_INT|WK2114_S_REG_SIFR_MASK_RXOVT_INT|WK2114_S_REG_SIFR_MASK_FERR_INT);
// *state = WK2114_WORK_STATE_STOP;
// }
// }
// continue;
// case WK2114_WORK_STATE_EXTI_PROCESS_TFTRIG_INT:
// log_w("Trans Fifo Trigger Int.... ");
// subuart_sendqueue_count = osMessageQueueGetCount(p_sub_uart->send_queue);
// if (subuart_sendqueue_count >= 0){
// if(p_sub_uart->send_buf_p >= p_sub_uart->send_record[subuart_sendqueue_count-1].size){
// wk2114_sub_uart_set_inter(p_sub_uart,WK2114_S_REG_SIFR_MASK_RFTRIG_INT|WK2114_S_REG_SIFR_MASK_RXOVT_INT|WK2114_S_REG_SIFR_MASK_TFEMPTY_INT|WK2114_S_REG_SIFR_MASK_FERR_INT);
// p_sub_uart->send_buf_p=0xffffffff;
// return;
// }
// if(p_sub_uart->send_record[subuart_sendqueue_count-1].size-p_sub_uart->send_buf_p <= 128){
// struct wk2114_send_record record;
// osMessageQueueGet(p_sub_uart->send_queue,(void*) &record,sizeof(record),portMAX_DELAY);
// wk2114_write_fifo(wk2114,sub_uart_index,record.p_data[p_sub_uart->send_buf_p],record.size-p_sub_uart->send_buf_p-1);
// // wk2114_write_fifo(wk2114,i,&p_sub_uart->send_record[p_de].p_data[p_sub_uart->send_buf_p],p_sub_uart->send_record[p_de].size-p_sub_uart->send_buf_p-1);
// p_sub_uart->send_buf_p=0xffffffff;
// wk2114_sub_uart_set_inter(p_sub_uart,WK2114_S_REG_SIFR_MASK_RFTRIG_INT|WK2114_S_REG_SIFR_MASK_RXOVT_INT|WK2114_S_REG_SIFR_MASK_TFEMPTY_INT|WK2114_S_REG_SIFR_MASK_FERR_INT);
// // queue_dequeue(&p_sub_uart->send_queue,NULL);
// }
// else{
// wk2114_write_fifo(wk2114,sub_uart_index,&p_sub_uart->send_record[subuart_sendqueue_count-1].p_data[p_sub_uart->send_buf_p],127);
// p_sub_uart->send_buf_p+=128;
// }
// }
// else{
// wk2114_sub_uart_set_inter(p_sub_uart,WK2114_S_REG_SIFR_MASK_RFTRIG_INT|WK2114_S_REG_SIFR_MASK_RXOVT_INT|WK2114_S_REG_SIFR_MASK_FERR_INT);
// *state = WK2114_WORK_STATE_STOP;
// }
// break;
// case WK2114_WORK_STATE_EXTI_PROCESS_FERR_INT:
// log_e("Fifo Error .... ");
// __HAL_UART_ENABLE_IT(pWK2114Uart, UART_IT_IDLE );
// HAL_UART_Receive_DMA(pWK2114Uart, &wk2114->reg_readout, 1 );
// // HAL_UARTEx_ReceiveToIdle_DMA( pWK2114Uart, wk2xxx_rcvbuf, 1024);
// wk2114_read_subuart_reg( wk2114, wk2114->it_sub_uart_index, WK2114_S_REG_LSR );
// *state = WK2114_WORK_STATE_STOP;
// break;
// case WK2114_WORK_STATE_EXTI_PROCESS_GET_FIFO_COUNT:
// {
// log_e("Read Fifo BUF .... ");
// evt_flag = osEventFlagsWait(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_RCV_FIFO_COUNT_RECEIVED,0, 0x200);
// if ( (evt_flag & MODULE_WK2114_EVENT_EXTI_IT_TYPE_RECEIVED) == 0) {
// log_i( " GET _FIFO_COUNT ..... TimeOut " );
// *state = WK2114_WORK_STATE_ERROR;
// continue;
// }
// log_e(" _FIFO_COUNT .... %d ", wk2xxx_rcvbuf[0] );
// cmd = wk2114->send_buf[0]; // 上次发送内容第一位 send_buf[0]
// wk2114->send_buf[0] = 0;
// if( wk2114->size_received == 1 ){
// HAL_UART_DMAStop(pWK2114Uart);
// }
// if( !WK2114_CMD_IS_READ(cmd) ){
// *state=WK2114_WORK_STATE_ERROR;
// }
// if ( !WK2114_CMD_IS_REG(cmd)) {
// *state=WK2114_WORK_STATE_ERROR;
// }
// if(WK2114_REG_IS_GLOBAL(cmd)){
// *state=WK2114_WORK_STATE_ERROR;
// }
// if(wk2114->cmd!=0xff){
// *state=WK2114_WORK_STATE_ERROR;
// }
// wk2114->it_sub_uart->cmd = cmd;
// wk2114->it_sub_uart->reg = wk2xxx_rcvbuf[0];
// fifo_readout_count = wk2114->it_sub_uart->reg;
// memset( wk2xxx_rcvbuf, 0, 1024 );
// osEventFlagsClear(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_RCV_FIFO_COUNT_RECEIVED);
// *state = WK2114_WORK_STATE_EXTI_READ_FIFO_BY_COUNT;
// continue;
// }
// case WK2114_WORK_STATE_EXTI_READ_FIFO_BY_COUNT:
// log_e( "Read Fifo BUF _BY_COUNT .... " );
// wk2114->send_buf[1] = 0x00;
// // memset( wk2xxx_rcvbuf, 0, 1024 );
// __HAL_UART_ENABLE_IT(pWK2114Uart, UART_IT_IDLE );
// HAL_UART_Receive_DMA(pWK2114Uart, wk2xxx_rcvbuf, 1024);
// if (fifo_readout_count > 16 ) {
// wk2114->send_buf[0] = (WK2114_CMD_READ_FIFO<<6)
// + (wk2114->it_sub_uart_index<<4)
// + (16-1) ;
// fifo_readout_count -= 16;
// log_w( "Fifo read out %d", fifo_readout_count );
// } else{
// wk2114->send_buf[0] = (WK2114_CMD_READ_FIFO<<6)
// + (wk2114->it_sub_uart_index<<4)
// + (fifo_readout_count-1) ;
// fifo_readout_count = 0;
// log_w( "Fifo read out send last byte" );
// }
// // wk2114_read_fifo( wk2114, wk2114->it_sub_uart_index, wk2114->reg_readout );
// wk2114->send_fun( wk2114->send_class, wk2114->send_buf , 2 );
// case WK2114_WORK_STATE_EXTI_READ_FIFO_DEAL:
// {
// log_e( "Read Fifo BUF ... Deal FIFO BUF " );
// evt_flag = osEventFlagsWait(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_RCV_FIFO_BUF_RECEIVED,0, 0x200);
// if ( (evt_flag & MODULE_WK2114_EVENT_EXTI_RCV_FIFO_BUF_RECEIVED) == 0) {
// log_i( " GET _FIFO _BUF _RECEIVED ... TimeOut ... " );
// *state = WK2114_WORK_STATE_ERROR;
// continue;
// }
// // TODO deal buf, 数量大于约定, 没有数据了,回调
// log_i(" deal buf : %d " , wk2114->size_received);
// log_i(" deal buf : %02X %02X %02X %02X %02X %02X %02X %02X" ,
// wk2xxx_rcvbuf[0], wk2xxx_rcvbuf[1], wk2xxx_rcvbuf[2], wk2xxx_rcvbuf[3], wk2xxx_rcvbuf[4], wk2xxx_rcvbuf[5], wk2xxx_rcvbuf[6], wk2xxx_rcvbuf[7] );
// if (fifo_readout_count == 0 ) {
// *state = WK2114_WORK_STATE_STOP;
// }
// else{
// *state = WK2114_WORK_STATE_EXTI_READ_FIFO_BY_COUNT;
// }
// osEventFlagsClear(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_RCV_FIFO_BUF_RECEIVED );
// continue;
// }
// case WK2114_WORK_STATE_ERROR:
// log_e("WK2114_WORK STATE ERROR .... ");
// HAL_UART_DMAStop(pWK2114Uart);
// *state = WK2114_WORK_STATE_WAIT;
// break;
// case WK2114_WORK_STATE_STOP:
// log_e("WK2114_WORK STATE STOP ... ");
// HAL_UART_DMAStop(pWK2114Uart);
// *state = WK2114_WORK_STATE_OK;
// continue;
// default:
// break;
// }
// osDelay(1);
// }
// }
// /**
// * @brief wk2114中断回调
// * @note 不要将此函数放入中断中或比其他回调函数优先级更高的任务中
// * @param wk2114 WK2114_TypeDef 结构指针
// * 外部中断,
// */
// void wk2114_inter_callback(WK2114_TypeDef *wk2114)
// {
// // if( (osEventFlagsGet(wk2114EventHandle) & MODULE_WK2114_EVENT_EXTI_IT_SOURCE_SENDING) !=0){
// // return;
// // }
// osEventFlagsSet(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IT_SOURCE_SENDING);
// // log_i( " exti ..... %d ",osKernelGetTickCount() );
// }
// void wk2114_idle_callback(WK2114_TypeDef *wk2114, uint8_t *buf, uint32_t size)
// {
// // log_w( " wk2114_idle_callback .... %d ", wk2114->state );
// wk2114->size_received = size;
// switch (wk2114->state)
// {
// // case WK2114_WORK_STATE_EXTI_IT_SOURCE_GETTING:
// case WK2114_WORK_STATE_EXTI_IT_SOURCE_RECEIVE:
// osEventFlagsSet( wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IT_SOURCE_RECEIVED );
// return;
// // case WK2114_WORK_STATE_EXTI_IT_TYPE_GETTING:
// case WK2114_WORK_STATE_EXTI_IT_TYPE_RECEIVE:
// osEventFlagsSet( wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IT_TYPE_RECEIVED );
// log_i( " it type idle ... " );
// return;
// case WK2114_WORK_STATE_EXTI_PROCESS_GET_FIFO_COUNT:
// osEventFlagsSet( wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_RCV_FIFO_COUNT_RECEIVED );
// return;
// case WK2114_WORK_STATE_EXTI_READ_FIFO_DEAL:
// osEventFlagsSet( wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_RCV_FIFO_BUF_RECEIVED );
// return;
// default:
// break;
// }
// return;
// }
// void wk2114_get_it_type_by_it_source(WK2114_TypeDef *wk2114 )
// {
// // TODO 中断源同时为多个 ?? 先依序发送出去
// // log_i("get_it_type_by_it_source....it_source -> %d", wk2114->it_source );
// // if(WK2114_CMD_GET_ADDR(wk2114->cmd)==WK2114_G_REG_GIFR){ // 去读子串口中断类型
// // wk2114->cmd=0;
// // if((wk2114->it_source&WK2114_G_REG_GIFR_MASK_UT1INT)!=0 && wk2114->sub_uart[WK2114_S_UART_1]!=NULL){
// // wk2114_read_reg(wk2114,WK2114_BUILD_SUB_REG(WK2114_S_UART_1,WK2114_S_REG_SIFR));
// // }
// // if((wk2114->it_source&WK2114_G_REG_GIFR_MASK_UT2INT)!=0 && wk2114->sub_uart[WK2114_S_UART_2]!=NULL){
// // wk2114_read_reg(wk2114,WK2114_BUILD_SUB_REG(WK2114_S_UART_2,WK2114_S_REG_SIFR));
// // }
// // if((wk2114->it_source&WK2114_G_REG_GIFR_MASK_UT3INT)!=0 && wk2114->sub_uart[WK2114_S_UART_3]!=NULL){
// // wk2114_read_reg(wk2114,WK2114_BUILD_SUB_REG(WK2114_S_UART_3,WK2114_S_REG_SIFR));
// // }
// // if((wk2114->it_source&WK2114_G_REG_GIFR_MASK_UT4INT)!=0 && wk2114->sub_uart[WK2114_S_UART_4]!=NULL){
// // wk2114_read_reg(wk2114,WK2114_BUILD_SUB_REG(WK2114_S_UART_4,WK2114_S_REG_SIFR));
// // }
// // }
// // while (osMessageQueueGetCount(wk2114->cmd_queue) > 0)
// // {
// // wk2114_send(wk2114);
// // }
// // return;
// }
// void wk2114_process_by_it_type(WK2114_TypeDef *wk2114, uint8_t it_type)
// {
// int sub_uart_index ;
// int p_de;
// log_i( " wk2114_process_by_it_type .... ");
// WK2114_Sub_Uart_TypeDef *p_sub_uart;
// sub_uart_index = WK2114_CMD_GET_SUB_UART(wk2114->cmd);
// p_sub_uart = wk2114->sub_uart[WK2114_CMD_GET_SUB_UART(wk2114->cmd)];
// // 判断中断类型
// if (p_sub_uart!=NULL ) return ;
// if ((p_sub_uart->flag&WK2114_S_UART_FLAG_MASK_PAGE_D)==0) return ;
// // WK2114_S_REG_SIFR 子串口中断标志寄存器
// if(WK2114_CMD_GET_ADDR(p_sub_uart->cmd)==WK2114_BUILD_SUB_REG(sub_uart_index,WK2114_S_REG_SIFR)){
// p_sub_uart->cmd=0;
// // 接收超时
// if( (p_sub_uart->reg&WK2114_S_REG_SIFR_MASK_RXOVT_INT)!=0 ){
// log_i(" 接收FIFO overtime it ... ");
// p_sub_uart->flag|=WK2114_S_UART_FLAG_MASK_IDLE;
// wk2114_read_reg(wk2114,WK2114_BUILD_SUB_REG(sub_uart_index,WK2114_S_REG_RFCNT));
// }
// // 接收FIFO触点中断
// if((p_sub_uart->reg&WK2114_S_REG_SIFR_MASK_RFTRIG_INT)!=0){
// log_i(" 接收FIFO触点中断 ... ");
// wk2114_read_fifo(wk2114, wk2114->cmd, 126 );
// }
// // 发送FIFO空中断 , 判断子串口发送队列,将子串口send_buf 发送出去
// if((p_sub_uart->reg&WK2114_S_REG_SIFR_MASK_TFEMPTY_INT)!=0 && p_sub_uart->send_buf_p==0xffffffff){
// log_w(" send fifo trigger == 0");
// p_sub_uart->send_buf_p=0;
// // 判断 子串口的 发送队列是否为空
// // p_de=queue_get_de_index(&p_sub_uart->send_queue);
// // if(p_de>=0){
// if (osMessageQueueGetCount(p_sub_uart->send_queue) >= 0){
// if(p_sub_uart->send_record[p_de].size-p_sub_uart->send_buf_p <= 256){
// struct wk2114_send_record record;
// osMessageQueueGet(p_sub_uart->send_queue,(void*) &record,sizeof(record),portMAX_DELAY);
// wk2114_write_fifo(wk2114,sub_uart_index,record.p_data[p_sub_uart->send_buf_p],record.size-p_sub_uart->send_buf_p-1);
// // wk2114_write_fifo(wk2114,i,&p_sub_uart->send_record[p_de].p_data[p_sub_uart->send_buf_p],p_sub_uart->send_record[p_de].size-p_sub_uart->send_buf_p-1);
// p_sub_uart->send_buf_p=0xffffffff;
// // queue_dequeue(&p_sub_uart->send_queue,NULL);
// }
// else{ // buff 大于256, 发送 256, 记录发送位置 p_sub_uart->send_buf_p
// wk2114_write_fifo(wk2114,sub_uart_index,&p_sub_uart->send_record[p_de].p_data[p_sub_uart->send_buf_p],255);
// wk2114_sub_uart_set_inter(p_sub_uart,WK2114_S_REG_SIFR_MASK_RFTRIG_INT|WK2114_S_REG_SIFR_MASK_RXOVT_INT|WK2114_S_REG_SIFR_MASK_TFTRIG_INT|WK2114_S_REG_SIFR_MASK_TFEMPTY_INT|WK2114_S_REG_SIFR_MASK_FERR_INT);
// p_sub_uart->send_buf_p+=256;
// }
// }
// else{
// // 子串口队列无发送任务,取消发送出点为空中断
// wk2114_sub_uart_set_inter(p_sub_uart,WK2114_S_REG_SIFR_MASK_RFTRIG_INT|WK2114_S_REG_SIFR_MASK_RXOVT_INT|WK2114_S_REG_SIFR_MASK_FERR_INT);
// }
// }
// // 发送FIFO触点中断, 装载子串口发送队列 send_buf
// if((p_sub_uart->reg&WK2114_S_REG_SIFR_MASK_TFTRIG_INT)!=0){
// log_w(" send fifo trigger == 1");
// // p_de=queue_get_de_index(&p_sub_uart->send_queue);
// // if(p_de>=0){
// if (osMessageQueueGetCount(p_sub_uart->send_queue) >= 0){
// if(p_sub_uart->send_buf_p >= p_sub_uart->send_record[p_de].size){
// wk2114_sub_uart_set_inter(p_sub_uart,WK2114_S_REG_SIFR_MASK_RFTRIG_INT|WK2114_S_REG_SIFR_MASK_RXOVT_INT|WK2114_S_REG_SIFR_MASK_TFEMPTY_INT|WK2114_S_REG_SIFR_MASK_FERR_INT);
// p_sub_uart->send_buf_p=0xffffffff;
// return;
// }
// if(p_sub_uart->send_record[p_de].size-p_sub_uart->send_buf_p <= 128){
// struct wk2114_send_record record;
// osMessageQueueGet(p_sub_uart->send_queue,(void*) &record,sizeof(record),portMAX_DELAY);
// wk2114_write_fifo(wk2114,sub_uart_index,record.p_data[p_sub_uart->send_buf_p],record.size-p_sub_uart->send_buf_p-1);
// // wk2114_write_fifo(wk2114,i,&p_sub_uart->send_record[p_de].p_data[p_sub_uart->send_buf_p],p_sub_uart->send_record[p_de].size-p_sub_uart->send_buf_p-1);
// p_sub_uart->send_buf_p=0xffffffff;
// wk2114_sub_uart_set_inter(p_sub_uart,WK2114_S_REG_SIFR_MASK_RFTRIG_INT|WK2114_S_REG_SIFR_MASK_RXOVT_INT|WK2114_S_REG_SIFR_MASK_TFEMPTY_INT|WK2114_S_REG_SIFR_MASK_FERR_INT);
// // queue_dequeue(&p_sub_uart->send_queue,NULL);
// }
// else{
// wk2114_write_fifo(wk2114,sub_uart_index,&p_sub_uart->send_record[p_de].p_data[p_sub_uart->send_buf_p],127);
// p_sub_uart->send_buf_p+=128;
// }
// }
// else{
// wk2114_sub_uart_set_inter(p_sub_uart,WK2114_S_REG_SIFR_MASK_RFTRIG_INT|WK2114_S_REG_SIFR_MASK_RXOVT_INT|WK2114_S_REG_SIFR_MASK_FERR_INT);
// }
// }
// // 接收错误中断
// if( (p_sub_uart->reg&WK2114_S_REG_SIFR_MASK_FERR_INT)!=0 ){
// wk2114_read_reg( wk2114,WK2114_BUILD_SUB_REG(sub_uart_index,WK2114_S_REG_LSR) );
// }
// }
// //子串口接收FIFO计数寄存器
// if(WK2114_CMD_GET_ADDR(p_sub_uart->cmd)==WK2114_BUILD_SUB_REG(sub_uart_index,WK2114_S_REG_RFCNT)){
// p_sub_uart->cmd=0;
// wk2114_read_fifo(wk2114,sub_uart_index,p_sub_uart->reg-1);
// }
// //子串口接收状态寄存器
// if(WK2114_CMD_GET_ADDR(p_sub_uart->cmd)==WK2114_BUILD_SUB_REG(sub_uart_index,WK2114_S_REG_LSR)){
// p_sub_uart->cmd=0;
// wk2114_read_reg(wk2114,WK2114_BUILD_SUB_REG(sub_uart_index,WK2114_S_REG_FSR));
// }
// //子串口FIFO状态寄存器
// if(WK2114_CMD_GET_ADDR(p_sub_uart->cmd)==WK2114_BUILD_SUB_REG(sub_uart_index,WK2114_S_REG_FSR)){
// p_sub_uart->cmd=0;
// }
// return;
// }
// case WK2114_WORK_STATE_EXTI_READ_IT_TYPE:
// // Timeout
// HAL_UARTEx_ReceiveToIdle_DMA( pWK2114Uart, wk2xxx_rcvbuf, 1024);
// wk2114->send_buf[0] = (WK2114_CMD_READ_REG<<6) + WK2114_BUILD_SUB_REG(sub_uart, WK2114_S_REG_SIFR);
// wk2114->send_buf[1] = 0x00;
// wk2114->send_fun(wk2114->send_class, wk2114->send_buf , 2);
// osEventFlagsClear(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_GET_IT_SOURCE);
// *state = WK2114_WORK_STATE_EXTI_READ_IT_TYPE_OK;
// continue;
// case WK2114_WORK_STATE_EXTI_READ_IT_TYPE_OK:
// log_i( "WK2114_WORK_STATE_EXTI_READ_IT_ TYPE_OK .... " );
// // uint8_t cmd;
// cmd = wk2114->send_buf[0]; // 上次发送内容第一位 send_buf[0]
// wk2114->send_buf[0] = 0;
// sub_uart = WK2114_CMD_GET_SUB_UART(cmd);
// p_sub_uart=wk2114->sub_uart[sub_uart];
// if(wk2114->size_received ==1){
// wk2114->flag&=~WK2114_G_FLAG_MASK_BUSY_RCV;
// }
// if( !WK2114_CMD_IS_READ(cmd) ){
// *state=WK2114_WORK_STATE_ERROR;
// }
// if ( !WK2114_CMD_IS_REG(cmd)) {
// *state=WK2114_WORK_STATE_ERROR;
// }
// if(WK2114_REG_IS_GLOBAL(cmd)){
// *state=WK2114_WORK_STATE_ERROR;
// }
// if(p_sub_uart==NULL || wk2114->sub_uart[sub_uart]->cmd!=0xff){
// *state=WK2114_WORK_STATE_ERROR;
// }
// p_sub_uart->cmd=cmd;
// p_sub_uart->reg=wk2xxx_rcvbuf[0];
// // 开启接收中断
// wk2114->size_received=0;
// if (HAL_DMA_GetState(pWK2114Uart->hdmarx) == HAL_DMA_STATE_BUSY)
// {
// HAL_UART_DMAStop(pWK2114Uart);
// }
// HAL_UARTEx_ReceiveToIdle_DMA( pWK2114Uart, wk2xxx_rcvbuf, 1024);
// // 依据中断 中断的类型, 进行数据处理
// wk2114_process_by_it_type(wk2114);
// // *state = WK2114_WORK_STATE_EXTI_PROCESS_DATA;
// continue;
// case WK2114_WORK_STATE_EXTI_PROCESS_DATA:
// // Timeout
// if ( (osKernelGetTickCount() - wk2114->timebase) > wk2114->timeout_ms )
// {
// log_w( "wk2114 EXTI PROCESS_DATA Failed %d, Retrying...", err_con );
// err_con++;
// wk2114->timebase = osKernelGetTickCount();
// if(err_con>10){
// log_e("EXTI PROCESS_DATA Error");
// *state=WK2114_WORK_STATE_ERROR;
// break;
// }
// }
// // *state = WK2114_WORK_STATE_EXTI_READ_IT_SOURCE_OK;
// osDelay(2);
// *state = WK2114_WORK_STATE_EXTI_PROCESS_DATA_OK;
// continue;
// case WK2114_WORK_STATE_EXTI_PROCESS_DATA_OK:
// log_e("WK2114_WORK_STATE_EXTI PROCESS_DATA_OK .. ");
// // uint8_t cmd;
// uint8_t cmd_size;
// cmd = wk2114->send_buf[0]; // 上次发送内容第一位 send_buf[0]
// wk2114->send_buf[0] = 0;
// cmd_size=WK2114_CMD_GET_SIZE(cmd); // 命令要读取的数量
// sub_uart = WK2114_CMD_GET_SUB_UART(cmd);
// p_sub_uart=wk2114->sub_uart[sub_uart];
// if(wk2114->size_received >=1){
// wk2114->flag&=~WK2114_G_FLAG_MASK_BUSY_RCV;
// }
// // 读数据回调
// if( wk2114->size_received!=cmd_size ){ // 命令读取数量和实际读取数量不一致
// *state=WK2114_WORK_STATE_ERROR;
// }
// // 拷贝数据
// if(p_sub_uart->recv_buf_size-p_sub_uart->recv_buf_p < wk2114->size_received){ // subuart buf甚于空间不足
// cmd_size=p_sub_uart->recv_buf_size-p_sub_uart->recv_buf_p;
// }
// // memcpy(&p_sub_uart->recv_buf[p_sub_uart->recv_buf_p],buf,cmd_size);
// p_sub_uart->recv_buf_p+=cmd_size;
// // 数据向上回调 (判断 发送队列是否为空 且空闲 )
// if ( osMessageQueueGetCount(wk2114->cmd_queue) == 0 && (p_sub_uart->flag&WK2114_S_UART_FLAG_MASK_IDLE)==1 )
// {
// p_sub_uart->flag&=~WK2114_S_UART_FLAG_MASK_IDLE;
// p_sub_uart->recv_fun(p_sub_uart->recv_class,p_sub_uart->recv_buf,p_sub_uart->recv_buf_p);
// p_sub_uart->recv_buf_p=0;
// }
// // 数据向上回调 (判断 缓冲区满,)
// if( p_sub_uart->recv_buf_p==p_sub_uart->recv_buf_size ) // 缓冲区满
// {
// p_sub_uart->recv_fun(p_sub_uart->recv_class,p_sub_uart->recv_buf,p_sub_uart->recv_buf_p);
// p_sub_uart->recv_buf_p = wk2114->size_received -cmd_size;
// // memcpy(p_sub_uart->recv_buf,&buf[cmd_size],p_sub_uart->recv_buf_p);
// }
// wk2114->flag&=~WK2114_G_FLAG_MASK_BUSY_RCV;
// break;
// case WK2114_WORK_STATE_SET_BAUD_OK:
// {
// log_i( "WK2114_WORK_STATE_SET_BAUD .... " );
// if (wk2114->setbaud_ok)
// {
// HAL_UART_DMAStop(pWK2114Uart);
// *state = WK2114_WORK_STATE_OK;
// break;
// }
// if ( wk2114->timebase-osKernelGetTickCount() >200)
// {
// err_con++;
// log_i( " set Baud, retry %d times ", err_con );
// if (err_con>10)
// {
// *state = WK2114_WORK_STATE_ERROR;
// break;
// }
// HAL_UART_DMAStop(pWK2114Uart);
// *state = WK2114_WORK_STATE_SET_BAUD;
// break;
// }
// osDelay(20);
// continue;
// }
// case WK2114_WORK_STATE_READ_GREG_0:
// {
// log_i( "WK2114_WORK_STATE_READ_GREG_0 .... " );
// wk2114->timebase = osKernelGetTickCount();
// wk2114_mainport_rcv( wk2114);
// // wk2114_read_global_reg(wk2114,WK2114_G_REG_GENA );
// uint8_t reg_0 = 0x40;
// wk2114->send_fun(wk2114->send_class,®_0,1);
// *state = WK2114_WORK_STATE_READ_GREG_0_OK;
// continue;
// }
// case WK2114_WORK_STATE_READ_GREG_0_OK:
// {
// log_i( "WK2114_WORK_STATE_READ_GREG_0 OK .... " );
// if (wk2114->read_greg0_ok)
// {
// HAL_UART_DMAStop(pWK2114Uart);
// *state = WK2114_WORK_STATE_OK;
// break;
// }
// if ( wk2114->timebase-osKernelGetTickCount() >2000)
// {
// err_con++;
// log_i( " READ_GREG_0, retry %d times ", err_con );
// if (err_con>10)
// {
// *state = WK2114_WORK_STATE_ERROR;
// break;
// }
// HAL_UART_DMAStop(pWK2114Uart);
// *state = WK2114_WORK_STATE_SET_BAUD;
// break;
// }
// osDelay(20);
// continue;
// }
// #define WK2114_Uart_IRQHandler USART3_IRQHandler
// UART_HandleTypeDef *pWK2114Uart = &huart3;
// // WK2114_Sub_Uart_TypeDef *sub_uart1 = NULL;
// // uint8_t sub_uart1_receive_buf[1024];
// int Sub_rcv_callback(void * obj, uint8_t * buf, uint16_t len)
// {
// return 0;
// }
// void WK2XXX_IRQ_HANDLER(void)
// {
// if( __HAL_GPIO_EXTI_GET_IT( GPIO_PIN_7 ) )
// {
// log_i("EXTI9_5_IRQHandler....");
// wk2114_inter_callback( wk2114);
// __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_7);
// }
// // HAL_GPIO_EXTI_IRQHandler(WK2114_IRQ_Pin);
// }
// // TODO 何时开启接收, 在 wk2114_read_reg 的时候
// void WK2114_Uart_IRQHandler(void)
// {
// uint16_t count = 0;
// uint16_t data_length = 0;
// // uint32_t sending_flag = 0;
// // uint32_t ret = 0;
// if (__HAL_UART_GET_FLAG(pWK2114Uart, UART_FLAG_TC) != RESET)
// {
// log_i("WK2114 ..huart TC callback .. " );
// // wk2114_send_completed_callback( wk2114);
// wk2114->flag&=~WK2114_G_FLAG_MASK_SENDING;
// pWK2114Uart->gState = HAL_UART_STATE_READY;
// __HAL_UART_CLEAR_FLAG(pWK2114Uart, UART_FLAG_TC);
// }
// if (__HAL_UART_GET_FLAG(pWK2114Uart, UART_FLAG_IDLE) != RESET)
// {
// count = __HAL_DMA_GET_COUNTER( pWK2114Uart->hdmarx );
// log_i("WK2114 ..huart IDLE ... %d", 1024 - count);
// data_length = 1024 - count;
// if ( data_length > 0 )
// {
// // wk2114_idle_callback(wk2114, wk2xxx_rcvbuf, data_length);
// // wk2114_reg_recv_callback(wk2114);
// // wk2114_recv_callback(wk2114, wk2xxx_rcvbuf, data_length );
// // log_i("WK2114_ IDLE.. data_length %d %02X", data_length, wk2xxx_rcvbuf[0]);
// }
// __HAL_UART_CLEAR_IDLEFLAG( pWK2114Uart );
// }
// }
// int WK2114_Add_Sub_Uart(WK2114_TypeDef *wk2114 )
// {
// sub_uart1 = (WK2114_Sub_Uart_TypeDef *)malloc(sizeof(WK2114_Sub_Uart_TypeDef));
// if (0!=wk2114_sub_uart_register(wk2114, sub_uart1,WK2114_S_UART_1,sub_uart1_receive_buf,sizeof(sub_uart1_receive_buf), &huart2, Sub_rcv_callback))
// {
// log_e("sub-uart 1 register Failure ! ");
// };
// if (0!=wk2114_sub_uart_init( sub_uart1,115200,WK2114_SUB_UART_MODE_MASK_TX|WK2114_SUB_UART_MODE_MASK_RX,WK2114_SUB_UART_FIFO_MODE_MASK_TX|WK2114_SUB_UART_FIFO_MODE_MASK_RX,WK2114_UART_PARITY_NONE,WK2114_UART_STOP_BITS_1))
// {
// log_e("sub-uart 1 init Failure ! ");
// }
// return 0;
// }
// int WK2114_Init( )
// {
// GPIO_InitTypeDef GPIO_InitStruct = {0};
// WK2XXX_RST_GPIO_CLK_ENABLE();
// WK2XXX_IRQ_GPIO_CLK_ENABLE();
// // wk2XXX rst
// GPIO_InitStruct.Pin = WK2XXX_RST_PIN;
// GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
// GPIO_InitStruct.Pull = GPIO_PULLUP;
// GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
// HAL_GPIO_Init(WK2XXX_RST_GPIO_PORT, &GPIO_InitStruct);
// // wk2XXX irq
// GPIO_InitStruct.Pin = WK2XXX_IRQ_PIN;
// GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
// GPIO_InitStruct.Pull = GPIO_PULLDOWN;
// HAL_GPIO_Init(WK2XXX_IRQ_GPIO_PORT, &GPIO_InitStruct);
// HAL_NVIC_SetPriority(WK2XXX_IRQ_EXTI_IRQ, 5, 0);
// HAL_NVIC_EnableIRQ(WK2XXX_IRQ_EXTI_IRQ);
// wk2114 = (WK2114_TypeDef *)malloc(sizeof(WK2114_TypeDef));
// wk2114->send_class = pWK2114Uart;
// wk2114->send_fun = HAL_UART_Transmit_DMA;
// // 命令队列 uint8_t cmd_buf[64][2] , 消息类型 2个uint8_t
// wk2114->cmd_queue = osMessageQueueNew( 64, sizeof(wk2114->cmd_queue_msg_put), NULL);
// if (wk2114->cmd_queue ==NULL) return -1;
// wk2114->cmd = 0;
// wk2114->flag = 0;
// wk2114->dev_clock_hz = WK2114_CLOCK_HZ;
// for(size_t i=0;i<4;i++){
// wk2114->sub_uart[i] = NULL;
// }
// // HAL_GPIO_WritePin(WK2XXX_IRQ_GPIO_PORT, WK2XXX_RST_PIN,GPIO_PIN_RESET);
// // HAL_Delay(2);
// // HAL_GPIO_WritePin(WK2XXX_IRQ_GPIO_PORT, WK2XXX_RST_PIN,GPIO_PIN_SET);
// wk2114_set_baud(wk2114);
// HAL_Delay(2);
// wk2114_set_baud(wk2114);
// HAL_Delay(2);
// wk2114_set_baud(wk2114);
// HAL_Delay(2);
// osSemaphoreRelease(wk2xxx_lockHandle);
// wk2114->size_received = 0;
// // wk2114->timebase = osKernelGetTickCount();
// // wk2114->timeout_ms = 500;
// // wk2114->state = WK2114_WORK_STATE_WAIT;
// // wk2114EventHandle = osEventFlagsNew ( &wk2114Event_attributes );
// // osEventFlagsClear(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IT_SOURCE_SENDING );
// // osEventFlagsClear(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IT_SOURCE_RECEIVED );
// // osEventFlagsClear(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IT_TYPE_SENDING );
// // osEventFlagsClear(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_IT_TYPE_RECEIVED );
// // osEventFlagsClear(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_RCV_FIFO_COUNT_RECEIVED );
// // osEventFlagsClear(wk2114EventHandle, MODULE_WK2114_EVENT_EXTI_RCV_FIFO_BUF_RECEIVED );
// return 0;
// }