Test version of BlueUSB stack. Includes SDP and RFCOMM. As Client it allows to connect to my fischertechnik TX Controller. As Server it echo\\\\\\\'s characters to Putty. PIN=1234

Dependencies:   mbed myUSBHost AvailableMemory

Dependents:   mbed_TANK_Kinect myBlueUSB_ros ftusbClass

Committer:
networker
Date:
Fri Jul 01 09:16:00 2011 +0000
Revision:
13:327622e38551
made some improvements to get massstorage functioning

Who changed what in which revision?

UserRevisionLine numberNew contents of line
networker 13:327622e38551 1 #ifndef NEIGHBOURHOOD_H
networker 13:327622e38551 2 #define NEIGHBOURHOOD_H
networker 13:327622e38551 3
networker 13:327622e38551 4 #include <list>
networker 13:327622e38551 5 #include "hci.h"
networker 13:327622e38551 6
networker 13:327622e38551 7 //#define STRICT_MRU
networker 13:327622e38551 8
networker 13:327622e38551 9 /******************************************************************************************
networker 13:327622e38551 10 call 'read' as part of the startup
networker 13:327622e38551 11 on HCI_READ-STORED-LINK-KEY -COMPLETED event, call 'set_cap'
networker 13:327622e38551 12 on RETURN_LINK_KEYS_EVENT call 'add' for each key with init=true
networker 13:327622e38551 13 on LINK_KEY_NOTIFICATION_EVENT call 'add' with init=false (default)
networker 13:327622e38551 14 on LINK_KEY_REQUEST_EVENT call 'get' and send the proper reply
networker 13:327622e38551 15 call 'write' as part of shutdown
networker 13:327622e38551 16
networker 13:327622e38551 17 a simpler approach could be to check for a link if it exists (single read) and try to add it.
networker 13:327622e38551 18 when it fails just delete all.
networker 13:327622e38551 19 ********************************************************************************************/
networker 13:327622e38551 20
networker 13:327622e38551 21 #define HCI_DELETE_STORED_LINK_KEY 0x0C12
networker 13:327622e38551 22 #define HCI_WRITE_STORED_LINK_KEY 0x0C11
networker 13:327622e38551 23 #define HCI_READ_STORED_LINK_KEY 0x0C0D
networker 13:327622e38551 24
networker 13:327622e38551 25 void printf(const BD_ADDR* addr);
networker 13:327622e38551 26
networker 13:327622e38551 27 class neighbourhood {
networker 13:327622e38551 28 static const int lksize = 16;
networker 13:327622e38551 29 struct item {
networker 13:327622e38551 30 BD_ADDR a;
networker 13:327622e38551 31 unsigned char lk[lksize];
networker 13:327622e38551 32 bool used;
networker 13:327622e38551 33 item (BD_ADDR *ad, const unsigned char *k, bool d) {
networker 13:327622e38551 34 memcpy(&a, ad, sizeof(BD_ADDR));
networker 13:327622e38551 35 memcpy(lk, k, lksize);
networker 13:327622e38551 36 used=d;
networker 13:327622e38551 37 }
networker 13:327622e38551 38 };
networker 13:327622e38551 39 int cap, initsize, used;
networker 13:327622e38551 40 list<item> keys;
networker 13:327622e38551 41 bool dirty;
networker 13:327622e38551 42 HCI *hci;
networker 13:327622e38551 43 void delete_link_key(BD_ADDR *a) {
networker 13:327622e38551 44 unsigned char param[sizeof(BD_ADDR)+1];
networker 13:327622e38551 45 memcpy(param, a, sizeof(BD_ADDR));
networker 13:327622e38551 46 param[sizeof(BD_ADDR)] = 0;
networker 13:327622e38551 47 hci->SendCmd(HCI_DELETE_STORED_LINK_KEY, param, sizeof(param));
networker 13:327622e38551 48 }
networker 13:327622e38551 49 void write_link_keys(unsigned char param[]) {
networker 13:327622e38551 50 hci->SendCmd(HCI_WRITE_STORED_LINK_KEY, param, param[0]*(sizeof(BD_ADDR)+lksize)+1);
networker 13:327622e38551 51 }
networker 13:327622e38551 52 public:
networker 13:327622e38551 53 neighbourhood(HCI *h): hci(h) {
networker 13:327622e38551 54 dirty = false;
networker 13:327622e38551 55 used = 0;
networker 13:327622e38551 56 cap=0;
networker 13:327622e38551 57 initsize=0;
networker 13:327622e38551 58 }
networker 13:327622e38551 59 void read() {
networker 13:327622e38551 60 unsigned char param[sizeof(BD_ADDR)+1];
networker 13:327622e38551 61 memset(param, 0, sizeof(BD_ADDR));
networker 13:327622e38551 62 param[sizeof(BD_ADDR)] = 1;
networker 13:327622e38551 63 hci->SendCmd(HCI_READ_STORED_LINK_KEY, param, sizeof(param));
networker 13:327622e38551 64 }
networker 13:327622e38551 65 void write();
networker 13:327622e38551 66 void set_cap(int c, int s) {
networker 13:327622e38551 67 cap = c;
networker 13:327622e38551 68 initsize = s;
networker 13:327622e38551 69 printf("Neighbourhood: capacity=%d, used=%d\n", c, s);
networker 13:327622e38551 70 }
networker 13:327622e38551 71 int get(BD_ADDR *a, unsigned char *key);
networker 13:327622e38551 72 int add(BD_ADDR *a, const unsigned char *key, bool init=false);
networker 13:327622e38551 73 };
networker 13:327622e38551 74
networker 13:327622e38551 75 extern neighbourhood *neighbors;
networker 13:327622e38551 76
networker 13:327622e38551 77 #endif