python-audio-autotest-3.10 1.5.12rc1__py3-none-any.whl → 1.5.12rc3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
pyaatlibs/audioworker.py CHANGED
@@ -10,6 +10,7 @@ from pyaatlibs.adbutils import Adb
10
10
  from pyaatlibs.appinterface import AppInterface
11
11
  from pyaatlibs.audiofunction import DetectionStateListener
12
12
 
13
+
13
14
  # from Android SDK 32
14
15
  class RecordInputSrc(IntEnum):
15
16
  DEFAULT = 0
@@ -24,18 +25,21 @@ class RecordInputSrc(IntEnum):
24
25
  UNPROCESSED = auto()
25
26
  VOICE_PERFORMANCE = auto()
26
27
 
28
+
27
29
  # align with audioworker
28
30
  class RecordPerf(IntEnum):
29
31
  NONE = 10
30
32
  POWER_SAVING = auto()
31
33
  LOW_LATENCY = auto()
32
34
 
35
+
33
36
  # align with audioworker
34
37
  class RecordApi(IntEnum):
35
38
  NONE = 0
36
39
  OPENSLES = auto()
37
40
  AAUDIO = auto()
38
41
 
42
+
39
43
  class PlaybackStream(IntEnum):
40
44
  VOICE_CALL = 0
41
45
  SYSTEM = auto()
@@ -46,6 +50,7 @@ class PlaybackStream(IntEnum):
46
50
  DTMF = 8
47
51
  ACCESSIBILITY = 10
48
52
 
53
+
49
54
  class PlaybackContentType(IntEnum):
50
55
  UNKNOWN = 0
51
56
  SPEECH = auto()
@@ -54,6 +59,7 @@ class PlaybackContentType(IntEnum):
54
59
  SONIFICATION = auto()
55
60
  ULTRASOUND = 1997
56
61
 
62
+
57
63
  class PlaybackUsage(IntEnum):
58
64
  UNKNOWN = 0
59
65
  MEDIA = auto()
@@ -69,20 +75,23 @@ class PlaybackUsage(IntEnum):
69
75
  GAME = auto()
70
76
  ASSISTANT = auto()
71
77
 
78
+
72
79
  class PlaybackPerformanceMode(IntEnum):
73
80
  NOT_SET = -1
74
81
  NONE = auto()
75
82
  LOW_LATENCY = auto()
76
83
  POWER_SAVING = auto()
77
84
 
85
+
78
86
  class TaskIndex(IntEnum):
79
87
  ALL = -1
80
88
 
89
+
81
90
  class AudioWorkerApp(AppInterface):
82
91
  TAG = "AudioWorkerApp"
83
92
  APK_PATHS = [
84
93
  os.path.join(ROOT_DIR, "apk", "debug", "audioworker.apk"),
85
- os.path.join(os.path.dirname(os.path.realpath(__file__)), "apk", "audioworker.apk")
94
+ os.path.join(os.path.dirname(os.path.realpath(__file__)), "apk", "audioworker.apk"),
86
95
  ]
87
96
  INTENT_PREFIX = "am broadcast -a"
88
97
  AUDIOWORKER_INTENT_PREFIX = "com.google.audioworker.intent."
@@ -100,11 +109,16 @@ class AudioWorkerApp(AppInterface):
100
109
  if os.path.exists(path):
101
110
  return path
102
111
 
103
- raise(RuntimeError("no apk file is found."))
112
+ raise (RuntimeError("no apk file is found."))
104
113
 
105
114
  @staticmethod
106
115
  def get_apk_version():
107
- return "a58be5e-python-audio-autotest-v1.5.12"
116
+ out = subprocess.check_output(["strings", __class__.get_apk_path()], text=True)
117
+ for line in out.splitlines():
118
+ if "python-audio-autotest" not in line:
119
+ continue
120
+ return line.strip().replace("%", "")
121
+ return None
108
122
 
109
123
  @staticmethod
110
124
  def get_version_from_device(serialno=None):
@@ -114,16 +128,28 @@ class AudioWorkerApp(AppInterface):
114
128
 
115
129
  out, _ = Adb.execute(
116
130
  ["shell", "dumpsys package com.google.audioworker | grep versionName"],
117
- serialno=serialno)
131
+ serialno=serialno,
132
+ )
133
+
134
+ version_from_device = out.strip().partition("versionName=")[-1]
135
+ version_from_apk = __class__.get_apk_version()
136
+ if version_from_device != version_from_apk:
137
+ __class__.log(
138
+ "get_version_from_device: the version got from package manager and from apk file"
139
+ f" don't match. (version_from_device: {version_from_device}, version_from_apk:"
140
+ f" {version_from_apk})"
141
+ )
118
142
 
119
- return out.strip().partition("versionName=")[-1]
143
+ return version_from_device
120
144
 
121
145
  @classmethod
122
146
  def install(child, grant=False, serialno=None, tolog=True):
123
147
  super().install(grant=grant, serialno=serialno, tolog=tolog)
124
148
  __class__.log(
125
149
  "install: the installed version is '{}'".format(
126
- __class__.get_version_from_device(serialno=serialno)))
150
+ __class__.get_version_from_device(serialno=serialno)
151
+ )
152
+ )
127
153
 
128
154
  @staticmethod
129
155
  def get_launch_component():
@@ -148,7 +174,7 @@ class AudioWorkerApp(AppInterface):
148
174
  ack_funcs = [
149
175
  __class__.playback_info,
150
176
  __class__.record_info,
151
- __class__.voip_info
177
+ __class__.voip_info,
152
178
  ]
153
179
 
154
180
  for func in ack_funcs:
@@ -179,16 +205,25 @@ class AudioWorkerApp(AppInterface):
179
205
  cmd_arr += ["--es", key]
180
206
  cmd_arr.append(str(value))
181
207
 
182
- __class__.device_shell(
183
- device=device, serialno=serialno, cmd=" ".join(cmd_arr), tolog=tolog)
208
+ __class__.device_shell(device=device, serialno=serialno, cmd=" ".join(cmd_arr), tolog=tolog)
184
209
 
185
210
  @staticmethod
186
211
  def playback_nonoffload(
187
- device=None, serialno=None,
188
- freqs=[440.], playback_id=0, file="null",
189
- stream_type=PlaybackStream.MUSIC, performance_mode=PlaybackPerformanceMode.NOT_SET,
190
- content_type=PlaybackContentType.MUSIC, usage=PlaybackUsage.MEDIA,
191
- fs=16000, nch=2, amp=0.6, bit_depth=16, low_latency_mode=False):
212
+ device=None,
213
+ serialno=None,
214
+ freqs=[440.0],
215
+ playback_id=0,
216
+ file="null",
217
+ stream_type=PlaybackStream.MUSIC,
218
+ performance_mode=PlaybackPerformanceMode.NOT_SET,
219
+ content_type=PlaybackContentType.MUSIC,
220
+ usage=PlaybackUsage.MEDIA,
221
+ fs=16000,
222
+ nch=2,
223
+ amp=0.6,
224
+ bit_depth=16,
225
+ low_latency_mode=False,
226
+ ):
192
227
  name = __class__.AUDIOWORKER_INTENT_PREFIX + "playback.start"
193
228
  configs = {
194
229
  "type": "non-offload",
@@ -203,7 +238,7 @@ class AudioWorkerApp(AppInterface):
203
238
  "stream-type": stream_type,
204
239
  "usage": usage,
205
240
  "content-type": content_type,
206
- "performance-mode": performance_mode
241
+ "performance-mode": performance_mode,
207
242
  }
208
243
  __class__.send_intent(device, serialno, name, configs)
209
244
 
@@ -213,15 +248,25 @@ class AudioWorkerApp(AppInterface):
213
248
  configs = {
214
249
  "type": "non-offload",
215
250
  "playback-id": playback_id,
216
- "seek-position-ms" : seek_position_ms
251
+ "seek-position-ms": seek_position_ms,
217
252
  }
218
253
  __class__.send_intent(device, serialno, name, configs)
219
254
 
220
255
  @staticmethod
221
256
  def playback_offload(
222
- device=None, serialno=None, file="null", stream_type=PlaybackStream.MUSIC,
223
- content_type=PlaybackContentType.MUSIC, usage=PlaybackUsage.MEDIA,
224
- freqs=[440.], playback_id=0, fs=16000, nch=2, amp=0.6, bit_depth=16):
257
+ device=None,
258
+ serialno=None,
259
+ file="null",
260
+ stream_type=PlaybackStream.MUSIC,
261
+ content_type=PlaybackContentType.MUSIC,
262
+ usage=PlaybackUsage.MEDIA,
263
+ freqs=[440.0],
264
+ playback_id=0,
265
+ fs=16000,
266
+ nch=2,
267
+ amp=0.6,
268
+ bit_depth=16,
269
+ ):
225
270
  name = __class__.AUDIOWORKER_INTENT_PREFIX + "playback.start"
226
271
  configs = {
227
272
  "type": "offload",
@@ -244,13 +289,19 @@ class AudioWorkerApp(AppInterface):
244
289
  configs = {
245
290
  "type": "offload",
246
291
  "playback-id": playback_id,
247
- "seek-position-ms" : seek_position_ms
292
+ "seek-position-ms": seek_position_ms,
248
293
  }
249
294
  __class__.send_intent(device, serialno, name, configs)
250
295
 
251
296
  @staticmethod
252
297
  def _common_info(
253
- device=None, serialno=None, ctype=None, controller=None, tolog=False, extra_params={}):
298
+ device=None,
299
+ serialno=None,
300
+ ctype=None,
301
+ controller=None,
302
+ tolog=False,
303
+ extra_params={},
304
+ ):
254
305
  name = __class__.AUDIOWORKER_INTENT_PREFIX + "{}.info".format(ctype)
255
306
  ts = datetime.datetime.timestamp(datetime.datetime.now())
256
307
  ts = int(ts * 1000)
@@ -263,7 +314,8 @@ class AudioWorkerApp(AppInterface):
263
314
  retry = 10
264
315
  while retry > 0:
265
316
  out, err = __class__.device_shell(
266
- None, serialno, cmd="cat {}".format(filepath), tolog=tolog)
317
+ None, serialno, cmd="cat {}".format(filepath), tolog=tolog
318
+ )
267
319
  if len(out) == 0:
268
320
  time.sleep(0.5)
269
321
  retry -= 1
@@ -278,8 +330,9 @@ class AudioWorkerApp(AppInterface):
278
330
  return {}
279
331
 
280
332
  import traceback
333
+
281
334
  try:
282
- info_timestamp = float(out[0].strip().split("::")[-1]) / 1000.
335
+ info_timestamp = float(out[0].strip().split("::")[-1]) / 1000.0
283
336
  info_t = datetime.datetime.fromtimestamp(info_timestamp)
284
337
  # if (datetime.datetime.now() - info_t).total_seconds() > 1:
285
338
  # return None
@@ -292,7 +345,8 @@ class AudioWorkerApp(AppInterface):
292
345
  @staticmethod
293
346
  def playback_info(device=None, serialno=None, tolog=False):
294
347
  return __class__._common_info(
295
- device, serialno, "playback", "PlaybackController", tolog=tolog)
348
+ device, serialno, "playback", "PlaybackController", tolog=tolog
349
+ )
296
350
 
297
351
  @staticmethod
298
352
  def playback_stop(device=None, serialno=None, tolog=False):
@@ -303,18 +357,20 @@ class AudioWorkerApp(AppInterface):
303
357
 
304
358
  for pbtype in info.keys():
305
359
  for pbid in info[pbtype].keys():
306
- configs = {
307
- "type": pbtype,
308
- "playback-id": int(pbid)
309
- }
360
+ configs = {"type": pbtype, "playback-id": int(pbid)}
310
361
  __class__.send_intent(device, serialno, name, configs)
311
362
 
312
363
  @staticmethod
313
364
  def record_info(device=None, serialno=None, task_index=TaskIndex.ALL, tolog=False):
314
365
  task_index = int(task_index)
315
366
  info = __class__._common_info(
316
- device, serialno, "record", "RecordController",
317
- extra_params={"task-index": task_index}, tolog=tolog)
367
+ device,
368
+ serialno,
369
+ "record",
370
+ "RecordController",
371
+ extra_params={"task-index": task_index},
372
+ tolog=tolog,
373
+ )
318
374
  if info == None:
319
375
  return None
320
376
 
@@ -336,11 +392,7 @@ class AudioWorkerApp(AppInterface):
336
392
 
337
393
  task_index = int(task_index)
338
394
  name = __class__.AUDIOWORKER_INTENT_PREFIX + "{}.detect.register".format(prefix)
339
- configs = {
340
- "class": dclass,
341
- "params": params,
342
- "task-index": task_index
343
- }
395
+ configs = {"class": dclass, "params": params, "task-index": task_index}
344
396
  __class__.send_intent(device, serialno, name, configs)
345
397
 
346
398
  @staticmethod
@@ -350,10 +402,7 @@ class AudioWorkerApp(AppInterface):
350
402
 
351
403
  task_index = int(task_index)
352
404
  name = __class__.AUDIOWORKER_INTENT_PREFIX + "{}.detect.unregister".format(prefix)
353
- configs = {
354
- "class-handle": chandle,
355
- "task-index": task_index
356
- }
405
+ configs = {"class-handle": chandle, "task-index": task_index}
357
406
  __class__.send_intent(device, serialno, name, configs)
358
407
 
359
408
  @staticmethod
@@ -377,17 +426,23 @@ class AudioWorkerApp(AppInterface):
377
426
 
378
427
  task_index = int(task_index)
379
428
  name = __class__.AUDIOWORKER_INTENT_PREFIX + "{}.detect.setparams".format(prefix)
380
- configs = {
381
- "class-handle": chandle,
382
- "params": params,
383
- "task-index": task_index
384
- }
429
+ configs = {"class-handle": chandle, "params": params, "task-index": task_index}
385
430
  __class__.send_intent(device, serialno, name, configs)
386
431
 
387
432
  @staticmethod
388
433
  def record_start(
389
- device=None, serialno=None, fs=16000, nch=2, bit_depth=16, btsco_on=True,
390
- perf=None, input_src=None, api=None, dump_buffer_ms=1000, task_index=0):
434
+ device=None,
435
+ serialno=None,
436
+ fs=16000,
437
+ nch=2,
438
+ bit_depth=16,
439
+ btsco_on=True,
440
+ perf=None,
441
+ input_src=None,
442
+ api=None,
443
+ dump_buffer_ms=1000,
444
+ task_index=0,
445
+ ):
391
446
  task_index = int(task_index)
392
447
  name = __class__.AUDIOWORKER_INTENT_PREFIX + "record.start"
393
448
  configs = {
@@ -399,7 +454,7 @@ class AudioWorkerApp(AppInterface):
399
454
  "audio-perf": int(perf) if perf is not None else perf,
400
455
  "audio-api": int(api) if api is not None else api,
401
456
  "dump-buffer-ms": dump_buffer_ms,
402
- "task-index" : task_index
457
+ "task-index": task_index,
403
458
  }
404
459
  __class__.send_intent(device, serialno, name, configs)
405
460
 
@@ -440,7 +495,8 @@ class AudioWorkerApp(AppInterface):
440
495
 
441
496
  @staticmethod
442
497
  def record_detector_set_params(
443
- device=None, serialno=None, chandle=None, params={}, task_index=0):
498
+ device=None, serialno=None, chandle=None, params={}, task_index=0
499
+ ):
444
500
  __class__.tx_detector_set_params("record", device, serialno, chandle, params, task_index)
445
501
 
446
502
  @staticmethod
@@ -448,8 +504,21 @@ class AudioWorkerApp(AppInterface):
448
504
  return __class__._common_info(device, serialno, "voip", "VoIPController", tolog=tolog)
449
505
 
450
506
  @staticmethod
451
- def voip_start(device=None, serialno=None, rxfreq=440., rxamp=0.6, rxspkr=False, rxfile="null",
452
- rxfs=8000, txfs=8000, rxnch=1, txnch=1, rxbit_depth=16, txbit_depth=16, dump_buffer_ms=0):
507
+ def voip_start(
508
+ device=None,
509
+ serialno=None,
510
+ rxfreq=440.0,
511
+ rxamp=0.6,
512
+ rxspkr=False,
513
+ rxfile="null",
514
+ rxfs=8000,
515
+ txfs=8000,
516
+ rxnch=1,
517
+ txnch=1,
518
+ rxbit_depth=16,
519
+ txbit_depth=16,
520
+ dump_buffer_ms=0,
521
+ ):
453
522
  name = __class__.AUDIOWORKER_INTENT_PREFIX + "voip.start"
454
523
  configs = {
455
524
  "rx-target-freq": rxfreq,
@@ -462,7 +531,7 @@ class AudioWorkerApp(AppInterface):
462
531
  "tx-sampling-freq": txfs,
463
532
  "tx-num-channels": txnch,
464
533
  "tx-pcm-bit-width": txbit_depth,
465
- "tx-dump-buffer-ms": dump_buffer_ms
534
+ "tx-dump-buffer-ms": dump_buffer_ms,
466
535
  }
467
536
  __class__.send_intent(device, serialno, name, configs)
468
537
 
@@ -474,9 +543,7 @@ class AudioWorkerApp(AppInterface):
474
543
  @staticmethod
475
544
  def voip_use_speaker(device=None, serialno=None, use=True):
476
545
  name = __class__.AUDIOWORKER_INTENT_PREFIX + "voip.config"
477
- configs = {
478
- "rx-use-spkr": use
479
- }
546
+ configs = {"rx-use-spkr": use}
480
547
  __class__.send_intent(device, serialno, name, configs)
481
548
 
482
549
  @staticmethod
@@ -486,10 +553,7 @@ class AudioWorkerApp(AppInterface):
486
553
  @staticmethod
487
554
  def voip_change_configs(device=None, serialno=None, rxfreq=-1, rxamp=-1):
488
555
  name = __class__.AUDIOWORKER_INTENT_PREFIX + "voip.config"
489
- configs = {
490
- "rx-target-freq": rxfreq,
491
- "rx-amplitude": rxamp
492
- }
556
+ configs = {"rx-target-freq": rxfreq, "rx-amplitude": rxamp}
493
557
  __class__.send_intent(device, serialno, name, configs)
494
558
 
495
559
  @staticmethod
@@ -532,13 +596,24 @@ from pyaatlibs.audiofunction import ToneDetectorThread, ToneDetector
532
596
  from pyaatlibs.aatapp import AATAppToneDetectorThread
533
597
  from pyaatlibs.logger import Logger
534
598
 
599
+
535
600
  class AudioWorkerToneDetectorThread(AATAppToneDetectorThread):
536
- def __init__(self, serialno, target_freq,
537
- detector_reg_func, detector_unreg_func,
538
- detector_setparams_func, info_func, parse_detector_func,
539
- callback=None, listener=None):
601
+
602
+ def __init__(
603
+ self,
604
+ serialno,
605
+ target_freq,
606
+ detector_reg_func,
607
+ detector_unreg_func,
608
+ detector_setparams_func,
609
+ info_func,
610
+ parse_detector_func,
611
+ callback=None,
612
+ listener=None,
613
+ ):
540
614
  super(AudioWorkerToneDetectorThread, self).__init__(
541
- serialno=serialno, target_freq=target_freq, callback=callback)
615
+ serialno=serialno, target_freq=target_freq, callback=callback
616
+ )
542
617
  self.serialno = serialno
543
618
  self.chandle = None
544
619
  self.listener = listener
@@ -547,8 +622,11 @@ class AudioWorkerToneDetectorThread(AATAppToneDetectorThread):
547
622
  self.detector_setparams_func = detector_setparams_func
548
623
  self.info_func = info_func
549
624
  self.parse_detector_func = parse_detector_func
550
- self.detector_reg_func(serialno=serialno,
551
- dclass="ToneDetector", params={"target-freq": [target_freq]})
625
+ self.detector_reg_func(
626
+ serialno=serialno,
627
+ dclass="ToneDetector",
628
+ params={"target-freq": [target_freq]},
629
+ )
552
630
 
553
631
  def get_tag(self):
554
632
  return "AudioWorkerToneDetectorThread"
@@ -653,7 +731,9 @@ class AudioWorkerToneDetectorThread(AATAppToneDetectorThread):
653
731
  info = self.info_func(serialno=self.serialno)
654
732
  if not info:
655
733
  Logger.log(
656
- "{}::get_info".format(self.get_tag()), "no active record, null info returned")
734
+ "{}::get_info".format(self.get_tag()),
735
+ "no active record, null info returned",
736
+ )
657
737
  return
658
738
 
659
739
  detectors = self.parse_detector_func(info)
@@ -666,7 +746,8 @@ class AudioWorkerToneDetectorThread(AATAppToneDetectorThread):
666
746
  if chandle:
667
747
  Logger.log(
668
748
  "{}::get_info".format(self.get_tag()),
669
- "found detector handle: {} for target {} Hz".format(chandle, self.target_freq))
749
+ "found detector handle: {} for target {} Hz".format(chandle, self.target_freq),
750
+ )
670
751
 
671
752
  if not chandle:
672
753
  Logger.log("{}::get_info".format(self.get_tag()), "no detector handle!")
@@ -680,14 +761,22 @@ class AudioWorkerToneDetectorThread(AATAppToneDetectorThread):
680
761
  return
681
762
 
682
763
  self.detector_setparams_func(
683
- serialno=self.serialno, chandle=self.chandle,
684
- params={"dump-history": str(enable).lower()})
764
+ serialno=self.serialno,
765
+ chandle=self.chandle,
766
+ params={"dump-history": str(enable).lower()},
767
+ )
685
768
 
686
769
  def set_target_frequency(self, target_freq):
687
770
  self.target_freq = target_freq
688
771
  self.detector_setparams_func(
689
- serialno=self.serialno, chandle=self.chandle,
690
- params={"target-freq": [target_freq], "clear-target": "false", "dump-history": "true"})
772
+ serialno=self.serialno,
773
+ chandle=self.chandle,
774
+ params={
775
+ "target-freq": [target_freq],
776
+ "clear-target": "false",
777
+ "dump-history": "true",
778
+ },
779
+ )
691
780
  self.shared_vars["msg"] = None
692
781
 
693
782
  def run(self):
@@ -697,7 +786,7 @@ class AudioWorkerToneDetectorThread(AATAppToneDetectorThread):
697
786
  "last_state": None,
698
787
  "msg": None,
699
788
  "tictoc": TicToc(),
700
- "state_keep_ms": 0
789
+ "state_keep_ms": 0,
701
790
  }
702
791
 
703
792
  self.extra = {}
@@ -711,15 +800,14 @@ class AudioWorkerToneDetectorThread(AATAppToneDetectorThread):
711
800
  def freq_cb(msg):
712
801
  line = msg.splitlines()[0].strip()
713
802
  strs = line.split()
714
- t = datetime.datetime.fromtimestamp(float(strs[0][:-1]) / 1000.)
803
+ t = datetime.datetime.fromtimestamp(float(strs[0][:-1]) / 1000.0)
715
804
  freq = float(strs[1])
716
805
 
717
806
  if not self.target_detected(freq):
718
- self.push_to_dump(
719
- "the frequency {} Hz is not the target".format(freq))
807
+ self.push_to_dump("the frequency {} Hz is not the target".format(freq))
720
808
  return
721
809
 
722
- active = (strs[2].lower() == "active")
810
+ active = strs[2].lower() == "active"
723
811
 
724
812
  if not self.shared_vars["start_time"]:
725
813
  self.shared_vars["start_time"] = t
@@ -727,7 +815,9 @@ class AudioWorkerToneDetectorThread(AATAppToneDetectorThread):
727
815
  if active != self.shared_vars["last_state"]:
728
816
  self.push_to_dump(
729
817
  "the detection state has been changed from {} to {}".format(
730
- self.shared_vars["last_state"], active))
818
+ self.shared_vars["last_state"], active
819
+ )
820
+ )
731
821
  self.shared_vars["last_state"] = active
732
822
  self.shared_vars["start_time"] = t
733
823
  self.shared_vars["tictoc"].toc()
@@ -738,14 +828,19 @@ class AudioWorkerToneDetectorThread(AATAppToneDetectorThread):
738
828
 
739
829
  self.shared_vars["state_keep_ms"] += self.shared_vars["tictoc"].toc()
740
830
  if self.shared_vars["state_keep_ms"] > 200:
741
- event = \
831
+ event = (
742
832
  ToneDetector.Event.TONE_DETECTED if active else ToneDetector.Event.TONE_MISSING
833
+ )
743
834
  if self.shared_vars["last_event"] != event:
744
835
  self.shared_vars["last_event"] = event
745
- Logger.log(self.get_tag(),
836
+ Logger.log(
837
+ self.get_tag(),
746
838
  "send_cb({}, {}) on {} Hz".format(
747
- t_str, "TONE_DETECTED" if active \
748
- else "TONE_MISSING", self.target_freq))
839
+ t_str,
840
+ "TONE_DETECTED" if active else "TONE_MISSING",
841
+ self.target_freq,
842
+ ),
843
+ )
749
844
  if self.cb != None:
750
845
  self.cb((t_str, event))
751
846
  if isinstance(self.listener, DetectionStateListener):
@@ -763,15 +858,20 @@ class AudioWorkerToneDetectorThread(AATAppToneDetectorThread):
763
858
 
764
859
  adb_tictoc.tic()
765
860
  msg_in_device, _ = Adb.execute(
766
- cmd=["shell",
767
- "cat {}/{}.txt".format(AudioWorkerApp.DATA_FOLDER, self.chandle)],
768
- serialno=self.serialno, tolog=False)
861
+ cmd=[
862
+ "shell",
863
+ "cat {}/{}.txt".format(AudioWorkerApp.DATA_FOLDER, self.chandle),
864
+ ],
865
+ serialno=self.serialno,
866
+ tolog=False,
867
+ )
769
868
  elapsed = adb_tictoc.toc()
770
869
 
771
870
  msg_in_device = map(lambda x: x.strip(), msg_in_device.splitlines())
772
871
  msg_in_device = [x for x in msg_in_device if self.target_detected(float(x.split()[1]))]
773
- self.shared_vars["msg"] = \
872
+ self.shared_vars["msg"] = (
774
873
  msg_in_device[-1] if len(msg_in_device) > 0 else self.shared_vars["msg"]
874
+ )
775
875
 
776
876
  if elapsed > self.extra["adb-read-prop-max-elapsed"]:
777
877
  self.extra["adb-read-prop-max-elapsed"] = elapsed
@@ -779,11 +879,14 @@ class AudioWorkerToneDetectorThread(AATAppToneDetectorThread):
779
879
  if self.shared_vars["msg"]:
780
880
  try:
781
881
  self.push_to_dump(
782
- "{} (adb-shell elapsed: {} ms)".format(self.shared_vars["msg"], elapsed))
882
+ "{} (adb-shell elapsed: {} ms)".format(self.shared_vars["msg"], elapsed)
883
+ )
783
884
  freq_cb(self.shared_vars["msg"])
784
885
  except Exception as e:
785
886
  Logger.log(
786
- self.get_tag(), "crashed in freq_cb('{}')".format(self.shared_vars["msg"]))
887
+ self.get_tag(),
888
+ "crashed in freq_cb('{}')".format(self.shared_vars["msg"]),
889
+ )
787
890
  Logger.log(self.get_tag(), str(e))
788
891
 
789
892
  elapsed = freq_cb_tictoc.toc()
@@ -14,7 +14,9 @@ try:
14
14
  except ImportError:
15
15
  import Queue as queue
16
16
 
17
+
17
18
  class LogcatOutputThread(threading.Thread):
19
+
18
20
  def __init__(self, serialno, buffername):
19
21
  super(LogcatOutputThread, self).__init__()
20
22
  self.serialno = serialno
@@ -44,9 +46,12 @@ class LogcatOutputThread(threading.Thread):
44
46
  preexec_fn = None if platform.system() == "Windows" else os.setsid
45
47
  cmd = ["adb", "-s", self.serialno, "logcat"]
46
48
  cmd = cmd + ["-b", self.buffername] if self.buffername else cmd
47
- Logger.log("LogcatOutputThread", "threadloop is listening with the command '{}'".format(cmd))
48
- self.proc = subprocess.Popen(cmd,
49
- stdout=subprocess.PIPE, stderr=subprocess.PIPE, preexec_fn=preexec_fn)
49
+ Logger.log(
50
+ "LogcatOutputThread", "threadloop is listening with the command '{}'".format(cmd)
51
+ )
52
+ self.proc = subprocess.Popen(
53
+ cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, preexec_fn=preexec_fn
54
+ )
50
55
  while not self.stoprequest.isSet():
51
56
  if self.proc.poll() != None:
52
57
  break
@@ -56,9 +61,9 @@ class LogcatOutputThread(threading.Thread):
56
61
  if sys.version_info.major > 2:
57
62
  line = line.decode("utf-8", errors="ignore")
58
63
 
59
- if not self.lasttime_update_timer.is_alive(): # start for the first time
64
+ if not self.lasttime_update_timer.is_alive(): # start for the first time
60
65
  self.lasttime_update_timer.start()
61
- else: # reset for the followings
66
+ else: # reset for the followings
62
67
  self.lasttime_update_timer.reset()
63
68
  self._handle_logcat_msg(line)
64
69
 
@@ -74,11 +79,14 @@ class LogcatOutputThread(threading.Thread):
74
79
  if pattern in msg:
75
80
  self.listeners[pattern].cb(pattern=pattern, msg=msg)
76
81
 
82
+
77
83
  class LogcatEvent(object):
84
+
78
85
  def __init__(self, pattern=None, cb=None):
79
86
  self.pattern = pattern
80
87
  self.cb = cb
81
88
 
89
+
82
90
  class LogcatListener(object):
83
91
  WORK_THREADS = {}
84
92
 
@@ -88,8 +96,10 @@ class LogcatListener(object):
88
96
 
89
97
  for threadname, th in LogcatListener.WORK_THREADS.items():
90
98
  Logger.log("LogcatListener::dump", "thread[{}]".format(threadname))
91
- Logger.log("LogcatListener::dump",
92
- " - Last time processing: {} ms ago".format(th.lasttime_update_timer.get_time()))
99
+ Logger.log(
100
+ "LogcatListener::dump",
101
+ " - Last time processing: {} ms ago".format(th.lasttime_update_timer.get_time()),
102
+ )
93
103
  for event_pattern in th.listeners.keys():
94
104
  Logger.log("LogcatListener::dump", " - pattern '{}'".format(event_pattern))
95
105
 
@@ -119,7 +129,8 @@ class LogcatListener(object):
119
129
  threadname = "{}-{}".format(serialno, buffername)
120
130
  if threadname in LogcatListener.WORK_THREADS.keys():
121
131
  Logger.log(
122
- "LogcatListener", "there is an existing running thread ({}).".format(threadname))
132
+ "LogcatListener", "there is an existing running thread ({}).".format(threadname)
133
+ )
123
134
  if not flush:
124
135
  Logger.log("LogcatListener", "skip the initialization.")
125
136
  return