1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
--- bcm2035-tool/bcm2035-tool.c 2007/05/07 12:48:06 2000
+++ bcm2035-tool/bcm2035-tool.c 2007/05/07 12:55:47 2001
@@ -1,6 +1,8 @@
-/* bcm2035-tool - bcm2035 tool for Motorola EZX phones
+/* bcm2035-tool
*
* (C) 2007 by Daniel Ribeiro <drwyrm@gmail.com>
+ *
+ * MAC address as argument extension by: Jan Herman <2hp@seznam.cz>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
@@ -17,10 +19,10 @@
*
*/
+/* Default MAC address */
+#define BDADDR "\x06\x05\x04\x03\x02\x01"
//#define PATCH_FIRMWARE
-#define BDADDR "\xab\x89\x67\x45\x23\x01"
-
#include <stdio.h>
#include <string.h>
@@ -33,6 +35,7 @@
#include <sys/ioctl.h>
#include <termios.h>
#include "bcm2035-tool.h"
+//#include "bluetooth.h"
#ifdef PATCH_FIRMWARE
#include "motorola_patches.h"
@@ -180,18 +183,51 @@
}
+void mac2hex(const char *mac, u_char *dst)
+{
+
+ int i;
+ long l;
+ char *pp;
+
+ while (isspace(*mac))
+ mac++;
+
+ /* expect 6 hex octets separated by ':' or space/NUL if last octet */
+ for (i = 0; i < 6; i++) {
+ l = strtol(mac, &pp, 16);
+ if (pp == mac || l > 0xFF || l < 0)
+ return;
+ if (!(*pp == ':' || (i == 5 && (isspace(*pp) || *pp == '\0'))))
+ return;
+ /* 5-i swaps hex chars */
+ dst[5-i] = (u_char) l;
+ mac = pp + 1;
+ }
+ }
+
+char bdaddr[6];
+
int main(int argc, char **argv)
{
int fd, i;
struct termios term;
char buf[1024];
- char bdaddr[6];
-
- if (argc < 2) {
- printf("use: %s <device>\n", argv[0]);
+
+ if (argc < 3) {
+ printf("BCM2035 Tool:\n");
+ printf("Usage: %s <device> <bdaddr>\n", argv[0]);
exit(1);
}
+ if (strlen(argv[2]) < 17) {
+ printf("invalid argument %s!\n", argv[2]);
+ exit(1);
+ }
+
+ /* Converts MAC address to swapped HEX */
+ mac2hex(argv[2], bdaddr);
+
fd = open (argv[1], O_RDWR | O_NOCTTY );
if(fd < 0) exit(-1);
@@ -212,7 +248,7 @@
#endif
set_baud(fd, 460800);
- send_cmd(fd, CMD_SET_BDADDR, BDADDR, 6);
+ send_cmd(fd, CMD_SET_BDADDR, bdaddr, 6);
i = N_HCI;
if (ioctl(fd, TIOCSETD, &i) < 0) {
@@ -228,5 +264,3 @@
while (1) sleep(999999999);
return 0;
}
-
-
|