| 1 | function [rxData_out rxOTR_out rxRSSI_out] = warplab_readSMRO(udpSock, radio, numSamples) |
|---|
| 2 | |
|---|
| 3 | warplab_siso_defines |
|---|
| 4 | |
|---|
| 5 | pktNoTx = 1; |
|---|
| 6 | |
|---|
| 7 | rxCmd = eval(sprintf('RADIO%d_RXDATA', radio)); |
|---|
| 8 | rssiCmd = eval(sprintf('RADIO%d_RSSIDATA', radio)); |
|---|
| 9 | |
|---|
| 10 | |
|---|
| 11 | rxData = []; |
|---|
| 12 | for n = 0:256:numSamples-1 |
|---|
| 13 | pktDataTx = [pktNoTx rxCmd n]; |
|---|
| 14 | datarec = warplab_pktSend(udpSock, pktDataTx); |
|---|
| 15 | pktNoTx = pktNoTx+1; |
|---|
| 16 | |
|---|
| 17 | rxData = [rxData uint32(datarec(5:end))]; |
|---|
| 18 | end |
|---|
| 19 | |
|---|
| 20 | |
|---|
| 21 | rssiData = []; |
|---|
| 22 | for n = 0:256:(numSamples/8)-1 |
|---|
| 23 | pktDataTx = [pktNoTx rssiCmd n]; |
|---|
| 24 | datarec = warplab_pktSend(udpSock, pktDataTx); |
|---|
| 25 | pktNoTx = pktNoTx+1; |
|---|
| 26 | |
|---|
| 27 | rssiData = [rssiData uint32(datarec(5:end))]; |
|---|
| 28 | end |
|---|
| 29 | |
|---|
| 30 | |
|---|
| 31 | |
|---|
| 32 | |
|---|
| 33 | |
|---|
| 34 | |
|---|
| 35 | |
|---|
| 36 | |
|---|
| 37 | rxData_I = uint16(bitshift(rxData, -16)); |
|---|
| 38 | rxData_Q = uint16(bitand(rxData, hex2dec('0000FFFF'))); |
|---|
| 39 | |
|---|
| 40 | rxOTR_I = bitshift(rxData_I, -15); |
|---|
| 41 | rxOTR_Q = bitshift(rxData_Q, -15); |
|---|
| 42 | |
|---|
| 43 | rxData_I = uint16(bitand(rxData_I, hex2dec('3FFF'))); |
|---|
| 44 | rxData_Isigns = uint16(bitshift(bitand(rxData_I, hex2dec('2000')), -13)); |
|---|
| 45 | rxData_I = double(typecast(bitor(rxData_I, rxData_Isigns*hex2dec('C000')),'int16'))./2^13; |
|---|
| 46 | |
|---|
| 47 | rxData_Q = uint16(bitand(rxData_Q, hex2dec('3FFF'))); |
|---|
| 48 | rxData_Qsigns = uint16(bitshift(bitand(rxData_Q, hex2dec('2000')), -13)); |
|---|
| 49 | rxData_Q = double(typecast(bitor(rxData_Q, rxData_Qsigns*hex2dec('C000')),'int16'))./2^13; |
|---|
| 50 | |
|---|
| 51 | |
|---|
| 52 | |
|---|
| 53 | |
|---|
| 54 | |
|---|
| 55 | rssi = [mod(rssiData, 1024);mod(bitshift(rssiData,-16),1024)]; |
|---|
| 56 | |
|---|
| 57 | rxData_out = complex(rxData_I, rxData_Q); |
|---|
| 58 | rxOTR_out = complex(rxOTR_I, rxOTR_Q); |
|---|
| 59 | rxRSSI_out = reshape(rssi, 1, length(rssiData)*2); |
|---|