blob: 2f6230d1487c121de922b84e6c29a93559b6c03e [file] [log] [blame]
/*
*
* Copyright (c) 2023 Project CHIP Authors
* Copyright (c) 2020 Texas Instruments Incorporated
* All rights reserved.
*
* 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.
*/
//****************************************************************************
//
//! \addtogroup
//! @{
//
//****************************************************************************
/* Standard Include */
#include <assert.h>
#include <mqueue.h>
#include <pthread.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
/* TI-DRIVERS Header files */
#include <ti/drivers/net/wifi/simplelink.h>
#include <ti/drivers/net/wifi/slwificonn.h>
#include <ti/devices/cc32xx/inc/hw_types.h>
#include <ti/devices/cc32xx/driverlib/rom_map.h>
#include <ti/devices/cc32xx/driverlib/pin.h>
#include <ti/devices/cc32xx/driverlib/prcm.h>
#include "ti_drivers_config.h"
#include <ti/drivers/GPIO.h>
#include <ti/drivers/SPI.h>
#include <ti/drivers/apps/Button.h>
#include <ti/drivers/apps/LED.h>
#include <ti/net/slnet.h>
#include <ti/net/slnetconn.h>
#include <ti/net/slnetif.h>
#include "utils_if.h"
#include "wifi_if.h"
#include <AppConfig.h>
int CHIP_IF_init();
/* Application Version and Naming*/
#define APPLICATION_NAME "CC32XX-MATTER:: E-LOCK"
#define APPLICATION_VERSION "01.00.00.00"
/* USER's defines */
#define SLNETCONN_TASK_STACK_SIZE (2048)
#define DISPLAY_TASK_STACK_SIZE (512)
/****************************************************************************
LOCAL FUNCTION PROTOTYPES
****************************************************************************/
static void ButtonLeftEventHandler(Button_Handle handle, Button_EventMask events);
/****************************************************************************
EXT. FUNCTION PROTOTYPES
****************************************************************************/
extern void LWIP_IF_start();
/****************************************************************************
GLOBAL VARIABLES
****************************************************************************/
pthread_t gSlNetConnThread = (pthread_t) NULL;
Button_Handle gButtonLeftHandle, gButtonRightHandle;
LED_Handle gLedBlueHandle, gLedGreenHandle, gLedRedHandle;
/****************************************************************************
STATIC VARIABLES
****************************************************************************/
static bool gIsConnected = 0;
//*****************************************************************************
// Local Functions
//*****************************************************************************
void SimpleLinkSockEventHandler(SlSockEvent_t * pSock)
{
/* Unused in this application */
}
void SimpleLinkHttpServerEventHandler(SlNetAppHttpServerEvent_t * pHttpEvent, SlNetAppHttpServerResponse_t * pHttpResponse)
{
/* Unused in this application */
}
void SimpleLinkNetAppRequestEventHandler(SlNetAppRequest_t * pNetAppRequest, SlNetAppResponse_t * pNetAppResponse)
{
/* Unused in this application */
}
void SimpleLinkNetAppRequestMemFreeEventHandler(uint8_t * buffer)
{
/* Unused in this application */
}
//*****************************************************************************
//
//! \brief Application startup display on UART
//!
//! \param none
//!
//! \return none
//!
//*****************************************************************************
void DisplayBanner()
{
cc32xxLog("\n\n\n\r");
cc32xxLog("\t\t *************************************************\n\r");
cc32xxLog("\t\t %s Application \n\r", APPLICATION_NAME);
cc32xxLog("\t\t %s \n\r", APPLICATION_VERSION);
cc32xxLog("\t\t *************************************************\n\r");
cc32xxLog("\n\n\n\r");
}
//*****************************************************************************
//
//! \brief SlWifiConn Event Handler
//!
//*****************************************************************************
void SlNetConnEventHandler(uint32_t ifID, SlNetConnStatus_e netStatus, void * data)
{
switch (netStatus)
{
case SLNETCONN_STATUS_CONNECTED_MAC:
gIsConnected = 1;
LED_setOn(gLedBlueHandle, LED_BRIGHTNESS_MAX);
cc32xxLog("[SlNetConnEventHandler] I/F %d - CONNECTED (MAC LEVEL)!\n\r", ifID);
break;
case SLNETCONN_STATUS_CONNECTED_IP:
gIsConnected = 1;
cc32xxLog("[SlNetConnEventHandler] I/F %d - CONNECTED (IP LEVEL)!\n\r", ifID);
break;
case SLNETCONN_STATUS_CONNECTED_INTERNET:
gIsConnected = 1;
cc32xxLog("[SlNetConnEventHandler] I/F %d - CONNECTED (INTERNET LEVEL)!\n\r", ifID);
break;
case SLNETCONN_STATUS_WAITING_FOR_CONNECTION:
case SLNETCONN_STATUS_DISCONNECTED:
gIsConnected = 0;
LED_setOff(gLedBlueHandle);
cc32xxLog("[SlNetConnEventHandler] I/F %d - DISCONNECTED!\n\r", ifID);
break;
default:
cc32xxLog("[SlNetConnEventHandler] I/F %d - UNKNOWN STATUS\n\r", ifID);
break;
}
}
//*****************************************************************************
//
//! \brief Launchpad switch used to enable one shot provisioning
//!
//*****************************************************************************
static void ButtonLeftEventHandler(Button_Handle handle, Button_EventMask events)
{
// Enable Provisioning
int retVal = SlWifiConn_enableProvisioning(WifiProvMode_ONE_SHOT, PROVISIONING_CMD, 0);
assert(retVal == 0);
}
//*****************************************************************************
//
//! \brief Main application thread
//!
//! \param none
//!
//! \return none
//!
//*****************************************************************************
int WiFi_init()
{
int retVal;
Button_Params buttonParams;
LED_Params ledParams;
SPI_init();
#ifdef NWP_LOG
// NWP log config
// If your application already has UART0 configured, no need for this line
MAP_PRCMPeripheralClkEnable(PRCM_UARTA0, PRCM_RUN_MODE_CLK);
// Mux Pin 62 to mode 1 for outputting NWP logs
MAP_PinTypeUART(PIN_62, PIN_MODE_1);
#endif
LED_Params_init(&ledParams); // default PWM LED
gLedBlueHandle = LED_open(CONFIG_LED_BLUE, &ledParams);
LED_setOff(gLedBlueHandle);
Button_Params_init(&buttonParams);
buttonParams.buttonEventMask = Button_EV_CLICKED | Button_EV_LONGCLICKED;
buttonParams.longPressDuration = 1000U; // ms
gButtonLeftHandle = Button_open(CONFIG_BTN_LEFT, &buttonParams);
Button_setCallback(gButtonLeftHandle, ButtonLeftEventHandler);
/* Enable SlWifiConn */
retVal = WIFI_IF_init();
assert(retVal >= 0);
/* Enable SlNet framework */
retVal = ti_net_SlNet_initConfig();
assert(retVal == 0);
/* Enable SlNetConn */
retVal = SlNetConn_init(0);
assert(retVal == 0);
gSlNetConnThread = OS_createTask(1, SLNETCONN_TASK_STACK_SIZE, SlNetConn_process, NULL, OS_TASK_FLAG_DETACHED);
assert(gSlNetConnThread);
return (retVal);
}
int WiFi_deinit()
{
int retVal;
cc32xxLog("[APP] Networking App Completed (entering low power mode)\r\n ");
retVal = SlNetConn_stop(SlNetConnEventHandler);
retVal = WIFI_IF_deinit();
cc32xxLog("[APP] Exit (%d) \r\n", retVal);
assert(retVal == 0);
return (retVal);
}