if ((reg & mask) == mask) {
...
}
при этом маска mask - это ОДИН бит, всегда.
Мне кажется, или сравнение
== mask
уже не нужно, ведь if() выполнится, если результат двоичного "&" ненулевой - и он будет таким, если в регистре установлен бит маски? Я могу предположить, что такое может оказаться полезным, если в маске может быть установлено сразу несколько бит и нам требуется, чтобы в регистре они так же были взведены все, а не только некоторые какие-то, но я просмотрел весь код -- нигде ничего такое не тестируется, всегда строго "однобитная" маска, без вариантов.
А вообще это я полез разбираться в потрохах библиотеки USB для STM32. Это ад.
Я не ищу в ней ошибки или ещё что-то (хотя кое-что вызывает некотрое замешательство: например, когда в описании функции сказано, что параметр может принимать значения от 1 до 15, внутри функции проверки на выход за границу отсутствует, а саму эту функцию где-то вызывают с параметром 16), просто хочу разобраться и, по возможности, предельно упростить, избавившись хотя бы от конструкций типа "обработчик прерывания вызывает коллбэк, который не делает ничего кроме вызова ещё одной функции" -- эту вложенность можно развинтить на один уровень, ничего не потеряв.