def check_data(data): if len(data)!=BUS_DATA_LEN: print('error data len') return 0 if data[0]!=BUS_DATA_HEAD: print('error data head') return 0 if data[-1]!=BUS_DATA_END: print('error data end') return 0 if data[-2]!=crc_check(data[1:BUS_DATA_LEN-2]): print('error data checksum') return 0 #公交车id判断 #id=str(data[1:5],'gbk') #公交车线路判断 #line=str(data[5:9],'gbk').strip() stream=str(data[9:13], 'gbk') if stream !='上行' and stream!='下行': print('line stream error, should be 上行 or 下行') return 0 #公交车经纬度判断 lng=float(str(data[13:21], 'gbk'))/600000 if lng < 110 or lng > 120: print('lng %f error,out bound [110,120]'%lng) return 0 lat=float(str(data[21:29], 'gbk'))/600000 if lat < 30 or lat >40: print('lat %f error,out bound [30,40]'%lat) return 0 return 1
def pack_clear_all(): data=bytearray(5) data[0]=CODE_FRAME_HEAD data[1]=CODE_CLEAR data[2]=LEN_OF_CODE_CLEAR data[-2]=crc_check(data[:-2]) data[-1]=CODE_FRAME_END return data
def pack_clear_line_txt(r_num): data=bytearray(6) data[0]=CODE_FRAME_HEAD data[1]=CODE_CLEAR_TEXT data[2]=LEN_OF_CODE_CLEAR_TEXT data[3]=r_num data[-2]=crc_check(data[:-2]) data[-1]=CODE_FRAME_END return data
def pack_set_total_road(num): data=bytearray(6) data[0]=CODE_FRAME_HEAD data[1]=CODE_LINE data[2]=LEN_OF_CODE_LINE data[3]=num data[4]=crc_check(data[:-2]) data[5]=CODE_FRAME_END return data
def pack_set_speed(type, speed, stop): data=bytearray(8) data[0]=CODE_FRAME_HEAD data[1]=CODE_SPEED data[2]=LEN_OF_CODE_SPEED data[3]=type data[4]=speed data[5]=stop data[-2]=crc_check(data[:-2]) data[-1]=CODE_FRAME_END return data
def pack_set_line_txt(r_num, name, msg1, msg2): m1len=len(bytes(msg1, 'gbk')) m2len=len(bytes(msg2, 'gbk')) nlen=len(bytes(name, 'gbk')) tlen=m1len+m2len+4+4 #len of name should less than 4 if nlen < 4: name=name.rjust(4) if nlen > 4: name=name[0:4] data=bytearray(m1len+m2len+9+4) data[0]=CODE_FRAME_HEAD data[1]=CODE_TEXT data[2]=tlen data[3]=r_num data[4:8]=bytes(name, 'gbk') data[8]=m1len data[9:9+m1len]=bytes(msg1, 'gbk') data[9+m1len]=m2len data[10+m1len:-3]=bytes(msg2, 'gbk') data[-3]=0x1 data[-2]=crc_check(data[:-2]) data[-1]=CODE_FRAME_END return data