void motor_originate()
{
	if (motor_origin_point>0)
	{
		motor_step_backward(motor_origin_point);
	}
	else if (motor_origin_point<0)
	{
		motor_step_forward(motor_origin_point);
	}
	motor_origin_set();

}
void
task_motor_move(void *p_arg)
{
	OS_ERR err;
	OS_MSG_SIZE size;
	CPU_TS ts;
	CMD_STRU *msg;
	CMD_STRU *send_msg = (CMD_STRU*)malloc(sizeof(CMD_STRU));
	unsigned short msg_send[6];
	unsigned short report_data[3];

	report_data[0] = 0;
	report_data[1] = 0;
	report_data[2] = 0;
	long temp;

	while (1)
	{
		msg = (CMD_STRU*)OSQPend(&MoveQ, 0, OS_OPT_PEND_BLOCKING, &size, &ts, &err);
		switch (msg->cmd_word & 0x00ff)
		{
		case MOD_MOTOR_CMD_SET_ORIGIN:
			motor_origin_set();
			break;

		case MOD_MOTOR_CMD_STEP_FORWARD:
			motor_reset_stop();
			module_msg_render(send_msg, MOD_COMM_HEAD, MOD_MOTOR_HEAD,
					MOD_MOTOR_STATUS_FORWARD, msg->para1, MOD_MOTOR_STATUS_MOVING);

			motor_step_forward(msg->para1);

			module_msg_render(send_msg, MOD_COMM_HEAD, MOD_MOTOR_HEAD,
					MOD_MOTOR_STATUS_FORWARD, msg->para1, MOD_MOTOR_STATUS_STOPPING );
			module_msg_dispatch(send_msg);

			break;

		case MOD_MOTOR_CMD_STEP_BACKWARD:
			motor_reset_stop();
			module_msg_render(send_msg, MOD_COMM_HEAD, MOD_MOTOR_HEAD,
								MOD_MOTOR_STATUS_BACKWARD, msg->para1, MOD_MOTOR_STATUS_MOVING );
			module_msg_dispatch(send_msg);

			motor_step_backward(msg->para1);

			module_msg_render(send_msg, MOD_COMM_HEAD, MOD_MOTOR_HEAD,
					MOD_MOTOR_STATUS_BACKWARD, msg->para1, MOD_MOTOR_STATUS_STOPPING);
			module_msg_dispatch(send_msg);
			break;

		case MOD_MOTOR_CMD_AUTO_FORWARD:
			motor_reset_stop();
			module_msg_render(send_msg, MOD_COMM_HEAD, MOD_MOTOR_HEAD,
					MOD_MOTOR_STATUS_FORWARD, 0, MOD_MOTOR_STATUS_MOVING);
			module_msg_dispatch(send_msg);
			temp = 0;
			while (1)
			{
				motor_step_forward(MOTOR_SINGLE_STEP);
				temp++;
				if (motor_check_stop()==MOTOR_STOP)
				{
					motor_reset_stop();
					module_msg_render(send_msg, MOD_COMM_HEAD, MOD_MOTOR_HEAD,
							MOD_MOTOR_STATUS_FORWARD, temp, MOD_MOTOR_STATUS_STOPPING);
					module_msg_dispatch(send_msg);
					break;
				}
			}
			break;

		case MOD_MOTOR_CMD_AUTO_BACKWARD:
			motor_reset_stop();
			module_msg_render(send_msg, MOD_COMM_HEAD, MOD_MOTOR_HEAD,
					MOD_MOTOR_STATUS_BACKWARD, 0, MOD_MOTOR_STATUS_MOVING);
			module_msg_dispatch(send_msg);
			temp =0;
			while (1)
			{
				temp++;
				motor_step_backward(MOTOR_SINGLE_STEP);
				if (motor_check_stop()==MOTOR_STOP)
				{
					motor_reset_stop();
					module_msg_render(send_msg, MOD_COMM_HEAD, MOD_MOTOR_HEAD,
							MOD_MOTOR_STATUS_BACKWARD, temp, MOD_MOTOR_STATUS_STOPPING);
					module_msg_dispatch(send_msg);
					break;
				}
			}
			break;

		case MOD_MOTOR_CMD_ORIGINATE:
			motor_originate();
			break;
		}
	}
}