Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.21 KB | None | 0 0
  1. #define CONT PT_YIELD(&rf_pt);
  2. #define RESET PT_RESTART(&rf_pt);
  3. #define EXPECT(x) if (!(x)) { RESET; }
  4.  
  5. PT_THREAD(rf_receive())
  6. {
  7.     bool databit;
  8.     PT_BEGIN(&rf_pt);
  9.  
  10.     // wait for first 10
  11.     PT_WAIT_UNTIL(&rf_pt, (cur_bit == 0) && IS_VERY_LONG(cont_count));
  12.     putc('B');
  13.  
  14.     LED_TOGGLE;
  15.  
  16.     PT_YIELD(&rf_pt);
  17.  
  18.     for (i = 0; i < 4; ++i) {
  19.         // wait for 01
  20.         EXPECT((cur_bit == 1) && IS_SHORT(cont_count));
  21.         CONT;
  22.         // wait for 10
  23.         EXPECT((cur_bit == 0) && IS_SHORT(cont_count));
  24.         CONT;
  25.     }
  26.  
  27.     putc('P');
  28.  
  29.     // after preamble, 01
  30.     EXPECT((cur_bit == 1) && IS_SHORT(cont_count));
  31.  
  32.     CONT;
  33.  
  34.     // first long now
  35.  
  36.     CONT;
  37.  
  38.     for (i = 0; i < BITS_TO_RECEIVE; ++i) {
  39.         if (IS_SHORT(cont_count)) {
  40.             DEBUG(putc('S'));
  41.             CONT;
  42.             if (IS_SHORT(cont_count) || (i == (BITS_TO_RECEIVE-1))) {
  43.                 databit = !cur_bit;
  44.                 if (databit)
  45.                     putc('1');
  46.                 else
  47.                     putc('0');
  48.                 CONT;
  49.             } else {
  50.                 RESET;
  51.             }
  52.         } else if (IS_LONG(cont_count) || ((IS_VERY_LONG(cont_count)) && (i == (BITS_TO_RECEIVE-1)))) {
  53.             DEBUG(putc('L'));
  54.             databit = cur_bit;
  55.             if (databit)
  56.                 putc('1');
  57.             else
  58.                 putc('0');
  59.             CONT;
  60.         } else {
  61.             RESET;
  62.         }
  63.     }
  64.  
  65.     putc('E');
  66.     puts("\r\n");
  67.  
  68.     PT_END(&rf_pt);
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement