Esempio n. 1
0
def flashbinary(btmac, binfile):
    try:
        socket = BT_Socket(btmac, 0x1001)
    except:
        print "bad mac address"
        sys.exit()

    proto.determine_packet_format(socket)
    socket.send(proto.cmd_set_bt_sniff_off())

    f = open(binfile, 'rb')
    fileLen = len(f.read())

    numSectorsToErase = fileLen / 4096 + (fileLen % 4096 > 0)

    for i in range(numSectorsToErase):
        socket.send(proto.cmd_erase_spiflash_sector(8 + i))
        byte = socket.receive(4)

    f.seek(0)
    bytesToSend = fileLen
    addr_offset = 0
    data = f.read(220)

    while (len(data) != 0):
        print bytesToSend
        socket.send(proto.write_spiflash(32768 + addr_offset, data))
        socket.receive(4)
        addr_offset += 220
        f.seek(addr_offset)
        data = f.read(220)
        bytesToSend -= 220

    socket.send(proto.cmd_send_time())
    socket.send(proto.cmd_reboot_watch())
    socket.close()
import sys
import win32com.client  #used to control iTunes
import pulseprotocol as proto
from bt_comm import BT_Socket

#Establishing connection with the watch
btmac = sys.argv[1]
try:
    socket = BT_Socket(btmac, 0x1001)
except:
    print "Bad mac address, or if on Windows, the L2CAPServer might not be wokring"
    sys.exit()
proto.determine_packet_format(socket)
socket.send(proto.cmd_set_bt_sniff_off())
socket.receive(4)

#Establishing connection with iTunes
iTunes = win32com.client.gencache.EnsureDispatch("iTunes.Application")
iTunes.Pause()

while (1):
    #Receive the commain from the watch
    text = socket.receive(256)
    #If it's a valid command (Note: non-valid commands will have a length of 2)
    if (len(text) is 4):
        #transform it into an int
        key = proto.int_from_buffer(text)
        if (key is 1):
            iTunes.PlayPause()
        elif (key is 0):
            iTunes.NextTrack()
Esempio n. 3
0
def flashbinary(btmac, binfile, addr, is_url, reboot):
    tries = 1
    while True:
        try:
            socket = BT_Socket(btmac, 0x1001)
            break
        except:
            tries += 1
        if tries > 3:
            print "invalid, missing, or unavailable bd addr"
            sys.exit()

    proto.determine_packet_format(socket)
    socket.send(proto.cmd_set_bt_sniff_off())

    if (is_url):
        urllib.urlretrieve(binfile, "temp.bin")
        f = open("temp.bin", 'rb')
    else:
        f = open(binfile, 'rb')
    fileLen = len(f.read())

    numSectorsToErase = fileLen / 4096 + (fileLen % 4096 > 0)
    print "Preparing ",
    if proto.get_in_vlf() and addr == 0x40000:
        # TODO: I don't like having the hard-coded addr check here
        proto.cmd_erase_resources(fileLen)
    else:
        for i in range(numSectorsToErase):
            socket.send(proto.cmd_erase_spiflash_sector((addr / 4096) + i))
            resp_len = len(socket.receive(1024))
            # TODO FIX code duplication here
            if resp_len >= 4:
                error_count = 0
                print ".",
                #time.sleep(0.5)
            else:
                print "Retrying packet ..."
                print resp_len
                error_count = error_count + 1
                if error_count == 5:
                    socket = handle_error(btmac, socket)
                    error_count = 0
            sys.stdout.flush()
        print ""

    f.seek(0)
    bytesToSend = fileLen
    addr_offset = 0
    if proto.get_in_vlf():
        data_packet_chunk = 128
    else:
        data_packet_chunk = 220

    data = f.read(data_packet_chunk)
    error_count = 0
    while (len(data) != 0):
        print bytesToSend
        socket.send(proto.write_spiflash(addr + addr_offset, data))
        resp_len = len(socket.receive(1024))
        # TODO FIX code duplication here
        if resp_len >= 4:
            error_count = 0
            addr_offset += data_packet_chunk
            f.seek(addr_offset)
            data = f.read(data_packet_chunk)
            bytesToSend -= data_packet_chunk
            #time.sleep(0.5)
        else:
            print "Retrying packet ..."
            print resp_len
            error_count = error_count + 1
            if error_count == 5:
                socket = handle_error(btmac, socket)
                error_count = 0

    socket.send(proto.cmd_send_time())

    if is_url:
        f.close()
        os.remove("temp.bin")

    if reboot:
        socket.send(proto.cmd_reboot_watch())
    socket.close()
Esempio n. 4
0
def handle_error(btmac, socket):
    socket.close()
    socket = BT_Socket(btmac, 0x1001)
    return socket