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 #include "Utils.h"
networker 13:327622e38551 2 #include "neighbourhood.h"
networker 13:327622e38551 3
networker 13:327622e38551 4 neighbourhood *neighbors = 0;
networker 13:327622e38551 5
networker 13:327622e38551 6 int neighbourhood::get(BD_ADDR *a, unsigned char *key) {
networker 13:327622e38551 7 for (list<item>::iterator i = keys.begin(); i != keys.end(); i++)
networker 13:327622e38551 8 if (memcmp(a, &(*i).a, sizeof(BD_ADDR)) == 0) {
networker 13:327622e38551 9 memcpy(key, (*i).lk, lksize);
networker 13:327622e38551 10 #ifdef STRICT_MRU
networker 13:327622e38551 11 if (i != keys.begin()) {
networker 13:327622e38551 12 keys.push_front(*i);
networker 13:327622e38551 13 keys.erase(i);
networker 13:327622e38551 14 dirty = true;
networker 13:327622e38551 15 }
networker 13:327622e38551 16 #endif
networker 13:327622e38551 17 return 1;
networker 13:327622e38551 18 }
networker 13:327622e38551 19 return 0;
networker 13:327622e38551 20 }
networker 13:327622e38551 21
networker 13:327622e38551 22 int neighbourhood::add(BD_ADDR *a, const unsigned char *key, bool init) {
networker 13:327622e38551 23 for (list<item>::iterator i = keys.begin(); i != keys.end(); i++)
networker 13:327622e38551 24 if (memcmp(a, &(*i).a, sizeof(BD_ADDR)) == 0) {
networker 13:327622e38551 25 memcpy((*i).lk, key, lksize); //assume key has changed, update key
networker 13:327622e38551 26 (*i).used = true;
networker 13:327622e38551 27 return 1;
networker 13:327622e38551 28 }
networker 13:327622e38551 29 //new key
networker 13:327622e38551 30 printf("Neighbourhood: "); printf(a); printf("\n");
networker 13:327622e38551 31 if (keys.size() < cap) {
networker 13:327622e38551 32 keys.push_back(item(a, key, !init));//append as long as there is space
networker 13:327622e38551 33 } else {
networker 13:327622e38551 34 keys.push_front(item(a, key, true));//otherwise prepend
networker 13:327622e38551 35 dirty = true;
networker 13:327622e38551 36 }
networker 13:327622e38551 37 return 0;
networker 13:327622e38551 38 }
networker 13:327622e38551 39
networker 13:327622e38551 40 void neighbourhood::write() {
networker 13:327622e38551 41 int n = 0;
networker 13:327622e38551 42 static const int maxkey = 11;
networker 13:327622e38551 43 unsigned char param[maxkey*(lksize+sizeof(BD_ADDR))+1];
networker 13:327622e38551 44 int k = keys.size()-cap;
networker 13:327622e38551 45 list<item>::iterator i = keys.begin();
networker 13:327622e38551 46 while (i != keys.end()) {
networker 13:327622e38551 47 if (k>0) {
networker 13:327622e38551 48 if (!(*i).used) {
networker 13:327622e38551 49 delete_link_key(&(*i).a);//try to make some room
networker 13:327622e38551 50 keys.erase(i);
networker 13:327622e38551 51 k--;
networker 13:327622e38551 52 } else
networker 13:327622e38551 53 i++;
networker 13:327622e38551 54 } else
networker 13:327622e38551 55 break;
networker 13:327622e38551 56 }
networker 13:327622e38551 57 //hci->delete_link_keys();
networker 13:327622e38551 58 unsigned char *p = &param[1];
networker 13:327622e38551 59 for (list<item>::iterator i = keys.begin(); i != keys.end() && n<maxkey; i++, n++) {
networker 13:327622e38551 60 memcpy(p, &(*i).a, sizeof(BD_ADDR));
networker 13:327622e38551 61 p += sizeof(BD_ADDR);
networker 13:327622e38551 62 memcpy(p, (*i).lk, lksize);
networker 13:327622e38551 63 p += lksize;
networker 13:327622e38551 64 }
networker 13:327622e38551 65 param[0] = n;
networker 13:327622e38551 66 if (n > 0)
networker 13:327622e38551 67 write_link_keys(param);
networker 13:327622e38551 68 }
networker 13:327622e38551 69