1*9633a0e9SJakub Kicinski#!/usr/bin/env python 2*9633a0e9SJakub Kicinski# Copyright 2009 Simon Arlott 3*9633a0e9SJakub Kicinski# 4*9633a0e9SJakub Kicinski# This program is free software; you can redistribute it and/or modify it 5*9633a0e9SJakub Kicinski# under the terms of the GNU General Public License as published by the Free 6*9633a0e9SJakub Kicinski# Software Foundation; either version 2 of the License, or (at your option) 7*9633a0e9SJakub Kicinski# any later version. 8*9633a0e9SJakub Kicinski# 9*9633a0e9SJakub Kicinski# This program is distributed in the hope that it will be useful, but WITHOUT 10*9633a0e9SJakub Kicinski# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11*9633a0e9SJakub Kicinski# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12*9633a0e9SJakub Kicinski# more details. 13*9633a0e9SJakub Kicinski# 14*9633a0e9SJakub Kicinski# You should have received a copy of the GNU General Public License along with 15*9633a0e9SJakub Kicinski# this program; if not, write to the Free Software Foundation, Inc., 59 16*9633a0e9SJakub Kicinski# Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17*9633a0e9SJakub Kicinski# 18*9633a0e9SJakub Kicinski# Usage: cxacru-cf.py < cxacru-cf.bin 19*9633a0e9SJakub Kicinski# Output: values string suitable for the sysfs adsl_config attribute 20*9633a0e9SJakub Kicinski# 21*9633a0e9SJakub Kicinski# Warning: cxacru-cf.bin with MD5 hash cdbac2689969d5ed5d4850f117702110 22*9633a0e9SJakub Kicinski# contains mis-aligned values which will stop the modem from being able 23*9633a0e9SJakub Kicinski# to make a connection. If the first and last two bytes are removed then 24*9633a0e9SJakub Kicinski# the values become valid, but the modulation will be forced to ANSI 25*9633a0e9SJakub Kicinski# T1.413 only which may not be appropriate. 26*9633a0e9SJakub Kicinski# 27*9633a0e9SJakub Kicinski# The original binary format is a packed list of le32 values. 28*9633a0e9SJakub Kicinski 29*9633a0e9SJakub Kicinskiimport sys 30*9633a0e9SJakub Kicinskiimport struct 31*9633a0e9SJakub Kicinski 32*9633a0e9SJakub Kicinskii = 0 33*9633a0e9SJakub Kicinskiwhile True: 34*9633a0e9SJakub Kicinski buf = sys.stdin.read(4) 35*9633a0e9SJakub Kicinski 36*9633a0e9SJakub Kicinski if len(buf) == 0: 37*9633a0e9SJakub Kicinski break 38*9633a0e9SJakub Kicinski elif len(buf) != 4: 39*9633a0e9SJakub Kicinski sys.stdout.write("\n") 40*9633a0e9SJakub Kicinski sys.stderr.write("Error: read {0} not 4 bytes\n".format(len(buf))) 41*9633a0e9SJakub Kicinski sys.exit(1) 42*9633a0e9SJakub Kicinski 43*9633a0e9SJakub Kicinski if i > 0: 44*9633a0e9SJakub Kicinski sys.stdout.write(" ") 45*9633a0e9SJakub Kicinski sys.stdout.write("{0:x}={1}".format(i, struct.unpack("<I", buf)[0])) 46*9633a0e9SJakub Kicinski i += 1 47*9633a0e9SJakub Kicinski 48*9633a0e9SJakub Kicinskisys.stdout.write("\n") 49