example for the ssWi library

Dependencies:   ssWi

Committer:
mariob
Date:
Wed Mar 06 09:11:18 2013 +0000
Revision:
5:502371e99bdb
Parent:
4:989ea19b8fd2
Child:
6:0d434f4c83bd
MB

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 5:502371e99bdb 47 printf("XBEE: channel: %d\n\r", xbee.getChannel());
mariob 5:502371e99bdb 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 4:989ea19b8fd2 55 printf("\n\r************* READ *************\n\r");
mariob 4:989ea19b8fd2 56
mariob 4:989ea19b8fd2 57 //tasks
mariob 4:989ea19b8fd2 58 task_array[0] = new Task(10, 3, ((double)rand()/RAND_MAX)*20);
mariob 4:989ea19b8fd2 59 task_array[1] = new Task(15, 5, ((double)rand()/RAND_MAX)*30);
mariob 4:989ea19b8fd2 60 task_array[2] = new Task(100, 7, ((double)rand()/RAND_MAX)*25);
mariob 4:989ea19b8fd2 61 task_array[3] = new Task(120, 4, ((double)rand()/RAND_MAX)*65);
mariob 1:0c9911bd5715 62
mariob 1:0c9911bd5715 63 //thread
mariob 3:a0d27c04263e 64 Thread readingThread(readingFunction);
mariob 3:a0d27c04263e 65 Thread writingThread(writingFunction);
mariob 1:0c9911bd5715 66
mariob 1:0c9911bd5715 67 printf("\n\r************* START *************\n\r");
mariob 1:0c9911bd5715 68
mariob 3:a0d27c04263e 69 Thread::wait(osWaitForever);
mariob 1:0c9911bd5715 70 }
mariob 1:0c9911bd5715 71
mariob 4:989ea19b8fd2 72
mariob 4:989ea19b8fd2 73
mariob 1:0c9911bd5715 74 void readingFunction(const void* arg)
mariob 1:0c9911bd5715 75 {
mariob 4:989ea19b8fd2 76 int vals[N_TASKS];
mariob 4:989ea19b8fd2 77 for (int i=0; i<N_TASKS; i++)
mariob 4:989ea19b8fd2 78 vals[i] = -1;
mariob 1:0c9911bd5715 79 while(1) {
mariob 4:989ea19b8fd2 80 for (int i=0; i<N_TASKS; i++)
mariob 4:989ea19b8fd2 81 if (vals[i]!=task_array[i]->_s->read()) {
mariob 4:989ea19b8fd2 82 vals[i] = task_array[i]->_s->read();
mariob 4:989ea19b8fd2 83 printf("Read[%d] = %d\n\r", task_array[i]->_id,
mariob 4:989ea19b8fd2 84 task_array[i]->_s->read());
mariob 4:989ea19b8fd2 85 }
mariob 4:989ea19b8fd2 86 Thread::wait(READ_FUNCTION_MS);
mariob 1:0c9911bd5715 87 }
mariob 1:0c9911bd5715 88 }
mariob 1:0c9911bd5715 89
mariob 1:0c9911bd5715 90 void writingFunction(const void* arg)
mariob 1:0c9911bd5715 91 {
mariob 3:a0d27c04263e 92 int x = 1;
mariob 1:0c9911bd5715 93 while(1) {
mariob 4:989ea19b8fd2 94 for (int i=0; i<N_TASKS; i++)
mariob 4:989ea19b8fd2 95 if (x%(task_array[i]->_ratio)==0) {
mariob 4:989ea19b8fd2 96 task_array[i]->_s->write(task_array[i]->_val++);
mariob 4:989ea19b8fd2 97 printf("Write[%d] = %d\n\r", task_array[i]->_id,
mariob 4:989ea19b8fd2 98 task_array[i]->_val);
mariob 4:989ea19b8fd2 99 }
mariob 3:a0d27c04263e 100 x++;
mariob 4:989ea19b8fd2 101 Thread::wait(WRITE_FUNCTION_MS);
mariob 1:0c9911bd5715 102 }
mariob 1:0c9911bd5715 103 }