2017-02-10 9 views
1

Windows 10のIoTではC#を使用してX10コードをデコードするのが好きですが、RFデコードの経験はありませんので、これは私の新しい領域です。C#デコードX10コード

私はthisポストを見つけました。これをC#コードに変換しようとしましたが、成功しませんでした。誰もがこのX10コードをC#で正しくデコードする方法を知っていますか、誰かが私に正しいプロトコル仕様を指し示すことができますか?

ここには現在使用しているコードがありますが、ValueChangedイベントは呼び出されません。ここで

public static void Sniff(uint gpioPinNumb) 
     { 
      Task.Run(() => { 
       using (GpioPin pin = GpioController.GetDefault().OpenPin((int)gpioPinNumb, GpioSharingMode.Exclusive)) 
       { 
        pin.SetDriveMode(GpioPinDriveMode.Input); 

        Stopwatch sw = Stopwatch.StartNew(); 
        long elapsedMicrons = 0; 
        int[] states = new int[67]; 
        int[] durations = new int[67]; 
        uint changeCount = 0; 
        bool lockPassed = false; 
        bool isLock = false; 

        pin.ValueChanged += (GpioPin sender, GpioPinValueChangedEventArgs args) => 
        { 
         elapsedMicrons = sw.ElapsedTicks/10; 
         sw.Restart(); 

         //Debug.WriteLine(elapsedMicrons); 

         if (elapsedMicrons > 25000 && !lockPassed && !isLock) 
         { 
          //X10 lock started 
          changeCount = 0; 
          durations[changeCount++] = (int)elapsedMicrons; 
          isLock = true; 
          Debug.WriteLine("Lock Started"); 
          Debug.WriteLine(""); 
         } 
         else if (isLock) 
         { 
          if (changeCount >= durations.Length) 
          { 
           isLock = false; 
           changeCount = 0; 
           Debug.WriteLine("==============================="); 
           for (int i = 0; i < durations.Length; i++) 
           { 
            Debug.Write(durations[i++]); 
            Debug.Write(" "); 
           } 
           Debug.WriteLine(""); 
          } 
          else 
          { 
           durations[changeCount++] = (int)elapsedMicrons; 
          } 
         } 
        }; 
       } 
      }); 
     } 

答えて

0

私は現在、しかし、ValueChangedイベント が呼び出されていない、使用していたコードです。

この問題は、C#の "using"ステートメントがDispose()を呼び出すというステートメントを使用することによって発生します。これはClose()と同じです。また、Disposeが呼び出されるとすぐにオブジェクト自体がスコープから外れることもあります。安全のために

あなたは、このようなSniff方法のうち、pinを移動することができます:OK、これは今どのように正確に私は、この値をinterpreteん、最初の問題を修正し

private static GpioPin pin; 
    public static void Sniff(uint gpioPinNumb) 
    { 
     Task.Run(() => { 

       pin = GpioController.GetDefault().OpenPin((int)gpioPinNumb, GpioSharingMode.Exclusive); 
       pin.SetDriveMode(GpioPinDriveMode.Input); 

        ... 
        ... 
+0

?私はどんなパターンも見つけることができません。 –

+0

[this C#library](https://github.com/genielabs/x10-lib-dotnet)を参照できます。 –

関連する問題