0

so im working in an environment (National Instruments) that auto-generates header files for the GUI.

in my GUI, i have 150-some odd LEDs arranged in a matrix to represent a large relay bank. my LEDs are named and sequenced numerically like

PANEL_LED_1
PANEL_LED_2
...
PANEL_LED_150
etc...

which would allow me to easily control the relays in various configurations if i had a one-to-one mapping of the name with the corresponding value

HOWEVER

the freaking environment auto generates all GUI header files, with virtually no rhyme or reason to the sequences, so i wind up with something like this:

#define  PANELRAC_LED_141                 2      
#define  PANELRAC_LED_142                 3       
#define  PANELRAC_LED_143                 4       
#define  PANELRAC_LED_144                 5       
#define  PANELRAC_LED_137                 6      
#define  PANELRAC_LED_138                 7       
#define  PANELRAC_LED_139                 8       
#define  PANELRAC_LED_140                 9

and don't think you see a pattern here, because it gets mixed up later, and any time a change is made to the GUI and recompiled a brand new GUI header file is generated and the entire sequence can be re-arranged.

so my question is how best can i associate the string of the #define'd name with the corresponding numeric value.

obviously i would like LED_140 to equal 140. but i can't force that to happen, because i can't modify the header without potentially breaking it in the future.

so i've done this,

case PANELRAC_LED_1:  
			return 1;
		case PANELRAC_LED_2:  
			return 2;
		case PANELRAC_LED_3:  
			return 3;
		...
		...
		case PANELRAC_LED_124:  
			return 124;
		case PANELRAC_LED_125:  
			return 125;
		case PANELRAC_LED_126:  
			return 126;
		case PANELRAC_LED_127:  
			return 127;
		...
		etc...

but i don't like it.

i'm trying to think of a way to do it with enum or a linked list, but i'm drawing a blank.

.

3
Contributors
3
Replies
4
Views
8 Years
Discussion Span
Last Post by jephthah
0

Something like this, maybe?

#define  LED_2  PANELRAC_LED_141                       
#define  LED_3  PANELRAC_LED_142                        
#define  LED_4  PANELRAC_LED_143                        
#define  LED_5  PANELRAC_LED_144                        
#define  LED_6  PANELRAC_LED_137                       
#define  LED_7  PANELRAC_LED_138                        
#define  LED_8  PANELRAC_LED_139                        
#define  LED_9  PANELRAC_LED_140

[edit]No, I guess not. But can you just ignore their version and create your own header?

0

Why exactly is the environment rewriting your defines to be something different? That kind of defeats the purpose of manifest constants.

0

^^ no, that won't work either because you're expecting the original #defines to remain constant... any modification and recompilation of the GUI will generate a new header file.

^ damned if I know. this is a "feature" of National Instrument's LabWindows/CVI environment. It's basically ANSI C with some extra libraries and a GUI creation tool that auto generates a gui header file based on the gui you created.

its kind of a dumb feature really. it doesnt create any other headers for you, so i dont see really where the benefit is other than perhaps savign time tracking down bugs due to typos.

oh, well. now i've got a 150-case long switch statement. its ugly. and probably slow. but f- it, it works, i guess

:ugh:

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.