Prosody data communications Protocols: V.110 RLP tx

V.110 RLP is a related to the ITU-T V.110 standard. It is the Radio Link Protocol which allows V.110 to interwork with devices like mobile phones which use a radio interface.

This protocol implements the transmitter for V.110 RLP. Since it is only a transmitter, it only uses the output half of a channel. Typically the input half is configured for V.110 RLP rx.

API function behaviour

This should be read in conjunction with the generic data communications documentation.

smdc_channel_config()

You must use #include "smdc_rlp.h" to get the appropriate declarations.

The protocol value is kSMDCProtocolV110RLPtx.

The config_data pointer must point to one of these structs:

	typedef struct smdc_v110rlp_config_parms {
		unsigned long speed;
	} SMDC_V110RLP_CONFIG_PARMS;

Where 'speed' is the speed in bits per second (6000, 12000, 24000, or 48000).

The firmware module v110rlpt must have been downloaded.

This protocol does not use encodings, so the 'encoding' field must be set to the value kSMDCConfigEncodingNone.

smdc_line_control()

The 'DTX' bit is controlled by the RTS commands. [note] Other commands are invalid because RLP does not use an initial handshake.

The kSMDCLineCtlCmdSetPrefixSuffix command is not supported by this protocol.

smdc_line_status()

smdc_tx_status()

The transmitter never reports 'empty'.

[note] 'flow' is not useful since there is no flow control mechanism.

smdc_tx_control()

The only notification implemented is NotifyOnCapacity.

When setting the capacity, it is necessary to specify a value one greater than the value required. i.e. to get notified when space is available for at least 32 bytes, set the capacity to 33 or greater.

smdc_rx_status()

This function is not applicable since it only applies to the input half of a channel.

smdc_rx_control()

This function is not applicable since it only applies to the input half of a channel.

smdc_rx_data()

This function is not applicable since it only applies to the input half of a channel.

smdc_tx_data()

The length of data supplied in each call should be a multiple of 32 bits. The data is interpreted in 256-bit pieces, but it is not necessary to call smdc_tx_data() with a whole piece, nor to ensure that each call describes only one piece. i.e. the calls can pass any convenient amount of data (up to the maximum transfer size allowed). Each piece is interpreted as follows (least significant bit on the right):

MSB LSB
D7 D6 D5 D4 D3 D2 D1 D0
D15 D14 D13 D12 D11 D10 D9 D8
D23 D22 D21 D20 D19 D18 D17 D16
D31 D30 D29 D28 D27 D26 D25 D24
D39 D38 D37 D36 D35 D34 D33 D32
D47 D46 D45 D44 D43 D42 D41 D40
D55 D54 D53 D52 D51 D50 D49 D48
D63 D62 D61 D60 D59 D58 D57 D56
D71 D70 D69 D68 D67 D66 D65 D64
D79 D78 D77 D76 D75 D74 D73 D72
D87 D86 D85 D84 D83 D82 D81 D80
D95 D94 D93 D92 D91 D90 D89 D88
D103 D102 D101 D100 D99 D98 D97 D96
D111 D110 D109 D108 D107 D106 D105 D104
D119 D118 D117 D116 D115 D114 D113 D112
D127 D126 D125 D124 D123 D122 D121 D120
D135 D134 D133 D132 D131 D130 D129 D128
D143 D142 D141 D140 D139 D138 D137 D136
D151 D150 D149 D148 D147 D146 D145 D144
D159 D158 D157 D156 D155 D154 D153 D152
D167 D166 D165 D164 D163 D162 D161 D160
D175 D174 D173 D172 D171 D170 D169 D168
D183 D182 D181 D180 D179 D178 D177 D176
D191 D190 D189 D188 D187 D186 D185 D184
D199 D198 D197 D196 D195 D194 D193 D192
D207 D206 D205 D204 D203 D202 D201 D200
D215 D214 D213 D212 D211 D210 D209 D208
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

The D bits are sent in the frame like this (left to right):

FIRST LAST
0 0 0 0 0 0 0 0
1 D0 D1 D2 D3 D4 D5 D6
1 D7 D8 D9 D10 D11 D12 D13
1 D14 D15 D16 D17 D18 D19 D20
1 D21 D22 D23 D24 D25 D26 D27
1 DTX 0 0 D28 D29 D30 D31
1 D32 D33 D34 D35 D36 D37 D38
1 D39 D40 D41 D42 D43 D44 D45
1 D46 D47 D48 D49 D50 D51 D52
1 D53 D54 D55 D56 D57 D58 D59
0 0 0 0 0 0 0 0
1 D60 D61 D62 D63 D64 D65 D66
1 D67 D68 D69 D70 D71 D72 D73
1 D74 D75 D76 D77 D78 D79 D80
1 D81 D82 D83 D84 D85 D86 D87
1 DTX 0 1 D88 D89 D90 D91
1 D92 D93 D94 D95 D96 D97 D98
1 D99 D100 D101 D102 D103 D104 D105
1 D106 D107 D108 D109 D110 D111 D112
1 D113 D114 D115 D116 D117 D118 D119
0 0 0 0 0 0 0 0
1 D120 D121 D122 D123 D124 D125 D126
1 D127 D128 D129 D130 D131 D132 D133
1 D134 D135 D136 D137 D138 D139 D140
1 D141 D142 D143 D144 D145 D146 D147
1 DTX 1 0 D148 D149 D150 D151
1 D152 D153 D154 D155 D156 D157 D158
1 D159 D160 D161 D162 D163 D164 D165
1 D166 D167 D168 D169 D170 D171 D172
1 D173 D174 D175 D176 D177 D178 D179
0 0 0 0 0 0 0 0
1 D180 D181 D182 D183 D184 D185 D186
1 D187 D188 D189 D190 D191 D192 D193
1 D194 D195 D196 D197 D198 D199 D200
1 D201 D202 D203 D204 D205 D206 D207
1 DTX 1 1 D208 D209 D210 D211
1 D212 D213 D214 D215 C C C
1 C C C C C C C
1 C C C C C C C
1 C C C C C C C

The bit positions marked 'DTX' are filled from the value of the DTX setting.

The bit positions marked 'C' are filled in with the CRC, which is calculated automatically.

The bit positions marked '0' or '1' are fixed framing bits.

If the transmitter experiences underrun, it repeats the previous frame (or sends an all-zero frame (GSM 04.21 sec 7) if there was no previous frame because this is the first frame).