
example for the ssWi library
main.cpp@4:989ea19b8fd2, 2012-10-11 (annotated)
- Committer:
- mariob
- Date:
- Thu Oct 11 06:49:40 2012 +0000
- Revision:
- 4:989ea19b8fd2
- Parent:
- 3:a0d27c04263e
- Child:
- 5:502371e99bdb
it seems to work
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mariob | 1:0c9911bd5715 | 1 | #include "mbed.h" |
mariob | 1:0c9911bd5715 | 2 | #include "rtos.h" |
mariob | 1:0c9911bd5715 | 3 | |
mariob | 1:0c9911bd5715 | 4 | #include "xbee.hpp" |
mariob | 1:0c9911bd5715 | 5 | #include "ssWiSocket.hpp" |
mariob | 1:0c9911bd5715 | 6 | |
mariob | 4:989ea19b8fd2 | 7 | #define READ_FUNCTION_MS 1000 |
mariob | 4:989ea19b8fd2 | 8 | #define WRITE_FUNCTION_MS 1000 |
mariob | 4:989ea19b8fd2 | 9 | |
mariob | 1:0c9911bd5715 | 10 | |
mariob | 1:0c9911bd5715 | 11 | struct Task { |
mariob | 1:0c9911bd5715 | 12 | PortID _id; |
mariob | 3:a0d27c04263e | 13 | int _ratio; |
mariob | 1:0c9911bd5715 | 14 | ssWiSocket* _s; |
mariob | 1:0c9911bd5715 | 15 | int _val; |
mariob | 1:0c9911bd5715 | 16 | |
mariob | 3:a0d27c04263e | 17 | Task (PortID id, int ratio, int value) { |
mariob | 1:0c9911bd5715 | 18 | _id = id; |
mariob | 3:a0d27c04263e | 19 | _ratio = ratio; |
mariob | 1:0c9911bd5715 | 20 | _s = ssWiSocket::createSocket(id); |
mariob | 1:0c9911bd5715 | 21 | _val = value; |
mariob | 1:0c9911bd5715 | 22 | } |
mariob | 1:0c9911bd5715 | 23 | }; |
mariob | 1:0c9911bd5715 | 24 | |
mariob | 4:989ea19b8fd2 | 25 | #define N_TASKS 4 |
mariob | 4:989ea19b8fd2 | 26 | Task *task_array[N_TASKS]; |
mariob | 3:a0d27c04263e | 27 | |
mariob | 1:0c9911bd5715 | 28 | |
mariob | 1:0c9911bd5715 | 29 | void readingFunction(const void* arg); |
mariob | 1:0c9911bd5715 | 30 | |
mariob | 1:0c9911bd5715 | 31 | void writingFunction(const void* arg); |
mariob | 1:0c9911bd5715 | 32 | |
mariob | 1:0c9911bd5715 | 33 | |
mariob | 4:989ea19b8fd2 | 34 | |
mariob | 4:989ea19b8fd2 | 35 | |
mariob | 1:0c9911bd5715 | 36 | int main() |
mariob | 1:0c9911bd5715 | 37 | { |
mariob | 1:0c9911bd5715 | 38 | printf("\n\r************* CONFIG *************\n\r"); |
mariob | 1:0c9911bd5715 | 39 | |
mariob | 1:0c9911bd5715 | 40 | //radio module |
mariob | 1:0c9911bd5715 | 41 | XBeeModule xbee(p9, p10, 102, 14); |
mariob | 1:0c9911bd5715 | 42 | XBeeAddress addr = xbee.getLocalAddress(); |
mariob | 1:0c9911bd5715 | 43 | printf("XBEE: src addr: %s,%s\n\r", addr.getHighAddr().c_str(), addr.getLowAddr().c_str()); |
mariob | 1:0c9911bd5715 | 44 | xbee.setDstAddress(XBeeBroadcastAddress()); |
mariob | 1:0c9911bd5715 | 45 | XBeeAddress addr2 = xbee.getDstAddress(); |
mariob | 1:0c9911bd5715 | 46 | printf("XBEE: dts addr: %s,%s\n\r", addr2.getHighAddr().c_str(), addr2.getLowAddr().c_str()); |
mariob | 4:989ea19b8fd2 | 47 | // printf("XBEE: channel: %d\n\r", xbee.getChannel()); |
mariob | 4:989ea19b8fd2 | 48 | // printf("XBEE: pan id: %d\n\r", xbee.getPanID()); |
mariob | 1:0c9911bd5715 | 49 | |
mariob | 1:0c9911bd5715 | 50 | //wireless network |
mariob | 4:989ea19b8fd2 | 51 | xbee.init(1, 2); |
mariob | 4:989ea19b8fd2 | 52 | |
mariob | 4:989ea19b8fd2 | 53 | srand(time(0)); |
mariob | 4:989ea19b8fd2 | 54 | |
mariob | 3:a0d27c04263e | 55 | |
mariob | 3:a0d27c04263e | 56 | |
mariob | 4:989ea19b8fd2 | 57 | printf("\n\r************* READ *************\n\r"); |
mariob | 4:989ea19b8fd2 | 58 | |
mariob | 4:989ea19b8fd2 | 59 | |
mariob | 4:989ea19b8fd2 | 60 | //tasks |
mariob | 4:989ea19b8fd2 | 61 | task_array[0] = new Task(10, 3, ((double)rand()/RAND_MAX)*20); |
mariob | 4:989ea19b8fd2 | 62 | task_array[1] = new Task(15, 5, ((double)rand()/RAND_MAX)*30); |
mariob | 4:989ea19b8fd2 | 63 | task_array[2] = new Task(100, 7, ((double)rand()/RAND_MAX)*25); |
mariob | 4:989ea19b8fd2 | 64 | task_array[3] = new Task(120, 4, ((double)rand()/RAND_MAX)*65); |
mariob | 1:0c9911bd5715 | 65 | |
mariob | 1:0c9911bd5715 | 66 | //thread |
mariob | 3:a0d27c04263e | 67 | Thread readingThread(readingFunction); |
mariob | 3:a0d27c04263e | 68 | Thread writingThread(writingFunction); |
mariob | 1:0c9911bd5715 | 69 | |
mariob | 1:0c9911bd5715 | 70 | printf("\n\r************* START *************\n\r"); |
mariob | 1:0c9911bd5715 | 71 | |
mariob | 3:a0d27c04263e | 72 | Thread::wait(osWaitForever); |
mariob | 1:0c9911bd5715 | 73 | } |
mariob | 1:0c9911bd5715 | 74 | |
mariob | 4:989ea19b8fd2 | 75 | |
mariob | 4:989ea19b8fd2 | 76 | |
mariob | 1:0c9911bd5715 | 77 | void readingFunction(const void* arg) |
mariob | 1:0c9911bd5715 | 78 | { |
mariob | 4:989ea19b8fd2 | 79 | int vals[N_TASKS]; |
mariob | 4:989ea19b8fd2 | 80 | for (int i=0; i<N_TASKS; i++) |
mariob | 4:989ea19b8fd2 | 81 | vals[i] = -1; |
mariob | 1:0c9911bd5715 | 82 | while(1) { |
mariob | 4:989ea19b8fd2 | 83 | for (int i=0; i<N_TASKS; i++) |
mariob | 4:989ea19b8fd2 | 84 | if (vals[i]!=task_array[i]->_s->read()) { |
mariob | 4:989ea19b8fd2 | 85 | vals[i] = task_array[i]->_s->read(); |
mariob | 4:989ea19b8fd2 | 86 | printf("Read[%d] = %d\n\r", task_array[i]->_id, |
mariob | 4:989ea19b8fd2 | 87 | task_array[i]->_s->read()); |
mariob | 4:989ea19b8fd2 | 88 | } |
mariob | 4:989ea19b8fd2 | 89 | Thread::wait(READ_FUNCTION_MS); |
mariob | 1:0c9911bd5715 | 90 | } |
mariob | 1:0c9911bd5715 | 91 | } |
mariob | 1:0c9911bd5715 | 92 | |
mariob | 1:0c9911bd5715 | 93 | void writingFunction(const void* arg) |
mariob | 1:0c9911bd5715 | 94 | { |
mariob | 3:a0d27c04263e | 95 | int x = 1; |
mariob | 1:0c9911bd5715 | 96 | while(1) { |
mariob | 4:989ea19b8fd2 | 97 | for (int i=0; i<N_TASKS; i++) |
mariob | 4:989ea19b8fd2 | 98 | if (x%(task_array[i]->_ratio)==0) { |
mariob | 4:989ea19b8fd2 | 99 | task_array[i]->_s->write(task_array[i]->_val++); |
mariob | 4:989ea19b8fd2 | 100 | printf("Write[%d] = %d\n\r", task_array[i]->_id, |
mariob | 4:989ea19b8fd2 | 101 | task_array[i]->_val); |
mariob | 4:989ea19b8fd2 | 102 | } |
mariob | 3:a0d27c04263e | 103 | x++; |
mariob | 4:989ea19b8fd2 | 104 | Thread::wait(WRITE_FUNCTION_MS); |
mariob | 1:0c9911bd5715 | 105 | } |
mariob | 1:0c9911bd5715 | 106 | } |