Small progress. Have to continue here..
This commit is contained in:
		@@ -22,7 +22,7 @@ public:
 | 
				
			|||||||
		m_source_file = source_file;
 | 
							m_source_file = source_file;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int analyze();
 | 
						virtual int analyze() = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const std::string &get_src_file()
 | 
						const std::string &get_src_file()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,8 +11,7 @@ class TprFrontend : public TempLangFrontend {
 | 
				
			|||||||
private:
 | 
					private:
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
	TprFrontend(const std::string &source_file); 
 | 
						TprFrontend(const std::string &source_file); 
 | 
				
			||||||
	
 | 
						int analyze() override;
 | 
				
			||||||
	int analyze();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										47
									
								
								tprcc/include/tpr/tpr-types.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								tprcc/include/tpr/tpr-types.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					#ifndef _TPR_TYPES_HPP_
 | 
				
			||||||
 | 
					#define _TPR_TYPES_HPP_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <vector>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace tpr {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum class CommandType {
 | 
				
			||||||
 | 
						pid_conf,
 | 
				
			||||||
 | 
						temp_set,
 | 
				
			||||||
 | 
						wait_temp,
 | 
				
			||||||
 | 
						wait_time,
 | 
				
			||||||
 | 
						temp_ramp,
 | 
				
			||||||
 | 
						beep,
 | 
				
			||||||
 | 
						temp_off,
 | 
				
			||||||
 | 
						clear_flags,
 | 
				
			||||||
 | 
						digio_conf,
 | 
				
			||||||
 | 
						digio_set,
 | 
				
			||||||
 | 
						digio_wait,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct CommandSpec {
 | 
				
			||||||
 | 
						CommandType type;
 | 
				
			||||||
 | 
						std::vector<bool> param_is_whole_num;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TprCommand {
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
						static const CommandSpec m_specs[11];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						CommandType m_type;
 | 
				
			||||||
 | 
						std::vector<float> m_parameters;
 | 
				
			||||||
 | 
						bool is_whole_number(float num) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						TprCommand(CommandType type);
 | 
				
			||||||
 | 
						TprCommand(CommandType type, const std::vector<float> ¶ms);
 | 
				
			||||||
 | 
						TprCommand(CommandType type, const std::vector<float> &¶ms);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						bool check_command(bool print_status) const;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* _TPR_TYPES_HPP_ */
 | 
				
			||||||
							
								
								
									
										71
									
								
								tprcc/src/tpr/tpr-types.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								tprcc/src/tpr/tpr-types.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
				
			|||||||
 | 
					#include <cstdlib>
 | 
				
			||||||
 | 
					#include <tpr/tpr-types.hpp>
 | 
				
			||||||
 | 
					#include <cmath>
 | 
				
			||||||
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace tpr {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const CommandSpec TprCommand::m_specs[11] = {
 | 
				
			||||||
 | 
						{.type = CommandType::beep, .param_is_whole_num = std::vector<bool>{true}},
 | 
				
			||||||
 | 
						{.type = CommandType::clear_flags, .param_is_whole_num = std::vector<bool>{}},
 | 
				
			||||||
 | 
						{.type = CommandType::digio_conf, .param_is_whole_num = std::vector<bool>{true, true}},
 | 
				
			||||||
 | 
						{.type = CommandType::digio_set, .param_is_whole_num = std::vector<bool>{true, true}},
 | 
				
			||||||
 | 
						{.type = CommandType::digio_wait, .param_is_whole_num = std::vector<bool>{true, true}},
 | 
				
			||||||
 | 
						{.type = CommandType::wait_temp, .param_is_whole_num = std::vector<bool>{false}},
 | 
				
			||||||
 | 
						{.type = CommandType::wait_time, .param_is_whole_num = std::vector<bool>{false}},
 | 
				
			||||||
 | 
						{.type = CommandType::temp_off, .param_is_whole_num = std::vector<bool>{}},
 | 
				
			||||||
 | 
						{.type = CommandType::temp_ramp, .param_is_whole_num = std::vector<bool>{true, true}},
 | 
				
			||||||
 | 
						{.type = CommandType::pid_conf, .param_is_whole_num = std::vector<bool>{false, false, false, false, false, false}},
 | 
				
			||||||
 | 
						{.type = CommandType::temp_set, .param_is_whole_num = std::vector<bool>{false}}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TprCommand::TprCommand(CommandType type)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						m_type = type;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TprCommand::TprCommand(CommandType type, const std::vector<float> ¶ms) : TprCommand(type)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						m_parameters = params;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TprCommand::TprCommand(CommandType type, const std::vector<float> &¶ms) : TprCommand(type)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						m_parameters = std::move(params);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool TprCommand::is_whole_number(float num) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (floor(num) == num)
 | 
				
			||||||
 | 
							return true;
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool TprCommand::check_command(bool print_status) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						for (unsigned int i = 0; i < 11; i++) {
 | 
				
			||||||
 | 
							if (m_specs[i].type == m_type) {
 | 
				
			||||||
 | 
								/* Check size of param vector. This is just to be safe and should never fail */
 | 
				
			||||||
 | 
								if (m_parameters.size() != m_specs[i].param_is_whole_num.size()) {
 | 
				
			||||||
 | 
									std::cerr << "[ERR] Parameter count mismatch in command. This is a compiler bug!" << std::endl;
 | 
				
			||||||
 | 
									std::abort();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								for (unsigned int param_idx = 0; i < m_parameters.size(); i++) {
 | 
				
			||||||
 | 
									if (is_whole_number(m_parameters[param_idx]) ^ m_specs[i].param_is_whole_num[param_idx]) {
 | 
				
			||||||
 | 
										if (print_status) {
 | 
				
			||||||
 | 
											std::cerr << "[WARN]" // TODO:::: Continue here!!
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										return false;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return true;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user