|
-
- #include "define.h"
- #include "MasterCtrlInterface.h"
- #ifdef USE_WINC1500
- #else
- #include "TCPIP_Stack/TCPIP.h"
- #endif
- #include "NetworkProtocol.h"
- #include "ProtocolDefs.h"
- #include "timer.h"
- #include <stdio.h>
- #include "ValveCtrl.h"
- #include "FlowMeter.h"
-
- #ifdef USE_WINC1500
- #else
- TCP_SOCKET MySocket;
- static BYTE MasterIP[] = "192.168.0.100";
- DWORD MasterPort = 2182;
- #endif
-
- int mConnectionState = MASTER_STATE_DISCONNECTED;
-
-
- int InitMasterCtrlIF()
- {
- ProtocolInit();
- TimerStart(MASTER_CONNECTION_TIMER,MASTER_RECONNECTION_TIMEOUT);
- return 1;
- }
-
- int ConnectToMasterCtrl()
- {
- #ifdef USE_WINC1500
- #else
- MySocket = TCPOpen((DWORD) (PTR_BASE) & MasterIP[0], TCP_OPEN_RAM_HOST, MasterPort, TCP_PURPOSE_GENERIC_TCP_CLIENT);
-
- // Abort operation if no TCP socket of type TCP_PURPOSE_GENERIC_TCP_CLIENT is available
- // If this ever happens, you need to go add one to TCPIPConfig.h
- if (MySocket == INVALID_SOCKET)
- {
- printf("Could not open socket to MasterCtrl\n");
- return 0;
- }
- printf("MasterCtrl Socket opened\n");
- #endif
- return 1;
- }
-
- void TickMasterCtrlInterface()
- {
- #ifdef USE_WINC1500
- #else
- WORD Pending = TCPIsGetReady(MySocket);
- if (Pending != 0)
- {
- // printf("Rx %d bytes\n",Pending);
- int i = 0;
- for(i = 0; i < Pending; i++)
- {
- BYTE Byte;
- if(TCPGet(MySocket,&Byte) == TRUE)
- {
- ProtocolAnalyzeNewData(Byte);
- }
- }
- }
-
- #ifdef CONNECT_DEVICE_TO_NETWORK
- if(mConnectionState == MASTER_STATE_DISCONNECTED)
- {
- if(IsTimerExpired(MASTER_CONNECTION_TIMER))
- {
- TimerStart(MASTER_CONNECTION_TIMER,MASTER_RESPONSE_TIMEOUT);
- mConnectionState = MASTER_STATE_CONNECTING;
- ConnectToMasterCtrl();
- }
- }
- else if(mConnectionState == MASTER_STATE_CONNECTING)
- {
- // if(IsTimerExpired(MASTER_CONNECTION_TIMER) == true) //
- // {
- // TCPClose(MySocket);
- // TimerStart(MASTER_CONNECTION_TIMER,MASTER_RESPONSE_TIMEOUT);
- // ConnectToMasterCtrl();
- // }
- }
- else if(mConnectionState == MASTER_STATE_CONNECTED)
- {
- // if(IsTimerExpired(MASTER_CONNECTION_TIMER))
- {
- if(TCPIsConnected(MySocket) == FALSE)
- {
- //we got disconnected...
- mConnectionState = MASTER_STATE_DISCONNECTED;
- TCPClose(MySocket);
-
- printf("Connection with MasterCtrl lost..\n");
- }
- TimerStart(MASTER_CONNECTION_TIMER,MASTER_RECONNECTION_TIMEOUT);
- }
-
- }
- #endif
- #endif
- }
-
- void NewMasterMessageReceived(char* Message)
- {
- // char Sender = Message[FRAME_SENDER_DEVICE_ID_INDEX];
- char Target = Message[FRAME_DEST_DEVICE_ID_INDEX];
- unsigned char Command = Message[FRAME_COMMAND_INDEX];
- char *Data = &Message[FRAME_DATA_INDEX];
-
- // printf("MasterMsgReceived %d \n",Command);
-
- if(Target == ID_ETHERNET_VIRTUAL)
- {
- switch(Command)
- {
- case ETH_NETWK_DEVICE_INFO_REQUEST:
- {
- char Data[2];
- Data[0] = ID_SPRINKLER_DEVICE;
- Data[1] = MY_DEVICE_ADDRESS; //Address
- SendFrame(ID_MASTER,MASTER_ADDRESS,ID_ETHERNET_VIRTUAL, ETH_NETWK_DEVICE_INFO_RESPONSE, Data,2,0);
- printf("Rx Device info request\n");
- // int FrameSize = -1;
- // unsigned char *FramePtr = ProtocolGetFrame(ID_MASTER,MASTER_ADDRESS,ID_ETHERNET_VIRTUAL, ETH_NETWK_DEVICE_INFO_RESPONSE, Data,2,0, &FrameSize);
- //
- // if(FrameSize > 0)
- // {
- // TCPPutArray(MySocket,FramePtr,FrameSize);
- // }
-
- break;
- }
- case ETH_NETWK_CONNECTION_REFUSED:
- {
- printf("Connection to server refused\n");
- break;
- }
- case ETH_NETWK_SET_DEVICE_INFO_ACK:
- {
- //Connected!
- mConnectionState = MASTER_STATE_CONNECTED;
- TimerStart(MASTER_CONNECTION_TIMER,MASTER_RECONNECTION_TIMEOUT);
- printf("Connected to server\n");
- break;
- }
- case ETH_NETWK_DEVICE_INFO_RESPONSE:
- default:
- {
- //error...
- break;
- }
- }
-
- }
- else if(Target == ID_SPRINKLER_DEVICE)
- {
- switch(Command)
- {
- case SPRINKLER_DEVICE_ACK:
- {
- break;
- }
- case SPRINKLER_DEVICE_STATUS_REQUEST:
- {
- unsigned char data[6];
- data[0] = (unsigned char)GetValveState();
- GetCurrentFlowBytes(&data[1]);
- data[3] = 0;
- data[4] = 0;
- data[5] = 0;
- SendFrame(ID_MASTER,MASTER_ADDRESS,ID_SPRINKLER_DEVICE, SPRINKLER_DEVICE_STATUS_RESPONSE, data,6,0);
- // printf("Status sent\n");
- break;
- }
- case SPRINKLER_DEVICE_SET_SPRINKLER_STATE_REQUEST:
- {
- unsigned char *MsgData;
- char data;
-
- MsgData = ProtocolMsgDataPtr();
- if(*MsgData == 1)
- {
- SetValve(VALVE_ON);
- data = 1;
- }
- else if(*MsgData == 1)
- {
- SetValve(VALVE_OFF);
- data = 1;
- }
- else
- {
- data = 0;
- }
-
- SendFrame(ID_MASTER,MASTER_ADDRESS,ID_SPRINKLER_DEVICE, SPRINKLER_DEVICE_SET_SPRINKLER_STATE_ACK,&data,1,0);
- break;
- }
- case SPRINKLER_DEVICE_GET_SPRINKLER_STATE_REQUEST:
- {
- unsigned char data;
- data = (unsigned char)GetValveState();
- SendFrame(ID_MASTER,MASTER_ADDRESS,ID_SPRINKLER_DEVICE, SPRINKLER_DEVICE_GET_SPRINKLER_STATE_RESPONSE,&data,1,0);
- break;
- }
- case SPRINKLER_DEVICE_GET_WATER_FLOW_REQUEST:
- {
- unsigned char data[2];
- GetCurrentFlowBytes(data);
- SendFrame(ID_MASTER,MASTER_ADDRESS,ID_SPRINKLER_DEVICE, SPRINKLER_DEVICE_GET_WATER_FLOW_RESPONSE,data,2,0);
- break;
- }
- case SPRINKLER_DEVICE_GET_MOISTURE_REQUEST:
- {
- break;
- }
- case SPRINKLER_DEVICE_SET_PROGRAM_REQUEST:
- {
- break;
- }
- case SPRINKLER_DEVICE_GET_PROGRAM_REQUEST:
- {
- break;
- }
- case SPRINKLER_DEVICE_SET_PARAMETERS_REQUEST:
- {
- break;
- }
- case SPRINKLER_DEVICE_GET_PARAMETERS_REQUEST:
- {
- break;
- }
-
- case SPRINKLER_DEVICE_STATUS_RESPONSE:
- case SPRINKLER_DEVICE_SET_SPRINKLER_STATE_ACK:
- case SPRINKLER_DEVICE_GET_SPRINKLER_STATE_RESPONSE:
- case SPRINKLER_DEVICE_GET_WATER_FLOW_RESPONSE:
- case SPRINKLER_DEVICE_GET_MOISTURE_RESPONSE:
- case SPRINKLER_DEVICE_SET_PROGRAM_ACK:
- case SPRINKLER_DEVICE_GET_PROGRAM_RESPONSE:
- case SPRINKLER_DEVICE_SET_PARAMETERS_ACK:
- case SPRINKLER_DEVICE_GET_PARAMETERS_RESPONSE:
- default:
- {
- //error
- break;
- }
- }
- }
- else
- {
- //Ignore..???
- }
- }
-
- bool SendFrame(unsigned char DestDevice,unsigned char DestAddress, unsigned char SenderDevice, unsigned char Cmd, unsigned char *Data,unsigned int Size,unsigned char Flags)
- {
-
- int FrameSize = -1;
- unsigned char *FramePtr = ProtocolGetFrame(DestDevice,DestAddress,SenderDevice, Cmd, Data,Size,Flags,&FrameSize);
-
- if(FrameSize > 0)
- {
- #ifdef USE_WINC1500
- #else
- TCPPutArray(MySocket,FramePtr,FrameSize);
- #endif
-
- }
- else
- {
- return false;
- }
-
-
- return true;
- }
|