Other Parts Discussed in Thread: CC3200
I am working with the CC3220 launchpad and I am trying to join a WiFi network. The network uses WPA authorization and IPv4. The project is running FreeRTOS and has no heap, also we are using SPI to communicate with the NWP. So far this is what we are trying to do:
#define EMERGE_SSID "our_name"
#define EMERGE_PASSWORD "our_password"
//Initialize SPI to communicate with the network processor
SPI_init();
uint8_t ssid_length = strlen(EMERGE_SSID);
uint8_t password_length = strlen(EMERGE_PASSWORD);
char ssid[ssid_length] = EMERGE_SSID;
char password[password_length] = EMERGE_PASSWORD;
memset(&connect_parameters, 0x0, sizeof(ConnectCmdType));
//Set the SSID and security parameters for the network we are going to join
connect_parameters.ssid = (uint8_t*) ssid;
connect_parameters.secParams.Type = SL_WLAN_SEC_TYPE_WPA_WPA2;
connect_parameters.secParams.KeyLen = password_length;
connect_parameters.secParams.Key = (int8_t*) password;
app_CB.Status = 0;
app_CB.Role = ROLE_RESERVED;
app_CB.Exit = FALSE;
memset(&app_CB.CmdBuffer, 0x0, CMD_BUFFER_LEN);
memset(&app_CB.gDataBuffer, 0x0, sizeof(app_CB.gDataBuffer));
memset(&app_CB.CON_CB, 0x0, sizeof(app_CB.CON_CB));
ret_val = sem_init(&app_CB.CON_CB.connectEventSyncObj, 0, 0);
if (ret_val != 0)
{
FW_ASSERT(1);
}
ret_val = sem_init(&app_CB.CON_CB.eventCompletedSyncObj, 0, 0);
if (ret_val != 0)
{
FW_ASSERT(1);
}
ret_val = sem_init(&app_CB.CON_CB.ip4acquireEventSyncObj, 0, 0);
if (ret_val != 0)
{
FW_ASSERT(1);
}
ret_val = sem_init(&app_CB.CON_CB.ip6acquireEventSyncObj, 0, 0);
if (ret_val != 0)
{
FW_ASSERT(1);
}
memset(&app_CB.P2P_CB, 0x0, sizeof(app_CB.P2P_CB));
ret_val = sem_init(&app_CB.P2P_CB.DeviceFound, 0, 0);
if (ret_val != 0)
{
FW_ASSERT(1);
}
ret_val = sem_init(&app_CB.P2P_CB.RcvConReq, 0, 0);
if (ret_val != 0)
{
FW_ASSERT(1);
}
ret_val = sem_init(&app_CB.P2P_CB.RcvNegReq, 0, 0);
if (ret_val != 0)
{
FW_ASSERT(1);
}
ret_val = sem_init(&app_CB.WowlanSleepSem, 0, 0);
if (ret_val != 0)
{
FW_ASSERT(1);
}
pthread_attr_init(&pAttrs_spawn);
priParam.sched_priority = WIFI_SPAWN_PRIORITY;
ret_val = pthread_attr_setschedparam(&pAttrs_spawn, &priParam);
FW_ASSERT(ret_val == 0);
ret_val = pthread_attr_setdetachstate(&pAttrs_spawn, PTHREAD_CREATE_DETACHED);
FW_ASSERT(ret_val == 0);
ret_val = pthread_create_static(&gSpawn_thread, &pAttrs_spawn, sl_Task, NULL);
FW_ASSERT(ret_val == 0);
ret_val = sl_Start(0, 0, 0);
FW_ASSERT(ret_val == 0);
ret_val = sl_WlanSetMode(ROLE_STA);
FW_ASSERT(ret_val == 0);
ret_val = sl_Stop(SL_STOP_TIMEOUT);
FW_ASSERT(ret_val == 0);
ret_val = sl_Start(0, 0, 0);
FW_ASSERT(ret_val == 0);
ret_val = sl_WlanPolicySet(SL_WLAN_POLICY_CONNECTION, SL_WLAN_CONNECTION_POLICY(1, 0, 0, 0), NULL, 0);
FW_ASSERT(ret_val == 0);
ret_val = sl_WlanProvisioning(SL_WLAN_PROVISIONING_CMD_STOP, 0xFF, 0, NULL, 0x0);
FW_ASSERT(ret_val == 0);
ret_val = sl_WlanProfileDel(0xFF);
FW_ASSERT(ret_val == 0);
ret_val = sl_NetCfgSet(SL_NETCFG_IPV4_STA_ADDR_MODE, SL_NETCFG_ADDR_DHCP, 0, 0);
FW_ASSERT(ret_val == 0);
IfBitmap = !(SL_NETCFG_IF_IPV6_STA_LOCAL | SL_NETCFG_IF_IPV6_STA_GLOBAL);
ret_val = sl_NetCfgSet(SL_NETCFG_IF, SL_NETCFG_IF_STATE, sizeof(IfBitmap), (const unsigned char *)&IfBitmap);
FW_ASSERT(ret_val == 0);
ScanDefault.ChannelsMask = CHANNEL_MASK_ALL;
ScanDefault.RssiThreshold = RSSI_TH_MAX;
ret_val = sl_WlanSet(SL_WLAN_CFG_GENERAL_PARAM_ID, SL_WLAN_GENERAL_PARAM_OPT_SCAN_PARAMS, sizeof(ScanDefault), (uint8_t *)&ScanDefault);
FW_ASSERT(ret_val == 0);
ucConfigOpt = SL_WLAN_SCAN_POLICY(0, 0);
ret_val = sl_WlanPolicySet(SL_WLAN_POLICY_SCAN, ucConfigOpt, NULL, 0);
FW_ASSERT(ret_val == 0);
ucPower = 0;
ret_val = sl_WlanSet(SL_WLAN_CFG_GENERAL_PARAM_ID, SL_WLAN_GENERAL_PARAM_OPT_STA_TX_POWER, 1, (uint8_t *)&ucPower);
FW_ASSERT(ret_val == 0);
ret_val = sl_WlanPolicySet(SL_WLAN_POLICY_PM, SL_WLAN_NORMAL_POLICY, NULL, 0);
FW_ASSERT(ret_val == 0);
ret_val = sl_NetAppMDNSUnRegisterService(0, 0, 0);
FW_ASSERT(ret_val == 0);
memset(RxFilterIdMask.FilterBitmap, 0xFF, 8);
ret_val = sl_WlanSet(SL_WLAN_RX_FILTERS_ID, SL_WLAN_RX_FILTER_REMOVE, sizeof(SlWlanRxFilterOperationCommandBuff_t), (uint8_t *)&RxFilterIdMask);
FW_ASSERT(ret_val == 0);
ret_val = sl_WlanSetMode(ROLE_STA);
FW_ASSERT(ret_val == 0);
ret_val = sl_Stop(SL_STOP_TIMEOUT);
FW_ASSERT(ret_val == 0);
ret_val = sl_Start(0, 0, 0);
FW_ASSERT(ret_val == 0);
app_CB.Role = ROLE_STA;
SET_STATUS_BIT(app_CB.Status, STATUS_BIT_NWP_INIT);
ret_val = sl_Stop(SL_STOP_TIMEOUT);
FW_ASSERT(ret_val == 0);
ret_val = sl_Start(0, 0, 0);
FW_ASSERT(ret_val == 0);
ret_val = sl_WlanConnect((const signed char *)connect_parameters.ssid, strlen((const char *)(connect_parameters.ssid)), 0, &connect_parameters.secParams, 0);
FW_ASSERT(ret_val == 0);
We also have defined the following callback functions:
void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent);
void SimpleLinkNetAppEventHandler(SlNetAppEvent_t *pNetAppEvent);
void SimpleLinkHttpServerEventHandler( SlNetAppHttpServerEvent_t *pHttpEvent, SlNetAppHttpServerResponse_t *pHttpResponse);
void SimpleLinkGeneralEventHandler(SlDeviceEvent_t *pDevEvent);
void SimpleLinkSockEventHandler(SlSockEvent_t *pSock);
void SimpleLinkFatalErrorEventHandler(SlDeviceFatal_t *slFatalErrorEvent);
void SimpleLinkNetAppRequestEventHandler(SlNetAppRequest_t *pNetAppRequest, SlNetAppResponse_t *pNetAppResponse);
void SimpleLinkNetAppRequestMemFreeEventHandler(uint8_t *buffer);
When we call this code, nothing seems to happen. Our status never changes and none of the callbacks are ever called. Are we missing a step in the initialization process, or is there something else happening that is preventing us from properly joining a network?
Thank you! Charles