blob: 86c6ba1766696a6039cf0689b726208fd9e56d3a [file] [log] [blame]
# Copyright 2017 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Meeting related operations"""
from __future__ import print_function
import logging
import random
MIN_VOL = 1
MAX_VOL = 100
def restart_chrome(handle, is_meeting, recovery):
"""
Restart chrome and wait for telemetry commands to be ready.
@param handle: CfM telemetry remote facade,
@param is_meeting: True, None if CfM running MEET mode,
False if CfM running hangout mode
@returns: True, None if success,
False otherwise.
"""
try:
if recovery:
logging.info('+++Restart chrome')
handle.restart_chrome_for_cfm()
handle.wait_for_telemetry_commands()
except Exception as e:
errmsg = 'Fail to run telemetry api restart_chrome_for_cfm.'
logging.exception(errmsg)
return False, errmsg
return True, None
def join_meeting(handle, is_meeting, meet_code):
"""
Join meeting.
@param handle: CfM telemetry remote facade,
@param is_meeting: True, None if CfM running MEET mode,
False if CfM running hangout mode
@param meeting_code: meeting code
@returns: True, None if CfM joins meeting successfully,
False otherwise.
"""
try:
if is_meeting:
logging.info('+++Start meet meeting')
if meet_code:
handle.join_meeting_session(meet_code)
else:
handle.start_meeting_session()
else:
logging.info('+++start hangout meeting')
if meet_code:
handle.start_new_hangout_session(meet_code)
else:
errmsg = 'Meeting code is required for hangout meet.'
logging.exception(errmsg)
return False, errmsg
logging.info('+++Meeting %s joined.', meet_code)
return True, None
except Exception as e:
errmsg = 'Fail to run telemetry api to join meeting.'
logging.exception(errmsg)
return False, errmsg
def leave_meeting(handle, is_meeting):
"""
Leave meeting.
@param handle: CfM telemetry remote facade,
@param is_meeting: True, None if CfM running MEET mode,
False if CfM running hangout mode
@returns: True, None if CfM leaves meeting successfully,
False otherwise.
"""
try:
if is_meeting:
handle.end_meeting_session()
else:
handle.end_hangout_session()
except Exception as e:
errmsg = 'Fail to run telemetry api to leave meeting.'
logging.exception(errmsg)
return False, errmsg
logging.info('+++meet ended')
return True, None
def mute_unmute_camera(handle, is_muted):
"""
@param handle: CfM telemetry remote facade,
@param is_muted: True, None if camera is muted,
False otherwise.
@returns: True, None if camera is muted/unmuted successfully,
False otherwise.
"""
try:
if is_muted:
logging.info('+++unmute camera')
handle.unmute_camera()
else:
logging.info('+++mute camera')
handle.mute_camera()
except Exception as e:
errmsg = 'Fail to run telemetry api to mute/unmute camera.'
logging.exception(errmsg)
return False, errmsg
return True, None
def mute_unmute_mic(handle, is_muted):
"""
@param handle: CfM telemetry remote facade,
@param is_muted: True, None if mic is muted,
False otherwise.
@returns: True, None if camera is muted/unmuted successfully,
False otherwise.
"""
try:
if is_muted:
logging.info('+++unmute mic')
handle.unmute_mic()
else:
logging.info('+++mute mic')
handle.mute_mic()
except Exception as e:
errmsg = 'Fail to run telemetry api to mute/unmute mic.'
logging.exception(errmsg)
return False, errmsg
return True, None
def set_speaker_volume(handle, volume):
"""
Change speaker's volume.
@param handle: CfM telemetry remote facade
@param volume: volume for speaker
"""
try:
handle.set_speaker_volume(volume)
except Exception as e:
errmsg = 'Fail to run telemetry api to set speaker volume.'
logging.exception(errmsg)
return False, errmsg
return True, str(volume)
def speaker_volume_test(handle, step, mode, randommode):
"""
Change speaker's volume.
@param handle: CfM telemetry remote facade,
@param step: volume to be increased or decreased in one call
@param mode: if it equal to 1, update volume directly to
targeted value,
else, update volume in multiple calls.
@param randommode: if True, None, the value of volume to be change in
each call is randomly set,
else, the value is fixed defined by step.
"""
test_volume = random.randrange(MIN_VOL, MAX_VOL)
if mode == 1:
return set_speaker_volume(handle, test_volume)
step = max(2, step)
try:
current = int(handle.get_speaker_volume())
except Exception as e:
errmsg = 'Fail to run telemetry api to set speaker volume.'
logging.exception(errmsg)
return False, errmsg
if test_volume > current:
while test_volume > current:
if randommode:
transit_volume = current + random.randrange(1, step)
else:
transit_volume = current + step
if transit_volume > test_volume:
transit_volume = test_volume
handle.set_speaker_volume(transit_volume)
try:
current = int(handle.get_speaker_volume())
except Exception as e:
errmsg = 'Fail to run telemetry api to set speaker volume.'
logging.exception(errmsg)
return False, errmsg
logging.info('+++set vol %d, current %d, target %d',
transit_volume, current, test_volume)
else:
while test_volume < current:
if randommode:
transit_volume = current - random.randrange(1, step)
else:
transit_volume = current - step
if transit_volume < test_volume:
transit_volume = test_volume
handle.set_speaker_volume(transit_volume)
try:
current = int(handle.get_speaker_volume())
except Exception as e:
errmsg = 'Fail to run telemetry api to set speaker volume.'
logging.exception(errmsg)
return False, errmsg
logging.info('+++set vol %d, current %d, target %d',
transit_volume, current, test_volume)
return True, str(current)