# -*- coding: utf-8 -*- # !/usr/bin/env python import logging import datetime import struct from ctypes import create_string_buffer from apilib.utils import xor_encrypt_buffer from apps.web.core.exceptions import ServiceException from .utils import pollDeviceInfo logger = logging.getLogger(__name__) class BtSmartBox(object): def __init__(self, device): self._device = device super(BtSmartBox, self).__init__() def support_count_down(self): return False def encode_cmd(self, cmdId, **kwargs): pass def decode_cmd(self, cmdId, command): pass def poll_notify(self, payload, **kwargs): return 1, '' def encrypt(self, buffer, offset = 4): xor_encrypt_buffer(buffer, offset, self._device['devNo']) for index in range(offset, offset + (20 - offset + 1) / 2): swap_index = 20 + offset - 1 - index left = ord(buffer.raw[index]) right = ord(buffer.raw[swap_index]) struct.pack_into(' 1 or self._device['minor'] > 1: # 从第二个版本开始支持加密功能 if 'chargeIndex' in kwargs['attachParas'] and kwargs['attachParas']['chargeIndex'] and \ kwargs['attachParas']['chargeIndex'] != 'undefined': s = struct.Struct(' 2 or (self._device['major'] == 2 and self._device['minor'] >= 2): buf = self.encrypt(buf, 5) else: buf = self.encrypt(buf) else: s = struct.Struct(' 1 or self._device['minor'] > 1: # 从第二个版本开始支持确认功能 buf = create_string_buffer(20) s = struct.Struct('