| 56 | }; |
---|
| 57 | |
---|
| 58 | // Ports declarations |
---|
| 59 | const PortEntry Ports_828MKII[] = |
---|
| 60 | { |
---|
| 61 | {"Main-L", MOTUFW_DIR_OUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 40}, |
---|
| 62 | {"Main-R", MOTUFW_DIR_OUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 43}, |
---|
| 63 | {"Mix-L", MOTUFW_DIR_IN, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 10}, |
---|
| 64 | {"Mix-R", MOTUFW_DIR_IN, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 13}, |
---|
| 65 | {"Analog1", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 16}, |
---|
| 66 | {"Analog2", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 19}, |
---|
| 67 | {"Analog3", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 22}, |
---|
| 68 | {"Analog4", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 25}, |
---|
| 69 | {"Analog5", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 28}, |
---|
| 70 | {"Analog6", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 31}, |
---|
| 71 | {"Analog7", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 34}, |
---|
| 72 | {"Analog8", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 37}, |
---|
| 73 | {"Phones-L", MOTUFW_DIR_OUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 10}, |
---|
| 74 | {"Phones-R", MOTUFW_DIR_OUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 13}, |
---|
| 75 | {"Mic1", MOTUFW_DIR_IN, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 40}, |
---|
| 76 | {"Mic2", MOTUFW_DIR_IN, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 43}, |
---|
| 77 | {"SPDIF1", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 46}, |
---|
| 78 | {"SPDIF2", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 49}, |
---|
| 79 | {"ADAT1", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ADAT, 52}, |
---|
| 80 | {"ADAT2", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ADAT, 55}, |
---|
| 81 | {"ADAT3", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ADAT, 58}, |
---|
| 82 | {"ADAT4", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ADAT, 61}, |
---|
| 83 | {"ADAT5", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_1x|MOTUFW_PA_OPTICAL_ADAT, 63}, |
---|
| 84 | {"ADAT6", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_1x|MOTUFW_PA_OPTICAL_ADAT, 66}, |
---|
| 85 | {"ADAT7", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_1x|MOTUFW_PA_OPTICAL_ADAT, 69}, |
---|
| 86 | {"ADAT8", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_1x|MOTUFW_PA_OPTICAL_ADAT, 72}, |
---|
| 87 | }; |
---|
| 88 | |
---|
| 89 | const PortEntry Ports_TRAVELER[] = |
---|
| 90 | { |
---|
| 91 | {"Mix-L", MOTUFW_DIR_IN, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 10}, |
---|
| 92 | {"Mix-R", MOTUFW_DIR_IN, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 13}, |
---|
| 93 | {"Phones-L", MOTUFW_DIR_OUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 10}, |
---|
| 94 | {"Phones-R", MOTUFW_DIR_OUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 13}, |
---|
| 95 | {"Analog1", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 16}, |
---|
| 96 | {"Analog2", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 19}, |
---|
| 97 | {"Analog3", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 22}, |
---|
| 98 | {"Analog4", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 25}, |
---|
| 99 | {"Analog5", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 28}, |
---|
| 100 | {"Analog6", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 31}, |
---|
| 101 | {"Analog7", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 34}, |
---|
| 102 | {"Analog8", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_ANY|MOTUFW_PA_OPTICAL_ANY, 37}, |
---|
| 103 | {"AES/EBU-L", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_1x|MOTUFW_PA_RATE_2x|MOTUFW_PA_OPTICAL_ANY, 40}, |
---|
| 104 | {"AES/EBU-R", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_1x|MOTUFW_PA_RATE_2x|MOTUFW_PA_OPTICAL_ANY, 43}, |
---|
| 105 | {"SPDIF1", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_1x|MOTUFW_PA_RATE_2x|MOTUFW_PA_OPTICAL_ANY, 46}, |
---|
| 106 | {"SPDIF2", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_1x|MOTUFW_PA_RATE_2x|MOTUFW_PA_OPTICAL_ANY, 49}, |
---|
| 107 | {"ADAT1", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_2x|MOTUFW_PA_OPTICAL_ADAT, 52}, |
---|
| 108 | {"ADAT2", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_2x|MOTUFW_PA_OPTICAL_ADAT, 55}, |
---|
| 109 | {"ADAT3", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_2x|MOTUFW_PA_OPTICAL_ADAT, 58}, |
---|
| 110 | {"ADAT4", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_2x|MOTUFW_PA_OPTICAL_ADAT, 61}, |
---|
| 111 | {"ADAT5", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_1x|MOTUFW_PA_OPTICAL_ADAT, 63}, |
---|
| 112 | {"ADAT6", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_1x|MOTUFW_PA_OPTICAL_ADAT, 66}, |
---|
| 113 | {"ADAT7", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_1x|MOTUFW_PA_OPTICAL_ADAT, 69}, |
---|
| 114 | {"ADAT8", MOTUFW_DIR_INOUT, MOTUFW_PA_RATE_1x|MOTUFW_PA_OPTICAL_ADAT, 72}, |
---|
| 115 | }; |
---|
| 116 | |
---|
| 117 | const DevicePortsEntry DevicesPorts[] = { |
---|
| 118 | { Ports_828MKII, sizeof( Ports_828MKII ) }, |
---|
| 119 | { Ports_TRAVELER, sizeof( Ports_TRAVELER ) }, |
---|
700 | | signed int optical_mode = getOpticalMode(dir); |
---|
701 | | signed int size = 4+6+8*3; |
---|
702 | | |
---|
703 | | // 2 channels of AES/EBU is present if a 1x or 2x sample rate is in |
---|
704 | | // use |
---|
705 | | if (sample_rate <= 96000) |
---|
706 | | size += 2*3; |
---|
707 | | |
---|
708 | | // 2 channels of (coax) SPDIF is present for 1x or 2x sample rates so |
---|
709 | | // long as the optical mode is not TOSLINK. If the optical mode is |
---|
710 | | // TOSLINK the coax SPDIF channels are replaced by optical TOSLINK |
---|
711 | | // channels. Thus between these options we always have an addition |
---|
712 | | // 2 channels here for 1x or 2x sample rates regardless of the optical |
---|
713 | | // mode. |
---|
714 | | if (sample_rate <= 96000) |
---|
715 | | size += 2*3; |
---|
716 | | |
---|
717 | | // ADAT channels 1-4 are present for 1x or 2x sample rates so long |
---|
718 | | // as the optical mode is ADAT. |
---|
719 | | if (sample_rate<=96000 && optical_mode==MOTUFW_OPTICAL_MODE_ADAT) |
---|
720 | | size += 4*3; |
---|
721 | | |
---|
722 | | // ADAT channels 5-8 are present for 1x sample rates so long as the |
---|
723 | | // optical mode is ADAT. |
---|
724 | | if (sample_rate<=48000 && optical_mode==MOTUFW_OPTICAL_MODE_ADAT) |
---|
725 | | size += 4*3; |
---|
726 | | |
---|
727 | | // When 1x or 2x sample rate is active there are an additional |
---|
728 | | // 2 channels sent in an event. For capture it is a Mix1 return, |
---|
729 | | // while for playback it is a separate headphone mix. |
---|
730 | | if (sample_rate<=96000) |
---|
731 | | size += 2*3; |
---|
732 | | |
---|
733 | | // Finally round size up to the next quadlet boundary |
---|
734 | | return ((size+3)/4)*4; |
---|
| 764 | signed int optical_mode = getOpticalMode(direction); |
---|
| 765 | signed int size = 4+6; |
---|
| 766 | |
---|
| 767 | unsigned int i; |
---|
| 768 | unsigned int dir = direction==Streaming::Port::E_Capture?MOTUFW_DIR_IN:MOTUFW_DIR_OUT; |
---|
| 769 | unsigned int flags = (1 << ( optical_mode + 4 )); |
---|
| 770 | |
---|
| 771 | if ( sample_rate > 96000 ) |
---|
| 772 | flags |= MOTUFW_PA_RATE_4x; |
---|
| 773 | else if ( sample_rate > 48000 ) |
---|
| 774 | flags |= MOTUFW_PA_RATE_2x; |
---|
| 775 | else |
---|
| 776 | flags |= MOTUFW_PA_RATE_1x; |
---|
| 777 | |
---|
| 778 | for (i=0; i < ( DevicesPorts[m_motu_model].PortsListLength /sizeof( PortEntry ) ); i++) { |
---|
| 779 | if (( DevicesPorts[m_motu_model].PortsList[i].port_dir & dir ) && |
---|
| 780 | ( DevicesPorts[m_motu_model].PortsList[i].port_flags & MOTUFW_PA_RATE_MASK & flags ) && |
---|
| 781 | ( DevicesPorts[m_motu_model].PortsList[i].port_flags & MOTUFW_PA_OPTICAL_MASK & flags )) { |
---|
| 782 | size += 3; |
---|
| 783 | } |
---|
| 784 | } |
---|
| 785 | |
---|
| 786 | // Finally round size up to the next quadlet boundary |
---|
| 787 | return ((size+3)/4)*4; |
---|
809 | | |
---|
810 | | // Unconditionally add the 8 analog capture ports since they are |
---|
811 | | // always present no matter what the device configuration is. |
---|
812 | | for (i=0; i<8; i++, ofs+=3) { |
---|
813 | | asprintf(&buff,"%s_%s_Analog%d", id.c_str(), mode_str, i+1); |
---|
814 | | if (!addPort(s_processor, buff, direction, ofs, 0)) |
---|
815 | | return false; |
---|
816 | | } |
---|
817 | | |
---|
818 | | // AES/EBU ports are present for 1x and 2x sampling rates on the |
---|
819 | | // Traveler. On earlier interfaces (for example, 828 MkII) this |
---|
820 | | // space was taken up with a separate "main out" send. |
---|
821 | | // FIXME: what is in this position of incoming data on an 828 MkII? |
---|
822 | | if (sample_rate <= 96000) { |
---|
823 | | for (i=0; i<2; i++, ofs+=3) { |
---|
824 | | if (m_motu_model == MOTUFW_MODEL_TRAVELER) { |
---|
825 | | asprintf(&buff,"%s_%s_AES/EBU%d", id.c_str(), mode_str, i+1); |
---|
826 | | } else { |
---|
827 | | if (direction == Streaming::Port::E_Capture) |
---|
828 | | asprintf(&buff,"%s_%s_Mic%d", id.c_str(), mode_str, i+1); |
---|
829 | | else |
---|
830 | | asprintf(&buff,"%s_%s_MainOut-%c", id.c_str(), mode_str, i==0?'L':'R'); |
---|
831 | | } |
---|
832 | | if (!addPort(s_processor, buff, direction, ofs, 0)) |
---|
833 | | return false; |
---|
834 | | } |
---|
835 | | } |
---|
836 | | |
---|
837 | | // SPDIF ports are present for 1x and 2x sampling rates so long |
---|
838 | | // as the optical mode is not TOSLINK. |
---|
839 | | if (sample_rate<=96000 && optical_mode!=MOTUFW_OPTICAL_MODE_TOSLINK) { |
---|
840 | | for (i=0; i<2; i++, ofs+=3) { |
---|
841 | | asprintf(&buff,"%s_%s_SPDIF%d", id.c_str(), mode_str, i+1); |
---|
842 | | if (!addPort(s_processor, buff, direction, ofs, 0)) |
---|
843 | | return false; |
---|
844 | | } |
---|
845 | | } |
---|
846 | | |
---|
847 | | // TOSLINK ports are present for 1x and 2x sampling rates so long |
---|
848 | | // as the optical mode is set to TOSLINK. |
---|
849 | | if (sample_rate<=96000 && optical_mode==MOTUFW_OPTICAL_MODE_TOSLINK) { |
---|
850 | | for (i=0; i<2; i++, ofs+=3) { |
---|
851 | | asprintf(&buff,"%s_%s_TOSLINK%d", id.c_str(), mode_str, i+1); |
---|
852 | | if (!addPort(s_processor, buff, direction, ofs, 0)) |
---|
853 | | return false; |
---|
854 | | } |
---|
855 | | } |
---|
856 | | |
---|
857 | | // ADAT ports 1-4 are present for 1x and 2x sampling rates so long |
---|
858 | | // as the optical mode is set to ADAT. |
---|
859 | | if (sample_rate<=96000 && optical_mode==MOTUFW_OPTICAL_MODE_ADAT) { |
---|
860 | | for (i=0; i<4; i++, ofs+=3) { |
---|
861 | | asprintf(&buff,"%s_%s_ADAT%d", id.c_str(), mode_str, i+1); |
---|
862 | | if (!addPort(s_processor, buff, direction, ofs, 0)) |
---|
863 | | return false; |
---|
864 | | } |
---|
865 | | } |
---|
866 | | |
---|
867 | | // ADAT ports 5-8 are present for 1x sampling rates so long as the |
---|
868 | | // optical mode is set to ADAT. |
---|
869 | | if (sample_rate<=48000 && optical_mode==MOTUFW_OPTICAL_MODE_ADAT) { |
---|
870 | | for (i=4; i<8; i++, ofs+=3) { |
---|
871 | | asprintf(&buff,"%s_%s_ADAT%d", id.c_str(), mode_str, i+1); |
---|
872 | | if (!addPort(s_processor, buff, direction, ofs, 0)) |
---|
873 | | return false; |
---|
874 | | } |
---|
875 | | } |
---|
876 | | |
---|
| 868 | |
---|