El porque se hizo asi... seguramente sea porque se programó correctamente (para protegerse de cualquier modificación del código).
O Tal ves la idea de separar correctamente lo que es un enum de un bool, ya que normalmente en C++ estan bien diferenciados. Y capaz sea un port de algun codigo en C++.
Lo primero que podrias pensar es...... porque no asigno el valor flag directamente a btnStd? Seria genial ya que high = 0, low = 1, rising = 2, etc.
Y es una conversión directa... Pero que pasaría si algún día alguien se le ocurre agregar un estado mas en el btnStat_t, o cambiar el orden, ejemplo:
enum btnStat_t{
pepe,
high,
low,
rising,
falling,
};
enum btnStat_t{
rising,
falling,
high,
low,
};
Y ahora tu codigo haria cualquier cosa. Ya que tu codigo que esperaria que ese 0 sea high, es ahora pepe o rising.
Esto hace al codigo complicado de mantener, ya que tenes que recordar que no podes modificar el enum, o tenes que agregarlo al final y hace del codigo altamente dependiente del orden que este el enum.
Pero asi como esta, no hay problema que se cambie todo lo que quiera.
Hacer:
enum btnStat_t btnStd = (true == flag)? low : high;
Es simplemente una forma resumida de hacer:
enum btnStat_t btnStd;
if(true == flag) {
btnStd = low ;}
else {
btnStd= high; }
NO ESTA DEFINIENDO EL ENUM! esta definiendo
btnStd que ES un ENUM definido como btnStat_t.
Ya que si observas y seguis el codigo, si ningun if se cumple tenes que retornar btnStd... Por lo que si o si necesitas inicializarlo con un valor correcto. Y este valor depende de flag.
y tampoco entiendo por qué la función es definida como un enumerador de la forma en que está con argumento.
Si te referis a esto:
enum btnStat_t doDebounce(uint8_t *state, volatile bool value)
Es porque estas devolviendo
btnStd, que es un
enum btnStat_tLa mayoria usa typedef para no escribir todo el enum btnStat_t (lo ves mucho tambien con las estructuras). Es decir podrias haber realizado luego del enum esto:
typedef enum btnStat_t btnStat;
(Definiendo un nuevo tipo que se llama btnStat y que es lo mismo que enum btnStat_t
Y luego:
btnStat doDebounce(uint8_t *state, volatile bool value)
//y
btnStat btnStd = (true == flag)? low : high;