예제 #1
0
 def send_update_data(self, data):
     send_data = BasesProtocal.packUpdateData(data)
     rep_data = self.send_cmd(send_data)
     if rep_data is not None:
         result = BasesProtocal.parseRepResult(rep_data)
         if result is True:
             return True
         else:
             BasesLog.mlogger.warn(
                 'send_update_data result is error:{}'.format(result))
     else:
         BasesLog.mlogger.warn('send_update_data rep_data is None')
     return False
예제 #2
0
    def send_begin_update_cmd(self, address_list):
        send_data = BasesProtocal.packBeginUpdate(address_list)
        rep_data = self.send_cmd(send_data)
        if rep_data is not None:
            result = BasesProtocal.parseRepResult(rep_data)
            if result is True:
                return True
            else:
                BasesLog.mlogger.warn(
                    'send_begin_update_cmd result is error:{}'.format(result))
        else:
            BasesLog.mlogger.warn('send_begin_update_cmd rep_data is None')

        return False
예제 #3
0
    def recv_reponse(self):
        rep_data = []
        pack_data_list = []
        try:
            recv_data = self.tcp_socket.recv(1024)
            if not recv_data:
                BasesLog.mlogger.warn(
                    'tcp_socket recv return err {}'.format(recv_data))
                return None
            rep_data += list(recv_data)
            print('recv_reponse rep_data:', rep_data)
        except socket.timeout as err:
            BasesLog.mlogger.warn('recv nework is timeout{}'.format(err))
        except Exception as err:
            BasesLog.mlogger.warn(
                'tcp_socket recv nework is Exception{}'.format(err))
            self.network_connect_flag = False
            self.tcp_socket.close()
            self.ip_address = None
            event = LTEventType.EVENT_BASE_STATION_CTRLLER_DISCONNECT
            event_content = b''
            self.publish_event(event, event_content)
            return None

        while len(rep_data) > 4:
            if rep_data[0:2] == BasesProtocal.PACK_HEAD:
                pack_len = BasesProtocal.getLengh(
                    rep_data) + BasesProtocal.PACK_FIXED_LENGH
                if pack_len > len(rep_data):
                    BasesLog.mlogger.warn('recv reponse data length is error')
                    break
                pack_data = rep_data[:pack_len]
                if BasesProtocal.judgeCheckSum(pack_data) is True:
                    self.bases_ctrller_resp_count = 0
                    pack_data_list.append(pack_data)
                else:
                    BasesLog.mlogger.warn(
                        'recv reponse data check sum is error')

                for i in range(0, pack_len):
                    rep_data.pop(0)
            else:
                rep_data.pop(0)
        if len(pack_data_list) > 0:
            return pack_data_list[-1]
        return None
예제 #4
0
    def set_bases_motor(self, chip_id_str, motor_status):
        print('set_bases_motor  chip_id_str:', chip_id_str, motor_status)
        chip_id = self.chip_id_to_int_list(chip_id_str)
        if chip_id is None:
            return False
        send_data = BasesProtocal.packConfigMotor(chip_id, motor_status)
        rep_data = self.send_cmd(send_data)
        if rep_data is not None:
            result = BasesProtocal.parseRepResult(rep_data)
            if result is True:
                return True
            else:
                BasesLog.mlogger.warn(
                    'set_bases_motor result is error:{}'.format(result))
        else:
            BasesLog.mlogger.warn('set_bases_motor rep_data is None')

        return False
예제 #5
0
    def set_group(self, chip_id_str, group):
        print('set_group  chip_id_str:', chip_id_str, group)
        chip_id = self.chip_id_to_int_list(chip_id_str)
        if chip_id is None:
            return False
        send_data = BasesProtocal.packConfigGroup(chip_id, group)
        rep_data = self.send_cmd(send_data)
        if rep_data is not None:
            result = BasesProtocal.parseRepResult(rep_data)
            if result is True:
                return True
            else:
                BasesLog.mlogger.warn(
                    'set_group result is error:{}'.format(result))
        else:
            BasesLog.mlogger.warn('set_group rep_data is None')

        return False
예제 #6
0
    def send_scan_cmd(self):
        """
        发送扫描基站命令,扫描只能扫描地址,下位机无法做到扫描基站
        :rtype: 基站地址表达式
        """
        send_data = BasesProtocal.packGetBasesList()
        rep_data = self.send_cmd(send_data)
        if rep_data is not None:
            address_list = BasesProtocal.parseAddrList(rep_data)
            if address_list is not False:
                return address_list
            else:
                # BasesLog.mlogger.warn('send_scan_cmd rep_data is error:{}'.format(address_list))
                return None
        else:
            BasesLog.mlogger.warn('send_scan_cmd rep_data is None')

        return None
예제 #7
0
    def set_bases_addr(self, chip_id_str, bases_addr):
        print('set_bases_addr  chip_id_str:', chip_id_str, bases_addr)
        chip_id = self.chip_id_to_int_list(chip_id_str)
        if chip_id is None:
            return False
        send_data = BasesProtocal.packConfigAddr(chip_id, bases_addr)
        rep_data = self.send_cmd(send_data)
        if rep_data is not None:
            result = BasesProtocal.parseRepResult(rep_data)
            if result is True:
                # 更换了新的地址有一些数据结构要变
                self.handle_bases_addr_change(chip_id_str, bases_addr)
                return True
            else:
                BasesLog.mlogger.warn(
                    'set_bases_addr result is error:{}'.format(result))
        else:
            BasesLog.mlogger.warn('set_bases_addr rep_data is None')

        return False
예제 #8
0
    def set_host_name(self, chip_id_str, host_name):
        print('set_host_name  chip_id_str:', chip_id_str, host_name)
        chip_id = self.chip_id_to_int_list(chip_id_str)
        if chip_id is None:
            return False

        hostname = self.hostname_to_int(host_name)
        if hostname is None:
            return False

        send_data = BasesProtocal.packConfigHostname(chip_id, hostname)
        rep_data = self.send_cmd(send_data)
        if rep_data is not None:
            result = BasesProtocal.parseRepResult(rep_data)
            if result is True:
                return True
            else:
                BasesLog.mlogger.warn(
                    'set_bases_led result is error:{}'.format(result))
        else:
            BasesLog.mlogger.warn('set_bases_led rep_data is None')

        return False
예제 #9
0
    def get_bases_info(self, address):
        send_data = BasesProtocal.packGetBasesInfo(address)
        rep_data = self.send_cmd(send_data)
        if rep_data is not None:
            rep_map = BasesProtocal.parseBasesInfo(rep_data)
            if rep_map is False:
                BasesLog.mlogger.warn('parseBasesInfo return false')
                return None

            bases_property = message_pb2.BaseStationProperty()
            bases_property.group = rep_map['group']
            bases_property.address = rep_map['address']
            bases_property.chip_id = rep_map['chip_id']
            bases_property.host_name = rep_map['name']
            bases_property.frequency = 22000
            bases_property.led_status = rep_map['led']
            bases_property.motor_speed = rep_map['motor']
            return bases_property

        else:
            BasesLog.mlogger.warn(
                'get_bases_info rep_data is None:{}'.format(address))

        return None
예제 #10
0
    def handle_new_bases_connect(self, addres):
        #  根据地址获取新基站的详细信息
        # BasesLog.mlogger.warn('handle_new_bases_connect addres:%d', addres)
        send_data = BasesProtocal.packGetBasesInfo(addres)
        rep_data = self.send_cmd(send_data)
        if rep_data is not None:
            rep_map = BasesProtocal.parseBasesInfo(rep_data)
            if rep_map is False:
                BasesLog.mlogger.warn('parseBasesInfo return false')
                return None
            bases_property = message_pb2.BaseStationProperty()
            bases_property.group = rep_map['group']
            bases_property.address = rep_map['address']
            bases_property.chip_id = rep_map['chip_id']
            bases_property.host_name = rep_map['name']
            bases_property.frequency = 22000
            bases_property.led_status = rep_map['led']
            bases_property.motor_speed = rep_map['motor']
            bases_property.connect_status = True

            BasesLog.mlogger.warn(
                'handle_new_bases_connect bases_property: {}'.format(
                    bases_property))
            #  发送新基站连接事件
            event = LTEventType.EVENT_A_NEW_BASE_STATION_CONNECT
            event_content = bases_property.SerializeToString()
            self.publish_loc_event(event, event_content)

            self.bases_addr_chip_id_map[addres] = bases_property.chip_id
        else:
            BasesLog.mlogger.warn(
                'BasesDevice handle_new_bases_connect rep_data is None')
            return False

        self.bases_addr_count_map[addres] = 0
        return True