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
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
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
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
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
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
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
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
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
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