Il problema era qui:
il comando unsigned long gestisce solo 4 bytes e quindi:
non poteva funzionare in quanto gli switch sono 5;
modificato quindi anziche unsigned long in uint64_t.
Avevo provato in precedenza uint8_t ma non funzionava.
Grazie alla dritta di alto777.