next up previous
Next: A.4 vc-camera.setl Up: A. WEBeye Source Code Previous: A.2 vc-allowed.setl

  
A.3 vc-autoinit.setl

Called by parent program:
vc-send.setl     (Section A.38 [vc-send.setl])

Calls child programs:
vc-comdev.setl     (Section A.7 [vc-comdev.setl])
vc-comport.setl     (Section A.8 [vc-comport.setl])

Source code: *

const yhwh = `vc-autoinit.setl';
 
-- Try to provoke the Canon into auto-initializing
 
printa (stderryhwh, `begins');
 
com_dev  :=     filter (`exec setl vc-comdev.setl');
com_port := val filter (`exec setl vc-comport.setl');
 
msr := 6;  -- modem status register (MSR)
cts_bit := 2**4;  -- ``clear to send'' (CTS) bit
 
fd := fileno open (`/dev/port', `direct');
 
-- Obtain initial CTS value
seek (fdcom_port + msr);
msr_val := abs getc (fd);
cts_val := sign (msr_val bit_and cts_bit);
printa (stderr, `CTS at entry to', yhwh, `:', cts_val); 
 
-- Try to provoke an auto-init by sending a bad length byte
putfile (com_dev, `\xff');
 
start_clock := clock;
 
-- Delay 300 ms to give it plenty of chance to take effect
select (om, 300);
 
seek (fdcom_port + msr);
msr_val := abs getc (fd);
cts_val := sign (msr_val bit_and cts_bit);
printa (stderr, `CTS after 300 ms :', cts_val); 
 
-- Watch for CTS to come back up.
 
loop doing
  delta := clock - start_clock;
while delta < 7500 do
  select (om, 100);  -- delay 100 ms
  seek (fdcom_port + msr);
  msr_val := abs getc (fd);
  if sign (msr_val bit_and cts_bit) = 1 then
    printa (stderr, `CTS up after', delta, `ms');
    goto done;
  end if;
end loop;
printa (stderr, `CTS not up after', delta, `ms');
 
done:
printa (stderryhwh, `ends');


next up previous
Next: A.4 vc-camera.setl Up: A. WEBeye Source Code Previous: A.2 vc-allowed.setl
David Bacon
1999-12-10