void closeAll(shoeSide side)
 {
     Byte [] sendLargeByte = new Byte[6];
     sendLargeByte[0] = 0xFF;
     sendLargeByte[1] = 0xFF;
     sendLargeByte[2] = 0x00;
     sendLargeByte[3] = 0xFF;
     sendLargeByte[4] = 0xFF;
     sendLargeByte[5] = 0x00;
     if (side == shoeSide.left)
     {
         for (int i = 1; i < 8; i++)
         {
             leftFootValveStatus[i] = false;
         }
         udpClient.Send(sendLargeByte, sendLargeByte.Length, remoteEndPointLeft);
     }
     else
     {
         for (int i = 1; i < 8; i++)
         {
             rightFootValveStatus[i] = false;
         }
         udpClient.Send(sendLargeByte, sendLargeByte.Length, remoteEndPointRight);
     }
 }
    //0 is left shoe, 1 is right shoe
    public string shoeValve(shoeSide sSide)
    {
        //returns a string with the valve state
        string valveStatus = "";

        for (int i = 7; i > 0; i--)
        {
            if (sSide == shoeSide.left)
            {
                if (leftFootValveStatus[i])
                {
                    //append to string
                    valveStatus = valveStatus + 1;
                }
                else
                {
                    valveStatus = valveStatus + 0;
                }
            }
            else
            {
                if (rightFootValveStatus[i])
                {
                    valveStatus = valveStatus + 1;
                }
                else
                {
                    valveStatus = valveStatus + 0;
                }
            }
        }
        return(valveStatus);
    }
 //Toggles the valve sent in with valve and the shoe corresponding to side
 void toggleValve(int valve, shoeSide side)
 //valve should be 0-6
 {
     valve = valve + 1;
     if (side == shoeSide.left)
     {
         if (leftFootValveStatus[valve])            //left foot valve is open
         {
             leftFootValveStatus[valve] = false;
             //close valve
             string  hex           = valve.ToString("X");
             Byte [] sendLargeByte = new Byte[6];
             sendLargeByte[0] = Convert.ToByte(hex, 16);
             sendLargeByte[1] = 0xFF;
             sendLargeByte[2] = 0x00;
             sendLargeByte[3] = Convert.ToByte(hex, 16);
             sendLargeByte[4] = 0xFF;
             sendLargeByte[5] = 0x00;
             udpClient.Send(sendLargeByte, sendLargeByte.Length, remoteEndPointLeft);
         }
         else             //left foot valve is closed
         {
             leftFootValveStatus[valve] = true;
             string hex = valve.ToString("X");
             sendBytes[0] = Convert.ToByte(hex, 16);
             sendBytes[1] = 0xEE;
             sendBytes[2] = 0x00;
             udpClient.Send(sendBytes, sendBytes.Length, remoteEndPointLeft);
         }
     }
     else                                 //implied right side
     {
         if (rightFootValveStatus[valve]) //left foot valve is open
         {
             rightFootValveStatus[valve] = false;
             //close valve
             string  hex           = valve.ToString("X");
             Byte [] sendLargeByte = new Byte[6];
             sendLargeByte[0] = Convert.ToByte(hex, 16);
             sendLargeByte[1] = 0xFF;
             sendLargeByte[2] = 0x00;
             sendLargeByte[3] = Convert.ToByte(hex, 16);
             sendLargeByte[4] = 0xFF;
             sendLargeByte[5] = 0x00;
             udpClient.Send(sendLargeByte, sendLargeByte.Length, remoteEndPointRight);
         }
         else             //left foot valve is closed
         {
             rightFootValveStatus[valve] = true;
             string hex = valve.ToString("X");
             sendBytes[0] = Convert.ToByte(hex, 16);
             sendBytes[1] = 0xEE;
             sendBytes[2] = 0x00;
             udpClient.Send(sendBytes, sendBytes.Length, remoteEndPointRight);
         }
     }
 }
    //opens all valves in openarray, closes all vales in close array (like usual,
    //it closes them twice)
    void openValvecloseValve(int [] openArray, int [] closeArray, shoeSide sSide)
    {
        //3 bytes for opening, 6 for closings (since there are two close messages)
        int size = openArray.Length * 3 + closeArray.Length * 6;

        Byte [] sendLargeByte = new Byte[size];
        for (int i = 0; i < openArray.Length; i++)
        {
            if (sSide == shoeSide.left)
            {
                leftFootValveStatus[openArray[i]] = true;
            }
            else
            {
                rightFootValveStatus[openArray[i]] = true;
            }
            string hex = openArray[i].ToString();
            sendLargeByte[(i * 3)]       = Convert.ToByte(hex, 16);
            sendLargeByte[((i * 3) + 1)] = 0xEE;
            sendLargeByte[((i * 3) + 2)] = 0x00;
        }
        for (int i = 0; i < closeArray.Length; i++)
        {
            if (sSide == shoeSide.left)
            {
                leftFootValveStatus[closeArray[i]] = false;
            }
            else
            {
                rightFootValveStatus[closeArray[i]] = false;
            }
            string hex = closeArray[i].ToString();
            sendLargeByte[openArray.Length * 3 + (i * 6)]       = Convert.ToByte(hex, 16);
            sendLargeByte[openArray.Length * 3 + ((i * 6) + 1)] = 0xFF;
            sendLargeByte[openArray.Length * 3 + ((i * 6) + 2)] = 0x00;
            sendLargeByte[openArray.Length * 3 + ((i * 6) + 3)] = Convert.ToByte(hex, 16);
            sendLargeByte[openArray.Length * 3 + ((i * 6) + 4)] = 0xFF;
            sendLargeByte[openArray.Length * 3 + ((i * 6) + 5)] = 0x00;
        }
        if (sSide == shoeSide.left)
        {
            udpClient.Send(sendLargeByte, sendLargeByte.Length, remoteEndPointLeft);
        }
        else if (sSide == shoeSide.right)
        {
            udpClient.Send(sendLargeByte, sendLargeByte.Length, remoteEndPointRight);
        }
    }
 void openAll(shoeSide side)
 {
     sendBytes[0] = 0xEE;
     sendBytes[1] = 0xEE;
     sendBytes[2] = 0x00;
     if (side == shoeSide.left)
     {
         for (int i = 1; i < 8; i++)
         {
             leftFootValveStatus[i] = true;
         }
         udpClient.Send(sendBytes, sendBytes.Length, remoteEndPointLeft);
     }
     else
     {
         for (int i = 1; i < 8; i++)
         {
             rightFootValveStatus[i] = true;
         }
         udpClient.Send(sendBytes, sendBytes.Length, remoteEndPointRight);
     }
 }
    //uses rightfootstatus and leftfootstatus dictionarys to compile the openarray/closearray
    //to resend valve status to the shoe in case if dropped packets
    public void resendValveState(shoeSide sSide)
    {
        int openAmount  = 0;
        int closeAmount = 0;

        for (int i = 1; i < 8; i++)
        {
            if (sSide == shoeSide.left)
            {
                if (leftFootValveStatus[i])
                {
                    openAmount++;
                }
                else
                {
                    closeAmount++;
                }
            }
            else
            {
                if (rightFootValveStatus[i])
                {
                    openAmount++;
                }
                else
                {
                    closeAmount++;
                }
            }
        }
        int[] openArray  = new int[openAmount];
        int[] closeArray = new int[closeAmount];
        //7654321
        int openIter  = 0;
        int closeIter = 0;

        for (int i = 1; i < 8; i++)
        {
            if (sSide == shoeSide.left)
            {
                if (leftFootValveStatus[i])
                {
                    openArray[openIter] = i;
                    openIter++;
                }
                else
                {
                    closeArray[closeIter] = i;
                    closeIter++;
                }
            }
            else
            {
                if (rightFootValveStatus[i])
                {
                    openArray[openIter] = i;
                    openIter++;
                }
                else
                {
                    closeArray[closeIter] = i;
                    closeIter++;
                }
            }
        }

        openValvecloseValve(openArray, closeArray, sSide);
    }