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