| #pragma once |
| |
| /* A 64k timeslot on an E1 line can be subdevied into the following |
| * subslot combinations: |
| * |
| * subslot: offset: |
| * [ ][ ][ 16k ][8k_subslot] 0 |
| * [ ][ 32k ][_subslot__][8k_subslot] 1 |
| * [ ][ subslot ][ 16k ][8k_subslot] 2 |
| * [ 64k ][__________][_subslot__][8k_subslot] 3 |
| * [ timeslot ][ ][ 16k ][8k_subslot] 4 |
| * [ ][ 32K ][_subslot__][8k_subslot] 5 |
| * [ ][ subslot ][ 16k ][8k_subslot] 6 |
| * [ ][ ][ subslot ][8k_subslot] 7 |
| * |
| * Since overlapping assignment of subslots is not possible there is a limited |
| * set of subslot assignments possible. The e1_rates array lists the possible |
| * assignments as depicted above. Also each subslot assignment comes along with |
| * a bit offset in the E1 bitstream. The e1_offsets arrays lists the bit |
| * offsets. */ |
| static const uint8_t e1_rates[] = { 64, 32, 32, 16, 16, 16, 16, 8, 8, 8, 8, 8, 8, 8, 8 }; |
| static const uint8_t e1_offsets[] = { 0, 0, 4, 0, 2, 4, 6, 0, 1, 2, 3, 4, 5, 6, 7 }; |
| |
| int mgcp_e1_endp_equip(struct mgcp_endpoint *endp, uint8_t ts, uint8_t ss, uint8_t offs); |
| void mgcp_e1_endp_update(struct mgcp_endpoint *endp); |
| void mgcp_e1_endp_release(struct mgcp_endpoint *endp); |
| int mgcp_e1_send_rtp(struct mgcp_endpoint *endp, struct mgcp_rtp_codec *codec, struct msgb *msg); |