+ # check if samplerate is appropriate
+ self.samplerate = metadata['samplerate']
+ if (self.options['overdrive']):
+ self.put(0, 0, self.out_ann, [ANN_LINK,
+ ['NOTE: Sample rate checks assume overdrive mode.']])
+ if (self.samplerate < 2000000):
+ self.put(0, 0, self.out_ann, [ANN_LINK,
+ ['ERROR: Sampling rate is too low must be above 2MHz for proper overdrive mode decoding.']])
+ elif (self.samplerate < 5000000):
+ self.put(0, 0, self.out_ann, [ANN_LINK,
+ ['WARNING: Sampling rate is suggested to be above 5MHz for proper overdrive mode decoding.']])
+ else:
+ self.put(0, 0, self.out_ann, [ANN_LINK,
+ ['NOTE: Sample rate checks assume normal mode only.']])
+ if (self.samplerate < 400000):
+ self.put(0, 0, self.out_ann, [ANN_LINK,
+ ['ERROR: Sampling rate is too low must be above 400kHz for proper normal mode decoding.']])
+ elif (self.samplerate < 1000000):
+ self.put(0, 0, self.out_ann, [ANN_LINK,
+ ['WARNING: Sampling rate is suggested to be above 1MHz for proper normal mode decoding.']])
+
+ # The default 1-Wire time base is 30us, this is used to calculate sampling times.
+ if (self.options['cnt_normal_bit']):
+ self.cnt_normal_bit = self.options['cnt_normal_bit']
+ else:
+ self.cnt_normal_bit = int(float(self.samplerate) * 0.000015) - 1 # 15ns
+ if (self.options['cnt_normal_presence']):
+ self.cnt_normal_presence = self.options['cnt_normal_presence']
+ else:
+ self.cnt_normal_presence = int(float(self.samplerate) * 0.000075) - 1 # 75ns
+ if (self.options['cnt_normal_reset']):
+ self.cnt_normal_reset = self.options['cnt_normal_reset']
+ else:
+ self.cnt_normal_reset = int(float(self.samplerate) * 0.000480) - 1 # 480ns
+ if (self.options['cnt_overdrive_bit']):
+ self.cnt_overdrive_bit = self.options['cnt_overdrive_bit']
+ else:
+ self.cnt_overdrive_bit = int(float(self.samplerate) * 0.000002) - 1 # 2ns
+ if (self.options['cnt_overdrive_presence']):
+ self.cnt_overdrive_presence = self.options['cnt_overdrive_presence']
+ else:
+ self.cnt_overdrive_presence = int(float(self.samplerate) * 0.000010) - 1 # 10ns
+ if (self.options['cnt_overdrive_reset']):
+ self.cnt_overdrive_reset = self.options['cnt_overdrive_reset']
+ else:
+ self.cnt_overdrive_reset = int(float(self.samplerate) * 0.000048) - 1 # 48ns
+
+ # calculating the slot size
+ self.cnt_normal_slot = int(float(self.samplerate) * 0.000060) - 1 # 60ns
+ self.cnt_overdrive_slot = int(float(self.samplerate) * 0.000006) - 1 # 6ns
+
+ # organize values into lists
+ self.cnt_bit = [self.cnt_normal_bit , self.cnt_overdrive_bit ]
+ self.cnt_presence = [self.cnt_normal_presence, self.cnt_overdrive_presence]
+ self.cnt_reset = [self.cnt_normal_reset , self.cnt_overdrive_reset ]
+ self.cnt_slot = [self.cnt_normal_slot , self.cnt_overdrive_slot ]
+
+ # Check if sample times are in the allowed range
+ time_min = float(self.cnt_normal_bit ) / self.samplerate
+ time_max = float(self.cnt_normal_bit+1) / self.samplerate
+ if ( (time_min < 0.000005) or (time_max > 0.000015) ) :
+ self.put(0, 0, self.out_ann, [ANN_LINK,
+ ['WARNING: The normal mode data sample time interval (%2.1fus-%2.1fus) should be inside (5.0us, 15.0us).'
+ % (time_min*1000000, time_max*1000000)]])
+ time_min = float(self.cnt_normal_presence ) / self.samplerate
+ time_max = float(self.cnt_normal_presence+1) / self.samplerate
+ if ( (time_min < 0.0000681) or (time_max > 0.000075) ) :
+ self.put(0, 0, self.out_ann, [ANN_LINK,
+ ['WARNING: The normal mode presence sample time interval (%2.1fus-%2.1fus) should be inside (68.1us, 75.0us).'
+ % (time_min*1000000, time_max*1000000)]])
+ time_min = float(self.cnt_overdrive_bit ) / self.samplerate
+ time_max = float(self.cnt_overdrive_bit+1) / self.samplerate
+ if ( (time_min < 0.000001) or (time_max > 0.000002) ) :
+ self.put(0, 0, self.out_ann, [ANN_LINK,
+ ['WARNING: The overdrive mode data sample time interval (%2.1fus-%2.1fus) should be inside (1.0us, 2.0us).'
+ % (time_min*1000000, time_max*1000000)]])
+ time_min = float(self.cnt_overdrive_presence ) / self.samplerate
+ time_max = float(self.cnt_overdrive_presence+1) / self.samplerate
+ if ( (time_min < 0.0000073) or (time_max > 0.000010) ) :
+ self.put(0, 0, self.out_ann, [ANN_LINK,
+ ['WARNING: The overdrive mode presence sample time interval (%2.1fus-%2.1fus) should be inside (7.3us, 10.0us).'
+ % (time_min*1000000, time_max*1000000)]])