TWR-WIFI-AR4100 patch supprt wifi direct?

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

TWR-WIFI-AR4100 patch supprt wifi direct?

3,259 次查看
danielchai
Senior Contributor I

Hi All,

I am looking for a wifi device support the wifi-direct.

I read that there are many people use the AR4100, but I didn't find if this wifi module support the wifi direct mode?

And if the TWR-WIFI-AR4100 patch support the wifi direct mode?

Thank you in advance.

-Daniel

0 项奖励
回复
10 回复数

2,208 次查看
ZhangJennie
NXP TechSupport
NXP TechSupport

I have it working, tried on MQX 4.0 and TWR-K60N512, TWR-K60D100M and TWR-K70F120M so far. Shared with the community:

https://community.freescale.com/message/318565#318565

0 项奖励
回复

2,208 次查看
kubiznak_petr
Contributor V

Hi Jennie,

if by WiFi Direct you mean P2P mode, the chip does support it. We are planning to support it in our ESL library, currently we support Soft-AP. Should you be interested, please contact me so we put a higher priority on it. If looking for a processor module with wifi, please look at SQM4-K70-W or SQM4-VF6-W.

0 项奖励
回复

2,208 次查看
chinniwhites
Contributor II

How do I get this TWR-WIFI-AR400 to work on my K70 tower module instead of K60?

0 项奖励
回复

2,208 次查看
kubiznak_petr
Contributor V

You should only need to properly define the following in your user_config.h according to the hardware pinout:

BSPCFG_ENABLE_ATHEROS_WIFI

BSP_ATHEROS_WIFI_SPI_DEVICE

BSP_ATHEROS_WIFI_GPIO_INT_PIN

BSP_INT_PIN_MUX_GPIO

BSP_ATHEROS_WIFI_GPIO_PWD_PIN

BSP_PWD_PIN_MUX_GPIO

0 项奖励
回复

2,208 次查看
chinniwhites
Contributor II

I think there is more to it than that.  There is an init_enet.c file with Atheros 4.0.2 patch that somehow needs to be integrated into the existing init_enet.c in bsd for K70 along with user_config.h adjustments.  I have not been able to successfully compile.  Please help if you can.  My last two errors are :

Description    Resource    Path    Location    Type

undefined reference to `ENET_initialize_wifi'    rtcs_init.c    /K70MQXTEST/Sources    line 240    C/C++ Problem

undefined reference to `ipcfg_init_device_wifi'    rtcs_init.c    /K70MQXTEST/Sources    line 234    C/C++ Problem

Relevant Files

init_enet.c

/**HEADER********************************************************************

*

* Copyright (c) 2008 Freescale Semiconductor;

* All Rights Reserved

*

* Copyright (c) 1989-2008 ARC International;

* All Rights Reserved

*

***************************************************************************

*

* THIS SOFTWARE IS PROVIDED BY FREESCALE "AS IS" AND ANY EXPRESSED OR

* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES

* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 

* IN NO EVENT SHALL FREESCALE OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,

* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR

* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)

* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,

* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING

* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF

* THE POSSIBILITY OF SUCH DAMAGE.

*

*END************************************************************************/

#include "main.h"

#include <ipcfg.h>

#include "iwcfg.h"

#if RTCS_PPP

#include <ppp.h>

#if ! RTCSCFG_ENABLE_VIRTUAL_ROUTES

#error This application requires RTCSCFG_ENABLE_VIRTUAL_ROUTES defined non-zero in user_config.h. Please recompile libraries (BSP, RTCS) with this option.

#endif

#if ! RTCSCFG_ENABLE_GATEWAYS

#error This application requires RTCSCFG_ENABLE_GATEWAYS defined non-zero in user_config.h. Please recompile libraries (BSP, RTCS) with this option.

#endif

#warning This application requires PPP device to be defined manually and being different from the default IO channel (BSP_DEFAULT_IO_CHANNEL). See PPP_DEVICE in config.h.

LWSEM_STRUCT ppp_sem;

static void PPP_linkup (pointer lwsem) {_lwsem_post(lwsem);}

extern void PPP_start(void);

char localname[] = "psti";

char localsecret[] = "secret";

char remotename[] = "guest";

char remotesecret[] = "anonymous";

PPP_SECRET lsecret =

   {sizeof(localname)-1,  sizeof(localsecret)-1,  localname,  localsecret};

PPP_SECRET lsecrets[] = {

   {sizeof(remotename)-1, sizeof(localsecret)-1,  remotename, localsecret},

   {0, 0, NULL, NULL}};

PPP_SECRET rsecrets[] = {

   {sizeof(remotename)-1, sizeof(remotesecret)-1, remotename, remotesecret},

   {0, 0, NULL, NULL}};

extern PPP_SECRET_PTR _PPP_PAP_LSECRET;

extern PPP_SECRET_PTR _PPP_PAP_RSECRETS;

extern char_ptr       _PPP_CHAP_LNAME;

extern PPP_SECRET_PTR _PPP_CHAP_LSECRETS;

extern PPP_SECRET_PTR _PPP_CHAP_RSECRETS;

/*FUNCTION*------------------------------------------------

*

* Function Name: PPP_start

* Comments     :

*   

*

*END*-----------------------------------------------------*/

void PPP_start(void)

{

    uint_32           error;

    _rtcs_if_handle   ihandle;

    MQX_FILE_PTR      pfile;

    _iopcb_handle     pio;

    _ppp_handle       phandle;

    IPCP_DATA_STRUCT  ipcp_data;

    _PPP_PAP_RSECRETS = rsecrets;    /* Require authentication, allow PAP */

    _PPP_PAP_LSECRET = &lsecret;     /* Allow peer to request PAP */

    _PPP_CHAP_LNAME = localname;     /* Needed by CHAP */

    _PPP_CHAP_RSECRETS = rsecrets;   /* Require authentication, allow CHAP */

    _PPP_CHAP_LSECRETS = lsecrets;   /* Allow peer to request CHAP */

    /* Install a route for a default gateway */

    RTCS_gate_add(GATE_ADDR, INADDR_ANY, INADDR_ANY);

    pfile = fopen(PPP_DEVICE, NULL);

#ifdef PPP_DEVICE_DUN

    _io_dun_install("dun:");

    pfile = fopen("dun:", (char_ptr)pfile);

#endif

    pio = _iopcb_ppphdlc_init(pfile);

    _PPP_ACCM = 0;

    error = PPP_initialize(pio, &phandle);

    if (error) {

       printf("\nPPP initialize: %lx", error);

       _task_block();

    } /* Endif */

    _iopcb_open(pio, PPP_lowerup, PPP_lowerdown, phandle);

    error = RTCS_if_add(phandle, RTCS_IF_PPP, &ihandle);

    if (error) {

       printf("\nIF add failed, error = %lx", error);

       _task_block();

    } /* Endif */

    _lwsem_create(&ppp_sem, 0);

    _mem_zero(&ipcp_data, sizeof(ipcp_data));

    ipcp_data.IP_UP              = PPP_linkup;

    ipcp_data.IP_DOWN            = NULL;

    ipcp_data.IP_PARAM           = &ppp_sem;

    ipcp_data.ACCEPT_LOCAL_ADDR  = FALSE;

    ipcp_data.ACCEPT_REMOTE_ADDR = FALSE;

    ipcp_data.LOCAL_ADDR         = PPP_LOCADDR;

    ipcp_data.REMOTE_ADDR        = PPP_PEERADDR;

    ipcp_data.DEFAULT_NETMASK    = TRUE;

    ipcp_data.DEFAULT_ROUTE      = TRUE;

    error = RTCS_if_bind_IPCP(ihandle, &ipcp_data);

    if (error) {

       printf("\nIF bind failed, error = %lx", error);

       _task_block();

    } /* Endif */

    printf("\nPlease initiate PPP connection.  Waiting...");

    _lwsem_wait(&ppp_sem);

    printf("\nPPP device %s bound to %d.%d.%d.%d", PPP_DEVICE, IPBYTES(ipcp_data.LOCAL_ADDR));

}

#endif /* RTCS_PPP */

static int_32 gWifiConnected = 0;

static _enet_handle handle[BSP_ENET_DEVICE_COUNT];

/*FUNCTION*-------------------------------------------------------------

*

* Function Name   : WifiConnected()

* Returned Value  : NA

* Comments        : Sets an LED to indicate that the wifi is connected

*                                       to the network.

*

*END*-----------------------------------------------------------------*/

static void WifiConnected(int value)

{

  gWifiConnected = 1;

  printf("Wifi connected!\n");

  return;

}

/*FUNCTION*-------------------------------------------------------------

*

* Function Name   : SetCallback()

* Returned Value  : SHELL_EXIT_SUCCESS if mode set successfully else ERROR CODE

* Comments        : Sets the Atheros wifi driver callback function which

*                                       the driver will call when the state of the wifi

*                                       connection changes.

*

*END*-----------------------------------------------------------------*/

static int_32 SetCallback()

{

   

     ATH_IOCTL_PARAM_STRUCT  inout_param;

    uint_32 error,dev_status;

    inout_param.cmd_id = ATH_SET_CONNECT_STATE_CALLBACK;

    inout_param.data = (void *)WifiConnected;

    inout_param.length = 4;

    error = ENET_mediactl(handle[ATHEROS_WIFI_DEFAULT_ENET_DEVICE],ENET_MEDIACTL_IS_INITIALIZED,&dev_status);

    if (SHELL_EXIT_SUCCESS != error)

    {

        return error;

    }

    if (dev_status == FALSE)

    {

        return ENET_ERROR;

    }

    error = ENET_mediactl(handle[ATHEROS_WIFI_DEFAULT_ENET_DEVICE],ENET_MEDIACTL_VENDOR_SPECIFIC,&inout_param);

    if (SHELL_EXIT_SUCCESS != error)

    {

        return error;

    }

    return SHELL_EXIT_SUCCESS;

   

}

extern uint_32        ipcfg_init_device_wifi(uint_32, _enet_address);

extern _mqx_uint      ENET_initialize_wifi(_mqx_uint, _enet_address, _mqx_uint, _enet_handle _PTR_);

/*FUNCTION*-----------------------------------------------------

*

* Function Name    : rtcs_init

* Comments     :

*    This function installs and initializes RTCS

*

*END*-----------------------------------------------------*/

void rtcs_init()

{

   IPCFG_IP_ADDRESS_DATA ip_data;

   _enet_address           enet_address;  

   uint_32 error = RTCS_create();

   if (error != RTCS_OK)

   {

      printf("\nRTCS failed to initialize, error = %X", error);

      _task_block();

   }

   _IP_forward = TRUE;

#ifdef BSP_ENET_DEVICE_COUNT

#if  (BSP_ENET_DEVICE_COUNT > 0)

   /*Following section is relevant only in case there as some enet driver available in BSP (FEC, MACNET, WIFI or other enet driver)*/

   /* calcualte unique mac address from IP ADDRES */

   ENET_get_mac_address (ENET_DEVICE, ENET_IPADDR, enet_address);

   error = ipcfg_init_device (ENET_DEVICE, enet_address);

   if (error != RTCS_OK)

   {

      printf("\nFailed to initialize ethernet device, error = %X", error);

      _task_block();

   }

  

   if (!HTTP_USE_ONE_SERVER){

       ip_data.ip = WIFI_IPADDR;

       ip_data.mask = WIFI_IPMASK;

       ip_data.gateway = WIFI_GATEWAY; 

       

       /* calcualte unique mac address from IP ADDRES */

       ENET_get_mac_address(ATHEROS_WIFI_DEFAULT_ENET_DEVICE, WIFI_IPADDR, enet_address);

       error = ipcfg_init_device_wifi(ATHEROS_WIFI_DEFAULT_ENET_DEVICE, enet_address);

       if (error != RTCS_OK)

       {

           printf("\nFailed to initialize wifi device, error = %X", error);

           _task_block();

       }

       if((error = ENET_initialize_wifi(1, enet_address, 1, &handle[1])) != ENETERR_INITIALIZED_DEVICE)

       {

         printf("Error during ENET_initialize device n.%d 0x%08x\n", 1, error);

         while(1){}

       }

      

       SetCallback();       

       /* hardcoded values for SSID and security params are used to try to connect. This

        * is fine for a demo but not very practicle for a "real world" product. Instead

        * one option is to use WPS as shown above. */

       iwcfg_set_essid (1,WIFI_SSID);

       iwcfg_set_sec_type (1,WIFI_SECURITY);

       iwcfg_set_mode (1,WIFI_NW_MODE);

       iwcfg_commit(1);

   }

#if RTCSCFG_ENABLE_LWDNS

   LWDNS_server_ipaddr = ENET_DNS;  

   ipcfg_add_dns_ip(ENET_DEVICE,LWDNS_server_ipaddr);

#endif /* RTCSCFG_ENABLE_LWDNS */

   printf("\nWaiting for ethernet cable plug in ... ");

   while(!ipcfg_get_link_active(ENET_DEVICE)) {};

   printf("Cable connected\n");

#if RTCS_DHCP

   printf("Contacting DHCP server ... ");

   error = ipcfg_bind_dhcp_wait(ENET_DEVICE, FALSE, &ip_data);

  

#else

   ip_data.ip = ENET_IPADDR;

   ip_data.mask = ENET_IPMASK;

   ip_data.gateway = ENET_GATEWAY;

   printf("Setting static IP address ... ");

   error = ipcfg_bind_staticip (ENET_DEVICE, &ip_data);

  

#endif /* RTCS_DHCP */

   if (error != IPCFG_ERROR_OK)

   {

      printf("\nRTCS failed to bind Ethernet interface with IPv4, error = %X", error);

      _task_block();

   }

   else

   {

      printf("OK\n");      

   }

   ipcfg_get_ip(ENET_DEVICE, &ip_data);

   printf("\nIP Address      : %d.%d.%d.%d\n",IPBYTES(ip_data.ip));

   printf("\nSubnet Address  : %d.%d.%d.%d\n",IPBYTES(ip_data.mask));

   printf("\nGateway Address : %d.%d.%d.%d\n",IPBYTES(ip_data.gateway));

   printf("\nDNS Address     : %d.%d.%d.%d\n",IPBYTES(ipcfg_get_dns_ip(ENET_DEVICE,0)));

   if (!HTTP_USE_ONE_SERVER){

        #if RTCS_DHCP

           printf("Contacting DHCP server ... ");

           error = ipcfg_bind_dhcp_wait(ATHEROS_WIFI_DEFAULT_ENET_DEVICE, FALSE, &ip_data);

          

        #else

           ip_data.ip = WIFI_IPADDR;

           ip_data.mask = WIFI_IPMASK;

           ip_data.gateway = WIFI_GATEWAY;

           printf("Setting static IP address ... ");

           error = ipcfg_bind_staticip (ATHEROS_WIFI_DEFAULT_ENET_DEVICE, &ip_data);

          

        #endif /* RTCS_DHCP */

           if (error != IPCFG_ERROR_OK)

           {

              printf("\nRTCS failed to bind Wifi interface with IPv4, error = %X", error);

              _task_block();

           }

           else

           {

              printf("OK\n");      

           }

       

           ipcfg_get_ip(ATHEROS_WIFI_DEFAULT_ENET_DEVICE, &ip_data);

           printf("\nIP Address      : %d.%d.%d.%d\n",IPBYTES(ip_data.ip));

           printf("\nSubnet Address  : %d.%d.%d.%d\n",IPBYTES(ip_data.mask));

           printf("\nGateway Address : %d.%d.%d.%d\n",IPBYTES(ip_data.gateway));

           printf("\nDNS Address     : %d.%d.%d.%d\n",IPBYTES(ipcfg_get_dns_ip(ATHEROS_WIFI_DEFAULT_ENET_DEVICE,0)));

   }

main. h

#ifndef __main_h_

#define __main_h_

#include <mqx.h>

#include <bsp.h>

#include <mfs.h>

#include <shell.h>

#define APPLICATION_HAS_SHELL

#include <rtcs.h>

#ifdef APPLICATION_HAS_SHELL

#include <sh_rtcs.h>

#endif

#include <ipcfg.h>

#include "tfs.h"

#include "enet.h"

#include "enet_wifi.h"

#include "iwcfg.h"

#include "string.h"

#include "atheros_wifi_api.h"

#include "atheros_wifi.h"

//#include "atheros_phy.h"

#define MAIN_TASK   1

#define RAM_DISK_SIZE 0x2000

/* Uncomment following code to use whole external MRAM for ramdisk, if available.

Not applicable when using MRAM target! */

/*

#define RAM_DISK_BASE BSP_EXTERNAL_MRAM_BASE

#define RAM_DISK_SIZE BSP_EXTERNAL_MRAM_SIZE

*/

#define ENET_DEVICE 0

#define ATHEROS_WIFI_DEFAULT_ENET_DEVICE    1

#define RTCS_DHCP 0

#define ENET_IPADDR     IPADDR(192,168,1,99)

#define ENET_IPMASK     IPADDR(255,255,0,0)

#define ENET_GATEWAY     IPADDR(192,168,0,1)

#define    ENET_DNS         IPADDR(192,168,0,2)

#define WIFI_IPADDR     IPADDR(192,168,1,98)

#define WIFI_IPMASK     IPADDR(255,255,0,0)

#define WIFI_GATEWAY     IPADDR(192,168,0,1)

#define WIFI_SSID            "Wireless3"

//Possible Values managed or adhoc

#define WIFI_NW_MODE         "managed"

//Possible vales

// 1. "wep"

// 2. "wpa"

// 3. "wpa2"

// 4. "none"

#define WIFI_SECURITY        "wpa"

#define WIFI_PASSPHRASE      "M3tr01nd2010"

#define RTCS_PPP 0

/* Use this define to tell example if only one server should be used for all interfaces */

#define HTTP_USE_ONE_SERVER     0

#if RTCSCFG_ENABLE_IP6  

    #if RTCSCFG_ENABLE_IP4  

        /*

        **  HTTP_INET_AF is AF_INET+AF_INET for http support IPv4+IPv6.

        **  HTTP_INET_AF is AF_INET  for http support IPv4 only.

        **  HTTP_INET_AF is AF_INET6 for http support IPv6 only.

        */

        #define HTTP_INET_AF    (AF_INET | AF_INET6)

    #else

        #define HTTP_INET_AF    AF_INET6       

    #endif

#else

        #define HTTP_INET_AF    AF_INET        

#endif

   

    //#define HTTP_INET_AF           AF_INET

    #define HTTP_SCOPE_ID          0 /* For any IF. */

   

extern void Main_task (uint_32);

void Ram_disk_start(void);

void rtcs_init(void);

/* PPP device must be set manually and

** must be different from the default IO channel (BSP_DEFAULT_IO_CHANNEL)

*/

#define PPP_DEVICE      "ittyb:"

/*

** Define PPP_DEVICE_DUN only when using PPP to communicate

** to Win9x Dial-Up Networking over a null-modem

** This is ignored if PPP_DEVICE is not #define'd

*/

#define PPP_DEVICE_DUN  1

/*

** Define the local and remote IP addresses for the PPP link

** These are ignored if PPP_DEVICE is not #define'd

*/

#define PPP_LOCADDR     IPADDR(192,168,0,216)

#define PPP_PEERADDR    IPADDR(192,168,0,217)

#define GATE_ADDR       IPADDR(192,168,0,1)

#endif /* __main_h_ */

main. c

/**HEADER*******************************************************************

*

* Copyright (c) 2008 Freescale Semiconductor;

* All Rights Reserved

*

* Copyright (c) 1989-2008 ARC International;

* All Rights Reserved

*

****************************************************************************

*

* THIS SOFTWARE IS PROVIDED BY FREESCALE "AS IS" AND ANY EXPRESSED OR

* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES

* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 

* IN NO EVENT SHALL FREESCALE OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,

* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR

* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)

* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,

* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING

* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF

* THE POSSIBILITY OF SUCH DAMAGE.

*

****************************************************************************

*

* Comments:

*

*   This file contains main initialization for your application

*   and infinite loop

*

*END************************************************************************/

#include "main.h"

#if !defined(RAM_DISK_SIZE)

#error Please specify RAM_DISK_SIZE

#endif

#if defined(APPLICATION_HAS_SHELL) && (!SHELLCFG_USES_RTCS)

#error This application requires SHELLCFG_USES_RTCS defined non-zero in user_config.h. Please recompile libraries with this option if any Ethernet interface is available.

#endif

#if ! SHELLCFG_USES_MFS

#error This application requires SHELLCFG_USES_MFS defined non-zero in user_config.h. Please recompile libraries with this option.

#endif

   

#define CONTROL_TASK    2

#define SHELL_TASK        3

uint_32 counter = 0;

uint_32 counter2 = 0;

uint_32 counter3 = 0;

uint_32  real_desPSI = 0;

uint_32  real_startPSI = 0;

char boostMode = 0;

const SHELL_COMMAND_STRUCT Shell_commands[] = {

   /* MFS commands */

   { "cd",        Shell_cd },     

   { "copy",      Shell_copy },

   { "create",    Shell_create },

   { "del",       Shell_del },      

   { "disect",    Shell_disect},     

   { "dir",       Shell_dir },     

   { "format",    Shell_format },

   { "mkdir",     Shell_mkdir },    

   { "pwd",       Shell_pwd },      

   { "read",      Shell_read },     

   { "ren",       Shell_rename },   

   { "rmdir",     Shell_rmdir },

   { "type",      Shell_type },

   { "write",     Shell_write },

   /* RTCS commands */

   { "arpadd",    Shell_arpadd },

   { "arpdel",    Shell_arpdel },

   { "arpdisp",   Shell_arpdisp },    

   { "gate",      Shell_gate },

   { "gethbn",    Shell_get_host_by_name },

   { "getrt",     Shell_getroute },

   { "ipconfig",  Shell_ipconfig },     

   { "netstat",   Shell_netstat },  

#if RTCSCFG_ENABLE_ICMP     

   { "ping",      Shell_ping },     

#endif

   { "telnet",    Shell_Telnet_client },

   { "telnetd",   Shell_Telnetd },

   { "walkrt",    Shell_walkroute },

/*    Add your custom shell commands here    */

/* { "command_name",        Your_function }, */

   { "sh",        Shell_sh },

   { "help",      Shell_help },

   { "?",         Shell_command_list },   

   { "exit",      Shell_exit },

   { NULL,        NULL },

};

const SHELL_COMMAND_STRUCT Telnetd_shell_commands[] = {

   /* RTCS commands */

   { "exit",      Shell_exit },     

   { "gethbn",    Shell_get_host_by_name },

   { "getrt",     Shell_getroute },

   { "help",      Shell_help },

   { "ipconfig",  Shell_ipconfig },     

   { "netstat",   Shell_netstat },

   { "pause",     Shell_pause },

#if RTCSCFG_ENABLE_ICMP     

   { "ping",      Shell_ping },

#endif

   { "telnet",    Shell_Telnet_client },

   { "walkrt",    Shell_walkroute },

   { "?",         Shell_command_list },    

   { NULL,        NULL }

};

HTTPSRV_AUTH_USER_STRUCT users[] = {

    {"developer", "freescale"},

    { NULL, NULL} /* Array terminator */

};

HTTPSRV_AUTH_REALM_STRUCT auth_realms[] = {

    { "Freescale webpage", "rtc.html",     HTTPSRV_AUTH_BASIC,   users},

    { NULL,                NULL,           HTTPSRV_AUTH_INVALID, NULL} /* Array terminator */

};

void shell_task(uint_32 data);

void control_task(uint_32 data);

TASK_TEMPLATE_STRUCT MQX_template_list[] =

{

/*  Task number, Entry point, Stack, Pri, String, Auto? */

   {MAIN_TASK,        Main_task,        2000,      8,        "main",         MQX_AUTO_START_TASK},

   {CONTROL_TASK,    control_task,    2000,    9,        "Control_task",        0,       0,      0},

   {SHELL_TASK,        shell_task,        2000,    9,        "Shell_task",        0,       0,      0},

   { 0 }

};

void control_task(uint_32 data){

    for (;;){

        //counter++;

        counter = real_desPSI;

        counter2 = real_startPSI;

        counter3 = boostMode;

    }

}

void shell_task(uint_32 data){   

    for (;;){

        /* Run the shell */

        Shell(Shell_commands, NULL);

        printf("Shell exited, restarting...\n");

    }

}

void Main_task(uint_32 initial_data)

{

    int_32                               error;

    uint_32                              server[BSP_ENET_DEVICE_COUNT];

    extern const HTTPSRV_CGI_LINK_STRUCT cgi_lnk_tbl[];

    extern const TFS_DIR_ENTRY           tfs_data[];

    HTTPSRV_PARAM_STRUCT                 params[BSP_ENET_DEVICE_COUNT];

    uint_32                              ip_addr[BSP_ENET_DEVICE_COUNT];   

    uint_32                              i = 0;

    char*                                indexes[BSP_ENET_DEVICE_COUNT];

    uint_8                                  n_devices = BSP_ENET_DEVICE_COUNT;

   

    #if !HTTP_USE_ONE_SERVER

    uint_8 n_servers = BSP_ENET_DEVICE_COUNT;

    #else

    uint_8 n_servers = 1;

    #endif

   

    _int_install_unexpected_isr();

       

   /* Install ramdisk - MFS init */

    Ram_disk_start();

 

   /* RTCS init */

    rtcs_init();

    ip_addr[0] = ENET_IPADDR;

    ip_addr[1] = WIFI_IPADDR;

   

    /* Start HTTP server on each interface */

    for (i = 0; (i < n_devices) && (n_devices != 0); i++)

    {

        indexes[i] = (char*) _mem_alloc_zero(sizeof("\\index_x.html"));

        if (indexes[i] == NULL)

        {

            printf("\n Failed to allocate memory.");

            _task_block();

        }

    }

   

    /* Install trivial file system. HTTP server pages are stored there. */

    error = _io_tfs_install("tfs:", tfs_data);

   

    /* Start HTTP server on each interface */

    for (i = 0; i < n_servers; i++)

    {

        _mem_zero(&params[i], sizeof(HTTPSRV_PARAM_STRUCT));

        params[i].af = HTTP_INET_AF;  //IPv4, IPv6 or from config.h

        #if RTCSCFG_ENABLE_IP6

        /* Set interface number here. Zero is any. */

        params[i].ipv6_scope_id = HTTP_SCOPE_ID;

        #endif

        sprintf(indexes[i], "\\index.html", i);

        params[i].root_dir = "tfs:";

        params[i].index_page = indexes[i];

        params[i].auth_table = auth_realms;

        printf("Starting http server No.%d on IP", i);

        /*

        ** If there is only one server listen on any IP address

        ** so address can change in runtime (DHCP etc.).

        ** Otherwise we will use static IP for server.

        */

        if (HTTP_INET_AF & AF_INET)

        {

            #if RTCSCFG_ENABLE_IP4

            if ((i == 0) && (n_servers == 1))

            {

                params[i].ipv4_address.s_addr = INADDR_ANY;

            }

            else

            {

                params[i].ipv4_address.s_addr = ip_addr[i];

            }

            /* Print active IPv4 address */

            printf(" %d.%d.%d.%d", IPBYTES(ip_addr[i]));

            #endif

        }

        if (HTTP_INET_AF & AF_INET6)

        {

            #if RTCSCFG_ENABLE_IP6

            IPCFG6_GET_ADDR_DATA data;

            char prn_addr6[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];

           

            ipcfg6_get_addr_info_n(0, 0, &data);

            if(inet_ntop(AF_INET6, &(data.ip_addr), prn_addr6, sizeof(prn_addr6)))

            {

                /* Print active IPv6 address */

                printf("%s %s", (HTTP_INET_AF & AF_INET) ? " and" : "", prn_addr6);

            }

            #endif

        }

        /*

        ** Maximum default number of available sockets in RTCS is six.

        ** Maximum of two are used for HTTP server as listening sockets (one for IPv4 and one for IPv6).

        ** So we take two of sockets and use them for sessions.

        */

        params[i].max_ses = 2;

        params[i].cgi_lnk_tbl = (HTTPSRV_CGI_LINK_STRUCT*) cgi_lnk_tbl;

        /* There are a lot of static data in CGIs so we have to set large enough stack for script handler */

        params[i].script_stack = 1700;

        server[i] = HTTPSRV_init(&params[i]);

       

        printf("...");

        if (server[i] == RTCS_ERROR)

        {

            printf("[FAIL]\n");

        }

        else

        {

            printf("[OK]\n");

        }

    }

   

    /*

    indexes[0] = (char*) _mem_alloc_zero(sizeof("\\index_x.html"));

    if (indexes[0] == NULL)

    {

        printf("\n Failed to allocate memory.");

        _task_block();

    }

    */

   

    /*

    _mem_zero(&params[0], sizeof(HTTPSRV_PARAM_STRUCT));

    params[0].af = HTTP_INET_AF;  //IPv4, IPv6 or from config.h

    #if RTCSCFG_ENABLE_IP6

    // Set interface number here. Zero is any.

    params[0].ipv6_scope_id = HTTP_SCOPE_ID;

    #endif

    sprintf(indexes[0], "\\index.html", 0);

    params[0].root_dir = "tfs:";

    params[0].index_page = indexes[0];

    params[0].auth_table = auth_realms;

    printf("Starting http server No.%d on IP", 0);

    //

    // If there is only one server listen on any IP address

    // so address can change in runtime (DHCP etc.).

    // Otherwise we will use static IP for server.

   

    if (HTTP_INET_AF & AF_INET)

    {

        #if RTCSCFG_ENABLE_IP4

        if ((i == 0) && (n_servers == 1))

        {

            params[0].ipv4_address.s_addr = INADDR_ANY;

        }

        else

        {

            params[0].ipv4_address.s_addr = ip_addr[0];

        }

        // Print active IPv4 address

        printf(" %d.%d.%d.%d", IPBYTES(ip_addr[0]));

        #endif

    }

    if (HTTP_INET_AF & AF_INET6)

    {

        #if RTCSCFG_ENABLE_IP6

        IPCFG6_GET_ADDR_DATA data;

        char prn_addr6[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];

       

        ipcfg6_get_addr_info_n(0, 0, &data);

        if(inet_ntop(AF_INET6, &(data.ip_addr), prn_addr6, sizeof(prn_addr6)))

        {

            // Print active IPv6 address

            printf("%s %s", (HTTP_INET_AF & AF_INET) ? " and" : "", prn_addr6);

        }

        #endif

    }

    //

    // Maximum default number of available sockets in RTCS is six.

    // Maximum of two are used for HTTP server as listening sockets (one for IPv4 and one for IPv6).

    // So we take two of sockets and use them for sessions.

   

    params[0].max_ses = 2;

    params[0].cgi_lnk_tbl = (HTTPSRV_CGI_LINK_STRUCT*) cgi_lnk_tbl;

    // There are a lot of static data in CGIs so we have to set large enough stack for script handler

    params[0].script_stack = 2000;

    server[0] = HTTPSRV_init(&params[0]);

   

    printf("...");

    if (server[0] == RTCS_ERROR)

    {

        printf("[FAIL]\n");

    }

    else

    {

        printf("[OK]\n");

    }

    */

  

   /*******************************

   *

   * START YOUR CODING HERE

   *

   ********************************/

    _task_create(0, CONTROL_TASK, 0);

    _task_block();

    /*

    for(;;){

       

    }

    */

   

}

/* EOF */

rtcs_init.c

/**HEADER********************************************************************

*

* Copyright (c) 2008 Freescale Semiconductor;

* All Rights Reserved

*

* Copyright (c) 1989-2008 ARC International;

* All Rights Reserved

*

***************************************************************************

*

* THIS SOFTWARE IS PROVIDED BY FREESCALE "AS IS" AND ANY EXPRESSED OR

* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES

* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 

* IN NO EVENT SHALL FREESCALE OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,

* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR

* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)

* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,

* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING

* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF

* THE POSSIBILITY OF SUCH DAMAGE.

*

*END************************************************************************/

#include "main.h"

#include <ipcfg.h>

#include "iwcfg.h"

#if RTCS_PPP

#include <ppp.h>

#if ! RTCSCFG_ENABLE_VIRTUAL_ROUTES

#error This application requires RTCSCFG_ENABLE_VIRTUAL_ROUTES defined non-zero in user_config.h. Please recompile libraries (BSP, RTCS) with this option.

#endif

#if ! RTCSCFG_ENABLE_GATEWAYS

#error This application requires RTCSCFG_ENABLE_GATEWAYS defined non-zero in user_config.h. Please recompile libraries (BSP, RTCS) with this option.

#endif

#warning This application requires PPP device to be defined manually and being different from the default IO channel (BSP_DEFAULT_IO_CHANNEL). See PPP_DEVICE in config.h.

LWSEM_STRUCT ppp_sem;

static void PPP_linkup (pointer lwsem) {_lwsem_post(lwsem);}

extern void PPP_start(void);

char localname[] = "psti";

char localsecret[] = "secret";

char remotename[] = "guest";

char remotesecret[] = "anonymous";

PPP_SECRET lsecret =

   {sizeof(localname)-1,  sizeof(localsecret)-1,  localname,  localsecret};

PPP_SECRET lsecrets[] = {

   {sizeof(remotename)-1, sizeof(localsecret)-1,  remotename, localsecret},

   {0, 0, NULL, NULL}};

PPP_SECRET rsecrets[] = {

   {sizeof(remotename)-1, sizeof(remotesecret)-1, remotename, remotesecret},

   {0, 0, NULL, NULL}};

extern PPP_SECRET_PTR _PPP_PAP_LSECRET;

extern PPP_SECRET_PTR _PPP_PAP_RSECRETS;

extern char_ptr       _PPP_CHAP_LNAME;

extern PPP_SECRET_PTR _PPP_CHAP_LSECRETS;

extern PPP_SECRET_PTR _PPP_CHAP_RSECRETS;

/*FUNCTION*------------------------------------------------

*

* Function Name: PPP_start

* Comments     :

*   

*

*END*-----------------------------------------------------*/

void PPP_start(void)

{

    uint_32           error;

    _rtcs_if_handle   ihandle;

    MQX_FILE_PTR      pfile;

    _iopcb_handle     pio;

    _ppp_handle       phandle;

    IPCP_DATA_STRUCT  ipcp_data;

    _PPP_PAP_RSECRETS = rsecrets;    /* Require authentication, allow PAP */

    _PPP_PAP_LSECRET = &lsecret;     /* Allow peer to request PAP */

    _PPP_CHAP_LNAME = localname;     /* Needed by CHAP */

    _PPP_CHAP_RSECRETS = rsecrets;   /* Require authentication, allow CHAP */

    _PPP_CHAP_LSECRETS = lsecrets;   /* Allow peer to request CHAP */

    /* Install a route for a default gateway */

    RTCS_gate_add(GATE_ADDR, INADDR_ANY, INADDR_ANY);

    pfile = fopen(PPP_DEVICE, NULL);

#ifdef PPP_DEVICE_DUN

    _io_dun_install("dun:");

    pfile = fopen("dun:", (char_ptr)pfile);

#endif

    pio = _iopcb_ppphdlc_init(pfile);

    _PPP_ACCM = 0;

    error = PPP_initialize(pio, &phandle);

    if (error) {

       printf("\nPPP initialize: %lx", error);

       _task_block();

    } /* Endif */

    _iopcb_open(pio, PPP_lowerup, PPP_lowerdown, phandle);

    error = RTCS_if_add(phandle, RTCS_IF_PPP, &ihandle);

    if (error) {

       printf("\nIF add failed, error = %lx", error);

       _task_block();

    } /* Endif */

    _lwsem_create(&ppp_sem, 0);

    _mem_zero(&ipcp_data, sizeof(ipcp_data));

    ipcp_data.IP_UP              = PPP_linkup;

    ipcp_data.IP_DOWN            = NULL;

    ipcp_data.IP_PARAM           = &ppp_sem;

    ipcp_data.ACCEPT_LOCAL_ADDR  = FALSE;

    ipcp_data.ACCEPT_REMOTE_ADDR = FALSE;

    ipcp_data.LOCAL_ADDR         = PPP_LOCADDR;

    ipcp_data.REMOTE_ADDR        = PPP_PEERADDR;

    ipcp_data.DEFAULT_NETMASK    = TRUE;

    ipcp_data.DEFAULT_ROUTE      = TRUE;

    error = RTCS_if_bind_IPCP(ihandle, &ipcp_data);

    if (error) {

       printf("\nIF bind failed, error = %lx", error);

       _task_block();

    } /* Endif */

    printf("\nPlease initiate PPP connection.  Waiting...");

    _lwsem_wait(&ppp_sem);

    printf("\nPPP device %s bound to %d.%d.%d.%d", PPP_DEVICE, IPBYTES(ipcp_data.LOCAL_ADDR));

}

#endif /* RTCS_PPP */

static int_32 gWifiConnected = 0;

static _enet_handle handle[BSP_ENET_DEVICE_COUNT];

/*FUNCTION*-------------------------------------------------------------

*

* Function Name   : WifiConnected()

* Returned Value  : NA

* Comments        : Sets an LED to indicate that the wifi is connected

*                                       to the network.

*

*END*-----------------------------------------------------------------*/

static void WifiConnected(int value)

{

  gWifiConnected = 1;

  printf("Wifi connected!\n");

  return;

}

/*FUNCTION*-------------------------------------------------------------

*

* Function Name   : SetCallback()

* Returned Value  : SHELL_EXIT_SUCCESS if mode set successfully else ERROR CODE

* Comments        : Sets the Atheros wifi driver callback function which

*                                       the driver will call when the state of the wifi

*                                       connection changes.

*

*END*-----------------------------------------------------------------*/

static int_32 SetCallback()

{

   

     ATH_IOCTL_PARAM_STRUCT  inout_param;

    uint_32 error,dev_status;

    inout_param.cmd_id = ATH_SET_CONNECT_STATE_CALLBACK;

    inout_param.data = (void *)WifiConnected;

    inout_param.length = 4;

    error = ENET_mediactl(handle[ATHEROS_WIFI_DEFAULT_ENET_DEVICE],ENET_MEDIACTL_IS_INITIALIZED,&dev_status);

    if (SHELL_EXIT_SUCCESS != error)

    {

        return error;

    }

    if (dev_status == FALSE)

    {

        return ENET_ERROR;

    }

    error = ENET_mediactl(handle[ATHEROS_WIFI_DEFAULT_ENET_DEVICE],ENET_MEDIACTL_VENDOR_SPECIFIC,&inout_param);

    if (SHELL_EXIT_SUCCESS != error)

    {

        return error;

    }

    return SHELL_EXIT_SUCCESS;

   

}

extern uint_32        ipcfg_init_device_wifi(uint_32, _enet_address);

extern _mqx_uint      ENET_initialize_wifi(_mqx_uint, _enet_address, _mqx_uint, _enet_handle _PTR_);

/*FUNCTION*-----------------------------------------------------

*

* Function Name    : rtcs_init

* Comments     :

*    This function installs and initializes RTCS

*

*END*-----------------------------------------------------*/

void rtcs_init()

{

   IPCFG_IP_ADDRESS_DATA ip_data;

   _enet_address           enet_address;  

   uint_32 error = RTCS_create();

   if (error != RTCS_OK)

   {

      printf("\nRTCS failed to initialize, error = %X", error);

      _task_block();

   }

   _IP_forward = TRUE;

#ifdef BSP_ENET_DEVICE_COUNT

#if  (BSP_ENET_DEVICE_COUNT > 0)

   /*Following section is relevant only in case there as some enet driver available in BSP (FEC, MACNET, WIFI or other enet driver)*/

   /* calcualte unique mac address from IP ADDRES */

   ENET_get_mac_address (ENET_DEVICE, ENET_IPADDR, enet_address);

   error = ipcfg_init_device (ENET_DEVICE, enet_address);

   if (error != RTCS_OK)

   {

      printf("\nFailed to initialize ethernet device, error = %X", error);

      _task_block();

   }

  

   if (!HTTP_USE_ONE_SERVER){

       ip_data.ip = WIFI_IPADDR;

       ip_data.mask = WIFI_IPMASK;

       ip_data.gateway = WIFI_GATEWAY; 

       

       /* calcualte unique mac address from IP ADDRES */

       ENET_get_mac_address(ATHEROS_WIFI_DEFAULT_ENET_DEVICE, WIFI_IPADDR, enet_address);

       error = ipcfg_init_device_wifi(ATHEROS_WIFI_DEFAULT_ENET_DEVICE, enet_address);

       if (error != RTCS_OK)

       {

           printf("\nFailed to initialize wifi device, error = %X", error);

           _task_block();

       }

       if((error = ENET_initialize_wifi(1, enet_address, 1, &handle[1])) != ENETERR_INITIALIZED_DEVICE)

       {

         printf("Error during ENET_initialize device n.%d 0x%08x\n", 1, error);

         while(1){}

       }

      

       SetCallback();       

       /* hardcoded values for SSID and security params are used to try to connect. This

        * is fine for a demo but not very practicle for a "real world" product. Instead

        * one option is to use WPS as shown above. */

       iwcfg_set_essid (1,WIFI_SSID);

       iwcfg_set_sec_type (1,WIFI_SECURITY);

       iwcfg_set_mode (1,WIFI_NW_MODE);

       iwcfg_commit(1);

   }

#if RTCSCFG_ENABLE_LWDNS

   LWDNS_server_ipaddr = ENET_DNS;  

   ipcfg_add_dns_ip(ENET_DEVICE,LWDNS_server_ipaddr);

#endif /* RTCSCFG_ENABLE_LWDNS */

   printf("\nWaiting for ethernet cable plug in ... ");

   while(!ipcfg_get_link_active(ENET_DEVICE)) {};

   printf("Cable connected\n");

#if RTCS_DHCP

   printf("Contacting DHCP server ... ");

   error = ipcfg_bind_dhcp_wait(ENET_DEVICE, FALSE, &ip_data);

  

#else

   ip_data.ip = ENET_IPADDR;

   ip_data.mask = ENET_IPMASK;

   ip_data.gateway = ENET_GATEWAY;

   printf("Setting static IP address ... ");

   error = ipcfg_bind_staticip (ENET_DEVICE, &ip_data);

  

#endif /* RTCS_DHCP */

   if (error != IPCFG_ERROR_OK)

   {

      printf("\nRTCS failed to bind Ethernet interface with IPv4, error = %X", error);

      _task_block();

   }

   else

   {

      printf("OK\n");      

   }

   ipcfg_get_ip(ENET_DEVICE, &ip_data);

   printf("\nIP Address      : %d.%d.%d.%d\n",IPBYTES(ip_data.ip));

   printf("\nSubnet Address  : %d.%d.%d.%d\n",IPBYTES(ip_data.mask));

   printf("\nGateway Address : %d.%d.%d.%d\n",IPBYTES(ip_data.gateway));

   printf("\nDNS Address     : %d.%d.%d.%d\n",IPBYTES(ipcfg_get_dns_ip(ENET_DEVICE,0)));

   if (!HTTP_USE_ONE_SERVER){

        #if RTCS_DHCP

           printf("Contacting DHCP server ... ");

           error = ipcfg_bind_dhcp_wait(ATHEROS_WIFI_DEFAULT_ENET_DEVICE, FALSE, &ip_data);

          

        #else

           ip_data.ip = WIFI_IPADDR;

           ip_data.mask = WIFI_IPMASK;

           ip_data.gateway = WIFI_GATEWAY;

           printf("Setting static IP address ... ");

           error = ipcfg_bind_staticip (ATHEROS_WIFI_DEFAULT_ENET_DEVICE, &ip_data);

          

        #endif /* RTCS_DHCP */

           if (error != IPCFG_ERROR_OK)

           {

              printf("\nRTCS failed to bind Wifi interface with IPv4, error = %X", error);

              _task_block();

           }

           else

           {

              printf("OK\n");      

           }

       

           ipcfg_get_ip(ATHEROS_WIFI_DEFAULT_ENET_DEVICE, &ip_data);

           printf("\nIP Address      : %d.%d.%d.%d\n",IPBYTES(ip_data.ip));

           printf("\nSubnet Address  : %d.%d.%d.%d\n",IPBYTES(ip_data.mask));

           printf("\nGateway Address : %d.%d.%d.%d\n",IPBYTES(ip_data.gateway));

           printf("\nDNS Address     : %d.%d.%d.%d\n",IPBYTES(ipcfg_get_dns_ip(ATHEROS_WIFI_DEFAULT_ENET_DEVICE,0)));

   }

#endif /* BSP_ENET_DEVICE_COUNT > 0 */

#endif /* BSP_ENET_DEVICE_COUNT */  

  

#if RTCS_PPP

    PPP_start();

#endif /* RTCS_PPP */

   /* TODO: start server(s) in separate tasks */

}

#endif /* BSP_ENET_DEVICE_COUNT > 0 */

#endif /* BSP_ENET_DEVICE_COUNT */  

  

#if RTCS_PPP

    PPP_start();

#endif /* RTCS_PPP */

   /* TODO: start server(s) in separate tasks */

}

0 项奖励
回复

2,208 次查看
kubiznak_petr
Contributor V

No, you surely do not need to integrate any file into BSP, even the definitions that I mentioned the last time do not need to be defined in user_config.h. The Atheros driver is built on top of MQX, MQX does not know about it, it only needs to enable proper SPI channel and GPIO pins.

In case of further problems, please consider taking a ready-to-use solution, the ESL library (http://www.sqm4.com/esl-elnico-support-library). It includes the Atheros driver and brings implementation of Access Point and Managed modes, together with simple demo applications.

0 项奖励
回复

2,208 次查看
chinniwhites
Contributor II

So to port the http_serv demo for the atheros_wifi 4100 from k60 to k70, what exactly do I need to ..................................?

0 项奖励
回复

2,208 次查看
danielchai
Senior Contributor I

Hi Jennie,

Thank you.

I read the code and found it has two modes: managed mode and ad-hoc mode.

I am wondering if it supports WiFi Direct or if the TWR-WIFI-AR4100 patch implement the WiFi Direct mode?

Thank you again.

-Daniel

0 项奖励
回复

2,208 次查看
GottiLuca
Contributor IV

Dear Daniel,

The latest driver of AR4100(P) supports the so-called "Soft-AP" which is a prerequisite of Wi-fi Direct ( see wikipedia : http://en.wikipedia.org/wiki/Wi-Fi_Direct ).

I've not tested it, but I've found cited in this document http://cache.freescale.com/files/wireless_comm/doc/data_sheet/AR4100P_DATASHEET.pdf?fpsp=1&WT_TYPE=D... .

0 项奖励
回复

2,208 次查看
GottiLuca
Contributor IV

Dear Daniel,

Morevoer, included in the latest AR4100 patch for MQX 4.0.2 (  see  https://www.freescale.com/webapp/Download?colCode=FSLMQXOS_4_0_2__ATHEROS_BSP&appType=license&locati... ) there is a project and relative documentation on how to activate the soft-AP mode ( see directroty \Freescale_MQX_4_0_AR4100\demo\atheros_wifi\examples\throughput_demo ).

I believe that following this documentation and opening the relative project you should be able to find the way on how to activate wi-fi Soft-AP .

0 项奖励
回复