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 Nobuaki Aoki

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?

UserRevisionLine numberNew 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