Esempio n. 1
0
void goto_learning(void)
{
    if (laser.state == LASER_OFF)
    {
        laser_on();
        laser_wait_for_reading();
    }
    laser.state = LASER_LEARNING;
}
Esempio n. 2
0
void pioneer_ldv1000_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
	switch (id)
	{
		case TID_MULTIJUMP:
		{
			// bit 5 of port B on PPI 1 selects the direction of slider movement
			int direction = (m_portb1 & 0x20) ? 1 : -1;
			advance_slider(direction);

			// update down counter and reschedule
			if (--m_counter != 0)
				timer.adjust(MULTIJUMP_TRACK_TIME);
			break;
		}

		case TID_VSYNC_OFF:
			m_vsync = false;
			break;

		case TID_VBI_DATA_FETCH:
		{
			// appears to return data in reverse order
			UINT32 lines[3];
			lines[0] = get_field_code(LASERDISC_CODE_LINE1718, false);
			lines[1] = get_field_code(LASERDISC_CODE_LINE17, false);
			lines[2] = get_field_code(LASERDISC_CODE_LINE16, false);

			// fill in the details
			memset(m_vbi, 0, sizeof(m_vbi));
			if (focus_on() && laser_on())
			{
				// loop over lines
				for (int line = 0; line < 3; line++)
				{
					UINT8 *dest = &m_vbi[line * 7];
					UINT32 data = lines[line];

					// the logic only processes leadin/leadout/frame number codes
					if (data == VBI_CODE_LEADIN || data == VBI_CODE_LEADOUT || (data & VBI_MASK_CAV_PICTURE) == VBI_CODE_CAV_PICTURE)
					{
						*dest++ = 0x09 | (((data & VBI_MASK_CAV_PICTURE) == VBI_CODE_CAV_PICTURE) ? 0x02 : 0x00);
						*dest++ = 0x08;
						*dest++ = (data >> 16) & 0x0f;
						*dest++ = (data >> 12) & 0x0f;
						*dest++ = (data >>  8) & 0x0f;
						*dest++ = (data >>  4) & 0x0f;
						*dest++ = (data >>  0) & 0x0f;
					}
				}
			}

			// signal that data is ready and reset the readback index
			m_vbiready = true;
			m_vbiindex = 0;
			break;
		}

		// pass everything else onto the parent
		default:
			laserdisc_device::device_timer(timer, id, param, ptr);
			break;
	}
Esempio n. 3
0
void processController(){

  if(data_received){
     
     switch(received_command){
        case 0x01:
             write_line_enable = 1;
        break;
        
        // home y axis
        case 0x02:
        
          home_y_axis();
          acknowledge();
         
        break;
        
        // home z axis
        case 0x03:

          home_z_axis();
          acknowledge();
       
        break;
        
        // turn laser on
        case 0x04: 
          laser_on();
          acknowledge();
        break;
        
        // turn laser off
        case 0x05:
         laser_off();
         acknowledge();
        break;
        
        // next layer
        case 0x06:
          // moveToNextLayer here!
          moveToNextLayer();
          toggle_y_Direction();
          acknowledge();
        break;
        
        case 0x07:
          moveToNextLayer();
          acknowledge();
        break;
        
        case 0x08:
          move_z_to_end_position();
          acknowledge();
        break;
        
        case 0x09:
          set_exposing_cycles();
          acknowledge();
        break;
        
        case 0x0a:
         move_z_relative();
         acknowledge();
        break;
    }

  }
 
  if (exposing_done){
    
                moveToNextLine();
                data_table[0] = 0;
                write_line_enable = 0;
                exposing_done = 0;
                acknowledge();

  }
  
}
Esempio n. 4
0
int main(void)
{
    // init i/o
    DEBUG_PORT = 0x00;
    DEBUG_DDR = 0xFF;

    init_ports();

    uint8_t i;

    uint8_t output_mask = 1 << OUTPUT_FIRST;
    for(i=0; i<N_LASERS; i++)
    {
        output_mask |= output_mask << 1;
        output_mask <<= 1;
    }

    /* uart_init(0,0,0,0,0);
    uart_transmit_byte_block('\n');
    uart_transmit_byte_block('\r'); */

    int state = ON;

    for(;;)
    {
        // if module is disabled, turn off all outputs
        while(!is_enabled())
        {
            OUTPUT_PORT &= ~output_mask;
            led_off();
            _delay_ms(10);
        }
        // indicator led
        led_on();
       
        // turn all lasers to state X
        for(i=0; i<N_LASERS; i++)
        {
            if(state == ON)
                laser_on(i);
            else
                laser_off(i);
        }
        // wait T ms
        _delay_ms(10);
        
        // is input at state X?
        uint8_t inputs = 0;

        // read and parse photodetector inputs
        inputs = DETECTOR_PINS & DETECTOR_MASK;
        for(i=0; i<N_LASERS; i++)
        {
            if(pin_value(inputs, i+5) == state) 
            {
                laser[i] += 1;
                if(laser[i] > THRESH)
                {
                    laser[i] = THRESH;
                    set_output(i, ON);
                }
                else
                {
                    set_output(i, OFF);
                }
            }
            else
            {
                if(laser[i] > 0)
                    /*
                     * TODO : should maybe consider setting it to zero directly
                     */
                    laser[i] -= 1;
                // No hysteresis implemented yet.
                if(laser[i] < THRESH)
                    set_output(i, OFF);
            }
        }

        // change state
        state ^= 1;
    }

    // main

    return 0;
    
}
Esempio n. 5
0
/**
 * Read the input buffer and find any recognized commands.  One G or M command per line.
 */
void processCommand() {
  // blank lines
  if(buffer[0]==';') return;
  
  long cmd;

  // is there a line number?
  cmd=parsenumber('N',-1);
  if(cmd!=-1 && buffer[0]=='N') {  // line number must appear first on the line
    if( cmd != line_number ) {
      // wrong line number error
      Serial.print(F("BADLINENUM "));
      Serial.println(line_number);
      return;
    }
  
    // is there a checksum?
    if(strchr(buffer,'*')!=0) {
      // yes.  is it valid?
      char checksum=0;
      int c=0;
      while(buffer[c]!='*') checksum ^= buffer[c++];
      c++; // skip *
      int against = strtod(buffer+c,NULL);
      if( checksum != against ) {
        Serial.print(F("BADCHECKSUM "));
        Serial.println(line_number);
        return;
      } 
    } else {
      Serial.print(F("NOCHECKSUM "));
      Serial.println(line_number);
      return;
    }
    
    line_number++;
  }

  cmd = parsenumber('G',-1);
  switch(cmd) {
  case  0: // move linear
  case  1: // move linear
      // Move Linear here
      do_move(parsenumber('Y',0), parsenumber('Z',0), parsenumber('F',30000));
    break;
  case 3:
     delay(parsenumber('D',0));
  break;
  case  4:  
      set_exposing_cycles(parsenumber('E',0));
    break;  // dwell
  case 5:
      fill_laser_buffer(parsedistance('D',0));
    break;
  case 6:
      delay(20);
      expose_line(parsenumber('E',1000));
    break;
  case 7:
       create_test_pattern();
       expose_line(parsenumber('E',50000));
     break;  
  case 29:
      //home z- axis
     home_z_axis();
     break;
  case 30:
     home_y_axis();
     break;
   
  case 28:
      // home all axis
      break;  
  
  case 90:  mode_abs=1;  break;  // absolute mode
  case 91:  mode_abs=0;  break;  // relative mode
  case 92:  // set logical position
      // set position to 0 here
    break;
  default:  break;
  }
  
  // M Code section 
  cmd = parsenumber('M',-1);
  switch(cmd) {
  case 18:  // disable motors
    motors_release();
    break;
  case 19:
     laser_on(); 
    break;
  case 20:
     laser_off();
    break;
  case 21:
    vat_down();
    break;
  case 22:
    vat_up();
    break;
       
    
  case 100:  help();  break;
  case 110:  line_number = parsenumber('N',line_number);  break;
  case 114:  
    // print position here  
  break;
  default:  break;
  }
}