1717
1818namespace machinecontrol {
1919
20+ /* *
21+ * The RTDClass allows enabling and selecting the different temperature sensor inputs
22+ * (RTD and thermocouples)
23+ */
2024class RTDClass {
2125public:
26+
27+ /* *
28+ * Select the input channel to be read (3 channels available)
29+ *
30+ * @param channel (0-2)
31+ */
2232 void selectChannel (int channel) {
2333 for (int i=0 ; i<3 ; i++) {
2434 ch_sel[i] = (i == channel ? 1 : 0 );
2535 }
2636 delay (150 );
2737 }
38+
39+ /* *
40+ * Enable the CS of the Thermocouple to digital converter
41+ * Disable the CS for the RTD to digital converter
42+ */
2843 void enableTC () {
2944 rtd_th = 0 ;
3045 digitalWrite (PI_0, LOW);
3146 digitalWrite (PA_6, HIGH);
3247 }
48+
49+ /* *
50+ * Enable the CS of the RDT to digital converter.
51+ * Disable the CS of the Thermocouple to digital converter
52+ */
3353 void enableRTD () {
3454 rtd_th = 1 ;
3555 digitalWrite (PI_0, HIGH);
3656 digitalWrite (PA_6, LOW);
3757
3858 }
59+
60+ /* *
61+ * Disable Chip select for both RTD and thermocouple digital converters.
62+ *
63+ */
3964 void disableCS () {
4065 digitalWrite (PI_0, HIGH);
4166 digitalWrite (PA_6, HIGH);
@@ -53,9 +78,18 @@ extern RTDClass temp_probes;
5378
5479static mbed::CAN _can (PB_8, PH_13);
5580
81+
82+ /* *
83+ * The COMMClass is used to initialize the CAN and RS485 LEDs and
84+ * establish the power mode of the CAN bus.
85+ */
5686class COMMClass {
5787public:
5888 // to be tested: check if can be made a big pin initialization
89+
90+ /* *
91+ * Shutdown RS485 and CAN LEDs
92+ */
5993 void init () {
6094 // SHUTDOWN OF RS485 LEDS
6195 digitalWrite (PinNameToIndex (PA_0), LOW);
@@ -73,9 +107,21 @@ class COMMClass {
73107 rs485Slew (false );
74108 }
75109
110+ /* *
111+ * Set the CAN transceiver in Normal mode. In this mode, the transceiver
112+ * can transmit and receive data via the bus lines CANH and CANL.
113+ */
76114 void enableCAN () {
77115 can_disable = 0 ;
78116 }
117+
118+ /* *
119+ * Set the CAN transceiver in standby (low power) mode. In this mode the
120+ * transceiver will not be able to transmit or correctly receive data via the bus lines.
121+ * The wake-up filter on the output of the low-power receiver does not latch bus dominant states,
122+ * but ensures that only bus dominant and bus recessive states that persist longer than tfltr(wake)
123+ * bus are reflected on pin RXD.
124+ */
79125 void disableCAN () {
80126 can_disable = 1 ;
81127 }
@@ -118,8 +164,18 @@ extern COMMClass comm_protocols;
118164#define ch2_in3 ch_in[10 ]
119165#define ch2_in4 ch_in[11 ]
120166
167+ /* *
168+ * The AnalogInClass is used to set the resistor configuration for the right type of analog sensor
169+ * i.e. NTC sensors, 4-10mA or 0-10V.
170+ */
121171class AnalogInClass {
122172public:
173+
174+ /* *
175+ * read the sampled voltage from the selected channel
176+ * @param channel integer for selecting the analog input (0, 1 or 2)
177+ * @return the analog value between 0.0 and 1.0 normalized to a 16-bit value (uint16_t)
178+ */
123179 uint16_t read (int channel) {
124180 uint16_t value = 0 ;
125181 switch (channel) {
@@ -139,6 +195,10 @@ class AnalogInClass {
139195 return value;
140196 }
141197
198+ /* *
199+ * Configure the input resistor dividers to have a ratio of 0.28.
200+ * Maximum input voltage is 10V.
201+ */
142202 void set0_10V () {
143203 ch0_in1 = 1 ;
144204 ch0_in2 = 1 ;
@@ -156,6 +216,10 @@ class AnalogInClass {
156216 ch2_in4 = 1 ;
157217 }
158218
219+ /* *
220+ * Enable a 120 ohm resistor to GND to convert the 4-20mA sensor currents to voltage.
221+ * Note: 24V are available from the carrier to power the 4-20mA sensors.
222+ */
159223 void set4_20mA () {
160224 ch0_in1 = 1 ;
161225 ch0_in2 = 0 ;
@@ -173,6 +237,10 @@ class AnalogInClass {
173237 ch2_in4 = 0 ;
174238 }
175239
240+ /* *
241+ * Enable a 100K resistor in series with the reference voltage.
242+ * The voltage sampled is the voltage division between the 100k resistor and the input resistor (NTC/PTC)
243+ */
176244 void setNTC () {
177245 ch0_in1 = 0 ;
178246 ch0_in2 = 0 ;
@@ -217,6 +285,12 @@ extern AnalogInClass analog_in;
217285
218286class AnalogOutClass {
219287public:
288+
289+ /* *
290+ * Set output voltage value (PWM)
291+ * @param index select channel
292+ * @param voltage desired output voltage (max 10.5V)
293+ */
220294 void write (int index, float voltage) {
221295 if (voltage < 0 ) {
222296 voltage = 0 ;
@@ -237,6 +311,12 @@ class AnalogOutClass {
237311 break ;
238312 }
239313 }
314+
315+ /* *
316+ * Set the PWM period (frequency)
317+ * @param index select channel
318+ * @param period integer for selecting the period in ms
319+ */
240320 void period_ms (int index, uint8_t period) {
241321 switch (index) {
242322 case 0 :
@@ -279,11 +359,21 @@ extern AnalogOutClass analog_out;
279359 TODO: writeme
280360 Use QEI library for mbed since it implements index pin
281361*/
362+ /* *
363+ * The EncoderClass is a wrapper for manipulating Quadrature Encoder Interface devices.
364+ */
282365class EncoderClass {
283366public:
367+ /* *
368+ * returns the encoder variable depending on the index
369+ * @param index integer for selecting the encoder (0 or 1)
370+ * @return enc_0 for index = 0, enc_1 for index = 1
371+ */
284372 EncoderClass ()
285373 : enc_0{PJ_8, PH_12, PH_11, 0 }
286374 , enc_1{PC_13, PI_7, PJ_10, 0 } {};
375+
376+
287377 QEI& operator [](int index) {
288378 switch (index) {
289379 case 0 :
@@ -308,14 +398,35 @@ extern EncoderClass encoders;
308398 TODO: check if Wire and address are correct
309399*/
310400
401+
402+ /* *
403+ * The ProgrammableDIOClass is used to initialize the IOExpanders and configure the
404+ * thermal shutdown mode of the high side switches.
405+ */
311406class ProgrammableDIOClass : public ArduinoIOExpanderClass {
312407public:
408+
409+ /* *
410+ * Test connection with the IOExpander and set all the pins to the default mode.
411+ * @return true if OK, false if fault
412+ */
313413 bool init () {
314414 return begin (IO_ADD);
315415 }
416+
417+ /* *
418+ * Configures the thermal shutdown of the high-side switches (TPS4H160) to operate in latch mode.
419+ * The output latches off when thermal shutdown occurs.
420+ */
316421 void setLatch () {
317422 prog_latch_retry = 0 ;
318423 }
424+
425+ /* *
426+ * Configures the thermal shutdown of the high-side switches (TPS4H160) to operate in auto-retry mode.
427+ * The output automatically recovers when TJ < T(SD) – T(hys), but the current is limited to ICL(TSD)
428+ * to avoid repetitive thermal shutdown.
429+ */
319430 void setRetry () {
320431 prog_latch_retry = 1 ;
321432 }
@@ -326,20 +437,48 @@ class ProgrammableDIOClass : public ArduinoIOExpanderClass {
326437extern ProgrammableDIOClass digital_programmables;
327438
328439
440+ /* *
441+ * The DigitalOutputClass is used to interface with the IO Expander and
442+ * set the digital outputs.
443+ */
329444class DigitalOutputsClass {
330445public:
446+
447+ /* *
448+ * Set all digital outputs at the same time.
449+ * @param val 8 bit integer to set all 8 channels. e.g:
450+ * Set all to HIGH -> val = 255 (0b11111111)
451+ * Set all to LOW -> val = 0 (0b00000000)
452+ */
331453 void setAll (uint8_t val) {
332454 for (int i = 0 ; i < 8 ; i++) {
333455 out[i] = val & 0x1 ;
334456 val = val >> 1 ;
335457 }
336458 }
459+
460+ /* *
461+ * Set a particular digital output
462+ * @param index digital output to be set
463+ * @param val set value (HIGH/LOW)
464+ */
337465 void set (int index, bool val) {
338466 out[index] = val;
339467 }
468+
469+ /* *
470+ * Configures the thermal shutdown of the high-side switches (TPS4H160) to operate in latch mode.
471+ * The output latches off when thermal shutdown occurs.
472+ */
340473 void setLatch () {
341474 dig_out_latch_retry = 0 ;
342475 }
476+
477+ /* *
478+ * Configures the thermal shutdown of the high-side switches (TPS4H160) to operate in auto-retry mode.
479+ * The output automatically recovers when TJ < T(SD) – T(hys), but the current is limited to ICL(TSD)
480+ * to avoid repetitive thermal shutdown.
481+ */
343482 void setRetry () {
344483 dig_out_latch_retry = 1 ;
345484 }
@@ -358,14 +497,22 @@ extern DigitalOutputsClass digital_outputs;
358497
359498class ProgrammableDINClass : public ArduinoIOExpanderClass {
360499public:
500+ /* *
501+ * Test connection with the IOExpander and set all the pins to the default mode.
502+ * @return true if OK, false if fault
503+ */
361504 bool init () {
362505 return begin (DIN_ADD);
363506 }
364507};
365508
366509extern ProgrammableDINClass digital_inputs;
367510
368-
511+ /* *
512+ * The RtcControllerClass is a wrapper for the PCF8563TClass() that is used to
513+ * set and get the time to/from the PCF8563T RTC.
514+ *
515+ */
369516class RtcControllerClass : public PCF8563TClass {
370517public:
371518 mbed::DigitalIn int_pin = mbed::DigitalIn(PB_9,PullUp);
@@ -376,21 +523,41 @@ class RtcControllerClass : public PCF8563TClass {
376523extern RtcControllerClass rtc_controller;
377524
378525
379-
526+ /* *
527+ * The USB Class is used to enable/disable the power of the USBA (Host) and configure
528+ * the callbacks for the different host types (i.e. Keyboard, mouse, storage device etc).
529+ */
380530class USBClass {
381531public:
532+ /* *
533+ * Configures the USB host by providing the list of callbacks to support the behaviour
534+ * of the host (keyboard, mouse, storage device etc)
535+ *
536+ * @param class_table a pointer to the structure containing the list of callbacks
537+ */
382538 void init (const tusbh_class_reg_t *class_table) {
383539 usb.Init (USB_CORE_ID_FS, class_table);
384540 }
385541
542+ /* *
543+ * Enable power to USBA VBUS.
544+ */
386545 void powerEnable () {
387546 power = 0 ;
388547 }
389548
549+ /* *
550+ * Disable power to USBA VBUS.
551+ */
390552 void powerDisable () {
391553 power = 1 ;
392554 }
393555
556+ /* *
557+ * Flag to indicate overcurrent, overtemperature, or reverse−voltage conditions on the USBA VBUS.
558+ * Active−low open−drain output.
559+ * @return true if OK, false if fault
560+ */
394561 bool vflagRead () {
395562 return usbflag;
396563 }
0 commit comments