Penn Electric Racing / Mbed 2 deprecated SystemManagement

Dependencies:   mbed CANBuffer Watchdog MODSERIAL mbed-rtos xbeeRelay IAP

Fork of SystemManagement by Martin Deng

Committer:
pspatel321
Date:
Fri Oct 24 22:36:55 2014 +0000
Revision:
27:84885b1e5c45
Parent:
15:370d320a11a9
Re branch2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
martydd3 7:5f6e31faa08e 1 #include "PollSwitch.h"
martydd3 7:5f6e31faa08e 2
martydd3 7:5f6e31faa08e 3 LPC_pin PollPin[12]={p1_0, p1_1, p1_4, p1_8, p1_9, p1_10, p1_14, p1_15, p1_16, p1_17, p1_27, p1_28};
pspatel321 15:370d320a11a9 4 LPCDigitalOut poll[12]={ LPCDigitalIn(PollPin[0], PullDown),
pspatel321 14:8d4959210d4b 5 LPCDigitalIn(PollPin[1], PullDown),
pspatel321 27:84885b1e5c45 6 LPCDigitalOut(PollPin[2], PullDown),
martydd3 7:5f6e31faa08e 7 LPCDigitalOut(PollPin[3]),
martydd3 7:5f6e31faa08e 8 LPCDigitalOut(PollPin[4]),
martydd3 7:5f6e31faa08e 9 LPCDigitalOut(PollPin[5]),
martydd3 7:5f6e31faa08e 10 LPCDigitalOut(PollPin[6]),
martydd3 7:5f6e31faa08e 11 LPCDigitalOut(PollPin[7]),
martydd3 7:5f6e31faa08e 12 LPCDigitalOut(PollPin[8]),
martydd3 7:5f6e31faa08e 13 LPCDigitalOut(PollPin[9]),
martydd3 7:5f6e31faa08e 14 LPCDigitalOut(PollPin[10]),
martydd3 7:5f6e31faa08e 15 LPCDigitalOut(PollPin[11])};
martydd3 7:5f6e31faa08e 16
martydd3 7:5f6e31faa08e 17 CANBuffer *tx_Poll_Buffer;
martydd3 7:5f6e31faa08e 18
martydd3 7:5f6e31faa08e 19 union int_to_char {
martydd3 7:5f6e31faa08e 20 char ch[2];
martydd3 7:5f6e31faa08e 21 uint16_t i;
martydd3 7:5f6e31faa08e 22 } converter;
martydd3 7:5f6e31faa08e 23
martydd3 7:5f6e31faa08e 24 PollSwitch::PollSwitch(CANBuffer *can){
martydd3 7:5f6e31faa08e 25 tx_Poll_Buffer = can;
martydd3 8:ecf68db484af 26
martydd3 8:ecf68db484af 27 /*
martydd3 7:5f6e31faa08e 28 for(int i = 0; i < 12; i++){
martydd3 7:5f6e31faa08e 29 poll[i].mode(PullDown);
martydd3 7:5f6e31faa08e 30 }
martydd3 8:ecf68db484af 31 */
martydd3 7:5f6e31faa08e 32 }
martydd3 7:5f6e31faa08e 33
martydd3 7:5f6e31faa08e 34 uint16_t poll_switches(){
martydd3 7:5f6e31faa08e 35 uint16_t a = 0;
martydd3 7:5f6e31faa08e 36 int i = 0;
martydd3 7:5f6e31faa08e 37
martydd3 7:5f6e31faa08e 38 // if a low signal is detected, previous switch is broken
martydd3 7:5f6e31faa08e 39 for(i = 1; i < 12; i++){
martydd3 7:5f6e31faa08e 40 if(!poll[i].read())
martydd3 7:5f6e31faa08e 41 break;
martydd3 7:5f6e31faa08e 42 }
martydd3 7:5f6e31faa08e 43
martydd3 7:5f6e31faa08e 44 // bit on: switch may be broken
martydd3 7:5f6e31faa08e 45 a = 0 & (0xFF >> (i-1));
martydd3 7:5f6e31faa08e 46 return a;
martydd3 7:5f6e31faa08e 47 }
martydd3 7:5f6e31faa08e 48
martydd3 7:5f6e31faa08e 49 void update_poll(const void *arg){
martydd3 12:e0adb697fcdb 50 char data[2] = {0};
martydd3 7:5f6e31faa08e 51 while(1){
martydd3 7:5f6e31faa08e 52 converter.i = poll_switches();
martydd3 7:5f6e31faa08e 53 data[0] = converter.ch[0];
martydd3 7:5f6e31faa08e 54 data[1] = converter.ch[1];
martydd3 12:e0adb697fcdb 55 CANMessage txMessage(TX_POLL_ID, data, 2);
martydd3 7:5f6e31faa08e 56 tx_Poll_Buffer->txWrite(txMessage);
martydd3 7:5f6e31faa08e 57
martydd3 7:5f6e31faa08e 58 Thread::wait(100); //10 Hz update
martydd3 7:5f6e31faa08e 59 }
martydd3 7:5f6e31faa08e 60 }
martydd3 7:5f6e31faa08e 61
martydd3 7:5f6e31faa08e 62 void PollSwitch::start_update(){
martydd3 7:5f6e31faa08e 63 Thread update_thread(update_poll);
martydd3 7:5f6e31faa08e 64 }