Exemple #1
0
 private void OnEvtButtonState(MicroBitMessageReader reader)
 {
     while (true)
     {
         int button;
         int state;
         if (!reader.ReadU8Hex(out button))
         {
             break;
         }
         if (!reader.ReadU8Hex(out state))
         {
             break;
         }
         if (button == (int)EButton.A)
         {
             _curr.Buttons[0].State = (EButtonState)state;
         }
         if (button == (int)EButton.B)
         {
             _curr.Buttons[1].State = (EButtonState)state;
         }
         _curr.Generation += 1;
         break;
     }
 }
Exemple #2
0
 private void OnEvtAccelGesture(MicroBitMessageReader reader)
 {
     while (true)
     {
         int gesture;
         if (!reader.ReadU8Hex(out gesture))
         {
             break;
         }
         _curr.AccGesture  = (EAccelerometerGesture)gesture;
         _curr.Generation += 1;
         break;
     }
 }
Exemple #3
0
 private void OnEvtPingReply(MicroBitMessageReader reader)
 {
     while (true)
     {
         if (!reader.ReadU8Hex(out _version))
         {
             break;
         }
         if (_version == KoduMicroBitVersion)
         {
             _status = EDeviceStatus.READY;
         }
         break;
     }
 }
Exemple #4
0
 private void OnEvtSampledState(MicroBitMessageReader reader)
 {
     // Copy the current state to the previous state.
     _prev = _curr;
     // Read the new current state.
     while (true)
     {
         short accX, accY, accZ;
         // int accPitch, accRoll;
         // int heading;
         int        pinCount;
         int        buttonA; int buttonB;
         PinState[] pins = new PinState[3];
         // Read button states
         if (!reader.Consume('b'))
         {
             break;
         }
         if (!reader.ReadU8Hex(out buttonA))
         {
             break;
         }
         if (!reader.ReadU8Hex(out buttonB))
         {
             break;
         }
         // Read accelerometer
         if (!reader.Consume('a'))
         {
             break;
         }
         if (!reader.ReadSignedU16Hex(out accX))
         {
             break;
         }
         if (!reader.ReadSignedU16Hex(out accY))
         {
             break;
         }
         if (!reader.ReadSignedU16Hex(out accZ))
         {
             break;
         }
         // if (!reader.ReadU16Hex(out accPitch)) break;
         // if (!reader.ReadU16Hex(out accRoll)) break;
         // Read compass
         // if (!reader.Consume('c')) break;
         // if (!reader.ReadU16Hex(out heading)) break;
         // Read input pins
         if (!reader.Consume('p'))
         {
             break;
         }
         if (!reader.ReadU8Hex(out pinCount))
         {
             break;
         }
         int pinsRemaining = pinCount;
         // Make sure we're in range.
         if (pinsRemaining > 3)
         {
             break;
         }
         while (pinsRemaining > 0)
         {
             int  pinId, pinValue;
             char pinMode;
             if (!reader.ReadU8Hex(out pinId))
             {
                 break;
             }
             if (pinId > 2)
             {
                 break;
             }
             if (!reader.ReadChar(out pinMode))
             {
                 break;
             }
             if (pinMode != 'a' && pinMode != 'd')
             {
                 break;
             }
             if (!reader.ReadU16Hex(out pinValue))
             {
                 break;
             }
             pins[pinId]           = new PinState(pinId);
             pins[pinId].Direction = EPinDirection.Input;
             pins[pinId].Mode      = pinMode == 'a' ? EPinOperatingMode.Analog : EPinOperatingMode.Digital;
             pins[pinId].Value     = pinValue;
             pinsRemaining--;
         }
         // If we didn't read all the pins then something is wrong with the message.
         if (pinsRemaining > 0)
         {
             break;
         }
         // Apply button states
         _curr.Buttons[0].State = (EButtonState)buttonA;
         _curr.Buttons[1].State = (EButtonState)buttonB;
         // Apply accelerometer
         accX = MyMath.Clamp(accX, MinAccel, MaxAccel);
         accY = MyMath.Clamp(accY, MinAccel, MaxAccel);
         accZ = MyMath.Clamp(accZ, MinAccel, MaxAccel);
         Vector3 acc = new Vector3(accY, accX, accZ);
         acc.Normalize();
         _curr.Acc = MyMath.NanProtect(acc, Vector3.Zero);
         // _curr.AccPitch = accPitch;
         // _curr.AccRoll = accRoll;
         // Apply compass
         // _curr.Heading = heading;
         // Apply pins
         for (int i = 0; i < pinCount; ++i)
         {
             _curr.Pins[pins[i].Id] = pins[i];
         }
         // Inc generation
         _curr.Generation += 1;
         break;
     }
 }