Rev 67 | Rev 71 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 67 | Rev 70 | ||
|---|---|---|---|
| Line 13... | Line 13... | ||
| 13 | #include "libOLED/stm32_halDisplay.H" |
13 | #include "libOLED/stm32_halDisplay.H" |
| 14 | #include "libOLED/fontclass.H" |
14 | #include "libOLED/fontclass.H" |
| 15 | #include "libOLED/displayDial.H" |
15 | #include "libOLED/displayDial.H" |
| 16 | #include "libPlx/displayInfo.H" |
16 | #include "libPlx/displayInfo.H" |
| 17 | #include "libOLED/ap_math.h" |
17 | #include "libOLED/ap_math.h" |
| - | 18 | #include "libSmallPrintf/small_printf.h" |
|
| 18 | 19 | ||
| 19 | #include "splash.H" |
20 | #include "splash.H" |
| 20 | 21 | ||
| 21 | namespace |
22 | namespace |
| 22 | { |
23 | { |
| Line 115... | Line 116... | ||
| 115 | void |
116 | void |
| 116 | cc_check_nvram(int dialIndex) |
117 | cc_check_nvram(int dialIndex) |
| 117 | { |
118 | { |
| 118 | if (dialIndex < 0 && dialIndex > MAX_DISPLAYS) |
119 | if (dialIndex < 0 && dialIndex > MAX_DISPLAYS) |
| 119 | return; |
120 | return; |
| 120 | // algorithm only works when there is a vector of observations |
121 | // algorithm only works when there is a vector of observations |
| 121 | if(PLXItems == 0) |
- | |
| 122 | return; |
122 | |
| 123 | context_t &context = contexts[dialIndex]; |
123 | context_t &context = contexts[dialIndex]; |
| 124 | 124 | ||
| 125 | // check for timer timeout on consistent timer |
125 | // check for timer timeout on consistent timer |
| 126 | 126 | ||
| 127 | if (context.dial_timer) |
127 | if (context.dial_timer) |
| Line 134... | Line 134... | ||
| 134 | // use dialIndex+1 as tag for data : always non-zero. |
134 | // use dialIndex+1 as tag for data : always non-zero. |
| 135 | nvram_info_t *dial_nvram = find_nvram_data(dialIndex + 1); |
135 | nvram_info_t *dial_nvram = find_nvram_data(dialIndex + 1); |
| 136 | 136 | ||
| 137 | if (dial_nvram && context.knobPos < 0) |
137 | if (dial_nvram && context.knobPos < 0) |
| 138 | { |
138 | { |
| 139 | for (i = 0; i < PLXItems; i++) |
139 | for (i = 0; i < MAXRDG; i++) |
| 140 | if ((Info[i].observation == dial_nvram->data.observation) && (Info[i].instance == dial_nvram->data.instance)) |
140 | if (isValid(i) && (Info[i].observation == dial_nvram->data.observation) && (Info[i].instance == dial_nvram->data.instance)) |
| 141 | { |
141 | { |
| 142 | context.knobPos = i; |
142 | context.knobPos = i; |
| 143 | return; |
143 | return; |
| 144 | } |
144 | } |
| 145 | } |
145 | } |
| 146 | if (context.knobPos == -1) |
146 | if (context.knobPos == -1) |
| 147 | context.knobPos = dialIndex; // timed out , not in NVRAM, use a default |
147 | context.knobPos = dialIndex; // timed out , not in NVRAM, use a default |
| 148 | 148 | ||
| - | 149 | // dont save dial info for invalid data |
|
| - | 150 | if (!isValid(context.knobPos)) |
|
| - | 151 | return; |
|
| 149 | // is this a change since the last timeout ? |
152 | // is this a change since the last timeout ? |
| - | 153 | ||
| 150 | if (!dial_nvram || (Info[context.knobPos].observation != dial_nvram->data.observation) || (Info[context.knobPos].instance != dial_nvram->data.instance)) |
154 | if (!dial_nvram || (Info[context.knobPos].observation != dial_nvram->data.observation) || (Info[context.knobPos].instance != dial_nvram->data.instance)) |
| 151 | { |
155 | { |
| 152 | 156 | ||
| 153 | // store the observation and instance in the NVRAM, not dial position. |
157 | // store the observation and instance in the NVRAM, not dial position. |
| 154 | nvram_info_t curr_val; |
158 | nvram_info_t curr_val; |
| Line 172... | Line 176... | ||
| 172 | displayDial_t &dial = dials[dialIndex]; |
176 | displayDial_t &dial = dials[dialIndex]; |
| 173 | stm32_halDisplay_t &display = displays[dialIndex]; |
177 | stm32_halDisplay_t &display = displays[dialIndex]; |
| 174 | int itemIndex = context.knobPos; |
178 | int itemIndex = context.knobPos; |
| 175 | char buff[10]; |
179 | char buff[10]; |
| 176 | int i; |
180 | int i; |
| - | 181 | char *msg; |
|
| - | 182 | int len; |
|
| 177 | 183 | ||
| 178 | // check for item suppression |
184 | // check for item suppression |
| 179 | if (itemIndex == suppressIndex) |
185 | if (itemIndex == suppressIndex) |
| 180 | { |
186 | { |
| 181 | context.dial1 = -1; |
187 | context.dial1 = -1; |
| 182 | context.OldObservation = -1; |
188 | context.OldObservation = -1; |
| 183 | context.OldObservationIndex = -1; |
189 | context.OldObservationIndex = -1; |
| 184 | 190 | ||
| 185 | display.clearDisplay(); |
191 | display.clearDisplay(BLACK); |
| - | 192 | i = small_sprintf(buff, "Supp-%02d", itemIndex); |
|
| - | 193 | display.gotoxy(64 - i * 4, 48); |
|
| - | 194 | display.printString(large_font, buff, i, WHITE); |
|
| - | 195 | ||
| 186 | display.display(); |
196 | display.display(); |
| 187 | return -1; // we suppressed this display |
197 | return -1; // we suppressed this display |
| 188 | } |
198 | } |
| 189 | 199 | ||
| - | 200 | // check for item validity |
|
| - | 201 | if(!isValid(itemIndex)) |
|
| - | 202 | { |
|
| - | 203 | context.dial1 = -1; |
|
| - | 204 | context.OldObservation = -1; |
|
| - | 205 | context.OldObservationIndex = -1; |
|
| - | 206 | display.clearDisplay(BLACK); |
|
| - | 207 | i = small_sprintf(buff, "Inval-%02d", itemIndex); |
|
| - | 208 | display.gotoxy(64 - i * 4, 48); |
|
| - | 209 | display.printString(large_font, buff, i, WHITE); |
|
| - | 210 | ||
| - | 211 | display.display(); |
|
| - | 212 | return itemIndex; |
|
| - | 213 | } |
|
| - | 214 | ||
| 190 | // clear startup display off the screen |
215 | // clear startup display off the screen |
| 191 | if (context.OldObservation == -1) |
216 | if (context.OldObservation == -1) |
| 192 | display.clearDisplay(BLACK); |
217 | display.clearDisplay(BLACK); |
| 193 | 218 | ||
| 194 | int DataVal = Info[itemIndex].data; // data reading |
219 | int DataVal = Info[itemIndex].data; // data reading |
| 195 | int Observation = Info[itemIndex].observation; |
220 | int Observation = Info[itemIndex].observation; |
| 196 | int ObservationIndex = Info[itemIndex].instance; |
221 | int ObservationIndex = Info[itemIndex].instance; |
| 197 | // now to convert the readings and format strings |
222 | // now to convert the readings and format strings |
| 198 | // find out limits |
223 | // find out limits |
| 199 | char *msg; |
- | |
| 200 | int len; |
- | |
| 201 | 224 | ||
| 202 | // if the user presses the dial then reset min/max to current value |
225 | // if the user presses the dial then reset min/max to current value |
| 203 | if (push_pos[dialIndex] == 1) |
226 | if (push_pos[dialIndex] == 1) |
| 204 | { |
227 | { |
| 205 | Info[itemIndex].Max = DataVal; |
228 | Info[itemIndex].Max = DataVal; |
| Line 210... | Line 233... | ||
| 210 | if (Observation < PLX_MAX_OBS) |
233 | if (Observation < PLX_MAX_OBS) |
| 211 | { |
234 | { |
| 212 | if (Observation != context.OldObservation || ObservationIndex != context.OldObservationIndex) |
235 | if (Observation != context.OldObservation || ObservationIndex != context.OldObservationIndex) |
| 213 | { |
236 | { |
| 214 | 237 | ||
| 215 | display.clearDisplay(); |
238 | display.clearDisplay(BLACK); |
| 216 | dial.draw_scale(DisplayInfo[Observation].Low, |
239 | dial.draw_scale(DisplayInfo[Observation].Low, |
| 217 | DisplayInfo[Observation].High, 12, 1, |
240 | DisplayInfo[Observation].High, 12, 1, |
| 218 | DisplayInfo[Observation].TickScale); |
241 | DisplayInfo[Observation].TickScale); |
| 219 | 242 | ||
| 220 | dial.draw_limits(); |
243 | dial.draw_limits(); |