mirror of https://github.com/ARMmbed/mbed-os.git
commit
67d1bb180b
|
@ -47,7 +47,6 @@ struct whd_scan_userdata {
|
|||
|
||||
static whd_scan_userdata interal_scan_data;
|
||||
static whd_scan_result_t internal_scan_result;
|
||||
static whd_scan_result_t *result_ptr = &internal_scan_result;
|
||||
|
||||
extern "C" void whd_emac_wifi_link_state_changed(bool state_up, whd_interface_t ifp);
|
||||
|
||||
|
@ -397,7 +396,7 @@ int WhdSTAInterface::scan(WiFiAccessPoint *aps, unsigned count)
|
|||
|
||||
|
||||
whd_res = (whd_result_t)whd_wifi_scan(_whd_emac.ifp, WHD_SCAN_TYPE_ACTIVE, WHD_BSS_TYPE_ANY,
|
||||
NULL, NULL, NULL, NULL, whd_scan_handler, (whd_scan_result_t **) &result_ptr, &interal_scan_data);
|
||||
NULL, NULL, NULL, NULL, whd_scan_handler, &internal_scan_result, &interal_scan_data);
|
||||
if (whd_res != WHD_SUCCESS) {
|
||||
res = whd_toerror(whd_res);
|
||||
} else {
|
||||
|
|
|
@ -6,4 +6,4 @@
|
|||
* MAC address is printed during WHD power up
|
||||
*/
|
||||
|
||||
#define NVRAM_GENERATED_MAC_ADDRESS "macaddr=00:A0:50:45:2e:c8"
|
||||
#define NVRAM_GENERATED_MAC_ADDRESS "macaddr=00:A0:50:d4:32:81"
|
||||
|
|
|
@ -1,98 +0,0 @@
|
|||
/*
|
||||
* Copyright 2019 Cypress Semiconductor Corporation
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/** @file whd_bus_types.h
|
||||
* Defines common data types used with WHD SDIO/SPI bus
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef INCLUDED_WHD_BUS_TYPES_H
|
||||
#define INCLUDED_WHD_BUS_TYPES_H
|
||||
|
||||
#include "whd.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/** @addtogroup busapi WHD Bus API
|
||||
* Allows WHD to operate with specific SDIO/SPI bus
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* WiFi device GPIO pin selections
|
||||
*/
|
||||
typedef enum whd_dev_gpio_sel
|
||||
{
|
||||
WHD_DEV_GPIO_SEL_GPIO0 = 0, /**< Select GPIO0 */
|
||||
} whd_dev_gpio_sel_t;
|
||||
|
||||
/**
|
||||
* Interrupt configuration structure
|
||||
*/
|
||||
typedef struct whd_intr_config
|
||||
{
|
||||
whd_dev_gpio_sel_t dev_gpio_sel; /**< WiFi device-side GPIO pin selection */
|
||||
whd_bool_t is_falling_edge; /**< Interrupt trigger (polarity) */
|
||||
} whd_intr_config_t;
|
||||
|
||||
/**
|
||||
* Prototype for a user-defined function to enable interrupt to be signaled.
|
||||
*
|
||||
* This function must be provided whenever @ref WHD_BUS_SDIO_OOB_INTR is set.
|
||||
*
|
||||
* WHD will call this function to enable or disable an interrupt depending on the enable bool variable. When the interrupt
|
||||
* is asserted, the IRQ handler must call the appropriate "asserted" function with the WHD
|
||||
* context pointer associated with the IRQ.
|
||||
*
|
||||
* @param whd_drv Pointer to handle instance of the driver
|
||||
* @param intr Opaque interrupt signal
|
||||
* @param enable WHD_TRUE means to enable the interrupt, otherwise disable.
|
||||
*/
|
||||
typedef void (*whd_enable_intr_func_t)(whd_driver_t whd_drv, const whd_variant_t intr, whd_bool_t enable);
|
||||
|
||||
/**
|
||||
* Prototype for a user-defined function to get interrupt configuration.
|
||||
*
|
||||
* WHD calls this function to get an interrupt's configuration.
|
||||
*
|
||||
* This function must be provided whenever @ref WHD_BUS_SDIO_OOB_INTR is set.
|
||||
*
|
||||
* @param whd_driver Pointer to handle instance of the driver
|
||||
* @param intr Opaque interrupt signal
|
||||
* @param config Pointer to the interrupt configuration
|
||||
*/
|
||||
typedef void (*whd_get_intr_config_func_t)(whd_driver_t whd_driver, const whd_variant_t intr,
|
||||
whd_intr_config_t *config);
|
||||
|
||||
/**
|
||||
* Structure of function pointers for bus operations.
|
||||
*/
|
||||
struct whd_bus_funcs
|
||||
{
|
||||
whd_enable_intr_func_t whd_enable_intr; /**< Enable interrupt to be signaled */
|
||||
whd_get_intr_config_func_t whd_get_intr_config; /**< Get interrupt configuration */
|
||||
};
|
||||
/* @} */
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /*extern "C" */
|
||||
#endif
|
||||
#endif /* INCLUDED_WHD_BUS_TYPES_H */
|
||||
|
|
@ -86,14 +86,15 @@ struct whd_resource_source
|
|||
*
|
||||
* @param whd_drv Pointer to handle instance of the driver
|
||||
* @param type Type of resource - WHD_RESOURCE_WLAN_FIRMWARE, WHD_RESOURCE_WLAN_NVRAM, WHD_RESOURCE_WLAN_CLM
|
||||
* @param blockno The number of block
|
||||
* @param data Pointer to a block of data
|
||||
* @param size_out Size of the resource
|
||||
*
|
||||
* @return WHD_SUCCESS or error code
|
||||
*
|
||||
*/
|
||||
uint32_t (*whd_get_resource_block)(whd_driver_t whd_drv, whd_resource_type_t type, const uint8_t **data,
|
||||
uint32_t *size_out);
|
||||
uint32_t (*whd_get_resource_block)(whd_driver_t whd_drv, whd_resource_type_t type,
|
||||
uint32_t blockno, const uint8_t **data, uint32_t *size_out);
|
||||
|
||||
/** Gets block count for the specified resource_type
|
||||
*
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
|
||||
#include <stdint.h>
|
||||
#include "cy_result.h"
|
||||
#include "cyhal_hw_types.h"
|
||||
|
||||
#ifndef INCLUDED_WHD_TYPES_H_
|
||||
#define INCLUDED_WHD_TYPES_H_
|
||||
|
@ -943,30 +944,25 @@ typedef struct
|
|||
} whd_wep_key_t;
|
||||
|
||||
/**
|
||||
* Variant data type.
|
||||
* Structure for Out-of-band interrupt config parameters which can be set by application during whd power up
|
||||
*/
|
||||
typedef union whd_variant
|
||||
typedef struct whd_oob_config
|
||||
{
|
||||
void *pvval; /**< Void pointer */
|
||||
uint32_t u32val; /**< uint32_t type variable */
|
||||
} whd_variant_t;
|
||||
|
||||
/**
|
||||
* SDIO bus will use the host-wake out-of-band (OOB) signal.
|
||||
* @ref whd_get_intr_config_func_t must be specified when this flag is set.
|
||||
*/
|
||||
#define WHD_BUS_SDIO_OOB_INTR (1UL << 0)
|
||||
cyhal_gpio_t host_oob_pin; /**< Host-side GPIO pin selection */
|
||||
uint8_t dev_gpio_sel; /**< WiFi device-side GPIO pin selection (must be zero) */
|
||||
whd_bool_t is_falling_edge; /**< Interrupt trigger (polarity) */
|
||||
uint8_t intr_priority; /**< OOB interrupt priority */
|
||||
} whd_oob_config_t;
|
||||
|
||||
/**
|
||||
* Structure for SDIO config parameters which can be set by application during whd power up
|
||||
*/
|
||||
typedef struct whd_sdio_config
|
||||
{
|
||||
uint32_t flags; /**< Configuration flags (see WHD_BUS_SDIO_XXX constants). */
|
||||
/* Bus config */
|
||||
whd_bool_t sdio_1bit_mode; /**< Default is false, means SDIO operates under 4 bit mode */
|
||||
whd_bool_t high_speed_sdio_clock; /**< Default is false, means SDIO operates in normal clock rate */
|
||||
whd_variant_t oob_intr; /**< Caller provided opaque data (@ref WHD_BUS_SDIO_OOB_INTR) */
|
||||
whd_oob_config_t oob_config; /**< Out-of-band interrupt configuration (required when bus can sleep) */
|
||||
} whd_sdio_config_t;
|
||||
|
||||
/**
|
||||
|
@ -976,7 +972,7 @@ typedef struct whd_spi_config
|
|||
{
|
||||
/* Bus config */
|
||||
whd_bool_t is_spi_normal_mode; /**< Default is false */
|
||||
whd_variant_t oob_intr; /**< Caller provided opaque data */
|
||||
whd_oob_config_t oob_config; /**< Out-of-band interrupt configuration */
|
||||
} whd_spi_config_t;
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
#define WHD_VERSION "1b9fceb7"
|
||||
#define WHD_BRANCH "master"
|
||||
#define WHD_DATE "2019-07-03 16:07:52 +0530"
|
||||
#define WHD_VERSION "v1.30.0-rc3-dirty"
|
||||
#define WHD_BRANCH "v1.30.0-rc3"
|
||||
#define WHD_DATE "2019-08-27 16:29:32 +0800"
|
||||
|
|
|
@ -76,43 +76,33 @@ extern uint32_t whd_init(whd_driver_t *whd_driver_ptr, whd_init_config_t *whd_in
|
|||
* @param whd_driver Pointer to handle instance of the driver
|
||||
* @param whd_config Configuration for SDIO bus
|
||||
* @param sdio_obj The SDHC hardware interface, from the Level 3 CY HW APIs
|
||||
* @param sdio_ops Pointer to a whd_sdio_funcs_t to provide SDIO services to the driver instance
|
||||
*
|
||||
* @return WHD_SUCCESS or Error code
|
||||
*/
|
||||
extern uint32_t whd_bus_sdio_attach(whd_driver_t whd_driver, whd_sdio_config_t *whd_config, void *sdio_obj,
|
||||
whd_sdio_funcs_t *sdio_ops);
|
||||
extern uint32_t whd_bus_sdio_attach(whd_driver_t whd_driver, whd_sdio_config_t *whd_config, cyhal_sdio_t *sdio_obj);
|
||||
|
||||
/** Notify the WLAN device that the SDIO host-wake signal asserted.
|
||||
/** Detach the WLAN Device to a specific SDIO bus
|
||||
*
|
||||
* This function may be called after the WHD calls @ref whd_enable_intr_func_t with enable
|
||||
* set to WHD_TRUE.
|
||||
*
|
||||
* @param whd_driver Pointer to handle instance of the driver
|
||||
* @param whd_driver Pointer to handle instance of the driver
|
||||
*/
|
||||
extern void whd_bus_sdio_oob_intr_asserted(whd_driver_t whd_driver);
|
||||
extern void whd_bus_sdio_detach(whd_driver_t whd_driver);
|
||||
|
||||
/** Attach the WLAN Device to a specific SPI bus
|
||||
*
|
||||
* @param whd_driver Pointer to handle instance of the driver
|
||||
* @param whd_config Configuration for SPI bus
|
||||
* @param spi_obj The SPI hardware interface, from the Level 3 CY HW APIs
|
||||
* @param spi_ops Pointer to a whd_spi_funcs_t to provide SPI services to the driver instance
|
||||
*
|
||||
* @return WHD_SUCCESS or Error code
|
||||
*/
|
||||
extern uint32_t whd_bus_spi_attach(whd_driver_t whd_driver, whd_spi_config_t *whd_config, void *spi_obj,
|
||||
whd_spi_funcs_t *spi_ops);
|
||||
extern uint32_t whd_bus_spi_attach(whd_driver_t whd_driver, whd_spi_config_t *whd_config, cyhal_spi_t *spi_obj);
|
||||
|
||||
/**
|
||||
* Notify the WLAN device that the SPI interrupt signal asserted.
|
||||
/** Detach the WLAN Device to a specific SPI bus
|
||||
*
|
||||
* This function may be called after the WHD calls @ref whd_enable_intr_func_t with enable
|
||||
* set to WHD_TRUE.
|
||||
*
|
||||
* @param whd_driver Pointer to the handle instance of the driver associated to the event
|
||||
* @param whd_driver Pointer to handle instance of the driver
|
||||
*/
|
||||
extern void whd_bus_spi_oob_intr_asserted(whd_driver_t whd_driver);
|
||||
extern void whd_bus_spi_detach(whd_driver_t whd_driver);
|
||||
|
||||
/* @} */
|
||||
|
||||
/** @addtogroup wifi WHD Wi-Fi API
|
||||
|
@ -263,7 +253,7 @@ extern uint32_t whd_wifi_scan(whd_interface_t ifp,
|
|||
const uint16_t *optional_channel_list,
|
||||
const whd_scan_extended_params_t *optional_extended_params,
|
||||
whd_scan_result_callback_t callback,
|
||||
whd_scan_result_t **result_ptr,
|
||||
whd_scan_result_t *result_ptr,
|
||||
void *user_data);
|
||||
|
||||
/** Abort a previously issued scan
|
||||
|
|
BIN
targets/TARGET_Cypress/TARGET_PSOC6/TARGET_WHD/resources/firmware/TARGET_43012/43012C0-mfgtest.bin
Normal file → Executable file
BIN
targets/TARGET_Cypress/TARGET_PSOC6/TARGET_WHD/resources/firmware/TARGET_43012/43012C0-mfgtest.bin
Normal file → Executable file
Binary file not shown.
BIN
targets/TARGET_Cypress/TARGET_PSOC6/TARGET_WHD/resources/firmware/TARGET_43012/43012C0-mfgtest.clm_blob
Normal file → Executable file
BIN
targets/TARGET_Cypress/TARGET_PSOC6/TARGET_WHD/resources/firmware/TARGET_43012/43012C0-mfgtest.clm_blob
Normal file → Executable file
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -13,414 +13,417 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "wiced_resource.h"
|
||||
|
||||
#if defined(CY_STORAGE_WIFI_DATA)
|
||||
CY_SECTION(CY_STORAGE_WIFI_DATA) __attribute__( (used) )
|
||||
#endif
|
||||
const unsigned char wifi_firmware_clm_blob_image_data[7697] =
|
||||
{
|
||||
66, 76, 79, 66, 60, 0, 0, 0, 67, 15, 222, 237, 1, 0, 0, 0, 2, 0, 0,
|
||||
0, 0, 0, 0, 0, 60, 0, 0, 0, 209, 29, 0, 0, 126, 28, 4, 82, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 13, 30, 0, 0, 4, 0, 0, 0, 147, 68, 77, 121, 0, 0, 0,
|
||||
0, 67, 76, 77, 32, 68, 65, 84, 65, 0, 0, 18, 0, 2, 0, 57, 46, 49, 48,
|
||||
46, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 46, 51, 54, 46,
|
||||
49, 0, 0, 0, 0, 0, 0, 0, 0, 40, 18, 0, 0, 67, 108, 109, 73, 109, 112,
|
||||
111, 114, 116, 58, 32, 49, 46, 51, 52, 46, 49, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 66, 114, 111, 97, 100, 99, 111, 109, 45, 48, 46, 48,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 132, 17, 0, 0, 16, 4, 5, 6,
|
||||
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 18, 4, 5, 6, 7, 8,
|
||||
9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 35, 97, 0, 15, 18,
|
||||
17, 19, 10, 35, 110, 0, 16, 8, 255, 255, 0, 35, 114, 0, 15, 19, 17,
|
||||
20, 10, 48, 65, 0, 7, 8, 255, 255, 16, 48, 66, 0, 0, 14, 0, 17, 16,
|
||||
48, 67, 0, 7, 6, 12, 5, 25, 65, 67, 0, 16, 8, 255, 255, 16, 65, 68,
|
||||
0, 7, 33, 13, 39, 57, 65, 69, 0, 7, 8, 6, 7, 32, 65, 69, 1, 7, 33, 6,
|
||||
43, 32, 65, 70, 0, 7, 33, 13, 39, 57, 65, 71, 0, 7, 41, 6, 47, 32, 65,
|
||||
73, 0, 6, 15, 5, 18, 26, 65, 76, 0, 7, 33, 6, 43, 32, 65, 77, 0, 7,
|
||||
5, 12, 3, 9, 65, 78, 0, 7, 14, 6, 17, 32, 65, 79, 0, 7, 8, 255, 255,
|
||||
16, 65, 81, 0, 16, 8, 255, 255, 16, 65, 82, 0, 7, 25, 6, 25, 0, 65,
|
||||
82, 1, 7, 14, 6, 17, 0, 65, 83, 0, 6, 15, 5, 18, 26, 65, 84, 0, 7, 33,
|
||||
6, 43, 32, 65, 84, 1, 7, 37, 6, 36, 32, 65, 85, 0, 18, 42, 22, 46, 9,
|
||||
65, 85, 2, 18, 42, 21, 45, 0, 65, 87, 0, 7, 34, 6, 31, 1, 65, 88, 0,
|
||||
16, 8, 255, 255, 16, 65, 90, 0, 7, 14, 6, 17, 32, 66, 65, 0, 7, 33,
|
||||
6, 43, 32, 66, 66, 0, 7, 22, 12, 23, 25, 66, 68, 0, 7, 46, 6, 58, 0,
|
||||
66, 69, 0, 7, 33, 6, 43, 32, 66, 69, 1, 7, 37, 6, 36, 32, 66, 70, 0,
|
||||
7, 33, 13, 39, 25, 66, 71, 0, 7, 33, 6, 43, 32, 66, 71, 1, 7, 37, 6,
|
||||
36, 32, 66, 72, 0, 7, 21, 6, 22, 0, 66, 73, 0, 7, 33, 13, 39, 25, 66,
|
||||
74, 0, 7, 33, 13, 39, 57, 66, 76, 0, 16, 8, 255, 255, 16, 66, 77, 0,
|
||||
6, 15, 5, 18, 26, 66, 78, 0, 7, 8, 255, 255, 0, 66, 78, 1, 17, 41, 20,
|
||||
47, 0, 66, 79, 0, 7, 15, 12, 18, 42, 66, 81, 0, 16, 8, 255, 255, 16,
|
||||
66, 82, 0, 7, 43, 6, 52, 32, 66, 83, 0, 18, 21, 21, 22, 0, 66, 84, 0,
|
||||
7, 8, 12, 7, 56, 66, 86, 0, 16, 8, 255, 255, 16, 66, 87, 0, 7, 45, 12,
|
||||
51, 57, 66, 89, 0, 7, 33, 255, 255, 0, 66, 90, 0, 7, 15, 12, 18, 26,
|
||||
67, 65, 0, 0, 21, 0, 22, 0, 67, 65, 2, 6, 15, 5, 18, 26, 67, 67, 0,
|
||||
16, 8, 255, 255, 16, 67, 68, 0, 7, 33, 13, 39, 57, 67, 70, 0, 7, 33,
|
||||
13, 39, 25, 67, 71, 0, 7, 33, 13, 39, 57, 67, 72, 0, 7, 33, 6, 43, 32,
|
||||
67, 72, 1, 7, 37, 6, 36, 32, 67, 73, 0, 7, 33, 13, 39, 57, 67, 75, 0,
|
||||
7, 44, 12, 50, 25, 67, 76, 0, 7, 7, 6, 6, 1, 67, 77, 0, 7, 33, 13, 39,
|
||||
25, 67, 78, 0, 21, 48, 24, 53, 0, 67, 79, 0, 7, 13, 6, 11, 32, 67, 80,
|
||||
0, 16, 8, 255, 255, 16, 67, 82, 0, 7, 14, 6, 15, 32, 67, 85, 0, 7, 8,
|
||||
13, 255, 57, 67, 86, 0, 7, 33, 13, 39, 25, 67, 87, 0, 16, 8, 255, 255,
|
||||
16, 67, 88, 0, 18, 42, 21, 46, 25, 67, 89, 0, 7, 33, 6, 43, 32, 67,
|
||||
89, 1, 7, 37, 6, 36, 32, 67, 90, 0, 7, 33, 6, 43, 32, 67, 90, 1, 7,
|
||||
37, 6, 36, 32, 68, 69, 0, 7, 33, 6, 43, 32, 68, 69, 3, 7, 37, 6, 36,
|
||||
32, 68, 74, 0, 7, 8, 255, 255, 16, 68, 75, 0, 7, 33, 6, 43, 32, 68,
|
||||
75, 1, 7, 37, 6, 36, 32, 68, 77, 0, 7, 15, 12, 18, 26, 68, 79, 0, 7,
|
||||
15, 12, 18, 26, 68, 90, 0, 7, 5, 6, 4, 32, 69, 48, 0, 7, 12, 6, 13,
|
||||
32, 69, 67, 0, 7, 14, 6, 17, 32, 69, 69, 0, 7, 33, 6, 43, 32, 69, 69,
|
||||
1, 7, 37, 6, 36, 32, 69, 71, 0, 7, 41, 19, 48, 0, 69, 72, 0, 7, 6, 12,
|
||||
5, 25, 69, 82, 0, 7, 8, 255, 255, 16, 69, 83, 0, 7, 33, 6, 43, 32, 69,
|
||||
83, 1, 7, 37, 6, 36, 32, 69, 84, 0, 7, 33, 6, 43, 0, 70, 73, 0, 7, 33,
|
||||
6, 43, 32, 70, 73, 1, 7, 37, 6, 36, 32, 70, 74, 0, 7, 42, 12, 46, 25,
|
||||
70, 75, 0, 7, 33, 13, 39, 25, 70, 77, 0, 6, 15, 5, 18, 26, 70, 79, 0,
|
||||
7, 33, 13, 39, 57, 70, 82, 0, 7, 33, 6, 43, 32, 70, 82, 1, 7, 37, 6,
|
||||
36, 32, 71, 65, 0, 7, 33, 13, 39, 25, 71, 66, 0, 7, 33, 6, 43, 32, 71,
|
||||
66, 1, 7, 37, 6, 36, 32, 71, 68, 0, 7, 43, 6, 52, 0, 71, 69, 0, 7, 33,
|
||||
13, 39, 57, 71, 70, 0, 7, 33, 6, 43, 0, 71, 71, 0, 7, 33, 13, 39, 25,
|
||||
71, 72, 0, 7, 33, 13, 39, 57, 71, 73, 0, 7, 33, 13, 39, 25, 71, 76,
|
||||
0, 16, 8, 255, 255, 16, 71, 77, 0, 7, 33, 13, 39, 25, 71, 78, 0, 7,
|
||||
33, 13, 39, 57, 71, 80, 0, 7, 33, 6, 43, 0, 71, 81, 0, 7, 33, 13, 39,
|
||||
25, 71, 82, 0, 7, 33, 6, 43, 32, 71, 82, 1, 7, 37, 6, 36, 32, 71, 83,
|
||||
0, 16, 8, 255, 255, 16, 71, 84, 0, 7, 14, 11, 17, 16, 71, 85, 0, 0,
|
||||
14, 0, 17, 0, 71, 87, 0, 7, 33, 13, 39, 25, 71, 89, 0, 7, 46, 12, 54,
|
||||
25, 72, 75, 0, 18, 43, 22, 52, 0, 72, 77, 0, 16, 8, 255, 255, 16, 72,
|
||||
78, 0, 7, 47, 12, 60, 10, 72, 82, 0, 7, 33, 6, 43, 32, 72, 82, 1, 7,
|
||||
37, 6, 36, 32, 72, 84, 0, 7, 46, 12, 54, 9, 72, 85, 0, 7, 33, 6, 43,
|
||||
32, 72, 85, 1, 7, 37, 6, 36, 32, 73, 68, 0, 7, 8, 6, 7, 0, 73, 68, 5,
|
||||
7, 53, 13, 64, 25, 73, 69, 0, 7, 33, 6, 43, 32, 73, 69, 1, 7, 37, 6,
|
||||
36, 32, 73, 76, 0, 7, 5, 6, 4, 32, 73, 77, 0, 7, 33, 13, 39, 25, 73,
|
||||
78, 0, 17, 41, 20, 47, 32, 73, 79, 0, 7, 33, 13, 39, 25, 73, 81, 0,
|
||||
7, 33, 13, 39, 25, 73, 82, 0, 7, 8, 13, 255, 57, 73, 83, 0, 7, 33, 6,
|
||||
43, 32, 73, 83, 1, 7, 37, 6, 36, 32, 73, 84, 0, 7, 33, 6, 43, 32, 73,
|
||||
84, 1, 7, 37, 6, 36, 32, 74, 48, 0, 7, 38, 15, 42, 0, 74, 49, 0, 14,
|
||||
12, 255, 255, 0, 74, 50, 0, 14, 5, 255, 255, 0, 74, 51, 0, 14, 38, 255,
|
||||
255, 0, 74, 52, 0, 14, 24, 255, 255, 0, 74, 53, 0, 14, 27, 255, 255,
|
||||
0, 74, 54, 0, 14, 28, 255, 255, 0, 74, 55, 0, 14, 29, 255, 255, 0, 74,
|
||||
56, 0, 14, 40, 255, 255, 0, 74, 57, 0, 7, 28, 15, 27, 0, 74, 69, 0,
|
||||
7, 33, 13, 39, 25, 74, 77, 0, 7, 46, 13, 59, 25, 74, 79, 0, 7, 1, 6,
|
||||
0, 32, 74, 80, 0, 14, 39, 16, 40, 1, 74, 80, 1, 14, 28, 15, 27, 0, 74,
|
||||
80, 3, 14, 39, 15, 41, 1, 75, 65, 0, 20, 17, 23, 16, 3, 75, 67, 0, 20,
|
||||
46, 23, 54, 3, 75, 68, 0, 7, 49, 6, 56, 3, 75, 69, 0, 7, 33, 6, 38,
|
||||
33, 75, 71, 0, 7, 33, 13, 39, 25, 75, 72, 0, 7, 43, 6, 52, 0, 75, 73,
|
||||
0, 18, 42, 21, 46, 25, 75, 75, 0, 20, 8, 23, 7, 0, 75, 77, 0, 7, 33,
|
||||
13, 39, 25, 75, 78, 0, 7, 15, 12, 18, 26, 75, 80, 0, 16, 8, 255, 255,
|
||||
16, 75, 82, 0, 16, 53, 18, 44, 0, 75, 82, 4, 21, 30, 24, 28, 17, 75,
|
||||
87, 0, 7, 8, 6, 7, 32, 75, 87, 1, 7, 5, 6, 4, 32, 75, 88, 0, 7, 46,
|
||||
6, 54, 3, 75, 89, 0, 0, 14, 0, 17, 0, 75, 90, 0, 7, 36, 12, 34, 8, 76,
|
||||
65, 0, 7, 34, 6, 31, 1, 76, 66, 0, 7, 46, 6, 58, 32, 76, 67, 0, 7, 15,
|
||||
12, 18, 26, 76, 73, 0, 7, 33, 6, 43, 0, 76, 73, 1, 7, 37, 6, 36, 0,
|
||||
76, 75, 0, 17, 43, 20, 52, 0, 76, 82, 0, 7, 43, 19, 50, 17, 76, 83,
|
||||
0, 7, 33, 6, 43, 0, 76, 84, 0, 7, 33, 6, 43, 32, 76, 84, 1, 7, 37, 6,
|
||||
36, 32, 76, 85, 0, 7, 33, 6, 43, 32, 76, 85, 1, 7, 37, 6, 36, 32, 76,
|
||||
86, 0, 7, 33, 6, 43, 32, 76, 86, 1, 7, 37, 6, 36, 32, 76, 89, 0, 7,
|
||||
8, 14, 255, 16, 77, 65, 0, 7, 12, 19, 12, 32, 77, 65, 1, 7, 5, 19, 4,
|
||||
32, 77, 67, 0, 7, 33, 6, 43, 0, 77, 68, 0, 7, 33, 6, 43, 32, 77, 69,
|
||||
0, 7, 33, 6, 43, 32, 77, 70, 0, 7, 45, 12, 51, 25, 77, 71, 0, 7, 33,
|
||||
13, 39, 57, 77, 72, 0, 16, 8, 255, 255, 16, 77, 75, 0, 7, 33, 6, 43,
|
||||
32, 77, 76, 0, 7, 33, 13, 39, 25, 77, 77, 0, 7, 33, 13, 39, 25, 77,
|
||||
78, 0, 7, 14, 11, 17, 32, 77, 79, 0, 7, 49, 6, 58, 0, 77, 80, 0, 6,
|
||||
15, 5, 18, 26, 77, 81, 0, 7, 33, 6, 43, 0, 77, 82, 0, 7, 33, 6, 43,
|
||||
0, 77, 83, 0, 7, 33, 13, 39, 57, 77, 84, 0, 7, 33, 6, 43, 32, 77, 84,
|
||||
1, 7, 37, 6, 36, 32, 77, 85, 0, 7, 33, 6, 43, 32, 77, 86, 0, 7, 10,
|
||||
6, 10, 32, 77, 87, 0, 7, 46, 6, 58, 32, 77, 88, 0, 7, 5, 6, 4, 0, 77,
|
||||
88, 1, 7, 21, 6, 22, 0, 77, 89, 0, 17, 41, 20, 47, 0, 77, 90, 0, 7,
|
||||
16, 12, 14, 26, 78, 65, 0, 7, 16, 12, 14, 26, 78, 67, 0, 7, 33, 13,
|
||||
39, 25, 78, 69, 0, 7, 33, 13, 39, 25, 78, 70, 0, 7, 42, 11, 45, 0, 78,
|
||||
71, 0, 7, 26, 13, 26, 57, 78, 73, 0, 7, 14, 6, 17, 32, 78, 76, 0, 7,
|
||||
33, 6, 43, 32, 78, 76, 1, 7, 37, 6, 36, 32, 78, 79, 0, 7, 33, 6, 43,
|
||||
32, 78, 79, 1, 7, 37, 6, 36, 32, 78, 80, 0, 17, 9, 20, 8, 0, 78, 82,
|
||||
0, 7, 33, 13, 39, 25, 78, 85, 0, 7, 14, 255, 255, 16, 78, 90, 0, 7,
|
||||
43, 6, 52, 32, 79, 77, 0, 7, 33, 6, 43, 32, 80, 65, 0, 17, 0, 20, 24,
|
||||
32, 80, 69, 0, 7, 14, 6, 17, 32, 80, 70, 0, 7, 33, 13, 39, 25, 80, 71,
|
||||
0, 7, 2, 6, 0, 0, 80, 72, 0, 7, 43, 6, 52, 32, 80, 75, 0, 7, 49, 11,
|
||||
55, 33, 80, 76, 0, 7, 33, 6, 43, 32, 80, 76, 1, 7, 37, 6, 36, 32, 80,
|
||||
77, 0, 7, 33, 13, 39, 25, 80, 78, 0, 16, 8, 255, 255, 16, 80, 82, 0,
|
||||
0, 14, 0, 17, 0, 80, 83, 0, 16, 8, 255, 255, 0, 80, 84, 0, 7, 33, 6,
|
||||
43, 32, 80, 84, 1, 7, 37, 6, 36, 32, 80, 87, 0, 7, 15, 12, 18, 26, 80,
|
||||
89, 0, 7, 46, 6, 58, 0, 80, 89, 1, 7, 43, 6, 52, 0, 81, 49, 0, 2, 8,
|
||||
2, 7, 0, 81, 50, 0, 0, 31, 0, 29, 0, 81, 65, 0, 7, 49, 13, 57, 57, 82,
|
||||
69, 0, 7, 33, 6, 43, 0, 82, 79, 0, 7, 33, 6, 43, 32, 82, 79, 1, 7, 37,
|
||||
6, 36, 32, 82, 83, 0, 7, 33, 6, 43, 32, 82, 85, 0, 7, 8, 255, 255, 0,
|
||||
82, 85, 5, 7, 11, 11, 9, 1, 82, 87, 0, 7, 33, 13, 39, 57, 83, 65, 0,
|
||||
7, 34, 6, 32, 33, 83, 66, 0, 7, 8, 255, 255, 16, 83, 67, 0, 7, 45, 12,
|
||||
51, 25, 83, 68, 0, 7, 8, 13, 255, 57, 83, 69, 0, 7, 33, 6, 43, 32, 83,
|
||||
69, 1, 7, 37, 6, 36, 32, 83, 71, 0, 17, 44, 20, 50, 33, 83, 72, 0, 16,
|
||||
8, 255, 255, 16, 83, 73, 0, 7, 33, 6, 43, 32, 83, 73, 1, 7, 37, 6, 36,
|
||||
32, 83, 74, 0, 16, 8, 255, 255, 16, 83, 75, 0, 7, 33, 6, 43, 32, 83,
|
||||
75, 1, 7, 37, 6, 36, 32, 83, 76, 0, 7, 33, 13, 39, 25, 83, 77, 0, 7,
|
||||
33, 13, 39, 25, 83, 78, 0, 7, 33, 6, 43, 32, 83, 79, 0, 7, 8, 255, 255,
|
||||
16, 83, 82, 0, 7, 33, 13, 39, 25, 83, 84, 0, 7, 33, 13, 39, 25, 83,
|
||||
86, 0, 7, 14, 11, 17, 32, 83, 88, 0, 16, 8, 255, 255, 16, 83, 89, 0,
|
||||
16, 8, 255, 255, 16, 83, 90, 0, 7, 33, 13, 39, 25, 84, 65, 0, 16, 8,
|
||||
255, 255, 16, 84, 67, 0, 7, 33, 13, 39, 25, 84, 68, 0, 7, 33, 13, 39,
|
||||
25, 84, 70, 0, 7, 33, 13, 39, 25, 84, 71, 0, 7, 33, 13, 39, 25, 84,
|
||||
72, 0, 7, 43, 6, 52, 32, 84, 74, 0, 7, 33, 13, 39, 25, 84, 75, 0, 16,
|
||||
8, 255, 255, 16, 84, 76, 0, 7, 33, 13, 39, 57, 84, 77, 0, 7, 33, 13,
|
||||
39, 25, 84, 78, 0, 7, 5, 6, 4, 32, 84, 79, 0, 7, 8, 255, 255, 16, 84,
|
||||
82, 0, 7, 5, 6, 4, 32, 84, 82, 7, 7, 33, 13, 39, 57, 84, 84, 0, 7, 43,
|
||||
6, 52, 32, 84, 86, 0, 7, 8, 255, 255, 16, 84, 87, 0, 0, 50, 0, 63, 0,
|
||||
84, 87, 2, 0, 51, 0, 61, 0, 84, 90, 0, 7, 33, 13, 39, 25, 85, 65, 0,
|
||||
7, 8, 255, 255, 0, 85, 71, 0, 7, 34, 6, 31, 33, 85, 77, 0, 0, 14, 0,
|
||||
17, 0, 85, 83, 0, 5, 32, 4, 30, 10, 85, 83, 25, 11, 8, 9, 7, 0, 85,
|
||||
83, 26, 4, 8, 1, 7, 0, 85, 89, 0, 18, 43, 21, 52, 0, 85, 90, 0, 7, 33,
|
||||
13, 39, 25, 86, 65, 0, 7, 33, 6, 43, 0, 86, 67, 0, 7, 15, 12, 18, 26,
|
||||
86, 69, 0, 7, 41, 6, 47, 0, 86, 71, 0, 7, 33, 6, 43, 0, 86, 73, 0, 0,
|
||||
14, 0, 17, 0, 86, 78, 0, 7, 5, 6, 4, 0, 86, 85, 0, 7, 43, 12, 49, 25,
|
||||
87, 70, 0, 7, 33, 12, 43, 25, 87, 83, 0, 7, 43, 11, 49, 17, 88, 48,
|
||||
0, 3, 20, 0, 21, 0, 88, 49, 0, 7, 41, 6, 47, 0, 88, 50, 0, 19, 3, 6,
|
||||
2, 0, 88, 51, 0, 7, 33, 6, 35, 32, 88, 65, 0, 7, 3, 255, 255, 0, 88,
|
||||
66, 0, 0, 23, 255, 255, 0, 88, 82, 0, 1, 52, 3, 62, 0, 88, 83, 0, 12,
|
||||
4, 10, 1, 33, 88, 84, 0, 11, 8, 9, 7, 32, 88, 85, 0, 8, 37, 7, 37, 32,
|
||||
88, 86, 0, 10, 8, 8, 7, 32, 88, 87, 0, 20, 35, 23, 33, 34, 88, 88, 0,
|
||||
9, 33, 255, 255, 32, 88, 89, 0, 7, 33, 6, 43, 32, 88, 90, 0, 13, 8,
|
||||
255, 255, 32, 89, 49, 0, 0, 14, 255, 255, 16, 89, 50, 0, 0, 14, 255,
|
||||
255, 16, 89, 51, 0, 0, 14, 255, 255, 16, 89, 52, 0, 0, 14, 255, 255,
|
||||
16, 89, 53, 0, 0, 14, 255, 255, 16, 89, 54, 0, 0, 14, 255, 255, 16,
|
||||
89, 55, 0, 0, 14, 255, 255, 16, 89, 69, 0, 7, 45, 12, 51, 25, 89, 84,
|
||||
0, 7, 33, 6, 43, 0, 89, 89, 0, 16, 8, 255, 255, 0, 90, 49, 0, 16, 8,
|
||||
255, 255, 16, 90, 50, 0, 16, 8, 255, 255, 16, 90, 51, 0, 16, 8, 255,
|
||||
255, 16, 90, 52, 0, 16, 8, 255, 255, 16, 90, 53, 0, 16, 8, 255, 255,
|
||||
16, 90, 54, 0, 16, 8, 255, 255, 16, 90, 55, 0, 16, 8, 255, 255, 16,
|
||||
90, 56, 0, 16, 8, 255, 255, 16, 90, 57, 0, 16, 8, 255, 255, 16, 90,
|
||||
65, 0, 7, 33, 6, 43, 32, 90, 77, 0, 17, 41, 20, 47, 0, 90, 87, 0, 7,
|
||||
33, 13, 39, 57, 38, 62, 8, 102, 142, 8, 151, 175, 8, 16, 4, 5, 6, 7,
|
||||
8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 18, 4, 5, 6, 7, 8, 9,
|
||||
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 4, 5, 76, 0, 3, 76,
|
||||
6, 3, 76, 10, 3, 76, 11, 3, 66, 12, 3, 1, 4, 62, 0, 0, 66, 4, 0, 62,
|
||||
9, 0, 58, 10, 0, 4, 3, 58, 0, 3, 66, 7, 3, 58, 12, 3, 1, 5, 42, 0, 0,
|
||||
50, 3, 0, 60, 8, 0, 54, 9, 0, 46, 10, 0, 4, 1, 56, 2, 3, 1, 1, 32, 1,
|
||||
0, 4, 5, 58, 0, 3, 68, 6, 3, 74, 10, 3, 68, 11, 3, 66, 12, 3, 1, 5,
|
||||
48, 0, 0, 58, 3, 0, 66, 8, 0, 58, 9, 0, 54, 10, 0, 4, 3, 86, 0, 0, 126,
|
||||
7, 0, 86, 12, 0, 1, 3, 78, 0, 1, 126, 5, 1, 78, 10, 1, 4, 5, 70, 0,
|
||||
0, 80, 6, 0, 80, 10, 0, 80, 11, 0, 72, 12, 0, 1, 5, 58, 0, 1, 68, 3,
|
||||
1, 80, 8, 1, 68, 9, 1, 60, 10, 1, 4, 1, 64, 4, 0, 1, 1, 64, 2, 1, 4,
|
||||
1, 76, 4, 3, 1, 1, 72, 2, 0, 4, 4, 60, 0, 3, 64, 8, 3, 44, 13, 3, 44,
|
||||
16, 3, 1, 3, 40, 0, 0, 52, 5, 0, 46, 11, 0, 0, 2, 64, 3, 3, 46, 16,
|
||||
3, 4, 2, 64, 2, 0, 44, 14, 0, 1, 3, 54, 0, 1, 64, 6, 1, 52, 12, 1, 6,
|
||||
66, 76, 79, 66, 60, 0, 0, 0, 192, 67, 184, 158, 1, 0, 0, 0, 2, 0, 0,
|
||||
0, 0, 0, 0, 0, 60, 0, 0, 0, 209, 29, 0, 0, 191, 213, 43, 137, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 13, 30, 0, 0, 4, 0, 0, 0, 147, 68, 77, 121, 0, 0,
|
||||
0, 0, 67, 76, 77, 32, 68, 65, 84, 65, 0, 0, 18, 0, 2, 0, 57, 46, 49,
|
||||
48, 46, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 46, 51, 54,
|
||||
46, 49, 0, 0, 0, 0, 0, 0, 0, 0, 40, 18, 0, 0, 67, 108, 109, 73, 109,
|
||||
112, 111, 114, 116, 58, 32, 49, 46, 51, 52, 46, 49, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 66, 114, 111, 97, 100, 99, 111, 109, 45, 48, 46,
|
||||
48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 132, 17, 0, 0, 16, 4,
|
||||
5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 18, 4, 5, 6,
|
||||
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 35, 97, 0,
|
||||
15, 18, 17, 19, 10, 35, 110, 0, 16, 8, 255, 255, 0, 35, 114, 0, 15,
|
||||
19, 17, 20, 10, 48, 65, 0, 7, 8, 255, 255, 16, 48, 66, 0, 0, 14, 0,
|
||||
17, 16, 48, 67, 0, 7, 6, 12, 5, 25, 65, 67, 0, 16, 8, 255, 255, 16,
|
||||
65, 68, 0, 7, 33, 13, 39, 57, 65, 69, 0, 7, 8, 6, 7, 32, 65, 69, 1,
|
||||
7, 33, 6, 43, 32, 65, 70, 0, 7, 33, 13, 39, 57, 65, 71, 0, 7, 41, 6,
|
||||
47, 32, 65, 73, 0, 6, 15, 5, 18, 26, 65, 76, 0, 7, 33, 6, 43, 32, 65,
|
||||
77, 0, 7, 5, 12, 3, 9, 65, 78, 0, 7, 14, 6, 17, 32, 65, 79, 0, 7, 8,
|
||||
255, 255, 16, 65, 81, 0, 16, 8, 255, 255, 16, 65, 82, 0, 7, 25, 6, 25,
|
||||
0, 65, 82, 1, 7, 14, 6, 17, 0, 65, 83, 0, 6, 15, 5, 18, 26, 65, 84,
|
||||
0, 7, 33, 6, 43, 32, 65, 84, 1, 7, 37, 6, 36, 32, 65, 85, 0, 18, 42,
|
||||
22, 46, 9, 65, 85, 2, 18, 42, 21, 45, 0, 65, 87, 0, 7, 34, 6, 31, 1,
|
||||
65, 88, 0, 16, 8, 255, 255, 16, 65, 90, 0, 7, 14, 6, 17, 32, 66, 65,
|
||||
0, 7, 33, 6, 43, 32, 66, 66, 0, 7, 22, 12, 23, 25, 66, 68, 0, 7, 46,
|
||||
6, 58, 0, 66, 69, 0, 7, 33, 6, 43, 32, 66, 69, 1, 7, 37, 6, 36, 32,
|
||||
66, 70, 0, 7, 33, 13, 39, 25, 66, 71, 0, 7, 33, 6, 43, 32, 66, 71, 1,
|
||||
7, 37, 6, 36, 32, 66, 72, 0, 7, 21, 6, 22, 0, 66, 73, 0, 7, 33, 13,
|
||||
39, 25, 66, 74, 0, 7, 33, 13, 39, 57, 66, 76, 0, 16, 8, 255, 255, 16,
|
||||
66, 77, 0, 6, 15, 5, 18, 26, 66, 78, 0, 7, 8, 255, 255, 0, 66, 78, 1,
|
||||
17, 41, 20, 47, 0, 66, 79, 0, 7, 15, 12, 18, 42, 66, 81, 0, 16, 8, 255,
|
||||
255, 16, 66, 82, 0, 7, 43, 6, 52, 32, 66, 83, 0, 18, 21, 21, 22, 0,
|
||||
66, 84, 0, 7, 8, 12, 7, 56, 66, 86, 0, 16, 8, 255, 255, 16, 66, 87,
|
||||
0, 7, 45, 12, 51, 57, 66, 89, 0, 7, 33, 255, 255, 0, 66, 90, 0, 7, 15,
|
||||
12, 18, 26, 67, 65, 0, 0, 21, 0, 22, 0, 67, 65, 2, 6, 15, 5, 18, 26,
|
||||
67, 67, 0, 16, 8, 255, 255, 16, 67, 68, 0, 7, 33, 13, 39, 57, 67, 70,
|
||||
0, 7, 33, 13, 39, 25, 67, 71, 0, 7, 33, 13, 39, 57, 67, 72, 0, 7, 33,
|
||||
6, 43, 32, 67, 72, 1, 7, 37, 6, 36, 32, 67, 73, 0, 7, 33, 13, 39, 57,
|
||||
67, 75, 0, 7, 44, 12, 50, 25, 67, 76, 0, 7, 7, 6, 6, 1, 67, 77, 0, 7,
|
||||
33, 13, 39, 25, 67, 78, 0, 21, 48, 24, 53, 0, 67, 79, 0, 7, 13, 6, 11,
|
||||
32, 67, 80, 0, 16, 8, 255, 255, 16, 67, 82, 0, 7, 14, 6, 15, 32, 67,
|
||||
85, 0, 7, 8, 13, 255, 57, 67, 86, 0, 7, 33, 13, 39, 25, 67, 87, 0, 16,
|
||||
8, 255, 255, 16, 67, 88, 0, 18, 42, 21, 46, 25, 67, 89, 0, 7, 33, 6,
|
||||
43, 32, 67, 89, 1, 7, 37, 6, 36, 32, 67, 90, 0, 7, 33, 6, 43, 32, 67,
|
||||
90, 1, 7, 37, 6, 36, 32, 68, 69, 0, 7, 33, 6, 43, 32, 68, 69, 3, 7,
|
||||
37, 6, 36, 32, 68, 74, 0, 7, 8, 255, 255, 16, 68, 75, 0, 7, 33, 6, 43,
|
||||
32, 68, 75, 1, 7, 37, 6, 36, 32, 68, 77, 0, 7, 15, 12, 18, 26, 68, 79,
|
||||
0, 7, 15, 12, 18, 26, 68, 90, 0, 7, 5, 6, 4, 32, 69, 48, 0, 7, 12, 6,
|
||||
13, 32, 69, 67, 0, 7, 14, 6, 17, 32, 69, 69, 0, 7, 33, 6, 43, 32, 69,
|
||||
69, 1, 7, 37, 6, 36, 32, 69, 71, 0, 7, 41, 19, 48, 0, 69, 72, 0, 7,
|
||||
6, 12, 5, 25, 69, 82, 0, 7, 8, 255, 255, 16, 69, 83, 0, 7, 33, 6, 43,
|
||||
32, 69, 83, 1, 7, 37, 6, 36, 32, 69, 84, 0, 7, 33, 6, 43, 0, 70, 73,
|
||||
0, 7, 33, 6, 43, 32, 70, 73, 1, 7, 37, 6, 36, 32, 70, 74, 0, 7, 42,
|
||||
12, 46, 25, 70, 75, 0, 7, 33, 13, 39, 25, 70, 77, 0, 6, 15, 5, 18, 26,
|
||||
70, 79, 0, 7, 33, 13, 39, 57, 70, 82, 0, 7, 33, 6, 43, 32, 70, 82, 1,
|
||||
7, 37, 6, 36, 32, 71, 65, 0, 7, 33, 13, 39, 25, 71, 66, 0, 7, 33, 6,
|
||||
43, 32, 71, 66, 1, 7, 37, 6, 36, 32, 71, 68, 0, 7, 43, 6, 52, 0, 71,
|
||||
69, 0, 7, 33, 13, 39, 57, 71, 70, 0, 7, 33, 6, 43, 0, 71, 71, 0, 7,
|
||||
33, 13, 39, 25, 71, 72, 0, 7, 33, 13, 39, 57, 71, 73, 0, 7, 33, 13,
|
||||
39, 25, 71, 76, 0, 16, 8, 255, 255, 16, 71, 77, 0, 7, 33, 13, 39, 25,
|
||||
71, 78, 0, 7, 33, 13, 39, 57, 71, 80, 0, 7, 33, 6, 43, 0, 71, 81, 0,
|
||||
7, 33, 13, 39, 25, 71, 82, 0, 7, 33, 6, 43, 32, 71, 82, 1, 7, 37, 6,
|
||||
36, 32, 71, 83, 0, 16, 8, 255, 255, 16, 71, 84, 0, 7, 14, 11, 17, 16,
|
||||
71, 85, 0, 0, 14, 0, 17, 0, 71, 87, 0, 7, 33, 13, 39, 25, 71, 89, 0,
|
||||
7, 46, 12, 54, 25, 72, 75, 0, 18, 43, 22, 52, 0, 72, 77, 0, 16, 8, 255,
|
||||
255, 16, 72, 78, 0, 7, 47, 12, 60, 10, 72, 82, 0, 7, 33, 6, 43, 32,
|
||||
72, 82, 1, 7, 37, 6, 36, 32, 72, 84, 0, 7, 46, 12, 54, 9, 72, 85, 0,
|
||||
7, 33, 6, 43, 32, 72, 85, 1, 7, 37, 6, 36, 32, 73, 68, 0, 7, 8, 6, 7,
|
||||
0, 73, 68, 5, 7, 53, 13, 64, 25, 73, 69, 0, 7, 33, 6, 43, 32, 73, 69,
|
||||
1, 7, 37, 6, 36, 32, 73, 76, 0, 7, 5, 6, 4, 32, 73, 77, 0, 7, 33, 13,
|
||||
39, 25, 73, 78, 0, 17, 41, 20, 47, 32, 73, 79, 0, 7, 33, 13, 39, 25,
|
||||
73, 81, 0, 7, 33, 13, 39, 25, 73, 82, 0, 7, 8, 13, 255, 57, 73, 83,
|
||||
0, 7, 33, 6, 43, 32, 73, 83, 1, 7, 37, 6, 36, 32, 73, 84, 0, 7, 33,
|
||||
6, 43, 32, 73, 84, 1, 7, 37, 6, 36, 32, 74, 48, 0, 7, 38, 15, 42, 0,
|
||||
74, 49, 0, 14, 12, 255, 255, 0, 74, 50, 0, 14, 5, 255, 255, 0, 74, 51,
|
||||
0, 14, 38, 255, 255, 0, 74, 52, 0, 14, 24, 255, 255, 0, 74, 53, 0, 14,
|
||||
27, 255, 255, 0, 74, 54, 0, 14, 28, 255, 255, 0, 74, 55, 0, 14, 29,
|
||||
255, 255, 0, 74, 56, 0, 14, 40, 255, 255, 0, 74, 57, 0, 7, 28, 15, 27,
|
||||
0, 74, 69, 0, 7, 33, 13, 39, 25, 74, 77, 0, 7, 46, 13, 59, 25, 74, 79,
|
||||
0, 7, 1, 6, 0, 32, 74, 80, 0, 14, 39, 16, 40, 1, 74, 80, 1, 14, 28,
|
||||
15, 27, 0, 74, 80, 3, 14, 39, 15, 41, 1, 75, 65, 0, 20, 17, 23, 16,
|
||||
3, 75, 67, 0, 20, 46, 23, 54, 3, 75, 68, 0, 7, 49, 6, 56, 3, 75, 69,
|
||||
0, 7, 33, 6, 38, 33, 75, 71, 0, 7, 33, 13, 39, 25, 75, 72, 0, 7, 43,
|
||||
6, 52, 0, 75, 73, 0, 18, 42, 21, 46, 25, 75, 75, 0, 20, 8, 23, 7, 0,
|
||||
75, 77, 0, 7, 33, 13, 39, 25, 75, 78, 0, 7, 15, 12, 18, 26, 75, 80,
|
||||
0, 16, 8, 255, 255, 16, 75, 82, 0, 16, 53, 18, 44, 0, 75, 82, 4, 21,
|
||||
30, 24, 28, 17, 75, 87, 0, 7, 8, 6, 7, 32, 75, 87, 1, 7, 5, 6, 4, 32,
|
||||
75, 88, 0, 7, 46, 6, 54, 3, 75, 89, 0, 0, 14, 0, 17, 0, 75, 90, 0, 7,
|
||||
36, 12, 34, 8, 76, 65, 0, 7, 34, 6, 31, 1, 76, 66, 0, 7, 46, 6, 58,
|
||||
32, 76, 67, 0, 7, 15, 12, 18, 26, 76, 73, 0, 7, 33, 6, 43, 0, 76, 73,
|
||||
1, 7, 37, 6, 36, 0, 76, 75, 0, 17, 43, 20, 52, 0, 76, 82, 0, 7, 43,
|
||||
19, 50, 17, 76, 83, 0, 7, 33, 6, 43, 0, 76, 84, 0, 7, 33, 6, 43, 32,
|
||||
76, 84, 1, 7, 37, 6, 36, 32, 76, 85, 0, 7, 33, 6, 43, 32, 76, 85, 1,
|
||||
7, 37, 6, 36, 32, 76, 86, 0, 7, 33, 6, 43, 32, 76, 86, 1, 7, 37, 6,
|
||||
36, 32, 76, 89, 0, 7, 8, 14, 255, 16, 77, 65, 0, 7, 12, 19, 12, 32,
|
||||
77, 65, 1, 7, 5, 19, 4, 32, 77, 67, 0, 7, 33, 6, 43, 0, 77, 68, 0, 7,
|
||||
33, 6, 43, 32, 77, 69, 0, 7, 33, 6, 43, 32, 77, 70, 0, 7, 45, 12, 51,
|
||||
25, 77, 71, 0, 7, 33, 13, 39, 57, 77, 72, 0, 16, 8, 255, 255, 16, 77,
|
||||
75, 0, 7, 33, 6, 43, 32, 77, 76, 0, 7, 33, 13, 39, 25, 77, 77, 0, 7,
|
||||
33, 13, 39, 25, 77, 78, 0, 7, 14, 11, 17, 32, 77, 79, 0, 7, 49, 6, 58,
|
||||
0, 77, 80, 0, 6, 15, 5, 18, 26, 77, 81, 0, 7, 33, 6, 43, 0, 77, 82,
|
||||
0, 7, 33, 6, 43, 0, 77, 83, 0, 7, 33, 13, 39, 57, 77, 84, 0, 7, 33,
|
||||
6, 43, 32, 77, 84, 1, 7, 37, 6, 36, 32, 77, 85, 0, 7, 33, 6, 43, 32,
|
||||
77, 86, 0, 7, 10, 6, 10, 32, 77, 87, 0, 7, 46, 6, 58, 32, 77, 88, 0,
|
||||
7, 5, 6, 4, 0, 77, 88, 1, 7, 21, 6, 22, 0, 77, 89, 0, 17, 41, 20, 47,
|
||||
0, 77, 90, 0, 7, 16, 12, 14, 26, 78, 65, 0, 7, 16, 12, 14, 26, 78, 67,
|
||||
0, 7, 33, 13, 39, 25, 78, 69, 0, 7, 33, 13, 39, 25, 78, 70, 0, 7, 42,
|
||||
11, 45, 0, 78, 71, 0, 7, 26, 13, 26, 57, 78, 73, 0, 7, 14, 6, 17, 32,
|
||||
78, 76, 0, 7, 33, 6, 43, 32, 78, 76, 1, 7, 37, 6, 36, 32, 78, 79, 0,
|
||||
7, 33, 6, 43, 32, 78, 79, 1, 7, 37, 6, 36, 32, 78, 80, 0, 17, 9, 20,
|
||||
8, 0, 78, 82, 0, 7, 33, 13, 39, 25, 78, 85, 0, 7, 14, 255, 255, 16,
|
||||
78, 90, 0, 7, 43, 6, 52, 32, 79, 77, 0, 7, 33, 6, 43, 32, 80, 65, 0,
|
||||
17, 0, 20, 24, 32, 80, 69, 0, 7, 14, 6, 17, 32, 80, 70, 0, 7, 33, 13,
|
||||
39, 25, 80, 71, 0, 7, 2, 6, 0, 0, 80, 72, 0, 7, 43, 6, 52, 32, 80, 75,
|
||||
0, 7, 49, 11, 55, 33, 80, 76, 0, 7, 33, 6, 43, 32, 80, 76, 1, 7, 37,
|
||||
6, 36, 32, 80, 77, 0, 7, 33, 13, 39, 25, 80, 78, 0, 16, 8, 255, 255,
|
||||
16, 80, 82, 0, 0, 14, 0, 17, 0, 80, 83, 0, 16, 8, 255, 255, 0, 80, 84,
|
||||
0, 7, 33, 6, 43, 32, 80, 84, 1, 7, 37, 6, 36, 32, 80, 87, 0, 7, 15,
|
||||
12, 18, 26, 80, 89, 0, 7, 46, 6, 58, 0, 80, 89, 1, 7, 43, 6, 52, 0,
|
||||
81, 49, 0, 2, 8, 2, 7, 0, 81, 50, 0, 0, 31, 0, 29, 0, 81, 65, 0, 7,
|
||||
49, 13, 57, 57, 82, 69, 0, 7, 33, 6, 43, 0, 82, 79, 0, 7, 33, 6, 43,
|
||||
32, 82, 79, 1, 7, 37, 6, 36, 32, 82, 83, 0, 7, 33, 6, 43, 32, 82, 85,
|
||||
0, 7, 8, 255, 255, 0, 82, 85, 5, 7, 11, 11, 9, 1, 82, 87, 0, 7, 33,
|
||||
13, 39, 57, 83, 65, 0, 7, 34, 6, 32, 33, 83, 66, 0, 7, 8, 255, 255,
|
||||
16, 83, 67, 0, 7, 45, 12, 51, 25, 83, 68, 0, 7, 8, 13, 255, 57, 83,
|
||||
69, 0, 7, 33, 6, 43, 32, 83, 69, 1, 7, 37, 6, 36, 32, 83, 71, 0, 17,
|
||||
44, 20, 50, 33, 83, 72, 0, 16, 8, 255, 255, 16, 83, 73, 0, 7, 33, 6,
|
||||
43, 32, 83, 73, 1, 7, 37, 6, 36, 32, 83, 74, 0, 16, 8, 255, 255, 16,
|
||||
83, 75, 0, 7, 33, 6, 43, 32, 83, 75, 1, 7, 37, 6, 36, 32, 83, 76, 0,
|
||||
7, 33, 13, 39, 25, 83, 77, 0, 7, 33, 13, 39, 25, 83, 78, 0, 7, 33, 6,
|
||||
43, 32, 83, 79, 0, 7, 8, 255, 255, 16, 83, 82, 0, 7, 33, 13, 39, 25,
|
||||
83, 84, 0, 7, 33, 13, 39, 25, 83, 86, 0, 7, 14, 11, 17, 32, 83, 88,
|
||||
0, 16, 8, 255, 255, 16, 83, 89, 0, 16, 8, 255, 255, 16, 83, 90, 0, 7,
|
||||
33, 13, 39, 25, 84, 65, 0, 16, 8, 255, 255, 16, 84, 67, 0, 7, 33, 13,
|
||||
39, 25, 84, 68, 0, 7, 33, 13, 39, 25, 84, 70, 0, 7, 33, 13, 39, 25,
|
||||
84, 71, 0, 7, 33, 13, 39, 25, 84, 72, 0, 7, 43, 6, 52, 32, 84, 74, 0,
|
||||
7, 33, 13, 39, 25, 84, 75, 0, 16, 8, 255, 255, 16, 84, 76, 0, 7, 33,
|
||||
13, 39, 57, 84, 77, 0, 7, 33, 13, 39, 25, 84, 78, 0, 7, 5, 6, 4, 32,
|
||||
84, 79, 0, 7, 8, 255, 255, 16, 84, 82, 0, 7, 5, 6, 4, 32, 84, 82, 7,
|
||||
7, 33, 13, 39, 57, 84, 84, 0, 7, 43, 6, 52, 32, 84, 86, 0, 7, 8, 255,
|
||||
255, 16, 84, 87, 0, 0, 50, 0, 63, 0, 84, 87, 2, 0, 51, 0, 61, 0, 84,
|
||||
90, 0, 7, 33, 13, 39, 25, 85, 65, 0, 7, 8, 255, 255, 0, 85, 71, 0, 7,
|
||||
34, 6, 31, 33, 85, 77, 0, 0, 14, 0, 17, 0, 85, 83, 0, 5, 32, 4, 30,
|
||||
10, 85, 83, 25, 11, 8, 9, 7, 0, 85, 83, 26, 4, 8, 1, 7, 0, 85, 89, 0,
|
||||
18, 43, 21, 52, 0, 85, 90, 0, 7, 33, 13, 39, 25, 86, 65, 0, 7, 33, 6,
|
||||
43, 0, 86, 67, 0, 7, 15, 12, 18, 26, 86, 69, 0, 7, 41, 6, 47, 0, 86,
|
||||
71, 0, 7, 33, 6, 43, 0, 86, 73, 0, 0, 14, 0, 17, 0, 86, 78, 0, 7, 5,
|
||||
6, 4, 0, 86, 85, 0, 7, 43, 12, 49, 25, 87, 70, 0, 7, 33, 12, 43, 25,
|
||||
87, 83, 0, 7, 43, 11, 49, 17, 88, 48, 0, 3, 20, 0, 21, 0, 88, 49, 0,
|
||||
7, 41, 6, 47, 0, 88, 50, 0, 19, 3, 6, 2, 0, 88, 51, 0, 7, 33, 6, 35,
|
||||
32, 88, 65, 0, 7, 3, 255, 255, 0, 88, 66, 0, 0, 23, 255, 255, 0, 88,
|
||||
82, 0, 1, 52, 3, 62, 0, 88, 83, 0, 12, 4, 10, 1, 33, 88, 84, 0, 11,
|
||||
8, 9, 7, 32, 88, 85, 0, 8, 37, 7, 37, 32, 88, 86, 0, 10, 8, 8, 7, 32,
|
||||
88, 87, 0, 20, 35, 23, 33, 34, 88, 88, 0, 9, 33, 255, 255, 32, 88, 89,
|
||||
0, 7, 33, 6, 43, 32, 88, 90, 0, 13, 8, 255, 255, 32, 89, 49, 0, 0, 14,
|
||||
255, 255, 16, 89, 50, 0, 0, 14, 255, 255, 16, 89, 51, 0, 0, 14, 255,
|
||||
255, 16, 89, 52, 0, 0, 14, 255, 255, 16, 89, 53, 0, 0, 14, 255, 255,
|
||||
16, 89, 54, 0, 0, 14, 255, 255, 16, 89, 55, 0, 0, 14, 255, 255, 16,
|
||||
89, 69, 0, 7, 45, 12, 51, 25, 89, 84, 0, 7, 33, 6, 43, 0, 89, 89, 0,
|
||||
16, 8, 255, 255, 0, 90, 49, 0, 16, 8, 255, 255, 16, 90, 50, 0, 16, 8,
|
||||
255, 255, 16, 90, 51, 0, 16, 8, 255, 255, 16, 90, 52, 0, 16, 8, 255,
|
||||
255, 16, 90, 53, 0, 16, 8, 255, 255, 16, 90, 54, 0, 16, 8, 255, 255,
|
||||
16, 90, 55, 0, 16, 8, 255, 255, 16, 90, 56, 0, 16, 8, 255, 255, 16,
|
||||
90, 57, 0, 16, 8, 255, 255, 16, 90, 65, 0, 7, 33, 6, 43, 32, 90, 77,
|
||||
0, 17, 41, 20, 47, 0, 90, 87, 0, 7, 33, 13, 39, 57, 38, 62, 8, 102,
|
||||
142, 8, 151, 175, 8, 16, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
|
||||
17, 18, 19, 18, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
|
||||
19, 20, 21, 4, 5, 76, 0, 3, 76, 6, 3, 76, 10, 3, 76, 11, 3, 66, 12,
|
||||
3, 1, 4, 62, 0, 0, 66, 4, 0, 62, 9, 0, 58, 10, 0, 4, 3, 58, 0, 3, 66,
|
||||
7, 3, 58, 12, 3, 1, 5, 42, 0, 0, 50, 3, 0, 60, 8, 0, 54, 9, 0, 46, 10,
|
||||
0, 4, 1, 56, 2, 3, 1, 1, 32, 1, 0, 4, 5, 58, 0, 3, 68, 6, 3, 74, 10,
|
||||
3, 68, 11, 3, 66, 12, 3, 1, 5, 48, 0, 0, 58, 3, 0, 66, 8, 0, 58, 9,
|
||||
0, 54, 10, 0, 4, 3, 86, 0, 0, 126, 7, 0, 86, 12, 0, 1, 3, 78, 0, 1,
|
||||
126, 5, 1, 78, 10, 1, 4, 5, 70, 0, 0, 80, 6, 0, 80, 10, 0, 80, 11, 0,
|
||||
72, 12, 0, 1, 5, 58, 0, 1, 68, 3, 1, 80, 8, 1, 68, 9, 1, 60, 10, 1,
|
||||
4, 1, 64, 4, 0, 1, 1, 64, 2, 1, 4, 1, 76, 4, 3, 1, 1, 72, 2, 0, 4, 4,
|
||||
60, 0, 3, 64, 8, 3, 44, 13, 3, 44, 16, 3, 1, 3, 40, 0, 0, 52, 5, 0,
|
||||
46, 11, 0, 0, 2, 64, 3, 3, 46, 16, 3, 4, 2, 64, 2, 0, 44, 14, 0, 1,
|
||||
3, 54, 0, 1, 64, 6, 1, 52, 12, 1, 6, 1, 76, 4, 0, 3, 1, 76, 2, 1, 6,
|
||||
1, 76, 4, 0, 3, 1, 76, 2, 1, 6, 1, 76, 4, 0, 3, 1, 76, 2, 1, 6, 1, 76,
|
||||
4, 0, 3, 1, 76, 2, 1, 6, 1, 76, 4, 0, 3, 1, 128, 2, 1, 4, 1, 64, 4,
|
||||
0, 1, 1, 64, 2, 1, 6, 1, 84, 4, 3, 3, 1, 72, 2, 0, 4, 2, 120, 4, 0,
|
||||
120, 17, 3, 1, 1, 120, 2, 1, 0, 0, 0, 1, 64, 4, 3, 4, 1, 80, 4, 0, 1,
|
||||
1, 64, 2, 1, 4, 1, 88, 4, 0, 1, 1, 60, 2, 1, 6, 1, 100, 4, 0, 3, 1,
|
||||
88, 2, 1, 4, 1, 64, 2, 3, 1, 1, 52, 1, 0, 4, 3, 56, 0, 3, 64, 9, 3,
|
||||
56, 16, 3, 1, 2, 46, 0, 0, 52, 7, 0, 1, 18, 1, 255, 1, 58, 1, 14, 1,
|
||||
15, 3, 29, 41, 55, 2, 19, 55, 3, 11, 1, 1, 1, 1, 10, 1, 11, 1, 12, 1,
|
||||
13, 1, 14, 2, 2, 2, 10, 2, 11, 2, 12, 3, 9, 10, 10, 11, 11, 12, 12,
|
||||
12, 13, 12, 14, 13, 13, 14, 14, 34, 46, 36, 48, 36, 64, 36, 116, 36,
|
||||
140, 36, 144, 36, 161, 36, 165, 36, 177, 52, 52, 52, 60, 52, 64, 52,
|
||||
124, 52, 140, 52, 144, 52, 165, 56, 60, 56, 64, 64, 64, 64, 100, 100,
|
||||
100, 100, 116, 100, 140, 100, 144, 100, 165, 104, 128, 104, 136, 104,
|
||||
140, 104, 165, 132, 140, 132, 144, 132, 165, 140, 140, 144, 144, 144,
|
||||
165, 149, 149, 149, 161, 149, 165, 149, 177, 153, 161, 165, 165, 0,
|
||||
145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 153,
|
||||
0, 154, 0, 0, 0, 4, 0, 0, 0, 28, 18, 0, 0, 42, 42, 42, 58, 42, 106,
|
||||
42, 122, 42, 138, 42, 155, 42, 171, 58, 58, 106, 106, 106, 122, 106,
|
||||
138, 106, 155, 122, 122, 122, 138, 122, 171, 138, 138, 138, 155, 155,
|
||||
155, 155, 171, 42, 106, 106, 42, 58, 106, 106, 58, 42, 122, 122, 42,
|
||||
58, 122, 122, 58, 42, 138, 138, 42, 58, 138, 138, 58, 106, 138, 138,
|
||||
106, 42, 155, 155, 42, 58, 155, 155, 58, 106, 155, 155, 106, 122, 155,
|
||||
155, 122, 138, 155, 155, 138, 42, 171, 171, 42, 58, 171, 171, 58, 106,
|
||||
171, 171, 106, 122, 171, 171, 122, 138, 171, 171, 138, 0, 0, 1, 0, 0,
|
||||
0, 164, 17, 0, 0, 1, 0, 0, 0, 81, 17, 0, 0, 1, 0, 0, 0, 6, 18, 0, 0,
|
||||
24, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 93, 16, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 1, 30, 2, 0, 3, 76, 1, 4, 76, 2, 2,
|
||||
66, 12, 4, 1, 0, 255, 1, 30, 2, 0, 7, 72, 0, 2, 58, 0, 4, 68, 6, 4,
|
||||
74, 8, 2, 74, 10, 4, 68, 11, 4, 66, 12, 4, 1, 0, 255, 1, 30, 2, 0, 2,
|
||||
64, 2, 2, 56, 2, 4, 1, 0, 255, 1, 30, 2, 0, 5, 72, 0, 2, 76, 1, 4, 76,
|
||||
7, 2, 72, 12, 2, 66, 12, 4, 1, 0, 255, 1, 30, 2, 0, 4, 58, 0, 4, 68,
|
||||
2, 2, 66, 7, 4, 58, 12, 4, 1, 0, 255, 1, 30, 2, 0, 5, 92, 0, 2, 86,
|
||||
0, 4, 126, 7, 1, 92, 12, 2, 86, 12, 4, 1, 0, 255, 1, 30, 2, 0, 5, 70,
|
||||
0, 4, 80, 1, 2, 80, 7, 4, 76, 12, 2, 72, 12, 4, 2, 4, 255, 1, 20, 4,
|
||||
2, 1, 76, 4, 1, 2, 0, 255, 1, 20, 4, 0, 1, 76, 4, 1, 3, 0, 4, 1, 20,
|
||||
5, 2, 5, 76, 1, 4, 76, 4, 2, 70, 12, 4, 76, 14, 4, 54, 17, 2, 3, 0,
|
||||
4, 1, 20, 5, 0, 6, 60, 0, 4, 68, 2, 2, 64, 8, 4, 48, 14, 2, 44, 14,
|
||||
4, 64, 17, 2, 3, 0, 4, 1, 20, 5, 0, 3, 64, 3, 4, 64, 5, 2, 46, 16, 4,
|
||||
2, 0, 3, 1, 20, 4, 0, 3, 64, 2, 1, 48, 14, 2, 44, 14, 4, 3, 0, 4, 1,
|
||||
20, 5, 0, 6, 62, 0, 4, 66, 4, 2, 66, 7, 4, 62, 12, 4, 66, 14, 4, 42,
|
||||
17, 2, 3, 0, 255, 1, 20, 5, 2, 2, 84, 4, 4, 78, 5, 2, 3, 0, 255, 1,
|
||||
30, 5, 0, 1, 120, 5, 1, 0, 0, 255, 0, 0, 0, 2, 0, 255, 1, 23, 4, 2,
|
||||
1, 92, 4, 1, 2, 0, 255, 1, 36, 4, 2, 1, 100, 4, 1, 2, 4, 3, 1, 20, 4,
|
||||
2, 1, 76, 4, 1, 1, 0, 255, 1, 20, 2, 2, 1, 76, 2, 1, 2, 0, 255, 1, 20,
|
||||
4, 4, 3, 56, 0, 4, 64, 9, 4, 56, 16, 4, 2, 1, 76, 4, 2, 0, 0, 0, 1,
|
||||
0, 0, 0, 192, 29, 0, 0, 1, 0, 0, 0, 195, 29, 0, 0, 1, 0, 0, 0, 198,
|
||||
29, 0, 0, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 8, 12, 13, 14,
|
||||
15, 16, 17, 18, 19, 8, 4, 5, 6, 7, 8, 9, 10, 11, 0, 12, 4, 10, 2, 2,
|
||||
2, 9, 1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 2, 2, 2, 2, 3, 1, 1, 1, 1, 1, 1,
|
||||
1, 0, 9, 0, 19, 0, 22, 0, 24, 0, 32, 0, 35, 0, 42, 0, 53, 0, 59, 0,
|
||||
73, 0, 75, 0, 77, 0, 80, 0, 87, 0, 92, 0, 95, 0, 101, 0, 104, 0, 117,
|
||||
0, 127, 0, 130, 0, 132, 0, 134, 0, 142, 0, 144, 0, 160, 0, 173, 0, 175,
|
||||
0, 183, 0, 188, 0, 190, 0, 192, 0, 195, 0, 212, 0, 217, 0, 227, 0, 229,
|
||||
0, 242, 0, 248, 0, 251, 0, 1, 1, 4, 1, 11, 1, 15, 1, 18, 1, 42, 1, 46,
|
||||
1, 53, 1, 6, 2, 2, 1, 1, 1, 1, 0, 6, 2, 5, 1, 1, 1, 7, 2, 4, 1, 1, 1,
|
||||
2, 8, 4, 2, 2, 1, 1, 1, 14, 2, 2, 1, 1, 1, 1, 0, 6, 2, 5, 5, 1, 1, 7,
|
||||
2, 4, 1, 1, 1, 2, 8, 4, 2, 2, 1, 1, 1, 13, 2, 2, 1, 1, 1, 1, 18, 4,
|
||||
2, 2, 5, 1, 1, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 12, 0, 1,
|
||||
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 4, 0, 1, 2, 3, 8, 12, 13, 14, 15, 16,
|
||||
17, 18, 19, 8, 4, 5, 6, 7, 8, 9, 10, 11, 21, 2, 2, 18, 4, 5, 6, 7, 8,
|
||||
9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 50, 48, 49, 57, 45,
|
||||
48, 54, 45, 49, 49, 32, 48, 48, 58, 48, 56, 58, 53, 49, 0, 0, 3, 0,
|
||||
0, 0, 196, 11, 0, 0, 1, 14, 1, 0, 3, 0, 0, 0, 120, 14, 0, 0, 42, 58,
|
||||
16, 106, 138, 16, 155, 171, 16, 0, 0, 0, 3, 0, 0, 0, 28, 23, 0, 0, 21,
|
||||
2, 2, 0, 9, 0, 19, 0, 22, 0, 24, 0, 32, 0, 35, 0, 42, 0, 53, 0, 59,
|
||||
0, 73, 0, 75, 0, 77, 0, 80, 0, 87, 0, 92, 0, 95, 0, 101, 0, 104, 0,
|
||||
117, 0, 127, 0, 130, 0, 132, 0, 134, 0, 142, 0, 144, 0, 160, 0, 173,
|
||||
0, 175, 0, 183, 0, 188, 0, 190, 0, 192, 0, 195, 0, 212, 0, 217, 0, 227,
|
||||
0, 229, 0, 242, 0, 248, 0, 251, 0, 1, 1, 4, 1, 11, 1, 15, 1, 18, 1,
|
||||
46, 1, 52, 1, 21, 2, 2, 0, 0, 0, 3, 0, 0, 0, 40, 16, 0, 0, 102, 1, 0,
|
||||
0, 148, 0, 0, 0, 34, 46, 4, 36, 64, 4, 100, 144, 4, 149, 177, 4, 104,
|
||||
0, 0, 0, 4, 14, 0, 0, 119, 13, 0, 0, 99, 13, 0, 0, 112, 22, 0, 0, 64,
|
||||
16, 0, 0, 172, 14, 0, 0, 232, 18, 0, 0, 241, 11, 0, 0, 76, 23, 0, 0,
|
||||
20, 18, 0, 0, 156, 17, 0, 0, 84, 29, 0, 0, 255, 80, 161, 4, 76, 29,
|
||||
0, 0, 184, 29, 0, 0, 92, 29, 0, 0, 12, 14, 0, 0, 201, 29, 0, 0, 112,
|
||||
0, 0, 0, 84, 17, 0, 0, 6, 23, 0, 0, 34, 17, 0, 0, 205, 11, 0, 0, 103,
|
||||
17, 0, 0, 176, 29, 0, 0, 124, 17, 0, 0, 64, 23, 0, 0, 248, 22, 0, 0,
|
||||
104, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
4, 0, 3, 1, 128, 2, 1, 4, 1, 64, 4, 0, 1, 1, 64, 2, 1, 6, 1, 84, 4,
|
||||
3, 3, 1, 72, 2, 0, 4, 2, 120, 4, 0, 120, 17, 3, 1, 1, 120, 2, 1, 0,
|
||||
0, 0, 1, 64, 4, 3, 4, 1, 80, 4, 0, 1, 1, 64, 2, 1, 4, 1, 88, 4, 0, 1,
|
||||
1, 60, 2, 1, 6, 1, 100, 4, 0, 3, 1, 88, 2, 1, 4, 1, 64, 2, 3, 1, 1,
|
||||
52, 1, 0, 4, 3, 56, 0, 3, 64, 9, 3, 56, 16, 3, 1, 2, 46, 0, 0, 52, 7,
|
||||
0, 1, 18, 1, 255, 1, 58, 1, 14, 1, 15, 3, 29, 41, 55, 2, 19, 55, 3,
|
||||
11, 1, 1, 1, 1, 10, 1, 11, 1, 12, 1, 13, 1, 14, 2, 2, 2, 10, 2, 11,
|
||||
2, 12, 3, 9, 10, 10, 11, 11, 12, 12, 12, 13, 12, 14, 13, 13, 14, 14,
|
||||
34, 46, 36, 48, 36, 64, 36, 116, 36, 140, 36, 144, 36, 161, 36, 165,
|
||||
36, 177, 52, 52, 52, 60, 52, 64, 52, 124, 52, 140, 52, 144, 52, 165,
|
||||
56, 60, 56, 64, 64, 64, 64, 100, 100, 100, 100, 116, 100, 140, 100,
|
||||
144, 100, 165, 104, 128, 104, 136, 104, 140, 104, 165, 132, 140, 132,
|
||||
144, 132, 165, 140, 140, 144, 144, 144, 165, 149, 149, 149, 161, 149,
|
||||
165, 149, 177, 153, 161, 165, 165, 0, 145, 0, 146, 0, 147, 0, 148, 0,
|
||||
149, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 0, 0, 4, 0, 0, 0, 28,
|
||||
18, 0, 0, 42, 42, 42, 58, 42, 106, 42, 122, 42, 138, 42, 155, 42, 171,
|
||||
58, 58, 106, 106, 106, 122, 106, 138, 106, 155, 122, 122, 122, 138,
|
||||
122, 171, 138, 138, 138, 155, 155, 155, 155, 171, 42, 106, 106, 42,
|
||||
58, 106, 106, 58, 42, 122, 122, 42, 58, 122, 122, 58, 42, 138, 138,
|
||||
42, 58, 138, 138, 58, 106, 138, 138, 106, 42, 155, 155, 42, 58, 155,
|
||||
155, 58, 106, 155, 155, 106, 122, 155, 155, 122, 138, 155, 155, 138,
|
||||
42, 171, 171, 42, 58, 171, 171, 58, 106, 171, 171, 106, 122, 171, 171,
|
||||
122, 138, 171, 171, 138, 0, 0, 1, 0, 0, 0, 164, 17, 0, 0, 1, 0, 0, 0,
|
||||
81, 17, 0, 0, 1, 0, 0, 0, 6, 18, 0, 0, 24, 0, 159, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 2, 0, 0, 0, 93, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255,
|
||||
1, 30, 2, 0, 3, 76, 1, 4, 76, 2, 2, 66, 12, 4, 1, 0, 255, 1, 30, 2,
|
||||
0, 7, 72, 0, 2, 58, 0, 4, 68, 6, 4, 74, 8, 2, 74, 10, 4, 68, 11, 4,
|
||||
66, 12, 4, 1, 0, 255, 1, 30, 2, 0, 2, 64, 2, 2, 56, 2, 4, 1, 0, 255,
|
||||
1, 30, 2, 0, 5, 72, 0, 2, 76, 1, 4, 76, 7, 2, 72, 12, 2, 66, 12, 4,
|
||||
1, 0, 255, 1, 30, 2, 0, 4, 58, 0, 4, 68, 2, 2, 66, 7, 4, 58, 12, 4,
|
||||
1, 0, 255, 1, 30, 2, 0, 5, 92, 0, 2, 86, 0, 4, 126, 7, 1, 92, 12, 2,
|
||||
86, 12, 4, 1, 0, 255, 1, 30, 2, 0, 5, 70, 0, 4, 80, 1, 2, 80, 7, 4,
|
||||
76, 12, 2, 72, 12, 4, 2, 4, 255, 1, 20, 4, 2, 1, 76, 4, 1, 2, 0, 255,
|
||||
1, 20, 4, 0, 1, 76, 4, 1, 3, 0, 4, 1, 20, 5, 2, 5, 76, 1, 4, 76, 4,
|
||||
2, 70, 12, 4, 76, 14, 4, 54, 17, 2, 3, 0, 4, 1, 20, 5, 0, 6, 60, 0,
|
||||
4, 68, 2, 2, 64, 8, 4, 48, 14, 2, 44, 14, 4, 64, 17, 2, 3, 0, 4, 1,
|
||||
20, 5, 0, 3, 64, 3, 4, 64, 5, 2, 46, 16, 4, 2, 0, 3, 1, 20, 4, 0, 3,
|
||||
64, 2, 1, 48, 14, 2, 44, 14, 4, 3, 0, 4, 1, 20, 5, 0, 6, 62, 0, 4, 66,
|
||||
4, 2, 66, 7, 4, 62, 12, 4, 66, 14, 4, 42, 17, 2, 3, 0, 255, 1, 20, 5,
|
||||
2, 2, 84, 4, 4, 78, 5, 2, 3, 0, 255, 1, 30, 5, 0, 1, 120, 5, 1, 0, 0,
|
||||
255, 0, 0, 0, 2, 0, 255, 1, 23, 4, 2, 1, 92, 4, 1, 2, 0, 255, 1, 36,
|
||||
4, 2, 1, 100, 4, 1, 2, 4, 3, 1, 20, 4, 2, 1, 76, 4, 1, 1, 0, 255, 1,
|
||||
20, 2, 2, 1, 76, 2, 1, 2, 0, 255, 1, 20, 4, 4, 3, 56, 0, 4, 64, 9, 4,
|
||||
56, 16, 4, 2, 1, 76, 4, 2, 0, 0, 0, 1, 0, 0, 0, 192, 29, 0, 0, 1, 0,
|
||||
0, 0, 195, 29, 0, 0, 1, 0, 0, 0, 198, 29, 0, 0, 10, 12, 13, 14, 15,
|
||||
16, 17, 18, 19, 20, 21, 8, 12, 13, 14, 15, 16, 17, 18, 19, 8, 4, 5,
|
||||
6, 7, 8, 9, 10, 11, 0, 12, 4, 10, 2, 2, 2, 9, 1, 1, 1, 1, 1, 1, 3, 3,
|
||||
4, 4, 2, 2, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 0, 9, 0, 19, 0, 22, 0, 24,
|
||||
0, 32, 0, 35, 0, 42, 0, 53, 0, 59, 0, 73, 0, 75, 0, 77, 0, 80, 0, 87,
|
||||
0, 92, 0, 95, 0, 101, 0, 104, 0, 117, 0, 127, 0, 130, 0, 132, 0, 134,
|
||||
0, 142, 0, 144, 0, 160, 0, 173, 0, 175, 0, 183, 0, 188, 0, 190, 0, 192,
|
||||
0, 195, 0, 212, 0, 217, 0, 227, 0, 229, 0, 242, 0, 248, 0, 251, 0, 1,
|
||||
1, 4, 1, 11, 1, 15, 1, 18, 1, 42, 1, 46, 1, 53, 1, 6, 2, 2, 1, 1, 1,
|
||||
1, 0, 6, 2, 5, 1, 1, 1, 7, 2, 4, 1, 1, 1, 2, 8, 4, 2, 2, 1, 1, 1, 14,
|
||||
2, 2, 1, 1, 1, 1, 0, 6, 2, 5, 5, 1, 1, 7, 2, 4, 1, 1, 1, 2, 8, 4, 2,
|
||||
2, 1, 1, 1, 13, 2, 2, 1, 1, 1, 1, 18, 4, 2, 2, 5, 1, 1, 10, 12, 13,
|
||||
14, 15, 16, 17, 18, 19, 20, 21, 12, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
|
||||
11, 4, 0, 1, 2, 3, 8, 12, 13, 14, 15, 16, 17, 18, 19, 8, 4, 5, 6, 7,
|
||||
8, 9, 10, 11, 21, 2, 2, 18, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
||||
16, 17, 18, 19, 20, 21, 50, 48, 49, 57, 45, 48, 56, 45, 48, 49, 32,
|
||||
49, 50, 58, 51, 53, 58, 48, 50, 0, 0, 3, 0, 0, 0, 196, 11, 0, 0, 1,
|
||||
14, 1, 0, 3, 0, 0, 0, 120, 14, 0, 0, 42, 58, 16, 106, 138, 16, 155,
|
||||
171, 16, 0, 0, 0, 3, 0, 0, 0, 28, 23, 0, 0, 21, 2, 2, 0, 9, 0, 19, 0,
|
||||
22, 0, 24, 0, 32, 0, 35, 0, 42, 0, 53, 0, 59, 0, 73, 0, 75, 0, 77, 0,
|
||||
80, 0, 87, 0, 92, 0, 95, 0, 101, 0, 104, 0, 117, 0, 127, 0, 130, 0,
|
||||
132, 0, 134, 0, 142, 0, 144, 0, 160, 0, 173, 0, 175, 0, 183, 0, 188,
|
||||
0, 190, 0, 192, 0, 195, 0, 212, 0, 217, 0, 227, 0, 229, 0, 242, 0, 248,
|
||||
0, 251, 0, 1, 1, 4, 1, 11, 1, 15, 1, 18, 1, 46, 1, 52, 1, 21, 2, 2,
|
||||
0, 0, 0, 3, 0, 0, 0, 40, 16, 0, 0, 102, 1, 0, 0, 148, 0, 0, 0, 34, 46,
|
||||
4, 36, 64, 4, 100, 144, 4, 149, 177, 4, 104, 0, 0, 0, 4, 14, 0, 0, 119,
|
||||
13, 0, 0, 99, 13, 0, 0, 112, 22, 0, 0, 64, 16, 0, 0, 172, 14, 0, 0,
|
||||
232, 18, 0, 0, 241, 11, 0, 0, 76, 23, 0, 0, 20, 18, 0, 0, 156, 17, 0,
|
||||
0, 84, 29, 0, 0, 255, 80, 161, 4, 76, 29, 0, 0, 184, 29, 0, 0, 92, 29,
|
||||
0, 0, 12, 14, 0, 0, 201, 29, 0, 0, 112, 0, 0, 0, 84, 17, 0, 0, 6, 23,
|
||||
0, 0, 34, 17, 0, 0, 205, 11, 0, 0, 103, 17, 0, 0, 176, 29, 0, 0, 124,
|
||||
17, 0, 0, 64, 23, 0, 0, 248, 22, 0, 0, 104, 22, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
12, 18, 0, 0, 136, 17, 0, 0, 10, 2, 255, 3, 17, 19, 24, 29, 30, 55,
|
||||
0, 4, 56, 19, 2, 70, 28, 2, 58, 36, 2, 70, 55, 2, 14, 0, 255, 2, 23,
|
||||
19, 23, 55, 2, 2, 84, 19, 2, 84, 55, 2, 14, 0, 255, 2, 23, 19, 23, 55,
|
||||
0, 2, 66, 19, 2, 66, 55, 2, 23, 1, 1, 4, 23, 19, 17, 29, 23, 40, 30,
|
||||
55, 2, 2, 84, 22, 2, 84, 55, 2, 24, 1, 5, 2, 23, 23, 30, 55, 0, 4, 56,
|
||||
19, 2, 58, 29, 2, 60, 41, 2, 70, 55, 2, 15, 1, 255, 1, 23, 20, 2, 1,
|
||||
84, 20, 2, 15, 1, 255, 1, 23, 20, 2, 1, 84, 20, 2, 20, 1, 255, 2, 21,
|
||||
20, 21, 55, 2, 2, 84, 20, 2, 84, 55, 2, 0, 0, 255, 0, 0, 0, 19, 1, 255,
|
||||
2, 23, 20, 23, 54, 0, 2, 66, 20, 2, 66, 54, 2, 20, 1, 255, 2, 23, 20,
|
||||
20, 55, 0, 2, 66, 20, 2, 64, 55, 2, 20, 1, 255, 2, 23, 20, 20, 55, 2,
|
||||
2, 92, 20, 2, 80, 55, 2, 9, 0, 255, 1, 23, 19, 2, 1, 84, 19, 2, 9, 0,
|
||||
255, 1, 20, 19, 0, 1, 56, 19, 2, 11, 2, 255, 3, 17, 19, 24, 31, 30,
|
||||
55, 0, 5, 56, 19, 2, 70, 28, 2, 58, 36, 2, 68, 40, 2, 70, 55, 2, 13,
|
||||
2, 255, 3, 17, 19, 24, 32, 30, 55, 0, 5, 56, 19, 2, 78, 28, 2, 64, 36,
|
||||
2, 68, 38, 2, 78, 46, 2, 26, 1, 255, 2, 23, 20, 30, 42, 2, 2, 84, 23,
|
||||
2, 112, 55, 2, 13, 2, 255, 3, 17, 19, 24, 32, 30, 55, 0, 7, 58, 19,
|
||||
2, 84, 27, 2, 76, 35, 2, 72, 38, 2, 80, 44, 2, 68, 50, 2, 80, 52, 2,
|
||||
27, 0, 255, 1, 30, 26, 0, 1, 120, 26, 2, 26, 2, 255, 1, 30, 25, 0, 1,
|
||||
120, 25, 2, 10, 2, 2, 3, 17, 19, 24, 29, 30, 55, 0, 4, 56, 19, 2, 70,
|
||||
28, 2, 58, 36, 2, 70, 55, 2, 10, 2, 255, 3, 17, 19, 24, 29, 30, 55,
|
||||
0, 4, 56, 19, 2, 66, 28, 2, 60, 36, 2, 66, 55, 2, 20, 2, 255, 2, 23,
|
||||
20, 33, 55, 2, 2, 84, 20, 2, 84, 55, 2, 10, 2, 1, 3, 17, 19, 24, 29,
|
||||
30, 55, 0, 4, 56, 19, 2, 70, 28, 2, 58, 36, 2, 70, 55, 2, 32, 2, 255,
|
||||
1, 30, 40, 2, 1, 84, 40, 2, 29, 2, 255, 2, 21, 29, 30, 55, 0, 2, 60,
|
||||
29, 2, 68, 55, 2, 29, 1, 255, 2, 30, 29, 30, 55, 2, 2, 112, 29, 2, 112,
|
||||
55, 2, 5, 2, 0, 2, 23, 18, 23, 19, 2, 2, 84, 18, 2, 84, 19, 2, 7, 2,
|
||||
0, 2, 23, 18, 23, 20, 2, 2, 84, 18, 2, 84, 20, 2, 8, 2, 0, 3, 23, 18,
|
||||
23, 20, 30, 40, 2, 2, 84, 18, 2, 84, 22, 2, 6, 1, 255, 4, 14, 18, 14,
|
||||
19, 20, 30, 20, 54, 0, 4, 48, 18, 2, 48, 19, 2, 60, 30, 2, 60, 54, 2,
|
||||
14, 0, 255, 2, 17, 19, 30, 55, 0, 2, 56, 19, 2, 68, 55, 2, 12, 2, 255,
|
||||
3, 17, 19, 24, 32, 30, 56, 0, 6, 62, 19, 2, 90, 28, 2, 80, 37, 2, 90,
|
||||
43, 2, 86, 48, 2, 118, 56, 2, 22, 1, 255, 2, 23, 20, 30, 40, 2, 1, 84,
|
||||
22, 2, 25, 1, 255, 1, 23, 24, 2, 1, 84, 24, 2, 14, 0, 6, 2, 17, 19,
|
||||
20, 55, 0, 2, 56, 19, 2, 60, 55, 2, 18, 1, 255, 2, 20, 20, 20, 47, 2,
|
||||
2, 72, 20, 2, 72, 47, 2, 22, 1, 255, 2, 23, 20, 30, 40, 2, 1, 84, 22,
|
||||
2, 22, 2, 255, 1, 20, 22, 0, 2, 62, 20, 2, 66, 40, 2, 16, 2, 255, 2,
|
||||
20, 20, 28, 40, 2, 2, 84, 20, 2, 112, 40, 2, 4, 0, 255, 1, 23, 18, 2,
|
||||
1, 84, 18, 2, 20, 1, 255, 2, 23, 20, 30, 55, 2, 2, 84, 20, 2, 84, 55,
|
||||
2, 21, 1, 255, 3, 23, 20, 30, 39, 30, 49, 2, 2, 84, 21, 2, 84, 49, 2,
|
||||
26, 1, 255, 3, 23, 20, 24, 41, 30, 55, 2, 1, 84, 25, 2, 26, 1, 255,
|
||||
3, 23, 20, 24, 41, 30, 55, 2, 1, 84, 25, 2, 17, 1, 255, 2, 23, 20, 30,
|
||||
42, 2, 2, 84, 20, 2, 112, 42, 2, 34, 0, 255, 1, 27, 55, 2, 1, 84, 55,
|
||||
2, 34, 0, 255, 1, 30, 55, 0, 1, 78, 55, 2, 34, 0, 255, 1, 27, 55, 2,
|
||||
1, 84, 55, 2, 34, 0, 255, 1, 20, 55, 2, 1, 76, 55, 2, 31, 2, 255, 2,
|
||||
17, 35, 30, 55, 0, 2, 68, 35, 2, 68, 55, 2, 30, 2, 255, 3, 17, 35, 24,
|
||||
40, 30, 55, 0, 3, 56, 35, 2, 68, 40, 2, 68, 55, 2, 28, 2, 255, 3, 17,
|
||||
29, 24, 40, 30, 55, 0, 3, 56, 29, 2, 58, 40, 2, 62, 55, 2, 33, 0, 255,
|
||||
1, 27, 54, 2, 1, 84, 54, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
|
||||
1, 4, 1, 5, 1, 18, 2, 18, 19, 4, 18, 19, 30, 54, 2, 18, 20, 2, 18, 22,
|
||||
1, 19, 3, 19, 29, 55, 3, 19, 31, 55, 3, 19, 32, 56, 2, 19, 33, 2, 19,
|
||||
55, 1, 20, 2, 20, 40, 2, 20, 42, 2, 20, 47, 2, 20, 54, 2, 20, 55, 2,
|
||||
21, 49, 1, 22, 2, 22, 55, 2, 23, 55, 1, 24, 1, 25, 1, 26, 3, 29, 40,
|
||||
55, 2, 29, 55, 3, 35, 40, 55, 2, 35, 55, 1, 40, 1, 54, 1, 55, 0, 0,
|
||||
0, 1, 0, 0, 0, 220, 16, 0, 0, 4, 0, 0, 0, 227, 16, 0, 0, 5, 0, 0, 0,
|
||||
255, 16, 0, 0, 50, 50, 32, 114, 114, 32, 163, 163, 32, 0, 0, 0, 3, 0,
|
||||
0, 0, 236, 22, 0, 0, 84, 0, 69, 1, 74, 1, 18, 4, 5, 6, 7, 8, 9, 10,
|
||||
11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 0, 0, 0, 68, 69, 0, 0, 3,
|
||||
0, 0, 0, 0, 23, 0, 0, 74, 80, 0, 0, 10, 0, 0, 0, 238, 13, 0, 0, 85,
|
||||
83, 0, 0, 2, 0, 0, 0, 72, 23, 0, 0, 3, 0, 0, 0, 144, 17, 0, 0, 252,
|
||||
0, 253, 0, 4, 2, 64, 19, 1, 64, 55, 1, 1, 2, 40, 14, 0, 40, 39, 0, 4,
|
||||
4, 56, 19, 0, 58, 29, 0, 60, 41, 0, 70, 55, 0, 5, 3, 52, 15, 1, 64,
|
||||
30, 1, 72, 39, 1, 8, 3, 52, 1, 0, 64, 10, 0, 72, 17, 0, 4, 3, 60, 20,
|
||||
1, 60, 40, 1, 60, 55, 1, 1, 3, 56, 14, 0, 60, 25, 0, 60, 39, 0, 6, 1,
|
||||
84, 20, 0, 7, 1, 84, 15, 1, 10, 1, 84, 1, 0, 4, 1, 60, 20, 1, 1, 1,
|
||||
56, 15, 0, 6, 1, 84, 20, 0, 7, 1, 88, 15, 1, 10, 1, 88, 1, 0, 6, 2,
|
||||
84, 20, 0, 84, 55, 0, 7, 2, 84, 15, 1, 84, 39, 1, 10, 2, 84, 1, 0, 84,
|
||||
17, 0, 0, 0, 4, 2, 66, 20, 1, 66, 54, 1, 1, 2, 54, 15, 0, 54, 39, 0,
|
||||
6, 2, 92, 20, 0, 80, 55, 0, 7, 2, 88, 15, 1, 76, 39, 1, 10, 2, 88, 1,
|
||||
0, 76, 17, 0, 4, 2, 66, 20, 1, 64, 55, 1, 1, 2, 56, 15, 0, 56, 39, 0,
|
||||
4, 1, 56, 19, 1, 1, 1, 48, 14, 0, 4, 1, 60, 19, 1, 1, 1, 56, 14, 0,
|
||||
4, 1, 60, 19, 1, 1, 1, 56, 14, 0, 6, 2, 84, 23, 0, 112, 55, 0, 7, 2,
|
||||
88, 19, 1, 116, 39, 1, 10, 2, 88, 4, 0, 116, 17, 0, 4, 5, 56, 19, 1,
|
||||
70, 28, 1, 58, 36, 1, 68, 40, 1, 70, 55, 1, 1, 7, 52, 13, 0, 66, 22,
|
||||
0, 68, 23, 0, 52, 26, 0, 62, 27, 0, 72, 33, 0, 74, 39, 0, 4, 11, 58,
|
||||
19, 0, 84, 27, 0, 76, 34, 0, 76, 36, 0, 72, 38, 0, 80, 44, 0, 68, 50,
|
||||
0, 80, 51, 0, 80, 53, 0, 80, 57, 0, 80, 58, 0, 5, 10, 58, 13, 1, 66,
|
||||
22, 1, 80, 23, 1, 62, 26, 1, 66, 27, 1, 82, 32, 1, 74, 35, 1, 76, 37,
|
||||
1, 72, 38, 1, 80, 41, 1, 8, 5, 52, 0, 0, 58, 7, 0, 50, 8, 0, 82, 13,
|
||||
0, 72, 17, 0, 4, 6, 56, 19, 1, 68, 28, 1, 56, 36, 1, 68, 38, 1, 68,
|
||||
45, 1, 68, 55, 1, 1, 6, 48, 14, 0, 68, 23, 0, 48, 26, 0, 62, 27, 0,
|
||||
74, 33, 0, 72, 39, 0, 4, 5, 56, 19, 0, 78, 28, 0, 64, 36, 0, 68, 38,
|
||||
0, 78, 46, 0, 5, 10, 62, 13, 1, 62, 22, 1, 78, 23, 1, 50, 26, 1, 56,
|
||||
27, 1, 78, 32, 1, 78, 35, 1, 78, 37, 1, 60, 38, 1, 78, 41, 1, 8, 6,
|
||||
58, 0, 0, 64, 7, 0, 76, 8, 0, 76, 12, 0, 78, 15, 0, 72, 17, 0, 4, 1,
|
||||
120, 26, 0, 5, 1, 120, 21, 1, 12, 1, 120, 6, 0, 76, 34, 120, 19, 0,
|
||||
120, 20, 0, 120, 21, 0, 120, 22, 0, 120, 23, 0, 120, 24, 0, 120, 25,
|
||||
0, 120, 26, 0, 120, 27, 0, 120, 28, 0, 120, 29, 0, 120, 30, 0, 120,
|
||||
31, 0, 120, 32, 0, 120, 33, 0, 120, 34, 0, 120, 35, 0, 120, 36, 0, 120,
|
||||
37, 0, 120, 38, 0, 120, 39, 0, 120, 40, 0, 120, 41, 0, 120, 42, 0, 120,
|
||||
43, 0, 120, 44, 0, 120, 45, 0, 120, 46, 0, 120, 47, 0, 120, 48, 0, 120,
|
||||
49, 0, 120, 50, 0, 120, 51, 0, 120, 52, 0, 9, 1, 120, 2, 0, 4, 1, 120,
|
||||
25, 0, 5, 1, 120, 20, 1, 12, 1, 120, 5, 0, 76, 24, 120, 19, 0, 120,
|
||||
20, 0, 120, 21, 0, 120, 22, 0, 120, 23, 0, 120, 24, 0, 120, 25, 0, 120,
|
||||
26, 0, 120, 27, 0, 120, 28, 0, 120, 29, 0, 120, 30, 0, 120, 31, 0, 120,
|
||||
32, 0, 120, 33, 0, 120, 34, 0, 120, 35, 0, 120, 36, 0, 120, 37, 0, 120,
|
||||
38, 0, 120, 39, 0, 120, 40, 0, 120, 41, 0, 120, 42, 0, 9, 1, 120, 1,
|
||||
0, 4, 4, 56, 19, 1, 70, 28, 1, 58, 36, 1, 70, 55, 1, 1, 4, 48, 14, 0,
|
||||
62, 23, 0, 48, 26, 0, 60, 39, 0, 4, 4, 56, 19, 1, 66, 28, 1, 60, 36,
|
||||
1, 66, 55, 1, 1, 3, 56, 14, 0, 60, 24, 0, 60, 39, 0, 6, 2, 84, 20, 0,
|
||||
84, 55, 0, 7, 2, 88, 15, 1, 88, 39, 1, 10, 2, 88, 1, 0, 88, 17, 0, 4,
|
||||
4, 56, 19, 1, 70, 28, 1, 58, 36, 1, 70, 55, 1, 1, 4, 48, 14, 0, 62,
|
||||
23, 0, 48, 26, 0, 60, 39, 0, 4, 2, 60, 29, 1, 68, 55, 1, 1, 2, 56, 24,
|
||||
0, 56, 39, 0, 6, 2, 112, 29, 0, 112, 55, 0, 7, 2, 112, 24, 1, 112, 39,
|
||||
1, 10, 2, 112, 7, 0, 112, 17, 0, 0, 2, 64, 18, 1, 64, 20, 1, 4, 4, 48,
|
||||
18, 0, 48, 19, 0, 60, 30, 0, 60, 54, 0, 5, 2, 48, 17, 1, 48, 39, 1,
|
||||
8, 2, 48, 2, 0, 48, 17, 0, 4, 2, 56, 19, 1, 68, 55, 1, 1, 2, 48, 14,
|
||||
0, 60, 39, 0, 4, 6, 62, 19, 0, 90, 28, 0, 80, 37, 0, 90, 43, 0, 86,
|
||||
48, 0, 118, 56, 0, 5, 6, 74, 14, 1, 98, 23, 1, 66, 26, 1, 74, 27, 1,
|
||||
98, 34, 1, 118, 40, 1, 8, 5, 74, 0, 0, 78, 7, 0, 82, 9, 0, 98, 15, 0,
|
||||
118, 18, 0, 6, 1, 84, 24, 0, 7, 1, 88, 20, 1, 10, 1, 88, 5, 0, 6, 1,
|
||||
84, 24, 0, 7, 1, 88, 20, 1, 10, 1, 88, 5, 0, 4, 2, 56, 19, 0, 60, 55,
|
||||
0, 5, 2, 48, 14, 1, 60, 39, 1, 8, 2, 64, 0, 0, 70, 17, 0, 6, 2, 72,
|
||||
20, 0, 72, 47, 0, 3, 2, 76, 15, 1, 76, 35, 1, 4, 2, 60, 20, 1, 60, 40,
|
||||
1, 1, 2, 56, 15, 0, 64, 29, 0, 4, 2, 60, 20, 1, 60, 40, 1, 1, 1, 56,
|
||||
18, 0, 4, 2, 84, 20, 1, 84, 40, 1, 1, 1, 56, 18, 0, 6, 1, 84, 22, 0,
|
||||
7, 1, 88, 18, 1, 10, 1, 88, 3, 0, 6, 1, 84, 22, 0, 7, 1, 88, 18, 1,
|
||||
10, 1, 88, 3, 0, 6, 2, 84, 20, 0, 112, 40, 0, 3, 2, 68, 15, 1, 96, 29,
|
||||
1, 4, 2, 66, 20, 0, 66, 40, 0, 1, 2, 42, 15, 1, 64, 29, 1, 4, 2, 62,
|
||||
20, 1, 66, 40, 1, 1, 2, 42, 15, 0, 64, 29, 0, 4, 2, 60, 20, 0, 60, 40,
|
||||
0, 1, 2, 56, 15, 1, 64, 29, 1, 0, 0, 4, 4, 60, 20, 1, 60, 39, 1, 60,
|
||||
47, 1, 60, 55, 1, 1, 4, 56, 15, 0, 60, 28, 0, 60, 35, 0, 60, 39, 0,
|
||||
6, 2, 84, 21, 0, 84, 49, 0, 7, 2, 88, 16, 1, 88, 36, 1, 10, 2, 88, 2,
|
||||
0, 88, 16, 0, 4, 2, 60, 20, 1, 60, 55, 1, 1, 2, 56, 15, 0, 60, 39, 0,
|
||||
0, 2, 60, 20, 1, 60, 55, 1, 6, 1, 84, 25, 0, 7, 1, 84, 20, 1, 10, 1,
|
||||
84, 5, 0, 6, 1, 84, 25, 0, 7, 1, 88, 20, 1, 10, 1, 88, 5, 0, 6, 2, 84,
|
||||
20, 0, 112, 42, 0, 7, 2, 88, 15, 1, 116, 31, 1, 10, 2, 88, 1, 0, 116,
|
||||
11, 0, 4, 3, 60, 20, 1, 60, 40, 1, 60, 55, 1, 1, 3, 56, 15, 0, 64, 29,
|
||||
0, 60, 39, 0, 4, 1, 60, 55, 1, 1, 1, 52, 39, 0, 6, 1, 80, 55, 0, 7,
|
||||
1, 80, 39, 1, 10, 1, 80, 17, 0, 6, 1, 80, 55, 0, 7, 1, 80, 39, 1, 10,
|
||||
1, 80, 17, 0, 6, 1, 76, 55, 0, 7, 1, 68, 39, 1, 10, 1, 68, 17, 0, 6,
|
||||
1, 76, 55, 0, 7, 1, 76, 39, 1, 10, 1, 76, 17, 0, 4, 1, 60, 55, 1, 1,
|
||||
1, 60, 39, 0, 6, 1, 84, 55, 0, 7, 1, 88, 39, 1, 10, 1, 88, 17, 0, 4,
|
||||
1, 78, 55, 0, 5, 1, 78, 39, 1, 8, 1, 78, 17, 0, 4, 3, 56, 35, 1, 68,
|
||||
40, 1, 68, 55, 1, 1, 4, 48, 26, 0, 62, 27, 0, 74, 33, 0, 72, 39, 0,
|
||||
4, 3, 56, 29, 1, 58, 40, 1, 62, 55, 1, 1, 4, 46, 23, 0, 48, 26, 0, 56,
|
||||
29, 0, 56, 39, 0, 4, 2, 68, 35, 1, 68, 55, 1, 1, 2, 66, 26, 0, 60, 39,
|
||||
0, 2, 1, 84, 54, 0, 0, 0, 88, 65, 0, 0, 2, 0, 0, 0, 144, 14, 0, 0, 88,
|
||||
84, 0, 0, 47, 0, 0, 0, 168, 17, 0, 0, 88, 86, 0, 0, 48, 0, 0, 0, 124,
|
||||
16, 0, 0, 3, 0, 0, 0, 212, 22, 0, 0, 3, 0, 0, 0, 40, 29, 0, 0, 3, 3,
|
||||
3, 9, 3, 11, 4, 4, 4, 7, 4, 8, 4, 10, 4, 11, 5, 7, 8, 8, 9, 9, 9, 11,
|
||||
11, 11, 38, 38, 38, 46, 38, 62, 38, 110, 38, 118, 38, 134, 38, 142,
|
||||
38, 159, 38, 175, 46, 46, 54, 54, 54, 62, 54, 134, 62, 62, 102, 102,
|
||||
102, 110, 102, 134, 102, 142, 102, 159, 110, 126, 110, 134, 110, 142,
|
||||
134, 134, 134, 159, 142, 142, 151, 151, 151, 159, 151, 175, 159, 159,
|
||||
1, 0, 0, 0, 116, 13, 0, 0, 3, 0, 0, 0, 148, 14, 0, 0, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 50, 50, 50, 114, 50, 163, 114, 163, 4, 168, 0, 0
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 18, 0, 0, 136, 17, 0, 0,
|
||||
10, 2, 255, 3, 17, 19, 24, 29, 30, 55, 0, 4, 56, 19, 2, 70, 28, 2, 58,
|
||||
36, 2, 70, 55, 2, 14, 0, 255, 2, 23, 19, 23, 55, 2, 2, 84, 19, 2, 84,
|
||||
55, 2, 14, 0, 255, 2, 23, 19, 23, 55, 0, 2, 66, 19, 2, 66, 55, 2, 23,
|
||||
1, 1, 4, 23, 19, 17, 29, 23, 40, 30, 55, 2, 2, 84, 22, 2, 84, 55, 2,
|
||||
24, 1, 5, 2, 23, 23, 30, 55, 0, 4, 56, 19, 2, 58, 29, 2, 60, 41, 2,
|
||||
70, 55, 2, 15, 1, 255, 1, 23, 20, 2, 1, 84, 20, 2, 15, 1, 255, 1, 23,
|
||||
20, 2, 1, 84, 20, 2, 20, 1, 255, 2, 21, 20, 21, 55, 2, 2, 84, 20, 2,
|
||||
84, 55, 2, 0, 0, 255, 0, 0, 0, 19, 1, 255, 2, 23, 20, 23, 54, 0, 2,
|
||||
66, 20, 2, 66, 54, 2, 20, 1, 255, 2, 23, 20, 20, 55, 0, 2, 66, 20, 2,
|
||||
64, 55, 2, 20, 1, 255, 2, 23, 20, 20, 55, 2, 2, 92, 20, 2, 80, 55, 2,
|
||||
9, 0, 255, 1, 23, 19, 2, 1, 84, 19, 2, 9, 0, 255, 1, 20, 19, 0, 1, 56,
|
||||
19, 2, 11, 2, 255, 3, 17, 19, 24, 31, 30, 55, 0, 5, 56, 19, 2, 70, 28,
|
||||
2, 58, 36, 2, 68, 40, 2, 70, 55, 2, 13, 2, 255, 3, 17, 19, 24, 32, 30,
|
||||
55, 0, 5, 56, 19, 2, 78, 28, 2, 64, 36, 2, 68, 38, 2, 78, 46, 2, 26,
|
||||
1, 255, 2, 23, 20, 30, 42, 2, 2, 84, 23, 2, 112, 55, 2, 13, 2, 255,
|
||||
3, 17, 19, 24, 32, 30, 55, 0, 7, 58, 19, 2, 84, 27, 2, 76, 35, 2, 72,
|
||||
38, 2, 80, 44, 2, 68, 50, 2, 80, 52, 2, 27, 0, 255, 1, 30, 26, 0, 1,
|
||||
120, 26, 2, 26, 2, 255, 1, 30, 25, 0, 1, 120, 25, 2, 10, 2, 2, 3, 17,
|
||||
19, 24, 29, 30, 55, 0, 4, 56, 19, 2, 70, 28, 2, 58, 36, 2, 70, 55, 2,
|
||||
10, 2, 255, 3, 17, 19, 24, 29, 30, 55, 0, 4, 56, 19, 2, 66, 28, 2, 60,
|
||||
36, 2, 66, 55, 2, 20, 2, 255, 2, 23, 20, 33, 55, 2, 2, 84, 20, 2, 84,
|
||||
55, 2, 10, 2, 1, 3, 17, 19, 24, 29, 30, 55, 0, 4, 56, 19, 2, 70, 28,
|
||||
2, 58, 36, 2, 70, 55, 2, 32, 2, 255, 1, 30, 40, 2, 1, 84, 40, 2, 29,
|
||||
2, 255, 2, 21, 29, 30, 55, 0, 2, 60, 29, 2, 68, 55, 2, 29, 1, 255, 2,
|
||||
30, 29, 30, 55, 2, 2, 112, 29, 2, 112, 55, 2, 5, 2, 0, 2, 23, 18, 23,
|
||||
19, 2, 2, 84, 18, 2, 84, 19, 2, 7, 2, 0, 2, 23, 18, 23, 20, 2, 2, 84,
|
||||
18, 2, 84, 20, 2, 8, 2, 0, 3, 23, 18, 23, 20, 30, 40, 2, 2, 84, 18,
|
||||
2, 84, 22, 2, 6, 1, 255, 4, 14, 18, 14, 19, 20, 30, 20, 54, 0, 4, 48,
|
||||
18, 2, 48, 19, 2, 60, 30, 2, 60, 54, 2, 14, 0, 255, 2, 17, 19, 30, 55,
|
||||
0, 2, 56, 19, 2, 68, 55, 2, 12, 2, 255, 3, 17, 19, 24, 32, 30, 56, 0,
|
||||
6, 62, 19, 2, 90, 28, 2, 80, 37, 2, 90, 43, 2, 86, 48, 2, 118, 56, 2,
|
||||
22, 1, 255, 2, 23, 20, 30, 40, 2, 1, 84, 22, 2, 25, 1, 255, 1, 23, 24,
|
||||
2, 1, 84, 24, 2, 14, 0, 6, 2, 17, 19, 20, 55, 0, 2, 56, 19, 2, 60, 55,
|
||||
2, 18, 1, 255, 2, 20, 20, 20, 47, 2, 2, 72, 20, 2, 72, 47, 2, 22, 1,
|
||||
255, 2, 23, 20, 30, 40, 2, 1, 84, 22, 2, 22, 2, 255, 1, 20, 22, 0, 2,
|
||||
62, 20, 2, 66, 40, 2, 16, 2, 255, 2, 20, 20, 28, 40, 2, 2, 84, 20, 2,
|
||||
112, 40, 2, 4, 0, 255, 1, 23, 18, 2, 1, 84, 18, 2, 20, 1, 255, 2, 23,
|
||||
20, 30, 55, 2, 2, 84, 20, 2, 84, 55, 2, 21, 1, 255, 3, 23, 20, 30, 39,
|
||||
30, 49, 2, 2, 84, 21, 2, 84, 49, 2, 26, 1, 255, 3, 23, 20, 24, 41, 30,
|
||||
55, 2, 1, 84, 25, 2, 26, 1, 255, 3, 23, 20, 24, 41, 30, 55, 2, 1, 84,
|
||||
25, 2, 17, 1, 255, 2, 23, 20, 30, 42, 2, 2, 84, 20, 2, 112, 42, 2, 34,
|
||||
0, 255, 1, 27, 55, 2, 1, 84, 55, 2, 34, 0, 255, 1, 30, 55, 0, 1, 78,
|
||||
55, 2, 34, 0, 255, 1, 27, 55, 2, 1, 84, 55, 2, 34, 0, 255, 1, 20, 55,
|
||||
2, 1, 76, 55, 2, 31, 2, 255, 2, 17, 35, 30, 55, 0, 2, 68, 35, 2, 68,
|
||||
55, 2, 30, 2, 255, 3, 17, 35, 24, 40, 30, 55, 0, 3, 56, 35, 2, 68, 40,
|
||||
2, 68, 55, 2, 28, 2, 255, 3, 17, 29, 24, 40, 30, 55, 0, 3, 56, 29, 2,
|
||||
58, 40, 2, 62, 55, 2, 33, 0, 255, 1, 27, 54, 2, 1, 84, 54, 2, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 4, 1, 5, 1, 18, 2, 18, 19, 4,
|
||||
18, 19, 30, 54, 2, 18, 20, 2, 18, 22, 1, 19, 3, 19, 29, 55, 3, 19, 31,
|
||||
55, 3, 19, 32, 56, 2, 19, 33, 2, 19, 55, 1, 20, 2, 20, 40, 2, 20, 42,
|
||||
2, 20, 47, 2, 20, 54, 2, 20, 55, 2, 21, 49, 1, 22, 2, 22, 55, 2, 23,
|
||||
55, 1, 24, 1, 25, 1, 26, 3, 29, 40, 55, 2, 29, 55, 3, 35, 40, 55, 2,
|
||||
35, 55, 1, 40, 1, 54, 1, 55, 0, 0, 0, 1, 0, 0, 0, 220, 16, 0, 0, 4,
|
||||
0, 0, 0, 227, 16, 0, 0, 5, 0, 0, 0, 255, 16, 0, 0, 50, 50, 32, 114,
|
||||
114, 32, 163, 163, 32, 0, 0, 0, 3, 0, 0, 0, 236, 22, 0, 0, 84, 0, 69,
|
||||
1, 74, 1, 18, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
|
||||
19, 20, 21, 0, 0, 0, 68, 69, 0, 0, 3, 0, 0, 0, 0, 23, 0, 0, 74, 80,
|
||||
0, 0, 10, 0, 0, 0, 238, 13, 0, 0, 85, 83, 0, 0, 2, 0, 0, 0, 72, 23,
|
||||
0, 0, 3, 0, 0, 0, 144, 17, 0, 0, 252, 0, 253, 0, 4, 2, 64, 19, 1, 64,
|
||||
55, 1, 1, 2, 40, 14, 0, 40, 39, 0, 4, 4, 56, 19, 0, 58, 29, 0, 60, 41,
|
||||
0, 70, 55, 0, 5, 3, 52, 15, 1, 64, 30, 1, 72, 39, 1, 8, 3, 52, 1, 0,
|
||||
64, 10, 0, 72, 17, 0, 4, 3, 60, 20, 1, 60, 40, 1, 60, 55, 1, 1, 3, 56,
|
||||
14, 0, 60, 25, 0, 60, 39, 0, 6, 1, 84, 20, 0, 7, 1, 84, 15, 1, 10, 1,
|
||||
84, 1, 0, 4, 1, 60, 20, 1, 1, 1, 56, 15, 0, 6, 1, 84, 20, 0, 7, 1, 88,
|
||||
15, 1, 10, 1, 88, 1, 0, 6, 2, 84, 20, 0, 84, 55, 0, 7, 2, 84, 15, 1,
|
||||
84, 39, 1, 10, 2, 84, 1, 0, 84, 17, 0, 0, 0, 4, 2, 66, 20, 1, 66, 54,
|
||||
1, 1, 2, 54, 15, 0, 54, 39, 0, 6, 2, 92, 20, 0, 80, 55, 0, 7, 2, 88,
|
||||
15, 1, 76, 39, 1, 10, 2, 88, 1, 0, 76, 17, 0, 4, 2, 66, 20, 1, 64, 55,
|
||||
1, 1, 2, 56, 15, 0, 56, 39, 0, 4, 1, 56, 19, 1, 1, 1, 48, 14, 0, 4,
|
||||
1, 60, 19, 1, 1, 1, 56, 14, 0, 4, 1, 60, 19, 1, 1, 1, 56, 14, 0, 6,
|
||||
2, 84, 23, 0, 112, 55, 0, 7, 2, 88, 19, 1, 116, 39, 1, 10, 2, 88, 4,
|
||||
0, 116, 17, 0, 4, 5, 56, 19, 1, 70, 28, 1, 58, 36, 1, 68, 40, 1, 70,
|
||||
55, 1, 1, 7, 52, 13, 0, 66, 22, 0, 68, 23, 0, 52, 26, 0, 62, 27, 0,
|
||||
72, 33, 0, 74, 39, 0, 4, 11, 58, 19, 0, 84, 27, 0, 76, 34, 0, 76, 36,
|
||||
0, 72, 38, 0, 80, 44, 0, 68, 50, 0, 80, 51, 0, 80, 53, 0, 80, 57, 0,
|
||||
80, 58, 0, 5, 10, 58, 13, 1, 66, 22, 1, 80, 23, 1, 62, 26, 1, 66, 27,
|
||||
1, 82, 32, 1, 74, 35, 1, 76, 37, 1, 72, 38, 1, 80, 41, 1, 8, 5, 52,
|
||||
0, 0, 58, 7, 0, 50, 8, 0, 82, 13, 0, 72, 17, 0, 4, 6, 56, 19, 1, 68,
|
||||
28, 1, 56, 36, 1, 68, 38, 1, 68, 45, 1, 68, 55, 1, 1, 6, 48, 14, 0,
|
||||
68, 23, 0, 48, 26, 0, 62, 27, 0, 74, 33, 0, 72, 39, 0, 4, 5, 56, 19,
|
||||
0, 78, 28, 0, 64, 36, 0, 68, 38, 0, 78, 46, 0, 5, 10, 62, 13, 1, 62,
|
||||
22, 1, 78, 23, 1, 50, 26, 1, 56, 27, 1, 78, 32, 1, 78, 35, 1, 78, 37,
|
||||
1, 60, 38, 1, 78, 41, 1, 8, 6, 58, 0, 0, 64, 7, 0, 76, 8, 0, 76, 12,
|
||||
0, 78, 15, 0, 72, 17, 0, 4, 1, 120, 26, 0, 5, 1, 120, 21, 1, 12, 1,
|
||||
120, 6, 0, 76, 34, 120, 19, 0, 120, 20, 0, 120, 21, 0, 120, 22, 0, 120,
|
||||
23, 0, 120, 24, 0, 120, 25, 0, 120, 26, 0, 120, 27, 0, 120, 28, 0, 120,
|
||||
29, 0, 120, 30, 0, 120, 31, 0, 120, 32, 0, 120, 33, 0, 120, 34, 0, 120,
|
||||
35, 0, 120, 36, 0, 120, 37, 0, 120, 38, 0, 120, 39, 0, 120, 40, 0, 120,
|
||||
41, 0, 120, 42, 0, 120, 43, 0, 120, 44, 0, 120, 45, 0, 120, 46, 0, 120,
|
||||
47, 0, 120, 48, 0, 120, 49, 0, 120, 50, 0, 120, 51, 0, 120, 52, 0, 9,
|
||||
1, 120, 2, 0, 4, 1, 120, 25, 0, 5, 1, 120, 20, 1, 12, 1, 120, 5, 0,
|
||||
76, 24, 120, 19, 0, 120, 20, 0, 120, 21, 0, 120, 22, 0, 120, 23, 0,
|
||||
120, 24, 0, 120, 25, 0, 120, 26, 0, 120, 27, 0, 120, 28, 0, 120, 29,
|
||||
0, 120, 30, 0, 120, 31, 0, 120, 32, 0, 120, 33, 0, 120, 34, 0, 120,
|
||||
35, 0, 120, 36, 0, 120, 37, 0, 120, 38, 0, 120, 39, 0, 120, 40, 0, 120,
|
||||
41, 0, 120, 42, 0, 9, 1, 120, 1, 0, 4, 4, 56, 19, 1, 70, 28, 1, 58,
|
||||
36, 1, 70, 55, 1, 1, 4, 48, 14, 0, 62, 23, 0, 48, 26, 0, 60, 39, 0,
|
||||
4, 4, 56, 19, 1, 66, 28, 1, 60, 36, 1, 66, 55, 1, 1, 3, 56, 14, 0, 60,
|
||||
24, 0, 60, 39, 0, 6, 2, 84, 20, 0, 84, 55, 0, 7, 2, 88, 15, 1, 88, 39,
|
||||
1, 10, 2, 88, 1, 0, 88, 17, 0, 4, 4, 56, 19, 1, 70, 28, 1, 58, 36, 1,
|
||||
70, 55, 1, 1, 4, 48, 14, 0, 62, 23, 0, 48, 26, 0, 60, 39, 0, 4, 2, 60,
|
||||
29, 1, 68, 55, 1, 1, 2, 56, 24, 0, 56, 39, 0, 6, 2, 112, 29, 0, 112,
|
||||
55, 0, 7, 2, 112, 24, 1, 112, 39, 1, 10, 2, 112, 7, 0, 112, 17, 0, 0,
|
||||
2, 64, 18, 1, 64, 20, 1, 4, 4, 48, 18, 0, 48, 19, 0, 60, 30, 0, 60,
|
||||
54, 0, 5, 2, 48, 17, 1, 48, 39, 1, 8, 2, 48, 2, 0, 48, 17, 0, 4, 2,
|
||||
56, 19, 1, 68, 55, 1, 1, 2, 48, 14, 0, 60, 39, 0, 4, 6, 62, 19, 0, 90,
|
||||
28, 0, 80, 37, 0, 90, 43, 0, 86, 48, 0, 118, 56, 0, 5, 6, 74, 14, 1,
|
||||
98, 23, 1, 66, 26, 1, 74, 27, 1, 98, 34, 1, 118, 40, 1, 8, 5, 74, 0,
|
||||
0, 78, 7, 0, 82, 9, 0, 98, 15, 0, 118, 18, 0, 6, 1, 84, 24, 0, 7, 1,
|
||||
88, 20, 1, 10, 1, 88, 5, 0, 6, 1, 84, 24, 0, 7, 1, 88, 20, 1, 10, 1,
|
||||
88, 5, 0, 4, 2, 56, 19, 0, 60, 55, 0, 5, 2, 48, 14, 1, 60, 39, 1, 8,
|
||||
2, 64, 0, 0, 70, 17, 0, 6, 2, 72, 20, 0, 72, 47, 0, 3, 2, 76, 15, 1,
|
||||
76, 35, 1, 4, 2, 60, 20, 1, 60, 40, 1, 1, 2, 56, 15, 0, 64, 29, 0, 4,
|
||||
2, 60, 20, 1, 60, 40, 1, 1, 1, 56, 18, 0, 4, 2, 84, 20, 1, 84, 40, 1,
|
||||
1, 1, 56, 18, 0, 6, 1, 84, 22, 0, 7, 1, 88, 18, 1, 10, 1, 88, 3, 0,
|
||||
6, 1, 84, 22, 0, 7, 1, 88, 18, 1, 10, 1, 88, 3, 0, 6, 2, 84, 20, 0,
|
||||
112, 40, 0, 3, 2, 68, 15, 1, 96, 29, 1, 4, 2, 66, 20, 0, 66, 40, 0,
|
||||
1, 2, 42, 15, 1, 64, 29, 1, 4, 2, 62, 20, 1, 66, 40, 1, 1, 2, 42, 15,
|
||||
0, 64, 29, 0, 4, 2, 60, 20, 0, 60, 40, 0, 1, 2, 56, 15, 1, 64, 29, 1,
|
||||
0, 0, 4, 4, 60, 20, 1, 60, 39, 1, 60, 47, 1, 60, 55, 1, 1, 4, 56, 15,
|
||||
0, 60, 28, 0, 60, 35, 0, 60, 39, 0, 6, 2, 84, 21, 0, 84, 49, 0, 7, 2,
|
||||
88, 16, 1, 88, 36, 1, 10, 2, 88, 2, 0, 88, 16, 0, 4, 2, 60, 20, 1, 60,
|
||||
55, 1, 1, 2, 56, 15, 0, 60, 39, 0, 0, 2, 60, 20, 1, 60, 55, 1, 6, 1,
|
||||
84, 25, 0, 7, 1, 84, 20, 1, 10, 1, 84, 5, 0, 6, 1, 84, 25, 0, 7, 1,
|
||||
88, 20, 1, 10, 1, 88, 5, 0, 6, 2, 84, 20, 0, 112, 42, 0, 7, 2, 88, 15,
|
||||
1, 116, 31, 1, 10, 2, 88, 1, 0, 116, 11, 0, 4, 3, 60, 20, 1, 60, 40,
|
||||
1, 60, 55, 1, 1, 3, 56, 15, 0, 64, 29, 0, 60, 39, 0, 4, 1, 60, 55, 1,
|
||||
1, 1, 52, 39, 0, 6, 1, 80, 55, 0, 7, 1, 80, 39, 1, 10, 1, 80, 17, 0,
|
||||
6, 1, 80, 55, 0, 7, 1, 80, 39, 1, 10, 1, 80, 17, 0, 6, 1, 76, 55, 0,
|
||||
7, 1, 68, 39, 1, 10, 1, 68, 17, 0, 6, 1, 76, 55, 0, 7, 1, 76, 39, 1,
|
||||
10, 1, 76, 17, 0, 4, 1, 60, 55, 1, 1, 1, 60, 39, 0, 6, 1, 84, 55, 0,
|
||||
7, 1, 88, 39, 1, 10, 1, 88, 17, 0, 4, 1, 78, 55, 0, 5, 1, 78, 39, 1,
|
||||
8, 1, 78, 17, 0, 4, 3, 56, 35, 1, 68, 40, 1, 68, 55, 1, 1, 4, 48, 26,
|
||||
0, 62, 27, 0, 74, 33, 0, 72, 39, 0, 4, 3, 56, 29, 1, 58, 40, 1, 62,
|
||||
55, 1, 1, 4, 46, 23, 0, 48, 26, 0, 56, 29, 0, 56, 39, 0, 4, 2, 68, 35,
|
||||
1, 68, 55, 1, 1, 2, 66, 26, 0, 60, 39, 0, 2, 1, 84, 54, 0, 0, 0, 88,
|
||||
65, 0, 0, 2, 0, 0, 0, 144, 14, 0, 0, 88, 84, 0, 0, 47, 0, 0, 0, 168,
|
||||
17, 0, 0, 88, 86, 0, 0, 48, 0, 0, 0, 124, 16, 0, 0, 3, 0, 0, 0, 212,
|
||||
22, 0, 0, 3, 0, 0, 0, 40, 29, 0, 0, 3, 3, 3, 9, 3, 11, 4, 4, 4, 7, 4,
|
||||
8, 4, 10, 4, 11, 5, 7, 8, 8, 9, 9, 9, 11, 11, 11, 38, 38, 38, 46, 38,
|
||||
62, 38, 110, 38, 118, 38, 134, 38, 142, 38, 159, 38, 175, 46, 46, 54,
|
||||
54, 54, 62, 54, 134, 62, 62, 102, 102, 102, 110, 102, 134, 102, 142,
|
||||
102, 159, 110, 126, 110, 134, 110, 142, 134, 134, 134, 159, 142, 142,
|
||||
151, 151, 151, 159, 151, 175, 159, 159, 1, 0, 0, 0, 116, 13, 0, 0, 3,
|
||||
0, 0, 0, 148, 14, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 50, 50, 114,
|
||||
50, 163, 114, 163, 4, 168, 0, 0
|
||||
};
|
||||
const resource_hnd_t wifi_firmware_clm_blob =
|
||||
{ RESOURCE_IN_MEMORY, 7697, {.mem = { (const char *)wifi_firmware_clm_blob_image_data }}};
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -13,13 +13,15 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "wiced_resource.h"
|
||||
|
||||
#if defined(CY_STORAGE_WIFI_DATA)
|
||||
CY_SECTION(CY_STORAGE_WIFI_DATA) __attribute__( (used) )
|
||||
#endif
|
||||
const unsigned char wifi_firmware_clm_blob_image_data[7222] =
|
||||
{
|
||||
66, 76, 79, 66, 60, 0, 0, 0, 190, 201, 240, 7, 1, 0, 0, 0, 2, 0, 0,
|
||||
0, 0, 0, 0, 0, 60, 0, 0, 0, 246, 27, 0, 0, 227, 111, 211, 135, 0, 0,
|
||||
66, 76, 79, 66, 60, 0, 0, 0, 195, 163, 213, 190, 1, 0, 0, 0, 2, 0, 0,
|
||||
0, 0, 0, 0, 0, 60, 0, 0, 0, 246, 27, 0, 0, 143, 137, 42, 106, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 50, 28, 0, 0, 4, 0, 0, 0, 42, 255, 237, 159, 0, 0,
|
||||
0, 0, 67, 76, 77, 32, 68, 65, 84, 65, 0, 0, 12, 0, 2, 0, 57, 46, 49,
|
||||
48, 46, 51, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 46, 50, 57,
|
||||
|
@ -77,8 +79,8 @@ const unsigned char wifi_firmware_clm_blob_image_data[7222] =
|
|||
33, 38, 49, 2, 33, 49, 1, 38, 1, 48, 1, 49, 69, 48, 0, 88, 65, 0, 88,
|
||||
85, 0, 65, 85, 2, 74, 80, 1, 0, 0, 3, 0, 0, 0, 124, 10, 0, 0, 16, 4,
|
||||
5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 34, 46, 4, 36,
|
||||
64, 4, 100, 144, 4, 149, 177, 4, 50, 48, 49, 57, 45, 48, 54, 45, 48,
|
||||
55, 32, 48, 54, 58, 53, 57, 58, 53, 50, 0, 4, 2, 64, 19, 0, 64, 49,
|
||||
64, 4, 100, 144, 4, 149, 177, 4, 50, 48, 49, 57, 45, 48, 55, 45, 51,
|
||||
48, 32, 48, 49, 58, 52, 51, 58, 48, 50, 0, 4, 2, 64, 19, 0, 64, 49,
|
||||
0, 1, 2, 40, 14, 0, 40, 39, 0, 4, 4, 56, 19, 0, 58, 28, 0, 60, 39, 0,
|
||||
70, 49, 0, 1, 3, 52, 15, 0, 64, 30, 0, 72, 39, 0, 4, 3, 60, 20, 0, 60,
|
||||
38, 0, 60, 49, 0, 1, 3, 56, 14, 0, 60, 25, 0, 60, 39, 0, 6, 1, 84, 20,
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
/*
|
||||
* Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved
|
||||
* SPDX-License-Identifier: LicenseRef-PBL
|
||||
*
|
||||
* This file and the related binary are licensed under the
|
||||
* Permissive Binary License, Version 1.0 (the "License");
|
||||
* you may not use these files except in compliance with the License.
|
||||
*
|
||||
* You may obtain a copy of the License here:
|
||||
* LICENSE-permissive-binary-license-1.0.txt and at
|
||||
* https://www.mbed.com/licenses/PBL-1.0
|
||||
*
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/** @file
|
||||
* NVRAM file for CY8CKIT-062-WiFi-BT (PSoC6 WiFi-BT Pioneer Kit) using
|
||||
* Murata's Type 1DX module - Copied from bcm94343wwcd1.txt on 08/04/2019
|
||||
* # 2.4 GHz, 20 MHz BW mode; No Antenna Diversity
|
||||
*/
|
||||
|
||||
#ifndef INCLUDED_NVRAM_IMAGE_H_
|
||||
#define INCLUDED_NVRAM_IMAGE_H_
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include "generated_mac_address.txt"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Character array of NVRAM image
|
||||
*/
|
||||
|
||||
static const char wifi_nvram_image[] =
|
||||
// # The following parameter values are just placeholders, need to be updated.
|
||||
"manfid=0x2d0" "\x00"
|
||||
"prodid=0x086c" "\x00"
|
||||
"vendid=0x14e4" "\x00"
|
||||
"devid=0x43e2" "\x00"
|
||||
"boardtype=0x086c" "\x00"
|
||||
"boardrev=0x1110" "\x00"
|
||||
"boardnum=22" "\x00"
|
||||
"xtalfreq=37400" "\x00"
|
||||
NVRAM_GENERATED_MAC_ADDRESS "\x00"
|
||||
"sromrev=11" "\x00"
|
||||
"boardflags=0x00404201" "\x00"
|
||||
"boardflags3=0x08000000" "\x00"
|
||||
"nocrc=1" "\x00"
|
||||
"ag0=255" "\x00"
|
||||
"aa2g=1" "\x00"
|
||||
"ccode=ALL" "\x00"
|
||||
|
||||
//#Antenna diversity
|
||||
//#"swdiv_en=1" "\x00"
|
||||
//#"swdiv_gpio=2" "\x00"
|
||||
|
||||
"pa0itssit=0x20" "\x00"
|
||||
"extpagain2g=0" "\x00"
|
||||
|
||||
//#PA parameters for 2.4GHz, measured at CHIP OUTPUT
|
||||
"pa2ga0=-168,6905,-799" "\x00"
|
||||
"AvVmid_c0=0x0,0xc8" "\x00"
|
||||
"cckpwroffset0=5" "\x00"
|
||||
|
||||
//# PPR params
|
||||
"maxp2ga0=84" "\x00"
|
||||
"txpwrbckof=6" "\x00"
|
||||
"cckbw202gpo=0" "\x00"
|
||||
"legofdmbw202gpo=0x66111111" "\x00"
|
||||
"mcsbw202gpo=0x77711111" "\x00"
|
||||
"propbw202gpo=0xdd" "\x00"
|
||||
|
||||
//# OFDM IIR :
|
||||
"ofdmdigfilttype=18" "\x00"
|
||||
"ofdmdigfilttypebe=18" "\x00"
|
||||
|
||||
//# PAPD mode:
|
||||
"papdmode=1" "\x00"
|
||||
"papdvalidtest=1" "\x00"
|
||||
"pacalidx2g=32" "\x00"
|
||||
"papdepsoffset=-36" "\x00"
|
||||
"papdendidx=61" "\x00"
|
||||
|
||||
//# LTECX flags
|
||||
//#"ltecxmux=1" "\x00"
|
||||
//#"ltecxpadnum=0x02030401" "\x00"
|
||||
//#"ltecxfnsel=0x3003" "\x00"
|
||||
//#"ltecxgcigpio=0x3012" "\x00"
|
||||
|
||||
//#il0macaddr=00:90:4c:c5:12:38
|
||||
"wl0id=0x431b" "\x00"
|
||||
|
||||
"deadman_to=0xffffffff" "\x00"
|
||||
//# muxenab: 0x1 for UART enable, 0x2 for GPIOs, 0x8 for JTAG, 0x10 for HW OOB
|
||||
"muxenab=0x11" "\x00"
|
||||
//# CLDO PWM voltage settings - 0x4 - 1.1 volt
|
||||
//#cldo_pwm=0x4 "\x00"
|
||||
|
||||
//#VCO freq 326.4MHz
|
||||
"spurconfig=0x3" "\x00"
|
||||
"\x00\x00";
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#else /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
|
||||
|
||||
#error Wi-Fi NVRAM image included twice
|
||||
|
||||
#endif /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
|
||||
|
|
@ -15,7 +15,9 @@
|
|||
*/
|
||||
|
||||
/** @file
|
||||
* NVRAM variables taken from BCM943438WLPTH nvram file (2.4 GHz, 20 MHz BW mode)
|
||||
* NVRAM file for CY8CKIT-062-WiFi-BT (PSoC6 WiFi-BT Pioneer Kit) using
|
||||
* Murata's Type 1DX module - Copied from bcm94343wwcd1.txt on 08/04/2019
|
||||
* # 2.4 GHz, 20 MHz BW mode; No Antenna Diversity
|
||||
*/
|
||||
|
||||
#ifndef INCLUDED_NVRAM_IMAGE_H_
|
||||
|
@ -37,33 +39,34 @@ extern "C" {
|
|||
static const char wifi_nvram_image[] =
|
||||
// # The following parameter values are just placeholders, need to be updated.
|
||||
"manfid=0x2d0" "\x00"
|
||||
"prodid=0x0726" "\x00"
|
||||
"prodid=0x086c" "\x00"
|
||||
"vendid=0x14e4" "\x00"
|
||||
"devid=0x43e2" "\x00"
|
||||
"boardtype=0x0726" "\x00"
|
||||
"boardrev=0x1101" "\x00"
|
||||
"boardtype=0x086c" "\x00"
|
||||
"boardrev=0x1110" "\x00"
|
||||
"boardnum=22" "\x00"
|
||||
"xtalfreq=37400" "\x00"
|
||||
NVRAM_GENERATED_MAC_ADDRESS "\x00"
|
||||
"sromrev=11" "\x00"
|
||||
"boardflags=0x00404201" "\x00"
|
||||
"boardflags3=0x08000000" "\x00"
|
||||
NVRAM_GENERATED_MAC_ADDRESS "\x00"
|
||||
"nocrc=1" "\x00"
|
||||
"ag0=255" "\x00"
|
||||
"aa2g=1" "\x00"
|
||||
"ccode=ALL"
|
||||
"\x00"
|
||||
//#Antenna diversity
|
||||
"swdiv_en=1" "\x00"
|
||||
"swdiv_gpio=1" "\x00"
|
||||
"swdiv_gpio_1=2" "\x00"
|
||||
"ccode=ALL" "\x00"
|
||||
|
||||
//#Antenna diversity
|
||||
//#"swdiv_en=1" "\x00"
|
||||
//#"swdiv_gpio=2" "\x00"
|
||||
|
||||
"pa0itssit=0x20" "\x00"
|
||||
"extpagain2g=0" "\x00"
|
||||
|
||||
//#PA parameters for 2.4GHz, measured at CHIP OUTPUT
|
||||
"pa2ga0=-168,6905,-799" "\x00"
|
||||
"AvVmid_c0=0x0,0xc8" "\x00"
|
||||
"cckpwroffset0=5" "\x00"
|
||||
|
||||
//# PPR params
|
||||
"maxp2ga0=84" "\x00"
|
||||
"txpwrbckof=6" "\x00"
|
||||
|
@ -71,27 +74,33 @@ static const char wifi_nvram_image[] =
|
|||
"legofdmbw202gpo=0x66111111" "\x00"
|
||||
"mcsbw202gpo=0x77711111" "\x00"
|
||||
"propbw202gpo=0xdd" "\x00"
|
||||
|
||||
//# OFDM IIR :
|
||||
"ofdmdigfilttype=18" "\x00"
|
||||
"ofdmdigfilttypebe=18" "\x00"
|
||||
|
||||
//# PAPD mode:
|
||||
"papdmode=1" "\x00"
|
||||
"papdvalidtest=1" "\x00"
|
||||
"pacalidx2g=32" "\x00"
|
||||
"papdepsoffset=-36" "\x00"
|
||||
"papdendidx=61" "\x00"
|
||||
|
||||
//# LTECX flags
|
||||
// "ltecxmux=1" "\x00"
|
||||
//"ltecxpadnum=0x02030401" "\x00"
|
||||
// "ltecxfnsel=0x3003" "\x00"
|
||||
// "ltecxgcigpio=0x3012" "\x00"
|
||||
//#"ltecxmux=1" "\x00"
|
||||
//#"ltecxpadnum=0x02030401" "\x00"
|
||||
//#"ltecxfnsel=0x3003" "\x00"
|
||||
//#"ltecxgcigpio=0x3012" "\x00"
|
||||
|
||||
//#il0macaddr=00:90:4c:c5:12:38
|
||||
"wl0id=0x431b" "\x00"
|
||||
|
||||
"deadman_to=0xffffffff" "\x00"
|
||||
//# muxenab: 0x1 for UART enable, 0x2 for GPIOs, 0x8 for JTAG, 0x10 for HW OOB
|
||||
"muxenab=0x11" "\x00"
|
||||
//# CLDO PWM voltage settings - 0x4 - 1.1 volt
|
||||
//#cldo_pwm=0x4 "\x00"
|
||||
|
||||
//#VCO freq 326.4MHz
|
||||
"spurconfig=0x3" "\x00"
|
||||
"\x00\x00";
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
/*
|
||||
* Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved
|
||||
* SPDX-License-Identifier: LicenseRef-PBL
|
||||
*
|
||||
* This file and the related binary are licensed under the
|
||||
* Permissive Binary License, Version 1.0 (the "License");
|
||||
* you may not use these files except in compliance with the License.
|
||||
*
|
||||
* You may obtain a copy of the License here:
|
||||
* LICENSE-permissive-binary-license-1.0.txt and at
|
||||
* https://www.mbed.com/licenses/PBL-1.0
|
||||
*
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/** @file
|
||||
* NVRAM file for CY8CKIT-062-WiFi-BT (PSoC6 WiFi-BT Pioneer Kit) using
|
||||
* Murata's Type 1DX module - Copied from bcm94343wwcd1.txt on 08/04/2019
|
||||
* # 2.4 GHz, 20 MHz BW mode; No Antenna Diversity
|
||||
*/
|
||||
|
||||
#ifndef INCLUDED_NVRAM_IMAGE_H_
|
||||
#define INCLUDED_NVRAM_IMAGE_H_
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include "generated_mac_address.txt"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Character array of NVRAM image
|
||||
*/
|
||||
|
||||
static const char wifi_nvram_image[] =
|
||||
// # The following parameter values are just placeholders, need to be updated.
|
||||
"manfid=0x2d0" "\x00"
|
||||
"prodid=0x086c" "\x00"
|
||||
"vendid=0x14e4" "\x00"
|
||||
"devid=0x43e2" "\x00"
|
||||
"boardtype=0x086c" "\x00"
|
||||
"boardrev=0x1110" "\x00"
|
||||
"boardnum=22" "\x00"
|
||||
"xtalfreq=37400" "\x00"
|
||||
NVRAM_GENERATED_MAC_ADDRESS "\x00"
|
||||
"sromrev=11" "\x00"
|
||||
"boardflags=0x00404201" "\x00"
|
||||
"boardflags3=0x08000000" "\x00"
|
||||
"nocrc=1" "\x00"
|
||||
"ag0=255" "\x00"
|
||||
"aa2g=1" "\x00"
|
||||
"ccode=ALL" "\x00"
|
||||
|
||||
//#Antenna diversity
|
||||
//#"swdiv_en=1" "\x00"
|
||||
//#"swdiv_gpio=2" "\x00"
|
||||
|
||||
"pa0itssit=0x20" "\x00"
|
||||
"extpagain2g=0" "\x00"
|
||||
|
||||
//#PA parameters for 2.4GHz, measured at CHIP OUTPUT
|
||||
"pa2ga0=-168,6905,-799" "\x00"
|
||||
"AvVmid_c0=0x0,0xc8" "\x00"
|
||||
"cckpwroffset0=5" "\x00"
|
||||
|
||||
//# PPR params
|
||||
"maxp2ga0=84" "\x00"
|
||||
"txpwrbckof=6" "\x00"
|
||||
"cckbw202gpo=0" "\x00"
|
||||
"legofdmbw202gpo=0x66111111" "\x00"
|
||||
"mcsbw202gpo=0x77711111" "\x00"
|
||||
"propbw202gpo=0xdd" "\x00"
|
||||
|
||||
//# OFDM IIR :
|
||||
"ofdmdigfilttype=18" "\x00"
|
||||
"ofdmdigfilttypebe=18" "\x00"
|
||||
|
||||
//# PAPD mode:
|
||||
"papdmode=1" "\x00"
|
||||
"papdvalidtest=1" "\x00"
|
||||
"pacalidx2g=32" "\x00"
|
||||
"papdepsoffset=-36" "\x00"
|
||||
"papdendidx=61" "\x00"
|
||||
|
||||
//# LTECX flags
|
||||
//#"ltecxmux=1" "\x00"
|
||||
//#"ltecxpadnum=0x02030401" "\x00"
|
||||
//#"ltecxfnsel=0x3003" "\x00"
|
||||
//#"ltecxgcigpio=0x3012" "\x00"
|
||||
|
||||
//#il0macaddr=00:90:4c:c5:12:38
|
||||
"wl0id=0x431b" "\x00"
|
||||
|
||||
"deadman_to=0xffffffff" "\x00"
|
||||
//# muxenab: 0x1 for UART enable, 0x2 for GPIOs, 0x8 for JTAG, 0x10 for HW OOB
|
||||
"muxenab=0x11" "\x00"
|
||||
//# CLDO PWM voltage settings - 0x4 - 1.1 volt
|
||||
//#cldo_pwm=0x4 "\x00"
|
||||
|
||||
//#VCO freq 326.4MHz
|
||||
"spurconfig=0x3" "\x00"
|
||||
"\x00\x00";
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#else /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
|
||||
|
||||
#error Wi-Fi NVRAM image included twice
|
||||
|
||||
#endif /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
|
||||
|
|
@ -15,7 +15,9 @@
|
|||
*/
|
||||
|
||||
/** @file
|
||||
* NVRAM variables taken from BCM943438WLPTH nvram file (2.4 GHz, 20 MHz BW mode)
|
||||
* NVRAM file for CY8CKIT-062-WiFi-BT (PSoC6 WiFi-BT Pioneer Kit) using
|
||||
* Murata's Type 1DX module - Copied from bcm94343wwcd1.txt on 08/04/2019
|
||||
* # 2.4 GHz, 20 MHz BW mode; No Antenna Diversity
|
||||
*/
|
||||
|
||||
#ifndef INCLUDED_NVRAM_IMAGE_H_
|
||||
|
@ -37,33 +39,34 @@ extern "C" {
|
|||
static const char wifi_nvram_image[] =
|
||||
// # The following parameter values are just placeholders, need to be updated.
|
||||
"manfid=0x2d0" "\x00"
|
||||
"prodid=0x0726" "\x00"
|
||||
"prodid=0x086c" "\x00"
|
||||
"vendid=0x14e4" "\x00"
|
||||
"devid=0x43e2" "\x00"
|
||||
"boardtype=0x0726" "\x00"
|
||||
"boardrev=0x1101" "\x00"
|
||||
"boardtype=0x086c" "\x00"
|
||||
"boardrev=0x1110" "\x00"
|
||||
"boardnum=22" "\x00"
|
||||
"xtalfreq=37400" "\x00"
|
||||
NVRAM_GENERATED_MAC_ADDRESS "\x00"
|
||||
"sromrev=11" "\x00"
|
||||
"boardflags=0x00404201" "\x00"
|
||||
"boardflags3=0x08000000" "\x00"
|
||||
NVRAM_GENERATED_MAC_ADDRESS "\x00"
|
||||
"nocrc=1" "\x00"
|
||||
"ag0=255" "\x00"
|
||||
"aa2g=1" "\x00"
|
||||
"ccode=ALL"
|
||||
"\x00"
|
||||
//#Antenna diversity
|
||||
"swdiv_en=1" "\x00"
|
||||
"swdiv_gpio=1" "\x00"
|
||||
"swdiv_gpio_1=2" "\x00"
|
||||
"ccode=ALL" "\x00"
|
||||
|
||||
//#Antenna diversity
|
||||
//#"swdiv_en=1" "\x00"
|
||||
//#"swdiv_gpio=2" "\x00"
|
||||
|
||||
"pa0itssit=0x20" "\x00"
|
||||
"extpagain2g=0" "\x00"
|
||||
|
||||
//#PA parameters for 2.4GHz, measured at CHIP OUTPUT
|
||||
"pa2ga0=-168,6905,-799" "\x00"
|
||||
"AvVmid_c0=0x0,0xc8" "\x00"
|
||||
"cckpwroffset0=5" "\x00"
|
||||
|
||||
//# PPR params
|
||||
"maxp2ga0=84" "\x00"
|
||||
"txpwrbckof=6" "\x00"
|
||||
|
@ -71,27 +74,33 @@ static const char wifi_nvram_image[] =
|
|||
"legofdmbw202gpo=0x66111111" "\x00"
|
||||
"mcsbw202gpo=0x77711111" "\x00"
|
||||
"propbw202gpo=0xdd" "\x00"
|
||||
|
||||
//# OFDM IIR :
|
||||
"ofdmdigfilttype=18" "\x00"
|
||||
"ofdmdigfilttypebe=18" "\x00"
|
||||
|
||||
//# PAPD mode:
|
||||
"papdmode=1" "\x00"
|
||||
"papdvalidtest=1" "\x00"
|
||||
"pacalidx2g=32" "\x00"
|
||||
"papdepsoffset=-36" "\x00"
|
||||
"papdendidx=61" "\x00"
|
||||
|
||||
//# LTECX flags
|
||||
// "ltecxmux=1" "\x00"
|
||||
//"ltecxpadnum=0x02030401" "\x00"
|
||||
// "ltecxfnsel=0x3003" "\x00"
|
||||
// "ltecxgcigpio=0x3012" "\x00"
|
||||
//#"ltecxmux=1" "\x00"
|
||||
//#"ltecxpadnum=0x02030401" "\x00"
|
||||
//#"ltecxfnsel=0x3003" "\x00"
|
||||
//#"ltecxgcigpio=0x3012" "\x00"
|
||||
|
||||
//#il0macaddr=00:90:4c:c5:12:38
|
||||
"wl0id=0x431b" "\x00"
|
||||
|
||||
"deadman_to=0xffffffff" "\x00"
|
||||
//# muxenab: 0x1 for UART enable, 0x2 for GPIOs, 0x8 for JTAG, 0x10 for HW OOB
|
||||
"muxenab=0x11" "\x00"
|
||||
//# CLDO PWM voltage settings - 0x4 - 1.1 volt
|
||||
//#cldo_pwm=0x4 "\x00"
|
||||
|
||||
//#VCO freq 326.4MHz
|
||||
"spurconfig=0x3" "\x00"
|
||||
"\x00\x00";
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
/*
|
||||
* Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved
|
||||
* SPDX-License-Identifier: LicenseRef-PBL
|
||||
*
|
||||
* This file and the related binary are licensed under the
|
||||
* Permissive Binary License, Version 1.0 (the "License");
|
||||
* you may not use these files except in compliance with the License.
|
||||
*
|
||||
* You may obtain a copy of the License here:
|
||||
* LICENSE-permissive-binary-license-1.0.txt and at
|
||||
* https://www.mbed.com/licenses/PBL-1.0
|
||||
*
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/** @file
|
||||
* NVRAM file for CY8CKIT-062-WiFi-BT (PSoC6 WiFi-BT Pioneer Kit) using
|
||||
* Murata's Type 1DX module - Copied from bcm94343wwcd1.txt on 08/04/2019
|
||||
* # 2.4 GHz, 20 MHz BW mode; No Antenna Diversity
|
||||
*/
|
||||
|
||||
#ifndef INCLUDED_NVRAM_IMAGE_H_
|
||||
#define INCLUDED_NVRAM_IMAGE_H_
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include "generated_mac_address.txt"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Character array of NVRAM image
|
||||
*/
|
||||
|
||||
static const char wifi_nvram_image[] =
|
||||
// # The following parameter values are just placeholders, need to be updated.
|
||||
"manfid=0x2d0" "\x00"
|
||||
"prodid=0x086c" "\x00"
|
||||
"vendid=0x14e4" "\x00"
|
||||
"devid=0x43e2" "\x00"
|
||||
"boardtype=0x086c" "\x00"
|
||||
"boardrev=0x1110" "\x00"
|
||||
"boardnum=22" "\x00"
|
||||
"xtalfreq=37400" "\x00"
|
||||
NVRAM_GENERATED_MAC_ADDRESS "\x00"
|
||||
"sromrev=11" "\x00"
|
||||
"boardflags=0x00404201" "\x00"
|
||||
"boardflags3=0x08000000" "\x00"
|
||||
"nocrc=1" "\x00"
|
||||
"ag0=255" "\x00"
|
||||
"aa2g=1" "\x00"
|
||||
"ccode=ALL" "\x00"
|
||||
|
||||
//#Antenna diversity
|
||||
//#"swdiv_en=1" "\x00"
|
||||
//#"swdiv_gpio=2" "\x00"
|
||||
|
||||
"pa0itssit=0x20" "\x00"
|
||||
"extpagain2g=0" "\x00"
|
||||
|
||||
//#PA parameters for 2.4GHz, measured at CHIP OUTPUT
|
||||
"pa2ga0=-168,6905,-799" "\x00"
|
||||
"AvVmid_c0=0x0,0xc8" "\x00"
|
||||
"cckpwroffset0=5" "\x00"
|
||||
|
||||
//# PPR params
|
||||
"maxp2ga0=84" "\x00"
|
||||
"txpwrbckof=6" "\x00"
|
||||
"cckbw202gpo=0" "\x00"
|
||||
"legofdmbw202gpo=0x66111111" "\x00"
|
||||
"mcsbw202gpo=0x77711111" "\x00"
|
||||
"propbw202gpo=0xdd" "\x00"
|
||||
|
||||
//# OFDM IIR :
|
||||
"ofdmdigfilttype=18" "\x00"
|
||||
"ofdmdigfilttypebe=18" "\x00"
|
||||
|
||||
//# PAPD mode:
|
||||
"papdmode=1" "\x00"
|
||||
"papdvalidtest=1" "\x00"
|
||||
"pacalidx2g=32" "\x00"
|
||||
"papdepsoffset=-36" "\x00"
|
||||
"papdendidx=61" "\x00"
|
||||
|
||||
//# LTECX flags
|
||||
//#"ltecxmux=1" "\x00"
|
||||
//#"ltecxpadnum=0x02030401" "\x00"
|
||||
//#"ltecxfnsel=0x3003" "\x00"
|
||||
//#"ltecxgcigpio=0x3012" "\x00"
|
||||
|
||||
//#il0macaddr=00:90:4c:c5:12:38
|
||||
"wl0id=0x431b" "\x00"
|
||||
|
||||
"deadman_to=0xffffffff" "\x00"
|
||||
//# muxenab: 0x1 for UART enable, 0x2 for GPIOs, 0x8 for JTAG, 0x10 for HW OOB
|
||||
"muxenab=0x11" "\x00"
|
||||
//# CLDO PWM voltage settings - 0x4 - 1.1 volt
|
||||
//#cldo_pwm=0x4 "\x00"
|
||||
|
||||
//#VCO freq 326.4MHz
|
||||
"spurconfig=0x3" "\x00"
|
||||
"\x00\x00";
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#else /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
|
||||
|
||||
#error Wi-Fi NVRAM image included twice
|
||||
|
||||
#endif /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
|
||||
|
|
@ -0,0 +1,118 @@
|
|||
/*
|
||||
* Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved
|
||||
* SPDX-License-Identifier: LicenseRef-PBL
|
||||
*
|
||||
* This file and the related binary are licensed under the
|
||||
* Permissive Binary License, Version 1.0 (the "License");
|
||||
* you may not use these files except in compliance with the License.
|
||||
*
|
||||
* You may obtain a copy of the License here:
|
||||
* LICENSE-permissive-binary-license-1.0.txt and at
|
||||
* https://www.mbed.com/licenses/PBL-1.0
|
||||
*
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/** @file
|
||||
* NVRAM file for CY8CKIT-062-WiFi-BT (PSoC6 WiFi-BT Pioneer Kit) using
|
||||
* Murata's Type 1DX module - Copied from bcm94343wwcd1.txt on 08/04/2019
|
||||
* # 2.4 GHz, 20 MHz BW mode; No Antenna Diversity
|
||||
*/
|
||||
|
||||
#ifndef INCLUDED_NVRAM_IMAGE_H_
|
||||
#define INCLUDED_NVRAM_IMAGE_H_
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include "generated_mac_address.txt"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Character array of NVRAM image
|
||||
*/
|
||||
|
||||
static const char wifi_nvram_image[] =
|
||||
// # The following parameter values are just placeholders, need to be updated.
|
||||
"manfid=0x2d0" "\x00"
|
||||
"prodid=0x086c" "\x00"
|
||||
"vendid=0x14e4" "\x00"
|
||||
"devid=0x43e2" "\x00"
|
||||
"boardtype=0x086c" "\x00"
|
||||
"boardrev=0x1110" "\x00"
|
||||
"boardnum=22" "\x00"
|
||||
"xtalfreq=37400" "\x00"
|
||||
NVRAM_GENERATED_MAC_ADDRESS "\x00"
|
||||
"sromrev=11" "\x00"
|
||||
"boardflags=0x00404201" "\x00"
|
||||
"boardflags3=0x08000000" "\x00"
|
||||
"nocrc=1" "\x00"
|
||||
"ag0=255" "\x00"
|
||||
"aa2g=1" "\x00"
|
||||
"ccode=ALL" "\x00"
|
||||
|
||||
//#Antenna diversity
|
||||
//#"swdiv_en=1" "\x00"
|
||||
//#"swdiv_gpio=2" "\x00"
|
||||
|
||||
"pa0itssit=0x20" "\x00"
|
||||
"extpagain2g=0" "\x00"
|
||||
|
||||
//#PA parameters for 2.4GHz, measured at CHIP OUTPUT
|
||||
"pa2ga0=-168,6905,-799" "\x00"
|
||||
"AvVmid_c0=0x0,0xc8" "\x00"
|
||||
"cckpwroffset0=5" "\x00"
|
||||
|
||||
//# PPR params
|
||||
"maxp2ga0=84" "\x00"
|
||||
"txpwrbckof=6" "\x00"
|
||||
"cckbw202gpo=0" "\x00"
|
||||
"legofdmbw202gpo=0x66111111" "\x00"
|
||||
"mcsbw202gpo=0x77711111" "\x00"
|
||||
"propbw202gpo=0xdd" "\x00"
|
||||
|
||||
//# OFDM IIR :
|
||||
"ofdmdigfilttype=18" "\x00"
|
||||
"ofdmdigfilttypebe=18" "\x00"
|
||||
|
||||
//# PAPD mode:
|
||||
"papdmode=1" "\x00"
|
||||
"papdvalidtest=1" "\x00"
|
||||
"pacalidx2g=32" "\x00"
|
||||
"papdepsoffset=-36" "\x00"
|
||||
"papdendidx=61" "\x00"
|
||||
|
||||
//# LTECX flags
|
||||
//#"ltecxmux=1" "\x00"
|
||||
//#"ltecxpadnum=0x02030401" "\x00"
|
||||
//#"ltecxfnsel=0x3003" "\x00"
|
||||
//#"ltecxgcigpio=0x3012" "\x00"
|
||||
|
||||
//#il0macaddr=00:90:4c:c5:12:38
|
||||
"wl0id=0x431b" "\x00"
|
||||
|
||||
"deadman_to=0xffffffff" "\x00"
|
||||
//# muxenab: 0x1 for UART enable, 0x2 for GPIOs, 0x8 for JTAG, 0x10 for HW OOB
|
||||
"muxenab=0x11" "\x00"
|
||||
//# CLDO PWM voltage settings - 0x4 - 1.1 volt
|
||||
//#cldo_pwm=0x4 "\x00"
|
||||
|
||||
//#VCO freq 326.4MHz
|
||||
"spurconfig=0x3" "\x00"
|
||||
"\x00\x00";
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#else /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
|
||||
|
||||
#error Wi-Fi NVRAM image included twice
|
||||
|
||||
#endif /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
|
||||
|
|
@ -1,5 +1,21 @@
|
|||
/*
|
||||
* $ Copyright Cypress Semiconductor $
|
||||
* Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved
|
||||
* SPDX-License-Identifier: LicenseRef-PBL
|
||||
*
|
||||
* This file and the related binary are licensed under the
|
||||
* Permissive Binary License, Version 1.0 (the "License");
|
||||
* you may not use these files except in compliance with the License.
|
||||
*
|
||||
* You may obtain a copy of the License here:
|
||||
* LICENSE-permissive-binary-license-1.0.txt and at
|
||||
* https://www.mbed.com/licenses/PBL-1.0
|
||||
*
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/** @file
|
||||
* NVRAM file for CY8CMOD-062S2-43012
|
||||
*/
|
||||
|
||||
#ifndef INCLUDED_NVRAM_IMAGE_H_
|
||||
|
@ -19,7 +35,7 @@ extern "C" {
|
|||
* cyw943012csp_ty1LV.TXT
|
||||
*/
|
||||
static const char wifi_nvram_image[] =
|
||||
"NVRAMRev=$Rev: 721914 $" "\x00"
|
||||
"NVRAMRev=$Rev:722123$" "\x00"
|
||||
"sromrev=11" "\x00"
|
||||
"cckdigfilttype=4" "\x00"
|
||||
"cckpwroffset0=2" "\x00"
|
||||
|
@ -42,7 +58,7 @@ static const char wifi_nvram_image[] =
|
|||
"extpagain5g=2" "\x00"
|
||||
"ccode=0" "\x00"
|
||||
"regrev=0" "\x00"
|
||||
"antswitch = 0" "\x00"
|
||||
"antswitch=0" "\x00"
|
||||
"rxgains2gelnagaina0=0" "\x00"
|
||||
"rxgains2gtrisoa0=15" "\x00"
|
||||
"rxgains2gtrelnabypa0=0" "\x00"
|
||||
|
@ -72,7 +88,7 @@ static const char wifi_nvram_image[] =
|
|||
"swctrlmap_2g=0x10101010,0x20202020,0x10101010,0x442020,0x3ff" "\x00"
|
||||
"swctrlmapext_2g=0x01000100,0x01000100,0x01000100,0x000000,0x301" "\x00"
|
||||
"swctrlmap_5g=0x80808080,0x00000000,0x80808080,0x442020,0x381" "\x00"
|
||||
"swctrlmapext_5g=0x01000100,0x01000100,0x00000000,0x000100,0x303" "\x00"
|
||||
"swctrlmapext_5g=0x01000100,0x01000100,0x00000000,0x000000,0x303" "\x00"
|
||||
"ulpnap=0" "\x00"
|
||||
"ulpadc=1" "\x00"
|
||||
"ssagc_en=0" "\x00"
|
||||
|
@ -90,11 +106,12 @@ static const char wifi_nvram_image[] =
|
|||
"mcsbw202gpo=0xCC864420" "\x00"
|
||||
"maxp5ga0=70,70,70,70" "\x00"
|
||||
"mcsbw205glpo=0xCC864220" "\x00"
|
||||
"mmcsbw205gmpo=0xCC864220" "\x00"
|
||||
"mcsbw205gmpo=0xCC864220" "\x00"
|
||||
"mcsbw205ghpo=0xCC864220" "\x00"
|
||||
"femctrlwar=0" "\x00"
|
||||
"use5gpllfor2g=1" "\x00"
|
||||
"pt5db_gaintbl=0" "\x00"
|
||||
"muxenab=0x01" "\x00"
|
||||
"txwbpapden=1" "\x00"
|
||||
"wb_rxattn=0x0303" "\x00"
|
||||
"wb_txattn=0x0203" "\x00"
|
||||
|
@ -121,17 +138,18 @@ static const char wifi_nvram_image[] =
|
|||
"lpo_select=4" "\x00"
|
||||
"paprrmcsgamma2g=450,500,550,600,675,950,950,950,950,950,950,950" "\x00"
|
||||
"paprrmcsgamma5g20=450,500,550,600,800,950,1100,1100,1100,1100,1100,1100" "\x00"
|
||||
"swdiv_en=0" "\x00"
|
||||
"swdiv_gpio=0" "\x00"
|
||||
"swdiv_swctrl_en=2" "\x00"
|
||||
"swdiv_swctrl_ant0=0" "\x00"
|
||||
"swdiv_swctrl_ant1=1" "\x00"
|
||||
"swdiv_antmap2g_main=1" "\x00"
|
||||
"swdiv_antmap5g_main=1" "\x00"
|
||||
"swdiv_snrlim=10000" "\x00"
|
||||
"swdiv_thresh=3000" "\x00"
|
||||
"swdiv_snrthresh=24" "\x00"
|
||||
"swdiv_en=0" "\x00"
|
||||
"swdiv_gpio=0" "\x00"
|
||||
"swdiv_swctrl_en=2" "\x00"
|
||||
"swdiv_swctrl_ant0=0" "\x00"
|
||||
"swdiv_swctrl_ant1=1" "\x00"
|
||||
"swdiv_antmap2g_main=1" "\x00"
|
||||
"swdiv_antmap5g_main=1" "\x00"
|
||||
"swdiv_snrlim=10000" "\x00"
|
||||
"swdiv_thresh=3000" "\x00"
|
||||
"swdiv_snrthresh=24" "\x00"
|
||||
"\x00\x00";
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /*extern "C" */
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
/*
|
||||
* Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved
|
||||
* SPDX-License-Identifier: LicenseRef-PBL
|
||||
*
|
||||
* This file and the related binary are licensed under the
|
||||
* Permissive Binary License, Version 1.0 (the "License");
|
||||
* you may not use these files except in compliance with the License.
|
||||
*
|
||||
* You may obtain a copy of the License here:
|
||||
* LICENSE-permissive-binary-license-1.0.txt and at
|
||||
* https://www.mbed.com/licenses/PBL-1.0
|
||||
*
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/** @file
|
||||
* # NVRAM file for CY8CMOD-062S3-4343W (PSoC6 (512K) with CYW4343W WiFi-BT - Murata's
|
||||
* Type 1DX Module) - Copied from bcm94343wwcd1.txt on 08/04/2019
|
||||
* # 2.4 GHz, 20 MHz BW mode; With Antenna Diversity
|
||||
*/
|
||||
|
||||
#ifndef INCLUDED_NVRAM_IMAGE_H_
|
||||
#define INCLUDED_NVRAM_IMAGE_H_
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include "generated_mac_address.txt"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Character array of NVRAM image
|
||||
*/
|
||||
|
||||
static const char wifi_nvram_image[] =
|
||||
// # The following parameter values are just placeholders, need to be updated.
|
||||
"manfid=0x2d0" "\x00"
|
||||
"prodid=0x086c" "\x00"
|
||||
"vendid=0x14e4" "\x00"
|
||||
"devid=0x43e2" "\x00"
|
||||
"boardtype=0x086c" "\x00"
|
||||
"boardrev=0x1101" "\x00"
|
||||
"boardnum=22" "\x00"
|
||||
NVRAM_GENERATED_MAC_ADDRESS "\x00"
|
||||
"sromrev=11" "\x00"
|
||||
"boardflags=0x00404201" "\x00"
|
||||
"boardflags3=0x08000000" "\x00"
|
||||
"xtalfreq=37400" "\x00"
|
||||
"nocrc=1" "\x00"
|
||||
"ag0=255" "\x00"
|
||||
"aa2g=1" "\x00"
|
||||
"ccode=ALL" "\x00"
|
||||
|
||||
//#Antenna diversity
|
||||
//#"swdiv_en=1" "\x00"
|
||||
//#"swdiv_gpio=2" "\x00"
|
||||
|
||||
"pa0itssit=0x20" "\x00"
|
||||
"extpagain2g=0" "\x00"
|
||||
|
||||
//#PA parameters for 2.4GHz, measured at CHIP OUTPUT
|
||||
"pa2ga0=-168,6905,-799" "\x00"
|
||||
"AvVmid_c0=0x0,0xc8" "\x00"
|
||||
"cckpwroffset0=5" "\x00"
|
||||
|
||||
//# PPR params
|
||||
"maxp2ga0=84" "\x00"
|
||||
"txpwrbckof=6" "\x00"
|
||||
"cckbw202gpo=0" "\x00"
|
||||
"legofdmbw202gpo=0x66111111" "\x00"
|
||||
"mcsbw202gpo=0x77711111" "\x00"
|
||||
"propbw202gpo=0xdd" "\x00"
|
||||
|
||||
//# OFDM IIR :
|
||||
"ofdmdigfilttype=18" "\x00"
|
||||
"ofdmdigfilttypebe=18" "\x00"
|
||||
|
||||
//# PAPD mode:
|
||||
"papdmode=1" "\x00"
|
||||
"papdvalidtest=1" "\x00"
|
||||
"pacalidx2g=32" "\x00"
|
||||
"papdepsoffset=-36" "\x00"
|
||||
"papdendidx=61" "\x00"
|
||||
|
||||
//# LTECX flags
|
||||
//#"ltecxmux=1" "\x00"
|
||||
//#"ltecxpadnum=0x02030401" "\x00"
|
||||
//#"ltecxfnsel=0x3003" "\x00"
|
||||
//#"ltecxgcigpio=0x3012" "\x00"
|
||||
|
||||
//#il0macaddr=00:90:4c:c5:12:38
|
||||
"wl0id=0x431b" "\x00"
|
||||
|
||||
"deadman_to=0xffffffff" "\x00"
|
||||
//# muxenab: 0x1 for UART enable, 0x2 for GPIOs, 0x8 for JTAG, 0x10 for HW OOB
|
||||
"muxenab=0x11" "\x00"
|
||||
//# CLDO PWM voltage settings - 0x4 - 1.1 volt
|
||||
//#cldo_pwm=0x4 "\x00"
|
||||
|
||||
//#VCO freq 326.4MHz
|
||||
"spurconfig=0x3" "\x00"
|
||||
"\x00\x00";
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#else /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
|
||||
|
||||
#error Wi-Fi NVRAM image included twice
|
||||
|
||||
#endif /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
|
||||
|
|
@ -15,7 +15,9 @@
|
|||
*/
|
||||
|
||||
/** @file
|
||||
* NVRAM variables taken from BCM943438WLPTH nvram file (2.4 GHz, 20 MHz BW mode)
|
||||
* NVRAM file for CY8CKIT-062-WiFi-BT (PSoC6 WiFi-BT Pioneer Kit) using
|
||||
* Murata's Type 1DX module - Copied from bcm94343wwcd1.txt on 08/04/2019
|
||||
* # 2.4 GHz, 20 MHz BW mode; No Antenna Diversity
|
||||
*/
|
||||
|
||||
#ifndef INCLUDED_NVRAM_IMAGE_H_
|
||||
|
@ -37,33 +39,34 @@ extern "C" {
|
|||
static const char wifi_nvram_image[] =
|
||||
// # The following parameter values are just placeholders, need to be updated.
|
||||
"manfid=0x2d0" "\x00"
|
||||
"prodid=0x0726" "\x00"
|
||||
"prodid=0x086c" "\x00"
|
||||
"vendid=0x14e4" "\x00"
|
||||
"devid=0x43e2" "\x00"
|
||||
"boardtype=0x0726" "\x00"
|
||||
"boardrev=0x1101" "\x00"
|
||||
"boardtype=0x086c" "\x00"
|
||||
"boardrev=0x1110" "\x00"
|
||||
"boardnum=22" "\x00"
|
||||
"xtalfreq=37400" "\x00"
|
||||
NVRAM_GENERATED_MAC_ADDRESS "\x00"
|
||||
"sromrev=11" "\x00"
|
||||
"boardflags=0x00404201" "\x00"
|
||||
"boardflags3=0x08000000" "\x00"
|
||||
NVRAM_GENERATED_MAC_ADDRESS "\x00"
|
||||
"nocrc=1" "\x00"
|
||||
"ag0=255" "\x00"
|
||||
"aa2g=1" "\x00"
|
||||
"ccode=ALL"
|
||||
"\x00"
|
||||
//#Antenna diversity
|
||||
"swdiv_en=1" "\x00"
|
||||
"swdiv_gpio=1" "\x00"
|
||||
"swdiv_gpio_1=2" "\x00"
|
||||
"ccode=ALL" "\x00"
|
||||
|
||||
//#Antenna diversity
|
||||
//#"swdiv_en=1" "\x00"
|
||||
//#"swdiv_gpio=2" "\x00"
|
||||
|
||||
"pa0itssit=0x20" "\x00"
|
||||
"extpagain2g=0" "\x00"
|
||||
|
||||
//#PA parameters for 2.4GHz, measured at CHIP OUTPUT
|
||||
"pa2ga0=-168,6905,-799" "\x00"
|
||||
"AvVmid_c0=0x0,0xc8" "\x00"
|
||||
"cckpwroffset0=5" "\x00"
|
||||
|
||||
//# PPR params
|
||||
"maxp2ga0=84" "\x00"
|
||||
"txpwrbckof=6" "\x00"
|
||||
|
@ -71,27 +74,33 @@ static const char wifi_nvram_image[] =
|
|||
"legofdmbw202gpo=0x66111111" "\x00"
|
||||
"mcsbw202gpo=0x77711111" "\x00"
|
||||
"propbw202gpo=0xdd" "\x00"
|
||||
|
||||
//# OFDM IIR :
|
||||
"ofdmdigfilttype=18" "\x00"
|
||||
"ofdmdigfilttypebe=18" "\x00"
|
||||
|
||||
//# PAPD mode:
|
||||
"papdmode=1" "\x00"
|
||||
"papdvalidtest=1" "\x00"
|
||||
"pacalidx2g=32" "\x00"
|
||||
"papdepsoffset=-36" "\x00"
|
||||
"papdendidx=61" "\x00"
|
||||
|
||||
//# LTECX flags
|
||||
// "ltecxmux=1" "\x00"
|
||||
//"ltecxpadnum=0x02030401" "\x00"
|
||||
// "ltecxfnsel=0x3003" "\x00"
|
||||
// "ltecxgcigpio=0x3012" "\x00"
|
||||
//#"ltecxmux=1" "\x00"
|
||||
//#"ltecxpadnum=0x02030401" "\x00"
|
||||
//#"ltecxfnsel=0x3003" "\x00"
|
||||
//#"ltecxgcigpio=0x3012" "\x00"
|
||||
|
||||
//#il0macaddr=00:90:4c:c5:12:38
|
||||
"wl0id=0x431b" "\x00"
|
||||
|
||||
"deadman_to=0xffffffff" "\x00"
|
||||
//# muxenab: 0x1 for UART enable, 0x2 for GPIOs, 0x8 for JTAG, 0x10 for HW OOB
|
||||
"muxenab=0x11" "\x00"
|
||||
//# CLDO PWM voltage settings - 0x4 - 1.1 volt
|
||||
//#cldo_pwm=0x4 "\x00"
|
||||
|
||||
//#VCO freq 326.4MHz
|
||||
"spurconfig=0x3" "\x00"
|
||||
"\x00\x00";
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
/*
|
||||
* Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved
|
||||
* SPDX-License-Identifier: LicenseRef-PBL
|
||||
*
|
||||
* This file and the related binary are licensed under the
|
||||
* Permissive Binary License, Version 1.0 (the "License");
|
||||
* you may not use these files except in compliance with the License.
|
||||
*
|
||||
* You may obtain a copy of the License here:
|
||||
* LICENSE-permissive-binary-license-1.0.txt and at
|
||||
* https://www.mbed.com/licenses/PBL-1.0
|
||||
*
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/** @file
|
||||
* # NVRAM file for CY8CMOD-062-4343W (PSoC6 with CYW4343W WiFi-BT - Murata's
|
||||
* Type 1DX Module) - Copied from bcm94343wwcd1.txt on 08/04/2019
|
||||
* # 2.4 GHz, 20 MHz BW mode; No Antenna Diversity
|
||||
*/
|
||||
|
||||
#ifndef INCLUDED_NVRAM_IMAGE_H_
|
||||
#define INCLUDED_NVRAM_IMAGE_H_
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include "generated_mac_address.txt"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Character array of NVRAM image
|
||||
*/
|
||||
|
||||
static const char wifi_nvram_image[] =
|
||||
// # The following parameter values are just placeholders, need to be updated.
|
||||
"manfid=0x2d0" "\x00"
|
||||
"prodid=0x086c" "\x00"
|
||||
"vendid=0x14e4" "\x00"
|
||||
"devid=0x43e2" "\x00"
|
||||
"boardtype=0x086c" "\x00"
|
||||
"boardrev=0x1101" "\x00"
|
||||
"boardnum=22" "\x00"
|
||||
NVRAM_GENERATED_MAC_ADDRESS "\x00"
|
||||
"sromrev=11" "\x00"
|
||||
"boardflags=0x00404201" "\x00"
|
||||
"boardflags3=0x08000000" "\x00"
|
||||
"xtalfreq=37400" "\x00"
|
||||
"nocrc=1" "\x00"
|
||||
"ag0=255" "\x00"
|
||||
"aa2g=1" "\x00"
|
||||
"ccode=ALL" "\x00"
|
||||
|
||||
//#Antenna diversity
|
||||
//#"swdiv_en=1" "\x00"
|
||||
//#"swdiv_gpio=2" "\x00"
|
||||
|
||||
"pa0itssit=0x20" "\x00"
|
||||
"extpagain2g=0" "\x00"
|
||||
|
||||
//#PA parameters for 2.4GHz, measured at CHIP OUTPUT
|
||||
"pa2ga0=-168,6905,-799" "\x00"
|
||||
"AvVmid_c0=0x0,0xc8" "\x00"
|
||||
"cckpwroffset0=5" "\x00"
|
||||
|
||||
//# PPR params
|
||||
"maxp2ga0=84" "\x00"
|
||||
"txpwrbckof=6" "\x00"
|
||||
"cckbw202gpo=0" "\x00"
|
||||
"legofdmbw202gpo=0x66111111" "\x00"
|
||||
"mcsbw202gpo=0x77711111" "\x00"
|
||||
"propbw202gpo=0xdd" "\x00"
|
||||
|
||||
//# OFDM IIR :
|
||||
"ofdmdigfilttype=18" "\x00"
|
||||
"ofdmdigfilttypebe=18" "\x00"
|
||||
|
||||
//# PAPD mode:
|
||||
"papdmode=1" "\x00"
|
||||
"papdvalidtest=1" "\x00"
|
||||
"pacalidx2g=32" "\x00"
|
||||
"papdepsoffset=-36" "\x00"
|
||||
"papdendidx=61" "\x00"
|
||||
|
||||
//# LTECX flags
|
||||
//#"ltecxmux=1" "\x00"
|
||||
//#"ltecxpadnum=0x02030401" "\x00"
|
||||
//#"ltecxfnsel=0x3003" "\x00"
|
||||
//#"ltecxgcigpio=0x3012" "\x00"
|
||||
|
||||
//#il0macaddr=00:90:4c:c5:12:38
|
||||
"wl0id=0x431b" "\x00"
|
||||
|
||||
"deadman_to=0xffffffff" "\x00"
|
||||
//# muxenab: 0x1 for UART enable, 0x2 for GPIOs, 0x8 for JTAG, 0x10 for HW OOB
|
||||
"muxenab=0x11" "\x00"
|
||||
//# CLDO PWM voltage settings - 0x4 - 1.1 volt
|
||||
//#cldo_pwm=0x4 "\x00"
|
||||
|
||||
//#VCO freq 326.4MHz
|
||||
"spurconfig=0x3" "\x00"
|
||||
"\x00\x00";
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#else /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
|
||||
|
||||
#error Wi-Fi NVRAM image included twice
|
||||
|
||||
#endif /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
|
||||
|
|
@ -38,32 +38,30 @@ extern "C" {
|
|||
* cyw943012csp_ty1LV.TXT
|
||||
*/
|
||||
static const char wifi_nvram_image[] =
|
||||
"NVRAMRev=$Rev: 351687 $" "\x00"
|
||||
"NVRAMRev=$Rev:722124$" "\x00"
|
||||
"sromrev=11" "\x00"
|
||||
"cckdigfilttype=4" "\x00"
|
||||
"cckpwroffset0=3" "\x00"
|
||||
"cckpwroffset0=2" "\x00"
|
||||
"bphyscale=0x20" "\x00"
|
||||
"boardflags3=0x40000100" "\x00"
|
||||
"vendid=0x14e4" "\x00"
|
||||
"devid=0xA804" "\x00"
|
||||
"manfid=0x2d0" "\x00"
|
||||
"prodid=0x052e" "\x00"
|
||||
"#macaddr=00:90:4c:2a:80:00" "\x00"
|
||||
"macaddr=00:90:4c:2a:9${maclo12}" "\x00"
|
||||
"#macaddr=00:90:4c:2a:80:80" "\x00"
|
||||
NVRAM_GENERATED_MAC_ADDRESS "\x00"
|
||||
"mac_clkgating=1" "\x00"
|
||||
"nocrc=1" "\x00"
|
||||
"boardtype=0x0842" "\x00"
|
||||
"boardrev=0x1100" "\x00"
|
||||
"boardtype=0x0871" "\x00"
|
||||
"boardrev=0x1202" "\x00"
|
||||
"xtalfreq=37400" "\x00"
|
||||
"boardflags2=0xc0000000" "\x00"
|
||||
"boardflags=0x00000000" "\x00"
|
||||
"boardflags=0x00000001" "\x00"
|
||||
"etmode=0x11" "\x00"
|
||||
"extpagain2g=2" "\x00"
|
||||
"extpagain5g=2" "\x00"
|
||||
"ccode=0" "\x00"
|
||||
"regrev=0" "\x00"
|
||||
"antswitch = 0" "\x00"
|
||||
"antswitch=0" "\x00"
|
||||
"rxgains2gelnagaina0=0" "\x00"
|
||||
"rxgains2gtrisoa0=15" "\x00"
|
||||
"rxgains2gtrelnabypa0=0" "\x00"
|
||||
|
@ -82,19 +80,18 @@ static const char wifi_nvram_image[] =
|
|||
"tssipos2g=0" "\x00"
|
||||
"femctrl=17" "\x00"
|
||||
"subband5gver=4" "\x00"
|
||||
"pa2ga0=-108,5627,-638" "\x00"
|
||||
"# pa5ga0=-23,5933,-815,-29,5959,-814,-60,6093,-813,-50,6414,-836" "\x00"
|
||||
"pa5ga0=-41,6533,-726,-29,6654,-746,9,6914,-772,12,7008,-806" "\x00"
|
||||
"pa2ga0=-108,6062,-661" "\x00"
|
||||
"pa5ga0=-82,6252,-698,-14,6722,-697,-92,6084,-710,-88,6465,-755" "\x00"
|
||||
"pdoffset40ma0=0" "\x00"
|
||||
"pdoffset80ma0=0" "\x00"
|
||||
"lowpowerrange2g=0" "\x00"
|
||||
"lowpowerrange5g=0" "\x00"
|
||||
"ed_thresh2g=-63" "\x00"
|
||||
"ed_thresh5g=-63" "\x00"
|
||||
"swctrlmap_2g=0x10101010,0x20202020,0x10101010,0x414040,0x3ff" "\x00"
|
||||
"swctrlmapext_2g=0x00000100,0x01000100,0x01000100,0x010000,0x301" "\x00"
|
||||
"swctrlmap_5g=0x80808080,0x00000000,0x80808080,0x404040,0x3ff" "\x00"
|
||||
"swctrlmapext_5g=0x01000100,0x01000100,0x00000000,0x000100,0x303" "\x00"
|
||||
"swctrlmap_2g=0x10101010,0x20202020,0x10101010,0x442020,0x3ff" "\x00"
|
||||
"swctrlmapext_2g=0x01000100,0x01000100,0x01000100,0x000000,0x301" "\x00"
|
||||
"swctrlmap_5g=0x80808080,0x00000000,0x80808080,0x442020,0x381" "\x00"
|
||||
"swctrlmapext_5g=0x01000100,0x01000100,0x00000000,0x000000,0x303" "\x00"
|
||||
"ulpnap=0" "\x00"
|
||||
"ulpadc=1" "\x00"
|
||||
"ssagc_en=0" "\x00"
|
||||
|
@ -106,19 +103,17 @@ static const char wifi_nvram_image[] =
|
|||
"epacal5g=0" "\x00"
|
||||
"papdcck=0" "\x00"
|
||||
"epacal2g_mask=0x3fff" "\x00"
|
||||
"maxp2ga0=82" "\x00"
|
||||
"ofdmlrbw202gpo=0x0077" "\x00"
|
||||
"dot11agofdmhrbw202gpo=0x8888" "\x00"
|
||||
"mcsbw202gpo=0x99999999" "\x00"
|
||||
"#mcsbw402gpo=0x99555533" "\x00"
|
||||
"maxp5ga0=82,82,82,82" "\x00"
|
||||
"mcsbw205glpo=0x99999999" "\x00"
|
||||
"mcsbw205gmpo=0x99999999" "\x00"
|
||||
"mcsbw205ghpo=0x99999999" "\x00"
|
||||
"maxp2ga0=74" "\x00"
|
||||
"ofdmlrbw202gpo=0x0020" "\x00"
|
||||
"dot11agofdmhrbw202gpo=0x6442" "\x00"
|
||||
"mcsbw202gpo=0xCC864420" "\x00"
|
||||
"maxp5ga0=70,70,70,70" "\x00"
|
||||
"mcsbw205glpo=0xCC864220" "\x00"
|
||||
"mcsbw205gmpo=0xCC864220" "\x00"
|
||||
"mcsbw205ghpo=0xCC864220" "\x00"
|
||||
"femctrlwar=0" "\x00"
|
||||
"use5gpllfor2g=1" "\x00"
|
||||
"pt5db_gaintbl=0" "\x00"
|
||||
|
||||
"txwbpapden=1" "\x00"
|
||||
"wb_rxattn=0x0303" "\x00"
|
||||
"wb_txattn=0x0203" "\x00"
|
||||
|
@ -141,19 +136,15 @@ static const char wifi_nvram_image[] =
|
|||
"nb_eps_offset=0x01d701d7" "\x00"
|
||||
"nb_bbmult=0x5A5A" "\x00"
|
||||
"nb_tia_gain_mode=0x0000" "\x00"
|
||||
"# AvVmid_c0=6,100,3,141,3,141,3,141,3,141" "\x00"
|
||||
"AvVmid_c0=6,100,7,70,7,70,7,70,7,70" "\x00"
|
||||
|
||||
"tssisleep_en=0x5" "\x00"
|
||||
"lpflags=0x28" "\x00"
|
||||
"lpo_select=4" "\x00"
|
||||
|
||||
"muxenab=0x01" "\x00"
|
||||
"paprrmcsgamma2g=450,500,550,600,675,950,950,950,950,950,950,950" "\x00"
|
||||
"paprrmcsgamma5g20=450,500,550,600,800,950,1100,1100,1100,1100,1100,1100" "\x00"
|
||||
"#paprdis=1" "\x00"
|
||||
|
||||
"#SW-Diversity Related parameters" "\x00"
|
||||
"swdiv_en=1 #To enable SW-DIV feature" "\x00"
|
||||
"paprrmcsgamma5g20=450,500,550,600,800,950,1100,1100,1100,1100,1100,1100" "\x00"
|
||||
"swdiv_en=0 #To enable SW-DIV feature" "\x00"
|
||||
"swdiv_gpio=0" "\x00"
|
||||
"swdiv_swctrl_en=2" "\x00"
|
||||
"swdiv_swctrl_ant0=0" "\x00"
|
||||
|
|
|
@ -0,0 +1,298 @@
|
|||
/*
|
||||
* Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved
|
||||
* SPDX-License-Identifier: LicenseRef-PBL
|
||||
*
|
||||
* This file and the related binary are licensed under the
|
||||
* Permissive Binary License, Version 1.0 (the "License");
|
||||
* you may not use these files except in compliance with the License.
|
||||
*
|
||||
* You may obtain a copy of the License here:
|
||||
* LICENSE-permissive-binary-license-1.0.txt and at
|
||||
* https://www.mbed.com/licenses/PBL-1.0
|
||||
*
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/** @file
|
||||
* NVRAM file for CYW9P62S1-43012EVB-01
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#ifndef INCLUDED_NVRAM_IMAGE_H_
|
||||
|
||||
#define INCLUDED_NVRAM_IMAGE_H_
|
||||
|
||||
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "../generated_mac_address.txt"
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
extern "C" {
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
||||
* Character array of NVRAM image
|
||||
|
||||
* Generated from cyw9p62_43012car_01_P101_722082.txt
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
static const char wifi_nvram_image[] =
|
||||
|
||||
"" "\x00"
|
||||
|
||||
"NVRAMRev=$Rev: 722082 $" "\x00"
|
||||
|
||||
"sromrev=11" "\x00"
|
||||
|
||||
"etmode=0x11" "\x00"
|
||||
|
||||
"cckdigfilttype=4" "\x00"
|
||||
|
||||
"bphyscale=0x20" "\x00"
|
||||
|
||||
"boardflags3=0x40000101" "\x00"
|
||||
|
||||
"vendid=0x14e4" "\x00"
|
||||
|
||||
"devid=0xA804" "\x00"
|
||||
|
||||
"manfid=0x2d0" "\x00"
|
||||
|
||||
"prodid=0x052e" "\x00"
|
||||
|
||||
NVRAM_GENERATED_MAC_ADDRESS "\x00"
|
||||
|
||||
"nocrc=1" "\x00"
|
||||
|
||||
"boardtype=0x0866" "\x00"
|
||||
|
||||
"boardrev=0x1101" "\x00"
|
||||
|
||||
"lpflags=0x00000420" "\x00"
|
||||
|
||||
"xtalfreq=37400" "\x00"
|
||||
|
||||
"boardflags2=0xc0800000" "\x00"
|
||||
|
||||
"boardflags=0x00400001" "\x00"
|
||||
|
||||
"extpagain2g=2" "\x00"
|
||||
|
||||
"extpagain5g=2" "\x00"
|
||||
|
||||
"ccode=0" "\x00"
|
||||
|
||||
"regrev=0" "\x00"
|
||||
|
||||
"antswitch=0" "\x00"
|
||||
|
||||
"rxgains2gelnagaina0=0" "\x00"
|
||||
|
||||
"rxgains2gtrisoa0=15" "\x00"
|
||||
|
||||
"rxgains2gtrelnabypa0=0" "\x00"
|
||||
|
||||
"rxgains5gelnagaina0=0" "\x00"
|
||||
|
||||
"rxgains5gtrisoa0=9" "\x00"
|
||||
|
||||
"rxgains5gtrelnabypa0=0" "\x00"
|
||||
|
||||
"pdgain5g=0" "\x00"
|
||||
|
||||
"pdgain2g=0" "\x00"
|
||||
|
||||
"tworangetssi2g=0" "\x00"
|
||||
|
||||
"tworangetssi5g=0" "\x00"
|
||||
|
||||
"rxchain=1" "\x00"
|
||||
|
||||
"txchain=1" "\x00"
|
||||
|
||||
"aa2g=1" "\x00"
|
||||
|
||||
"aa5g=1" "\x00"
|
||||
|
||||
"tssipos5g=0" "\x00"
|
||||
|
||||
"tssipos2g=0" "\x00"
|
||||
|
||||
"tssisleep_en=0x5" "\x00"
|
||||
|
||||
"femctrl=17" "\x00"
|
||||
|
||||
"subband5gver=4" "\x00"
|
||||
|
||||
"pa2ga0=-100,5849,-671" "\x00"
|
||||
|
||||
"pa5ga0=8,6421,-630,-31,6325,-670,-24,6386,-649,-70,6028,-658" "\x00"
|
||||
|
||||
"cckpwroffset0=2" "\x00"
|
||||
|
||||
"pdoffset40ma0=0" "\x00"
|
||||
|
||||
"pdoffset80ma0=0" "\x00"
|
||||
|
||||
"lowpowerrange2g=0" "\x00"
|
||||
|
||||
"lowpowerrange5g=0" "\x00"
|
||||
|
||||
"rssicorrnorm_c0=-10,0" "\x00"
|
||||
|
||||
"rssicorrnorm5g_c0=-10,0,0,-15,0,0,-15,0,0,-15,0,0" "\x00"
|
||||
|
||||
"ed_thresh2g=-63" "\x00"
|
||||
|
||||
"ed_thresh5g=-63" "\x00"
|
||||
|
||||
"swctrlmap_2g=0x10001000,0x50405040, 0x50405040,0x004040,0x3e7" "\x00"
|
||||
|
||||
"swctrlmapext_2g=0x02020202,0x02020202, 0x02020202,0x000000,0x003" "\x00"
|
||||
|
||||
"swctrlmap_5g=0x10001000,0x10001000,0x10001000,0x004040,0x3bf" "\x00"
|
||||
|
||||
"swctrlmapext_5g=0x00000000,0x03030303, 0x03030303,0x000000,0x001" "\x00"
|
||||
|
||||
"ulpnap=0" "\x00"
|
||||
|
||||
"ulpadc=1" "\x00"
|
||||
|
||||
"ssagc_en=0" "\x00"
|
||||
|
||||
"ds1_nap=0" "\x00"
|
||||
|
||||
"epacal2g=0" "\x00"
|
||||
|
||||
"epacal5g=0" "\x00"
|
||||
|
||||
"epacal2g_mask=0x3fff" "\x00"
|
||||
|
||||
"maxp2ga0=82" "\x00"
|
||||
|
||||
"ofdmlrbw202gpo=0x0077" "\x00"
|
||||
|
||||
"dot11agofdmhrbw202gpo=0x8888" "\x00"
|
||||
|
||||
"mcsbw202gpo=0x99999999" "\x00"
|
||||
|
||||
"mac_clkgating=1" "\x00"
|
||||
|
||||
"maxp5ga0=82,82,82,82" "\x00"
|
||||
|
||||
"mcsbw205glpo=0xffc97777" "\x00"
|
||||
|
||||
"mcsbw205gmpo=0xffc97777" "\x00"
|
||||
|
||||
"mcsbw205ghpo=0xffc97777" "\x00"
|
||||
|
||||
"" "\x00"
|
||||
|
||||
"txwbpapden=1" "\x00"
|
||||
|
||||
"femctrlwar=0" "\x00"
|
||||
|
||||
"use5gpllfor2g=1" "\x00"
|
||||
|
||||
"wb_rxattn=0x0303" "\x00"
|
||||
|
||||
"wb_txattn=0x0202" "\x00"
|
||||
|
||||
"wb_papdcalidx=0x1015" "\x00"
|
||||
|
||||
"wb_papdcalidx_5g=0x00101010" "\x00"
|
||||
|
||||
"wb_eps_offset=0x01bf01af" "\x00"
|
||||
|
||||
"wb_eps_offset_5g=0x01bf01bf" "\x00"
|
||||
|
||||
"wb_bbmult=0x67" "\x00"
|
||||
|
||||
"wb_bbmult_5g=0x004f5052" "\x00"
|
||||
|
||||
"wb_calref_db=0x1926" "\x00"
|
||||
|
||||
"wb_tia_gain_mode=0x0606" "\x00"
|
||||
|
||||
"wb_txbuf_offset=0x1e1e" "\x00"
|
||||
|
||||
"wb_frac_del=0x78ae" "\x00"
|
||||
|
||||
"wb_g_frac_bits=0xaa" "\x00"
|
||||
|
||||
"" "\x00"
|
||||
|
||||
"" "\x00"
|
||||
|
||||
"nb_rxattn=0x0403" "\x00"
|
||||
|
||||
"nb_txattn=0x0402" "\x00"
|
||||
|
||||
"nb_papdcalidx=0x1405" "\x00"
|
||||
|
||||
"nb_eps_offset=0x01d701ca" "\x00"
|
||||
|
||||
"nb_bbmult=0x5A50" "\x00"
|
||||
|
||||
"nb_tia_gain_mode=0x0006" "\x00"
|
||||
|
||||
"AvVmid_c0=6,104,7,80,7,80,7,80,7,80" "\x00"
|
||||
|
||||
"" "\x00"
|
||||
|
||||
"" "\x00"
|
||||
|
||||
"lpo_select=4" "\x00"
|
||||
|
||||
"" "\x00"
|
||||
|
||||
"csml=0x10" "\x00"
|
||||
|
||||
"pt5db_gaintbl=0" "\x00"
|
||||
|
||||
"" "\x00"
|
||||
|
||||
"papdcck=0" "\x00"
|
||||
|
||||
"phycal_tempdelta=15" "\x00"
|
||||
|
||||
"paprrmcsgamma2g=450,500,550,600,675,950,950,950,950,950,950,950" "\x00"
|
||||
|
||||
"paprrmcsgamma5g20=550,550,550,600,800,950,1100,1100,1100,1100,1100,1100" "\x00"
|
||||
|
||||
"\x00\x00";
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
} /*extern "C" */
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#else /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
|
||||
|
||||
|
||||
|
||||
#error Wi-Fi NVRAM image included twice
|
||||
|
||||
|
||||
|
||||
#endif /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
/*
|
||||
* Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved
|
||||
* SPDX-License-Identifier: LicenseRef-PBL
|
||||
*
|
||||
* This file and the related binary are licensed under the
|
||||
* Permissive Binary License, Version 1.0 (the "License");
|
||||
* you may not use these files except in compliance with the License.
|
||||
*
|
||||
* You may obtain a copy of the License here:
|
||||
* LICENSE-permissive-binary-license-1.0.txt and at
|
||||
* https://www.mbed.com/licenses/PBL-1.0
|
||||
*
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/** @file
|
||||
* NVRAM file for CYW9P62S1-43438EVB-01
|
||||
*/
|
||||
|
||||
#ifndef INCLUDED_NVRAM_IMAGE_H_
|
||||
#define INCLUDED_NVRAM_IMAGE_H_
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include "generated_mac_address.txt"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Character array of NVRAM image
|
||||
* Generated from cyw943438_26MHz_aw-cu427.txt
|
||||
*/
|
||||
static const char wifi_nvram_image[] =
|
||||
"" "\x00"
|
||||
"NVRAMRev=$Rev$" "\x00"
|
||||
"manfid=0x2d0" "\x00"
|
||||
"prodid=0x0727" "\x00"
|
||||
"vendid=0x14e4" "\x00"
|
||||
"devid=0x43e2" "\x00"
|
||||
"boardtype=0x0865" "\x00"
|
||||
"boardrev=0x1100" "\x00"
|
||||
"boardnum=22" "\x00"
|
||||
NVRAM_GENERATED_MAC_ADDRESS "\x00"
|
||||
"sromrev=11" "\x00"
|
||||
"boardflags=0x00404201" "\x00"
|
||||
"boardflags3=0x08000000" "\x00"
|
||||
"xtalfreq=26000" "\x00"
|
||||
"nocrc=1" "\x00"
|
||||
"ag0=255" "\x00"
|
||||
"aa2g=1" "\x00"
|
||||
"ccode=ALL" "\x00"
|
||||
"" "\x00"
|
||||
"swdiv_en=1" "\x00"
|
||||
"swdiv_gpio=1" "\x00"
|
||||
"swdiv_gpio_1=2" "\x00"
|
||||
"" "\x00"
|
||||
"pa0itssit=0x20" "\x00"
|
||||
"extpagain2g=0" "\x00"
|
||||
"" "\x00"
|
||||
"pa2ga0=-148,6421,-710" "\x00"
|
||||
"AvVmid_c0=0x0,0xc8" "\x00"
|
||||
"cckpwroffset0=5" "\x00"
|
||||
"" "\x00"
|
||||
"maxp2ga0=84" "\x00"
|
||||
"txpwrbckof=6" "\x00"
|
||||
"cckbw202gpo=0" "\x00"
|
||||
"legofdmbw202gpo=0x66111111" "\x00"
|
||||
"mcsbw202gpo=0x77711111" "\x00"
|
||||
"propbw202gpo=0xdd" "\x00"
|
||||
"" "\x00"
|
||||
"ofdmdigfilttype=18" "\x00"
|
||||
"ofdmdigfilttypebe=18" "\x00"
|
||||
"papdmode=1" "\x00"
|
||||
"papdvalidtest=1" "\x00"
|
||||
"pacalidx2g=32" "\x00"
|
||||
"papdepsoffset=-36" "\x00"
|
||||
"papdendidx=61" "\x00"
|
||||
"" "\x00"
|
||||
"wl0id=0x431b" "\x00"
|
||||
"" "\x00"
|
||||
"deadman_to=0xffffffff" "\x00"
|
||||
"muxenab=0x11" "\x00"
|
||||
"" "\x00"
|
||||
"spurconfig=0x3" "\x00"
|
||||
"" "\x00"
|
||||
"rssicorrnorm=3" "\x00"
|
||||
"\x00\x00";
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /*extern "C" */
|
||||
#endif
|
||||
|
||||
#else /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
|
||||
#error Wi-Fi NVRAM image included twice
|
||||
#endif /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
|
||||
|
|
@ -18,11 +18,11 @@
|
|||
/** @file
|
||||
* Defines WHD resource functions for BCM943340WCD1 platform
|
||||
*/
|
||||
#include "resources.h"
|
||||
#include "wifi_nvram_image.h"
|
||||
#include "whd_resource_api.h"
|
||||
#include "whd_debug.h"
|
||||
#include "whd.h"
|
||||
#include "resources.h"
|
||||
|
||||
/******************************************************
|
||||
* Macros
|
||||
|
@ -57,8 +57,8 @@
|
|||
* Static Function Declarations
|
||||
******************************************************/
|
||||
uint32_t host_platform_resource_size(whd_driver_t whd_drv, whd_resource_type_t resource, uint32_t *size_out);
|
||||
uint32_t host_get_resource_block(whd_driver_t whd_drv, whd_resource_type_t type, const uint8_t **data,
|
||||
uint32_t *size_out);
|
||||
uint32_t host_get_resource_block(whd_driver_t whd_drv, whd_resource_type_t type,
|
||||
uint32_t blockno, const uint8_t **data, uint32_t *size_out);
|
||||
uint32_t host_get_resource_no_of_blocks(whd_driver_t whd_drv, whd_resource_type_t type, uint32_t *block_count);
|
||||
uint32_t host_get_resource_block_size(whd_driver_t whd_drv, whd_resource_type_t type, uint32_t *size_out);
|
||||
resource_result_t resource_read(const resource_hnd_t *resource, uint32_t offset, uint32_t maxsize, uint32_t *size,
|
||||
|
@ -189,35 +189,29 @@ uint32_t host_platform_resource_size(whd_driver_t whd_drv, whd_resource_type_t r
|
|||
return WHD_SUCCESS;
|
||||
}
|
||||
|
||||
uint32_t host_get_resource_block(whd_driver_t whd_drv, whd_resource_type_t type, const uint8_t **data,
|
||||
uint32_t *size_out)
|
||||
uint32_t host_get_resource_block(whd_driver_t whd_drv, whd_resource_type_t type,
|
||||
uint32_t blockno, const uint8_t **data, uint32_t *size_out)
|
||||
{
|
||||
uint32_t resource_size;
|
||||
uint32_t block_size;
|
||||
uint32_t block_count;
|
||||
static uint32_t transfer_progress;
|
||||
static uint32_t i;
|
||||
uint32_t read_pos;
|
||||
uint32_t result;
|
||||
|
||||
host_platform_resource_size(whd_drv, type, &resource_size);
|
||||
host_get_resource_block_size(whd_drv, type, &block_size);
|
||||
host_get_resource_no_of_blocks(whd_drv, type, &block_count);
|
||||
memset(r_buffer, 0, block_size);
|
||||
if (i < block_count)
|
||||
read_pos = blockno * block_size;
|
||||
|
||||
if (blockno >= block_count)
|
||||
{
|
||||
transfer_progress = i * block_size;
|
||||
i++;
|
||||
}
|
||||
else
|
||||
{
|
||||
i = 0;
|
||||
transfer_progress = i * block_size;
|
||||
i++;
|
||||
return WHD_BADARG;
|
||||
}
|
||||
|
||||
if (type == WHD_RESOURCE_WLAN_FIRMWARE)
|
||||
{
|
||||
result = resource_read( (const resource_hnd_t *)&wifi_firmware_image, transfer_progress, block_size, size_out,
|
||||
result = resource_read( (const resource_hnd_t *)&wifi_firmware_image, read_pos, block_size, size_out,
|
||||
r_buffer );
|
||||
if (result != WHD_SUCCESS)
|
||||
{
|
||||
|
@ -236,13 +230,19 @@ uint32_t host_get_resource_block(whd_driver_t whd_drv, whd_resource_type_t type,
|
|||
}
|
||||
else if (type == WHD_RESOURCE_WLAN_NVRAM)
|
||||
{
|
||||
*size_out = NVRAM_SIZE;
|
||||
*data = (uint8_t *)NVRAM_IMAGE_VARIABLE;
|
||||
i = 0;
|
||||
if (NVRAM_SIZE - read_pos > block_size)
|
||||
{
|
||||
*size_out = block_size;
|
||||
}
|
||||
else
|
||||
{
|
||||
*size_out = NVRAM_SIZE - read_pos;
|
||||
}
|
||||
*data = ( (uint8_t *)NVRAM_IMAGE_VARIABLE ) + read_pos;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = resource_read( (const resource_hnd_t *)&wifi_firmware_clm_blob, transfer_progress, block_size,
|
||||
result = resource_read( (const resource_hnd_t *)&wifi_firmware_clm_blob, read_pos, block_size,
|
||||
size_out,
|
||||
r_buffer );
|
||||
if (result != WHD_SUCCESS)
|
||||
|
@ -261,7 +261,6 @@ uint32_t host_get_resource_block(whd_driver_t whd_drv, whd_resource_type_t type,
|
|||
*/
|
||||
|
||||
}
|
||||
transfer_progress = 0;
|
||||
|
||||
return WHD_SUCCESS;
|
||||
}
|
||||
|
@ -274,19 +273,15 @@ uint32_t host_get_resource_block_size(whd_driver_t whd_drv, whd_resource_type_t
|
|||
|
||||
uint32_t host_get_resource_no_of_blocks(whd_driver_t whd_drv, whd_resource_type_t type, uint32_t *block_count)
|
||||
{
|
||||
if (type == WHD_RESOURCE_WLAN_NVRAM)
|
||||
*block_count = 1;
|
||||
else
|
||||
{
|
||||
uint32_t resource_size;
|
||||
uint32_t block_size;
|
||||
uint32_t resource_size;
|
||||
uint32_t block_size;
|
||||
|
||||
host_platform_resource_size(whd_drv, type, &resource_size);
|
||||
host_get_resource_block_size(whd_drv, type, &block_size);
|
||||
*block_count = resource_size / block_size;
|
||||
if (resource_size % block_size)
|
||||
*block_count += 1;
|
||||
|
||||
host_platform_resource_size(whd_drv, type, &resource_size);
|
||||
host_get_resource_block_size(whd_drv, type, &block_size);
|
||||
*block_count = resource_size / block_size;
|
||||
if (resource_size % block_size)
|
||||
*block_count += 1;
|
||||
}
|
||||
return WHD_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -56,6 +56,21 @@ extern "C" {
|
|||
#define RESULT_ENUM(prefix, name, value) prefix ## name = (value)
|
||||
#endif /* ifndef RESULT_ENUM */
|
||||
|
||||
#if !defined(CY_SECTION)
|
||||
#if defined(__ARMCC_VERSION)
|
||||
#define CY_SECTION(name) __attribute__ ( (section(name) ) )
|
||||
#elif defined (__GNUC__)
|
||||
#if defined (__clang__)
|
||||
#define CY_SECTION(name) __attribute__ ( (section("__DATA, "name) ) )
|
||||
#else
|
||||
#define CY_SECTION(name) __attribute__ ( (section(name) ) )
|
||||
#endif
|
||||
#elif defined (__ICCARM__)
|
||||
#define CY_SECTION(name) CY_PRAGMA(location = name)
|
||||
#else
|
||||
#error "An unsupported toolchain"
|
||||
#endif /* (__ARMCC_VERSION) */
|
||||
#endif /* !defined(CY_SECTION) */
|
||||
|
||||
/* These Enum result values are for Resource errors
|
||||
* Values: 4000 - 4999
|
||||
|
|
|
@ -114,17 +114,11 @@ whd_bool_t whd_bus_is_flow_controlled(whd_driver_t whd_driver)
|
|||
static whd_result_t whd_bus_common_download_resource(whd_driver_t whd_driver, whd_resource_type_t resource,
|
||||
whd_bool_t direct_resource, uint32_t address)
|
||||
{
|
||||
uint32_t transfer_progress;
|
||||
whd_buffer_t buffer;
|
||||
uint32_t block_size;
|
||||
whd_result_t result = WHD_SUCCESS;
|
||||
uint8_t *image;
|
||||
uint32_t image_size;
|
||||
uint8_t *packet;
|
||||
uint16_t transfer_size = 0;
|
||||
uint32_t segment_size;
|
||||
uint32_t blocks_count = 0;
|
||||
uint32_t i, j, num_buff;
|
||||
uint32_t i;
|
||||
uint32_t size_out;
|
||||
uint32_t reset_instr = 0;
|
||||
|
||||
|
@ -145,15 +139,6 @@ static whd_result_t whd_bus_common_download_resource(whd_driver_t whd_driver, wh
|
|||
goto exit;
|
||||
}
|
||||
|
||||
/* Transfer firmware image into the RAM */
|
||||
result = whd_get_resource_block_size(whd_driver, resource, &block_size);
|
||||
if (result != WHD_SUCCESS)
|
||||
{
|
||||
WPRINT_WHD_ERROR( ("Fatal error: download_resource block size not know, %s failed at line %d \n", __func__,
|
||||
__LINE__) );
|
||||
goto exit;
|
||||
}
|
||||
|
||||
result = whd_get_resource_no_of_blocks(whd_driver, resource, &blocks_count);
|
||||
if (result != WHD_SUCCESS)
|
||||
{
|
||||
|
@ -162,82 +147,23 @@ static whd_result_t whd_bus_common_download_resource(whd_driver_t whd_driver, wh
|
|||
goto exit;
|
||||
}
|
||||
|
||||
result = whd_host_buffer_get(whd_driver, &buffer, WHD_NETWORK_TX,
|
||||
(uint16_t)(BLOCK_SIZE + sizeof(whd_buffer_header_t) ), WHD_FALSE);
|
||||
if (result != WHD_SUCCESS)
|
||||
{
|
||||
WPRINT_WHD_ERROR( ("%s:%d whd_host_buffer_get() failed\n", __func__, __LINE__) );
|
||||
goto exit;
|
||||
}
|
||||
|
||||
transfer_progress = 0;
|
||||
for (i = 0; i < blocks_count; i++)
|
||||
{
|
||||
/*
|
||||
* In case of direct read the no of blocks is one and we would be getting a pointer pointing to entire resource
|
||||
* In case of indirect read the no of blocks is the size of the resource/ size of blocks,
|
||||
* get resource block would return pointer to the block
|
||||
*/
|
||||
CHECK_RETURN(whd_get_resource_block(whd_driver, resource, (const uint8_t **)&image, &size_out) );
|
||||
/* Need to find the min size last block will be less that block_size */
|
||||
transfer_size = MIN_OF(BLOCK_SIZE, size_out);
|
||||
num_buff = (size_out + transfer_size - 1) / transfer_size;
|
||||
|
||||
if (blocks_count != 1)
|
||||
transfer_progress = 0;
|
||||
for (j = 0; j < num_buff; j++)
|
||||
CHECK_RETURN(whd_get_resource_block(whd_driver, resource, i, (const uint8_t **)&image, &size_out) );
|
||||
if ( (resource == WHD_RESOURCE_WLAN_FIRMWARE) && (reset_instr == 0) )
|
||||
{
|
||||
transfer_size = (uint16_t)MIN_OF(BLOCK_SIZE, image_size - transfer_progress);
|
||||
packet = (uint8_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, buffer);
|
||||
memcpy(packet + sizeof(whd_buffer_header_t), &image[transfer_progress], transfer_size);
|
||||
|
||||
/* Round up the size of the chunk */
|
||||
transfer_size = (uint16_t)ROUND_UP(transfer_size, WHD_BUS_ROUND_UP_ALIGNMENT);
|
||||
segment_size = transfer_size;
|
||||
transfer_size = (uint16_t)MIN_OF(whd_bus_get_max_transfer_size(whd_driver), transfer_size);
|
||||
|
||||
if (address != 0)
|
||||
{
|
||||
if ( (resource == WHD_RESOURCE_WLAN_FIRMWARE) && (reset_instr == 0) )
|
||||
{
|
||||
/* Copy the starting address of the firmware into a global variable */
|
||||
reset_instr = *( (uint32_t *)(packet + sizeof(whd_buffer_header_t) ) );
|
||||
}
|
||||
}
|
||||
for (; segment_size != 0;
|
||||
segment_size -= transfer_size, packet += transfer_size)
|
||||
{
|
||||
if (whd_driver->bus_common_info->resource_download_abort == WHD_TRUE)
|
||||
{
|
||||
WPRINT_WHD_ERROR( ("Download_resource is aborted; terminating after %" PRIu32 " iterations\n",
|
||||
transfer_progress) );
|
||||
CHECK_RETURN(whd_buffer_release(whd_driver, buffer, WHD_NETWORK_TX) );
|
||||
result = WHD_UNFINISHED;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
result = whd_bus_set_backplane_window(whd_driver, address);
|
||||
if (result != WHD_SUCCESS)
|
||||
{
|
||||
CHECK_RETURN(whd_buffer_release(whd_driver, buffer, WHD_NETWORK_TX) );
|
||||
goto exit;
|
||||
}
|
||||
result = whd_bus_transfer_bytes(whd_driver, BUS_WRITE, BACKPLANE_FUNCTION,
|
||||
(address & BACKPLANE_ADDRESS_MASK), transfer_size,
|
||||
(whd_transfer_bytes_packet_t *)(packet +
|
||||
sizeof(whd_buffer_queue_ptr_t) ) );
|
||||
if (result != WHD_SUCCESS)
|
||||
{
|
||||
CHECK_RETURN(whd_buffer_release(whd_driver, buffer, WHD_NETWORK_TX) );
|
||||
goto exit;
|
||||
}
|
||||
|
||||
address += transfer_size;
|
||||
transfer_progress = transfer_progress + transfer_size;
|
||||
}
|
||||
/* Copy the starting address of the firmware into a global variable */
|
||||
reset_instr = *( (uint32_t *)(&image[0]) );
|
||||
}
|
||||
result = whd_bus_transfer_backplane_bytes(whd_driver, BUS_WRITE, address, size_out, &image[0]);
|
||||
if (result != WHD_SUCCESS)
|
||||
{
|
||||
WPRINT_WHD_ERROR( ("%s: Failed to write firmware image\n", __FUNCTION__) );
|
||||
goto exit;
|
||||
}
|
||||
address += size_out;
|
||||
}
|
||||
CHECK_RETURN(whd_buffer_release(whd_driver, buffer, WHD_NETWORK_TX) );
|
||||
|
||||
/* Below part of the code is applicable to arm_CR4 type chips only
|
||||
* The CR4 chips by default firmware is not loaded at 0. So we need
|
||||
* load the first 32 bytes with the offset of the firmware load address
|
||||
|
@ -291,6 +217,15 @@ void whd_bus_common_info_init(whd_driver_t whd_driver)
|
|||
}
|
||||
}
|
||||
|
||||
void whd_bus_common_info_deinit(whd_driver_t whd_driver)
|
||||
{
|
||||
if (whd_driver->bus_common_info != NULL)
|
||||
{
|
||||
free(whd_driver->bus_common_info);
|
||||
whd_driver->bus_common_info = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void whd_delayed_bus_release_schedule_update(whd_driver_t whd_driver, whd_bool_t is_scheduled)
|
||||
{
|
||||
whd_driver->bus_common_info->delayed_bus_release_scheduled = is_scheduled;
|
||||
|
@ -518,12 +453,6 @@ whd_result_t whd_bus_transfer_backplane_bytes(whd_driver_t whd_driver, whd_bus_t
|
|||
}
|
||||
packet = (uint8_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, pkt_buffer);
|
||||
|
||||
result = whd_ensure_wlan_bus_is_up(whd_driver);
|
||||
if (result != WHD_SUCCESS)
|
||||
{
|
||||
goto done;
|
||||
}
|
||||
|
||||
for (remaining_buf_size = size; remaining_buf_size != 0;
|
||||
remaining_buf_size -= transfer_size, address += transfer_size)
|
||||
{
|
||||
|
|
|
@ -27,6 +27,7 @@ extern "C" {
|
|||
struct whd_bus_common_info;
|
||||
|
||||
void whd_bus_common_info_init(whd_driver_t whd_driver);
|
||||
void whd_bus_common_info_deinit(whd_driver_t whd_driver);
|
||||
|
||||
/* Configure delayed sleep of bus.
|
||||
* A high number will mean a longer delay before sleep after the last operation (higher performance)
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include <stdlib.h>
|
||||
#include "cyabs_rtos.h"
|
||||
#include "cyhal_sdio.h"
|
||||
#include "cyhal_gpio.h"
|
||||
|
||||
#include "whd_bus_sdio_protocol.h"
|
||||
#include "whd_bus.h"
|
||||
|
@ -40,7 +41,7 @@
|
|||
#include "whd_buffer_api.h"
|
||||
#include "whd_resource_if.h"
|
||||
#include "whd_types_int.h"
|
||||
#include "whd_bus_types.h"
|
||||
#include "whd_types.h"
|
||||
|
||||
|
||||
/******************************************************
|
||||
|
@ -77,8 +78,7 @@ struct whd_bus_priv
|
|||
{
|
||||
whd_sdio_config_t sdio_config;
|
||||
whd_bus_stats_t whd_bus_stats;
|
||||
void *sdio_obj;
|
||||
whd_sdio_funcs_t *sdio_ops;
|
||||
cyhal_sdio_t *sdio_obj;
|
||||
|
||||
};
|
||||
|
||||
|
@ -107,79 +107,24 @@ static whd_result_t whd_bus_sdio_download_firmware(whd_driver_t whd_driver);
|
|||
static whd_result_t whd_bus_sdio_set_oob_interrupt(whd_driver_t whd_driver, uint8_t gpio_pin_number);
|
||||
|
||||
static void whd_bus_sdio_irq_handler(void *handler_arg, cyhal_sdio_irq_event_t event);
|
||||
static void whd_bus_sdio_oob_irq_handler(void *arg, cyhal_gpio_irq_event_t event);
|
||||
|
||||
static whd_result_t whd_bus_sdio_irq_register(whd_driver_t whd_driver);
|
||||
static whd_result_t whd_bus_sdio_irq_enable(whd_driver_t whd_driver, whd_bool_t enable);
|
||||
static whd_result_t whd_bus_sdio_init_oob_intr(whd_driver_t whd_driver);
|
||||
|
||||
/******************************************************
|
||||
* SDIO Logging
|
||||
* Enable this section for logging of SDIO transfers
|
||||
* by changing "if 0" to "if 1"
|
||||
******************************************************/
|
||||
#if 0
|
||||
|
||||
#define SDIO_LOG_SIZE (110)
|
||||
#define SDIO_LOG_HEADER_SIZE (0) /*(0x30) */
|
||||
|
||||
typedef struct sdio_log_entry_struct
|
||||
{
|
||||
whd_bus_transfer_direction_t direction;
|
||||
whd_bus_function_t function;
|
||||
uint32_t address;
|
||||
unsigned long time;
|
||||
unsigned long length;
|
||||
#if (SDIO_LOG_HEADER_SIZE != 0)
|
||||
unsigned char header[SDIO_LOG_HEADER_SIZE];
|
||||
#endif /* if ( SDIO_LOG_HEADER_SIZE != 0 ) */
|
||||
} sdio_log_entry_t;
|
||||
|
||||
static int next_sdio_log_pos = 0;
|
||||
static sdio_log_entry_t sdio_log_data[SDIO_LOG_SIZE];
|
||||
|
||||
static void add_log_entry(whd_bus_transfer_direction_t dir, whd_bus_function_t function, uint32_t address,
|
||||
unsigned long length, uint8_t *data)
|
||||
{
|
||||
sdio_log_data[next_sdio_log_pos].direction = dir;
|
||||
sdio_log_data[next_sdio_log_pos].function = function;
|
||||
sdio_log_data[next_sdio_log_pos].address = address;
|
||||
cy_rtos_get_time(&sdio_log_data[next_sdio_log_pos].time);
|
||||
sdio_log_data[next_sdio_log_pos].length = length;
|
||||
#if (SDIO_LOG_HEADER_SIZE != 0)
|
||||
memcpy(sdio_log_data[next_sdio_log_pos].header, data,
|
||||
(length >= SDIO_LOG_HEADER_SIZE) ? SDIO_LOG_HEADER_SIZE : length);
|
||||
#else
|
||||
UNUSED_PARAMETER(data);
|
||||
#endif /* if ( SDIO_LOG_HEADER_SIZE != 0 ) */
|
||||
next_sdio_log_pos++;
|
||||
if (next_sdio_log_pos >= SDIO_LOG_SIZE)
|
||||
{
|
||||
next_sdio_log_pos = 0;
|
||||
}
|
||||
}
|
||||
|
||||
#else /* #if 0 */
|
||||
#define add_log_entry(dir, function, address, length, data)
|
||||
#endif /* #if 0 */
|
||||
static whd_result_t whd_bus_sdio_deinit_oob_intr(whd_driver_t whd_driver);
|
||||
static whd_result_t whd_bus_sdio_register_oob_intr(whd_driver_t whd_driver);
|
||||
static whd_result_t whd_bus_sdio_unregister_oob_intr(whd_driver_t whd_driver);
|
||||
static whd_result_t whd_bus_sdio_enable_oob_intr(whd_driver_t whd_driver, whd_bool_t enable);
|
||||
|
||||
/******************************************************
|
||||
* Global Function definitions
|
||||
******************************************************/
|
||||
|
||||
uint32_t whd_bus_sdio_attach(whd_driver_t whd_driver, whd_sdio_config_t *whd_sdio_config, void *sdio_obj,
|
||||
whd_sdio_funcs_t *sdio_ops)
|
||||
uint32_t whd_bus_sdio_attach(whd_driver_t whd_driver, whd_sdio_config_t *whd_sdio_config, cyhal_sdio_t *sdio_obj)
|
||||
{
|
||||
struct whd_bus_info *whd_bus_info;
|
||||
|
||||
if (whd_sdio_config->flags & WHD_BUS_SDIO_OOB_INTR)
|
||||
{
|
||||
if ( (sdio_ops == NULL) || (sdio_ops->whd_enable_intr == NULL) ||
|
||||
(sdio_ops->whd_get_intr_config == NULL) )
|
||||
{
|
||||
WPRINT_WHD_ERROR( ("host-wake configuration invalid in %s\n", __FUNCTION__) );
|
||||
return WHD_BADARG;
|
||||
}
|
||||
}
|
||||
|
||||
whd_bus_info = (whd_bus_info_t *)malloc(sizeof(whd_bus_info_t) );
|
||||
|
||||
if (whd_bus_info == NULL)
|
||||
|
@ -202,7 +147,6 @@ uint32_t whd_bus_sdio_attach(whd_driver_t whd_driver, whd_sdio_config_t *whd_sdi
|
|||
|
||||
whd_driver->bus_priv->sdio_obj = sdio_obj;
|
||||
whd_driver->bus_priv->sdio_config = *whd_sdio_config;
|
||||
whd_driver->bus_priv->sdio_ops = sdio_ops;
|
||||
|
||||
whd_bus_info->whd_bus_init_fptr = whd_bus_sdio_init;
|
||||
whd_bus_info->whd_bus_deinit_fptr = whd_bus_sdio_deinit;
|
||||
|
@ -241,6 +185,20 @@ uint32_t whd_bus_sdio_attach(whd_driver_t whd_driver, whd_sdio_config_t *whd_sdi
|
|||
return WHD_SUCCESS;
|
||||
}
|
||||
|
||||
void whd_bus_sdio_detach(whd_driver_t whd_driver)
|
||||
{
|
||||
if (whd_driver->bus_if != NULL)
|
||||
{
|
||||
free(whd_driver->bus_if);
|
||||
whd_driver->bus_if = NULL;
|
||||
}
|
||||
if (whd_driver->bus_priv != NULL)
|
||||
{
|
||||
free(whd_driver->bus_priv);
|
||||
whd_driver->bus_priv = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
whd_result_t whd_bus_sdio_ack_interrupt(whd_driver_t whd_driver, uint32_t intstatus)
|
||||
{
|
||||
return whd_bus_write_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS, (uint8_t)4, intstatus);
|
||||
|
@ -462,12 +420,8 @@ whd_result_t whd_bus_sdio_init(whd_driver_t whd_driver)
|
|||
CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_IOEN, (uint8_t)1,
|
||||
SDIO_FUNC_ENABLE_1 | SDIO_FUNC_ENABLE_2) );
|
||||
|
||||
/* Check for host-wake configuration */
|
||||
if (whd_driver->bus_priv->sdio_config.flags & WHD_BUS_SDIO_OOB_INTR)
|
||||
{
|
||||
/* Setup host-wake signals */
|
||||
CHECK_RETURN(whd_bus_sdio_init_oob_intr(whd_driver) );
|
||||
}
|
||||
/* Setup host-wake signals */
|
||||
CHECK_RETURN(whd_bus_sdio_init_oob_intr(whd_driver) );
|
||||
|
||||
/* Enable F2 interrupt only */
|
||||
CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_INTEN, (uint8_t)1,
|
||||
|
@ -525,11 +479,7 @@ whd_result_t whd_bus_sdio_init(whd_driver_t whd_driver)
|
|||
|
||||
whd_result_t whd_bus_sdio_deinit(whd_driver_t whd_driver)
|
||||
{
|
||||
if (whd_driver->bus_priv->sdio_config.flags & WHD_BUS_SDIO_OOB_INTR)
|
||||
{
|
||||
const whd_variant_t oob_intr = whd_driver->bus_priv->sdio_config.oob_intr;
|
||||
(*whd_driver->bus_priv->sdio_ops->whd_enable_intr)(whd_driver, oob_intr, WHD_FALSE);
|
||||
}
|
||||
CHECK_RETURN(whd_bus_sdio_deinit_oob_intr(whd_driver) );
|
||||
|
||||
cyhal_sdio_irq_enable(whd_driver->bus_priv->sdio_obj, CYHAL_SDIO_CARD_INTERRUPT, WHD_FALSE);
|
||||
|
||||
|
@ -792,16 +742,47 @@ static whd_result_t whd_bus_sdio_transfer(whd_driver_t whd_driver, whd_bus_trans
|
|||
* Failing fast helps problems on the bus get brought to light more quickly
|
||||
* and preserves the original behavior.
|
||||
*/
|
||||
if (data_size == (uint16_t)1)
|
||||
whd_result_t result = WHD_SUCCESS;
|
||||
uint16_t data_byte_size;
|
||||
uint16_t data_blk_size;
|
||||
|
||||
if (data_size == 0)
|
||||
{
|
||||
return WHD_BADARG;
|
||||
}
|
||||
else if (data_size == (uint16_t)1)
|
||||
{
|
||||
return whd_bus_sdio_cmd52(whd_driver, direction, function, address, *data, response_expected, data);
|
||||
}
|
||||
else
|
||||
else if (whd_driver->internal_info.whd_wlan_status.state == WLAN_UP)
|
||||
{
|
||||
return whd_bus_sdio_cmd53(whd_driver, direction, function,
|
||||
(data_size >= (uint16_t)64) ? SDIO_BLOCK_MODE : SDIO_BYTE_MODE, address, data_size,
|
||||
data, response_expected, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We need to handle remaining size for source image download */
|
||||
data_byte_size = data_size % SDIO_64B_BLOCK;
|
||||
data_blk_size = data_size - data_byte_size;
|
||||
if (data_blk_size != 0)
|
||||
{
|
||||
result = whd_bus_sdio_cmd53(whd_driver, direction, function, SDIO_BLOCK_MODE, address,
|
||||
data_blk_size, data, response_expected, NULL);
|
||||
if (result != WHD_SUCCESS)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
data += data_blk_size;
|
||||
address += data_blk_size;
|
||||
}
|
||||
if (data_byte_size)
|
||||
{
|
||||
result = whd_bus_sdio_cmd53(whd_driver, direction, function, SDIO_BYTE_MODE, address,
|
||||
data_byte_size, data, response_expected, NULL);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
static whd_result_t whd_bus_sdio_cmd52(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction,
|
||||
|
@ -846,7 +827,6 @@ static whd_result_t whd_bus_sdio_cmd53(whd_driver_t whd_driver, whd_bus_transfer
|
|||
if (direction == BUS_WRITE)
|
||||
{
|
||||
WHD_BUS_STATS_INCREMENT_VARIABLE(whd_driver->bus_priv, cmd53_write);
|
||||
add_log_entry(direction, function, address, data_size, data);
|
||||
}
|
||||
|
||||
arg.value = 0;
|
||||
|
@ -893,7 +873,6 @@ static whd_result_t whd_bus_sdio_cmd53(whd_driver_t whd_driver, whd_bus_transfer
|
|||
if (direction == BUS_READ)
|
||||
{
|
||||
WHD_BUS_STATS_INCREMENT_VARIABLE(whd_driver->bus_priv, cmd53_read);
|
||||
add_log_entry(direction, function, address, data_size, data);
|
||||
}
|
||||
|
||||
done:
|
||||
|
@ -1276,12 +1255,8 @@ whd_result_t whd_bus_sdio_reinit_stats(whd_driver_t whd_driver, whd_bool_t wake_
|
|||
CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_IOEN, (uint8_t)1,
|
||||
SDIO_FUNC_ENABLE_1 | SDIO_FUNC_ENABLE_2) );
|
||||
|
||||
/* Check for host-wake configuration */
|
||||
if (whd_driver->bus_priv->sdio_config.flags & WHD_BUS_SDIO_OOB_INTR)
|
||||
{
|
||||
/* Setup host-wake signals */
|
||||
CHECK_RETURN(whd_bus_sdio_init_oob_intr(whd_driver) );
|
||||
}
|
||||
/* Setup host-wake signals */
|
||||
CHECK_RETURN(whd_bus_sdio_init_oob_intr(whd_driver) );
|
||||
|
||||
/* Enable F2 interrupt only */
|
||||
CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_INTEN, (uint8_t)1,
|
||||
|
@ -1356,7 +1331,7 @@ uint32_t whd_bus_sdio_get_max_transfer_size(whd_driver_t whd_driver)
|
|||
return WHD_BUS_SDIO_MAX_BACKPLANE_TRANSFER_SIZE;
|
||||
}
|
||||
|
||||
void whd_bus_sdio_irq_handler(void *handler_arg, cyhal_sdio_irq_event_t event)
|
||||
static void whd_bus_sdio_irq_handler(void *handler_arg, cyhal_sdio_irq_event_t event)
|
||||
{
|
||||
whd_driver_t whd_driver = (whd_driver_t)handler_arg;
|
||||
|
||||
|
@ -1364,10 +1339,12 @@ void whd_bus_sdio_irq_handler(void *handler_arg, cyhal_sdio_irq_event_t event)
|
|||
if (event != CYHAL_SDIO_CARD_INTERRUPT)
|
||||
{
|
||||
WPRINT_WHD_ERROR( ("Unexpected interrupt event %d\n", event) );
|
||||
|
||||
WHD_BUS_STATS_INCREMENT_VARIABLE(whd_driver->bus_priv, error_intrs);
|
||||
return;
|
||||
}
|
||||
|
||||
WHD_BUS_STATS_INCREMENT_VARIABLE(whd_driver->bus_priv, sdio_intrs);
|
||||
|
||||
/* call thread notify to wake up WHD thread */
|
||||
whd_thread_notify_irq(whd_driver);
|
||||
}
|
||||
|
@ -1384,25 +1361,68 @@ whd_result_t whd_bus_sdio_irq_enable(whd_driver_t whd_driver, whd_bool_t enable)
|
|||
return WHD_SUCCESS;
|
||||
}
|
||||
|
||||
void whd_bus_sdio_oob_intr_asserted(whd_driver_t whd_driver)
|
||||
static void whd_bus_sdio_oob_irq_handler(void *arg, cyhal_gpio_irq_event_t event)
|
||||
{
|
||||
whd_driver_t whd_driver = (whd_driver_t)arg;
|
||||
const whd_oob_config_t *config = &whd_driver->bus_priv->sdio_config.oob_config;
|
||||
const cyhal_gpio_irq_event_t expected_event = (config->is_falling_edge == WHD_TRUE)
|
||||
? CYHAL_GPIO_IRQ_FALL : CYHAL_GPIO_IRQ_RISE;
|
||||
|
||||
if (event != expected_event)
|
||||
{
|
||||
WPRINT_WHD_ERROR( ("Unexpected interrupt event %d\n", event) );
|
||||
WHD_BUS_STATS_INCREMENT_VARIABLE(whd_driver->bus_priv, error_intrs);
|
||||
return;
|
||||
}
|
||||
|
||||
WHD_BUS_STATS_INCREMENT_VARIABLE(whd_driver->bus_priv, oob_intrs);
|
||||
|
||||
/* Call thread notify to wake up WHD thread */
|
||||
whd_thread_notify_irq(whd_driver);
|
||||
}
|
||||
|
||||
static whd_result_t whd_bus_sdio_register_oob_intr(whd_driver_t whd_driver)
|
||||
{
|
||||
const whd_oob_config_t *config = &whd_driver->bus_priv->sdio_config.oob_config;
|
||||
|
||||
cyhal_gpio_init(config->host_oob_pin, CYHAL_GPIO_DIR_INPUT, CYHAL_GPIO_DRIVE_NONE, 0);
|
||||
cyhal_gpio_register_irq(config->host_oob_pin, config->intr_priority, whd_bus_sdio_oob_irq_handler,
|
||||
whd_driver);
|
||||
|
||||
return WHD_SUCCESS;
|
||||
}
|
||||
|
||||
static whd_result_t whd_bus_sdio_unregister_oob_intr(whd_driver_t whd_driver)
|
||||
{
|
||||
const whd_oob_config_t *config = &whd_driver->bus_priv->sdio_config.oob_config;
|
||||
|
||||
cyhal_gpio_register_irq(config->host_oob_pin, config->intr_priority, NULL, NULL);
|
||||
|
||||
return WHD_SUCCESS;
|
||||
}
|
||||
|
||||
static whd_result_t whd_bus_sdio_enable_oob_intr(whd_driver_t whd_driver, whd_bool_t enable)
|
||||
{
|
||||
const whd_oob_config_t *config = &whd_driver->bus_priv->sdio_config.oob_config;
|
||||
const cyhal_gpio_irq_event_t event =
|
||||
(config->is_falling_edge == WHD_TRUE) ? CYHAL_GPIO_IRQ_FALL : CYHAL_GPIO_IRQ_RISE;
|
||||
|
||||
cyhal_gpio_irq_enable(config->host_oob_pin, event, (enable == WHD_TRUE) ? true : false);
|
||||
|
||||
return WHD_SUCCESS;
|
||||
}
|
||||
|
||||
static whd_result_t whd_bus_sdio_init_oob_intr(whd_driver_t whd_driver)
|
||||
{
|
||||
const whd_variant_t oob_intr = whd_driver->bus_priv->sdio_config.oob_intr;
|
||||
whd_intr_config_t config;
|
||||
const whd_oob_config_t *config = &whd_driver->bus_priv->sdio_config.oob_config;
|
||||
uint8_t sepintpol;
|
||||
|
||||
/* Get the host-wake configuration */
|
||||
(*whd_driver->bus_priv->sdio_ops->whd_get_intr_config)(whd_driver, oob_intr, &config);
|
||||
/* OOB isn't configured so bail */
|
||||
if (config->host_oob_pin == CYHAL_NC_PIN_VALUE)
|
||||
return WHD_SUCCESS;
|
||||
|
||||
/* Choose out-of-band interrupt polarity */
|
||||
if (config.is_falling_edge == WHD_FALSE)
|
||||
if (config->is_falling_edge == WHD_FALSE)
|
||||
{
|
||||
sepintpol = SEP_INTR_CTL_POL;
|
||||
}
|
||||
|
@ -1411,16 +1431,31 @@ static whd_result_t whd_bus_sdio_init_oob_intr(whd_driver_t whd_driver)
|
|||
sepintpol = 0;
|
||||
}
|
||||
|
||||
/* Enable out-of-band interrupt */
|
||||
/* Set OOB interrupt to the correct WLAN GPIO pin (default to GPIO0) */
|
||||
if (config->dev_gpio_sel)
|
||||
CHECK_RETURN(whd_bus_sdio_set_oob_interrupt(whd_driver, config->dev_gpio_sel) );
|
||||
|
||||
/* Enable out-of-band interrupt on the device */
|
||||
CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_SEP_INT_CTL, (uint8_t)1,
|
||||
SEP_INTR_CTL_MASK | SEP_INTR_CTL_EN | sepintpol) );
|
||||
|
||||
/* Register and enable OOB */
|
||||
/* XXX Remove this when BSP377 is implemented */
|
||||
(*whd_driver->bus_priv->sdio_ops->whd_enable_intr)(whd_driver, oob_intr, WHD_TRUE);
|
||||
|
||||
/* Set OOB interrupt to the correct WLAN GPIO pin (default to GPIO0) */
|
||||
if (config.dev_gpio_sel)
|
||||
CHECK_RETURN(whd_bus_sdio_set_oob_interrupt(whd_driver, config.dev_gpio_sel) );
|
||||
CHECK_RETURN(whd_bus_sdio_register_oob_intr(whd_driver) );
|
||||
CHECK_RETURN(whd_bus_sdio_enable_oob_intr(whd_driver, WHD_TRUE) );
|
||||
|
||||
return WHD_SUCCESS;
|
||||
}
|
||||
|
||||
static whd_result_t whd_bus_sdio_deinit_oob_intr(whd_driver_t whd_driver)
|
||||
{
|
||||
const whd_oob_config_t *config = &whd_driver->bus_priv->sdio_config.oob_config;
|
||||
|
||||
if (config->host_oob_pin != CYHAL_NC_PIN_VALUE)
|
||||
{
|
||||
CHECK_RETURN(whd_bus_sdio_enable_oob_intr(whd_driver, WHD_FALSE) );
|
||||
CHECK_RETURN(whd_bus_sdio_unregister_oob_intr(whd_driver) );
|
||||
}
|
||||
|
||||
return WHD_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ extern "C" {
|
|||
|
||||
#define WHD_BUS_HEADER_SIZE (0)
|
||||
|
||||
#define WHD_BUS_SDIO_MAX_BACKPLANE_TRANSFER_SIZE (WHD_PAYLOAD_MTU)
|
||||
#define WHD_BUS_SDIO_MAX_BACKPLANE_TRANSFER_SIZE (1536)
|
||||
#define WHD_BUS_SDIO_BACKPLANE_READ_PADD_SIZE (0)
|
||||
|
||||
/******************************************************
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
|
||||
#include "cy_result.h"
|
||||
#include "cyabs_rtos.h"
|
||||
#include "cyhal_gpio.h"
|
||||
|
||||
#include "whd_thread.h"
|
||||
#include "whd_chip.h"
|
||||
|
@ -44,7 +45,6 @@
|
|||
#include "whd_buffer_api.h"
|
||||
#include "whd_debug.h"
|
||||
#include "whd_types_int.h"
|
||||
#include "whd_bus_types.h"
|
||||
|
||||
|
||||
|
||||
|
@ -124,8 +124,7 @@ static const uint8_t whd_bus_gspi_command_mapping[] = { 0, 1 };
|
|||
struct whd_bus_priv
|
||||
{
|
||||
whd_spi_config_t spi_config;
|
||||
void *spi_obj;
|
||||
whd_spi_funcs_t *spi_ops;
|
||||
cyhal_spi_t *spi_obj;
|
||||
|
||||
};
|
||||
|
||||
|
@ -141,74 +140,17 @@ static whd_result_t whd_spi_download_firmware(whd_driver_t whd_driver);
|
|||
static whd_result_t whd_bus_spi_transfer_buffer(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction,
|
||||
whd_bus_function_t function, uint32_t address, whd_buffer_t buffer);
|
||||
|
||||
/******************************************************
|
||||
* SPI Logging
|
||||
* Enable this section for logging of SPI transfers
|
||||
* by changing "if 0" to "if 1"
|
||||
******************************************************/
|
||||
#if 0
|
||||
|
||||
#define GSPI_LOG_SIZE (110)
|
||||
#define SDIO_LOG_HEADER_SIZE (0) /*(0x30) */
|
||||
|
||||
typedef enum
|
||||
{
|
||||
UNUSED,
|
||||
LOG_TX,
|
||||
LOG_RX
|
||||
}gspi_log_direction_t;
|
||||
|
||||
typedef struct gSPI_log_entry_struct
|
||||
{
|
||||
gspi_log_direction_t direction;
|
||||
whd_bus_function_t function;
|
||||
uint32_t address;
|
||||
unsigned long time;
|
||||
unsigned long length;
|
||||
#if (SDIO_LOG_HEADER_SIZE != 0)
|
||||
unsigned char header[GSPI_LOG_HEADER_SIZE];
|
||||
#endif /* if ( SDIO_LOG_HEADER_SIZE != 0 ) */
|
||||
}gspi_log_entry_t;
|
||||
|
||||
static int next_gspi_log_pos = 0;
|
||||
static gspi_log_entry_t gspi_log_data[GSPI_LOG_SIZE];
|
||||
|
||||
static void add_log_entry(gspi_log_direction_t dir, whd_bus_function_t function, uint32_t address, unsigned long length,
|
||||
char *gspi_data)
|
||||
{
|
||||
UNUSED_PARAMETER(gspi_data);
|
||||
gspi_log_data[next_gspi_log_pos].direction = dir;
|
||||
gspi_log_data[next_gspi_log_pos].function = function;
|
||||
gspi_log_data[next_gspi_log_pos].address = address;
|
||||
cy_rtos_get_time(&gspi_log_data[next_gspi_log_pos].time);
|
||||
gspi_log_data[next_gspi_log_pos].length = length;
|
||||
#if (SDIO_LOG_HEADER_SIZE != 0)
|
||||
memcpy(gspi_log_data[next_gspi_log_pos].header, gspi_data,
|
||||
(length >= GSPI_LOG_HEADER_SIZE) ? GSPI_LOG_HEADER_SIZE : length);
|
||||
#endif /* if ( SDIO_LOG_HEADER_SIZE != 0 ) */
|
||||
next_gspi_log_pos++;
|
||||
if (next_gspi_log_pos >= GSPI_LOG_SIZE)
|
||||
{
|
||||
next_gspi_log_pos = 0;
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
#define add_log_entry(dir, function, address, length, gspi_data)
|
||||
#endif
|
||||
|
||||
/******************************************************
|
||||
* Global Function definitions
|
||||
******************************************************/
|
||||
|
||||
uint32_t whd_bus_spi_attach(whd_driver_t whd_driver, whd_spi_config_t *whd_spi_config, void *spi_obj,
|
||||
whd_spi_funcs_t *spi_ops)
|
||||
uint32_t whd_bus_spi_attach(whd_driver_t whd_driver, whd_spi_config_t *whd_spi_config, cyhal_spi_t *spi_obj)
|
||||
{
|
||||
struct whd_bus_info *whd_bus_info;
|
||||
|
||||
if ( (spi_ops == NULL) || (spi_ops->whd_enable_intr == NULL) || (spi_ops->whd_get_intr_config == NULL) )
|
||||
if (whd_driver->bus_priv->spi_config.oob_config.host_oob_pin == CYHAL_NC_PIN_VALUE)
|
||||
{
|
||||
WPRINT_WHD_ERROR( ("oob interrupt configuration is invalid in %s\n", __FUNCTION__) );
|
||||
WPRINT_WHD_ERROR( ("OOB interrupt pin argument must be provided in %s\n", __FUNCTION__) );
|
||||
return WHD_BADARG;
|
||||
}
|
||||
|
||||
|
@ -235,7 +177,6 @@ uint32_t whd_bus_spi_attach(whd_driver_t whd_driver, whd_spi_config_t *whd_spi_c
|
|||
/* Pass the SPI object to bus private spi_obj pointer */
|
||||
whd_driver->bus_priv->spi_obj = spi_obj;
|
||||
whd_driver->bus_priv->spi_config = *whd_spi_config;
|
||||
whd_driver->bus_priv->spi_ops = spi_ops;
|
||||
|
||||
whd_bus_info->whd_bus_init_fptr = whd_bus_spi_init;
|
||||
whd_bus_info->whd_bus_deinit_fptr = whd_bus_spi_deinit;
|
||||
|
@ -274,6 +215,20 @@ uint32_t whd_bus_spi_attach(whd_driver_t whd_driver, whd_spi_config_t *whd_spi_c
|
|||
return WHD_SUCCESS;
|
||||
}
|
||||
|
||||
void whd_bus_spi_detach(whd_driver_t whd_driver)
|
||||
{
|
||||
if (whd_driver->bus_if != NULL)
|
||||
{
|
||||
free(whd_driver->bus_if);
|
||||
whd_driver->bus_if = NULL;
|
||||
}
|
||||
if (whd_driver->bus_priv != NULL)
|
||||
{
|
||||
free(whd_driver->bus_priv);
|
||||
whd_driver->bus_priv = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
whd_result_t whd_bus_spi_send_buffer(whd_driver_t whd_driver, whd_buffer_t buffer)
|
||||
{
|
||||
whd_result_t result = whd_bus_spi_transfer_buffer(whd_driver, BUS_WRITE, WLAN_FUNCTION, 0, buffer);
|
||||
|
@ -350,7 +305,6 @@ static whd_result_t whd_bus_spi_transfer_buffer(whd_driver_t whd_driver, whd_bus
|
|||
}
|
||||
}
|
||||
|
||||
add_log_entry(LOG_TX, function, address, size, (char *)&gspi_header->data);
|
||||
}
|
||||
|
||||
transfer_size = (size_t)(newsize + sizeof(whd_bus_gspi_header_t) );
|
||||
|
@ -367,11 +321,6 @@ static whd_result_t whd_bus_spi_transfer_buffer(whd_driver_t whd_driver, whd_bus
|
|||
0, 0);
|
||||
}
|
||||
|
||||
if (direction == BUS_READ)
|
||||
{
|
||||
add_log_entry(LOG_RX, function, address, size, (char *)&gspi_header->data);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -511,15 +460,11 @@ whd_result_t whd_bus_spi_init(whd_driver_t whd_driver)
|
|||
uint32_t interrupt_polarity = 0;
|
||||
uint16_t chip_id;
|
||||
size_t transfer_size = 12;
|
||||
whd_intr_config_t config;
|
||||
whd_oob_config_t *config = &whd_driver->bus_priv->spi_config.oob_config;
|
||||
|
||||
whd_driver->bus_gspi_32bit = WHD_FALSE;
|
||||
|
||||
(*whd_driver->bus_priv->spi_ops->whd_get_intr_config)(whd_driver,
|
||||
whd_driver->bus_priv->spi_config.oob_intr,
|
||||
&config);
|
||||
|
||||
if (config.is_falling_edge == WHD_FALSE)
|
||||
if (config->is_falling_edge == WHD_FALSE)
|
||||
interrupt_polarity = INTERRUPT_POLARITY_HIGH;
|
||||
|
||||
whd_bus_init_backplane_window(whd_driver);
|
||||
|
@ -918,7 +863,6 @@ whd_result_t whd_bus_spi_transfer_bytes(whd_driver_t whd_driver, whd_bus_transfe
|
|||
return WHD_TIMEOUT;
|
||||
}
|
||||
|
||||
add_log_entry(LOG_TX, function, address, (unsigned long)size, (char *)&packet->data);
|
||||
}
|
||||
|
||||
transfer_size = (size_t)(newsize + sizeof(whd_bus_gspi_header_t) );
|
||||
|
@ -935,12 +879,6 @@ whd_result_t whd_bus_spi_transfer_bytes(whd_driver_t whd_driver, whd_bus_transfe
|
|||
0, 0);
|
||||
}
|
||||
|
||||
if (direction == BUS_READ)
|
||||
{
|
||||
add_log_entry(LOG_RX, function, address, (unsigned long)( (function == BACKPLANE_FUNCTION) ? size - 4 : size ),
|
||||
(function == BACKPLANE_FUNCTION) ? ( (char *)&packet->data ) + 4 : (char *)&packet->data);
|
||||
}
|
||||
|
||||
CHECK_RETURN(result);
|
||||
return WHD_SUCCESS;
|
||||
}
|
||||
|
@ -1056,22 +994,45 @@ uint32_t whd_bus_spi_get_max_transfer_size(whd_driver_t whd_driver)
|
|||
return WHD_BUS_SPI_MAX_BACKPLANE_TRANSFER_SIZE;
|
||||
}
|
||||
|
||||
void whd_bus_spi_oob_intr_asserted(whd_driver_t whd_driver)
|
||||
static void whd_bus_spi_oob_irq_handler(void *arg, cyhal_gpio_irq_event_t event)
|
||||
{
|
||||
whd_driver_t whd_driver = (whd_driver_t)arg;
|
||||
const whd_oob_config_t *config = &whd_driver->bus_priv->spi_config.oob_config;
|
||||
const cyhal_gpio_irq_event_t expected_event = (config->is_falling_edge == WHD_TRUE)
|
||||
? CYHAL_GPIO_IRQ_FALL : CYHAL_GPIO_IRQ_RISE;
|
||||
|
||||
if (event != expected_event)
|
||||
{
|
||||
WPRINT_WHD_ERROR( ("Unexpected interrupt event %d\n", event) );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* call thread notify to wake up WHD thread */
|
||||
whd_thread_notify_irq(whd_driver);
|
||||
}
|
||||
|
||||
/* XXX FIXME */
|
||||
#define WLAN_INTR_PRIORITY 1
|
||||
whd_result_t whd_bus_spi_irq_register(whd_driver_t whd_driver)
|
||||
{
|
||||
UNUSED_PARAMETER(whd_driver);
|
||||
const whd_oob_config_t *config = &whd_driver->bus_priv->spi_config.oob_config;
|
||||
|
||||
cyhal_gpio_init(config->host_oob_pin, CYHAL_GPIO_DIR_INPUT, CYHAL_GPIO_DRIVE_ANALOG, 0);
|
||||
cyhal_gpio_register_irq(config->host_oob_pin, WLAN_INTR_PRIORITY, whd_bus_spi_oob_irq_handler,
|
||||
whd_driver);
|
||||
|
||||
return WHD_TRUE;
|
||||
}
|
||||
|
||||
whd_result_t whd_bus_spi_irq_enable(whd_driver_t whd_driver, whd_bool_t enable)
|
||||
{
|
||||
const whd_variant_t oob_intr = whd_driver->bus_priv->spi_config.oob_intr;
|
||||
(*whd_driver->bus_priv->spi_ops->whd_enable_intr)(whd_driver, oob_intr, enable);
|
||||
const whd_oob_config_t *config = &whd_driver->bus_priv->spi_config.oob_config;
|
||||
const cyhal_gpio_irq_event_t event =
|
||||
(config->is_falling_edge == WHD_TRUE) ? CYHAL_GPIO_IRQ_FALL : CYHAL_GPIO_IRQ_RISE;
|
||||
|
||||
cyhal_gpio_irq_enable(config->host_oob_pin, event, (enable == WHD_TRUE) ? true : false);
|
||||
|
||||
return WHD_TRUE;
|
||||
}
|
||||
|
||||
|
|
|
@ -66,6 +66,7 @@ extern "C" {
|
|||
typedef struct whd_ap_int_info
|
||||
{
|
||||
whd_bool_t ap_is_up;
|
||||
whd_bool_t is_waiting_event;
|
||||
cy_semaphore_t whd_wifi_sleep_flag;
|
||||
|
||||
} whd_ap_int_info_t;
|
||||
|
|
|
@ -124,6 +124,7 @@ typedef struct whd_cdc_info
|
|||
******************************************************/
|
||||
|
||||
whd_result_t whd_cdc_bdc_info_init(whd_driver_t whd_driver);
|
||||
void whd_cdc_bdc_info_deinit(whd_driver_t whd_driver);
|
||||
|
||||
whd_result_t whd_cdc_send_iovar(whd_interface_t ifp, cdc_command_type_t type,
|
||||
whd_buffer_t send_buffer_hnd,
|
||||
|
|
|
@ -328,7 +328,7 @@ typedef struct whd_internal_info
|
|||
wlan_shared_t sh;
|
||||
uint32_t console_addr;
|
||||
whd_scan_result_callback_t scan_result_callback;
|
||||
whd_scan_result_t **whd_scan_result_ptr;
|
||||
whd_scan_result_t *whd_scan_result_ptr;
|
||||
/* The semaphore used to wait for completion of a join;
|
||||
* whd_wifi_join_halt uses this to release waiting threads (if any) */
|
||||
cy_semaphore_t *active_join_semaphore;
|
||||
|
|
|
@ -66,6 +66,7 @@ struct whd_interface
|
|||
whd_interface_role_t role;
|
||||
whd_mac_t mac_addr;
|
||||
uint8_t event_reg_list[WHD_EVENT_ENTRY_MAX];
|
||||
void (*whd_link_update_callback)(whd_interface_t ifp, whd_bool_t state_up);
|
||||
whd_bool_t state;
|
||||
};
|
||||
|
||||
|
|
|
@ -44,8 +44,8 @@ extern "C"
|
|||
uint32_t whd_resource_size(whd_driver_t whd_driver, whd_resource_type_t resource, uint32_t *size_out);
|
||||
uint32_t whd_get_resource_block_size(whd_driver_t whd_drv, whd_resource_type_t type, uint32_t *size_out);
|
||||
uint32_t whd_get_resource_no_of_blocks(whd_driver_t whd_drv, whd_resource_type_t type, uint32_t *block_count);
|
||||
uint32_t whd_get_resource_block(whd_driver_t whd_driver, whd_resource_type_t type, const uint8_t **data,
|
||||
uint32_t *size_out);
|
||||
uint32_t whd_get_resource_block(whd_driver_t whd_driver, whd_resource_type_t type,
|
||||
uint32_t blockno, const uint8_t **data, uint32_t *size_out);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /*extern "C" */
|
||||
|
|
|
@ -80,6 +80,7 @@ static const whd_event_num_t apsta_events[] = { WLC_E_IF, WLC_E_LINK, WLC_E_NONE
|
|||
void whd_ap_info_init(whd_driver_t whd_driver)
|
||||
{
|
||||
whd_driver->ap_info.ap_is_up = WHD_FALSE;
|
||||
whd_driver->ap_info.is_waiting_event = WHD_FALSE;
|
||||
}
|
||||
|
||||
void whd_wifi_set_ap_is_up(whd_driver_t whd_driver, whd_bool_t new_state)
|
||||
|
@ -164,20 +165,24 @@ static void *whd_handle_apsta_event(whd_interface_t ifp, const whd_event_header_
|
|||
const uint8_t *event_data, void *handler_user_data)
|
||||
{
|
||||
whd_driver_t whd_driver = ifp->whd_driver;
|
||||
whd_ap_int_info_t *ap;
|
||||
|
||||
UNUSED_PARAMETER(event_header);
|
||||
UNUSED_PARAMETER(event_data);
|
||||
UNUSED_PARAMETER(handler_user_data);
|
||||
|
||||
WHD_IOCTL_LOG_ADD_EVENT(whd_driver, event_header->event_type, event_header->flags, event_header->reason);
|
||||
ap = &whd_driver->ap_info;
|
||||
|
||||
if ( (event_header->event_type == (whd_event_num_t)WLC_E_LINK) ||
|
||||
(event_header->event_type == WLC_E_IF) )
|
||||
if (ap->is_waiting_event == WHD_TRUE)
|
||||
{
|
||||
whd_result_t result;
|
||||
result = cy_rtos_set_semaphore(&whd_driver->ap_info.whd_wifi_sleep_flag, WHD_FALSE);
|
||||
whd_assert("failed to post AP link semaphore", result == WHD_SUCCESS);
|
||||
REFERENCE_DEBUG_ONLY_VARIABLE(result);
|
||||
if ( (event_header->event_type == (whd_event_num_t)WLC_E_LINK) ||
|
||||
(event_header->event_type == WLC_E_IF) )
|
||||
{
|
||||
whd_result_t result;
|
||||
result = cy_rtos_set_semaphore(&ap->whd_wifi_sleep_flag, WHD_FALSE);
|
||||
whd_assert("failed to post AP link semaphore", result == WHD_SUCCESS);
|
||||
REFERENCE_DEBUG_ONLY_VARIABLE(result);
|
||||
}
|
||||
}
|
||||
return handler_user_data;
|
||||
}
|
||||
|
@ -276,7 +281,6 @@ uint32_t whd_wifi_init_ap(whd_interface_t ifp, whd_ssid_t *ssid, whd_security_t
|
|||
*data = htod32( (uint32_t)bss_index );
|
||||
}
|
||||
|
||||
|
||||
if ( (wlan_chip_id == 43340) || (wlan_chip_id == 43342) )
|
||||
{
|
||||
if (whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response) != WHD_SUCCESS)
|
||||
|
@ -293,6 +297,7 @@ uint32_t whd_wifi_init_ap(whd_interface_t ifp, whd_ssid_t *ssid, whd_security_t
|
|||
{
|
||||
CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) );
|
||||
whd_wifi_set_ap_is_up(whd_driver, WHD_TRUE);
|
||||
ap->is_waiting_event = WHD_FALSE;
|
||||
return WHD_SUCCESS;
|
||||
}
|
||||
else
|
||||
|
@ -316,6 +321,7 @@ uint32_t whd_wifi_init_ap(whd_interface_t ifp, whd_ssid_t *ssid, whd_security_t
|
|||
{
|
||||
CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) );
|
||||
whd_wifi_set_ap_is_up(whd_driver, WHD_TRUE);
|
||||
ap->is_waiting_event = WHD_FALSE;
|
||||
return WHD_SUCCESS;
|
||||
}
|
||||
else
|
||||
|
@ -326,16 +332,25 @@ uint32_t whd_wifi_init_ap(whd_interface_t ifp, whd_ssid_t *ssid, whd_security_t
|
|||
|
||||
CHECK_RETURN(cy_rtos_init_semaphore(&ap->whd_wifi_sleep_flag, 1, 0) );
|
||||
|
||||
ap->is_waiting_event = WHD_TRUE;
|
||||
/* Register for interested events */
|
||||
CHECK_RETURN_WITH_SEMAPHORE(whd_management_set_event_handler(ifp, apsta_events, whd_handle_apsta_event,
|
||||
NULL, &event_entry), &ap->whd_wifi_sleep_flag);
|
||||
if (event_entry >= WHD_EVENT_HANDLER_LIST_SIZE)
|
||||
{
|
||||
WPRINT_WHD_DEBUG( ("Event handler registration failed for AP events in function %s and line %d\n", __func__,
|
||||
__LINE__) );
|
||||
WPRINT_WHD_DEBUG( ("Event handler registration failed for AP events in function %s and line %d\n",
|
||||
__func__, __LINE__) );
|
||||
return WHD_UNFINISHED;
|
||||
}
|
||||
ifp->event_reg_list[WHD_AP_EVENT_ENTRY] = event_entry;
|
||||
|
||||
if (wait_for_interface == WHD_TRUE)
|
||||
{
|
||||
CHECK_RETURN_WITH_SEMAPHORE(cy_rtos_get_semaphore(&ap->whd_wifi_sleep_flag, (uint32_t)10000,
|
||||
WHD_FALSE), &ap->whd_wifi_sleep_flag);
|
||||
}
|
||||
ap->is_waiting_event = WHD_FALSE;
|
||||
|
||||
if (prim_ifp == ifp)
|
||||
{
|
||||
/* Set AP mode */
|
||||
|
@ -394,15 +409,6 @@ uint32_t whd_wifi_init_ap(whd_interface_t ifp, whd_ssid_t *ssid, whd_security_t
|
|||
CHECK_RETURN_WITH_SEMAPHORE(whd_cdc_send_iovar(prim_ifp, CDC_SET, buffer, 0), &ap->whd_wifi_sleep_flag);
|
||||
}
|
||||
|
||||
if ( (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) )
|
||||
{
|
||||
/* Check if we need to wait for interface to be created */
|
||||
if (wait_for_interface == WHD_TRUE)
|
||||
{
|
||||
CHECK_RETURN_WITH_SEMAPHORE(cy_rtos_get_semaphore(&ap->whd_wifi_sleep_flag, (uint32_t)10000,
|
||||
WHD_FALSE), &ap->whd_wifi_sleep_flag);
|
||||
}
|
||||
}
|
||||
/* Set the channel */
|
||||
data = (uint32_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, (uint16_t)4);
|
||||
CHECK_IOCTL_BUFFER_WITH_SEMAPHORE(data, &ap->whd_wifi_sleep_flag);
|
||||
|
@ -599,6 +605,7 @@ uint32_t whd_wifi_start_ap(whd_interface_t ifp)
|
|||
/* Get the Chip Number */
|
||||
wlan_chip_id = whd_chip_get_chip_id(whd_driver);
|
||||
|
||||
ap->is_waiting_event = WHD_TRUE;
|
||||
data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)8, IOVAR_STR_BSS);
|
||||
CHECK_IOCTL_BUFFER_WITH_SEMAPHORE(data, &ap->whd_wifi_sleep_flag);
|
||||
|
||||
|
@ -617,6 +624,7 @@ uint32_t whd_wifi_start_ap(whd_interface_t ifp)
|
|||
/* Wait until AP is brought up */
|
||||
CHECK_RETURN_WITH_SEMAPHORE(cy_rtos_get_semaphore(&ap->whd_wifi_sleep_flag, (uint32_t)10000,
|
||||
WHD_FALSE), &ap->whd_wifi_sleep_flag);
|
||||
ap->is_waiting_event = WHD_FALSE;
|
||||
|
||||
whd_wifi_set_ap_is_up(whd_driver, WHD_TRUE);
|
||||
return WHD_SUCCESS;
|
||||
|
@ -631,6 +639,7 @@ uint32_t whd_wifi_stop_ap(whd_interface_t ifp)
|
|||
whd_result_t result2;
|
||||
whd_interface_t prim_ifp;
|
||||
whd_driver_t whd_driver;
|
||||
whd_ap_int_info_t *ap;
|
||||
|
||||
CHECK_IFP_NULL(ifp);
|
||||
|
||||
|
@ -638,6 +647,8 @@ uint32_t whd_wifi_stop_ap(whd_interface_t ifp)
|
|||
|
||||
CHECK_DRIVER_NULL(whd_driver);
|
||||
|
||||
ap = &whd_driver->ap_info;
|
||||
|
||||
prim_ifp = whd_get_primary_interface(whd_driver);
|
||||
|
||||
if (prim_ifp == NULL)
|
||||
|
@ -682,6 +693,7 @@ uint32_t whd_wifi_stop_ap(whd_interface_t ifp)
|
|||
|
||||
CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) );
|
||||
|
||||
ap->is_waiting_event = WHD_TRUE;
|
||||
/* set BSS down */
|
||||
if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43362) || (wlan_chip_id == 43455) || (wlan_chip_id == 43430) )
|
||||
{
|
||||
|
@ -701,8 +713,9 @@ uint32_t whd_wifi_stop_ap(whd_interface_t ifp)
|
|||
}
|
||||
|
||||
/* Wait until AP is brought down */
|
||||
result = cy_rtos_get_semaphore(&whd_driver->ap_info.whd_wifi_sleep_flag, (uint32_t)10000, WHD_FALSE);
|
||||
result2 = cy_rtos_deinit_semaphore(&whd_driver->ap_info.whd_wifi_sleep_flag);
|
||||
result = cy_rtos_get_semaphore(&ap->whd_wifi_sleep_flag, (uint32_t)10000, WHD_FALSE);
|
||||
ap->is_waiting_event = WHD_FALSE;
|
||||
result2 = cy_rtos_deinit_semaphore(&ap->whd_wifi_sleep_flag);
|
||||
if (result != WHD_SUCCESS)
|
||||
{
|
||||
WPRINT_WHD_ERROR( ("Error getting a semaphore, %s failed at %d \n", __func__, __LINE__) );
|
||||
|
@ -716,10 +729,10 @@ uint32_t whd_wifi_stop_ap(whd_interface_t ifp)
|
|||
|
||||
/* Disable AP mode */
|
||||
data = (uint32_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, (uint16_t)4);
|
||||
CHECK_IOCTL_BUFFER_WITH_SEMAPHORE(data, &whd_driver->ap_info.whd_wifi_sleep_flag);
|
||||
CHECK_IOCTL_BUFFER_WITH_SEMAPHORE(data, &ap->whd_wifi_sleep_flag);
|
||||
*data = 0; /* Turn off AP */
|
||||
CHECK_RETURN_WITH_SEMAPHORE(whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_AP, buffer, 0),
|
||||
&whd_driver->ap_info.whd_wifi_sleep_flag);
|
||||
&ap->whd_wifi_sleep_flag);
|
||||
|
||||
CHECK_RETURN(whd_wifi_deregister_event_handler(ifp, ifp->event_reg_list[WHD_AP_EVENT_ENTRY]) );
|
||||
ifp->event_reg_list[WHD_AP_EVENT_ENTRY] = WHD_EVENT_NOT_REGISTERED;
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <limits.h>
|
||||
#include "whd_int.h"
|
||||
#include "whd_cdc_bdc.h"
|
||||
#include "whd_events_int.h"
|
||||
|
@ -93,6 +94,20 @@ static uint8_t whd_map_dscp_to_priority(whd_driver_t whd_driver, uint8_t val)
|
|||
return dscp_to_wmm_qos[dscp_val];
|
||||
}
|
||||
|
||||
void whd_cdc_bdc_info_deinit(whd_driver_t whd_driver)
|
||||
{
|
||||
whd_cdc_bdc_info_t *cdc_bdc_info = &whd_driver->cdc_bdc_info;
|
||||
|
||||
/* Delete the sleep mutex */
|
||||
(void)cy_rtos_deinit_semaphore(&cdc_bdc_info->ioctl_sleep);
|
||||
|
||||
/* Delete the queue mutex. */
|
||||
(void)cy_rtos_deinit_semaphore(&cdc_bdc_info->ioctl_mutex);
|
||||
|
||||
/* Delete the event list management mutex */
|
||||
(void)cy_rtos_deinit_semaphore(&cdc_bdc_info->event_list_mutex);
|
||||
}
|
||||
|
||||
whd_result_t whd_cdc_bdc_info_init(whd_driver_t whd_driver)
|
||||
{
|
||||
whd_cdc_bdc_info_t *cdc_bdc_info = &whd_driver->cdc_bdc_info;
|
||||
|
@ -169,6 +184,13 @@ whd_result_t whd_cdc_send_ioctl(whd_interface_t ifp, cdc_command_type_t type, ui
|
|||
whd_driver_t whd_driver = ifp->whd_driver;
|
||||
whd_cdc_bdc_info_t *cdc_bdc_info = &whd_driver->cdc_bdc_info;
|
||||
|
||||
/* Validate the command value */
|
||||
if (command > INT_MAX)
|
||||
{
|
||||
WPRINT_WHD_ERROR( ("The ioctl command value is invalid\n") );
|
||||
return WHD_BADARG;
|
||||
}
|
||||
|
||||
/* Acquire mutex which prevents multiple simultaneous IOCTLs */
|
||||
retval = cy_rtos_get_semaphore(&cdc_bdc_info->ioctl_mutex, CY_RTOS_NEVER_TIMEOUT, WHD_FALSE);
|
||||
if (retval != WHD_SUCCESS)
|
||||
|
|
|
@ -39,7 +39,7 @@ uint16_t whd_chip_get_chip_id(whd_driver_t whd_driver)
|
|||
|
||||
uint32_t get_whd_var(whd_driver_t whd_driver, chip_var_t var)
|
||||
{
|
||||
uint32_t val;
|
||||
uint32_t val = 0;
|
||||
|
||||
uint16_t wlan_chip_id = whd_chip_get_chip_id(whd_driver);
|
||||
switch (var)
|
||||
|
|
|
@ -105,19 +105,18 @@ whd_result_t whd_process_clm_data(whd_interface_t ifp)
|
|||
transfer_progress = 0;
|
||||
for (i = 0; i < blocks_count; i++)
|
||||
{
|
||||
whd_get_resource_block(whd_driver, WHD_RESOURCE_WLAN_CLM, (const uint8_t **)&image, &size_read);
|
||||
whd_get_resource_block(whd_driver, WHD_RESOURCE_WLAN_CLM, i, (const uint8_t **)&image, &size_read);
|
||||
|
||||
num_buff = (size_read + BLOCK_SIZE - 1) / BLOCK_SIZE;
|
||||
if (blocks_count != 1)
|
||||
transfer_progress = 0;
|
||||
|
||||
if (size_read >= BLOCK_SIZE)
|
||||
chunk_len = BLOCK_SIZE;
|
||||
else
|
||||
chunk_len = (int)size_read;
|
||||
|
||||
for (j = 0; j < num_buff; j++)
|
||||
{
|
||||
if (size_read >= BLOCK_SIZE)
|
||||
chunk_len = BLOCK_SIZE;
|
||||
else
|
||||
chunk_len = (int)size_read;
|
||||
memcpy(chunk_buf + data_offset, &image[transfer_progress], chunk_len);
|
||||
|
||||
if (datalen + chunk_len == clm_blob_size)
|
||||
|
|
|
@ -81,19 +81,18 @@ static uint8_t whd_find_number_of_events(const whd_event_num_t *event_nums)
|
|||
* This function registers a callback handler to be notified when
|
||||
* a particular event is received.
|
||||
*
|
||||
* Alternately the function clears callbacks for given event type.
|
||||
* @note : Currently there is a limit to the number of simultaneously
|
||||
* registered events
|
||||
*
|
||||
* @note : Currently each event may only be registered to one handler
|
||||
* and there is a limit to the number of simultaneously registered
|
||||
* events
|
||||
*
|
||||
* @param event_nums An array of event types that is to trigger the handler. The array must be terminated with a WLC_E_NONE event
|
||||
* See @ref whd_event_num_t for available events
|
||||
* @param handler_func A function pointer to the new handler callback,
|
||||
* or NULL if callbacks are to be disabled for the given event type
|
||||
* @param handler_user_data A pointer value which will be passed to the event handler function
|
||||
* @param ifp Pointer to handle instance of whd interface
|
||||
* @param event_nums An array of event types that is to trigger the handler.
|
||||
* The array must be terminated with a WLC_E_NONE event
|
||||
* See @ref whd_event_num_t for available events
|
||||
* @param handler_func A function pointer to the new handler callback,
|
||||
* or NULL if callbacks are to be disabled for the given event type
|
||||
* @param handler_user_data A pointer value which will be passed to the event handler function
|
||||
* at the time an event is triggered (NULL is allowed)
|
||||
* @param interface The interface to set the handler for.
|
||||
* @param[out] *event_index entry where the event handler is registered in the list
|
||||
*
|
||||
* @return WHD result code
|
||||
*/
|
||||
|
@ -246,20 +245,18 @@ static uint8_t *whd_management_alloc_event_msgs_buffer(whd_interface_t ifp, whd_
|
|||
* This function registers a callback handler to be notified when
|
||||
* a particular event is received.
|
||||
*
|
||||
* Alternately the function clears callbacks for given event type.
|
||||
* @note : Currently there is a limit to the number of simultaneously
|
||||
* registered events
|
||||
*
|
||||
* @note : Currently each event may only be registered to one handler
|
||||
* and there is a limit to the number of simultaneously registered
|
||||
* events
|
||||
*
|
||||
* @param event_nums An array of event types that is to trigger the handler.
|
||||
* The array must be terminated with a WLC_E_NONE event
|
||||
* See @ref whd_event_num_t for available events
|
||||
* @param handler_func A function pointer to the new handler callback,
|
||||
* or NULL if callbacks are to be disabled for the given event type
|
||||
* @param handler_user_data A pointer value which will be passed to the event handler function
|
||||
* @param ifp Pointer to handle instance of whd interface
|
||||
* @param event_nums An array of event types that is to trigger the handler.
|
||||
* The array must be terminated with a WLC_E_NONE event
|
||||
* See @ref whd_event_num_t for available events
|
||||
* @param handler_func A function pointer to the new handler callback,
|
||||
* or NULL if callbacks are to be disabled for the given event type
|
||||
* @param handler_user_data A pointer value which will be passed to the event handler function
|
||||
* at the time an event is triggered (NULL is allowed)
|
||||
* @param interface The interface to set the handler for.
|
||||
* @param[out] *event_index entry where the event handler is registered in the list
|
||||
*
|
||||
* @return WHD result code
|
||||
*/
|
||||
|
|
|
@ -168,26 +168,28 @@ uint32_t whd_deinit(whd_interface_t ifp)
|
|||
uint8_t i;
|
||||
whd_driver_t whd_driver = ifp->whd_driver;
|
||||
|
||||
if (whd_driver->internal_info.whd_wlan_status.state != WLAN_UP)
|
||||
if (whd_driver->internal_info.whd_wlan_status.state == WLAN_UP)
|
||||
{
|
||||
WPRINT_WHD_INFO( ("wlan_status: already down.\n") );
|
||||
return WHD_INTERFACE_NOT_UP;
|
||||
CHECK_RETURN(whd_wifi_set_ioctl_buffer(ifp, WLC_DOWN, NULL, 0) );
|
||||
whd_driver->internal_info.whd_wlan_status.state = WLAN_DOWN;
|
||||
}
|
||||
|
||||
/* Send DOWN command */
|
||||
CHECK_RETURN(whd_wifi_set_ioctl_buffer(ifp, WLC_DOWN, NULL, 0) );
|
||||
|
||||
/* Update wlan status */
|
||||
whd_driver->internal_info.whd_wlan_status.state = WLAN_DOWN;
|
||||
|
||||
for (i = 0; i < WHD_INTERFACE_MAX; i++)
|
||||
{
|
||||
if (whd_driver->iflist[i] != NULL)
|
||||
{
|
||||
free(whd_driver->iflist[i]);
|
||||
whd_driver->iflist[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
whd_cdc_bdc_info_deinit(whd_driver);
|
||||
whd_bus_common_info_deinit(whd_driver);
|
||||
#ifdef WLAN_BUS_TYPE_SDIO
|
||||
whd_bus_sdio_detach(whd_driver);
|
||||
#endif
|
||||
#ifdef WLAN_BUS_TYPE_SPI
|
||||
whd_bus_spi_detach(whd_driver);
|
||||
#endif
|
||||
free(whd_driver);
|
||||
|
||||
return WHD_SUCCESS;
|
||||
|
|
|
@ -85,13 +85,13 @@ uint32_t whd_get_resource_no_of_blocks(whd_driver_t whd_driver, whd_resource_typ
|
|||
return WHD_WLAN_NOFUNCTION;
|
||||
}
|
||||
|
||||
uint32_t whd_get_resource_block(whd_driver_t whd_driver, whd_resource_type_t type, const uint8_t **data,
|
||||
uint32_t *size_out)
|
||||
uint32_t whd_get_resource_block(whd_driver_t whd_driver, whd_resource_type_t type,
|
||||
uint32_t blockno, const uint8_t **data, uint32_t *size_out)
|
||||
{
|
||||
|
||||
if (whd_driver->resource_if->whd_get_resource_block)
|
||||
{
|
||||
return whd_driver->resource_if->whd_get_resource_block(whd_driver, type, data, size_out);
|
||||
return whd_driver->resource_if->whd_get_resource_block(whd_driver, type, blockno, data, size_out);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -260,21 +260,11 @@ void whd_sdpcm_bus_vars_init(whd_driver_t whd_driver)
|
|||
void whd_sdpcm_quit(whd_driver_t whd_driver)
|
||||
{
|
||||
whd_sdpcm_info_t *sdpcm_info = &whd_driver->sdpcm_info;
|
||||
whd_cdc_bdc_info_t *cdc_bdc_info = &whd_driver->cdc_bdc_info;
|
||||
whd_result_t result;
|
||||
|
||||
/* Delete the sleep mutex */
|
||||
(void)cy_rtos_deinit_semaphore(&cdc_bdc_info->ioctl_sleep); /* Ignore return - not much can be done about failure */
|
||||
|
||||
/* Delete the queue mutex. */
|
||||
(void)cy_rtos_deinit_semaphore(&cdc_bdc_info->ioctl_mutex); /* Ignore return - not much can be done about failure */
|
||||
|
||||
/* Delete the SDPCM queue mutex */
|
||||
(void)cy_rtos_deinit_semaphore(&sdpcm_info->send_queue_mutex); /* Ignore return - not much can be done about failure */
|
||||
|
||||
/* Delete the event list management mutex */
|
||||
(void)cy_rtos_deinit_semaphore(&cdc_bdc_info->event_list_mutex); /* Ignore return - not much can be done about failure */
|
||||
|
||||
/* Free any left over packets in the queue */
|
||||
while (sdpcm_info->send_queue_head != NULL)
|
||||
{
|
||||
|
|
|
@ -212,23 +212,25 @@ int8_t whd_thread_poll_all(whd_driver_t whd_driver)
|
|||
*/
|
||||
void whd_thread_quit(whd_driver_t whd_driver)
|
||||
{
|
||||
whd_thread_info_t *thread_info = &whd_driver->thread_info;
|
||||
whd_result_t result;
|
||||
|
||||
/* signal main thread and wake it */
|
||||
whd_driver->thread_info.thread_quit_flag = WHD_TRUE;
|
||||
result = cy_rtos_set_semaphore(&whd_driver->thread_info.transceive_semaphore, WHD_FALSE);
|
||||
thread_info->thread_quit_flag = WHD_TRUE;
|
||||
result = cy_rtos_set_semaphore(&thread_info->transceive_semaphore, WHD_FALSE);
|
||||
if (result == WHD_SUCCESS)
|
||||
{
|
||||
/* Wait for the WHD thread to end */
|
||||
cy_rtos_join_thread(&whd_driver->thread_info.whd_thread);
|
||||
|
||||
/* Ignore return - not much can be done about failure */
|
||||
(void)cy_rtos_terminate_thread(&whd_driver->thread_info.whd_thread);
|
||||
cy_rtos_join_thread(&thread_info->whd_thread);
|
||||
}
|
||||
else
|
||||
{
|
||||
WPRINT_WHD_ERROR( ("Error setting semaphore in %s at %d \n", __func__, __LINE__) );
|
||||
}
|
||||
|
||||
/* Delete the semaphore */
|
||||
/* Ignore return - not much can be done about failure */
|
||||
(void)cy_rtos_deinit_semaphore(&thread_info->transceive_semaphore);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -334,22 +336,11 @@ static void whd_thread_func(whd_thread_arg_t thread_input)
|
|||
/* Reset the quit flag */
|
||||
thread_info->thread_quit_flag = WHD_FALSE;
|
||||
|
||||
/* Delete the semaphore */
|
||||
/* Ignore return - not much can be done about failure */
|
||||
(void)cy_rtos_deinit_semaphore(&thread_info->transceive_semaphore);
|
||||
|
||||
whd_sdpcm_quit(whd_driver);
|
||||
|
||||
WPRINT_WHD_DATA_LOG( ("Stopped whd Thread\n") );
|
||||
|
||||
if (WHD_SUCCESS != cy_rtos_join_thread(&thread_info->whd_thread) )
|
||||
{
|
||||
WPRINT_WHD_ERROR( ("Could not join WHD thread\n") );
|
||||
}
|
||||
|
||||
if (WHD_SUCCESS != cy_rtos_terminate_thread(&thread_info->whd_thread) )
|
||||
{
|
||||
WPRINT_WHD_ERROR( ("Could not close WHD thread\n") );
|
||||
}
|
||||
/* Ignore return - not much can be done about failure */
|
||||
(void)cy_rtos_exit_thread();
|
||||
}
|
||||
|
||||
|
|
|
@ -749,6 +749,8 @@ static void *whd_wifi_join_events_handler(whd_interface_t ifp, const whd_event_h
|
|||
case WLC_E_DISASSOC_IND:
|
||||
whd_driver->internal_info.whd_join_status[event_header->bsscfgidx] &=
|
||||
~(JOIN_AUTHENTICATED | JOIN_LINK_READY);
|
||||
if (ifp->whd_link_update_callback != NULL)
|
||||
ifp->whd_link_update_callback(ifp, WHD_FALSE);
|
||||
break;
|
||||
|
||||
case WLC_E_AUTH:
|
||||
|
@ -922,6 +924,8 @@ static void *whd_wifi_join_events_handler(whd_interface_t ifp, const whd_event_h
|
|||
if (whd_wifi_is_ready_to_transceive(ifp) == WHD_SUCCESS)
|
||||
{
|
||||
join_attempt_complete = WHD_TRUE;
|
||||
if (ifp->whd_link_update_callback != NULL)
|
||||
ifp->whd_link_update_callback(ifp, WHD_TRUE);
|
||||
}
|
||||
|
||||
if (join_attempt_complete == WHD_TRUE)
|
||||
|
@ -1419,6 +1423,12 @@ uint32_t whd_wifi_join_specific(whd_interface_t ifp, const whd_scan_result_t *ap
|
|||
return WHD_BADARG;
|
||||
}
|
||||
|
||||
if ( (ap->SSID.length == 0) || (ap->SSID.length > (size_t)SSID_NAME_SIZE) )
|
||||
{
|
||||
WPRINT_WHD_ERROR( ("%s: failure: SSID length error\n", __func__) );
|
||||
return WHD_WLAN_BADSSIDLEN;
|
||||
}
|
||||
|
||||
CHECK_RETURN(cy_rtos_init_semaphore(&join_semaphore, 1, 0) );
|
||||
result = whd_wifi_active_join_init(ifp, security, security_key, key_length, &join_semaphore);
|
||||
|
||||
|
@ -1548,11 +1558,18 @@ uint32_t whd_wifi_join(whd_interface_t ifp, const whd_ssid_t *ssid, whd_security
|
|||
|
||||
CHECK_DRIVER_NULL(whd_driver);
|
||||
|
||||
if (ssid->length > (size_t)SSID_NAME_SIZE)
|
||||
if (ssid == NULL)
|
||||
{
|
||||
WPRINT_WHD_ERROR( ("%s: failure: SSID too long\n", __func__) );
|
||||
WPRINT_WHD_ERROR( ("%s: failure: ssid is null\n", __func__) );
|
||||
return WHD_BADARG;
|
||||
}
|
||||
|
||||
if ( (ssid->length == 0) || (ssid->length > (size_t)SSID_NAME_SIZE) )
|
||||
{
|
||||
WPRINT_WHD_ERROR( ("%s: failure: SSID length error\n", __func__) );
|
||||
return WHD_WLAN_BADSSIDLEN;
|
||||
}
|
||||
|
||||
/* Keep WLAN awake while joining */
|
||||
WHD_WLAN_KEEP_AWAKE(whd_driver);
|
||||
ifp->role = WHD_STA_ROLE;
|
||||
|
@ -1611,6 +1628,8 @@ uint32_t whd_wifi_leave(whd_interface_t ifp)
|
|||
}
|
||||
|
||||
whd_driver->internal_info.whd_join_status[ifp->bsscfgidx] = 0;
|
||||
if (ifp->whd_link_update_callback != NULL)
|
||||
ifp->whd_link_update_callback(ifp, WHD_FALSE);
|
||||
ifp->role = WHD_INVALID_ROLE;
|
||||
return WHD_SUCCESS;
|
||||
}
|
||||
|
@ -1685,13 +1704,6 @@ static void *whd_wifi_scan_events_handler(whd_interface_t ifp, const whd_event_h
|
|||
version = dtoh32(WHD_READ_32(&bss_info->version) );
|
||||
whd_minor_assert("wl_bss_info_t has wrong version", version == WL_BSS_INFO_VERSION);
|
||||
|
||||
if (whd_driver->internal_info.whd_scan_result_ptr == NULL)
|
||||
{
|
||||
whd_driver->internal_info.scan_result_callback( (whd_scan_result_t **)event_data, handler_user_data,
|
||||
WHD_SCAN_INCOMPLETE );
|
||||
return handler_user_data;
|
||||
}
|
||||
|
||||
/* PNO bss info doesn't contain the correct bss info version */
|
||||
if (version != WL_BSS_INFO_VERSION)
|
||||
{
|
||||
|
@ -1721,7 +1733,7 @@ static void *whd_wifi_scan_events_handler(whd_interface_t ifp, const whd_event_h
|
|||
}
|
||||
|
||||
/* Safe to access *whd_scan_result_ptr, as whd_scan_result_ptr == NULL case is handled above */
|
||||
record = (whd_scan_result_t *)(*whd_driver->internal_info.whd_scan_result_ptr);
|
||||
record = (whd_scan_result_t *)(whd_driver->internal_info.whd_scan_result_ptr);
|
||||
|
||||
/*
|
||||
* Totally ignore off channel results. This can only happen with DSSS (1 and 2 Mb). It is better to
|
||||
|
@ -1995,13 +2007,16 @@ static void *whd_wifi_scan_events_handler(whd_interface_t ifp, const whd_event_h
|
|||
CHANSPEC_BAND_MASK) ) ==
|
||||
GET_C_VAR(whd_driver, CHANSPEC_BAND_2G) ? WHD_802_11_BAND_2_4GHZ : WHD_802_11_BAND_5GHZ );
|
||||
|
||||
whd_driver->internal_info.scan_result_callback(whd_driver->internal_info.whd_scan_result_ptr, handler_user_data,
|
||||
whd_driver->internal_info.scan_result_callback(&whd_driver->internal_info.whd_scan_result_ptr, handler_user_data,
|
||||
WHD_SCAN_INCOMPLETE);
|
||||
if (*whd_driver->internal_info.whd_scan_result_ptr == NULL)
|
||||
|
||||
/* whd_driver->internal_info.scan_result_callback() can make whd_scan_result_ptr to NULL */
|
||||
if (whd_driver->internal_info.whd_scan_result_ptr == NULL)
|
||||
{
|
||||
#if 0
|
||||
whd_management_set_event_handler(scan_events, NULL, NULL);
|
||||
#endif /* if 0 */
|
||||
whd_driver->internal_info.scan_result_callback(NULL, handler_user_data, WHD_SCAN_ABORTED);
|
||||
whd_driver->internal_info.scan_result_callback = NULL;
|
||||
whd_wifi_deregister_event_handler(ifp, ifp->event_reg_list[WHD_SCAN_EVENT_ENTRY]);
|
||||
ifp->event_reg_list[WHD_SCAN_EVENT_ENTRY] = WHD_EVENT_NOT_REGISTERED;
|
||||
}
|
||||
|
||||
return handler_user_data;
|
||||
|
@ -2106,7 +2121,7 @@ uint32_t whd_wifi_scan_synch(whd_interface_t ifp,
|
|||
memset(scan_result_ptr, 0, sizeof(whd_scan_result_t) );
|
||||
|
||||
if (whd_wifi_scan(ifp, WHD_SCAN_TYPE_ACTIVE, WHD_BSS_TYPE_ANY, NULL, NULL, NULL, NULL,
|
||||
handler, (whd_scan_result_t **)&scan_result_ptr, &scan_userdata) != WHD_SUCCESS)
|
||||
handler, (whd_scan_result_t *)scan_result_ptr, &scan_userdata) != WHD_SUCCESS)
|
||||
{
|
||||
WPRINT_WHD_INFO( ("Failed scan \n") );
|
||||
goto error;
|
||||
|
@ -2153,7 +2168,7 @@ uint32_t whd_wifi_scan(whd_interface_t ifp,
|
|||
const uint16_t *optional_channel_list,
|
||||
const whd_scan_extended_params_t *optional_extended_params,
|
||||
whd_scan_result_callback_t callback,
|
||||
whd_scan_result_t **result_ptr,
|
||||
whd_scan_result_t *result_ptr,
|
||||
void *user_data
|
||||
)
|
||||
{
|
||||
|
@ -2166,6 +2181,11 @@ uint32_t whd_wifi_scan(whd_interface_t ifp,
|
|||
|
||||
whd_assert("Bad args", callback != NULL);
|
||||
|
||||
if ( (result_ptr == NULL) || (callback == NULL) )
|
||||
{
|
||||
return WHD_BADARG;
|
||||
}
|
||||
|
||||
if (!( (scan_type == WHD_SCAN_TYPE_ACTIVE) || (scan_type == WHD_SCAN_TYPE_PASSIVE) ||
|
||||
(scan_type == WHD_SCAN_TYPE_PROHIBITED_CHANNELS) || (scan_type == WHD_SCAN_TYPE_NO_BSSID_FILTER) ) )
|
||||
return WHD_BADARG;
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#include "cybsp_api_wifi.h"
|
||||
#include "cy_network_buffer.h"
|
||||
#include "cmsis_os2.h"
|
||||
#include "whd_bus_types.h"
|
||||
#include "whd_types.h"
|
||||
#include "cyhal.h"
|
||||
#include "cyhal_implementation.h"
|
||||
|
||||
|
@ -45,6 +45,10 @@ extern "C" {
|
|||
#define SDIO_RETRY_DELAY_MS 1
|
||||
#define SDIO_BUS_LEVEL_MAX_RETRIES 5
|
||||
|
||||
#if !defined(CY_WIFI_OOB_INTR_PRIORITY)
|
||||
#define CY_WIFI_OOB_INTR_PRIORITY 2
|
||||
#endif/* !defined(CY_WIFI_OOB_INTR_PRIORITY) */
|
||||
|
||||
/* Determine whether to use the SDIO oob interrupt.
|
||||
* When CY_SDIO_BUS_NEEDS_OOB_INTR is defined,
|
||||
* use its value to determine enable status; otherwise,
|
||||
|
@ -103,9 +107,6 @@ whd_driver_t whd_drv;
|
|||
bool sdio_initialized = false;
|
||||
cyhal_sdio_t sdio_obj;
|
||||
|
||||
static void cy_enable_oob_intr(whd_driver_t whd_driver, const whd_variant_t intr, whd_bool_t whd_enable);
|
||||
static void cy_get_intr_config(whd_driver_t whd_driver, const whd_variant_t intr, whd_intr_config_t *config);
|
||||
|
||||
static whd_buffer_funcs_t buffer_ops =
|
||||
{
|
||||
.whd_host_buffer_get = cy_host_buffer_get,
|
||||
|
@ -121,21 +122,9 @@ static whd_netif_funcs_t netif_ops =
|
|||
.whd_network_process_ethernet_data = cy_network_process_ethernet_data,
|
||||
};
|
||||
|
||||
static whd_sdio_funcs_t sdio_ops =
|
||||
{
|
||||
.whd_enable_intr = cy_enable_oob_intr,
|
||||
.whd_get_intr_config = cy_get_intr_config,
|
||||
};
|
||||
|
||||
//TODO: Need to use resource implemenatation from abstraction layer.
|
||||
extern whd_resource_source_t resource_ops;
|
||||
|
||||
static void whd_wake_host_irq_handler(void *arg, cyhal_gpio_irq_event_t event)
|
||||
{
|
||||
//TODO: Swtich out from deep sleep or LP mode.
|
||||
whd_bus_sdio_oob_intr_asserted(arg);
|
||||
}
|
||||
|
||||
static cy_rslt_t sdio_try_send_cmd(const cyhal_sdio_t *sdio_object, cyhal_transfer_t direction, \
|
||||
cyhal_sdio_command_t command, uint32_t argument, uint32_t* response)
|
||||
{
|
||||
|
@ -223,22 +212,24 @@ static void deinit_sdio_whd(void)
|
|||
|
||||
static cy_rslt_t init_sdio_bus(void)
|
||||
{
|
||||
whd_sdio_config_t whd_sdio_config;
|
||||
cyhal_sdio_cfg_t config;
|
||||
|
||||
cy_rslt_t result = cybsp_sdio_enumerate(&sdio_obj);
|
||||
|
||||
if(result == CY_RSLT_SUCCESS)
|
||||
{
|
||||
whd_sdio_config.flags = 0;
|
||||
whd_sdio_config_t whd_sdio_config;
|
||||
whd_oob_config_t oob_config;
|
||||
cyhal_sdio_cfg_t config;
|
||||
|
||||
oob_config.host_oob_pin = CY_WIFI_HOST_WAKE_GPIO;
|
||||
oob_config.dev_gpio_sel = DEFAULT_OOB_PIN;
|
||||
oob_config.is_falling_edge = (CY_WIFI_HOST_WAKE_IRQ_EVENT == CYHAL_GPIO_IRQ_FALL)
|
||||
? WHD_TRUE
|
||||
: WHD_FALSE;
|
||||
oob_config.intr_priority = CY_WIFI_OOB_INTR_PRIORITY;
|
||||
|
||||
whd_sdio_config.sdio_1bit_mode = WHD_FALSE;
|
||||
whd_sdio_config.high_speed_sdio_clock = WHD_FALSE;
|
||||
if(CY_SDIO_BUS_USE_OOB_INTR != 0)
|
||||
{
|
||||
whd_sdio_config.flags |= WHD_BUS_SDIO_OOB_INTR;
|
||||
whd_sdio_config.oob_intr.u32val = 0; /* reserved for multi whd instances */
|
||||
}
|
||||
whd_bus_sdio_attach(whd_drv, &whd_sdio_config, &sdio_obj, &sdio_ops);
|
||||
whd_sdio_config.oob_config = oob_config;
|
||||
whd_bus_sdio_attach(whd_drv, &whd_sdio_config, &sdio_obj);
|
||||
|
||||
/* Increase frequency to 25 MHz for better performance */
|
||||
config.frequencyhal_hz = 25000000;
|
||||
|
@ -248,40 +239,6 @@ static cy_rslt_t init_sdio_bus(void)
|
|||
return result;
|
||||
}
|
||||
|
||||
static cy_rslt_t init_wlan_wakeup(void)
|
||||
{
|
||||
/* assert(CY_SDIO_BUS_USE_OOB_INTR != 0) */
|
||||
cy_rslt_t result = cyhal_gpio_init(CY_WIFI_HOST_WAKE_GPIO, CYHAL_GPIO_DIR_INPUT, CY_WIFI_HOST_WAKE_GPIO_DM, 0);
|
||||
if(result == CY_RSLT_SUCCESS)
|
||||
{
|
||||
cyhal_gpio_register_irq(CY_WIFI_HOST_WAKE_GPIO, WLAN_INTR_PRIORITY, whd_wake_host_irq_handler, whd_drv);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static void cy_enable_oob_intr(whd_driver_t whd_driver, const whd_variant_t intr, whd_bool_t whd_enable)
|
||||
{
|
||||
/* assert(CY_SDIO_BUS_USE_OOB_INTR != 0) */
|
||||
(void)whd_driver;
|
||||
(void)intr;
|
||||
//TODO: This needs to be enabled in the WHD after the rtos is initialized. The current location where this is called
|
||||
//causes a crash in the interrupt handler since it tries to set data on the thread before it is initialized.
|
||||
//Need to review where this should be called in the WHD.
|
||||
// cyhal_gpio_irq_enable(CY_WIFI_HOST_WAKE_GPIO, CY_WIFI_HOST_WAKE_IRQ_EVENT,
|
||||
// (whd_enable == WHD_TRUE) ? true : false);
|
||||
}
|
||||
|
||||
static void cy_get_intr_config(whd_driver_t whd_driver, const whd_variant_t intr, whd_intr_config_t *config)
|
||||
{
|
||||
/* assert(CY_SDIO_BUS_USE_OOB_INTR != 0) */
|
||||
(void)whd_driver;
|
||||
(void)intr;
|
||||
config->dev_gpio_sel = DEFAULT_OOB_PIN;
|
||||
config->is_falling_edge = (CY_WIFI_HOST_WAKE_IRQ_EVENT == CYHAL_GPIO_IRQ_FALL)
|
||||
? WHD_TRUE
|
||||
: WHD_FALSE;
|
||||
}
|
||||
|
||||
cy_rslt_t cybsp_sdio_init(void)
|
||||
{
|
||||
cy_rslt_t result = cyhal_sdio_init(&sdio_obj, CYBSP_WIFI_SDIO_CMD, CYBSP_WIFI_SDIO_CLK, CYBSP_WIFI_SDIO_D0, CYBSP_WIFI_SDIO_D1, CYBSP_WIFI_SDIO_D2, CYBSP_WIFI_SDIO_D3);
|
||||
|
@ -307,10 +264,6 @@ cy_rslt_t cybsp_wifi_init(void)
|
|||
if(ret == WHD_SUCCESS)
|
||||
{
|
||||
result = init_sdio_bus();
|
||||
if (result == CY_RSLT_SUCCESS && CY_SDIO_BUS_USE_OOB_INTR != 0)
|
||||
{
|
||||
result = init_wlan_wakeup();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue