Prosody data communications Protocols: V.110 RLP rx

V.110 RLP is 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 receiver for V.110 RLP. Since it is only a receiver, it only uses the input half of a channel. Typically the output half is configured for V.110 RLP tx.

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 kSMDCProtocolV110RLPrx.

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 v110rlpr must have been downloaded.

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

smdc_line_control()

[note] not useful - receiver is always connected.

smdc_line_status()

[note] link_status is not useful since it is always connected.

The 'no carrier' status indicates that the receiver has not synchronised to the framing pattern.

smdc_tx_status()

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

smdc_tx_control()

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

smdc_rx_status()

overrun is not monitored

smdc_rx_control()

[note] 'stop' and 'resume' commands are not valid as there is no flow control.

smdc_rx_data()

Incoming frames are written to the receive buffer in 256-bit pieces like this:

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
D223 D222 D221 D220 D219 D218 D217 D216
D231 D230 D229 D228 D227 D226 D225 D224
D239 D238 D237 D236 D235 D234 D233 D232
0 0 0 0 DTX DTX DTX DTX
C 0 0 0 0 0 0 0

The bits D216 to D239 are the CRC value.

The bit 'C' is set when the CRC is incorrect.

The bits 'DTX' are the DTX bits (arrived in order bit3, bit2, bit1, bit0).

The data bits come from a received 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 D216 D217 D218
1 D219 D220 D221 D222 D223 D224 D225
1 D226 D227 D228 D229 D230 D231 D232
1 D233 D234 D235 D236 D237 D238 D239

While each call to smdc_rx_data() must deliver a multiple of 32 bits, a single call may be requested to read several frames, or read part of one or two frames. If the application does not collect the data quickly enough, and data is lost, an integral number of frames is lost. (This is implemented by declaring an overrun at the start of a frame if there is insufficient space to receive the whole frame).

smdc_tx_data()

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