Project Embedded Systems E-ict Denayer
Dependencies: BSP_DISCO_F746NG F7_Ethernet LCD_DISCO_F746NG TS_DISCO_F746NG mbed-rtos mbed
Diff: main.cpp
- 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; }