From 2d46110ba9658084c1f92a6070fd284a01e29ee1 Mon Sep 17 00:00:00 2001
From: Jake <jake.read@cba.mit.edu>
Date: Fri, 16 Mar 2018 21:47:21 -0400
Subject: [PATCH] port handling runs on multiple hops, returns

---
 .../.vs/mkstepper-v011/v14/.atsuo             | Bin 93696 -> 99840 bytes
 .../mkstepper-v011/apahandler.c               |  35 +++++++++++-------
 embedded/mkstepper-v011/mkstepper-v011/main.c |  16 +++++---
 .../mkstepper-v011/mkstepper-v011/stepper.c   |  12 ++++--
 .../mkstepper-v011/mkstepper-v011/stepper.h   |   3 +-
 5 files changed, 42 insertions(+), 24 deletions(-)

diff --git a/embedded/mkstepper-v011/.vs/mkstepper-v011/v14/.atsuo b/embedded/mkstepper-v011/.vs/mkstepper-v011/v14/.atsuo
index 55e60fb340b458c9138b47408fd1140916de7ca5..0871b8c868f38dfd65e529bf3b267f96084d33da 100644
GIT binary patch
delta 3705
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

delta 2854
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

diff --git a/embedded/mkstepper-v011/mkstepper-v011/apahandler.c b/embedded/mkstepper-v011/mkstepper-v011/apahandler.c
index ae796b2..36ab2b2 100644
--- a/embedded/mkstepper-v011/mkstepper-v011/apahandler.c
+++ b/embedded/mkstepper-v011/mkstepper-v011/apahandler.c
@@ -31,51 +31,51 @@ void apa_handle_packet(uint8_t *packet, uint8_t length){
 			case APA_HANDLER_INSIDE:
 				switch (packet[i]){
 					case DELIM_KEY_POSITION_FLOAT:
-						if(i + 5 < length){
-							break; // broken data
+						if(i + 5 > length){
+							i ++;
 						} else {
 							float position = 0;
 							position = (packet[i+1] << 24) | (packet[i+2] << 16) | (packet[i+3] << 8) | packet[i+4]; // msb
 							stepper_targetposition_float(&stepper, position);
 							i += 5; // bring packet ptr to next key (should)
-							break;
 						}
+						break;
 						
 					case DELIM_KEY_POSITION_STEPS:
-						if(i + 5 < length){
-							break; // broken data
+						if(i + 5 > length){
+							i ++;
 						} else {
 							int32_t steps = (packet[i+1] << 24) | (packet[i+2] << 16) | (packet[i+3] << 8) | packet[i+4]; // msb
 							stepper_targetposition_steps(&stepper, steps);
 							i += 5; // bring packet ptr to next key (should)
-							break;
 						}
+						break;
 						
 					case DELIM_KEY_SPEED_FLOAT:
-						if(i + 5 < length){
-							break; // broken data
+						if(i + 5 > length){
+							i ++;
 						} else {
 							float speed = (packet[i+1] << 24) | (packet[i+2] << 16) | (packet[i+3] << 8) | packet[i+4]; // msb
 							stepper_targetspeed_float(&stepper, speed);
 							i += 5; // bring packet ptr to next key (should)
-							break;
 						}
+						break;
 					
 					case DELIM_KEY_SPEED_STEPS:
-						if(i + 5 < length){
-							break; // broken data
+						if(i + 5 > length){
+							i ++; // avoiding hangup
 						} else {
-							int32_t speed = (packet[i+1] << 24) | (packet[i+2] << 16) | (packet[i+3] << 8) | packet[i+4]; // msb
+							uint32_t speed = (packet[i+1] << 24) | (packet[i+2] << 16) | (packet[i+3] << 8) | packet[i+4]; // msb
 							stepper_targetspeed_steps(&stepper, speed);
 							i += 5; // bring packet ptr to next key (should)
-							break;
 						}
+						break;
 																
 					default:
 						// probably an error
+						i ++;
 						break;
 				} // end interior switch
-				i ++;
 				break;
 				
 			default: 
@@ -88,6 +88,8 @@ void apa_handle_packet(uint8_t *packet, uint8_t length){
 
 
 void apa_return_packet(uint8_t *packet, uint8_t length){
+	//uart_sendchar_buffered(ups[1], 120);
+	//uart_sendchars_buffered(ups[1], packet, length);
 	uint8_t ackpack[length];
 	ackpack[0] = length;
 	// find route header
@@ -114,5 +116,10 @@ void apa_return_packet(uint8_t *packet, uint8_t length){
 			ackpack[u] = packet[u];
 		}
 		uart_sendchars_buffered(ups[ackpack[1]], ackpack, length);
+		// NOW:
+		// looking for justice: why no return packet on double length hop?
+		// debug with 2nd ftdi
+		//uart_sendchar_buffered(ups[1], 121);
+		//uart_sendchars_buffered(ups[1], ackpack, length);
 	}
 }
\ No newline at end of file
diff --git a/embedded/mkstepper-v011/mkstepper-v011/main.c b/embedded/mkstepper-v011/mkstepper-v011/main.c
index ddf48c8..80565ea 100644
--- a/embedded/mkstepper-v011/mkstepper-v011/main.c
+++ b/embedded/mkstepper-v011/mkstepper-v011/main.c
@@ -247,8 +247,9 @@ int main(void)
 	pin_output(&dir_pin);
 	
 	stepper = stepper_new(&step_pin, &dir_pin, 360.0, 64);
+	stepper_reset(&stepper);
 	
-	stepper_targetspeed_steps(&stepper, 400);
+	stepper_targetspeed_steps(&stepper, 500); // so slow
 	
 	uint8_t lpcnt = 0;
 	uint8_t stpcnt = 0;
@@ -260,18 +261,21 @@ int main(void)
 	
 		if(stepper.position_ticks_target == stepper.position_ticks){
 			stpcnt ++;
-			stepper_targetposition_steps(&stepper, 1000 * (stpcnt %2));
-			stepper_targetspeed_steps(&stepper, 500);
+			pin_clear(&stlr);
+			//stepper_targetposition_steps(&stepper, 1000 * (stpcnt %2));
+			//stepper_targetspeed_steps(&stepper, 500);
 			//stepper_goto(&stepper, 360 * (stpcnt % 2), 1200);
+		} else {
+			pin_set(&stlr);
 		}
     }
 }
 
 /*
 next steps (haha)
-- mkteriminal to write float values for keys ...
-- do float positions / conversions / speeds / etc -> setup and doc values, types, what units are
-- make sure you can run -ve positions
+- do steps, steps/s speed checking, and direction
+- unit test all commands on all ports using mkterminal
+
 - this quickly so that you can mods compose
 
 further reading:	
diff --git a/embedded/mkstepper-v011/mkstepper-v011/stepper.c b/embedded/mkstepper-v011/mkstepper-v011/stepper.c
index eabea0c..53d2df9 100644
--- a/embedded/mkstepper-v011/mkstepper-v011/stepper.c
+++ b/embedded/mkstepper-v011/mkstepper-v011/stepper.c
@@ -59,14 +59,19 @@ void stepper_targetspeed_float(stepper_t *stepper, float speed){
 	// do more business
 }
 
-void stepper_targetspeed_steps(stepper_t *stepper, int32_t speed){
-	stepper->speed_period = 3000000 / ((speed / (stepper->position_per_200_steps / 200)) * stepper->microsteps);
+void stepper_targetspeed_steps(stepper_t *stepper, uint32_t speed){
+	uint32_t speedmin = ((speed / (stepper->position_per_200_steps / 200)) * stepper->microsteps); // enforce no division by 0
+	(speedmin < 1) ? speedmin = 1 : (0);
+	// timing not accurate to real-world yet
+	stepper->speed_period = 300000000 / speedmin;
 }
 
 void stepper_update(stepper_t *stepper){	
 	if(stepper->position_ticks_target != stepper->position_ticks){ // still have somewhere to go
 		TICKER_SYNC;
 		uint32_t now = TICKER;
+		// check if it's time to step
+		// todo: do timer update to fire this f'n at precisely the right time: nice for accel, deccel etc
 		if(now - stepper->last_time > stepper->speed_period){
 			int32_t gap = stepper->position_ticks_target - stepper->position_ticks;
 			if(gap < 0){
@@ -82,5 +87,6 @@ void stepper_update(stepper_t *stepper){
 			}
 			stepper->last_time = now;
 		} // end step cycle
-	}
+		
+	}// end step if not there cycle
 }
\ No newline at end of file
diff --git a/embedded/mkstepper-v011/mkstepper-v011/stepper.h b/embedded/mkstepper-v011/mkstepper-v011/stepper.h
index e9462d1..581023a 100644
--- a/embedded/mkstepper-v011/mkstepper-v011/stepper.h
+++ b/embedded/mkstepper-v011/mkstepper-v011/stepper.h
@@ -24,6 +24,7 @@ typedef struct {
 	uint32_t last_time;
 	
 	// float conversions
+	// not used in runtime, only during command calls
 	float position_per_200_steps; // units (mm or deg, probably) moved per full rotation
 	uint32_t microsteps;
 	float position;
@@ -40,7 +41,7 @@ void stepper_reset(stepper_t *stepper);
 void stepper_goto(stepper_t *stepper, float position, float speed);
 void stepper_targetposition_steps(stepper_t *stepper, int32_t steps);
 void stepper_targetposition_float(stepper_t *stepper, float position);
-void stepper_targetspeed_steps(stepper_t *stepper, int32_t speed);
+void stepper_targetspeed_steps(stepper_t *stepper, uint32_t speed);
 void stepper_targetspeed_float(stepper_t *stepper, float speed);
 
 void stepper_update(stepper_t *stepper);
-- 
GitLab