Signal Generator
Dependencies: IniManager RA8875 Watchdog mbed-rtos mbed
Fork of speaker_demo_Analog by
SignalGenDisplay.cpp@1:dd07e1deec6c, 2017-01-13 (annotated)
- Committer:
- WiredHome
- Date:
- Fri Jan 13 12:33:37 2017 +0000
- Revision:
- 1:dd07e1deec6c
- Child:
- 2:8f71b71fce1b
Added settings screen, started revising the scope layout
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
WiredHome | 1:dd07e1deec6c | 1 | |
WiredHome | 1:dd07e1deec6c | 2 | #include "SignalGenDisplay.h" |
WiredHome | 1:dd07e1deec6c | 3 | #include "rtos.h" |
WiredHome | 1:dd07e1deec6c | 4 | #include "IniManager.h" |
WiredHome | 1:dd07e1deec6c | 5 | |
WiredHome | 1:dd07e1deec6c | 6 | extern INI ini; |
WiredHome | 1:dd07e1deec6c | 7 | |
WiredHome | 1:dd07e1deec6c | 8 | // ##### Main Page ############################################################# |
WiredHome | 1:dd07e1deec6c | 9 | // |
WiredHome | 1:dd07e1deec6c | 10 | // +---------------------------------------------------------------------------+ |
WiredHome | 1:dd07e1deec6c | 11 | // | +------------------------------------------+ Progam Name and version | |
WiredHome | 1:dd07e1deec6c | 12 | // | | | Manufacturer name | |
WiredHome | 1:dd07e1deec6c | 13 | // | | | | |
WiredHome | 1:dd07e1deec6c | 14 | // | | | [ Text Entry Box ] | |
WiredHome | 1:dd07e1deec6c | 15 | // | | Scope Area | +------------------------+ | |
WiredHome | 1:dd07e1deec6c | 16 | // | | | | | | |
WiredHome | 1:dd07e1deec6c | 17 | // | | | | | | |
WiredHome | 1:dd07e1deec6c | 18 | // | | | | | | |
WiredHome | 1:dd07e1deec6c | 19 | // | | | | | | |
WiredHome | 1:dd07e1deec6c | 20 | // | | | | | | |
WiredHome | 1:dd07e1deec6c | 21 | // | | | | Keypad Area | | |
WiredHome | 1:dd07e1deec6c | 22 | // | +------------------------------------------+ | | | |
WiredHome | 1:dd07e1deec6c | 23 | // | | | | |
WiredHome | 1:dd07e1deec6c | 24 | // | [duty cycle] [frequency] [amplitude] | | | |
WiredHome | 1:dd07e1deec6c | 25 | // | | | | |
WiredHome | 1:dd07e1deec6c | 26 | // | [ ... ] [period ] [offset ] | | | |
WiredHome | 1:dd07e1deec6c | 27 | // | | | | |
WiredHome | 1:dd07e1deec6c | 28 | // | [ ] [ ] [ ] [ ] [ ] | | | |
WiredHome | 1:dd07e1deec6c | 29 | // | [Sine ] [Square] [Triangle] [Sawtooth] [User] +------------------------+ | |
WiredHome | 1:dd07e1deec6c | 30 | // +---------------------------------------------------------------------------+ |
WiredHome | 1:dd07e1deec6c | 31 | |
WiredHome | 1:dd07e1deec6c | 32 | |
WiredHome | 1:dd07e1deec6c | 33 | #define UI_BackColor RGB(8,8,8) |
WiredHome | 1:dd07e1deec6c | 34 | |
WiredHome | 1:dd07e1deec6c | 35 | const rect_t UI_DATA_ENTRY = {300,45, 475,65}; |
WiredHome | 1:dd07e1deec6c | 36 | |
WiredHome | 1:dd07e1deec6c | 37 | const rect_t UI_SCOPE_RECT = {4,5, 290,160}; |
WiredHome | 1:dd07e1deec6c | 38 | #define UI_ScopeBackColor RGB(0,0,0) |
WiredHome | 1:dd07e1deec6c | 39 | #define UI_ScopeFrameColor RGB(255,255,255) |
WiredHome | 1:dd07e1deec6c | 40 | |
WiredHome | 1:dd07e1deec6c | 41 | #define SC_LEFT_MARGIN 10 |
WiredHome | 1:dd07e1deec6c | 42 | #define SC_TOP_MARGIN 20 |
WiredHome | 1:dd07e1deec6c | 43 | #define SC_RIGHT_MARGIN 30 |
WiredHome | 1:dd07e1deec6c | 44 | #define SC_BOT_MARGIN 30 |
WiredHome | 1:dd07e1deec6c | 45 | #define WaveOutlineColor RGB(16,16,32) |
WiredHome | 1:dd07e1deec6c | 46 | |
WiredHome | 1:dd07e1deec6c | 47 | const rect_t Parameters[] = { |
WiredHome | 1:dd07e1deec6c | 48 | {4,170, 60,190}, // 'd'uty cycle |
WiredHome | 1:dd07e1deec6c | 49 | {90,170, 186,190}, // 'f'requency |
WiredHome | 1:dd07e1deec6c | 50 | {90,200, 186,220}, // 'p'eriod |
WiredHome | 1:dd07e1deec6c | 51 | {230,170, 290,190}, // 'v'oltage |
WiredHome | 1:dd07e1deec6c | 52 | {230,200, 290,220} // 'o'ffset |
WiredHome | 1:dd07e1deec6c | 53 | }; |
WiredHome | 1:dd07e1deec6c | 54 | const int ParameterCount = sizeof(Parameters)/sizeof(Parameters[0]); |
WiredHome | 1:dd07e1deec6c | 55 | const char ParameterKeys[] = { 'd', 'f', 'p', 'v', 'o' }; |
WiredHome | 1:dd07e1deec6c | 56 | |
WiredHome | 1:dd07e1deec6c | 57 | #define UI_DutyColor Magenta |
WiredHome | 1:dd07e1deec6c | 58 | #define UI_FreqColor BrightRed |
WiredHome | 1:dd07e1deec6c | 59 | #define UI_VP2PColor DarkBrown |
WiredHome | 1:dd07e1deec6c | 60 | #define UI_VOffsetColor Green |
WiredHome | 1:dd07e1deec6c | 61 | |
WiredHome | 1:dd07e1deec6c | 62 | #define UI_BUTTON_FACE_UP White |
WiredHome | 1:dd07e1deec6c | 63 | #define UI_BUTTON_FACE_DN RGB(255,92,92) |
WiredHome | 1:dd07e1deec6c | 64 | #define UI_BUTTON_SHADOW RGB(128,0,0) |
WiredHome | 1:dd07e1deec6c | 65 | #define UI_BUTTON_FACE_DISABLED RGB(24,24,24) |
WiredHome | 1:dd07e1deec6c | 66 | #define UI_BUTTON_SHADOW_DISABLED RGB(32,0,0) |
WiredHome | 1:dd07e1deec6c | 67 | |
WiredHome | 1:dd07e1deec6c | 68 | const rect_t UI_PROD_RECT = {298,3, 479,40}; |
WiredHome | 1:dd07e1deec6c | 69 | #define UI_ProductNameColor UI_BUTTON_FACE_DN // RGB(192,192,192) |
WiredHome | 1:dd07e1deec6c | 70 | |
WiredHome | 1:dd07e1deec6c | 71 | #define PI 3.1415 |
WiredHome | 1:dd07e1deec6c | 72 | |
WiredHome | 1:dd07e1deec6c | 73 | #define BTN_W 54 |
WiredHome | 1:dd07e1deec6c | 74 | #define BTN_H 35 |
WiredHome | 1:dd07e1deec6c | 75 | #define BTN_S 5 // space |
WiredHome | 1:dd07e1deec6c | 76 | |
WiredHome | 1:dd07e1deec6c | 77 | #define BTN_MODE_X 2 |
WiredHome | 1:dd07e1deec6c | 78 | #define BTN_MODE_Y 230 |
WiredHome | 1:dd07e1deec6c | 79 | |
WiredHome | 1:dd07e1deec6c | 80 | #define BTN_KEYP_X 300 |
WiredHome | 1:dd07e1deec6c | 81 | #define BTN_KEYP_Y 70 |
WiredHome | 1:dd07e1deec6c | 82 | |
WiredHome | 1:dd07e1deec6c | 83 | const rect_t NavToSettings = { 4,200, 60,220 }; |
WiredHome | 1:dd07e1deec6c | 84 | |
WiredHome | 1:dd07e1deec6c | 85 | |
WiredHome | 1:dd07e1deec6c | 86 | |
WiredHome | 1:dd07e1deec6c | 87 | const rect_t UI_Buttons[] = { |
WiredHome | 1:dd07e1deec6c | 88 | { BTN_MODE_X+0*(BTN_W+BTN_S),BTN_MODE_Y, BTN_MODE_X+0*(BTN_W+BTN_S)+BTN_W,BTN_MODE_Y+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 89 | { BTN_MODE_X+1*(BTN_W+BTN_S),BTN_MODE_Y, BTN_MODE_X+1*(BTN_W+BTN_S)+BTN_W,BTN_MODE_Y+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 90 | { BTN_MODE_X+2*(BTN_W+BTN_S),BTN_MODE_Y, BTN_MODE_X+2*(BTN_W+BTN_S)+BTN_W,BTN_MODE_Y+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 91 | { BTN_MODE_X+3*(BTN_W+BTN_S),BTN_MODE_Y, BTN_MODE_X+3*(BTN_W+BTN_S)+BTN_W,BTN_MODE_Y+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 92 | { BTN_MODE_X+4*(BTN_W+BTN_S),BTN_MODE_Y, BTN_MODE_X+4*(BTN_W+BTN_S)+BTN_W,BTN_MODE_Y+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 93 | }; |
WiredHome | 1:dd07e1deec6c | 94 | const int ButtonCount = sizeof(UI_Buttons)/sizeof(UI_Buttons[0]); |
WiredHome | 1:dd07e1deec6c | 95 | SignalGenDisplay::SG_Mode UI_ModeList[] = { |
WiredHome | 1:dd07e1deec6c | 96 | SignalGenDisplay::SG_SINE, |
WiredHome | 1:dd07e1deec6c | 97 | SignalGenDisplay::SG_SQUARE, |
WiredHome | 1:dd07e1deec6c | 98 | SignalGenDisplay::SG_TRIANGLE, |
WiredHome | 1:dd07e1deec6c | 99 | SignalGenDisplay::SG_SAWTOOTH, |
WiredHome | 1:dd07e1deec6c | 100 | SignalGenDisplay::SG_USER, |
WiredHome | 1:dd07e1deec6c | 101 | }; |
WiredHome | 1:dd07e1deec6c | 102 | const char ModeKeys[] = { 'S','Q','T','W','U' }; |
WiredHome | 1:dd07e1deec6c | 103 | |
WiredHome | 1:dd07e1deec6c | 104 | const rect_t UI_Keypad[] = { |
WiredHome | 1:dd07e1deec6c | 105 | {BTN_KEYP_X+0*(BTN_W+BTN_S),BTN_KEYP_Y+0*(BTN_H+BTN_S), BTN_KEYP_X+0*(BTN_W+BTN_S)+BTN_W,BTN_KEYP_Y+0*(BTN_H+BTN_S)+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 106 | {BTN_KEYP_X+1*(BTN_W+BTN_S),BTN_KEYP_Y+0*(BTN_H+BTN_S), BTN_KEYP_X+1*(BTN_W+BTN_S)+BTN_W,BTN_KEYP_Y+0*(BTN_H+BTN_S)+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 107 | {BTN_KEYP_X+2*(BTN_W+BTN_S),BTN_KEYP_Y+0*(BTN_H+BTN_S), BTN_KEYP_X+2*(BTN_W+BTN_S)+BTN_W,BTN_KEYP_Y+0*(BTN_H+BTN_S)+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 108 | {BTN_KEYP_X+0*(BTN_W+BTN_S),BTN_KEYP_Y+1*(BTN_H+BTN_S), BTN_KEYP_X+0*(BTN_W+BTN_S)+BTN_W,BTN_KEYP_Y+1*(BTN_H+BTN_S)+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 109 | {BTN_KEYP_X+1*(BTN_W+BTN_S),BTN_KEYP_Y+1*(BTN_H+BTN_S), BTN_KEYP_X+1*(BTN_W+BTN_S)+BTN_W,BTN_KEYP_Y+1*(BTN_H+BTN_S)+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 110 | {BTN_KEYP_X+2*(BTN_W+BTN_S),BTN_KEYP_Y+1*(BTN_H+BTN_S), BTN_KEYP_X+2*(BTN_W+BTN_S)+BTN_W,BTN_KEYP_Y+1*(BTN_H+BTN_S)+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 111 | {BTN_KEYP_X+0*(BTN_W+BTN_S),BTN_KEYP_Y+2*(BTN_H+BTN_S), BTN_KEYP_X+0*(BTN_W+BTN_S)+BTN_W,BTN_KEYP_Y+2*(BTN_H+BTN_S)+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 112 | {BTN_KEYP_X+1*(BTN_W+BTN_S),BTN_KEYP_Y+2*(BTN_H+BTN_S), BTN_KEYP_X+1*(BTN_W+BTN_S)+BTN_W,BTN_KEYP_Y+2*(BTN_H+BTN_S)+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 113 | {BTN_KEYP_X+2*(BTN_W+BTN_S),BTN_KEYP_Y+2*(BTN_H+BTN_S), BTN_KEYP_X+2*(BTN_W+BTN_S)+BTN_W,BTN_KEYP_Y+2*(BTN_H+BTN_S)+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 114 | {BTN_KEYP_X+0*(BTN_W+BTN_S),BTN_KEYP_Y+3*(BTN_H+BTN_S), BTN_KEYP_X+0*(BTN_W+BTN_S)+BTN_W,BTN_KEYP_Y+3*(BTN_H+BTN_S)+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 115 | {BTN_KEYP_X+1*(BTN_W+BTN_S),BTN_KEYP_Y+3*(BTN_H+BTN_S), BTN_KEYP_X+1*(BTN_W+BTN_S)+BTN_W,BTN_KEYP_Y+3*(BTN_H+BTN_S)+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 116 | {BTN_KEYP_X+2*(BTN_W+BTN_S),BTN_KEYP_Y+3*(BTN_H+BTN_S), BTN_KEYP_X+2*(BTN_W+BTN_S)+BTN_W,BTN_KEYP_Y+3*(BTN_H+BTN_S)+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 117 | {BTN_KEYP_X+0*(BTN_W+BTN_S),BTN_KEYP_Y+4*(BTN_H+BTN_S), BTN_KEYP_X+0*(BTN_W+BTN_S)+BTN_W,BTN_KEYP_Y+4*(BTN_H+BTN_S)+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 118 | {BTN_KEYP_X+1*(BTN_W+BTN_S),BTN_KEYP_Y+4*(BTN_H+BTN_S), BTN_KEYP_X+1*(BTN_W+BTN_S)+BTN_W,BTN_KEYP_Y+4*(BTN_H+BTN_S)+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 119 | {BTN_KEYP_X+2*(BTN_W+BTN_S),BTN_KEYP_Y+4*(BTN_H+BTN_S), BTN_KEYP_X+2*(BTN_W+BTN_S)+BTN_W,BTN_KEYP_Y+4*(BTN_H+BTN_S)+BTN_H }, |
WiredHome | 1:dd07e1deec6c | 120 | }; |
WiredHome | 1:dd07e1deec6c | 121 | const int KeypadCount = sizeof(UI_Keypad)/sizeof(UI_Keypad[0]); |
WiredHome | 1:dd07e1deec6c | 122 | const char UI_KeyLabels[] = { |
WiredHome | 1:dd07e1deec6c | 123 | '7', '8', '9', |
WiredHome | 1:dd07e1deec6c | 124 | '4', '5', '6', |
WiredHome | 1:dd07e1deec6c | 125 | '1', '2', '3', |
WiredHome | 1:dd07e1deec6c | 126 | '0', '.', '-', |
WiredHome | 1:dd07e1deec6c | 127 | '\x1F', '\x1E', '\xB6', |
WiredHome | 1:dd07e1deec6c | 128 | }; |
WiredHome | 1:dd07e1deec6c | 129 | const char KeyPadKeys[] = { '7', '8', '9', '4', '5', '6', '1', '2', '3', |
WiredHome | 1:dd07e1deec6c | 130 | '0', '.', '-', '<', '>', '\n' }; |
WiredHome | 1:dd07e1deec6c | 131 | |
WiredHome | 1:dd07e1deec6c | 132 | |
WiredHome | 1:dd07e1deec6c | 133 | // ##### Settings ############################################################# |
WiredHome | 1:dd07e1deec6c | 134 | // |
WiredHome | 1:dd07e1deec6c | 135 | // +---------------------------------------------------------------------------+ |
WiredHome | 1:dd07e1deec6c | 136 | // | Progam Name and version | |
WiredHome | 1:dd07e1deec6c | 137 | // | Manufacturer name | |
WiredHome | 1:dd07e1deec6c | 138 | // | | |
WiredHome | 1:dd07e1deec6c | 139 | // | | |
WiredHome | 1:dd07e1deec6c | 140 | // | | |
WiredHome | 1:dd07e1deec6c | 141 | // | | |
WiredHome | 1:dd07e1deec6c | 142 | // | +--------+ | |
WiredHome | 1:dd07e1deec6c | 143 | // | | | | |
WiredHome | 1:dd07e1deec6c | 144 | // | | | | |
WiredHome | 1:dd07e1deec6c | 145 | // | | | | |
WiredHome | 1:dd07e1deec6c | 146 | // | | | | |
WiredHome | 1:dd07e1deec6c | 147 | // | | | | |
WiredHome | 1:dd07e1deec6c | 148 | // | | | | |
WiredHome | 1:dd07e1deec6c | 149 | // | |--------| | |
WiredHome | 1:dd07e1deec6c | 150 | // | | | | |
WiredHome | 1:dd07e1deec6c | 151 | // | [ ... ] | | | |
WiredHome | 1:dd07e1deec6c | 152 | // | | | | |
WiredHome | 1:dd07e1deec6c | 153 | // | | | | |
WiredHome | 1:dd07e1deec6c | 154 | // | +--------+ | |
WiredHome | 1:dd07e1deec6c | 155 | // +---------------------------------------------------------------------------+ |
WiredHome | 1:dd07e1deec6c | 156 | |
WiredHome | 1:dd07e1deec6c | 157 | const point_t suncenter = { 450,65 }; |
WiredHome | 1:dd07e1deec6c | 158 | const rect_t sunray[] = { |
WiredHome | 1:dd07e1deec6c | 159 | { 450-2,65-25, 450+2,65+25 }, |
WiredHome | 1:dd07e1deec6c | 160 | { 450-25,65-2, 450+25,65+2 } |
WiredHome | 1:dd07e1deec6c | 161 | }; |
WiredHome | 1:dd07e1deec6c | 162 | const rect_t sungraph = { 450-20,100+0, 450+20,265+0 }; |
WiredHome | 1:dd07e1deec6c | 163 | const rect_t inrgraph = { 450-18,100+2, 450+18,265-2 }; |
WiredHome | 1:dd07e1deec6c | 164 | |
WiredHome | 1:dd07e1deec6c | 165 | |
WiredHome | 1:dd07e1deec6c | 166 | template <typename T> int sgn(T val) { |
WiredHome | 1:dd07e1deec6c | 167 | return (T(0) < val) - (val < T(0)); |
WiredHome | 1:dd07e1deec6c | 168 | } |
WiredHome | 1:dd07e1deec6c | 169 | |
WiredHome | 1:dd07e1deec6c | 170 | char SignalGenDisplay::GetTouchEvent(void) { |
WiredHome | 1:dd07e1deec6c | 171 | TouchCode_t touch; |
WiredHome | 1:dd07e1deec6c | 172 | |
WiredHome | 1:dd07e1deec6c | 173 | touch = lcd->TouchPanelReadable(); // any touch to report? |
WiredHome | 1:dd07e1deec6c | 174 | if (touch) { |
WiredHome | 1:dd07e1deec6c | 175 | uint8_t id = lcd->TouchID(0); // 'id' tracks the individual touches |
WiredHome | 1:dd07e1deec6c | 176 | TouchCode_t ev = lcd->TouchCode(0); // 'ev'ent indicates no_touch, touch, held, release, ... |
WiredHome | 1:dd07e1deec6c | 177 | point_t point = lcd->TouchCoordinates(0); // and of course the (x,y) coordinates |
WiredHome | 1:dd07e1deec6c | 178 | if (ev == touch) { |
WiredHome | 1:dd07e1deec6c | 179 | timer.start(); |
WiredHome | 1:dd07e1deec6c | 180 | timer.reset(); |
WiredHome | 1:dd07e1deec6c | 181 | } |
WiredHome | 1:dd07e1deec6c | 182 | if ((ev == release) || (ev == held && timer.read_ms() > 250)) { |
WiredHome | 1:dd07e1deec6c | 183 | timer.reset(); |
WiredHome | 1:dd07e1deec6c | 184 | switch (vis) { |
WiredHome | 1:dd07e1deec6c | 185 | case VS_MainScreen: |
WiredHome | 1:dd07e1deec6c | 186 | printf("touch [vis: %d] (%d,%d)\r\n", vis, point.x, point.y); |
WiredHome | 1:dd07e1deec6c | 187 | // Mode Keys touch |
WiredHome | 1:dd07e1deec6c | 188 | for (int i=0; i<ButtonCount; i++) { |
WiredHome | 1:dd07e1deec6c | 189 | if (lcd->Intersect(UI_Buttons[i], point)) { |
WiredHome | 1:dd07e1deec6c | 190 | return ModeKeys[i]; |
WiredHome | 1:dd07e1deec6c | 191 | } |
WiredHome | 1:dd07e1deec6c | 192 | } |
WiredHome | 1:dd07e1deec6c | 193 | // Parameters |
WiredHome | 1:dd07e1deec6c | 194 | for (int i=0; i<ParameterCount; i++) { |
WiredHome | 1:dd07e1deec6c | 195 | if (lcd->Intersect(Parameters[i], point)) { |
WiredHome | 1:dd07e1deec6c | 196 | return ParameterKeys[i]; |
WiredHome | 1:dd07e1deec6c | 197 | } |
WiredHome | 1:dd07e1deec6c | 198 | } |
WiredHome | 1:dd07e1deec6c | 199 | |
WiredHome | 1:dd07e1deec6c | 200 | // Keypad |
WiredHome | 1:dd07e1deec6c | 201 | for (int i=0; i<KeypadCount; i++) { |
WiredHome | 1:dd07e1deec6c | 202 | if (lcd->Intersect(UI_Keypad[i], point)) { |
WiredHome | 1:dd07e1deec6c | 203 | return KeyPadKeys[i]; |
WiredHome | 1:dd07e1deec6c | 204 | } |
WiredHome | 1:dd07e1deec6c | 205 | } |
WiredHome | 1:dd07e1deec6c | 206 | |
WiredHome | 1:dd07e1deec6c | 207 | if (lcd->Intersect(NavToSettings, point)) { |
WiredHome | 1:dd07e1deec6c | 208 | printf("Nav\r\n"); |
WiredHome | 1:dd07e1deec6c | 209 | vis = VS_Settings; |
WiredHome | 1:dd07e1deec6c | 210 | Init(); |
WiredHome | 1:dd07e1deec6c | 211 | while (lcd->TouchPanelReadable()) |
WiredHome | 1:dd07e1deec6c | 212 | ; |
WiredHome | 1:dd07e1deec6c | 213 | Thread::wait(100); |
WiredHome | 1:dd07e1deec6c | 214 | } |
WiredHome | 1:dd07e1deec6c | 215 | break; |
WiredHome | 1:dd07e1deec6c | 216 | case VS_Settings: |
WiredHome | 1:dd07e1deec6c | 217 | Thread::wait(20); |
WiredHome | 1:dd07e1deec6c | 218 | printf("touch [VIS: %d\r\n", vis); |
WiredHome | 1:dd07e1deec6c | 219 | if (lcd->Intersect(sungraph, point)) { |
WiredHome | 1:dd07e1deec6c | 220 | float bl = (float)(sungraph.p2.y - point.y)/(sungraph.p2.y - sungraph.p1.y); |
WiredHome | 1:dd07e1deec6c | 221 | lcd->Backlight(rangelimit(bl, 0.1, 1.0)); |
WiredHome | 1:dd07e1deec6c | 222 | ShowBrightnessSetting(); |
WiredHome | 1:dd07e1deec6c | 223 | } |
WiredHome | 1:dd07e1deec6c | 224 | if (lcd->Intersect(NavToSettings, point)) { |
WiredHome | 1:dd07e1deec6c | 225 | // Save settings |
WiredHome | 1:dd07e1deec6c | 226 | char buf[20]; |
WiredHome | 1:dd07e1deec6c | 227 | |
WiredHome | 1:dd07e1deec6c | 228 | snprintf(buf, sizeof(buf), "%d", lcd->GetBacklight_u8()); |
WiredHome | 1:dd07e1deec6c | 229 | ini.WriteString("Settings", "Backlight", buf); |
WiredHome | 1:dd07e1deec6c | 230 | |
WiredHome | 1:dd07e1deec6c | 231 | // Switch to main screen |
WiredHome | 1:dd07e1deec6c | 232 | vis = VS_MainScreen; |
WiredHome | 1:dd07e1deec6c | 233 | Init(); |
WiredHome | 1:dd07e1deec6c | 234 | while (lcd->TouchPanelReadable()) |
WiredHome | 1:dd07e1deec6c | 235 | ; |
WiredHome | 1:dd07e1deec6c | 236 | Thread::wait(100); |
WiredHome | 1:dd07e1deec6c | 237 | ShowMenu(); |
WiredHome | 1:dd07e1deec6c | 238 | } |
WiredHome | 1:dd07e1deec6c | 239 | break; |
WiredHome | 1:dd07e1deec6c | 240 | } |
WiredHome | 1:dd07e1deec6c | 241 | } |
WiredHome | 1:dd07e1deec6c | 242 | } |
WiredHome | 1:dd07e1deec6c | 243 | return 0; |
WiredHome | 1:dd07e1deec6c | 244 | } |
WiredHome | 1:dd07e1deec6c | 245 | |
WiredHome | 1:dd07e1deec6c | 246 | |
WiredHome | 1:dd07e1deec6c | 247 | SignalGenDisplay::SignalGenDisplay(RA8875 * _lcd, SignalGenerator * _signal, |
WiredHome | 1:dd07e1deec6c | 248 | const char * _ProgName, const char * _Manuf, const char * _Ver, const char * _Build) : |
WiredHome | 1:dd07e1deec6c | 249 | lcd(_lcd), signal(_signal), ProgName(_ProgName), Manuf(_Manuf), Ver(_Ver), Build(_Build) { |
WiredHome | 1:dd07e1deec6c | 250 | vis = VS_MainScreen; |
WiredHome | 1:dd07e1deec6c | 251 | } |
WiredHome | 1:dd07e1deec6c | 252 | |
WiredHome | 1:dd07e1deec6c | 253 | |
WiredHome | 1:dd07e1deec6c | 254 | SignalGenDisplay::~SignalGenDisplay() { |
WiredHome | 1:dd07e1deec6c | 255 | } |
WiredHome | 1:dd07e1deec6c | 256 | |
WiredHome | 1:dd07e1deec6c | 257 | |
WiredHome | 1:dd07e1deec6c | 258 | void SignalGenDisplay::Init() { |
WiredHome | 1:dd07e1deec6c | 259 | switch (vis) { |
WiredHome | 1:dd07e1deec6c | 260 | case VS_MainScreen: |
WiredHome | 1:dd07e1deec6c | 261 | lcd->background(UI_BackColor); |
WiredHome | 1:dd07e1deec6c | 262 | lcd->cls(1); |
WiredHome | 1:dd07e1deec6c | 263 | lcd->SelectDrawingLayer(0); |
WiredHome | 1:dd07e1deec6c | 264 | // Clear Screen |
WiredHome | 1:dd07e1deec6c | 265 | lcd->SetLayerMode(RA8875::ShowLayer0); |
WiredHome | 1:dd07e1deec6c | 266 | |
WiredHome | 1:dd07e1deec6c | 267 | // Product Info |
WiredHome | 1:dd07e1deec6c | 268 | lcd->foreground(UI_ProductNameColor); |
WiredHome | 1:dd07e1deec6c | 269 | ShowProductInfo(); |
WiredHome | 1:dd07e1deec6c | 270 | |
WiredHome | 1:dd07e1deec6c | 271 | ClearScope(); |
WiredHome | 1:dd07e1deec6c | 272 | // Some defaults for testing |
WiredHome | 1:dd07e1deec6c | 273 | SetDutyCycle(30); |
WiredHome | 1:dd07e1deec6c | 274 | SetFrequency(1230.0); |
WiredHome | 1:dd07e1deec6c | 275 | SetVoltagePeakToPeak(3.0); |
WiredHome | 1:dd07e1deec6c | 276 | SetVoltageOffset(1.50); |
WiredHome | 1:dd07e1deec6c | 277 | resetDataEntry(); |
WiredHome | 1:dd07e1deec6c | 278 | SelectWaveformMode(SignalGenDisplay::SG_SINE); |
WiredHome | 1:dd07e1deec6c | 279 | DrawKeypadEnabled(false); |
WiredHome | 1:dd07e1deec6c | 280 | DrawNavGadget(); |
WiredHome | 1:dd07e1deec6c | 281 | break; |
WiredHome | 1:dd07e1deec6c | 282 | |
WiredHome | 1:dd07e1deec6c | 283 | case VS_Settings: |
WiredHome | 1:dd07e1deec6c | 284 | lcd->background(UI_BackColor); |
WiredHome | 1:dd07e1deec6c | 285 | lcd->cls(2); |
WiredHome | 1:dd07e1deec6c | 286 | lcd->SelectDrawingLayer(1); |
WiredHome | 1:dd07e1deec6c | 287 | lcd->SetLayerMode(RA8875::ShowLayer1); |
WiredHome | 1:dd07e1deec6c | 288 | lcd->foreground(UI_ProductNameColor); |
WiredHome | 1:dd07e1deec6c | 289 | ShowProductInfo(); |
WiredHome | 1:dd07e1deec6c | 290 | ShowBrightnessSetting(); |
WiredHome | 1:dd07e1deec6c | 291 | DrawNavGadget(); |
WiredHome | 1:dd07e1deec6c | 292 | break; |
WiredHome | 1:dd07e1deec6c | 293 | } |
WiredHome | 1:dd07e1deec6c | 294 | } |
WiredHome | 1:dd07e1deec6c | 295 | |
WiredHome | 1:dd07e1deec6c | 296 | void SignalGenDisplay::DrawNavGadget(void) { |
WiredHome | 1:dd07e1deec6c | 297 | lcd->fillrect(NavToSettings, Black); |
WiredHome | 1:dd07e1deec6c | 298 | lcd->SetTextCursor(NavToSettings.p1.x+1, NavToSettings.p1.y+1); |
WiredHome | 1:dd07e1deec6c | 299 | lcd->foreground(White); |
WiredHome | 1:dd07e1deec6c | 300 | lcd->background(Black); |
WiredHome | 1:dd07e1deec6c | 301 | lcd->puts(" ..."); |
WiredHome | 1:dd07e1deec6c | 302 | } |
WiredHome | 1:dd07e1deec6c | 303 | |
WiredHome | 1:dd07e1deec6c | 304 | |
WiredHome | 1:dd07e1deec6c | 305 | void SignalGenDisplay::ShowProductInfo(void) { |
WiredHome | 1:dd07e1deec6c | 306 | rect_t r = UI_PROD_RECT; |
WiredHome | 1:dd07e1deec6c | 307 | lcd->window(r); |
WiredHome | 1:dd07e1deec6c | 308 | lcd->SetTextCursor(r.p1.x, r.p1.y); |
WiredHome | 1:dd07e1deec6c | 309 | lcd->printf("%s v%s", ProgName, Ver); |
WiredHome | 1:dd07e1deec6c | 310 | lcd->SetTextCursor(r.p1.x, r.p1.y+16); |
WiredHome | 1:dd07e1deec6c | 311 | lcd->printf("by %s", Manuf); |
WiredHome | 1:dd07e1deec6c | 312 | lcd->window(); |
WiredHome | 1:dd07e1deec6c | 313 | } |
WiredHome | 1:dd07e1deec6c | 314 | |
WiredHome | 1:dd07e1deec6c | 315 | void SignalGenDisplay::ShowBrightnessSetting(void) { |
WiredHome | 1:dd07e1deec6c | 316 | // Sunbeam |
WiredHome | 1:dd07e1deec6c | 317 | lcd->fillrect(sunray[0], White); |
WiredHome | 1:dd07e1deec6c | 318 | lcd->fillrect(sunray[1], White); |
WiredHome | 1:dd07e1deec6c | 319 | lcd->fillcircle(suncenter, 18, UI_BackColor); |
WiredHome | 1:dd07e1deec6c | 320 | lcd->fillcircle(suncenter, 15, White); |
WiredHome | 1:dd07e1deec6c | 321 | lcd->rect(sungraph, Blue); |
WiredHome | 1:dd07e1deec6c | 322 | float bl = lcd->GetBacklight(); |
WiredHome | 1:dd07e1deec6c | 323 | lcd->fillrect(inrgraph, UI_BackColor); |
WiredHome | 1:dd07e1deec6c | 324 | lcd->fillrect(inrgraph.p1.x,inrgraph.p2.y, inrgraph.p2.x, inrgraph.p2.y - bl * (inrgraph.p2.y - inrgraph.p1.y), White); |
WiredHome | 1:dd07e1deec6c | 325 | } |
WiredHome | 1:dd07e1deec6c | 326 | |
WiredHome | 1:dd07e1deec6c | 327 | SignalGenDisplay::SG_Changes SignalGenDisplay::Poll(char c) { |
WiredHome | 1:dd07e1deec6c | 328 | SG_Changes ret = SG_NONE; |
WiredHome | 1:dd07e1deec6c | 329 | |
WiredHome | 1:dd07e1deec6c | 330 | if (!c) { |
WiredHome | 1:dd07e1deec6c | 331 | c = GetTouchEvent(); |
WiredHome | 1:dd07e1deec6c | 332 | } |
WiredHome | 1:dd07e1deec6c | 333 | if (c) { |
WiredHome | 1:dd07e1deec6c | 334 | printf("%02X: EntryMd: %d, textLen: %d [%s] VIS: %d\r\n", c, EntryMd, textLen, textBuffer, vis); |
WiredHome | 1:dd07e1deec6c | 335 | } |
WiredHome | 1:dd07e1deec6c | 336 | /// - 'd' duty cycle entry |
WiredHome | 1:dd07e1deec6c | 337 | /// - 'f' frequency entry |
WiredHome | 1:dd07e1deec6c | 338 | /// - 'p' period entry |
WiredHome | 1:dd07e1deec6c | 339 | /// - 'v' voltage entry |
WiredHome | 1:dd07e1deec6c | 340 | /// - 'o' offset voltage entry |
WiredHome | 1:dd07e1deec6c | 341 | /// - '0'-'9','.' numeric entry |
WiredHome | 1:dd07e1deec6c | 342 | /// - <enter> complete numeric entry |
WiredHome | 1:dd07e1deec6c | 343 | /// - <esc> abandon numeric entry |
WiredHome | 1:dd07e1deec6c | 344 | /// - <nul> do nothing, just poll |
WiredHome | 1:dd07e1deec6c | 345 | switch (c) { |
WiredHome | 1:dd07e1deec6c | 346 | case '?': |
WiredHome | 1:dd07e1deec6c | 347 | ShowMenu(); |
WiredHome | 1:dd07e1deec6c | 348 | break; |
WiredHome | 1:dd07e1deec6c | 349 | case 'S': |
WiredHome | 1:dd07e1deec6c | 350 | SelectWaveformMode(SG_SINE); |
WiredHome | 1:dd07e1deec6c | 351 | signal->SetSignalFrequency(SignalGenerator::SinusSignal, frequency); |
WiredHome | 1:dd07e1deec6c | 352 | //ret = SG_SINE; |
WiredHome | 1:dd07e1deec6c | 353 | break; |
WiredHome | 1:dd07e1deec6c | 354 | case 'Q': |
WiredHome | 1:dd07e1deec6c | 355 | SelectWaveformMode(SG_SQUARE); |
WiredHome | 1:dd07e1deec6c | 356 | signal->SetSignalFrequency(SignalGenerator::SquareSignal, frequency); |
WiredHome | 1:dd07e1deec6c | 357 | //ret = SG_SQUARE; |
WiredHome | 1:dd07e1deec6c | 358 | break; |
WiredHome | 1:dd07e1deec6c | 359 | case 'T': |
WiredHome | 1:dd07e1deec6c | 360 | SelectWaveformMode(SG_TRIANGLE); |
WiredHome | 1:dd07e1deec6c | 361 | signal->SetSignalFrequency(SignalGenerator::TriangleSignal, frequency); |
WiredHome | 1:dd07e1deec6c | 362 | //ret = SG_TRIANGLE; |
WiredHome | 1:dd07e1deec6c | 363 | break; |
WiredHome | 1:dd07e1deec6c | 364 | case 'W': |
WiredHome | 1:dd07e1deec6c | 365 | SelectWaveformMode(SG_SAWTOOTH); |
WiredHome | 1:dd07e1deec6c | 366 | signal->SetSignalFrequency(SignalGenerator::SawtoothSignal, frequency); |
WiredHome | 1:dd07e1deec6c | 367 | //ret = SG_SAWTOOTH; |
WiredHome | 1:dd07e1deec6c | 368 | break; |
WiredHome | 1:dd07e1deec6c | 369 | case 'U': |
WiredHome | 1:dd07e1deec6c | 370 | SelectWaveformMode(SG_USER); |
WiredHome | 1:dd07e1deec6c | 371 | //ret = SG_USER; |
WiredHome | 1:dd07e1deec6c | 372 | break; |
WiredHome | 1:dd07e1deec6c | 373 | case '0': |
WiredHome | 1:dd07e1deec6c | 374 | case '1': |
WiredHome | 1:dd07e1deec6c | 375 | case '2': |
WiredHome | 1:dd07e1deec6c | 376 | case '3': |
WiredHome | 1:dd07e1deec6c | 377 | case '4': |
WiredHome | 1:dd07e1deec6c | 378 | case '5': |
WiredHome | 1:dd07e1deec6c | 379 | case '6': |
WiredHome | 1:dd07e1deec6c | 380 | case '7': |
WiredHome | 1:dd07e1deec6c | 381 | case '8': |
WiredHome | 1:dd07e1deec6c | 382 | case '9': |
WiredHome | 1:dd07e1deec6c | 383 | case '.': |
WiredHome | 1:dd07e1deec6c | 384 | case '-': |
WiredHome | 1:dd07e1deec6c | 385 | if (EntryMd) { |
WiredHome | 1:dd07e1deec6c | 386 | if (textLen<8) { |
WiredHome | 1:dd07e1deec6c | 387 | textBuffer[textLen++] = c; |
WiredHome | 1:dd07e1deec6c | 388 | textBuffer[textLen] = '\0'; |
WiredHome | 1:dd07e1deec6c | 389 | updateTextWindow(); |
WiredHome | 1:dd07e1deec6c | 390 | } |
WiredHome | 1:dd07e1deec6c | 391 | } |
WiredHome | 1:dd07e1deec6c | 392 | break; |
WiredHome | 1:dd07e1deec6c | 393 | case '\x08': |
WiredHome | 1:dd07e1deec6c | 394 | if (EntryMd) { |
WiredHome | 1:dd07e1deec6c | 395 | if (textLen) { |
WiredHome | 1:dd07e1deec6c | 396 | textLen--; |
WiredHome | 1:dd07e1deec6c | 397 | textBuffer[textLen] = '\0'; |
WiredHome | 1:dd07e1deec6c | 398 | updateTextWindow(); |
WiredHome | 1:dd07e1deec6c | 399 | } |
WiredHome | 1:dd07e1deec6c | 400 | } |
WiredHome | 1:dd07e1deec6c | 401 | break; |
WiredHome | 1:dd07e1deec6c | 402 | case '\x1B': |
WiredHome | 1:dd07e1deec6c | 403 | textBuffer[0] = '\0'; |
WiredHome | 1:dd07e1deec6c | 404 | textLen = 0; |
WiredHome | 1:dd07e1deec6c | 405 | EntryMd = SG_NONE; |
WiredHome | 1:dd07e1deec6c | 406 | resetDataEntry(); |
WiredHome | 1:dd07e1deec6c | 407 | break; |
WiredHome | 1:dd07e1deec6c | 408 | case '\r': |
WiredHome | 1:dd07e1deec6c | 409 | case '\n': |
WiredHome | 1:dd07e1deec6c | 410 | if (EntryMd) { |
WiredHome | 1:dd07e1deec6c | 411 | if (strlen(textBuffer)) { |
WiredHome | 1:dd07e1deec6c | 412 | switch (EntryMd) { |
WiredHome | 1:dd07e1deec6c | 413 | case SG_DUTY: |
WiredHome | 1:dd07e1deec6c | 414 | SetDutyCycle(atof(textBuffer)); |
WiredHome | 1:dd07e1deec6c | 415 | break; |
WiredHome | 1:dd07e1deec6c | 416 | case SG_FREQ: |
WiredHome | 1:dd07e1deec6c | 417 | SetFrequency(atof(textBuffer)); |
WiredHome | 1:dd07e1deec6c | 418 | break; |
WiredHome | 1:dd07e1deec6c | 419 | case SG_PERI: |
WiredHome | 1:dd07e1deec6c | 420 | SetPeriod(atof(textBuffer)); |
WiredHome | 1:dd07e1deec6c | 421 | break; |
WiredHome | 1:dd07e1deec6c | 422 | case SG_VOLT: |
WiredHome | 1:dd07e1deec6c | 423 | SetVoltagePeakToPeak(atof(textBuffer)); |
WiredHome | 1:dd07e1deec6c | 424 | break; |
WiredHome | 1:dd07e1deec6c | 425 | case SG_OFFS: |
WiredHome | 1:dd07e1deec6c | 426 | SetVoltageOffset(atof(textBuffer)); |
WiredHome | 1:dd07e1deec6c | 427 | break; |
WiredHome | 1:dd07e1deec6c | 428 | default: |
WiredHome | 1:dd07e1deec6c | 429 | break; |
WiredHome | 1:dd07e1deec6c | 430 | } |
WiredHome | 1:dd07e1deec6c | 431 | } |
WiredHome | 1:dd07e1deec6c | 432 | EntryMd = SG_NONE; |
WiredHome | 1:dd07e1deec6c | 433 | resetDataEntry(); |
WiredHome | 1:dd07e1deec6c | 434 | } |
WiredHome | 1:dd07e1deec6c | 435 | break; |
WiredHome | 1:dd07e1deec6c | 436 | case '>': |
WiredHome | 1:dd07e1deec6c | 437 | switch (EntryMd) { |
WiredHome | 1:dd07e1deec6c | 438 | case SG_DUTY: |
WiredHome | 1:dd07e1deec6c | 439 | SetDutyCycle(dutycycle + 1.0); |
WiredHome | 1:dd07e1deec6c | 440 | break; |
WiredHome | 1:dd07e1deec6c | 441 | case SG_FREQ: |
WiredHome | 1:dd07e1deec6c | 442 | SetFrequency(frequency + 1.0); |
WiredHome | 1:dd07e1deec6c | 443 | break; |
WiredHome | 1:dd07e1deec6c | 444 | case SG_PERI: |
WiredHome | 1:dd07e1deec6c | 445 | SetPeriod(1/frequency + 0.001); |
WiredHome | 1:dd07e1deec6c | 446 | break; |
WiredHome | 1:dd07e1deec6c | 447 | case SG_VOLT: |
WiredHome | 1:dd07e1deec6c | 448 | SetVoltagePeakToPeak(voltage + 0.1); |
WiredHome | 1:dd07e1deec6c | 449 | break; |
WiredHome | 1:dd07e1deec6c | 450 | case SG_OFFS: |
WiredHome | 1:dd07e1deec6c | 451 | SetVoltageOffset(offset + 0.01); |
WiredHome | 1:dd07e1deec6c | 452 | break; |
WiredHome | 1:dd07e1deec6c | 453 | default: |
WiredHome | 1:dd07e1deec6c | 454 | break; |
WiredHome | 1:dd07e1deec6c | 455 | } |
WiredHome | 1:dd07e1deec6c | 456 | break; |
WiredHome | 1:dd07e1deec6c | 457 | case '<': |
WiredHome | 1:dd07e1deec6c | 458 | switch (EntryMd) { |
WiredHome | 1:dd07e1deec6c | 459 | case SG_DUTY: |
WiredHome | 1:dd07e1deec6c | 460 | SetDutyCycle(dutycycle - 1.0); |
WiredHome | 1:dd07e1deec6c | 461 | break; |
WiredHome | 1:dd07e1deec6c | 462 | case SG_FREQ: |
WiredHome | 1:dd07e1deec6c | 463 | SetFrequency(frequency - 1.0); |
WiredHome | 1:dd07e1deec6c | 464 | break; |
WiredHome | 1:dd07e1deec6c | 465 | case SG_PERI: |
WiredHome | 1:dd07e1deec6c | 466 | SetPeriod(1/frequency - 0.001); |
WiredHome | 1:dd07e1deec6c | 467 | break; |
WiredHome | 1:dd07e1deec6c | 468 | case SG_VOLT: |
WiredHome | 1:dd07e1deec6c | 469 | SetVoltagePeakToPeak(voltage - 0.1); |
WiredHome | 1:dd07e1deec6c | 470 | break; |
WiredHome | 1:dd07e1deec6c | 471 | case SG_OFFS: |
WiredHome | 1:dd07e1deec6c | 472 | SetVoltageOffset(offset - 0.01); |
WiredHome | 1:dd07e1deec6c | 473 | break; |
WiredHome | 1:dd07e1deec6c | 474 | default: |
WiredHome | 1:dd07e1deec6c | 475 | break; |
WiredHome | 1:dd07e1deec6c | 476 | } |
WiredHome | 1:dd07e1deec6c | 477 | break; |
WiredHome | 1:dd07e1deec6c | 478 | case 'd': |
WiredHome | 1:dd07e1deec6c | 479 | if (EntryMd != SG_DUTY) { |
WiredHome | 1:dd07e1deec6c | 480 | resetDataEntry(); |
WiredHome | 1:dd07e1deec6c | 481 | EntryMd = SG_DUTY; |
WiredHome | 1:dd07e1deec6c | 482 | DrawKeypadEnabled(true); |
WiredHome | 1:dd07e1deec6c | 483 | updateDutyCycle(); |
WiredHome | 1:dd07e1deec6c | 484 | } else { |
WiredHome | 1:dd07e1deec6c | 485 | EntryMd = SG_NONE; |
WiredHome | 1:dd07e1deec6c | 486 | resetDataEntry(); |
WiredHome | 1:dd07e1deec6c | 487 | } |
WiredHome | 1:dd07e1deec6c | 488 | break; |
WiredHome | 1:dd07e1deec6c | 489 | case 'f': |
WiredHome | 1:dd07e1deec6c | 490 | if (EntryMd != SG_FREQ) { |
WiredHome | 1:dd07e1deec6c | 491 | resetDataEntry(); |
WiredHome | 1:dd07e1deec6c | 492 | EntryMd = SG_FREQ; |
WiredHome | 1:dd07e1deec6c | 493 | DrawKeypadEnabled(true); |
WiredHome | 1:dd07e1deec6c | 494 | updateFrequency(); |
WiredHome | 1:dd07e1deec6c | 495 | } else { |
WiredHome | 1:dd07e1deec6c | 496 | EntryMd = SG_NONE; |
WiredHome | 1:dd07e1deec6c | 497 | resetDataEntry(); |
WiredHome | 1:dd07e1deec6c | 498 | } |
WiredHome | 1:dd07e1deec6c | 499 | break; |
WiredHome | 1:dd07e1deec6c | 500 | case 'p': |
WiredHome | 1:dd07e1deec6c | 501 | if (EntryMd != SG_PERI) { |
WiredHome | 1:dd07e1deec6c | 502 | resetDataEntry(); |
WiredHome | 1:dd07e1deec6c | 503 | EntryMd = SG_PERI; |
WiredHome | 1:dd07e1deec6c | 504 | DrawKeypadEnabled(true); |
WiredHome | 1:dd07e1deec6c | 505 | updatePeriod(); |
WiredHome | 1:dd07e1deec6c | 506 | } else { |
WiredHome | 1:dd07e1deec6c | 507 | EntryMd = SG_NONE; |
WiredHome | 1:dd07e1deec6c | 508 | resetDataEntry(); |
WiredHome | 1:dd07e1deec6c | 509 | } |
WiredHome | 1:dd07e1deec6c | 510 | break; |
WiredHome | 1:dd07e1deec6c | 511 | case 'v': |
WiredHome | 1:dd07e1deec6c | 512 | if (EntryMd != SG_VOLT) { |
WiredHome | 1:dd07e1deec6c | 513 | resetDataEntry(); |
WiredHome | 1:dd07e1deec6c | 514 | EntryMd = SG_VOLT; |
WiredHome | 1:dd07e1deec6c | 515 | DrawKeypadEnabled(true); |
WiredHome | 1:dd07e1deec6c | 516 | updateVoltage(); |
WiredHome | 1:dd07e1deec6c | 517 | } else { |
WiredHome | 1:dd07e1deec6c | 518 | EntryMd = SG_NONE; |
WiredHome | 1:dd07e1deec6c | 519 | resetDataEntry(); |
WiredHome | 1:dd07e1deec6c | 520 | } |
WiredHome | 1:dd07e1deec6c | 521 | break; |
WiredHome | 1:dd07e1deec6c | 522 | case 'o': |
WiredHome | 1:dd07e1deec6c | 523 | if (EntryMd != SG_OFFS) { |
WiredHome | 1:dd07e1deec6c | 524 | resetDataEntry(); |
WiredHome | 1:dd07e1deec6c | 525 | EntryMd = SG_OFFS; |
WiredHome | 1:dd07e1deec6c | 526 | DrawKeypadEnabled(true); |
WiredHome | 1:dd07e1deec6c | 527 | updateOffset(); |
WiredHome | 1:dd07e1deec6c | 528 | } else { |
WiredHome | 1:dd07e1deec6c | 529 | EntryMd = SG_NONE; |
WiredHome | 1:dd07e1deec6c | 530 | resetDataEntry(); |
WiredHome | 1:dd07e1deec6c | 531 | } |
WiredHome | 1:dd07e1deec6c | 532 | break; |
WiredHome | 1:dd07e1deec6c | 533 | default: |
WiredHome | 1:dd07e1deec6c | 534 | break; |
WiredHome | 1:dd07e1deec6c | 535 | } |
WiredHome | 1:dd07e1deec6c | 536 | return ret; |
WiredHome | 1:dd07e1deec6c | 537 | } |
WiredHome | 1:dd07e1deec6c | 538 | |
WiredHome | 1:dd07e1deec6c | 539 | bool SignalGenDisplay::SelectWaveformMode(SG_Mode _mode) { |
WiredHome | 1:dd07e1deec6c | 540 | if (/* _mode >= SG_SINE && */ _mode <= SG_USER) { |
WiredHome | 1:dd07e1deec6c | 541 | mode= _mode; |
WiredHome | 1:dd07e1deec6c | 542 | for (int i=0; i<ButtonCount; i++) { |
WiredHome | 1:dd07e1deec6c | 543 | DrawButton(UI_Buttons[i], (UI_ModeList[i] == mode) ? true : false, UI_ModeList[i], true); |
WiredHome | 1:dd07e1deec6c | 544 | } |
WiredHome | 1:dd07e1deec6c | 545 | UpdateScope(); |
WiredHome | 1:dd07e1deec6c | 546 | return true; |
WiredHome | 1:dd07e1deec6c | 547 | } else { |
WiredHome | 1:dd07e1deec6c | 548 | return false; |
WiredHome | 1:dd07e1deec6c | 549 | } |
WiredHome | 1:dd07e1deec6c | 550 | } |
WiredHome | 1:dd07e1deec6c | 551 | |
WiredHome | 1:dd07e1deec6c | 552 | bool SignalGenDisplay::SetDutyCycle(float _dutyCycle) { |
WiredHome | 1:dd07e1deec6c | 553 | if (_dutyCycle >= 5 && _dutyCycle <= 95) { |
WiredHome | 1:dd07e1deec6c | 554 | dutycycle = _dutyCycle; |
WiredHome | 1:dd07e1deec6c | 555 | updateDutyCycle(); |
WiredHome | 1:dd07e1deec6c | 556 | UpdateScope(); |
WiredHome | 1:dd07e1deec6c | 557 | return true; |
WiredHome | 1:dd07e1deec6c | 558 | } else { |
WiredHome | 1:dd07e1deec6c | 559 | return false; |
WiredHome | 1:dd07e1deec6c | 560 | } |
WiredHome | 1:dd07e1deec6c | 561 | } |
WiredHome | 1:dd07e1deec6c | 562 | |
WiredHome | 1:dd07e1deec6c | 563 | bool SignalGenDisplay::SetFrequency(float _frequency) { |
WiredHome | 1:dd07e1deec6c | 564 | printf("-> SetFrequency(%f)\r\n", _frequency); |
WiredHome | 1:dd07e1deec6c | 565 | if (_frequency >= 1.0 && _frequency <= 1.0E6) { |
WiredHome | 1:dd07e1deec6c | 566 | frequency = _frequency; |
WiredHome | 1:dd07e1deec6c | 567 | updateFrequency(); |
WiredHome | 1:dd07e1deec6c | 568 | updatePeriod(); |
WiredHome | 1:dd07e1deec6c | 569 | UpdateScope(); |
WiredHome | 1:dd07e1deec6c | 570 | printf(" end SetFrequency\r\n"); |
WiredHome | 1:dd07e1deec6c | 571 | return true; |
WiredHome | 1:dd07e1deec6c | 572 | } else { |
WiredHome | 1:dd07e1deec6c | 573 | printf(" end SetFrequency - out of range\r\n"); |
WiredHome | 1:dd07e1deec6c | 574 | return false; |
WiredHome | 1:dd07e1deec6c | 575 | } |
WiredHome | 1:dd07e1deec6c | 576 | } |
WiredHome | 1:dd07e1deec6c | 577 | |
WiredHome | 1:dd07e1deec6c | 578 | bool SignalGenDisplay::SetPeriod(float _period) { |
WiredHome | 1:dd07e1deec6c | 579 | if (_period >= 1.0E-6 && _period <= 1.0) { |
WiredHome | 1:dd07e1deec6c | 580 | frequency = 1/_period; |
WiredHome | 1:dd07e1deec6c | 581 | updatePeriod(); |
WiredHome | 1:dd07e1deec6c | 582 | updateFrequency(); |
WiredHome | 1:dd07e1deec6c | 583 | UpdateScope(); |
WiredHome | 1:dd07e1deec6c | 584 | return true; |
WiredHome | 1:dd07e1deec6c | 585 | } else { |
WiredHome | 1:dd07e1deec6c | 586 | return false; |
WiredHome | 1:dd07e1deec6c | 587 | } |
WiredHome | 1:dd07e1deec6c | 588 | } |
WiredHome | 1:dd07e1deec6c | 589 | |
WiredHome | 1:dd07e1deec6c | 590 | bool SignalGenDisplay::SetVoltagePeakToPeak(float _voltage) { |
WiredHome | 1:dd07e1deec6c | 591 | if (_voltage >= 0.0 && _voltage <= 3.3) { |
WiredHome | 1:dd07e1deec6c | 592 | voltage = _voltage; |
WiredHome | 1:dd07e1deec6c | 593 | updateVoltage(); |
WiredHome | 1:dd07e1deec6c | 594 | UpdateScope(); |
WiredHome | 1:dd07e1deec6c | 595 | return true; |
WiredHome | 1:dd07e1deec6c | 596 | } else { |
WiredHome | 1:dd07e1deec6c | 597 | return false; |
WiredHome | 1:dd07e1deec6c | 598 | } |
WiredHome | 1:dd07e1deec6c | 599 | } |
WiredHome | 1:dd07e1deec6c | 600 | |
WiredHome | 1:dd07e1deec6c | 601 | bool SignalGenDisplay::SetVoltageOffset(float _voltage) { |
WiredHome | 1:dd07e1deec6c | 602 | if (_voltage >= -1.65 && _voltage <= 1.65) { |
WiredHome | 1:dd07e1deec6c | 603 | if (abs(_voltage) < 0.008) // if binary precision slips it, fix it |
WiredHome | 1:dd07e1deec6c | 604 | _voltage = 0.0; |
WiredHome | 1:dd07e1deec6c | 605 | offset = _voltage; |
WiredHome | 1:dd07e1deec6c | 606 | updateOffset(); |
WiredHome | 1:dd07e1deec6c | 607 | UpdateScope(); |
WiredHome | 1:dd07e1deec6c | 608 | return true; |
WiredHome | 1:dd07e1deec6c | 609 | } else { |
WiredHome | 1:dd07e1deec6c | 610 | return false; |
WiredHome | 1:dd07e1deec6c | 611 | } |
WiredHome | 1:dd07e1deec6c | 612 | } |
WiredHome | 1:dd07e1deec6c | 613 | |
WiredHome | 1:dd07e1deec6c | 614 | // ######################## Private Methods past here ####################### |
WiredHome | 1:dd07e1deec6c | 615 | |
WiredHome | 1:dd07e1deec6c | 616 | void SignalGenDisplay::UpdateScope(void) { |
WiredHome | 1:dd07e1deec6c | 617 | printf("-> UpdateScope()\r\n"); |
WiredHome | 1:dd07e1deec6c | 618 | ClearScope(); |
WiredHome | 1:dd07e1deec6c | 619 | rect_t r; |
WiredHome | 1:dd07e1deec6c | 620 | |
WiredHome | 1:dd07e1deec6c | 621 | r.p1.x = UI_SCOPE_RECT.p1.x + SC_LEFT_MARGIN; |
WiredHome | 1:dd07e1deec6c | 622 | r.p1.y = UI_SCOPE_RECT.p1.y + SC_TOP_MARGIN; |
WiredHome | 1:dd07e1deec6c | 623 | r.p2.x = UI_SCOPE_RECT.p2.x - SC_RIGHT_MARGIN; |
WiredHome | 1:dd07e1deec6c | 624 | r.p2.y = UI_SCOPE_RECT.p2.y - SC_BOT_MARGIN; |
WiredHome | 1:dd07e1deec6c | 625 | lcd->rect(r, WaveOutlineColor); |
WiredHome | 1:dd07e1deec6c | 626 | |
WiredHome | 1:dd07e1deec6c | 627 | // Draw the Peak to Peak markers |
WiredHome | 1:dd07e1deec6c | 628 | lcd->line(r.p1.x,r.p1.y, r.p2.x+3*SC_RIGHT_MARGIN/4,r.p1.y, UI_VP2PColor); |
WiredHome | 1:dd07e1deec6c | 629 | lcd->line(r.p1.x,r.p2.y, r.p2.x+3*SC_RIGHT_MARGIN/4,r.p2.y, UI_VP2PColor); |
WiredHome | 1:dd07e1deec6c | 630 | lcd->line(r.p2.x+3*SC_RIGHT_MARGIN/4-3,r.p1.y, r.p2.x+3*SC_RIGHT_MARGIN/4-3,r.p2.y, UI_VP2PColor); |
WiredHome | 1:dd07e1deec6c | 631 | lcd->filltriangle( |
WiredHome | 1:dd07e1deec6c | 632 | r.p2.x+3*SC_RIGHT_MARGIN/4-3,r.p1.y, |
WiredHome | 1:dd07e1deec6c | 633 | r.p2.x+3*SC_RIGHT_MARGIN/4-3+2,r.p1.y+3, |
WiredHome | 1:dd07e1deec6c | 634 | r.p2.x+3*SC_RIGHT_MARGIN/4-3-2,r.p1.y+3, |
WiredHome | 1:dd07e1deec6c | 635 | UI_VP2PColor); |
WiredHome | 1:dd07e1deec6c | 636 | lcd->filltriangle( |
WiredHome | 1:dd07e1deec6c | 637 | r.p2.x+3*SC_RIGHT_MARGIN/4-3,r.p2.y, |
WiredHome | 1:dd07e1deec6c | 638 | r.p2.x+3*SC_RIGHT_MARGIN/4-3+2,r.p2.y-3, |
WiredHome | 1:dd07e1deec6c | 639 | r.p2.x+3*SC_RIGHT_MARGIN/4-3-2,r.p2.y-3, |
WiredHome | 1:dd07e1deec6c | 640 | UI_VP2PColor); |
WiredHome | 1:dd07e1deec6c | 641 | |
WiredHome | 1:dd07e1deec6c | 642 | // Draw the offset voltage markers |
WiredHome | 1:dd07e1deec6c | 643 | loc_t y = (r.p1.y + r.p2.y)/2; |
WiredHome | 1:dd07e1deec6c | 644 | dim_t w = (r.p2.x + SC_RIGHT_MARGIN/3 - r.p1.x) / 35; |
WiredHome | 1:dd07e1deec6c | 645 | dim_t h = (r.p2.y - r.p1.y); |
WiredHome | 1:dd07e1deec6c | 646 | for (int i=0; i<=35+1; i++) { |
WiredHome | 1:dd07e1deec6c | 647 | if ((i & 1) == 0) { |
WiredHome | 1:dd07e1deec6c | 648 | lcd->line(r.p1.x + i * w,y, r.p1.x + (i+1) * w, y, UI_VOffsetColor); |
WiredHome | 1:dd07e1deec6c | 649 | } |
WiredHome | 1:dd07e1deec6c | 650 | } |
WiredHome | 1:dd07e1deec6c | 651 | switch (sgn(offset)) { |
WiredHome | 1:dd07e1deec6c | 652 | default: |
WiredHome | 1:dd07e1deec6c | 653 | case 0: |
WiredHome | 1:dd07e1deec6c | 654 | break; |
WiredHome | 1:dd07e1deec6c | 655 | case -1: |
WiredHome | 1:dd07e1deec6c | 656 | case 1: |
WiredHome | 1:dd07e1deec6c | 657 | lcd->line(r.p2.x+SC_RIGHT_MARGIN/3-3,y+sgn(offset)*(h/2+7), r.p2.x+SC_RIGHT_MARGIN/3-3,y, UI_VOffsetColor); |
WiredHome | 1:dd07e1deec6c | 658 | lcd->filltriangle( |
WiredHome | 1:dd07e1deec6c | 659 | r.p2.x+SC_RIGHT_MARGIN/3-3,y, |
WiredHome | 1:dd07e1deec6c | 660 | r.p2.x+SC_RIGHT_MARGIN/3-3+2,y+sgn(offset)*3, |
WiredHome | 1:dd07e1deec6c | 661 | r.p2.x+SC_RIGHT_MARGIN/3-3-2,y+sgn(offset)*3, |
WiredHome | 1:dd07e1deec6c | 662 | UI_VOffsetColor); |
WiredHome | 1:dd07e1deec6c | 663 | if (abs(offset) > voltage/2) |
WiredHome | 1:dd07e1deec6c | 664 | lcd->line(r.p1.x,y+sgn(offset)*(h/2+7), r.p2.x+SC_RIGHT_MARGIN/3,y+sgn(offset)*(h/2+7), UI_VOffsetColor); |
WiredHome | 1:dd07e1deec6c | 665 | else |
WiredHome | 1:dd07e1deec6c | 666 | lcd->line(r.p1.x,y+(offset/voltage)*h, r.p2.x+SC_RIGHT_MARGIN/3,y+(offset/voltage)*h, UI_VOffsetColor); |
WiredHome | 1:dd07e1deec6c | 667 | break; |
WiredHome | 1:dd07e1deec6c | 668 | } |
WiredHome | 1:dd07e1deec6c | 669 | |
WiredHome | 1:dd07e1deec6c | 670 | // Draw the Frequency marker |
WiredHome | 1:dd07e1deec6c | 671 | w = r.p2.x - r.p1.x; |
WiredHome | 1:dd07e1deec6c | 672 | dim_t dc = dutycycle/100.0 * 1*w/2; |
WiredHome | 1:dd07e1deec6c | 673 | lcd->line(r.p1.x,r.p1.y, r.p1.x,r.p2.y+3*SC_BOT_MARGIN/4, UI_FreqColor); |
WiredHome | 1:dd07e1deec6c | 674 | lcd->line(r.p1.x+1*w/2,r.p1.y, r.p1.x+1*w/2,r.p2.y+3*SC_BOT_MARGIN/4, UI_FreqColor); |
WiredHome | 1:dd07e1deec6c | 675 | lcd->line(r.p1.x,r.p2.y+3*SC_BOT_MARGIN/4-3, r.p1.x+1*w/2,r.p2.y+3*SC_BOT_MARGIN/4-3, UI_FreqColor); |
WiredHome | 1:dd07e1deec6c | 676 | lcd->filltriangle( |
WiredHome | 1:dd07e1deec6c | 677 | r.p1.x+0,r.p2.y+3*SC_BOT_MARGIN/4-3, |
WiredHome | 1:dd07e1deec6c | 678 | r.p1.x+3,r.p2.y+3*SC_BOT_MARGIN/4-3-2, |
WiredHome | 1:dd07e1deec6c | 679 | r.p1.x+3,r.p2.y+3*SC_BOT_MARGIN/4-3+2, |
WiredHome | 1:dd07e1deec6c | 680 | UI_FreqColor); |
WiredHome | 1:dd07e1deec6c | 681 | lcd->filltriangle( |
WiredHome | 1:dd07e1deec6c | 682 | r.p1.x+1*w/2-0,r.p2.y+3*SC_BOT_MARGIN/4-3, |
WiredHome | 1:dd07e1deec6c | 683 | r.p1.x+1*w/2-3,r.p2.y+3*SC_BOT_MARGIN/4-3-2, |
WiredHome | 1:dd07e1deec6c | 684 | r.p1.x+1*w/2-3,r.p2.y+3*SC_BOT_MARGIN/4-3+2, |
WiredHome | 1:dd07e1deec6c | 685 | UI_FreqColor); |
WiredHome | 1:dd07e1deec6c | 686 | |
WiredHome | 1:dd07e1deec6c | 687 | // Draw the Duty Cycle markers |
WiredHome | 1:dd07e1deec6c | 688 | lcd->line(r.p1.x,r.p1.y, r.p1.x,r.p2.y+2*SC_BOT_MARGIN/4, UI_DutyColor); |
WiredHome | 1:dd07e1deec6c | 689 | lcd->line(r.p1.x + dc,r.p1.y, r.p1.x + dc,r.p2.y+2*SC_BOT_MARGIN/4, UI_DutyColor); |
WiredHome | 1:dd07e1deec6c | 690 | point_t p; |
WiredHome | 1:dd07e1deec6c | 691 | p.x = r.p1.x; |
WiredHome | 1:dd07e1deec6c | 692 | p.y = r.p2.y+2*SC_BOT_MARGIN/4-3; |
WiredHome | 1:dd07e1deec6c | 693 | lcd->line(p.x,p.y, p.x+dc,p.y, UI_DutyColor); |
WiredHome | 1:dd07e1deec6c | 694 | lcd->filltriangle( |
WiredHome | 1:dd07e1deec6c | 695 | p.x,p.y, |
WiredHome | 1:dd07e1deec6c | 696 | p.x+3,p.y-2, |
WiredHome | 1:dd07e1deec6c | 697 | p.x+3,p.y+2, |
WiredHome | 1:dd07e1deec6c | 698 | UI_DutyColor); |
WiredHome | 1:dd07e1deec6c | 699 | p.x = r.p1.x + dc; |
WiredHome | 1:dd07e1deec6c | 700 | lcd->filltriangle( |
WiredHome | 1:dd07e1deec6c | 701 | p.x,p.y, |
WiredHome | 1:dd07e1deec6c | 702 | p.x-3,p.y-2, |
WiredHome | 1:dd07e1deec6c | 703 | p.x-3,p.y+2, |
WiredHome | 1:dd07e1deec6c | 704 | UI_DutyColor); |
WiredHome | 1:dd07e1deec6c | 705 | DrawWaveform(r, mode, White); |
WiredHome | 1:dd07e1deec6c | 706 | printf(" end UpdateScope()\r\n"); |
WiredHome | 1:dd07e1deec6c | 707 | } |
WiredHome | 1:dd07e1deec6c | 708 | |
WiredHome | 1:dd07e1deec6c | 709 | // ++ +----+ + + |
WiredHome | 1:dd07e1deec6c | 710 | // . . | | / \ /| |
WiredHome | 1:dd07e1deec6c | 711 | // . . | | | / \ / / | |
WiredHome | 1:dd07e1deec6c | 712 | // . | | \ / / | |
WiredHome | 1:dd07e1deec6c | 713 | // ++ +----+ + + + |
WiredHome | 1:dd07e1deec6c | 714 | // |
WiredHome | 1:dd07e1deec6c | 715 | void SignalGenDisplay::DrawWaveform(rect_t r, SG_Mode mode, color_t color, float dutycycleOverride) { |
WiredHome | 1:dd07e1deec6c | 716 | loc_t x,y; |
WiredHome | 1:dd07e1deec6c | 717 | loc_t y0 = (r.p1.y + r.p2.y)/2; |
WiredHome | 1:dd07e1deec6c | 718 | dim_t w = r.p2.x - r.p1.x; |
WiredHome | 1:dd07e1deec6c | 719 | dim_t dc = ((dutycycleOverride >= 5.0) ? dutycycleOverride : dutycycle)/100.0 * 1*w/2; |
WiredHome | 1:dd07e1deec6c | 720 | dim_t a = (r.p2.y - r.p1.y)/2; |
WiredHome | 1:dd07e1deec6c | 721 | float v; |
WiredHome | 1:dd07e1deec6c | 722 | |
WiredHome | 1:dd07e1deec6c | 723 | switch (mode) { |
WiredHome | 1:dd07e1deec6c | 724 | case SG_SINE: |
WiredHome | 1:dd07e1deec6c | 725 | for (int cycle=0; cycle<2; cycle++) { |
WiredHome | 1:dd07e1deec6c | 726 | for (x=0; x<=dc; x++) { |
WiredHome | 1:dd07e1deec6c | 727 | v = offset + voltage/2 * sin(x * 1 * PI / dc); |
WiredHome | 1:dd07e1deec6c | 728 | v = rangelimit(v, SG_MIN_V, SG_MAX_V); |
WiredHome | 1:dd07e1deec6c | 729 | y = r.p2.y - 2 * a * v / SG_AOUT_FS; |
WiredHome | 1:dd07e1deec6c | 730 | lcd->pixel(r.p1.x + cycle * w/2 + x, y, color); |
WiredHome | 1:dd07e1deec6c | 731 | } |
WiredHome | 1:dd07e1deec6c | 732 | for (x=0; x<=(w/2-dc); x++) { |
WiredHome | 1:dd07e1deec6c | 733 | v = offset - voltage/2 * sin(x * 1 * PI / (w/2-dc)); |
WiredHome | 1:dd07e1deec6c | 734 | v = rangelimit(v, SG_MIN_V, SG_MAX_V); |
WiredHome | 1:dd07e1deec6c | 735 | y = r.p2.y - 2 * a * v / SG_AOUT_FS; |
WiredHome | 1:dd07e1deec6c | 736 | lcd->pixel(r.p1.x + cycle * w/2 + dc + x, y, color); |
WiredHome | 1:dd07e1deec6c | 737 | } |
WiredHome | 1:dd07e1deec6c | 738 | } |
WiredHome | 1:dd07e1deec6c | 739 | break; |
WiredHome | 1:dd07e1deec6c | 740 | case SG_SQUARE: |
WiredHome | 1:dd07e1deec6c | 741 | for (int cycle=0; cycle<2; cycle++) { |
WiredHome | 1:dd07e1deec6c | 742 | lcd->line(r.p1.x+cycle*w/2+0*w/8, y0, r.p1.x+cycle*w/2+0*w/8, y0-a, color); // rise |
WiredHome | 1:dd07e1deec6c | 743 | lcd->line(r.p1.x+cycle*w/2+0*w/8, y0-a, r.p1.x+cycle*w/2+dc, y0-a, color); // horz |
WiredHome | 1:dd07e1deec6c | 744 | lcd->line(r.p1.x+cycle*w/2+dc, y0-a, r.p1.x+cycle*w/2+dc, y0+a, color); // fall |
WiredHome | 1:dd07e1deec6c | 745 | lcd->line(r.p1.x+cycle*w/2+dc, y0+a, r.p1.x+cycle*w/2+4*w/8, y0+a, color); // horz |
WiredHome | 1:dd07e1deec6c | 746 | lcd->line(r.p1.x+cycle*w/2+4*w/8, y0+a, r.p1.x+cycle*w/2+4*w/8, y0, color); // rise |
WiredHome | 1:dd07e1deec6c | 747 | } |
WiredHome | 1:dd07e1deec6c | 748 | break; |
WiredHome | 1:dd07e1deec6c | 749 | case SG_TRIANGLE: |
WiredHome | 1:dd07e1deec6c | 750 | for (int cycle=0; cycle<2; cycle++) { |
WiredHome | 1:dd07e1deec6c | 751 | lcd->line(r.p1.x+cycle*w/2+0*w/8, y0+0, r.p1.x+cycle*w/2+dc/2, y0-a, color); // rise 2 |
WiredHome | 1:dd07e1deec6c | 752 | lcd->line(r.p1.x+cycle*w/2+dc/2, y0-a, r.p1.x+cycle*w/2+dc/1, y0, color); // fall 1 |
WiredHome | 1:dd07e1deec6c | 753 | lcd->line(r.p1.x+cycle*w/2+dc/1, y0, r.p1.x+cycle*w/2+(w/2+dc)/2, y0+a, color); // fall 2 |
WiredHome | 1:dd07e1deec6c | 754 | lcd->line(r.p1.x+cycle*w/2+(w/2+dc)/2, y0+a, r.p1.x+cycle*w/2+4*w/8, y0, color); // rise 1 |
WiredHome | 1:dd07e1deec6c | 755 | } |
WiredHome | 1:dd07e1deec6c | 756 | break; |
WiredHome | 1:dd07e1deec6c | 757 | case SG_SAWTOOTH: |
WiredHome | 1:dd07e1deec6c | 758 | for (int cycle=0; cycle<2; cycle++) { |
WiredHome | 1:dd07e1deec6c | 759 | lcd->line(r.p1.x+cycle*w/2+0*w/8+0, y0+a, r.p1.x+cycle*w/2+dc, y0, color); |
WiredHome | 1:dd07e1deec6c | 760 | lcd->line(r.p1.x+cycle*w/2+dc, y0, r.p1.x+cycle*w/2+4*w/8-1, y0-a, color); |
WiredHome | 1:dd07e1deec6c | 761 | lcd->line(r.p1.x+cycle*w/2+4*w/8-1, y0-a, r.p1.x+cycle*w/2+4*w/8, y0+a, color); |
WiredHome | 1:dd07e1deec6c | 762 | } |
WiredHome | 1:dd07e1deec6c | 763 | break; |
WiredHome | 1:dd07e1deec6c | 764 | case SG_USER: |
WiredHome | 1:dd07e1deec6c | 765 | lcd->line(r.p1.x, y0-1, r.p1.x+w, y0-1, color); |
WiredHome | 1:dd07e1deec6c | 766 | lcd->line(r.p1.x, y0-0, r.p1.x+w, y0-0, color); |
WiredHome | 1:dd07e1deec6c | 767 | lcd->line(r.p1.x, y0+1, r.p1.x+w, y0+1, color); |
WiredHome | 1:dd07e1deec6c | 768 | lcd->rect(r.p1.x+5*w/8, y0-a/4, r.p1.x+7*w/8, y0+a/4, color); |
WiredHome | 1:dd07e1deec6c | 769 | break; |
WiredHome | 1:dd07e1deec6c | 770 | } |
WiredHome | 1:dd07e1deec6c | 771 | } |
WiredHome | 1:dd07e1deec6c | 772 | |
WiredHome | 1:dd07e1deec6c | 773 | void SignalGenDisplay::ClearScope(void) { |
WiredHome | 1:dd07e1deec6c | 774 | // Scope area |
WiredHome | 1:dd07e1deec6c | 775 | rect_t r = UI_SCOPE_RECT; |
WiredHome | 1:dd07e1deec6c | 776 | lcd->fillrect(r, UI_ScopeBackColor); |
WiredHome | 1:dd07e1deec6c | 777 | lcd->rect(r, UI_ScopeFrameColor); |
WiredHome | 1:dd07e1deec6c | 778 | } |
WiredHome | 1:dd07e1deec6c | 779 | |
WiredHome | 1:dd07e1deec6c | 780 | void SignalGenDisplay::updateDutyCycle(void) { |
WiredHome | 1:dd07e1deec6c | 781 | rect_t r = Parameters[0]; // UI_DUTY_CYCLE_RECT; |
WiredHome | 1:dd07e1deec6c | 782 | color_t fcolor, bcolor; |
WiredHome | 1:dd07e1deec6c | 783 | |
WiredHome | 1:dd07e1deec6c | 784 | if (EntryMd != SG_DUTY) { |
WiredHome | 1:dd07e1deec6c | 785 | fcolor = UI_DutyColor; |
WiredHome | 1:dd07e1deec6c | 786 | bcolor = UI_ScopeBackColor; |
WiredHome | 1:dd07e1deec6c | 787 | } else { |
WiredHome | 1:dd07e1deec6c | 788 | fcolor = UI_ScopeBackColor; |
WiredHome | 1:dd07e1deec6c | 789 | bcolor = UI_DutyColor; |
WiredHome | 1:dd07e1deec6c | 790 | } |
WiredHome | 1:dd07e1deec6c | 791 | lcd->fillrect(r, bcolor); |
WiredHome | 1:dd07e1deec6c | 792 | lcd->foreground(fcolor); |
WiredHome | 1:dd07e1deec6c | 793 | lcd->background(bcolor); |
WiredHome | 1:dd07e1deec6c | 794 | lcd->SetTextCursor(r.p1.x+1, r.p1.y+1); |
WiredHome | 1:dd07e1deec6c | 795 | lcd->printf("%3.0f %%", dutycycle); |
WiredHome | 1:dd07e1deec6c | 796 | } |
WiredHome | 1:dd07e1deec6c | 797 | |
WiredHome | 1:dd07e1deec6c | 798 | void SignalGenDisplay::updateFrequency(void) { |
WiredHome | 1:dd07e1deec6c | 799 | rect_t r = Parameters[1]; // UI_FREQ_RECT; |
WiredHome | 1:dd07e1deec6c | 800 | color_t fcolor, bcolor; |
WiredHome | 1:dd07e1deec6c | 801 | |
WiredHome | 1:dd07e1deec6c | 802 | if (EntryMd != SG_FREQ) { |
WiredHome | 1:dd07e1deec6c | 803 | fcolor = UI_FreqColor; |
WiredHome | 1:dd07e1deec6c | 804 | bcolor = UI_ScopeBackColor; |
WiredHome | 1:dd07e1deec6c | 805 | } else { |
WiredHome | 1:dd07e1deec6c | 806 | fcolor = UI_ScopeBackColor; |
WiredHome | 1:dd07e1deec6c | 807 | bcolor = UI_FreqColor; |
WiredHome | 1:dd07e1deec6c | 808 | } |
WiredHome | 1:dd07e1deec6c | 809 | lcd->fillrect(r, bcolor); |
WiredHome | 1:dd07e1deec6c | 810 | lcd->foreground(fcolor); |
WiredHome | 1:dd07e1deec6c | 811 | lcd->background(bcolor); |
WiredHome | 1:dd07e1deec6c | 812 | lcd->SetTextCursor(r.p1.x+1, r.p1.y+1); |
WiredHome | 1:dd07e1deec6c | 813 | printf("EntryMode: %d, bg: %08X, fg: %08X\r\n", EntryMd, bcolor, fcolor); |
WiredHome | 1:dd07e1deec6c | 814 | if (frequency >= 1000.0) |
WiredHome | 1:dd07e1deec6c | 815 | lcd->printf("%8.3f kHz", frequency/1000); |
WiredHome | 1:dd07e1deec6c | 816 | else |
WiredHome | 1:dd07e1deec6c | 817 | lcd->printf("%8.3f Hz ", frequency); |
WiredHome | 1:dd07e1deec6c | 818 | } |
WiredHome | 1:dd07e1deec6c | 819 | |
WiredHome | 1:dd07e1deec6c | 820 | void SignalGenDisplay::updatePeriod(void) { |
WiredHome | 1:dd07e1deec6c | 821 | float period = 1/frequency; |
WiredHome | 1:dd07e1deec6c | 822 | rect_t r = Parameters[2]; // UI_PERIOD_RECT; |
WiredHome | 1:dd07e1deec6c | 823 | color_t fcolor, bcolor; |
WiredHome | 1:dd07e1deec6c | 824 | |
WiredHome | 1:dd07e1deec6c | 825 | if (EntryMd != SG_PERI) { |
WiredHome | 1:dd07e1deec6c | 826 | fcolor = UI_FreqColor; |
WiredHome | 1:dd07e1deec6c | 827 | bcolor = UI_ScopeBackColor; |
WiredHome | 1:dd07e1deec6c | 828 | } else { |
WiredHome | 1:dd07e1deec6c | 829 | fcolor = UI_ScopeBackColor; |
WiredHome | 1:dd07e1deec6c | 830 | bcolor = UI_FreqColor; |
WiredHome | 1:dd07e1deec6c | 831 | } |
WiredHome | 1:dd07e1deec6c | 832 | lcd->fillrect(r, bcolor); |
WiredHome | 1:dd07e1deec6c | 833 | lcd->foreground(fcolor); |
WiredHome | 1:dd07e1deec6c | 834 | lcd->background(bcolor); |
WiredHome | 1:dd07e1deec6c | 835 | lcd->SetTextCursor(r.p1.x+1, r.p1.y+1); |
WiredHome | 1:dd07e1deec6c | 836 | if (period < 0.001) |
WiredHome | 1:dd07e1deec6c | 837 | lcd->printf("%8.3f uS", period * 1000000); |
WiredHome | 1:dd07e1deec6c | 838 | else |
WiredHome | 1:dd07e1deec6c | 839 | lcd->printf("%8.3f mS", period * 1000); |
WiredHome | 1:dd07e1deec6c | 840 | } |
WiredHome | 1:dd07e1deec6c | 841 | |
WiredHome | 1:dd07e1deec6c | 842 | void SignalGenDisplay::updateVoltage(void) { |
WiredHome | 1:dd07e1deec6c | 843 | rect_t r = Parameters[3]; // UI_VP2P_RECT; |
WiredHome | 1:dd07e1deec6c | 844 | color_t fcolor, bcolor; |
WiredHome | 1:dd07e1deec6c | 845 | |
WiredHome | 1:dd07e1deec6c | 846 | if (EntryMd != SG_VOLT) { |
WiredHome | 1:dd07e1deec6c | 847 | fcolor = UI_VP2PColor; |
WiredHome | 1:dd07e1deec6c | 848 | bcolor = UI_ScopeBackColor; |
WiredHome | 1:dd07e1deec6c | 849 | } else { |
WiredHome | 1:dd07e1deec6c | 850 | fcolor = UI_ScopeBackColor; |
WiredHome | 1:dd07e1deec6c | 851 | bcolor = UI_VP2PColor; |
WiredHome | 1:dd07e1deec6c | 852 | } |
WiredHome | 1:dd07e1deec6c | 853 | lcd->fillrect(r, bcolor); |
WiredHome | 1:dd07e1deec6c | 854 | lcd->foreground(fcolor); |
WiredHome | 1:dd07e1deec6c | 855 | lcd->background(bcolor); |
WiredHome | 1:dd07e1deec6c | 856 | lcd->SetTextCursor(r.p1.x+1, r.p1.y+1); |
WiredHome | 1:dd07e1deec6c | 857 | lcd->printf("%5.1f v", voltage); |
WiredHome | 1:dd07e1deec6c | 858 | } |
WiredHome | 1:dd07e1deec6c | 859 | |
WiredHome | 1:dd07e1deec6c | 860 | void SignalGenDisplay::updateOffset(void) { |
WiredHome | 1:dd07e1deec6c | 861 | rect_t r = Parameters[4]; // UI_VOFFSET_RECT; |
WiredHome | 1:dd07e1deec6c | 862 | color_t fcolor, bcolor; |
WiredHome | 1:dd07e1deec6c | 863 | |
WiredHome | 1:dd07e1deec6c | 864 | if (EntryMd != SG_OFFS) { |
WiredHome | 1:dd07e1deec6c | 865 | fcolor = UI_VOffsetColor; |
WiredHome | 1:dd07e1deec6c | 866 | bcolor = UI_ScopeBackColor; |
WiredHome | 1:dd07e1deec6c | 867 | } else { |
WiredHome | 1:dd07e1deec6c | 868 | fcolor = UI_ScopeBackColor; |
WiredHome | 1:dd07e1deec6c | 869 | bcolor = UI_VOffsetColor; |
WiredHome | 1:dd07e1deec6c | 870 | } |
WiredHome | 1:dd07e1deec6c | 871 | lcd->fillrect(r, bcolor); |
WiredHome | 1:dd07e1deec6c | 872 | lcd->foreground(fcolor); |
WiredHome | 1:dd07e1deec6c | 873 | lcd->background(bcolor); |
WiredHome | 1:dd07e1deec6c | 874 | lcd->SetTextCursor(r.p1.x+1, r.p1.y+1); |
WiredHome | 1:dd07e1deec6c | 875 | lcd->printf("%+4.2f v", offset); |
WiredHome | 1:dd07e1deec6c | 876 | } |
WiredHome | 1:dd07e1deec6c | 877 | |
WiredHome | 1:dd07e1deec6c | 878 | void SignalGenDisplay::DrawKeypadEnabled(bool enable) { |
WiredHome | 1:dd07e1deec6c | 879 | for (int i=0; i<KeypadCount; i++) { |
WiredHome | 1:dd07e1deec6c | 880 | DrawButton(UI_Keypad[i], false, SG_KEYPAD, enable, i); |
WiredHome | 1:dd07e1deec6c | 881 | } |
WiredHome | 1:dd07e1deec6c | 882 | } |
WiredHome | 1:dd07e1deec6c | 883 | |
WiredHome | 1:dd07e1deec6c | 884 | void SignalGenDisplay::DrawButton(rect_t r, bool pressed, SG_Mode mode, bool enable, int label) { |
WiredHome | 1:dd07e1deec6c | 885 | rect_t wave; |
WiredHome | 1:dd07e1deec6c | 886 | color_t buttonface = UI_BUTTON_FACE_DISABLED; |
WiredHome | 1:dd07e1deec6c | 887 | color_t buttonshadow = UI_BUTTON_SHADOW_DISABLED; |
WiredHome | 1:dd07e1deec6c | 888 | |
WiredHome | 1:dd07e1deec6c | 889 | //lcd->fillrect(r, UI_ScopeBackColor); |
WiredHome | 1:dd07e1deec6c | 890 | if (pressed) { |
WiredHome | 1:dd07e1deec6c | 891 | if (enable) { |
WiredHome | 1:dd07e1deec6c | 892 | buttonface = UI_BUTTON_FACE_DN; |
WiredHome | 1:dd07e1deec6c | 893 | buttonshadow = UI_BUTTON_SHADOW; |
WiredHome | 1:dd07e1deec6c | 894 | } |
WiredHome | 1:dd07e1deec6c | 895 | lcd->fillrect(r, buttonface); |
WiredHome | 1:dd07e1deec6c | 896 | lcd->line(r.p1.x+0,r.p1.y+0, r.p2.x+0,r.p1.y+0, buttonshadow); // top border |
WiredHome | 1:dd07e1deec6c | 897 | lcd->line(r.p1.x+1,r.p1.y+1, r.p2.x+0,r.p1.y+1, buttonshadow); // top border |
WiredHome | 1:dd07e1deec6c | 898 | lcd->line(r.p1.x+2,r.p1.y+2, r.p2.x+0,r.p1.y+2, buttonshadow); // top border |
WiredHome | 1:dd07e1deec6c | 899 | lcd->line(r.p1.x+0,r.p1.y+0, r.p1.x+0,r.p2.y+0, buttonshadow); // left border |
WiredHome | 1:dd07e1deec6c | 900 | lcd->line(r.p1.x+1,r.p1.y+1, r.p1.x+1,r.p2.y+0, buttonshadow); // left border |
WiredHome | 1:dd07e1deec6c | 901 | lcd->line(r.p1.x+2,r.p1.y+2, r.p1.x+2,r.p2.y+0, buttonshadow); // left border |
WiredHome | 1:dd07e1deec6c | 902 | wave.p1.x = r.p1.x+5 + 2; wave.p1.y = r.p1.y + 5 + 2; |
WiredHome | 1:dd07e1deec6c | 903 | wave.p2.x = r.p2.x-5 + 2; wave.p2.y = r.p2.y - 5 + 2; |
WiredHome | 1:dd07e1deec6c | 904 | } else { |
WiredHome | 1:dd07e1deec6c | 905 | if (enable) { |
WiredHome | 1:dd07e1deec6c | 906 | buttonface = UI_BUTTON_FACE_UP; |
WiredHome | 1:dd07e1deec6c | 907 | buttonshadow = UI_BUTTON_SHADOW; |
WiredHome | 1:dd07e1deec6c | 908 | } |
WiredHome | 1:dd07e1deec6c | 909 | lcd->fillrect(r, buttonface); |
WiredHome | 1:dd07e1deec6c | 910 | lcd->line(r.p1.x+0,r.p2.y-0, r.p2.x-0,r.p2.y-0, buttonshadow); // bottom border |
WiredHome | 1:dd07e1deec6c | 911 | lcd->line(r.p1.x+0,r.p2.y-1, r.p2.x-1,r.p2.y-1, buttonshadow); // bottom border |
WiredHome | 1:dd07e1deec6c | 912 | lcd->line(r.p1.x+0,r.p2.y-2, r.p2.x-2,r.p2.y-2, buttonshadow); // bottom border |
WiredHome | 1:dd07e1deec6c | 913 | lcd->line(r.p2.x-0,r.p1.y+0, r.p2.x-0,r.p2.y-0, buttonshadow); // right border |
WiredHome | 1:dd07e1deec6c | 914 | lcd->line(r.p2.x-1,r.p1.y+0, r.p2.x-1,r.p2.y-1, buttonshadow); // right border |
WiredHome | 1:dd07e1deec6c | 915 | lcd->line(r.p2.x-2,r.p1.y+0, r.p2.x-2,r.p2.y-2, buttonshadow); // right border |
WiredHome | 1:dd07e1deec6c | 916 | wave.p1.x = r.p1.x+5 + 0; wave.p1.y = r.p1.y + 5 + 0; |
WiredHome | 1:dd07e1deec6c | 917 | wave.p2.x = r.p2.x-5 + 0; wave.p2.y = r.p2.y - 5 + 0; |
WiredHome | 1:dd07e1deec6c | 918 | } |
WiredHome | 1:dd07e1deec6c | 919 | switch (mode) { |
WiredHome | 1:dd07e1deec6c | 920 | case SG_SINE: |
WiredHome | 1:dd07e1deec6c | 921 | case SG_SQUARE: |
WiredHome | 1:dd07e1deec6c | 922 | case SG_TRIANGLE: |
WiredHome | 1:dd07e1deec6c | 923 | case SG_SAWTOOTH: |
WiredHome | 1:dd07e1deec6c | 924 | case SG_USER: |
WiredHome | 1:dd07e1deec6c | 925 | DrawWaveform(wave, mode, Black, 50.0); |
WiredHome | 1:dd07e1deec6c | 926 | break; |
WiredHome | 1:dd07e1deec6c | 927 | case SG_KEYPAD: |
WiredHome | 1:dd07e1deec6c | 928 | lcd->foreground(Black); |
WiredHome | 1:dd07e1deec6c | 929 | lcd->background(buttonface); |
WiredHome | 1:dd07e1deec6c | 930 | lcd->SetTextCursor((r.p1.x+r.p2.x)/2 - 4,r.p1.y + BTN_H/2 - 8); // 8x16 char |
WiredHome | 1:dd07e1deec6c | 931 | lcd->putc(UI_KeyLabels[label]); |
WiredHome | 1:dd07e1deec6c | 932 | break; |
WiredHome | 1:dd07e1deec6c | 933 | } |
WiredHome | 1:dd07e1deec6c | 934 | } |
WiredHome | 1:dd07e1deec6c | 935 | |
WiredHome | 1:dd07e1deec6c | 936 | void SignalGenDisplay::updateTextWindow(void) { |
WiredHome | 1:dd07e1deec6c | 937 | lcd->window(UI_DATA_ENTRY); |
WiredHome | 1:dd07e1deec6c | 938 | lcd->fillrect(UI_DATA_ENTRY, White); |
WiredHome | 1:dd07e1deec6c | 939 | lcd->foreground(Black); |
WiredHome | 1:dd07e1deec6c | 940 | lcd->background(White); |
WiredHome | 1:dd07e1deec6c | 941 | lcd->SetTextCursor(UI_DATA_ENTRY.p1.x+1,UI_DATA_ENTRY.p1.y+1); |
WiredHome | 1:dd07e1deec6c | 942 | lcd->printf("%21s", textBuffer); |
WiredHome | 1:dd07e1deec6c | 943 | lcd->window(); |
WiredHome | 1:dd07e1deec6c | 944 | } |
WiredHome | 1:dd07e1deec6c | 945 | |
WiredHome | 1:dd07e1deec6c | 946 | float SignalGenDisplay::rangelimit(float value, float min, float max) { |
WiredHome | 1:dd07e1deec6c | 947 | if (value < min) |
WiredHome | 1:dd07e1deec6c | 948 | return min; |
WiredHome | 1:dd07e1deec6c | 949 | else if (value > max) |
WiredHome | 1:dd07e1deec6c | 950 | return max; |
WiredHome | 1:dd07e1deec6c | 951 | else |
WiredHome | 1:dd07e1deec6c | 952 | return value; |
WiredHome | 1:dd07e1deec6c | 953 | } |
WiredHome | 1:dd07e1deec6c | 954 | |
WiredHome | 1:dd07e1deec6c | 955 | |
WiredHome | 1:dd07e1deec6c | 956 | void SignalGenDisplay::ShowMenu(void) { |
WiredHome | 1:dd07e1deec6c | 957 | if (Manuf) { |
WiredHome | 1:dd07e1deec6c | 958 | printf("\r\n%s v%s by %s build %s\r\n", ProgName, Ver, Manuf, Build); |
WiredHome | 1:dd07e1deec6c | 959 | } |
WiredHome | 1:dd07e1deec6c | 960 | printf(" Select: Signal:\r\n"); |
WiredHome | 1:dd07e1deec6c | 961 | printf(" S: Sine Wave d: Duty Cycle\r\n"); |
WiredHome | 1:dd07e1deec6c | 962 | printf(" Q: Square Wave f: Frequency\r\n"); |
WiredHome | 1:dd07e1deec6c | 963 | printf(" T: Triangle Wave p: Period\r\n"); |
WiredHome | 1:dd07e1deec6c | 964 | printf(" W: Sawtooth Wave v: Voltage\r\n"); |
WiredHome | 1:dd07e1deec6c | 965 | printf(" U: User Wave o: Offset\r\n"); |
WiredHome | 1:dd07e1deec6c | 966 | printf(" \r\n"); |
WiredHome | 1:dd07e1deec6c | 967 | printf(" 0-9 . - : Numeric entry\r\n"); |
WiredHome | 1:dd07e1deec6c | 968 | printf(" < > : Modify selected signal\r\n"); |
WiredHome | 1:dd07e1deec6c | 969 | printf(" <bs>: Backspace entry\r\n"); |
WiredHome | 1:dd07e1deec6c | 970 | printf(" <cr>: Save number\r\n"); |
WiredHome | 1:dd07e1deec6c | 971 | printf(" <esc>: Exit number entry\r\n"); |
WiredHome | 1:dd07e1deec6c | 972 | //printf(" 4: Reverse sawtoothSignal\r\n"); |
WiredHome | 1:dd07e1deec6c | 973 | } |
WiredHome | 1:dd07e1deec6c | 974 | |
WiredHome | 1:dd07e1deec6c | 975 | |
WiredHome | 1:dd07e1deec6c | 976 | void SignalGenDisplay::resetDataEntry(void) { |
WiredHome | 1:dd07e1deec6c | 977 | SG_Changes last = EntryMd; |
WiredHome | 1:dd07e1deec6c | 978 | printf("-> resetDataEntry()\r\n"); |
WiredHome | 1:dd07e1deec6c | 979 | EntryMd = SG_NONE; |
WiredHome | 1:dd07e1deec6c | 980 | switch (last) { |
WiredHome | 1:dd07e1deec6c | 981 | case SG_NONE: |
WiredHome | 1:dd07e1deec6c | 982 | updateDutyCycle(); |
WiredHome | 1:dd07e1deec6c | 983 | updateFrequency(); |
WiredHome | 1:dd07e1deec6c | 984 | updatePeriod(); |
WiredHome | 1:dd07e1deec6c | 985 | updateVoltage(); |
WiredHome | 1:dd07e1deec6c | 986 | updateOffset(); |
WiredHome | 1:dd07e1deec6c | 987 | lcd->fillrect(UI_DATA_ENTRY, UI_BackColor); |
WiredHome | 1:dd07e1deec6c | 988 | textBuffer[0] = '\0'; |
WiredHome | 1:dd07e1deec6c | 989 | textLen = 0; |
WiredHome | 1:dd07e1deec6c | 990 | break; |
WiredHome | 1:dd07e1deec6c | 991 | case SG_DUTY: |
WiredHome | 1:dd07e1deec6c | 992 | updateDutyCycle(); |
WiredHome | 1:dd07e1deec6c | 993 | break; |
WiredHome | 1:dd07e1deec6c | 994 | case SG_FREQ: |
WiredHome | 1:dd07e1deec6c | 995 | updateFrequency(); |
WiredHome | 1:dd07e1deec6c | 996 | break; |
WiredHome | 1:dd07e1deec6c | 997 | case SG_PERI: |
WiredHome | 1:dd07e1deec6c | 998 | updatePeriod(); |
WiredHome | 1:dd07e1deec6c | 999 | break; |
WiredHome | 1:dd07e1deec6c | 1000 | case SG_VOLT: |
WiredHome | 1:dd07e1deec6c | 1001 | updateVoltage(); |
WiredHome | 1:dd07e1deec6c | 1002 | break; |
WiredHome | 1:dd07e1deec6c | 1003 | case SG_OFFS: |
WiredHome | 1:dd07e1deec6c | 1004 | updateOffset(); |
WiredHome | 1:dd07e1deec6c | 1005 | break; |
WiredHome | 1:dd07e1deec6c | 1006 | default: |
WiredHome | 1:dd07e1deec6c | 1007 | break; |
WiredHome | 1:dd07e1deec6c | 1008 | } |
WiredHome | 1:dd07e1deec6c | 1009 | DrawKeypadEnabled(false); |
WiredHome | 1:dd07e1deec6c | 1010 | printf(" end resetDataEntry()\r\n"); |
WiredHome | 1:dd07e1deec6c | 1011 | } |