A59 -V1.1版本提交
This commit is contained in:
@ -29,9 +29,12 @@
|
||||
#include "wifi_conf.h"
|
||||
#include "carlink_common.h"
|
||||
|
||||
#define DEV_NAME_PREFIX "AP630_CARLINK"
|
||||
|
||||
static char g_cp_bt_mac[13] = {0};
|
||||
static bool g_cp_bt_mac_ready = false;
|
||||
|
||||
static uint8_t carlink_p2p_name[64] = {0};
|
||||
static uint8_t carlink_ap_ssid[64] = {"ap63011"};
|
||||
static uint8_t carlink_ap_passwd[16] = {"88888888"};
|
||||
static uint8_t carlink_wifi_mac[32] = {0};
|
||||
@ -65,6 +68,17 @@ extern err_t dhcp_server_start(struct netif *netif, ip4_addr_t *start, ip4_addr_
|
||||
extern err_t wlan_ethernetif_init(struct netif *netif);
|
||||
#define lwip_ipv4_addr(addr) ((addr[0]) | (addr[1] << 8) | (addr[2] << 16) | (addr[3] << 24))
|
||||
|
||||
const char *carlink_get_bt_mac()
|
||||
{
|
||||
if (!g_cp_bt_mac_ready)
|
||||
return NULL;
|
||||
return (const char *)g_cp_bt_mac;
|
||||
}
|
||||
|
||||
const char *carlink_get_wifi_p2p_name()
|
||||
{
|
||||
return (const char *)carlink_p2p_name;
|
||||
}
|
||||
|
||||
const char *carlink_get_wifi_ssid()
|
||||
{
|
||||
@ -74,7 +88,7 @@ const char *carlink_get_wifi_ssid()
|
||||
|
||||
const char *carlink_get_wifi_mac()
|
||||
{
|
||||
wifi_get_mac_address(carlink_wifi_mac);
|
||||
wifi_get_mac_address((char *)carlink_wifi_mac);
|
||||
return (const char *)carlink_wifi_mac;
|
||||
}
|
||||
|
||||
@ -173,7 +187,11 @@ static void carlink_start_wlan()
|
||||
}
|
||||
memcpy(ap_prefix, g_cp_bt_mac + 8, 4);
|
||||
carlink_reset_wifi_ap_info(ap_prefix);
|
||||
start_ap(36, (const char *)carlink_ap_ssid, (const char *)carlink_ap_passwd, 1);
|
||||
#if (CARLINK_EC)
|
||||
start_p2p((const char *)carlink_p2p_name, (const char *)carlink_ap_ssid, (const char *)carlink_ap_passwd);
|
||||
#else
|
||||
start_ap(36, (const char *)carlink_ap_ssid, (const char *)carlink_ap_passwd, 1);
|
||||
#endif
|
||||
|
||||
ip_addr.addr = lwip_ipv4_addr(ucIPAddress);
|
||||
netmask.addr = lwip_ipv4_addr(ucNetMask);
|
||||
@ -194,18 +212,113 @@ static void carlink_start_wlan()
|
||||
dhcp_server_start(&gnetif[0], &dhcp_addr_start, &dhcp_addr_end);
|
||||
|
||||
|
||||
netif_set_up(&gnetif[0]);
|
||||
//netif_set_up(&gnetif[0]);
|
||||
lwiperf_start_tcp_server_default(carlink_lwiperf_report_cb_impl, NULL);
|
||||
lwip_tcpip_init_done_flag = 1;
|
||||
carlink_carplay_add_vendor_ie();
|
||||
}
|
||||
|
||||
void cp_wlan_start(void){
|
||||
netif_set_up(&gnetif[0]);
|
||||
}
|
||||
|
||||
static void dump_ip_addr(const char *msg, const ip_addr_t *server_addr)
|
||||
{
|
||||
printf("%s %d.%d.%d.%d \r\n", msg,
|
||||
ip4_addr1_16(ip_2_ip4(server_addr)), ip4_addr2_16(ip_2_ip4(server_addr)), ip4_addr3_16(ip_2_ip4(server_addr)), ip4_addr4_16(ip_2_ip4(server_addr)));
|
||||
}
|
||||
|
||||
|
||||
static void dhcp_client_status_callback(struct netif *netif, int status, const ip_addr_t *server_addr)
|
||||
{
|
||||
if (&gnetif[0] == netif) {
|
||||
dump_ip_addr("dhcp server ip :", (const ip_addr_t *)server_addr);
|
||||
dump_ip_addr("dhcp client ip :", (const ip_addr_t *)&netif->ip_addr);
|
||||
dump_ip_addr("dhcp client netmask:", (const ip_addr_t *)&netif->netmask);
|
||||
dump_ip_addr("dhcp client gw :", (const ip_addr_t *)&netif->gw);
|
||||
}
|
||||
}
|
||||
|
||||
int start_sta_ext(const char* ssid, const char* passwd, char need_passwd)
|
||||
{
|
||||
int ret = -1;
|
||||
ip4_addr_t ip_addr;
|
||||
ip4_addr_t netmask;
|
||||
ip4_addr_t gw;
|
||||
|
||||
ret = start_sta(ssid, passwd, need_passwd);
|
||||
if (ret != 0) {
|
||||
printf("start wifi sta failed\r\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (lwip_tcpip_init_done_flag) {
|
||||
netif_remove(&gnetif[0]);
|
||||
netif_add(&gnetif[0],
|
||||
#if LWIP_IPV4
|
||||
&ip_addr, &netmask, &gw,
|
||||
#endif
|
||||
NULL, wlan_ethernetif_init, tcpip_input);
|
||||
netif_set_default(&gnetif[0]);
|
||||
dhcp_regisger_status_callback(dhcp_client_status_callback);
|
||||
netif_set_up(&gnetif[0]);
|
||||
dhcp_start(&gnetif[0]);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int __restart_p2p(const char *dev_name, const char *ssid, const char *passwd)
|
||||
{
|
||||
int ret = -1;
|
||||
ip4_addr_t ip_addr;
|
||||
ip4_addr_t netmask;
|
||||
ip4_addr_t gw;
|
||||
|
||||
ip_addr.addr = lwip_ipv4_addr(ucIPAddress);
|
||||
netmask.addr = lwip_ipv4_addr(ucNetMask);
|
||||
gw.addr = lwip_ipv4_addr(ucGatewayAddress);
|
||||
|
||||
ret = start_p2p(dev_name, ssid, passwd);
|
||||
if (ret != 0) {
|
||||
printf("restart wifi p2p failed\r\n");
|
||||
return ret;
|
||||
}
|
||||
if (!lwip_tcpip_init_done_flag) {
|
||||
printf("lwip tcpip is not inited\r\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
dhcp_stop(&gnetif[0]);
|
||||
netif_remove(&gnetif[0]);
|
||||
|
||||
netif_add(&gnetif[0],
|
||||
#if LWIP_IPV4
|
||||
&ip_addr, &netmask, &gw,
|
||||
#endif
|
||||
NULL, wlan_ethernetif_init, tcpip_input);
|
||||
|
||||
netif_set_up(&gnetif[0]);
|
||||
ret = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int restart_p2p()
|
||||
{
|
||||
if (!g_cp_bt_mac_ready) {
|
||||
printf("bt is not ready at %s", __func__);
|
||||
return -1;
|
||||
}
|
||||
return __restart_p2p((const char *)carlink_p2p_name, (const char *)carlink_ap_ssid, (const char *)carlink_ap_passwd);
|
||||
}
|
||||
|
||||
static void carlink_reset_wifi_ap_info(const char *prefex)
|
||||
{
|
||||
if (prefex) {
|
||||
memset(carlink_ap_ssid, 0, sizeof(carlink_ap_ssid));
|
||||
sprintf((char *)carlink_ap_ssid, "AP630_CARLINK_%s", prefex);
|
||||
sprintf((char *)carlink_ap_ssid, "%s_%s", DEV_NAME_PREFIX, prefex);
|
||||
memset(carlink_p2p_name, 0, sizeof(carlink_p2p_name));
|
||||
sprintf((char *)carlink_p2p_name, "DIRECT-%s_p2p_%s", DEV_NAME_PREFIX, prefex);//do not delete "DIRECT-" !!!
|
||||
}
|
||||
}
|
||||
|
||||
@ -256,11 +369,11 @@ static void carlink_bt_callback(char * cAtStr)
|
||||
carlink_notify_event(&ev);
|
||||
} else if (0 == strncmp(cAtStr, "+ADDR=", 6)) {
|
||||
char cmd_str[64] = {0};
|
||||
sprintf(cmd_str, "AT+NAME=AP630_CARLINK_%s\r\n", (cAtStr + 6 + 8));
|
||||
sprintf(cmd_str, "AT+NAME=%s_%s\r\n", DEV_NAME_PREFIX, (cAtStr + 6 + 8));
|
||||
printf("ADDR:%s\r\n", cAtStr + 6);
|
||||
console_send_atcmd(cmd_str, strlen(cmd_str));//get mac addr
|
||||
memset(cmd_str, 0, sizeof(cmd_str));
|
||||
sprintf(cmd_str, "AT+LENAME=AP630_CARLINK_%s\r\n", (cAtStr + 6 + 8));
|
||||
sprintf(cmd_str, "AT+LENAME=%s_%s\r\n", DEV_NAME_PREFIX, (cAtStr + 6 + 8));
|
||||
console_send_atcmd(cmd_str, strlen(cmd_str));//get mac addr
|
||||
memcpy(g_cp_bt_mac, (cAtStr + 6), 12);
|
||||
carlink_carplay_ie_replace_bt_mac(cAtStr + 6, 12);
|
||||
@ -396,7 +509,7 @@ static void carlink_wifi_event_handler( WIFIEvent_t * xEvent )
|
||||
char *mac = NULL;
|
||||
|
||||
if (xEvent) {
|
||||
mac = xEvent->xInfo.xAPStationConnected.ucMac;
|
||||
mac = (char *)xEvent->xInfo.xAPStationConnected.ucMac;
|
||||
sprintf(mac_str, "%02x:%02x:%02x:%02x:%02x:%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
||||
}
|
||||
|
||||
@ -414,6 +527,40 @@ static void carlink_wifi_event_handler( WIFIEvent_t * xEvent )
|
||||
}
|
||||
}
|
||||
|
||||
#if ( ipconfigUSE_DHCP_HOOK != 0 )
|
||||
eDHCPCallbackAnswer_t xApplicationDHCPHook( eDHCPCallbackPhase_t eDHCPPhase,
|
||||
uint32_t ulIPAddress )
|
||||
{
|
||||
eDHCPCallbackAnswer_t eReturn;
|
||||
char g_ip_str[32] = {0};
|
||||
|
||||
sprintf(g_ip_str, "%d.%d.%d.%d\r\n", (ulIPAddress >> 0) & 0xFF,
|
||||
(ulIPAddress >> 8) & 0xFF, (ulIPAddress >> 16) & 0xFF, (ulIPAddress >> 24) & 0xFF);
|
||||
printf("\r\n eDHCPPhase:%d ulIPAddress:%s state:%d \r\n", eDHCPPhase, g_ip_str, getDhcpClientState());
|
||||
if (getDhcpClientState() == 0)
|
||||
return eDHCPStopNoChanges;
|
||||
|
||||
switch( eDHCPPhase )
|
||||
{
|
||||
case eDHCPPhaseFinished:
|
||||
eReturn = eDHCPContinue;
|
||||
break;
|
||||
case eDHCPPhasePreDiscover :
|
||||
eReturn = eDHCPContinue;
|
||||
break;
|
||||
|
||||
case eDHCPPhasePreRequest :
|
||||
eReturn = eDHCPContinue;
|
||||
break;
|
||||
default :
|
||||
eReturn = eDHCPContinue;
|
||||
break;
|
||||
}
|
||||
|
||||
return eReturn;
|
||||
}
|
||||
#endif
|
||||
|
||||
static BaseType_t carlink_wifi_init()
|
||||
{
|
||||
int status;
|
||||
|
Reference in New Issue
Block a user