Merge branch 'mossmann-master'

This commit is contained in:
Mike Davis
2016-08-29 06:38:13 +02:00
10 changed files with 233 additions and 599 deletions

View File

@ -1,415 +1,66 @@
ref;value;Field1;Field2;Field3;Field4;Field5;Field6;Field7;Field8 Item,Qty,Reference(s),Value,LibPart,Footprint,Datasheet,Description,Manufacturer,Part Number
C1;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 1,33,"C1, C3, C5, C7, C10, C11, C16, C19, C22, C24, C29, C30, C33, C34, C35, C36, C37, C38, C39, C40, C45, C47, C54, C55, C56, C57, C60, C63, C65, C66, C67, C115, C125",33pF,device:C,,,CAP CER 33PF 50V 5% NP0 0402,Murata,GRM1555C1H330JA01D
C2;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;; 2,3,"C97, C98, C100",330nF,device:C,,,CAP CER 0.33UF 10V 10% X5R 0402,Murata,GRM155R61A334KE15D
C3;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 3,12,"C8, C21, C32, C43, C48, C51, C84, C85, C86, C94, C99, C102",22pF,device:C,,,CAP CER 22PF 50V 5% NP0 0402,Murata,GRM1555C1H220JA01D
C4;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;; 4,2,"C104, C111",3pF,device:C,,,CAP CER 3PF 50V NP0 0402,Murata,GRM1555C1H3R0CA01D
C5;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 5,6,"C105, C126, C127, C143, C145, C146",10uF,device:C,,,CAP CER 10UF 10V 10% X5R 0805,Murata,GRM21BR61A106KE19L
C6;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;; 6,4,"C53, C106, C161, C171",1uF,device:C,,,CAP CER 1UF 10V 10% X5R 0402,Taiyo Yuden,LMK105BJ105KV-F
C7;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 7,2,"C15, C112",180pF,device:C,,,CAP CER 180PF 50V 5% NP0 0402,Murata,GRM1555C1H181JA01D
C8;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; 8,57,"C9, C17, C18, C20, C23, C25, C28, C31, C44, C46, C49, C50, C58, C59, C61, C62, C64, C71, C73, C75, C77, C79, C81, C83, C91, C113, C119, C120, C121, C122, C123, C128, C129, C130, C131, C132, C133, C134, C135, C136, C137, C138, C139, C140, C141, C142, C144, C147, C148, C149, C150, C151, C152, C153, C154, C166, C167",100nF,device:C,,,CAP CER 0.1UF 10V 10% X5R 0402,Murata,GRM155R61A104KA01D
C9;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; 9,1,C114,3.3nF,device:C,,,CAP CER 3300PF 50V 10% X7R 0402,Murata,GRM155R71H332KA01D
C10;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 10,3,"C26, C27, C116",47pF,device:C,,,CAP CER 47PF 50V 5% NP0 0402,Murata,GRM1555C1H470JA01D
C11;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 11,4,"C118, C157, C158, C164",18pF,device:C,,,CAP CER 18PF 50V 5% NP0 0402,Murata,GRM1555C1H180JA01D
C12;330pF;Murata;GRM155R71H331KA01D;CAP CER 330PF 50V 10% X7R 0402;;;;; 12,2,"C12, C13",330pF,device:C,,,CAP CER 330PF 50V 10% X7R 0402,Murata,GRM155R71H331KA01D
C13;330pF;Murata;GRM155R71H331KA01D;CAP CER 330PF 50V 10% X7R 0402;;;;; 13,7,"C72, C74, C76, C78, C80, C82, C124",2.2uF,device:C,,,CAP CER 2.2UF 10V 20% X5R 0402,Taiyo Yuden,LMK105BJ225MV-F
C14;8p2;Taiyo Yuden;UMK105CG8R2DV-F;CAP CER 8.2PF 50V NP0 0402;;;;; 14,1,C14,8p2,device:C,,,CAP CER 8.2PF 50V NP0 0402,Taiyo Yuden,UMK105CG8R2DV-F
C15;180pF;Murata;GRM1555C1H181JA01D;CAP CER 180PF 50V 5% NP0 0402;;;;; 15,6,"C41, C42, C52, C70, C90, C160",100pF,device:C,,,CAP CER 100PF 50V 5% NP0 0402,Murata,GRM1555C1H101JA01D
C16;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 16,10,"C2, C4, C6, C87, C88, C89, C92, C93, C162, C163",10nF,device:C,,,CAP CER 10000PF 16V 10% X7R 0402,Murata,GRM155R71C103KA01D
C17;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; 17,3,"D1, D3, D9",GSG-DIODE-TVS-BI,hackrf:GSG-DIODE-TVS-BI,,,TVS DIODE ESD .05PF 15KV 0402,Murata,LXES15AAA1-100
C18;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; 18,2,"D2, D6",TXLED,device:LED,,,LED SUPR RED CLR RT ANG 0805,Lite-On,LTST-S220KRKT
C19;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 19,2,"D4, D7",VCCLED,device:LED,,,LED GREEN CLEAR RT ANG 0805,Lite-On,LTST-S220KGKT
C20;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; 20,2,"D5, D8",1V8LED,device:LED,,,LED YELLOW CLEAR RT ANG 0805,Lite-On,LTST-S220KSKT
C21;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; 21,3,"FB1, FB2, FB3",FILTER,device:FILTER,,,FERRITE CHIP 220 OHM 2000MA 0805,Murata,BLM21PG221SN1D
C22;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 22,1,J1,USB-MICRO-B,hackrf:GSG-USB-MICRO-B-SHIELDED,,,CONN RCPT REV MICRO USB TYPE B,FCI,10103592-0001LF
C23;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; 23,2,"L10, L11",4u7,device:INDUCTOR,,,INDUCTOR 4.7UH 1.6A 20% SMD,Taiyo Yuden,NRG4026T4R7M
C24;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 24,5,"L2, L3, L5, L12, L13",10uH,device:INDUCTOR,,,INDUCTR 10UH 220MA 20% 0603 SMD,Taiyo Yuden,BRL1608T100M
C25;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; 25,1,L7,6.2nH,device:INDUCTOR,,,INDUCTOR HIFREQ 6.2+/-0.3NH 0402,Taiyo Yuden,HK10056N2S-T
C26;47pF;Murata;GRM1555C1H470JA01D;CAP CER 47PF 50V 5% NP0 0402;;;;; 26,3,"P2, P4, P16",ANTENNA,hackrf:GSG-RF-CONN,,,CONN SMA JACK 50 OHM EDGE MNT W/JAM NUT & LOCK WASHER,Molex,73251-2121
C27;47pF;Murata;GRM1555C1H470JA01D;CAP CER 47PF 50V 5% NP0 0402;;;;; 27,2,"P20, P28",SD,hackrf:CONN_11X2,,,"CONN HEADER FMAL 22PS.1"" DL GOLD",Sullins,PPPC112LFBN-RC
C28;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; 28,1,P22,I2S,hackrf-one-cache:CONN_13X2,,,"CONN HEADER FMAL 26PS.1"" DL GOLD",Sullins,PPPC132LFBN-RC
C29;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 29,1,P9,BASEBAND,hackrf-one-cache:CONN_8X2,,,"CONN HEADER FMAL 16PS.1"" DL GOLD",Sullins,PPPC082LFBN-RC
C30;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 30,3,"Q1, Q2, Q4",MOSFET_P,hackrf-one-cache:MOSFET_P,,,MOSFET P-CH 50V 130MA SOT-23,Fairchild,BSS84
C31;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; 31,1,Q3,MOSFET_P,hackrf-one-cache:MOSFET_P,,,MOSFET P-CH 20V 4.2A SOT-23,Diodes Inc.,DMP2305U-7
C32;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; 32,1,Q5,MOSFET_P,hackrf-one-cache:MOSFET_P,,,MOSFET P-CH -30V -4.3A SOT23,Alpha and Omega,AO3407A
C33;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 33,6,"R1, R2, R25, R26, R72, R75",470,device:R,,,RES TF 1/16W 470 OHM 5% 0402,Stackpole,RMCF0402JT470R
C34;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 34,6,"R8, R9, R10, R13, R73, R76",1k,device:R,,,RES 1K OHM 1/16W 1% 0402,Stackpole,RMCF0402FT1K00
C35;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 35,22,"R19, R30, R31, R32, R33, R34, R77, R78, R79, R80, R81, R86, R87, R88, R89, R90, R91, R94, R96, R98, R99, R100",39,device:R,,,RES 39 OHM 1/16W 5% 0402 SMD,Stackpole,RMCF0402JT39R0
C36;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 36,26,"R5, R6, R7, R11, R12, R24, R29, R36, R37, R41, R48, R49, R51, R52, R54, R59, R63, R64, R65, R66, R67, R68, R85, R93, R104, R105",10k,device:R,,,RES 10K OHM 1/16W 5% 0402 SMD,Stackpole,RMCF0402JT10K0
C37;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 37,4,"R14, R15, R16, R17",4k7,device:R,,,RES 4.7K OHM 1/16W 1% 0402,Stackpole,RMCF0402FT4K70
C38;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 38,4,"R18, R27, R28, R74",1k8,device:R,,,RES TF 1.8K OHM 5% 1/16W 0402,Stackpole,RMCF0402JT1K80
C39;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 39,7,"R20, R21, R22, R23, R57, R58, R62",0,device:R,,,RES 0.0 OHM 1/16W 0402 SMD,Stackpole,RMCF0402ZT0R00
C40;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 40,1,R3,22k,device:R,,,RES 22K OHM 1/10W 5% 0402 SMD,Panasonic,ERJ-2GEJ223X
C41;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;;;;; 41,1,R4,51k,device:R,,,RES TF 51K OHM 1% 0.0625W 0402,Stackpole,RMCF0402FT51K0
C42;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;;;;; 42,2,"R46, R55",162k,device:R,,,RES TF 1/16W 162K OHM 1% 0402,Stackpole,RMCF0402FT162K
C43;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; 43,1,R47,330k,device:R,,,RES TF 1/16W 330K OHM 1% 0402,Stackpole,RMCF0402FT330K
C44;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; 44,1,R56,715k,device:R,,,RES TF 1/16W 715K OHM 1% 0402,Stackpole,RMCF0402FT715K
C45;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 45,1,R69,12k,device:R,,,RES 12.0K OHM 1/16W 1% 0402 SMD,Rohm,MCR01MRTF1202
C46;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; 46,2,"SW1, SW2",RESET,hackrf:SW_PUSH_SHIELDED,,,SWITCH TACTILE SPST-NO 0.05A 12V,TE Connectivity,FSMRA3JH
C47;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 47,2,"T1, T2",MIX_OUT_BALUN,hackrf:BALUN-B0310J50100AHF,,,Ultra Low Profile 0805 Balun 50 to 100 ohm Balanced,Anaren,B0310J50100AHF
C48;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; 48,2,"T3, T4",TX_BALUN,hackrf:BALUN,,,BALUN CERAMIC CHIP WIMAX 2.5GHZ,Johanson Technology,2500BL14M100T
C49;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; 49,7,"U1, U2, U5, U6, U7, U10, U11",SKY13350,hackrf:SKY13350,,,0.01-6.0 GHz GaAs SPDT Switch,Skyworks,SKY13350-385LF
C50;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; 50,3,"U9, U12, U14",SKY13317,hackrf:SKY13317,,,20 MHz-6.0 GHz pHEMT GaAs SP3T Switch,Skyworks,SKY13317-373LF
C51;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; 51,2,"U13, U25",MGA-81563,hackrf:MGA-81563,,,"0.1-6 GHz 3 V, 14 dBm Amplifier",Avago,MGA-81563-TR1G
C52;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;;;;; 52,1,U15,LXES1TBCC2-004,hackrf:LXES1TBCC2-004,,,ESD Suppressors 0.55pF 6V 2ch,Murata,LXES1TBCC2-004
C53;1uF;Taiyo Yuden;LMK105BJ105KV-F;CAP CER 1UF 10V 10% X5R 0402;;;;; 53,1,U17,MAX2837,hackrf:MAX2837,,,IC TXRX 2.3GHZ-2.7GHZ 48TQFN,Maxim,MAX2837ETM+
C54;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 54,1,U18,MAX5864,hackrf:MAX5864,,,IC ANLG FRONT END 22MSPS 48-TQFN,Maxim,MAX5864ETM+
C55;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 55,1,U19,SI5351C,hackrf:SI5351C,,,IC CLK GENERATOR 160MHZ 20QFN,Silicon Laboratories Inc,SI5351C-B-GM
C56;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 56,1,U20,W25Q80BV,hackrf:W25Q80BV,,,IC FLASH 8MBIT 8SOIC,Winbond,W25Q80BVSSIG
C57;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 57,1,U21,TPS62410,hackrf:TPS62410,,,IC BUCK SYNC DUAL ADJ 0.8A 10SON,Texas Instruments,TPS62410DRCR
C58;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; 58,1,U23,LPC4320FBD144,hackrf:LPC43XXFBD144,,,IC MCU 32BIT 144LQFP,NXP,"LPC4320FBD144,551"
C59;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; 59,1,U24,GSG-XC2C64A-7VQG100C,hackrf:GSG-XC2C64A-7VQG100C,,,IC CR-II CPLD 64MCELL 100-VQFP,Xilinx,XC2C64A-7VQG100C
C60;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 60,1,U3,RX_LOWPASS_FILTER,hackrf:FIL-LP0603,,,FILTER LOW PASS 1880MHZ 0603 SMD,AVX,LP0603A1880ANTR
C61;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; 61,1,U4,RFFC5072,hackrf:RFFC5072,,,WIDEBAND SYNTHESIZER/VCO WITH INTEGRATED 6GHz MIXER,RFMD,RFFC5072TR7
C62;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; 62,1,U8,RX_HIGHPASS_FILTER,hackrf:FIL-DEA,,,FILTER HIGHPASS WLAN&BLUETOOTH,TDK,DEA162400HT-8004B1
C63;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 63,1,X1,GSG-XTAL4PIN,hackrf:GSG-XTAL4PIN,,,CRYSTAL 25.000MHZ 8PF SMD,AVX,CX3225GB25000D0HEQZ1
C64;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; 64,1,X2,MCU_XTAL,hackrf:GSG-XTAL4PIN,,,CRYSTAL 12.000 MHZ 12PF SMD,TXC,7V-12.000MAAE-T
C65;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; 65,1,X3,RTC_XTAL,hackrf-one-cache:CRYSTAL,,,CRYSTAL 32.768KHZ 12.5PF SMD,Abracon,AB26TRQ-32.768KHZ-T
C66;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;;
C67;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;;
C68;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;DNP;;;;
C69;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;DNP;;;;
C70;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;;;;;
C71;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C72;2.2uF;Taiyo Yuden;LMK105BJ225MV-F;CAP CER 2.2UF 10V 20% X5R 0402;;;;;
C73;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C74;2.2uF;Taiyo Yuden;LMK105BJ225MV-F;CAP CER 2.2UF 10V 20% X5R 0402;;;;;
C75;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C76;2.2uF;Taiyo Yuden;LMK105BJ225MV-F;CAP CER 2.2UF 10V 20% X5R 0402;;;;;
C77;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C78;2.2uF;Taiyo Yuden;LMK105BJ225MV-F;CAP CER 2.2UF 10V 20% X5R 0402;;;;;
C79;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C80;2.2uF;Taiyo Yuden;LMK105BJ225MV-F;CAP CER 2.2UF 10V 20% X5R 0402;;;;;
C81;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C82;2.2uF;Taiyo Yuden;LMK105BJ225MV-F;CAP CER 2.2UF 10V 20% X5R 0402;;;;;
C83;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C84;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;;
C85;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;;
C86;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;;
C87;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;;
C88;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;;
C89;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;;
C90;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;;;;;
C91;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C92;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;;
C93;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;;
C94;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;;
C95;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;DNP;;;;
C96;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;DNP;;;;
C97;330nF;Murata;GRM155R61A334KE15D;CAP CER 0.33UF 10V 10% X5R 0402;;;;;
C98;330nF;Murata;GRM155R61A334KE15D;CAP CER 0.33UF 10V 10% X5R 0402;;;;;
C99;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;;
C100;330nF;Murata;GRM155R61A334KE15D;CAP CER 0.33UF 10V 10% X5R 0402;;;;;
C101;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;DNP;;;;
C102;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;;
C103;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;DNP;;;;
C104;3pF;Murata;GRM1555C1H3R0CA01D;CAP CER 3PF 50V NP0 0402;;;;;
C105;10uF;Murata;GRM21BR61A106KE19L;CAP CER 10UF 10V 10% X5R 0805;;;;;
C106;1uF;Taiyo Yuden;LMK105BJ105KV-F;CAP CER 1UF 10V 10% X5R 0402;;;;;
C107;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;DNP;;;;
C108;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;DNP;;;;
C109;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;DNP;;;;
C110;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;DNP;;;;
C111;3pF;Murata;GRM1555C1H3R0CA01D;CAP CER 3PF 50V NP0 0402;;;;;
C112;180pF;Murata;GRM1555C1H181JA01D;CAP CER 180PF 50V 5% NP0 0402;;;;;
C113;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C114;3.3nF;Murata;GRM155R71H332KA01D;CAP CER 3300PF 50V 10% X7R 0402;;;;;
C115;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;;
C116;47pF;Murata;GRM1555C1H470JA01D;CAP CER 47PF 50V 5% NP0 0402;;;;;
C118;18pF;Murata;GRM1555C1H180JA01D;CAP CER 18PF 50V 5% NP0 0402;;;;;
C119;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C120;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C121;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C122;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C123;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C124;2.2uF;Taiyo Yuden;LMK105BJ225MV-F;CAP CER 2.2UF 10V 20% X5R 0402;;;;;
C125;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;;
C126;10uF;Murata;GRM21BR61A106KE19L;CAP CER 10UF 10V 10% X5R 0805;;;;;
C127;10uF;Murata;GRM21BR61A106KE19L;CAP CER 10UF 10V 10% X5R 0805;;;;;
C128;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C129;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C130;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C131;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C132;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C133;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C134;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C135;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C136;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C137;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C138;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C139;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C140;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C141;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C142;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C143;10uF;Murata;GRM21BR61A106KE19L;CAP CER 10UF 10V 10% X5R 0805;;;;;
C144;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C145;10uF;Murata;GRM21BR61A106KE19L;CAP CER 10UF 10V 10% X5R 0805;;;;;
C146;10uF;Murata;GRM21BR61A106KE19L;CAP CER 10UF 10V 10% X5R 0805;;;;;
C147;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C148;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C149;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C150;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C151;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C152;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C153;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C154;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C155;DNP;DNP;;;;;;;
C156;47pF;Murata;GRM1555C1H470JA01D;CAP CER 47PF 50V 5% NP0 0402;DNP;;;;
C157;18pF;Murata;GRM1555C1H180JA01D;CAP CER 18PF 50V 5% NP0 0402;;;;;
C158;18pF;Murata;GRM1555C1H180JA01D;CAP CER 18PF 50V 5% NP0 0402;;;;;
C159;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;DNP;;;;
C160;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;;;;;
C161;1uF;Taiyo Yuden;LMK105BJ105KV-F;CAP CER 1UF 10V 10% X5R 0402;;;;;
C162;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;;
C163;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;;
C164;18pF;Murata;GRM1555C1H180JA01D;CAP CER 18PF 50V 5% NP0 0402;;;;;
C165;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;DNP;;;;
C166;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C167;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;;
C168;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;DNP;;;;
C169;DNP;DNP;;;;;;;
C170;DNP;DNP;;;;;;;
C171;1uF;Taiyo Yuden;LMK105BJ105KV-F;CAP CER 1UF 10V 10% X5R 0402;;;;;
D1;GSG-DIODE-TVS-BI;Murata;LXES15AAA1-100;TVS DIODE ESD .05PF 15KV 0402;;;;;
D2;VAALED;Lite-On;LTST-S220KRKT;LED SUPR RED CLR RT ANG 0805;;;;;
D3;GSG-DIODE-TVS-BI;Murata;LXES15AAA1-100;TVS DIODE ESD .05PF 15KV 0402;;;;;
D4;USBLED;Lite-On;LTST-S220KGKT;LED GREEN CLEAR RT ANG 0805;;;;;
D5;RXLED;Lite-On;LTST-S220KSKT;LED YELLOW CLEAR RT ANG 0805;;;;;
D6;TXLED;Lite-On;LTST-S220KRKT;LED SUPR RED CLR RT ANG 0805;;;;;
D7;VCCLED;Lite-On;LTST-S220KGKT;LED GREEN CLEAR RT ANG 0805;;;;;
D8;1V8LED;Lite-On;LTST-S220KSKT;LED YELLOW CLEAR RT ANG 0805;;;;;
D9;GSG-DIODE-TVS-BI;Murata;LXES15AAA1-100;TVS DIODE ESD .05PF 15KV 0402;;;;;
FB1;FILTER;Murata;BLM21PG221SN1D;FERRITE CHIP 220 OHM 2000MA 0805;;;;;
FB2;FILTER;Murata;BLM21PG221SN1D;FERRITE CHIP 220 OHM 2000MA 0805;;;;;
FB3;FILTER;Murata;BLM21PG221SN1D;FERRITE CHIP 220 OHM 2000MA 0805;;;;;
J1;USB-MICRO-B;FCI;10103592-0001LF;CONN RCPT REV MICRO USB TYPE B;;;;;
J2;RF-SHIELD-FRAME;Laird;BMI-S-230-F-R;BOARD SHIELD 2INX1.5IN FRAME;DNP;;;;
J3;RF-SHIELD-COVER;Laird;BMI-S-230-C;BOARD SHIELD 2INX1.5IN COVER;DNP;;;;
J4;MOUNTING_HOLE;DNP;;;;;;;
J5;MOUNTING_HOLE;DNP;;;;;;;
J6;MOUNTING_HOLE;DNP;;;;;;;
J7;MOUNTING_HOLE;DNP;;;;;;;
J8;MOUNTING_HOLE;DNP;;;;;;;
J9;MOUNTING_HOLE;DNP;;;;;;;
J10;GND_CLIP;Harwin;S1751-46R;PC TEST POINT TIN SMD;DNP;;;;
L1;DNP;DNP;;;;;;;
L2;10uH;Taiyo Yuden;BRL1608T100M;INDUCTR 10UH 220MA 20% 0603 SMD;;;;;
L3;10uH;Taiyo Yuden;BRL1608T100M;INDUCTR 10UH 220MA 20% 0603 SMD;;;;;
L4;DNP;DNP;;;;;;;
L5;10uH;Taiyo Yuden;BRL1608T100M;INDUCTR 10UH 220MA 20% 0603 SMD;;;;;
L6;DNP;DNP;;;;;;;
L7;6.2nH;Taiyo Yuden;HK10056N2S-T;INDUCTOR HIFREQ 6.2+/-0.3NH 0402;;;;;
L8;DNP;DNP;;;;;;;
L9;DNP;DNP;;;;;;;
L10;4u7;Taiyo Yuden;NRG4026T4R7M;INDUCTOR 4.7UH 1.6A 20% SMD;;;;;
L11;4u7;Taiyo Yuden;NRG4026T4R7M;INDUCTOR 4.7UH 1.6A 20% SMD;;;;;
L12;10uH;Taiyo Yuden;BRL1608T100M;INDUCTR 10UH 220MA 20% 0603 SMD;;;;;
L13;10uH;Taiyo Yuden;BRL1608T100M;INDUCTR 10UH 220MA 20% 0603 SMD;;;;;
P1;1V8;DNP;;;;;;;
P2;CLKOUT;Molex;73251-2121;CONN SMA JACK 50 OHM EDGE MNT W/JAM NUT & LOCK WASHER;;;;;
P3;GND;DNP;;;;;;;
P4;ANTENNA;Molex;73251-2121;CONN SMA JACK 50 OHM EDGE MNT W/JAM NUT & LOCK WASHER;;;;;
P5;LEDS;DNP;;;;;;;
P6;GPO4;DNP;;;;;;;
P7;GPO2;DNP;;;;;;;
P8;VCC;DNP;;;;;;;
P9;BASEBAND;Sullins;PPPC082LFBN-RC;CONN HEADER FMAL 16PS.1" DL GOLD;;;;;
P13;GPO1;DNP;;;;;;;
P14;XCVR_CLKOUT;DNP;;;;;;;
P15;INTR;DNP;;;;;;;
P16;CLKIN;Molex;73251-2121;CONN SMA JACK 50 OHM EDGE MNT W/JAM NUT & LOCK WASHER;;;;;
P17;GPO6;DNP;;;;;;;
P18;OEB;DNP;;;;;;;
P19;GPO3;DNP;;;;;;;
P20;GPIO;Sullins;PPPC112LFBN-RC;CONN HEADER FMAL 22PS.1" DL GOLD;;;;;
P21;REF_IN;DNP;;;;;;;
P22;I2S;Sullins;PPPC132LFBN-RC;CONN HEADER FMAL 26PS.1" DL GOLD;;;;;
P23;DBGEN;DNP;;;;;;;
P24;TRST;DNP;;;;;;;
P25;LPC_ISP;DNP;;;;;;;
P26;LPC_JTAG;Sullins;GRPB052VWVN-RC;CONN HEADER .050" 10PS DL PCB AU;DNP;;;;
P27;MIXER_SDATA;DNP;;;;;;;
P28;SD;Sullins;PPPC112LFBN-RC;CONN HEADER FMAL 22PS.1" DL GOLD;;;;;
P29;CPLD_JTAG;DNP;;;;;;;
P30;BANK2_AUX;DNP;;;;;;;
P31;MIXER_SCLK;DNP;;;;;;;
P32;MIXER_ENX;DNP;;;;;;;
P33;MIXER_RESETX;DNP;;;;;;;
P34;MIX_BYPASS;DNP;;;;;;;
P35;!MIX_BYPASS;DNP;;;;;;;
P36;VAA;DNP;;;;;;;
P37;SCL;DNP;;;;;;;
P38;SDA;DNP;;;;;;;
P39;SSP1_SCK;DNP;;;;;;;
P40;SSP1_MOSI;DNP;;;;;;;
P41;SSP1_MISO;DNP;;;;;;;
P42;TX;DNP;;;;;;;
P43;RX;DNP;;;;;;;
P44;HP;DNP;;;;;;;
P45;LP;DNP;;;;;;;
P46;TX_MIX_BP;DNP;;;;;;;
P47;RX_MIX_BP;DNP;;;;;;;
P48;TX_AMP;DNP;;;;;;;
P49;RX_AMP;DNP;;;;;;;
P50;AMP_BYPASS;DNP;;;;;;;
P51;!TX_AMP_PWR;DNP;;;;;;;
P52;!RX_AMP_PWR;DNP;;;;;;;
P53;CS_XCVR;DNP;;;;;;;
P54;CS_AD;DNP;;;;;;;
P55;TXENABLE;DNP;;;;;;;
P56;RXENABLE;DNP;;;;;;;
P57;XTAL2;DNP;;;;;;;
P58;GCK1;DNP;;;;;;;
P59;GCK2;DNP;;;;;;;
P60;SGPIO_CLK;DNP;;;;;;;
P61;DA0;DNP;;;;;;;
P62;DA7;DNP;;;;;;;
P63;DD0;DNP;;;;;;;
P64;DD9;DNP;;;;;;;
P65;DA4;DNP;;;;;;;
P66;DD5;DNP;;;;;;;
P67;RSSI;DNP;;;;;;;
P68;SPIFI_CS;DNP;;;;;;;
P69;VREGMODE;DNP;;;;;;;
P70;EN_1V8;DNP;;;;;;;
P71;ID;DNP;;;;;;;
P72;GP_CLKIN;DNP;;;;;;;
P73;P1_2;DNP;;;;;;;
P74;P1_1;DNP;;;;;;;
P75;GP_CLKIN;DNP;;;;;;;
P76;GP_CLKIN;DNP;;;;;;;
P77;GP_CLKIN;DNP;;;;;;;
P78;GP_CLKIN;DNP;;;;;;;
P79;GP_CLKIN;DNP;;;;;;;
P80;SHIELD;DNP;;;;;;;
P81;SPIFI_SIO2;DNP;;;;;;;
P82;SPIFI_SIO3;DNP;;;;;;;
P83;GND;DNP;;;;;;;
P84;GND;DNP;;;;;;;
P85;GND;DNP;;;;;;;
P86;GND;DNP;;;;;;;
P87;GND;DNP;;;;;;;
P88;GND;DNP;;;;;;;
P89;GND;DNP;;;;;;;
P90;GND;DNP;;;;;;;
P91;GND;DNP;;;;;;;
P92;GND;DNP;;;;;;;
Q1;MOSFET_P;Fairchild;BSS84;MOSFET P-CH 50V 130MA SOT-23;;;;;
Q2;MOSFET_P;Fairchild;BSS84;MOSFET P-CH 50V 130MA SOT-23;;;;;
Q3;MOSFET_P;Diodes Inc.;DMP2305U-7;MOSFET P-CH 20V 4.2A SOT-23;;;;;
Q4;MOSFET_P;Fairchild;BSS84;MOSFET P-CH 50V 130MA SOT-23;;;;;
Q5;MOSFET_P;Alpha and Omega;AO3407A;MOSFET P-CH -30V -4.3A SOT23;;;;;
R1;470;Stackpole;RMCF0402JT470R;RES TF 1/16W 470 OHM 5% 0402;;;;;
R2;470;Stackpole;RMCF0402JT470R;RES TF 1/16W 470 OHM 5% 0402;;;;;
R3;22k;Panasonic;ERJ-2GEJ223X;RES 22K OHM 1/10W 5% 0402 SMD;;;;;
R4;51k;Stackpole;RMCF0402FT51K0;RES TF 51K OHM 1% 0.0625W 0402;;;;;
R5;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R6;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R7;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R8;1k;Stackpole;RMCF0402FT1K00;RES 1K OHM 1/16W 1% 0402;;;;;
R9;1k;Stackpole;RMCF0402FT1K00;RES 1K OHM 1/16W 1% 0402;;;;;
R10;1k;Stackpole;RMCF0402FT1K00;RES 1K OHM 1/16W 1% 0402;;;;;
R11;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R12;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R13;1k;Stackpole;RMCF0402FT1K00;RES 1K OHM 1/16W 1% 0402;;;;;
R14;4k7;Stackpole;RMCF0402FT4K70;RES 4.7K OHM 1/16W 1% 0402;;;;;
R15;4k7;Stackpole;RMCF0402FT4K70;RES 4.7K OHM 1/16W 1% 0402;;;;;
R16;4k7;Stackpole;RMCF0402FT4K70;RES 4.7K OHM 1/16W 1% 0402;;;;;
R17;4k7;Stackpole;RMCF0402FT4K70;RES 4.7K OHM 1/16W 1% 0402;;;;;
R18;1k8;Stackpole;RMCF0402JT1K80;RES TF 1.8K OHM 5% 1/16W 0402;;;;;
R19;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R20;0;Stackpole;RMCF0402ZT0R00;RES 0.0 OHM 1/16W 0402 SMD;;;;;
R21;0;Stackpole;RMCF0402ZT0R00;RES 0.0 OHM 1/16W 0402 SMD;;;;;
R22;0;Stackpole;RMCF0402ZT0R00;RES 0.0 OHM 1/16W 0402 SMD;;;;;
R23;0;Stackpole;RMCF0402ZT0R00;RES 0.0 OHM 1/16W 0402 SMD;;;;;
R24;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R25;475;Stackpole;RMCF0402JT470R;RES TF 1/16W 470 OHM 5% 0402;;;;;
R26;475;Stackpole;RMCF0402JT470R;RES TF 1/16W 470 OHM 5% 0402;;;;;
R27;1k8;Stackpole;RMCF0402JT1K80;RES TF 1.8K OHM 5% 1/16W 0402;;;;;
R28;1k8;Stackpole;RMCF0402JT1K80;RES TF 1.8K OHM 5% 1/16W 0402;;;;;
R29;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R30;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R31;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R32;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R33;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R34;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R35;DNP;DNP;;;;;;;
R36;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R37;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R41;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R46;162k;Stackpole;RMCF0402FT162K;RES TF 1/16W 162K OHM 1% 0402;;;;;
R47;330k;Stackpole;RMCF0402FT330K;RES TF 1/16W 330K OHM 1% 0402;;;;;
R48;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R49;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R51;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R52;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R54;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R55;162k;Stackpole;RMCF0402FT162K;RES TF 1/16W 162K OHM 1% 0402;;;;;
R56;715k;Stackpole;RMCF0402FT715K;RES TF 1/16W 715K OHM 1% 0402;;;;;
R57;0;Stackpole;RMCF0402ZT0R00;RES 0.0 OHM 1/16W 0402 SMD;;;;;
R58;0;Stackpole;RMCF0402ZT0R00;RES 0.0 OHM 1/16W 0402 SMD;;;;;
R59;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R62;0;Stackpole;RMCF0402ZT0R00;RES 0.0 OHM 1/16W 0402 SMD;;;;;
R63;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R64;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R65;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R66;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R67;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R68;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R69;12k;Rohm;MCR01MRTF1202;RES 12.0K OHM 1/16W 1% 0402 SMD;;;;;
R72;470;Stackpole;RMCF0402JT470R;RES TF 1/16W 470 OHM 5% 0402;;;;;
R73;1k;Stackpole;RMCF0402FT1K00;RES 1K OHM 1/16W 1% 0402;;;;;
R74;1k8;Stackpole;RMCF0402JT1K80;RES TF 1.8K OHM 5% 1/16W 0402;;;;;
R75;470;Stackpole;RMCF0402JT470R;RES TF 1/16W 470 OHM 5% 0402;;;;;
R76;1k;Stackpole;RMCF0402FT1K00;RES 1K OHM 1/16W 1% 0402;;;;;
R77;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R78;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R79;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R80;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R81;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R85;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R86;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R87;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R88;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R89;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R90;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R91;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R93;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R94;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R96;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R98;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R99;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R100;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;;
R104;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
R105;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;;
SW1;DFU;TE Connectivity;FSMRA3JH;SWITCH TACTILE SPST-NO 0.05A 12V;;;;;
SW2;RESET;TE Connectivity;FSMRA3JH;SWITCH TACTILE SPST-NO 0.05A 12V;;;;;
T1;MIX_IN_BALUN;Anaren;B0310J50100AHF;Ultra Low Profile 0805 Balun 50 to 100 ohm Balanced;;;;;
T2;MIX_OUT_BALUN;Anaren;B0310J50100AHF;Ultra Low Profile 0805 Balun 50 to 100 ohm Balanced;;;;;
T3;RX_BALUN;Johanson Technology;2500BL14M100T;BALUN CERAMIC CHIP WIMAX 2.5GHZ;;;;;
T4;TX_BALUN;Johanson Technology;2500BL14M100T;BALUN CERAMIC CHIP WIMAX 2.5GHZ;;;;;
U1;SKY13350;Skyworks;SKY13350-385LF;0.01-6.0 GHz GaAs SPDT Switch;;;;;
U2;SKY13350;Skyworks;SKY13350-385LF;0.01-6.0 GHz GaAs SPDT Switch;;;;;
U3;RX_LOWPASS_FILTER;AVX;LP0603A1880ANTR;FILTER LOW PASS 1880MHZ 0603 SMD;;;;;
U4;RFFC5072;RFMD;RFFC5072TR7;WIDEBAND SYNTHESIZER/VCO WITH INTEGRATED 6GHz MIXER;;;;;
U5;SKY13350;Skyworks;SKY13350-385LF;0.01-6.0 GHz GaAs SPDT Switch;;;;;
U6;SKY13350;Skyworks;SKY13350-385LF;0.01-6.0 GHz GaAs SPDT Switch;;;;;
U7;SKY13350;Skyworks;SKY13350-385LF;0.01-6.0 GHz GaAs SPDT Switch;;;;;
U8;RX_HIGHPASS_FILTER;TDK;DEA162400HT-8004B1;FILTER HIGHPASS WLAN&BLUETOOTH;;;;;
U9;SKY13317;Skyworks;SKY13317-373LF;20 MHz-6.0 GHz pHEMT GaAs SP3T Switch;;;;;
U10;SKY13350;Skyworks;SKY13350-385LF;0.01-6.0 GHz GaAs SPDT Switch;;;;;
U11;SKY13350;Skyworks;SKY13350-385LF;0.01-6.0 GHz GaAs SPDT Switch;;;;;
U12;SKY13317;Skyworks;SKY13317-373LF;20 MHz-6.0 GHz pHEMT GaAs SP3T Switch;;;;;
U13;MGA-81563;Avago;MGA-81563-TR1G;0.1-6 GHz 3 V, 14 dBm Amplifier;;;;;
U14;SKY13317;Skyworks;SKY13317-373LF;20 MHz-6.0 GHz pHEMT GaAs SP3T Switch;;;;;
U15;LXES1TBCC2-004;Murata;LXES1TBCC2-004;ESD Suppressors 0.55pF 6V 2ch;;;;;
U17;MAX2837;Maxim;MAX2837ETM+;IC TXRX 2.3GHZ-2.7GHZ 48TQFN;;;;;
U18;MAX5864;Maxim;MAX5864ETM+;IC ANLG FRONT END 22MSPS 48-TQFN;;;;;
U19;SI5351C;Silicon Laboratories Inc;SI5351C-B-GM;IC CLK GENERATOR 160MHZ 20QFN;;;;;
U20;W25Q80BV;Winbond;W25Q80BVSSIG;IC FLASH 8MBIT 8SOIC;;;;;
U21;TPS62410;Texas Instruments;TPS62410DRCR;IC BUCK SYNC DUAL ADJ 0.8A 10SON;;;;;
U23;LPC4320FBD144;NXP;LPC4320FBD144,551;IC MCU 32BIT 144LQFP;;;;;
U24;GSG-XC2C64A-7VQG100C;Xilinx;XC2C64A-7VQG100C;IC CR-II CPLD 64MCELL 100-VQFP;;;;;
U25;MGA-81563;Avago;MGA-81563-TR1G;0.1-6 GHz 3 V, 14 dBm Amplifier;;;;;
X1;GSG-XTAL4PIN;AVX;CX3225GB25000D0HEQZ1;CRYSTAL 25.000MHZ 8PF SMD;;;;;
X2;MCU_XTAL;TXC;7V-12.000MAAE-T;CRYSTAL 12.000 MHZ 12PF SMD;;;;;
X3;RTC_XTAL;Abracon;AB26TRQ-32.768KHZ-T;CRYSTAL 32.768KHZ 12.5PF SMD;;;;;

Can't render this file because it contains an unexpected character in line 215 and column 59.

View File

@ -130,13 +130,17 @@ static usb_request_status_t usb_send_descriptor(
static usb_request_status_t usb_send_descriptor_string( static usb_request_status_t usb_send_descriptor_string(
usb_endpoint_t* const endpoint usb_endpoint_t* const endpoint
) { ) {
if ((endpoint->setup.value_l == 0xee) &&
(endpoint->device->wcid_string_descriptor != NULL)) { /* MS WCID string */
return usb_send_descriptor(endpoint, endpoint->device->wcid_string_descriptor);
} else {
uint_fast8_t index = endpoint->setup.value_l; uint_fast8_t index = endpoint->setup.value_l;
for( uint_fast8_t i=0; endpoint->device->descriptor_strings[i] != 0; i++ ) { for( uint_fast8_t i=0; endpoint->device->descriptor_strings[i] != 0; i++ ) {
if( i == index ) { if( i == index ) {
return usb_send_descriptor(endpoint, endpoint->device->descriptor_strings[i]); return usb_send_descriptor(endpoint, endpoint->device->descriptor_strings[i]);
} }
} }
}
return USB_REQUEST_STATUS_STALL; return USB_REQUEST_STATUS_STALL;
} }
@ -212,6 +216,26 @@ static usb_request_status_t usb_standard_request_get_descriptor(
} }
} }
usb_request_status_t usb_vendor_request_read_wcid(
usb_endpoint_t* const endpoint,
const usb_transfer_stage_t stage
) {
if( stage == USB_TRANSFER_STAGE_SETUP ) {
if ((endpoint->setup.index == 0x04) &&
(endpoint->device->wcid_feature_descriptor != NULL)) {
usb_send_descriptor(endpoint, endpoint->device->wcid_feature_descriptor);
return USB_REQUEST_STATUS_OK;
}
if ((endpoint->setup.index == 0x05) &&
(endpoint->device->wcid_extended_properties_descriptor != NULL)) {
usb_send_descriptor(endpoint, endpoint->device->wcid_extended_properties_descriptor);
return USB_REQUEST_STATUS_OK;
}
return USB_REQUEST_STATUS_STALL;
}
return USB_REQUEST_STATUS_OK;
}
/*********************************************************************/ /*********************************************************************/
static usb_request_status_t usb_standard_request_set_address_setup( static usb_request_status_t usb_standard_request_set_address_setup(

View File

@ -29,6 +29,11 @@ void usb_set_configuration_changed_cb(
void (*callback)(usb_device_t* const) void (*callback)(usb_device_t* const)
); );
usb_request_status_t usb_vendor_request_read_wcid(
usb_endpoint_t* const endpoint,
const usb_transfer_stage_t stage
);
usb_request_status_t usb_standard_request( usb_request_status_t usb_standard_request(
usb_endpoint_t* const endpoint, usb_endpoint_t* const endpoint,
const usb_transfer_stage_t stage const usb_transfer_stage_t stage

View File

@ -127,6 +127,9 @@ typedef struct {
const uint8_t* const qualifier_descriptor; const uint8_t* const qualifier_descriptor;
usb_configuration_t* (*configurations)[]; usb_configuration_t* (*configurations)[];
const usb_configuration_t* configuration; const usb_configuration_t* configuration;
uint8_t* wcid_string_descriptor;
uint8_t* wcid_feature_descriptor;
uint8_t* wcid_extended_properties_descriptor;
} usb_device_t; } usb_device_t;
typedef struct usb_endpoint_t usb_endpoint_t; typedef struct usb_endpoint_t usb_endpoint_t;

View File

@ -139,6 +139,7 @@ static const usb_request_handler_fn vendor_request_handler[] = {
NULL, NULL,
#endif #endif
usb_vendor_request_set_freq_explicit, usb_vendor_request_set_freq_explicit,
usb_vendor_request_read_wcid, // USB_WCID_VENDOR_REQ
}; };
static const uint32_t vendor_request_handler_count = static const uint32_t vendor_request_handler_count =
@ -176,11 +177,6 @@ void usb_configuration_changed(
// transceiver configuration // transceiver configuration
cpu_clock_pll1_max_speed(); cpu_clock_pll1_max_speed();
led_on(LED1); led_on(LED1);
} else if( device->configuration->number == 2 ) {
// CPLD update configuration
cpu_clock_pll1_max_speed();
usb_endpoint_init(&usb_endpoint_bulk_out);
start_cpld_update = true;
} else { } else {
/* Configuration number equal 0 means usb bus reset. */ /* Configuration number equal 0 means usb bus reset. */
cpu_clock_pll1_low_speed(); cpu_clock_pll1_low_speed();

View File

@ -55,11 +55,11 @@ uint8_t usb_descriptor_device[] = {
USB_MAX_PACKET0, // bMaxPacketSize0 USB_MAX_PACKET0, // bMaxPacketSize0
USB_WORD(USB_VENDOR_ID), // idVendor USB_WORD(USB_VENDOR_ID), // idVendor
USB_WORD(USB_PRODUCT_ID), // idProduct USB_WORD(USB_PRODUCT_ID), // idProduct
USB_WORD(0x0100), // bcdDevice USB_WORD(0x0101), // bcdDevice
0x01, // iManufacturer 0x01, // iManufacturer
0x02, // iProduct 0x02, // iProduct
0x05, // iSerialNumber 0x04, // iSerialNumber
0x02 // bNumConfigurations 0x01 // bNumConfigurations
}; };
uint8_t usb_descriptor_device_qualifier[] = { uint8_t usb_descriptor_device_qualifier[] = {
@ -70,7 +70,7 @@ uint8_t usb_descriptor_device_qualifier[] = {
0x00, // bDeviceSubClass 0x00, // bDeviceSubClass
0x00, // bDeviceProtocol 0x00, // bDeviceProtocol
64, // bMaxPacketSize0 64, // bMaxPacketSize0
0x02, // bNumOtherSpeedConfigurations 0x01, // bNumOtherSpeedConfigurations
0x00 // bReserved 0x00 // bReserved
}; };
@ -148,79 +148,6 @@ uint8_t usb_descriptor_configuration_high_speed[] = {
0, // TERMINATOR 0, // TERMINATOR
}; };
uint8_t usb_descriptor_configuration_cpld_update_full_speed[] = {
9, // bLength
USB_DESCRIPTOR_TYPE_CONFIGURATION, // bDescriptorType
USB_WORD(32), // wTotalLength
0x01, // bNumInterfaces
0x02, // bConfigurationValue
0x04, // iConfiguration
0x80, // bmAttributes: USB-powered
250, // bMaxPower: 500mA
9, // bLength
USB_DESCRIPTOR_TYPE_INTERFACE, // bDescriptorType
0x00, // bInterfaceNumber
0x00, // bAlternateSetting
0x02, // bNumEndpoints
0xFF, // bInterfaceClass: vendor-specific
0xFF, // bInterfaceSubClass
0xFF, // bInterfaceProtocol: vendor-specific
0x00, // iInterface
7, // bLength
USB_DESCRIPTOR_TYPE_ENDPOINT, // bDescriptorType
USB_BULK_IN_EP_ADDR, // bEndpointAddress
0x02, // bmAttributes: BULK
USB_WORD(USB_MAX_PACKET_BULK_FS), // wMaxPacketSize
0x00, // bInterval: no NAK
7, // bLength
USB_DESCRIPTOR_TYPE_ENDPOINT, // bDescriptorType
USB_BULK_OUT_EP_ADDR, // bEndpointAddress
0x02, // bmAttributes: BULK
USB_WORD(USB_MAX_PACKET_BULK_FS), // wMaxPacketSize
0x00, // bInterval: no NAK
0, // TERMINATOR
};
uint8_t usb_descriptor_configuration_cpld_update_high_speed[] = {
9, // bLength
USB_DESCRIPTOR_TYPE_CONFIGURATION, // bDescriptorType
USB_WORD(32), // wTotalLength
0x01, // bNumInterfaces
0x02, // bConfigurationValue
0x04, // iConfiguration
0x80, // bmAttributes: USB-powered
250, // bMaxPower: 500mA
9, // bLength
USB_DESCRIPTOR_TYPE_INTERFACE, // bDescriptorType
0x00, // bInterfaceNumber
0x00, // bAlternateSetting
0x02, // bNumEndpoints
0xFF, // bInterfaceClass: vendor-specific
0xFF, // bInterfaceSubClass
0xFF, // bInterfaceProtocol: vendor-specific
0x00, // iInterface
7, // bLength
USB_DESCRIPTOR_TYPE_ENDPOINT, // bDescriptorType
USB_BULK_IN_EP_ADDR, // bEndpointAddress
0x02, // bmAttributes: BULK
USB_WORD(USB_MAX_PACKET_BULK_HS), // wMaxPacketSize
0x00, // bInterval: no NAK
7, // bLength
USB_DESCRIPTOR_TYPE_ENDPOINT, // bDescriptorType
USB_BULK_OUT_EP_ADDR, // bEndpointAddress
0x02, // bmAttributes: BULK
USB_WORD(USB_MAX_PACKET_BULK_HS), // wMaxPacketSize
0x00, // bInterval: no NAK
0, // TERMINATOR
};
uint8_t usb_descriptor_string_languages[] = { uint8_t usb_descriptor_string_languages[] = {
0x04, // bLength 0x04, // bLength
@ -298,7 +225,7 @@ uint8_t usb_descriptor_string_product[] = {
#endif #endif
}; };
uint8_t usb_descriptor_string_config1_description[] = { uint8_t usb_descriptor_string_config_description[] = {
24, // bLength 24, // bLength
USB_DESCRIPTOR_TYPE_STRING, // bDescriptorType USB_DESCRIPTOR_TYPE_STRING, // bDescriptorType
'T', 0x00, 'T', 0x00,
@ -314,21 +241,6 @@ uint8_t usb_descriptor_string_config1_description[] = {
'r', 0x00, 'r', 0x00,
}; };
uint8_t usb_descriptor_string_config2_description[] = {
24, // bLength
USB_DESCRIPTOR_TYPE_STRING, // bDescriptorType
'C', 0x00,
'P', 0x00,
'L', 0x00,
'D', 0x00,
' ', 0x00,
'u', 0x00,
'p', 0x00,
'd', 0x00,
'a', 0x00,
't', 0x00,
'e', 0x00,
};
uint8_t usb_descriptor_string_serial_number[USB_DESCRIPTOR_STRING_SERIAL_BUF_LEN]; uint8_t usb_descriptor_string_serial_number[USB_DESCRIPTOR_STRING_SERIAL_BUF_LEN];
@ -336,8 +248,34 @@ uint8_t* usb_descriptor_strings[] = {
usb_descriptor_string_languages, usb_descriptor_string_languages,
usb_descriptor_string_manufacturer, usb_descriptor_string_manufacturer,
usb_descriptor_string_product, usb_descriptor_string_product,
usb_descriptor_string_config1_description, usb_descriptor_string_config_description,
usb_descriptor_string_config2_description,
usb_descriptor_string_serial_number, usb_descriptor_string_serial_number,
0, // TERMINATOR 0, // TERMINATOR
}; };
uint8_t wcid_string_descriptor[] = {
18, // bLength
USB_DESCRIPTOR_TYPE_STRING, // bDescriptorType
'M', 0x00,
'S', 0x00,
'F', 0x00,
'T', 0x00,
'1', 0x00,
'0', 0x00,
'0', 0x00,
USB_WCID_VENDOR_REQ, // vendor request code for further descriptor
0x00
};
uint8_t wcid_feature_descriptor[] = {
0x28, 0x00, 0x00, 0x00, // bLength
USB_WORD(0x0100), // WCID version
USB_WORD(0x0004), // WICD descriptor index
0x01, //bNumSections
0x00,0x00,0x00,0x00,0x00,0x00,0x00, //Reserved
0x00, //bInterfaceNumber
0x01, //Reserved
'W', 'I', 'N', 'U', 'S', 'B', 0x00,0x00, //Compatible ID, padded with zeros
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //Sub-compatible ID
0x00,0x00,0x00,0x00,0x00,0x00 //Reserved
};

View File

@ -25,8 +25,6 @@ extern uint8_t usb_descriptor_device[];
extern uint8_t usb_descriptor_device_qualifier[]; extern uint8_t usb_descriptor_device_qualifier[];
extern uint8_t usb_descriptor_configuration_full_speed[]; extern uint8_t usb_descriptor_configuration_full_speed[];
extern uint8_t usb_descriptor_configuration_high_speed[]; extern uint8_t usb_descriptor_configuration_high_speed[];
extern uint8_t usb_descriptor_configuration_cpld_update_full_speed[];
extern uint8_t usb_descriptor_configuration_cpld_update_high_speed[];
extern uint8_t usb_descriptor_string_languages[]; extern uint8_t usb_descriptor_string_languages[];
extern uint8_t usb_descriptor_string_manufacturer[]; extern uint8_t usb_descriptor_string_manufacturer[];
extern uint8_t usb_descriptor_string_product[]; extern uint8_t usb_descriptor_string_product[];
@ -36,3 +34,7 @@ extern uint8_t usb_descriptor_string_product[];
extern uint8_t usb_descriptor_string_serial_number[]; extern uint8_t usb_descriptor_string_serial_number[];
extern uint8_t* usb_descriptor_strings[]; extern uint8_t* usb_descriptor_strings[];
#define USB_WCID_VENDOR_REQ 0x19
extern uint8_t wcid_string_descriptor[];
extern uint8_t wcid_feature_descriptor[];

View File

@ -38,23 +38,10 @@ usb_configuration_t usb_configuration_full_speed = {
.descriptor = usb_descriptor_configuration_full_speed, .descriptor = usb_descriptor_configuration_full_speed,
}; };
usb_configuration_t usb_configuration_cpld_update_full_speed = {
.number = 2,
.speed = USB_SPEED_FULL,
.descriptor = usb_descriptor_configuration_cpld_update_full_speed,
};
usb_configuration_t usb_configuration_cpld_update_high_speed = {
.number = 2,
.speed = USB_SPEED_HIGH,
.descriptor = usb_descriptor_configuration_cpld_update_high_speed,
};
usb_configuration_t* usb_configurations[] = { usb_configuration_t* usb_configurations[] = {
&usb_configuration_high_speed, &usb_configuration_high_speed,
&usb_configuration_full_speed, &usb_configuration_full_speed,
&usb_configuration_cpld_update_full_speed,
&usb_configuration_cpld_update_high_speed,
0, 0,
}; };
@ -64,4 +51,6 @@ usb_device_t usb_device = {
.qualifier_descriptor = usb_descriptor_device_qualifier, .qualifier_descriptor = usb_descriptor_device_qualifier,
.configurations = &usb_configurations, .configurations = &usb_configurations,
.configuration = 0, .configuration = 0,
.wcid_string_descriptor = wcid_string_descriptor,
.wcid_feature_descriptor = wcid_feature_descriptor,
}; };

View File

@ -20,6 +20,7 @@
* Boston, MA 02110-1301, USA. * Boston, MA 02110-1301, USA.
*/ */
#include <hackrf.h> #include <hackrf.h>
#include <stdio.h> #include <stdio.h>
@ -287,7 +288,7 @@ char* u64toa(uint64_t val, t_u64toa* str)
return res; return res;
} }
volatile bool do_exit = false; static volatile bool do_exit = false;
FILE* fd = NULL; FILE* fd = NULL;
volatile uint32_t byte_count = 0; volatile uint32_t byte_count = 0;
@ -332,6 +333,9 @@ uint32_t baseband_filter_bw_hz = 0;
bool repeat = false; bool repeat = false;
bool crystal_correct = false;
uint32_t crystal_correct_ppm ;
int rx_callback(hackrf_transfer* transfer) { int rx_callback(hackrf_transfer* transfer) {
ssize_t bytes_to_write; ssize_t bytes_to_write;
ssize_t bytes_written; ssize_t bytes_written;
@ -426,8 +430,8 @@ int tx_callback(hackrf_transfer* transfer) {
static void usage() { static void usage() {
printf("Usage:\n"); printf("Usage:\n");
printf("\t[-d serial_number] # Serial number of desired HackRF.\n"); printf("\t[-d serial_number] # Serial number of desired HackRF.\n");
printf("\t-r <filename> # Receive data into file.\n"); printf("\t-r <filename> # Receive data into file (use '-' for stdout).\n");
printf("\t-t <filename> # Transmit data from file.\n"); printf("\t-t <filename> # Transmit data from file (use '-' for stdin).\n");
printf("\t-w # Receive data into file with WAV header and automatic name.\n"); printf("\t-w # Receive data into file with WAV header and automatic name.\n");
printf("\t # This is for SDR# compatibility and may not work with other software.\n"); printf("\t # This is for SDR# compatibility and may not work with other software.\n");
printf("\t[-f freq_hz] # Frequency in Hz [%sMHz to %sMHz].\n", printf("\t[-f freq_hz] # Frequency in Hz [%sMHz to %sMHz].\n",
@ -451,6 +455,7 @@ static void usage() {
printf("\t[-c amplitude] # CW signal source mode, amplitude 0-127 (DC value to DAC).\n"); printf("\t[-c amplitude] # CW signal source mode, amplitude 0-127 (DC value to DAC).\n");
printf("\t[-R] # Repeat TX mode (default is off) \n"); printf("\t[-R] # Repeat TX mode (default is off) \n");
printf("\t[-b baseband_filter_bw_hz] # Set baseband filter bandwidth in Hz.\n\tPossible values: 1.75/2.5/3.5/5/5.5/6/7/8/9/10/12/14/15/20/24/28MHz, default < sample_rate_hz.\n" ); printf("\t[-b baseband_filter_bw_hz] # Set baseband filter bandwidth in Hz.\n\tPossible values: 1.75/2.5/3.5/5/5.5/6/7/8/9/10/12/14/15/20/24/28MHz, default < sample_rate_hz.\n" );
printf("\t[-C ppm] # Set Internal crystal clock error in ppm.\n");
} }
static hackrf_device* device = NULL; static hackrf_device* device = NULL;
@ -494,7 +499,7 @@ int main(int argc, char** argv) {
float time_diff; float time_diff;
unsigned int lna_gain=8, vga_gain=20, txvga_gain=0; unsigned int lna_gain=8, vga_gain=20, txvga_gain=0;
while( (opt = getopt(argc, argv, "wr:t:f:i:o:m:a:p:s:n:b:l:g:x:c:d:R")) != EOF ) while( (opt = getopt(argc, argv, "wr:t:f:i:o:m:a:p:s:n:b:l:g:x:c:d:C:R")) != EOF )
{ {
result = HACKRF_SUCCESS; result = HACKRF_SUCCESS;
switch( opt ) switch( opt )
@ -610,27 +615,32 @@ int main(int argc, char** argv) {
repeat = true; repeat = true;
break; break;
case 'C':
crystal_correct = true;
result = parse_u32(optarg, &crystal_correct_ppm);
break;
default: default:
printf("unknown argument '-%c %s'\n", opt, optarg); fprintf(stderr, "unknown argument '-%c %s'\n", opt, optarg);
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
if( result != HACKRF_SUCCESS ) { if( result != HACKRF_SUCCESS ) {
printf("argument error: '-%c %s' %s (%d)\n", opt, optarg, hackrf_error_name(result), result); fprintf(stderr, "argument error: '-%c %s' %s (%d)\n", opt, optarg, hackrf_error_name(result), result);
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
} }
if (lna_gain % 8) if (lna_gain % 8)
printf("warning: lna_gain (-l) must be a multiple of 8\n"); fprintf(stderr, "warning: lna_gain (-l) must be a multiple of 8\n");
if (vga_gain % 2) if (vga_gain % 2)
printf("warning: vga_gain (-g) must be a multiple of 2\n"); fprintf(stderr, "warning: vga_gain (-g) must be a multiple of 2\n");
if (samples_to_xfer >= SAMPLES_TO_XFER_MAX) { if (samples_to_xfer >= SAMPLES_TO_XFER_MAX) {
printf("argument error: num_samples must be less than %s/%sMio\n", fprintf(stderr, "argument error: num_samples must be less than %s/%sMio\n",
u64toa(SAMPLES_TO_XFER_MAX,&ascii_u64_data1), u64toa(SAMPLES_TO_XFER_MAX,&ascii_u64_data1),
u64toa((SAMPLES_TO_XFER_MAX/FREQ_ONE_MHZ),&ascii_u64_data2)); u64toa((SAMPLES_TO_XFER_MAX/FREQ_ONE_MHZ),&ascii_u64_data2));
usage(); usage();
@ -640,41 +650,41 @@ int main(int argc, char** argv) {
if (if_freq || lo_freq || image_reject) { if (if_freq || lo_freq || image_reject) {
/* explicit tuning selected */ /* explicit tuning selected */
if (!if_freq) { if (!if_freq) {
printf("argument error: if_freq_hz must be specified for explicit tuning.\n"); fprintf(stderr, "argument error: if_freq_hz must be specified for explicit tuning.\n");
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
if (!image_reject) { if (!image_reject) {
printf("argument error: image_reject must be specified for explicit tuning.\n"); fprintf(stderr, "argument error: image_reject must be specified for explicit tuning.\n");
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
if (!lo_freq && (image_reject_selection != RF_PATH_FILTER_BYPASS)) { if (!lo_freq && (image_reject_selection != RF_PATH_FILTER_BYPASS)) {
printf("argument error: lo_freq_hz must be specified for explicit tuning unless image_reject is set to bypass.\n"); fprintf(stderr, "argument error: lo_freq_hz must be specified for explicit tuning unless image_reject is set to bypass.\n");
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
if ((if_freq_hz > IF_MAX_HZ) || (if_freq_hz < IF_MIN_HZ)) { if ((if_freq_hz > IF_MAX_HZ) || (if_freq_hz < IF_MIN_HZ)) {
printf("argument error: if_freq_hz shall be between %s and %s.\n", fprintf(stderr, "argument error: if_freq_hz shall be between %s and %s.\n",
u64toa(IF_MIN_HZ,&ascii_u64_data1), u64toa(IF_MIN_HZ,&ascii_u64_data1),
u64toa(IF_MAX_HZ,&ascii_u64_data2)); u64toa(IF_MAX_HZ,&ascii_u64_data2));
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
if ((lo_freq_hz > LO_MAX_HZ) || (lo_freq_hz < LO_MIN_HZ)) { if ((lo_freq_hz > LO_MAX_HZ) || (lo_freq_hz < LO_MIN_HZ)) {
printf("argument error: lo_freq_hz shall be between %s and %s.\n", fprintf(stderr, "argument error: lo_freq_hz shall be between %s and %s.\n",
u64toa(LO_MIN_HZ,&ascii_u64_data1), u64toa(LO_MIN_HZ,&ascii_u64_data1),
u64toa(LO_MAX_HZ,&ascii_u64_data2)); u64toa(LO_MAX_HZ,&ascii_u64_data2));
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
if (image_reject_selection > 2) { if (image_reject_selection > 2) {
printf("argument error: image_reject must be 0, 1, or 2 .\n"); fprintf(stderr, "argument error: image_reject must be 0, 1, or 2 .\n");
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
if (automatic_tuning) { if (automatic_tuning) {
printf("warning: freq_hz ignored by explicit tuning selection.\n"); fprintf(stderr, "warning: freq_hz ignored by explicit tuning selection.\n");
automatic_tuning = false; automatic_tuning = false;
} }
switch (image_reject_selection) { switch (image_reject_selection) {
@ -691,13 +701,13 @@ int main(int argc, char** argv) {
freq_hz = DEFAULT_FREQ_HZ; freq_hz = DEFAULT_FREQ_HZ;
break; break;
} }
printf("explicit tuning specified for %s Hz.\n", fprintf(stderr, "explicit tuning specified for %s Hz.\n",
u64toa(freq_hz,&ascii_u64_data1)); u64toa(freq_hz,&ascii_u64_data1));
} else if (automatic_tuning) { } else if (automatic_tuning) {
if(freq_hz > FREQ_MAX_HZ) if(freq_hz > FREQ_MAX_HZ)
{ {
printf("argument error: freq_hz shall be between %s and %s.\n", fprintf(stderr, "argument error: freq_hz shall be between %s and %s.\n",
u64toa(FREQ_MIN_HZ,&ascii_u64_data1), u64toa(FREQ_MIN_HZ,&ascii_u64_data1),
u64toa(FREQ_MAX_HZ,&ascii_u64_data2)); u64toa(FREQ_MAX_HZ,&ascii_u64_data2));
usage(); usage();
@ -712,7 +722,7 @@ int main(int argc, char** argv) {
if( amp ) { if( amp ) {
if( amp_enable > 1 ) if( amp_enable > 1 )
{ {
printf("argument error: amp_enable shall be 0 or 1.\n"); fprintf(stderr, "argument error: amp_enable shall be 0 or 1.\n");
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
@ -720,7 +730,7 @@ int main(int argc, char** argv) {
if (antenna) { if (antenna) {
if (antenna_enable > 1) { if (antenna_enable > 1) {
printf("argument error: antenna_enable shall be 0 or 1.\n"); fprintf(stderr, "argument error: antenna_enable shall be 0 or 1.\n");
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
@ -742,14 +752,14 @@ int main(int argc, char** argv) {
} }
if (baseband_filter_bw_hz > BASEBAND_FILTER_BW_MAX) { if (baseband_filter_bw_hz > BASEBAND_FILTER_BW_MAX) {
printf("argument error: baseband_filter_bw_hz must be less or equal to %u Hz/%.03f MHz\n", fprintf(stderr, "argument error: baseband_filter_bw_hz must be less or equal to %u Hz/%.03f MHz\n",
BASEBAND_FILTER_BW_MAX, (float)(BASEBAND_FILTER_BW_MAX/FREQ_ONE_MHZ)); BASEBAND_FILTER_BW_MAX, (float)(BASEBAND_FILTER_BW_MAX/FREQ_ONE_MHZ));
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
if (baseband_filter_bw_hz < BASEBAND_FILTER_BW_MIN) { if (baseband_filter_bw_hz < BASEBAND_FILTER_BW_MIN) {
printf("argument error: baseband_filter_bw_hz must be greater or equal to %u Hz/%.03f MHz\n", fprintf(stderr, "argument error: baseband_filter_bw_hz must be greater or equal to %u Hz/%.03f MHz\n",
BASEBAND_FILTER_BW_MIN, (float)(BASEBAND_FILTER_BW_MIN/FREQ_ONE_MHZ)); BASEBAND_FILTER_BW_MIN, (float)(BASEBAND_FILTER_BW_MIN/FREQ_ONE_MHZ));
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
@ -757,7 +767,7 @@ int main(int argc, char** argv) {
if( (transmit == false) && (receive == receive_wav) ) if( (transmit == false) && (receive == receive_wav) )
{ {
printf("receive -r and receive_wav -w options are mutually exclusive\n"); fprintf(stderr, "receive -r and receive_wav -w options are mutually exclusive\n");
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
@ -768,10 +778,10 @@ int main(int argc, char** argv) {
{ {
if( transmit == true ) if( transmit == true )
{ {
printf("receive -r and transmit -t options are mutually exclusive\n"); fprintf(stderr, "receive -r and transmit -t options are mutually exclusive\n");
} else } else
{ {
printf("specify either transmit -t or receive -r or receive_wav -w option\n"); fprintf(stderr, "specify either transmit -t or receive -r or receive_wav -w option\n");
} }
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
@ -789,7 +799,7 @@ int main(int argc, char** argv) {
if (signalsource) { if (signalsource) {
transceiver_mode = TRANSCEIVER_MODE_SS; transceiver_mode = TRANSCEIVER_MODE_SS;
if (amplitude >127) { if (amplitude >127) {
printf("argument error: amplitude shall be in between 0 and 128.\n"); fprintf(stderr, "argument error: amplitude shall be in between 0 and 128.\n");
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
@ -804,28 +814,36 @@ int main(int argc, char** argv) {
strftime(date_time, DATE_TIME_MAX_LEN, "%Y%m%d_%H%M%S", timeinfo); strftime(date_time, DATE_TIME_MAX_LEN, "%Y%m%d_%H%M%S", timeinfo);
snprintf(path_file, PATH_FILE_MAX_LEN, "HackRF_%sZ_%ukHz_IQ.wav", date_time, (uint32_t)(freq_hz/(1000ull)) ); snprintf(path_file, PATH_FILE_MAX_LEN, "HackRF_%sZ_%ukHz_IQ.wav", date_time, (uint32_t)(freq_hz/(1000ull)) );
path = path_file; path = path_file;
printf("Receive wav file: %s\n", path); fprintf(stderr, "Receive wav file: %s\n", path);
} }
// In signal source mode, the PATH argument is neglected. // In signal source mode, the PATH argument is neglected.
if (transceiver_mode != TRANSCEIVER_MODE_SS) { if (transceiver_mode != TRANSCEIVER_MODE_SS) {
if( path == NULL ) { if( path == NULL ) {
printf("specify a path to a file to transmit/receive\n"); fprintf(stderr, "specify a path to a file to transmit/receive\n");
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
} }
// Change the freq and sample rate to correct the crystal clock error.
if( crystal_correct ) {
sample_rate_hz = (uint32_t)((double)sample_rate_hz * (1000000 - crystal_correct_ppm)/1000000+0.5);
freq_hz = freq_hz * (1000000 - crystal_correct_ppm)/1000000;
}
result = hackrf_init(); result = hackrf_init();
if( result != HACKRF_SUCCESS ) { if( result != HACKRF_SUCCESS ) {
printf("hackrf_init() failed: %s (%d)\n", hackrf_error_name(result), result); fprintf(stderr, "hackrf_init() failed: %s (%d)\n", hackrf_error_name(result), result);
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
result = hackrf_open_by_serial(serial_number, &device); result = hackrf_open_by_serial(serial_number, &device);
if( result != HACKRF_SUCCESS ) { if( result != HACKRF_SUCCESS ) {
printf("hackrf_open() failed: %s (%d)\n", hackrf_error_name(result), result); fprintf(stderr, "hackrf_open() failed: %s (%d)\n", hackrf_error_name(result), result);
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
@ -833,19 +851,27 @@ int main(int argc, char** argv) {
if (transceiver_mode != TRANSCEIVER_MODE_SS) { if (transceiver_mode != TRANSCEIVER_MODE_SS) {
if( transceiver_mode == TRANSCEIVER_MODE_RX ) if( transceiver_mode == TRANSCEIVER_MODE_RX )
{ {
if (strcmp(path, "-") == 0) {
fd = stdout;
} else {
fd = fopen(path, "wb"); fd = fopen(path, "wb");
}
} else {
if (strcmp(path, "-") == 0) {
fd = stdin;
} else { } else {
fd = fopen(path, "rb"); fd = fopen(path, "rb");
} }
}
if( fd == NULL ) { if( fd == NULL ) {
printf("Failed to open file: %s\n", path); fprintf(stderr, "Failed to open file: %s\n", path);
return EXIT_FAILURE; return EXIT_FAILURE;
} }
/* Change fd buffer to have bigger one to store or read data on/to HDD */ /* Change fd buffer to have bigger one to store or read data on/to HDD */
result = setvbuf(fd , NULL , _IOFBF , FD_BUFFER_SIZE); result = setvbuf(fd , NULL , _IOFBF , FD_BUFFER_SIZE);
if( result != 0 ) { if( result != 0 ) {
printf("setvbuf() failed: %d\n", result); fprintf(stderr, "setvbuf() failed: %d\n", result);
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
@ -867,19 +893,19 @@ int main(int argc, char** argv) {
signal(SIGTERM, &sigint_callback_handler); signal(SIGTERM, &sigint_callback_handler);
signal(SIGABRT, &sigint_callback_handler); signal(SIGABRT, &sigint_callback_handler);
#endif #endif
printf("call hackrf_sample_rate_set(%u Hz/%.03f MHz)\n", sample_rate_hz,((float)sample_rate_hz/(float)FREQ_ONE_MHZ)); fprintf(stderr, "call hackrf_sample_rate_set(%u Hz/%.03f MHz)\n", sample_rate_hz,((float)sample_rate_hz/(float)FREQ_ONE_MHZ));
result = hackrf_set_sample_rate_manual(device, sample_rate_hz, 1); result = hackrf_set_sample_rate_manual(device, sample_rate_hz, 1);
if( result != HACKRF_SUCCESS ) { if( result != HACKRF_SUCCESS ) {
printf("hackrf_sample_rate_set() failed: %s (%d)\n", hackrf_error_name(result), result); fprintf(stderr, "hackrf_sample_rate_set() failed: %s (%d)\n", hackrf_error_name(result), result);
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
printf("call hackrf_baseband_filter_bandwidth_set(%d Hz/%.03f MHz)\n", fprintf(stderr, "call hackrf_baseband_filter_bandwidth_set(%d Hz/%.03f MHz)\n",
baseband_filter_bw_hz, ((float)baseband_filter_bw_hz/(float)FREQ_ONE_MHZ)); baseband_filter_bw_hz, ((float)baseband_filter_bw_hz/(float)FREQ_ONE_MHZ));
result = hackrf_set_baseband_filter_bandwidth(device, baseband_filter_bw_hz); result = hackrf_set_baseband_filter_bandwidth(device, baseband_filter_bw_hz);
if( result != HACKRF_SUCCESS ) { if( result != HACKRF_SUCCESS ) {
printf("hackrf_baseband_filter_bandwidth_set() failed: %s (%d)\n", hackrf_error_name(result), result); fprintf(stderr, "hackrf_baseband_filter_bandwidth_set() failed: %s (%d)\n", hackrf_error_name(result), result);
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
@ -893,29 +919,29 @@ int main(int argc, char** argv) {
result |= hackrf_start_tx(device, tx_callback, NULL); result |= hackrf_start_tx(device, tx_callback, NULL);
} }
if( result != HACKRF_SUCCESS ) { if( result != HACKRF_SUCCESS ) {
printf("hackrf_start_?x() failed: %s (%d)\n", hackrf_error_name(result), result); fprintf(stderr, "hackrf_start_?x() failed: %s (%d)\n", hackrf_error_name(result), result);
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
if (automatic_tuning) { if (automatic_tuning) {
printf("call hackrf_set_freq(%s Hz/%.03f MHz)\n", fprintf(stderr, "call hackrf_set_freq(%s Hz/%.03f MHz)\n",
u64toa(freq_hz, &ascii_u64_data1),((double)freq_hz/(double)FREQ_ONE_MHZ) ); u64toa(freq_hz, &ascii_u64_data1),((double)freq_hz/(double)FREQ_ONE_MHZ) );
result = hackrf_set_freq(device, freq_hz); result = hackrf_set_freq(device, freq_hz);
if( result != HACKRF_SUCCESS ) { if( result != HACKRF_SUCCESS ) {
printf("hackrf_set_freq() failed: %s (%d)\n", hackrf_error_name(result), result); fprintf(stderr, "hackrf_set_freq() failed: %s (%d)\n", hackrf_error_name(result), result);
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
} else { } else {
printf("call hackrf_set_freq_explicit() with %s Hz IF, %s Hz LO, %s\n", fprintf(stderr, "call hackrf_set_freq_explicit() with %s Hz IF, %s Hz LO, %s\n",
u64toa(if_freq_hz,&ascii_u64_data1), u64toa(if_freq_hz,&ascii_u64_data1),
u64toa(lo_freq_hz,&ascii_u64_data2), u64toa(lo_freq_hz,&ascii_u64_data2),
hackrf_filter_path_name(image_reject_selection)); hackrf_filter_path_name(image_reject_selection));
result = hackrf_set_freq_explicit(device, if_freq_hz, lo_freq_hz, result = hackrf_set_freq_explicit(device, if_freq_hz, lo_freq_hz,
image_reject_selection); image_reject_selection);
if (result != HACKRF_SUCCESS) { if (result != HACKRF_SUCCESS) {
printf("hackrf_set_freq_explicit() failed: %s (%d)\n", fprintf(stderr, "hackrf_set_freq_explicit() failed: %s (%d)\n",
hackrf_error_name(result), result); hackrf_error_name(result), result);
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
@ -923,27 +949,27 @@ int main(int argc, char** argv) {
} }
if( amp ) { if( amp ) {
printf("call hackrf_set_amp_enable(%u)\n", amp_enable); fprintf(stderr, "call hackrf_set_amp_enable(%u)\n", amp_enable);
result = hackrf_set_amp_enable(device, (uint8_t)amp_enable); result = hackrf_set_amp_enable(device, (uint8_t)amp_enable);
if( result != HACKRF_SUCCESS ) { if( result != HACKRF_SUCCESS ) {
printf("hackrf_set_amp_enable() failed: %s (%d)\n", hackrf_error_name(result), result); fprintf(stderr, "hackrf_set_amp_enable() failed: %s (%d)\n", hackrf_error_name(result), result);
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
} }
if (antenna) { if (antenna) {
printf("call hackrf_set_antenna_enable(%u)\n", antenna_enable); fprintf(stderr, "call hackrf_set_antenna_enable(%u)\n", antenna_enable);
result = hackrf_set_antenna_enable(device, (uint8_t)antenna_enable); result = hackrf_set_antenna_enable(device, (uint8_t)antenna_enable);
if (result != HACKRF_SUCCESS) { if (result != HACKRF_SUCCESS) {
printf("hackrf_set_antenna_enable() failed: %s (%d)\n", hackrf_error_name(result), result); fprintf(stderr, "hackrf_set_antenna_enable() failed: %s (%d)\n", hackrf_error_name(result), result);
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
} }
if( limit_num_samples ) { if( limit_num_samples ) {
printf("samples_to_xfer %s/%sMio\n", fprintf(stderr, "samples_to_xfer %s/%sMio\n",
u64toa(samples_to_xfer,&ascii_u64_data1), u64toa(samples_to_xfer,&ascii_u64_data1),
u64toa((samples_to_xfer/FREQ_ONE_MHZ),&ascii_u64_data2) ); u64toa((samples_to_xfer/FREQ_ONE_MHZ),&ascii_u64_data2) );
} }
@ -951,7 +977,7 @@ int main(int argc, char** argv) {
gettimeofday(&t_start, NULL); gettimeofday(&t_start, NULL);
gettimeofday(&time_start, NULL); gettimeofday(&time_start, NULL);
printf("Stop with Ctrl-C\n"); fprintf(stderr, "Stop with Ctrl-C\n");
while( (hackrf_is_streaming(device) == HACKRF_TRUE) && while( (hackrf_is_streaming(device) == HACKRF_TRUE) &&
(do_exit == false) ) (do_exit == false) )
{ {
@ -967,14 +993,14 @@ int main(int argc, char** argv) {
time_difference = TimevalDiff(&time_now, &time_start); time_difference = TimevalDiff(&time_now, &time_start);
rate = (float)byte_count_now / time_difference; rate = (float)byte_count_now / time_difference;
printf("%4.1f MiB / %5.3f sec = %4.1f MiB/second\n", fprintf(stderr, "%4.1f MiB / %5.3f sec = %4.1f MiB/second\n",
(byte_count_now / 1e6f), time_difference, (rate / 1e6f) ); (byte_count_now / 1e6f), time_difference, (rate / 1e6f) );
time_start = time_now; time_start = time_now;
if (byte_count_now == 0) { if (byte_count_now == 0) {
exit_code = EXIT_FAILURE; exit_code = EXIT_FAILURE;
printf("\nCouldn't transfer any bytes for one second.\n"); fprintf(stderr, "\nCouldn't transfer any bytes for one second.\n");
break; break;
} }
} }
@ -982,14 +1008,14 @@ int main(int argc, char** argv) {
result = hackrf_is_streaming(device); result = hackrf_is_streaming(device);
if (do_exit) if (do_exit)
{ {
printf("\nUser cancel, exiting...\n"); fprintf(stderr, "\nUser cancel, exiting...\n");
} else { } else {
printf("\nExiting... hackrf_is_streaming() result: %s (%d)\n", hackrf_error_name(result), result); fprintf(stderr, "\nExiting... hackrf_is_streaming() result: %s (%d)\n", hackrf_error_name(result), result);
} }
gettimeofday(&t_end, NULL); gettimeofday(&t_end, NULL);
time_diff = TimevalDiff(&t_end, &t_start); time_diff = TimevalDiff(&t_end, &t_start);
printf("Total time: %5.5f s\n", time_diff); fprintf(stderr, "Total time: %5.5f s\n", time_diff);
if(device != NULL) if(device != NULL)
{ {
@ -997,9 +1023,9 @@ int main(int argc, char** argv) {
{ {
result = hackrf_stop_rx(device); result = hackrf_stop_rx(device);
if( result != HACKRF_SUCCESS ) { if( result != HACKRF_SUCCESS ) {
printf("hackrf_stop_rx() failed: %s (%d)\n", hackrf_error_name(result), result); fprintf(stderr, "hackrf_stop_rx() failed: %s (%d)\n", hackrf_error_name(result), result);
}else { }else {
printf("hackrf_stop_rx() done\n"); fprintf(stderr, "hackrf_stop_rx() done\n");
} }
} }
@ -1007,22 +1033,22 @@ int main(int argc, char** argv) {
{ {
result = hackrf_stop_tx(device); result = hackrf_stop_tx(device);
if( result != HACKRF_SUCCESS ) { if( result != HACKRF_SUCCESS ) {
printf("hackrf_stop_tx() failed: %s (%d)\n", hackrf_error_name(result), result); fprintf(stderr, "hackrf_stop_tx() failed: %s (%d)\n", hackrf_error_name(result), result);
}else { }else {
printf("hackrf_stop_tx() done\n"); fprintf(stderr, "hackrf_stop_tx() done\n");
} }
} }
result = hackrf_close(device); result = hackrf_close(device);
if( result != HACKRF_SUCCESS ) if( result != HACKRF_SUCCESS )
{ {
printf("hackrf_close() failed: %s (%d)\n", hackrf_error_name(result), result); fprintf(stderr, "hackrf_close() failed: %s (%d)\n", hackrf_error_name(result), result);
}else { }else {
printf("hackrf_close() done\n"); fprintf(stderr, "hackrf_close() done\n");
} }
hackrf_exit(); hackrf_exit();
printf("hackrf_exit() done\n"); fprintf(stderr, "hackrf_exit() done\n");
} }
if(fd != NULL) if(fd != NULL)
@ -1042,8 +1068,8 @@ int main(int argc, char** argv) {
} }
fclose(fd); fclose(fd);
fd = NULL; fd = NULL;
printf("fclose(fd) done\n"); fprintf(stderr, "fclose(fd) done\n");
} }
printf("exit\n"); fprintf(stderr, "exit\n");
return exit_code; return exit_code;
} }

View File

@ -117,7 +117,7 @@ static const max2837_ft_t max2837_ft[] = {
{ 0 } { 0 }
}; };
volatile bool do_exit = false; static volatile bool do_exit = false;
static const uint16_t hackrf_usb_vid = 0x1d50; static const uint16_t hackrf_usb_vid = 0x1d50;
static const uint16_t hackrf_jawbreaker_usb_pid = 0x604b; static const uint16_t hackrf_jawbreaker_usb_pid = 0x604b;