def d_run (self, sr): datatype = self.datatype_for('run', 1009) track_index, first_lap_index, last_lap_index = sr.read('3H') sport, program, multisport = sr.read('3B 3x') quick_wokrout = objectify( ( 'time', 'distance' ), sr.read('L f') ) workout = self.d_workout(sr, forced_datatype = 1008) keys = ( 'track_index', 'first_lap_index', 'last_lap_index', 'sport', 'program', 'multisport', 'quick_wokrout', 'workout') values = ( track_index, first_lap_index, last_lap_index, sport, program, multisport, quick_wokrout, workout ) return objectify(keys,values)
def d_track_data (self,sr): datatype = self.datatype_for('track.data', 304) keys = ( 'position', 'time', 'altitude', 'distance', 'heart_rate', 'cadence', 'sensor' ) values = ( sr.read_position(), sr.read_time() ) + sr.read('2f 3B') result = objectify(keys,values) log.debug("time %s", result.time) return result
def d_track_header (self, sr): datatype = self.datatype_for('track.header', 310, 311, 312) if datatype == 311: return sr.read('H') elif datatype in [ 310, 312 ]: keys = ('display', 'color', 'identifier' ) values = sr.read('2B') + ( sr.read_string(), ) return objectify(keys,values)
def d_workout (self, sr, forced_datatype= None): datatype = forced_datatype or self.datatype_for('workout', 1008) valid_steps_counts = sr.read('L') steps = [] for i in xrange(20): keys = ( 'custom_name', 'target_custom_zone_low', 'target_custom_zone_high', 'duration_value', 'intensity', 'duration', 'target', 'target_value') values = ( sr.read_fixed_string(16), ) + sr.read('2f H 4B 2x') steps.append( objectify(keys,values) ) name = sr.read_fixed_string(16) sport = sr.read('B') return name, sport, steps[:valid_steps_counts]
def d_fitness_user_profile (self, sr): datatype = self.datatype_for('fitness', 1004) activities = Obj() for activity in [ 'running', 'biking', 'other' ]: heart_rate_zones = [] for i in xrange(5): low, high = sr.read('2B 2x') heart_rate_zones.append( Obj(low = low, high = high) ) speed_zones = [] for i in xrange(10): low, high = sr.read('2f') name = sr.read_fixed_string(16) speed_zones.append( Obj( name = name, low = low, high = high) ) gear_weight, maximum_heart_rate = sr.read('f B 3x') keys = ( 'heart_rate_zones', 'speed_zones', 'gear_weight','maximum_heart_rate' ) values = ( heart_rate_zones, speed_zones, gear_weight, maximum_heart_rate ) activities[ activity ] = objectify(keys,values) weight, birth_year, birth_month, birth_day, gender = sr.read('f H 3B') birthdate = datetime.date( birth_year, birth_month, birth_day) keys = ( 'activities', 'weight', 'birthdate', 'gender' ) values = ( activities, weight, birthdate, gender ) return objectify(keys,values)
def d_course_limits (self, sr): dataype = self.datatype_for('course.limits', 1013) keys = ( 'max_courses', 'max_course_laps', 'max_course_points', 'max_course_track_poins' ) return objectify(keys,sr.read('4L'))
def d_course_lap (self, sr): datatype = self.datatype_for('course.lap', 1007) keys = ( 'course_index', 'lap_index', 'total_time', 'total_distance', 'begin', 'end', 'average_heart_rate', 'maximum_heart_rate', 'intensity', 'average_cadence' ) values = sr.read('2H L f') + (sr.read_position(), sr.read_position()) + sr.read('4B') return objectify(keys,values)
def d_almanac_data (self, sr): datatype = self.datatype_for('almanac', 501) keys = ( 'week_number', 'af0', 'af1', 'eccentricity', 'sqrta', 'm0', 'w', 'omg0', 'odot', 'inclination', 'health' ) return objectify(keys,sr.read('H 10f B'))
def d_lap (self, sr): datatype = self.datatype_for('lap', 1011, 1015) keys = ( 'index', 'start_time', 'duration', 'distance', 'max_speed', 'begin', 'end', 'calories', 'average_heart_rate', 'maximum_heart_rate', 'intensity', 'average_cadence', 'trigger_method' ) values = ( sr.read('H 2x') , sr.read_time() ) + sr.read('L 2f') + ( sr.read_position(), sr.read_position() ) + sr.read('H 5B') return objectify(keys,values)