1 #ifndef TEST_SUITE_H
2 #define TEST_SUITE_H
3 
4 #include <PalmOS.h>
5 #include <stdint.h>
6 
7 #include "testSuiteConfig.h"
8 
9 /*defines*/
10 #define CODE_SECTION(codeSection) __attribute__((section(codeSection)))
11 #define ALIGN(size) __attribute__((aligned(size)))
12 #define HW_REG_ADDR(x) (0xFFFFF000 | (x))
13 
14 #define SHARED_DATA_BUFFER_SIZE 1000
15 
16 #define PalmOS35 sysMakeROMVersion(3, 5, 0, sysROMStageRelease, 0)
17 #define PalmOS50 sysMakeROMVersion(5, 0, 0, sysROMStageRelease, 0)
18 
19 #define buttonLeft   keyBitHard1
20 #define buttonRight  keyBitHard2
21 #define buttonUp     keyBitPageUp
22 #define buttonDown   keyBitPageDown
23 #define buttonBack   keyBitHard3
24 #define buttonSelect keyBitHard4
25 
26 #define TYPE_NULL  0x00
27 #define TYPE_BOOL  0x01
28 #define TYPE_UINT  0x02
29 #define TYPE_INT   0x03
30 #define TYPE_FLOAT 0x04
31 #define TYPE_PTR   0x05
32 #define LENGTH_0   0x00/*for null*/
33 #define LENGTH_1   0x10
34 #define LENGTH_8   0x20
35 #define LENGTH_16  0x30
36 #define LENGTH_32  0x40
37 #define LENGTH_64  0x50
38 #define LENGTH_PTR 0x60/*first half of 64bit value is length, second is pointer*/
39 #define LENGTH_ANY 0x70/*for pointers with a user defined end or no end*/
40 #define LENGTH_STR 0xF0/*for pointers to string*/
41 
42 /*types*/
43 typedef struct{
44    uint8_t  type;
45    uint64_t value;
46 }var;
47 
48 typedef var (*activity_t)(void);
49 
50 typedef struct{
51    char       name[TEST_NAME_LENGTH];
52    activity_t testFunction;
53 }test_t;
54 
55 /*variables*/
56 extern uint16_t palmButtons;
57 extern uint16_t palmButtonsLastFrame;
58 extern Boolean  isM515;
59 extern Boolean  isT3;
60 extern Boolean  skipFrameDelay;
61 extern uint8_t* sharedDataBuffer;
62 
63 /*
64 functions
65 no inline functions
66 old GCC versions have broken handling of inline functions where variables with the same name
67 inside the function and outside can result in the outside variable being written
68 c89 also doesnt support them
69 */
70 /*hardware buttons*/
71 #define getButton(button) ((palmButtons & button) != 0)
72 #define getButtonLastFrame(button) ((palmButtonsLastFrame & button) != 0)
73 #define getButtonChanged(button) ((palmButtons & button) != (palmButtonsLastFrame & button))
74 #define getButtonPressed(button) ((palmButtons & button) && !(palmButtonsLastFrame & button))
75 #define getButtonReleased(button) (!(palmButtons & button) && (palmButtonsLastFrame & button))
76 
77 /*var type operators*/
78 #define getVarType(x) (x.type & 0x0F)
79 #define getVarValue(x) (x.value)
80 #define getVarLength(x) (x.type & 0xF0)
81 #define getVarPointer(x) ((void*)(uint32_t)(x.value & 0xFFFFFFFF))
82 #define getVarDataLength(x) ((uint32_t)(x.value >> 32))
83 #define varsEqual(x, y) (x.type == y.type && x.value == y.value)
84 var     makeVar(uint8_t length, uint8_t type, uint64_t value);
85 
86 /*kernel memory access*/
87 #define readArbitraryMemory8(address) (*((volatile uint8_t*)(address)))
88 #define readArbitraryMemory16(address) (*((volatile uint16_t*)(address)))
89 #define readArbitraryMemory32(address) (*((volatile uint32_t*)(address)))
90 #define writeArbitraryMemory8(address, value) (*((volatile uint8_t*)(address)) = (value))
91 #define writeArbitraryMemory16(address, value) (*((volatile uint16_t*)(address)) = (value))
92 #define writeArbitraryMemory32(address, value) (*((volatile uint32_t*)(address)) = (value))
93 
94 /*graphics*/
95 void forceFrameRedraw(void);
96 
97 /*Palm OS library patches*/
98 char* floatToString(float data);
99 
100 /*execution state*/
101 void callSubprogram(activity_t activity);
102 void exitSubprogram(void);
103 void execSubprogram(activity_t activity);/*replace current subprogram with a new one*/
104 var getSubprogramReturnValue(void);
105 var getSubprogramArgs(void);
106 void setSubprogramArgs(var args);
107 var subprogramGetData(void);/*for subprograms to get data they stored*/
108 void subprogramSetData(var data);/*for subprograms to save data when calling a new subprogram*/
109 
110 /*special subprograms*/
111 var memoryAllocationError(void);
112 
113 #endif
114