private async Task sendInputSequence(string sInputSequence)
 {
     for (int i = 0; i < sInputSequence.Length; ++i)
     {
         char             cInputLetter = sInputSequence[i];
         OvenManager.eBtn input        = s_rLetterToBtnMapping[cInputLetter];
         m_rOvenManager.setBtn(input, OvenManager.eBtnState.PRESSED);
         await(Task.Delay(iDELAY_AFTER_BTN_PRESS));
         m_rOvenManager.setBtn(input, OvenManager.eBtnState.UNPRESSED);
         await(Task.Delay(iDELAY_AFTER_BTN_RELEASE));
     }
 }
        // ugly but somewhat functional
        private async Task allowRemoteControl()
        {
            TaskCompletionSource <bool> canStopListening = new TaskCompletionSource <bool>();

            try {
                var streamSocketListener = new StreamSocketListener();
                streamSocketListener.ConnectionReceived += async
                                                               (StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args) => {
                    Debug.WriteLine("TCP: connection received");
                    string request;
                    using (var streamReader = new StreamReader(args.Socket.InputStream.AsStreamForRead())) {
                        while (true)
                        {
                            request = await streamReader.ReadLineAsync();

                            Debug.WriteLine("TCP <- " + request);
                            if (request.StartsWith("close"))
                            {
                                canStopListening.SetResult(true);
                                args.Socket.Dispose();
                            }
                            if (request.StartsWith("serial"))
                            {
                                string sFromUART = await m_rOvenManager.readFromUART();

                                Debug.WriteLine("UART <- " + sFromUART);
                            }
                            else if (request.StartsWith("konami"))
                            {
                                await sendInputSequence(KONAMI_CODE);;
                            }
                            else if (request.StartsWith("JP"))
                            {
                                await sendInputSequence(INGR_1);
                            }
                            else if (request.StartsWith("PP"))
                            {
                                await sendInputSequence(INGR_2);
                            }
                            else if (request.StartsWith("MR"))
                            {
                                await sendInputSequence(INGR_3);
                            }
                            else if (request.StartsWith("SA"))
                            {
                                await sendInputSequence(INGR_4);
                            }
                            else         // key press/release - request is one of [U|D|L|R][0|1]
                            {
                                OvenManager.eBtn      btn      = s_rLetterToBtnMapping[request[0]];
                                OvenManager.eBtnState btnState = request[1] == '0' ?
                                                                 OvenManager.eBtnState.PRESSED : OvenManager.eBtnState.UNPRESSED;
                                m_rOvenManager.setBtn(btn, btnState);
                            }
                        }
                    }
                };
                await streamSocketListener.BindServiceNameAsync("12345");

                Debug.WriteLine("TCP: waiting for connections");
                await canStopListening.Task;
                Debug.WriteLine("TCP: closing");
                streamSocketListener.Dispose();
            } catch (Exception ex) {
                SocketErrorStatus webErrorStatus = SocketError.GetStatus(ex.GetBaseException().HResult);
                Debug.WriteLine(webErrorStatus.ToString() != "Unknown" ? webErrorStatus.ToString() : ex.Message);
            }
        }