diff --git a/targets/ARCH/USRP/USERSPACE/LIB/Makefile.inc b/targets/ARCH/USRP/USERSPACE/LIB/Makefile.inc deleted file mode 100644 index eeb24e7d73..0000000000 --- a/targets/ARCH/USRP/USERSPACE/LIB/Makefile.inc +++ /dev/null @@ -1,21 +0,0 @@ -# compiles the openair_usrp - -#OPENAIRTARGETS_DIR ?=../../../.. - -#OPENAIROBJS += $(OPENAIRTARGETS_DIR)/ARCH/USRP/USERSPACE/LIB/openair0_lib.o -#CFLAGS += -I$(OPENAIRTARGETS_DIR)/ARCH/USRP/USERSPACE/LIB -I$(OPENAIRTARGETS_DIR)/ARCH/USRP/DEFS - - -#example: example.o $(OPENAIROBJS) -# gcc -o $@ $(CFLAGS) -lm $(OPENAIROBJS) $< - -#openair_usrp.o: -# $(CXX) -c openair_usrp.cpp -o openair_usrp.o - -#clean: -# rm -f *.o *~ -#a rm -f example -USRP_OBJ += $(OPENAIR_TARGETS)/ARCH/USRP/USERSPACE/LIB/openair_usrp.o -USRP_FILE_OBJ += $(OPENAIR_TARGETS)/ARCH/USRP/USERSPACE/LIB/openair_usrp.cpp -USRP_CFLAGS += -I$(OPENAIR_TARGETS)/ARCH/USRP/USERSPACE/LIB/ - diff --git a/targets/ARCH/USRP/USERSPACE/LIB/Makefile_tmp.inc b/targets/ARCH/USRP/USERSPACE/LIB/Makefile_tmp.inc deleted file mode 100644 index c9b1087da1..0000000000 --- a/targets/ARCH/USRP/USERSPACE/LIB/Makefile_tmp.inc +++ /dev/null @@ -1,23 +0,0 @@ -# compiles the openair_usrp - -#OPENAIRTARGETS_DIR ?=../../../.. - -#OPENAIROBJS += $(OPENAIRTARGETS_DIR)/ARCH/USRP/USERSPACE/LIB/openair0_lib.o -#CFLAGS += -I$(OPENAIRTARGETS_DIR)/ARCH/USRP/USERSPACE/LIB -I$(OPENAIRTARGETS_DIR)/ARCH/USRP/DEFS - - -#example: example.o $(OPENAIROBJS) -# gcc -o $@ $(CFLAGS) -lm $(OPENAIROBJS) $< - -#openair_usrp.o: -# $(CXX) -c openair_usrp.cpp -o openair_usrp.o - -#clean: -# rm -f *.o *~ -#a rm -f example - -USRP_OBJ += $(OPENAIR_TARGETS)/ARCH/USRP/USERSPACE/LIB/openair_usrp.o -PPS_OBJ += $(OPENAIR_TARGETS)/ARCH/USRP/USERSPACE/LIB/polyphaseResample.o -USRP_FILE_OBJ += $(OPENAIR_TARGETS)/ARCH/USRP/USERSPACE/LIB/openair_usrp.cpp -PPS_FILE_OBJ += $(OPENAIR_TARGETS)/ARCH/USRP/USERSPACE/LIB/polyphaseResample.cpp -USRP_CFLAGS += -I$(OPENAIR_TARGETS)/ARCH/USRP/USERSPACE/LIB/ diff --git a/targets/ARCH/USRP/USERSPACE/LIB/README.txt b/targets/ARCH/USRP/USERSPACE/LIB/README.txt deleted file mode 100644 index 9e078df79d..0000000000 --- a/targets/ARCH/USRP/USERSPACE/LIB/README.txt +++ /dev/null @@ -1,28 +0,0 @@ -Now we are using USRP N200/210 and working with OAI v4164. - -** Get source code of UHD -git clone git://github.com/EttusResearch/uhd.git - -** Install prerequisites -sudo apt-get install libboost-all-dev libusb-1.0-0-dev python-cheetah doxygen python-docutils - -** Install UHD -cd /host -mkdir build -cd build -cmake ../ -make -make test -sudo make install -sudo ldconfig - -** Check the speed of USRP -The results should have almost no overflows and underflows, otherwise the OAI cannot work in realtime. -./benchmark_rate --tx_rate 6.25e6 --rx_rate 6.25e6 --duration 30 - -** Build lte-softmodem-usrp -cd targets/RTAI/USER -./make_for_usrp.sh - -** Run lte-softmodem-usrp -./lte-softmodem-usrp diff --git a/targets/ARCH/USRP/USERSPACE/LIB/coeff_25_to_3072.h b/targets/ARCH/USRP/USERSPACE/LIB/coeff_25_to_3072.h deleted file mode 100644 index 5310ea5599..0000000000 --- a/targets/ARCH/USRP/USERSPACE/LIB/coeff_25_to_3072.h +++ /dev/null @@ -1 +0,0 @@ -short coeff_25_to_3072[] = {26,25,25,25,25,25,25,25,25,25,25,24,24,24,24,24,24,24,24,24,23,23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,22,21,21,21,21,21,21,21,21,20,20,20,20,20,20,20,19,19,19,19,19,19,19,18,18,18,18,18,18,17,17,17,17,17,17,17,16,16,16,16,16,16,15,15,15,15,15,15,14,14,14,14,14,13,13,13,13,13,13,12,12,12,12,12,11,11,11,11,11,11,10,10,10,10,10,9,9,9,9,9,8,8,8,8,8,7,7,7,7,6,6,6,6,6,5,5,5,5,5,4,4,4,4,3,3,3,3,3,2,2,2,2,1,1,1,1,0,0,0,0,-0,-0,-0,-0,-0,-1,-1,-1,-1,-2,-2,-2,-2,-3,-3,-3,-3,-4,-4,-4,-4,-5,-5,-5,-5,-6,-6,-6,-7,-7,-7,-7,-8,-8,-8,-8,-9,-9,-9,-9,-10,-10,-10,-11,-11,-11,-11,-12,-12,-12,-12,-13,-13,-13,-14,-14,-14,-14,-15,-15,-15,-16,-16,-16,-16,-17,-17,-17,-18,-18,-18,-18,-19,-19,-19,-20,-20,-20,-20,-21,-21,-21,-22,-22,-22,-23,-23,-23,-23,-24,-24,-24,-25,-25,-25,-26,-26,-26,-27,-27,-27,-27,-28,-28,-28,-29,-29,-29,-30,-30,-30,-31,-31,-31,-32,-32,-32,-32,-33,-33,-33,-34,-34,-34,-35,-35,-35,-36,-36,-36,-37,-37,-37,-38,-38,-38,-39,-39,-39,-40,-40,-40,-41,-41,-41,-41,-42,-42,-42,-43,-43,-43,-44,-44,-44,-45,-45,-45,-46,-46,-46,-47,-47,-47,-48,-48,-48,-49,-49,-49,-50,-50,-50,-51,-51,-51,-52,-52,-52,-53,-53,-53,-54,-54,-54,-55,-55,-55,-56,-56,-56,-57,-57,-57,-58,-58,-58,-59,-59,-59,-60,-60,-60,-61,-61,-61,-62,-62,-62,-63,-63,-63,-64,-64,-64,-65,-65,-65,-66,-66,-66,-67,-67,-67,-68,-68,-68,-69,-69,-69,-70,-70,-70,-71,-71,-71,-72,-72,-72,-73,-73,-73,-74,-74,-74,-74,-75,-75,-75,-76,-76,-76,-77,-77,-77,-78,-78,-78,-79,-79,-79,-80,-80,-80,-81,-81,-81,-81,-82,-82,-82,-83,-83,-83,-84,-84,-84,-85,-85,-85,-86,-86,-86,-86,-87,-87,-87,-88,-88,-88,-89,-89,-89,-89,-90,-90,-90,-91,-91,-91,-91,-92,-92,-92,-93,-93,-93,-93,-94,-94,-94,-95,-95,-95,-95,-96,-96,-96,-97,-97,-97,-97,-98,-98,-98,-98,-99,-99,-99,-100,-100,-100,-100,-101,-101,-101,-101,-102,-102,-102,-102,-103,-103,-103,-103,-104,-104,-104,-104,-105,-105,-105,-105,-106,-106,-106,-106,-106,-107,-107,-107,-107,-108,-108,-108,-108,-109,-109,-109,-109,-109,-110,-110,-110,-110,-110,-111,-111,-111,-111,-111,-112,-112,-112,-112,-112,-113,-113,-113,-113,-113,-114,-114,-114,-114,-114,-115,-115,-115,-115,-115,-115,-116,-116,-116,-116,-116,-116,-117,-117,-117,-117,-117,-117,-117,-118,-118,-118,-118,-118,-118,-118,-119,-119,-119,-119,-119,-119,-119,-120,-120,-120,-120,-120,-120,-120,-120,-120,-121,-121,-121,-121,-121,-121,-121,-121,-121,-121,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-121,-121,-121,-121,-121,-121,-121,-121,-121,-120,-120,-120,-120,-120,-120,-120,-120,-119,-119,-119,-119,-119,-119,-119,-118,-118,-118,-118,-118,-118,-117,-117,-117,-117,-117,-117,-116,-116,-116,-116,-116,-115,-115,-115,-115,-115,-114,-114,-114,-114,-114,-113,-113,-113,-113,-112,-112,-112,-112,-111,-111,-111,-111,-110,-110,-110,-110,-109,-109,-109,-109,-108,-108,-108,-107,-107,-107,-107,-106,-106,-106,-105,-105,-105,-105,-104,-104,-104,-103,-103,-103,-102,-102,-102,-101,-101,-101,-100,-100,-100,-99,-99,-99,-98,-98,-97,-97,-97,-96,-96,-96,-95,-95,-94,-94,-94,-93,-93,-92,-92,-92,-91,-91,-90,-90,-90,-89,-89,-88,-88,-87,-87,-87,-86,-86,-85,-85,-84,-84,-83,-83,-83,-82,-82,-81,-81,-80,-80,-79,-79,-78,-78,-77,-77,-76,-76,-75,-75,-74,-74,-73,-73,-72,-72,-71,-71,-70,-70,-69,-69,-68,-68,-67,-67,-66,-65,-65,-64,-64,-63,-63,-62,-62,-61,-60,-60,-59,-59,-58,-58,-57,-56,-56,-55,-55,-54,-53,-53,-52,-52,-51,-50,-50,-49,-49,-48,-47,-47,-46,-45,-45,-44,-44,-43,-42,-42,-41,-40,-40,-39,-38,-38,-37,-36,-36,-35,-34,-34,-33,-32,-32,-31,-30,-30,-29,-28,-28,-27,-26,-25,-25,-24,-23,-23,-22,-21,-21,-20,-19,-18,-18,-17,-16,-16,-15,-14,-13,-13,-12,-11,-10,-10,-9,-8,-7,-7,-6,-5,-4,-4,-3,-2,-1,-1,-0,0,1,2,2,3,4,5,5,6,7,8,9,9,10,11,12,13,13,14,15,16,17,17,18,19,20,21,21,22,23,24,25,26,26,27,28,29,30,30,31,32,33,34,35,36,36,37,38,39,40,41,41,42,43,44,45,46,47,47,48,49,50,51,52,53,53,54,55,56,57,58,59,60,60,61,62,63,64,65,66,67,68,68,69,70,71,72,73,74,75,76,76,77,78,79,80,81,82,83,84,85,85,86,87,88,89,90,91,92,93,94,94,95,96,97,98,99,100,101,102,103,104,105,105,106,107,108,109,110,111,112,113,114,115,115,116,117,118,119,120,121,122,123,124,125,126,126,127,128,129,130,131,132,133,134,135,136,137,137,138,139,140,141,142,143,144,145,146,147,148,148,149,150,151,152,153,154,155,156,157,158,158,159,160,161,162,163,164,165,166,167,167,168,169,170,171,172,173,174,175,176,176,177,178,179,180,181,182,183,184,184,185,186,187,188,189,190,191,191,192,193,194,195,196,197,197,198,199,200,201,202,203,203,204,205,206,207,208,209,209,210,211,212,213,214,214,215,216,217,218,219,219,220,221,222,223,223,224,225,226,227,228,228,229,230,231,231,232,233,234,235,235,236,237,238,239,239,240,241,242,242,243,244,245,245,246,247,248,248,249,250,251,251,252,253,253,254,255,256,256,257,258,258,259,260,261,261,262,263,263,264,265,265,266,267,267,268,269,269,270,271,271,272,273,273,274,275,275,276,276,277,278,278,279,279,280,281,281,282,282,283,284,284,285,285,286,286,287,288,288,289,289,290,290,291,291,292,292,293,294,294,295,295,296,296,297,297,298,298,299,299,299,300,300,301,301,302,302,303,303,304,304,304,305,305,306,306,306,307,307,308,308,308,309,309,310,310,310,311,311,311,312,312,312,313,313,313,314,314,314,315,315,315,316,316,316,316,317,317,317,317,318,318,318,318,319,319,319,319,320,320,320,320,320,321,321,321,321,321,321,322,322,322,322,322,322,322,323,323,323,323,323,323,323,323,323,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,323,323,323,323,323,323,323,323,323,322,322,322,322,322,322,321,321,321,321,321,321,320,320,320,320,319,319,319,319,319,318,318,318,317,317,317,317,316,316,316,315,315,315,314,314,314,313,313,313,312,312,312,311,311,310,310,310,309,309,308,308,307,307,307,306,306,305,305,304,304,303,303,302,302,301,301,300,300,299,299,298,297,297,296,296,295,295,294,293,293,292,292,291,290,290,289,288,288,287,286,286,285,284,284,283,282,282,281,280,279,279,278,277,276,276,275,274,273,273,272,271,270,269,269,268,267,266,265,264,264,263,262,261,260,259,258,257,257,256,255,254,253,252,251,250,249,248,247,246,245,244,243,242,241,240,239,238,237,236,235,234,233,232,231,230,229,228,227,226,225,224,222,221,220,219,218,217,216,215,213,212,211,210,209,208,206,205,204,203,202,200,199,198,197,195,194,193,192,190,189,188,187,185,184,183,182,180,179,178,176,175,174,172,171,170,168,167,166,164,163,161,160,159,157,156,154,153,152,150,149,147,146,144,143,142,140,139,137,136,134,133,131,130,128,127,125,124,122,121,119,118,116,115,113,111,110,108,107,105,104,102,100,99,97,96,94,92,91,89,88,86,84,83,81,79,78,76,74,73,71,69,68,66,64,63,61,59,58,56,54,52,51,49,47,46,44,42,40,39,37,35,33,31,30,28,26,24,23,21,19,17,15,14,12,10,8,6,4,3,1,-0,-2,-4,-6,-7,-9,-11,-13,-15,-17,-19,-20,-22,-24,-26,-28,-30,-32,-34,-36,-37,-39,-41,-43,-45,-47,-49,-51,-53,-55,-57,-59,-60,-62,-64,-66,-68,-70,-72,-74,-76,-78,-80,-82,-84,-86,-88,-90,-92,-94,-96,-98,-100,-102,-104,-106,-108,-110,-112,-114,-116,-118,-120,-122,-124,-126,-128,-130,-132,-134,-136,-138,-140,-142,-144,-146,-148,-150,-152,-154,-156,-158,-160,-162,-164,-166,-168,-171,-173,-175,-177,-179,-181,-183,-185,-187,-189,-191,-193,-195,-197,-199,-201,-203,-205,-207,-210,-212,-214,-216,-218,-220,-222,-224,-226,-228,-230,-232,-234,-236,-238,-241,-243,-245,-247,-249,-251,-253,-255,-257,-259,-261,-263,-265,-267,-269,-272,-274,-276,-278,-280,-282,-284,-286,-288,-290,-292,-294,-296,-298,-300,-302,-304,-306,-309,-311,-313,-315,-317,-319,-321,-323,-325,-327,-329,-331,-333,-335,-337,-339,-341,-343,-345,-347,-349,-351,-353,-355,-357,-359,-361,-363,-365,-367,-369,-371,-373,-375,-377,-379,-381,-383,-385,-387,-389,-391,-393,-395,-397,-399,-401,-403,-405,-407,-409,-411,-413,-414,-416,-418,-420,-422,-424,-426,-428,-430,-432,-434,-436,-437,-439,-441,-443,-445,-447,-449,-451,-453,-454,-456,-458,-460,-462,-464,-465,-467,-469,-471,-473,-475,-476,-478,-480,-482,-484,-485,-487,-489,-491,-493,-494,-496,-498,-500,-501,-503,-505,-507,-508,-510,-512,-513,-515,-517,-519,-520,-522,-524,-525,-527,-529,-530,-532,-534,-535,-537,-539,-540,-542,-543,-545,-547,-548,-550,-551,-553,-555,-556,-558,-559,-561,-562,-564,-565,-567,-568,-570,-571,-573,-574,-576,-577,-579,-580,-582,-583,-585,-586,-588,-589,-590,-592,-593,-595,-596,-597,-599,-600,-602,-603,-604,-606,-607,-608,-610,-611,-612,-614,-615,-616,-617,-619,-620,-621,-622,-624,-625,-626,-627,-628,-630,-631,-632,-633,-634,-636,-637,-638,-639,-640,-641,-642,-643,-644,-646,-647,-648,-649,-650,-651,-652,-653,-654,-655,-656,-657,-658,-659,-660,-661,-662,-663,-664,-664,-665,-666,-667,-668,-669,-670,-671,-671,-672,-673,-674,-675,-676,-676,-677,-678,-679,-679,-680,-681,-682,-682,-683,-684,-684,-685,-686,-686,-687,-688,-688,-689,-689,-690,-691,-691,-692,-692,-693,-693,-694,-694,-695,-695,-696,-696,-697,-697,-698,-698,-698,-699,-699,-700,-700,-700,-701,-701,-701,-702,-702,-702,-703,-703,-703,-703,-704,-704,-704,-704,-705,-705,-705,-705,-705,-705,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-705,-705,-705,-705,-705,-705,-704,-704,-704,-704,-703,-703,-703,-703,-702,-702,-702,-701,-701,-701,-700,-700,-699,-699,-699,-698,-698,-697,-697,-696,-696,-695,-695,-694,-694,-693,-693,-692,-691,-691,-690,-690,-689,-688,-688,-687,-686,-686,-685,-684,-683,-683,-682,-681,-680,-679,-679,-678,-677,-676,-675,-674,-674,-673,-672,-671,-670,-669,-668,-667,-666,-665,-664,-663,-662,-661,-660,-659,-658,-657,-656,-654,-653,-652,-651,-650,-649,-647,-646,-645,-644,-643,-641,-640,-639,-637,-636,-635,-633,-632,-631,-629,-628,-627,-625,-624,-622,-621,-619,-618,-616,-615,-613,-612,-610,-609,-607,-606,-604,-603,-601,-599,-598,-596,-594,-593,-591,-589,-588,-586,-584,-582,-581,-579,-577,-575,-573,-572,-570,-568,-566,-564,-562,-560,-559,-557,-555,-553,-551,-549,-547,-545,-543,-541,-539,-537,-535,-533,-531,-528,-526,-524,-522,-520,-518,-516,-514,-511,-509,-507,-505,-502,-500,-498,-496,-493,-491,-489,-486,-484,-482,-479,-477,-475,-472,-470,-468,-465,-463,-460,-458,-455,-453,-450,-448,-445,-443,-440,-438,-435,-432,-430,-427,-425,-422,-419,-417,-414,-411,-409,-406,-403,-401,-398,-395,-392,-390,-387,-384,-381,-379,-376,-373,-370,-367,-364,-362,-359,-356,-353,-350,-347,-344,-341,-338,-335,-332,-329,-326,-323,-320,-317,-314,-311,-308,-305,-302,-299,-296,-293,-290,-287,-283,-280,-277,-274,-271,-268,-264,-261,-258,-255,-251,-248,-245,-242,-238,-235,-232,-229,-225,-222,-219,-215,-212,-209,-205,-202,-198,-195,-192,-188,-185,-181,-178,-174,-171,-168,-164,-161,-157,-154,-150,-147,-143,-139,-136,-132,-129,-125,-122,-118,-115,-111,-107,-104,-100,-96,-93,-89,-86,-82,-78,-74,-71,-67,-63,-60,-56,-52,-49,-45,-41,-37,-34,-30,-26,-22,-18,-15,-11,-7,-3,0,3,7,11,15,19,23,27,30,34,38,42,46,50,54,58,62,66,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,169,174,178,182,186,190,194,198,202,206,210,214,218,223,227,231,235,239,243,247,251,256,260,264,268,272,276,280,285,289,293,297,301,305,310,314,318,322,326,330,335,339,343,347,351,356,360,364,368,372,377,381,385,389,393,398,402,406,410,414,419,423,427,431,435,440,444,448,452,456,461,465,469,473,478,482,486,490,494,499,503,507,511,515,520,524,528,532,536,541,545,549,553,557,562,566,570,574,578,582,587,591,595,599,603,608,612,616,620,624,628,632,637,641,645,649,653,657,661,666,670,674,678,682,686,690,694,698,703,707,711,715,719,723,727,731,735,739,743,747,751,755,759,763,767,771,775,779,783,787,791,795,799,803,807,811,815,819,823,827,831,835,839,843,846,850,854,858,862,866,870,874,877,881,885,889,893,896,900,904,908,912,915,919,923,927,930,934,938,941,945,949,952,956,960,963,967,971,974,978,982,985,989,992,996,999,1003,1007,1010,1014,1017,1021,1024,1028,1031,1034,1038,1041,1045,1048,1052,1055,1058,1062,1065,1068,1072,1075,1078,1082,1085,1088,1092,1095,1098,1101,1104,1108,1111,1114,1117,1120,1124,1127,1130,1133,1136,1139,1142,1145,1148,1151,1154,1157,1160,1163,1166,1169,1172,1175,1178,1181,1184,1187,1189,1192,1195,1198,1201,1204,1206,1209,1212,1215,1217,1220,1223,1225,1228,1231,1233,1236,1238,1241,1244,1246,1249,1251,1254,1256,1259,1261,1264,1266,1268,1271,1273,1275,1278,1280,1282,1285,1287,1289,1292,1294,1296,1298,1300,1302,1305,1307,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1338,1340,1342,1344,1346,1347,1349,1351,1352,1354,1356,1357,1359,1361,1362,1364,1365,1367,1368,1370,1371,1373,1374,1376,1377,1378,1380,1381,1382,1384,1385,1386,1388,1389,1390,1391,1392,1393,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1405,1406,1407,1408,1409,1410,1410,1411,1412,1413,1413,1414,1415,1415,1416,1416,1417,1417,1418,1418,1419,1419,1420,1420,1421,1421,1421,1422,1422,1422,1422,1423,1423,1423,1423,1423,1423,1424,1424,1424,1424,1424,1424,1424,1424,1423,1423,1423,1423,1423,1423,1422,1422,1422,1422,1421,1421,1421,1420,1420,1419,1419,1418,1418,1417,1417,1416,1416,1415,1414,1414,1413,1412,1412,1411,1410,1409,1408,1408,1407,1406,1405,1404,1403,1402,1401,1400,1399,1398,1397,1396,1394,1393,1392,1391,1389,1388,1387,1386,1384,1383,1381,1380,1378,1377,1375,1374,1372,1371,1369,1368,1366,1364,1363,1361,1359,1357,1356,1354,1352,1350,1348,1346,1344,1342,1340,1338,1336,1334,1332,1330,1328,1326,1323,1321,1319,1317,1314,1312,1310,1307,1305,1302,1300,1298,1295,1293,1290,1287,1285,1282,1280,1277,1274,1272,1269,1266,1263,1260,1258,1255,1252,1249,1246,1243,1240,1237,1234,1231,1228,1225,1222,1218,1215,1212,1209,1205,1202,1199,1196,1192,1189,1185,1182,1178,1175,1172,1168,1164,1161,1157,1154,1150,1146,1143,1139,1135,1131,1127,1124,1120,1116,1112,1108,1104,1100,1096,1092,1088,1084,1080,1076,1072,1067,1063,1059,1055,1051,1046,1042,1038,1033,1029,1024,1020,1015,1011,1007,1002,997,993,988,984,979,974,970,965,960,955,951,946,941,936,931,926,921,916,911,906,901,896,891,886,881,876,871,866,860,855,850,845,839,834,829,823,818,812,807,801,796,790,785,779,774,768,763,757,751,746,740,734,729,723,717,711,705,699,694,688,682,676,670,664,658,652,646,640,634,628,621,615,609,603,597,590,584,578,572,565,559,553,546,540,533,527,521,514,508,501,495,488,481,475,468,462,455,448,442,435,428,421,415,408,401,394,387,381,374,367,360,353,346,339,332,325,318,311,304,297,290,283,276,269,261,254,247,240,233,225,218,211,204,196,189,182,174,167,159,152,145,137,130,122,115,107,100,92,85,77,70,62,54,47,39,32,24,16,9,1,-6,-14,-21,-29,-37,-45,-52,-60,-68,-76,-84,-92,-99,-107,-115,-123,-131,-139,-147,-155,-163,-171,-179,-187,-195,-203,-211,-219,-227,-235,-243,-251,-259,-268,-276,-284,-292,-300,-308,-317,-325,-333,-341,-349,-358,-366,-374,-382,-391,-399,-407,-415,-424,-432,-440,-449,-457,-465,-474,-482,-490,-499,-507,-516,-524,-532,-541,-549,-558,-566,-575,-583,-591,-600,-608,-617,-625,-634,-642,-651,-659,-668,-676,-685,-693,-702,-710,-719,-727,-736,-744,-753,-762,-770,-779,-787,-796,-804,-813,-822,-830,-839,-847,-856,-864,-873,-882,-890,-899,-907,-916,-925,-933,-942,-950,-959,-968,-976,-985,-994,-1002,-1011,-1019,-1028,-1037,-1045,-1054,-1062,-1071,-1080,-1088,-1097,-1105,-1114,-1123,-1131,-1140,-1148,-1157,-1166,-1174,-1183,-1191,-1200,-1209,-1217,-1226,-1234,-1243,-1251,-1260,-1269,-1277,-1286,-1294,-1303,-1311,-1320,-1328,-1337,-1345,-1354,-1362,-1371,-1379,-1388,-1396,-1405,-1413,-1422,-1430,-1439,-1447,-1456,-1464,-1472,-1481,-1489,-1498,-1506,-1514,-1523,-1531,-1540,-1548,-1556,-1565,-1573,-1581,-1590,-1598,-1606,-1614,-1623,-1631,-1639,-1647,-1656,-1664,-1672,-1680,-1688,-1697,-1705,-1713,-1721,-1729,-1737,-1745,-1754,-1762,-1770,-1778,-1786,-1794,-1802,-1810,-1818,-1826,-1834,-1842,-1850,-1858,-1866,-1874,-1881,-1889,-1897,-1905,-1913,-1921,-1928,-1936,-1944,-1952,-1959,-1967,-1975,-1983,-1990,-1998,-2006,-2013,-2021,-2028,-2036,-2043,-2051,-2059,-2066,-2074,-2081,-2088,-2096,-2103,-2111,-2118,-2125,-2133,-2140,-2147,-2155,-2162,-2169,-2176,-2183,-2191,-2198,-2205,-2212,-2219,-2226,-2233,-2240,-2247,-2254,-2261,-2268,-2275,-2282,-2289,-2296,-2303,-2309,-2316,-2323,-2330,-2336,-2343,-2350,-2356,-2363,-2370,-2376,-2383,-2389,-2396,-2402,-2409,-2415,-2421,-2428,-2434,-2440,-2447,-2453,-2459,-2465,-2472,-2478,-2484,-2490,-2496,-2502,-2508,-2514,-2520,-2526,-2532,-2538,-2544,-2550,-2555,-2561,-2567,-2573,-2578,-2584,-2590,-2595,-2601,-2606,-2612,-2617,-2623,-2628,-2634,-2639,-2644,-2650,-2655,-2660,-2665,-2670,-2676,-2681,-2686,-2691,-2696,-2701,-2706,-2711,-2716,-2720,-2725,-2730,-2735,-2739,-2744,-2749,-2753,-2758,-2762,-2767,-2771,-2776,-2780,-2785,-2789,-2793,-2798,-2802,-2806,-2810,-2814,-2818,-2822,-2826,-2830,-2834,-2838,-2842,-2846,-2850,-2854,-2857,-2861,-2865,-2868,-2872,-2875,-2879,-2882,-2886,-2889,-2892,-2896,-2899,-2902,-2905,-2909,-2912,-2915,-2918,-2921,-2924,-2927,-2930,-2932,-2935,-2938,-2941,-2943,-2946,-2949,-2951,-2954,-2956,-2958,-2961,-2963,-2966,-2968,-2970,-2972,-2974,-2976,-2978,-2980,-2982,-2984,-2986,-2988,-2990,-2992,-2993,-2995,-2997,-2998,-3000,-3001,-3003,-3004,-3005,-3007,-3008,-3009,-3010,-3011,-3012,-3014,-3015,-3015,-3016,-3017,-3018,-3019,-3020,-3020,-3021,-3021,-3022,-3022,-3023,-3023,-3024,-3024,-3024,-3024,-3025,-3025,-3025,-3025,-3025,-3025,-3025,-3024,-3024,-3024,-3024,-3023,-3023,-3022,-3022,-3021,-3021,-3020,-3019,-3019,-3018,-3017,-3016,-3015,-3014,-3013,-3012,-3011,-3010,-3008,-3007,-3006,-3004,-3003,-3001,-3000,-2998,-2996,-2995,-2993,-2991,-2989,-2987,-2985,-2983,-2981,-2979,-2977,-2975,-2973,-2970,-2968,-2966,-2963,-2961,-2958,-2955,-2953,-2950,-2947,-2944,-2941,-2938,-2935,-2932,-2929,-2926,-2923,-2920,-2916,-2913,-2910,-2906,-2903,-2899,-2895,-2892,-2888,-2884,-2880,-2876,-2872,-2868,-2864,-2860,-2856,-2852,-2847,-2843,-2839,-2834,-2830,-2825,-2821,-2816,-2811,-2806,-2802,-2797,-2792,-2787,-2782,-2777,-2771,-2766,-2761,-2756,-2750,-2745,-2739,-2734,-2728,-2722,-2717,-2711,-2705,-2699,-2693,-2687,-2681,-2675,-2669,-2663,-2656,-2650,-2644,-2637,-2631,-2624,-2618,-2611,-2604,-2597,-2591,-2584,-2577,-2570,-2563,-2555,-2548,-2541,-2534,-2526,-2519,-2512,-2504,-2496,-2489,-2481,-2473,-2465,-2458,-2450,-2442,-2434,-2426,-2417,-2409,-2401,-2393,-2384,-2376,-2367,-2359,-2350,-2341,-2333,-2324,-2315,-2306,-2297,-2288,-2279,-2270,-2261,-2252,-2242,-2233,-2223,-2214,-2204,-2195,-2185,-2175,-2166,-2156,-2146,-2136,-2126,-2116,-2106,-2096,-2086,-2075,-2065,-2054,-2044,-2034,-2023,-2012,-2002,-1991,-1980,-1969,-1958,-1947,-1936,-1925,-1914,-1903,-1892,-1880,-1869,-1857,-1846,-1834,-1823,-1811,-1799,-1788,-1776,-1764,-1752,-1740,-1728,-1716,-1704,-1691,-1679,-1667,-1654,-1642,-1629,-1617,-1604,-1591,-1579,-1566,-1553,-1540,-1527,-1514,-1501,-1488,-1475,-1461,-1448,-1435,-1421,-1408,-1394,-1380,-1367,-1353,-1339,-1326,-1312,-1298,-1284,-1270,-1256,-1241,-1227,-1213,-1199,-1184,-1170,-1155,-1141,-1126,-1111,-1097,-1082,-1067,-1052,-1037,-1022,-1007,-992,-977,-962,-946,-931,-916,-900,-885,-869,-854,-838,-822,-807,-791,-775,-759,-743,-727,-711,-695,-678,-662,-646,-630,-613,-597,-580,-564,-547,-530,-514,-497,-480,-463,-446,-429,-412,-395,-378,-361,-343,-326,-309,-291,-274,-256,-239,-221,-204,-186,-168,-150,-132,-114,-96,-78,-60,-42,-24,-6,11,30,48,67,85,104,122,141,160,178,197,216,235,254,273,292,311,330,349,368,388,407,426,446,465,485,504,524,543,563,583,603,622,642,662,682,702,722,742,763,783,803,823,844,864,884,905,925,946,967,987,1008,1029,1050,1070,1091,1112,1133,1154,1175,1196,1217,1239,1260,1281,1302,1324,1345,1367,1388,1410,1431,1453,1474,1496,1518,1540,1561,1583,1605,1627,1649,1671,1693,1715,1737,1760,1782,1804,1826,1849,1871,1893,1916,1938,1961,1984,2006,2029,2051,2074,2097,2120,2143,2165,2188,2211,2234,2257,2280,2303,2326,2350,2373,2396,2419,2443,2466,2489,2513,2536,2560,2583,2607,2630,2654,2677,2701,2725,2748,2772,2796,2820,2844,2868,2891,2915,2939,2963,2987,3012,3036,3060,3084,3108,3132,3157,3181,3205,3230,3254,3278,3303,3327,3352,3376,3401,3425,3450,3475,3499,3524,3549,3573,3598,3623,3648,3673,3697,3722,3747,3772,3797,3822,3847,3872,3897,3922,3947,3973,3998,4023,4048,4073,4099,4124,4149,4174,4200,4225,4251,4276,4301,4327,4352,4378,4403,4429,4454,4480,4505,4531,4557,4582,4608,4634,4659,4685,4711,4736,4762,4788,4814,4840,4865,4891,4917,4943,4969,4995,5021,5047,5073,5099,5125,5151,5177,5203,5229,5255,5281,5307,5333,5359,5385,5411,5437,5464,5490,5516,5542,5568,5594,5621,5647,5673,5699,5726,5752,5778,5804,5831,5857,5883,5910,5936,5962,5988,6015,6041,6068,6094,6120,6147,6173,6199,6226,6252,6279,6305,6331,6358,6384,6411,6437,6463,6490,6516,6543,6569,6596,6622,6648,6675,6701,6728,6754,6781,6807,6833,6860,6886,6913,6939,6966,6992,7019,7045,7071,7098,7124,7151,7177,7204,7230,7256,7283,7309,7336,7362,7388,7415,7441,7467,7494,7520,7547,7573,7599,7626,7652,7678,7705,7731,7757,7783,7810,7836,7862,7889,7915,7941,7967,7993,8020,8046,8072,8098,8124,8150,8177,8203,8229,8255,8281,8307,8333,8359,8385,8411,8437,8463,8489,8515,8541,8567,8593,8619,8645,8671,8697,8722,8748,8774,8800,8826,8851,8877,8903,8928,8954,8980,9005,9031,9057,9082,9108,9133,9159,9184,9210,9235,9261,9286,9312,9337,9362,9388,9413,9438,9463,9489,9514,9539,9564,9589,9615,9640,9665,9690,9715,9740,9765,9790,9815,9839,9864,9889,9914,9939,9963,9988,10013,10037,10062,10087,10111,10136,10160,10185,10209,10234,10258,10282,10307,10331,10355,10380,10404,10428,10452,10476,10500,10524,10548,10572,10596,10620,10644,10668,10692,10716,10739,10763,10787,10810,10834,10857,10881,10904,10928,10951,10975,10998,11021,11045,11068,11091,11114,11137,11160,11183,11206,11229,11252,11275,11298,11321,11344,11366,11389,11412,11434,11457,11479,11502,11524,11547,11569,11591,11613,11636,11658,11680,11702,11724,11746,11768,11790,11812,11834,11855,11877,11899,11920,11942,11963,11985,12006,12028,12049,12070,12092,12113,12134,12155,12176,12197,12218,12239,12260,12281,12302,12322,12343,12364,12384,12405,12425,12446,12466,12486,12506,12527,12547,12567,12587,12607,12627,12647,12667,12686,12706,12726,12746,12765,12785,12804,12823,12843,12862,12881,12901,12920,12939,12958,12977,12996,13015,13033,13052,13071,13089,13108,13127,13145,13163,13182,13200,13218,13236,13255,13273,13291,13309,13326,13344,13362,13380,13397,13415,13432,13450,13467,13485,13502,13519,13536,13553,13570,13587,13604,13621,13638,13654,13671,13688,13704,13721,13737,13753,13770,13786,13802,13818,13834,13850,13866,13882,13898,13913,13929,13945,13960,13975,13991,14006,14021,14037,14052,14067,14082,14097,14111,14126,14141,14155,14170,14185,14199,14213,14228,14242,14256,14270,14284,14298,14312,14326,14340,14353,14367,14380,14394,14407,14421,14434,14447,14460,14473,14486,14499,14512,14525,14537,14550,14563,14575,14587,14600,14612,14624,14636,14648,14660,14672,14684,14696,14708,14719,14731,14742,14754,14765,14776,14787,14799,14810,14820,14831,14842,14853,14864,14874,14885,14895,14905,14916,14926,14936,14946,14956,14966,14976,14986,14995,15005,15015,15024,15033,15043,15052,15061,15070,15079,15088,15097,15106,15114,15123,15132,15140,15148,15157,15165,15173,15181,15189,15197,15205,15213,15220,15228,15236,15243,15250,15258,15265,15272,15279,15286,15293,15300,15307,15313,15320,15326,15333,15339,15346,15352,15358,15364,15370,15376,15382,15387,15393,15399,15404,15409,15415,15420,15425,15430,15435,15440,15445,15450,15455,15459,15464,15468,15473,15477,15481,15485,15489,15493,15497,15501,15505,15508,15512,15515,15519,15522,15525,15529,15532,15535,15538,15540,15543,15546,15548,15551,15553,15556,15558,15560,15562,15564,15566,15568,15570,15572,15573,15575,15576,15578,15579,15580,15581,15582,15583,15584,15585,15586,15586,15587,15588,15588,15588,15588,15589,15589,15589,15589,15588,15588,15588,15588,15587,15586,15586,15585,15584,15583,15582,15581,15580,15579,15578,15576,15575,15573,15572,15570,15568,15566,15564,15562,15560,15558,15556,15553,15551,15548,15546,15543,15540,15538,15535,15532,15529,15525,15522,15519,15515,15512,15508,15505,15501,15497,15493,15489,15485,15481,15477,15473,15468,15464,15459,15455,15450,15445,15440,15435,15430,15425,15420,15415,15409,15404,15399,15393,15387,15382,15376,15370,15364,15358,15352,15346,15339,15333,15326,15320,15313,15307,15300,15293,15286,15279,15272,15265,15258,15250,15243,15236,15228,15220,15213,15205,15197,15189,15181,15173,15165,15157,15148,15140,15132,15123,15114,15106,15097,15088,15079,15070,15061,15052,15043,15033,15024,15015,15005,14995,14986,14976,14966,14956,14946,14936,14926,14916,14905,14895,14885,14874,14864,14853,14842,14831,14820,14810,14799,14787,14776,14765,14754,14742,14731,14719,14708,14696,14684,14672,14660,14648,14636,14624,14612,14600,14587,14575,14563,14550,14537,14525,14512,14499,14486,14473,14460,14447,14434,14421,14407,14394,14380,14367,14353,14340,14326,14312,14298,14284,14270,14256,14242,14228,14213,14199,14185,14170,14155,14141,14126,14111,14097,14082,14067,14052,14037,14021,14006,13991,13975,13960,13945,13929,13913,13898,13882,13866,13850,13834,13818,13802,13786,13770,13753,13737,13721,13704,13688,13671,13654,13638,13621,13604,13587,13570,13553,13536,13519,13502,13485,13467,13450,13432,13415,13397,13380,13362,13344,13326,13309,13291,13273,13255,13236,13218,13200,13182,13163,13145,13127,13108,13089,13071,13052,13033,13015,12996,12977,12958,12939,12920,12901,12881,12862,12843,12823,12804,12785,12765,12746,12726,12706,12686,12667,12647,12627,12607,12587,12567,12547,12527,12506,12486,12466,12446,12425,12405,12384,12364,12343,12322,12302,12281,12260,12239,12218,12197,12176,12155,12134,12113,12092,12070,12049,12028,12006,11985,11963,11942,11920,11899,11877,11855,11834,11812,11790,11768,11746,11724,11702,11680,11658,11636,11613,11591,11569,11547,11524,11502,11479,11457,11434,11412,11389,11366,11344,11321,11298,11275,11252,11229,11206,11183,11160,11137,11114,11091,11068,11045,11021,10998,10975,10951,10928,10904,10881,10857,10834,10810,10787,10763,10739,10716,10692,10668,10644,10620,10596,10572,10548,10524,10500,10476,10452,10428,10404,10380,10355,10331,10307,10282,10258,10234,10209,10185,10160,10136,10111,10087,10062,10037,10013,9988,9963,9939,9914,9889,9864,9839,9815,9790,9765,9740,9715,9690,9665,9640,9615,9589,9564,9539,9514,9489,9463,9438,9413,9388,9362,9337,9312,9286,9261,9235,9210,9184,9159,9133,9108,9082,9057,9031,9005,8980,8954,8928,8903,8877,8851,8826,8800,8774,8748,8722,8697,8671,8645,8619,8593,8567,8541,8515,8489,8463,8437,8411,8385,8359,8333,8307,8281,8255,8229,8203,8177,8150,8124,8098,8072,8046,8020,7993,7967,7941,7915,7889,7862,7836,7810,7783,7757,7731,7705,7678,7652,7626,7599,7573,7547,7520,7494,7467,7441,7415,7388,7362,7336,7309,7283,7256,7230,7204,7177,7151,7124,7098,7071,7045,7019,6992,6966,6939,6913,6886,6860,6833,6807,6781,6754,6728,6701,6675,6648,6622,6596,6569,6543,6516,6490,6463,6437,6411,6384,6358,6331,6305,6279,6252,6226,6199,6173,6147,6120,6094,6068,6041,6015,5988,5962,5936,5910,5883,5857,5831,5804,5778,5752,5726,5699,5673,5647,5621,5594,5568,5542,5516,5490,5464,5437,5411,5385,5359,5333,5307,5281,5255,5229,5203,5177,5151,5125,5099,5073,5047,5021,4995,4969,4943,4917,4891,4865,4840,4814,4788,4762,4736,4711,4685,4659,4634,4608,4582,4557,4531,4505,4480,4454,4429,4403,4378,4352,4327,4301,4276,4251,4225,4200,4174,4149,4124,4099,4073,4048,4023,3998,3973,3947,3922,3897,3872,3847,3822,3797,3772,3747,3722,3697,3673,3648,3623,3598,3573,3549,3524,3499,3475,3450,3425,3401,3376,3352,3327,3303,3278,3254,3230,3205,3181,3157,3132,3108,3084,3060,3036,3012,2987,2963,2939,2915,2891,2868,2844,2820,2796,2772,2748,2725,2701,2677,2654,2630,2607,2583,2560,2536,2513,2489,2466,2443,2419,2396,2373,2350,2326,2303,2280,2257,2234,2211,2188,2165,2143,2120,2097,2074,2051,2029,2006,1984,1961,1938,1916,1893,1871,1849,1826,1804,1782,1760,1737,1715,1693,1671,1649,1627,1605,1583,1561,1540,1518,1496,1474,1453,1431,1410,1388,1367,1345,1324,1302,1281,1260,1239,1217,1196,1175,1154,1133,1112,1091,1070,1050,1029,1008,987,967,946,925,905,884,864,844,823,803,783,763,742,722,702,682,662,642,622,603,583,563,543,524,504,485,465,446,426,407,388,368,349,330,311,292,273,254,235,216,197,178,160,141,122,104,85,67,48,30,11,-6,-24,-42,-60,-78,-96,-114,-132,-150,-168,-186,-204,-221,-239,-256,-274,-291,-309,-326,-343,-361,-378,-395,-412,-429,-446,-463,-480,-497,-514,-530,-547,-564,-580,-597,-613,-630,-646,-662,-678,-695,-711,-727,-743,-759,-775,-791,-807,-822,-838,-854,-869,-885,-900,-916,-931,-946,-962,-977,-992,-1007,-1022,-1037,-1052,-1067,-1082,-1097,-1111,-1126,-1141,-1155,-1170,-1184,-1199,-1213,-1227,-1241,-1256,-1270,-1284,-1298,-1312,-1326,-1339,-1353,-1367,-1380,-1394,-1408,-1421,-1435,-1448,-1461,-1475,-1488,-1501,-1514,-1527,-1540,-1553,-1566,-1579,-1591,-1604,-1617,-1629,-1642,-1654,-1667,-1679,-1691,-1704,-1716,-1728,-1740,-1752,-1764,-1776,-1788,-1799,-1811,-1823,-1834,-1846,-1857,-1869,-1880,-1892,-1903,-1914,-1925,-1936,-1947,-1958,-1969,-1980,-1991,-2002,-2012,-2023,-2034,-2044,-2054,-2065,-2075,-2086,-2096,-2106,-2116,-2126,-2136,-2146,-2156,-2166,-2175,-2185,-2195,-2204,-2214,-2223,-2233,-2242,-2252,-2261,-2270,-2279,-2288,-2297,-2306,-2315,-2324,-2333,-2341,-2350,-2359,-2367,-2376,-2384,-2393,-2401,-2409,-2417,-2426,-2434,-2442,-2450,-2458,-2465,-2473,-2481,-2489,-2496,-2504,-2512,-2519,-2526,-2534,-2541,-2548,-2555,-2563,-2570,-2577,-2584,-2591,-2597,-2604,-2611,-2618,-2624,-2631,-2637,-2644,-2650,-2656,-2663,-2669,-2675,-2681,-2687,-2693,-2699,-2705,-2711,-2717,-2722,-2728,-2734,-2739,-2745,-2750,-2756,-2761,-2766,-2771,-2777,-2782,-2787,-2792,-2797,-2802,-2806,-2811,-2816,-2821,-2825,-2830,-2834,-2839,-2843,-2847,-2852,-2856,-2860,-2864,-2868,-2872,-2876,-2880,-2884,-2888,-2892,-2895,-2899,-2903,-2906,-2910,-2913,-2916,-2920,-2923,-2926,-2929,-2932,-2935,-2938,-2941,-2944,-2947,-2950,-2953,-2955,-2958,-2961,-2963,-2966,-2968,-2970,-2973,-2975,-2977,-2979,-2981,-2983,-2985,-2987,-2989,-2991,-2993,-2995,-2996,-2998,-3000,-3001,-3003,-3004,-3006,-3007,-3008,-3010,-3011,-3012,-3013,-3014,-3015,-3016,-3017,-3018,-3019,-3019,-3020,-3021,-3021,-3022,-3022,-3023,-3023,-3024,-3024,-3024,-3024,-3025,-3025,-3025,-3025,-3025,-3025,-3025,-3024,-3024,-3024,-3024,-3023,-3023,-3022,-3022,-3021,-3021,-3020,-3020,-3019,-3018,-3017,-3016,-3015,-3015,-3014,-3012,-3011,-3010,-3009,-3008,-3007,-3005,-3004,-3003,-3001,-3000,-2998,-2997,-2995,-2993,-2992,-2990,-2988,-2986,-2984,-2982,-2980,-2978,-2976,-2974,-2972,-2970,-2968,-2966,-2963,-2961,-2958,-2956,-2954,-2951,-2949,-2946,-2943,-2941,-2938,-2935,-2932,-2930,-2927,-2924,-2921,-2918,-2915,-2912,-2909,-2905,-2902,-2899,-2896,-2892,-2889,-2886,-2882,-2879,-2875,-2872,-2868,-2865,-2861,-2857,-2854,-2850,-2846,-2842,-2838,-2834,-2830,-2826,-2822,-2818,-2814,-2810,-2806,-2802,-2798,-2793,-2789,-2785,-2780,-2776,-2771,-2767,-2762,-2758,-2753,-2749,-2744,-2739,-2735,-2730,-2725,-2720,-2716,-2711,-2706,-2701,-2696,-2691,-2686,-2681,-2676,-2670,-2665,-2660,-2655,-2650,-2644,-2639,-2634,-2628,-2623,-2617,-2612,-2606,-2601,-2595,-2590,-2584,-2578,-2573,-2567,-2561,-2555,-2550,-2544,-2538,-2532,-2526,-2520,-2514,-2508,-2502,-2496,-2490,-2484,-2478,-2472,-2465,-2459,-2453,-2447,-2440,-2434,-2428,-2421,-2415,-2409,-2402,-2396,-2389,-2383,-2376,-2370,-2363,-2356,-2350,-2343,-2336,-2330,-2323,-2316,-2309,-2303,-2296,-2289,-2282,-2275,-2268,-2261,-2254,-2247,-2240,-2233,-2226,-2219,-2212,-2205,-2198,-2191,-2183,-2176,-2169,-2162,-2155,-2147,-2140,-2133,-2125,-2118,-2111,-2103,-2096,-2088,-2081,-2074,-2066,-2059,-2051,-2043,-2036,-2028,-2021,-2013,-2006,-1998,-1990,-1983,-1975,-1967,-1959,-1952,-1944,-1936,-1928,-1921,-1913,-1905,-1897,-1889,-1881,-1874,-1866,-1858,-1850,-1842,-1834,-1826,-1818,-1810,-1802,-1794,-1786,-1778,-1770,-1762,-1754,-1745,-1737,-1729,-1721,-1713,-1705,-1697,-1688,-1680,-1672,-1664,-1656,-1647,-1639,-1631,-1623,-1614,-1606,-1598,-1590,-1581,-1573,-1565,-1556,-1548,-1540,-1531,-1523,-1514,-1506,-1498,-1489,-1481,-1472,-1464,-1456,-1447,-1439,-1430,-1422,-1413,-1405,-1396,-1388,-1379,-1371,-1362,-1354,-1345,-1337,-1328,-1320,-1311,-1303,-1294,-1286,-1277,-1269,-1260,-1251,-1243,-1234,-1226,-1217,-1209,-1200,-1191,-1183,-1174,-1166,-1157,-1148,-1140,-1131,-1123,-1114,-1105,-1097,-1088,-1080,-1071,-1062,-1054,-1045,-1037,-1028,-1019,-1011,-1002,-994,-985,-976,-968,-959,-950,-942,-933,-925,-916,-907,-899,-890,-882,-873,-864,-856,-847,-839,-830,-822,-813,-804,-796,-787,-779,-770,-762,-753,-744,-736,-727,-719,-710,-702,-693,-685,-676,-668,-659,-651,-642,-634,-625,-617,-608,-600,-591,-583,-575,-566,-558,-549,-541,-532,-524,-516,-507,-499,-490,-482,-474,-465,-457,-449,-440,-432,-424,-415,-407,-399,-391,-382,-374,-366,-358,-349,-341,-333,-325,-317,-308,-300,-292,-284,-276,-268,-259,-251,-243,-235,-227,-219,-211,-203,-195,-187,-179,-171,-163,-155,-147,-139,-131,-123,-115,-107,-99,-92,-84,-76,-68,-60,-52,-45,-37,-29,-21,-14,-6,1,9,16,24,32,39,47,54,62,70,77,85,92,100,107,115,122,130,137,145,152,159,167,174,182,189,196,204,211,218,225,233,240,247,254,261,269,276,283,290,297,304,311,318,325,332,339,346,353,360,367,374,381,387,394,401,408,415,421,428,435,442,448,455,462,468,475,481,488,495,501,508,514,521,527,533,540,546,553,559,565,572,578,584,590,597,603,609,615,621,628,634,640,646,652,658,664,670,676,682,688,694,699,705,711,717,723,729,734,740,746,751,757,763,768,774,779,785,790,796,801,807,812,818,823,829,834,839,845,850,855,860,866,871,876,881,886,891,896,901,906,911,916,921,926,931,936,941,946,951,955,960,965,970,974,979,984,988,993,997,1002,1007,1011,1015,1020,1024,1029,1033,1038,1042,1046,1051,1055,1059,1063,1067,1072,1076,1080,1084,1088,1092,1096,1100,1104,1108,1112,1116,1120,1124,1127,1131,1135,1139,1143,1146,1150,1154,1157,1161,1164,1168,1172,1175,1178,1182,1185,1189,1192,1196,1199,1202,1205,1209,1212,1215,1218,1222,1225,1228,1231,1234,1237,1240,1243,1246,1249,1252,1255,1258,1260,1263,1266,1269,1272,1274,1277,1280,1282,1285,1287,1290,1293,1295,1298,1300,1302,1305,1307,1310,1312,1314,1317,1319,1321,1323,1326,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1350,1352,1354,1356,1357,1359,1361,1363,1364,1366,1368,1369,1371,1372,1374,1375,1377,1378,1380,1381,1383,1384,1386,1387,1388,1389,1391,1392,1393,1394,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1408,1409,1410,1411,1412,1412,1413,1414,1414,1415,1416,1416,1417,1417,1418,1418,1419,1419,1420,1420,1421,1421,1421,1422,1422,1422,1422,1423,1423,1423,1423,1423,1423,1424,1424,1424,1424,1424,1424,1424,1424,1423,1423,1423,1423,1423,1423,1422,1422,1422,1422,1421,1421,1421,1420,1420,1419,1419,1418,1418,1417,1417,1416,1416,1415,1415,1414,1413,1413,1412,1411,1410,1410,1409,1408,1407,1406,1405,1405,1404,1403,1402,1401,1400,1399,1398,1397,1396,1395,1393,1392,1391,1390,1389,1388,1386,1385,1384,1382,1381,1380,1378,1377,1376,1374,1373,1371,1370,1368,1367,1365,1364,1362,1361,1359,1357,1356,1354,1352,1351,1349,1347,1346,1344,1342,1340,1338,1337,1335,1333,1331,1329,1327,1325,1323,1321,1319,1317,1315,1313,1311,1309,1307,1305,1302,1300,1298,1296,1294,1292,1289,1287,1285,1282,1280,1278,1275,1273,1271,1268,1266,1264,1261,1259,1256,1254,1251,1249,1246,1244,1241,1238,1236,1233,1231,1228,1225,1223,1220,1217,1215,1212,1209,1206,1204,1201,1198,1195,1192,1189,1187,1184,1181,1178,1175,1172,1169,1166,1163,1160,1157,1154,1151,1148,1145,1142,1139,1136,1133,1130,1127,1124,1120,1117,1114,1111,1108,1104,1101,1098,1095,1092,1088,1085,1082,1078,1075,1072,1068,1065,1062,1058,1055,1052,1048,1045,1041,1038,1034,1031,1028,1024,1021,1017,1014,1010,1007,1003,999,996,992,989,985,982,978,974,971,967,963,960,956,952,949,945,941,938,934,930,927,923,919,915,912,908,904,900,896,893,889,885,881,877,874,870,866,862,858,854,850,846,843,839,835,831,827,823,819,815,811,807,803,799,795,791,787,783,779,775,771,767,763,759,755,751,747,743,739,735,731,727,723,719,715,711,707,703,698,694,690,686,682,678,674,670,666,661,657,653,649,645,641,637,632,628,624,620,616,612,608,603,599,595,591,587,582,578,574,570,566,562,557,553,549,545,541,536,532,528,524,520,515,511,507,503,499,494,490,486,482,478,473,469,465,461,456,452,448,444,440,435,431,427,423,419,414,410,406,402,398,393,389,385,381,377,372,368,364,360,356,351,347,343,339,335,330,326,322,318,314,310,305,301,297,293,289,285,280,276,272,268,264,260,256,251,247,243,239,235,231,227,223,218,214,210,206,202,198,194,190,186,182,178,174,169,165,161,157,153,149,145,141,137,133,129,125,121,117,113,109,105,101,97,93,89,85,81,77,73,69,66,62,58,54,50,46,42,38,34,30,27,23,19,15,11,7,3,0,-3,-7,-11,-15,-18,-22,-26,-30,-34,-37,-41,-45,-49,-52,-56,-60,-63,-67,-71,-74,-78,-82,-86,-89,-93,-96,-100,-104,-107,-111,-115,-118,-122,-125,-129,-132,-136,-139,-143,-147,-150,-154,-157,-161,-164,-168,-171,-174,-178,-181,-185,-188,-192,-195,-198,-202,-205,-209,-212,-215,-219,-222,-225,-229,-232,-235,-238,-242,-245,-248,-251,-255,-258,-261,-264,-268,-271,-274,-277,-280,-283,-287,-290,-293,-296,-299,-302,-305,-308,-311,-314,-317,-320,-323,-326,-329,-332,-335,-338,-341,-344,-347,-350,-353,-356,-359,-362,-364,-367,-370,-373,-376,-379,-381,-384,-387,-390,-392,-395,-398,-401,-403,-406,-409,-411,-414,-417,-419,-422,-425,-427,-430,-432,-435,-438,-440,-443,-445,-448,-450,-453,-455,-458,-460,-463,-465,-468,-470,-472,-475,-477,-479,-482,-484,-486,-489,-491,-493,-496,-498,-500,-502,-505,-507,-509,-511,-514,-516,-518,-520,-522,-524,-526,-528,-531,-533,-535,-537,-539,-541,-543,-545,-547,-549,-551,-553,-555,-557,-559,-560,-562,-564,-566,-568,-570,-572,-573,-575,-577,-579,-581,-582,-584,-586,-588,-589,-591,-593,-594,-596,-598,-599,-601,-603,-604,-606,-607,-609,-610,-612,-613,-615,-616,-618,-619,-621,-622,-624,-625,-627,-628,-629,-631,-632,-633,-635,-636,-637,-639,-640,-641,-643,-644,-645,-646,-647,-649,-650,-651,-652,-653,-654,-656,-657,-658,-659,-660,-661,-662,-663,-664,-665,-666,-667,-668,-669,-670,-671,-672,-673,-674,-674,-675,-676,-677,-678,-679,-679,-680,-681,-682,-683,-683,-684,-685,-686,-686,-687,-688,-688,-689,-690,-690,-691,-691,-692,-693,-693,-694,-694,-695,-695,-696,-696,-697,-697,-698,-698,-699,-699,-699,-700,-700,-701,-701,-701,-702,-702,-702,-703,-703,-703,-703,-704,-704,-704,-704,-705,-705,-705,-705,-705,-705,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-705,-705,-705,-705,-705,-705,-704,-704,-704,-704,-703,-703,-703,-703,-702,-702,-702,-701,-701,-701,-700,-700,-700,-699,-699,-698,-698,-698,-697,-697,-696,-696,-695,-695,-694,-694,-693,-693,-692,-692,-691,-691,-690,-689,-689,-688,-688,-687,-686,-686,-685,-684,-684,-683,-682,-682,-681,-680,-679,-679,-678,-677,-676,-676,-675,-674,-673,-672,-671,-671,-670,-669,-668,-667,-666,-665,-664,-664,-663,-662,-661,-660,-659,-658,-657,-656,-655,-654,-653,-652,-651,-650,-649,-648,-647,-646,-644,-643,-642,-641,-640,-639,-638,-637,-636,-634,-633,-632,-631,-630,-628,-627,-626,-625,-624,-622,-621,-620,-619,-617,-616,-615,-614,-612,-611,-610,-608,-607,-606,-604,-603,-602,-600,-599,-597,-596,-595,-593,-592,-590,-589,-588,-586,-585,-583,-582,-580,-579,-577,-576,-574,-573,-571,-570,-568,-567,-565,-564,-562,-561,-559,-558,-556,-555,-553,-551,-550,-548,-547,-545,-543,-542,-540,-539,-537,-535,-534,-532,-530,-529,-527,-525,-524,-522,-520,-519,-517,-515,-513,-512,-510,-508,-507,-505,-503,-501,-500,-498,-496,-494,-493,-491,-489,-487,-485,-484,-482,-480,-478,-476,-475,-473,-471,-469,-467,-465,-464,-462,-460,-458,-456,-454,-453,-451,-449,-447,-445,-443,-441,-439,-437,-436,-434,-432,-430,-428,-426,-424,-422,-420,-418,-416,-414,-413,-411,-409,-407,-405,-403,-401,-399,-397,-395,-393,-391,-389,-387,-385,-383,-381,-379,-377,-375,-373,-371,-369,-367,-365,-363,-361,-359,-357,-355,-353,-351,-349,-347,-345,-343,-341,-339,-337,-335,-333,-331,-329,-327,-325,-323,-321,-319,-317,-315,-313,-311,-309,-306,-304,-302,-300,-298,-296,-294,-292,-290,-288,-286,-284,-282,-280,-278,-276,-274,-272,-269,-267,-265,-263,-261,-259,-257,-255,-253,-251,-249,-247,-245,-243,-241,-238,-236,-234,-232,-230,-228,-226,-224,-222,-220,-218,-216,-214,-212,-210,-207,-205,-203,-201,-199,-197,-195,-193,-191,-189,-187,-185,-183,-181,-179,-177,-175,-173,-171,-168,-166,-164,-162,-160,-158,-156,-154,-152,-150,-148,-146,-144,-142,-140,-138,-136,-134,-132,-130,-128,-126,-124,-122,-120,-118,-116,-114,-112,-110,-108,-106,-104,-102,-100,-98,-96,-94,-92,-90,-88,-86,-84,-82,-80,-78,-76,-74,-72,-70,-68,-66,-64,-62,-60,-59,-57,-55,-53,-51,-49,-47,-45,-43,-41,-39,-37,-36,-34,-32,-30,-28,-26,-24,-22,-20,-19,-17,-15,-13,-11,-9,-7,-6,-4,-2,-0,1,3,4,6,8,10,12,14,15,17,19,21,23,24,26,28,30,31,33,35,37,39,40,42,44,46,47,49,51,52,54,56,58,59,61,63,64,66,68,69,71,73,74,76,78,79,81,83,84,86,88,89,91,92,94,96,97,99,100,102,104,105,107,108,110,111,113,115,116,118,119,121,122,124,125,127,128,130,131,133,134,136,137,139,140,142,143,144,146,147,149,150,152,153,154,156,157,159,160,161,163,164,166,167,168,170,171,172,174,175,176,178,179,180,182,183,184,185,187,188,189,190,192,193,194,195,197,198,199,200,202,203,204,205,206,208,209,210,211,212,213,215,216,217,218,219,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,257,258,259,260,261,262,263,264,264,265,266,267,268,269,269,270,271,272,273,273,274,275,276,276,277,278,279,279,280,281,282,282,283,284,284,285,286,286,287,288,288,289,290,290,291,292,292,293,293,294,295,295,296,296,297,297,298,299,299,300,300,301,301,302,302,303,303,304,304,305,305,306,306,307,307,307,308,308,309,309,310,310,310,311,311,312,312,312,313,313,313,314,314,314,315,315,315,316,316,316,317,317,317,317,318,318,318,319,319,319,319,319,320,320,320,320,321,321,321,321,321,321,322,322,322,322,322,322,323,323,323,323,323,323,323,323,323,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,323,323,323,323,323,323,323,323,323,322,322,322,322,322,322,322,321,321,321,321,321,321,320,320,320,320,320,319,319,319,319,318,318,318,318,317,317,317,317,316,316,316,316,315,315,315,314,314,314,313,313,313,312,312,312,311,311,311,310,310,310,309,309,308,308,308,307,307,306,306,306,305,305,304,304,304,303,303,302,302,301,301,300,300,299,299,299,298,298,297,297,296,296,295,295,294,294,293,292,292,291,291,290,290,289,289,288,288,287,286,286,285,285,284,284,283,282,282,281,281,280,279,279,278,278,277,276,276,275,275,274,273,273,272,271,271,270,269,269,268,267,267,266,265,265,264,263,263,262,261,261,260,259,258,258,257,256,256,255,254,253,253,252,251,251,250,249,248,248,247,246,245,245,244,243,242,242,241,240,239,239,238,237,236,235,235,234,233,232,231,231,230,229,228,228,227,226,225,224,223,223,222,221,220,219,219,218,217,216,215,214,214,213,212,211,210,209,209,208,207,206,205,204,203,203,202,201,200,199,198,197,197,196,195,194,193,192,191,191,190,189,188,187,186,185,184,184,183,182,181,180,179,178,177,176,176,175,174,173,172,171,170,169,168,167,167,166,165,164,163,162,161,160,159,158,158,157,156,155,154,153,152,151,150,149,148,148,147,146,145,144,143,142,141,140,139,138,137,137,136,135,134,133,132,131,130,129,128,127,126,126,125,124,123,122,121,120,119,118,117,116,115,115,114,113,112,111,110,109,108,107,106,105,105,104,103,102,101,100,99,98,97,96,95,94,94,93,92,91,90,89,88,87,86,85,85,84,83,82,81,80,79,78,77,76,76,75,74,73,72,71,70,69,68,68,67,66,65,64,63,62,61,60,60,59,58,57,56,55,54,53,53,52,51,50,49,48,47,47,46,45,44,43,42,41,41,40,39,38,37,36,36,35,34,33,32,31,30,30,29,28,27,26,26,25,24,23,22,21,21,20,19,18,17,17,16,15,14,13,13,12,11,10,9,9,8,7,6,5,5,4,3,2,2,1,0,-0,-1,-1,-2,-3,-4,-4,-5,-6,-7,-7,-8,-9,-10,-10,-11,-12,-13,-13,-14,-15,-16,-16,-17,-18,-18,-19,-20,-21,-21,-22,-23,-23,-24,-25,-25,-26,-27,-28,-28,-29,-30,-30,-31,-32,-32,-33,-34,-34,-35,-36,-36,-37,-38,-38,-39,-40,-40,-41,-42,-42,-43,-44,-44,-45,-45,-46,-47,-47,-48,-49,-49,-50,-50,-51,-52,-52,-53,-53,-54,-55,-55,-56,-56,-57,-58,-58,-59,-59,-60,-60,-61,-62,-62,-63,-63,-64,-64,-65,-65,-66,-67,-67,-68,-68,-69,-69,-70,-70,-71,-71,-72,-72,-73,-73,-74,-74,-75,-75,-76,-76,-77,-77,-78,-78,-79,-79,-80,-80,-81,-81,-82,-82,-83,-83,-83,-84,-84,-85,-85,-86,-86,-87,-87,-87,-88,-88,-89,-89,-90,-90,-90,-91,-91,-92,-92,-92,-93,-93,-94,-94,-94,-95,-95,-96,-96,-96,-97,-97,-97,-98,-98,-99,-99,-99,-100,-100,-100,-101,-101,-101,-102,-102,-102,-103,-103,-103,-104,-104,-104,-105,-105,-105,-105,-106,-106,-106,-107,-107,-107,-107,-108,-108,-108,-109,-109,-109,-109,-110,-110,-110,-110,-111,-111,-111,-111,-112,-112,-112,-112,-113,-113,-113,-113,-114,-114,-114,-114,-114,-115,-115,-115,-115,-115,-116,-116,-116,-116,-116,-117,-117,-117,-117,-117,-117,-118,-118,-118,-118,-118,-118,-119,-119,-119,-119,-119,-119,-119,-120,-120,-120,-120,-120,-120,-120,-120,-121,-121,-121,-121,-121,-121,-121,-121,-121,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-121,-121,-121,-121,-121,-121,-121,-121,-121,-121,-120,-120,-120,-120,-120,-120,-120,-120,-120,-119,-119,-119,-119,-119,-119,-119,-118,-118,-118,-118,-118,-118,-118,-117,-117,-117,-117,-117,-117,-117,-116,-116,-116,-116,-116,-116,-115,-115,-115,-115,-115,-115,-114,-114,-114,-114,-114,-113,-113,-113,-113,-113,-112,-112,-112,-112,-112,-111,-111,-111,-111,-111,-110,-110,-110,-110,-110,-109,-109,-109,-109,-109,-108,-108,-108,-108,-107,-107,-107,-107,-106,-106,-106,-106,-106,-105,-105,-105,-105,-104,-104,-104,-104,-103,-103,-103,-103,-102,-102,-102,-102,-101,-101,-101,-101,-100,-100,-100,-100,-99,-99,-99,-98,-98,-98,-98,-97,-97,-97,-97,-96,-96,-96,-95,-95,-95,-95,-94,-94,-94,-93,-93,-93,-93,-92,-92,-92,-91,-91,-91,-91,-90,-90,-90,-89,-89,-89,-89,-88,-88,-88,-87,-87,-87,-86,-86,-86,-86,-85,-85,-85,-84,-84,-84,-83,-83,-83,-82,-82,-82,-81,-81,-81,-81,-80,-80,-80,-79,-79,-79,-78,-78,-78,-77,-77,-77,-76,-76,-76,-75,-75,-75,-74,-74,-74,-74,-73,-73,-73,-72,-72,-72,-71,-71,-71,-70,-70,-70,-69,-69,-69,-68,-68,-68,-67,-67,-67,-66,-66,-66,-65,-65,-65,-64,-64,-64,-63,-63,-63,-62,-62,-62,-61,-61,-61,-60,-60,-60,-59,-59,-59,-58,-58,-58,-57,-57,-57,-56,-56,-56,-55,-55,-55,-54,-54,-54,-53,-53,-53,-52,-52,-52,-51,-51,-51,-50,-50,-50,-49,-49,-49,-48,-48,-48,-47,-47,-47,-46,-46,-46,-45,-45,-45,-44,-44,-44,-43,-43,-43,-42,-42,-42,-41,-41,-41,-41,-40,-40,-40,-39,-39,-39,-38,-38,-38,-37,-37,-37,-36,-36,-36,-35,-35,-35,-34,-34,-34,-33,-33,-33,-32,-32,-32,-32,-31,-31,-31,-30,-30,-30,-29,-29,-29,-28,-28,-28,-27,-27,-27,-27,-26,-26,-26,-25,-25,-25,-24,-24,-24,-23,-23,-23,-23,-22,-22,-22,-21,-21,-21,-20,-20,-20,-20,-19,-19,-19,-18,-18,-18,-18,-17,-17,-17,-16,-16,-16,-16,-15,-15,-15,-14,-14,-14,-14,-13,-13,-13,-12,-12,-12,-12,-11,-11,-11,-11,-10,-10,-10,-9,-9,-9,-9,-8,-8,-8,-8,-7,-7,-7,-7,-6,-6,-6,-5,-5,-5,-5,-4,-4,-4,-4,-3,-3,-3,-3,-2,-2,-2,-2,-1,-1,-1,-1,-0,-0,-0,-0,-0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,7,7,7,7,8,8,8,8,8,9,9,9,9,9,10,10,10,10,10,11,11,11,11,11,11,12,12,12,12,12,13,13,13,13,13,13,14,14,14,14,14,15,15,15,15,15,15,16,16,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,19,19,19,19,19,19,19,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,26}; diff --git a/targets/ARCH/USRP/USERSPACE/LIB/coeff_3072_to_25.h b/targets/ARCH/USRP/USERSPACE/LIB/coeff_3072_to_25.h deleted file mode 100644 index a29c64aafa..0000000000 --- a/targets/ARCH/USRP/USERSPACE/LIB/coeff_3072_to_25.h +++ /dev/null @@ -1 +0,0 @@ -short coeff_3072_to_25[] = {21,21,21,20,20,20,20,20,20,20,20,20,20,20,20,19,19,19,19,19,19,19,19,19,19,19,18,18,18,18,18,18,18,18,18,18,17,17,17,17,17,17,17,17,17,16,16,16,16,16,16,16,16,16,15,15,15,15,15,15,15,15,14,14,14,14,14,14,14,14,13,13,13,13,13,13,13,13,12,12,12,12,12,12,12,11,11,11,11,11,11,11,10,10,10,10,10,10,10,9,9,9,9,9,9,8,8,8,8,8,8,8,7,7,7,7,7,7,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,0,0,0,0,0,-0,-0,-0,-0,-0,-0,-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-3,-3,-3,-3,-4,-4,-4,-4,-4,-5,-5,-5,-5,-5,-6,-6,-6,-6,-6,-7,-7,-7,-7,-8,-8,-8,-8,-8,-9,-9,-9,-9,-10,-10,-10,-10,-10,-11,-11,-11,-11,-12,-12,-12,-12,-13,-13,-13,-13,-13,-14,-14,-14,-14,-15,-15,-15,-15,-16,-16,-16,-16,-17,-17,-17,-17,-18,-18,-18,-18,-19,-19,-19,-19,-20,-20,-20,-20,-21,-21,-21,-21,-22,-22,-22,-22,-23,-23,-23,-23,-24,-24,-24,-24,-25,-25,-25,-25,-26,-26,-26,-26,-27,-27,-27,-27,-28,-28,-28,-28,-29,-29,-29,-29,-30,-30,-30,-30,-31,-31,-31,-32,-32,-32,-32,-33,-33,-33,-33,-34,-34,-34,-34,-35,-35,-35,-36,-36,-36,-36,-37,-37,-37,-37,-38,-38,-38,-38,-39,-39,-39,-40,-40,-40,-40,-41,-41,-41,-41,-42,-42,-42,-43,-43,-43,-43,-44,-44,-44,-44,-45,-45,-45,-46,-46,-46,-46,-47,-47,-47,-47,-48,-48,-48,-48,-49,-49,-49,-50,-50,-50,-50,-51,-51,-51,-51,-52,-52,-52,-53,-53,-53,-53,-54,-54,-54,-54,-55,-55,-55,-55,-56,-56,-56,-57,-57,-57,-57,-58,-58,-58,-58,-59,-59,-59,-59,-60,-60,-60,-61,-61,-61,-61,-62,-62,-62,-62,-63,-63,-63,-63,-64,-64,-64,-64,-65,-65,-65,-65,-66,-66,-66,-66,-67,-67,-67,-67,-68,-68,-68,-68,-69,-69,-69,-69,-70,-70,-70,-70,-71,-71,-71,-71,-72,-72,-72,-72,-73,-73,-73,-73,-74,-74,-74,-74,-75,-75,-75,-75,-76,-76,-76,-76,-76,-77,-77,-77,-77,-78,-78,-78,-78,-78,-79,-79,-79,-79,-80,-80,-80,-80,-80,-81,-81,-81,-81,-82,-82,-82,-82,-82,-83,-83,-83,-83,-83,-84,-84,-84,-84,-84,-85,-85,-85,-85,-85,-86,-86,-86,-86,-86,-87,-87,-87,-87,-87,-88,-88,-88,-88,-88,-88,-89,-89,-89,-89,-89,-89,-90,-90,-90,-90,-90,-90,-91,-91,-91,-91,-91,-91,-92,-92,-92,-92,-92,-92,-93,-93,-93,-93,-93,-93,-93,-94,-94,-94,-94,-94,-94,-94,-95,-95,-95,-95,-95,-95,-95,-95,-96,-96,-96,-96,-96,-96,-96,-96,-96,-97,-97,-97,-97,-97,-97,-97,-97,-97,-97,-98,-98,-98,-98,-98,-98,-98,-98,-98,-98,-98,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-98,-98,-98,-98,-98,-98,-98,-98,-98,-98,-97,-97,-97,-97,-97,-97,-97,-97,-97,-96,-96,-96,-96,-96,-96,-96,-95,-95,-95,-95,-95,-95,-95,-94,-94,-94,-94,-94,-94,-94,-93,-93,-93,-93,-93,-92,-92,-92,-92,-92,-92,-91,-91,-91,-91,-91,-90,-90,-90,-90,-90,-89,-89,-89,-89,-89,-88,-88,-88,-88,-87,-87,-87,-87,-86,-86,-86,-86,-85,-85,-85,-85,-84,-84,-84,-84,-83,-83,-83,-83,-82,-82,-82,-82,-81,-81,-81,-80,-80,-80,-79,-79,-79,-79,-78,-78,-78,-77,-77,-77,-76,-76,-76,-75,-75,-75,-74,-74,-74,-73,-73,-73,-72,-72,-72,-71,-71,-71,-70,-70,-70,-69,-69,-69,-68,-68,-67,-67,-67,-66,-66,-66,-65,-65,-64,-64,-64,-63,-63,-62,-62,-62,-61,-61,-60,-60,-60,-59,-59,-58,-58,-58,-57,-57,-56,-56,-55,-55,-54,-54,-54,-53,-53,-52,-52,-51,-51,-50,-50,-50,-49,-49,-48,-48,-47,-47,-46,-46,-45,-45,-44,-44,-43,-43,-42,-42,-41,-41,-40,-40,-39,-39,-38,-38,-37,-37,-36,-36,-35,-35,-34,-34,-33,-33,-32,-32,-31,-31,-30,-30,-29,-28,-28,-27,-27,-26,-26,-25,-25,-24,-23,-23,-22,-22,-21,-21,-20,-20,-19,-18,-18,-17,-17,-16,-15,-15,-14,-14,-13,-13,-12,-11,-11,-10,-10,-9,-8,-8,-7,-7,-6,-5,-5,-4,-3,-3,-2,-2,-1,-0,-0,0,1,1,2,2,3,4,4,5,6,6,7,8,8,9,9,10,11,11,12,13,13,14,15,15,16,17,17,18,19,19,20,21,21,22,23,23,24,25,25,26,27,27,28,29,29,30,31,32,32,33,34,34,35,36,36,37,38,39,39,40,41,41,42,43,43,44,45,46,46,47,48,48,49,50,51,51,52,53,53,54,55,56,56,57,58,58,59,60,61,61,62,63,64,64,65,66,67,67,68,69,69,70,71,72,72,73,74,75,75,76,77,78,78,79,80,80,81,82,83,83,84,85,86,86,87,88,89,89,90,91,92,92,93,94,95,95,96,97,98,98,99,100,101,101,102,103,104,104,105,106,107,107,108,109,110,110,111,112,113,113,114,115,116,116,117,118,118,119,120,121,121,122,123,124,124,125,126,127,127,128,129,130,130,131,132,133,133,134,135,135,136,137,138,138,139,140,141,141,142,143,143,144,145,146,146,147,148,149,149,150,151,151,152,153,154,154,155,156,156,157,158,159,159,160,161,161,162,163,163,164,165,166,166,167,168,168,169,170,170,171,172,172,173,174,174,175,176,176,177,178,178,179,180,180,181,182,182,183,184,184,185,186,186,187,188,188,189,190,190,191,191,192,193,193,194,195,195,196,197,197,198,198,199,200,200,201,201,202,203,203,204,204,205,206,206,207,207,208,209,209,210,210,211,211,212,213,213,214,214,215,215,216,216,217,218,218,219,219,220,220,221,221,222,222,223,223,224,224,225,225,226,226,227,227,228,228,229,229,230,230,231,231,232,232,233,233,234,234,234,235,235,236,236,237,237,238,238,238,239,239,240,240,240,241,241,242,242,242,243,243,244,244,244,245,245,245,246,246,247,247,247,248,248,248,249,249,249,250,250,250,251,251,251,252,252,252,252,253,253,253,254,254,254,254,255,255,255,255,256,256,256,256,257,257,257,257,258,258,258,258,258,259,259,259,259,259,260,260,260,260,260,260,261,261,261,261,261,261,262,262,262,262,262,262,262,262,262,263,263,263,263,263,263,263,263,263,263,263,263,263,263,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,263,263,263,263,263,263,263,263,263,263,263,263,263,263,262,262,262,262,262,262,262,262,261,261,261,261,261,261,260,260,260,260,260,260,259,259,259,259,258,258,258,258,258,257,257,257,257,256,256,256,256,255,255,255,254,254,254,253,253,253,253,252,252,252,251,251,250,250,250,249,249,249,248,248,247,247,247,246,246,245,245,245,244,244,243,243,242,242,242,241,241,240,240,239,239,238,238,237,237,236,236,235,235,234,233,233,232,232,231,231,230,230,229,228,228,227,227,226,225,225,224,224,223,222,222,221,220,220,219,218,218,217,216,216,215,214,214,213,212,212,211,210,209,209,208,207,206,206,205,204,203,203,202,201,200,200,199,198,197,196,195,195,194,193,192,191,190,190,189,188,187,186,185,184,184,183,182,181,180,179,178,177,176,175,175,174,173,172,171,170,169,168,167,166,165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,144,143,142,141,140,139,138,137,136,135,134,132,131,130,129,128,127,126,124,123,122,121,120,119,117,116,115,114,113,112,110,109,108,107,106,104,103,102,101,99,98,97,96,94,93,92,91,89,88,87,86,84,83,82,80,79,78,76,75,74,73,71,70,69,67,66,65,63,62,60,59,58,56,55,54,52,51,50,48,47,45,44,43,41,40,38,37,36,34,33,31,30,28,27,26,24,23,21,20,18,17,15,14,12,11,9,8,7,5,4,2,1,-0,-1,-3,-4,-6,-7,-9,-10,-12,-13,-15,-17,-18,-20,-21,-23,-24,-26,-27,-29,-30,-32,-33,-35,-37,-38,-40,-41,-43,-44,-46,-48,-49,-51,-52,-54,-55,-57,-59,-60,-62,-63,-65,-67,-68,-70,-71,-73,-75,-76,-78,-79,-81,-83,-84,-86,-88,-89,-91,-92,-94,-96,-97,-99,-101,-102,-104,-106,-107,-109,-111,-112,-114,-115,-117,-119,-120,-122,-124,-125,-127,-129,-130,-132,-134,-135,-137,-139,-140,-142,-144,-145,-147,-149,-150,-152,-154,-155,-157,-159,-160,-162,-164,-165,-167,-169,-170,-172,-174,-175,-177,-179,-181,-182,-184,-186,-187,-189,-191,-192,-194,-196,-197,-199,-201,-202,-204,-206,-207,-209,-211,-212,-214,-216,-217,-219,-221,-223,-224,-226,-228,-229,-231,-233,-234,-236,-238,-239,-241,-243,-244,-246,-248,-249,-251,-253,-254,-256,-258,-259,-261,-263,-264,-266,-268,-269,-271,-273,-274,-276,-277,-279,-281,-282,-284,-286,-287,-289,-291,-292,-294,-296,-297,-299,-300,-302,-304,-305,-307,-309,-310,-312,-313,-315,-317,-318,-320,-321,-323,-325,-326,-328,-329,-331,-332,-334,-336,-337,-339,-340,-342,-344,-345,-347,-348,-350,-351,-353,-354,-356,-357,-359,-361,-362,-364,-365,-367,-368,-370,-371,-373,-374,-376,-377,-379,-380,-382,-383,-385,-386,-388,-389,-391,-392,-393,-395,-396,-398,-399,-401,-402,-404,-405,-406,-408,-409,-411,-412,-414,-415,-416,-418,-419,-421,-422,-423,-425,-426,-427,-429,-430,-431,-433,-434,-436,-437,-438,-440,-441,-442,-443,-445,-446,-447,-449,-450,-451,-452,-454,-455,-456,-458,-459,-460,-461,-463,-464,-465,-466,-467,-469,-470,-471,-472,-473,-475,-476,-477,-478,-479,-480,-482,-483,-484,-485,-486,-487,-488,-489,-491,-492,-493,-494,-495,-496,-497,-498,-499,-500,-501,-502,-503,-504,-505,-506,-507,-508,-509,-510,-511,-512,-513,-514,-515,-516,-517,-518,-519,-520,-521,-522,-523,-523,-524,-525,-526,-527,-528,-529,-530,-530,-531,-532,-533,-534,-534,-535,-536,-537,-538,-538,-539,-540,-541,-541,-542,-543,-544,-544,-545,-546,-546,-547,-548,-548,-549,-550,-550,-551,-552,-552,-553,-553,-554,-555,-555,-556,-556,-557,-557,-558,-558,-559,-559,-560,-560,-561,-561,-562,-562,-563,-563,-564,-564,-565,-565,-565,-566,-566,-567,-567,-567,-568,-568,-568,-569,-569,-569,-570,-570,-570,-570,-571,-571,-571,-571,-572,-572,-572,-572,-573,-573,-573,-573,-573,-573,-574,-574,-574,-574,-574,-574,-574,-574,-574,-574,-575,-575,-575,-575,-575,-575,-575,-575,-575,-575,-575,-575,-574,-574,-574,-574,-574,-574,-574,-574,-574,-574,-573,-573,-573,-573,-573,-573,-572,-572,-572,-572,-571,-571,-571,-571,-570,-570,-570,-569,-569,-569,-568,-568,-568,-567,-567,-567,-566,-566,-565,-565,-564,-564,-564,-563,-563,-562,-562,-561,-561,-560,-559,-559,-558,-558,-557,-557,-556,-555,-555,-554,-554,-553,-552,-552,-551,-550,-549,-549,-548,-547,-547,-546,-545,-544,-544,-543,-542,-541,-540,-539,-539,-538,-537,-536,-535,-534,-533,-532,-532,-531,-530,-529,-528,-527,-526,-525,-524,-523,-522,-521,-520,-519,-518,-516,-515,-514,-513,-512,-511,-510,-509,-508,-506,-505,-504,-503,-502,-500,-499,-498,-497,-495,-494,-493,-492,-490,-489,-488,-486,-485,-484,-482,-481,-479,-478,-477,-475,-474,-472,-471,-470,-468,-467,-465,-464,-462,-461,-459,-458,-456,-454,-453,-451,-450,-448,-447,-445,-443,-442,-440,-438,-437,-435,-433,-432,-430,-428,-427,-425,-423,-421,-420,-418,-416,-414,-412,-411,-409,-407,-405,-403,-401,-400,-398,-396,-394,-392,-390,-388,-386,-384,-382,-380,-378,-376,-374,-372,-370,-368,-366,-364,-362,-360,-358,-356,-354,-352,-350,-348,-346,-343,-341,-339,-337,-335,-333,-330,-328,-326,-324,-322,-319,-317,-315,-313,-310,-308,-306,-303,-301,-299,-296,-294,-292,-289,-287,-285,-282,-280,-278,-275,-273,-270,-268,-265,-263,-261,-258,-256,-253,-251,-248,-246,-243,-241,-238,-236,-233,-231,-228,-225,-223,-220,-218,-215,-212,-210,-207,-205,-202,-199,-197,-194,-191,-189,-186,-183,-180,-178,-175,-172,-170,-167,-164,-161,-159,-156,-153,-150,-147,-145,-142,-139,-136,-133,-131,-128,-125,-122,-119,-116,-113,-111,-108,-105,-102,-99,-96,-93,-90,-87,-84,-81,-78,-75,-72,-69,-67,-64,-61,-58,-55,-52,-48,-45,-42,-39,-36,-33,-30,-27,-24,-21,-18,-15,-12,-9,-6,-3,0,3,6,9,12,15,18,21,25,28,31,34,37,40,44,47,50,53,56,60,63,66,69,72,76,79,82,85,89,92,95,98,102,105,108,111,115,118,121,125,128,131,135,138,141,144,148,151,154,158,161,164,168,171,174,178,181,184,188,191,194,198,201,205,208,211,215,218,221,225,228,232,235,238,242,245,248,252,255,259,262,265,269,272,276,279,282,286,289,293,296,300,303,306,310,313,317,320,323,327,330,334,337,341,344,347,351,354,358,361,365,368,371,375,378,382,385,389,392,395,399,402,406,409,413,416,419,423,426,430,433,436,440,443,447,450,454,457,460,464,467,471,474,477,481,484,488,491,494,498,501,504,508,511,515,518,521,525,528,531,535,538,542,545,548,552,555,558,562,565,568,572,575,578,582,585,588,592,595,598,601,605,608,611,615,618,621,624,628,631,634,637,641,644,647,650,654,657,660,663,666,670,673,676,679,682,686,689,692,695,698,701,704,708,711,714,717,720,723,726,729,733,736,739,742,745,748,751,754,757,760,763,766,769,772,775,778,781,784,787,790,793,796,799,802,805,807,810,813,816,819,822,825,828,830,833,836,839,842,845,847,850,853,856,858,861,864,867,869,872,875,878,880,883,886,888,891,893,896,899,901,904,907,909,912,914,917,919,922,924,927,929,932,934,937,939,942,944,947,949,951,954,956,959,961,963,966,968,970,973,975,977,979,982,984,986,988,991,993,995,997,999,1001,1003,1006,1008,1010,1012,1014,1016,1018,1020,1022,1024,1026,1028,1030,1032,1034,1036,1038,1040,1042,1044,1045,1047,1049,1051,1053,1055,1056,1058,1060,1062,1063,1065,1067,1068,1070,1072,1073,1075,1077,1078,1080,1081,1083,1085,1086,1088,1089,1091,1092,1093,1095,1096,1098,1099,1101,1102,1103,1105,1106,1107,1109,1110,1111,1112,1114,1115,1116,1117,1118,1119,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1137,1138,1139,1140,1141,1141,1142,1143,1144,1144,1145,1146,1146,1147,1148,1148,1149,1149,1150,1151,1151,1152,1152,1153,1153,1153,1154,1154,1155,1155,1155,1156,1156,1156,1157,1157,1157,1157,1157,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1157,1157,1157,1157,1156,1156,1156,1155,1155,1155,1154,1154,1153,1153,1153,1152,1152,1151,1150,1150,1149,1149,1148,1147,1147,1146,1145,1145,1144,1143,1142,1142,1141,1140,1139,1138,1137,1137,1136,1135,1134,1133,1132,1131,1130,1129,1127,1126,1125,1124,1123,1122,1121,1119,1118,1117,1115,1114,1113,1112,1110,1109,1107,1106,1104,1103,1102,1100,1099,1097,1095,1094,1092,1091,1089,1087,1086,1084,1082,1080,1079,1077,1075,1073,1071,1070,1068,1066,1064,1062,1060,1058,1056,1054,1052,1050,1048,1046,1043,1041,1039,1037,1035,1032,1030,1028,1026,1023,1021,1019,1016,1014,1011,1009,1007,1004,1002,999,997,994,991,989,986,984,981,978,976,973,970,967,965,962,959,956,953,950,948,945,942,939,936,933,930,927,924,921,917,914,911,908,905,902,898,895,892,889,885,882,879,875,872,869,865,862,858,855,851,848,844,841,837,834,830,826,823,819,815,812,808,804,800,797,793,789,785,781,777,773,770,766,762,758,754,750,746,742,738,733,729,725,721,717,713,708,704,700,696,691,687,683,679,674,670,665,661,657,652,648,643,639,634,630,625,621,616,611,607,602,597,593,588,583,579,574,569,564,560,555,550,545,540,535,530,525,521,516,511,506,501,496,491,485,480,475,470,465,460,455,450,444,439,434,429,424,418,413,408,402,397,392,386,381,376,370,365,359,354,348,343,337,332,326,321,315,310,304,298,293,287,282,276,270,264,259,253,247,242,236,230,224,218,213,207,201,195,189,183,177,171,166,160,154,148,142,136,130,124,118,112,105,99,93,87,81,75,69,63,57,50,44,38,32,26,19,13,7,1,-5,-11,-17,-24,-30,-36,-43,-49,-55,-62,-68,-74,-81,-87,-94,-100,-107,-113,-120,-126,-132,-139,-145,-152,-159,-165,-172,-178,-185,-191,-198,-204,-211,-218,-224,-231,-238,-244,-251,-257,-264,-271,-278,-284,-291,-298,-304,-311,-318,-325,-331,-338,-345,-352,-358,-365,-372,-379,-385,-392,-399,-406,-413,-420,-426,-433,-440,-447,-454,-461,-467,-474,-481,-488,-495,-502,-509,-516,-523,-529,-536,-543,-550,-557,-564,-571,-578,-585,-592,-599,-606,-613,-620,-627,-634,-641,-648,-655,-661,-668,-675,-682,-689,-696,-703,-710,-717,-724,-731,-738,-745,-752,-759,-766,-773,-780,-787,-794,-801,-808,-815,-822,-829,-836,-843,-850,-857,-864,-871,-878,-885,-893,-900,-907,-914,-921,-928,-935,-941,-948,-955,-962,-969,-976,-983,-990,-997,-1004,-1011,-1018,-1025,-1032,-1039,-1046,-1053,-1060,-1067,-1074,-1081,-1088,-1095,-1102,-1109,-1116,-1122,-1129,-1136,-1143,-1150,-1157,-1164,-1171,-1178,-1184,-1191,-1198,-1205,-1212,-1219,-1226,-1232,-1239,-1246,-1253,-1260,-1266,-1273,-1280,-1287,-1293,-1300,-1307,-1314,-1320,-1327,-1334,-1341,-1347,-1354,-1361,-1367,-1374,-1381,-1387,-1394,-1401,-1407,-1414,-1420,-1427,-1434,-1440,-1447,-1453,-1460,-1466,-1473,-1479,-1486,-1492,-1499,-1505,-1512,-1518,-1525,-1531,-1537,-1544,-1550,-1557,-1563,-1569,-1576,-1582,-1588,-1595,-1601,-1607,-1613,-1620,-1626,-1632,-1638,-1644,-1651,-1657,-1663,-1669,-1675,-1681,-1687,-1693,-1699,-1706,-1712,-1718,-1724,-1730,-1736,-1741,-1747,-1753,-1759,-1765,-1771,-1777,-1783,-1788,-1794,-1800,-1806,-1812,-1817,-1823,-1829,-1834,-1840,-1846,-1851,-1857,-1863,-1868,-1874,-1879,-1885,-1890,-1896,-1901,-1907,-1912,-1918,-1923,-1928,-1934,-1939,-1944,-1950,-1955,-1960,-1965,-1970,-1976,-1981,-1986,-1991,-1996,-2001,-2006,-2011,-2016,-2021,-2026,-2031,-2036,-2041,-2046,-2051,-2056,-2060,-2065,-2070,-2075,-2080,-2084,-2089,-2094,-2098,-2103,-2107,-2112,-2116,-2121,-2125,-2130,-2134,-2139,-2143,-2147,-2152,-2156,-2160,-2165,-2169,-2173,-2177,-2181,-2186,-2190,-2194,-2198,-2202,-2206,-2210,-2214,-2218,-2222,-2225,-2229,-2233,-2237,-2241,-2244,-2248,-2252,-2255,-2259,-2263,-2266,-2270,-2273,-2277,-2280,-2283,-2287,-2290,-2294,-2297,-2300,-2303,-2307,-2310,-2313,-2316,-2319,-2322,-2325,-2328,-2331,-2334,-2337,-2340,-2343,-2346,-2348,-2351,-2354,-2357,-2359,-2362,-2364,-2367,-2369,-2372,-2374,-2377,-2379,-2382,-2384,-2386,-2389,-2391,-2393,-2395,-2397,-2399,-2402,-2404,-2406,-2408,-2409,-2411,-2413,-2415,-2417,-2419,-2420,-2422,-2424,-2425,-2427,-2429,-2430,-2432,-2433,-2434,-2436,-2437,-2438,-2440,-2441,-2442,-2443,-2445,-2446,-2447,-2448,-2449,-2450,-2451,-2451,-2452,-2453,-2454,-2455,-2455,-2456,-2457,-2457,-2458,-2458,-2459,-2459,-2460,-2460,-2460,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2460,-2460,-2460,-2459,-2459,-2459,-2458,-2458,-2457,-2456,-2456,-2455,-2454,-2454,-2453,-2452,-2451,-2450,-2449,-2448,-2447,-2446,-2445,-2444,-2442,-2441,-2440,-2438,-2437,-2436,-2434,-2433,-2431,-2429,-2428,-2426,-2424,-2423,-2421,-2419,-2417,-2415,-2413,-2411,-2409,-2407,-2405,-2403,-2401,-2398,-2396,-2394,-2391,-2389,-2386,-2384,-2381,-2379,-2376,-2373,-2370,-2368,-2365,-2362,-2359,-2356,-2353,-2350,-2347,-2344,-2341,-2337,-2334,-2331,-2328,-2324,-2321,-2317,-2314,-2310,-2306,-2303,-2299,-2295,-2292,-2288,-2284,-2280,-2276,-2272,-2268,-2264,-2260,-2255,-2251,-2247,-2242,-2238,-2234,-2229,-2225,-2220,-2215,-2211,-2206,-2201,-2197,-2192,-2187,-2182,-2177,-2172,-2167,-2162,-2157,-2151,-2146,-2141,-2135,-2130,-2125,-2119,-2114,-2108,-2102,-2097,-2091,-2085,-2080,-2074,-2068,-2062,-2056,-2050,-2044,-2038,-2031,-2025,-2019,-2013,-2006,-2000,-1993,-1987,-1980,-1974,-1967,-1961,-1954,-1947,-1940,-1933,-1926,-1919,-1912,-1905,-1898,-1891,-1884,-1877,-1869,-1862,-1855,-1847,-1840,-1832,-1825,-1817,-1809,-1802,-1794,-1786,-1778,-1770,-1762,-1754,-1746,-1738,-1730,-1722,-1714,-1705,-1697,-1689,-1680,-1672,-1663,-1655,-1646,-1638,-1629,-1620,-1611,-1602,-1594,-1585,-1576,-1567,-1558,-1548,-1539,-1530,-1521,-1511,-1502,-1493,-1483,-1474,-1464,-1455,-1445,-1435,-1426,-1416,-1406,-1396,-1386,-1376,-1366,-1356,-1346,-1336,-1326,-1316,-1305,-1295,-1285,-1274,-1264,-1253,-1243,-1232,-1221,-1211,-1200,-1189,-1178,-1167,-1156,-1145,-1134,-1123,-1112,-1101,-1090,-1079,-1067,-1056,-1045,-1033,-1022,-1010,-999,-987,-975,-964,-952,-940,-928,-916,-904,-892,-880,-868,-856,-844,-832,-820,-807,-795,-783,-770,-758,-745,-733,-720,-707,-695,-682,-669,-656,-643,-630,-618,-605,-591,-578,-565,-552,-539,-526,-512,-499,-486,-472,-459,-445,-431,-418,-404,-391,-377,-363,-349,-335,-321,-307,-293,-279,-265,-251,-237,-223,-209,-194,-180,-166,-151,-137,-122,-108,-93,-78,-64,-49,-34,-19,-5,9,24,39,54,69,84,99,115,130,145,160,176,191,206,222,237,253,268,284,300,315,331,347,363,378,394,410,426,442,458,474,490,506,523,539,555,571,588,604,620,637,653,670,686,703,720,736,753,770,787,803,820,837,854,871,888,905,922,939,956,973,991,1008,1025,1043,1060,1077,1095,1112,1130,1147,1165,1182,1200,1217,1235,1253,1271,1288,1306,1324,1342,1360,1378,1396,1414,1432,1450,1468,1486,1504,1523,1541,1559,1577,1596,1614,1632,1651,1669,1688,1706,1725,1743,1762,1781,1799,1818,1837,1856,1874,1893,1912,1931,1950,1969,1988,2007,2026,2045,2064,2083,2102,2121,2140,2159,2179,2198,2217,2237,2256,2275,2295,2314,2334,2353,2372,2392,2412,2431,2451,2470,2490,2510,2529,2549,2569,2589,2608,2628,2648,2668,2688,2708,2728,2748,2768,2788,2808,2828,2848,2868,2888,2908,2928,2948,2968,2989,3009,3029,3049,3070,3090,3110,3131,3151,3172,3192,3212,3233,3253,3274,3294,3315,3335,3356,3377,3397,3418,3438,3459,3480,3500,3521,3542,3563,3583,3604,3625,3646,3666,3687,3708,3729,3750,3771,3792,3813,3834,3854,3875,3896,3917,3938,3959,3980,4001,4023,4044,4065,4086,4107,4128,4149,4170,4191,4213,4234,4255,4276,4297,4319,4340,4361,4382,4404,4425,4446,4467,4489,4510,4531,4553,4574,4595,4617,4638,4659,4681,4702,4723,4745,4766,4788,4809,4831,4852,4873,4895,4916,4938,4959,4981,5002,5023,5045,5066,5088,5109,5131,5152,5174,5195,5217,5238,5260,5281,5303,5324,5346,5367,5389,5410,5432,5453,5475,5496,5518,5540,5561,5583,5604,5626,5647,5669,5690,5712,5733,5755,5776,5798,5819,5841,5862,5884,5905,5927,5948,5970,5991,6013,6034,6055,6077,6098,6120,6141,6163,6184,6206,6227,6248,6270,6291,6313,6334,6355,6377,6398,6420,6441,6462,6484,6505,6526,6548,6569,6590,6612,6633,6654,6675,6697,6718,6739,6760,6781,6803,6824,6845,6866,6887,6908,6930,6951,6972,6993,7014,7035,7056,7077,7098,7119,7140,7161,7182,7203,7224,7245,7266,7287,7308,7329,7349,7370,7391,7412,7433,7453,7474,7495,7516,7536,7557,7578,7598,7619,7640,7660,7681,7701,7722,7742,7763,7783,7804,7824,7845,7865,7885,7906,7926,7946,7967,7987,8007,8027,8048,8068,8088,8108,8128,8148,8168,8188,8209,8229,8248,8268,8288,8308,8328,8348,8368,8388,8407,8427,8447,8467,8486,8506,8526,8545,8565,8584,8604,8623,8643,8662,8682,8701,8720,8740,8759,8778,8797,8817,8836,8855,8874,8893,8912,8931,8950,8969,8988,9007,9026,9045,9063,9082,9101,9120,9138,9157,9176,9194,9213,9231,9250,9268,9287,9305,9323,9342,9360,9378,9396,9415,9433,9451,9469,9487,9505,9523,9541,9559,9577,9595,9612,9630,9648,9665,9683,9701,9718,9736,9753,9771,9788,9805,9823,9840,9857,9875,9892,9909,9926,9943,9960,9977,9994,10011,10028,10045,10061,10078,10095,10111,10128,10145,10161,10178,10194,10211,10227,10243,10260,10276,10292,10308,10324,10340,10356,10372,10388,10404,10420,10436,10451,10467,10483,10498,10514,10530,10545,10560,10576,10591,10607,10622,10637,10652,10667,10682,10697,10712,10727,10742,10757,10772,10786,10801,10816,10830,10845,10859,10874,10888,10903,10917,10931,10945,10960,10974,10988,11002,11016,11030,11043,11057,11071,11085,11098,11112,11126,11139,11152,11166,11179,11193,11206,11219,11232,11245,11258,11271,11284,11297,11310,11323,11335,11348,11361,11373,11386,11398,11411,11423,11435,11447,11460,11472,11484,11496,11508,11520,11532,11543,11555,11567,11578,11590,11601,11613,11624,11636,11647,11658,11669,11681,11692,11703,11714,11725,11735,11746,11757,11768,11778,11789,11799,11810,11820,11830,11841,11851,11861,11871,11881,11891,11901,11911,11921,11931,11940,11950,11959,11969,11978,11988,11997,12006,12016,12025,12034,12043,12052,12061,12070,12079,12087,12096,12105,12113,12122,12130,12138,12147,12155,12163,12171,12179,12187,12195,12203,12211,12219,12226,12234,12242,12249,12257,12264,12271,12279,12286,12293,12300,12307,12314,12321,12328,12334,12341,12348,12354,12361,12367,12374,12380,12386,12393,12399,12405,12411,12417,12423,12428,12434,12440,12445,12451,12457,12462,12467,12473,12478,12483,12488,12493,12498,12503,12508,12513,12518,12522,12527,12531,12536,12540,12545,12549,12553,12557,12561,12565,12569,12573,12577,12581,12584,12588,12592,12595,12598,12602,12605,12608,12611,12615,12618,12621,12624,12626,12629,12632,12634,12637,12640,12642,12644,12647,12649,12651,12653,12655,12657,12659,12661,12663,12665,12666,12668,12669,12671,12672,12673,12675,12676,12677,12678,12679,12680,12681,12682,12682,12683,12684,12684,12685,12685,12685,12686,12686,12686,12686,12686,12686,12686,12686,12685,12685,12685,12684,12684,12683,12682,12682,12681,12680,12679,12678,12677,12676,12675,12673,12672,12671,12669,12668,12666,12665,12663,12661,12659,12657,12655,12653,12651,12649,12647,12644,12642,12640,12637,12634,12632,12629,12626,12624,12621,12618,12615,12611,12608,12605,12602,12598,12595,12592,12588,12584,12581,12577,12573,12569,12565,12561,12557,12553,12549,12545,12540,12536,12531,12527,12522,12518,12513,12508,12503,12498,12493,12488,12483,12478,12473,12467,12462,12457,12451,12445,12440,12434,12428,12423,12417,12411,12405,12399,12393,12386,12380,12374,12367,12361,12354,12348,12341,12334,12328,12321,12314,12307,12300,12293,12286,12279,12271,12264,12257,12249,12242,12234,12226,12219,12211,12203,12195,12187,12179,12171,12163,12155,12147,12138,12130,12122,12113,12105,12096,12087,12079,12070,12061,12052,12043,12034,12025,12016,12006,11997,11988,11978,11969,11959,11950,11940,11931,11921,11911,11901,11891,11881,11871,11861,11851,11841,11830,11820,11810,11799,11789,11778,11768,11757,11746,11735,11725,11714,11703,11692,11681,11669,11658,11647,11636,11624,11613,11601,11590,11578,11567,11555,11543,11532,11520,11508,11496,11484,11472,11460,11447,11435,11423,11411,11398,11386,11373,11361,11348,11335,11323,11310,11297,11284,11271,11258,11245,11232,11219,11206,11193,11179,11166,11152,11139,11126,11112,11098,11085,11071,11057,11043,11030,11016,11002,10988,10974,10960,10945,10931,10917,10903,10888,10874,10859,10845,10830,10816,10801,10786,10772,10757,10742,10727,10712,10697,10682,10667,10652,10637,10622,10607,10591,10576,10560,10545,10530,10514,10498,10483,10467,10451,10436,10420,10404,10388,10372,10356,10340,10324,10308,10292,10276,10260,10243,10227,10211,10194,10178,10161,10145,10128,10111,10095,10078,10061,10045,10028,10011,9994,9977,9960,9943,9926,9909,9892,9875,9857,9840,9823,9805,9788,9771,9753,9736,9718,9701,9683,9665,9648,9630,9612,9595,9577,9559,9541,9523,9505,9487,9469,9451,9433,9415,9396,9378,9360,9342,9323,9305,9287,9268,9250,9231,9213,9194,9176,9157,9138,9120,9101,9082,9063,9045,9026,9007,8988,8969,8950,8931,8912,8893,8874,8855,8836,8817,8797,8778,8759,8740,8720,8701,8682,8662,8643,8623,8604,8584,8565,8545,8526,8506,8486,8467,8447,8427,8407,8388,8368,8348,8328,8308,8288,8268,8248,8229,8209,8188,8168,8148,8128,8108,8088,8068,8048,8027,8007,7987,7967,7946,7926,7906,7885,7865,7845,7824,7804,7783,7763,7742,7722,7701,7681,7660,7640,7619,7598,7578,7557,7536,7516,7495,7474,7453,7433,7412,7391,7370,7349,7329,7308,7287,7266,7245,7224,7203,7182,7161,7140,7119,7098,7077,7056,7035,7014,6993,6972,6951,6930,6908,6887,6866,6845,6824,6803,6781,6760,6739,6718,6697,6675,6654,6633,6612,6590,6569,6548,6526,6505,6484,6462,6441,6420,6398,6377,6355,6334,6313,6291,6270,6248,6227,6206,6184,6163,6141,6120,6098,6077,6055,6034,6013,5991,5970,5948,5927,5905,5884,5862,5841,5819,5798,5776,5755,5733,5712,5690,5669,5647,5626,5604,5583,5561,5540,5518,5496,5475,5453,5432,5410,5389,5367,5346,5324,5303,5281,5260,5238,5217,5195,5174,5152,5131,5109,5088,5066,5045,5023,5002,4981,4959,4938,4916,4895,4873,4852,4831,4809,4788,4766,4745,4723,4702,4681,4659,4638,4617,4595,4574,4553,4531,4510,4489,4467,4446,4425,4404,4382,4361,4340,4319,4297,4276,4255,4234,4213,4191,4170,4149,4128,4107,4086,4065,4044,4023,4001,3980,3959,3938,3917,3896,3875,3854,3834,3813,3792,3771,3750,3729,3708,3687,3666,3646,3625,3604,3583,3563,3542,3521,3500,3480,3459,3438,3418,3397,3377,3356,3335,3315,3294,3274,3253,3233,3212,3192,3172,3151,3131,3110,3090,3070,3049,3029,3009,2989,2968,2948,2928,2908,2888,2868,2848,2828,2808,2788,2768,2748,2728,2708,2688,2668,2648,2628,2608,2589,2569,2549,2529,2510,2490,2470,2451,2431,2412,2392,2372,2353,2334,2314,2295,2275,2256,2237,2217,2198,2179,2159,2140,2121,2102,2083,2064,2045,2026,2007,1988,1969,1950,1931,1912,1893,1874,1856,1837,1818,1799,1781,1762,1743,1725,1706,1688,1669,1651,1632,1614,1596,1577,1559,1541,1523,1504,1486,1468,1450,1432,1414,1396,1378,1360,1342,1324,1306,1288,1271,1253,1235,1217,1200,1182,1165,1147,1130,1112,1095,1077,1060,1043,1025,1008,991,973,956,939,922,905,888,871,854,837,820,803,787,770,753,736,720,703,686,670,653,637,620,604,588,571,555,539,523,506,490,474,458,442,426,410,394,378,363,347,331,315,300,284,268,253,237,222,206,191,176,160,145,130,115,99,84,69,54,39,24,9,-5,-19,-34,-49,-64,-78,-93,-108,-122,-137,-151,-166,-180,-194,-209,-223,-237,-251,-265,-279,-293,-307,-321,-335,-349,-363,-377,-391,-404,-418,-431,-445,-459,-472,-486,-499,-512,-526,-539,-552,-565,-578,-591,-605,-618,-630,-643,-656,-669,-682,-695,-707,-720,-733,-745,-758,-770,-783,-795,-807,-820,-832,-844,-856,-868,-880,-892,-904,-916,-928,-940,-952,-964,-975,-987,-999,-1010,-1022,-1033,-1045,-1056,-1067,-1079,-1090,-1101,-1112,-1123,-1134,-1145,-1156,-1167,-1178,-1189,-1200,-1211,-1221,-1232,-1243,-1253,-1264,-1274,-1285,-1295,-1305,-1316,-1326,-1336,-1346,-1356,-1366,-1376,-1386,-1396,-1406,-1416,-1426,-1435,-1445,-1455,-1464,-1474,-1483,-1493,-1502,-1511,-1521,-1530,-1539,-1548,-1558,-1567,-1576,-1585,-1594,-1602,-1611,-1620,-1629,-1638,-1646,-1655,-1663,-1672,-1680,-1689,-1697,-1705,-1714,-1722,-1730,-1738,-1746,-1754,-1762,-1770,-1778,-1786,-1794,-1802,-1809,-1817,-1825,-1832,-1840,-1847,-1855,-1862,-1869,-1877,-1884,-1891,-1898,-1905,-1912,-1919,-1926,-1933,-1940,-1947,-1954,-1961,-1967,-1974,-1980,-1987,-1993,-2000,-2006,-2013,-2019,-2025,-2031,-2038,-2044,-2050,-2056,-2062,-2068,-2074,-2080,-2085,-2091,-2097,-2102,-2108,-2114,-2119,-2125,-2130,-2135,-2141,-2146,-2151,-2157,-2162,-2167,-2172,-2177,-2182,-2187,-2192,-2197,-2201,-2206,-2211,-2215,-2220,-2225,-2229,-2234,-2238,-2242,-2247,-2251,-2255,-2260,-2264,-2268,-2272,-2276,-2280,-2284,-2288,-2292,-2295,-2299,-2303,-2306,-2310,-2314,-2317,-2321,-2324,-2328,-2331,-2334,-2337,-2341,-2344,-2347,-2350,-2353,-2356,-2359,-2362,-2365,-2368,-2370,-2373,-2376,-2379,-2381,-2384,-2386,-2389,-2391,-2394,-2396,-2398,-2401,-2403,-2405,-2407,-2409,-2411,-2413,-2415,-2417,-2419,-2421,-2423,-2424,-2426,-2428,-2429,-2431,-2433,-2434,-2436,-2437,-2438,-2440,-2441,-2442,-2444,-2445,-2446,-2447,-2448,-2449,-2450,-2451,-2452,-2453,-2454,-2454,-2455,-2456,-2456,-2457,-2458,-2458,-2459,-2459,-2459,-2460,-2460,-2460,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2460,-2460,-2460,-2459,-2459,-2458,-2458,-2457,-2457,-2456,-2455,-2455,-2454,-2453,-2452,-2451,-2451,-2450,-2449,-2448,-2447,-2446,-2445,-2443,-2442,-2441,-2440,-2438,-2437,-2436,-2434,-2433,-2432,-2430,-2429,-2427,-2425,-2424,-2422,-2420,-2419,-2417,-2415,-2413,-2411,-2409,-2408,-2406,-2404,-2402,-2399,-2397,-2395,-2393,-2391,-2389,-2386,-2384,-2382,-2379,-2377,-2374,-2372,-2369,-2367,-2364,-2362,-2359,-2357,-2354,-2351,-2348,-2346,-2343,-2340,-2337,-2334,-2331,-2328,-2325,-2322,-2319,-2316,-2313,-2310,-2307,-2303,-2300,-2297,-2294,-2290,-2287,-2283,-2280,-2277,-2273,-2270,-2266,-2263,-2259,-2255,-2252,-2248,-2244,-2241,-2237,-2233,-2229,-2225,-2222,-2218,-2214,-2210,-2206,-2202,-2198,-2194,-2190,-2186,-2181,-2177,-2173,-2169,-2165,-2160,-2156,-2152,-2147,-2143,-2139,-2134,-2130,-2125,-2121,-2116,-2112,-2107,-2103,-2098,-2094,-2089,-2084,-2080,-2075,-2070,-2065,-2060,-2056,-2051,-2046,-2041,-2036,-2031,-2026,-2021,-2016,-2011,-2006,-2001,-1996,-1991,-1986,-1981,-1976,-1970,-1965,-1960,-1955,-1950,-1944,-1939,-1934,-1928,-1923,-1918,-1912,-1907,-1901,-1896,-1890,-1885,-1879,-1874,-1868,-1863,-1857,-1851,-1846,-1840,-1834,-1829,-1823,-1817,-1812,-1806,-1800,-1794,-1788,-1783,-1777,-1771,-1765,-1759,-1753,-1747,-1741,-1736,-1730,-1724,-1718,-1712,-1706,-1699,-1693,-1687,-1681,-1675,-1669,-1663,-1657,-1651,-1644,-1638,-1632,-1626,-1620,-1613,-1607,-1601,-1595,-1588,-1582,-1576,-1569,-1563,-1557,-1550,-1544,-1537,-1531,-1525,-1518,-1512,-1505,-1499,-1492,-1486,-1479,-1473,-1466,-1460,-1453,-1447,-1440,-1434,-1427,-1420,-1414,-1407,-1401,-1394,-1387,-1381,-1374,-1367,-1361,-1354,-1347,-1341,-1334,-1327,-1320,-1314,-1307,-1300,-1293,-1287,-1280,-1273,-1266,-1260,-1253,-1246,-1239,-1232,-1226,-1219,-1212,-1205,-1198,-1191,-1184,-1178,-1171,-1164,-1157,-1150,-1143,-1136,-1129,-1122,-1116,-1109,-1102,-1095,-1088,-1081,-1074,-1067,-1060,-1053,-1046,-1039,-1032,-1025,-1018,-1011,-1004,-997,-990,-983,-976,-969,-962,-955,-948,-941,-935,-928,-921,-914,-907,-900,-893,-885,-878,-871,-864,-857,-850,-843,-836,-829,-822,-815,-808,-801,-794,-787,-780,-773,-766,-759,-752,-745,-738,-731,-724,-717,-710,-703,-696,-689,-682,-675,-668,-661,-655,-648,-641,-634,-627,-620,-613,-606,-599,-592,-585,-578,-571,-564,-557,-550,-543,-536,-529,-523,-516,-509,-502,-495,-488,-481,-474,-467,-461,-454,-447,-440,-433,-426,-420,-413,-406,-399,-392,-385,-379,-372,-365,-358,-352,-345,-338,-331,-325,-318,-311,-304,-298,-291,-284,-278,-271,-264,-257,-251,-244,-238,-231,-224,-218,-211,-204,-198,-191,-185,-178,-172,-165,-159,-152,-145,-139,-132,-126,-120,-113,-107,-100,-94,-87,-81,-74,-68,-62,-55,-49,-43,-36,-30,-24,-17,-11,-5,1,7,13,19,26,32,38,44,50,57,63,69,75,81,87,93,99,105,112,118,124,130,136,142,148,154,160,166,171,177,183,189,195,201,207,213,218,224,230,236,242,247,253,259,264,270,276,282,287,293,298,304,310,315,321,326,332,337,343,348,354,359,365,370,376,381,386,392,397,402,408,413,418,424,429,434,439,444,450,455,460,465,470,475,480,485,491,496,501,506,511,516,521,525,530,535,540,545,550,555,560,564,569,574,579,583,588,593,597,602,607,611,616,621,625,630,634,639,643,648,652,657,661,665,670,674,679,683,687,691,696,700,704,708,713,717,721,725,729,733,738,742,746,750,754,758,762,766,770,773,777,781,785,789,793,797,800,804,808,812,815,819,823,826,830,834,837,841,844,848,851,855,858,862,865,869,872,875,879,882,885,889,892,895,898,902,905,908,911,914,917,921,924,927,930,933,936,939,942,945,948,950,953,956,959,962,965,967,970,973,976,978,981,984,986,989,991,994,997,999,1002,1004,1007,1009,1011,1014,1016,1019,1021,1023,1026,1028,1030,1032,1035,1037,1039,1041,1043,1046,1048,1050,1052,1054,1056,1058,1060,1062,1064,1066,1068,1070,1071,1073,1075,1077,1079,1080,1082,1084,1086,1087,1089,1091,1092,1094,1095,1097,1099,1100,1102,1103,1104,1106,1107,1109,1110,1112,1113,1114,1115,1117,1118,1119,1121,1122,1123,1124,1125,1126,1127,1129,1130,1131,1132,1133,1134,1135,1136,1137,1137,1138,1139,1140,1141,1142,1142,1143,1144,1145,1145,1146,1147,1147,1148,1149,1149,1150,1150,1151,1152,1152,1153,1153,1153,1154,1154,1155,1155,1155,1156,1156,1156,1157,1157,1157,1157,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1157,1157,1157,1157,1157,1156,1156,1156,1155,1155,1155,1154,1154,1153,1153,1153,1152,1152,1151,1151,1150,1149,1149,1148,1148,1147,1146,1146,1145,1144,1144,1143,1142,1141,1141,1140,1139,1138,1137,1137,1136,1135,1134,1133,1132,1131,1130,1129,1128,1127,1126,1125,1124,1123,1122,1121,1119,1118,1117,1116,1115,1114,1112,1111,1110,1109,1107,1106,1105,1103,1102,1101,1099,1098,1096,1095,1093,1092,1091,1089,1088,1086,1085,1083,1081,1080,1078,1077,1075,1073,1072,1070,1068,1067,1065,1063,1062,1060,1058,1056,1055,1053,1051,1049,1047,1045,1044,1042,1040,1038,1036,1034,1032,1030,1028,1026,1024,1022,1020,1018,1016,1014,1012,1010,1008,1006,1003,1001,999,997,995,993,991,988,986,984,982,979,977,975,973,970,968,966,963,961,959,956,954,951,949,947,944,942,939,937,934,932,929,927,924,922,919,917,914,912,909,907,904,901,899,896,893,891,888,886,883,880,878,875,872,869,867,864,861,858,856,853,850,847,845,842,839,836,833,830,828,825,822,819,816,813,810,807,805,802,799,796,793,790,787,784,781,778,775,772,769,766,763,760,757,754,751,748,745,742,739,736,733,729,726,723,720,717,714,711,708,704,701,698,695,692,689,686,682,679,676,673,670,666,663,660,657,654,650,647,644,641,637,634,631,628,624,621,618,615,611,608,605,601,598,595,592,588,585,582,578,575,572,568,565,562,558,555,552,548,545,542,538,535,531,528,525,521,518,515,511,508,504,501,498,494,491,488,484,481,477,474,471,467,464,460,457,454,450,447,443,440,436,433,430,426,423,419,416,413,409,406,402,399,395,392,389,385,382,378,375,371,368,365,361,358,354,351,347,344,341,337,334,330,327,323,320,317,313,310,306,303,300,296,293,289,286,282,279,276,272,269,265,262,259,255,252,248,245,242,238,235,232,228,225,221,218,215,211,208,205,201,198,194,191,188,184,181,178,174,171,168,164,161,158,154,151,148,144,141,138,135,131,128,125,121,118,115,111,108,105,102,98,95,92,89,85,82,79,76,72,69,66,63,60,56,53,50,47,44,40,37,34,31,28,25,21,18,15,12,9,6,3,0,-3,-6,-9,-12,-15,-18,-21,-24,-27,-30,-33,-36,-39,-42,-45,-48,-52,-55,-58,-61,-64,-67,-69,-72,-75,-78,-81,-84,-87,-90,-93,-96,-99,-102,-105,-108,-111,-113,-116,-119,-122,-125,-128,-131,-133,-136,-139,-142,-145,-147,-150,-153,-156,-159,-161,-164,-167,-170,-172,-175,-178,-180,-183,-186,-189,-191,-194,-197,-199,-202,-205,-207,-210,-212,-215,-218,-220,-223,-225,-228,-231,-233,-236,-238,-241,-243,-246,-248,-251,-253,-256,-258,-261,-263,-265,-268,-270,-273,-275,-278,-280,-282,-285,-287,-289,-292,-294,-296,-299,-301,-303,-306,-308,-310,-313,-315,-317,-319,-322,-324,-326,-328,-330,-333,-335,-337,-339,-341,-343,-346,-348,-350,-352,-354,-356,-358,-360,-362,-364,-366,-368,-370,-372,-374,-376,-378,-380,-382,-384,-386,-388,-390,-392,-394,-396,-398,-400,-401,-403,-405,-407,-409,-411,-412,-414,-416,-418,-420,-421,-423,-425,-427,-428,-430,-432,-433,-435,-437,-438,-440,-442,-443,-445,-447,-448,-450,-451,-453,-454,-456,-458,-459,-461,-462,-464,-465,-467,-468,-470,-471,-472,-474,-475,-477,-478,-479,-481,-482,-484,-485,-486,-488,-489,-490,-492,-493,-494,-495,-497,-498,-499,-500,-502,-503,-504,-505,-506,-508,-509,-510,-511,-512,-513,-514,-515,-516,-518,-519,-520,-521,-522,-523,-524,-525,-526,-527,-528,-529,-530,-531,-532,-532,-533,-534,-535,-536,-537,-538,-539,-539,-540,-541,-542,-543,-544,-544,-545,-546,-547,-547,-548,-549,-549,-550,-551,-552,-552,-553,-554,-554,-555,-555,-556,-557,-557,-558,-558,-559,-559,-560,-561,-561,-562,-562,-563,-563,-564,-564,-564,-565,-565,-566,-566,-567,-567,-567,-568,-568,-568,-569,-569,-569,-570,-570,-570,-571,-571,-571,-571,-572,-572,-572,-572,-573,-573,-573,-573,-573,-573,-574,-574,-574,-574,-574,-574,-574,-574,-574,-574,-575,-575,-575,-575,-575,-575,-575,-575,-575,-575,-575,-575,-574,-574,-574,-574,-574,-574,-574,-574,-574,-574,-573,-573,-573,-573,-573,-573,-572,-572,-572,-572,-571,-571,-571,-571,-570,-570,-570,-570,-569,-569,-569,-568,-568,-568,-567,-567,-567,-566,-566,-565,-565,-565,-564,-564,-563,-563,-562,-562,-561,-561,-560,-560,-559,-559,-558,-558,-557,-557,-556,-556,-555,-555,-554,-553,-553,-552,-552,-551,-550,-550,-549,-548,-548,-547,-546,-546,-545,-544,-544,-543,-542,-541,-541,-540,-539,-538,-538,-537,-536,-535,-534,-534,-533,-532,-531,-530,-530,-529,-528,-527,-526,-525,-524,-523,-523,-522,-521,-520,-519,-518,-517,-516,-515,-514,-513,-512,-511,-510,-509,-508,-507,-506,-505,-504,-503,-502,-501,-500,-499,-498,-497,-496,-495,-494,-493,-492,-491,-489,-488,-487,-486,-485,-484,-483,-482,-480,-479,-478,-477,-476,-475,-473,-472,-471,-470,-469,-467,-466,-465,-464,-463,-461,-460,-459,-458,-456,-455,-454,-452,-451,-450,-449,-447,-446,-445,-443,-442,-441,-440,-438,-437,-436,-434,-433,-431,-430,-429,-427,-426,-425,-423,-422,-421,-419,-418,-416,-415,-414,-412,-411,-409,-408,-406,-405,-404,-402,-401,-399,-398,-396,-395,-393,-392,-391,-389,-388,-386,-385,-383,-382,-380,-379,-377,-376,-374,-373,-371,-370,-368,-367,-365,-364,-362,-361,-359,-357,-356,-354,-353,-351,-350,-348,-347,-345,-344,-342,-340,-339,-337,-336,-334,-332,-331,-329,-328,-326,-325,-323,-321,-320,-318,-317,-315,-313,-312,-310,-309,-307,-305,-304,-302,-300,-299,-297,-296,-294,-292,-291,-289,-287,-286,-284,-282,-281,-279,-277,-276,-274,-273,-271,-269,-268,-266,-264,-263,-261,-259,-258,-256,-254,-253,-251,-249,-248,-246,-244,-243,-241,-239,-238,-236,-234,-233,-231,-229,-228,-226,-224,-223,-221,-219,-217,-216,-214,-212,-211,-209,-207,-206,-204,-202,-201,-199,-197,-196,-194,-192,-191,-189,-187,-186,-184,-182,-181,-179,-177,-175,-174,-172,-170,-169,-167,-165,-164,-162,-160,-159,-157,-155,-154,-152,-150,-149,-147,-145,-144,-142,-140,-139,-137,-135,-134,-132,-130,-129,-127,-125,-124,-122,-120,-119,-117,-115,-114,-112,-111,-109,-107,-106,-104,-102,-101,-99,-97,-96,-94,-92,-91,-89,-88,-86,-84,-83,-81,-79,-78,-76,-75,-73,-71,-70,-68,-67,-65,-63,-62,-60,-59,-57,-55,-54,-52,-51,-49,-48,-46,-44,-43,-41,-40,-38,-37,-35,-33,-32,-30,-29,-27,-26,-24,-23,-21,-20,-18,-17,-15,-13,-12,-10,-9,-7,-6,-4,-3,-1,-0,1,2,4,5,7,8,9,11,12,14,15,17,18,20,21,23,24,26,27,28,30,31,33,34,36,37,38,40,41,43,44,45,47,48,50,51,52,54,55,56,58,59,60,62,63,65,66,67,69,70,71,73,74,75,76,78,79,80,82,83,84,86,87,88,89,91,92,93,94,96,97,98,99,101,102,103,104,106,107,108,109,110,112,113,114,115,116,117,119,120,121,122,123,124,126,127,128,129,130,131,132,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,175,176,177,178,179,180,181,182,183,184,184,185,186,187,188,189,190,190,191,192,193,194,195,195,196,197,198,199,200,200,201,202,203,203,204,205,206,206,207,208,209,209,210,211,212,212,213,214,214,215,216,216,217,218,218,219,220,220,221,222,222,223,224,224,225,225,226,227,227,228,228,229,230,230,231,231,232,232,233,233,234,235,235,236,236,237,237,238,238,239,239,240,240,241,241,242,242,242,243,243,244,244,245,245,245,246,246,247,247,247,248,248,249,249,249,250,250,250,251,251,252,252,252,253,253,253,253,254,254,254,255,255,255,256,256,256,256,257,257,257,257,258,258,258,258,258,259,259,259,259,260,260,260,260,260,260,261,261,261,261,261,261,262,262,262,262,262,262,262,262,263,263,263,263,263,263,263,263,263,263,263,263,263,263,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,263,263,263,263,263,263,263,263,263,263,263,263,263,263,262,262,262,262,262,262,262,262,262,261,261,261,261,261,261,260,260,260,260,260,260,259,259,259,259,259,258,258,258,258,258,257,257,257,257,256,256,256,256,255,255,255,255,254,254,254,254,253,253,253,252,252,252,252,251,251,251,250,250,250,249,249,249,248,248,248,247,247,247,246,246,245,245,245,244,244,244,243,243,242,242,242,241,241,240,240,240,239,239,238,238,238,237,237,236,236,235,235,234,234,234,233,233,232,232,231,231,230,230,229,229,228,228,227,227,226,226,225,225,224,224,223,223,222,222,221,221,220,220,219,219,218,218,217,216,216,215,215,214,214,213,213,212,211,211,210,210,209,209,208,207,207,206,206,205,204,204,203,203,202,201,201,200,200,199,198,198,197,197,196,195,195,194,193,193,192,191,191,190,190,189,188,188,187,186,186,185,184,184,183,182,182,181,180,180,179,178,178,177,176,176,175,174,174,173,172,172,171,170,170,169,168,168,167,166,166,165,164,163,163,162,161,161,160,159,159,158,157,156,156,155,154,154,153,152,151,151,150,149,149,148,147,146,146,145,144,143,143,142,141,141,140,139,138,138,137,136,135,135,134,133,133,132,131,130,130,129,128,127,127,126,125,124,124,123,122,121,121,120,119,118,118,117,116,116,115,114,113,113,112,111,110,110,109,108,107,107,106,105,104,104,103,102,101,101,100,99,98,98,97,96,95,95,94,93,92,92,91,90,89,89,88,87,86,86,85,84,83,83,82,81,80,80,79,78,78,77,76,75,75,74,73,72,72,71,70,69,69,68,67,67,66,65,64,64,63,62,61,61,60,59,58,58,57,56,56,55,54,53,53,52,51,51,50,49,48,48,47,46,46,45,44,43,43,42,41,41,40,39,39,38,37,36,36,35,34,34,33,32,32,31,30,29,29,28,27,27,26,25,25,24,23,23,22,21,21,20,19,19,18,17,17,16,15,15,14,13,13,12,11,11,10,9,9,8,8,7,6,6,5,4,4,3,2,2,1,1,0,-0,-0,-1,-2,-2,-3,-3,-4,-5,-5,-6,-7,-7,-8,-8,-9,-10,-10,-11,-11,-12,-13,-13,-14,-14,-15,-15,-16,-17,-17,-18,-18,-19,-20,-20,-21,-21,-22,-22,-23,-23,-24,-25,-25,-26,-26,-27,-27,-28,-28,-29,-30,-30,-31,-31,-32,-32,-33,-33,-34,-34,-35,-35,-36,-36,-37,-37,-38,-38,-39,-39,-40,-40,-41,-41,-42,-42,-43,-43,-44,-44,-45,-45,-46,-46,-47,-47,-48,-48,-49,-49,-50,-50,-50,-51,-51,-52,-52,-53,-53,-54,-54,-54,-55,-55,-56,-56,-57,-57,-58,-58,-58,-59,-59,-60,-60,-60,-61,-61,-62,-62,-62,-63,-63,-64,-64,-64,-65,-65,-66,-66,-66,-67,-67,-67,-68,-68,-69,-69,-69,-70,-70,-70,-71,-71,-71,-72,-72,-72,-73,-73,-73,-74,-74,-74,-75,-75,-75,-76,-76,-76,-77,-77,-77,-78,-78,-78,-79,-79,-79,-79,-80,-80,-80,-81,-81,-81,-82,-82,-82,-82,-83,-83,-83,-83,-84,-84,-84,-84,-85,-85,-85,-85,-86,-86,-86,-86,-87,-87,-87,-87,-88,-88,-88,-88,-89,-89,-89,-89,-89,-90,-90,-90,-90,-90,-91,-91,-91,-91,-91,-92,-92,-92,-92,-92,-92,-93,-93,-93,-93,-93,-94,-94,-94,-94,-94,-94,-94,-95,-95,-95,-95,-95,-95,-95,-96,-96,-96,-96,-96,-96,-96,-97,-97,-97,-97,-97,-97,-97,-97,-97,-98,-98,-98,-98,-98,-98,-98,-98,-98,-98,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-98,-98,-98,-98,-98,-98,-98,-98,-98,-98,-98,-97,-97,-97,-97,-97,-97,-97,-97,-97,-97,-96,-96,-96,-96,-96,-96,-96,-96,-96,-95,-95,-95,-95,-95,-95,-95,-95,-94,-94,-94,-94,-94,-94,-94,-93,-93,-93,-93,-93,-93,-93,-92,-92,-92,-92,-92,-92,-91,-91,-91,-91,-91,-91,-90,-90,-90,-90,-90,-90,-89,-89,-89,-89,-89,-89,-88,-88,-88,-88,-88,-88,-87,-87,-87,-87,-87,-86,-86,-86,-86,-86,-85,-85,-85,-85,-85,-84,-84,-84,-84,-84,-83,-83,-83,-83,-83,-82,-82,-82,-82,-82,-81,-81,-81,-81,-80,-80,-80,-80,-80,-79,-79,-79,-79,-78,-78,-78,-78,-78,-77,-77,-77,-77,-76,-76,-76,-76,-76,-75,-75,-75,-75,-74,-74,-74,-74,-73,-73,-73,-73,-72,-72,-72,-72,-71,-71,-71,-71,-70,-70,-70,-70,-69,-69,-69,-69,-68,-68,-68,-68,-67,-67,-67,-67,-66,-66,-66,-66,-65,-65,-65,-65,-64,-64,-64,-64,-63,-63,-63,-63,-62,-62,-62,-62,-61,-61,-61,-61,-60,-60,-60,-59,-59,-59,-59,-58,-58,-58,-58,-57,-57,-57,-57,-56,-56,-56,-55,-55,-55,-55,-54,-54,-54,-54,-53,-53,-53,-53,-52,-52,-52,-51,-51,-51,-51,-50,-50,-50,-50,-49,-49,-49,-48,-48,-48,-48,-47,-47,-47,-47,-46,-46,-46,-46,-45,-45,-45,-44,-44,-44,-44,-43,-43,-43,-43,-42,-42,-42,-41,-41,-41,-41,-40,-40,-40,-40,-39,-39,-39,-38,-38,-38,-38,-37,-37,-37,-37,-36,-36,-36,-36,-35,-35,-35,-34,-34,-34,-34,-33,-33,-33,-33,-32,-32,-32,-32,-31,-31,-31,-30,-30,-30,-30,-29,-29,-29,-29,-28,-28,-28,-28,-27,-27,-27,-27,-26,-26,-26,-26,-25,-25,-25,-25,-24,-24,-24,-24,-23,-23,-23,-23,-22,-22,-22,-22,-21,-21,-21,-21,-20,-20,-20,-20,-19,-19,-19,-19,-18,-18,-18,-18,-17,-17,-17,-17,-16,-16,-16,-16,-15,-15,-15,-15,-14,-14,-14,-14,-13,-13,-13,-13,-13,-12,-12,-12,-12,-11,-11,-11,-11,-10,-10,-10,-10,-10,-9,-9,-9,-9,-8,-8,-8,-8,-8,-7,-7,-7,-7,-6,-6,-6,-6,-6,-5,-5,-5,-5,-5,-4,-4,-4,-4,-4,-3,-3,-3,-3,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-0,-0,-0,-0,-0,-0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,9,9,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21}; diff --git a/targets/ARCH/USRP/USERSPACE/LIB/def.h b/targets/ARCH/USRP/USERSPACE/LIB/def.h deleted file mode 100644 index 107da023d3..0000000000 --- a/targets/ARCH/USRP/USERSPACE/LIB/def.h +++ /dev/null @@ -1,18 +0,0 @@ -#include - -#define SAMPLES_PER_FRM 76800 -#define SAMPLES_PER_SLOT 3840 -#define HW_offset 32 -#define N_slot_offset 4 -#define T_start 3840*20*100 - -void format_printf(int flag,const char * fmt, ...) -{ - if(flag) - { - va_list args; - va_start(args,fmt); - vprintf(fmt,args); - va_end(args); - } -} diff --git a/targets/ARCH/USRP/USERSPACE/LIB/def_tmp.h b/targets/ARCH/USRP/USERSPACE/LIB/def_tmp.h deleted file mode 100644 index 24e7eab205..0000000000 --- a/targets/ARCH/USRP/USERSPACE/LIB/def_tmp.h +++ /dev/null @@ -1,20 +0,0 @@ -#include - -#define SAMPLES_PER_FRM 76800 -#define SAMPLES_PER_FRM_USRP 62500 -#define SAMPLES_PER_SLOT 3840 -#define SAMPLES_PER_SLOT_USRP 6250 -#define HW_offset 32 -#define N_slot_offset 4 -#define T_start 3840*20*100 - -void format_printf(int flag,const char * fmt, ...) -{ - if(flag) - { - va_list args; - va_start(args,fmt); - vprintf(fmt,args); - va_end(args); - } -} diff --git a/targets/ARCH/USRP/USERSPACE/LIB/lte-softmodem-usrp_tmp.c b/targets/ARCH/USRP/USERSPACE/LIB/lte-softmodem-usrp_tmp.c deleted file mode 100644 index 295c1b0647..0000000000 --- a/targets/ARCH/USRP/USERSPACE/LIB/lte-softmodem-usrp_tmp.c +++ /dev/null @@ -1,1360 +0,0 @@ -/******************************************************************************* - - Eurecom OpenAirInterface - Copyright(c) 1999 - 2011 Eurecom - - This program is free software; you can redistribute it and/or modify it - under the terms and conditions of the GNU General Public License, - version 2, as published by the Free Software Foundation. - - This program is distributed in the hope it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - - The full GNU General Public License is included in this distribution in - the file called "COPYING". - - Contact Information - Openair Admin: openair_admin@eurecom.fr - Openair Tech : openair_tech@eurecom.fr -Forums : http://forums.eurecom.fsr/openairinterface -Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France - - *******************************************************************************/ - -/*! \file lte-softmodem.c - * \brief main program to control HW and scheduling - * \author R. Knopp, F. Kaltenberger - * \date 2012 - * \version 0.1 - * \company Eurecom - * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr - * \note - * \warning - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define __USE_GNU -//#define _GNU_SOURCE -#include -#include -#include -#include -//#include -#include - -#include "rt_wrapper.h" - -#ifdef EMOS -#include -#endif - -#include "PHY/types.h" -#include "PHY/defs.h" -#include "openair0_lib.h" - -#include "PHY/vars.h" -#include "MAC_INTERFACE/vars.h" -#include "SCHED/vars.h" -#include "LAYER2/MAC/vars.h" - -#include "../../SIMU/USER/init_lte.h" - -#ifdef EMOS -#include "SCHED/phy_procedures_emos.h" -#endif - -#ifdef OPENAIR2 -#include "LAYER2/MAC/defs.h" -#include "LAYER2/MAC/vars.h" -#ifndef CELLULAR -#include "RRC/LITE/vars.h" -#endif -#include "PHY_INTERFACE/vars.h" -#endif - -#ifdef SMBV -#include "PHY/TOOLS/smbv.h" -unsigned short config_frames[4] = {2,9,11,13}; -#endif -#include "UTIL/LOG/log_extern.h" -#include "UTIL/OTG/otg.h" -#include "UTIL/OTG/otg_vars.h" -#include "UTIL/MATH/oml.h" -#include "UTIL/LOG/vcd_signal_dumper.h" - -#ifdef XFORMS -#include "PHY/TOOLS/lte_phy_scope.h" -#include "stats.h" - -#include "../../ARCH/USRP/USERSPACE/LIB/def.h" -#include "TOOLS/thread_ipc.c" - -#include - -// current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0) -// at eNB 0, an UL scope for every UE -FD_lte_phy_scope_ue *form_ue[NUMBER_OF_UE_MAX]; -FD_lte_phy_scope_enb *form_enb[NUMBER_OF_UE_MAX]; -FD_stats_form *form_stats=NULL; -char title[255]; -unsigned char scope_enb_num_ue = 1; -#endif //XFORMS - -#define FRAME_PERIOD 100000000ULL -#define DAQ_PERIOD 66667ULL - -//#define rt_printk printf - -#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all - -#ifdef RTAI //by super -static SEM *mutex; -//static CND *cond; - -static int thread0; -static int thread1; -static int thread_recv; -//static int sync_thread; -#else -pthread_t thread0; -pthread_t thread1; -pthread_t thread_recv; -pthread_attr_t attr_dlsch_threads; -struct sched_param sched_param_dlsch; -#endif - -pthread_t thread2; -pthread_t thread3; -pthread_t tid_eNB; -pthread_t tid_recv; -pthread_t thread_tx_error; -pthread_attr_t attr; - -pthread_mutex_t mutex_eNB; -pthread_cond_t cond_eNB; - -int ret; - -// ------------------------------------ -// functions and variables for USRP -// ------------------------------------ -extern int oai_tx_buff[SAMPLES_PER_FRM]; -extern int oai_rx_buff[SAMPLES_PER_FRM]; -extern void UHD_init(void); -extern void UHD_init_display(void); -extern void Init_send(void); -extern void Init_recv(void); -extern void set_freq(int freq_offset); -extern void send_data(int hw_slot_offset); -extern void recv_data(int hw_slot_offset); -extern void send_end(); -extern void tx_errorcode_handler(void); - -int tx_offset = 0; -int hw_slot_offset = 0; - -extern volatile unsigned long long tx_timestamp,rx_timestamp,clock_usrp; - -extern volatile int flag_recv,flag_clock; -extern volatile int recv_ready; -extern volatile int w_pos_usrp_rcv; // value range [0:76800-1] -extern volatile int w_slot_usrp_rcv, r_slot_usrp_send; // slot index for USRP thread. value range [0:19] -extern volatile int r_slot_idx, t_slot_idx; // slot index for eNB thread. value range [0;19] -extern volatile int send_slot_missed; - -double time_diff1,time_diff2,time_diff3,time_diff4; -struct timespec time_1, time_2,time_3,time_4,time_5; - -// USRP debug output control -extern int g_usrp_debug; - -//add for program run limit times -int N_slot_cycle; - -// ----------------------------------- -// Ctrl+c control -// ----------------------------------- -int oai_exit = 0; -void sig_int_handler(void); - -int card = 0; -exmimo_config_t *p_exmimo_config; -exmimo_id_t *p_exmimo_id; -volatile unsigned int *DAQ_MBOX; - -//int time_offset[4] = {-138,-138,-138,-138}; -//int time_offset[4] = {-145,-145,-145,-145}; -int time_offset[4] = {0,0,0,0}; - -int fs4_test=0; -char UE_flag; -u8 eNB_id=0,UE_id=0; - -u32 carrier_freq[4]= {1907600000,1907600000,1907600000,1907600000}; - -struct timing_info_t { - //unsigned int frame, hw_slot, last_slot, next_slot; - RTIME time_min, time_max, time_avg, time_last, time_now; - //unsigned int mbox0, mbox1, mbox2, mbox_target; - unsigned int n_samples; -} timing_info; - -extern s16* sync_corr_ue0; -extern s16 prach_ifft[4][1024*2]; - - -runmode_t mode; -int rx_input_level_dBm; -#ifdef XFORMS -extern int otg_enabled; -#else -int otg_enabled; -#endif -int number_of_cards = 1; - -int mbox_bounds[20] = {8,16,24,30,38,46,54,60,68,76,84,90,98,106,114,120,128,136,144, 0}; ///boundaries of slots in terms ob mbox counter rounded up to even numbers - -int init_dlsch_threads(void); -void cleanup_dlsch_threads(void); -s32 init_rx_pdsch_thread(void); -void cleanup_rx_pdsch_thread(void); -int init_ulsch_threads(void); -void cleanup_ulsch_threads(void); - -LTE_DL_FRAME_PARMS *frame_parms; - -void setup_ue_buffers(PHY_VARS_UE *phy_vars_ue, LTE_DL_FRAME_PARMS *frame_parms, int carrier); -void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB, LTE_DL_FRAME_PARMS *frame_parms, int carrier); -void test_config(int card, int ant, unsigned int rf_mode, int UE_flag); - -unsigned int build_rflocal(txi, txq, rxi, rxq) -{ - return (txi + (txq<<6) + (rxi<<12) + (rxq<<18)); -} -unsigned int build_rfdc(int dcoff_i_rxfe, int dcoff_q_rxfe) -{ - return (dcoff_i_rxfe + (dcoff_q_rxfe<<8)); -} - -void signal_handler(int sig) -{ - void *array[10]; - size_t size; - - if (sig==SIGSEGV) { - // get void*'s for all entries on the stack - size = backtrace(array, 10); - - // print out all the frames to stderr - fprintf(stderr, "Error: signal %d:\n", sig); - backtrace_symbols_fd(array, size, 2); - exit(-1); - } - else { - oai_exit=1; - } -} - -void exit_fun(const char* s) -{ - void *array[10]; - size_t size; - - printf("Exiting: %s\n",s); - - oai_exit=1; - //rt_sleep_ns(FRAME_PERIOD); - - //exit (-1); -} - -int dummy_tx_buffer[3840*4] __attribute__((aligned(16))); - -void sig_int_handler(void) -{ - oai_exit = 1; -} - -// ----------------------------------- -// USRP tx underflow test -// ----------------------------------- -void *tx_error_handler(void *ptr) -{ - (void)ptr; - while (!oai_exit) - { - tx_errorcode_handler(); - } - pthread_exit(NULL); -} - -// ----------------------------------- -// USRP send and receive thread -// ----------------------------------- -void *recv_all(void *ptr) -{ - (void)ptr; - bind_thread2kernel(1); - int i=0; - - // continuous receiving - while (!oai_exit) - { - // receive one slot-len - recv_data(hw_slot_offset); - // send one slot - send_data(hw_slot_offset); - i++; if(i==N_slot_cycle) oai_exit=1;//control run N_slot_cycle slot and exit - } - - send_end(); - printf("[rcv thread] Received oai_exit signal. Ends. send slot missed: %d\n",send_slot_missed); - printf("hw_slot_offset = %d\n",hw_slot_offset);//test hw_slot_offset value - pthread_exit(NULL); -} - -/* This is the main eNB thread. It gets woken up by the kernel driver using the RTAI message mechanism (rt_send and rt_receive). */ -static void *eNB_thread(void *arg) - //void eNB_thread(void) -{ - printf("Start eNB Server...\n\n"); - - bind_thread2kernel(2); -#ifdef RTAI - RT_TASK *task; -#endif - int slot=0,last_slot, next_slot,frame=0; - unsigned int aa,slot_offset, slot_offset_F; - int diff = 0; - int i; - int num_slot_missed = 0; - -#ifdef RTAI - task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF); - LOG_D(HW,"Started eNB thread (id %p)\n",task); - //if(task==NULL) printf("RT Task creation failed\n"); else printf("Task success!\n"); -#endif - mlockall(MCL_CURRENT | MCL_FUTURE); - -#ifdef HARD_RT - rt_make_hard_real_time(); -#endif - - // initialize reading postition - r_slot_idx = 0; - t_slot_idx = 0; - frame = 0; - - while (!oai_exit) - { - format_printf(g_usrp_debug,"[eNB ] r_eNB: %d w_usrp: %d num_slot_missed: %d diff: %d\n",r_slot_idx,w_slot_usrp_rcv, num_slot_missed,diff); - - // Update 'diff'. Handle the frame wrap-arround - if ((w_slot_usrp_rcv<4)&&(r_slot_idx>=16)){ - diff = r_slot_idx - (w_slot_usrp_rcv + 20) ; - } - else if((w_slot_usrp_rcv>=16)&&(r_slot_idx<4)){ - diff = (r_slot_idx + 20) - w_slot_usrp_rcv; - } - else{ - diff = r_slot_idx - w_slot_usrp_rcv; - } - - // Reading is too slow. It's already late. - if(diff < -4) - { - r_slot_idx++; - num_slot_missed += abs(diff + 4); - if(r_slot_idx==20){ - r_slot_idx = 0; - frame++; - } - continue; - } - - // Wait for writing - while((diff > 0)&& (!oai_exit)) - { - usleep(500); - // Update 'diff'. Handle the frame wrap-arround - if ((w_slot_usrp_rcv<4)&&(r_slot_idx>=16)){ - diff = r_slot_idx - (w_slot_usrp_rcv + 20) ; - } - else if((w_slot_usrp_rcv>=16)&&(r_slot_idx<4)){ - diff = (r_slot_idx + 20) - w_slot_usrp_rcv; - } - else{ - diff = r_slot_idx - w_slot_usrp_rcv; - } - } - - // The slot is ready - last_slot = r_slot_idx; - next_slot = (r_slot_idx + N_slot_offset)%LTE_SLOTS_PER_FRAME; - format_printf(g_usrp_debug, "[eNB ] r_eNB: %d w_usrp: %d last_slot: %d next_slot: %d diff: %d\n\n",r_slot_idx,w_slot_usrp_rcv,last_slot, next_slot,diff); - - //--------------------------- - // eNB procedure - //--------------------------- - PHY_vars_eNB_g[0]->frame = frame; - //if (frame>5) - { - if (fs4_test==0) - // -- PHY procedure -- - { - //phy_procedures_eNB_lte(last_slot, next_slot, PHY_vars_eNB_g[0], 0);//for OAI version berfore 4160 - phy_procedures_eNB_lte(last_slot, next_slot, PHY_vars_eNB_g[0], 0,0); -#ifndef IFFT_FPGA - slot_offset_F = (next_slot)* - (PHY_vars_eNB_g[0]->lte_frame_parms.ofdm_symbol_size)* - ((PHY_vars_eNB_g[0]->lte_frame_parms.Ncp==1) ? 6 : 7);//0for normal 7,1 for extened 6 - slot_offset = (next_slot)* - (PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti>>1); - - if ((subframe_select(&PHY_vars_eNB_g[0]->lte_frame_parms,next_slot>>1)==SF_DL)|| - ((subframe_select(&PHY_vars_eNB_g[0]->lte_frame_parms,next_slot>>1)==SF_S)&&((next_slot&1)==0))) - { - - for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) - { - if (PHY_vars_eNB_g[0]->lte_frame_parms.Ncp == 1) - { - PHY_ofdm_mod(&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F], -#ifdef BIT8_TX - &PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][slot_offset>>1], -#else - dummy_tx_buffer,//&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][slot_offset], -#endif - PHY_vars_eNB_g[0]->lte_frame_parms.log2_symbol_size, - 6, - PHY_vars_eNB_g[0]->lte_frame_parms.nb_prefix_samples, - PHY_vars_eNB_g[0]->lte_frame_parms.twiddle_ifft, - PHY_vars_eNB_g[0]->lte_frame_parms.rev, - CYCLIC_PREFIX); - } - else - { - normal_prefix_mod(&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F], -#ifdef BIT8_TX - &PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][slot_offset>>1], -#else - dummy_tx_buffer,//&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][slot_offset], -#endif - 7, - &(PHY_vars_eNB_g[0]->lte_frame_parms)); - } - //else - //{ - // normal_prefix_mod(&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdataF[0] [aa][slot_offset_F], - // &PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa ][slot_offset>>1], - // 7, - // &(PHY_vars_eNB_g[0]->lte_frame_parms)); - //} - -#ifdef EXMIMO - for (i=0; ilte_frame_parms.samples_per_tti/2; i++) - { - tx_offset = (int)slot_offset+time_offset[aa]+i; - if (tx_offset<0) - tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti; - if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti)) - tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti; - ((short*)&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][tx_offset])[0]= - ((short*)dummy_tx_buffer)[2*i]<<4; - ((short*)&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][tx_offset])[1]= - ((short*)dummy_tx_buffer)[2*i+1]<<4; - //printf("txdata = %d ",PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][tx_offset]); - } -#endif //EXMIMO - } - } - }// end of PHY procedure - -#endif //IFFT_FPGA - - }// end of frame>5 - - // update slot index - t_slot_idx = next_slot; // this slot is ready to send - r_slot_idx++; - if(r_slot_idx==20) - { - r_slot_idx = 0; - frame++; - } - }// end of while - - format_printf(1,"\n[eNB thread] Received oai_exit signal. Ends. Ran %d frames. num_slot_missed: %d\n",frame, num_slot_missed); - - -#ifdef HARD_RT - rt_make_soft_real_time(); -#endif - - // clean task -#ifdef RTAI - rt_task_delete(task); -#endif - rt_printk("Task deleted. returning\n"); - return 0; -} - - -/* This is the main UE thread. Initially it is doing a periodic get_frame. One synchronized it gets woken up by the kernel driver using the RTAI message mechanism (rt_send and rt_receive). */ -static void *UE_thread(void *arg) -{ - printf("Start UE Client...\n\n"); - - bind_thread2kernel(2); -#ifdef RTAI - RT_TASK *task; -#endif - int slot=0,last_slot, next_slot,frame=0; - unsigned int aa,slot_offset, slot_offset_F; - int diff = 0; - int i; - int num_slot_missed = 0; - - static int is_synchronized = 0; - static int received_slots = 0; - static int slot0 = 0; - static int first_run=1; - -#ifdef RTAI - task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF); - LOG_D(HW,"Started UE thread (id %p)\n",task); - //if(task==NULL) printf("RT Task creation failed\n"); else printf("Task success!\n"); -#endif - mlockall(MCL_CURRENT | MCL_FUTURE); - -#ifdef HARD_RT - rt_make_hard_real_time(); -#endif - - // initialize reading postition - r_slot_idx = 0; - t_slot_idx = 0; - frame = 0; - - openair_daq_vars.freq_offset = 0; //-7500; - set_freq(openair_daq_vars.freq_offset); - - if (mode == rx_calib_ue) { - openair_daq_vars.freq_offset = -7500; - set_freq(openair_daq_vars.freq_offset); - } - - usleep(10000*(7.68/6.25));//wait frame data fill in buff - //test synchronized or not - char test_synchronize = 1; - - while (!oai_exit) - { - - if (is_synchronized) - { - //test is synchronized or not - if(test_synchronize) {printf("Found cell ,UE synchronized! hw_slot_offset = %d\n",hw_slot_offset); test_synchronize = 0;} - - format_printf(g_usrp_debug,"[UE ] r_ue: %d w_usrp: %d num_slot_missed: %d diff: %d\n",r_slot_idx,w_slot_usrp_rcv, num_slot_missed,diff); - - // Update 'diff'. Handle the frame wrap-arround - if ((w_slot_usrp_rcv<4)&&(r_slot_idx>=16)){ - diff = r_slot_idx - (w_slot_usrp_rcv + 20) ; - } - else if((w_slot_usrp_rcv>=16)&&(r_slot_idx<4)){ - diff = (r_slot_idx + 20) - w_slot_usrp_rcv; - } - else{ - diff = r_slot_idx - w_slot_usrp_rcv; - } - - // Reading is too slow. It's already late. - if(diff < -4) - { - r_slot_idx++; - num_slot_missed += abs(diff + 4); - if(r_slot_idx==20){ - r_slot_idx = 0; - frame++; - } - continue; - } - - // Wait for writing - while((diff > 0)&& (!oai_exit)) - { - usleep(500); - // Update 'diff'. Handle the frame wrap-arround - if ((w_slot_usrp_rcv<4)&&(r_slot_idx>=16)){ - diff = r_slot_idx - (w_slot_usrp_rcv + 20) ; - } - else if((w_slot_usrp_rcv>=16)&&(r_slot_idx<4)){ - diff = (r_slot_idx + 20) - w_slot_usrp_rcv; - } - else{ - diff = r_slot_idx - w_slot_usrp_rcv; - } - } - - // The slot is ready - last_slot = r_slot_idx; - next_slot = (r_slot_idx + N_slot_offset)%LTE_SLOTS_PER_FRAME; - format_printf(g_usrp_debug, "[UE ] r_ue: %d w_usrp: %d last_slot: %d next_slot: %d diff: %d\n\n",r_slot_idx,w_slot_usrp_rcv,last_slot, next_slot,diff); - - - PHY_vars_UE_g[0]->frame = frame; - - //phy_procedures_UE_lte (last_slot, next_slot, PHY_vars_UE_g[0], 0, 0,mode);//for OAI version after 4160 - phy_procedures_UE_lte (last_slot, next_slot, PHY_vars_UE_g[0], 0, 0,mode,0); - - // update slot index - t_slot_idx = next_slot; // this slot is ready to send - r_slot_idx++; - if(r_slot_idx==20) - { - r_slot_idx = 0; - frame++; - } - } - else // we are not yet synchronized - { - - hw_slot_offset = 0; - - slot = 0; - - if (initial_sync(PHY_vars_UE_g[0],mode)==0) { - - if (mode == rx_calib_ue) { - oai_exit=1; - } - else { - is_synchronized = 1; - hw_slot_offset = PHY_vars_UE_g[0]->rx_offset; - //hw_slot_offset = (PHY_vars_UE_g[0]->rx_offset<<1) / PHY_vars_UE_g[0]->lte_frame_parms.samples_per_tti; - LOG_D(HW,"Got synch: hw_slot_offset %d\n",hw_slot_offset); - } - } - else { - if (openair_daq_vars.freq_offset >= 0) { - openair_daq_vars.freq_offset += 100; - openair_daq_vars.freq_offset *= -1; - } - else { - openair_daq_vars.freq_offset *= -1; - } - if (abs(openair_daq_vars.freq_offset) > 7500) { - LOG_I(PHY,"[initial_sync] No cell synchronization found, abondoning\n"); - mac_xface->macphy_exit(""); - oai_exit = 1; - } - else { - LOG_I(PHY,"[initial_sync] trying carrier off %d Hz\n",openair_daq_vars.freq_offset); - set_freq(openair_daq_vars.freq_offset); - } - } - } - } - - LOG_D(HW,"UE_thread: finished, ran %d times.\n",frame); - - format_printf(1,"\n[UE thread] Received oai_exit signal. Ends. Ran %d frames. num_slot_missed: %d\n",frame, num_slot_missed); -#ifdef HARD_RT - rt_make_soft_real_time(); -#endif - - // clean task -#ifdef RTAI - rt_task_delete(task); -#endif - LOG_D(HW,"Task deleted. returning\n"); - return 0; -} - - - - - -int main(int argc, char **argv) -{ -#ifdef RTAI - RT_TASK *task; -#endif - int i,j,aa; - void *status; - - /* - u32 rf_mode_max[4] = {55759,55759,55759,55759}; - u32 rf_mode_med[4] = {39375,39375,39375,39375}; - u32 rf_mode_byp[4] = {22991,22991,22991,22991}; - */ - u32 my_rf_mode = RXEN + TXEN + TXLPFNORM + TXLPFEN + TXLPF25 + RXLPFNORM + RXLPFEN + RXLPF25 + LNA1ON +LNAMax + RFBBNORM + DMAMODE_RX + DMAMODE_TX; - u32 my_rf_mode2 = RXEN + TXLPFNORM + TXLPFEN + TXLPF25 + RXLPFNORM + RXLPFEN + RXLPF25 + LNA1ON +LNAMax + RFBBNORM + DMAMODE_RX; - u32 rf_mode[4] = {my_rf_mode,my_rf_mode2,0,0}; - u32 rf_local[4] = {8255000,8255000,8255000,8255000}; // UE zepto - //{8254617, 8254617, 8254617, 8254617}; //eNB khalifa - //{8255067,8254810,8257340,8257340}; // eNB PETRONAS - - u32 rf_vcocal[4] = {910,910,910,910}; - u32 rf_vcocal_850[4] = {2015, 2015, 2015, 2015}; - u32 rf_rxdc[4] = {32896,32896,32896,32896}; - u32 rxgain[4] = {20,20,20,20}; - u32 txgain[4] = {25,25,25,25}; - - u16 Nid_cell = 0; - u8 cooperation_flag=0, transmission_mode=1, abstraction_flag=0; - u8 beta_ACK=0,beta_RI=0,beta_CQI=2; - - int c; - char do_forms=0; - unsigned int fd; - unsigned int tcxo = 114; - - int amp; - u8 prach_fmt; - int N_ZC; - - char rxg_fname[100]; - char txg_fname[100]; - char rflo_fname[100]; - char rfdc_fname[100]; - FILE *rxg_fd=NULL; - FILE *txg_fd=NULL; - FILE *rflo_fd=NULL; - FILE *rfdc_fd=NULL; - unsigned int rxg_max[4]={133,133,133,133}, rxg_med[4]={127,127,127,127}, rxg_byp[4]={120,120,120,120}; - int tx_max_power=0; - - char line[1000]; - int l; - int ret, ant; - - int error_code; - - const struct option long_options[] = { - {"calib-ue-rx", required_argument, NULL, 256}, - {"calib-ue-rx-med", required_argument, NULL, 257}, - {"calib-ue-rx-byp", required_argument, NULL, 258}, - {"debug-ue-prach", no_argument, NULL, 259}, - {"no-L2-connect", no_argument, NULL, 260}, - {NULL, 0, NULL, 0}}; - - mode = normal_txrx; - - - while ((c = getopt_long (argc, argv, "C:ST:UdF:V:Dn:",long_options,NULL)) != -1) - { - switch (c) - { - case 'D': - printf("Enable debug output. \n\n"); - g_usrp_debug = 1; - break; - case 'V': - ouput_vcd = 1; - break; - case 'd': - do_forms=1; - break; - case 'U': - UE_flag = 1; - break; - case 'C': - carrier_freq[0] = atoi(optarg); - carrier_freq[1] = atoi(optarg); - carrier_freq[2] = atoi(optarg); - carrier_freq[3] = atoi(optarg); - break; - case 'S': - fs4_test=1; - break; - case 'T': - tcxo=atoi(optarg); - break; - case 'n': - N_slot_cycle=atoi(optarg); - break; - case 'F': - sprintf(rxg_fname,"%srxg.lime",optarg); - rxg_fd = fopen(rxg_fname,"r"); - if (rxg_fd) { - printf("Loading RX Gain parameters from %s\n",rxg_fname); - l=0; - while (fgets(line, sizeof(line), rxg_fd)) { - if ((strlen(line)==0) || (*line == '#')) continue; //ignore empty or comment lines - else { - if (l==0) sscanf(line,"%d %d %d %d",&rxg_max[0],&rxg_max[1],&rxg_max[2],&rxg_max[3]); - if (l==1) sscanf(line,"%d %d %d %d",&rxg_med[0],&rxg_med[1],&rxg_med[2],&rxg_med[3]); - if (l==2) sscanf(line,"%d %d %d %d",&rxg_byp[0],&rxg_byp[1],&rxg_byp[2],&rxg_byp[3]); - l++; - } - } - } - else - printf("%s not found, running with defaults\n",rxg_fname); - - sprintf(txg_fname,"%stxg.lime",optarg); - txg_fd = fopen(txg_fname,"r"); - if (txg_fd) { - printf("Loading TX Gain parameters from %s\n",txg_fname); - l=0; - while (fgets(line, sizeof(line), txg_fd)) { - if ((strlen(line)==0) || (*line == '#')) { - continue; //ignore empty or comment lines - } - else { - if (l==0) sscanf(line,"%d %d %d %d",&txgain[0],&txgain[1],&txgain[2],&txgain[3]); - if (l==1) sscanf(line,"%d",&tx_max_power); - l++; - } - } - } - else - printf("%s not found, running with defaults\n",txg_fname); - - sprintf(rflo_fname,"%srflo.lime",optarg); - rflo_fd = fopen(rflo_fname,"r"); - if (rflo_fd) { - printf("Loading RF LO parameters from %s\n",rflo_fname); - fscanf(rflo_fd,"%d %d %d %d",&rf_local[0],&rf_local[1],&rf_local[2],&rf_local[3]); - } - else - printf("%s not found, running with defaults\n",rflo_fname); - - sprintf(rfdc_fname,"%srfdc.lime",optarg); - rfdc_fd = fopen(rfdc_fname,"r"); - if (rfdc_fd) { - printf("Loading RF DC parameters from %s\n",rfdc_fname); - fscanf(rfdc_fd,"%d %d %d %d",&rf_rxdc[0],&rf_rxdc[1],&rf_rxdc[2],&rf_rxdc[3]); - } - else - printf("%s not found, running with defaults\n",rfdc_fname); - - break; - case 256: - mode = rx_calib_ue; - rx_input_level_dBm = atoi(optarg); - printf("Running with UE calibration on (LNA max), input level %d dBm\n",rx_input_level_dBm); - break; - case 257: - mode = rx_calib_ue_med; - rx_input_level_dBm = atoi(optarg); - printf("Running with UE calibration on (LNA med), input level %d dBm\n",rx_input_level_dBm); - break; - case 258: - mode = rx_calib_ue_byp; - rx_input_level_dBm = atoi(optarg); - printf("Running with UE calibration on (LNA byp), input level %d dBm\n",rx_input_level_dBm); - break; - case 259: - mode = debug_prach; - break; - case 260: - mode = no_L2_connect; - break; - default: - break; - } - } - - if (UE_flag==1) - printf("configuring for UE\n"); - else - printf("configuring for eNB\n"); - - //randominit (0); - set_taus_seed (0); - - // initialize the log (see log.h for details) - logInit(); - - if (ouput_vcd) { - if (UE_flag==1) - vcd_signal_dumper_init("/tmp/openair_dump_UE.vcd"); - else - vcd_signal_dumper_init("/tmp/openair_dump_eNB.vcd"); - } - -#ifdef NAS_NETLINK - netlink_init(); -#endif - - // to make a graceful exit when ctrl-c is pressed - //signal(SIGSEGV, signal_handler); - //signal(SIGINT, signal_handler); - -#ifndef RTAI - check_clock(); -#endif - - // init the parameters - frame_parms = (LTE_DL_FRAME_PARMS*) malloc(sizeof(LTE_DL_FRAME_PARMS)); - frame_parms->N_RB_DL = 25; - frame_parms->N_RB_UL = 25; - frame_parms->Ncp = 0; - frame_parms->Ncp_UL = 0; - frame_parms->Nid_cell = Nid_cell; - frame_parms->nushift = 0; - frame_parms->nb_antennas_tx_eNB = 1; //initial value overwritten by initial sync later - // frame_parms->nb_antennas_tx = (UE_flag==0) ? 1 : 1; - // frame_parms->nb_antennas_rx = (UE_flag==0) ? 1 : 1; - frame_parms->nb_antennas_tx = 1; - frame_parms->nb_antennas_rx = 1; - frame_parms->mode1_flag = (transmission_mode == 1) ? 1 : 0; - frame_parms->frame_type = 1; - frame_parms->tdd_config = 3; - frame_parms->tdd_config_S = 0; - frame_parms->phich_config_common.phich_resource = oneSixth; - frame_parms->phich_config_common.phich_duration = normal; - // UL RS Config - frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = 0;//n_DMRS1 set to 0 - frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = 0; - frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = 0; - frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH = 0; - - //print [PHY] ... message - init_ul_hopping(frame_parms); - - //print [PHY][I][INIT]... message - init_frame_parms(frame_parms,1); - - phy_init_top(frame_parms); - phy_init_lte_top(frame_parms); - - //init prach for openair1 test - frame_parms->prach_config_common.rootSequenceIndex=22; - frame_parms->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig=1; - frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex=0; - frame_parms->prach_config_common.prach_ConfigInfo.highSpeedFlag=0; - frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset=0; - prach_fmt = get_prach_fmt(frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex, - frame_parms->frame_type); - N_ZC = (prach_fmt <4)?839:139; - - if (UE_flag==1) { -#ifdef OPENAIR2 - g_log->log_component[PHY].level = LOG_INFO; -#else - g_log->log_component[PHY].level = LOG_INFO; -#endif - g_log->log_component[PHY].flag = LOG_HIGH; - g_log->log_component[MAC].level = LOG_INFO; - g_log->log_component[MAC].flag = LOG_HIGH; - g_log->log_component[RLC].level = LOG_INFO; - g_log->log_component[RLC].flag = LOG_HIGH; - g_log->log_component[PDCP].level = LOG_INFO; - g_log->log_component[PDCP].flag = LOG_HIGH; - g_log->log_component[OTG].level = LOG_INFO; - g_log->log_component[OTG].flag = LOG_HIGH; - g_log->log_component[RRC].level = LOG_INFO; - g_log->log_component[RRC].flag = LOG_HIGH; - - PHY_vars_UE_g = malloc(sizeof(PHY_VARS_UE*)); - //print [PHY][I][init_lte_eNB]... messages - PHY_vars_UE_g[0] = init_lte_UE(frame_parms, UE_id,abstraction_flag,transmission_mode); - -#ifndef OPENAIR2 - for (i=0;ipusch_config_dedicated[i].betaOffset_ACK_Index = beta_ACK; - PHY_vars_UE_g[0]->pusch_config_dedicated[i].betaOffset_RI_Index = beta_RI; - PHY_vars_UE_g[0]->pusch_config_dedicated[i].betaOffset_CQI_Index = beta_CQI; - - PHY_vars_UE_g[0]->scheduling_request_config[i].sr_PUCCH_ResourceIndex = UE_id; - PHY_vars_UE_g[0]->scheduling_request_config[i].sr_ConfigIndex = 7+(UE_id%3); - PHY_vars_UE_g[0]->scheduling_request_config[i].dsr_TransMax = sr_n4; - } -#endif - - compute_prach_seq(&PHY_vars_UE_g[0]->lte_frame_parms.prach_config_common, - PHY_vars_UE_g[0]->lte_frame_parms.frame_type, - PHY_vars_UE_g[0]->X_u); - - PHY_vars_UE_g[0]->lte_ue_pdcch_vars[0]->crnti = 0x1234; -#ifndef OPENAIR2 - PHY_vars_UE_g[0]->lte_ue_pdcch_vars[0]->crnti = 0x1235; -#endif - NB_UE_INST=1; - NB_INST=1; - - openair_daq_vars.manual_timing_advance = 0; - //openair_daq_vars.timing_advance = TIMING_ADVANCE_HW; - openair_daq_vars.rx_gain_mode = DAQ_AGC_OFF; - openair_daq_vars.auto_freq_correction = 0; - openair_daq_vars.use_ia_receiver = 1; - - // if AGC is off, the following values will be used - // for (i=0;i<4;i++) - // rxgain[i] = 20; - rxgain[0] = 20; - rxgain[1] = 20; - rxgain[2] = 20; - rxgain[3] = 20; - - for (i=0;i<4;i++) { - PHY_vars_UE_g[0]->rx_gain_max[i] = rxg_max[i]; - PHY_vars_UE_g[0]->rx_gain_med[i] = rxg_med[i]; - PHY_vars_UE_g[0]->rx_gain_byp[i] = rxg_byp[i]; - } - - if ((mode == normal_txrx) || (mode == rx_calib_ue) || (mode == no_L2_connect) || (mode == debug_prach)) { - for (i=0; i<4; i++) { - PHY_vars_UE_g[0]->rx_gain_mode[i] = max_gain; - // frame_parms->rfmode[i] = rf_mode_max[i]; - rf_mode[i] = (rf_mode[i] & (~LNAGAINMASK)) | LNAMax; - } - PHY_vars_UE_g[0]->rx_total_gain_dB = PHY_vars_UE_g[0]->rx_gain_max[0] + rxgain[0] - 30; //-30 because it was calibrated with a 30dB gain - } - else if ((mode == rx_calib_ue_med)) { - for (i=0; i<4; i++) { - PHY_vars_UE_g[0]->rx_gain_mode[i] = med_gain; - // frame_parms->rfmode[i] = rf_mode_med[i]; - rf_mode[i] = (rf_mode[i] & (~LNAGAINMASK)) | LNAMed; - } - PHY_vars_UE_g[0]->rx_total_gain_dB = PHY_vars_UE_g[0]->rx_gain_med[0] + rxgain[0] - 30; //-30 because it was calibrated with a 30dB gain; - } - else if ((mode == rx_calib_ue_byp)) { - for (i=0; i<4; i++) { - PHY_vars_UE_g[0]->rx_gain_mode[i] = byp_gain; - // frame_parms->rfmode[i] = rf_mode_byp[i]; - rf_mode[i] = (rf_mode[i] & (~LNAGAINMASK)) | LNAByp; - } - PHY_vars_UE_g[0]->rx_total_gain_dB = PHY_vars_UE_g[0]->rx_gain_byp[0] + rxgain[0] - 30; //-30 because it was calibrated with a 30dB gain; - } - - PHY_vars_UE_g[0]->tx_power_max_dBm = tx_max_power; - - printf("tx_max_power = %d -> amp %d\n",tx_max_power,get_tx_amp(tx_max_power,tx_max_power)); - } - else { //this is eNB -#ifdef OPENAIR2 - g_log->log_component[PHY].level = LOG_INFO; -#else - g_log->log_component[PHY].level = LOG_INFO; -#endif - g_log->log_component[PHY].flag = LOG_HIGH; - - g_log->log_component[MAC].level = LOG_INFO; - g_log->log_component[MAC].flag = LOG_HIGH; - g_log->log_component[RLC].level = LOG_INFO; - g_log->log_component[RLC].flag = LOG_HIGH; - g_log->log_component[PDCP].level = LOG_INFO; - g_log->log_component[PDCP].flag = LOG_HIGH; - g_log->log_component[OTG].level = LOG_INFO; - g_log->log_component[OTG].flag = LOG_HIGH; - g_log->log_component[RRC].level = LOG_INFO; - g_log->log_component[RRC].flag = LOG_HIGH; - - - PHY_vars_eNB_g = malloc(sizeof(PHY_VARS_eNB*)); - PHY_vars_eNB_g[0] = init_lte_eNB(frame_parms,eNB_id,Nid_cell,cooperation_flag,transmission_mode,abstraction_flag); - -#ifndef OPENAIR2 - for (i=0;ipusch_config_dedicated[i].betaOffset_ACK_Index = beta_ACK; - PHY_vars_eNB_g[0]->pusch_config_dedicated[i].betaOffset_RI_Index = beta_RI; - PHY_vars_eNB_g[0]->pusch_config_dedicated[i].betaOffset_CQI_Index = beta_CQI; - - PHY_vars_eNB_g[0]->scheduling_request_config[i].sr_PUCCH_ResourceIndex = i; - PHY_vars_eNB_g[0]->scheduling_request_config[i].sr_ConfigIndex = 7+(i%3); - PHY_vars_eNB_g[0]->scheduling_request_config[i].dsr_TransMax = sr_n4; - } -#endif - - compute_prach_seq(&PHY_vars_eNB_g[0]->lte_frame_parms.prach_config_common, - PHY_vars_eNB_g[0]->lte_frame_parms.frame_type, - PHY_vars_eNB_g[0]->X_u); - - NB_eNB_INST=1; - NB_INST=1; - - openair_daq_vars.ue_dl_rb_alloc=0x1fff; - openair_daq_vars.target_ue_dl_mcs=20; - openair_daq_vars.ue_ul_nb_rb=6; - openair_daq_vars.target_ue_ul_mcs=9; - - // if AGC is off, the following values will be used - // for (i=0;i<4;i++) - // rxgain[i]=30; - rxgain[0] = 20; - rxgain[1] = 20; - rxgain[2] = 20; - rxgain[3] = 20; - - - // set eNB to max gain - PHY_vars_eNB_g[0]->rx_total_gain_eNB_dB = rxg_max[0] + rxgain[0] - 30; //was measured at rxgain=30; - for (i=0; i<4; i++) { - // frame_parms->rfmode[i] = rf_mode_max[i]; - rf_mode[i] = (rf_mode[i] & (~LNAGAINMASK)) | LNAMax; - } - - - } - - dump_frame_parms(frame_parms); - - mac_xface = malloc(sizeof(MAC_xface)); - -#ifdef OPENAIR2 - int eMBMS_active=0; - - //print [MAC][I]... messages - //l2_init(frame_parms,eMBMS_active); - l2_init(frame_parms,eMBMS_active, - 0); // cba_group_active - if (UE_flag == 1) - mac_xface->dl_phy_sync_success (0, 0, 0, 1); - else - mac_xface->mrbch_phy_sync_failure (0, 0, 0); -#endif - - mac_xface->macphy_exit = &exit_fun; - -#ifdef OPENAIR2 - //if (otg_enabled) { - init_all_otg(0); - g_otg->seed = 0; - init_seeds(g_otg->seed); - g_otg->num_nodes = 2; - for (i=0; inum_nodes; i++){ - for (j=0; jnum_nodes; j++){ - g_otg->application_idx[i][j] = 1; - //g_otg->packet_gen_type=SUBSTRACT_STRING; - g_otg->aggregation_level[i][j][0]=1; - g_otg->application_type[i][j][0] = BCBR; //MCBR, BCBR - } - } - init_predef_traffic(); - - //USRP INIT - UHD_init(); - UHD_init_display(); - Init_send(); - Init_recv(); - printf("USRP init DONE...\n"); - // } -#endif - // connect the TX/RX buffers - if (UE_flag==1) { - setup_ue_buffers(PHY_vars_UE_g[0],frame_parms,0); - printf("Setting UE buffer to all-RX\n"); - } - else { - setup_eNB_buffers(PHY_vars_eNB_g[0],frame_parms,0); - if (fs4_test==0) - { - printf("Setting eNB buffer to all-RX\n"); - } - else { - printf("Setting eNB buffer to fs/4 test signal\n"); - for (j=0; jlte_frame_parms.samples_per_tti*10; j+=4) - for (aa=0; aanb_antennas_tx; aa++) - { - amp = 0x8000; - ((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+1] = 0; - ((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+3] = amp-1; - ((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+5] = 0; - ((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+7] = amp; - ((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j] = amp-1; - ((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+2] = 0; - ((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+4] = amp; - ((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+6] = 0; - } - } - } - - //rt_sleep_ns(10*FRAME_PERIOD);//delay one second - -#ifndef RTAI - pthread_attr_init (&attr_dlsch_threads); - pthread_attr_setstacksize(&attr_dlsch_threads,OPENAIR_THREAD_STACK_SIZE); - //attr_dlsch_threads.priority = 1; - sched_param_dlsch.sched_priority = sched_get_priority_max(SCHED_FIFO); //OPENAIR_THREAD_PRIORITY; - pthread_attr_setschedparam (&attr_dlsch_threads, &sched_param_dlsch); - pthread_attr_setschedpolicy (&attr_dlsch_threads, SCHED_FIFO); -#endif - - // start the main thread - if (UE_flag == 1) { -#ifdef RTAI - thread1 = rt_thread_create(UE_thread, NULL, 100000000); - thread_recv = rt_thread_create(recv_all, NULL, 100000000); -#else - error_code = pthread_create(&thread1, &attr_dlsch_threads, UE_thread, NULL); - if (error_code!= 0) { - LOG_D(HW,"[lte-softmodem.c] Could not allocate UE_thread, error %d\n",error_code); - return(error_code); - } - else { - LOG_D(HW,"[lte-softmodem.c] Allocate UE_thread successful\n"); - } - pthread_create(&thread_recv, NULL, recv_all, NULL); -#endif -#ifdef DLSCH_THREAD//defined - init_rx_pdsch_thread(); - //rt_sleep_ns(FRAME_PERIOD/10); - init_dlsch_threads(); -#endif - } - else { -#ifdef RTAI - thread0 = rt_thread_create(eNB_thread, NULL, 100000000); - thread_recv = rt_thread_create(recv_all, NULL, 100000000); -#else - error_code = pthread_create(&thread0, &attr_dlsch_threads, eNB_thread, NULL); - if (error_code!= 0) { - LOG_D(HW,"[lte-softmodem.c] Could not allocate eNB_thread, error %d\n",error_code); - return(error_code); - } - else { - LOG_D(HW,"[lte-softmodem.c] Allocate eNB_thread successful\n"); - } - pthread_create(&thread_recv, NULL, recv_all, NULL); -#endif -#ifdef ULSCH_THREAD//not defined - init_ulsch_threads(); -#endif - } - pthread_create(&thread_tx_error, NULL, tx_error_handler, NULL); - - // wait for end of program - usleep(500); - printf("TYPE TO TERMINATE\n"); - signal(SIGINT, &sig_int_handler); - - getchar(); - oai_exit=1; - - // cleanup - pthread_join(thread_tx_error,&status); - - if (UE_flag == 1) { -#ifdef RTAI - rt_thread_join(thread1); - rt_thread_join(thread_recv); -#else - pthread_join(thread1,&status); - pthread_join(thread_recv,&status); -#endif -#ifdef DLSCH_THREAD - printf("waiting for DLSCH_THREAD thread\n"); - cleanup_dlsch_threads(); - cleanup_rx_pdsch_thread(); -#endif - } - else { -#ifdef RTAI - rt_thread_join(thread0); - rt_thread_join(thread_recv); -#else - pthread_join(thread0,&status); - pthread_join(thread_recv,&status); -#endif -#ifdef ULSCH_THREAD - printf("waiting for ULSCH_THREAD thread\n"); - cleanup_ulsch_threads(); -#endif - } - - - logClean(); - - printf("Program Done!\n"); - return 0; -} - -void test_config(int card, int ant, unsigned int rf_mode, int UE_flag) -{ - p_exmimo_config->framing.eNB_flag = !UE_flag; - p_exmimo_config->framing.tdd_config = 0; - p_exmimo_config->framing.resampling_factor = 2; - - p_exmimo_config->rf.rf_freq_rx[ant] = 1907600000; - p_exmimo_config->rf.rf_freq_tx[ant] = 1907600000;; - p_exmimo_config->rf.rx_gain[ant][0] = 20; - p_exmimo_config->rf.tx_gain[ant][0] = 10; - p_exmimo_config->rf.rf_mode[ant] = rf_mode; - - p_exmimo_config->rf.rf_local[ant] = build_rflocal(20,25,26,04); - p_exmimo_config->rf.rf_rxdc[ant] = build_rfdc(128, 128); - p_exmimo_config->rf.rf_vcocal[ant] = (0xE<<6) + 0xE; -} - -void setup_ue_buffers(PHY_VARS_UE *phy_vars_ue, LTE_DL_FRAME_PARMS *frame_parms, int carrier) { - - int i; - if (phy_vars_ue) { - - if ((frame_parms->nb_antennas_rx>1) && (carrier>0)) { - printf("RX antennas > 1 and carrier > 0 not possible\n"); - exit(-1); - } - - if ((frame_parms->nb_antennas_tx>1) && (carrier>0)) { - printf("TX antennas > 1 and carrier > 0 not possible\n"); - exit(-1); - } - - // replace RX signal buffers with mmaped HW versions - for (i=0;inb_antennas_rx;i++) { - free(phy_vars_ue->lte_ue_common_vars.rxdata[i]); - phy_vars_ue->lte_ue_common_vars.rxdata[i] = (s32*) oai_rx_buff; - printf("rxdata[%d] @ %p\n",i,phy_vars_ue->lte_ue_common_vars.rxdata[i]); - } - for (i=0;inb_antennas_tx;i++) { - free(phy_vars_ue->lte_ue_common_vars.txdata[i]); - phy_vars_ue->lte_ue_common_vars.txdata[i] = (s32*) oai_tx_buff; - printf("txdata[%d] @ %p\n",i,phy_vars_ue->lte_ue_common_vars.txdata[i]); - } - } -} -void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB, LTE_DL_FRAME_PARMS *frame_parms, int carrier) { - - int i; - if (phy_vars_eNB) { - if ((frame_parms->nb_antennas_rx>1) && (carrier>0)) { - printf("RX antennas > 1 and carrier > 0 not possible\n"); - exit(-1); - } - - if ((frame_parms->nb_antennas_tx>1) && (carrier>0)) { - printf("TX antennas > 1 and carrier > 0 not possible\n"); - exit(-1); - } - - // replace RX signal buffers with mmaped HW versions - for (i=0;inb_antennas_rx;i++) { - free(phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i]); - phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i] = (s32 *) oai_rx_buff; - printf("rxdata[%d] @ %p\n",i,phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i]); - /* for (j=0;j<16;j++) { - printf("rxbuffer %d: %x\n",j,phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i][j]); - phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i][j] = 16-j; - }*/ - } - for (i=0;inb_antennas_tx;i++) { - free(phy_vars_eNB->lte_eNB_common_vars.txdata[0][i]); - phy_vars_eNB->lte_eNB_common_vars.txdata[0][i] = (s32 *) oai_tx_buff; - printf("txdata[%d] @ %p\n",i,phy_vars_eNB->lte_eNB_common_vars.txdata[0][i]); - /* for (j=0;j<16;j++) { - printf("txbuffer %d: %x\n",j,phy_vars_eNB->lte_eNB_common_vars.txdata[0][i][j]); - phy_vars_eNB->lte_eNB_common_vars.txdata[0][i][j] = 16-j; - }*/ - } - } -} diff --git a/targets/ARCH/USRP/USERSPACE/LIB/openair_usrp.cpp b/targets/ARCH/USRP/USERSPACE/LIB/openair_usrp.cpp deleted file mode 100644 index 678824d3e9..0000000000 --- a/targets/ARCH/USRP/USERSPACE/LIB/openair_usrp.cpp +++ /dev/null @@ -1,365 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "def.h" - -using namespace std; -using std::ofstream; -using std::ifstream; - -// -------------------------------- -// contant variables -// -------------------------------- -#define PI 3.1415926535898 -#define SAM_RATE 6.25e6 // 6.25e6 = 100e6/16 -#define DL_FREQ 880e6 -#define UL_FREQ 835e6 - -// -------------------------------- -// variables for USRP configuration -// -------------------------------- -uhd::usrp::multi_usrp::sptr tx_usrp; -uhd::usrp::multi_usrp::sptr rx_usrp; - -//create a send streamer and a receive streamer -uhd::stream_args_t stream_args_short("sc16");//complex short -uhd::stream_args_t stream_args_float("fc32");//complex float -uhd::tx_streamer::sptr tx_stream; -uhd::rx_streamer::sptr rx_stream; - -uhd::tx_metadata_t tx_md; -uhd::rx_metadata_t rx_md; - -//setup variables and allocate buffer -uhd::async_metadata_t async_md; - -double tx_timeout; -double rx_timeout; - -double rx_freq; - -uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS); - -// -------------------------------- -// variables for OAI buffers -// -------------------------------- -int oai_tx_buff[SAMPLES_PER_FRM]; -int oai_rx_buff[SAMPLES_PER_FRM]; -int oai_rx_buff_temp[SAMPLES_PER_FRM]; -volatile unsigned long long tx_timestamp,rx_timestamp,clock_usrp,tmp_clock; -volatile int w_pos_usrp_rcv = 0; // value range [0:76800-1] -volatile int r_pos_usrp_send = 0; // value range [0:76800-1] -volatile int w_slot_usrp_rcv, r_slot_usrp_send; // slot index for USRP thread. value range [0:19] -volatile int r_slot_idx, t_slot_idx; // slot index for eNB thread. value range [0;19] -volatile int send_slot_missed = 0; - -// -------------------------------- -// Debug and output control -// -------------------------------- -int g_usrp_debug=0; -int num_underflows=0; -int num_overflows=0; -int num_seq_errors=0; - - -extern "C" -{ - void UHD_init(void); - void UHD_init_display(void); - void Init_send(void); - void Init_recv(void); - void send_data(int hw_frm_head_pos); - void recv_data(int hw_frm_head_pos); - void send_end(void); - void set_freq(int freq_offset); - char UE_flag; - void tx_errorcode_handler(void); - void sig_int_handler(void); -} - -// -------------------------------- -// USRP initial -// -------------------------------- -void UHD_init(void) -{ - uhd::set_thread_priority_safe(); - std::string args = "send_frame_size=3840,recv_frame_size=3840"; - uhd::device_addrs_t device_addr = uhd::device::find(args); - if (device_addr.size() == 0 ) - { - std::cerr<<"No USRP Device Found"<get_tx_stream(stream_args_short); - rx_stream = rx_usrp->get_rx_stream(stream_args_short); - - //Lock mboard clocks - tx_usrp->set_clock_source("internal"); - rx_usrp->set_clock_source("internal"); - - tx_usrp->set_tx_rate(SAM_RATE); - if(UE_flag) - tx_usrp->set_tx_freq(UL_FREQ); - else - tx_usrp->set_tx_freq(DL_FREQ); - tx_usrp->set_tx_gain(0); - tx_usrp->set_tx_bandwidth(25e6); - tx_usrp->set_tx_antenna("TX/RX"); - - rx_usrp->set_rx_rate(SAM_RATE); - if(UE_flag) - { - rx_usrp->set_rx_freq(DL_FREQ); - rx_freq = DL_FREQ; - } - else - { - rx_usrp->set_rx_freq(UL_FREQ); - rx_freq = UL_FREQ; - } - rx_usrp->set_rx_gain(0); - rx_usrp->set_rx_bandwidth(25e6); - rx_usrp->set_rx_antenna("RX2"); - - std::cout <set_time_now(uhd::time_spec_t(0.0)); - rx_usrp->set_time_now(uhd::time_spec_t(0.0)); -} - -// -------------------------------- -// USRP information display -// -------------------------------- -void UHD_init_display(void) -{ - std::cout << std::endl<get_tx_rate()/1e6) << std::endl; - std::cout << boost::format("Actual RX sample rate: %fMSps...") % (rx_usrp->get_rx_rate()/1e6) << std::endl; - - std::cout << boost::format("Actual TX frequency: %fGHz...") % (tx_usrp->get_tx_freq()/1e9) << std::endl; - std::cout << boost::format("Actual RX frequency: %fGHz...") % (rx_usrp->get_rx_freq()/1e9) << std::endl; - - std::cout << boost::format("Actual TX gain: %f...") % (tx_usrp->get_tx_gain()) << std::endl; - std::cout << boost::format("Actual RX gain: %f...") % (rx_usrp->get_rx_gain()) << std::endl; - - std::cout << boost::format("Actual TX bandwidth: %fM...") % (tx_usrp->get_tx_bandwidth()/1e6) << std::endl; - std::cout << boost::format("Actual RX bandwidth: %fM...") % (rx_usrp->get_rx_bandwidth()/1e6) << std::endl; - - std::cout << boost::format("Actual TX antenna: %s...") % (tx_usrp->get_tx_antenna()) << std::endl; - std::cout << boost::format("Actual RX antenna: %s...") % (rx_usrp->get_rx_antenna()) << std::endl; - - std::cout << boost::format("Device TX timestamp: %f...") % (tx_usrp->get_time_now().get_real_secs()) << std::endl; - std::cout << boost::format("Device RX timestamp: %f...") % (rx_usrp->get_time_now().get_real_secs()) << std::endl << std::endl; -} - -// ----------------------- -//send init -// ----------------------- -void Init_send(void) -{ - //reset send buffer - memset(oai_tx_buff , 0 , sizeof(oai_tx_buff)); - - // the first slot sent shoud be the 0+N_slot_offset. - r_slot_usrp_send = N_slot_offset; - //send constantly - tx_md.start_of_burst = false; - tx_md.end_of_burst = false; - tx_md.has_time_spec = true; // set the transmission start time - tx_timestamp = T_start + r_slot_usrp_send * SAMPLES_PER_SLOT; - tx_md.time_spec = uhd::time_spec_t::from_ticks(tx_timestamp,SAM_RATE); - tx_timeout = tx_timestamp/SAM_RATE + 0.1; -} - -// ----------------------- -//receive init -// ----------------------- -void Init_recv(void) -{ - //reset receive buffer - memset(oai_rx_buff , 0 , sizeof(oai_rx_buff)); - - // initialize the rx stream - stream_cmd.stream_now = false;//When true, the device will begin streaming ASAP. When false, the device will begin streaming at a time specified by time_spec. - stream_cmd.num_samps = 0; - rx_timestamp = T_start + HW_offset;//Device timestamp and time of send sample - stream_cmd.time_spec = uhd::time_spec_t::from_ticks(rx_timestamp,SAM_RATE); - rx_usrp->issue_stream_cmd(stream_cmd); - - //the first call to recv() will block this many seconds before receiving - rx_timeout = rx_timestamp/SAM_RATE + 0.1; //timeout (delay before receive + padding) - - // the first clock number = rx_timestamp - clock_usrp = rx_timestamp; - w_pos_usrp_rcv = 0; - w_slot_usrp_rcv = 19; -} - -// ----------------------- -// send function -// ----------------------- -void send_data(int hw_frm_head_pos) -{ - - int diff; - // Handle the frame wrap-arround - if ((r_slot_usrp_send<4)&&(t_slot_idx>=16)){ - diff = t_slot_idx - (r_slot_usrp_send + 20) ; - } - else if((r_slot_usrp_send>=16)&&(t_slot_idx<4)){ - diff = (t_slot_idx + 20) - r_slot_usrp_send; - } - else{ - diff = t_slot_idx - r_slot_usrp_send; - } - format_printf(g_usrp_debug, "[send] diff: %d\n",diff); - if (diff<0){} // data is not ready for sending - else if (diff>1) // sending is late - { - format_printf(g_usrp_debug, "Sending is late\n"); - r_slot_usrp_send = t_slot_idx; - // count the missed sending slots - send_slot_missed += (diff - 1); - } - else // diff = 0,1 Send the data, one or two slots - { - for (int ii=0;iisend((& oai_tx_buff[r_pos_usrp_send]),SAMPLES_PER_SLOT, tx_md, tx_timeout); - } - else - { - int tmp_len = SAMPLES_PER_FRM - r_pos_usrp_send; - num_tx_samps = tx_stream->send((& oai_tx_buff[r_pos_usrp_send]),tmp_len, tx_md, tx_timeout); - num_tx_samps = tx_stream->send((& oai_tx_buff[0]),SAMPLES_PER_SLOT - tmp_len, tx_md, tx_timeout); - } - - tx_md.has_time_spec = false; - - tx_timeout = 0.1; - - r_slot_usrp_send++; - if(r_slot_usrp_send==20) r_slot_usrp_send=0; - - } - } -} - -// -------------------------------- -// handle TX error codes -// -------------------------------- -void tx_errorcode_handler(void){ - if (not tx_stream->recv_async_msg(async_md)) {} - else{ - switch(async_md.event_code){ - case uhd::async_metadata_t::EVENT_CODE_BURST_ACK: - return; - case uhd::async_metadata_t::EVENT_CODE_UNDERFLOW: - format_printf(g_usrp_debug,"[send] USRP TX UNDERFLOW!\n"); - num_underflows++; - break; - case uhd::async_metadata_t::EVENT_CODE_UNDERFLOW_IN_PACKET: - format_printf(g_usrp_debug,"[send] USRP TX UNDERFLOW IN_PACKET!\n"); - break; - case uhd::async_metadata_t::EVENT_CODE_SEQ_ERROR: - case uhd::async_metadata_t::EVENT_CODE_SEQ_ERROR_IN_BURST: - num_seq_errors++; - break; - default: - //std::cerr << "Event code: " << async_md.event_code << std::endl; - //std::cerr << "Unexpected event on async recv, continuing..." << std::endl; - break; - } - } -} -// ----------------------- -// send end of burst -// ----------------------- -void send_end() -{ - //send a mini EOB packet - tx_md.end_of_burst = true; - tx_stream->send("", 0, tx_md); - tx_md.end_of_burst = false; - format_printf(1,"num_underflows: %d num_overflows: %d num_seq_errors: %d\n",num_underflows,num_overflows,num_seq_errors); -} - -// ----------------------- -// receive function -// ----------------------- -void recv_data(int hw_frm_head_pos) -{ - size_t num_rx_samps; - - //volatile unsigned long long tmp_clock; - num_rx_samps = rx_stream->recv((&oai_rx_buff_temp[0]), SAMPLES_PER_SLOT,rx_md,rx_timeout); - - //after the first receiving, reset the timeout value - rx_timeout = 0.1; - tmp_clock = rx_md.time_spec.to_ticks(SAM_RATE); - - // Update writing position - w_pos_usrp_rcv = (w_pos_usrp_rcv + (int)(tmp_clock - clock_usrp))%SAMPLES_PER_FRM; - - // Copy data into the PHY layer buffer - if((w_pos_usrp_rcv+num_rx_samps) <= SAMPLES_PER_FRM){ - memcpy(& oai_rx_buff[w_pos_usrp_rcv],& oai_rx_buff_temp[0],num_rx_samps*sizeof(int)); - } - else{ - int tmp_len = SAMPLES_PER_FRM - w_pos_usrp_rcv; - memcpy(& oai_rx_buff[w_pos_usrp_rcv],& oai_rx_buff_temp[0],tmp_len*sizeof(int)); - memcpy(& oai_rx_buff[0],& oai_rx_buff_temp[tmp_len],(num_rx_samps-tmp_len)*sizeof(int)); - } - - w_slot_usrp_rcv = (w_pos_usrp_rcv - hw_frm_head_pos + num_rx_samps - SAMPLES_PER_SLOT)%SAMPLES_PER_FRM / SAMPLES_PER_SLOT; - - // update clock - clock_usrp = tmp_clock; - - // show log - format_printf(g_usrp_debug,"[recv] w_pos: %d num_rx_samps=%d clock_usrp=%llu w_usrp: %d\n",w_pos_usrp_rcv,num_rx_samps,clock_usrp,w_slot_usrp_rcv); - - //handle the error code - switch(rx_md.error_code){ - case uhd::rx_metadata_t::ERROR_CODE_NONE: - break; - case uhd::rx_metadata_t::ERROR_CODE_OVERFLOW: - format_printf(g_usrp_debug,"[recv] USRP RX OVERFLOW!\n"); - num_overflows++; - break; - case uhd::rx_metadata_t::ERROR_CODE_TIMEOUT: - format_printf(g_usrp_debug, "[recv] USRP RX TIMEOUT!\n"); - break; - default: - format_printf(g_usrp_debug, "[recv] Unexpected error on RX, Error code: 0x%x\n",rx_md.error_code); - break; - } -} - -// ----------------------- -// set RX frequency in UE -// ----------------------- -void set_freq(int freq_offset) -{ - rx_usrp->set_rx_freq(rx_freq + freq_offset); -} diff --git a/targets/ARCH/USRP/USERSPACE/LIB/openair_usrp_tmp.cpp b/targets/ARCH/USRP/USERSPACE/LIB/openair_usrp_tmp.cpp deleted file mode 100644 index 6b7a58a30a..0000000000 --- a/targets/ARCH/USRP/USERSPACE/LIB/openair_usrp_tmp.cpp +++ /dev/null @@ -1,436 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "def.h" - -// -------------------------------- -// headers for polyphaseResample -// -------------------------------- -#include "polyphaseResample.h" -#include "coeff_3072_to_25.h" -#include "coeff_25_to_3072.h" - -using namespace std; -using std::ofstream; -using std::ifstream; - -// -------------------------------- -// contant variables -// -------------------------------- -#define PI 3.1415926535898 -#define SAM_RATE 6.25e6 // 6.25e6 = 100e6/16 -#define DL_FREQ 880e6 -#define UL_FREQ 835e6 - -// -------------------------------- -// variables for polyphaseResample -// -------------------------------- -const int OUTRATE = 625; -const int INRATE = 768; -int *g_branch_table; -int *g_offset_table; -short Rx_history[625*2]; -short Tx_history[768*2]; - -// -------------------------------- -// variables for USRP configuration -// -------------------------------- -uhd::usrp::multi_usrp::sptr tx_usrp; -uhd::usrp::multi_usrp::sptr rx_usrp; - -//create a send streamer and a receive streamer -uhd::stream_args_t stream_args_short("sc16");//complex short -uhd::stream_args_t stream_args_float("fc32");//complex float -uhd::tx_streamer::sptr tx_stream; -uhd::rx_streamer::sptr rx_stream; - -uhd::tx_metadata_t tx_md; -uhd::rx_metadata_t rx_md; - -//setup variables and allocate buffer -uhd::async_metadata_t async_md; - -double tx_timeout; -double rx_timeout; - -double rx_freq; - -uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS); - -// -------------------------------- -// variables for OAI buffers -// -------------------------------- -int oai_tx_buff[SAMPLES_PER_FRM]; -int oai_rx_buff[SAMPLES_PER_FRM]; -int oai_rx_buff_temp[SAMPLES_PER_FRM_USRP]; -int oai_tx_buff_temp[SAMPLES_PER_FRM_USRP]; -volatile unsigned long long tx_timestamp,rx_timestamp,clock_usrp,tmp_clock; -volatile int w_pos_usrp_rcv = 0; // value range [0:76800-1] -volatile int r_pos_usrp_send = 0; // value range [0:76800-1] -volatile int w_slot_usrp_rcv, r_slot_usrp_send; // slot index for USRP thread. value range [0:19] -volatile int r_slot_idx, t_slot_idx; // slot index for eNB thread. value range [0;19] -volatile int send_slot_missed = 0; - -// -------------------------------- -// Debug and output control -// -------------------------------- -int g_usrp_debug=0; -int num_underflows=0; -int num_overflows=0; -int num_seq_errors=0; - - -extern "C" -{ - void UHD_init(void); - void UHD_init_display(void); - void Init_send(void); - void Init_recv(void); - void send_data(int hw_slot_offset); - void recv_data(int hw_slot_offset); - void send_end(void); - void set_freq(int freq_offset); - char UE_flag; - void tx_errorcode_handler(void); - void sig_int_handler(void); -} -void Rx_resample(void); -void Tx_resample(void); - -// -------------------------------- -// USRP initial -// -------------------------------- -void UHD_init(void) -{ - uhd::set_thread_priority_safe(); - std::string args = "send_frame_size=3840,recv_frame_size=3840"; - uhd::device_addrs_t device_addr = uhd::device::find(args); - if (device_addr.size() == 0 ) - { - std::cerr<<"No USRP Device Found"<get_tx_stream(stream_args_short); - rx_stream = rx_usrp->get_rx_stream(stream_args_short); - - //Lock mboard clocks - tx_usrp->set_clock_source("internal"); - rx_usrp->set_clock_source("internal"); - - tx_usrp->set_tx_rate(SAM_RATE); - if(UE_flag) - tx_usrp->set_tx_freq(UL_FREQ); - else - tx_usrp->set_tx_freq(DL_FREQ); - tx_usrp->set_tx_gain(0); - tx_usrp->set_tx_bandwidth(25e6); - tx_usrp->set_tx_antenna("TX/RX"); - - rx_usrp->set_rx_rate(SAM_RATE); - if(UE_flag) - { - rx_usrp->set_rx_freq(DL_FREQ); - rx_freq = DL_FREQ; - } - else - { - rx_usrp->set_rx_freq(UL_FREQ); - rx_freq = UL_FREQ; - } - rx_usrp->set_rx_gain(0); - rx_usrp->set_rx_bandwidth(25e6); - rx_usrp->set_rx_antenna("RX2"); - - std::cout <set_time_now(uhd::time_spec_t(0.0)); - rx_usrp->set_time_now(uhd::time_spec_t(0.0)); -} - -// -------------------------------- -// USRP information display -// -------------------------------- -void UHD_init_display(void) -{ - std::cout << std::endl<get_tx_rate()/1e6) << std::endl; - std::cout << boost::format("Actual RX sample rate: %fMSps...") % (rx_usrp->get_rx_rate()/1e6) << std::endl; - - std::cout << boost::format("Actual TX frequency: %fGHz...") % (tx_usrp->get_tx_freq()/1e9) << std::endl; - std::cout << boost::format("Actual RX frequency: %fGHz...") % (rx_usrp->get_rx_freq()/1e9) << std::endl; - - std::cout << boost::format("Actual TX gain: %f...") % (tx_usrp->get_tx_gain()) << std::endl; - std::cout << boost::format("Actual RX gain: %f...") % (rx_usrp->get_rx_gain()) << std::endl; - - std::cout << boost::format("Actual TX bandwidth: %fM...") % (tx_usrp->get_tx_bandwidth()/1e6) << std::endl; - std::cout << boost::format("Actual RX bandwidth: %fM...") % (rx_usrp->get_rx_bandwidth()/1e6) << std::endl; - - std::cout << boost::format("Actual TX antenna: %s...") % (tx_usrp->get_tx_antenna()) << std::endl; - std::cout << boost::format("Actual RX antenna: %s...") % (rx_usrp->get_rx_antenna()) << std::endl; - - std::cout << boost::format("Device TX timestamp: %f...") % (tx_usrp->get_time_now().get_real_secs()) << std::endl; - std::cout << boost::format("Device RX timestamp: %f...") % (rx_usrp->get_time_now().get_real_secs()) << std::endl << std::endl; -} - -// ----------------------- -//send init -// ----------------------- -void Init_send(void) -{ - //reset send buffer - memset(oai_tx_buff , 0 , sizeof(oai_tx_buff)); - - //reset Tx_history - memset(Tx_history, 0, sizeof(Tx_history)); - - // the first slot sent shoud be the 0+N_slot_offset. - r_slot_usrp_send = N_slot_offset; - //send constantly - tx_md.start_of_burst = false; - tx_md.end_of_burst = false; - tx_md.has_time_spec = true; - tx_timestamp = T_start + r_slot_usrp_send * SAMPLES_PER_SLOT; - tx_md.time_spec = uhd::time_spec_t::from_ticks(tx_timestamp,SAM_RATE); - tx_timeout = tx_timestamp/SAM_RATE + 0.1; -} - -// ----------------------- -//receive init -// ----------------------- -void Init_recv(void) -{ - //reset receive buffer - memset(oai_rx_buff , 0 , sizeof(oai_rx_buff)); - - //reset Rx_history - memset(Rx_history, 0, sizeof(Rx_history)); - - // initialize the rx stream - stream_cmd.stream_now = false;//When true, the device will begin streaming ASAP. When false, the device will begin streaming at a time specified by time_spec. - stream_cmd.num_samps = 0; - rx_timestamp = T_start + HW_offset;//Device timestamp and time of send sample - stream_cmd.time_spec = uhd::time_spec_t::from_ticks(rx_timestamp,SAM_RATE); - rx_usrp->issue_stream_cmd(stream_cmd); - - //the first call to recv() will block this many seconds before receiving - rx_timeout = rx_timestamp/SAM_RATE + 0.1; //timeout (delay before receive + padding) - - // the first clock number = rx_timestamp - clock_usrp = rx_timestamp; - w_pos_usrp_rcv = 0; - w_slot_usrp_rcv = 19; -} - -// ----------------------- -// send function -// ----------------------- -void send_data(int hw_slot_offset) -{ - - int diff; - // Handle the frame wrap-arround - if ((r_slot_usrp_send<4)&&(t_slot_idx>=16)){ - diff = t_slot_idx - (r_slot_usrp_send + 20) ; - } - else if((r_slot_usrp_send>=16)&&(t_slot_idx<4)){ - diff = (t_slot_idx + 20) - r_slot_usrp_send; - } - else{ - diff = t_slot_idx - r_slot_usrp_send; - } - format_printf(g_usrp_debug, "[send] diff: %d\n",diff); - if (diff<0){} - else if (diff>1) - { - format_printf(g_usrp_debug, "Sending is late\n"); - r_slot_usrp_send = t_slot_idx; - // count the missed sending slots - send_slot_missed += (diff - 1); - } - else // diff = 0,1 - { - for (int ii=0;iisend((& oai_tx_buff[r_pos_usrp_send]), SAMPLES_PER_SLOT_USRP, tx_md, tx_timeout); - } - else - { - int tmp_len = SAMPLES_PER_FRM - r_pos_usrp_send; - //num_tx_samps = tx_stream->send((& oai_tx_buff[r_pos_usrp_send]), tmp_len, tx_md, tx_timeout); - memcpy((& oai_tx_buff_temp[0]) , (& oai_tx_buff[r_pos_usrp_send]) , tmp_len*4 ); - //num_tx_samps = tx_stream->send((& oai_tx_buff[0]),SAMPLES_PER_SLOT_USRP - tmp_len, tx_md, tx_timeout); - memcpy((& oai_tx_buff_temp[tmp_len]) , (& oai_tx_buff[0]) , (SAMPLES_PER_SLOT - tmp_len)*4 ); - } - - num_tx_samps = tx_stream->send((& oai_tx_buff_temp[0]), SAMPLES_PER_SLOT_USRP, tx_md, tx_timeout); - - //without timestamp - tx_md.has_time_spec = false; - - tx_timeout = 0.1; - - r_slot_usrp_send++; - if(r_slot_usrp_send==20) r_slot_usrp_send=0; - - } - } -} - -// -------------------------------- -// handle TX error codes -// -------------------------------- -void tx_errorcode_handler(void){ - if (not tx_stream->recv_async_msg(async_md)) {} - else{ - switch(async_md.event_code){ - case uhd::async_metadata_t::EVENT_CODE_BURST_ACK: - return; - case uhd::async_metadata_t::EVENT_CODE_UNDERFLOW: - format_printf(g_usrp_debug,"[send] USRP TX UNDERFLOW!\n"); - num_underflows++; - break; - case uhd::async_metadata_t::EVENT_CODE_UNDERFLOW_IN_PACKET: - format_printf(g_usrp_debug,"[send] USRP TX UNDERFLOW IN_PACKET!\n"); - break; - case uhd::async_metadata_t::EVENT_CODE_SEQ_ERROR: - case uhd::async_metadata_t::EVENT_CODE_SEQ_ERROR_IN_BURST: - num_seq_errors++; - break; - default: - //std::cerr << "Event code: " << async_md.event_code << std::endl; - //std::cerr << "Unexpected event on async recv, continuing..." << std::endl; - break; - } - } -} -// ----------------------- -// send end of burst -// ----------------------- -void send_end() -{ - //send a mini EOB packet - tx_md.end_of_burst = true; - tx_stream->send("", 0, tx_md); - tx_md.end_of_burst = false; - format_printf(1,"num_underflows: %d num_overflows: %d num_seq_errors: %d\n",num_underflows,num_overflows,num_seq_errors); -} - -// ----------------------- -// receive function -// ----------------------- -void recv_data(int hw_slot_offset) -{ - size_t num_rx_samps; - - //volatile unsigned long long tmp_clock; - num_rx_samps = rx_stream->recv((&oai_rx_buff_temp[0]), SAMPLES_PER_SLOT_USRP,rx_md,rx_timeout); - Rx_resample(); - - //after the first receiving, reset the timeout value - rx_timeout = 0.1; - tmp_clock = rx_md.time_spec.to_ticks(SAM_RATE); - - // Update writing position - w_pos_usrp_rcv = (w_pos_usrp_rcv + (int)(tmp_clock - clock_usrp))%SAMPLES_PER_FRM; - - // Copy data into the PHY layer buffer - if((w_pos_usrp_rcv+num_rx_samps) <= SAMPLES_PER_FRM){ - memcpy(& oai_rx_buff[w_pos_usrp_rcv],& oai_rx_buff_temp[0],num_rx_samps*sizeof(int)); - } - else{ - int tmp_len = SAMPLES_PER_FRM - w_pos_usrp_rcv; - memcpy(& oai_rx_buff[w_pos_usrp_rcv],& oai_rx_buff_temp[0],tmp_len*sizeof(int)); - memcpy(& oai_rx_buff[0],& oai_rx_buff_temp[tmp_len],(num_rx_samps-tmp_len)*sizeof(int)); - } - - w_slot_usrp_rcv = (w_pos_usrp_rcv - hw_slot_offset + num_rx_samps - SAMPLES_PER_SLOT)%SAMPLES_PER_FRM / SAMPLES_PER_SLOT; - - // update clock - clock_usrp = tmp_clock; - - // show log - format_printf(g_usrp_debug,"[recv] w_pos: %d num_rx_samps=%d clock_usrp=%llu w_usrp: %d\n",w_pos_usrp_rcv,num_rx_samps,clock_usrp,w_slot_usrp_rcv); - - //handle the error code - switch(rx_md.error_code){ - case uhd::rx_metadata_t::ERROR_CODE_NONE: - break; - case uhd::rx_metadata_t::ERROR_CODE_OVERFLOW: - format_printf(g_usrp_debug,"[recv] USRP RX OVERFLOW!\n"); - num_overflows++; - break; - case uhd::rx_metadata_t::ERROR_CODE_TIMEOUT: - format_printf(g_usrp_debug, "[recv] USRP RX TIMEOUT!\n"); - break; - default: - format_printf(g_usrp_debug, "[recv] Unexpected error on RX, Error code: 0x%x\n",rx_md.error_code); - break; - } -} - -// ----------------------- -// set RX frequency in UE -// ----------------------- -void set_freq(int freq_offset) -{ - rx_usrp->set_rx_freq(rx_freq + freq_offset); -} - -// ----------------------- -// Rx_resample -// ----------------------- -void Rx_resample(void) -{ - short Rx_data_in[6250+625*2]; - short Rx_data_out[7680+768*2]; - memset(Rx_data_in, 0, sizeof(Rx_data_in)); - memset(Rx_data_out, 0, sizeof(Rx_data_out)); - - memcpy(Rx_data_in, Rx_history, 625*4); - memcpy(Rx_data_in+625*2, & oai_rx_buff_temp[0], 3125*4); - - polyphaseResample(Rx_data_in, sizeof(Rx_data_in) / sizeof(short) / 2 ,Rx_data_out , sizeof(Rx_data_out) / sizeof(short) / 2 , coeff_25_to_3072, sizeof(coeff_25_to_3072) / sizeof(short), INRATE, OUTRATE, 13, g_branch_table, g_offset_table); - memcpy(& oai_rx_buff_temp[0], Rx_data_out+768*2, 3840*4); - memcpy(Rx_history, Rx_data_in+6250-625*2, 625*4); -} - -// ----------------------- -// Tx_resample -// ----------------------- -void Tx_resample(void) -{ - short Tx_data_out[6250+625*2]; - short Tx_data_in[7680+768*2]; - memset(Tx_data_in, 0, sizeof(Tx_data_in)); - memset(Tx_data_out, 0, sizeof(Tx_data_out)); - - memcpy(Tx_data_in, Tx_history, 768*4); - memcpy(Tx_data_in+768*2, & oai_tx_buff_temp[0], 3840*4); - - polyphaseResample(Tx_data_in, sizeof(Tx_data_in) / sizeof(short) / 2 ,Tx_data_out , sizeof(Tx_data_out) / sizeof(short) / 2 , coeff_3072_to_25, sizeof(coeff_3072_to_25) / sizeof(short) , OUTRATE, INRATE, 11, g_branch_table, g_offset_table); - memcpy((& oai_tx_buff_temp[0]) , Tx_data_out+625*2, 3125*4); - memcpy(Tx_history, Tx_data_in+7680-768*2, 768*4); -} diff --git a/targets/ARCH/USRP/USERSPACE/LIB/polyphaseResample.cpp b/targets/ARCH/USRP/USERSPACE/LIB/polyphaseResample.cpp deleted file mode 100644 index b06dc0c5cd..0000000000 --- a/targets/ARCH/USRP/USERSPACE/LIB/polyphaseResample.cpp +++ /dev/null @@ -1,61 +0,0 @@ -#include "polyphaseResample.h" -#include -#include -using namespace std; - -// table_len should be decied by the length of the filter output -// but a default value of 50000 is adequate for our app -void buildPolyphaseCache(const int P, const int Q, int *&branch_table, int *&offset_table, const int table_len) { - branch_table = new int[table_len]; - offset_table = new int[table_len]; - for (int i = 0; i < table_len; ++i) { - branch_table[i] = (i * Q) % P; - offset_table[i] = (i * Q - branch_table[i]) / P; - } -} - -void polyphaseResample(short *in_data, unsigned int in_sample_count, - short *out_data, unsigned int out_sample_count, - short *filter_coeff, unsigned int filter_len, - const int P, const int Q, const unsigned int fix_shift, - int *branch_table, int *offset_table) { - buildPolyphaseCache( P, Q, branch_table, offset_table, 50000); - // calculate the sample count of output - out_sample_count = (int)(in_sample_count * (float)P / (float)Q); - - short *output_ptr = out_data; - unsigned int output_ix = 0; - short const *input_end = in_data + in_sample_count * 2; - short const *output_end = out_data + out_sample_count * 2; - short const *filter_end = filter_coeff + filter_len; - while (output_ptr < output_end) - { - int output_branch = branch_table[output_ix]; - int input_offset = offset_table[output_ix]; - - short *input_ptr = in_data + 2 * input_offset; - short *filter_ptr = filter_coeff + output_branch; - - while (input_ptr >= input_end) { - input_ptr -= 2; - filter_ptr += P; - } - - int sum_real = 0, sum_imag = 0; - while ((input_ptr >= in_data) && (filter_ptr < filter_end)) { - sum_real += (int)(*input_ptr) * (int)(*filter_ptr); - sum_imag += (int)(*(input_ptr + 1)) * (int)(*filter_ptr); - input_ptr -= 2; - filter_ptr += P; - } - - *output_ptr = (short)(sum_real >> fix_shift); - *(output_ptr + 1) = (short)(sum_imag >> fix_shift); - - output_ptr += 2; - output_ix++; - } -} - - - diff --git a/targets/ARCH/USRP/USERSPACE/LIB/polyphaseResample.h b/targets/ARCH/USRP/USERSPACE/LIB/polyphaseResample.h deleted file mode 100644 index 3eb7985525..0000000000 --- a/targets/ARCH/USRP/USERSPACE/LIB/polyphaseResample.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef _POLYPHASERESAMPLE_H_ -#include -//#include "coeff_3072_to_25.h" - -void buildPolyphaseCache(const int P, const int Q, int *&branch_table, int *&offset_table, const int filter_len = 50000); - - -/** - * @brief polyphase resampler - * @param in_data input data, layout as [real,imag,real,imag...] - * @param in_sample_count count of input samples, i.e. a complex - * cosisting of two short int counts as one - * @param out_data output data, layout same as in_data - * @param out_sample_count sample count of result, as return - * @param filter_coeff filter with only real coeffcients - * @param filter_len count of coeffcients - * @param P order of upper sampling - * @param Q order of down sampling - **/ - -void polyphaseResample(short *in_data, unsigned int in_sample_count, - short *out_data, unsigned int out_sample_count, - short *filter_coeff, unsigned int filter_len, - const int P, const int Q, const unsigned int fix_shift, - int *branch_table, int *offset_table); -#endif \ No newline at end of file