diff options
Diffstat (limited to 'FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/pic32mzef/NetworkInterface_wifi.c')
-rw-r--r-- | FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/pic32mzef/NetworkInterface_wifi.c | 384 |
1 files changed, 192 insertions, 192 deletions
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/pic32mzef/NetworkInterface_wifi.c b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/pic32mzef/NetworkInterface_wifi.c index fc8335ebe..a24cfe8ad 100644 --- a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/pic32mzef/NetworkInterface_wifi.c +++ b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/pic32mzef/NetworkInterface_wifi.c @@ -1,192 +1,192 @@ -/******************************************************************************* -* Network Interface file -* -* Summary: -* Network Interface file for FreeRTOS-Plus-TCP stack -* -* Description: -* - Interfaces PIC32 to the FreeRTOS TCP/IP stack -*******************************************************************************/ - -/******************************************************************************* -* File Name: pic32_NetworkInterface.c -* Copyright 2017 Microchip Technology Incorporated and its subsidiaries. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy of -* this software and associated documentation files (the "Software"), to deal in -* the Software without restriction, including without limitation the rights to -* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -* of the Software, and to permit persons to whom the Software is furnished to do -* so, subject to the following conditions: -* The above copyright notice and this permission notice shall be included in all -* copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE -*******************************************************************************/ -#ifndef PIC32_USE_ETHERNET -#include <sys/kmem.h> - -#include "FreeRTOS.h" -#include "semphr.h" -#include "event_groups.h" -#include "FreeRTOS_IP.h" -#include "FreeRTOS_IP_Private.h" - -#include "NetworkInterface.h" -#include "NetworkBufferManagement.h" -#include "peripheral/eth/plib_eth.h" - -#include "system_config.h" -#include "system/console/sys_console.h" -#include "system/debug/sys_debug.h" -#include "system/command/sys_command.h" - -#include "driver/ethmac/drv_ethmac.h" -#include "driver/miim/drv_miim.h" -#include "m2m_types.h" - -#include "tcpip/tcpip.h" -#include "tcpip/src/tcpip_private.h" -#include "tcpip/src/link_list.h" -#include "wilc1000_task.h" - -#include "NetworkConfig.h" - - - #include "iot_wifi.h" - - /* local definitions and data */ - - - /* FreeRTOS implementation functions */ - BaseType_t xNetworkInterfaceInitialise( void ) - { - WIFINetworkParams_t xNetworkParams; - - xNetworkParams.pcSSID = clientcredentialWIFI_SSID; - xNetworkParams.ucSSIDLength = sizeof( clientcredentialWIFI_SSID ); - xNetworkParams.pcPassword = clientcredentialWIFI_PASSWORD; - xNetworkParams.ucPasswordLength = sizeof( clientcredentialWIFI_PASSWORD ); - xNetworkParams.xSecurity = clientcredentialWIFI_SECURITY; - xNetworkParams.cChannel = M2M_WIFI_CH_ALL; /* Scan all channels (255) */ - - /*Turn WiFi ON */ - if( WIFI_On() != eWiFiSuccess ) - { - return pdFAIL; - } - - /* Connect to the AP */ - if( WIFI_ConnectAP( &xNetworkParams ) != eWiFiSuccess ) - { - return pdFAIL; - } - - return pdPASS; - } - - - /*-----------------------------------------------------------*/ - - BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor, - BaseType_t xReleaseAfterSend ) - { - BaseType_t retRes = pdFALSE; - - if( ( pxDescriptor != 0 ) && ( pxDescriptor->pucEthernetBuffer != 0 ) && ( pxDescriptor->xDataLength != 0 ) ) - { - /* There you go */ - if( WDRV_EXT_DataSend( pxDescriptor->xDataLength, pxDescriptor->pucEthernetBuffer ) == 0 ) - { - retRes = pdTRUE; - } - - /* The buffer has been sent so can be released. */ - if( xReleaseAfterSend != pdFALSE ) - { - vReleaseNetworkBufferAndDescriptor( pxDescriptor ); - } - } - - return retRes; - } - - - /************************************* Section: helper functions ************************************************** */ - /* */ - - - - /************************************* Section: worker code ************************************************** */ - /* */ - - void xNetworkFrameReceived( uint32_t len, - uint8_t const * const frame ) - { - bool pktSuccess, pktLost; - NetworkBufferDescriptor_t * pxNetworkBuffer = NULL; - IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL }; - - pktSuccess = pktLost = false; - - while( true ) - { - if( eConsiderFrameForProcessing( frame ) != eProcessBuffer ) - { - break; - } - - /* get the network descriptor (no data buffer) to hold this packet */ - pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( len, 0 ); - - if( pxNetworkBuffer == NULL ) - { - pktLost = true; - break; - } - - /* Set the actual packet length, in case a larger buffer was - returned. */ - pxNetworkBuffer->xDataLength = len; - - /* Copy the packet. */ - memcpy( pxNetworkBuffer->pucEthernetBuffer, frame, len ); - - /* Send the data to the TCP/IP stack. */ - xRxEvent.pvData = ( void * ) pxNetworkBuffer; - - if( xSendEventStructToIPTask( &xRxEvent, 0 ) == pdFALSE ) - { /* failed */ - pktLost = true; - } - else - { /* success */ - pktSuccess = true; - iptraceNETWORK_INTERFACE_RECEIVE(); - } - - break; - } - - if( !pktSuccess ) - { /* smth went wrong; nothing sent to the */ - if( pxNetworkBuffer != NULL ) - { - pxNetworkBuffer->pucEthernetBuffer = 0; - vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer ); - } - - if( pktLost ) - { - iptraceETHERNET_RX_EVENT_LOST(); - } - } - } - -#endif /* #ifndef PIC32_USE_ETHERNET */ +/*******************************************************************************
+* Network Interface file
+*
+* Summary:
+* Network Interface file for FreeRTOS-Plus-TCP stack
+*
+* Description:
+* - Interfaces PIC32 to the FreeRTOS TCP/IP stack
+*******************************************************************************/
+
+/*******************************************************************************
+* File Name: pic32_NetworkInterface.c
+* Copyright 2017 Microchip Technology Incorporated and its subsidiaries.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of
+* this software and associated documentation files (the "Software"), to deal in
+* the Software without restriction, including without limitation the rights to
+* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+* of the Software, and to permit persons to whom the Software is furnished to do
+* so, subject to the following conditions:
+* The above copyright notice and this permission notice shall be included in all
+* copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+* SOFTWARE
+*******************************************************************************/
+#ifndef PIC32_USE_ETHERNET
+#include <sys/kmem.h>
+
+#include "FreeRTOS.h"
+#include "semphr.h"
+#include "event_groups.h"
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_IP_Private.h"
+
+#include "NetworkInterface.h"
+#include "NetworkBufferManagement.h"
+#include "peripheral/eth/plib_eth.h"
+
+#include "system_config.h"
+#include "system/console/sys_console.h"
+#include "system/debug/sys_debug.h"
+#include "system/command/sys_command.h"
+
+#include "driver/ethmac/drv_ethmac.h"
+#include "driver/miim/drv_miim.h"
+#include "m2m_types.h"
+
+#include "tcpip/tcpip.h"
+#include "tcpip/src/tcpip_private.h"
+#include "tcpip/src/link_list.h"
+#include "wilc1000_task.h"
+
+#include "NetworkConfig.h"
+
+
+ #include "iot_wifi.h"
+
+ /* local definitions and data */
+
+
+ /* FreeRTOS implementation functions */
+ BaseType_t xNetworkInterfaceInitialise( void )
+ {
+ WIFINetworkParams_t xNetworkParams;
+
+ xNetworkParams.pcSSID = clientcredentialWIFI_SSID;
+ xNetworkParams.ucSSIDLength = sizeof( clientcredentialWIFI_SSID );
+ xNetworkParams.pcPassword = clientcredentialWIFI_PASSWORD;
+ xNetworkParams.ucPasswordLength = sizeof( clientcredentialWIFI_PASSWORD );
+ xNetworkParams.xSecurity = clientcredentialWIFI_SECURITY;
+ xNetworkParams.cChannel = M2M_WIFI_CH_ALL; /* Scan all channels (255) */
+
+ /*Turn WiFi ON */
+ if( WIFI_On() != eWiFiSuccess )
+ {
+ return pdFAIL;
+ }
+
+ /* Connect to the AP */
+ if( WIFI_ConnectAP( &xNetworkParams ) != eWiFiSuccess )
+ {
+ return pdFAIL;
+ }
+
+ return pdPASS;
+ }
+
+
+ /*-----------------------------------------------------------*/
+
+ BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor,
+ BaseType_t xReleaseAfterSend )
+ {
+ BaseType_t retRes = pdFALSE;
+
+ if( ( pxDescriptor != 0 ) && ( pxDescriptor->pucEthernetBuffer != 0 ) && ( pxDescriptor->xDataLength != 0 ) )
+ {
+ /* There you go */
+ if( WDRV_EXT_DataSend( pxDescriptor->xDataLength, pxDescriptor->pucEthernetBuffer ) == 0 )
+ {
+ retRes = pdTRUE;
+ }
+
+ /* The buffer has been sent so can be released. */
+ if( xReleaseAfterSend != pdFALSE )
+ {
+ vReleaseNetworkBufferAndDescriptor( pxDescriptor );
+ }
+ }
+
+ return retRes;
+ }
+
+
+ /************************************* Section: helper functions ************************************************** */
+ /* */
+
+
+
+ /************************************* Section: worker code ************************************************** */
+ /* */
+
+ void xNetworkFrameReceived( uint32_t len,
+ uint8_t const * const frame )
+ {
+ bool pktSuccess, pktLost;
+ NetworkBufferDescriptor_t * pxNetworkBuffer = NULL;
+ IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };
+
+ pktSuccess = pktLost = false;
+
+ while( true )
+ {
+ if( eConsiderFrameForProcessing( frame ) != eProcessBuffer )
+ {
+ break;
+ }
+
+ /* get the network descriptor (no data buffer) to hold this packet */
+ pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( len, 0 );
+
+ if( pxNetworkBuffer == NULL )
+ {
+ pktLost = true;
+ break;
+ }
+
+ /* Set the actual packet length, in case a larger buffer was
+ returned. */
+ pxNetworkBuffer->xDataLength = len;
+
+ /* Copy the packet. */
+ memcpy( pxNetworkBuffer->pucEthernetBuffer, frame, len );
+
+ /* Send the data to the TCP/IP stack. */
+ xRxEvent.pvData = ( void * ) pxNetworkBuffer;
+
+ if( xSendEventStructToIPTask( &xRxEvent, 0 ) == pdFALSE )
+ { /* failed */
+ pktLost = true;
+ }
+ else
+ { /* success */
+ pktSuccess = true;
+ iptraceNETWORK_INTERFACE_RECEIVE();
+ }
+
+ break;
+ }
+
+ if( !pktSuccess )
+ { /* smth went wrong; nothing sent to the */
+ if( pxNetworkBuffer != NULL )
+ {
+ pxNetworkBuffer->pucEthernetBuffer = 0;
+ vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+ }
+
+ if( pktLost )
+ {
+ iptraceETHERNET_RX_EVENT_LOST();
+ }
+ }
+ }
+
+#endif /* #ifndef PIC32_USE_ETHERNET */
|