JeeLib
An easy interface to the port headers, the RF12 driver library, timers, low-power code, and more.
 All Classes Files Functions Variables Enumerations Macros Pages
RF12sio.h
Go to the documentation of this file.
1 // 2009-05-07 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php
2 
3 /// @file
4 /// Streaming I/O layer on top of the RF12.h driver.
5 
6 /// This class is NOT the %RF12 driver. It provides a way to construct packets.
7 class RF12 {
8  enum { F_EXT = -6, F_STR, F_8, F_4, F_2, F_1 };
9 
10  MilliTimer sendTimer, ackTimer;
11  uint8_t txbase, txfill, txfields, txPending;
12  uint8_t txbuf[138]; // one full packet plus room for constructing next one
13  uint8_t rxpos, rxfield, ackHead, ackData;
14 
15  void initBuf(uint8_t base);
16  void addToBuf(uint8_t type, const void *ptr, uint8_t len);
17 
18 public:
19  RF12 () : txPending (0), ackHead (0) { initBuf(0); }
20 
21  RF12& put(const void*, char);
22  RF12& get(void*, char);
23  uint8_t read() { char v; get(&v, F_1); return v; }
24 
25  RF12& operator<< (char v) { return put(&v, F_1); }
26  RF12& operator<< (unsigned char v) { return put(&v, F_1); }
27  RF12& operator<< (int v) { return put(&v, F_2); }
28  RF12& operator<< (unsigned v) { return put(&v, F_2); }
29  RF12& operator<< (long v) { return put(&v, F_4); }
30  RF12& operator<< (unsigned long v) { return put(&v, F_4); }
31  RF12& operator<< (long long v) { return put(&v, F_8); }
32  RF12& operator<< (unsigned long long v) { return put(&v, F_8); }
33  RF12& operator<< (float v) { return put(&v, F_4); }
34  RF12& operator<< (double v) { return put(&v, F_8); }
35  RF12& operator<< (const char* v) { return put(v, F_STR); }
36  RF12& operator<< (const unsigned char* v) { return put(v, F_STR); }
37 
38  // max payload is one string arg of 63 chars: needs 64b, plus 8 for fields
39  uint8_t ready() const { return txfill <= sizeof txbuf - 72; }
40 
41  void send(uint8_t v);
42 
43  RF12& operator>> (char& v) { return get(&v, F_1); }
44  RF12& operator>> (unsigned char& v) { return get(&v, F_1); }
45  RF12& operator>> (int& v) { return get(&v, F_2); }
46  RF12& operator>> (unsigned& v) { return get(&v, F_2); }
47  RF12& operator>> (long& v) { return get(&v, F_4); }
48  RF12& operator>> (unsigned long& v) { return get(&v, F_4); }
49  RF12& operator>> (long long& v) { return get(&v, F_8); }
50  RF12& operator>> (unsigned long long& v) { return get(&v, F_8); }
51  RF12& operator>> (float& v) { return get(&v, F_4); }
52  RF12& operator>> (double& v) { return get(&v, F_8); }
53  RF12& operator>> (char* v) { return get(v, F_STR); }
54  RF12& operator>> (unsigned char* v) { return get(v, F_STR); }
55 
56  uint8_t poll();
57  uint8_t nextSize();
58 
59  void to(uint8_t node) {}
60  uint8_t from() { return 0; }
61 };
The millisecond timer can be used for timeouts up to 60000 milliseconds.
Definition: Ports.h:313
This class is NOT the RF12 driver. It provides a way to construct packets.
Definition: RF12sio.h:7