|
-
-
- #ifndef DOXYGEN
-
- namespace juce
- {
- namespace universal_midi_packets
- {
-
-
- struct Utils
- {
-
- static constexpr uint32_t bytesToWord (uint8_t a, uint8_t b, uint8_t c, uint8_t d)
- {
- return uint32_t (a << 0x18 | b << 0x10 | c << 0x08 | d << 0x00);
- }
-
-
-
- static uint32_t getNumWordsForMessageType (uint32_t);
-
-
-
- template <size_t Index>
- struct U4
- {
- static constexpr uint32_t shift = (uint32_t) 0x1c - Index * 4;
-
- static constexpr uint32_t set (uint32_t word, uint8_t value)
- {
- return (word & ~((uint32_t) 0xf << shift)) | (uint32_t) ((value & 0xf) << shift);
- }
-
- static constexpr uint8_t get (uint32_t word)
- {
- return (uint8_t) ((word >> shift) & 0xf);
- }
- };
-
-
-
- template <size_t Index>
- struct U8
- {
- static constexpr uint32_t shift = (uint32_t) 0x18 - Index * 8;
-
- static constexpr uint32_t set (uint32_t word, uint8_t value)
- {
- return (word & ~((uint32_t) 0xff << shift)) | (uint32_t) (value << shift);
- }
-
- static constexpr uint8_t get (uint32_t word)
- {
- return (uint8_t) ((word >> shift) & 0xff);
- }
- };
-
-
-
- template <size_t Index>
- struct U16
- {
- static constexpr uint32_t shift = (uint32_t) 0x10 - Index * 16;
-
- static constexpr uint32_t set (uint32_t word, uint16_t value)
- {
- return (word & ~((uint32_t) 0xffff << shift)) | (uint32_t) (value << shift);
- }
-
- static constexpr uint16_t get (uint32_t word)
- {
- return (uint16_t) ((word >> shift) & 0xffff);
- }
- };
-
- static constexpr uint8_t getMessageType (uint32_t w) noexcept { return U4<0>::get (w); }
- static constexpr uint8_t getGroup (uint32_t w) noexcept { return U4<1>::get (w); }
- static constexpr uint8_t getStatus (uint32_t w) noexcept { return U4<2>::get (w); }
- static constexpr uint8_t getChannel (uint32_t w) noexcept { return U4<3>::get (w); }
- };
-
- }
- }
-
- #endif
|