mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-29 13:20:39 +00:00
added experimental iPod touch 2G support
This commit is contained in:
parent
e521ef4042
commit
6852c42efe
@ -7,8 +7,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "bt_control_iphone.h"
|
#include "bt_control_iphone.h"
|
||||||
|
|
||||||
#include "hci_transport.h"
|
#include "hci_transport.h"
|
||||||
|
#include "hci.h"
|
||||||
|
|
||||||
#include <sys/utsname.h> // uname
|
#include <sys/utsname.h> // uname
|
||||||
#include <stdlib.h> // system
|
#include <stdlib.h> // system
|
||||||
@ -37,7 +37,9 @@ static char *get_machine_name(void){
|
|||||||
*/
|
*/
|
||||||
static int iphone_valid(void *config){
|
static int iphone_valid(void *config){
|
||||||
char * machine = get_machine_name();
|
char * machine = get_machine_name();
|
||||||
return strncmp("iPhone", machine, strlen("iPhone")) == 0;
|
if (!strncmp("iPhone", machine, strlen("iPhone" ))) return 1;
|
||||||
|
if (!strncmp("iPod2,1", machine, strlen("iPod2,1"))) return 1;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char * iphone_name(void *config){
|
static const char * iphone_name(void *config){
|
||||||
@ -48,7 +50,6 @@ static void iphone_set_pskey(int fd, int key, int value){
|
|||||||
sprintf(buffer, "csr -p 0x%04x=0x%04x\n", key, value);
|
sprintf(buffer, "csr -p 0x%04x=0x%04x\n", key, value);
|
||||||
write(fd, buffer, 21);
|
write(fd, buffer, 21);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int iphone_write_initscript (void *config, int output){
|
static int iphone_write_initscript (void *config, int output){
|
||||||
|
|
||||||
@ -59,11 +60,20 @@ static int iphone_write_initscript (void *config, int output){
|
|||||||
uint32_t baud_key = (4096 * (uart_config->baudrate/100) + 4999) / 10000;
|
uint32_t baud_key = (4096 * (uart_config->baudrate/100) + 4999) / 10000;
|
||||||
printf("Baud key %u\n", baud_key);
|
printf("Baud key %u\n", baud_key);
|
||||||
|
|
||||||
|
// pick random BT address
|
||||||
|
uint32_t random_nr = random();
|
||||||
|
|
||||||
// construct script path from device name
|
// construct script path from device name
|
||||||
strcpy(buffer, "/etc/bluetool/");
|
strcpy(buffer, "/etc/bluetool/");
|
||||||
char *machine = get_machine_name();
|
char *machine = get_machine_name();
|
||||||
strcat(buffer, machine);
|
strcat(buffer, machine);
|
||||||
strcat(buffer, ".init.script");
|
if (strncmp(machine, "iPhone", strlen("iPhone")) == 0){
|
||||||
|
// It's an iPhone
|
||||||
|
strcat(buffer, ".init.script");
|
||||||
|
} else {
|
||||||
|
// It's an iPod Touch (2G)
|
||||||
|
strcat(buffer, ".boot.script");
|
||||||
|
}
|
||||||
|
|
||||||
// open script
|
// open script
|
||||||
int input = open(buffer, O_RDONLY);
|
int input = open(buffer, O_RDONLY);
|
||||||
@ -103,6 +113,7 @@ static int iphone_write_initscript (void *config, int output){
|
|||||||
pos++;
|
pos++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// iPhone1,1 & iPhone 2,1:
|
||||||
// check for "csr -p 0x1234=0x5678" (20)
|
// check for "csr -p 0x1234=0x5678" (20)
|
||||||
if (store == 1 && pos == 20) {
|
if (store == 1 && pos == 20) {
|
||||||
int pskey, value;
|
int pskey, value;
|
||||||
@ -128,6 +139,38 @@ static int iphone_write_initscript (void *config, int output){
|
|||||||
mirror = 1;
|
mirror = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// iPod2,1
|
||||||
|
// check for bcm -X
|
||||||
|
if (store == 1 && pos == 7){
|
||||||
|
store = 0;
|
||||||
|
if (strncmp(buffer, "bcm -", 5) == 0) {
|
||||||
|
switch (buffer[5]){
|
||||||
|
case 'a': // BT Address
|
||||||
|
write(output, buffer, pos); // "bcm -a "
|
||||||
|
sprintf(buffer, "00:00:%.2x:%.2x:%.2x:%.2x\n", random_nr & 0xff, (random_nr >> 8) & 0xff,
|
||||||
|
(random_nr >> 16) & 0xff, (random_nr >> 24) & 0xff);
|
||||||
|
write(output, buffer, 18);
|
||||||
|
mirror = 0;
|
||||||
|
break;
|
||||||
|
case 'b': // baud rate command
|
||||||
|
write(output, buffer, pos); // "bcm -b "
|
||||||
|
sprintf(buffer, "%u\n", uart_config->baudrate);
|
||||||
|
write(output, buffer, strlen(buffer));
|
||||||
|
mirror = 0;
|
||||||
|
break;
|
||||||
|
case 's': // sleep mode - replace with "wake" command?
|
||||||
|
write(output,"wake on\n", strlen("wake on\n"));
|
||||||
|
mirror = 0;
|
||||||
|
break;
|
||||||
|
default: // other command
|
||||||
|
write(output, buffer, pos);
|
||||||
|
mirror = 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
write(output, buffer, pos);
|
||||||
|
mirror = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// close input
|
// close input
|
||||||
close(input);
|
close(input);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user