Pulse Oximeter (NONIN) communicates with mbed via Bluetooth dongle and sends Heart Rate and Oxygen Saturation via GPRS module
Dependencies: C12832 GPS GSM mbed
Fork of myBlueUSB_localfix by
neigbourhood/neighbourhood.h@3:55a622e3dbb5, 2015-04-14 (annotated)
- Committer:
- samialshorman
- Date:
- Tue Apr 14 21:48:07 2015 +0000
- Revision:
- 3:55a622e3dbb5
- Parent:
- 0:003889bc474f
Nonin (Pulse Oximeter) connected to mbed lpc 1768 by Bluetooth dongle and sends SMS including Heart Rate and Oxygen saturation by GPRS module
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nobukuma | 0:003889bc474f | 1 | #ifndef NEIGHBOURHOOD_H |
nobukuma | 0:003889bc474f | 2 | #define NEIGHBOURHOOD_H |
nobukuma | 0:003889bc474f | 3 | |
nobukuma | 0:003889bc474f | 4 | #include <list> |
nobukuma | 0:003889bc474f | 5 | #include "hci.h" |
nobukuma | 0:003889bc474f | 6 | |
nobukuma | 0:003889bc474f | 7 | //#define STRICT_MRU |
nobukuma | 0:003889bc474f | 8 | |
nobukuma | 0:003889bc474f | 9 | /****************************************************************************************** |
nobukuma | 0:003889bc474f | 10 | call 'read' as part of the startup |
nobukuma | 0:003889bc474f | 11 | on HCI_READ-STORED-LINK-KEY -COMPLETED event, call 'set_cap' |
nobukuma | 0:003889bc474f | 12 | on RETURN_LINK_KEYS_EVENT call 'add' for each key with init=true |
nobukuma | 0:003889bc474f | 13 | on LINK_KEY_NOTIFICATION_EVENT call 'add' with init=false (default) |
nobukuma | 0:003889bc474f | 14 | on LINK_KEY_REQUEST_EVENT call 'get' and send the proper reply |
nobukuma | 0:003889bc474f | 15 | call 'write' as part of shutdown |
nobukuma | 0:003889bc474f | 16 | |
nobukuma | 0:003889bc474f | 17 | a simpler approach could be to check for a link if it exists (single read) and try to add it. |
nobukuma | 0:003889bc474f | 18 | when it fails just delete all. |
nobukuma | 0:003889bc474f | 19 | ********************************************************************************************/ |
nobukuma | 0:003889bc474f | 20 | |
nobukuma | 0:003889bc474f | 21 | #define HCI_DELETE_STORED_LINK_KEY 0x0C12 |
nobukuma | 0:003889bc474f | 22 | #define HCI_WRITE_STORED_LINK_KEY 0x0C11 |
nobukuma | 0:003889bc474f | 23 | #define HCI_READ_STORED_LINK_KEY 0x0C0D |
nobukuma | 0:003889bc474f | 24 | |
nobukuma | 0:003889bc474f | 25 | void printf(const BD_ADDR* addr); |
nobukuma | 0:003889bc474f | 26 | |
nobukuma | 0:003889bc474f | 27 | class neighbourhood { |
nobukuma | 0:003889bc474f | 28 | static const int lksize = 16; |
nobukuma | 0:003889bc474f | 29 | struct item { |
nobukuma | 0:003889bc474f | 30 | BD_ADDR a; |
nobukuma | 0:003889bc474f | 31 | unsigned char lk[lksize]; |
nobukuma | 0:003889bc474f | 32 | bool used; |
nobukuma | 0:003889bc474f | 33 | item (BD_ADDR *ad, const unsigned char *k, bool d) { |
nobukuma | 0:003889bc474f | 34 | memcpy(&a, ad, sizeof(BD_ADDR)); |
nobukuma | 0:003889bc474f | 35 | memcpy(lk, k, lksize); |
nobukuma | 0:003889bc474f | 36 | used=d; |
nobukuma | 0:003889bc474f | 37 | } |
nobukuma | 0:003889bc474f | 38 | }; |
nobukuma | 0:003889bc474f | 39 | int cap, initsize, used; |
nobukuma | 0:003889bc474f | 40 | list<item> keys; |
nobukuma | 0:003889bc474f | 41 | bool dirty; |
nobukuma | 0:003889bc474f | 42 | HCI *hci; |
nobukuma | 0:003889bc474f | 43 | void delete_link_key(BD_ADDR *a) { |
nobukuma | 0:003889bc474f | 44 | unsigned char param[sizeof(BD_ADDR)+1]; |
nobukuma | 0:003889bc474f | 45 | memcpy(param, a, sizeof(BD_ADDR)); |
nobukuma | 0:003889bc474f | 46 | param[sizeof(BD_ADDR)] = 0; |
nobukuma | 0:003889bc474f | 47 | hci->SendCmd(HCI_DELETE_STORED_LINK_KEY, param, sizeof(param)); |
nobukuma | 0:003889bc474f | 48 | } |
nobukuma | 0:003889bc474f | 49 | void write_link_keys(unsigned char param[]) { |
nobukuma | 0:003889bc474f | 50 | hci->SendCmd(HCI_WRITE_STORED_LINK_KEY, param, param[0]*(sizeof(BD_ADDR)+lksize)+1); |
nobukuma | 0:003889bc474f | 51 | } |
nobukuma | 0:003889bc474f | 52 | public: |
nobukuma | 0:003889bc474f | 53 | neighbourhood(HCI *h): hci(h) { |
nobukuma | 0:003889bc474f | 54 | dirty = false; |
nobukuma | 0:003889bc474f | 55 | used = 0; |
nobukuma | 0:003889bc474f | 56 | cap=0; |
nobukuma | 0:003889bc474f | 57 | initsize=0; |
nobukuma | 0:003889bc474f | 58 | } |
nobukuma | 0:003889bc474f | 59 | void read() { |
nobukuma | 0:003889bc474f | 60 | unsigned char param[sizeof(BD_ADDR)+1]; |
nobukuma | 0:003889bc474f | 61 | memset(param, 0, sizeof(BD_ADDR)); |
nobukuma | 0:003889bc474f | 62 | param[sizeof(BD_ADDR)] = 1; |
nobukuma | 0:003889bc474f | 63 | hci->SendCmd(HCI_READ_STORED_LINK_KEY, param, sizeof(param)); |
nobukuma | 0:003889bc474f | 64 | } |
nobukuma | 0:003889bc474f | 65 | void write(); |
nobukuma | 0:003889bc474f | 66 | void set_cap(int c, int s) { |
nobukuma | 0:003889bc474f | 67 | cap = c; |
nobukuma | 0:003889bc474f | 68 | initsize = s; |
nobukuma | 0:003889bc474f | 69 | printf("Neighbourhood: capacity=%d, used=%d\n", c, s); |
nobukuma | 0:003889bc474f | 70 | } |
nobukuma | 0:003889bc474f | 71 | int get(BD_ADDR *a, unsigned char *key); |
nobukuma | 0:003889bc474f | 72 | int add(BD_ADDR *a, const unsigned char *key, bool init=false); |
nobukuma | 0:003889bc474f | 73 | }; |
nobukuma | 0:003889bc474f | 74 | |
nobukuma | 0:003889bc474f | 75 | extern neighbourhood *neighbors; |
nobukuma | 0:003889bc474f | 76 | |
nobukuma | 0:003889bc474f | 77 | #endif |