Ad van der Weiden / Mbed 2 deprecated myBlueUSB

Dependencies:   mbed myUSBHost AvailableMemory

Dependents:   mbed_TANK_Kinect myBlueUSB_ros ftusbClass

Committer:
networker
Date:
Sat Jun 11 19:45:42 2011 +0000
Revision:
6:567607a9a79f
new release because of some changes to the libraries.
Also added functions to spoof the mac address on csr dongles

Who changed what in which revision?

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