System Management code

Dependencies:   CANBuffer mbed SystemManagement mbed-rtos

Dependents:   SystemManagement

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers PollSwitch.cpp Source File

PollSwitch.cpp

00001 #include "PollSwitch.h"
00002 
00003 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};
00004 LPCDigitalOut poll[12]={    LPCDigitalOut(PollPin[0]),
00005                             LPCDigitalOut(PollPin[1]),
00006                             LPCDigitalOut(PollPin[2]),
00007                             LPCDigitalOut(PollPin[3]),
00008                             LPCDigitalOut(PollPin[4]),
00009                             LPCDigitalOut(PollPin[5]),
00010                             LPCDigitalOut(PollPin[6]),
00011                             LPCDigitalOut(PollPin[7]),
00012                             LPCDigitalOut(PollPin[8]),
00013                             LPCDigitalOut(PollPin[9]),
00014                             LPCDigitalOut(PollPin[10]),
00015                             LPCDigitalOut(PollPin[11])};
00016  
00017 CANBuffer *tx_Poll_Buffer;
00018 
00019 union int_to_char {
00020     char ch[2];
00021     uint16_t i;                       
00022 } converter;
00023                        
00024 PollSwitch::PollSwitch(CANBuffer *can){
00025     tx_Poll_Buffer = can;
00026     for(int i = 0; i < 12; i++){
00027         poll[i].mode(PullDown);    
00028     }
00029 }
00030 
00031 uint16_t poll_switches(){
00032     uint16_t a = 0;
00033     int i = 0;
00034     
00035     // if a low signal is detected, previous switch is broken
00036     for(i = 1; i < 12; i++){
00037         if(!poll[i].read())
00038             break;
00039     }
00040     
00041     // bit on: switch may be broken
00042     a = 0 & (0xFF >> (i-1));
00043     return a;
00044 }
00045 
00046 void update_poll(const void *arg){
00047     char data[4] = {0};
00048     while(1){
00049         converter.i = poll_switches();
00050         data[0] = converter.ch[0];
00051         data[1] = converter.ch[1];
00052         CANMessage txMessage(TX_POLL_ID, data, 4);
00053         tx_Poll_Buffer->txWrite(txMessage);
00054         
00055         Thread::wait(100);      //10 Hz update
00056     }
00057 }
00058 
00059 void PollSwitch::start_update(){
00060     Thread update_thread(update_poll);   
00061 }