|  | @ -5,11 +5,17 @@ | 
			
		
	
		
		
			
				
					|  |  | #include <thread> |  |  | #include <thread> | 
			
		
	
		
		
			
				
					|  |  | #include <string> |  |  | #include <string> | 
			
		
	
		
		
			
				
					|  |  | #include <memory> |  |  | #include <memory> | 
			
		
	
		
		
			
				
					|  |  |  |  |  | #include <algorithm> | 
			
		
	
		
		
			
				
					|  |  |  |  |  | #include <iterator> | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | #include <iostream> |  |  | #include <iostream> | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | namespace simon { |  |  | namespace simon { | 
			
		
	
		
		
			
				
					|  |  |   namespace a4988 { |  |  |   namespace a4988 { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |   // Anonymous namespace
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |   namespace { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |   	 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |   } | 
			
		
	
		
		
			
				
					|  |  |   c_allegro_4988::c_allegro_4988(std::unique_ptr<a4988_settings_t> ptr_set) |  |  |   c_allegro_4988::c_allegro_4988(std::unique_ptr<a4988_settings_t> ptr_set) | 
			
		
	
		
		
			
				
					|  |  |     : m_ptr_set(std::move(ptr_set)), m_initialized(false), m_alive(true) |  |  |     : m_ptr_set(std::move(ptr_set)), m_initialized(false), m_alive(true) | 
			
		
	
		
		
			
				
					|  |  |   { |  |  |   { | 
			
		
	
	
		
		
			
				
					|  | @ -30,11 +36,22 @@ namespace simon { | 
			
		
	
		
		
			
				
					|  |  |           if (!set_pwm_freq(std::round(1e6/move->period_us))) { |  |  |           if (!set_pwm_freq(std::round(1e6/move->period_us))) { | 
			
		
	
		
		
			
				
					|  |  |             // TODO: proper error handling
 |  |  |             // TODO: proper error handling
 | 
			
		
	
		
		
			
				
					|  |  |           } |  |  |           } | 
			
		
	
		
		
			
				
					
					|  |  |           gpioHardwarePWM(m_ptr_set->gpio_step, m_pwm_freq, PI_HW_PWM_RANGE/2); |  |  | 	  if (m_hw_pwm_possible) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |           gpioWrite(m_ptr_set->gpio_dir, move->dir); |  |  |             gpioHardwarePWM(m_ptr_set->gpio_step, m_pwm_freq, PI_HW_PWM_RANGE/2); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  | 	  } | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 	  else { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             gpioSetPWMfrequency(m_ptr_set->gpio_step, m_pwm_freq); | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 	    gpioPWM(m_ptr_set->gpio_step, PI_SW_PWM_RANGE/2);	     | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 	  } | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 	  gpioWrite(m_ptr_set->gpio_dir, move->dir); | 
			
		
	
		
		
			
				
					|  |  |           auto t_sleep = move->period_us*move->steps; |  |  |           auto t_sleep = move->period_us*move->steps; | 
			
		
	
		
		
			
				
					|  |  |           std::this_thread::sleep_for(std::chrono::microseconds(t_sleep)); |  |  |           std::this_thread::sleep_for(std::chrono::microseconds(t_sleep)); | 
			
		
	
		
		
			
				
					
					|  |  |           gpioHardwarePWM(m_ptr_set->gpio_step, m_pwm_freq, 0); |  |  | 	  if (m_hw_pwm_possible) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  | 	    gpioHardwarePWM(m_ptr_set->gpio_step, m_pwm_freq, 0); | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 	  } | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 	  else { | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 	    gpioPWM(m_ptr_set->gpio_step, 0); | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 	  } | 
			
		
	
		
		
			
				
					|  |  |         } |  |  |         } | 
			
		
	
		
		
			
				
					|  |  |         else if (*cmd == "enable") { |  |  |         else if (*cmd == "enable") { | 
			
		
	
		
		
			
				
					|  |  |           auto enable = std::static_pointer_cast<c_enable>(cmd); |  |  |           auto enable = std::static_pointer_cast<c_enable>(cmd); | 
			
		
	
	
		
		
			
				
					|  | @ -83,7 +100,11 @@ namespace simon { | 
			
		
	
		
		
			
				
					|  |  |     gpioWrite(m_ptr_set->gpio_dir, 0); |  |  |     gpioWrite(m_ptr_set->gpio_dir, 0); | 
			
		
	
		
		
			
				
					|  |  |     // Set PWM to 0
 |  |  |     // Set PWM to 0
 | 
			
		
	
		
		
			
				
					|  |  |     m_pwm_freq = 1000; |  |  |     m_pwm_freq = 1000; | 
			
		
	
		
		
			
				
					
					|  |  |     gpioHardwarePWM(m_ptr_set->gpio_step, m_pwm_freq, 0); |  |  |     unsigned pwms[] = {PI_PWM_0, PI_PWM_1}; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  |     bool m_hw_pwm_possible = std::find(std::begin(pwms), std::end(pwms), m_ptr_set->gpio_step) != std::end(pwms); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |     if (m_hw_pwm_possible) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |     	gpioHardwarePWM(m_ptr_set->gpio_step, m_pwm_freq, 0); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					|  |  |     m_initialized = true; |  |  |     m_initialized = true; | 
			
		
	
		
		
			
				
					|  |  |   } |  |  |   } | 
			
		
	
		
		
			
				
					|  |  |   int c_allegro_4988::enable(void) |  |  |   int c_allegro_4988::enable(void) | 
			
		
	
	
		
		
			
				
					|  | 
 |