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
neigbourhood/neighbourhood.h@13:327622e38551, 2011-07-01 (annotated)
- 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?
User | Revision | Line number | New 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 |