def rcProcess(state, lock, rate_q, change_q): """Provide work with rc serial port :param state: current system state :param lock: lock for global variables :param rate_q: queue with video rate value :param change_q: queue with video change flag """ state_list = [1, 2, 3, 5] rc_ser = SerialConnection(device_name='RC', device_id='1411') # Create rc serial connection flag = True prev_rate = 0 while True: if state.value in state_list: if state.value == 1: # Wait for start command flag = True if rc_ser.ser.inWaiting() > 0: msg = rc_ser.getData() if b'1000' in msg: lock.acquire() state.value = 2 lock.release() elif state.value == 2: # Check special commands if rc_ser.ser.inWaiting() > 0: msg = rc_ser.getData() if b'5000' in msg: # Quest timeout command lock.acquire() state.value = 8 lock.release() elif b'6000' in msg: # Quest trouble end lock.acquire() state.value = 4 lock.release() elif state.value == 3: # Check special commands if rc_ser.ser.inWaiting() > 0: msg = rc_ser.getData() if b'5000' in msg: lock.acquire() state.value = 8 lock.release() elif b'6000' in msg: lock.acquire() state.value = 4 lock.release() # Send data from Arduino if not (rate_q.empty()): # Send new video rate value rate = rate_q.get() if not (prev_rate == rate) and (rate % 0.2 == 0): rc_ser.sendData(msg=rate, flag=True) prev_rate = rate if not (change_q.empty()): # Send message about sub video if change_q.get(): rc_ser.sendData(msg=b'2000') elif state.value == 5: if flag: # Send end command rc_ser.sendData(msg=b'4000') flag = False # Check special command if rc_ser.ser.inWaiting() > 0: msg = rc_ser.getData() if b'5000' in msg: lock.acquire() state.value = 8 lock.release()
def inoProcess(state, lock, rate_q_rc, change_q_rc, rate_q_pi, change_q_pi, min_val, max_val): """Provide work with arduino serial port :param state: current system state :param lock: lock for global variables :param rate_q_rc: queue with video rate value for rc :param change_q_rc: queue with video change flag for rc :param rate_q_pi: queue with video rate value for pi :param change_q_pi: queue with video change flag for pi :param min_val: minimum available video rate value :param max_val: maximum available video rate value """ state_list = [2, 3, 4, 8] ino_ser = SerialConnection( device_name='Arduino', device_id='1733') # Create arduino serial connection prev_rate = min_val while True: if state.value in state_list: if state.value == 2: # Send start command to Arduino ino_ser.sendData(msg=b'S') lock.acquire() state.value = 3 lock.release() if state.value == 3: # Get data from Arduino if ino_ser.ser.inWaiting() > 0: msg = ino_ser.getData() if not (b'None' in msg): if b'Change' in msg: change_q_rc.put(True) change_q_pi.put(True) elif b'Up' in msg: rate = setFrameTime(True, min_val, max_val, prev_rate) if not (prev_rate == rate): rate_q_pi.put(rate) rate_q_rc.put(rate) prev_rate = rate else: rate = setFrameTime(False, min_val, max_val, prev_rate) if not (prev_rate == rate): rate_q_pi.put(rate) rate_q_rc.put(rate) prev_rate = rate if state.value == 4: # Send end command to Arduino ino_ser.sendData(msg=b'E') if ino_ser.getResponse(): lock.acquire() state.value = 5 lock.release() if state.value == 8: # Send timeout command to Arduino ino_ser.sendData(msg=b'T') prev_rate = min_val if ino_ser.getResponse(): lock.acquire() state.value = 1 lock.release()