summaryrefslogtreecommitdiff
path: root/AT91SAM7S256/Source/c_ui.h
blob: e74dcbec73eba1c68d6085f8d4e4a5b1990d5b54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
//
// Programmer
//
// Date init       14.12.2004
//
// Reviser         $Author:: Dktochpe                                        $
//
// Revision date   $Date:: 10/21/08 12:08p                                   $
//
// Filename        $Workfile:: c_ui.h                                        $
//
// Version         $Revision:: 10                                            $
//
// Archive         $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_ui.h $
//
// Platform        C
//

#ifndef   C_UI
#define   C_UI

#define   DATALOGENABLED                1           // 1 == Datalog enable

#define   NO_OF_FEEDBACK_CHARS          12          // Chars left when bitmap also showed
#define   SIZE_OF_CURSOR                16          // Bitmap size of cursor  (header + 8x8 pixels)
#define   SIZE_OF_PORTBITMAP            11          // Bitmap size of port no (header + 3x8 pixels)
#define   NO_OF_STATUSICONS             4           // Status icons

#define   NO_OF_INTROBITMAPS            16          // Intro bitmaps
#define   INTRO_START_TIME              1000        // Intro startup time                     [mS]
#define   INTRO_SHIFT_TIME              100         // Intro inter bitmap time                [mS] 
#define   INTRO_STOP_TIME               1000        // Intro stop time                        [mS]
#define   INTRO_LOWBATT_TIME            2000        // Low battery show time at power up      [mS]

#define   MAX_VOLUME                    4           // Max volume in UI                       [cnt]

#define   CHECKBYTE                     0x78        // Used to validate NVData

#define   BATTERY_COUNT_TO_MV           13.848      // Battery count to mV factor             [mV/cnt]
#define   LOW_BATT_THRESHOLD            6           // Low batt conunts before warning

#define   BUTTON_DELAY_TIME             800         // Delay before first repeat              [mS]
#define   BUTTON_REPEAT_TIME            200         // Repeat time                            [mS]

#define   RUN_BITMAP_CHANGE_TIME        125         // Running bimap update time              [mS]
#define   RUN_STATUS_CHANGE_TIME        167         // Running status update time             [mS]

#define   DISPLAY_SHOW_ERROR_TIME       2500        // Error string show time                 [mS] 
#define   DISPLAY_SHOW_TIME             1500        // Min. response display time             [mS]
#define   DISPLAY_VIEW_UPDATE           200         // Display update time                    [mS]
#define   MIN_DISPLAY_UPDATE_TIME       50          // OBP min graphics update time           [mS]
#define   MIN_SENSOR_READ_TIME          100         // Time between sensor reads              [mS]

#define   ARM_WAIT_FOR_POWER_OFF        250         // Time for off command to execute        [mS]

#define   DISPLAY_SHOW_FILENAME_TIME    3000        // Datalog show saves as time             [mS]
#define   DATALOG_DEFAULT_SAMPLE_TIME   100L        // Default time between samples           [mS]

// Menu special flags

#define   MENU_SKIP_THIS_MOTHER_ID      0x00000001L // Used to seek next common menu (i0000000)
                                                    // Free
#define   MENU_ENTER_ACT_AS_EXIT        0x00000004L // Enter button acts as exit button
#define   MENU_BACK_TWICE               0x00000008L // Exit twice on exit button
#define   MENU_EXIT_ACT_AS_ENTER        0x00000010L // Exit button acts as enter button
#define   MENU_LEAVE_BACKGROUND         0x00000020L // Don't erase background at next menu
#define   MENU_EXIT_CALLS_WITH_FF       0x00000040L // Exit button calls function with MENU_EXIT
#define   MENU_EXIT_LEAVES_MENUFILE     0x00000080L // Exit leaves menu file
#define   MENU_INIT_CALLS_WITH_0        0x00000100L // Menu init calls with MENU_INIT
#define   MENU_LEFT_RIGHT_AS_CALL       0x00000200L // Left calls with MENU_LEFT and right with MENU_RIGHT
#define   MENU_ENTER_ONLY_CALLS         0x00000400L // Enter calls only it does not change menues
#define   MENU_EXIT_ONLY_CALLS          0x00000800L // Exit calls only it does not change menues
#define   MENU_AUTO_PRESS_ENTER         0x00001000L // Enter button is pressed automaticly
#define   MENU_ENTER_LEAVES_MENUFILE    0x00002000L // Enter leaves menufile
#define   MENU_INIT_CALLS               0x00004000L // Init calls instead of enter
#define   MENU_ACCEPT_INCOMMING_REQUEST 0x00008000L // Accept incomming BT connection request
#define   MENU_BACK_THREE_TIMES         0x00010000L // Exit three times on exit button
#define   MENU_EXIT_DISABLE             0x00020000L // Disable exit button
#define   MENU_EXIT_LOAD_POINTER        0x00040000L // Load item index on exit (0i000000)
#define   MENU_EXIT_CALLS               0x00080000L // Exit calls as enter
#define   MENU_INIT_CALLS_WITH_1        0x00100000L // Menu init calls with MENU_INIT
#define   MENU_EXIT_LOAD_MENU           0x00200000L // Exit loads next menu
#define   MENU_ONLY_BT_ON               0x00400000L // Only valid when bluecore is on
#define   MENU_ONLY_DATALOG_ENABLED     0x00800000L // Only valid when datalog is enabled

// Menu function call parameter

#define   MENU_SENSOR_EMPTY             0x01        // Empty
#define   MENU_SENSOR_SOUND_DB          0x02        // Sound sensor dB
#define   MENU_SENSOR_SOUND_DBA         0x03        // Sound sensor dBA
#define   MENU_SENSOR_LIGHT             0x04        // Light sensor with flood light
#define   MENU_SENSOR_LIGHT_AMB         0x05        // Light sensor without flood light
#define   MENU_SENSOR_TOUCH             0x06        // Touch sensor
#define   MENU_SENSOR_MOTOR_DEG         0x07        // Motor sensor degrees
#define   MENU_SENSOR_MOTOR_ROT         0x08        // Motor sensor rotations
#define   MENU_SENSOR_ULTRASONIC_IN     0x09        // Ultrasonic sensor inch
#define   MENU_SENSOR_ULTRASONIC_CM     0x0A        // Ultrasonic sensor cm
#define   MENU_SENSOR_IIC_TEMP_C        0x0B        // IIC temp sensor celcius
#define   MENU_SENSOR_IIC_TEMP_F        0x0C        // IIC temp sensor fahrenheit
#define   MENU_SENSOR_COLOR             0x0D        // Color sensor
#define   MENU_SENSOR_INVALID           0x0E        // Invalid

#define   MENU_PORT_EMPTY               0x11        // Port empty
#define   MENU_PORT_1                   0x12        // Port 1
#define   MENU_PORT_2                   0x13        // Port 2
#define   MENU_PORT_3                   0x14        // Port 3
#define   MENU_PORT_4                   0x15        // Port 4
#define   MENU_PORT_A                   0x16        // Port A
#define   MENU_PORT_B                   0x17        // Port B
#define   MENU_PORT_C                   0x18        // Port C
#define   MENU_PORT_INVALID             0x19        // Invalid

#define   MENU_ACTION_EMPTY             0x21        // Empty
#define   MENU_ACTION_FORWARD_1         0x22        // Forward until
#define   MENU_ACTION_FORWARD_2         0x23        // Forward 5
#define   MENU_ACTION_BACK_LEFT_2       0x24        // Back left 2
#define   MENU_ACTION_TURN_LEFT_1       0x25        // Turn left until
#define   MENU_ACTION_TURN_LEFT_2       0x26        // Turn left 2
#define   MENU_ACTION_BACK_RIGHT_1      0x27        // Back right until
#define   MENU_ACTION_TURN_RIGHT_1      0x28        // Turn right until
#define   MENU_ACTION_TURN_RIGHT_2      0x29        // Turn right 2
#define   MENU_ACTION_BACK_LEFT_1       0x2A        // Back left until
#define   MENU_ACTION_TONE_1            0x2B        // Tone 1
#define   MENU_ACTION_TONE_2            0x2C        // Tone 2
#define   MENU_ACTION_BACKWARD_1        0x2D        // Backward until
#define   MENU_ACTION_BACKWARD_2        0x2E        // Backward 5
#define   MENU_ACTION_BACK_RIGHT_2      0x2F        // Back right 2
#define   MENU_ACTION_INVALID           0x30        // Invalid

#define   MENU_WAIT_EMPTY               0x41        // Empty
#define   MENU_WAIT_LIGHT               0x42        // Light
#define   MENU_WAIT_SEEK_OBJ            0x43        // Seek obj.
#define   MENU_WAIT_SOUND               0x44        // Sound
#define   MENU_WAIT_TOUCH               0x45        // Touch
#define   MENU_WAIT_1                   0x46        // Wait 2
#define   MENU_WAIT_2                   0x47        // Wait 5
#define   MENU_WAIT_3                   0x48        // Wait 10
#define   MENU_WAIT_DARK                0x49        // Dark
#define   MENU_WAIT_INVALID             0x4A        // Invalid

#define   MENU_INIT                     0x00        // Init
#define   MENU_INIT_ALTERNATIVE         0x01        // Init alternative
#define   MENU_DRAW                     0xE9        // Draw
#define   MENU_OFF                      0xEA        // Off
#define   MENU_ON                       0xEB        // On
#define   MENU_OPEN_STREAM              0xEC        // Open stream
#define   MENU_OVERWRITE                0xED        // Overwrite file
#define   MENU_CALCULATE                0xEE        // Calculate
#define   MENU_ENTER                    0xEF        // Enter
#define   MENU_DISCONNECT               0xF0        // Disconnect BT  
#define   MENU_DELETE                   0xF1        // Delete  
#define   MENU_SELECT                   0xF2        // Select
#define   MENU_RUN_SILENT               0xF3        // Run without graphics
#define   MENU_TOGGLE                   0xF4        // Toggle
#define   MENU_CONNECT                  0xF5        // Connect BT
#define   MENU_UPDATE                   0xF6        // Update
#define   MENU_TEXT                     0xF7        // Text
#define   MENU_RUN                      0xF8        // Run
#define   MENU_SEND                     0xF9        // Send
#define   MENU_SAVE                     0xFA        // Save
#define   MENU_STOP                     0xFB        // Stop
#define   MENU_LOOP                     0xFC        // Loop
#define   MENU_LEFT                     0xFD        // Left
#define   MENU_RIGHT                    0xFE        // Right
#define   MENU_EXIT                     0xFF        // Exit

#define   DATALOGPORTS                  (MENU_PORT_INVALID - MENU_PORT_EMPTY - 1)
#define   MAX_DATALOGS                  9999        // Highest datalog file number
#define   DATALOGBUFFERSIZE             25          // Largest number of characters buffered before flash write

#define   MENULEVELS                    10          // Max no of levels in one file (8 + 2 virtual)
#define   MENUFILELEVELS                3           // Max deept in menu file pool

typedef   struct                                    // VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevels[VarsUi.MenuLevel].
{                                                   
  ULONG   Id;                                       // Menu item id
  UBYTE   *IconText;                                // Menu item icon text  pointer
  ULONG   SpecialFlags;                             // Menu item special behaivor
  UBYTE   IconImageNo;                              // Menu item icon image no
  UBYTE   FunctionNo;                               // Menu item function call no   (0 = none)
  UBYTE   Parameter;                                // Menu item function call parameter
  UBYTE   NextFileNo;                               // Menu item next menu file no  (0 = none)
  UBYTE   NextMenuNo;                               // Menu item next menu no       (0 = none)

  UBYTE   ItemIndex;                                // Menu item index on level
  UBYTE   Items;                                    // Menu items on level
}
MENULEVEL;

typedef   struct
{
  MENULEVEL MenuLevels[MENULEVELS];                 // See above
  UBYTE   FileId;                                   // VarsUi.MenuFiles[VarsUi.MenuFileLevel].FileId
  UBYTE   MenuLevel;                                // VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevel
}
MENUFILE;

typedef   struct
{
  UBYTE   CheckByte;                                // Check byte (CHECKBYTE)
  UBYTE   DatalogEnabled;                           // Datalog enabled flag (0 = no)
  UBYTE   VolumeStep;                               // Volume step (0 - MAX_VOLUME)
  UBYTE   PowerdownCode;                            // Power down code
  UWORD   DatalogNumber;                            // Datalog file number (0 - MAX_DATALOGS)
}
NVDATA;

typedef   struct
{
  UBYTE   StatusText[STATUSTEXT_SIZE + 1];          // RCX name
  UBYTE   Initialized;                              // Ui init done
  UWORD   SleepTimer;                               // Sleep timer

  // Menu system
  MENUFILE  MenuFiles[MENUFILELEVELS];              // Menu file array
  MENUFILE  *pMenuFile;                             // Actual menu file pointer
  MENULEVEL *pMenuLevel;                            // Actual menu item on level, pointer
  MENUITEM  *pMenuItem;                             // Actual menu item in menu flash file
  UBYTE     MenuFileLevel;                          // Actual menu file level
  UBYTE   Function;                                 // Running function (0 = none)
  UBYTE   Parameter;                                // Parameter for running function
  UBYTE   SecondTime;                               // Second time flag
  UBYTE   EnterOnlyCalls;                           // Enter button only calls
  UBYTE   ExitOnlyCalls;                            // Exit button only calls
  UWORD   ButtonTimer;                              // Button repeat timer
  UWORD   ButtonTime;                               // Button repeat time
  UBYTE   ButtonOld;                                // Button old state

  // Update status
  UWORD   UpdateCounter;                            // Update counter
  UBYTE   Running;                                  // Running pointer
  UBYTE   BatteryToggle;                            // Battery flash toggle flag
  UBYTE   NewStatusIcons[NO_OF_STATUSICONS];        // New status icons (used to detect changes)

  // Low battery voltage
  UBYTE   *LowBattSavedBitmap;                      // Low battery overwritten bitmap placeholder
  UBYTE   LowBatt;                                  // Low battery volatge flag
  UBYTE   LowBattHasOccured;                        // Low battery voltage has occured
  UBYTE   LowBattSavedState;                        // Low battery current state placeholder

  // General used variables
  UBYTE   *MenuIconTextSave;                        // Menu icon text save

  UBYTE   *pTmp;                                    // General UBYTE pointer
  ULONG   TmpLength;                                // General filelength  (used in filelist)
  SWORD   TmpHandle;                                // General filehandle  (used in filelist)

  SWORD   Timer;                                    // General tmp purpose timer
  SWORD   ReadoutTimer;                             // General read out timer
  UBYTE   Tmp;                                      // General UBYTE
  UBYTE   FileType;                                 // General file type
  UBYTE   State;                                    // General tmp purpose state
  UBYTE   Pointer;                                  // General tmp purpose pointer
  UBYTE   Counter;                                  // General tmp purpose counter
  UBYTE   Cursor;                                   // General cursor
  UBYTE   SelectedSensor;                           // General used for selected sensor
  UBYTE   SelectedPort;                             // General used for selected port
  UBYTE   SensorReset;
  UBYTE   SensorState;                              // Sensor state (reset, ask, read)
  SWORD   SensorTimer;                              // Timer used to time sensor states
  UBYTE   NextState;

  UBYTE   SelectedFilename[FILENAME_LENGTH + 1];    // Selected file name
  UBYTE   FilenameBuffer[FILENAME_LENGTH + 1];      // General filename buffer
  UBYTE   SearchFilenameBuffer[FILENAME_LENGTH + 1];// General filename buffer
  UBYTE   DisplayBuffer[DISPLAYLINE_LENGTH + 1];    // General purpose display buffer

  UBYTE   PortBitmapLeft[SIZE_OF_PORTBITMAP];       // Port no bitmap for left icon
  UBYTE   PortBitmapCenter[SIZE_OF_PORTBITMAP];     // Port no bitmap for center icon
  UBYTE   PortBitmapRight[SIZE_OF_PORTBITMAP];      // Port no bitmap for right icon

  // Find no of files and find name for file no
  ULONG   FNOFLength;                               // Length
  SWORD   FNOFHandle;                               // Handle
  UBYTE   FNOFState;                                // State
  UBYTE   FNOFSearchBuffer[FILENAME_LENGTH + 1];    // Search buffer
  UBYTE   FNOFNameBuffer[FILENAME_LENGTH + 1];      // File name buffer
  UBYTE   FNOFFileNo;                               // File no

  // File list
  UBYTE   FileCenter;                               // File center
  UBYTE   FileLeft;                                 // File left
  UBYTE   FileRight;                                // File right
  UBYTE   NoOfFiles;                                // No of files

  // On brick programming menu
  UBYTE   ProgramSteps[ON_BRICK_PROGRAMSTEPS];      // On brick programming steps
  UBYTE   ProgramStepPointer;                       // On brick programming step pointer
  UBYTE   CursorTmp[SIZE_OF_CURSOR];                // On brick programming cursor
  UBYTE   FileHeader[FILEHEADER_LENGTH];            // File header for programs
  UBYTE   *FeedBackText;                            // Program end text
  UWORD   OBPTimer;                                 // Graphic update timer

  // BT search menu
  UBYTE   NoOfDevices;                              // BT search no of devices found
  UBYTE   NoOfNames;                                // BT search no of names found
  UBYTE   SelectedDevice;                           // BT selected device
  UBYTE   SelectedSlot;                             // BT selected slot

  // BT device list menu
  UBYTE   DevicesKnown;                             // BT device known flag
  UBYTE   Devices;                                  // BT devices
  UBYTE   DeviceLeft;                               // BT device left
  UBYTE   DeviceCenter;                             // BT device center
  UBYTE   DeviceRight;                              // BT device right
  UBYTE   DeviceType;                               // BT device type

  // BT connect Menu
  UBYTE   Slots;                                    // BT connect no of slots
  UBYTE   SlotLeft;                                 // BT connect
  UBYTE   SlotCenter;                               // BT connect
  UBYTE   SlotRight;                                // BT connect

  // Get user string
  UBYTE   GUSTmp;                                   // Seperat tmp for "Get user string"
  UBYTE   GUSState;                                 // Seperat state for "Get user string"
  UBYTE   GUSNoname;                                // No user entry
  UBYTE   UserString[DISPLAYLINE_LENGTH + 1];       // User string
  UBYTE   DisplayText[DISPLAYLINE_LENGTH + 1];      // Display buffer
  SBYTE   FigurePointer;                            // Figure cursor
  UBYTE   GUSCursor;                                // User string cursor

  // Connect request
  ULONG   CRPasskey;                                // Passkey to fake wrong pin code
  UBYTE   CRState;                                  // Seperate state for "Connect request"
  UBYTE   CRTmp;                                    // Seperate tmp for "Connect request"
  
  // Run files
  UBYTE   *RunIconSave;                             // Menu center icon save
  UWORD   RunTimer;                                 // Bitmap change timer
  UBYTE   RunBitmapPointer;                         // Bitmap pointer
  
  // Delete files
  UBYTE   SelectedType;                             // Type of selected files for delete

  // View
  SLONG   ViewSampleValue;                          // Latch for sensor values
  UBYTE   ViewSampleValid;                          // Latch for sensor valid

  // Datalog
  ULONG   DatalogOldTick;
  ULONG   DatalogRTC;                               // Real time in mS
  ULONG   DatalogTimer;                             // Logging main timer
  ULONG   DatalogSampleTime;                        // Logging sample time
  ULONG   DatalogSampleTimer;                       // Logging sample timer
  SLONG   DatalogSampleValue[DATALOGPORTS];         // Latch for sensor values
  UBYTE   DatalogSampleValid[DATALOGPORTS];         // Latch for sensor valid
  UWORD   DatalogError;                             // Error code
  UBYTE   DatalogPort[DATALOGPORTS];                // Logging sensor
  UBYTE   Update;                                   // Update icons flag

  // NV storage
  ULONG   NVTmpLength;                              // Non volatile filelength
  SWORD   NVTmpHandle;                              // Non volatile filehandle
  UBYTE   NVFilename[FILENAME_LENGTH + 1];          // Non volatile file name
  NVDATA  NVData;                                   // Non volatile data

  // Feedback
  UBYTE   *FBText;                                  // Seperate text pointer for feedback
  UWORD   FBTimer;                                  // Seperate timer for feedback
  UBYTE   FBState;                                  // Seperate state for feedback
  UBYTE   FBPointer;                                // Seperate pointer for feedback

  // BT command
  UBYTE   BTIndex;                                  // List index
  UBYTE   BTTmpIndex;                               // Tmp list index
  UBYTE   BTCommand;                                // Last lached BT command
  UBYTE   BTPar1;                                   // Last lached BT command parameter 1
  UBYTE   BTPar2;                                   // Last lached BT command parameter 2
  UWORD   BTResult;                                 // Last lached BT command result

  // Error display
  UBYTE   ErrorTimer;                               // Error show timer  
  UBYTE   ErrorFunction;                            // Error latched function
  UBYTE   ErrorParameter;                           // Error latched parameter
  UBYTE   ErrorState;                               // Error latched state
  UBYTE   ErrorString[DISPLAYLINE_LENGTH + 1];      // Error string
}VARSUI;


void      cUiInit(void* pHeader);                   // Init controller
void      cUiCtrl(void);                            // Run  controller
void      cUiExit(void);                            // Exit controller

extern    const HEADER cUi;

#endif