4 Replies Latest reply on Jan 3, 2017 10:22 PM by rameshm_61

    Set Wifi b/g/n mode

      I'm using the BCM43340/1 chip. Is there a way to force the chip to only use 80211.b mode? I am seeing the wl command, but is there a programmatic way to set this?

        • 1. Re: Set Wifi b/g/n mode
          Pang-ChuanL_91

          userc_25951

          There is not function to set 802.11 b mode directly.

          And you can try the following programmatic way.

          [Wiced\wwd\internal\wwd_management.c]
          wwd_management_wifi_on(...)
          {

          //Modify this parameter from GMODE_AUTO to GMODE_LEGACY_B
          /* Set the GMode */
              data = (uint32_t*) wwd_sdpcm_get_ioctl_buffer( &buffer, (uint16_t) 4 );
              if ( data == NULL )
              {
                  wiced_assert( "Could not get buffer for IOCTL", 0 != 0 );
                  return WWD_BUFFER_ALLOC_FAIL;
              }
              *data = (uint32_t) GMODE_AUTO;-->GMODE_LEGACY_B
              retval = wwd_sdpcm_send_ioctl( SDPCM_SET, WLC_SET_GMODE, buffer, 0, WWD_STA_INTERFACE );

               ...

          }

           

          BTW, because BCM43340 is dual band, you need to disable 11n by using this function before setting b mode.
          wiced_wifi_disable_11n_support(…)

          1 of 1 people found this helpful
          • 2. Re: Set Wifi b/g/n mode

            Thanks for the reply.

             

            However, this doesn't seem to work. It just hangs my system immediately.

             

            I am calling wiced_core_init(), disabling 11n, and then calling wiced_wlan_connectivity_init().

             

            If I don't disable 11n, it hangs when setting GMODE_LEGACY_B. If I disable 11n, it hangs in the disable_11n function.

             

            -Nick

            • 3. Re: Set Wifi b/g/n mode

              It seems that LegacyB is unsupported, at least for the BCM43341. Using the WL tool to send the WLC_SET_GMODE command, I am getting "Unsupported" back.

              • 4. Re: Set Wifi b/g/n mode

                Hello Nick Crast,

                 

                You have modified the GMODE but not disabled nmode.

                You need to follow the below steps to make the device to use only B-mode:

                1) First disable 11n mode.

                2) Set the Gmode to legacy B mode.

                 

                modify the following functions in wwd_management_wifi_on()

                 

                    /* Disable PHY N-Mode */

                    data = wwd_sdpcm_get_iovar_buffer( &buffer, sizeof(uint32_t), IOVAR_STR_NMODE );

                    if ( data == NULL )

                    {

                        wiced_assert( "Could not get buffer for IOCTL", 0 != 0 );

                        return WWD_BUFFER_ALLOC_FAIL;

                    }

                    *data = 0;

                    wwd_sdpcm_send_iovar( SDPCM_SET, buffer, NULL, WWD_STA_INTERFACE );

                 

                 

                   /* Set the GMode to legacy B*/

                    data = (uint32_t*) wwd_sdpcm_get_ioctl_buffer( &buffer, (uint16_t) 4 );

                    if ( data == NULL )

                    {

                        wiced_assert( "Could not get buffer for IOCTL", 0 != 0 );

                        return WWD_BUFFER_ALLOC_FAIL;

                    }

                    *data = (uint32_t) GMODE_LEGACY_B;

                    retval = wwd_sdpcm_send_ioctl( SDPCM_SET, WLC_SET_GMODE, buffer, 0, WWD_STA_INTERFACE );

                    if ( retval != WWD_SUCCESS )

                    {

                        /* Note: System may time out here if bus interrupts are not working properly */

                        WPRINT_WWD_ERROR(("Error setting gmode\n"));

                        return retval;

                    }

                 

                If you need more info please let me know.

                 

                Best Regards,

                Ramesh Mylavarapu

                3 of 3 people found this helpful