Exemple #1
0
    void OnDebugLogMessage(DieMessage message)
    {
        var    dlm  = (DieMessageDebugLog)message;
        string text = System.Text.Encoding.UTF8.GetString(dlm.data, 0, dlm.data.Length);

        Debug.Log(name + ": " + text);
    }
Exemple #2
0
    IEnumerator SendMessageWithAckOrTimeoutCr <T>(T message, DieMessageType ackType, float timeOut, System.Action <DieMessage> ackAction, System.Action timeoutAction)
        where T : DieMessage
    {
        DieMessage ackMessage            = null;
        float      startTime             = Time.time;
        MessageReceivedDelegate callback = (ackMsg) =>
        {
            ackMessage = ackMsg;
        };

        AddMessageHandler(ackType, callback);
        byte[] msgBytes = DieMessages.ToByteArray(message);
        DicePool.Instance.WriteDie(this, msgBytes, msgBytes.Length, null);
        while (ackMessage == null && Time.time < startTime + timeOut)
        {
            yield return(null);
        }
        RemoveMessageHandler(ackType, callback);
        if (ackMessage != null)
        {
            ackAction?.Invoke(ackMessage);
        }
        else
        {
            timeoutAction?.Invoke();
        }
    }
Exemple #3
0
 void OnTelemetryMessage(DieMessage message)
 {
     // Don't bother doing anything with the message if we don't have
     // anybody interested in telemetry data.
     if (_OnTelemetry != null)
     {
         // Notify anyone who cares
         var telem = (DieMessageAcc)message;
         _OnTelemetry.Invoke(this, telem.data);
     }
 }
Exemple #4
0
    void OnStateMessage(DieMessage message)
    {
        // Handle the message
        var stateMsg = (DieMessageState)message;

        state = (State)stateMsg.face;

        // Notify anyone who cares
        if (OnStateChanged != null)
        {
            OnStateChanged.Invoke(this, state);
        }
    }
Exemple #5
0
    IEnumerator SendMessageWithAckRetryCr <T>(T message, DieMessageType ackType, System.Action <DieMessage> ackAction)
        where T : DieMessage
    {
        DieMessage msgReceived = null;

        System.Action <DieMessage> msgAction = (msg) =>
        {
            msgReceived = msg;
        };
        while (msgReceived == null)
        {
            // Retry every half second if necessary
            yield return(StartCoroutine(SendMessageWithAckOrTimeoutCr(message, ackType, 0.5f, msgAction, null)));
        }
        ackAction?.Invoke(msgReceived);
    }
Exemple #6
0
        void OnNotifyUserMessage(DieMessage message)
        {
            var    notifyUserMsg = (DieMessageNotifyUser)message;
            bool   ok            = notifyUserMsg.ok != 0;
            bool   cancel        = notifyUserMsg.cancel != 0;
            float  timeout       = (float)notifyUserMsg.timeout_s;
            string text          = System.Text.Encoding.UTF8.GetString(notifyUserMsg.data, 0, notifyUserMsg.data.Length);

            PixelsApp.Instance.ShowDialogBox("Message from " + name, text, "Ok", cancel ? "Cancel" : null, (res) =>
            {
                PostMessage(new DieMessageNotifyUserAck()
                {
                    okCancel = (byte)(res ? 1 : 0)
                });
            });
        }
Exemple #7
0
    void OnStateMessage(DieMessage message)
    {
        // Handle the message
        var stateMsg = (DieMessageState)message;

        Debug.Log("State: " + ((State)(stateMsg.state)).ToString() + ", " + stateMsg.face);

        var newState = (State)stateMsg.state;
        var newFace  = stateMsg.face;

        if (newState != state || newFace != face)
        {
            state = newState;
            face  = newFace;

            // Notify anyone who cares
            OnStateChanged?.Invoke(this, state);
        }
    }
Exemple #8
0
    IEnumerator WaitForMessageCr(DieMessageType msgType, System.Action <DieMessage> msgReceivedCallback)
    {
        bool       msgReceived           = false;
        DieMessage msg                   = default(DieMessage);
        MessageReceivedDelegate callback = (ackMsg) =>
        {
            msgReceived = true;
            msg         = ackMsg;
        };

        AddMessageHandler(msgType, callback);
        yield return(new WaitUntil(() => msgReceived));

        RemoveMessageHandler(msgType, callback);
        if (msgReceivedCallback != null)
        {
            msgReceivedCallback.Invoke(msg);
        }
    }
Exemple #9
0
    void OnNotifyUserMessage(DieMessage message)
    {
        var    notifyUserMsg = (DieMessageNotifyUser)message;
        bool   ok            = notifyUserMsg.ok != 0;
        bool   cancel        = notifyUserMsg.cancel != 0;
        float  timeout       = (float)notifyUserMsg.timeout_s;
        string text          = System.Text.Encoding.UTF8.GetString(notifyUserMsg.data, 0, notifyUserMsg.data.Length);
        var    uiInstance    = NotificationUI.Instance;

        if (uiInstance != null)
        {
            // Show the message and tell the die when user clicks Ok!
            uiInstance.Show(text, ok, cancel, timeout, (res) =>
            {
                PostMessage(new DieMessageNotifyUserAck()
                {
                    okCancel = (byte)(res ? 1 : 0)
                });
            });
        }
    }
Exemple #10
0
    void OnTelemetryMessage(DieMessage message)
    {
        // Don't bother doing anything with the message if we don't have
        // anybody interested in telemetry data.
        if (_OnTelemetry != null)
        {
            var telem = (DieMessageAcc)message;

            for (int i = 0; i < 2; ++i)
            {
                // Compute actual accelerometer readings (in Gs)
                float   cx  = (float)telem.data[i].X / (float)(1 << 11) * (float)(scale);
                float   cy  = (float)telem.data[i].Y / (float)(1 << 11) * (float)(scale);
                float   cz  = (float)telem.data[i].Z / (float)(1 << 11) * (float)(scale);
                Vector3 acc = new Vector3(cx, cy, cz);
                lastSampleTime += telem.data[i].DeltaTime;

                // Notify anyone who cares
                _OnTelemetry.Invoke(this, acc, lastSampleTime);
            }
        }
    }
Exemple #11
0
 void OnWhoAreYouMessage(DieMessage msg)
 {
     coroutineManager.StartCoroutine(OnWhoAreMessageCr());
 }
Exemple #12
0
 void OnRequestStateMessage(DieMessage msg)
 {
     coroutineManager.StartCoroutine(SendStateCr());
 }
Exemple #13
0
        void OnPlayAudioClip(DieMessage message)
        {
            var playClipMessage = (DieMessagePlaySound)message;

            AudioClipManager.Instance.PlayAudioClip((uint)playClipMessage.clipId);
        }
Exemple #14
0
    public static DieMessage FromByteArray(byte[] data)
    {
        DieMessage ret = null;

        if (data.Length > 0)
        {
            DieMessageType type = (DieMessageType)data[0];
            switch (type)
            {
            case DieMessageType.State:
                ret = FromByteArray <DieMessageState>(data);
                break;

            case DieMessageType.Telemetry:
                ret = FromByteArray <DieMessageAcc>(data);
                break;

            case DieMessageType.BulkSetup:
                ret = FromByteArray <DieMessageBulkSetup>(data);
                break;

            case DieMessageType.BulkData:
                ret = FromByteArray <DieMessageBulkData>(data);
                break;

            case DieMessageType.BulkSetupAck:
                ret = FromByteArray <DieMessageBulkSetupAck>(data);
                break;

            case DieMessageType.BulkDataAck:
                ret = FromByteArray <DieMessageBulkDataAck>(data);
                break;

            case DieMessageType.TransferAnimSet:
                ret = FromByteArray <DieMessageTransferAnimSet>(data);
                break;

            case DieMessageType.TransferAnimSetAck:
                ret = FromByteArray <DieMessageTransferAnimSetAck>(data);
                break;

            case DieMessageType.TransferSettings:
                ret = FromByteArray <DieMessageTransferSettings>(data);
                break;

            case DieMessageType.TransferSettingsAck:
                ret = FromByteArray <DieMessageTransferSettingsAck>(data);
                break;

            case DieMessageType.DebugLog:
                ret = FromByteArray <DieMessageDebugLog>(data);
                break;

            case DieMessageType.PlayAnim:
                ret = FromByteArray <DieMessagePlayAnim>(data);
                break;

            case DieMessageType.RequestAnimSet:
                ret = FromByteArray <DieMessageRequestAnimSet>(data);
                break;

            case DieMessageType.RequestSettings:
                ret = FromByteArray <DieMessageRequestSettings>(data);
                break;

            case DieMessageType.RequestTelemetry:
                ret = FromByteArray <DieMessageRequestTelemetry>(data);
                break;

            case DieMessageType.RenameFinished:
                ret = FromByteArray <DieMessageRenameFinished>(data);
                break;

            case DieMessageType.FlashFinished:
                ret = FromByteArray <DieMessageFlashFinished>(data);
                break;

            case DieMessageType.ProgramDefaultAnimSetFinished:
                ret = FromByteArray <DieMessageProgramDefaultAnimSetFinished>(data);
                break;

            case DieMessageType.DefaultAnimSetColor:
                ret = FromByteArray <DieMessageDefaultAnimSetColor>(data);
                break;

            default:
                break;
            }
        }
        return(ret);
    }
Exemple #15
0
    public static DieMessage FromByteArray(byte[] data)
    {
        DieMessage ret = null;

        if (data.Length > 0)
        {
            DieMessageType type = (DieMessageType)data[0];
            switch (type)
            {
            case DieMessageType.State:
                ret = FromByteArray <DieMessageState>(data);
                break;

            case DieMessageType.WhoAreYou:
                ret = FromByteArray <DieMessageWhoAreYou>(data);
                break;

            case DieMessageType.IAmADie:
                ret = FromByteArray <DieMessageIAmADie>(data);
                break;

            case DieMessageType.Telemetry:
                ret = FromByteArray <DieMessageAcc>(data);
                break;

            case DieMessageType.BulkSetup:
                ret = FromByteArray <DieMessageBulkSetup>(data);
                break;

            case DieMessageType.BulkData:
                ret = FromByteArray <DieMessageBulkData>(data);
                break;

            case DieMessageType.BulkSetupAck:
                ret = FromByteArray <DieMessageBulkSetupAck>(data);
                break;

            case DieMessageType.BulkDataAck:
                ret = FromByteArray <DieMessageBulkDataAck>(data);
                break;

            case DieMessageType.TransferAnimSet:
                ret = FromByteArray <DieMessageTransferAnimSet>(data);
                break;

            case DieMessageType.TransferAnimSetAck:
                ret = FromByteArray <DieMessageTransferAnimSetAck>(data);
                break;

            case DieMessageType.TransferSettings:
                ret = FromByteArray <DieMessageTransferSettings>(data);
                break;

            case DieMessageType.TransferSettingsAck:
                ret = FromByteArray <DieMessageTransferSettingsAck>(data);
                break;

            case DieMessageType.DebugLog:
                ret = FromByteArray <DieMessageDebugLog>(data);
                break;

            case DieMessageType.PlayAnim:
                ret = FromByteArray <DieMessagePlayAnim>(data);
                break;

            case DieMessageType.PlayAnimEvent:
                ret = FromByteArray <DieMessagePlayAnimEvent>(data);
                break;

            case DieMessageType.StopAnim:
                ret = FromByteArray <DieMessageStopAnim>(data);
                break;

            case DieMessageType.RequestState:
                ret = FromByteArray <DieMessageRequestState>(data);
                break;

            case DieMessageType.RequestAnimSet:
                ret = FromByteArray <DieMessageRequestAnimSet>(data);
                break;

            case DieMessageType.RequestSettings:
                ret = FromByteArray <DieMessageRequestSettings>(data);
                break;

            case DieMessageType.RequestTelemetry:
                ret = FromByteArray <DieMessageRequestTelemetry>(data);
                break;

            case DieMessageType.FlashFinished:
                ret = FromByteArray <DieMessageFlashFinished>(data);
                break;

            case DieMessageType.ProgramDefaultAnimSetFinished:
                ret = FromByteArray <DieMessageProgramDefaultAnimSetFinished>(data);
                break;

            case DieMessageType.DefaultAnimSetColor:
                ret = FromByteArray <DieMessageDefaultAnimSetColor>(data);
                break;

            case DieMessageType.BatteryLevel:
                ret = FromByteArray <DieMessageBatteryLevel>(data);
                break;

            case DieMessageType.RequestBatteryLevel:
                ret = FromByteArray <DieMessageRequestBatteryLevel>(data);
                break;

            case DieMessageType.Calibrate:
                ret = FromByteArray <DieMessageCalibrate>(data);
                break;

            case DieMessageType.CalibrateFace:
                ret = FromByteArray <DieMessageCalibrateFace>(data);
                break;

            case DieMessageType.NotifyUser:
                ret = FromByteArray <DieMessageNotifyUser>(data);
                break;

            case DieMessageType.NotifyUserAck:
                ret = FromByteArray <DieMessageNotifyUserAck>(data);
                break;

            case DieMessageType.TestHardware:
                ret = FromByteArray <DieMessageTestHardware>(data);
                break;

            case DieMessageType.SetStandardState:
                ret = FromByteArray <DieMessageSetStandardState>(data);
                break;

            case DieMessageType.SetLEDAnimState:
                ret = FromByteArray <DieMessageSetLEDAnimState>(data);
                break;

            case DieMessageType.SetBattleState:
                ret = FromByteArray <DieMessageSetBattleState>(data);
                break;

            case DieMessageType.AttractMode:
                ret = FromByteArray <DieMessageAttractMode>(data);
                break;

            case DieMessageType.PrintNormals:
                ret = FromByteArray <DieMessagePrintNormals>(data);
                break;

            default:
                throw new System.Exception("Unhandled Message type " + type.ToString() + " for marshalling");
            }
        }
        return(ret);
    }