4D display working with Gecko board STK3600

Dependents:   Genie_mbed_Gecko

Fork of 4dGENIE by christian b

mbed_genie.cpp

Committer:
chris215
Date:
2014-07-04
Revision:
6:f4d3977b0eae
Parent:
3:11c49c49cd1a
Child:
7:6edb20845684

File content as of revision 6:f4d3977b0eae:

#include "mbed.h"
#include "mbed_genie.h"

Mbed4dGenie::Mbed4dGenie(PinName TxPin,PinName RxPin, PinName resetpin) : _screen(TxPin,RxPin) , _reset(resetpin)
{
    //reset the 4d screen
    _reset = 0;
    _screen.baud(9600);
}
void Mbed4dGenie::Start()
{
    _reset = 1;
    wait(0.2);  //wait some time to let the lcd screen intialised itself
    //empty the uart buffer
    while(_screen.readable())
        _screen.getc();
        
    _t.start();
}

///////////////////////// genieWriteObject //////////////////////
//
// Write data to an object on the display
//
int8_t Mbed4dGenie::genieWriteObject (uint16_t object, uint16_t index, uint16_t data)
{
    uint16_t msb, lsb ;
    uint8_t checksum ;
    
    lsb = data&0xFF;
    msb = (data>>8) & 0xFF;
    
    _screen.putc(GENIE_WRITE_OBJ) ; 
    checksum  = GENIE_WRITE_OBJ ;
    _screen.putc(object) ;          
    checksum ^= object ;
    _screen.putc(index) ;           
    checksum ^= index ;
    _screen.putc(msb) ;             
    checksum ^= msb;
    _screen.putc(lsb) ;             
    checksum ^= lsb;
    _screen.putc(checksum) ;
    
       

     return  Mbed4dGenie::WaitForAnswer();    
}


int8_t Mbed4dGenie::WaitForAnswer()
{
    int8_t operation_result = 0; 
    
    long timeout = _t.read_ms() + TIMEOUT_PERIOD;
    long timerReading = 0;
    while(operation_result != GENIE_ACK && operation_result != ERROR_NAK && timerReading < timeout)
    {
        if(_screen.readable())
            operation_result = _screen.getc();
        timerReading = _t.read_ms();
    }
           
    if(operation_result == ERROR_NAK)
    {
        return ERROR_NONE;
    }
    else if(timerReading >= timeout)
    {   
        return ERROR_TIMEOUT;
    }
    return ERROR_NONE;
}