Example #1
0
void StepperController::enableSteppers(bool x, bool y, bool z)
{
	if (x)
		PORTP(steppers[0].enPort) |= steppers[0].enPin;
	if (y)
		PORTP(steppers[1].enPort) |= steppers[1].enPin;
	if (z)
		PORTP(steppers[2].enPort) |= steppers[2].enPin;
}
Example #2
0
File: io.c Project: mschaef/vcsh
lref_t linput_portp(lref_t obj)
{
     if (PORTP(obj) && PORT_INPUTP(obj))
          return obj;

     return boolcons(false);
}
Example #3
0
File: io.c Project: mschaef/vcsh
lref_t loutput_portp(lref_t obj)
{
     if (PORTP(obj) && PORT_OUTPUTP(obj))
          return obj;

     return boolcons(false);
}
Example #4
0
File: io.c Project: mschaef/vcsh
lref_t lport_openp(lref_t obj)
{
     if (!PORTP(obj))
          vmerror_wrong_type_n(1, obj);

     return boolcons(!PORT_CLOSEDP(obj));
}
Example #5
0
lref_t lidebug_printer(lref_t obj, lref_t port, lref_t machine_readable_p)
{
     if (!PORTP(port))
          vmerror_wrong_type_n(2, port);

     return debug_print_object(obj, port, TRUEP(machine_readable_p));
}
Example #6
0
INLINE lref_t PORT_UNDERLYING(lref_t text_port)
{
     lref_t underlying = PORT_USER_OBJECT(text_port);

     assert(PORTP(underlying));

     return underlying;
}
Example #7
0
File: io.c Project: mschaef/vcsh
size_t port_length(lref_t port)
{
     assert(PORTP(port));

     if (PORT_CLASS(port)->length)
          return PORT_CLASS(port)->length(port);

     return 0;
}
Example #8
0
File: io.c Project: mschaef/vcsh
lref_t lport_name(lref_t port)
{
     if (NULLP(port))
          port = CURRENT_INPUT_PORT();

     if (!PORTP(port))
          vmerror_wrong_type_n(1, port);

     return PORT_PINFO(port)->port_name;
}
Example #9
0
File: io.c Project: mschaef/vcsh
lref_t lport_class_name(lref_t port)
{
     if (NULLP(port))
          port = CURRENT_INPUT_PORT();

     if (!PORTP(port))
          vmerror_wrong_type_n(1, port);

     return strconsbuf(PORT_CLASS(port)->name);
}
Example #10
0
void StepperController::moveTo(int32_t x,int32_t y,int32_t z,int32_t feedRate)
{
	
	uint32_t moveTime;
	uint8_t i;
	
	for (i=0;i<3;i++)
	{
		steppers[i].targetStep = x;
		int32_t deltaSteps = x - steppers[i].currentStep;
		steppers[i].bDirectionPositive = deltaSteps >= 0;
		steppers[i].deltaSteps = ABS(deltaSteps);

		if (steppers[i].deltaSteps > 0)
		{
			PORTP(steppers[i].enPort) |= steppers[i].enPin;
			
			if (steppers[i].bDirectionPositive)
				PORTP(steppers[i].dirPort) |= steppers[i].dirPin;
			else
				PORTP(steppers[i].dirPort) &= ~steppers[i].dirPin;
				
		}
		moveTime = MAX(moveTime,steppers[i].deltaSteps / feedRate);
	}
	
	for (i=0;i<3;i++)
	{
		if (steppers[i].deltaSteps > 0)
		{
			steppers[i].stepDelay = STEPPER_HZ / (steppers[i].deltaSteps / moveTime);
			steppers[i].currentStepTime = steppers[i].stepDelay;
		}
	}
	
	mbMoving = isMoving();
	
	if (mbMoving)
		timer.enable();
		
}
Example #11
0
void StepperController::update()
{
	if (mbMoving)
	{
#ifdef STEPPERX_DISABLE_INACTIVE
		if (!steppers[0].deltaSteps)
			PORTP(steppers[0].enPort) &= ~steppers[0].enPin;
#endif
#ifdef STEPPERY_DISABLE_INACTIVE
		if (!steppers[1].deltaSteps)
			PORTP(steppers[1].enPort) &= ~steppers[1].enPin;
#endif
#ifdef STEPPERZ_DISABLE_INACTIVE
		if (!steppers[2].deltaSteps)
			PORTP(steppers[2].enPort) &= ~steppers[2].enPin;
#endif

		mbMoving = isMoving();
		if (!mbMoving)
			timer.disable();
	}
}
Example #12
0
lref_t lopen_text_output_port(lref_t underlying)
{
     if (!PORTP(underlying))
          vmerror_wrong_type_n(1, underlying);

     if (!BINARY_PORTP(underlying))
          vmerror_unsupported(_T("cannot open text output on binary port"));

     return portcons(&text_port_class,
                     lport_name(underlying),
                     PORT_OUTPUT | PORT_TEXT,
                     underlying,
                     NULL);
}
Example #13
0
File: io.c Project: mschaef/vcsh
lref_t lclose_port(lref_t port)
{
     if (!PORTP(port))
          vmerror_wrong_type_n(1, port);

     if (PORT_OUTPUTP(port))
          lflush_port(port);

     if (PORT_CLASS(port)->close)
          PORT_CLASS(port)->close(port);

     PORT_PINFO(port)->mode = PORT_CLOSED;

     return port;
}
Example #14
0
File: io.c Project: mschaef/vcsh
void port_gc_free(lref_t port)
{
     assert(PORTP(port));
     assert(PORT_CLASS(port));

     if (PORT_CLASS(port)->close)
          PORT_CLASS(port)->close(port);

     if (PORT_TEXT_INFO(port))
          gc_free(PORT_TEXT_INFO(port));

     if (PORT_CLASS(port)->gc_free)
          PORT_CLASS(port)->gc_free(port);

     gc_free(PORT_PINFO(port));
}
Example #15
0
File: io.c Project: mschaef/vcsh
lref_t lflush_port(lref_t port)
{
     if (!PORTP(port))
          vmerror_wrong_type_n(1, port);

     if (TEXT_PORTP(port)
         && PORT_TEXT_INFO(port)->translate
         && PORT_TEXT_INFO(port)->needs_lf)
     {
          write_char(port, _T('\n'));
     }

     if (PORT_CLASS(port)->flush)
          PORT_CLASS(port)->flush(port);

     return port;
}
Example #16
0
lref_t lrich_write(lref_t obj, lref_t machine_readable, lref_t port)
{
     if (NULLP(port))
          port = CURRENT_OUTPUT_PORT();

     if (!PORTP(port))
          vmerror_wrong_type_n(3, port);

     if (PORT_INPUTP(port))
          vmerror_unsupported(_T("cannot rich-write to input ports"));

     if (PORT_CLASS(port)->rich_write == NULL)
          return boolcons(false);

     if (PORT_CLASS(port)->rich_write(port, obj, TRUEP(machine_readable)))
          return port;

     return boolcons(false);
}
Example #17
0
size_t debug_port_write_chars(lref_t port, const _TCHAR *buf, size_t count)
{
     UNREFERENCED(port);
     assert(PORTP(port));

     _TCHAR block[DEBUG_PORT_BLOCK_SIZE + 1];

     size_t buf_loc = 0;
     size_t block_loc = 0;

     size_t len = count;

     /* Filter nulls out of the input string, and ensure that the
      * buffer we pass to OutputDebugString has as terminating
      * null. */
     while (len > 0)
     {
          for (block_loc = 0;
               (block_loc < DEBUG_PORT_BLOCK_SIZE) && (len > 0); block_loc++, buf_loc++, len--)
          {
               if (buf[buf_loc] == '\0')
                    block[block_loc] = '~';
               else
                    block[block_loc] = buf[buf_loc];
          }

          block[block_loc] = '\0';

          if (DEBUG_FLAG(DF_DEBUGGER_TO_ODS))
               sys_output_debug_string(block);
          else
               fputs(block, stderr);
     }

     return len;
}
Example #18
0
File: io.c Project: mschaef/vcsh
lref_t lportp(lref_t obj)
{
     return boolcons(PORTP(obj));
}
Example #19
0
/* A C function to do Lisp-style Formatted I/O ******************
 *
 * ~s - write the lisp object
 * ~a - display the lisp object
 * REVISIT: remove scvwritef ~u in favor of some kind of print_unreadable_object call
 * ~u - display the lisp object in unprintable fashion (ie. <type@addr...>
 *
 * ~cs - display the C string
 * ~cS - display the C string/arglist with a recursive call to scvwritef
 * ~cd - display the C integer
 * ~cf - display the C flonum
 * ~c& - display the C pointer
 * ~cc - display the C character
 * ~cC - display the C integer as an octal character constant
 * ~cB - display the C integer as a byte
 *
 * Prefixing a format code with a #\! (ie. ~!L) causes the corresponding
 * value to be returned from the function as a Lisp object.
 */
lref_t scvwritef(const _TCHAR * format_str, lref_t port, va_list arglist)
{
     char ch;

     if (NULLP(port))
          port = CURRENT_OUTPUT_PORT();

     assert(PORTP(port));


     _TCHAR buf[STACK_STRBUF_LEN];


     lref_t lisp_arg_value = NULL;
     _TCHAR *str_arg_value = NULL;
     _TCHAR char_arg_value = _T('\0');
     long int long_arg_value = 0;
     unsigned long int ulong_arg_value = 0;
     flonum_t flonum_arg_value = 0.0;

     lref_t unprintable_object = NIL;
     lref_t return_value = NIL;

     for (;;)
     {
          ch = *format_str;

          if (ch == '\0')
               break;

          bool return_next_value = false;

          format_str++;

          if (ch != '~')
          {
               write_char(port, ch);

               continue;
          }

          ch = *format_str;
          format_str++;

          if (ch == '!')
          {
               ch = *format_str;
               format_str++;

               return_next_value = true;
          }

          switch (ch)
          {
          case 's':
               lisp_arg_value = va_arg(arglist, lref_t);

               if (return_next_value)
                    return_value = lisp_arg_value;

               debug_print_object(lisp_arg_value, port, true);
               break;

          case 'a':
               lisp_arg_value = va_arg(arglist, lref_t);

               if (return_next_value)
                    return_value = lisp_arg_value;

               debug_print_object(lisp_arg_value, port, false);
               break;

          case 'u':
               unprintable_object = va_arg(arglist, lref_t);

               if (return_next_value)
                    return_value = unprintable_object;

               if (DEBUG_FLAG(DF_PRINT_FOR_DIFF))
                    scwritef("#<~cs@(no-addr)", port, typecode_name(TYPE(unprintable_object)));
               else
                    scwritef("#<~cs@~c&", port,
                             typecode_name(TYPE(unprintable_object)), unprintable_object);
               break;

          case '~':
               write_char(port, '~');
               break;

          case 'c':            /*  C object prefix */

               ch = *format_str;        /*  read the next format character */
               format_str++;

               switch (ch)
               {

               case 's':
                    str_arg_value = va_arg(arglist, _TCHAR *);

                    if (return_next_value)
                         return_value = strconsbuf(str_arg_value);

                    if (str_arg_value)
                         write_text(port, str_arg_value, _tcslen(str_arg_value));
                    else
                         WRITE_TEXT_CONSTANT(port, _T("<null>"));
                    break;

               case 'S':
                    str_arg_value = va_arg(arglist, _TCHAR *);

                    if (return_next_value)
                         return_value = scvwritef(str_arg_value, port, arglist);
                    else
                         scvwritef(str_arg_value, port, arglist);
                    break;

               case 'd':
                    long_arg_value = va_arg(arglist, long int);

                    if (return_next_value)
                         return_value = fixcons(long_arg_value);

                    _sntprintf(buf, STACK_STRBUF_LEN, _T("%d"), (int) long_arg_value);

                    write_text(port, buf, _tcslen(buf));
                    break;

               case 'x':
                    long_arg_value = va_arg(arglist, long int);

                    if (return_next_value)
                         return_value = fixcons(long_arg_value);

                    _sntprintf(buf, STACK_STRBUF_LEN, _T("%08lx"), long_arg_value);

                    write_text(port, buf, _tcslen(buf));
                    break;

               case 'f':
                    flonum_arg_value = va_arg(arglist, flonum_t);

                    if (return_next_value)
                         return_value = flocons(flonum_arg_value);

                    _sntprintf(buf, STACK_STRBUF_LEN, _T("%f"), flonum_arg_value);

                    write_text(port, buf, _tcslen(buf));
                    break;

               case '&':
                    _sntprintf(buf, STACK_STRBUF_LEN, _T("%p"), (void *) va_arg(arglist, void *));

                    if (return_next_value)
                         return_value = strconsbuf(buf);

                    write_text(port, buf, _tcslen(buf));
                    break;

               case 'c':
                    ulong_arg_value = va_arg(arglist, unsigned long int);

                    if (return_next_value)
                         return_value = fixcons(ulong_arg_value);

                    char_arg_value = (_TCHAR) ulong_arg_value;

                    write_text(port, &char_arg_value, 1);
                    break;

               case 'C':
                    ulong_arg_value = va_arg(arglist, unsigned long int);

                    if (return_next_value)
                         return_value = fixcons(ulong_arg_value);

                    _sntprintf(buf, STACK_STRBUF_LEN, _T("%03o"), (uint32_t) ulong_arg_value);
                    write_text(port, buf, _tcslen(buf));
                    break;

               case 'B':
                    ulong_arg_value = va_arg(arglist, unsigned long int);

                    if (return_next_value)
                         return_value = fixcons(ulong_arg_value);

                    _sntprintf(buf, STACK_STRBUF_LEN, _T("0x%02x"), (uint32_t) ulong_arg_value);
                    write_text(port, buf, _tcslen(buf));
                    break;

               default:
                    panic(_T("Invalid C object format character in scwritef"));
                    break;
               };
               break;

          default:
               panic(_T("Invalid format character in scwritef"));
               break;
          }

          return_next_value = false;
     }
     va_end(arglist);

     if (!NULLP(unprintable_object))
          scwritef(">", port);

     return return_value;
}
Example #20
0
void StepperController::doISR()
{
	//HACK: move z axis first if it needs to be moved to the head does not try to go through the object
	//essentially the host software should split the move into two commands, move z first and move xy after
	if (steppers[3].deltaSteps > 0)
	{
		steppers[3].currentStepTime--;
		if (!steppers[3].currentStepTime)
		{
			PORTP(steppers[3].stepPort) |= steppers[3].stepPin;
			PORTP(steppers[3].stepPort) &= ~steppers[3].stepPin;
			steppers[3].currentStepTime = steppers[3].stepDelay;
			steppers[3].deltaSteps--;
			steppers[3].currentStep += steppers[3].bDirectionPositive ? 1 : -1;
		}
	}
	else
	{
		for (int i=0;i<2;i++)
		{
			steppers[i].currentStepTime--;
			if (!steppers[i].currentStepTime)
			{
				PORTP(steppers[i].stepPort) |= steppers[i].stepPin;
				PORTP(steppers[i].stepPort) &= ~steppers[i].stepPin;
				steppers[i].currentStepTime = steppers[i].stepDelay;
				steppers[i].deltaSteps--;
				steppers[i].currentStep += steppers[i].bDirectionPositive ? 1 : -1;
			}

		}
	}
/*
	if (steppers[3]->needStepping())
	{
		currentStepTime[3]--;
		if (currentStepTime[3] == 0)
		{
			steppers[3]->doStep();
			currentStepTime[3] = stepDelay[3];
		}
	}
	else
	{
		for (int i=0;i<2;i++)
		{
			if (steppers[i]->needStepping())
			{
				currentStepTime[i]--;
				if (currentStepTime[i] == 0)
				{
					steppers[i]->doStep();
					currentStepTime[i] = stepDelay[i];
				}
			}
		}
	}
*/
#if 0
	for (uint8_t i=0;i<3;i++)
	{
		if (steppers[i].needStepping())
		{
			currentStepTime[i]--;
			if (currentStepTime[i] == 0)
			{
				steppers[i].doStep();
				currentStepTime[i] = stepDelay[i];
			}
		}
	}
#endif
}