Program to control an accelerometer, motors and a rangefinder using the ScmRTOS ported to mbed. (Work in progress and buggy)

Dependencies:   mbed

Hexacopter/serial.h

Committer:
jberry
Date:
2010-11-01
Revision:
0:9b057566f9ee

File content as of revision 0:9b057566f9ee:

#ifndef SERIAL_H
#define SERIAL_H
#include <channels.h>
#include <Mutexes.h>
#include <processes.h>

#define UART1TX p9
#define UART1RX p10

Serial USB(USBTX, USBRX); // tx, rx
Serial XB(UART1TX, UART1RX); // tx, rx
Serial *OUT = &USB; //intially set to USB

extern BusOut leds;
 void USB_serial() //signal RTOS event that RXinterrupt has been asserted
{
    OS::TISRW ISRW;
    leds = 0x7;
    //char count = 0;
    //led3 = !led3;
    char temp = 0;    
    
    //leds = 0xa;
    if(true)//!Serial_Mutex.IsLocked())
    {
        //leds = 0xb;
        //Serial_Mutex.Lock();
        leds = 0xc;
        if(USB.readable())
        {
            temp = USB.getc(); 
            leds = 0xd;

            if(RX_channel.get_free_size() >0 ) //only push a character onto the channel if there is free space
            {    
                //OUT = &USB;              
                if(temp != '\n')
                {                    
                    RX_channel.push(temp);
                    leds = 0xe;                    
                }
                else if(temp == '\n')
                {                     
                    RX_channel.push('\0');                    
                }
            }
            else USB.getc(); //start discarding characters!*/
         leds = 0xf;
         leds = 0xa;            
        }   
        leds = 0xb;
       //Serial_Mutex.Unlock();
       //Serial_Mutex.Lock();
       //if(USB.writeable())
        //USB.putc(temp);
           //Serial_Mutex.Unlock();
       leds = 0x1;
     }
     else USB.getc(); //start discarding characters!
        
   leds = 0x9;
}

/*void XB_serial() 
{
    //led4 = !led4;
    char temp = 0;    
    OS::TISRW ISRW;
    if(!XB_Mutex.IsLocked())
    {
        XB_Mutex.Lock();
        while(XB.readable())
        {
            temp = XB.getc();  
            if(RX_channel.get_free_size() >0 ) //only push a character onto the channel if there is free space
            {                  
                OUT = &XB;
                if(temp != '\n')
                {                    
                    RX_channel.push(temp);                    
                 }
                else if(temp == '\n')
                {
                    OUT = &XB;                        
                    RX_channel.push('\0');                    
                }
            }
            else temp = XB.getc(); //otherwise, wait until another character is sent and try then
        }   
        XB_Mutex.Unlock();
     } 
         
   
}*/

#endif