Wi-Fi Combo Forum Discussions
text.format{('custom.tabs.no.results')}
I asked a question about this a while back, but I am closer to a real deployment now:
I need to update products in the field that are based on the 3.1.2 SDK to the same app built with a new version of the SDK, to get all the latest bugfixes, to try to improve connection reliability, and to cover any known exploits.
I'd like to know if the Cypress folks have any input on a plan for how to accomplish this. The hard part are the little details about upgrading the WiFi FW binary asset.
I have verified that an app ported to the new SDK will indeed boot up with an older version of the WiFi Firmware stored in the sflash. This was the biggest concern.
I have also verified that using the UPDATE_FROM_SDK=3_1_2 APP_USED_BT=1 flags work with the existing 3.1.2 bootloader and the existing app DCT with all our security keys and per-device info survives (or it may be copied or moved internally, I did not go into the deep details).
So the plan is:
1) Update to the new app based on SDK 6.x.x via OTA (not Cypress OTA, but the ELF image is downloaded and stored to sflash in ELF format)
2) New app rewrites the headers in sflash to create space for the new WiFi Firmware asset; existing layout for critical sections remain unchanged (FR app, wifi firmware sections)
3) New app functions as normal on the old Wifi FW
4) New app downloads the new WiFi FW asset at some future time
5) New app does MD5 hash of old WiFi FW and new WiFi FW to ensure that both assets are safely aboard
6) New app erases the old WiFi FW section, copies in the new Wifi FW, does a system reboot.
7) Device should reboot using new WiFi FW and new SDK app
(fallback) If wiced Init not SUCCESS on boot, wiced wlan de-init, erase wifi_fw section and re-do copy, reboot
A thumbs-up on the soundness of this plan from a Cypress employee would be very helpful. Is there anything I am overlooking?
The X factor that I am not sure of is the "NVRAM" header that is part of the platform definition. Are these updatable in the field? Is it expected to need to update the NVRAM parameters with a WiFi FW upgrade for the same hardware?
Show LessHi all,
i need some help to create a packet transfer test on WiFi (2.4Ghz and 5GHz), between two same board with mounted chip BCM943907.
The test involves using a board as an access point and the other connected as a client, then the first (AP) start to sending a predefined number of packets, for example 100, to the second board (STA). At the end of this transmission i need to have the statistics of the data sent and received.
To do this application i read some post and document related to use the WL Tool for interfacing directly with the wireless driver.
I'm working with WICED-Studio 6.0.1, in which there is the WL tools, some sample scripts and the "mfg_test" application to be loaded into the module.
Through the command "pkteng_start" it is possible to enable the transmission and reception of data packets, but the problem is that I can not connect the two WiFi modules to each other and be sure that the one that transmits one arrives to the other.
I tryed using the two script presents in the WICED directory, adding the correct MAC address to the "pkteng_start" command.
- "tx_80211b_start.bat" used for transmit packet
- "rx_80211.bat" used for receive packet
At the end of transmission i sent the command "pkteng_stats" for read statistics, but the result is non sense.
Thasks.
Show LessI am trying to find if any available module or development board supports applications using the FM RDS capabilities of the CYW43438, in addition to Wi-Fi and BT. It appears that the older kit mentions an FM receiver, but the schematics show that the FM RX (input pin) is not connected:
bcm94343wwcd1evb-evaluation-and-development-kit
Is something like this available or would a custom design be required?
Show LessTest.console is the app with the most general commands. Note that you don't need to be connected to an AP for the app to work.
Type 'help' in the command prompt for a list of commands. You can try out scan, status, join, leave, join_ent, leave_ent, start_ap, stop_ap.
The command console can be used to call any function, not just wifi related calls. Check out snip.led_example for an example for defining your own commands. You can also look at the folders in libraries/utilities/command_console to see the commands already defined in WICED
Show LessIs there any way to use the wicked modules without a known rtos?
In the OTA2 service, the wiced_ota2_service_get_the_update_file() erroneously returns success anytime the second call to wiced_ota2_service_wget_update() returns a non-zero error code. In the code below, if this second call fails, the return code is not saved in the result variable and when *update_result is assigned to result it gets the previous result which can only be success. See libraries/daemons/ota2_service/wiced_ota2_service.c.
wiced_result_t wiced_ota2_service_get_the_update_file(wiced_ota2_service_session_t* session, wiced_result_t* update_result)
{
wiced_result_t result;
/* assume error */
*update_result = WICED_ERROR;
result = ota2_service_connect(session);
if (result != WICED_SUCCESS)
{...}
/* get the header */
...
/* swap the data to be correct for the platform */
...
/* disconnect and re-connect to reset the file pointer */
ota2_service_disconnect(session);
result = ota2_service_connect(session);
if ( result != WICED_SUCCESS)
{...goto _get_file_fail;}
/* get the OTA2 file */
/*if ( wiced_ota2_service_wget_update(session, NULL, 0) != WICED_SUCCESS) Replaced with the following 2 lines*/
result = wiced_ota2_service_wget_update(session, NULL, 0);
if ( result != WICED_SUCCESS)
{
OTA2_LIB_PRINT(session, OTA2_LOG_ERROR, ("wiced_ota2_service_get_the_update() wiced_ota2_service_wget_update(file) failed!\r\n"));
wiced_ota2_service_make_error_callback(session, OTA2_SERVICE_UPDATE_ERROR );
session->download_failures++;
*update_result = result;
goto _get_file_connected_fail;
}
...
/* we succeeded in getting the file here */
*update_result = WICED_SUCCESS;
_get_file_connected_fail:
ota2_service_disconnect(session);
_get_file_fail:
return result;
}
Show LessCan anyone help me with a Sample Code for receiving Audio Data from a Audio Codec over I2S for BCM43907.
OR_REG(I2S_CONTROL(port)->osh, &I2S_REGS(port)->i2scontrol, bits); // I am Getting Error In this Line => in the Code below
I am using platform_i2s.c
static wiced_result_t i2s_peripheral_transfer_enable( platform_i2s_port_t port, platform_i2s_direction_t dir, uint32_t bits, wiced_bool_t on)
{
if (on == WICED_TRUE)
{
OR_REG(I2S_CONTROL(port)->osh, &I2S_REGS(port)->i2scontrol, bits); // I am Getting Error In this Line
if (I2S_CONTROL(port)->i2s_spdif_mode == WICED_I2S_SPDIF_MODE_ON)
{
if (dir == PLATFORM_I2S_READ)
{
OR_REG(I2S_CONTROL(port)->osh, &I2S_REGS(port)->srxctrl, I2S_SRXC_RXEN);
}
else
{
OR_REG(I2S_CONTROL(port)->osh, &I2S_REGS(port)->stxctrl, I2S_STXC_TXEN);
}
}
}
}
Show LessHi,
We are testing a setup where two WICED devices are being paired through BLE with one phone. We are using WICED 3.7.0 SDK.
The pairing with the first device works perfectly, however second device is able just to connect and pairing fails.
We have tried both iOS and Android platforms, and we get similar behaviour.
Here is some output from BTM_PAIRING_COMPLETE_EVT event:
On iOS:
status = 103
reason = 22
sec_level = 0
is_pair_cancel = 0
resolved_bd_addr_type = 44
resolved_bd_addr = 08 29 78 04 08 e0
On Android:
status = 103
reason = 4
sec_level = 0
is_pair_cancel = 0
resolved_bd_addr_type = 44
resolved_bd_addr = 08 29 78 04 08 e0
It seems that phone somehow confuses these devices as same when it connects and tries to pair.
As soon as we unpair the first device, the second is able to pair successfully.
Regards,
Erik
HI , I am a starter with http2. Now I want to make a http2 get request with MFI SDK4.0.1 .The request is like this:
:method = GET
:scheme = https
:path = /{{API version}}/directives
authorization = Bearer {{YOUR_ACCESS_TOKEN}}
the wirte header and write request is right ,but the http client will disconnect immediately after http request flush.It is normal?
Below is how I creat a get request:
Show Less
static const char* request_uris[] =
{
[0] = "/get"
};
WPRINT_APP_INFO( ( "Resolving IP address of HTTPS server\n" ) ); wiced_hostname_lookup(CONNECTION_SERVER_HOST, &ip_address, DNS_TIMEOUT_MS); WPRINT_APP_INFO( ( "%s is at %u.%u.%u.%u\n", CONNECTION_SERVER_HOST, (uint8_t)(GET_IPV4_ADDRESS(ip_address) >> 24), (uint8_t)(GET_IPV4_ADDRESS(ip_address) >> 16), (uint8_t)(GET_IPV4_ADDRESS(ip_address) >> 8), (uint8_t)(GET_IPV4_ADDRESS(ip_address) >> 0) ) );
/* Initialize the root CA certificate */ result = wiced_tls_init_root_ca_certificates( amazon_root_ca_certificate, strlen( amazon_root_ca_certificate ) ); if ( result != WICED_SUCCESS ) { WPRINT_APP_INFO( ( "Error: Root CA certificate failed to initialize: %u\n", result) ); } WPRINT_APP_INFO(("Root CA certificate successed to initialize!\n"));
sprintf(https_header,":method = GET\r\n:scheme = https\r\n:path = /v20160207/directives\r\nauthorization = Bearer %s\r\n",access_token); WPRINT_APP_INFO(("\n%s\n\n", https_header));
result = http_client_init( &client, WICED_STA_INTERFACE, event_handler, NULL );
if (result == WICED_SUCCESS) { WPRINT_APP_INFO( ( "http inited success %d\n", result ) ); } else WPRINT_APP_INFO( ( "http failed to init %d\n", result ) );
/* configure HTTP client parameters */ client_configuration.flag = HTTP_CLIENT_CONFIG_FLAG_SERVER_NAME | HTTP_CLIENT_CONFIG_FLAG_MAX_FRAGMENT_LEN; client_configuration.server_name = (uint8_t*)CONNECTION_SERVER_HOST; client_configuration.max_fragment_length = TLS_FRAGMENT_LENGTH_4096; http_client_configure(&client, &client_configuration);
result = http_client_connect( &client, (const wiced_ip_address_t*)&ip_address, SERVER_PORT, HTTP_USE_TLS, CONNECT_TIMEOUT_MS ); if (result == WICED_SUCCESS) { WPRINT_APP_INFO( ( "http connected %d\n", result ) );
header[0].field = HTTP_HEADER_HOST; header[0].field_length = sizeof( HTTP_HEADER_HOST) - 1; header[0].value = CONNECTION_SERVER_HOST; header[0].value_length = sizeof( CONNECTION_SERVER_HOST ) - 1; char *http_get_length_string = malloc(10);
itoa(strlen(https_header),http_get_length_string,10);
header[2].field = HTTP_HEADER_CONTENT_TYPE; header[2].field_length = sizeof( HTTP_HEADER_CONTENT_TYPE ) - 1; header[2].value = "application/x-www-form-urlencoded"; header[2].value_length = sizeof( "application/x-www-form-urlencoded" ) - 1;
header[1].field = HTTP_HEADER_CONTENT_LENGTH; header[1].field_length = sizeof( HTTP_HEADER_CONTENT_LENGTH ) - 1; header[1].value = http_get_length_string; header[1].value_length = strlen( http_get_length_string );
header[3].field = "Connection: "; header[3].field_length = sizeof("Connection: ") - 1; header[3].value = "Keep-Alive"; header[3].value_length = sizeof( "Keep-Alive" ) - 1;
http_request_init( &requests[0], &client, HTTP_GET, request_uris[0], HTTP_2 ); for(uint8_t i=0;i<4;i++) { http_request_write_header( &requests[0], &header, 1 ); WPRINT_APP_INFO( ( "http_request_write_header %d result : %d \n" ,i,result) ); } http_request_write_end_header( &requests[0] ); http_request_write(&requests[0],(uint8_t *)https_header,sizeof(https_header)-1);//write body WPRINT_APP_INFO( ( "http_request_write result : %d \n" ,result) ); http_request_write_end_header( &requests[0] ); http_request_flush( &requests[0] ); } else WPRINT_APP_INFO( ( "http failed to connect %d\n", result ) );