AYAB Arduino Firmware 0.95
The goal of the AYAB project is to provide an alternative way to control the famous Brother KH-9xx range of knitting machines using a computer
tester.h
Go to the documentation of this file.
1
23#ifndef TESTER_H_
24#define TESTER_H_
25
26#include <Arduino.h>
27
28#include "beeper.h"
29#include "com.h"
30#include "encoders.h"
31
32constexpr uint8_t BUFFER_LEN = 40;
33constexpr unsigned int TEST_LOOP_DELAY = 500; // ms
34
36public:
37 virtual ~TesterInterface() = default;
38
39 // any methods that need to be mocked should go here
40 virtual Err_t startTest(Machine_t machineType) = 0;
41 virtual void loop() = 0;
42 virtual void helpCmd() = 0;
43 virtual void sendCmd() = 0;
44 virtual void beepCmd() = 0;
45 virtual void setSingleCmd(const uint8_t *buffer, size_t size) = 0;
46 virtual void setAllCmd(const uint8_t *buffer, size_t size) = 0;
47 virtual void readEOLsensorsCmd() = 0;
48 virtual void readEncodersCmd() = 0;
49 virtual void autoReadCmd() = 0;
50 virtual void autoTestCmd() = 0;
51 virtual void stopCmd() = 0;
52 virtual void quitCmd() = 0;
53#ifndef AYAB_TESTS
54 virtual void encoderChange();
55#endif
56};
57
58// Container class for the static methods that implement the hardware test
59// commands. Originally these methods were called back by `SerialCommand`.
60// Dependency injection is enabled using a pointer to a global instance of
61// either `Tester` or `TesterMock`, both of which classes implement the
62// pure virtual methods of `TesterInterface`.
63
64class GlobalTester final {
65private:
66 // singleton class so private constructor is appropriate
67 GlobalTester() = default;
68
69public:
70 // pointer to global instance whose methods are implemented
71 static TesterInterface *m_instance;
72
73 static Err_t startTest(Machine_t machineType);
74 static void loop();
75 static void helpCmd();
76 static void sendCmd();
77 static void beepCmd();
78 static void setSingleCmd(const uint8_t *buffer, size_t size);
79 static void setAllCmd(const uint8_t *buffer, size_t size);
80 static void readEOLsensorsCmd();
81 static void readEncodersCmd();
82 static void autoReadCmd();
83 static void autoTestCmd();
84 static void stopCmd();
85 static void quitCmd();
86#ifndef AYAB_TESTS
87 static void encoderChange();
88#endif
89};
90
91class Tester : public TesterInterface {
92public:
93 Err_t startTest(Machine_t machineType) final;
94 void loop() final;
95 void helpCmd() final;
96 void sendCmd() final;
97 void beepCmd() final;
98 void setSingleCmd(const uint8_t *buffer, size_t size) final;
99 void setAllCmd(const uint8_t *buffer, size_t size) final;
100 void readEOLsensorsCmd() final;
101 void readEncodersCmd() final;
102 void autoReadCmd() final;
103 void autoTestCmd() final;
104 void stopCmd() final;
105 void quitCmd() final;
106#ifndef AYAB_TESTS
107 void encoderChange() final;
108#endif
109
110private:
111 void setUp();
112 void beep() const;
113 void readEOLsensors();
114 void readEncoders() const;
115 void autoRead();
116 void autoTestEven() const;
117 void autoTestOdd() const;
118 void handleTimerEvent();
119
120 bool m_autoReadOn = false;
121 bool m_autoTestOn = false;
122 unsigned long m_lastTime = 0U;
123 bool m_timerEventOdd = false;
124
125 char buf[BUFFER_LEN] = {0};
126};
127
128#endif // TESTER_H_
Definition tester.h:64
Definition tester.h:91
void readEncoders() const
Read the Hall sensors that determine which carriage is in use.
Definition tester.cpp:244
void helpCmd() final
Help command handler.
Definition tester.cpp:38
void handleTimerEvent()
Timer event every 500ms to handle auto functions.
Definition tester.cpp:301
void encoderChange() final
Interrupt service routine for encoder A.
Definition tester.cpp:195
void setUp()
Setup for hardware tests.
Definition tester.cpp:206
void loop() final
Main loop for hardware tests.
Definition tester.cpp:183
void autoRead()
Read both carriage sensors and End of Line sensors.
Definition tester.cpp:271
void stopCmd() final
Stop command handler.
Definition tester.cpp:149
void beep() const
Make a beep.
Definition tester.cpp:237
void beepCmd() final
Beep command handler.
Definition tester.cpp:66
void setAllCmd(const uint8_t *buffer, size_t size) final
Set all solenoids command handler.
Definition tester.cpp:102
Err_t startTest(Machine_t machineType) final
Start hardware test.
Definition tester.cpp:169
void autoTestOdd() const
Set odd-numbered solenoids.
Definition tester.cpp:291
void autoTestCmd() final
Auto test command handler.
Definition tester.cpp:141
void autoReadCmd() final
Auto read command handler.
Definition tester.cpp:133
void readEOLsensors()
Read the End of Line sensors.
Definition tester.cpp:259
void autoTestEven() const
Set even-numbered solenoids.
Definition tester.cpp:281
void sendCmd() final
Send command handler.
Definition tester.cpp:56
void setSingleCmd(const uint8_t *buffer, size_t size) final
Set single solenoid command handler.
Definition tester.cpp:76
void readEOLsensorsCmd() final
Read EOL sensors command handler.
Definition tester.cpp:115
void readEncodersCmd() final
Read encoders command handler.
Definition tester.cpp:124
void quitCmd() final
Quit command handler.
Definition tester.cpp:157
Definition tester.h:35