example for the ssWi library

Dependencies:   ssWi

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?

UserRevisionLine numberNew 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 }