Project Embedded Systems E-ict Denayer

Dependencies:   BSP_DISCO_F746NG F7_Ethernet LCD_DISCO_F746NG TS_DISCO_F746NG mbed-rtos mbed

Revision:
1:a2f7adf6db3d
Parent:
0:16bcf70d262e
Child:
2:1a5565ee8219
--- a/main.cpp	Sat Jan 21 23:05:11 2017 +0000
+++ b/main.cpp	Tue Jan 24 00:23:30 2017 +0000
@@ -1,8 +1,6 @@
 #include "main.h"
 
-// regel 68: enum schrijven voor IP/netmask... en vergelijken binnen main
-
-uint32_t ul_ResetDisplay( )
+uint32_t ul_ResetDisplay( void )
 {
     display.Clear( LCD_COLOR_WHITE );
     display.SetBackColor( LCD_COLOR_WHITE );
@@ -10,76 +8,147 @@
     return 0;
 }
 
-uint32_t ul_CheckDHCP( struct Network x_DynNetwork )                                     //while lus, iedere seconde eens checken of er geen verandering is
+/*-----------------------------------------------------------*/
+
+uint32_t ul_CheckDHCP( void )                                     
 {
+    uint32_t ul_MyReturn = 2;
+    Network *x_DynNetwork = mpool.alloc();
+     
     if( Eth.init( ) == 0 )
     {
         char c_NewIP[16];
         Eth.connect( );
         strncpy( c_NewIP, Eth.getIPAddress( ), 16 );
-        if( strcmp( x_DynNetwork.c_IPAddress, c_NewIP ) == false )
+        if( strcmp( x_DynNetwork->c_IPAddress, c_NewIP ) == false )
         {
-            strncpy( x_DynNetwork.c_IPAddress, c_NewIP, 16 );
-            strncpy( x_DynNetwork.c_MACAddress, Eth.getMACAddress( ), 16 );
-            strncpy( x_DynNetwork.c_Netmask, Eth.getNetworkMask( ), 16 );
-            strncpy( x_DynNetwork.c_Gateway, Eth.getGateway( ), 16 );
+            strncpy( x_DynNetwork->c_IPAddress, c_NewIP, 16 );
+            strncpy( x_DynNetwork->c_MACAddress, Eth.getMACAddress( ), 16 );
+            strncpy( x_DynNetwork->c_Netmask, Eth.getNetworkMask( ), 16 );
+            strncpy( x_DynNetwork->c_Gateway, Eth.getGateway( ), 16 );
+            queue.put(x_DynNetwork);
         }
-        return 0;
+        ul_MyReturn = 0;
+    }
+    else
+    {
+            ul_MyReturn =1;
+    }
+    return ul_MyReturn;
+}
+
+/*-----------------------------------------------------------*/
+
+uint32_t ul_CheckInternet( void )
+{
+    uint32_t ul_Counter = 0;
+    uint32_t ul_PingCounter = 0;
+    ip_addr_t x_PingTarget = { 0x08080808 }; 
+    for( ul_Counter = 0; ul_Counter < 4; ul_Counter++)
+    {    
+        if( ul_Ping( &x_PingTarget ) == 0 )
+        {
+            ul_PingCounter++;
+        }
+    }
+    if( ul_PingCounter >= 3 )
+    {
+        return 0; 
     }
     else
     {
-        display.DisplayStringAt( 0, 10, ( uint8_t * )"DHCP: FAILED: ", LEFT_MODE ); 
         return 1;
     }
+      
 }
 
-uint32_t ul_CheckInternet( )
-{
-    return 0;   
-}
+/*-----------------------------------------------------------*/
 
-uint32_t ul_CreateMenu( )
+uint32_t ul_ShowDevices( void )
 {
-    //480x272
-    display.DrawRect( 0, 0, 125, 68);
-    display.DisplayStringAt( 2, 34, ( uint8_t * )"DYNAMIC", LEFT_MODE );
-    display.DrawRect( 0, 68, 125, 68);
-    display.DisplayStringAt( 2, 102, ( uint8_t * )"STATIC", LEFT_MODE );
+    uint32_t ul_GenIP = 0;
+    uint32_t ul_MyIP = 0;
+    uint32_t ul_Counter =0;
+    uint32_t ul_DevCounter = 0;
+    
+    ip_addr_t x_ActDev[255];                     //max 255 adressen binnen sub, beter is malloc gebruik en redefine van array/vector => max IP adressen haalbaar: 4228250625
+    
+    osEvent x_Evt = queue.get();
+    if (x_Evt.status == osEventMessage) 
+    {
+        Network *x_DynNetwork = (Network*)x_Evt.value.p;
+        ul_MyIP = ( uint32_t ) x_DynNetwork->c_IPAddress ;
+        mpool.free(x_DynNetwork);
+        
+        ul_GenIP = ul_MyIP & 0xFFFFFF00;
+       
+        for( ul_Counter = 1; ul_Counter < 255; ul_Counter++)
+        {
+            ul_GenIP++;
+            if( ul_Ping( ( ip_addr_t * ) ul_GenIP ) == 0 )
+            {
+                ip_addr_t x_ConIP = { ul_GenIP };
+                x_ActDev[ul_DevCounter] = x_ConIP;                          //voor een of andere reden is dit de enige manier dat werkt
+                ul_DevCounter++;
+            }
+        }  
+    }
+    
     return 0;
 }
 
-uint32_t ul_ShowDynamicMenu( struct Network x_DynNetwork )
+uint32_t ul_CreateMenu( void )
 {
-    ul_ResetDisplay( );
-    ul_CreateMenu( );
-    display.SetFont( &Font16 );
-    display.DisplayStringAt( 130, 10, ( uint8_t * )"IP address: ", LEFT_MODE ); 
-    display.DisplayStringAt( 270, 10, ( uint8_t * )&x_DynNetwork.c_IPAddress, LEFT_MODE );
-    display.DisplayStringAt( 130, 30, ( uint8_t * )"MAC Address: ", LEFT_MODE ); 
-    display.DisplayStringAt( 270, 30, ( uint8_t * )&x_DynNetwork.c_MACAddress, LEFT_MODE );  
-    display.DisplayStringAt( 130, 50, ( uint8_t * )"Netmask: ", LEFT_MODE ); 
-    display.DisplayStringAt( 270, 50, ( uint8_t * )&x_DynNetwork.c_Netmask, LEFT_MODE ); 
-    display.DisplayStringAt( 130, 70, ( uint8_t * )"Gateway: ", LEFT_MODE ); 
-    display.DisplayStringAt( 270, 70, ( uint8_t * )&x_DynNetwork.c_Gateway, LEFT_MODE );
+    //480x272
+    display.DrawRect( 0, 0, 125, 68);
+    display.DisplayStringAt( 2, 34, ( uint8_t * )"Settings", LEFT_MODE );
+    display.DrawRect( 0, 68, 125, 68);
+    display.DisplayStringAt( 2, 102, ( uint8_t * )"PING", LEFT_MODE );
     return 0;
 }
 
-uint32_t ul_ShowStaticMenu( )
+/*-----------------------------------------------------------*/
+
+uint32_t ul_ShowSettings( void )
 {
-    ul_ResetDisplay( );
-    ul_CreateMenu( );
-    display.DrawRect( 125, 0, 125, 68);
-    display.DisplayStringAt( 130, 34, ( uint8_t * )"IP", LEFT_MODE );
-    display.DrawRect( 125, 68, 125, 68);
-    display.DisplayStringAt( 130, 102, ( uint8_t * )"Gateway", LEFT_MODE );
-    display.DrawRect( 125, 136, 125, 68);
-    display.DisplayStringAt( 130, 170, ( uint8_t * )"Netmask", LEFT_MODE );
+    osEvent x_Evt = queue.get();
+    if (x_Evt.status == osEventMessage) 
+    {
+        Network *x_DynNetwork = (Network*)x_Evt.value.p;
+        ul_ResetDisplay( );
+        ul_CreateMenu( );
+        display.SetFont( &Font16 );
+        display.DisplayStringAt( 130, 10, ( uint8_t * )"IP address: ", LEFT_MODE ); 
+        display.DisplayStringAt( 270, 10, ( uint8_t * )x_DynNetwork->c_IPAddress, LEFT_MODE );
+        display.DisplayStringAt( 130, 30, ( uint8_t * )"MAC Address: ", LEFT_MODE ); 
+        display.DisplayStringAt( 270, 30, ( uint8_t * )x_DynNetwork->c_MACAddress, LEFT_MODE );  
+        display.DisplayStringAt( 130, 50, ( uint8_t * )"Netmask: ", LEFT_MODE ); 
+        display.DisplayStringAt( 270, 50, ( uint8_t * )x_DynNetwork->c_Netmask, LEFT_MODE ); 
+        display.DisplayStringAt( 130, 70, ( uint8_t * )"Gateway: ", LEFT_MODE ); 
+        display.DisplayStringAt( 270, 70, ( uint8_t * )x_DynNetwork->c_Gateway, LEFT_MODE );
+        display.DisplayStringAt( 130, 90, ( uint8_t * )"Internet: ", LEFT_MODE ); 
+        if( ul_CheckInternet == 0 )
+        {
+            display.DisplayStringAt( 270, 90, ( uint8_t * )"connected", LEFT_MODE );
+        }
+        else
+        {
+            display.DisplayStringAt( 270, 90, ( uint8_t * )"not connected", LEFT_MODE );
+        }
+        mpool.free(x_DynNetwork);
+    }
     return 0;
 }
 
+/*-----------------------------------------------------------*/
+
 void v_TouchThread( void const *args )
 {
+     Timer x_Timer1;
+    uint32_t ul_Time =0;
+    uint32_t ul_Counter =0;
     TS_StateTypeDef Touch_State; 
+    ip_addr_t x_PingTarget = { 0x08080808 }; 
     
     Touch.Init( 420, 272 ); 
     
@@ -88,39 +157,53 @@
         Touch.GetState( &Touch_State );
         if( ( Touch_State.touchDetected )&& ( Touch_State.touchX[0] < 125 )&& ( Touch_State.touchY[0] < 69 ) ) 
         {
-            b_Dynamic = true;
+            ul_ResetDisplay( );
+            ul_CreateMenu( );
+            ul_ShowSettings( );
         } 
         else if( ( Touch_State.touchDetected )&& ( Touch_State.touchX[0] < 125 )&& ( Touch_State.touchY[0] > 68 )&& ( Touch_State.touchY[0] < 137 ) ) 
-        {
-            b_Dynamic = false;
-        }
-        else if( ( Touch_State.touchDetected )&& ( Touch_State.touchX[0] > 125 )&& ( Touch_State.touchY[0] < 68 )&& ( b_Dynamic == false) )                                         //button for static IP
-        {
-            
+        { 
+            for( ul_Counter = 0; ul_Counter < 4; ul_Counter++)
+            {
+                x_Timer1.start( );
+                ul_Ping( &x_PingTarget );
+                x_Timer1.stop( );
+                ul_Time = ul_Time + x_Timer1;
+            }
+            ul_ResetDisplay( );
+            ul_CreateMenu( );
+            ul_Time = ul_Time/4;
+            display.DisplayStringAt( 130, 10, ( uint8_t * )"Internet: ", LEFT_MODE );
+            if( ul_CheckInternet == 0 )
+            {
+                display.DisplayStringAt( 270, 90, ( uint8_t * )"connected", LEFT_MODE );
+            }
+            else
+            {
+                display.DisplayStringAt( 270, 90, ( uint8_t * )"not connected", LEFT_MODE );
+            }
+            display.DisplayStringAt( 130, 30, ( uint8_t * )"PING: ", LEFT_MODE ); 
+            display.DisplayStringAt( 270, 30, ( uint8_t * )ul_Time, LEFT_MODE );
         }
     }
 }
 
-int main( )
+/*-----------------------------------------------------------*/
+
+int main( void )
 {   
-    struct Network x_DynNetwork;
-    
-    ul_ResetDisplay( );
-    ul_CreateMenu( );
-    Thread t_Touch( v_TouchThread );
-    t_Touch.set_priority( osPriorityNormal );
-    
-    if( b_Dynamic == true )
+    while( ul_CheckDHCP( ) != 0 )
     {
-        if( ul_CheckDHCP( x_DynNetwork ) == 0 )
-        {
-            ul_ShowDynamicMenu( x_DynNetwork );
-            ul_CheckInternet( );
-        }
+        ul_ResetDisplay( );
+        ul_CreateMenu( );
+        
+        Thread t_Touch( v_TouchThread );
+        t_Touch.set_priority( osPriorityNormal );
+        
+        ul_ShowSettings( );
+        ul_CheckInternet( );
+        
+        wait_ms(500);                                           //kleinde delay => geen 1000 keer uitvoeren van checkdhcp => efficienter maar misschien iets trager
     }
-    else if( b_Dynamic == false )
-    {
-        ul_ShowStaticMenu( );
-    } 
     return 0;
 }