Compare commits

..

No commits in common. "main" and "main" have entirely different histories.
main ... main

59 changed files with 0 additions and 70338 deletions

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

View File

@ -1,45 +0,0 @@
G04 PROTEUS RS274X GERBER FILE*
%FSLAX24Y24*%
%MOIN*%
%ADD23R,0.0600X0.0400*%
%ADD73R,0.0400X0.0600*%
%ADD27C,0.0080*%
G54D23*
X+13500Y+12760D03*
X+13500Y+14000D03*
X+15000Y+12760D03*
X+15000Y+14000D03*
X+19000Y+21760D03*
X+19000Y+23000D03*
X+12500Y+21760D03*
X+12500Y+23000D03*
X+13500Y+17260D03*
X+13500Y+18500D03*
X+18750Y+17760D03*
X+18750Y+19000D03*
X+20000Y+11000D03*
X+20000Y+12240D03*
X+6000Y+21500D03*
X+6000Y+22740D03*
X+3000Y+13740D03*
X+3000Y+12500D03*
X+6000Y+5240D03*
X+6000Y+4000D03*
G54D73*
X+9000Y+6000D03*
X+10240Y+6000D03*
X+9000Y+5000D03*
X+10240Y+5000D03*
X+9000Y+4000D03*
X+10240Y+4000D03*
X+6740Y+9000D03*
X+5500Y+9000D03*
X+9250Y+10000D03*
X+10490Y+10000D03*
G54D27*
X+49Y+186D02*
X+25399Y+186D01*
X+25399Y+24647D01*
X+49Y+24647D01*
X+49Y+186D01*
M00*

View File

@ -1,446 +0,0 @@
G04 PROTEUS RS274X GERBER FILE*
%FSLAX24Y24*%
%MOIN*%
%ADD27C,0.0080*%
%ADD72C,0.0100*%
G54D27*
X+49Y+186D02*
X+25399Y+186D01*
X+25399Y+24647D01*
X+49Y+24647D01*
X+49Y+186D01*
G54D72*
X+15861Y+10854D02*
X+15861Y+11454D01*
X+15486Y+11454D01*
X+15861Y+11154D02*
X+15611Y+11154D01*
X+14986Y+11054D02*
X+15361Y+11054D01*
X+15111Y+11454D01*
X+15111Y+10854D01*
X+14611Y+11054D02*
X+14486Y+11054D01*
X+14486Y+10854D01*
X+14736Y+10854D01*
X+14861Y+11054D01*
X+14861Y+11254D01*
X+14736Y+11454D01*
X+14549Y+11454D01*
X+14486Y+11354D01*
X+14361Y+11254D02*
X+14236Y+11454D01*
X+14111Y+11454D01*
X+13986Y+11254D01*
X+13986Y+11054D01*
X+14111Y+10854D01*
X+14236Y+10854D01*
X+14361Y+11054D01*
X+14361Y+11254D01*
X+13861Y+10854D02*
X+13861Y+11454D01*
X+13486Y+11454D02*
X+13486Y+10854D01*
X+13861Y+11154D02*
X+13486Y+11154D01*
X+16936Y+11777D02*
X+16936Y+12377D01*
X+16624Y+12377D01*
X+16561Y+12277D01*
X+16561Y+12177D01*
X+16624Y+12077D01*
X+16561Y+11977D01*
X+16561Y+11877D01*
X+16624Y+11777D01*
X+16936Y+11777D01*
X+16936Y+12077D02*
X+16624Y+12077D01*
X+16061Y+11777D02*
X+16436Y+11777D01*
X+16436Y+12377D01*
X+16061Y+12377D01*
X+16436Y+12077D02*
X+16186Y+12077D01*
X+15936Y+11777D02*
X+15936Y+12177D01*
X+15811Y+12377D01*
X+15686Y+12377D01*
X+15561Y+12177D01*
X+15561Y+11777D01*
X+15936Y+11977D02*
X+15561Y+11977D01*
X+15061Y+11877D02*
X+15124Y+11777D01*
X+15311Y+11777D01*
X+15436Y+11977D01*
X+15436Y+12177D01*
X+15311Y+12377D01*
X+15124Y+12377D01*
X+15061Y+12277D01*
X+14936Y+12177D02*
X+14811Y+12377D01*
X+14686Y+12377D01*
X+14561Y+12177D01*
X+14561Y+11977D01*
X+14686Y+11777D01*
X+14811Y+11777D01*
X+14936Y+11977D01*
X+14936Y+12177D01*
X+14436Y+11777D02*
X+14436Y+12377D01*
X+14061Y+11777D01*
X+14061Y+12377D01*
X+13436Y+11777D02*
X+13436Y+12377D01*
X+13061Y+12377D02*
X+13061Y+11777D01*
X+13436Y+12077D02*
X+13061Y+12077D01*
X+12936Y+11777D02*
X+12936Y+12377D01*
X+12561Y+12377D01*
X+12936Y+12077D02*
X+12686Y+12077D01*
G54D27*
X+13790Y+13090D02*
X+13790Y+13690D01*
X+13210Y+13100D02*
X+13210Y+13690D01*
X+14310Y+13880D02*
X+13950Y+13880D01*
X+13950Y+13568D01*
X+14010Y+13505D01*
X+14070Y+13505D01*
X+14130Y+13568D01*
X+14130Y+13880D01*
X+14130Y+13568D02*
X+14190Y+13505D01*
X+14310Y+13505D01*
X+14010Y+13318D02*
X+13950Y+13255D01*
X+13950Y+13068D01*
X+14010Y+13005D01*
X+14070Y+13005D01*
X+14130Y+13068D01*
X+14190Y+13005D01*
X+14250Y+13005D01*
X+14310Y+13068D01*
X+14310Y+13255D01*
X+14250Y+13318D01*
X+14130Y+13193D02*
X+14130Y+13068D01*
X+15290Y+13090D02*
X+15290Y+13690D01*
X+14710Y+13100D02*
X+14710Y+13690D01*
X+15750Y+13505D02*
X+15810Y+13568D01*
X+15810Y+13755D01*
X+15690Y+13880D01*
X+15570Y+13880D01*
X+15450Y+13755D01*
X+15450Y+13568D01*
X+15510Y+13505D01*
X+15450Y+13005D02*
X+15450Y+13318D01*
X+15570Y+13318D01*
X+15570Y+13068D01*
X+15630Y+13005D01*
X+15750Y+13005D01*
X+15810Y+13068D01*
X+15810Y+13255D01*
X+15750Y+13318D01*
X+19290Y+22090D02*
X+19290Y+22690D01*
X+18710Y+22100D02*
X+18710Y+22690D01*
X+19750Y+22505D02*
X+19810Y+22568D01*
X+19810Y+22755D01*
X+19690Y+22880D01*
X+19570Y+22880D01*
X+19450Y+22755D01*
X+19450Y+22568D01*
X+19510Y+22505D01*
X+19570Y+22005D02*
X+19630Y+22068D01*
X+19630Y+22255D01*
X+19570Y+22318D01*
X+19510Y+22318D01*
X+19450Y+22255D01*
X+19450Y+22068D01*
X+19510Y+22005D01*
X+19750Y+22005D01*
X+19810Y+22068D01*
X+19810Y+22255D01*
X+12790Y+22090D02*
X+12790Y+22690D01*
X+12210Y+22100D02*
X+12210Y+22690D01*
X+13250Y+22505D02*
X+13310Y+22568D01*
X+13310Y+22755D01*
X+13190Y+22880D01*
X+13070Y+22880D01*
X+12950Y+22755D01*
X+12950Y+22568D01*
X+13010Y+22505D01*
X+13130Y+22255D02*
X+13070Y+22318D01*
X+13010Y+22318D01*
X+12950Y+22255D01*
X+12950Y+22068D01*
X+13010Y+22005D01*
X+13070Y+22005D01*
X+13130Y+22068D01*
X+13130Y+22255D01*
X+13190Y+22318D01*
X+13250Y+22318D01*
X+13310Y+22255D01*
X+13310Y+22068D01*
X+13250Y+22005D01*
X+13190Y+22005D01*
X+13130Y+22068D01*
X+13790Y+17590D02*
X+13790Y+18190D01*
X+13210Y+17600D02*
X+13210Y+18190D01*
X+14250Y+18005D02*
X+14310Y+18068D01*
X+14310Y+18255D01*
X+14190Y+18380D01*
X+14070Y+18380D01*
X+13950Y+18255D01*
X+13950Y+18068D01*
X+14010Y+18005D01*
X+14010Y+17505D02*
X+13950Y+17568D01*
X+13950Y+17755D01*
X+14010Y+17818D01*
X+14250Y+17818D01*
X+14310Y+17755D01*
X+14310Y+17568D01*
X+14250Y+17505D01*
X+14190Y+17505D01*
X+14130Y+17568D01*
X+14130Y+17818D01*
X+19040Y+18090D02*
X+19040Y+18690D01*
X+18460Y+18100D02*
X+18460Y+18690D01*
X+19500Y+18755D02*
X+19560Y+18818D01*
X+19560Y+19005D01*
X+19440Y+19130D01*
X+19320Y+19130D01*
X+19200Y+19005D01*
X+19200Y+18818D01*
X+19260Y+18755D01*
X+19320Y+18505D02*
X+19200Y+18380D01*
X+19560Y+18380D01*
X+19320Y+18005D02*
X+19200Y+17880D01*
X+19560Y+17880D01*
X+20290Y+11330D02*
X+20290Y+11930D01*
X+19710Y+11340D02*
X+19710Y+11930D01*
X+20750Y+11745D02*
X+20810Y+11808D01*
X+20810Y+11995D01*
X+20690Y+12120D01*
X+20570Y+12120D01*
X+20450Y+11995D01*
X+20450Y+11808D01*
X+20510Y+11745D01*
X+20690Y+11245D02*
X+20690Y+11620D01*
X+20450Y+11370D01*
X+20810Y+11370D01*
X+6290Y+21830D02*
X+6290Y+22430D01*
X+5710Y+21840D02*
X+5710Y+22430D01*
X+6750Y+22245D02*
X+6810Y+22308D01*
X+6810Y+22495D01*
X+6690Y+22620D01*
X+6570Y+22620D01*
X+6450Y+22495D01*
X+6450Y+22308D01*
X+6510Y+22245D01*
X+6450Y+22058D02*
X+6450Y+21745D01*
X+6510Y+21745D01*
X+6810Y+22058D01*
X+2710Y+13410D02*
X+2710Y+12810D01*
X+3290Y+13400D02*
X+3290Y+12810D01*
X+2490Y+13245D02*
X+2550Y+13308D01*
X+2550Y+13495D01*
X+2430Y+13620D01*
X+2310Y+13620D01*
X+2190Y+13495D01*
X+2190Y+13308D01*
X+2250Y+13245D01*
X+2250Y+13058D02*
X+2190Y+12995D01*
X+2190Y+12808D01*
X+2250Y+12745D01*
X+2310Y+12745D01*
X+2370Y+12808D01*
X+2430Y+12745D01*
X+2490Y+12745D01*
X+2550Y+12808D01*
X+2550Y+12995D01*
X+2490Y+13058D01*
X+2370Y+12933D02*
X+2370Y+12808D01*
X+5710Y+4910D02*
X+5710Y+4310D01*
X+6290Y+4900D02*
X+6290Y+4310D01*
X+5490Y+4745D02*
X+5550Y+4808D01*
X+5550Y+4995D01*
X+5430Y+5120D01*
X+5310Y+5120D01*
X+5190Y+4995D01*
X+5190Y+4808D01*
X+5250Y+4745D01*
X+5250Y+4558D02*
X+5190Y+4495D01*
X+5190Y+4308D01*
X+5250Y+4245D01*
X+5310Y+4245D01*
X+5370Y+4308D01*
X+5370Y+4495D01*
X+5430Y+4558D01*
X+5550Y+4558D01*
X+5550Y+4245D01*
X+9330Y+5710D02*
X+9930Y+5710D01*
X+9340Y+6290D02*
X+9930Y+6290D01*
X+9995Y+6750D02*
X+10058Y+6690D01*
X+10245Y+6690D01*
X+10370Y+6810D01*
X+10370Y+6930D01*
X+10245Y+7050D01*
X+10058Y+7050D01*
X+9995Y+6990D01*
X+9745Y+6930D02*
X+9620Y+7050D01*
X+9620Y+6690D01*
X+9308Y+6990D02*
X+9245Y+7050D01*
X+9058Y+7050D01*
X+8995Y+6990D01*
X+8995Y+6930D01*
X+9058Y+6870D01*
X+9245Y+6870D01*
X+9308Y+6810D01*
X+9308Y+6690D01*
X+8995Y+6690D01*
X+9330Y+4710D02*
X+9930Y+4710D01*
X+9340Y+5290D02*
X+9930Y+5290D01*
X+8245Y+5000D02*
X+8308Y+4940D01*
X+8495Y+4940D01*
X+8620Y+5060D01*
X+8620Y+5180D01*
X+8495Y+5300D01*
X+8308Y+5300D01*
X+8245Y+5240D01*
X+7995Y+5180D02*
X+7870Y+5300D01*
X+7870Y+4940D01*
X+7558Y+5240D02*
X+7495Y+5300D01*
X+7308Y+5300D01*
X+7245Y+5240D01*
X+7245Y+5180D01*
X+7308Y+5120D01*
X+7245Y+5060D01*
X+7245Y+5000D01*
X+7308Y+4940D01*
X+7495Y+4940D01*
X+7558Y+5000D01*
X+7433Y+5120D02*
X+7308Y+5120D01*
X+9330Y+3710D02*
X+9930Y+3710D01*
X+9340Y+4290D02*
X+9930Y+4290D01*
X+9995Y+3250D02*
X+10058Y+3190D01*
X+10245Y+3190D01*
X+10370Y+3310D01*
X+10370Y+3430D01*
X+10245Y+3550D01*
X+10058Y+3550D01*
X+9995Y+3490D01*
X+9745Y+3430D02*
X+9620Y+3550D01*
X+9620Y+3190D01*
X+8995Y+3310D02*
X+9370Y+3310D01*
X+9120Y+3550D01*
X+9120Y+3190D01*
X+6410Y+9290D02*
X+5810Y+9290D01*
X+6400Y+8710D02*
X+5810Y+8710D01*
X+6495Y+9510D02*
X+6558Y+9450D01*
X+6745Y+9450D01*
X+6870Y+9570D01*
X+6870Y+9690D01*
X+6745Y+9810D01*
X+6558Y+9810D01*
X+6495Y+9750D01*
X+6245Y+9690D02*
X+6120Y+9810D01*
X+6120Y+9450D01*
X+5495Y+9810D02*
X+5808Y+9810D01*
X+5808Y+9690D01*
X+5558Y+9690D01*
X+5495Y+9630D01*
X+5495Y+9510D01*
X+5558Y+9450D01*
X+5745Y+9450D01*
X+5808Y+9510D01*
X+9580Y+9710D02*
X+10180Y+9710D01*
X+9590Y+10290D02*
X+10180Y+10290D01*
X+10245Y+9250D02*
X+10308Y+9190D01*
X+10495Y+9190D01*
X+10620Y+9310D01*
X+10620Y+9430D01*
X+10495Y+9550D01*
X+10308Y+9550D01*
X+10245Y+9490D01*
X+9995Y+9430D02*
X+9870Y+9550D01*
X+9870Y+9190D01*
X+9245Y+9490D02*
X+9308Y+9550D01*
X+9495Y+9550D01*
X+9558Y+9490D01*
X+9558Y+9250D01*
X+9495Y+9190D01*
X+9308Y+9190D01*
X+9245Y+9250D01*
X+9245Y+9310D01*
X+9308Y+9370D01*
X+9558Y+9370D01*
M00*

View File

@ -1,192 +0,0 @@
G04 PROTEUS RS274X GERBER FILE*
%FSLAX24Y24*%
%MOIN*%
%ADD71C,0.0600*%
%ADD30C,0.2900*%
%ADD31R,0.1000X0.1000*%
%ADD17C,0.1200*%
%ADD25C,0.1500*%
%AMDIL027*4,1,8,-0.0850,0.0800,
-0.0550,0.1100,0.0550,0.1100,0.0850,0.0800,0.0850,-0.0800,
0.0550,-0.1100,-0.0550,-0.1100,-0.0850,-0.0800,-0.0850,0.0800,0*
*%
%ADD33DIL027*%
%AMDIL028*4,1,8,-0.1100,0.0550,
-0.0800,0.0850,0.0800,0.0850,0.1100,0.0550,0.1100,-0.0550,
0.0800,-0.0850,-0.0800,-0.0850,-0.1100,-0.0550,-0.1100,0.0550,0*
*%
%ADD34DIL028*%
%ADD35R,0.1800X0.1800*%
%ADD37R,0.0800X0.0600*%
%ADD21C,0.0900*%
%ADD36C,0.1100*%
%ADD15C,0.1000*%
%AMDIL032*4,1,8,-0.0400,0.0480,
-0.0280,0.0600,0.0280,0.0600,0.0400,0.0480,0.0400,-0.0480,
0.0280,-0.0600,-0.0280,-0.0600,-0.0400,-0.0480,-0.0400,0.0480,0*
*%
%ADD38DIL032*%
%ADD39C,0.1800*%
%AMDIL034*4,1,8,-0.1100,0.0390,
-0.0940,0.0550,0.0940,0.0550,0.1100,0.0390,0.1100,-0.0390,
0.0940,-0.0550,-0.0940,-0.0550,-0.1100,-0.0390,-0.1100,0.0390,0*
*%
%ADD40DIL034*%
%ADD41R,0.0600X0.0800*%
%ADD27C,0.0080*%
G54D71*
X+17600Y+10600D03*
X+16600Y+1800D03*
X+17000Y+5000D03*
X+17200Y+13000D03*
X+17200Y+11400D03*
X+575Y+7310D03*
G54D30*
X+24000Y+2000D03*
X+2000Y+2000D03*
X+2000Y+22500D03*
X+23500Y+22500D03*
G54D31*
X+18500Y+12000D03*
X+18500Y+11000D03*
X+18500Y+10000D03*
X+18500Y+9000D03*
X+18500Y+8000D03*
X+22000Y+3000D03*
X+22000Y+1228D03*
X+19440Y+1228D03*
X+19440Y+3000D03*
X+1500Y+13500D03*
X+1500Y+12500D03*
X+1500Y+11500D03*
X+1500Y+10500D03*
G54D17*
X+4500Y+23500D03*
X+4500Y+21531D03*
X+21000Y+21531D03*
X+21000Y+23500D03*
G54D25*
X+24000Y+19000D03*
X+24000Y+17000D03*
X+22000Y+17000D03*
X+22000Y+19000D03*
X+23000Y+18000D03*
G54D33*
X+2500Y+17500D03*
G54D34*
X+4000Y+15500D03*
G54D33*
X+5000Y+17500D03*
G54D35*
X+23000Y+14000D03*
G54D37*
X+13500Y+12760D03*
X+13500Y+14000D03*
X+15000Y+12760D03*
X+15000Y+14000D03*
G54D71*
X+13000Y+15500D03*
X+13500Y+15000D03*
X+14000Y+15500D03*
G54D21*
X+17500Y+17000D03*
X+15500Y+17000D03*
X+15500Y+16000D03*
X+17500Y+16000D03*
G54D37*
X+19000Y+21760D03*
X+19000Y+23000D03*
X+12500Y+21760D03*
X+12500Y+23000D03*
G54D36*
X+7500Y+21500D03*
X+11500Y+21500D03*
X+13500Y+21500D03*
X+17500Y+21500D03*
G54D37*
X+13500Y+17260D03*
X+13500Y+18500D03*
G54D15*
X+18750Y+16000D03*
X+19750Y+16000D03*
G54D37*
X+18750Y+17760D03*
X+18750Y+19000D03*
G54D21*
X+15000Y+19000D03*
X+17000Y+19000D03*
X+12000Y+18500D03*
X+10000Y+18500D03*
G54D15*
X+11000Y+16000D03*
X+10000Y+16000D03*
G54D37*
X+20000Y+11000D03*
X+20000Y+12240D03*
X+6000Y+21500D03*
X+6000Y+22740D03*
G54D36*
X+1500Y+19500D03*
X+5500Y+19500D03*
G54D37*
X+3000Y+13740D03*
X+3000Y+12500D03*
X+6000Y+5240D03*
X+6000Y+4000D03*
G54D31*
X+4500Y+4000D03*
X+4500Y+5000D03*
X+4500Y+6000D03*
X+4500Y+7000D03*
X+4500Y+8000D03*
X+4500Y+9000D03*
X+4500Y+10000D03*
X+4500Y+11000D03*
X+4500Y+12000D03*
X+11500Y+12000D03*
X+11500Y+11000D03*
X+11500Y+10000D03*
X+11500Y+9000D03*
X+11500Y+8000D03*
X+11500Y+7000D03*
X+11500Y+6000D03*
X+11500Y+5000D03*
X+11500Y+4000D03*
X+7500Y+18500D03*
X+7500Y+17500D03*
X+7500Y+16500D03*
G54D38*
X+15000Y+7000D03*
X+16000Y+7000D03*
X+17000Y+7000D03*
X+15000Y+1000D03*
X+17000Y+1000D03*
G54D39*
X+14000Y+4000D03*
X+18000Y+4000D03*
G54D40*
X+21250Y+6000D03*
X+23250Y+4500D03*
X+24000Y+6000D03*
G54D31*
X+1500Y+6500D03*
X+1500Y+5500D03*
X+1500Y+4500D03*
G54D41*
X+9000Y+6000D03*
X+10240Y+6000D03*
X+9000Y+5000D03*
X+10240Y+5000D03*
X+9000Y+4000D03*
X+10240Y+4000D03*
X+6740Y+9000D03*
X+5500Y+9000D03*
X+9250Y+10000D03*
X+10490Y+10000D03*
G54D27*
X+49Y+186D02*
X+25399Y+186D01*
X+25399Y+24647D01*
X+49Y+24647D01*
X+49Y+186D01*
M00*

View File

@ -1,115 +0,0 @@
M48
INCH
T01C0.0150
T02C0.1181
T03C0.0400
T04C0.0314
T05C0.0600
T06C0.0320
T07C0.0300
T08C0.0433
T09C0.0826
T10C0.0787
%
T01
X+017600Y+010600
X+016600Y+001800
X+017000Y+005000
X+017200Y+013000
X+017200Y+011400
X+000575Y+007310
T02
X+024000Y+002000
X+002000Y+002000
X+002000Y+022500
X+023500Y+022500
X+002500Y+017500
X+004000Y+015500
X+005000Y+017500
T03
X+018500Y+012000
X+018500Y+011000
X+018500Y+010000
X+018500Y+009000
X+018500Y+008000
X+022000Y+003000
X+022000Y+001228
X+019440Y+001228
X+019440Y+003000
X+001500Y+013500
X+001500Y+012500
X+001500Y+011500
X+001500Y+010500
X+007500Y+021500
X+011500Y+021500
X+013500Y+021500
X+017500Y+021500
X+001500Y+019500
X+005500Y+019500
X+004500Y+004000
X+004500Y+005000
X+004500Y+006000
X+004500Y+007000
X+004500Y+008000
X+004500Y+009000
X+004500Y+010000
X+004500Y+011000
X+004500Y+012000
X+011500Y+012000
X+011500Y+011000
X+011500Y+010000
X+011500Y+009000
X+011500Y+008000
X+011500Y+007000
X+011500Y+006000
X+011500Y+005000
X+011500Y+004000
X+007500Y+018500
X+007500Y+017500
X+007500Y+016500
X+001500Y+006500
X+001500Y+005500
X+001500Y+004500
T04
X+004500Y+023500
X+004500Y+021531
X+021000Y+021531
X+021000Y+023500
T05
X+024000Y+019000
X+024000Y+017000
X+022000Y+017000
X+022000Y+019000
X+023000Y+018000
X+023000Y+014000
T06
X+013000Y+015500
X+013500Y+015000
X+014000Y+015500
T07
X+017500Y+017000
X+015500Y+017000
X+015500Y+016000
X+017500Y+016000
X+018750Y+016000
X+019750Y+016000
X+015000Y+019000
X+017000Y+019000
X+012000Y+018500
X+010000Y+018500
X+011000Y+016000
X+010000Y+016000
T08
X+015000Y+007000
X+016000Y+007000
X+017000Y+007000
X+015000Y+001000
X+017000Y+001000
T09
X+014000Y+004000
X+018000Y+004000
T10
X+021250Y+006000
X+023250Y+004500
X+024000Y+006000
M30

View File

@ -1,11 +0,0 @@
G04 PROTEUS RS274X GERBER FILE*
%FSLAX24Y24*%
%MOIN*%
%ADD27C,0.0080*%
G54D27*
X+49Y+186D02*
X+25399Y+186D01*
X+25399Y+24647D01*
X+49Y+24647D01*
X+49Y+186D01*
M00*

View File

@ -1,81 +0,0 @@
LABCENTER PROTEUS TOOL INFORMATION FILE
=======================================
In case of difficulty, please e-mail support@labcenter.co.uk
Tool set up for Proteus layout 'baliseHF_pico2350.LYT'.
CADCAM generated at 11:10:26 AM on March-21-26.
File List
---------
Top Copper : baliseHF_pico2350 - CADCAM Top Copper.TXT
Bottom Copper : baliseHF_pico2350 - CADCAM Bottom Copper.TXT
Top Silk Screen : baliseHF_pico2350 - CADCAM Top Silk Screen.TXT
Bottom Silk Screen : baliseHF_pico2350 - CADCAM Bottom Silk Screen.TXT
Top Solder Resist : baliseHF_pico2350 - CADCAM Top Solder Resist.TXT
Bottom Solder Resist : baliseHF_pico2350 - CADCAM Bottom Solder Resist.TXT
Top SMT Paste Mask : baliseHF_pico2350 - CADCAM Top SMT Paste Mask.TXT
Bottom SMT Paste Mask : baliseHF_pico2350 - CADCAM Bottom SMT Paste Mask.TXT
Mechanical 1 : baliseHF_pico2350 - CADCAM Mechanical 1.TXT
Drill : baliseHF_pico2350 - CADCAM Drill.TXT
Photoplotter Setup
------------------
Format: RS274X, ASCII, 2.4, imperial, absolute, eob=*, LZO
Notes: D=Diameter, S=Side, W=Width, H=Height, C=Chamfer
D10 CIRCLE D=20th DRAW
D11 CIRCLE D=40th DRAW
D12 CIRCLE D=40th FLASH
D13 CIRCLE D=250th FLASH
D14 SQUARE S=80th FLASH
D15 CIRCLE D=100th FLASH
D16 RECT W=80th H=50th FLASH
D17 CIRCLE D=120th FLASH
D18 DIL W=150th H=200th C=30th FLASH
D19 DIL W=200th H=150th C=30th FLASH
D70 SQUARE S=150th FLASH
D71 CIRCLE D=60th FLASH
D20 CIRCLE D=70th FLASH
D21 CIRCLE D=90th FLASH
D22 CIRCLE D=80th FLASH
D23 RECT W=60th H=40th FLASH
D24 DIL W=60th H=100th C=12th FLASH
D25 CIRCLE D=150th FLASH
D26 DIL W=200th H=90th C=16th FLASH
D27 CIRCLE D=8th DRAW
D28 CIRCLE D=30th DRAW
D29 CIRCLE D=2.5th DRAW
D72 CIRCLE D=10th DRAW
D73 RECT W=40th H=60th FLASH
D30 CIRCLE D=290th FLASH
D31 SQUARE S=100th FLASH
D32 RECT W=100th H=70th FLASH
D33 DIL W=170th H=220th C=30th FLASH
D34 DIL W=220th H=170th C=30th FLASH
D35 SQUARE S=180th FLASH
D36 CIRCLE D=110th FLASH
D37 RECT W=80th H=60th FLASH
D38 DIL W=80th H=120th C=12th FLASH
D39 CIRCLE D=180th FLASH
D40 DIL W=220th H=110th C=16th FLASH
D41 RECT W=60th H=80th FLASH
NC Drill Setup
--------------
Format: ASCII, 2.4, imperial, absolute, eob=<CR><LF>, no zero suppression.
Notes: Tool sizes are diameters. Layer sets are in brackets - 0=TOP, 15=BOTTOM, 1-14=INNER.
T01 15th (0-15)
T02 118.1th (0-15)
T03 40th (0-15)
T04 31.4th (0-15)
T05 60th (0-15)
T06 32th (0-15)
T07 30th (0-15)
T08 43.3th (0-15)
T09 82.6th (0-15)
T10 78.7th (0-15)
[END OF FILE]

View File

@ -1,342 +0,0 @@
G04 PROTEUS RS274X GERBER FILE*
%FSLAX24Y24*%
%MOIN*%
%ADD10C,0.0200*%
%ADD11C,0.0400*%
%ADD12C,0.0400*%
%ADD13C,0.2500*%
%ADD14R,0.0800X0.0800*%
%ADD15C,0.1000*%
%ADD16R,0.0800X0.0500*%
%ADD17C,0.1200*%
%AMDIL008*4,1,8,-0.0750,0.0700,
-0.0450,0.1000,0.0450,0.1000,0.0750,0.0700,0.0750,-0.0700,
0.0450,-0.1000,-0.0450,-0.1000,-0.0750,-0.0700,-0.0750,0.0700,0*
*%
%ADD18DIL008*%
%AMDIL009*4,1,8,-0.1000,0.0450,
-0.0700,0.0750,0.0700,0.0750,0.1000,0.0450,0.1000,-0.0450,
0.0700,-0.0750,-0.0700,-0.0750,-0.1000,-0.0450,-0.1000,0.0450,0*
*%
%ADD19DIL009*%
%ADD70R,0.1500X0.1500*%
%ADD71C,0.0600*%
%ADD20C,0.0700*%
%ADD21C,0.0900*%
%ADD22C,0.0800*%
%ADD23R,0.0600X0.0400*%
%AMDIL016*4,1,8,-0.0300,0.0380,
-0.0180,0.0500,0.0180,0.0500,0.0300,0.0380,0.0300,-0.0380,
0.0180,-0.0500,-0.0180,-0.0500,-0.0300,-0.0380,-0.0300,0.0380,0*
*%
%ADD24DIL016*%
%ADD25C,0.1500*%
%AMDIL018*4,1,8,-0.1000,0.0290,
-0.0840,0.0450,0.0840,0.0450,0.1000,0.0290,0.1000,-0.0290,
0.0840,-0.0450,-0.0840,-0.0450,-0.1000,-0.0290,-0.1000,0.0290,0*
*%
%ADD26DIL018*%
%ADD27C,0.0080*%
G54D10*
X+15500Y+16000D02*
X+16500Y+17000D01*
X+17500Y+17000D01*
G54D11*
X+5000Y+17500D02*
X+4000Y+17500D01*
X+3600Y+17900D01*
X+3600Y+19000D01*
X+3100Y+19500D01*
X+1500Y+19500D01*
G54D10*
X+15500Y+16999D02*
X+15500Y+17000D01*
G54D11*
X+14400Y+16999D01*
X+14000Y+16599D01*
X+14000Y+15500D01*
G54D10*
X+19440Y+3000D02*
X+22000Y+3000D01*
X+17600Y+10600D02*
X+17600Y+11600D01*
X+17200Y+12000D01*
X+11500Y+12000D01*
X+4500Y+10000D02*
X+3000Y+10000D01*
X+2500Y+9500D01*
X+2500Y+8260D02*
X+1840Y+8260D01*
X+1600Y+8020D01*
X+1000Y+8020D01*
G54D11*
X+7500Y+18500D02*
X+6500Y+19500D01*
X+5500Y+19500D01*
G54D10*
X+18500Y+12000D02*
X+17900Y+12600D01*
X+6800Y+12600D01*
X+6400Y+12200D01*
X+6400Y+6400D01*
X+6000Y+6000D01*
X+4500Y+6000D01*
X+10000Y+16000D02*
X+8500Y+17500D01*
X+7500Y+17500D01*
X+13000Y+15500D02*
X+13000Y+14600D01*
X+13400Y+14200D01*
X+17950Y+14200D01*
X+19750Y+16000D01*
X+23500Y+22500D02*
X+22000Y+22500D01*
X+21000Y+23500D01*
X+2000Y+22500D02*
X+3500Y+22500D01*
X+4500Y+23500D01*
X+24000Y+2000D02*
X+22000Y+2000D01*
X+22000Y+1228D01*
X+13000Y+15500D02*
X+12000Y+15500D01*
X+11500Y+15000D01*
X+10400Y+15000D01*
X+10000Y+15400D01*
X+10000Y+16000D01*
X+16600Y+1800D02*
X+16200Y+2200D01*
X+15400Y+2200D01*
X+15000Y+1800D01*
X+15000Y+1000D01*
X+22000Y+1228D02*
X+20200Y+1228D01*
X+20199Y+1228D01*
X+19440Y+1228D01*
X+19440Y+1228D01*
X+24000Y+19000D02*
X+22000Y+19000D01*
X+24000Y+17000D02*
X+22000Y+17000D01*
X+22000Y+17000D01*
X+19440Y+1228D02*
X+18800Y+1228D01*
X+18228Y+1800D01*
X+16600Y+1800D01*
X+4500Y+9000D02*
X+5200Y+9000D01*
X+5200Y+13400D01*
X+5600Y+13800D01*
X+19200Y+13800D01*
X+19600Y+13400D01*
X+19600Y+6400D01*
X+20000Y+6000D01*
X+21250Y+6000D01*
X+11500Y+8000D02*
X+8200Y+8000D01*
X+7794Y+7594D01*
X+7794Y+3400D01*
X+7394Y+3000D01*
X+4000Y+3000D01*
X+3600Y+3400D01*
X+3600Y+5000D01*
X+3100Y+5500D01*
X+1500Y+5500D01*
X+11500Y+5000D02*
X+17000Y+5000D01*
X+11500Y+10000D02*
X+13600Y+10000D01*
X+14000Y+9600D01*
X+14000Y+5800D01*
X+14400Y+5400D01*
X+18400Y+5400D01*
X+19300Y+4500D01*
X+23250Y+4500D01*
X+11500Y+11000D02*
X+16000Y+11000D01*
X+16400Y+10600D01*
X+16400Y+8400D01*
X+16800Y+8000D01*
X+18500Y+8000D01*
X+17200Y+13000D02*
X+6400Y+13000D01*
X+6000Y+12600D01*
X+6000Y+7400D01*
X+5600Y+7000D01*
X+4500Y+7000D01*
X+17200Y+11400D02*
X+17200Y+9400D01*
X+17600Y+9000D01*
X+18500Y+9000D01*
X+1500Y+11500D02*
X+2200Y+11500D01*
X+2700Y+12000D01*
X+4500Y+12000D01*
X+4500Y+11000D02*
X+3800Y+11000D01*
X+3300Y+10500D01*
X+1500Y+10500D01*
X+18500Y+10000D02*
X+19200Y+10000D01*
X+19200Y+13000D01*
X+18800Y+13400D01*
X+6000Y+13400D01*
X+5600Y+13000D01*
X+5600Y+8400D01*
X+5200Y+8000D01*
X+4500Y+8000D01*
G54D11*
X+12000Y+18500D02*
X+12600Y+18500D01*
X+13100Y+19000D01*
X+15000Y+19000D01*
G54D10*
X+11500Y+7000D02*
X+9600Y+7000D01*
X+8600Y+6000D01*
X+8600Y+3500D01*
X+7600Y+2500D01*
X+3712Y+2500D01*
X+3500Y+2712D01*
X+3500Y+3034D01*
X+3308Y+3226D01*
X+2773Y+3226D01*
X+2542Y+3457D01*
X+1291Y+3457D01*
X+400Y+4348D01*
X+400Y+6000D01*
X+900Y+6500D01*
X+1500Y+6500D01*
X+1000Y+9500D02*
X+400Y+9500D01*
X+1500Y+13500D02*
X+800Y+13500D01*
X+400Y+13100D01*
X+400Y+9500D01*
X+400Y+7550D01*
X+575Y+7310D01*
G54D12*
X+17600Y+10600D03*
X+16600Y+1800D03*
X+17000Y+5000D03*
X+17200Y+13000D03*
X+17200Y+11400D03*
X+575Y+7310D03*
G54D13*
X+24000Y+2000D03*
X+2000Y+2000D03*
X+2000Y+22500D03*
X+23500Y+22500D03*
G54D14*
X+18500Y+12000D03*
X+18500Y+11000D03*
X+18500Y+10000D03*
X+18500Y+9000D03*
X+18500Y+8000D03*
X+22000Y+3000D03*
X+22000Y+1228D03*
X+19440Y+1228D03*
X+19440Y+3000D03*
X+1500Y+13500D03*
X+1500Y+12500D03*
X+1500Y+11500D03*
X+1500Y+10500D03*
G54D15*
X+4500Y+23500D03*
X+4500Y+21531D03*
X+21000Y+21531D03*
X+21000Y+23500D03*
G54D16*
X+1000Y+8020D03*
X+1000Y+9500D03*
G54D17*
X+24000Y+19000D03*
X+24000Y+17000D03*
X+22000Y+17000D03*
X+22000Y+19000D03*
X+23000Y+18000D03*
G54D18*
X+2500Y+17500D03*
G54D19*
X+4000Y+15500D03*
G54D18*
X+5000Y+17500D03*
G54D70*
X+23000Y+14000D03*
G54D71*
X+13000Y+15500D03*
X+13500Y+15000D03*
X+14000Y+15500D03*
G54D20*
X+17500Y+17000D03*
X+15500Y+17000D03*
X+15500Y+16000D03*
X+17500Y+16000D03*
G54D21*
X+7500Y+21500D03*
X+11500Y+21500D03*
X+13500Y+21500D03*
X+17500Y+21500D03*
G54D22*
X+18750Y+16000D03*
X+19750Y+16000D03*
G54D20*
X+15000Y+19000D03*
X+17000Y+19000D03*
X+12000Y+18500D03*
X+10000Y+18500D03*
G54D22*
X+11000Y+16000D03*
X+10000Y+16000D03*
G54D21*
X+1500Y+19500D03*
X+5500Y+19500D03*
G54D23*
X+2500Y+9500D03*
X+2500Y+8260D03*
G54D14*
X+4500Y+4000D03*
X+4500Y+5000D03*
X+4500Y+6000D03*
X+4500Y+7000D03*
X+4500Y+8000D03*
X+4500Y+9000D03*
X+4500Y+10000D03*
X+4500Y+11000D03*
X+4500Y+12000D03*
X+11500Y+12000D03*
X+11500Y+11000D03*
X+11500Y+10000D03*
X+11500Y+9000D03*
X+11500Y+8000D03*
X+11500Y+7000D03*
X+11500Y+6000D03*
X+11500Y+5000D03*
X+11500Y+4000D03*
X+7500Y+18500D03*
X+7500Y+17500D03*
X+7500Y+16500D03*
G54D24*
X+15000Y+7000D03*
X+16000Y+7000D03*
X+17000Y+7000D03*
X+15000Y+1000D03*
X+17000Y+1000D03*
G54D25*
X+14000Y+4000D03*
X+18000Y+4000D03*
G54D26*
X+21250Y+6000D03*
X+23250Y+4500D03*
X+24000Y+6000D03*
G54D14*
X+1500Y+6500D03*
X+1500Y+5500D03*
X+1500Y+4500D03*
G54D27*
X+49Y+186D02*
X+25399Y+186D01*
X+25399Y+24647D01*
X+49Y+24647D01*
X+49Y+186D01*
M00*

View File

@ -1,19 +0,0 @@
G04 PROTEUS RS274X GERBER FILE*
%FSLAX24Y24*%
%MOIN*%
%ADD16R,0.0800X0.0500*%
%ADD23R,0.0600X0.0400*%
%ADD27C,0.0080*%
G54D16*
X+1000Y+8020D03*
X+1000Y+9500D03*
G54D23*
X+2500Y+9500D03*
X+2500Y+8260D03*
G54D27*
X+49Y+186D02*
X+25399Y+186D01*
X+25399Y+24647D01*
X+49Y+24647D01*
X+49Y+186D01*
M00*

View File

@ -1,161 +0,0 @@
G04 PROTEUS RS274X GERBER FILE*
%FSLAX24Y24*%
%MOIN*%
%ADD71C,0.0600*%
%ADD30C,0.2900*%
%ADD31R,0.1000X0.1000*%
%ADD17C,0.1200*%
%ADD32R,0.1000X0.0700*%
%ADD25C,0.1500*%
%AMDIL027*4,1,8,-0.0850,0.0800,
-0.0550,0.1100,0.0550,0.1100,0.0850,0.0800,0.0850,-0.0800,
0.0550,-0.1100,-0.0550,-0.1100,-0.0850,-0.0800,-0.0850,0.0800,0*
*%
%ADD33DIL027*%
%AMDIL028*4,1,8,-0.1100,0.0550,
-0.0800,0.0850,0.0800,0.0850,0.1100,0.0550,0.1100,-0.0550,
0.0800,-0.0850,-0.0800,-0.0850,-0.1100,-0.0550,-0.1100,0.0550,0*
*%
%ADD34DIL028*%
%ADD35R,0.1800X0.1800*%
%ADD21C,0.0900*%
%ADD36C,0.1100*%
%ADD15C,0.1000*%
%ADD37R,0.0800X0.0600*%
%AMDIL032*4,1,8,-0.0400,0.0480,
-0.0280,0.0600,0.0280,0.0600,0.0400,0.0480,0.0400,-0.0480,
0.0280,-0.0600,-0.0280,-0.0600,-0.0400,-0.0480,-0.0400,0.0480,0*
*%
%ADD38DIL032*%
%ADD39C,0.1800*%
%AMDIL034*4,1,8,-0.1100,0.0390,
-0.0940,0.0550,0.0940,0.0550,0.1100,0.0390,0.1100,-0.0390,
0.0940,-0.0550,-0.0940,-0.0550,-0.1100,-0.0390,-0.1100,0.0390,0*
*%
%ADD40DIL034*%
%ADD27C,0.0080*%
G54D71*
X+17600Y+10600D03*
X+16600Y+1800D03*
X+17000Y+5000D03*
X+17200Y+13000D03*
X+17200Y+11400D03*
X+575Y+7310D03*
G54D30*
X+24000Y+2000D03*
X+2000Y+2000D03*
X+2000Y+22500D03*
X+23500Y+22500D03*
G54D31*
X+18500Y+12000D03*
X+18500Y+11000D03*
X+18500Y+10000D03*
X+18500Y+9000D03*
X+18500Y+8000D03*
X+22000Y+3000D03*
X+22000Y+1228D03*
X+19440Y+1228D03*
X+19440Y+3000D03*
X+1500Y+13500D03*
X+1500Y+12500D03*
X+1500Y+11500D03*
X+1500Y+10500D03*
G54D17*
X+4500Y+23500D03*
X+4500Y+21531D03*
X+21000Y+21531D03*
X+21000Y+23500D03*
G54D32*
X+1000Y+8020D03*
X+1000Y+9500D03*
G54D25*
X+24000Y+19000D03*
X+24000Y+17000D03*
X+22000Y+17000D03*
X+22000Y+19000D03*
X+23000Y+18000D03*
G54D33*
X+2500Y+17500D03*
G54D34*
X+4000Y+15500D03*
G54D33*
X+5000Y+17500D03*
G54D35*
X+23000Y+14000D03*
G54D71*
X+13000Y+15500D03*
X+13500Y+15000D03*
X+14000Y+15500D03*
G54D21*
X+17500Y+17000D03*
X+15500Y+17000D03*
X+15500Y+16000D03*
X+17500Y+16000D03*
G54D36*
X+7500Y+21500D03*
X+11500Y+21500D03*
X+13500Y+21500D03*
X+17500Y+21500D03*
G54D15*
X+18750Y+16000D03*
X+19750Y+16000D03*
G54D21*
X+15000Y+19000D03*
X+17000Y+19000D03*
X+12000Y+18500D03*
X+10000Y+18500D03*
G54D15*
X+11000Y+16000D03*
X+10000Y+16000D03*
G54D36*
X+1500Y+19500D03*
X+5500Y+19500D03*
G54D37*
X+2500Y+9500D03*
X+2500Y+8260D03*
G54D31*
X+4500Y+4000D03*
X+4500Y+5000D03*
X+4500Y+6000D03*
X+4500Y+7000D03*
X+4500Y+8000D03*
X+4500Y+9000D03*
X+4500Y+10000D03*
X+4500Y+11000D03*
X+4500Y+12000D03*
X+11500Y+12000D03*
X+11500Y+11000D03*
X+11500Y+10000D03*
X+11500Y+9000D03*
X+11500Y+8000D03*
X+11500Y+7000D03*
X+11500Y+6000D03*
X+11500Y+5000D03*
X+11500Y+4000D03*
X+7500Y+18500D03*
X+7500Y+17500D03*
X+7500Y+16500D03*
G54D38*
X+15000Y+7000D03*
X+16000Y+7000D03*
X+17000Y+7000D03*
X+15000Y+1000D03*
X+17000Y+1000D03*
G54D39*
X+14000Y+4000D03*
X+18000Y+4000D03*
G54D40*
X+21250Y+6000D03*
X+23250Y+4500D03*
X+24000Y+6000D03*
G54D31*
X+1500Y+6500D03*
X+1500Y+5500D03*
X+1500Y+4500D03*
G54D27*
X+49Y+186D02*
X+25399Y+186D01*
X+25399Y+24647D01*
X+49Y+24647D01*
X+49Y+186D01*
M00*

BIN
gerber/filtre - CADCAM.ZIP Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +0,0 @@
G04 PROTEUS RS274X GERBER FILE*
%FSLAX24Y24*%
%MOIN*%
%ADD17C,0.0080*%
G54D17*
X-50Y+186D02*
X+3899Y+186D01*
X+3899Y+20797D01*
X-50Y+20797D01*
X-50Y+186D01*
M00*

View File

@ -1,53 +0,0 @@
G04 PROTEUS RS274X GERBER FILE*
%FSLAX24Y24*%
%MOIN*%
%ADD17C,0.0080*%
%ADD12C,0.0100*%
G54D17*
X-50Y+186D02*
X+3899Y+186D01*
X+3899Y+20797D01*
X-50Y+20797D01*
X-50Y+186D01*
G54D12*
X+827Y+3499D02*
X+827Y+3624D01*
X+627Y+3624D01*
X+627Y+3374D01*
X+827Y+3249D01*
X+1027Y+3249D01*
X+1227Y+3374D01*
X+1227Y+3561D01*
X+1127Y+3624D01*
X+627Y+3749D02*
X+1227Y+3749D01*
X+627Y+4124D01*
X+1227Y+4124D01*
X+627Y+4249D02*
X+1227Y+4249D01*
X+1227Y+4499D01*
X+1027Y+4624D01*
X+827Y+4624D01*
X+627Y+4499D01*
X+627Y+4249D01*
X+827Y+14249D02*
X+827Y+14374D01*
X+627Y+14374D01*
X+627Y+14124D01*
X+827Y+13999D01*
X+1027Y+13999D01*
X+1227Y+14124D01*
X+1227Y+14311D01*
X+1127Y+14374D01*
X+627Y+14499D02*
X+1227Y+14499D01*
X+627Y+14874D01*
X+1227Y+14874D01*
X+627Y+14999D02*
X+1227Y+14999D01*
X+1227Y+15249D01*
X+1027Y+15374D01*
X+827Y+15374D01*
X+627Y+15249D01*
X+627Y+14999D01*
M00*

View File

@ -1,34 +0,0 @@
G04 PROTEUS RS274X GERBER FILE*
%FSLAX24Y24*%
%MOIN*%
%ADD18C,0.1200*%
%ADD19R,0.1600X0.3000*%
%ADD71C,0.1100*%
%ADD17C,0.0080*%
G54D18*
X+1000Y+1000D03*
X+2968Y+1000D03*
X+2968Y+17500D03*
X+1000Y+17500D03*
G54D19*
X+3000Y+19700D03*
X+1000Y+19700D03*
G54D18*
X+3000Y+2500D03*
X+1000Y+2500D03*
X+3000Y+9250D03*
X+1000Y+9250D03*
X+3000Y+16250D03*
X+1000Y+16250D03*
G54D71*
X+3250Y+4000D03*
X+3250Y+8000D03*
X+3250Y+10500D03*
X+3250Y+14500D03*
G54D17*
X-50Y+186D02*
X+3899Y+186D01*
X+3899Y+20797D01*
X-50Y+20797D01*
X-50Y+186D01*
M00*

View File

@ -1,22 +0,0 @@
M48
INCH
T01C0.0314
T02C0.0400
%
T01
X+001000Y+001000
X+002968Y+001000
X+002968Y+017500
X+001000Y+017500
X+003000Y+002500
X+001000Y+002500
X+003000Y+009250
X+001000Y+009250
X+003000Y+016250
X+001000Y+016250
T02
X+003250Y+004000
X+003250Y+008000
X+003250Y+010500
X+003250Y+014500
M30

View File

@ -1,11 +0,0 @@
G04 PROTEUS RS274X GERBER FILE*
%FSLAX24Y24*%
%MOIN*%
%ADD17C,0.0080*%
G54D17*
X-50Y+186D02*
X+3899Y+186D01*
X+3899Y+20797D01*
X-50Y+20797D01*
X-50Y+186D01*
M00*

View File

@ -1,49 +0,0 @@
LABCENTER PROTEUS TOOL INFORMATION FILE
=======================================
In case of difficulty, please e-mail support@labcenter.co.uk
Tool set up for Proteus layout 'filtre.LYT'.
CADCAM generated at 5:49:01 PM on September-06-25.
File List
---------
Top Copper : filtre - CADCAM Top Copper.TXT
Bottom Copper : filtre - CADCAM Bottom Copper.TXT
Top Silk Screen : filtre - CADCAM Top Silk Screen.TXT
Bottom Silk Screen : filtre - CADCAM Bottom Silk Screen.TXT
Top Solder Resist : filtre - CADCAM Top Solder Resist.TXT
Bottom Solder Resist : filtre - CADCAM Bottom Solder Resist.TXT
Top SMT Paste Mask : filtre - CADCAM Top SMT Paste Mask.TXT
Bottom SMT Paste Mask : filtre - CADCAM Bottom SMT Paste Mask.TXT
Mechanical 1 : filtre - CADCAM Mechanical 1.TXT
Drill : filtre - CADCAM Drill.TXT
Photoplotter Setup
------------------
Format: RS274X, ASCII, 2.4, imperial, absolute, eob=*, LZO
Notes: D=Diameter, S=Side, W=Width, H=Height, C=Chamfer
D10 CIRCLE D=40th DRAW
D11 CIRCLE D=2.5th DRAW
D12 CIRCLE D=10th DRAW
D13 CIRCLE D=100th FLASH
D14 RECT W=60th H=200th FLASH
D15 RECT W=40th H=60th FLASH
D16 CIRCLE D=90th FLASH
D17 CIRCLE D=8th DRAW
D18 CIRCLE D=120th FLASH
D19 RECT W=160th H=300th FLASH
D70 RECT W=60th H=80th FLASH
D71 CIRCLE D=110th FLASH
NC Drill Setup
--------------
Format: ASCII, 2.4, imperial, absolute, eob=<CR><LF>, no zero suppression.
Notes: Tool sizes are diameters. Layer sets are in brackets - 0=TOP, 15=BOTTOM, 1-14=INNER.
T01 31.4th (0-15)
T02 40th (0-15)
[END OF FILE]

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +0,0 @@
G04 PROTEUS RS274X GERBER FILE*
%FSLAX24Y24*%
%MOIN*%
%ADD15R,0.0400X0.0600*%
%ADD17C,0.0080*%
G54D15*
X+2240Y+4000D03*
X+1000Y+4000D03*
X+2240Y+10500D03*
X+1000Y+10500D03*
X+2240Y+14750D03*
X+1000Y+14750D03*
G54D17*
X-50Y+186D02*
X+3899Y+186D01*
X+3899Y+20797D01*
X-50Y+20797D01*
X-50Y+186D01*
M00*

View File

@ -1,349 +0,0 @@
G04 PROTEUS RS274X GERBER FILE*
%FSLAX24Y24*%
%MOIN*%
%ADD17C,0.0080*%
%ADD12C,0.0100*%
G54D17*
X-50Y+186D02*
X+3899Y+186D01*
X+3899Y+20797D01*
X-50Y+20797D01*
X-50Y+186D01*
G54D12*
X+1221Y+5438D02*
X+621Y+5438D01*
X+621Y+5813D01*
X+921Y+5438D02*
X+921Y+5688D01*
X+1021Y+6313D02*
X+1021Y+5938D01*
X+621Y+6188D01*
X+1221Y+6188D01*
X+1021Y+6688D02*
X+1021Y+6813D01*
X+1221Y+6813D01*
X+1221Y+6563D01*
X+1021Y+6438D01*
X+821Y+6438D01*
X+621Y+6563D01*
X+621Y+6750D01*
X+721Y+6813D01*
X+821Y+6938D02*
X+621Y+7063D01*
X+621Y+7188D01*
X+821Y+7313D01*
X+1021Y+7313D01*
X+1221Y+7188D01*
X+1221Y+7063D01*
X+1021Y+6938D01*
X+821Y+6938D01*
X+1221Y+7438D02*
X+621Y+7438D01*
X+621Y+7813D02*
X+1221Y+7813D01*
X+921Y+7438D02*
X+921Y+7813D01*
X+1022Y+10673D02*
X+422Y+10673D01*
X+422Y+11048D01*
X+722Y+10673D02*
X+722Y+10923D01*
X+422Y+11235D02*
X+422Y+11485D01*
X+422Y+11360D02*
X+1022Y+11360D01*
X+1022Y+11235D02*
X+1022Y+11485D01*
X+422Y+11673D02*
X+1022Y+11673D01*
X+1022Y+12048D01*
X+422Y+12173D02*
X+422Y+12548D01*
X+422Y+12360D02*
X+1022Y+12360D01*
X+1022Y+13048D02*
X+1022Y+12673D01*
X+422Y+12673D01*
X+422Y+13048D01*
X+722Y+12673D02*
X+722Y+12923D01*
X+1022Y+13173D02*
X+422Y+13173D01*
X+422Y+13485D01*
X+522Y+13548D01*
X+622Y+13548D01*
X+722Y+13485D01*
X+722Y+13173D01*
X+722Y+13485D02*
X+822Y+13548D01*
X+1022Y+13548D01*
G54D17*
X-39Y+94D02*
X+3929Y+94D01*
X+3929Y+18407D01*
X-39Y+18407D01*
X-39Y+94D01*
X+265Y+14247D02*
X+625Y+14247D01*
X+625Y+14622D01*
X+625Y+14747D02*
X+265Y+14747D01*
X+265Y+15059D01*
X+325Y+15122D01*
X+385Y+15122D01*
X+445Y+15059D01*
X+445Y+14747D01*
X+385Y+15372D02*
X+265Y+15497D01*
X+625Y+15497D01*
X+500Y+18500D02*
X+3500Y+18500D01*
X+3500Y+20750D01*
X+500Y+20750D01*
X+500Y+18500D01*
X+1500Y+20280D02*
X+1500Y+20220D01*
X+1562Y+20160D01*
X+1812Y+20160D01*
X+1875Y+20220D01*
X+1875Y+20520D01*
X+2062Y+20520D02*
X+2375Y+20520D01*
X+2375Y+20460D01*
X+2062Y+20160D01*
X+3250Y+2500D02*
X+3225Y+2404D01*
X+3153Y+2326D01*
X+3039Y+2264D01*
X+2888Y+2214D01*
X+2491Y+2144D01*
X+2000Y+2100D01*
X+3250Y+2500D02*
X+3225Y+2596D01*
X+3153Y+2674D01*
X+3039Y+2736D01*
X+2888Y+2786D01*
X+2491Y+2856D01*
X+2000Y+2900D01*
X+750Y+2500D02*
X+775Y+2596D01*
X+847Y+2674D01*
X+961Y+2736D01*
X+1112Y+2786D01*
X+1509Y+2856D01*
X+2000Y+2900D01*
X+750Y+2500D02*
X+775Y+2404D01*
X+847Y+2326D01*
X+961Y+2264D01*
X+1112Y+2214D01*
X+1509Y+2144D01*
X+2000Y+2100D01*
X+1875Y+1640D02*
X+1812Y+1580D01*
X+1625Y+1580D01*
X+1500Y+1700D01*
X+1500Y+1820D01*
X+1625Y+1940D01*
X+1812Y+1940D01*
X+1875Y+1880D01*
X+2125Y+1820D02*
X+2250Y+1940D01*
X+2250Y+1580D01*
X+1910Y+3710D02*
X+1310Y+3710D01*
X+1900Y+4290D02*
X+1310Y+4290D01*
X+1495Y+4750D02*
X+1432Y+4690D01*
X+1245Y+4690D01*
X+1120Y+4810D01*
X+1120Y+4930D01*
X+1245Y+5050D01*
X+1432Y+5050D01*
X+1495Y+4990D01*
X+1682Y+4990D02*
X+1745Y+5050D01*
X+1932Y+5050D01*
X+1995Y+4990D01*
X+1995Y+4930D01*
X+1932Y+4870D01*
X+1745Y+4870D01*
X+1682Y+4810D01*
X+1682Y+4690D01*
X+1995Y+4690D01*
X+3250Y+9250D02*
X+3225Y+9154D01*
X+3153Y+9076D01*
X+3039Y+9014D01*
X+2888Y+8964D01*
X+2491Y+8894D01*
X+2000Y+8850D01*
X+3250Y+9250D02*
X+3225Y+9346D01*
X+3153Y+9424D01*
X+3039Y+9486D01*
X+2888Y+9536D01*
X+2491Y+9606D01*
X+2000Y+9650D01*
X+750Y+9250D02*
X+775Y+9346D01*
X+847Y+9424D01*
X+961Y+9486D01*
X+1112Y+9536D01*
X+1509Y+9606D01*
X+2000Y+9650D01*
X+750Y+9250D02*
X+775Y+9154D01*
X+847Y+9076D01*
X+961Y+9014D01*
X+1112Y+8964D01*
X+1509Y+8894D01*
X+2000Y+8850D01*
X+1875Y+8390D02*
X+1812Y+8330D01*
X+1625Y+8330D01*
X+1500Y+8450D01*
X+1500Y+8570D01*
X+1625Y+8690D01*
X+1812Y+8690D01*
X+1875Y+8630D01*
X+2062Y+8630D02*
X+2125Y+8690D01*
X+2312Y+8690D01*
X+2375Y+8630D01*
X+2375Y+8570D01*
X+2312Y+8510D01*
X+2375Y+8450D01*
X+2375Y+8390D01*
X+2312Y+8330D01*
X+2125Y+8330D01*
X+2062Y+8390D01*
X+2187Y+8510D02*
X+2312Y+8510D01*
X+1910Y+10210D02*
X+1310Y+10210D01*
X+1900Y+10790D02*
X+1310Y+10790D01*
X+1745Y+11000D02*
X+1682Y+10940D01*
X+1495Y+10940D01*
X+1370Y+11060D01*
X+1370Y+11180D01*
X+1495Y+11300D01*
X+1682Y+11300D01*
X+1745Y+11240D01*
X+2245Y+11060D02*
X+1870Y+11060D01*
X+2120Y+11300D01*
X+2120Y+10940D01*
X+1910Y+14460D02*
X+1310Y+14460D01*
X+1900Y+15040D02*
X+1310Y+15040D01*
X+1495Y+14000D02*
X+1432Y+13940D01*
X+1245Y+13940D01*
X+1120Y+14060D01*
X+1120Y+14180D01*
X+1245Y+14300D01*
X+1432Y+14300D01*
X+1495Y+14240D01*
X+1995Y+14300D02*
X+1682Y+14300D01*
X+1682Y+14180D01*
X+1932Y+14180D01*
X+1995Y+14120D01*
X+1995Y+14000D01*
X+1932Y+13940D01*
X+1745Y+13940D01*
X+1682Y+14000D01*
X+3250Y+16250D02*
X+3225Y+16154D01*
X+3153Y+16076D01*
X+3039Y+16014D01*
X+2888Y+15964D01*
X+2491Y+15894D01*
X+2000Y+15850D01*
X+3250Y+16250D02*
X+3225Y+16346D01*
X+3153Y+16424D01*
X+3039Y+16486D01*
X+2888Y+16536D01*
X+2491Y+16606D01*
X+2000Y+16650D01*
X+750Y+16250D02*
X+775Y+16346D01*
X+847Y+16424D01*
X+961Y+16486D01*
X+1112Y+16536D01*
X+1509Y+16606D01*
X+2000Y+16650D01*
X+750Y+16250D02*
X+775Y+16154D01*
X+847Y+16076D01*
X+961Y+16014D01*
X+1112Y+15964D01*
X+1509Y+15894D01*
X+2000Y+15850D01*
X+1875Y+16890D02*
X+1812Y+16830D01*
X+1625Y+16830D01*
X+1500Y+16950D01*
X+1500Y+17070D01*
X+1625Y+17190D01*
X+1812Y+17190D01*
X+1875Y+17130D01*
X+2375Y+17130D02*
X+2312Y+17190D01*
X+2125Y+17190D01*
X+2062Y+17130D01*
X+2062Y+16890D01*
X+2125Y+16830D01*
X+2312Y+16830D01*
X+2375Y+16890D01*
X+2375Y+16950D01*
X+2312Y+17010D01*
X+2062Y+17010D01*
X+3250Y+4500D02*
X+3250Y+5000D01*
X+3000Y+5000D02*
X+3500Y+5000D01*
X+3500Y+7000D01*
X+3000Y+7000D01*
X+3000Y+5000D01*
X+3250Y+7000D02*
X+3250Y+7500D01*
X+2480Y+5500D02*
X+2840Y+5500D01*
X+2840Y+5875D01*
X+2540Y+6062D02*
X+2480Y+6125D01*
X+2480Y+6312D01*
X+2540Y+6375D01*
X+2600Y+6375D01*
X+2660Y+6312D01*
X+2720Y+6375D01*
X+2780Y+6375D01*
X+2840Y+6312D01*
X+2840Y+6125D01*
X+2780Y+6062D01*
X+2660Y+6187D02*
X+2660Y+6312D01*
X+3250Y+11000D02*
X+3250Y+11500D01*
X+3000Y+11500D02*
X+3500Y+11500D01*
X+3500Y+13500D01*
X+3000Y+13500D01*
X+3000Y+11500D01*
X+3250Y+13500D02*
X+3250Y+14000D01*
X+2480Y+12000D02*
X+2840Y+12000D01*
X+2840Y+12375D01*
X+2720Y+12875D02*
X+2720Y+12500D01*
X+2480Y+12750D01*
X+2840Y+12750D01*
M00*

View File

@ -1,46 +0,0 @@
G04 PROTEUS RS274X GERBER FILE*
%FSLAX24Y24*%
%MOIN*%
%ADD18C,0.1200*%
%ADD19R,0.1600X0.3000*%
%ADD70R,0.0600X0.0800*%
%ADD71C,0.1100*%
%ADD17C,0.0080*%
G54D18*
X+1000Y+1000D03*
X+2968Y+1000D03*
X+2968Y+17500D03*
X+1000Y+17500D03*
G54D19*
X+1000Y+19700D03*
X+3000Y+19700D03*
X+2000Y+19700D03*
G54D18*
X+3000Y+2500D03*
X+1000Y+2500D03*
G54D70*
X+2240Y+4000D03*
X+1000Y+4000D03*
G54D18*
X+3000Y+9250D03*
X+1000Y+9250D03*
G54D70*
X+2240Y+10500D03*
X+1000Y+10500D03*
X+2240Y+14750D03*
X+1000Y+14750D03*
G54D18*
X+3000Y+16250D03*
X+1000Y+16250D03*
G54D71*
X+3250Y+4000D03*
X+3250Y+8000D03*
X+3250Y+10500D03*
X+3250Y+14500D03*
G54D17*
X-50Y+186D02*
X+3899Y+186D01*
X+3899Y+20797D01*
X-50Y+20797D01*
X-50Y+186D01*
M00*

BIN
src/wsprPico_GPS_RP2350.zip Normal file

Binary file not shown.

View File

@ -1 +0,0 @@
.pio

Binary file not shown.

View File

@ -1,37 +0,0 @@
This directory is intended for project header files.
A header file is a file containing C declarations and macro definitions
to be shared between several project source files. You request the use of a
header file in your project source file (C, C++, etc) located in `src` folder
by including it, with the C preprocessing directive `#include'.
```src/main.c
#include "header.h"
int main (void)
{
...
}
```
Including a header file produces the same results as copying the header file
into each source file that needs it. Such copying would be time-consuming
and error-prone. With a header file, the related declarations appear
in only one place. If they need to be changed, they can be changed in one
place, and programs that include the header file will automatically use the
new version when next recompiled. The header file eliminates the labor of
finding and changing all the copies as well as the risk that a failure to
find one copy will result in inconsistencies within a program.
In C, the convention is to give header files names that end with `.h'.
Read more about using header files in official GCC documentation:
* Include Syntax
* Include Operation
* Once-Only Headers
* Computed Includes
https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html

View File

@ -1,297 +0,0 @@
/*
* File: Afficheur.cpp
* Author: F4GOH
*
*/
#include "Afficheur.h"
// Constructeur de Afficheur
Afficheur::Afficheur()
{
tft = new Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
}
Afficheur::~Afficheur() {
// Rien à nettoyer
}
void Afficheur::begin() {
// Initialisation I2C avec adresse 0x3C
Wire.begin();
if(!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C))
{
Serial.println("OLED non detecte");
}
else
{
Serial.println("OLED OK");
}
// Initialisation rétroéclairage TFT
pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, HIGH);
SPI.setSCK(TFT_SCK);
SPI.setTX(TFT_MOSI);
tft->init(172, 320);
tft->setRotation(1);
tft->setAddrWindow(34, 0, 172, 320);
tft->fillScreen(ST77XX_BLACK);
tft->setTextWrap(false);
oled.clearDisplay();
}
const uint16_t Afficheur::lineColors[8] = {
ST77XX_YELLOW,
ST77XX_CYAN,
ST77XX_GREEN,
ST77XX_MAGENTA,
ST77XX_ORANGE,
ST77XX_WHITE,
ST77XX_RED,
ST77XX_BLUE
};
void Afficheur::timeDisplay(char* txt) {
tft->setTextSize(4);
tft->setTextColor(ST77XX_CYAN, ST77XX_BLACK);
const int width = 172;
const int height = 22;
// Efface uniquement la zone du haut
tft->fillRect(0, 0, width, height, ST77XX_BLACK);
// Petit padding
tft->setCursor(46, 0);
tft->print(txt);
oledPrint(txt,0,35,1);
}
void Afficheur::modeDisplay(const char* txt) {
int16_t x, y;
uint16_t w, h;
tft->setTextSize(4);
tft->setTextColor(ST77XX_YELLOW, ST77XX_BLACK);
tft->getTextBounds(txt, 0, 0, &x, &y, &w, &h);
const int width = 320;
const int height = 172;
// Centrage parfait en portrait
int cx = (width - w) / 2;
int cy = (height - h) / 2;
// Efface uniquement la zone centrale (évite de flinguer le reste)
int clearY = cy - 4;
int clearH = h + 8;
tft->fillRect(0, clearY, width, clearH, ST77XX_BLACK);
tft->setCursor(cx, cy);
tft->print(txt);
// Calcul de la largeur approximative
int16_t x1, y1;
oled.getTextBounds(txt, 10, 0, &x1, &y1, &w, &h);
// centrage horizontal et vertical
int x0= (128 - w) / 2;
int y0= (64 - h) / 2;
oledPrint(txt,40,10,2);
}
void Afficheur::modeEfface() {
const int width = 172;
// Zone centrale approximative (même logique que modeDisplay)
tft->fillRect(0, 120, width, 80, ST77XX_BLACK);
}
void Afficheur::clearDisplay() {
tft->fillScreen(ST77XX_BLACK);
oled.fillRect(0, 0, 128, 64, SSD1306_BLACK);
}
void Afficheur::configDisplay(config& cfg) {
char line[40];
// Efface uniquement la fenêtre définie
tft->fillScreen(ST77XX_BLACK);
tft->setTextSize(2);
const int x = 0; // relatif à la fenêtre
const int lineHeight = 22;
int y = 10;
const char * bandStr[7] = {"160m", "80m", "60m", "40m", "30m", "20m", "free frequency"};
// Ligne 1 : fréquence et offset
tft->setTextColor(lineColors[0], ST77XX_BLACK);
snprintf(line, sizeof(line), " f=%lu %ld band %s", cfg.freq, cfg.offset,bandStr[cfg.band]);
tft->setCursor(x, y);
tft->print(line);
y += lineHeight;
snprintf(line, sizeof(line), "f=%lu %ld %s", cfg.freq, cfg.offset,bandStr[cfg.band]);
oledPrint(line,0,0,1);
// Ligne 2
tft->setTextColor(lineColors[1], ST77XX_BLACK);
snprintf(line, sizeof(line), "dbm%u every %u minutes", cfg.dbm, cfg.minute);
tft->setCursor(x, y);
tft->print(line);
y += lineHeight;
oledPrint(line,0,8,1);
// Ligne 3
tft->setTextColor(lineColors[2], ST77XX_BLACK);
snprintf(line, sizeof(line), "gps baud %lu", cfg.baud);
tft->setCursor(x, y);
tft->print(line);
y += lineHeight;
snprintf(line, sizeof(line), "gps baud %lu wpm %u", cfg.baud,cfg.wpm);
oledPrint(line,0,16,1);
// Ligne 4
tft->setTextColor(lineColors[3], ST77XX_BLACK);
snprintf(line, sizeof(line), "loc %.4s", cfg.locator);
tft->setCursor(x, y);
tft->print(line);
y += lineHeight;
oledPrint(line,0,24,1);
// Ligne 5
const char* modeStr[] = { "WSPR", "RTTY", "FT8", "HELL", "CW", "IAMBIC", "ALL" };
tft->setTextColor(lineColors[4], ST77XX_BLACK);
snprintf(line, sizeof(line), "mode %s %s", modeStr[cfg.mode], cfg.call);
tft->setCursor(x, y);
tft->print(line);
y += lineHeight;
// Ligne 6
tft->setTextColor(lineColors[5], ST77XX_BLACK);
snprintf(line, sizeof(line), "wpm %u nmea %s",
cfg.wpm,
cfg.nmeaEnabled ? "on" : "off");
tft->setCursor(x, y);
tft->print(line);
y += lineHeight;
snprintf(line, sizeof(line), "nmea %s follow %s",
cfg.nmeaEnabled ? "on" : "off",
cfg.follow ? "on" : "off");
oledPrint(line,0,48,1);
// Ligne 7
tft->setTextColor(lineColors[6], ST77XX_BLACK);
snprintf(line, sizeof(line), "Iambic type %c follow %s",
cfg.bicmd,
cfg.follow ? "on" : "off");
tft->setCursor(x, y);
tft->print(line);
snprintf(line, sizeof(line), "Iambic type %c",
cfg.bicmd);
oledPrint(line,0,56,1);
}
void Afficheur::printCharCW(char car) {
if (firstChar) {
// tft->fillScreen(ST77XX_BLACK);
tft->fillRect(
0,
CHAR_HEIGHT * 1, // début à la ligne 1
SCREEN_HEIGHT,
CHAR_HEIGHT * (MAX_LINES - 1), // hauteur des lignes 1 à 4
ST77XX_BLACK
);
tft->setTextSize(TEXT_SIZE);
tft->setTextWrap(false);
currentCol = 0;
currentLine = 1;
firstChar = false;
}
// retour ligne AVANT écriture
if (currentCol >= MAX_COLS) {
currentCol = 0;
currentLine++;
}
// écran plein
if (currentLine >= MAX_LINES) {
//tft->fillScreen(ST77XX_BLACK);
tft->fillRect(
0,
CHAR_HEIGHT * 1, // début à la ligne 1
SCREEN_HEIGHT,
CHAR_HEIGHT * (MAX_LINES - 1), // hauteur des lignes 1 à 4
ST77XX_BLACK
);
currentLine = 1;
}
int x = currentCol * CHAR_WIDTH;
int y = currentLine * CHAR_HEIGHT;
// 🔥 couleur selon la ligne
uint16_t color = lineColors[currentLine % (sizeof(lineColors) / sizeof(lineColors[0]))];
tft->setTextColor(color, ST77XX_BLACK);
tft->setCursor(x, y);
tft->write(car);
currentCol++;
}
void Afficheur::printFrequency(uint32_t freq) {
char buf[16];
snprintf(buf, sizeof(buf), "%lu", freq);
uint16_t color = lineColors[0];
tft->setTextSize(TEXT_SIZE);
tft->setTextWrap(false);
tft->setTextColor(color, ST77XX_BLACK);
// position ligne 0
int x = 20;
int y = 0;
tft->setCursor(x, y);
tft->print(buf);
oledPrint(buf,10,0,1);
}
void Afficheur::oledPrint(String txt, int x , int y , int Size)
{
//oled.clearDisplay();
// Calculer la largeur et la hauteur du texte précédent
int textWidth = txt.length() * 6 * Size; // Largeur approximative (6 pixels par caractère)
int textHeight = 8 * Size; // Hauteur approximative (8 pixels par taille)
oled.fillRect(x, y, textWidth, textHeight, SSD1306_BLACK);
oled.setTextSize(Size); // taille du texte
oled.setTextColor(SSD1306_WHITE); // Couleur du texte (blanc pour OLED)
oled.setCursor(x, y);
oled.println(txt);
oled.display();
// Effacer l'écran
//oled.clearDisplay();
}

View File

@ -1,88 +0,0 @@
/*
* File: Afficheur.cpp
* Author: F4GOH
*
* spécialisation de SSD1306Wire
*/
#ifndef AFFICHEUR_H
#define AFFICHEUR_H
#include <Arduino.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
#include <Adafruit_SSD1306.h>
#include <Wire.h>
//#include <U8g2lib.h>
#include <SPI.h>
#include "Menu.h"
#define TFT_BL 21
#define TFT_DC 16
#define TFT_CS 17
#define TFT_SCK 18
#define TFT_MOSI 19
#define TFT_RST 20
#define X_OFF 34
#define Y_OFF 0
#define MSGX 2
#define MSGY 2
#define TEXT_SIZE 4
#define CHAR_WIDTH (6 * TEXT_SIZE)
#define CHAR_HEIGHT (8 * TEXT_SIZE)
#define SCREEN_WIDTH 172
#define SCREEN_HEIGHT 320
#define MAX_COLS 13
#define MAX_LINES 5
#define SCREENOLED_WIDTH 128
#define SCREENOLED_HEIGHT 64
class Afficheur {
public:
Afficheur(); // Tu peux ajouter modePWR si nécessaire
virtual ~Afficheur();
void begin(); // Initialisation de l'écran
void timeDisplay(char * txt);
void modeDisplay(const char* txt);
void modeEfface();
void configDisplay(config& cfg);
void clearDisplay();
void printCharCW(char car);
void printFrequency(uint32_t freq);
void oledPrint(String txt, int x , int y , int Size);
private:
Adafruit_SSD1306 oled = Adafruit_SSD1306(
SCREENOLED_WIDTH,
SCREENOLED_HEIGHT,
&Wire,
-1
);
//U8G2_SSD1306_128X64_NONAME_F_HW_I2C display; //gfx
Adafruit_ST7789 *tft;
int cursorX = 0;
int cursorY = 0;
bool firstChar = true;
int currentCol = 0;
int currentLine = 0;
static const uint16_t lineColors[8];
};
#endif /* AFFICHEUR_H */

View File

@ -1,105 +0,0 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/*
* File: Dds.cpp
* Author: ale
*
* Created on 28 août 2025, 07:55
*/
#include "Dds.h"
Dds::Dds() {
}
Dds::Dds(const Dds& orig) {
}
Dds::~Dds() {
}
void Dds::coreUnSetup() {
uint16_t t;
uint32_t delta;
PIO pio = pio0;
gpio_init(0);
gpio_set_dir(0, GPIO_OUT);
pio_gpio_init(pio0, 9);
uint offset = pio_add_program(pio0, &vfo_program);
pio_sm_set_consecutive_pindirs(pio0, 0, 9, 1, true);
pio_sm_config c = vfo_program_get_default_config(offset);
sm_config_set_set_pins(&c, 9, 1);
pio_sm_init(pio0, 0, offset, &c);
pio_sm_set_enabled(pio0, 0, true);
periods = 200 << 24; //dds off
for(;;){
t = (periods+delta) >> 24;
pio_sm_put_blocking(pio0, 0, t);
delta += periods-(t << 24);
}
}
//A simplifier pour le calcul des fréquences beaucoup de répétitions
void Dds::setFreqWspr(uint32_t freq) {
uint64_t ratio = (uint64_t) CLK_KHZ * 1000LL * (1 << 24) / (uint64_t) freq;
periods = (uint32_t) ratio;
uint32_t dwsfr = WSPR_TONE_SPACING * (periods / freq) / 100L; //146 c'est 1.46 Hz
wsfr[0] = periods - (10 << 24); // + 3 x Abstand 1,46 Hz
wsfr[1] = wsfr[0] - dwsfr;
wsfr[2] = wsfr[1] - dwsfr;
wsfr[3] = wsfr[2] - dwsfr;
}
void Dds::setFreqRtty(uint32_t freq) {
uint64_t ratio = (uint64_t) CLK_KHZ * 1000LL * (1 << 24) / (uint64_t) freq;
periods = (uint32_t) ratio;
uint32_t dwsfr = RTTY_TONE_SPACING * (periods / freq) / 100L; //170 Hz de shift
rttyfr[0] = periods - (10 << 24);
rttyfr[1] = rttyfr[0] - dwsfr;
}
void Dds::setFreqFt8(uint32_t freq) {
uint64_t ratio = (uint64_t) CLK_KHZ * 1000LL * (1 << 24) / (uint64_t) freq;
periods = (uint32_t) ratio;
uint32_t dwsfr = FT8_TONE_SPACING * (periods / freq) / 100L; //170 Hz de shift
ft8fr[0] = periods - (10 << 24);
ft8fr[1] = ft8fr[0] - dwsfr;
ft8fr[2] = ft8fr[1] - dwsfr;
ft8fr[3] = ft8fr[2] - dwsfr;
ft8fr[4] = ft8fr[3] - dwsfr;
ft8fr[5] = ft8fr[4] - dwsfr;
ft8fr[6] = ft8fr[5] - dwsfr;
ft8fr[7] = ft8fr[6] - dwsfr;
}
void Dds::setFreqCW(uint32_t freq) {
freqCW=freq;
uint64_t ratio = (uint64_t) CLK_KHZ * 1000LL * (1 << 24) / (uint64_t) freq;
periods = (uint32_t) ratio;
cwfr = periods - (10 << 24);
}
void Dds::changeFreqCW(int8_t sens) {
if (sens == 1) {
freqCW += 10;
} else if (sens==-1){
freqCW -= 10;
}
//Serial.println(freqCW);
uint64_t ratio = (uint64_t) CLK_KHZ * 1000LL * (1 << 24) / (uint64_t) freqCW;
periods = (uint32_t) ratio;
cwfr = periods - (10 << 24);
//Serial.println(cwfr);
}
uint32_t Dds::getFreqCW(){
return freqCW;
}

View File

@ -1,69 +0,0 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/*
* File: Dds.h
* Author: ale
*
* Created on 28 août 2025, 07:55
*/
#ifndef DDS_H
#define DDS_H
#include <Arduino.h>
#include "vfo2.pio.h"
#include "pico/stdlib.h"
#include "pico/multicore.h"
//#define CLK_KHZ 125000L
#define CLK_KHZ 180000L
#define RTTY_TONE_SPACING 17000L //170Hz
#define RTTY_DELAY 22
#define WSPR_TONE_SPACING 146L //1.45 Hz
#define WSPR_DELAY 682
#define FT8_TONE_SPACING 625L //6.25 Hz
#define FT8_DELAY 160
//https://ufrc.org/info/informations-nouveau-mode-ft2-open-source/
#define FT2_TONE_SPACING 2100L //21 Hz
#define FT2_DELAY 13
#define HELL_DELAY 4081
class Dds {
public:
Dds();
Dds(const Dds& orig);
virtual ~Dds();
void coreUnSetup();
void setFreqWspr(uint32_t freq);
void setFreqRtty(uint32_t freq);
void setFreqFt8(uint32_t freq);
void setFreqCW(uint32_t freq);
void changeFreqCW(int8_t sens);
uint32_t getFreqCW();
uint32_t wsfr[4]; //4-FSK les tables sont elles au bon endroit ?
uint32_t rttyfr[2]; //2-FSK
uint32_t ft8fr[8]; //8-FSK
uint32_t cwfr;
uint32_t freqCW;
volatile uint32_t periods; //pas de setter en lien avec les tables pour le moment mais il faudrait le mettre en private
private:
};
#endif // DDS_H

View File

@ -1,48 +0,0 @@
// -------------------------------------------------- //
// This file is autogenerated by pioasm; do not edit! //
// -------------------------------------------------- //
#pragma once
#if !PICO_NO_HARDWARE
#include "hardware/pio.h"
#endif
// --- //
// vfo //
// --- //
#define vfo_wrap_target 1
#define vfo_wrap 12
static const uint16_t vfo_program_instructions[] = {
0xe081, // 0: set pindirs, 1
// .wrap_target
0x80a0, // 1: pull block
0x6020, // 2: out x, 32
0xa041, // 3: mov y, x
0x0084, // 4: jmp y--, 4
0xe401, // 5: set pins, 1 [4]
0xe000, // 6: set pins, 0
0xa042, // 7: nop
0xa042, // 8: nop
0xa042, // 9: nop
0x004a, // 10: jmp x--, 10
0xe401, // 11: set pins, 1 [4]
0xe000, // 12: set pins, 0
// .wrap
};
#if !PICO_NO_HARDWARE
static const struct pio_program vfo_program = {
.instructions = vfo_program_instructions,
.length = 13,
.origin = -1,
};
static inline pio_sm_config vfo_program_get_default_config(uint offset) {
pio_sm_config c = pio_get_default_sm_config();
sm_config_set_wrap(&c, offset + vfo_wrap_target, offset + vfo_wrap);
return c;
}
#endif

View File

@ -1,72 +0,0 @@
#include "Encodeur.h"
Encodeur::Encodeur(PIO pio) {
_pio = pio;
}
void Encodeur::begin() {
pinMode(QUADRATURE_A_PIN, INPUT_PULLUP);
pinMode(QUADRATURE_B_PIN, INPUT_PULLUP);
pinMode(PUSH_PIN, INPUT_PULLUP);
// Charger programmes PIO
_offsetA = pio_add_program(_pio, &quadratureA_program);
_smA = pio_claim_unused_sm(_pio, true);
_offsetB = pio_add_program(_pio, &quadratureB_program);
_smB = pio_claim_unused_sm(_pio, true);
// Init PIO
quadratureA_program_init(_pio, _smA, _offsetA, QUADRATURE_A_PIN, QUADRATURE_B_PIN);
quadratureB_program_init(_pio, _smB, _offsetB, QUADRATURE_A_PIN, QUADRATURE_B_PIN);
}
int32_t Encodeur::getCount() {
pio_sm_exec(_pio, _smA, pio_encode_mov(pio_isr, pio_x));
pio_sm_exec(_pio, _smA, pio_encode_push(false, false));
int32_t a = pio_sm_get_blocking(_pio, _smA);
pio_sm_exec(_pio, _smB, pio_encode_mov(pio_isr, pio_x));
pio_sm_exec(_pio, _smB, pio_encode_push(false, false));
int32_t b = pio_sm_get_blocking(_pio, _smB);
return a + b;
}
void Encodeur::reset() {
_lastCount = getCount();
}
void Encodeur::updateButton() {
_lastBtnState = _btnState;
_btnState = !digitalRead(PUSH_PIN);
_pressedEvent = (!_lastBtnState && _btnState);
_releasedEvent = (_lastBtnState && !_btnState);
}
bool Encodeur::isPressed() {
return _btnState;
}
bool Encodeur::wasPressed() {
return _pressedEvent;
}
bool Encodeur::wasReleased() {
return _releasedEvent;
}
int8_t Encodeur::tick() {
static int32_t last = 0;
int32_t current = getCount(); // ton PIO actuel
int32_t diff = current - last;
last = current;
if (diff > 0) return +1;
if (diff < 0) return -1;
return 0;
}

View File

@ -1,41 +0,0 @@
#pragma once
#include <Arduino.h>
#include "hardware/pio.h"
#include "quadrature.pio.h"
// Pins
#define QUADRATURE_A_PIN 28
#define QUADRATURE_B_PIN 29
#define PUSH_PIN 27
class Encodeur {
public:
Encodeur(PIO pio = pio1);
void begin();
// Lecture rotation
int32_t getCount();
void reset();
// Bouton
void updateButton();
bool isPressed(); // état actuel
bool wasPressed(); // front montant
bool wasReleased(); // front descendant
int8_t tick();
private:
PIO _pio;
uint _smA, _smB;
uint _offsetA, _offsetB;
int32_t _lastCount = 0;
bool _btnState = false;
bool _lastBtnState = false;
bool _pressedEvent = false;
bool _releasedEvent = false;
};

View File

@ -1,109 +0,0 @@
// -------------------------------------------------- //
// This file is autogenerated by pioasm; do not edit! //
// -------------------------------------------------- //
#pragma once
#if !PICO_NO_HARDWARE
#include "hardware/pio.h"
#endif
// ----------- //
// quadratureB //
// ----------- //
#define quadratureB_wrap_target 0
#define quadratureB_wrap 13
static const uint16_t quadratureB_program_instructions[] = {
// .wrap_target
0x2020, // 0: wait 0 pin, 0
0x00c6, // 1: jmp pin, 6
0xa049, // 2: mov y, !x
0x0084, // 3: jmp y--, 4
0xa02a, // 4: mov x, !y
0x0007, // 5: jmp 7
0x0047, // 6: jmp x--, 7
0x20a0, // 7: wait 1 pin, 0
0x00ca, // 8: jmp pin, 10
0x0040, // 9: jmp x--, 0
0xa049, // 10: mov y, !x
0x008c, // 11: jmp y--, 12
0xa02a, // 12: mov x, !y
0x0000, // 13: jmp 0
// .wrap
};
#if !PICO_NO_HARDWARE
static const struct pio_program quadratureB_program = {
.instructions = quadratureB_program_instructions,
.length = 14,
.origin = -1,
};
static inline pio_sm_config quadratureB_program_get_default_config(uint offset) {
pio_sm_config c = pio_get_default_sm_config();
sm_config_set_wrap(&c, offset + quadratureB_wrap_target, offset + quadratureB_wrap);
return c;
}
static inline void quadratureB_program_init(PIO pio, uint sm, uint offset, uint a_pin, uint b_pin) {
pio_sm_config c = quadratureB_program_get_default_config(offset);
sm_config_set_in_pins(&c, a_pin);
sm_config_set_jmp_pin(&c, b_pin);
sm_config_set_in_shift(&c, false, true, 32);
pio_sm_init(pio, sm, offset, &c);
pio_sm_set_enabled(pio, sm, true);
}
#endif
// ----------- //
// quadratureA //
// ----------- //
#define quadratureA_wrap_target 0
#define quadratureA_wrap 13
static const uint16_t quadratureA_program_instructions[] = {
// .wrap_target
0x20a0, // 0: wait 1 pin, 0
0x00c6, // 1: jmp pin, 6
0xa049, // 2: mov y, !x
0x0084, // 3: jmp y--, 4
0xa02a, // 4: mov x, !y
0x0007, // 5: jmp 7
0x0047, // 6: jmp x--, 7
0x2020, // 7: wait 0 pin, 0
0x00ca, // 8: jmp pin, 10
0x0040, // 9: jmp x--, 0
0xa049, // 10: mov y, !x
0x008c, // 11: jmp y--, 12
0xa02a, // 12: mov x, !y
0x0000, // 13: jmp 0
// .wrap
};
#if !PICO_NO_HARDWARE
static const struct pio_program quadratureA_program = {
.instructions = quadratureA_program_instructions,
.length = 14,
.origin = -1,
};
static inline pio_sm_config quadratureA_program_get_default_config(uint offset) {
pio_sm_config c = pio_get_default_sm_config();
sm_config_set_wrap(&c, offset + quadratureA_wrap_target, offset + quadratureA_wrap);
return c;
}
static inline void quadratureA_program_init(PIO pio, uint sm, uint offset, uint a_pin, uint b_pin) {
pio_sm_config c = quadratureA_program_get_default_config(offset);
sm_config_set_in_pins(&c, b_pin);
sm_config_set_jmp_pin(&c, a_pin);
sm_config_set_in_shift(&c, false, true, 32);
pio_sm_init(pio, sm, offset, &c);
pio_sm_set_enabled(pio, sm, true);
}
#endif

View File

@ -1,106 +0,0 @@
/*
https://perso.isima.fr/~mafortias/enigma/index.html
utiliser la configuration par défaut
Attention, les fils de connection de la table de liaison des lettres n'est pas géré (plugboard)
pour faciliter le déchiffrage en ligne
supprimer les caractères AB de la configuration du plugboard
*
*/
#include "Enigma.h"
Enigma::Enigma() {
}
// Destructeur
Enigma::~Enigma() {
}
void Enigma::init() {
strcpy(rotorHautIn, "EKMFLGDQVZNTOWYHXUSPAIBRCJ");
strcpy(rotorHautOut, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
strcpy(rotorMilieuIn, "AJDKSIRUXBLHWTMCQGZNPYFVOE");
strcpy(rotorMilieuOut, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
strcpy(rotorBasIn, "BDFHJLCPRTXVZNYEIWGAKMUSQO");
strcpy(rotorBasOut, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
strcpy(reflector, "EJMZALYXVBWFCRQUONTSPIKHGD");
ptrbuf=0;
}
char Enigma::encode(char car) {
int curIndex;
char carRot;
char carChiffre;
//gestion de la rotation des 3 disques
carRot = rotate(rotorHautIn);
rotate(rotorHautOut);
if (carRot == 'X') {
rotate(rotorMilieuIn);
rotate(rotorMilieuOut);
}
else{
if (rotorMilieuIn[0]=='S'){
rotate(rotorMilieuIn);
rotate(rotorMilieuOut);
rotate(rotorBasIn);
rotate(rotorBasOut);
}
}
//recherche du caractère crypté sur 3 disques
curIndex = getCharRotor(rotorHautIn, rotorHautOut, car - 'A');
curIndex = getCharRotor(rotorMilieuIn, rotorMilieuOut, curIndex);
curIndex = getCharRotor(rotorBasIn, rotorBasOut, curIndex);
curIndex = getReflector(reflector, curIndex);
curIndex = getCharRotor(rotorBasOut, rotorBasIn, curIndex);
curIndex = getCharRotor(rotorMilieuOut, rotorMilieuIn, curIndex);
curIndex = getCharRotor(rotorHautOut, rotorHautIn, curIndex);
carChiffre=(char) ('A' + curIndex);
buffer[ptrbuf++]=carChiffre;
if (ptrbuf==BUFFER_SIZE-2){
ptrbuf=0;
}
buffer[ptrbuf]=0;
return carChiffre;
}
char * Enigma::getChiffre(){
return buffer;
}
//decallage de la chaine de caractère
//retourne le caractère decallé en fin de fin de chaine
char Enigma::rotate(char *rot) {
char temp = rot[0];
for (int i = 1; i < 26; i++) {
rot[i - 1] = rot[i];
}
rot[25] = temp;
return temp;
}
//retourne l'index du caractère sortant en fonction des chaine in et out et de l'index du caractère entrant
//l'opération se fait sur un disque
int Enigma::getCharRotor(char *rotIn, char* rotOut, int indexCar){
int index;
int i;
char nextCar;
nextCar=rotIn[indexCar];
for (i = 0; i < 26; i++) {
if (rotOut[i] == nextCar) {
index=i;
}
}
return index;
}
//la suite de caractère du réflécteur est toujours la meme
//pas de recherche le nouvel index est immédiat
int Enigma::getReflector(char *refl, int indexCar) {
char car=refl[indexCar];
return car-'A';
}

View File

@ -1,56 +0,0 @@
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/cppFiles/file.h to edit this template
*/
/*
* File: Enigma.h
* Author: ale
*
* Created on 6 mai 2026, 14:17
*/
#ifndef ENIGMA_H
#define ENIGMA_H
#include <Arduino.h>
#include <cstring>
#define BUFFER_SIZE 100
class Enigma {
public:
// Constructeur
Enigma();
// Destructeur
~Enigma();
void init();
char encode(char car);
char *getChiffre();
private:
char rotate(char *rot);
int getCharRotor(char *rotIn,char* rotOut,int indexCar);
int getReflector(char *refl,int indexCar);
char rotorHautIn[27];
char rotorHautOut[27];
char rotorMilieuIn[27];
char rotorMilieuOut[27];
char rotorBasIn[27];
char rotorBasOut[27];
char reflector[27];
char buffer[BUFFER_SIZE];
int ptrbuf;
};
#endif /* ENIGMA_H */

View File

@ -1,275 +0,0 @@
#include "Iambic.h"
// Constructeur
Iambic::Iambic(Modulation* m, Afficheur* a,int wpm,char _mode)
: mod(m), afficheur(a) {
Keyboard.begin();
pinMode(LED_PIN, OUTPUT);
pinMode(PIEZO_SPKR_PIN, OUTPUT);
pinMode(TX_SWITCH_PIN, OUTPUT);
// Setup input pins
pinMode(LEFT_PADDLE_PIN, INPUT_PULLUP); // sets Left Paddle digital pin as input
pinMode(RIGHT_PADDLE_PIN, INPUT_PULLUP); // sets Right Paddle digital pin as input
digitalWrite(LED_PIN, LOW); // turn the LED off
digitalWrite(TX_SWITCH_PIN, LOW); // Transmitter off
g_current_morse_character = 0b11111110;
g_keyerState = IDLE;
if (_mode == 'A') {
g_keyerControl = IAMBIC_A;
} else {
g_keyerControl = IAMBIC_B;
}
g_ditTime = 1200 / wpm;
// Setup for Righthanded paddle by default
g_dit_paddle = LEFT_PADDLE_PIN; // Dits on right hand thumb
g_dah_paddle = RIGHT_PADDLE_PIN; // Dahs on right hand index finger
g_sidetone_muted = true; // Default to no sidetone
//vband
// Etat des touches
left_down = false;
right_down = false;
// Anti-rebond
debounce_ms = 10;
left_time = 0;
right_time = 0;
}
// Destructeur
Iambic::~Iambic() {
// Pas de delete ici car agrégation (pas propriétaire)
}
void Iambic::scan() {
static long ktimer;
// This state machine translates paddle input into DITS and DAHs and keys the transmitter.
switch (g_keyerState) {
case IDLE:
// Wait for direct or latched paddle press
if ((digitalRead(g_dit_paddle) == LOW) || (digitalRead(g_dah_paddle) == LOW) || (g_keyerControl & 0x03)) {
update_PaddleLatch();
g_current_morse_character = 0b11111110; // Sarting point for accumlating a character input via paddles
g_keyerState = CHK_DIT;
}
break;
case CHK_DIT:
// See if the dit paddle was pressed
if (g_keyerControl & DIT_L) {
g_keyerControl |= DIT_PROC;
ktimer = g_ditTime;
g_current_morse_character = (g_current_morse_character << 1); // Shift a DIT (0) into the bit #0 position.
g_keyerState = KEYED_PREP;
} else {
g_keyerState = CHK_DAH;
}
break;
case CHK_DAH:
// See if dah paddle was pressed
if (g_keyerControl & DAH_L) {
ktimer = g_ditTime * 3;
g_current_morse_character = ((g_current_morse_character << 1) | 1); // Shift left one position and make bit #0 a DAH (1)
g_keyerState = KEYED_PREP;
} else {
ktimer = millis() + (g_ditTime * 2); // Character space, is g_ditTime x 2 because already have a trailing intercharacter space
g_keyerState = PRE_IDLE;
}
break;
case KEYED_PREP:
// Assert key down, start timing, state shared for dit or dah
tx_key_down();
ktimer += millis(); // set ktimer to interval end time
g_keyerControl &= ~(DIT_L + DAH_L); // clear both paddle latch bits
g_keyerState = KEYED; // next state
break;
case KEYED:
// Wait for timer to expire
if (millis() > ktimer) { // are we at end of key down ?
tx_key_up();
ktimer = millis() + g_ditTime; // inter-element time
g_keyerState = INTER_ELEMENT; // next state
} else if (g_keyerControl & IAMBIC_B) {
update_PaddleLatch(); // early paddle latch check in Iambic B mode
}
break;
case INTER_ELEMENT:
// Insert time between dits/dahs
update_PaddleLatch(); // latch paddle state
if (millis() > ktimer) { // are we at end of inter-space ?
if (g_keyerControl & DIT_PROC) { // was it a dit or dah ?
g_keyerControl &= ~(DIT_L + DIT_PROC); // clear two bits
g_keyerState = CHK_DAH; // dit done, check for dah
} else {
g_keyerControl &= ~(DAH_L); // clear dah latch
ktimer = millis() + (g_ditTime * 2); // Character space, is g_ditTime x 2 because already have a trailing intercharacter space
g_keyerState = PRE_IDLE; // go idle
}
}
break;
case PRE_IDLE: // Wait for an intercharacter space
// Check for direct or latched paddle press
if ((digitalRead(g_dit_paddle) == LOW) || (digitalRead(g_dah_paddle) == LOW) || (g_keyerControl & 0x03)) {
update_PaddleLatch();
g_keyerState = CHK_DIT;
} else { // Check for intercharacter space
if (millis() > ktimer) { // We have a character
//Serial.println(g_current_morse_character);
afficheur->printCharCW(morse_char_decode(g_current_morse_character));
//Serial.print(morse_char_decode(g_current_morse_character));
g_keyerState = IDLE; // go idle
}
}
break;
}
}
///////////////////////////////////////////////////////////////////////////////
//
// Latch dit and/or dah press
//
///////////////////////////////////////////////////////////////////////////////
void Iambic::update_PaddleLatch() {
if (digitalRead(g_dit_paddle) == LOW) {
g_keyerControl |= DIT_L;
}
if (digitalRead(g_dah_paddle) == LOW) {
g_keyerControl |= DAH_L;
}
}
///////////////////////////////////////////////////////////////////////////////
// Key the Transmitter
///////////////////////////////////////////////////////////////////////////////
void Iambic::tx_key_down() {
digitalWrite(LED_PIN, HIGH); // turn the LED on
digitalWrite(TX_SWITCH_PIN, HIGH); // Turn the transmitter on
mod->sendCarriage(true);
if (!g_sidetone_muted) {
tone(PIEZO_SPKR_PIN, SIDETONE_FREQ_HZ); // Sidetone on if not muted
}
}
///////////////////////////////////////////////////////////////////////////////
// Un-key the transmitter
///////////////////////////////////////////////////////////////////////////////
void Iambic::tx_key_up() {
digitalWrite(LED_PIN, LOW); // turn the LED off
digitalWrite(TX_SWITCH_PIN, LOW); // Turn the transmitter off
mod->sendCarriage(false);
if (!g_sidetone_muted) {
noTone(PIEZO_SPKR_PIN);
}
}
char Iambic::morse_char_decode(uint8_t code) {
switch (code) {
case 0b11111001: return 'A';
case 0b11101000: return 'B';
case 0b11101010: return 'C';
case 0b11110100: return 'D';
case 0b11111100: return 'E';
case 0b11100010: return 'F';
case 0b11110110: return 'G';
case 0b11100000: return 'H';
case 0b11111000: return 'I';
case 0b11100111: return 'J';
case 0b11110101: return 'K';
case 0b11100100: return 'L';
case 0b11111011: return 'M';
case 0b11111010: return 'N';
case 0b11110111: return 'O';
case 0b11100110: return 'P';
case 0b11101101: return 'Q';
case 0b11110010: return 'R';
case 0b11110000: return 'S';
case 0b11111101: return 'T';
case 0b11110001: return 'U';
case 0b11100001: return 'V';
case 0b11110011: return 'W';
case 0b11101001: return 'X';
case 0b11101011: return 'Y';
case 0b11101100: return 'Z';
case 0b11011111: return '0';
case 0b11001111: return '1';
case 0b11000111: return '2';
case 0b11000011: return '3';
case 0b11000001: return '4';
case 0b11000000: return '5';
case 0b11010000: return '6';
case 0b11011000: return '7';
case 0b11011100: return '8';
case 0b11011110: return '9';
case 0b11010010: return '/';
case 0b10001100: return '?';
case 0b11001010: return '*'; // AR
case 0b00000000: return '#'; // ERROR
case 0b11101111: return ' '; // espace
default: return '?'; // inconnu
}
}
void Iambic::vband() {
bool left_current = digitalRead(LEFT_PADDLE_PIN) == LOW;
bool right_current = digitalRead(RIGHT_PADDLE_PIN) == LOW;
unsigned long now = millis();
// ----- LEFT (DIT) -----
if (left_current != left_down && (now - left_time) > debounce_ms) {
left_time = now;
left_down = left_current;
if (left_current) {
Keyboard.press(VBAND_LEFT);
} else {
Keyboard.release(VBAND_LEFT);
}
}
// ----- RIGHT (DAH) -----
if (right_current != right_down && (now - right_time) > debounce_ms) {
right_time = now;
right_down = right_current;
if (right_current) {
Keyboard.press(VBAND_RIGHT);
} else {
Keyboard.release(VBAND_RIGHT);
}
}
}

View File

@ -1,114 +0,0 @@
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/cppFiles/file.h to edit this template
*/
/*
* File: Iambic.h
* Author: ale
*
* Created on 9 avril 2026, 18:42
*/
#ifndef IAMBIC_H
#define IAMBIC_H
#include <Arduino.h>
#include <Modulation.h>
#include "Afficheur.h"
#include <Keyboard.h>
#define VBAND_LEFT '['
#define VBAND_RIGHT ']'
// Keyer define
#define SIDETONE_FREQ_HZ 600 // Frequency for the keyer sidetone
#define DEFAULT_SPEED_WPM 10 // 15 WPM default keyer speed
#define KEYER_MODE_IS_IAMBIC_A // Remove the '//' at the beginning of the line if you prefer Iambic A, otherwise the code will use Iambic B. If you don't use squeeze keying it doesn't matter.
#define LEFT_PADDLE_PIN 2 // Left paddle input pin
#define RIGHT_PADDLE_PIN 8 // Right paddle input pin
#define PIEZO_SPKR_PIN 25 // Piezo Speaker connection via 100 ohm resistor
#define LED_PIN 3
#define TX_SWITCH_PIN 26 // Radio T/R Switch - HIGH is Key down (TX)), LOW is key up (RX).
#define DIT_L 0x01 // Dit latch (Binary 0000 0001)
#define DAH_L 0x02 // Dah latch (Binary 0000 0010)
#define DIT_PROC 0x04 // Dit is being processed (Binary 0000 0100)
#define IAMBIC_B 0x10 // 0x00 for Iambic A, 0x10 for Iambic B (Binary 0001 0000)
#define IAMBIC_A 0
// Keyer State machine type - states for sending of Morse elements based on paddle input
enum KSTYPE {
IDLE,
CHK_DIT,
CHK_DAH,
KEYED_PREP,
KEYED,
INTER_ELEMENT,
PRE_IDLE,
};
// Data type for storing Keyer settings in EEPROM
struct KeyerConfigType {
uint32_t ms_per_dit; // Speed
uint8_t dit_paddle_pin; // Dit paddle pin number
uint8_t dah_paddle_pin; // Dah Paddle pin number
uint8_t iambic_keying_mode; // 0 - Iambic-A, 1 Iambic-B
uint8_t sidetone_is_muted; //
};
class Iambic {
private:
Modulation* mod;
Afficheur* afficheur;
uint32_t g_ditTime; // Number of milliseconds per dit
uint8_t g_keyerControl; // 0x1 Dit latch, 0x2 Dah latch, 0x04 Dit being processed, 0x10 for Iambic A or 1 for B
KSTYPE g_keyerState; // Keyer state global variable
bool g_sidetone_muted; // If 'true' the Piezo speaker output is muted except for when in command mode
// We declare these as variables so that DIT and DAH paddles can be swapped for both left and right hand users. Convention is DIT on thumb.
uint8_t g_dit_paddle; // Current PIN number for Dit paddle
uint8_t g_dah_paddle; // Current PIN number for Dah paddle
// We use this variable to encode Morse elements (DIT = 0, DAH =1) to capture the current character sent via the paddles which is needed for user commands.
// The encoding practice is to left pad the character with 1's. A zero start bit is to the left of the first encoded element.
// We start with B11111110 and shift left with a 0 or 1 from the least significant bit, according the last Morse element received (DIT = 0, DAH =1).
uint8_t g_current_morse_character;
// Etat des touches
bool left_down;
bool right_down;
// Anti-rebond
unsigned long debounce_ms;
unsigned long left_time;
unsigned long right_time;
char morse_char_decode(uint8_t code);
void update_PaddleLatch();
void tx_key_down();
void tx_key_up();
public:
// Constructeur
Iambic(Modulation* m, Afficheur* a,int wpm,char _mode);
// Destructeur
~Iambic();
void scan();
void vband();
};
#endif // IAMBIC_H

View File

@ -1,180 +0,0 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/*
* File: Locator.cpp
* Author: ale
*
* Created on 7 juillet 2025, 16:07
*/
#include "Locator.h"
Locator::Locator() {
latitudeDec = 0.0;
longitudeDec = 0.0;
}
Locator::Locator(const Locator& orig) {
}
Locator::~Locator() {
}
String Locator::getLocator(float lat, float lon, int nbChar,uint8_t *dbm) {
const uint8_t valid_dbm[19] = {0, 3, 7, 10, 13, 17, 20, 23, 27, 30, 33, 37, 40, 43, 47, 50, 53, 57, 60};
if (lat < -90.0 || lat > 90.0 || lon < -180.0 || lon > 180.0) {
return "INVALID";
}
lon += 180.0;
lat += 90.0;
char locator[9];
// Field (A-R)
locator[0] = 'A' + int(lon / 20);
locator[1] = 'A' + int(lat / 10);
// Square (0-9)
locator[2] = '0' + int(fmod(lon, 20) / 2);
locator[3] = '0' + int(fmod(lat, 10));
// Subsquare (A-X)
int xLong = int(fmod(lon, 2) * 12);
int yLat = int(fmod(lat, 1) * 24);
locator[4] = 'A' + xLong;
locator[5] = 'A' + yLat;
// Extended square (0-9)
locator[6] = '0' + int(fmod(lon * 120, 10));
locator[7] = '0' + int(fmod(lat * 240, 10));
locator[8] = '\0';
// ===== AJOUT CALCUL DBM =====
int indice = (xLong / 4) * 3 + (yLat / 8);
*dbm = valid_dbm[indice];
// ============================
// Clamp nbChar
if (nbChar < 2) nbChar = 2;
if (nbChar > 8) nbChar = 8;
if (nbChar % 2 != 0) nbChar--;
return String(locator).substring(0, nbChar);
}
bool Locator::getLocator(float lat, float lon, int nbChar, char loc[],uint8_t *dbm) {
const uint8_t valid_dbm[19] = {0, 3, 7, 10, 13, 17, 20, 23, 27, 30, 33, 37, 40, 43, 47, 50, 53, 57, 60};
// Vérification des coordonnées
if (lat < -90.0 || lat > 90.0 || lon < -180.0 || lon > 180.0) {
return 0;
}
lon += 180.0;
lat += 90.0;
char fullLocator[9]; // 8 caractères + null terminator
// Field (A-R)
fullLocator[0] = 'A' + int(lon / 20);
fullLocator[1] = 'A' + int(lat / 10);
// Square (0-9)
fullLocator[2] = '0' + int(fmod(lon, 20) / 2);
fullLocator[3] = '0' + int(fmod(lat, 10));
// Subsquare (A-X)
int xLong = int(fmod(lon, 2) * 12);
int yLat = int(fmod(lat, 1) * 24);
fullLocator[4] = 'A' + xLong;
fullLocator[5] = 'A' + yLat;
// Extended square (0-9)
fullLocator[6] = '0' + int(fmod(lon * 120, 10));
fullLocator[7] = '0' + int(fmod(lat * 240, 10));
fullLocator[8] = '\0';
// ===== AJOUT CALCUL DBM =====
int indice = (xLong / 4) * 3 + (yLat / 8);
*dbm = valid_dbm[indice]; // ou pos.pwrDbm
// ============================
// Clamp nbChar (bonne pratique ici aussi 👍)
if (nbChar < 2) nbChar = 2;
if (nbChar > 8) nbChar = 8;
if (nbChar % 2 != 0) nbChar--;
// Copie
for (int i = 0; i < nbChar; i++) {
loc[i] = fullLocator[i];
}
loc[nbChar] = '\0';
return 1;
}
void Locator::convLocator(String locator) {
locator.toUpperCase();
if (locator.length() < 4) return;
float lon = (locator[0] - 'A') * 20.0 - 180.0;
float lat = (locator[1] - 'A') * 10.0 - 90.0;
lon += (locator[2] - '0') * 2.0;
lat += (locator[3] - '0') * 1.0;
if (locator.length() >= 6) {
lon += (locator[4] - 'A') * (2.0 / 24.0);
lat += (locator[5] - 'A') * (1.0 / 24.0);
}
if (locator.length() >= 8) {
lon += (locator[6] - '0') * (2.0 / 240.0);
lat += (locator[7] - '0') * (1.0 / 240.0);
}
longitudeDec = lon;
latitudeDec = lat;
}
float Locator::getLatitudeDec() {
return latitudeDec;
}
float Locator::getLongitudeDec() {
return longitudeDec;
}
String Locator::getLatitudeDmd() {
char buffer[16];
char hemi = (latitudeDec >= 0) ? 'N' : 'S';
float absLat = abs(latitudeDec);
int deg = int(absLat);
float min = (absLat - deg) * 60.0;
sprintf(buffer, "%02d%05.2f%c", deg, min, hemi);
return String(buffer);
}
String Locator::getLongitudeDmd() {
char buffer[16];
char hemi = (longitudeDec >= 0) ? 'E' : 'W';
float absLon = abs(longitudeDec);
int deg = int(absLon);
float min = (absLon - deg) * 60.0;
sprintf(buffer, "%03d%05.2f%c", deg, min, hemi);
return String(buffer);
}

View File

@ -1,42 +0,0 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/*
* File: Locator.h
* Author: ale
*
* Created on 7 juillet 2025, 16:07
*/
#ifndef LOCATOR_H
#define LOCATOR_H
#include <Arduino.h>
class Locator {
public:
Locator();
Locator(const Locator& orig);
virtual ~Locator();
String getLocator(float latitude, float longitude, int nbChar ,uint8_t *dbm);
bool getLocator(float lat, float lon, int nbChar, char loc[],uint8_t *dbm);
void convLocator(String locator);
float getLatitudeDec();
float getLongitudeDec();
String getLatitudeDmd();
String getLongitudeDmd();
private:
float latitudeDec = 0.0;
float longitudeDec = 0.0;
};
#endif /* LOCATOR_H */

View File

@ -1,474 +0,0 @@
/*
* File: Menu.cpp
*
* Created on 22 avril 2022, 17:11
*/
#include "Menu.h"
const char* Menu::modeStr[7] = {"WSPR", "RTTY", "FT8", "HELL", "CW", "IAMBIC", "ALL"};
const char* Menu::bandStr[7] = {"160m", "80m", "60m", "40m", "30m", "20m", "free frequency"};
Menu::Menu() :
exitFlag(false),
con(new Console())
{
anchor = this;
pinMode(MENU_PIN, INPUT_PULLUP); // GP6 avec résistance interne activée
tabfreq[0] = {1838100, -50};
tabfreq[1] = {3570100, -150};
tabfreq[2] = {5288700, -200};
tabfreq[3] = {7040100, -300};
tabfreq[4] = {10140200, -400};
tabfreq[5] = {14097100, -550};
}
Menu::Menu(const Menu& orig) {
}
Menu::~Menu() {
anchor = NULL;
}
void Menu::run() {
exitFlag = false;
if (digitalRead(MENU_PIN) == 0) {
EEPROM.begin(sizeof (config));
EEPROM.get(0, cfg);
Serial.println(F("help command for info"));
while (exitFlag == false) {
con->run();
}
}
Serial.println(F("\nConsole exit"));
}
void Menu::setup() {
con->onCmd("call", _call_);
con->onCmd("freq", _freq_);
con->onCmd("minute",_minute_);
con->onCmd("offset", _offset_);
con->onCmd("gpsbaud", _gpsbaud_);
con->onCmd("dbm", _dbm_);
con->onCmd("mail", _mail_);
con->onCmd("show", _show_);
con->onCmd("raz", _raz_);
con->onCmd("restart", _restart_);
con->onCmd("save", _save_);
con->onCmd("exit", _exit_);
con->onCmd("help", _help_);
con->onCmd("scan", _scan_);
con->onCmd("loc", _loc_);
con->onCmd("mode", _mode_);
con->onCmd("band", _band_);
con->onCmd("iambic", _iambic_);
con->onCmd("nmea", _nmea_);
con->onCmd("wpm", _wpm_);
con->onCmd("follow", _follow_);
con->onUnknown(_unknown);
con->start();
this->run();
}
void Menu::_exit_(ArgList& L, Stream& S) {
anchor->exitFlag = true;
}
void Menu::_help_(ArgList& L, Stream& S) {
S.println(F("Available commands"));
S.println(F("Set transmission frequency : freq 7040100"));
S.println(F("Set offset value : offset -200"));
S.println(F("Set callsign : call F4XYZ"));
S.println(F("Set locator : loc JN07"));
S.println(F("Set mode wspr rtty ft8 hell cw all : mode wspr"));
S.println(F("Set band 160,80m,60m,40m,30m,20m,freq : band 40m"));
S.println(F("Set modulo in minutes : minute 10"));
S.println(F("Set follow mode : follow 1"));
S.println(F("Set cw words per minute : wpm 15"));
S.println(F("Set iambic mode : iambic B"));
S.println(F("Set transmission power (dBm) : dbm 10"));
S.println(F("Set email address : mail f4xyz at example.com"));
S.println(F("Set gps baud rate : gpsbaud 9600"));
S.println(F("Scan I2C bus : scan"));
S.println(F("Show nmea frame : nmea 1"));
S.println(F("Save current configuration to EEPROM : save"));
S.println(F("Display current configuration : show"));
S.println(F("Reset all parameters to default : raz"));
S.println(F("Restart RPI pico : restart"));
S.println(F("Show this help message : help"));
S.println(F("Exit menu : exit"));
}
bool Menu::acceptCmd(String cmd, int longMin, int longMax) {
if (cmd.length() >= longMin && cmd.length() <= longMax) {
return true;
} else {
Serial.println("Erreur");
return false;
}
}
void Menu::_unknown(String& L, Stream& S) {
S.print(L);
S.println(" : command not found");
}
void Menu::_call_(ArgList& L, Stream& S) {
String p;
bool ret;
p = L.getNextArg();
ret = anchor->acceptCmd(p, 4, 9);
if (ret == true) {
p.toUpperCase();
size_t len = strlen(p.c_str());
if (len < sizeof (cfg.call)) {
//memcpy(anchor->cfg.call, p.c_str(), len);
//anchor->cfg.call[len] = '\0'; // Ajout manuel du terminateur
strcpy(anchor->cfg.call, p.c_str());
S.printf("Callsign set to: %s\n\r", anchor->cfg.call);
} else {
S.println(F("Callsign too long. Max 9 characters."));
}
} else {
S.println(F("Invalid callsign format."));
}
}
void Menu::_loc_(ArgList& L, Stream& S) {
String p;
bool ret;
p = L.getNextArg();
ret = anchor->acceptCmd(p, 4, 4);
if (ret == true) {
p.toUpperCase();
strcpy(anchor->cfg.locator, p.c_str());
S.printf("Locator set to: %s\n\r", anchor->cfg.locator);
} else {
S.println(F("Invalid locator format ex JN07"));
}
}
void Menu::_mode_(ArgList& L, Stream& S) {
String p = L.getNextArg();
p.toLowerCase(); // Normalise la casse pour comparaison
if (p == "wspr") {
anchor->cfg.mode = WSPR;
} else if (p == "rtty") {
anchor->cfg.mode = RTTY;
} else if (p == "ft8") {
anchor->cfg.mode = FT8;
} else if (p == "hell") {
anchor->cfg.mode = HELL;
} else if (p == "cw") {
anchor->cfg.mode = CW;
} else if (p == "iambic") {
anchor->cfg.mode = IAMBIC;
} else if (p == "all") {
anchor->cfg.mode = ALL;
} else {
S.println(F("Invalid mode syntax. Example: mode wspr"));
return;
}
// Affiche le mode sélectionné
S.printf("Mode set to: %s\n\r", modeStr[anchor->cfg.mode]);
}
void Menu::_band_(ArgList& L, Stream& S) {
String p = L.getNextArg();
p.toLowerCase(); // Normalise la casse pour comparaison
if (p == "160m") {
anchor->cfg.band = M160;
anchor->cfg.freq = anchor->tabfreq[0].freq;
anchor->cfg.offset = anchor->tabfreq[0].offset;
} else if (p == "80m") {
anchor->cfg.band = M80;
anchor->cfg.freq = anchor->tabfreq[1].freq;
anchor->cfg.offset = anchor->tabfreq[1].offset;
} else if (p == "60m") {
anchor->cfg.band = M60;
anchor->cfg.freq = anchor->tabfreq[2].freq;
anchor->cfg.offset = anchor->tabfreq[2].offset;
} else if (p == "40m") {
anchor->cfg.band = M40;
anchor->cfg.freq = anchor->tabfreq[3].freq;
anchor->cfg.offset = anchor->tabfreq[3].offset;
} else if (p == "30m") {
anchor->cfg.band = M30;
anchor->cfg.freq = anchor->tabfreq[4].freq;
anchor->cfg.offset = anchor->tabfreq[4].offset;
} else if (p == "20m") {
anchor->cfg.band = M20;
anchor->cfg.freq = anchor->tabfreq[5].freq;
anchor->cfg.offset = anchor->tabfreq[5].offset;
} else if (p == "freq") {
anchor->cfg.band = FREQ;
} else {
S.println(F("Invalid mode syntax. Example: band 40m"));
return;
}
// Affiche le mode sélectionné
S.printf("Band set to: %s\n\r", bandStr[anchor->cfg.band]);
}
//manque le test de la fréquence max supportée par le RPI
void Menu::_freq_(ArgList& L, Stream& S) {
String p;
bool ret;
p = L.getNextArg();
ret = anchor->acceptCmd(p, 6, 8);
if (ret == true) {
uint32_t freqValue = p.toInt(); // Conversion de la chaîne en entier
anchor->cfg.freq = freqValue; // Sauvegarde dans la structure
S.printf("Frequency set to: %lu Hz\n\r", anchor->cfg.freq);
}
}
void Menu::_minute_(ArgList& L, Stream& S) {
String p;
bool ret;
p = L.getNextArg();
ret = anchor->acceptCmd(p, 1, 2);
if (ret == true) {
uint8_t minuteValue = (uint8_t) p.toInt(); // Conversion en entier 8 bits
anchor->cfg.minute = minuteValue; // Sauvegarde dans la structure
S.printf("Minute modulo set to: %u\n\r", anchor->cfg.minute);
}
}
void Menu::_wpm_(ArgList& L, Stream& S) {
String p;
bool ret;
p = L.getNextArg();
ret = anchor->acceptCmd(p, 1, 2);
if (ret == true) {
uint8_t wpm = (uint8_t) p.toInt(); // Conversion en entier 8 bits
anchor->cfg.wpm = wpm; // Sauvegarde dans la structure
S.printf("WPM set to: %u\n\r", anchor->cfg.wpm);
}
}
//facteur de correction
void Menu::_offset_(ArgList& L, Stream& S) {
String p;
bool ret;
p = L.getNextArg();
ret = anchor->acceptCmd(p, 1, 5);
if (ret == true) {
int32_t offsetValue = p.toInt(); // Conversion en entier signé
anchor->cfg.offset = offsetValue; // Sauvegarde dans la structure
S.printf("Offset set to: %ld\n\r", anchor->cfg.offset);
}
}
void Menu::_gpsbaud_(ArgList& L, Stream& S) {
String p;
bool ret;
p = L.getNextArg();
ret = anchor->acceptCmd(p, 4, 5);
if (ret == true) {
uint32_t baudValue = p.toInt(); // Conversion en entier non signé
anchor->cfg.baud = baudValue; // Sauvegarde dans la structure
S.printf("GPS baudrate set to: %lu\n\r", anchor->cfg.baud);
}
}
//les valeurs de dbm sont normalisées la table pour vérification
void Menu::_dbm_(ArgList& L, Stream& S) {
String p = L.getNextArg();
bool ret = anchor->acceptCmd(p, 1, 2);
if (ret == true) {
int inputValue = p.toInt();
// Tableau des puissances disponibles
const uint8_t dbmTable[] = {
0, 3, 7, 10, 13, 17, 20, 23, 27, 30,
33, 37, 40, 43, 47, 50, 53, 57, 60
};
const size_t tableSize = sizeof(dbmTable) / sizeof(dbmTable[0]);
// Recherche de la valeur la plus proche
uint8_t closest = dbmTable[0];
int minDiff = abs(inputValue - dbmTable[0]);
for (size_t i = 1; i < tableSize; ++i) {
int diff = abs(inputValue - dbmTable[i]);
if (diff < minDiff) {
minDiff = diff;
closest = dbmTable[i];
}
}
// Mise à jour de la configuration
anchor->cfg.dbm = closest;
S.printf("Transmission power set to: %u dBm (closest to %d)\n\r", closest, inputValue);
}
}
void Menu::_mail_(ArgList& L, Stream& S) {
String arg;
bool ret;
String p = "";
while (!(arg = L.getNextArg()).isEmpty()) {
p = p + arg + " ";
}
ret = anchor->acceptCmd(p, 3, 30);
p.toUpperCase();
size_t len = strlen(p.c_str());
if (len < sizeof (anchor->cfg.mail)) {
//memcpy(anchor->cfg.mail, p.c_str(), len);
//anchor->cfg.mail[len] = '\0'; // Ajout manuel du terminateur
strcpy(anchor->cfg.mail, p.c_str());
S.printf("Email set to: %s\n\r", anchor->cfg.mail);
} else {
S.println(F("Email too long. Max 30 characters."));
}
}
void Menu::_nmea_(ArgList& L, Stream& S) {
String p;
bool ret;
p = L.getNextArg();
ret = anchor->acceptCmd(p, 1, 1);
if (ret == true) {
int val = p.toInt(); // Conversion en entier
if (val == 0 || val == 1) {
anchor->cfg.nmeaEnabled = (val == 1); // Affectation booléenne
S.printf("Nmea frame debug %s\n\r", anchor->cfg.nmeaEnabled ? "enabled" : "disabled");
} else {
S.println(F("Invalid value. Use 0 to disable or 1 to enable nmea debug."));
}
}
}
void Menu::_iambic_(ArgList& L, Stream& S) {
String p;
bool ret;
p = L.getNextArg();
ret = anchor->acceptCmd(p, 1, 1);
if (ret == true) {
char val = toupper(p[0]); // Conversion en char
if (val == 'A' || val == 'B') {
anchor->cfg.bicmd = val; // Affectation booléenne
S.printf("Iambic type %c\n\r", anchor->cfg.bicmd);
} else {
S.println(F("Invalid value. Use A or B type for iambic paddle."));
}
}
}
void Menu::_follow_(ArgList& L, Stream& S) {
String p;
bool ret;
p = L.getNextArg();
ret = anchor->acceptCmd(p, 1, 1);
if (ret == true) {
int val = p.toInt(); // Conversion en entier
if (val == 0 || val == 1) {
anchor->cfg.follow = (val == 1); // Affectation booléenne
S.printf("Follow is %s\n\r", anchor->cfg.follow ? "enabled" : "disabled");
} else {
S.println(F("Invalid value. Use 0 to disable or 1 to enable follow mode."));
}
}
}
void Menu::_show_(ArgList& L, Stream& S) {
S.println("Current configuration :");
S.printf(" freq : %lu Hz\n\r", anchor->cfg.freq);
S.printf(" offset : %ld\n\r", anchor->cfg.offset);
S.printf(" call : %s\n\r", anchor->cfg.call);
S.printf(" locator : %s\n\r", anchor->cfg.locator);
S.printf(" dbm : %u dBm\n\r", anchor->cfg.dbm);
S.printf(" mode : %s\n\r", modeStr[anchor->cfg.mode]);
S.printf(" band : %s\n\r", bandStr[anchor->cfg.band]);
S.printf(" wpm : %u\n\r", anchor->cfg.wpm);
S.printf(" iambic mode : %c\n\r", anchor->cfg.bicmd);
S.printf(" mail : %s\n\r", anchor->cfg.mail);
S.printf(" minute : %u min\n\r", anchor->cfg.minute);
S.printf(" Gps baud rate : %u\n\r", anchor->cfg.baud);
S.printf(" Nmea debug is : %s\n\r", anchor->cfg.nmeaEnabled ? "ON" : "OFF");
S.printf(" Follow is : %s\n\r", anchor->cfg.follow ? "ON" : "OFF");
}
void Menu::_save_(ArgList& L, Stream& S) {
EEPROM.put(0, anchor->cfg);
EEPROM.commit();
Serial.println("Configuration saved.");
}
void Menu::_raz_(ArgList& L, Stream& S) {
anchor->cfg.freq = 7040100; // Fréquence par défaut
anchor->cfg.offset = -200; // Fréquence par défaut
strcpy(anchor->cfg.call, "NOCALL"); // Indicatif par défaut
anchor->cfg.dbm = 10; // Puissance par défaut
strcpy(anchor->cfg.mail, "none@example.com"); // Email par défaut
strcpy(anchor->cfg.locator, "JN07"); // Locator par défaut
anchor->cfg.minute = 6; // Durée par défaut
anchor->cfg.baud=9600; //9600 bauds
anchor->cfg.mode=WSPR;
anchor->cfg.nmeaEnabled=false;
anchor->cfg.wpm=12;
anchor->cfg.follow=0;
anchor->cfg.band = FREQ;
Serial.println("Configuration has been reset to default values.");
}
void Menu::_restart_(ArgList& L, Stream& S) {
watchdog_reboot(0, 0, 0); // Redémarre immédiatement
}
void Menu::_scan_(ArgList& L, Stream& S) {
anchor->scanI2C();
}
void Menu::scanI2C() {
Serial.println(" 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f");
for (uint8_t row = 0; row < 8; row++) {
Serial.printf("%02x: ", row << 4);
for (uint8_t col = 0; col < 16; col++) {
uint8_t address = (row << 4) | col;
Wire.beginTransmission(address);
uint8_t error = Wire.endTransmission();
if (error == 0) {
Serial.printf("%02x ", address);
} else if (error == 4) {
Serial.print("UU "); // Bus error
} else {
Serial.print("-- ");
}
}
Serial.println();
}
}
Menu* Menu::anchor = NULL;

View File

@ -1,100 +0,0 @@
/*
* File: Menu.h
*
* Created on 22 avril 2022, 17:11
*/
#ifndef MENU_H
#define MENU_H
#include <Arduino.h>
#include <console.h>
#include "hardware/watchdog.h"
#include <EEPROM.h>
#include <Wire.h>
#define MENU_PIN 6
typedef enum{
WSPR,RTTY,FT8,HELL,CW,IAMBIC,ALL,NOTX
}txModes;
typedef enum{
M160,M80,M60,M40,M30,M20,M17,M15,FREQ
}bands;
typedef struct {
uint32_t freq;
int32_t offset;
}freqbands;
typedef struct {
uint32_t freq;
char call[10];
uint8_t dbm;
char mail[31];
int32_t offset;
uint8_t minute; // Durée en minutes
uint32_t baud;
char locator[5];
txModes mode;
bool nmeaEnabled;
uint8_t wpm;
bool follow;
char bicmd;
bands band;
} config;
class Menu {
public:
Menu();
Menu(const Menu& orig);
virtual ~Menu();
void run();
void setup();
private:
// Méthodes associées aux commandes
static void _call_(ArgList& L, Stream& S);
static void _freq_(ArgList& L, Stream& S);
static void _minute_(ArgList& L, Stream& S);
static void _offset_(ArgList& L, Stream& S);
static void _gpsbaud_(ArgList& L, Stream& S);
static void _dbm_(ArgList& L, Stream& S);
static void _mail_(ArgList& L, Stream& S);
static void _mode_(ArgList& L, Stream& S);
static void _band_(ArgList& L, Stream& S);
static void _iambic_(ArgList& L, Stream& S);
static void _show_(ArgList& L, Stream& S);
static void _raz_(ArgList& L, Stream& S);
static void _save_(ArgList& L, Stream& S);
static void _restart_(ArgList& L, Stream& S);
static void _exit_(ArgList& L, Stream& S);
static void _help_(ArgList& L, Stream& S);
static void _unknown(String& L, Stream& S);
static void _scan_(ArgList& L, Stream& S);
static void _loc_(ArgList& L, Stream& S);
static void _nmea_(ArgList& L, Stream& S);
static void _wpm_(ArgList& L, Stream& S);
static void _follow_(ArgList& L, Stream& S);
//void displayRtc();
bool exitFlag;
Console *con;
config cfg;
static Menu* anchor;
bool acceptCmd(String cmd, int longMin, int longMax);
void scanI2C();
static const char* modeStr[7];
static const char* bandStr[7];
freqbands tabfreq[6];
};
#endif /* MENU_H */

View File

@ -1,347 +0,0 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/*
* File: Modulation.cpp
* Author: ale
*
* Created on 28 août 2025, 07:55
*/
#include "Modulation.h"
Modulation::Modulation(config* _cfg) : cfg(_cfg) {
setFreqWspr(cfg->freq+cfg->offset);
setFreqRtty(cfg->freq+cfg->offset+500L); //a cote de la fréquence wspr
setFreqFt8(cfg->freq+cfg->offset+500L);
setFreqCW(cfg->freq+cfg->offset+500L);
anchor = this;
pinMode(TEST_PIN,OUTPUT);
}
Modulation::Modulation(const Modulation& orig) {
}
Modulation::~Modulation() {
}
void Modulation::marshall() {
// Clear the alarm irq
hw_clear_bits(&timer_hw->intr, 1u << ALARM_NUM);
// Reset the alarm register
timer_hw->alarm[ALARM_NUM] = timer_hw->timerawl + period_us ;
anchor->timerCallback();
}
void Modulation::startTimerIRQ(uint32_t us) {
period_us = us;
// Enable the interrupt for the alarm (we're using Alarm 0)
hw_set_bits(&timer_hw->inte, 1u << ALARM_NUM) ;
// Associate an interrupt handler with the ALARM_IRQ
irq_set_exclusive_handler(ALARM_IRQ, marshall) ;
// Enable the alarm interrupt
irq_set_enabled(ALARM_IRQ, true) ;
// Write the lower 32 bits of the target time to the alarm register, arming it.
timer_hw->alarm[ALARM_NUM] = timer_hw->timerawl + period_us ;
irq_set_priority(ALARM_IRQ, 0); // Priorité haute
Serial.println("init irq");
}
void Modulation::stopTimerIRQ() {
irq_set_enabled(ALARM_IRQ, false);
hardware_alarm_unclaim(ALARM_NUM);
Serial.println("stop irq");
}
void Modulation::timerCallback() {
gpio_xor_mask(1u << TEST_PIN); // Toggle rapide
flagIrq = true;
//Serial.print("irq");
}
void Modulation::waitIrq(){
while (!flagIrq){}
flagIrq=false;
}
void Modulation::sendWspr(char *locator) {
memset(txBuffer, 0, WSPR_SYMBOL_COUNT);
if (cfg->follow) {
jtencode.wspr_encode(cfg->call, locator, dbm, txBuffer); //avec suivi
} else {
jtencode.wspr_encode(cfg->call, locator, cfg->dbm, txBuffer); //sans suivi
}
startTimerIRQ(WSPR_DELAY * 1000);
flagIrq = false;
for (uint8_t i = 0; i < WSPR_SYMBOL_COUNT; i++) {
periods = wsfr[txBuffer[i]]; //modulation fsk sur 4 niveaux de fréquences avec un shift de 1.48 Hz le contenu de buffer est 0 ou 1 ou 2 ou 3
//delay(WSPR_DELAY);
waitIrq();
}
periods = 200 << 24; //dds off
stopTimerIRQ();
}
void Modulation::setDbm(uint8_t _dbm){
dbm=_dbm;
}
void Modulation::sendRtty(char* stringRtty) {
const static int TableRtty[59] PROGMEM = { 4, 22, 17, 5, 18, 0, 11, 26, 30, 9, 0, 0, 6, 24, 7, 23, 13, 29, 25, 16, 10, 1, 21, 28, 12, 3, 14, 15, 0, 0, 0, 19, 0, 24, 19, 14, 18, 16, 22, 11, 5, 12, 26, 30, 9, 7, 6, 3, 13, 29, 10, 20, 1, 28, 15, 25, 23, 21, 17 };
//tableau dans l'ordre ascii qui démarre à partir de l'espace 32
//les valeurs représentent le code baudot
int signlett = 1; // RTTY Baudot signs/letters tables toggle
char c;
startTimerIRQ(RTTY_DELAY*1000);
c = *stringRtty++;
for (int n = 1; n < 20; n++) { //sync on envoie une série de letters table code
rttyTxByte(27);
}
while (c != '\0') {
//Serial.print(c);
c = toupper(int(c)); // Uppercase
if (c == 10) // Line Feed
{
rttyTxByte(8);
} else if (c == 13) // Carriage Return
{
rttyTxByte(2);
} else if (c == 32) // Space
{
rttyTxByte(4);
} else if (c > 32 && c < 91) {
c = c - 32;
if (c < 33) {
if (signlett == 1) {
signlett = 0; // toggle form signs to letters table
rttyTxByte(27); //
}
} else if (signlett == 0) {
signlett = 1; // toggle form letters to signs table
rttyTxByte(31); //
}
rttyTxByte(int(pgm_read_word(&TableRtty[int(c)]))); // Send the 5 bits word
}
c = *stringRtty++; // Next character in string
}
periods = 200 << 24; //dds off
stopTimerIRQ();
}
void Modulation::rttyTxByte(char c) {
int val;
c = (c << 2) + 3; //ajoute les deux bits de stop
for (int b = 7; b >= 0; b--) // MSB first
{
val = bitRead(c, b); // Read 1 bit
if (val == 0) periods = rttyfr[0]; //modulation fsk
else periods = rttyfr[1];
//delay(RTTY_DELAY);
waitIrq();
}
}
void Modulation::sendFt8(char *call, char *locator) {
char buf[20];
sprintf(buf, "%s%s", call, locator);
//Serial.println(buf);
memset(txBuffer, 0, FT8_SYMBOL_COUNT);
jtencode.ft8_encode(buf, txBuffer);
//debug
/*
int n, lf;
lf = 0;
for (n = 0; n < FT8_SYMBOL_COUNT; n++) { //print symbols on serial monitor
if (lf % 16 == 0) {
Serial.println();
Serial.print(n);
Serial.print(": ");
}
lf++;
Serial.print(txBuffer[n]);
Serial.print(',');
}
Serial.println();
*/
startTimerIRQ(FT8_DELAY*1000);
flagIrq=false;
for (uint8_t i = 0; i < FT8_SYMBOL_COUNT; i++) {
periods = ft8fr[txBuffer[i]];
//delay(FT8_DELAY);
waitIrq();
}
periods = 200 << 24; //dds off
stopTimerIRQ();
}
/***********************************************************************************
* Hellschreiber 122.5 bauds => 8,163ms
* http://brainwagon.org/2012/01/11/hellduino-sending-hellschreiber-from-an-arduino
************************************************************************************/
void Modulation::sendHell(char * stringHell) {
static word GlyphTab[59][8] PROGMEM = {
{0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
{0x1f9c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
{0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
{0x0330, 0x0ffc, 0x0330, 0x0ffc, 0x0330, 0x0000, 0x0000},
{0x078c, 0x0ccc, 0x1ffe, 0x0ccc, 0x0c78, 0x0000, 0x0000},
{0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
{0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
{0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
{0x01e0, 0x0738, 0x1c0e, 0x0000, 0x0000, 0x0000, 0x0000},
{0x1c0e, 0x0738, 0x01e0, 0x0000, 0x0000, 0x0000, 0x0000},
{0x018c, 0x0198, 0x0ff0, 0x0198, 0x018c, 0x0000, 0x0000},
{0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
{0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
{0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
{0x001c, 0x001c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
{0x001c, 0x0070, 0x01c0, 0x0700, 0x1c00, 0x0000, 0x0000},
{0x07f8, 0x0c0c, 0x0c0c, 0x0c0c, 0x07f8, 0x0000, 0x0000},
{0x0300, 0x0600, 0x0ffc, 0x0000, 0x0000, 0x0000, 0x0000},
{0x061c, 0x0c3c, 0x0ccc, 0x078c, 0x000c, 0x0000, 0x0000},
{0x0006, 0x1806, 0x198c, 0x1f98, 0x00f0, 0x0000, 0x0000},
{0x1fe0, 0x0060, 0x0060, 0x0ffc, 0x0060, 0x0000, 0x0000},
{0x000c, 0x000c, 0x1f8c, 0x1998, 0x18f0, 0x0000, 0x0000},
{0x07fc, 0x0c66, 0x18c6, 0x00c6, 0x007c, 0x0000, 0x0000},
{0x181c, 0x1870, 0x19c0, 0x1f00, 0x1c00, 0x0000, 0x0000},
{0x0f3c, 0x19e6, 0x18c6, 0x19e6, 0x0f3c, 0x0000, 0x0000},
{0x0f80, 0x18c6, 0x18cc, 0x18cc, 0x0ff0, 0x0000, 0x0000},
{0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
{0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
{0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
{0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
{0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
{0x1800, 0x1800, 0x19ce, 0x1f00, 0x0000, 0x0000, 0x0000},
{0x01f0, 0x0208, 0x04e4, 0x0514, 0x0514, 0x03e0, 0x0000},
{0x07fc, 0x0e60, 0x0c60, 0x0e60, 0x07fc, 0x0000, 0x0000},
{0x0c0c, 0x0ffc, 0x0ccc, 0x0ccc, 0x0738, 0x0000, 0x0000},
{0x0ffc, 0x0c0c, 0x0c0c, 0x0c0c, 0x0c0c, 0x0000, 0x0000},
{0x0c0c, 0x0ffc, 0x0c0c, 0x0c0c, 0x07f8, 0x0000, 0x0000},
{0x0ffc, 0x0ccc, 0x0ccc, 0x0c0c, 0x0c0c, 0x0000, 0x0000},
{0x0ffc, 0x0cc0, 0x0cc0, 0x0c00, 0x0c00, 0x0000, 0x0000},
{0x0ffc, 0x0c0c, 0x0c0c, 0x0ccc, 0x0cfc, 0x0000, 0x0000},
{0x0ffc, 0x00c0, 0x00c0, 0x00c0, 0x0ffc, 0x0000, 0x0000},
{0x0c0c, 0x0c0c, 0x0ffc, 0x0c0c, 0x0c0c, 0x0000, 0x0000},
{0x003c, 0x000c, 0x000c, 0x000c, 0x0ffc, 0x0000, 0x0000},
{0x0ffc, 0x00c0, 0x00e0, 0x0330, 0x0e1c, 0x0000, 0x0000},
{0x0ffc, 0x000c, 0x000c, 0x000c, 0x000c, 0x0000, 0x0000},
{0x0ffc, 0x0600, 0x0300, 0x0600, 0x0ffc, 0x0000, 0x0000},
{0x0ffc, 0x0700, 0x01c0, 0x0070, 0x0ffc, 0x0000, 0x0000},
{0x0ffc, 0x0c0c, 0x0c0c, 0x0c0c, 0x0ffc, 0x0000, 0x0000},
{0x0c0c, 0x0ffc, 0x0ccc, 0x0cc0, 0x0780, 0x0000, 0x0000},
{0x0ffc, 0x0c0c, 0x0c3c, 0x0ffc, 0x000f, 0x0000, 0x0000},
{0x0ffc, 0x0cc0, 0x0cc0, 0x0cf0, 0x079c, 0x0000, 0x0000},
{0x078c, 0x0ccc, 0x0ccc, 0x0ccc, 0x0c78, 0x0000, 0x0000},
{0x0c00, 0x0c00, 0x0ffc, 0x0c00, 0x0c00, 0x0000, 0x0000},
{0x0ff8, 0x000c, 0x000c, 0x000c, 0x0ff8, 0x0000, 0x0000},
{0x0ffc, 0x0038, 0x00e0, 0x0380, 0x0e00, 0x0000, 0x0000},
{0x0ff8, 0x000c, 0x00f8, 0x000c, 0x0ff8, 0x0000, 0x0000},
{0x0e1c, 0x0330, 0x01e0, 0x0330, 0x0e1c, 0x0000, 0x0000},
{0x0e00, 0x0380, 0x00fc, 0x0380, 0x0e00, 0x0000, 0x0000},
{0x0c1c, 0x0c7c, 0x0ccc, 0x0f8c, 0x0e0c, 0x0000, 0x0000}
};
int val;
char ch;
word fbits;
startTimerIRQ(HELL_DELAY);
ch = *stringHell++;
while (ch != '\0') {
ch = toupper(int(ch)); // Uppercase
if (ch >= 32 && ch <= 90) // Character is in the range of ASCII space to Z
{
ch -= 32; // Character number starting at 0
for (int i = 0; i < 7; i++) // Scanning each 7 columns of glyph
{
fbits = int(pgm_read_word(&GlyphTab[int(ch)][i])); // Get each column of glyph
for (int b = 0; b < 14; b++) // Scanning each 14 rows
{
val = bitRead(fbits, b); // Get binary state of pixel
//DDS.setfreq(freqHell * val, 0); // Let's transmit (or not if pixel is clear)
if (val){
periods = rttyfr[0]; //utiliser la fréquence du rtty pour essais
}
else{
periods = 200 << 24; //dds off
}
waitIrq();
//delayMicroseconds(HELL_DELAY); //8,163ms/2
}
}
}
ch = *stringHell++; // Next character in string
}
periods = 200 << 24; //dds off
stopTimerIRQ();
}
/***************************************************************************
* CW
***************************************************************************/
void Modulation::sendCw(char * stringCw, int cwWpm) {
static int morseVaricode[2][59] PROGMEM = {
{0, 212, 72, 0, 144, 0, 128, 120, 176, 180, 0, 80, 204, 132, 84, 144, 248, 120, 56, 24, 8, 0, 128, 192, 224, 240, 224, 168, 0, 136, 0, 48, 104, 64, 128, 160, 128, 0, 32, 192, 0, 0, 112, 160, 64, 192, 128, 224, 96, 208, 64, 0, 128, 32, 16, 96, 144, 176, 192},
{7, 6, 5, 0, 4, 0, 4, 6, 5, 6, 0, 5, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 0, 5, 0, 6, 6, 2, 4, 4, 3, 1, 4, 3, 4, 2, 4, 3, 4, 2, 2, 3, 4, 4, 3, 3, 1, 3, 4, 3, 4, 4, 4}
};
int tempo = 1200 / cwWpm; // Duration of 1 dot
byte nb_bits, val;
int d;
int c = *stringCw++;
while (c != '\0') {
c = toupper(c); // Uppercase
if (c == 32) { // Space character between words in string
periods = 200 << 24; //dds off 7 dot length spacing
delay(tempo * 7); // between words
} else if (c > 32 && c < 91) {
c = c - 32;
d = int(pgm_read_word(&morseVaricode[0][c])); // Get CW varicode
nb_bits = int(pgm_read_word(&morseVaricode[1][c])); // Get CW varicode length
if (nb_bits != 0) { // Number of bits = 0 -> invalid character #%<>
for (int b = 7; b > 7 - nb_bits; b--) { // Send CW character, each bit represents a symbol (0 for dot, 1 for dash) MSB first
val = bitRead(d, b); //look varicode
periods = cwfr;
delay(tempo + 2 * tempo * val); // A dot length or a dash length (3 times the dot)
periods = 200 << 24; //dds off 1 dot length spacing
delay(tempo); // between symbols in a character
}
}
periods = 200 << 24; //dds off 3 dots length spacing
delay(tempo * 3); // between characters in a word
}
c = *stringCw++; // Next caracter in string
}
periods = 200 << 24; //dds off
}
void Modulation::sendCarriage(bool state) {
if (state) {
periods = cwfr;
} else {
periods = 200 << 24;
}
}
Modulation* Modulation::anchor = NULL;
uint32_t Modulation::period_us;

View File

@ -1,98 +0,0 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/*
* File: Modulation.h
* Author: ale
*
* Created on 28 août 2025, 07:55
*/
#ifndef MODULATION_H
#define MODULATION_H
#include "Dds.h"
#include "Menu.h"
#include <JTEncode.h>
#include <Arduino.h>
#include "hardware/timer.h"
#include "pico/stdlib.h"
#include "hardware/irq.h"
#include "hardware/structs/timer.h"
// exemples pas mal https://github.com/vha3/Hunter-Adams-RP2040-Demos/
#define TEST_PIN 25
#define ALARM_NUM 0
//#define ALARM_IRQ TIMER_IRQ_0
#define ALARM_IRQ TIMER0_IRQ_0
#define PREAMBULE 0x55
typedef enum{
SLOW =100,
FAST =50
}duration;
typedef enum{
BYTES_NO_CRC = 0x70, //plutot texte a revoir
BYTES_WITH_CRC = 0x71,
VARICODE = 0x72,
GEOLOC = 0x73,
CONVOLUTION = 0x74,
ACK=0x7F
}mode;
class Modulation : public Dds {
public:
Modulation(config* _cfg);
Modulation(const Modulation& orig);
virtual ~Modulation();
void sendWspr(char *locator);
void sendRtty(char* stringRtty);
void sendFt8(char *call, char *locator);
void sendHell(char * stringHell);
void sendCw(char * stringCw, int cwWpm);
void setDbm(uint8_t _dbm);
void sendCarriage(bool state);
private:
static void marshall(); //Merci F4JRE !!!
void timerCallback();
static Modulation* anchor;
void startTimerIRQ(uint32_t us);
void stopTimerIRQ();
void rttyTxByte(char c);
void waitIrq();
config* cfg;
JTEncode jtencode;
uint8_t txBuffer[WSPR_SYMBOL_COUNT]; //constante dans lib JTEncode
volatile bool flagIrq;
static uint32_t period_us;
byte tempo;
byte txMode;
uint8_t dbm;
};
#endif /* MODULATION_H */

View File

@ -1,46 +0,0 @@
This directory is intended for project specific (private) libraries.
PlatformIO will compile them to static libraries and link into executable file.
The source code of each library should be placed in a an own separate directory
("lib/your_library_name/[here are source files]").
For example, see a structure of the following two libraries `Foo` and `Bar`:
|--lib
| |
| |--Bar
| | |--docs
| | |--examples
| | |--src
| | |- Bar.c
| | |- Bar.h
| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
| |
| |--Foo
| | |- Foo.c
| | |- Foo.h
| |
| |- README --> THIS FILE
|
|- platformio.ini
|--src
|- main.c
and a contents of `src/main.c`:
```
#include <Foo.h>
#include <Bar.h>
int main (void)
{
...
}
```
PlatformIO Library Dependency Finder will find automatically dependent
libraries scanning project source files.
More information about PlatformIO Library Dependency Finder
- https://docs.platformio.org/page/librarymanager/ldf.html

View File

@ -1,601 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<configurationDescriptor version="100">
<logicalFolder name="root" displayName="root" projectFiles="true" kind="ROOT">
<df root="." name="0">
<df name="lib">
<df name="Iambic">
<in>Iambic.cpp</in>
<in>Iambic.h</in>
</df>
</df>
<in>platformio.ini</in>
</df>
<logicalFolder name="ExternalFiles"
displayName="Important Files"
projectFiles="false"
kind="IMPORTANT_FILES_FOLDER">
<itemPath>nbproject/private/launcher.properties</itemPath>
</logicalFolder>
</logicalFolder>
<sourceFolderFilter>^(nbproject|.pio)$</sourceFolderFilter>
<sourceRootList>
<Elem>.</Elem>
</sourceRootList>
<projectmakefile></projectmakefile>
<confs>
<conf name="Default" type="0">
<toolsSet>
<compilerSet>default</compilerSet>
<dependencyChecking>false</dependencyChecking>
<rebuildPropChanged>false</rebuildPropChanged>
</toolsSet>
<codeAssistance>
<includeAdditional>true</includeAdditional>
</codeAssistance>
<makefileType>
<makeTool>
<buildCommandWorkingDir>.</buildCommandWorkingDir>
<buildCommand>"/usr/local/bin/pio" -f -c netbeans run</buildCommand>
<cleanCommand>"/usr/local/bin/pio" -f -c netbeans run --target clean</cleanCommand>
<executablePath></executablePath>
<cTool>
<incDir>
<pElem>src</pElem>
<pElem>/home/ale/NetBeansProjects/pico/wsprPico2/include</pElem>
<pElem>/home/ale/NetBeansProjects/pico/wsprPico2/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/cores/rp2040</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/cores/rp2040/api/deprecated</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/cores/rp2040/api/deprecated-avr-comp</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/include/rp2350</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/include/rp2350/pico_base</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2350/hardware_regs/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2350/hardware_structs/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2350/pico_platform/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/cmsis/stub/CMSIS/Device/RP2350/Include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_sha256/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_sha256/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_btstack/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_cyw43_arch/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_cyw43_driver/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/lib/cyw43-driver/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/lib/btstack/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/lib/btstack/3rd-party/bluedroid/decoder/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/lib/btstack/3rd-party/bluedroid/encoder/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/lib/btstack/3rd-party/yxml</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/lib/btstack/platform/embedded</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/lib/tinyusb/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/boards/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/common/hardware_claim/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/common/pico_base_headers/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/common/pico_binary_info/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/common/pico_sync/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/common/pico_time/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/common/pico_util/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/common/pico_stdlib_headers/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/common/pico_usb_reset_interface_headers/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/boot_bootrom_headers/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/cmsis/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/cmsis/stub/CMSIS/Core/Include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_adc/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_base/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_boot_lock/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_clocks/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_divider/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_dma/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_exception/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_flash/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_gpio/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_i2c/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_interp/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_irq/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_rtc/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_pio/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_pll/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_pwm/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_resets/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_spi/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_sync/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_sync_spin_lock/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_timer/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_uart/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_vreg/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_watchdog/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_xosc/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_aon_timer/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_async_context/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_bootrom/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_double/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_flash/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_float/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_int64_ops/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_lwip/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_multicore/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_platform_common/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_platform_compiler/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_platform_sections/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_platform_panic/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_printf/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_runtime/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_runtime_init/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_rand/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_stdio/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_stdio_uart/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_unique_id/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/lib/lwip/src/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/cores/rp2040/freertos</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/variants/rpipico2</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/ADCInput/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/ArduinoOTA/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/AsyncUDP/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/AudioBufferManager/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/BTstackLib/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/BluetoothAudio/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/BluetoothHCI/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/BluetoothHIDMaster/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/DNSServer/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/EEPROM/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/ESPHost/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/FatFS/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/FatFSUSB/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/HID_Bluetooth/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/HID_Joystick/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/HID_Keyboard/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/HID_Mouse/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/HTTPClient/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/HTTPUpdate/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/HTTPUpdateServer/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/Hash/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/I2S/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/Joystick/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/JoystickBLE/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/JoystickBT/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/Keyboard/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/KeyboardBLE/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/KeyboardBT/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/LEAmDNS/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/LittleFS/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/MD5Builder/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/MIDIUSB/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/Mouse/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/MouseAbsolute/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/MouseBLE/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/MouseBT/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/NetBIOS/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/PDM/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/PWMAudio/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/PicoOTA/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SD/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SDFS/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SPI/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SPISlave/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SdFat/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SerialBT/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/Servo/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SimpleMDNS/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SingleFileDrive/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SoftwareSPI/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/Ticker/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/Updater/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/VFS/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/WebServer/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/WiFi/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/Wire/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/http-parser/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_CYW43/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_ESPHost/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_Ethernet/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_WINC1500/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_enc28j60/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_w5100/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_w5500/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_w55rp20/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_w6100/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_w6300/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/rp2040</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/rp2350</pElem>
<pElem>/home/ale/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/c++/14.3.0</pElem>
<pElem>/home/ale/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/c++/14.3.0/arm-none-eabi</pElem>
<pElem>/home/ale/.platformio/packages/toolchain-rp2040-earlephilhower/lib/gcc/arm-none-eabi/14.3.0/include</pElem>
<pElem>/home/ale/.platformio/packages/toolchain-rp2040-earlephilhower/lib/gcc/arm-none-eabi/14.3.0/include-fixed</pElem>
<pElem>/home/ale/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include</pElem>
</incDir>
<preprocessorList>
<Elem>ARDUINO=10810</Elem>
<Elem>ARDUINO_ARCH_RP2040</Elem>
<Elem>ARDUINO_ARCH_RP2040</Elem>
<Elem>ARDUINO_RASPBERRY_PI_PICO_2</Elem>
<Elem>ARDUINO_VARIANT="rpipico2"</Elem>
<Elem>BOARD_NAME="rpipico2"</Elem>
<Elem>CFG_TUSB_MCU=OPT_MCU_RP2040</Elem>
<Elem>CFG_TUSB_MCU=OPT_MCU_RP2040</Elem>
<Elem>CFG_TUSB_OS=OPT_OS_PICO</Elem>
<Elem>CYW43_DEFAULT_PIN_WL_CLOCK=29u</Elem>
<Elem>CYW43_DEFAULT_PIN_WL_CS=25u</Elem>
<Elem>CYW43_DEFAULT_PIN_WL_DATA_IN=24u</Elem>
<Elem>CYW43_DEFAULT_PIN_WL_DATA_OUT=24u</Elem>
<Elem>CYW43_DEFAULT_PIN_WL_HOST_WAKE=24u</Elem>
<Elem>CYW43_DEFAULT_PIN_WL_REG_ON=23u</Elem>
<Elem>CYW43_LWIP=1</Elem>
<Elem>CYW43_PIN_WL_DYNAMIC=1</Elem>
<Elem>CYW43_PIO_CLOCK_DIV_DYNAMIC=1</Elem>
<Elem>CYW43_PIO_CLOCK_DIV_DYNAMIC=1</Elem>
<Elem>CYW43_TASK_STACK_SIZE=1024</Elem>
<Elem>CYW43_WARN=//</Elem>
<Elem>DISABLE_FS_H_WARNING=1</Elem>
<Elem>FILE_COPY_CONSTRUCTOR_SELECT=FILE_COPY_CONSTRUCTOR_PUBLIC</Elem>
<Elem>F_CPU=150000000L</Elem>
<Elem>LIB_BOOT_STAGE2_HEADERS=1</Elem>
<Elem>LIB_PICO_AON_TIMER=1</Elem>
<Elem>LIB_PICO_ATOMIC=1</Elem>
<Elem>LIB_PICO_BIT_OPS=1</Elem>
<Elem>LIB_PICO_BIT_OPS_PICO=1</Elem>
<Elem>LIB_PICO_BOOTSEL_VIA_DOUBLE_RESET=1</Elem>
<Elem>LIB_PICO_CLIB_INTERFACE=1</Elem>
<Elem>LIB_PICO_CRT0=1</Elem>
<Elem>LIB_PICO_CXX_OPTIONS=1</Elem>
<Elem>LIB_PICO_DIVIDER=1</Elem>
<Elem>LIB_PICO_DIVIDER_COMPILER=1</Elem>
<Elem>LIB_PICO_DOUBLE=1</Elem>
<Elem>LIB_PICO_DOUBLE_PICO=1</Elem>
<Elem>LIB_PICO_FIX_RP2040_USB_DEVICE_ENUMERATION=1</Elem>
<Elem>LIB_PICO_FLASH=1</Elem>
<Elem>LIB_PICO_FLOAT=1</Elem>
<Elem>LIB_PICO_FLOAT_PICO=1</Elem>
<Elem>LIB_PICO_FLOAT_PICO_VFP=1</Elem>
<Elem>LIB_PICO_INT64_OPS=1</Elem>
<Elem>LIB_PICO_INT64_OPS_COMPILER=1</Elem>
<Elem>LIB_PICO_MALLOC=1</Elem>
<Elem>LIB_PICO_MEM_OPS=1</Elem>
<Elem>LIB_PICO_MEM_OPS_COMPILER=1</Elem>
<Elem>LIB_PICO_MULTICORE=1</Elem>
<Elem>LIB_PICO_NEWLIB_INTERFACE=1</Elem>
<Elem>LIB_PICO_PLATFORM=1</Elem>
<Elem>LIB_PICO_PLATFORM_COMMON=1</Elem>
<Elem>LIB_PICO_PLATFORM_COMPILER=1</Elem>
<Elem>LIB_PICO_PLATFORM_PANIC=1</Elem>
<Elem>LIB_PICO_PLATFORM_SECTIONS=1</Elem>
<Elem>LIB_PICO_PRINTF=1</Elem>
<Elem>LIB_PICO_PRINTF_PICO=1</Elem>
<Elem>LIB_PICO_RAND=1</Elem>
<Elem>LIB_PICO_RUNTIME=1</Elem>
<Elem>LIB_PICO_RUNTIME_INIT=1</Elem>
<Elem>LIB_PICO_SHA256=1</Elem>
<Elem>LIB_PICO_STANDARD_BINARY_INFO=1</Elem>
<Elem>LIB_PICO_STANDARD_LINK=1</Elem>
<Elem>LIB_PICO_STDIO=0</Elem>
<Elem>LIB_PICO_STDIO_UART=0</Elem>
<Elem>LIB_PICO_STDLIB=1</Elem>
<Elem>LIB_PICO_SYNC=1</Elem>
<Elem>LIB_PICO_SYNC_CRITICAL_SECTION=1</Elem>
<Elem>LIB_PICO_SYNC_MUTEX=1</Elem>
<Elem>LIB_PICO_SYNC_SEM=1</Elem>
<Elem>LIB_PICO_TIME=1</Elem>
<Elem>LIB_PICO_TIME_ADAPTER=1</Elem>
<Elem>LIB_PICO_UNIQUE_ID=1</Elem>
<Elem>LIB_PICO_UTIL=1</Elem>
<Elem>LIB_TINYUSB_BOARD=1</Elem>
<Elem>LIB_TINYUSB_DEVICE=1</Elem>
<Elem>LWIP_CHECKSUM_CTRL_PER_NETIF=1</Elem>
<Elem>LWIP_IGMP=1</Elem>
<Elem>LWIP_IPV4=1</Elem>
<Elem>LWIP_IPV6=0</Elem>
<Elem>PICO_32BIT=1</Elem>
<Elem>PICO_BUILD=1</Elem>
<Elem>PICO_COPY_TO_RAM=0</Elem>
<Elem>PICO_CYW43_ARCH_HEADER=stdint.h</Elem>
<Elem>PICO_CYW43_ARCH_THREADSAFE_BACKGROUND=1</Elem>
<Elem>PICO_FLASH_SIZE_BYTES=4194304</Elem>
<Elem>PICO_MAX_SHARED_IRQ_HANDLERS=6</Elem>
<Elem>PICO_NO_BINARY_INFO=1</Elem>
<Elem>PICO_NO_FLASH=0</Elem>
<Elem>PICO_NO_HARDWARE=0</Elem>
<Elem>PICO_ON_DEVICE=1</Elem>
<Elem>PICO_PLATFORM=rp2350-arm-s</Elem>
<Elem>PICO_RP2040_USB_DEVICE_ENUMERATION_FIX=1</Elem>
<Elem>PICO_RP2040_USB_DEVICE_UFRAME_FIX=1</Elem>
<Elem>PICO_RP2350=1</Elem>
<Elem>PICO_USE_BLOCKED_RAM=0</Elem>
<Elem>PICO_XOSC_STARTUP_DELAY_MULTIPLIER=64</Elem>
<Elem>PLATFORMIO=60118</Elem>
<Elem>TARGET_RP2350</Elem>
<Elem>USBD_MAX_POWER_MA=250</Elem>
<Elem>USBD_PID=0x000F</Elem>
<Elem>USBD_VID=0x2E8A</Elem>
<Elem>USB_MANUFACTURER="Raspberry Pi"</Elem>
<Elem>USB_PID=0x000F</Elem>
<Elem>USB_PRODUCT="Pico 2"</Elem>
<Elem>USB_VID=0x2E8A</Elem>
<Elem>USE_UTF8_LONG_NAMES=1</Elem>
</preprocessorList>
</cTool>
<ccTool>
<incDir>
<pElem>src</pElem>
<pElem>/home/ale/NetBeansProjects/pico/wsprPico2/include</pElem>
<pElem>/home/ale/NetBeansProjects/pico/wsprPico2/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/cores/rp2040</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/cores/rp2040/api/deprecated</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/cores/rp2040/api/deprecated-avr-comp</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/include/rp2350</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/include/rp2350/pico_base</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2350/hardware_regs/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2350/hardware_structs/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2350/pico_platform/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/cmsis/stub/CMSIS/Device/RP2350/Include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_sha256/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_sha256/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_btstack/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_cyw43_arch/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_cyw43_driver/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/lib/cyw43-driver/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/lib/btstack/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/lib/btstack/3rd-party/bluedroid/decoder/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/lib/btstack/3rd-party/bluedroid/encoder/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/lib/btstack/3rd-party/yxml</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/lib/btstack/platform/embedded</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/lib/tinyusb/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/boards/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/common/hardware_claim/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/common/pico_base_headers/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/common/pico_binary_info/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/common/pico_sync/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/common/pico_time/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/common/pico_util/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/common/pico_stdlib_headers/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/common/pico_usb_reset_interface_headers/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/boot_bootrom_headers/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/cmsis/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/cmsis/stub/CMSIS/Core/Include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_adc/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_base/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_boot_lock/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_clocks/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_divider/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_dma/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_exception/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_flash/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_gpio/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_i2c/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_interp/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_irq/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_rtc/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_pio/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_pll/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_pwm/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_resets/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_spi/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_sync/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_sync_spin_lock/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_timer/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_uart/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_vreg/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_watchdog/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/hardware_xosc/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_aon_timer/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_async_context/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_bootrom/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_double/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_flash/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_float/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_int64_ops/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_lwip/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_multicore/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_platform_common/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_platform_compiler/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_platform_sections/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_platform_panic/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_printf/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_runtime/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_runtime_init/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_rand/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_stdio/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_stdio_uart/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/src/rp2_common/pico_unique_id/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/pico-sdk/lib/lwip/src/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/cores/rp2040/freertos</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/include</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/variants/rpipico2</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/ADCInput/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/ArduinoOTA/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/AsyncUDP/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/AudioBufferManager/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/BTstackLib/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/BluetoothAudio/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/BluetoothHCI/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/BluetoothHIDMaster/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/DNSServer/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/EEPROM/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/ESPHost/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/FatFS/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/FatFSUSB/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/HID_Bluetooth/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/HID_Joystick/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/HID_Keyboard/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/HID_Mouse/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/HTTPClient/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/HTTPUpdate/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/HTTPUpdateServer/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/Hash/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/I2S/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/Joystick/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/JoystickBLE/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/JoystickBT/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/Keyboard/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/KeyboardBLE/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/KeyboardBT/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/LEAmDNS/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/LittleFS/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/MD5Builder/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/MIDIUSB/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/Mouse/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/MouseAbsolute/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/MouseBLE/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/MouseBT/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/NetBIOS/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/PDM/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/PWMAudio/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/PicoOTA/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SD/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SDFS/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SPI/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SPISlave/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SdFat/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SerialBT/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/Servo/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SimpleMDNS/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SingleFileDrive/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/SoftwareSPI/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/Ticker/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/Updater/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/VFS/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/WebServer/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/WiFi/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/Wire/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/http-parser/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_CYW43/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_ESPHost/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_Ethernet/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_WINC1500/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_enc28j60/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_w5100/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_w5500/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_w55rp20/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_w6100/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/lwIP_w6300/src</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/rp2040</pElem>
<pElem>/home/ale/.platformio/packages/framework-arduinopico/libraries/rp2350</pElem>
<pElem>/home/ale/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/c++/14.3.0</pElem>
<pElem>/home/ale/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/c++/14.3.0/arm-none-eabi</pElem>
<pElem>/home/ale/.platformio/packages/toolchain-rp2040-earlephilhower/lib/gcc/arm-none-eabi/14.3.0/include</pElem>
<pElem>/home/ale/.platformio/packages/toolchain-rp2040-earlephilhower/lib/gcc/arm-none-eabi/14.3.0/include-fixed</pElem>
<pElem>/home/ale/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include</pElem>
</incDir>
<preprocessorList>
<Elem>ARDUINO=10810</Elem>
<Elem>ARDUINO_ARCH_RP2040</Elem>
<Elem>ARDUINO_ARCH_RP2040</Elem>
<Elem>ARDUINO_RASPBERRY_PI_PICO_2</Elem>
<Elem>ARDUINO_VARIANT="rpipico2"</Elem>
<Elem>BOARD_NAME="rpipico2"</Elem>
<Elem>CFG_TUSB_MCU=OPT_MCU_RP2040</Elem>
<Elem>CFG_TUSB_MCU=OPT_MCU_RP2040</Elem>
<Elem>CFG_TUSB_OS=OPT_OS_PICO</Elem>
<Elem>CYW43_DEFAULT_PIN_WL_CLOCK=29u</Elem>
<Elem>CYW43_DEFAULT_PIN_WL_CS=25u</Elem>
<Elem>CYW43_DEFAULT_PIN_WL_DATA_IN=24u</Elem>
<Elem>CYW43_DEFAULT_PIN_WL_DATA_OUT=24u</Elem>
<Elem>CYW43_DEFAULT_PIN_WL_HOST_WAKE=24u</Elem>
<Elem>CYW43_DEFAULT_PIN_WL_REG_ON=23u</Elem>
<Elem>CYW43_LWIP=1</Elem>
<Elem>CYW43_PIN_WL_DYNAMIC=1</Elem>
<Elem>CYW43_PIO_CLOCK_DIV_DYNAMIC=1</Elem>
<Elem>CYW43_PIO_CLOCK_DIV_DYNAMIC=1</Elem>
<Elem>CYW43_TASK_STACK_SIZE=1024</Elem>
<Elem>CYW43_WARN=//</Elem>
<Elem>DISABLE_FS_H_WARNING=1</Elem>
<Elem>FILE_COPY_CONSTRUCTOR_SELECT=FILE_COPY_CONSTRUCTOR_PUBLIC</Elem>
<Elem>F_CPU=150000000L</Elem>
<Elem>LIB_BOOT_STAGE2_HEADERS=1</Elem>
<Elem>LIB_PICO_AON_TIMER=1</Elem>
<Elem>LIB_PICO_ATOMIC=1</Elem>
<Elem>LIB_PICO_BIT_OPS=1</Elem>
<Elem>LIB_PICO_BIT_OPS_PICO=1</Elem>
<Elem>LIB_PICO_BOOTSEL_VIA_DOUBLE_RESET=1</Elem>
<Elem>LIB_PICO_CLIB_INTERFACE=1</Elem>
<Elem>LIB_PICO_CRT0=1</Elem>
<Elem>LIB_PICO_CXX_OPTIONS=1</Elem>
<Elem>LIB_PICO_DIVIDER=1</Elem>
<Elem>LIB_PICO_DIVIDER_COMPILER=1</Elem>
<Elem>LIB_PICO_DOUBLE=1</Elem>
<Elem>LIB_PICO_DOUBLE_PICO=1</Elem>
<Elem>LIB_PICO_FIX_RP2040_USB_DEVICE_ENUMERATION=1</Elem>
<Elem>LIB_PICO_FLASH=1</Elem>
<Elem>LIB_PICO_FLOAT=1</Elem>
<Elem>LIB_PICO_FLOAT_PICO=1</Elem>
<Elem>LIB_PICO_FLOAT_PICO_VFP=1</Elem>
<Elem>LIB_PICO_INT64_OPS=1</Elem>
<Elem>LIB_PICO_INT64_OPS_COMPILER=1</Elem>
<Elem>LIB_PICO_MALLOC=1</Elem>
<Elem>LIB_PICO_MEM_OPS=1</Elem>
<Elem>LIB_PICO_MEM_OPS_COMPILER=1</Elem>
<Elem>LIB_PICO_MULTICORE=1</Elem>
<Elem>LIB_PICO_NEWLIB_INTERFACE=1</Elem>
<Elem>LIB_PICO_PLATFORM=1</Elem>
<Elem>LIB_PICO_PLATFORM_COMMON=1</Elem>
<Elem>LIB_PICO_PLATFORM_COMPILER=1</Elem>
<Elem>LIB_PICO_PLATFORM_PANIC=1</Elem>
<Elem>LIB_PICO_PLATFORM_SECTIONS=1</Elem>
<Elem>LIB_PICO_PRINTF=1</Elem>
<Elem>LIB_PICO_PRINTF_PICO=1</Elem>
<Elem>LIB_PICO_RAND=1</Elem>
<Elem>LIB_PICO_RUNTIME=1</Elem>
<Elem>LIB_PICO_RUNTIME_INIT=1</Elem>
<Elem>LIB_PICO_SHA256=1</Elem>
<Elem>LIB_PICO_STANDARD_BINARY_INFO=1</Elem>
<Elem>LIB_PICO_STANDARD_LINK=1</Elem>
<Elem>LIB_PICO_STDIO=0</Elem>
<Elem>LIB_PICO_STDIO_UART=0</Elem>
<Elem>LIB_PICO_STDLIB=1</Elem>
<Elem>LIB_PICO_SYNC=1</Elem>
<Elem>LIB_PICO_SYNC_CRITICAL_SECTION=1</Elem>
<Elem>LIB_PICO_SYNC_MUTEX=1</Elem>
<Elem>LIB_PICO_SYNC_SEM=1</Elem>
<Elem>LIB_PICO_TIME=1</Elem>
<Elem>LIB_PICO_TIME_ADAPTER=1</Elem>
<Elem>LIB_PICO_UNIQUE_ID=1</Elem>
<Elem>LIB_PICO_UTIL=1</Elem>
<Elem>LIB_TINYUSB_BOARD=1</Elem>
<Elem>LIB_TINYUSB_DEVICE=1</Elem>
<Elem>LWIP_CHECKSUM_CTRL_PER_NETIF=1</Elem>
<Elem>LWIP_IGMP=1</Elem>
<Elem>LWIP_IPV4=1</Elem>
<Elem>LWIP_IPV6=0</Elem>
<Elem>PICO_32BIT=1</Elem>
<Elem>PICO_BUILD=1</Elem>
<Elem>PICO_COPY_TO_RAM=0</Elem>
<Elem>PICO_CYW43_ARCH_HEADER=stdint.h</Elem>
<Elem>PICO_CYW43_ARCH_THREADSAFE_BACKGROUND=1</Elem>
<Elem>PICO_FLASH_SIZE_BYTES=4194304</Elem>
<Elem>PICO_MAX_SHARED_IRQ_HANDLERS=6</Elem>
<Elem>PICO_NO_BINARY_INFO=1</Elem>
<Elem>PICO_NO_FLASH=0</Elem>
<Elem>PICO_NO_HARDWARE=0</Elem>
<Elem>PICO_ON_DEVICE=1</Elem>
<Elem>PICO_PLATFORM=rp2350-arm-s</Elem>
<Elem>PICO_RP2040_USB_DEVICE_ENUMERATION_FIX=1</Elem>
<Elem>PICO_RP2040_USB_DEVICE_UFRAME_FIX=1</Elem>
<Elem>PICO_RP2350=1</Elem>
<Elem>PICO_USE_BLOCKED_RAM=0</Elem>
<Elem>PICO_XOSC_STARTUP_DELAY_MULTIPLIER=64</Elem>
<Elem>PLATFORMIO=60118</Elem>
<Elem>TARGET_RP2350</Elem>
<Elem>USBD_MAX_POWER_MA=250</Elem>
<Elem>USBD_PID=0x000F</Elem>
<Elem>USBD_VID=0x2E8A</Elem>
<Elem>USB_MANUFACTURER="Raspberry Pi"</Elem>
<Elem>USB_PID=0x000F</Elem>
<Elem>USB_PRODUCT="Pico 2"</Elem>
<Elem>USB_VID=0x2E8A</Elem>
<Elem>USE_UTF8_LONG_NAMES=1</Elem>
</preprocessorList>
</ccTool>
</makeTool>
<preBuild>
<preBuildCommandWorkingDir>.</preBuildCommandWorkingDir>
<preBuildCommand></preBuildCommand>
</preBuild>
</makefileType>
<item path="lib/Iambic/Iambic.cpp" ex="false" tool="1" flavor2="0">
</item>
<item path="lib/Iambic/Iambic.h" ex="false" tool="3" flavor2="0">
</item>
<item path="platformio.ini" ex="false" tool="3" flavor2="0">
</item>
</conf>
</confs>
</configurationDescriptor>

View File

@ -1,75 +0,0 @@
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved.
*
* Oracle and Java are registered trademarks of Oracle and/or its affiliates.
* Other names may be trademarks of their respective owners.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common
* Development and Distribution License("CDDL") (collectively, the
* "License"). You may not use this file except in compliance with the
* License. You can obtain a copy of the License at
* http://www.netbeans.org/cddl-gplv2.html
* or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
* specific language governing permissions and limitations under the
* License. When distributing the software, include this License Header
* Notice in each file and include the License file at
* nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the GPL Version 2 section of the License file that
* accompanied this code. If applicable, add the following below the
* License Header, with the fields enclosed by brackets [] replaced by
* your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
*
* If you wish your version of this file to be governed by only the CDDL
* or only the GPL Version 2, indicate your decision by adding
* "[Contributor] elects to include this software in this distribution
* under the [CDDL or GPL Version 2] license." If you do not indicate a
* single choice of license, a recipient has the option to distribute
* your version of this file under either the CDDL, the GPL Version 2 or
* to extend the choice of license to its licensees as provided above.
* However, if you add GPL Version 2 code and therefore, elected the GPL
* Version 2 license, then the option applies only if the new code is
* made subject to such option by the copyright holder.
*
* Contributor(s):
*/
// List of standard headers was taken in http://en.cppreference.com/w/c/header
#include <assert.h> // Conditionally compiled macro that compares its argument to zero
#include <ctype.h> // Functions to determine the type contained in character data
#include <errno.h> // Macros reporting error conditions
#include <float.h> // Limits of float types
#include <limits.h> // Sizes of basic types
#include <locale.h> // Localization utilities
#include <math.h> // Common mathematics functions
#include <setjmp.h> // Nonlocal jumps
#include <signal.h> // Signal handling
#include <stdarg.h> // Variable arguments
#include <stddef.h> // Common macro definitions
#include <stdio.h> // Input/output
#include <string.h> // String handling
#include <stdlib.h> // General utilities: memory management, program utilities, string conversions, random numbers
#include <time.h> // Time/date utilities
#include <iso646.h> // (since C95) Alternative operator spellings
#include <wchar.h> // (since C95) Extended multibyte and wide character utilities
#include <wctype.h> // (since C95) Wide character classification and mapping utilities
#ifdef _STDC_C99
#include <complex.h> // (since C99) Complex number arithmetic
#include <fenv.h> // (since C99) Floating-point environment
#include <inttypes.h> // (since C99) Format conversion of integer types
#include <stdbool.h> // (since C99) Boolean type
#include <stdint.h> // (since C99) Fixed-width integer types
#include <tgmath.h> // (since C99) Type-generic math (macros wrapping math.h and complex.h)
#endif
#ifdef _STDC_C11
#include <stdalign.h> // (since C11) alignas and alignof convenience macros
#include <stdatomic.h> // (since C11) Atomic types
#include <stdnoreturn.h> // (since C11) noreturn convenience macros
#include <threads.h> // (since C11) Thread library
#include <uchar.h> // (since C11) UTF-16 and UTF-32 character utilities
#endif

View File

@ -1,96 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<configurationDescriptor version="100">
<logicalFolder name="root" displayName="root" projectFiles="true" kind="ROOT">
<df root="." name="0">
<df name="include">
</df>
<df name="lib">
<df name="Afficheur">
<in>Afficheur.cpp</in>
<in>Afficheur.h</in>
</df>
<df name="Dds">
<in>Dds.cpp</in>
<in>Dds.h</in>
<in>vfo2.pio.h</in>
</df>
<df name="Encodeur">
<in>Encodeur.cpp</in>
<in>Encodeur.h</in>
<in>quadrature.pio.h</in>
</df>
<df name="Iambic">
<in>Iambic.cpp</in>
<in>Iambic.h</in>
</df>
<df name="Locator">
<in>Locator.cpp</in>
<in>Locator.h</in>
</df>
<df name="Menu">
<in>Menu.cpp</in>
<in>Menu.h</in>
</df>
<df name="Modulation">
<in>Modulation.cpp</in>
<in>Modulation.h</in>
</df>
</df>
<df name="src">
<in>main.cpp</in>
</df>
<df name="test">
</df>
<in>platformio.ini</in>
</df>
</logicalFolder>
<projectmakefile></projectmakefile>
<confs>
<conf name="Default" type="0">
<toolsSet>
<developmentServer>localhost</developmentServer>
<platform>2</platform>
</toolsSet>
<compile>
<compiledirpicklist>
<compiledirpicklistitem>.</compiledirpicklistitem>
<compiledirpicklistitem>${AUTO_FOLDER}</compiledirpicklistitem>
</compiledirpicklist>
<compiledir>${AUTO_FOLDER}</compiledir>
<compilecommandpicklist>
<compilecommandpicklistitem>${MAKE} ${ITEM_NAME}.o</compilecommandpicklistitem>
<compilecommandpicklistitem>${AUTO_COMPILE}</compilecommandpicklistitem>
</compilecommandpicklist>
<compilecommand>${AUTO_COMPILE}</compilecommand>
</compile>
<dbx_gdbdebugger version="1">
<gdb_pathmaps>
</gdb_pathmaps>
<gdb_interceptlist>
<gdbinterceptoptions gdb_all="false" gdb_unhandled="true" gdb_unexpected="true"/>
</gdb_interceptlist>
<gdb_options>
<DebugOptions>
</DebugOptions>
</gdb_options>
<gdb_buildfirst gdb_buildfirst_overriden="false" gdb_buildfirst_old="false"/>
</dbx_gdbdebugger>
<nativedebugger version="1">
<engine>gdb</engine>
</nativedebugger>
<runprofile version="9">
<runcommandpicklist>
<runcommandpicklistitem>"${OUTPUT_PATH}"</runcommandpicklistitem>
<runcommandpicklistitem>/usr/local/bin/pio -f -c netbeans run --target upload</runcommandpicklistitem>
</runcommandpicklist>
<runcommand>/usr/local/bin/pio -f -c netbeans run --target upload</runcommand>
<rundir>.</rundir>
<buildfirst>false</buildfirst>
<terminal-type>0</terminal-type>
<remove-instrumentation>0</remove-instrumentation>
<environment>
</environment>
</runprofile>
</conf>
</confs>
</configurationDescriptor>

View File

@ -1,135 +0,0 @@
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved.
*
* Oracle and Java are registered trademarks of Oracle and/or its affiliates.
* Other names may be trademarks of their respective owners.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common
* Development and Distribution License("CDDL") (collectively, the
* "License"). You may not use this file except in compliance with the
* License. You can obtain a copy of the License at
* http://www.netbeans.org/cddl-gplv2.html
* or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
* specific language governing permissions and limitations under the
* License. When distributing the software, include this License Header
* Notice in each file and include the License file at
* nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the GPL Version 2 section of the License file that
* accompanied this code. If applicable, add the following below the
* License Header, with the fields enclosed by brackets [] replaced by
* your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
*
* If you wish your version of this file to be governed by only the CDDL
* or only the GPL Version 2, indicate your decision by adding
* "[Contributor] elects to include this software in this distribution
* under the [CDDL or GPL Version 2] license." If you do not indicate a
* single choice of license, a recipient has the option to distribute
* your version of this file under either the CDDL, the GPL Version 2 or
* to extend the choice of license to its licensees as provided above.
* However, if you add GPL Version 2 code and therefore, elected the GPL
* Version 2 license, then the option applies only if the new code is
* made subject to such option by the copyright holder.
*
* Contributor(s):
*/
// List of standard headers was taken in http://en.cppreference.com/w/cpp/header
#include <cstdlib> // General purpose utilities: program control, dynamic memory allocation, random numbers, sort and search
#include <csignal> // Functions and macro constants for signal management
#include <csetjmp> // Macro (and function) that saves (and jumps) to an execution context
#include <cstdarg> // Handling of variable length argument lists
#include <typeinfo> // Runtime type information utilities
#include <bitset> // std::bitset class template
#include <functional> // Function objects, designed for use with the standard algorithms
#include <utility> // Various utility components
#include <ctime> // C-style time/date utilites
#include <cstddef> // typedefs for types such as size_t, NULL and others
#include <new> // Low-level memory management utilities
#include <memory> // Higher level memory management utilities
#include <climits> // limits of integral types
#include <cfloat> // limits of float types
#include <limits> // standardized way to query properties of arithmetic types
#include <exception> // Exception handling utilities
#include <stdexcept> // Standard exception objects
#include <cassert> // Conditionally compiled macro that compares its argument to zero
#include <cerrno> // Macro containing the last error number
#include <cctype> // functions to determine the type contained in character data
#include <cwctype> // functions for determining the type of wide character data
#include <cstring> // various narrow character string handling functions
#include <cwchar> // various wide and multibyte string handling functions
#include <string> // std::basic_string class template
#include <vector> // std::vector container
#include <deque> // std::deque container
#include <list> // std::list container
#include <set> // std::set and std::multiset associative containers
#include <map> // std::map and std::multimap associative containers
#include <stack> // std::stack container adaptor
#include <queue> // std::queue and std::priority_queue container adaptors
#include <algorithm> // Algorithms that operate on containers
#include <iterator> // Container iterators
#include <cmath> // Common mathematics functions
#include <complex> // Complex number type
#include <valarray> // Class for representing and manipulating arrays of values
#include <numeric> // Numeric operations on values in containers
#include <iosfwd> // forward declarations of all classes in the input/output library
#include <ios> // std::ios_base class, std::basic_ios class template and several typedefs
#include <istream> // std::basic_istream class template and several typedefs
#include <ostream> // std::basic_ostream, std::basic_iostream class templates and several typedefs
#include <iostream> // several standard stream objects
#include <fstream> // std::basic_fstream, std::basic_ifstream, std::basic_ofstream class templates and several typedefs
#include <sstream> // std::basic_stringstream, std::basic_istringstream, std::basic_ostringstream class templates and several typedefs
#include <strstream> // std::strstream, std::istrstream, std::ostrstream(deprecated)
#include <iomanip> // Helper functions to control the format or input and output
#include <streambuf> // std::basic_streambuf class template
#include <cstdio> // C-style input-output functions
#include <locale> // Localization utilities
#include <clocale> // C localization utilities
#include <ciso646> // empty header. The macros that appear in iso646.h in C are keywords in C++
#if __cplusplus >= 201103L
#include <typeindex> // (since C++11) std::type_index
#include <type_traits> // (since C++11) Compile-time type information
#include <chrono> // (since C++11) C++ time utilites
#include <initializer_list> // (since C++11) std::initializer_list class template
#include <tuple> // (since C++11) std::tuple class template
#include <scoped_allocator> // (since C++11) Nested allocator class
#include <cstdint> // (since C++11) fixed-size types and limits of other types
#include <cinttypes> // (since C++11) formatting macros , intmax_t and uintmax_t math and conversions
#include <system_error> // (since C++11) defines std::error_code, a platform-dependent error code
#include <cuchar> // (since C++11) C-style Unicode character conversion functions
#include <array> // (since C++11) std::array container
#include <forward_list> // (since C++11) std::forward_list container
#include <unordered_set> // (since C++11) std::unordered_set and std::unordered_multiset unordered associative containers
#include <unordered_map> // (since C++11) std::unordered_map and std::unordered_multimap unordered associative containers
#include <random> // (since C++11) Random number generators and distributions
#include <ratio> // (since C++11) Compile-time rational arithmetic
#include <cfenv> // (since C++11) Floating-point environment access functions
#include <codecvt> // (since C++11) Unicode conversion facilities
#include <regex> // (since C++11) Classes, algorithms and iterators to support regular expression processing
#include <atomic> // (since C++11) Atomic operations library
#include <ccomplex> // (since C++11)(deprecated in C++17) simply includes the header <complex>
#include <ctgmath> // (since C++11)(deprecated in C++17) simply includes the headers <ccomplex> (until C++17)<complex> (since C++17) and <cmath>: the overloads equivalent to the contents of the C header tgmath.h are already provided by those headers
#include <cstdalign> // (since C++11)(deprecated in C++17) defines one compatibility macro constant
#include <cstdbool> // (since C++11)(deprecated in C++17) defines one compatibility macro constant
#include <thread> // (since C++11) std::thread class and supporting functions
#include <mutex> // (since C++11) mutual exclusion primitives
#include <future> // (since C++11) primitives for asynchronous computations
#include <condition_variable> // (since C++11) thread waiting conditions
#endif
#if __cplusplus >= 201300L
#include <shared_mutex> // (since C++14) shared mutual exclusion primitives
#endif
#if __cplusplus >= 201500L
#include <any> // (since C++17) std::any class template
#include <optional> // (since C++17) std::optional class template
#include <variant> // (since C++17) std::variant class template
#include <memory_resource> // (since C++17) Polymorphic allocators and memory resources
#include <string_view> // (since C++17) std::basic_string_view class template
#include <execution> // (since C++17) Predefined execution policies for parallel versions of the algorithms
#include <filesystem> // (since C++17) std::path class and supporting functions
#endif

View File

@ -1,40 +0,0 @@
# Launchers File syntax:
#
# [Must-have property line]
# launcher1.runCommand=<Run Command>
# [Optional extra properties]
# launcher1.displayName=<Display Name, runCommand by default>
# launcher1.buildCommand=<Build Command, Build Command specified in project properties by default>
# launcher1.runDir=<Run Directory, ${PROJECT_DIR} by default>
# launcher1.symbolFiles=<Symbol Files loaded by debugger, ${OUTPUT_PATH} by default>
# launcher1.env.<Environment variable KEY>=<Environment variable VALUE>
# (If this value is quoted with ` it is handled as a native command which execution result will become the value)
# [Common launcher properties]
# common.runDir=<Run Directory>
# (This value is overwritten by a launcher specific runDir value if the latter exists)
# common.env.<Environment variable KEY>=<Environment variable VALUE>
# (Environment variables from common launcher are merged with launcher specific variables)
# common.symbolFiles=<Symbol Files loaded by debugger>
# (This value is overwritten by a launcher specific symbolFiles value if the latter exists)
#
# In runDir, symbolFiles and env fields you can use these macros:
# ${PROJECT_DIR} - project directory absolute path
# ${OUTPUT_PATH} - linker output path (relative to project directory path)
# ${OUTPUT_BASENAME}- linker output filename
# ${TESTDIR} - test files directory (relative to project directory path)
# ${OBJECTDIR} - object files directory (relative to project directory path)
# ${CND_DISTDIR} - distribution directory (relative to project directory path)
# ${CND_BUILDDIR} - build directory (relative to project directory path)
# ${CND_PLATFORM} - platform name
# ${CND_CONF} - configuration name
# ${CND_DLIB_EXT} - dynamic library extension
#
# All the project launchers must be listed in the file!
#
# launcher1.runCommand=...
# launcher2.runCommand=...
# ...
# common.runDir=...
# common.env.KEY=VALUE
# launcher1.runCommand=<type your run command here>

View File

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
<code-assistance-data xmlns="http://www.netbeans.org/ns/make-project-private/1">
<code-model-enabled>true</code-model-enabled>
</code-assistance-data>
<data xmlns="http://www.netbeans.org/ns/make-project-private/1">
<activeConfTypeElem>0</activeConfTypeElem>
<activeConfIndexElem>0</activeConfIndexElem>
</data>
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group>
<file>file:/home/ale/NetBeansProjects/pico/wsprPico2/src/main.cpp</file>
<file>file:/home/ale/NetBeansProjects/pico/wsprPico2/lib/Iambic/Iambic.cpp</file>
<file>file:/home/ale/NetBeansProjects/pico/wsprPico2/lib/Dds/Dds.h</file>
<file>file:/home/ale/NetBeansProjects/pico/wsprPico2/lib/Dds/Dds.cpp</file>
<file>file:/home/ale/NetBeansProjects/pico/wsprPico2/lib/Encodeur/Encodeur.h</file>
<file>file:/home/ale/NetBeansProjects/pico/wsprPico2/lib/Encodeur/Encodeur.cpp</file>
<file>file:/home/ale/NetBeansProjects/pico/wsprPico2/lib/Afficheur/Afficheur.cpp</file>
<file>file:/home/ale/NetBeansProjects/pico/wsprPico2/lib/Afficheur/Afficheur.h</file>
<file>file:/home/ale/NetBeansProjects/pico/wsprPico2/lib/Iambic/Iambic.h</file>
<file>file:/home/ale/NetBeansProjects/pico/wsprPico2/lib/Modulation/Modulation.h</file>
<file>file:/home/ale/NetBeansProjects/pico/wsprPico2/lib/Modulation/Modulation.cpp</file>
<file>file:/home/ale/NetBeansProjects/pico/wsprPico2/lib/Menu/Menu.h</file>
<file>file:/home/ale/NetBeansProjects/pico/wsprPico2/lib/Menu/Menu.cpp</file>
</group>
</open-files>
</project-private>

View File

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.cnd.makeproject</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/make-project/1">
<name>wsprPico2</name>
<c-extensions/>
<cpp-extensions>cpp</cpp-extensions>
<header-extensions>h</header-extensions>
<sourceEncoding>UTF-8</sourceEncoding>
<make-dep-projects/>
<sourceRootList>
<sourceRootElem>.</sourceRootElem>
</sourceRootList>
<confList>
<confElem>
<name>Default</name>
<type>0</type>
</confElem>
</confList>
<formatting>
<project-formatting-style>false</project-formatting-style>
</formatting>
</data>
</configuration>
</project>

View File

@ -1,32 +0,0 @@
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:pico2]
platform = https://github.com/maxgerhardt/platform-raspberrypi.git
board = rpipico2
framework = arduino
board_build.core = earlephilhower
build_flags =
;-I/home/xavier/.platformio/packages/framework-arduinopico/libraries/tusb-hid/src
-IC:\Users\Xavier.debert\.platformio\packages\framework-arduinopico\libraries\tusb-hid\src
lib_deps =
https://github.com/etherkit/JTEncode
akoro/Console@^1.2.1
mikalhart/TinyGPSPlus@^1.0.3
SPI
Wire
adafruit/Adafruit NeoPixel@^1.15.1
https://github.com/adafruit/Adafruit-ST7735-Library
https://github.com/adafruit/Adafruit-gfx-library
https://github.com/adafruit/Adafruit_SSD1306.git
olikraus/U8g2
Keyboard

View File

@ -1,385 +0,0 @@
/*
* PicoWSPR 40m/30m
* https://www.elektronik-labor.de/Raspberry/Pico38.html
*
* TX GP1 (RX)
* RX GP0 (TX)
* https://github.com/earlephilhower/arduino-pico
* one wire GP2
* LED GP4
* BP MENU GP6 actif au NL0 (detection à la mise sous tension)
*
* installer wsjt-x
* https://wsjt.sourceforge.io/wsjtx.html
* wsjtx_2.7.0_amd64.deb
* sudo dpkg -i wsjtx_2.7.0_amd64.deb
* sudo apt-get install -f
*
*/
#include <Arduino.h>
#include <Menu.h>
#include <TinyGPS++.h>
#include <Modulation.h>
#include <Wire.h>
#include "Afficheur.h"
#include "Locator.h"
#include "Iambic.h"
#include "Encodeur.h"
#define PTT_PIN 26
#define LED_TX_PIN 3
#define MINUTES 10
TinyGPSPlus gps;
Menu *leMenu;
Modulation* mod;
Afficheur *afficheur;
Iambic *iambic;
Locator loc;
void checkGps();
void computeLocator(int nbChar);
void initTimeTable(void);
txModes recherche(int minutes, int seconde);
void txing(txModes md);
void rtty();
void wspr();
void ft8();
void hell();
void cw();
void manchester();
typedef struct {
float latitude; // Latitude en degrés
float longitude; // Longitude en degrés
float speedKmph; // Vitesse en km/h
float courseDeg; // Cap en degrés
char locator[9]; //= "JN07";
} GpsData;
typedef struct {
txModes mode;
uint8_t minute;
uint8_t seconde;
}timeTable;
timeTable timt[(60/MINUTES)*4];
int secondPrec = 0;
GpsData position;
config cfg;
volatile bool stateObjMod=false;
bool firstTxStart=false;
Encodeur enc(pio1);
void setup(void) {
set_sys_clock_khz(CLK_KHZ, true);
Serial.begin(115200);
pinMode(PTT_PIN,OUTPUT);
digitalWrite(PTT_PIN,LOW);
pinMode(LED_TX_PIN,OUTPUT);
digitalWrite(LED_TX_PIN,LOW);
afficheur = new Afficheur();
afficheur->begin();
if (digitalRead(MENU_PIN) == 0) {
afficheur->modeDisplay("MENU");
}
leMenu = new Menu(); // Menu de configuration
leMenu->setup();
delete(leMenu);
afficheur->modeEfface();
EEPROM.begin(sizeof (config));
EEPROM.get(0, cfg);
Serial1.setTX(0); // GP0 = TX vers GPS RX
Serial1.setRX(1); // GP1 = RX depuis GPS TX
Serial1.begin(cfg.baud); // Démarre UART1
mod = new Modulation(&cfg);
stateObjMod = true; //il faut que l'objet mod ait le temps de s'initialiser avant de lancer le dds dans le core 1
if (cfg.mode == IAMBIC) {
iambic = new Iambic(mod, afficheur, cfg.wpm, cfg.bicmd);
}
Wire.setClock(400000);
initTimeTable();
afficheur->clearDisplay();
//led no gps sync to lcd
afficheur->configDisplay(cfg); //c'est la que ca plante
//delay(10000);
enc.begin();
}
void loop() {
//if (enc.wasPressed()) {
//Serial.print(" | CLICK");
if (digitalRead(PUSH_PIN) == 0) { //peut etre une tramsission à faire si btn encodeur
if (!firstTxStart) {
//afficheur->clearDisplay();
//firstTxStart = true;
}
txing(cfg.mode);
}
//}
if (cfg.mode == IAMBIC) {
//Serial.println("scan");
iambic->scan();
iambic->vband();
int8_t step = enc.tick(); //+1, -1, ou 0
if (step!=0) {
mod->changeFreqCW(step);
afficheur->printFrequency(mod->getFreqCW());
}
} else {
checkGps();
}
//wspr();
}
void checkGps() {
char car;
char buffer[12];
txModes md;
while (Serial1.available()) {
car = Serial1.read();
gps.encode(car);
if (cfg.nmeaEnabled) {
Serial.print(car);
}
}
//séquenceur
if (gps.time.isValid() && gps.location.isUpdated()) {
int hour = gps.time.hour();
int minute = gps.time.minute();
int second = gps.time.second();
//int day = gps.date.day(); //inutile
//int month = gps.date.month();
//int year = gps.date.year();
if (second != secondPrec) {
if (!cfg.nmeaEnabled) {
snprintf(buffer, sizeof (buffer), "%02d:%02d:%02d", hour, minute, second);
Serial.printf("Heure GPS: %s\n\r", buffer);
afficheur->timeDisplay(buffer);
}
secondPrec = second;
if (cfg.follow) {
md=recherche(minute,second);
if (md!=NOTX){
if (!firstTxStart) {
afficheur->clearDisplay();
firstTxStart = true;
}
txing(md);
}
} else {
if (minute % cfg.minute == 0 && second == 0) { //peut etre une tramsission à faire
if (!firstTxStart) {
afficheur->clearDisplay();
firstTxStart = true;
}
txing(cfg.mode);
}
}
}
} else {
//Serial.println("Heure GPS non disponible.");
}
}
//returne un bool et change de couleur
void computeLocator(int nbChar) {
uint8_t dbm;
if (gps.location.isUpdated()) {
position.latitude = gps.location.lat();
position.longitude = gps.location.lng();
position.speedKmph = gps.speed.knots();
position.courseDeg = gps.course.deg();
loc.getLocator(position.latitude, position.longitude, nbChar, position.locator,&dbm);
mod->setDbm(dbm);
Serial.printf("Lat: %.6f, Lon: %.6f\n\r", position.latitude, position.longitude);
Serial.printf("Speed: %.2f km/h, Course: %.2f°\n\r", position.speedKmph, position.courseDeg);
Serial.printf("Locator: %s dbm %d\n\n\r", position.locator,dbm);
}
}
void txing(txModes md) {
switch (md) { //manque la gestion de la répétition avec cfg.nbFrame
case WSPR: wspr();
break;
case RTTY: rtty();
break;
case FT8: ft8();
break;
case HELL: hell();
break;
case CW: cw();
break;
case ALL: wspr();
rtty();
ft8();
hell();
cw();
break;
}
}
void ft8() {
digitalWrite(LED_TX_PIN,HIGH);
Serial.println("Appel de la fonction ft8");
computeLocator(8);
afficheur->modeDisplay("FT8");
digitalWrite(PTT_PIN,HIGH);
mod->sendFt8(cfg.call,position.locator);
digitalWrite(PTT_PIN,LOW);
afficheur->modeEfface();
digitalWrite(LED_TX_PIN,LOW);
}
void wspr() {
digitalWrite(LED_TX_PIN,HIGH);
Serial.println("Appel de la fonction WSPR");
computeLocator(4);
afficheur->modeDisplay("WSPR");
digitalWrite(PTT_PIN,HIGH);
mod->sendWspr(position.locator);
digitalWrite(PTT_PIN,LOW);
afficheur->modeEfface();
digitalWrite(LED_TX_PIN,LOW);
}
void rtty() {
char buffer[300];
digitalWrite(LED_TX_PIN,HIGH);
Serial.println("Appel de la fonction RTTY");
computeLocator(8);
sprintf(buffer, " %s BEACON LOC %s LAT:%.6f LON:%.6f SPD:%.1f KTS HDG:%.0f PSE REPORT %s ........\n\r", cfg.call, position.locator, position.latitude, position.longitude, position.speedKmph, position.courseDeg,cfg.mail);
Serial.println(buffer);
afficheur->modeDisplay("RTTY");
digitalWrite(PTT_PIN,HIGH);
mod->sendRtty(buffer);
digitalWrite(PTT_PIN,LOW);
afficheur->modeEfface();
digitalWrite(LED_TX_PIN,LOW);
}
void hell() {
char buffer[300];
digitalWrite(LED_TX_PIN,HIGH);
Serial.println("Appel de la fonction HELL");
computeLocator(8);
sprintf(buffer, "..... %s BEACON LOC %s ....\n\r", cfg.call, position.locator);
Serial.println(buffer);
afficheur->modeDisplay("HELL");
digitalWrite(PTT_PIN,HIGH);
mod->sendHell(buffer);
digitalWrite(PTT_PIN,LOW);
afficheur->modeEfface();
digitalWrite(LED_TX_PIN,LOW);
}
void cw() {
char buffer[300];
digitalWrite(LED_TX_PIN,HIGH);
Serial.println("Appel de la fonction CW");
computeLocator(8);
sprintf(buffer, " %s %s BEACON %s \n\r", cfg.call,cfg.call, position.locator);
Serial.println(buffer);
afficheur->modeDisplay(" CW");
digitalWrite(PTT_PIN,HIGH);
mod->sendCw(buffer,cfg.wpm);
digitalWrite(PTT_PIN,LOW);
afficheur->modeEfface();
digitalWrite(LED_TX_PIN,LOW);
}
void initTimeTable(void)
{
uint8_t idx = 0;
for (uint8_t base = 0; base < 60; base += MINUTES)
{
// 2 WSPR
timt[idx].mode = WSPR;
timt[idx].minute = base + 0;
timt[idx].seconde = 0;
idx++;
timt[idx].mode = WSPR;
timt[idx].minute = base + 2;
timt[idx].seconde = 0;
idx++;
// 2 FT8
timt[idx].mode = FT8;
timt[idx].minute = base + 4;
timt[idx].seconde = 0;
idx++;
timt[idx].mode = FT8;
timt[idx].minute = base + 4;
timt[idx].seconde = 30;
idx++;
}
}
txModes recherche(int minutes, int seconde)
{
uint8_t size = (60 / MINUTES) * 4;
for (uint8_t i = 0; i < size; i++)
{
if (timt[i].minute == minutes && timt[i].seconde == seconde)
{
return timt[i].mode;
}
}
return NOTX;
}
void setup1(void){
while (!stateObjMod){}
delay(1); //nécessaire pour que le dds démarre
mod->coreUnSetup();
}

View File

@ -1,11 +0,0 @@
This directory is intended for PlatformIO Test Runner and project tests.
Unit Testing is a software testing method by which individual units of
source code, sets of one or more MCU program modules together with associated
control data, usage procedures, and operating procedures, are tested to
determine whether they are fit for use. Unit testing finds problems early
in the development cycle.
More information about PlatformIO Unit Testing:
- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html