Test function for CThunk class

Dependencies:   CThunk mbed

Committer:
meriac
Date:
Wed Aug 13 07:44:05 2014 +0000
Revision:
0:a6725b4373c6
Child:
1:2e8f85f1ed3e
Created demo firmware to show CThunk usage

Who changed what in which revision?

UserRevisionLine numberNew contents of line
meriac 0:a6725b4373c6 1 #include <mbed.h>
meriac 0:a6725b4373c6 2 #include <CThunk.h>
meriac 0:a6725b4373c6 3
meriac 0:a6725b4373c6 4 class CTest
meriac 0:a6725b4373c6 5 {
meriac 0:a6725b4373c6 6 public:
meriac 0:a6725b4373c6 7 CTest(void);
meriac 0:a6725b4373c6 8 void callback1(void);
meriac 0:a6725b4373c6 9 void callback2(void* context);
meriac 0:a6725b4373c6 10 void callback3(void* context);
meriac 0:a6725b4373c6 11
meriac 0:a6725b4373c6 12 uint32_t counter;
meriac 0:a6725b4373c6 13
meriac 0:a6725b4373c6 14 CThunk<CTest> thunk;
meriac 0:a6725b4373c6 15
meriac 0:a6725b4373c6 16 private:
meriac 0:a6725b4373c6 17 DigitalOut m_led;
meriac 0:a6725b4373c6 18 };
meriac 0:a6725b4373c6 19
meriac 0:a6725b4373c6 20 CTest::CTest(void)
meriac 0:a6725b4373c6 21 :m_led(LED1)
meriac 0:a6725b4373c6 22 {
meriac 0:a6725b4373c6 23 counter = 0;
meriac 0:a6725b4373c6 24 }
meriac 0:a6725b4373c6 25
meriac 0:a6725b4373c6 26 void CTest::callback1(void)
meriac 0:a6725b4373c6 27 {
meriac 0:a6725b4373c6 28 /* increment member variable */
meriac 0:a6725b4373c6 29 counter++;
meriac 0:a6725b4373c6 30 }
meriac 0:a6725b4373c6 31
meriac 0:a6725b4373c6 32 void CTest::callback2(void* context)
meriac 0:a6725b4373c6 33 {
meriac 0:a6725b4373c6 34 printf("Called with context value 0x%08X\n", context);
meriac 0:a6725b4373c6 35
meriac 0:a6725b4373c6 36 /* increment member variable */
meriac 0:a6725b4373c6 37 counter = (uint32_t)context;
meriac 0:a6725b4373c6 38 }
meriac 0:a6725b4373c6 39
meriac 0:a6725b4373c6 40 void CTest::callback3(void* context)
meriac 0:a6725b4373c6 41 {
meriac 0:a6725b4373c6 42 Ticker* sender = static_cast<Ticker*>(context);
meriac 0:a6725b4373c6 43
meriac 0:a6725b4373c6 44 printf("Called by ticker object 0x%08X: \n", sender);
meriac 0:a6725b4373c6 45
meriac 0:a6725b4373c6 46 m_led = !m_led;
meriac 0:a6725b4373c6 47 }
meriac 0:a6725b4373c6 48
meriac 0:a6725b4373c6 49
meriac 0:a6725b4373c6 50 int main(void)
meriac 0:a6725b4373c6 51 {
meriac 0:a6725b4373c6 52 Ticker tick;
meriac 0:a6725b4373c6 53 CThunkEntry entry;
meriac 0:a6725b4373c6 54 CTest test;
meriac 0:a6725b4373c6 55
meriac 0:a6725b4373c6 56 /* get 32 bit entry point pointer from thunk */
meriac 0:a6725b4373c6 57 entry = test.thunk;
meriac 0:a6725b4373c6 58
meriac 0:a6725b4373c6 59 /* TEST1: */
meriac 0:a6725b4373c6 60
meriac 0:a6725b4373c6 61 /* assign callback1 to thunk - no context needed */
meriac 0:a6725b4373c6 62 test.thunk = &CTest::callback1;
meriac 0:a6725b4373c6 63 /* call entry point */
meriac 0:a6725b4373c6 64 entry();
meriac 0:a6725b4373c6 65
meriac 0:a6725b4373c6 66
meriac 0:a6725b4373c6 67 /* TEST2: */
meriac 0:a6725b4373c6 68
meriac 0:a6725b4373c6 69 /* assign a context ... */
meriac 0:a6725b4373c6 70 test.thunk = 0xDEADBEEF;
meriac 0:a6725b4373c6 71 /* and switch callback to callback2 */
meriac 0:a6725b4373c6 72 test.thunk = &CTest::callback2;
meriac 0:a6725b4373c6 73 /* call entry point */
meriac 0:a6725b4373c6 74 entry();
meriac 0:a6725b4373c6 75
meriac 0:a6725b4373c6 76
meriac 0:a6725b4373c6 77 /* TEST3: */
meriac 0:a6725b4373c6 78
meriac 0:a6725b4373c6 79 /* try ticker */
meriac 0:a6725b4373c6 80 tick.attach(test.thunk, 1.0);
meriac 0:a6725b4373c6 81 /* assign a context ... */
meriac 0:a6725b4373c6 82 test.thunk = (void*)&tick;
meriac 0:a6725b4373c6 83 /* change the callback function */
meriac 0:a6725b4373c6 84 test.thunk = &CTest::callback3;
meriac 0:a6725b4373c6 85 /* call entry point */
meriac 0:a6725b4373c6 86 entry();
meriac 0:a6725b4373c6 87 }