Based on myBlueUSB reference ver. http://mbed.org/users/networker/programs/myBlueUSB/lsm1ui
Dependencies: mbed myUSBHost AvailableMemory rfcomm myBlueUSB sdp
neighbourhood.cpp@0:8d8481ed6d49, 2011-07-05 (annotated)
- Committer:
- kenbumono
- Date:
- Tue Jul 05 08:25:59 2011 +0000
- Revision:
- 0:8d8481ed6d49
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenbumono | 0:8d8481ed6d49 | 1 | #include "Utils.h" |
kenbumono | 0:8d8481ed6d49 | 2 | #include "neighbourhood.h" |
kenbumono | 0:8d8481ed6d49 | 3 | |
kenbumono | 0:8d8481ed6d49 | 4 | neighbourhood *neighbors = 0; |
kenbumono | 0:8d8481ed6d49 | 5 | |
kenbumono | 0:8d8481ed6d49 | 6 | int neighbourhood::get(BD_ADDR *a, unsigned char *key) { |
kenbumono | 0:8d8481ed6d49 | 7 | for (list<item>::iterator i = keys.begin(); i != keys.end(); i++) |
kenbumono | 0:8d8481ed6d49 | 8 | if (memcmp(a, &(*i).a, sizeof(BD_ADDR)) == 0) { |
kenbumono | 0:8d8481ed6d49 | 9 | memcpy(key, (*i).lk, lksize); |
kenbumono | 0:8d8481ed6d49 | 10 | #ifdef STRICT_MRU |
kenbumono | 0:8d8481ed6d49 | 11 | if (i != keys.begin()) { |
kenbumono | 0:8d8481ed6d49 | 12 | keys.push_front(*i); |
kenbumono | 0:8d8481ed6d49 | 13 | keys.erase(i); |
kenbumono | 0:8d8481ed6d49 | 14 | dirty = true; |
kenbumono | 0:8d8481ed6d49 | 15 | } |
kenbumono | 0:8d8481ed6d49 | 16 | #endif |
kenbumono | 0:8d8481ed6d49 | 17 | return 1; |
kenbumono | 0:8d8481ed6d49 | 18 | } |
kenbumono | 0:8d8481ed6d49 | 19 | return 0; |
kenbumono | 0:8d8481ed6d49 | 20 | } |
kenbumono | 0:8d8481ed6d49 | 21 | |
kenbumono | 0:8d8481ed6d49 | 22 | int neighbourhood::add(BD_ADDR *a, const unsigned char *key, bool init) { |
kenbumono | 0:8d8481ed6d49 | 23 | for (list<item>::iterator i = keys.begin(); i != keys.end(); i++) |
kenbumono | 0:8d8481ed6d49 | 24 | if (memcmp(a, &(*i).a, sizeof(BD_ADDR)) == 0) { |
kenbumono | 0:8d8481ed6d49 | 25 | memcpy((*i).lk, key, lksize); //assume key has changed, update key |
kenbumono | 0:8d8481ed6d49 | 26 | (*i).used = true; |
kenbumono | 0:8d8481ed6d49 | 27 | return 1; |
kenbumono | 0:8d8481ed6d49 | 28 | } |
kenbumono | 0:8d8481ed6d49 | 29 | //new key |
kenbumono | 0:8d8481ed6d49 | 30 | printf("Neighbourhood: "); printf(a); printf("\n"); |
kenbumono | 0:8d8481ed6d49 | 31 | if (keys.size() < cap) { |
kenbumono | 0:8d8481ed6d49 | 32 | keys.push_back(item(a, key, !init));//append as long as there is space |
kenbumono | 0:8d8481ed6d49 | 33 | } else { |
kenbumono | 0:8d8481ed6d49 | 34 | keys.push_front(item(a, key, true));//otherwise prepend |
kenbumono | 0:8d8481ed6d49 | 35 | dirty = true; |
kenbumono | 0:8d8481ed6d49 | 36 | } |
kenbumono | 0:8d8481ed6d49 | 37 | return 0; |
kenbumono | 0:8d8481ed6d49 | 38 | } |
kenbumono | 0:8d8481ed6d49 | 39 | |
kenbumono | 0:8d8481ed6d49 | 40 | void neighbourhood::write() { |
kenbumono | 0:8d8481ed6d49 | 41 | int n = 0; |
kenbumono | 0:8d8481ed6d49 | 42 | static const int maxkey = 11; |
kenbumono | 0:8d8481ed6d49 | 43 | unsigned char param[maxkey*(lksize+sizeof(BD_ADDR))+1]; |
kenbumono | 0:8d8481ed6d49 | 44 | int k = keys.size()-cap; |
kenbumono | 0:8d8481ed6d49 | 45 | list<item>::iterator i = keys.begin(); |
kenbumono | 0:8d8481ed6d49 | 46 | while (i != keys.end()) { |
kenbumono | 0:8d8481ed6d49 | 47 | if (k>0) { |
kenbumono | 0:8d8481ed6d49 | 48 | if (!(*i).used) { |
kenbumono | 0:8d8481ed6d49 | 49 | delete_link_key(&(*i).a);//try to make some room |
kenbumono | 0:8d8481ed6d49 | 50 | keys.erase(i); |
kenbumono | 0:8d8481ed6d49 | 51 | k--; |
kenbumono | 0:8d8481ed6d49 | 52 | } else |
kenbumono | 0:8d8481ed6d49 | 53 | i++; |
kenbumono | 0:8d8481ed6d49 | 54 | } else |
kenbumono | 0:8d8481ed6d49 | 55 | break; |
kenbumono | 0:8d8481ed6d49 | 56 | } |
kenbumono | 0:8d8481ed6d49 | 57 | //hci->delete_link_keys(); |
kenbumono | 0:8d8481ed6d49 | 58 | unsigned char *p = ¶m[1]; |
kenbumono | 0:8d8481ed6d49 | 59 | for (list<item>::iterator i = keys.begin(); i != keys.end() && n<maxkey; i++, n++) { |
kenbumono | 0:8d8481ed6d49 | 60 | memcpy(p, &(*i).a, sizeof(BD_ADDR)); |
kenbumono | 0:8d8481ed6d49 | 61 | p += sizeof(BD_ADDR); |
kenbumono | 0:8d8481ed6d49 | 62 | memcpy(p, (*i).lk, lksize); |
kenbumono | 0:8d8481ed6d49 | 63 | p += lksize; |
kenbumono | 0:8d8481ed6d49 | 64 | } |
kenbumono | 0:8d8481ed6d49 | 65 | param[0] = n; |
kenbumono | 0:8d8481ed6d49 | 66 | if (n > 0) |
kenbumono | 0:8d8481ed6d49 | 67 | write_link_keys(param); |
kenbumono | 0:8d8481ed6d49 | 68 | } |
kenbumono | 0:8d8481ed6d49 | 69 |