@@ -418,7 +418,8 @@ typedef enum {
418418 X(PLOT_CH_ACTIVENETS , " Nets" ) \
419419 X(PLOT_CH_LAUNCHES , " Launches" ) \
420420 X(PLOT_CH_HFCOND , " HF_Bands" ) \
421- X(PLOT_CH_VHFCOND , " VHF_Cond" )
421+ X(PLOT_CH_VHFCOND , " VHF_Cond" ) \
422+ X(PLOT_CH_SATACT , " Sat_Alerts" )
422423
423424#define X (a,b ) a, // expands PLOTNAMES to each enum and comma
424425typedef enum {
@@ -682,12 +683,16 @@ extern SBox de_info_b; // de info pane
682683extern SBox map_b; // main map
683684extern SBox view_btn_b; // map view menu button
684685extern SBox motd_btn_b; // MOTD mailbox icon (next to UTC button)
686+ extern SBox adsb_btn_b; // ADS-B airplane icon (next to MOTD icon)
685687
686688// MOTD (Message of the Day) functions
687689extern void checkMOTD (void );
688690extern bool motdIsPresent (void );
689691extern void drawMOTDIcon (void );
690692extern void motdClicked (void );
693+
694+ // ADS-B airplane icon -- opens https://adsb.lol
695+ extern void drawADSBIcon (void );
691696extern SBox dx_maid_b; // dx maidenhead pick
692697extern SBox de_maid_b; // de maidenhead pick
693698extern SBox lkscrn_b; // screen lock icon button
@@ -1582,6 +1587,16 @@ extern void drawSatName(void);
15821587extern void drawOneTimeDX (void );
15831588extern void drawOneTimeDE (void );
15841589extern bool setSatFromName (const char *new_name);
1590+ extern Satellite *lookupSatByName (const char *name, int *norad = NULL );
1591+
1592+ /* ********************************************************************************************
1593+ *
1594+ * satsked.cpp
1595+ *
1596+ */
1597+
1598+ extern void drawSatGroupSchedule (void );
1599+ extern void drawSatCoVis (void );
15851600extern bool setSatFromTLE (const char *name, const char *t1, const char *t2);
15861601extern bool initSat (void );
15871602extern bool getSatNow (SatNow &satnow);
@@ -2110,6 +2125,16 @@ extern void reportEESize (uint16_t &ee_used, uint16_t &ee_size);
21102125
21112126extern bool updateOnTheAir (const SBox &box, bool fresh);
21122127extern bool checkOnTheAirTouch (const SCoord &s, const SBox &box);
2128+
2129+ /* ********************************************************************************************
2130+ *
2131+ * hamsat.cpp
2132+ *
2133+ */
2134+
2135+ extern bool updateHamsat (const SBox &box, bool fresh);
2136+ extern bool checkHamsatTouch (const SCoord &s, const SBox &box);
2137+ extern void drawHamsatOnMap (void );
21132138extern bool getOnTheAirSpots (DXSpot **spp, uint8_t *nspotsp);
21142139extern void drawOnTheAirSpotsOnMap (void );
21152140extern bool getClosestOnTheAirSpot (LatLong &ll, DXSpot *sp, LatLong *llp);
@@ -2211,9 +2236,15 @@ extern uint32_t plot_rothold; // bitmask of PlotChoice in rotset bu
22112236extern uint32_t plot_rotset[PANE_N ]; // bitmask of each pane's PlotChoice rotation choices
22122237 // N.B. plot_rotset[i] must always include plot_ch[i] unless NONE
22132238
2214- #define ROTHOLD_SET (pc ) (plot_rothold |= (1 <<(pc)))
2215- #define ROTHOLD_CLR (pc ) (plot_rothold &= ~(1 <<(pc)))
2216- #define ROTHOLD_TST (pc ) ((plot_rothold & (1 <<(pc))) != 0 )
2239+ // plot_rotset/plot_rothold are only 32 bits wide, but PLOT_CH_N may exceed 32 (e.g. PLOT_CH_SATACT).
2240+ // PLOTBIT() maps any PlotChoice >= 32 to 0 instead of performing an out-of-range shift, which both
2241+ // avoids undefined behavior and, as a deliberate side effect, guarantees such choices can never be
2242+ // captured in a rotation set -- i.e. they can never participate in pane auto rotation.
2243+ #define PLOTBIT (pc ) ((uint32_t )(pc) < 32 ? (1u << (uint32_t )(pc)) : 0u )
2244+
2245+ #define ROTHOLD_SET (pc ) (plot_rothold |= PLOTBIT (pc))
2246+ #define ROTHOLD_CLR (pc ) (plot_rothold &= ~PLOTBIT (pc))
2247+ #define ROTHOLD_TST (pc ) ((plot_rothold & PLOTBIT (pc)) != 0)
22172248
22182249#define SHOWING_PANE_0 () (plot_ch[PANE_0 ] != PLOT_CH_NONE )
22192250#define BOX_IS_PANE_0 (b ) ((b).w == PLOTBOX0_W && (b).h == PLOTBOX0_H )
0 commit comments