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.
This should be read in conjunction with the generic data communications documentation.
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.
[note] not useful - receiver is always connected.
[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.
This function is not applicable since it only applies to the output half of a channel.
This function is not applicable since it only applies to the output half of a channel.
overrun is not monitored
[note] 'stop' and 'resume' commands are not valid as there is no flow control.
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).
This function is not applicable since it only applies to the output half of a channel.