2025-08-20 11:28:11 +08:00
# include "device.h"
# include "config/board_config.h"
uint8_t device_init ( device_t * port )
{
uint8_t res = DEVICE_OK ;
# if UART_ENABLE
res = uart_init ( & port - > init_device ) ;
if ( res )
{
SYS_LOG_WRN ( " device start uart error " ) ;
return DEVICE_UART_ERROR ;
}
# endif
# if BLE_ENABLE
res = ble_init ( & port - > init_device ) ;
if ( res )
{
SYS_LOG_WRN ( " ble init error " ) ;
return DEVICE_BLE_ERROR ;
}
# endif
# if WIFI_ENABLE
res = wifi_init ( & port - > init_device ) ;
if ( res )
{
SYS_LOG_WRN ( " wifi init error " ) ;
return DEVICE_WIFI_ERROR ;
}
# endif
//默认选择串口
res = embedded_device_choice ( port , DATA_PORT_TYPE_UART ) ;
if ( res = = DEVICE_EMBEDDED_ERROR )
{
SYS_LOG_ERR ( " embedded device choice error " ) ;
}
2025-08-20 11:50:01 +08:00
//默认蓝牙 val
2025-08-20 15:10:26 +08:00
res = pc_device_choice ( port , DATA_PORT_TYPE_WIFI ) ;
2025-08-20 11:50:01 +08:00
if ( res = = DEVICE_PC_ERROR )
{
SYS_LOG_ERR ( " pc device choice error " ) ;
}
2025-08-20 11:28:11 +08:00
return DEVICE_OK ;
}
uint8_t uart_init ( init_device_t * port )
{
// port->uart_port = sb_uart_port_bind(g_cfg_board->uart_fc.id, g_cfg_board->uart_fc.br, g_cfg_board->uart_fc.pin_txd.pin, g_cfg_board->uart_fc.pin_rxd.pin, g_cfg_board->uart_fc.irq_prior, 1024, 0, NULL);
port - > uart_port = sb_uart_port_bind ( 1 , 115200 , 0 , 10 , 21 , 1024 , 0 , NULL ) ;
if ( port - > uart_port = = NULL )
{
SYS_LOG_WRN ( " uart init error " ) ;
return 1 ;
}
if ( sb_data_port_start ( port - > uart_port ) )
{
SYS_LOG_WRN ( " uart start error " ) ;
return 1 ;
}
return DEVICE_OK ;
}
2025-08-20 15:10:26 +08:00
// 蓝牙连接回调函数
static void ble_server_connect_handler ( ble_server_status_t status )
2025-08-20 11:50:01 +08:00
{
2025-08-20 15:10:26 +08:00
// 处理连接状态,例如:
if ( status = = BLE_SERVER_STATUS_CONNECTED ) {
SYS_LOG_INF ( " ble Connected " ) ;
} else if ( status = = BLE_SERVER_STATUS_DISCONNECTED ) {
SYS_LOG_INF ( " ble dis Connected " ) ;
// disconnected / other
} else {
SYS_LOG_INF ( " ble stop " ) ;
2025-08-20 11:50:01 +08:00
}
}
2025-08-20 11:28:11 +08:00
uint8_t ble_init ( init_device_t * port )
{
2025-08-20 11:50:01 +08:00
ble_server_init_t ble_init_param = {
. device_name = " Sertorf " , // 设备名
2025-08-20 15:10:26 +08:00
. manufacturer_data = NULL , // 回调函数,生成 manufacturer[20]
. connect_cb = ble_server_connect_handler , // 回调函数, NULL 值可用
2025-08-20 11:50:01 +08:00
} ;
//初始化参数
sb_ble_server_port_init ( & ble_init_param ) ;
port - > ble_spp_server_cmd = ble_server_port_bind_cmd ( 0x2000 , NULL ) ;
port - > ble_spp_server_val = ble_server_port_bind_val ( 0x400 , NULL ) ;
if ( port - > ble_spp_server_cmd = = NULL | | port - > ble_spp_server_val = = NULL )
{
SYS_LOG_WRN ( " ble init error " ) ;
return 1 ;
}
if ( sb_data_port_start ( port - > ble_spp_server_cmd ) )
{
SYS_LOG_WRN ( " ble cmd start error " ) ;
return 1 ;
}
if ( sb_data_port_start ( port - > ble_spp_server_val ) )
{
SYS_LOG_WRN ( " ble val start error " ) ;
return 1 ;
}
2025-08-20 11:28:11 +08:00
return DEVICE_OK ;
}
2025-08-20 15:10:26 +08:00
// wifi
socket_listen_tcp_t tcp_listen ;
static void wifi_event_handler ( bool is_connect , sb_data_port_t * port )
{
if ( is_connect ) {
SYS_LOG_INF ( " wifi connect " ) ;
} else {
SYS_LOG_INF ( " wifi disconnect " ) ;
}
}
2025-08-20 11:28:11 +08:00
uint8_t wifi_init ( init_device_t * port )
{
2025-08-20 15:10:26 +08:00
/* 初始化 WIFI */
wifi_init_t init_struct = {
. ap = {
. ssid = " Sertorf " , /**< SSID of soft-AP. If ssid_len field is 0, this must be a Null terminated string. Otherwise, length is set according to ssid_len. */
. password = " 12345678 " , /**< Password of soft-AP. */
. ip_v4 = { 192 , 168 , 1 , 1 } ,
. gw_v4 = { 192 , 168 , 1 , 1 } ,
. mask_v4 = { 255 , 255 , 255 , 0 } ,
. max_connection = 1 ,
. connect_cb = NULL ,
} ,
. sta = {
#if 0
. ssid = " KFXJ " ,
. password = " Kfdx201* " ,
# else
. ssid = " SDWAN " ,
. password = " Dxltkj201 " ,
# endif
. connect_cb = NULL ,
} ,
} ;
wifi_netif_init ( & init_struct ) ;
wifi_set_mode ( WIFI_NETIF_MODE_AP ) ;
// 初始化socket
socket_inet_init ( ) ;
tcp_listen = socket_inet_server_listen_tcp ( 4278 , 2 , wifi_event_handler ) ;
socket_server_bind_t bind_param = {
. rx_buf_size = 0x1000 ,
. rx_event = NULL ,
. rx_resume_work = NULL ,
} ;
port - > wifi = socket_inet_server_bind_tcp ( tcp_listen , & bind_param ) ;
if ( port - > wifi )
{
sb_data_port_start ( port - > wifi ) ;
}
wifi_start ( ) ;
2025-08-20 11:28:11 +08:00
return DEVICE_OK ;
}
uint8_t embedded_device_choice ( device_t * port , uint8_t type )
{
//端口与PC一致
if ( port - > pc_device_type = = type )
{
SYS_LOG_WRN ( " pc Port consistency " ) ;
return DEVICE_WRN_EMBEDDED_TYPE ;
}
port - > embedded_device_type = type ;
switch ( port - > embedded_device_type )
{
case DATA_PORT_TYPE_UART :
port - > embedded_device = port - > init_device . uart_port ;
break ;
case DATA_PORT_TYPE_WIFI :
port - > embedded_device = port - > init_device . wifi ;
break ;
case DATA_PORT_TYPE_BLE_CMD :
port - > embedded_device = port - > init_device . ble_spp_server_cmd ;
break ;
case DATA_PORT_TYPE_BLE_VAL :
port - > embedded_device = port - > init_device . ble_spp_server_val ;
break ;
default :
break ;
}
if ( port - > embedded_device = = NULL )
{
SYS_LOG_WRN ( " embedded device choice error " ) ;
return DEVICE_EMBEDDED_ERROR ;
}
return DEVICE_OK ;
}
int embedded_device_read ( device_t * port , void * buffer , uint32_t length )
{
return sb_data_port_read ( port - > embedded_device , buffer , length , 0 ) ;
}
int embedded_device_write ( device_t * port , void * buffer , uint32_t length )
{
return sb_data_port_write ( port - > embedded_device , buffer , length , 0 ) ;
}
uint32_t embedded_device_get_rx_length ( device_t * port )
{
return sb_data_port_get_rx_length ( port - > embedded_device ) ;
2025-08-20 11:50:01 +08:00
}
uint8_t pc_device_choice ( device_t * port , uint8_t type )
{
//端口与embedded一致
if ( port - > embedded_device_type = = type )
{
SYS_LOG_WRN ( " embedded Port consistency " ) ;
return DEVICE_WRN_PC_TYPE ;
}
port - > pc_device_type = type ;
switch ( port - > pc_device_type )
{
case DATA_PORT_TYPE_UART :
port - > pc_device = port - > init_device . uart_port ;
break ;
case DATA_PORT_TYPE_WIFI :
port - > pc_device = port - > init_device . wifi ;
break ;
case DATA_PORT_TYPE_BLE_CMD :
port - > pc_device = port - > init_device . ble_spp_server_cmd ;
break ;
case DATA_PORT_TYPE_BLE_VAL :
port - > pc_device = port - > init_device . ble_spp_server_val ;
break ;
default :
break ;
}
if ( port - > pc_device = = NULL )
{
SYS_LOG_WRN ( " embedded device choice error " ) ;
return DEVICE_PC_ERROR ;
}
return DEVICE_OK ;
}
int pc_device_read ( device_t * port , void * buffer , uint32_t length )
{
return sb_data_port_read ( port - > pc_device , buffer , length , 0 ) ;
}
int pc_device_write ( device_t * port , void * buffer , uint32_t length )
{
return sb_data_port_write ( port - > pc_device , buffer , length , 0 ) ;
}
uint32_t pc_device_get_rx_length ( device_t * port )
{
return sb_data_port_get_rx_length ( port - > pc_device ) ;
2025-08-20 11:28:11 +08:00
}